@datarailsshared/datarailsshared 1.6.383 → 1.6.387

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.
@@ -2,14 +2,14 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostBinding, inj
2
2
  import { CommonModule } from '@angular/common';
3
3
  import { FormBuilder, FormsModule, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';
4
4
  import { CalendarView, DatePickerPeriodPosition, TimeframeOption } from '../../../models/datePicker';
5
- import { DateAdapter, MAT_DATE_LOCALE, MatNativeDateModule } from '@angular/material/core';
5
+ import { DateAdapter, MAT_DATE_LOCALE } from '@angular/material/core';
6
6
  import { DrDatePickerService } from '../services/dr-date-picker.service';
7
7
  import { Subject, combineLatest, BehaviorSubject } from 'rxjs';
8
8
  import { distinctUntilChanged, filter, map, shareReplay, startWith, takeUntil, tap } from 'rxjs/operators';
9
9
  import { DrDatePickerCustomHeaderComponent } from '../dr-date-picker_custom-header/dr-date-picker_custom-header.component';
10
10
  import { MAT_DATE_RANGE_SELECTION_STRATEGY, MatDatepickerModule, } from '@angular/material/datepicker';
11
11
  import moment from 'moment';
12
- import { MAT_MOMENT_DATE_ADAPTER_OPTIONS, MatMomentDateModule, MomentDateAdapter, } from '@angular/material-moment-adapter';
12
+ import { MAT_MOMENT_DATE_ADAPTER_OPTIONS, MomentDateAdapter, } from '@angular/material-moment-adapter';
13
13
  import { WeekSelectionStrategy } from '../services/week-selection-strategy';
14
14
  import { DrButtonComponent } from '../../button/button.component';
15
15
  import { DrDatePickerFormatDirective } from '../directives/dr-date-picker-format.directive';
@@ -421,9 +421,7 @@ export class DrDatePickerComponent {
421
421
  i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(2, 3, ctx.datePickerService.timeframe$) === ctx.timeframeOption.WEEK);
422
422
  i0.ɵɵadvance(2);
423
423
  i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(4, 5, ctx.datePickerService.timeframe$) !== ctx.timeframeOption.WEEK);
424
- } }, dependencies: [CommonModule, i3.NgIf, i3.AsyncPipe, FormsModule, i4.DefaultValueAccessor, i4.NgControlStatus, i4.NgControlStatusGroup, i4.NgModel, ReactiveFormsModule, i4.FormGroupDirective, i4.FormControlName, MatDatepickerModule, i5.MatDatepicker, i5.MatDatepickerInput, i5.MatDateRangeInput, i5.MatStartDate, i5.MatEndDate, i5.MatDateRangePicker, MatNativeDateModule,
425
- MatMomentDateModule,
426
- DrButtonComponent,
424
+ } }, dependencies: [CommonModule, i3.NgIf, i3.AsyncPipe, FormsModule, i4.DefaultValueAccessor, i4.NgControlStatus, i4.NgControlStatusGroup, i4.NgModel, ReactiveFormsModule, i4.FormGroupDirective, i4.FormControlName, MatDatepickerModule, i5.MatDatepicker, i5.MatDatepickerInput, i5.MatDateRangeInput, i5.MatStartDate, i5.MatEndDate, i5.MatDateRangePicker, DrButtonComponent,
427
425
  DrDatePickerFormatDirective], styles: ["[_nghost-%COMP%]{position:relative;width:100%;display:flex;flex-direction:row;min-height:32px;height:32px;font-size:14px;font-family:Poppins,sans-serif;background-color:#fff;border:1px solid #9ea1aa;border-radius:6px;color:#333;overflow:hidden;outline:none;cursor:pointer}.use-button-picker[_nghost-%COMP%]{border:none}[_nghost-%COMP%]:hover{border-color:#9ea1aa}.active[_nghost-%COMP%], [_nghost-%COMP%]:focus-within{border-color:#4646ce!important;color:#333}.disabled[_nghost-%COMP%]{pointer-events:none;border:1px solid #aeabac;background:#f0f1f4;color:#aeabac}.disabled[_nghost-%COMP%]:after{color:#aeabac}.ng-valid.ng-dirty[_nghost-%COMP%]{border-color:#037c5a}.ng-invalid.ng-dirty[_nghost-%COMP%]:not(:focus-within){border-color:#bf1d30!important}.ng-untouched.ng-valid[_nghost-%COMP%]{border-color:#9ea1aa}.use-button-picker[_nghost-%COMP%]:after{display:none}[_nghost-%COMP%]:not(.use-button-picker):after, [_nghost-%COMP%]:not(.use-button-picker):before{position:absolute;display:flex;border-color:#6d6e6f transparent transparent;color:#6d6e6f}[_nghost-%COMP%]:not(.use-button-picker):after{font-family:DataRails!important;content:var(--dr-icon-arrow-down, \"\\ea18\");font-size:24px;color:#6d6e6f;top:0;bottom:0;right:8px;pointer-events:none;position:absolute;display:flex;align-items:center;justify-content:center}[_nghost-%COMP%] i[_ngcontent-%COMP%]{display:flex;align-items:center;position:absolute;color:#6d6e6f;left:8px;top:0;bottom:0}[_nghost-%COMP%] input[_ngcontent-%COMP%]{display:flex;flex-grow:1;height:100%;border:none;text-align:left;padding-left:35px;padding-right:25px;cursor:pointer!important;outline:none}[_nghost-%COMP%] input.when-quarter[_ngcontent-%COMP%]{position:absolute;visibility:hidden}[_nghost-%COMP%] input[_ngcontent-%COMP%]:disabled{border:none;color:#aeabac;background:transparent}[_nghost-%COMP%] input[_ngcontent-%COMP%]::-webkit-search-decoration, [_nghost-%COMP%] input[_ngcontent-%COMP%]::-webkit-search-cancel-button, [_nghost-%COMP%] input[_ngcontent-%COMP%]::-webkit-search-results-button, [_nghost-%COMP%] input[_ngcontent-%COMP%]::-webkit-search-results-decoration{-webkit-appearance:none}[_nghost-%COMP%] input[_ngcontent-%COMP%]::placeholder{color:#6d6e6f;font-size:14px;line-height:18px}[_nghost-%COMP%] input.hidden-calendar-input[_ngcontent-%COMP%]{width:0;height:0;padding:0}[_nghost-%COMP%] .datepicker-button[_ngcontent-%COMP%]{width:100%}[_nghost-%COMP%] .range-input[_ngcontent-%COMP%]{position:absolute;height:0;width:0;bottom:0;left:0;z-index:-1} .mat-datepicker-popup .dr-week-datepicker{min-width:min(400px,100vw)!important} .mat-datepicker-popup .dr-week-datepicker .mat-calendar-body-today{background:#f2f2fb;color:#4646ce;border:none;font-weight:600} .mat-datepicker-popup .dr-week-datepicker .mat-calendar-body-cell-preview{border:none} .mat-datepicker-popup .dr-week-datepicker .mat-calendar-body-range-start .mat-calendar-body-cell-preview, .mat-datepicker-popup .dr-week-datepicker .mat-calendar-body-preview-start .mat-calendar-body-cell-preview{left:5%;width:95%;border-top-left-radius:40px;border-bottom-left-radius:40px} .mat-datepicker-popup .dr-week-datepicker .mat-calendar-body-range-end .mat-calendar-body-cell-preview, .mat-datepicker-popup .dr-week-datepicker .mat-calendar-body-preview-end .mat-calendar-body-cell-preview{right:5%;width:95%;border-top-right-radius:40px;border-bottom-right-radius:40px} .mat-datepicker-popup .dr-week-datepicker .mat-calendar-body-in-preview:not(.mat-calendar-body-in-range) .mat-calendar-body-cell-preview{background-color:#f5f5f5} .mat-datepicker-popup .dr-week-datepicker .mat-calendar-body-in-preview:not(.mat-calendar-body-in-range)>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:transparent!important} .mat-datepicker-popup .dr-week-datepicker .mat-calendar-body-in-preview:not(.mat-calendar-body-in-range)>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical):not(.mat-calendar-body-today){color:#19181a!important;font-weight:400!important} .mat-datepicker-popup .dr-week-datepicker .mat-calendar-body-in-range .mat-calendar-body-cell-preview{background:#4646ce!important} .mat-datepicker-popup .dr-week-datepicker .mat-calendar-body-in-range:before{background:initial!important} .mat-datepicker-popup .dr-week-datepicker .mat-calendar-body-in-range .mat-calendar-body-selected, .mat-datepicker-popup .dr-week-datepicker .mat-calendar-body-in-range .mat-calendar-body-cell-content{background:transparent!important;color:#f2f2fb!important;font-weight:600!important} .mat-datepicker-popup .mat-datepicker-content{margin:7px 0;box-shadow:0 4px 8px 1px #00000040;border-radius:12px!important} .mat-datepicker-popup .mat-datepicker-content button[disabled]{border:inherit;color:inherit;background-color:inherit} .mat-datepicker-popup .mat-datepicker-content button[disabled]:hover{border:inherit} .mat-datepicker-popup .cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical), .mat-datepicker-popup .cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:#fff} .mat-datepicker-popup .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background:#f2f2fb;color:#4646ce;font-weight:600} .mat-datepicker-popup .mat-calendar-body-selected{background-color:#4646ce;color:#f2f2fb;font-weight:600} .mat-datepicker-popup .mat-calendar-body-today.mat-calendar-body-selected{box-shadow:none} .mat-datepicker-popup .mat-button-focus-overlay{background:#f5f5f5} .mat-datepicker-popup .mat-calendar-controls .mat-icon-button:hover .mat-button-focus-overlay{opacity:1!important;background:#f5f5f5;transition:opacity .2s cubic-bezier(.35,0,.25,1)} .mat-datepicker-popup .mat-calendar-controls .mat-calendar-period-button:hover{background:#f5f5f5;transition:background .2s cubic-bezier(.35,0,.25,1)} .mat-datepicker-popup .mat-calendar-table-header th{font-size:14px;font-weight:600;color:#333} .mat-datepicker-popup .mat-calendar-table-header-divider{display:none} .mat-datepicker-popup .mat-calendar-body-label{color:#fff;padding:0} .mat-datepicker-popup .mat-calendar-body>tr[aria-hidden=true]>.mat-calendar-body-label{display:none} .mat-datepicker-popup .mat-calendar-content{display:flex} .mat-datepicker-popup .mat-calendar-content dr-week-selector{flex:0} .mat-datepicker-popup .mat-calendar-content mat-month-view, .mat-datepicker-popup .mat-calendar-content mat-multi-year-view, .mat-datepicker-popup .mat-calendar-content mat-year-view{flex:1}", ".mat-datepicker-popup .dr-datepicker-dark-theme{background-color:#0c142b;color:#fff;border-radius:12px} .mat-datepicker-popup .dr-datepicker-dark-theme .mat-calendar-body-label{visibility:hidden} .mat-datepicker-popup .dr-datepicker-dark-theme .mat-calendar-body-cell-content, .mat-datepicker-popup .dr-datepicker-dark-theme .mat-calendar-table-header th{color:#fff} .mat-datepicker-popup .dr-datepicker-dark-theme .cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical), .mat-datepicker-popup .dr-datepicker-dark-theme .cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:#373c4c} .mat-datepicker-popup .dr-datepicker-dark-theme .mat-calendar-body-today:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){border:none;background-color:#1d1d6d;color:#fff} .mat-datepicker-popup .dr-datepicker-dark-theme .dr-quarterly-datepicker .quarter-selector:hover{background:#373c4c!important;color:#fff!important} .mat-datepicker-popup .dr-datepicker-dark-theme .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background:#373c4c;color:#fff} .mat-datepicker-popup .dr-datepicker-dark-theme.dr-week-datepicker .weeks__container{color:#fff} .mat-datepicker-popup .dr-datepicker-dark-theme.dr-week-datepicker .mat-calendar-body-in-range .mat-calendar-body-selected, .mat-datepicker-popup .dr-datepicker-dark-theme.dr-week-datepicker .mat-calendar-body-in-range .mat-calendar-body-cell-content{background-color:#4646ce!important;color:#fff!important} .mat-datepicker-popup .dr-datepicker-dark-theme.dr-week-datepicker .weeks .btn:hover{background:#373c4c!important;color:#fff!important} .mat-datepicker-popup .dr-datepicker-dark-theme .mat-calendar-body-selected{background-color:#4646ce;color:#fff} .mat-datepicker-popup .dr-datepicker-dark-theme .mat-calendar-body-disabled>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){color:#aeabac} .mat-datepicker-popup .dr-datepicker-dark-theme dr-date-picker_custom-header .dr-date-paging:hover{background-color:transparent} .mat-datepicker-popup .dr-datepicker-dark-theme dr-date-picker_custom-header .dr-date-paging>.dr-icon-arrow-right, .mat-datepicker-popup .dr-datepicker-dark-theme dr-date-picker_custom-header .dr-date-paging>.dr-icon-arrow-left{color:#aeabac} .mat-datepicker-popup .dr-datepicker-dark-theme dr-date-picker_custom-header .dr-date-paging>.dr-icon-arrow-right:hover, .mat-datepicker-popup .dr-datepicker-dark-theme dr-date-picker_custom-header .dr-date-paging>.dr-icon-arrow-left:hover{background:#373c4c;border-radius:12px;cursor:pointer}"], changeDetection: 0 }); }
428
426
  }
429
427
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DrDatePickerComponent, [{
@@ -433,9 +431,6 @@ export class DrDatePickerComponent {
433
431
  FormsModule,
434
432
  ReactiveFormsModule,
435
433
  MatDatepickerModule,
436
- MatDatepickerModule,
437
- MatNativeDateModule,
438
- MatMomentDateModule,
439
434
  DrButtonComponent,
440
435
  DrDatePickerFormatDirective,
441
436
  ], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
@@ -492,4 +487,4 @@ export class DrDatePickerComponent {
492
487
  type: HostBinding,
493
488
  args: ['class.active']
494
489
  }] }); })();
495
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHItZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YXJhaWxzc2hhcmVkL3NyYy9saWIvZHItaW5wdXRzL2RhdGUtcGlja2Vycy9kci1kYXRlLXBpY2tlci9kci1kYXRlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhcmFpbHNzaGFyZWQvc3JjL2xpYi9kci1pbnB1dHMvZGF0ZS1waWNrZXJzL2RyLWRhdGUtcGlja2VyL2RyLWRhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEVBRVIsUUFBUSxFQUNSLFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUF3QixXQUFXLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEgsT0FBTyxFQUFFLFlBQVksRUFBRSx3QkFBd0IsRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVyRyxPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzNGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFNB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aUNBQWlDLEVBQUUsUUFBUSxFQUFFLHFCQUFxQixFQUFFO29CQUMvRSxxQkFBcUI7b0JBQ3JCLG1CQUFtQjtpQkFDdEI7Z0lBSUQsRUFBRTtrQkFERCxLQUFLO1lBR04sTUFBTTtrQkFETCxXQUFXO21CQUFDLFNBQVM7WUFHMkIsU0FBUztrQkFBekQsS0FBSzs7a0JBQUksV0FBVzttQkFBQyx5QkFBeUI7WUFDdEMsV0FBVztrQkFBbkIsS0FBSztZQUNHLGVBQWU7a0JBQXZCLEtBQUs7WUFDRyxVQUFVO2tCQUFsQixLQUFLO1lBR0YsWUFBWTtrQkFEZixLQUFLO1lBU04sTUFBTTtrQkFETCxLQUFLO1lBSUYsR0FBRztrQkFETixLQUFLO1lBTUYsR0FBRztrQkFETixLQUFLO1lBVUYsT0FBTztrQkFEVixLQUFLO1lBUUcsY0FBYztrQkFBdEIsS0FBSztZQUVHLFdBQVc7a0JBQW5CLEtBQUs7WUFFa0MsUUFBUTtrQkFBL0MsS0FBSzs7a0JBQUksV0FBVzttQkFBQyxnQkFBZ0I7WUFFN0Isd0JBQXdCO2tCQUFoQyxLQUFLO1lBRUcsY0FBYztrQkFBdEIsS0FBSztZQUVHLGdCQUFnQjtrQkFBeEIsS0FBSztZQUlLLFVBQVU7a0JBRHBCLFNBQVM7bUJBQUMsWUFBWTtZQVduQixNQUFNO2tCQURULFdBQVc7bUJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgaW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3B0aW9uYWwsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBTa2lwU2VsZixcbiAgICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQnVpbGRlciwgRm9ybXNNb2R1bGUsIE5HX1ZBTFVFX0FDQ0VTU09SLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ2FsZW5kYXJWaWV3LCBEYXRlUGlja2VyUGVyaW9kUG9zaXRpb24sIFRpbWVmcmFtZU9wdGlvbiB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9kYXRlUGlja2VyJztcbmltcG9ydCB7IE1vbWVudCB9IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBEYXRlQWRhcHRlciwgTUFUX0RBVEVfTE9DQUxFLCBNYXROYXRpdmVEYXRlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBEckRhdGVQaWNrZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZHItZGF0ZS1waWNrZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgc2hhcmVSZXBsYXksIHN0YXJ0V2l0aCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBEckRhdGVQaWNrZXJDdXN0b21IZWFkZXJDb21wb25lbnQgfSBmcm9tICcuLi9kci1kYXRlLXBpY2tlcl9jdXN0b20taGVhZGVyL2RyLWRhdGUtcGlja2VyX2N1c3RvbS1oZWFkZXIuY29tcG9uZW50JztcbmltcG9ydCB7XG4gICAgTWF0Q2FsZW5kYXJWaWV3LFxuICAgIE1hdERhdGVwaWNrZXIsXG4gICAgTWF0RGF0ZVJhbmdlUGlja2VyLFxuICAgIE1BVF9EQVRFX1JBTkdFX1NFTEVDVElPTl9TVFJBVEVHWSxcbiAgICBNYXREYXRlcGlja2VyTW9kdWxlLFxufSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7XG4gICAgTUFUX01PTUVOVF9EQVRFX0FEQVBURVJfT1BUSU9OUyxcbiAgICBNYXRNb21lbnREYXRlQWRhcHRlck9wdGlvbnMsXG4gICAgTWF0TW9tZW50RGF0ZU1vZHVsZSxcbiAgICBNb21lbnREYXRlQWRhcHRlcixcbn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwtbW9tZW50LWFkYXB0ZXInO1xuaW1wb3J0IHsgV2Vla1NlbGVjdGlvblN0cmF0ZWd5IH0gZnJvbSAnLi4vc2VydmljZXMvd2Vlay1zZWxlY3Rpb24tc3RyYXRlZ3knO1xuaW1wb3J0IHsgRHJCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9idXR0b24vYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEckRhdGVQaWNrZXJGb3JtYXREaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2RyLWRhdGUtcGlja2VyLWZvcm1hdC5kaXJlY3RpdmUnO1xuXG5jb25zdCBub29wID0gKCkgPT4ge307XG5cbmV4cG9ydCBjbGFzcyBDdXN0b21EYXRlQWRhcHRlciBleHRlbmRzIE1vbWVudERhdGVBZGFwdGVyIHtcbiAgICBnZXRGaXJzdERheU9mV2VlaygpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG59XG5cbi8vIFJldXNlIHBhcmVudCBEYXRlQWRhcHRlciBpZiBwcm92aWRlZCwgb3RoZXJ3aXNlIGNyZWF0ZSBhIGxvY2FsIEN1c3RvbURhdGVBZGFwdGVyXG5jb25zdCBEQVRFX0FEQVBURVJfUFJPVklERVIgPSB7XG4gICAgcHJvdmlkZTogRGF0ZUFkYXB0ZXIsXG4gICAgdXNlRmFjdG9yeTogKHBhcmVudDogRGF0ZUFkYXB0ZXI8YW55PiB8IG51bGwsIGxvY2FsZTogc3RyaW5nLCBvcHRpb25zOiBNYXRNb21lbnREYXRlQWRhcHRlck9wdGlvbnMgfCBudWxsKSA9PlxuICAgICAgICBwYXJlbnQgPz8gbmV3IEN1c3RvbURhdGVBZGFwdGVyKGxvY2FsZSwgb3B0aW9ucyksXG4gICAgZGVwczogW1tuZXcgT3B0aW9uYWwoKSwgbmV3IFNraXBTZWxmKCksIERhdGVBZGFwdGVyXSwgTUFUX0RBVEVfTE9DQUxFLCBbbmV3IE9wdGlvbmFsKCksIE1BVF9NT01FTlRfREFURV9BREFQVEVSX09QVElPTlNdXSxcbn07XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZHItZGF0ZS1waWNrZXInLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgICAgICBNYXREYXRlcGlja2VyTW9kdWxlLFxuICAgICAgICBNYXREYXRlcGlja2VyTW9kdWxlLFxuICAgICAgICBNYXROYXRpdmVEYXRlTW9kdWxlLFxuICAgICAgICBNYXRNb21lbnREYXRlTW9kdWxlLFxuICAgICAgICBEckJ1dHRvbkNvbXBvbmVudCxcbiAgICAgICAgRHJEYXRlUGlja2VyRm9ybWF0RGlyZWN0aXZlLFxuICAgIF0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RyLWRhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9kci1kYXRlLXBpY2tlci5jb21wb25lbnQuc2NzcycsICcuL2RyLWRhdGUtcGlja2VyLWRhcmsuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgeyBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUiwgdXNlRXhpc3Rpbmc6IERyRGF0ZVBpY2tlckNvbXBvbmVudCwgbXVsdGk6IHRydWUgfSxcbiAgICAgICAgeyBwcm92aWRlOiBNQVRfREFURV9SQU5HRV9TRUxFQ1RJT05fU1RSQVRFR1ksIHVzZUNsYXNzOiBXZWVrU2VsZWN0aW9uU3RyYXRlZ3kgfSxcbiAgICAgICAgREFURV9BREFQVEVSX1BST1ZJREVSLFxuICAgICAgICBEckRhdGVQaWNrZXJTZXJ2aWNlLFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIERyRGF0ZVBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG4gICAgQElucHV0KClcbiAgICBpZD86IHN0cmluZztcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuICAgIGhvc3RJZCA9IG51bGw7XG5cbiAgICBASW5wdXQoKSBASG9zdEJpbmRpbmcoJ2NsYXNzLnVzZS1idXR0b24tcGlja2VyJykgdXNlQnV0dG9uOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGJ1dHRvbkxhYmVsOiBzdHJpbmc7XG4gICAgQElucHV0KCkgaWNvbkFmdGVyQnV0dG9uOiBzdHJpbmc7XG4gICAgQElucHV0KCkgcGFuZWxDbGFzczogc3RyaW5nID0gJyc7XG5cbiAgICBASW5wdXQoKVxuICAgIHNldCB1c2VEYXJrVGhlbWUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5wYW5lbENsYXNzID0gdmFsdWUgPyB0aGlzLnBhbmVsQ2xhc3MgKyAnIGRyLWRhdGVwaWNrZXItZGFyay10aGVtZScgOiB0aGlzLnBhbmVsQ2xhc3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnRyb2xzIGRhdGUgcGlja2VyIGZvcm1hdCBpbnB1dCBsYWJlbCwgY2FsZW5kYXIgc3RhcnQgdmlldyBhbmQgdGltZWZyYW1lXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBmb3JtYXQ6IHN0cmluZztcblxuICAgIEBJbnB1dCgpXG4gICAgc2V0IG1pbihtaW5EYXRlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fbWluID0gbWluRGF0ZSA/IG1vbWVudC51bml4KG1pbkRhdGUpLnV0YygpIDogbnVsbDtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIHNldCBtYXgobWF4RGF0ZTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG1heERhdGVNb21lbnQgPSBtYXhEYXRlID8gbW9tZW50LnVuaXgobWF4RGF0ZSkudXRjKCkgOiBudWxsO1xuICAgICAgICB0aGlzLl9tYXggPSBtYXhEYXRlTW9tZW50O1xuICAgICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLm1heERhdGUgPSBtYXhEYXRlTW9tZW50O1xuICAgIH1cblxuICAgIF9zdGFydEF0OiBNb21lbnQgfCBudWxsID0gbnVsbDtcbiAgICAvKiogVGhlIGRhdGUgdG8gb3BlbiB0aGUgY2FsZW5kYXIgdG8gaW5pdGlhbGx5LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHN0YXJ0QXQodmFsdWU6IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fc3RhcnRBdCA9IHZhbHVlID8gbW9tZW50LnVuaXgodmFsdWUpLnV0YygpIDogbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gV2hldGhlciB0byB0cmFuc2Zvcm0gZGF0ZSwgdGFraW5nIGVuZCwgc3RhcnQsIG1pZGRsZSBvZiBwZXJpb2QgKGkuZS4gc2V0IG1pZGRsZSBvZiBtb250aCBpZiB0aW1lZnJhbWU9J21vbnRoJylcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwZXJpb2RQb3NpdGlvbjogRGF0ZVBpY2tlclBlcmlvZFBvc2l0aW9uID0gRGF0ZVBpY2tlclBlcmlvZFBvc2l0aW9uLkRFRkFVTFQ7XG5cbiAgICBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICdTZWxlY3QuLi4nO1xuXG4gICAgQElucHV0KCkgQEhvc3RCaW5kaW5nKCdjbGFzcy5kaXNhYmxlZCcpIGRpc2FibGVkOiBib29sZWFuO1xuXG4gICAgQElucHV0KCkgZmlzY2FsWWVhck1vbnRoc01vZGlmaWVyID0gMDtcblxuICAgIEBJbnB1dCgpIGZpc2NhbFllYXJCYWNrID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBkYXRlcGlja2VyRmlsdGVyOiAobW9tZW50OiBNb21lbnQpID0+IGJvb2xlYW47XG5cbiAgICBwcml2YXRlIF9kYXRlUGlja2VyOiBNYXREYXRlcGlja2VyPGFueT4gfCBNYXREYXRlUmFuZ2VQaWNrZXI8YW55PjtcbiAgICBAVmlld0NoaWxkKCdkYXRlUGlja2VyJylcbiAgICBwdWJsaWMgc2V0IGRhdGVQaWNrZXIodmFsdWU6IE1hdERhdGVwaWNrZXI8YW55PiB8IE1hdERhdGVSYW5nZVBpY2tlcjxhbnk+KSB7XG4gICAgICAgIHRoaXMuX2RhdGVQaWNrZXIgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS5kYXRlUGlja2VySW5zdGFuY2UgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fZGF0ZVBpY2tlci5zdGFydFZpZXcgPSB0aGlzLmNhbGVuZGFyVmlld3NUaW1lZnJhbWVNYXBwaW5nW3RoaXMuZGF0ZVBpY2tlclNlcnZpY2UudGltZWZyYW1lXTtcbiAgICB9XG4gICAgcHVibGljIGdldCBkYXRlUGlja2VyKCk6IE1hdERhdGVwaWNrZXI8YW55PiB8IE1hdERhdGVSYW5nZVBpY2tlcjxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVQaWNrZXI7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hY3RpdmUnKVxuICAgIGdldCBhY3RpdmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wZW5lZCQuZ2V0VmFsdWUoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGVzdHJveWVkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2FsZW5kYXJWaWV3c1RpbWVmcmFtZU1hcHBpbmc6IGFueSA9IHtcbiAgICAgICAgeWVhcjogJ211bHRpLXllYXInLFxuICAgICAgICBtb250aDogJ3llYXInLFxuICAgICAgICBxdWFydGVyOiAnbm9uZScsXG4gICAgICAgIGRheTogJ21vbnRoJyxcbiAgICAgICAgd2VlazogJ21vbnRoJyxcbiAgICB9IGFzIGNvbnN0O1xuXG4gICAgcHVibGljIHJlYWRvbmx5IGN1c3RvbUhlYWRlciA9IERyRGF0ZVBpY2tlckN1c3RvbUhlYWRlckNvbXBvbmVudDtcbiAgICBwdWJsaWMgcmVhZG9ubHkgPSB0cnVlO1xuICAgIHB1YmxpYyBfbWluOiBNb21lbnQ7XG4gICAgcHJvdGVjdGVkIF9tYXg6IE1vbWVudDtcbiAgICBwdWJsaWMgcmVhZG9ubHkgdGltZWZyYW1lT3B0aW9uID0gVGltZWZyYW1lT3B0aW9uO1xuXG4gICAgcHJvdGVjdGVkIGdldCBpbm5lclZhbHVlKCk6IE1vbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmlubmVyVmFsdWU7XG4gICAgfVxuICAgIHByb3RlY3RlZCBzZXQgaW5uZXJWYWx1ZSh2YWx1ZTogTW9tZW50KSB7XG4gICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuaW5uZXJWYWx1ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBkaXNwbGF5VmFsdWUkID0gY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuaW5uZXJWYWx1ZSQucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKSxcbiAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS50aW1lZnJhbWUkLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSksXG4gICAgXSkucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKFtudWxsLCBudWxsXSksXG4gICAgICAgIG1hcCgoW3ZhbHVlLCB0aW1lZnJhbWVdOiBbTW9tZW50LCBUaW1lZnJhbWVPcHRpb25dKSA9PiB0aGlzLnRyYW5zZm9ybURpc3BsYXllZFZhbHVlKHZhbHVlLCB0aW1lZnJhbWUpKSxcbiAgICAgICAgdGFwKCh2YWx1ZTogTW9tZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsdWUgJiYgdGhpcy5kYXRlUGlja2VyU2VydmljZS5jYWxlbmRhckluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS5jYWxlbmRhckluc3RhbmNlLmFjdGl2ZURhdGUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmNhbGVuZGFySW5zdGFuY2Uuc2VsZWN0ZWQgPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKSxcbiAgICApO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNoYW5nZSQgPSBuZXcgU3ViamVjdDxudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkPigpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBvcGVuZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGZiID0gaW5qZWN0KEZvcm1CdWlsZGVyKTtcblxuICAgIHJlYWRvbmx5IHJhbmdlRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICBzdGFydDogdGhpcy5mYi5jb250cm9sPE1vbWVudCB8IG51bGw+KG51bGwpLFxuICAgICAgICBlbmQ6IHRoaXMuZmIuY29udHJvbDxNb21lbnQgfCBudWxsPihudWxsKSxcbiAgICB9KTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJvdGVjdGVkIGRhdGVBZGFwdGVyOiBEYXRlQWRhcHRlcjxhbnk+LFxuICAgICAgICBwdWJsaWMgZGF0ZVBpY2tlclNlcnZpY2U6IERyRGF0ZVBpY2tlclNlcnZpY2UsXG4gICAgKSB7XG4gICAgICAgIGRhdGVQaWNrZXJTZXJ2aWNlLnVwZGF0ZWRRdWFydGVyJC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpKS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlZEluQ2FsZW5kYXIodmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgZGF0ZVBpY2tlclNlcnZpY2Uud2Vla1NlbGVjdGlvbkNoYW5nZSQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKSkuc3Vic2NyaWJlKCh7IHN0YXJ0LCBlbmQgfSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yYW5nZUZvcm0ucGF0Y2hWYWx1ZSh7IHN0YXJ0LCBlbmQgfSk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlZEluQ2FsZW5kYXIoc3RhcnQpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmlubmVyVmFsdWUkLnBpcGUoZmlsdGVyKEJvb2xlYW4pLCB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKSkuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yYW5nZUZvcm0ucGF0Y2hWYWx1ZSh7IHN0YXJ0OiB2YWx1ZS5jbG9uZSgpLnN0YXJ0T2YoJ2lzb1dlZWsnKSwgZW5kOiB2YWx1ZS5jbG9uZSgpLmVuZE9mKCdpc29XZWVrJykgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGRhdGVGb3JtYXRGbiA9IHRoaXMuZGF0ZUFkYXB0ZXIuZm9ybWF0O1xuICAgICAgICB0aGlzLmRhdGVBZGFwdGVyLmZvcm1hdCA9IChkYXRlOiBNb21lbnQsIGRpc3BsYXlGb3JtYXQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgbGV0IGRhdGVUb0Zvcm1hdCA9IGRhdGUuY2xvbmUoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmlzVGltZWZyYW1lRGVwZW5kaW5nT25GWSh0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLnRpbWVmcmFtZSkpIHtcbiAgICAgICAgICAgICAgICBkYXRlVG9Gb3JtYXQgPSB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLnN1YnRyYWN0RmlzY2FsWWVhck1vbnRoc0Zyb21EYXRlKGRhdGVUb0Zvcm1hdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZGF0ZUZvcm1hdEZuLmNhbGwodGhpcy5kYXRlQWRhcHRlciwgZGF0ZVRvRm9ybWF0LCBkaXNwbGF5Rm9ybWF0KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuZmlzY2FsWWVhck1vbnRoc01vZGlmaWVyID0gdGhpcy5maXNjYWxZZWFyTW9udGhzTW9kaWZpZXI7XG4gICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuZmlzY2FsWWVhckJhY2sgPSB0aGlzLmZpc2NhbFllYXJCYWNrO1xuICAgICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmRhdGVwaWNrZXJGaWx0ZXIgPSB0aGlzLmRhdGVGaWx0ZXI7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuZGVzdHJveWVkJC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveWVkJC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXMuZm9ybWF0Py5jdXJyZW50VmFsdWUgJiYgY2hhbmdlcy5mb3JtYXQuY3VycmVudFZhbHVlICE9PSBjaGFuZ2VzLmZvcm1hdC5wcmV2aW91c1ZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZvcm1hdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXMuZmlzY2FsWWVhck1vbnRoc01vZGlmaWVyKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmZpc2NhbFllYXJNb250aHNNb2RpZmllciA9IHRoaXMuZmlzY2FsWWVhck1vbnRoc01vZGlmaWVyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXMuZmlzY2FsWWVhckJhY2spIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuZmlzY2FsWWVhckJhY2sgPSB0aGlzLmZpc2NhbFllYXJCYWNrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRpbmcgY29tcG9uZW50IGlubmVyIHZhbHVlIGFjY29yZGluZyB0byBkYXRlcGlja2VyIHRpbWVmcmFtZSAoZGF5LCBtb250aCBldGMuKVxuICAgICAqIGFuZCBkYXRlIHBvc2l0aW9uIGluIHBlcmlvZCAoc3RhcnQsIGVuZCwgbWlkZGxlKVxuICAgICAqL1xuICAgIHRyeVRvTm9ybWFsaXplVGltZWZyYW1lKCk6IHZvaWQge1xuICAgICAgICBjb25zdCB0aW1lZnJhbWUgPSB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLnRpbWVmcmFtZTtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZFZhbHVlID0gdGhpcy5pbm5lclZhbHVlLmNsb25lKCk7XG4gICAgICAgIGNvbnN0IHVuaXQgPSB0aW1lZnJhbWUgPT09IFRpbWVmcmFtZU9wdGlvbi5XRUVLID8gJ2lzb1dlZWsnIDogdGltZWZyYW1lO1xuICAgICAgICBzd2l0Y2ggKHRoaXMucGVyaW9kUG9zaXRpb24pIHtcbiAgICAgICAgICAgIGNhc2UgRGF0ZVBpY2tlclBlcmlvZFBvc2l0aW9uLlNUQVJUX09GX1BFUklPRDpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRlUGlja2VyU2VydmljZS50aW1lZnJhbWUgPT09IFRpbWVmcmFtZU9wdGlvbi5RVUFSVEVSKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2Uuc2V0U3RhcnRPZkN1cnJlbnRRdWFydGVyKG5vcm1hbGl6ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLnRpbWVmcmFtZSA9PT0gVGltZWZyYW1lT3B0aW9uLllFQVIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS5zZXRTdGFydE9mUXVhcnRlcihub3JtYWxpemVkVmFsdWUsIDEpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRWYWx1ZS5zdGFydE9mKHVuaXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRGF0ZVBpY2tlclBlcmlvZFBvc2l0aW9uLkVORF9PRl9QRVJJT0Q6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UudGltZWZyYW1lID09PSBUaW1lZnJhbWVPcHRpb24uUVVBUlRFUikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLnNldEVuZE9mQ3VycmVudFF1YXJ0ZXIobm9ybWFsaXplZFZhbHVlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UudGltZWZyYW1lID09PSBUaW1lZnJhbWVPcHRpb24uWUVBUikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLnNldEVuZE9mUXVhcnRlcihub3JtYWxpemVkVmFsdWUsIDQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRWYWx1ZS5lbmRPZih1bml0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERhdGVQaWNrZXJQZXJpb2RQb3NpdGlvbi5NSURETEVfT0ZfUEVSSU9EOlxuICAgICAgICAgICAgICAgIGxldCBlbmRPZlBlcmlvZDogTW9tZW50O1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLnRpbWVmcmFtZSA9PT0gVGltZWZyYW1lT3B0aW9uLlFVQVJURVIpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kT2ZQZXJpb2QgPSBub3JtYWxpemVkVmFsdWUuY2xvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS5zZXRTdGFydE9mQ3VycmVudFF1YXJ0ZXIobm9ybWFsaXplZFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS5zZXRFbmRPZkN1cnJlbnRRdWFydGVyKGVuZE9mUGVyaW9kKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UudGltZWZyYW1lID09PSBUaW1lZnJhbWVPcHRpb24uWUVBUikge1xuICAgICAgICAgICAgICAgICAgICBlbmRPZlBlcmlvZCA9IG5vcm1hbGl6ZWRWYWx1ZS5jbG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLnNldFN0YXJ0T2ZRdWFydGVyKG5vcm1hbGl6ZWRWYWx1ZSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2Uuc2V0RW5kT2ZRdWFydGVyKGVuZE9mUGVyaW9kLCA0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkVmFsdWUuc3RhcnRPZih1bml0KTtcbiAgICAgICAgICAgICAgICAgICAgZW5kT2ZQZXJpb2QgPSBub3JtYWxpemVkVmFsdWUuY2xvbmUoKS5lbmRPZih1bml0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZGlmZiA9IGVuZE9mUGVyaW9kLmRpZmYobm9ybWFsaXplZFZhbHVlLCAnc2Vjb25kcycpO1xuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRWYWx1ZS5hZGQoZGlmZiAvIDIgKyAxLCAnc2Vjb25kcycpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBub3JtYWxpemVkVmFsdWUuc3RhcnRPZih1bml0KS5zZXQoJ2hvdXJzJywgMTIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuaW5uZXJWYWx1ZSA9IG5vcm1hbGl6ZWRWYWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2hvc2VuUGVyaW9kSGFuZGxlcihjaG9zZW5EYXRlOiBNb21lbnQsIHRpbWVmcmFtZTogVGltZWZyYW1lT3B0aW9uLCBwaWNrZXI6IE1hdERhdGVwaWNrZXI8YW55Pikge1xuICAgICAgICBpZiAodGltZWZyYW1lID09PSBUaW1lZnJhbWVPcHRpb24uWUVBUikge1xuICAgICAgICAgICAgY2hvc2VuRGF0ZSA9IHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuYWRkRmlzY2FsWWVhck1vbnRoc1RvRGF0ZShjaG9zZW5EYXRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLnRpbWVmcmFtZSA9PT0gVGltZWZyYW1lT3B0aW9uLlFVQVJURVIgJiYgdGltZWZyYW1lID09PSBUaW1lZnJhbWVPcHRpb24uWUVBUikge1xuICAgICAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS5jYWxlbmRhckluc3RhbmNlLmN1cnJlbnRWaWV3ID0gQ2FsZW5kYXJWaWV3LkZPUl9RVUFSVEVSUyBhcyBNYXRDYWxlbmRhclZpZXc7XG4gICAgICAgICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmNhbGVuZGFySW5zdGFuY2UuYWN0aXZlRGF0ZSA9IGNob3NlbkRhdGU7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5kYXRlUGlja2VyU2VydmljZS50aW1lZnJhbWUgPT09IHRpbWVmcmFtZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZWRJbkNhbGVuZGFyKGNob3NlbkRhdGUpO1xuICAgICAgICAgICAgcGlja2VyLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXR0aW5nIHZhbHVlIGZyb20gb3V0c2lkZSBvZiBjb21wb25lbnQgdmlhIG5nTW9kZWwgb3IgZm9ybUNvbnRyb2wgdXBkYXRlc1xuICAgICAqL1xuICAgIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgLypcbiAgICAgICAgICogV2UgbmVlZCBrZWVwIGxvY2FsIHRpbWVzdGFtcCBmb3IgRWxlY3Ryb24gQXBwbGljYXRpb25cbiAgICAgICAgICogSXNzdWUgaW4gZWxlY3Ryb246IHdoZW4gd2Ugc2VsZWN0IGRhdGUsIGRhdGUgc2VsZWN0IHdpdGggLTEgKGlmIHdlJ3JlIGNob29zaW5nIDIwMjMsIG91dHB1dCB3aWxsIGJlIDIwMjIpXG4gICAgICAgICAqL1xuICAgICAgICBjb25zdCBjb252ZXJ0ZWRWYWx1ZSA9IChkb2N1bWVudCBhcyBhbnkpLmlzX2VsZWN0cm9uID8gbW9tZW50LnVuaXgodmFsdWUpIDogbW9tZW50LnVuaXgodmFsdWUpLnV0YygpO1xuICAgICAgICB0aGlzLmlubmVyVmFsdWUgPSB2YWx1ZSA/IGNvbnZlcnRlZFZhbHVlIDogbnVsbDtcbiAgICAgICAgaWYgKHRoaXMuaW5uZXJWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy50cnlUb05vcm1hbGl6ZVRpbWVmcmFtZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblRvdWNoZWRDYWxsYmFjazogKCkgPT4gdm9pZCA9IG5vb3A7XG4gICAgcHVibGljIG9uQ2hhbmdlQ2FsbGJhY2s6ICh2YWx1ZTogbnVtYmVyKSA9PiB2b2lkID0gbm9vcDtcblxuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IG51bWJlcikgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sgPSAodmFsdWU6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgZm4odmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2UkLm5leHQodmFsdWUpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkQ2FsbGJhY2sgPSBmbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvLyBTaG91bGQgYmUgYXMgYXJyb3cgZnVuY3Rpb24gdG8gYXZvaWQgbG9zZSBzY29wZVxuICAgIHB1YmxpYyBkYXRlRmlsdGVyID0gKG1vbWVudDogTW9tZW50KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmRhdGVwaWNrZXJGaWx0ZXIgJiYgbW9tZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRlcGlja2VyRmlsdGVyKG1vbWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuXG4gICAgcHVibGljIHZhbHVlQ2hhbmdlZEluQ2FsZW5kYXIodmFsOiBNb21lbnQpIHtcbiAgICAgICAgaWYgKHZhbCAhPT0gdGhpcy5pbm5lclZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZVRvU2V0ID0gdmFsPy5jbG9uZSgpO1xuICAgICAgICAgICAgaWYgKHZhbHVlVG9TZXQgJiYgdGhpcy5kYXRlUGlja2VyU2VydmljZS5pc1RpbWVmcmFtZURlcGVuZGluZ09uRlkodGhpcy5kYXRlUGlja2VyU2VydmljZS50aW1lZnJhbWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS5zdWJ0cmFjdEZpc2NhbFllYXJTaGlmdEZvclllYXIodmFsdWVUb1NldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlRnJvbU1vbWVudCh2YWx1ZVRvU2V0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCBpbm5lciB2YWx1ZSBmcm9tIE1vbWVudCBhbmQgcHJvcGFnYXRlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbW9tZW50RGF0ZVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBzZXRWYWx1ZUZyb21Nb21lbnQobW9tZW50RGF0ZTogTW9tZW50KSB7XG4gICAgICAgIHRoaXMuc2V0VmFsdWUobW9tZW50RGF0ZS51bml4KCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCBpbm5lciB2YWx1ZSBmcm9tIHRpbWVzdGFtcCBhbmQgcHJvcGFnYXRlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGltZXN0YW1wXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHNldFZhbHVlKHRpbWVzdGFtcDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIC8vIGlzVmFsdWVVcGRhdGluZyBpcyByZXF1aXJlZCBmb3IgbWFuYWdlIGNsaWNrcyBvbiBzYW1lIGRhdGVzOiBpZiBpc1ZhbHVlVXBkYXRpbmcgLSB0cnVlIHRoZW5cbiAgICAgICAgLy8gZGF5cyBhcmUgZGlmZmVyZW50IGFuZCBzdWJzY3JpcHRpb24gb24gY2FsZW5kYXIgZGF5IGNsaWNrIGFjdGlvbiB3b24ndCB0cmlnZ2VyIEFjY2Vzc29yIG5nTW9kZWwgdXBkYXRlXG4gICAgICAgIC8vIG9uZSBtb3JlIHRpbWVcbiAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS5pc1ZhbHVlVXBkYXRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLndyaXRlVmFsdWUodGltZXN0YW1wKTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrKHRoaXMuaW5uZXJWYWx1ZS51bml4KCkpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuaXNWYWx1ZVVwZGF0aW5nID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCB0cmFuc2Zvcm1EaXNwbGF5ZWRWYWx1ZSh2YWx1ZTogTW9tZW50LCB0aW1lZnJhbWU6IFRpbWVmcmFtZU9wdGlvbik6IE1vbWVudCB7XG4gICAgICAgIGNvbnN0IHZhbHVlVG9SZXR1cm4gPSB2YWx1ZT8uY2xvbmUoKTtcbiAgICAgICAgaWYgKHZhbHVlVG9SZXR1cm4gJiYgdGhpcy5kYXRlUGlja2VyU2VydmljZS5pc1RpbWVmcmFtZURlcGVuZGluZ09uRlkodGltZWZyYW1lKSkge1xuICAgICAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS5hZGRGaXNjYWxZZWFyU2hpZnRGb3JZZWFyKHZhbHVlVG9SZXR1cm4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZVRvUmV0dXJuO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCB1cGRhdGVGb3JtYXQoKTogdm9pZCB7XG4gICAgICAgIGxldCB0aW1lZnJhbWU7XG4gICAgICAgIGxldCBmb3JtYXQgPSB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmdldENvbmZpZ3VyZWRGb3JtYXQodGhpcy5mb3JtYXQgYXMgVGltZWZyYW1lT3B0aW9uKTtcbiAgICAgICAgaWYgKGZvcm1hdCkge1xuICAgICAgICAgICAgdGltZWZyYW1lID0gdGhpcy5mb3JtYXQgYXMgVGltZWZyYW1lT3B0aW9uO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9ybWF0ID0gdGhpcy5kYXRlUGlja2VyU2VydmljZS5ub3JtYWxpemVWYWx1ZSh0aGlzLmZvcm1hdCk7XG4gICAgICAgICAgICB0aW1lZnJhbWUgPSB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmdldFRpbWVmcmFtZShmb3JtYXQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UudGltZWZyYW1lID0gdGltZWZyYW1lO1xuICAgICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmZvcm1hdCQubmV4dChmb3JtYXQpO1xuICAgIH1cblxuICAgIG9uT3BlbigpIHtcbiAgICAgICAgdGhpcy5vcGVuZWQkLm5leHQodHJ1ZSk7XG4gICAgfVxuXG4gICAgb25DTG9zZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5uZXJWYWx1ZSkge1xuICAgICAgICAgICAgY29uc3Qgbm9uTm9ybWFsaXplZFRpbWVzdGFtcCA9IHRoaXMuaW5uZXJWYWx1ZS51bml4KCk7XG4gICAgICAgICAgICB0aGlzLndyaXRlVmFsdWUobm9uTm9ybWFsaXplZFRpbWVzdGFtcCk7XG4gICAgICAgICAgICBjb25zdCBub3JtYWxpemVkVmFsdWUgPSB0aGlzLmlubmVyVmFsdWUudW5peCgpO1xuICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRWYWx1ZSAhPT0gbm9uTm9ybWFsaXplZFRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjayhub3JtYWxpemVkVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMub3BlbmVkJC5uZXh0KGZhbHNlKTtcbiAgICB9XG59XG4iLCI8aSAqbmdJZj1cIiF1c2VCdXR0b25cIiBjbGFzcz1cImRyLWljb24tZGF0ZVwiIChjbGljayk9XCJkYXRlUGlja2VyLm9wZW4oKVwiPjwvaT5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cIihkYXRlUGlja2VyU2VydmljZS50aW1lZnJhbWUkIHwgYXN5bmMpID09PSB0aW1lZnJhbWVPcHRpb24uV0VFS1wiPlxuICAgIDxpbnB1dFxuICAgICAgICBbYXR0ci5pZF09XCJpZFwiXG4gICAgICAgIFtuZ01vZGVsXT1cImlucHV0LnZhbHVlXCJcbiAgICAgICAgKGNsaWNrKT1cImRhdGVQaWNrZXIub3BlbigpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgW21pbl09XCJfbWluXCJcbiAgICAgICAgW21heF09XCJfbWF4XCIgLz5cblxuICAgIDxtYXQtZGF0ZS1yYW5nZS1pbnB1dCBbZm9ybUdyb3VwXT1cInJhbmdlRm9ybVwiIFtyYW5nZVBpY2tlcl09XCJkYXRlUGlja2VyXCIgW2RhdGVGaWx0ZXJdPVwiZGF0ZUZpbHRlclwiIGNsYXNzPVwicmFuZ2UtaW5wdXRcIj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBtYXRTdGFydERhdGVcbiAgICAgICAgICAgICNpbnB1dFxuICAgICAgICAgICAgW2RyRGF0ZVBpY2tlckZvcm1hdF09XCJkYXRlUGlja2VyU2VydmljZS5mb3JtYXQkIHwgYXN5bmNcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic3RhcnRcIlxuICAgICAgICAgICAgKGRhdGVDaGFuZ2UpPVwidmFsdWVDaGFuZ2VkSW5DYWxlbmRhcihyYW5nZUZvcm0udmFsdWUuc3RhcnQpXCIgLz5cbiAgICAgICAgPGlucHV0IG1hdEVuZERhdGUgW2RyRGF0ZVBpY2tlckZvcm1hdF09XCJkYXRlUGlja2VyU2VydmljZS5mb3JtYXQkIHwgYXN5bmNcIiBmb3JtQ29udHJvbE5hbWU9XCJlbmRcIiAvPlxuICAgIDwvbWF0LWRhdGUtcmFuZ2UtaW5wdXQ+XG5cbiAgICA8bWF0LWRhdGUtcmFuZ2UtcGlja2VyXG4gICAgICAgICNkYXRlUGlja2VyXG4gICAgICAgIFtzdGFydEF0XT1cIl9zdGFydEF0XCJcbiAgICAgICAgW3BhbmVsQ2xhc3NdPVwiJ2RyLXdlZWstZGF0ZXBpY2tlcicgKyAocGFuZWxDbGFzcyA/ICcgJyArIHBhbmVsQ2xhc3MgOiAnJylcIlxuICAgICAgICBbY2FsZW5kYXJIZWFkZXJDb21wb25lbnRdPVwiY3VzdG9tSGVhZGVyXCJcbiAgICAgICAgKHllYXJTZWxlY3RlZCk9XCJjaG9zZW5QZXJpb2RIYW5kbGVyKCRldmVudCwgdGltZWZyYW1lT3B0aW9uLllFQVIsIGRhdGVQaWNrZXIpXCJcbiAgICAgICAgKG1vbnRoU2VsZWN0ZWQpPVwiY2hvc2VuUGVyaW9kSGFuZGxlcigkZXZlbnQsIHRpbWVmcmFtZU9wdGlvbi5NT05USCwgZGF0ZVBpY2tlcilcIlxuICAgICAgICAob3BlbmVkKT1cIm9uT3BlbigpXCJcbiAgICAgICAgKGNsb3NlZCk9XCJvbkNMb3NlKClcIj5cbiAgICA8L21hdC1kYXRlLXJhbmdlLXBpY2tlcj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiKGRhdGVQaWNrZXJTZXJ2aWNlLnRpbWVmcmFtZSQgfCBhc3luYykgIT09IHRpbWVmcmFtZU9wdGlvbi5XRUVLXCI+XG4gICAgPGlucHV0XG4gICAgICAgIFthdHRyLmlkXT1cImlkXCJcbiAgICAgICAgW25nTW9kZWxdPVwiZGlzcGxheVZhbHVlJCB8IGFzeW5jXCJcbiAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidmFsdWVDaGFuZ2VkSW5DYWxlbmRhcigkZXZlbnQpXCJcbiAgICAgICAgKGNsaWNrKT1cImRhdGVQaWNrZXIub3BlbigpXCJcbiAgICAgICAgW21hdERhdGVwaWNrZXJdPVwiZGF0ZVBpY2tlclwiXG4gICAgICAgIFttYXREYXRlcGlja2VyRmlsdGVyXT1cImRhdGVGaWx0ZXJcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICBbZHJEYXRlUGlja2VyRm9ybWF0XT1cImRhdGVQaWNrZXJTZXJ2aWNlLmZvcm1hdCQgfCBhc3luY1wiXG4gICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgIFttaW5dPVwiX21pblwiXG4gICAgICAgIFttYXhdPVwiX21heFwiXG4gICAgICAgIFtjbGFzcy5oaWRkZW4tY2FsZW5kYXItaW5wdXRdPVwidXNlQnV0dG9uXCIgLz5cblxuICAgIDxkci1idXR0b25cbiAgICAgICAgKm5nSWY9XCJ1c2VCdXR0b25cIlxuICAgICAgICBbaWNvbl09XCInZHItaWNvbi1kYXRlJ1wiXG4gICAgICAgIFtpY29uQWZ0ZXJdPVwiaWNvbkFmdGVyQnV0dG9uXCJcbiAgICAgICAgKGNsaWNrKT1cImRhdGVQaWNrZXIub3BlbigpXCJcbiAgICAgICAgY2xhc3M9XCJkYXRlcGlja2VyLWJ1dHRvblwiPlxuICAgICAgICB7eyBidXR0b25MYWJlbCB8fCAnU2VsZWN0IERhdGUnIH19XG4gICAgPC9kci1idXR0b24+XG5cbiAgICA8bWF0LWRhdGVwaWNrZXJcbiAgICAgICAgI2RhdGVQaWNrZXJcbiAgICAgICAgW3BhbmVsQ2xhc3NdPVwicGFuZWxDbGFzc1wiXG4gICAgICAgIFtzdGFydEF0XT1cIl9zdGFydEF0XCJcbiAgICAgICAgW2NhbGVuZGFySGVhZGVyQ29tcG9uZW50XT1cImN1c3RvbUhlYWRlclwiXG4gICAgICAgICh5ZWFyU2VsZWN0ZWQpPVwiY2hvc2VuUGVyaW9kSGFuZGxlcigkZXZlbnQsIHRpbWVmcmFtZU9wdGlvbi5ZRUFSLCBkYXRlUGlja2VyKVwiXG4gICAgICAgIChtb250aFNlbGVjdGVkKT1cImNob3NlblBlcmlvZEhhbmRsZXIoJGV2ZW50LCB0aW1lZnJhbWVPcHRpb24uTU9OVEgsIGRhdGVQaWNrZXIpXCJcbiAgICAgICAgKG9wZW5lZCk9XCJvbk9wZW4oKVwiXG4gICAgICAgIChjbG9zZWQpPVwib25DTG9zZSgpXCI+XG4gICAgPC9tYXQtZGF0ZXBpY2tlcj5cbjwvbmctY29udGFpbmVyPlxuIl19
490
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHItZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YXJhaWxzc2hhcmVkL3NyYy9saWIvZHItaW5wdXRzL2RhdGUtcGlja2Vycy9kci1kYXRlLXBpY2tlci9kci1kYXRlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhcmFpbHNzaGFyZWQvc3JjL2xpYi9kci1pbnB1dHMvZGF0ZS1waWNrZXJzL2RyLWRhdGUtcGlja2VyL2RyLWRhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEVBRVIsUUFBUSxFQUNSLFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUF3QixXQUFXLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEgsT0FBTyxFQUFFLFlBQVksRUFBRSx3QkFBd0IsRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVyRyxPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFH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R04sTUFBTTtrQkFETCxXQUFXO21CQUFDLFNBQVM7WUFHMkIsU0FBUztrQkFBekQsS0FBSzs7a0JBQUksV0FBVzttQkFBQyx5QkFBeUI7WUFDdEMsV0FBVztrQkFBbkIsS0FBSztZQUNHLGVBQWU7a0JBQXZCLEtBQUs7WUFDRyxVQUFVO2tCQUFsQixLQUFLO1lBR0YsWUFBWTtrQkFEZixLQUFLO1lBU04sTUFBTTtrQkFETCxLQUFLO1lBSUYsR0FBRztrQkFETixLQUFLO1lBTUYsR0FBRztrQkFETixLQUFLO1lBVUYsT0FBTztrQkFEVixLQUFLO1lBUUcsY0FBYztrQkFBdEIsS0FBSztZQUVHLFdBQVc7a0JBQW5CLEtBQUs7WUFFa0MsUUFBUTtrQkFBL0MsS0FBSzs7a0JBQUksV0FBVzttQkFBQyxnQkFBZ0I7WUFFN0Isd0JBQXdCO2tCQUFoQyxLQUFLO1lBRUcsY0FBYztrQkFBdEIsS0FBSztZQUVHLGdCQUFnQjtrQkFBeEIsS0FBSztZQUlLLFVBQVU7a0JBRHBCLFNBQVM7bUJBQUMsWUFBWTtZQVduQixNQUFNO2tCQURULFdBQVc7bUJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgaW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3B0aW9uYWwsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBTa2lwU2VsZixcbiAgICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBGb3JtQnVpbGRlciwgRm9ybXNNb2R1bGUsIE5HX1ZBTFVFX0FDQ0VTU09SLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ2FsZW5kYXJWaWV3LCBEYXRlUGlja2VyUGVyaW9kUG9zaXRpb24sIFRpbWVmcmFtZU9wdGlvbiB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9kYXRlUGlja2VyJztcbmltcG9ydCB7IE1vbWVudCB9IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBEYXRlQWRhcHRlciwgTUFUX0RBVEVfTE9DQUxFIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBEckRhdGVQaWNrZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZHItZGF0ZS1waWNrZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgc2hhcmVSZXBsYXksIHN0YXJ0V2l0aCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBEckRhdGVQaWNrZXJDdXN0b21IZWFkZXJDb21wb25lbnQgfSBmcm9tICcuLi9kci1kYXRlLXBpY2tlcl9jdXN0b20taGVhZGVyL2RyLWRhdGUtcGlja2VyX2N1c3RvbS1oZWFkZXIuY29tcG9uZW50JztcbmltcG9ydCB7XG4gICAgTWF0Q2FsZW5kYXJWaWV3LFxuICAgIE1hdERhdGVwaWNrZXIsXG4gICAgTWF0RGF0ZVJhbmdlUGlja2VyLFxuICAgIE1BVF9EQVRFX1JBTkdFX1NFTEVDVElPTl9TVFJBVEVHWSxcbiAgICBNYXREYXRlcGlja2VyTW9kdWxlLFxufSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7XG4gICAgTUFUX01PTUVOVF9EQVRFX0FEQVBURVJfT1BUSU9OUyxcbiAgICBNYXRNb21lbnREYXRlQWRhcHRlck9wdGlvbnMsXG4gICAgTW9tZW50RGF0ZUFkYXB0ZXIsXG59IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsLW1vbWVudC1hZGFwdGVyJztcbmltcG9ydCB7IFdlZWtTZWxlY3Rpb25TdHJhdGVneSB9IGZyb20gJy4uL3NlcnZpY2VzL3dlZWstc2VsZWN0aW9uLXN0cmF0ZWd5JztcbmltcG9ydCB7IERyQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYnV0dG9uL2J1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgRHJEYXRlUGlja2VyRm9ybWF0RGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9kci1kYXRlLXBpY2tlci1mb3JtYXQuZGlyZWN0aXZlJztcblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuXG5leHBvcnQgY2xhc3MgQ3VzdG9tRGF0ZUFkYXB0ZXIgZXh0ZW5kcyBNb21lbnREYXRlQWRhcHRlciB7XG4gICAgZ2V0Rmlyc3REYXlPZldlZWsoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxufVxuXG4vLyBSZXVzZSBwYXJlbnQgRGF0ZUFkYXB0ZXIgaWYgcHJvdmlkZWQsIG90aGVyd2lzZSBjcmVhdGUgYSBsb2NhbCBDdXN0b21EYXRlQWRhcHRlclxuY29uc3QgREFURV9BREFQVEVSX1BST1ZJREVSID0ge1xuICAgIHByb3ZpZGU6IERhdGVBZGFwdGVyLFxuICAgIHVzZUZhY3Rvcnk6IChwYXJlbnQ6IERhdGVBZGFwdGVyPGFueT4gfCBudWxsLCBsb2NhbGU6IHN0cmluZywgb3B0aW9uczogTWF0TW9tZW50RGF0ZUFkYXB0ZXJPcHRpb25zIHwgbnVsbCkgPT5cbiAgICAgICAgcGFyZW50ID8/IG5ldyBDdXN0b21EYXRlQWRhcHRlcihsb2NhbGUsIG9wdGlvbnMpLFxuICAgIGRlcHM6IFtbbmV3IE9wdGlvbmFsKCksIG5ldyBTa2lwU2VsZigpLCBEYXRlQWRhcHRlcl0sIE1BVF9EQVRFX0xPQ0FMRSwgW25ldyBPcHRpb25hbCgpLCBNQVRfTU9NRU5UX0RBVEVfQURBUFRFUl9PUFRJT05TXV0sXG59O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2RyLWRhdGUtcGlja2VyJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICAgICAgTWF0RGF0ZXBpY2tlck1vZHVsZSxcbiAgICAgICAgRHJCdXR0b25Db21wb25lbnQsXG4gICAgICAgIERyRGF0ZVBpY2tlckZvcm1hdERpcmVjdGl2ZSxcbiAgICBdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kci1kYXRlLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZHItZGF0ZS1waWNrZXIuY29tcG9uZW50LnNjc3MnLCAnLi9kci1kYXRlLXBpY2tlci1kYXJrLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsIHVzZUV4aXN0aW5nOiBEckRhdGVQaWNrZXJDb21wb25lbnQsIG11bHRpOiB0cnVlIH0sXG4gICAgICAgIHsgcHJvdmlkZTogTUFUX0RBVEVfUkFOR0VfU0VMRUNUSU9OX1NUUkFURUdZLCB1c2VDbGFzczogV2Vla1NlbGVjdGlvblN0cmF0ZWd5IH0sXG4gICAgICAgIERBVEVfQURBUFRFUl9QUk9WSURFUixcbiAgICAgICAgRHJEYXRlUGlja2VyU2VydmljZSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBEckRhdGVQaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuICAgIEBJbnB1dCgpXG4gICAgaWQ/OiBzdHJpbmc7XG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcbiAgICBob3N0SWQgPSBudWxsO1xuXG4gICAgQElucHV0KCkgQEhvc3RCaW5kaW5nKCdjbGFzcy51c2UtYnV0dG9uLXBpY2tlcicpIHVzZUJ1dHRvbjogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBidXR0b25MYWJlbDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGljb25BZnRlckJ1dHRvbjogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHBhbmVsQ2xhc3M6IHN0cmluZyA9ICcnO1xuXG4gICAgQElucHV0KClcbiAgICBzZXQgdXNlRGFya1RoZW1lKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMucGFuZWxDbGFzcyA9IHZhbHVlID8gdGhpcy5wYW5lbENsYXNzICsgJyBkci1kYXRlcGlja2VyLWRhcmstdGhlbWUnIDogdGhpcy5wYW5lbENsYXNzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb250cm9scyBkYXRlIHBpY2tlciBmb3JtYXQgaW5wdXQgbGFiZWwsIGNhbGVuZGFyIHN0YXJ0IHZpZXcgYW5kIHRpbWVmcmFtZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZm9ybWF0OiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKVxuICAgIHNldCBtaW4obWluRGF0ZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX21pbiA9IG1pbkRhdGUgPyBtb21lbnQudW5peChtaW5EYXRlKS51dGMoKSA6IG51bGw7XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBzZXQgbWF4KG1heERhdGU6IG51bWJlcikge1xuICAgICAgICBjb25zdCBtYXhEYXRlTW9tZW50ID0gbWF4RGF0ZSA/IG1vbWVudC51bml4KG1heERhdGUpLnV0YygpIDogbnVsbDtcbiAgICAgICAgdGhpcy5fbWF4ID0gbWF4RGF0ZU1vbWVudDtcbiAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS5tYXhEYXRlID0gbWF4RGF0ZU1vbWVudDtcbiAgICB9XG5cbiAgICBfc3RhcnRBdDogTW9tZW50IHwgbnVsbCA9IG51bGw7XG4gICAgLyoqIFRoZSBkYXRlIHRvIG9wZW4gdGhlIGNhbGVuZGFyIHRvIGluaXRpYWxseS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzdGFydEF0KHZhbHVlOiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX3N0YXJ0QXQgPSB2YWx1ZSA/IG1vbWVudC51bml4KHZhbHVlKS51dGMoKSA6IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFdoZXRoZXIgdG8gdHJhbnNmb3JtIGRhdGUsIHRha2luZyBlbmQsIHN0YXJ0LCBtaWRkbGUgb2YgcGVyaW9kIChpLmUuIHNldCBtaWRkbGUgb2YgbW9udGggaWYgdGltZWZyYW1lPSdtb250aCcpXG4gICAgICovXG4gICAgQElucHV0KCkgcGVyaW9kUG9zaXRpb246IERhdGVQaWNrZXJQZXJpb2RQb3NpdGlvbiA9IERhdGVQaWNrZXJQZXJpb2RQb3NpdGlvbi5ERUZBVUxUO1xuXG4gICAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnU2VsZWN0Li4uJztcblxuICAgIEBJbnB1dCgpIEBIb3N0QmluZGluZygnY2xhc3MuZGlzYWJsZWQnKSBkaXNhYmxlZDogYm9vbGVhbjtcblxuICAgIEBJbnB1dCgpIGZpc2NhbFllYXJNb250aHNNb2RpZmllciA9IDA7XG5cbiAgICBASW5wdXQoKSBmaXNjYWxZZWFyQmFjayA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgZGF0ZXBpY2tlckZpbHRlcjogKG1vbWVudDogTW9tZW50KSA9PiBib29sZWFuO1xuXG4gICAgcHJpdmF0ZSBfZGF0ZVBpY2tlcjogTWF0RGF0ZXBpY2tlcjxhbnk+IHwgTWF0RGF0ZVJhbmdlUGlja2VyPGFueT47XG4gICAgQFZpZXdDaGlsZCgnZGF0ZVBpY2tlcicpXG4gICAgcHVibGljIHNldCBkYXRlUGlja2VyKHZhbHVlOiBNYXREYXRlcGlja2VyPGFueT4gfCBNYXREYXRlUmFuZ2VQaWNrZXI8YW55Pikge1xuICAgICAgICB0aGlzLl9kYXRlUGlja2VyID0gdmFsdWU7XG4gICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuZGF0ZVBpY2tlckluc3RhbmNlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuX2RhdGVQaWNrZXIuc3RhcnRWaWV3ID0gdGhpcy5jYWxlbmRhclZpZXdzVGltZWZyYW1lTWFwcGluZ1t0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLnRpbWVmcmFtZV07XG4gICAgfVxuICAgIHB1YmxpYyBnZXQgZGF0ZVBpY2tlcigpOiBNYXREYXRlcGlja2VyPGFueT4gfCBNYXREYXRlUmFuZ2VQaWNrZXI8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlUGlja2VyO1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuYWN0aXZlJylcbiAgICBnZXQgYWN0aXZlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcGVuZWQkLmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGRlc3Ryb3llZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNhbGVuZGFyVmlld3NUaW1lZnJhbWVNYXBwaW5nOiBhbnkgPSB7XG4gICAgICAgIHllYXI6ICdtdWx0aS15ZWFyJyxcbiAgICAgICAgbW9udGg6ICd5ZWFyJyxcbiAgICAgICAgcXVhcnRlcjogJ25vbmUnLFxuICAgICAgICBkYXk6ICdtb250aCcsXG4gICAgICAgIHdlZWs6ICdtb250aCcsXG4gICAgfSBhcyBjb25zdDtcblxuICAgIHB1YmxpYyByZWFkb25seSBjdXN0b21IZWFkZXIgPSBEckRhdGVQaWNrZXJDdXN0b21IZWFkZXJDb21wb25lbnQ7XG4gICAgcHVibGljIHJlYWRvbmx5ID0gdHJ1ZTtcbiAgICBwdWJsaWMgX21pbjogTW9tZW50O1xuICAgIHByb3RlY3RlZCBfbWF4OiBNb21lbnQ7XG4gICAgcHVibGljIHJlYWRvbmx5IHRpbWVmcmFtZU9wdGlvbiA9IFRpbWVmcmFtZU9wdGlvbjtcblxuICAgIHByb3RlY3RlZCBnZXQgaW5uZXJWYWx1ZSgpOiBNb21lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRlUGlja2VyU2VydmljZS5pbm5lclZhbHVlO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgc2V0IGlubmVyVmFsdWUodmFsdWU6IE1vbWVudCkge1xuICAgICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmlubmVyVmFsdWUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGlzcGxheVZhbHVlJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmlubmVyVmFsdWUkLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSksXG4gICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UudGltZWZyYW1lJC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpLFxuICAgIF0pLnBpcGUoXG4gICAgICAgIHN0YXJ0V2l0aChbbnVsbCwgbnVsbF0pLFxuICAgICAgICBtYXAoKFt2YWx1ZSwgdGltZWZyYW1lXTogW01vbWVudCwgVGltZWZyYW1lT3B0aW9uXSkgPT4gdGhpcy50cmFuc2Zvcm1EaXNwbGF5ZWRWYWx1ZSh2YWx1ZSwgdGltZWZyYW1lKSksXG4gICAgICAgIHRhcCgodmFsdWU6IE1vbWVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbHVlICYmIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuY2FsZW5kYXJJbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuY2FsZW5kYXJJbnN0YW5jZS5hY3RpdmVEYXRlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS5jYWxlbmRhckluc3RhbmNlLnNlbGVjdGVkID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSksXG4gICAgKTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBjaGFuZ2UkID0gbmV3IFN1YmplY3Q8bnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZD4oKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgb3BlbmVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBmYiA9IGluamVjdChGb3JtQnVpbGRlcik7XG5cbiAgICByZWFkb25seSByYW5nZUZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgc3RhcnQ6IHRoaXMuZmIuY29udHJvbDxNb21lbnQgfCBudWxsPihudWxsKSxcbiAgICAgICAgZW5kOiB0aGlzLmZiLmNvbnRyb2w8TW9tZW50IHwgbnVsbD4obnVsbCksXG4gICAgfSk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByb3RlY3RlZCBkYXRlQWRhcHRlcjogRGF0ZUFkYXB0ZXI8YW55PixcbiAgICAgICAgcHVibGljIGRhdGVQaWNrZXJTZXJ2aWNlOiBEckRhdGVQaWNrZXJTZXJ2aWNlLFxuICAgICkge1xuICAgICAgICBkYXRlUGlja2VyU2VydmljZS51cGRhdGVkUXVhcnRlciQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKSkuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZWRJbkNhbGVuZGFyKHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGRhdGVQaWNrZXJTZXJ2aWNlLndlZWtTZWxlY3Rpb25DaGFuZ2UkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJCkpLnN1YnNjcmliZSgoeyBzdGFydCwgZW5kIH0pID0+IHtcbiAgICAgICAgICAgIHRoaXMucmFuZ2VGb3JtLnBhdGNoVmFsdWUoeyBzdGFydCwgZW5kIH0pO1xuICAgICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZWRJbkNhbGVuZGFyKHN0YXJ0KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS5pbm5lclZhbHVlJC5waXBlKGZpbHRlcihCb29sZWFuKSwgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJCkpLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmFuZ2VGb3JtLnBhdGNoVmFsdWUoeyBzdGFydDogdmFsdWUuY2xvbmUoKS5zdGFydE9mKCdpc29XZWVrJyksIGVuZDogdmFsdWUuY2xvbmUoKS5lbmRPZignaXNvV2VlaycpIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBkYXRlRm9ybWF0Rm4gPSB0aGlzLmRhdGVBZGFwdGVyLmZvcm1hdDtcbiAgICAgICAgdGhpcy5kYXRlQWRhcHRlci5mb3JtYXQgPSAoZGF0ZTogTW9tZW50LCBkaXNwbGF5Rm9ybWF0OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGxldCBkYXRlVG9Gb3JtYXQgPSBkYXRlLmNsb25lKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5kYXRlUGlja2VyU2VydmljZS5pc1RpbWVmcmFtZURlcGVuZGluZ09uRlkodGhpcy5kYXRlUGlja2VyU2VydmljZS50aW1lZnJhbWUpKSB7XG4gICAgICAgICAgICAgICAgZGF0ZVRvRm9ybWF0ID0gdGhpcy5kYXRlUGlja2VyU2VydmljZS5zdWJ0cmFjdEZpc2NhbFllYXJNb250aHNGcm9tRGF0ZShkYXRlVG9Gb3JtYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRhdGVGb3JtYXRGbi5jYWxsKHRoaXMuZGF0ZUFkYXB0ZXIsIGRhdGVUb0Zvcm1hdCwgZGlzcGxheUZvcm1hdCk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmZpc2NhbFllYXJNb250aHNNb2RpZmllciA9IHRoaXMuZmlzY2FsWWVhck1vbnRoc01vZGlmaWVyO1xuICAgICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmZpc2NhbFllYXJCYWNrID0gdGhpcy5maXNjYWxZZWFyQmFjaztcbiAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS5kYXRlcGlja2VyRmlsdGVyID0gdGhpcy5kYXRlRmlsdGVyO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3llZCQubmV4dCgpO1xuICAgICAgICB0aGlzLmRlc3Ryb3llZCQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzLmZvcm1hdD8uY3VycmVudFZhbHVlICYmIGNoYW5nZXMuZm9ybWF0LmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlcy5mb3JtYXQucHJldmlvdXNWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVGb3JtYXQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzLmZpc2NhbFllYXJNb250aHNNb2RpZmllcikge1xuICAgICAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS5maXNjYWxZZWFyTW9udGhzTW9kaWZpZXIgPSB0aGlzLmZpc2NhbFllYXJNb250aHNNb2RpZmllcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzLmZpc2NhbFllYXJCYWNrKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmZpc2NhbFllYXJCYWNrID0gdGhpcy5maXNjYWxZZWFyQmFjaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0aW5nIGNvbXBvbmVudCBpbm5lciB2YWx1ZSBhY2NvcmRpbmcgdG8gZGF0ZXBpY2tlciB0aW1lZnJhbWUgKGRheSwgbW9udGggZXRjLilcbiAgICAgKiBhbmQgZGF0ZSBwb3NpdGlvbiBpbiBwZXJpb2QgKHN0YXJ0LCBlbmQsIG1pZGRsZSlcbiAgICAgKi9cbiAgICB0cnlUb05vcm1hbGl6ZVRpbWVmcmFtZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGltZWZyYW1lID0gdGhpcy5kYXRlUGlja2VyU2VydmljZS50aW1lZnJhbWU7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRWYWx1ZSA9IHRoaXMuaW5uZXJWYWx1ZS5jbG9uZSgpO1xuICAgICAgICBjb25zdCB1bml0ID0gdGltZWZyYW1lID09PSBUaW1lZnJhbWVPcHRpb24uV0VFSyA/ICdpc29XZWVrJyA6IHRpbWVmcmFtZTtcbiAgICAgICAgc3dpdGNoICh0aGlzLnBlcmlvZFBvc2l0aW9uKSB7XG4gICAgICAgICAgICBjYXNlIERhdGVQaWNrZXJQZXJpb2RQb3NpdGlvbi5TVEFSVF9PRl9QRVJJT0Q6XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UudGltZWZyYW1lID09PSBUaW1lZnJhbWVPcHRpb24uUVVBUlRFUikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLnNldFN0YXJ0T2ZDdXJyZW50UXVhcnRlcihub3JtYWxpemVkVmFsdWUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kYXRlUGlja2VyU2VydmljZS50aW1lZnJhbWUgPT09IFRpbWVmcmFtZU9wdGlvbi5ZRUFSKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2Uuc2V0U3RhcnRPZlF1YXJ0ZXIobm9ybWFsaXplZFZhbHVlLCAxKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkVmFsdWUuc3RhcnRPZih1bml0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERhdGVQaWNrZXJQZXJpb2RQb3NpdGlvbi5FTkRfT0ZfUEVSSU9EOlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLnRpbWVmcmFtZSA9PT0gVGltZWZyYW1lT3B0aW9uLlFVQVJURVIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS5zZXRFbmRPZkN1cnJlbnRRdWFydGVyKG5vcm1hbGl6ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLnRpbWVmcmFtZSA9PT0gVGltZWZyYW1lT3B0aW9uLllFQVIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS5zZXRFbmRPZlF1YXJ0ZXIobm9ybWFsaXplZFZhbHVlLCA0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkVmFsdWUuZW5kT2YodW5pdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEYXRlUGlja2VyUGVyaW9kUG9zaXRpb24uTUlERExFX09GX1BFUklPRDpcbiAgICAgICAgICAgICAgICBsZXQgZW5kT2ZQZXJpb2Q6IE1vbWVudDtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRlUGlja2VyU2VydmljZS50aW1lZnJhbWUgPT09IFRpbWVmcmFtZU9wdGlvbi5RVUFSVEVSKSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZE9mUGVyaW9kID0gbm9ybWFsaXplZFZhbHVlLmNsb25lKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2Uuc2V0U3RhcnRPZkN1cnJlbnRRdWFydGVyKG5vcm1hbGl6ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2Uuc2V0RW5kT2ZDdXJyZW50UXVhcnRlcihlbmRPZlBlcmlvZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLnRpbWVmcmFtZSA9PT0gVGltZWZyYW1lT3B0aW9uLllFQVIpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kT2ZQZXJpb2QgPSBub3JtYWxpemVkVmFsdWUuY2xvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS5zZXRTdGFydE9mUXVhcnRlcihub3JtYWxpemVkVmFsdWUsIDEpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLnNldEVuZE9mUXVhcnRlcihlbmRPZlBlcmlvZCwgNCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZFZhbHVlLnN0YXJ0T2YodW5pdCk7XG4gICAgICAgICAgICAgICAgICAgIGVuZE9mUGVyaW9kID0gbm9ybWFsaXplZFZhbHVlLmNsb25lKCkuZW5kT2YodW5pdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBlbmRPZlBlcmlvZC5kaWZmKG5vcm1hbGl6ZWRWYWx1ZSwgJ3NlY29uZHMnKTtcbiAgICAgICAgICAgICAgICBub3JtYWxpemVkVmFsdWUuYWRkKGRpZmYgLyAyICsgMSwgJ3NlY29uZHMnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgbm9ybWFsaXplZFZhbHVlLnN0YXJ0T2YodW5pdCkuc2V0KCdob3VycycsIDEyKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmlubmVyVmFsdWUgPSBub3JtYWxpemVkVmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGNob3NlblBlcmlvZEhhbmRsZXIoY2hvc2VuRGF0ZTogTW9tZW50LCB0aW1lZnJhbWU6IFRpbWVmcmFtZU9wdGlvbiwgcGlja2VyOiBNYXREYXRlcGlja2VyPGFueT4pIHtcbiAgICAgICAgaWYgKHRpbWVmcmFtZSA9PT0gVGltZWZyYW1lT3B0aW9uLllFQVIpIHtcbiAgICAgICAgICAgIGNob3NlbkRhdGUgPSB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmFkZEZpc2NhbFllYXJNb250aHNUb0RhdGUoY2hvc2VuRGF0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5kYXRlUGlja2VyU2VydmljZS50aW1lZnJhbWUgPT09IFRpbWVmcmFtZU9wdGlvbi5RVUFSVEVSICYmIHRpbWVmcmFtZSA9PT0gVGltZWZyYW1lT3B0aW9uLllFQVIpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuY2FsZW5kYXJJbnN0YW5jZS5jdXJyZW50VmlldyA9IENhbGVuZGFyVmlldy5GT1JfUVVBUlRFUlMgYXMgTWF0Q2FsZW5kYXJWaWV3O1xuICAgICAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS5jYWxlbmRhckluc3RhbmNlLmFjdGl2ZURhdGUgPSBjaG9zZW5EYXRlO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UudGltZWZyYW1lID09PSB0aW1lZnJhbWUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2VkSW5DYWxlbmRhcihjaG9zZW5EYXRlKTtcbiAgICAgICAgICAgIHBpY2tlci5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0dGluZyB2YWx1ZSBmcm9tIG91dHNpZGUgb2YgY29tcG9uZW50IHZpYSBuZ01vZGVsIG9yIGZvcm1Db250cm9sIHVwZGF0ZXNcbiAgICAgKi9cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIC8qXG4gICAgICAgICAqIFdlIG5lZWQga2VlcCBsb2NhbCB0aW1lc3RhbXAgZm9yIEVsZWN0cm9uIEFwcGxpY2F0aW9uXG4gICAgICAgICAqIElzc3VlIGluIGVsZWN0cm9uOiB3aGVuIHdlIHNlbGVjdCBkYXRlLCBkYXRlIHNlbGVjdCB3aXRoIC0xIChpZiB3ZSdyZSBjaG9vc2luZyAyMDIzLCBvdXRwdXQgd2lsbCBiZSAyMDIyKVxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3QgY29udmVydGVkVmFsdWUgPSAoZG9jdW1lbnQgYXMgYW55KS5pc19lbGVjdHJvbiA/IG1vbWVudC51bml4KHZhbHVlKSA6IG1vbWVudC51bml4KHZhbHVlKS51dGMoKTtcbiAgICAgICAgdGhpcy5pbm5lclZhbHVlID0gdmFsdWUgPyBjb252ZXJ0ZWRWYWx1ZSA6IG51bGw7XG4gICAgICAgIGlmICh0aGlzLmlubmVyVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudHJ5VG9Ob3JtYWxpemVUaW1lZnJhbWUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25Ub3VjaGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQgPSBub29wO1xuICAgIHB1YmxpYyBvbkNoYW5nZUNhbGxiYWNrOiAodmFsdWU6IG51bWJlcikgPT4gdm9pZCA9IG5vb3A7XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBudW1iZXIpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrID0gKHZhbHVlOiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIGZuKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlJC5uZXh0KHZhbHVlKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZENhbGxiYWNrID0gZm47XG4gICAgfVxuXG4gICAgcHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLy8gU2hvdWxkIGJlIGFzIGFycm93IGZ1bmN0aW9uIHRvIGF2b2lkIGxvc2Ugc2NvcGVcbiAgICBwdWJsaWMgZGF0ZUZpbHRlciA9IChtb21lbnQ6IE1vbWVudCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5kYXRlcGlja2VyRmlsdGVyICYmIG1vbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZXBpY2tlckZpbHRlcihtb21lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcblxuICAgIHB1YmxpYyB2YWx1ZUNoYW5nZWRJbkNhbGVuZGFyKHZhbDogTW9tZW50KSB7XG4gICAgICAgIGlmICh2YWwgIT09IHRoaXMuaW5uZXJWYWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVUb1NldCA9IHZhbD8uY2xvbmUoKTtcbiAgICAgICAgICAgIGlmICh2YWx1ZVRvU2V0ICYmIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuaXNUaW1lZnJhbWVEZXBlbmRpbmdPbkZZKHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UudGltZWZyYW1lKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2Uuc3VidHJhY3RGaXNjYWxZZWFyU2hpZnRGb3JZZWFyKHZhbHVlVG9TZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZUZyb21Nb21lbnQodmFsdWVUb1NldCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgaW5uZXIgdmFsdWUgZnJvbSBNb21lbnQgYW5kIHByb3BhZ2F0ZVxuICAgICAqXG4gICAgICogQHBhcmFtIG1vbWVudERhdGVcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgc2V0VmFsdWVGcm9tTW9tZW50KG1vbWVudERhdGU6IE1vbWVudCkge1xuICAgICAgICB0aGlzLnNldFZhbHVlKG1vbWVudERhdGUudW5peCgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgaW5uZXIgdmFsdWUgZnJvbSB0aW1lc3RhbXAgYW5kIHByb3BhZ2F0ZVxuICAgICAqXG4gICAgICogQHBhcmFtIHRpbWVzdGFtcFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBzZXRWYWx1ZSh0aW1lc3RhbXA6IG51bWJlcik6IHZvaWQge1xuICAgICAgICAvLyBpc1ZhbHVlVXBkYXRpbmcgaXMgcmVxdWlyZWQgZm9yIG1hbmFnZSBjbGlja3Mgb24gc2FtZSBkYXRlczogaWYgaXNWYWx1ZVVwZGF0aW5nIC0gdHJ1ZSB0aGVuXG4gICAgICAgIC8vIGRheXMgYXJlIGRpZmZlcmVudCBhbmQgc3Vic2NyaXB0aW9uIG9uIGNhbGVuZGFyIGRheSBjbGljayBhY3Rpb24gd29uJ3QgdHJpZ2dlciBBY2Nlc3NvciBuZ01vZGVsIHVwZGF0ZVxuICAgICAgICAvLyBvbmUgbW9yZSB0aW1lXG4gICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuaXNWYWx1ZVVwZGF0aW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy53cml0ZVZhbHVlKHRpbWVzdGFtcCk7XG4gICAgICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjayh0aGlzLmlubmVyVmFsdWUudW5peCgpKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmlzVmFsdWVVcGRhdGluZyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgdHJhbnNmb3JtRGlzcGxheWVkVmFsdWUodmFsdWU6IE1vbWVudCwgdGltZWZyYW1lOiBUaW1lZnJhbWVPcHRpb24pOiBNb21lbnQge1xuICAgICAgICBjb25zdCB2YWx1ZVRvUmV0dXJuID0gdmFsdWU/LmNsb25lKCk7XG4gICAgICAgIGlmICh2YWx1ZVRvUmV0dXJuICYmIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuaXNUaW1lZnJhbWVEZXBlbmRpbmdPbkZZKHRpbWVmcmFtZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuYWRkRmlzY2FsWWVhclNoaWZ0Rm9yWWVhcih2YWx1ZVRvUmV0dXJuKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWVUb1JldHVybjtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgdXBkYXRlRm9ybWF0KCk6IHZvaWQge1xuICAgICAgICBsZXQgdGltZWZyYW1lO1xuICAgICAgICBsZXQgZm9ybWF0ID0gdGhpcy5kYXRlUGlja2VyU2VydmljZS5nZXRDb25maWd1cmVkRm9ybWF0KHRoaXMuZm9ybWF0IGFzIFRpbWVmcmFtZU9wdGlvbik7XG4gICAgICAgIGlmIChmb3JtYXQpIHtcbiAgICAgICAgICAgIHRpbWVmcmFtZSA9IHRoaXMuZm9ybWF0IGFzIFRpbWVmcmFtZU9wdGlvbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvcm1hdCA9IHRoaXMuZGF0ZVBpY2tlclNlcnZpY2Uubm9ybWFsaXplVmFsdWUodGhpcy5mb3JtYXQpO1xuICAgICAgICAgICAgdGltZWZyYW1lID0gdGhpcy5kYXRlUGlja2VyU2VydmljZS5nZXRUaW1lZnJhbWUoZm9ybWF0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLnRpbWVmcmFtZSA9IHRpbWVmcmFtZTtcbiAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS5mb3JtYXQkLm5leHQoZm9ybWF0KTtcbiAgICB9XG5cbiAgICBvbk9wZW4oKSB7XG4gICAgICAgIHRoaXMub3BlbmVkJC5uZXh0KHRydWUpO1xuICAgIH1cblxuICAgIG9uQ0xvc2UoKSB7XG4gICAgICAgIGlmICh0aGlzLmlubmVyVmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vbk5vcm1hbGl6ZWRUaW1lc3RhbXAgPSB0aGlzLmlubmVyVmFsdWUudW5peCgpO1xuICAgICAgICAgICAgdGhpcy53cml0ZVZhbHVlKG5vbk5vcm1hbGl6ZWRUaW1lc3RhbXApO1xuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFZhbHVlID0gdGhpcy5pbm5lclZhbHVlLnVuaXgoKTtcbiAgICAgICAgICAgIGlmIChub3JtYWxpemVkVmFsdWUgIT09IG5vbk5vcm1hbGl6ZWRUaW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sobm9ybWFsaXplZFZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9wZW5lZCQubmV4dChmYWxzZSk7XG4gICAgfVxufVxuIiwiPGkgKm5nSWY9XCIhdXNlQnV0dG9uXCIgY2xhc3M9XCJkci1pY29uLWRhdGVcIiAoY2xpY2spPVwiZGF0ZVBpY2tlci5vcGVuKClcIj48L2k+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCIoZGF0ZVBpY2tlclNlcnZpY2UudGltZWZyYW1lJCB8IGFzeW5jKSA9PT0gdGltZWZyYW1lT3B0aW9uLldFRUtcIj5cbiAgICA8aW5wdXRcbiAgICAgICAgW2F0dHIuaWRdPVwiaWRcIlxuICAgICAgICBbbmdNb2RlbF09XCJpbnB1dC52YWx1ZVwiXG4gICAgICAgIChjbGljayk9XCJkYXRlUGlja2VyLm9wZW4oKVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgIFttaW5dPVwiX21pblwiXG4gICAgICAgIFttYXhdPVwiX21heFwiIC8+XG5cbiAgICA8bWF0LWRhdGUtcmFuZ2UtaW5wdXQgW2Zvcm1Hcm91cF09XCJyYW5nZUZvcm1cIiBbcmFuZ2VQaWNrZXJdPVwiZGF0ZVBpY2tlclwiIFtkYXRlRmlsdGVyXT1cImRhdGVGaWx0ZXJcIiBjbGFzcz1cInJhbmdlLWlucHV0XCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgbWF0U3RhcnREYXRlXG4gICAgICAgICAgICAjaW5wdXRcbiAgICAgICAgICAgIFtkckRhdGVQaWNrZXJGb3JtYXRdPVwiZGF0ZVBpY2tlclNlcnZpY2UuZm9ybWF0JCB8IGFzeW5jXCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInN0YXJ0XCJcbiAgICAgICAgICAgIChkYXRlQ2hhbmdlKT1cInZhbHVlQ2hhbmdlZEluQ2FsZW5kYXIocmFuZ2VGb3JtLnZhbHVlLnN0YXJ0KVwiIC8+XG4gICAgICAgIDxpbnB1dCBtYXRFbmREYXRlIFtkckRhdGVQaWNrZXJGb3JtYXRdPVwiZGF0ZVBpY2tlclNlcnZpY2UuZm9ybWF0JCB8IGFzeW5jXCIgZm9ybUNvbnRyb2xOYW1lPVwiZW5kXCIgLz5cbiAgICA8L21hdC1kYXRlLXJhbmdlLWlucHV0PlxuXG4gICAgPG1hdC1kYXRlLXJhbmdlLXBpY2tlclxuICAgICAgICAjZGF0ZVBpY2tlclxuICAgICAgICBbc3RhcnRBdF09XCJfc3RhcnRBdFwiXG4gICAgICAgIFtwYW5lbENsYXNzXT1cIidkci13ZWVrLWRhdGVwaWNrZXInICsgKHBhbmVsQ2xhc3MgPyAnICcgKyBwYW5lbENsYXNzIDogJycpXCJcbiAgICAgICAgW2NhbGVuZGFySGVhZGVyQ29tcG9uZW50XT1cImN1c3RvbUhlYWRlclwiXG4gICAgICAgICh5ZWFyU2VsZWN0ZWQpPVwiY2hvc2VuUGVyaW9kSGFuZGxlcigkZXZlbnQsIHRpbWVmcmFtZU9wdGlvbi5ZRUFSLCBkYXRlUGlja2VyKVwiXG4gICAgICAgIChtb250aFNlbGVjdGVkKT1cImNob3NlblBlcmlvZEhhbmRsZXIoJGV2ZW50LCB0aW1lZnJhbWVPcHRpb24uTU9OVEgsIGRhdGVQaWNrZXIpXCJcbiAgICAgICAgKG9wZW5lZCk9XCJvbk9wZW4oKVwiXG4gICAgICAgIChjbG9zZWQpPVwib25DTG9zZSgpXCI+XG4gICAgPC9tYXQtZGF0ZS1yYW5nZS1waWNrZXI+XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cIihkYXRlUGlja2VyU2VydmljZS50aW1lZnJhbWUkIHwgYXN5bmMpICE9PSB0aW1lZnJhbWVPcHRpb24uV0VFS1wiPlxuICAgIDxpbnB1dFxuICAgICAgICBbYXR0ci5pZF09XCJpZFwiXG4gICAgICAgIFtuZ01vZGVsXT1cImRpc3BsYXlWYWx1ZSQgfCBhc3luY1wiXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInZhbHVlQ2hhbmdlZEluQ2FsZW5kYXIoJGV2ZW50KVwiXG4gICAgICAgIChjbGljayk9XCJkYXRlUGlja2VyLm9wZW4oKVwiXG4gICAgICAgIFttYXREYXRlcGlja2VyXT1cImRhdGVQaWNrZXJcIlxuICAgICAgICBbbWF0RGF0ZXBpY2tlckZpbHRlcl09XCJkYXRlRmlsdGVyXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgW2RyRGF0ZVBpY2tlckZvcm1hdF09XCJkYXRlUGlja2VyU2VydmljZS5mb3JtYXQkIHwgYXN5bmNcIlxuICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICBbbWluXT1cIl9taW5cIlxuICAgICAgICBbbWF4XT1cIl9tYXhcIlxuICAgICAgICBbY2xhc3MuaGlkZGVuLWNhbGVuZGFyLWlucHV0XT1cInVzZUJ1dHRvblwiIC8+XG5cbiAgICA8ZHItYnV0dG9uXG4gICAgICAgICpuZ0lmPVwidXNlQnV0dG9uXCJcbiAgICAgICAgW2ljb25dPVwiJ2RyLWljb24tZGF0ZSdcIlxuICAgICAgICBbaWNvbkFmdGVyXT1cImljb25BZnRlckJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJkYXRlUGlja2VyLm9wZW4oKVwiXG4gICAgICAgIGNsYXNzPVwiZGF0ZXBpY2tlci1idXR0b25cIj5cbiAgICAgICAge3sgYnV0dG9uTGFiZWwgfHwgJ1NlbGVjdCBEYXRlJyB9fVxuICAgIDwvZHItYnV0dG9uPlxuXG4gICAgPG1hdC1kYXRlcGlja2VyXG4gICAgICAgICNkYXRlUGlja2VyXG4gICAgICAgIFtwYW5lbENsYXNzXT1cInBhbmVsQ2xhc3NcIlxuICAgICAgICBbc3RhcnRBdF09XCJfc3RhcnRBdFwiXG4gICAgICAgIFtjYWxlbmRhckhlYWRlckNvbXBvbmVudF09XCJjdXN0b21IZWFkZXJcIlxuICAgICAgICAoeWVhclNlbGVjdGVkKT1cImNob3NlblBlcmlvZEhhbmRsZXIoJGV2ZW50LCB0aW1lZnJhbWVPcHRpb24uWUVBUiwgZGF0ZVBpY2tlcilcIlxuICAgICAgICAobW9udGhTZWxlY3RlZCk9XCJjaG9zZW5QZXJpb2RIYW5kbGVyKCRldmVudCwgdGltZWZyYW1lT3B0aW9uLk1PTlRILCBkYXRlUGlja2VyKVwiXG4gICAgICAgIChvcGVuZWQpPVwib25PcGVuKClcIlxuICAgICAgICAoY2xvc2VkKT1cIm9uQ0xvc2UoKVwiPlxuICAgIDwvbWF0LWRhdGVwaWNrZXI+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
@@ -1,7 +1,7 @@
1
1
  import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, TemplateRef, } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import { CustomDateAdapter, DrDatePickerComponent } from '../dr-date-picker/dr-date-picker.component';
4
- import { DateAdapter, MatNativeDateModule } from '@angular/material/core';
4
+ import { DateAdapter } from '@angular/material/core';
5
5
  import { DrDatePickerService } from '../services/dr-date-picker.service';
6
6
  import { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';
7
7
  import { TimeframeOption } from '../../../models/datePicker';
@@ -11,7 +11,6 @@ import { PRESET_TAGS_LIST } from '../../../models/constants';
11
11
  import { DrButtonComponent } from '../../button/button.component';
12
12
  import { DrTooltipModule } from '../../../dr-tooltip/dr-tooltip.module';
13
13
  import { MatDatepickerModule } from '@angular/material/datepicker';
14
- import { MatMomentDateModule } from '@angular/material-moment-adapter';
15
14
  import * as i0 from "@angular/core";
16
15
  import * as i1 from "@angular/material/core";
17
16
  import * as i2 from "../services/dr-date-picker.service";
@@ -253,22 +252,11 @@ export class DrDatePickerWithTimeframeComponent extends DrDatePickerComponent {
253
252
  i0.ɵɵproperty("ngIf", !ctx.disabled);
254
253
  i0.ɵɵadvance(1);
255
254
  i0.ɵɵproperty("calendarHeaderComponent", ctx.customHeader)("panelClass", ctx.combinedPanelClass);
256
- } }, dependencies: [CommonModule, i3.NgIf, i3.NgTemplateOutlet, i3.AsyncPipe, FormsModule, i4.DefaultValueAccessor, i4.NgControlStatus, i4.NgModel, MatDatepickerModule, i5.MatDatepicker, i5.MatDatepickerInput, MatNativeDateModule,
257
- MatMomentDateModule,
258
- DrButtonComponent,
259
- DrTooltipModule, i6.DrTooltipDirective], styles: ["[_nghost-%COMP%]{position:relative;width:100%;display:flex;flex-direction:row;min-height:32px;height:32px;font-size:14px;font-family:Poppins,sans-serif;background-color:#fff;border:1px solid #9ea1aa;border-radius:6px;color:#333;overflow:hidden;outline:none;cursor:pointer}.use-button-picker[_nghost-%COMP%]{border:none}[_nghost-%COMP%]:hover{border-color:#9ea1aa}.active[_nghost-%COMP%], [_nghost-%COMP%]:focus-within{border-color:#4646ce!important;color:#333}.disabled[_nghost-%COMP%]{pointer-events:none;border:1px solid #aeabac;background:#f0f1f4;color:#aeabac}.disabled[_nghost-%COMP%]:after{color:#aeabac}.ng-valid.ng-dirty[_nghost-%COMP%]{border-color:#037c5a}.ng-invalid.ng-dirty[_nghost-%COMP%]:not(:focus-within){border-color:#bf1d30!important}.ng-untouched.ng-valid[_nghost-%COMP%]{border-color:#9ea1aa}.use-button-picker[_nghost-%COMP%]:after{display:none}[_nghost-%COMP%]:not(.use-button-picker):after, [_nghost-%COMP%]:not(.use-button-picker):before{position:absolute;display:flex;border-color:#6d6e6f transparent transparent;color:#6d6e6f}[_nghost-%COMP%]:not(.use-button-picker):after{font-family:DataRails!important;content:var(--dr-icon-arrow-down, \"\\ea18\");font-size:24px;color:#6d6e6f;top:0;bottom:0;right:8px;pointer-events:none;position:absolute;display:flex;align-items:center;justify-content:center}[_nghost-%COMP%] i[_ngcontent-%COMP%]{display:flex;align-items:center;position:absolute;color:#6d6e6f;left:8px;top:0;bottom:0}[_nghost-%COMP%] input[_ngcontent-%COMP%]{display:flex;flex-grow:1;height:100%;border:none;text-align:left;padding-left:35px;padding-right:25px;cursor:pointer!important;outline:none}[_nghost-%COMP%] input.when-quarter[_ngcontent-%COMP%]{position:absolute;visibility:hidden}[_nghost-%COMP%] input[_ngcontent-%COMP%]:disabled{border:none;color:#aeabac;background:transparent}[_nghost-%COMP%] input[_ngcontent-%COMP%]::-webkit-search-decoration, [_nghost-%COMP%] input[_ngcontent-%COMP%]::-webkit-search-cancel-button, [_nghost-%COMP%] input[_ngcontent-%COMP%]::-webkit-search-results-button, [_nghost-%COMP%] input[_ngcontent-%COMP%]::-webkit-search-results-decoration{-webkit-appearance:none}[_nghost-%COMP%] input[_ngcontent-%COMP%]::placeholder{color:#6d6e6f;font-size:14px;line-height:18px}[_nghost-%COMP%] input.hidden-calendar-input[_ngcontent-%COMP%]{width:0;height:0;padding:0}[_nghost-%COMP%] .datepicker-button[_ngcontent-%COMP%]{width:100%}[_nghost-%COMP%] .range-input[_ngcontent-%COMP%]{position:absolute;height:0;width:0;bottom:0;left:0;z-index:-1} .mat-datepicker-popup .dr-week-datepicker{min-width:min(400px,100vw)!important} .mat-datepicker-popup .dr-week-datepicker .mat-calendar-body-today{background:#f2f2fb;color:#4646ce;border:none;font-weight:600} .mat-datepicker-popup .dr-week-datepicker .mat-calendar-body-cell-preview{border:none} .mat-datepicker-popup .dr-week-datepicker .mat-calendar-body-range-start .mat-calendar-body-cell-preview, .mat-datepicker-popup .dr-week-datepicker .mat-calendar-body-preview-start .mat-calendar-body-cell-preview{left:5%;width:95%;border-top-left-radius:40px;border-bottom-left-radius:40px} .mat-datepicker-popup .dr-week-datepicker .mat-calendar-body-range-end .mat-calendar-body-cell-preview, .mat-datepicker-popup .dr-week-datepicker .mat-calendar-body-preview-end .mat-calendar-body-cell-preview{right:5%;width:95%;border-top-right-radius:40px;border-bottom-right-radius:40px} .mat-datepicker-popup .dr-week-datepicker .mat-calendar-body-in-preview:not(.mat-calendar-body-in-range) .mat-calendar-body-cell-preview{background-color:#f5f5f5} .mat-datepicker-popup .dr-week-datepicker .mat-calendar-body-in-preview:not(.mat-calendar-body-in-range)>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:transparent!important} .mat-datepicker-popup .dr-week-datepicker .mat-calendar-body-in-preview:not(.mat-calendar-body-in-range)>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical):not(.mat-calendar-body-today){color:#19181a!important;font-weight:400!important} .mat-datepicker-popup .dr-week-datepicker .mat-calendar-body-in-range .mat-calendar-body-cell-preview{background:#4646ce!important} .mat-datepicker-popup .dr-week-datepicker .mat-calendar-body-in-range:before{background:initial!important} .mat-datepicker-popup .dr-week-datepicker .mat-calendar-body-in-range .mat-calendar-body-selected, .mat-datepicker-popup .dr-week-datepicker .mat-calendar-body-in-range .mat-calendar-body-cell-content{background:transparent!important;color:#f2f2fb!important;font-weight:600!important} .mat-datepicker-popup .mat-datepicker-content{margin:7px 0;box-shadow:0 4px 8px 1px #00000040;border-radius:12px!important} .mat-datepicker-popup .mat-datepicker-content button[disabled]{border:inherit;color:inherit;background-color:inherit} .mat-datepicker-popup .mat-datepicker-content button[disabled]:hover{border:inherit} .mat-datepicker-popup .cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical), .mat-datepicker-popup .cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:#fff} .mat-datepicker-popup .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background:#f2f2fb;color:#4646ce;font-weight:600} .mat-datepicker-popup .mat-calendar-body-selected{background-color:#4646ce;color:#f2f2fb;font-weight:600} .mat-datepicker-popup .mat-calendar-body-today.mat-calendar-body-selected{box-shadow:none} .mat-datepicker-popup .mat-button-focus-overlay{background:#f5f5f5} .mat-datepicker-popup .mat-calendar-controls .mat-icon-button:hover .mat-button-focus-overlay{opacity:1!important;background:#f5f5f5;transition:opacity .2s cubic-bezier(.35,0,.25,1)} .mat-datepicker-popup .mat-calendar-controls .mat-calendar-period-button:hover{background:#f5f5f5;transition:background .2s cubic-bezier(.35,0,.25,1)} .mat-datepicker-popup .mat-calendar-table-header th{font-size:14px;font-weight:600;color:#333} .mat-datepicker-popup .mat-calendar-table-header-divider{display:none} .mat-datepicker-popup .mat-calendar-body-label{color:#fff;padding:0} .mat-datepicker-popup .mat-calendar-body>tr[aria-hidden=true]>.mat-calendar-body-label{display:none} .mat-datepicker-popup .mat-calendar-content{display:flex} .mat-datepicker-popup .mat-calendar-content dr-week-selector{flex:0} .mat-datepicker-popup .mat-calendar-content mat-month-view, .mat-datepicker-popup .mat-calendar-content mat-multi-year-view, .mat-datepicker-popup .mat-calendar-content mat-year-view{flex:1}[_nghost-%COMP%]{border:none;display:flex;align-items:center;width:-moz-fit-content;width:fit-content;background:transparent}[_nghost-%COMP%]:after{visibility:hidden}.disabled[_nghost-%COMP%]{border:none;padding:0 28px;background:transparent}.disabled[_nghost-%COMP%] .dr-datepicker-input-container[_ngcontent-%COMP%]{cursor:default;color:#aeabac}.disabled[_nghost-%COMP%] .dr-datepicker-input-container__formatted-value-display[_ngcontent-%COMP%]{text-decoration:none}[_nghost-%COMP%] .dr-datepicker-input-container[_ngcontent-%COMP%]{display:flex;align-items:center;gap:4px;cursor:pointer;color:#6d6e6f;padding-right:4px}[_nghost-%COMP%] .dr-datepicker-input-container[_ngcontent-%COMP%]:hover, [_nghost-%COMP%] .dr-datepicker-input-container[_ngcontent-%COMP%]:hover .dr-icon-date[_ngcontent-%COMP%]{color:#333}[_nghost-%COMP%] .dr-datepicker-input-container[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{visibility:hidden;position:absolute;width:100%}[_nghost-%COMP%] .dr-datepicker-input-container__formatted-value-display[_ngcontent-%COMP%]{font-size:14px;line-height:24px;font-weight:400;width:auto;text-decoration-line:underline}[_nghost-%COMP%] .dr-datepicker-input-container[_ngcontent-%COMP%] .dr-icon-date[_ngcontent-%COMP%]{display:block;position:relative;left:unset} .date-picker-preset-tag{width:386px!important} .date-picker-preset-tag .mat-calendar-content{padding-left:32px!important;padding-right:32px!important}@media screen and (max-width: 410px){.mat-datepicker-input[_ngcontent-%COMP%]{width:100vw!important} .date-picker-preset-tag{width:calc(100vw - 16px)!important} .date-picker-preset-tag .dr-datepicker-preset-date__tags{justify-content:center;margin-left:-32px;margin-right:-32px}}"], changeDetection: 0 }); }
255
+ } }, dependencies: [CommonModule, i3.NgIf, i3.NgTemplateOutlet, i3.AsyncPipe, FormsModule, i4.DefaultValueAccessor, i4.NgControlStatus, i4.NgModel, MatDatepickerModule, i5.MatDatepicker, i5.MatDatepickerInput, DrButtonComponent, DrTooltipModule, i6.DrTooltipDirective], styles: ["[_nghost-%COMP%]{position:relative;width:100%;display:flex;flex-direction:row;min-height:32px;height:32px;font-size:14px;font-family:Poppins,sans-serif;background-color:#fff;border:1px solid #9ea1aa;border-radius:6px;color:#333;overflow:hidden;outline:none;cursor:pointer}.use-button-picker[_nghost-%COMP%]{border:none}[_nghost-%COMP%]:hover{border-color:#9ea1aa}.active[_nghost-%COMP%], [_nghost-%COMP%]:focus-within{border-color:#4646ce!important;color:#333}.disabled[_nghost-%COMP%]{pointer-events:none;border:1px solid #aeabac;background:#f0f1f4;color:#aeabac}.disabled[_nghost-%COMP%]:after{color:#aeabac}.ng-valid.ng-dirty[_nghost-%COMP%]{border-color:#037c5a}.ng-invalid.ng-dirty[_nghost-%COMP%]:not(:focus-within){border-color:#bf1d30!important}.ng-untouched.ng-valid[_nghost-%COMP%]{border-color:#9ea1aa}.use-button-picker[_nghost-%COMP%]:after{display:none}[_nghost-%COMP%]:not(.use-button-picker):after, [_nghost-%COMP%]:not(.use-button-picker):before{position:absolute;display:flex;border-color:#6d6e6f transparent transparent;color:#6d6e6f}[_nghost-%COMP%]:not(.use-button-picker):after{font-family:DataRails!important;content:var(--dr-icon-arrow-down, \"\\ea18\");font-size:24px;color:#6d6e6f;top:0;bottom:0;right:8px;pointer-events:none;position:absolute;display:flex;align-items:center;justify-content:center}[_nghost-%COMP%] i[_ngcontent-%COMP%]{display:flex;align-items:center;position:absolute;color:#6d6e6f;left:8px;top:0;bottom:0}[_nghost-%COMP%] input[_ngcontent-%COMP%]{display:flex;flex-grow:1;height:100%;border:none;text-align:left;padding-left:35px;padding-right:25px;cursor:pointer!important;outline:none}[_nghost-%COMP%] input.when-quarter[_ngcontent-%COMP%]{position:absolute;visibility:hidden}[_nghost-%COMP%] input[_ngcontent-%COMP%]:disabled{border:none;color:#aeabac;background:transparent}[_nghost-%COMP%] input[_ngcontent-%COMP%]::-webkit-search-decoration, [_nghost-%COMP%] input[_ngcontent-%COMP%]::-webkit-search-cancel-button, [_nghost-%COMP%] input[_ngcontent-%COMP%]::-webkit-search-results-button, [_nghost-%COMP%] input[_ngcontent-%COMP%]::-webkit-search-results-decoration{-webkit-appearance:none}[_nghost-%COMP%] input[_ngcontent-%COMP%]::placeholder{color:#6d6e6f;font-size:14px;line-height:18px}[_nghost-%COMP%] input.hidden-calendar-input[_ngcontent-%COMP%]{width:0;height:0;padding:0}[_nghost-%COMP%] .datepicker-button[_ngcontent-%COMP%]{width:100%}[_nghost-%COMP%] .range-input[_ngcontent-%COMP%]{position:absolute;height:0;width:0;bottom:0;left:0;z-index:-1} .mat-datepicker-popup .dr-week-datepicker{min-width:min(400px,100vw)!important} .mat-datepicker-popup .dr-week-datepicker .mat-calendar-body-today{background:#f2f2fb;color:#4646ce;border:none;font-weight:600} .mat-datepicker-popup .dr-week-datepicker .mat-calendar-body-cell-preview{border:none} .mat-datepicker-popup .dr-week-datepicker .mat-calendar-body-range-start .mat-calendar-body-cell-preview, .mat-datepicker-popup .dr-week-datepicker .mat-calendar-body-preview-start .mat-calendar-body-cell-preview{left:5%;width:95%;border-top-left-radius:40px;border-bottom-left-radius:40px} .mat-datepicker-popup .dr-week-datepicker .mat-calendar-body-range-end .mat-calendar-body-cell-preview, .mat-datepicker-popup .dr-week-datepicker .mat-calendar-body-preview-end .mat-calendar-body-cell-preview{right:5%;width:95%;border-top-right-radius:40px;border-bottom-right-radius:40px} .mat-datepicker-popup .dr-week-datepicker .mat-calendar-body-in-preview:not(.mat-calendar-body-in-range) .mat-calendar-body-cell-preview{background-color:#f5f5f5} .mat-datepicker-popup .dr-week-datepicker .mat-calendar-body-in-preview:not(.mat-calendar-body-in-range)>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:transparent!important} .mat-datepicker-popup .dr-week-datepicker .mat-calendar-body-in-preview:not(.mat-calendar-body-in-range)>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical):not(.mat-calendar-body-today){color:#19181a!important;font-weight:400!important} .mat-datepicker-popup .dr-week-datepicker .mat-calendar-body-in-range .mat-calendar-body-cell-preview{background:#4646ce!important} .mat-datepicker-popup .dr-week-datepicker .mat-calendar-body-in-range:before{background:initial!important} .mat-datepicker-popup .dr-week-datepicker .mat-calendar-body-in-range .mat-calendar-body-selected, .mat-datepicker-popup .dr-week-datepicker .mat-calendar-body-in-range .mat-calendar-body-cell-content{background:transparent!important;color:#f2f2fb!important;font-weight:600!important} .mat-datepicker-popup .mat-datepicker-content{margin:7px 0;box-shadow:0 4px 8px 1px #00000040;border-radius:12px!important} .mat-datepicker-popup .mat-datepicker-content button[disabled]{border:inherit;color:inherit;background-color:inherit} .mat-datepicker-popup .mat-datepicker-content button[disabled]:hover{border:inherit} .mat-datepicker-popup .cdk-keyboard-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical), .mat-datepicker-popup .cdk-program-focused .mat-calendar-body-active>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background-color:#fff} .mat-datepicker-popup .mat-calendar-body-cell:not(.mat-calendar-body-disabled):hover>.mat-calendar-body-cell-content:not(.mat-calendar-body-selected):not(.mat-calendar-body-comparison-identical){background:#f2f2fb;color:#4646ce;font-weight:600} .mat-datepicker-popup .mat-calendar-body-selected{background-color:#4646ce;color:#f2f2fb;font-weight:600} .mat-datepicker-popup .mat-calendar-body-today.mat-calendar-body-selected{box-shadow:none} .mat-datepicker-popup .mat-button-focus-overlay{background:#f5f5f5} .mat-datepicker-popup .mat-calendar-controls .mat-icon-button:hover .mat-button-focus-overlay{opacity:1!important;background:#f5f5f5;transition:opacity .2s cubic-bezier(.35,0,.25,1)} .mat-datepicker-popup .mat-calendar-controls .mat-calendar-period-button:hover{background:#f5f5f5;transition:background .2s cubic-bezier(.35,0,.25,1)} .mat-datepicker-popup .mat-calendar-table-header th{font-size:14px;font-weight:600;color:#333} .mat-datepicker-popup .mat-calendar-table-header-divider{display:none} .mat-datepicker-popup .mat-calendar-body-label{color:#fff;padding:0} .mat-datepicker-popup .mat-calendar-body>tr[aria-hidden=true]>.mat-calendar-body-label{display:none} .mat-datepicker-popup .mat-calendar-content{display:flex} .mat-datepicker-popup .mat-calendar-content dr-week-selector{flex:0} .mat-datepicker-popup .mat-calendar-content mat-month-view, .mat-datepicker-popup .mat-calendar-content mat-multi-year-view, .mat-datepicker-popup .mat-calendar-content mat-year-view{flex:1}[_nghost-%COMP%]{border:none;display:flex;align-items:center;width:-moz-fit-content;width:fit-content;background:transparent}[_nghost-%COMP%]:after{visibility:hidden}.disabled[_nghost-%COMP%]{border:none;padding:0 28px;background:transparent}.disabled[_nghost-%COMP%] .dr-datepicker-input-container[_ngcontent-%COMP%]{cursor:default;color:#aeabac}.disabled[_nghost-%COMP%] .dr-datepicker-input-container__formatted-value-display[_ngcontent-%COMP%]{text-decoration:none}[_nghost-%COMP%] .dr-datepicker-input-container[_ngcontent-%COMP%]{display:flex;align-items:center;gap:4px;cursor:pointer;color:#6d6e6f;padding-right:4px}[_nghost-%COMP%] .dr-datepicker-input-container[_ngcontent-%COMP%]:hover, [_nghost-%COMP%] .dr-datepicker-input-container[_ngcontent-%COMP%]:hover .dr-icon-date[_ngcontent-%COMP%]{color:#333}[_nghost-%COMP%] .dr-datepicker-input-container[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{visibility:hidden;position:absolute;width:100%}[_nghost-%COMP%] .dr-datepicker-input-container__formatted-value-display[_ngcontent-%COMP%]{font-size:14px;line-height:24px;font-weight:400;width:auto;text-decoration-line:underline}[_nghost-%COMP%] .dr-datepicker-input-container[_ngcontent-%COMP%] .dr-icon-date[_ngcontent-%COMP%]{display:block;position:relative;left:unset} .date-picker-preset-tag{width:386px!important} .date-picker-preset-tag .mat-calendar-content{padding-left:32px!important;padding-right:32px!important}@media screen and (max-width: 410px){.mat-datepicker-input[_ngcontent-%COMP%]{width:100vw!important} .date-picker-preset-tag{width:calc(100vw - 16px)!important} .date-picker-preset-tag .dr-datepicker-preset-date__tags{justify-content:center;margin-left:-32px;margin-right:-32px}}"], changeDetection: 0 }); }
260
256
  }
261
257
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DrDatePickerWithTimeframeComponent, [{
262
258
  type: Component,
263
- args: [{ selector: 'dr-date-picker-with-timeframe', standalone: true, imports: [
264
- CommonModule,
265
- FormsModule,
266
- MatDatepickerModule,
267
- MatNativeDateModule,
268
- MatMomentDateModule,
269
- DrButtonComponent,
270
- DrTooltipModule,
271
- ], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
259
+ args: [{ selector: 'dr-date-picker-with-timeframe', standalone: true, imports: [CommonModule, FormsModule, MatDatepickerModule, DrButtonComponent, DrTooltipModule], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
272
260
  { provide: NG_VALUE_ACCESSOR, useExisting: DrDatePickerWithTimeframeComponent, multi: true },
273
261
  { provide: DateAdapter, useClass: CustomDateAdapter },
274
262
  { provide: DrDatePickerService },
@@ -306,4 +294,4 @@ export class DrDatePickerWithTimeframeComponent extends DrDatePickerComponent {
306
294
  }], onChangeData: [{
307
295
  type: Output
308
296
  }] }); })();
309
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHItZGF0ZS1waWNrZXItd2l0aC10aW1lZnJhbWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YXJhaWxzc2hhcmVkL3NyYy9saWIvZHItaW5wdXRzL2RhdGUtcGlja2Vycy9kci1kYXRlLXBpY2tlci13aXRoLXRpbWVmcmFtZS9kci1kYXRlLXBpY2tlci13aXRoLXRpbWVmcmFtZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhcmFpbHNzaGFyZWQvc3JjL2xpYi9kci1pbnB1dHMvZGF0ZS1waWNrZXJzL2RyLWRhdGUtcGlja2VyLXdpdGgtdGltZWZyYW1lL2RyLWRhdGUtcGlja2VyLXdpdGgtdGltZWZyYW1lLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUlMLE1BQU0sRUFFTixXQUFXLEdBQ2QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN6RSxPQUFPLEVBQXdCLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBcUMsZUFBZSxFQUFpQixNQUFNLDRCQUE0QixDQUFDO0FBQy9HLE9BQU8sRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlELE9B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LGFBQ3BDO29CQUNQLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFdBQVcsb0NBQW9DLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtvQkFDNUYsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRTtvQkFDckQsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUU7aUJBQ25DO2dJQVFZLGdCQUFnQjtrQkFBNUIsS0FBSztZQU9HLGtCQUFrQjtrQkFBMUIsS0FBSztZQUNHLGdCQUFnQjtrQkFBeEIsS0FBSztZQUVPLG1CQUFtQjtrQkFBL0IsS0FBSztZQUtPLHVCQUF1QjtrQkFBbkMsS0FBSztZQUtHLGtCQUFrQjtrQkFBMUIsS0FBSztZQUVPLHFCQUFxQjtrQkFBakMsS0FBSztZQUlPLHNCQUFzQjtrQkFBbEMsS0FBSztZQUlPLFNBQVM7a0JBQXJCLEtBQUs7WUFJRyxpQkFBaUI7a0JBQXpCLEtBQUs7WUFDRyx5QkFBeUI7a0JBQWpDLEtBQUs7WUFDRyx3QkFBd0I7a0JBQWhDLEtBQUs7WUFFRyxNQUFNO2tCQUFkLEtBQUs7WUFHSSxjQUFjO2tCQUF2QixNQUFNO1lBRUcsaUJBQWlCO2tCQUExQixNQUFNO1lBRUcsWUFBWTtrQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDdXN0b21EYXRlQWRhcHRlciwgRHJEYXRlUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vZHItZGF0ZS1waWNrZXIvZHItZGF0ZS1waWNrZXIuY29tcG9uZW50JztcbmltcG9ydCB7IERhdGVBZGFwdGVyLCBNYXROYXRpdmVEYXRlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBEckRhdGVQaWNrZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZHItZGF0ZS1waWNrZXIuc2VydmljZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybXNNb2R1bGUsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRGF0ZVRhZ3MsIElEYXRlUGlja2VyRm9ybWF0Q29uZmlnLCBUaW1lZnJhbWVPcHRpb24sIFRpbWVmcmFtZURhdGEgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZGF0ZVBpY2tlcic7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIG1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTW9tZW50IH0gZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IFBSRVNFVF9UQUdTX0xJU1QgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvY29uc3RhbnRzJztcbmltcG9ydCB7IFBvc2l0aW9uIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3Bvc2l0aW9uJztcbmltcG9ydCB7IERyQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYnV0dG9uL2J1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgRHJUb29sdGlwTW9kdWxlIH0gZnJvbSAnLi4vLi4vLi4vZHItdG9vbHRpcC9kci10b29sdGlwLm1vZHVsZSc7XG5pbXBvcnQgeyBNYXREYXRlcGlja2VyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XG5pbXBvcnQgeyBNYXRNb21lbnREYXRlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwtbW9tZW50LWFkYXB0ZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2RyLWRhdGUtcGlja2VyLXdpdGgtdGltZWZyYW1lJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgTWF0RGF0ZXBpY2tlck1vZHVsZSxcbiAgICAgICAgTWF0TmF0aXZlRGF0ZU1vZHVsZSxcbiAgICAgICAgTWF0TW9tZW50RGF0ZU1vZHVsZSxcbiAgICAgICAgRHJCdXR0b25Db21wb25lbnQsXG4gICAgICAgIERyVG9vbHRpcE1vZHVsZSxcbiAgICBdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kci1kYXRlLXBpY2tlci13aXRoLXRpbWVmcmFtZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZHItZGF0ZS1waWNrZXItd2l0aC10aW1lZnJhbWUuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgeyBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUiwgdXNlRXhpc3Rpbmc6IERyRGF0ZVBpY2tlcldpdGhUaW1lZnJhbWVDb21wb25lbnQsIG11bHRpOiB0cnVlIH0sXG4gICAgICAgIHsgcHJvdmlkZTogRGF0ZUFkYXB0ZXIsIHVzZUNsYXNzOiBDdXN0b21EYXRlQWRhcHRlciB9LFxuICAgICAgICB7IHByb3ZpZGU6IERyRGF0ZVBpY2tlclNlcnZpY2UgfSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBEckRhdGVQaWNrZXJXaXRoVGltZWZyYW1lQ29tcG9uZW50XG4gICAgZXh0ZW5kcyBEckRhdGVQaWNrZXJDb21wb25lbnRcbiAgICBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT25DaGFuZ2VzXG57XG4gICAgcHJlc2V0VGFnU2VsZWN0ZWQ6IHN0cmluZztcblxuICAgIEBJbnB1dCgpIHNldCBkYXRlRm9ybWF0Q29uZmlnKHZhbHVlOiBJRGF0ZVBpY2tlckZvcm1hdENvbmZpZykge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuZm9ybWF0Q29uZmlnID0geyAuLi50aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmZvcm1hdENvbmZpZywgLi4udmFsdWUgfTtcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQElucHV0KCkgY2FuU2VsZWN0VGltZWZyYW1lID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBjdXN0b21QYW5lbENsYXNzOiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKSBzZXQgYXZhaWxhYmxlVGltZWZyYW1lcyh2YWx1ZTogVGltZWZyYW1lT3B0aW9uW10pIHtcbiAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS5hdmFpbGFibGVUaW1lZnJhbWVzID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgQElucHV0KCkgc2V0IGF2YWlsYWJsZURhdGVUYWdQcmVzZXRzKHZhbHVlOiBBcnJheTx7IGtleTogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH0+KSB7XG4gICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuYXZhaWxhYmxlRGF0ZVRhZ1ByZXNldHMgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBASW5wdXQoKSBwYWdpbmF0aW9uRGVib3VuY2U7XG5cbiAgICBASW5wdXQoKSBzZXQgaXNVc2luZ0RhdGVUYWdQcmVzZXRzKGZsYWc6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS5pc1VzaW5nRGF0ZVRhZ1ByZXNldHMgPSBmbGFnO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBpc1VzaW5nVGltZUZyYW1lU2VsZWN0KGZsYWc6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS5pc1VzaW5nVGltZUZyYW1lU2VsZWN0ID0gZmxhZztcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgcHJlc2V0VGFnKHRhZzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UucHJlc2V0VGFnJC5uZXh0KHRhZyBhcyBEYXRlVGFncyk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgZGF0ZXBpY2tlclRvb2x0aXA6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsO1xuICAgIEBJbnB1dCgpIGRhdGVwaWNrZXJUb29sdGlwUG9zaXRpb246IFBvc2l0aW9uID0gJ3RvcCc7XG4gICAgQElucHV0KCkgZGF0ZXBpY2tlclRvb2x0aXBUaW1lb3V0OiBudW1iZXIgPSAwO1xuXG4gICAgQElucHV0KCkgaXNPcGVuOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogQGRlcHJlY2F0ZWQgVXNlIGBvbkNoYW5nZURhdGFgIGluc3RlYWQgYXMgKG1vZGVsIHZhbHVlLCBmb3JtYXQsIGFuZCBwcmVzZXQgbmVlZGVkIGFsbCBzaW11bHRhbmVvdXNseSkgKi9cbiAgICBAT3V0cHV0KCkgb25DaGFuZ2VGb3JtYXQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgICAvKiogQGRlcHJlY2F0ZWQgVXNlIGBvbkNoYW5nZURhdGFgIGluc3RlYWQgYXMgKG1vZGVsIHZhbHVlLCBmb3JtYXQsIGFuZCBwcmVzZXQgbmVlZGVkIGFsbCBzaW11bHRhbmVvdXNseSkgKi9cbiAgICBAT3V0cHV0KCkgb25DaGFuZ2VQcmVzZXRUYWcgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGVUYWdzPigpO1xuXG4gICAgQE91dHB1dCgpIG9uQ2hhbmdlRGF0YSA9IG5ldyBFdmVudEVtaXR0ZXI8VGltZWZyYW1lRGF0YT4oKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgcGFnaW5nU2V0dXAgPSB7XG4gICAgICAgIFtUaW1lZnJhbWVPcHRpb24uWUVBUl06IChmb3J3YXJkKSA9PiB0aGlzLmdldE5leHREYXRlKCdhZGRDYWxlbmRhclllYXJzJywgMSwgZm9yd2FyZCksXG4gICAgICAgIFtUaW1lZnJhbWVPcHRpb24uUVVBUlRFUl06IChmb3J3YXJkKSA9PiB0aGlzLmdldE5leHREYXRlKCdhZGRDYWxlbmRhck1vbnRocycsIDMsIGZvcndhcmQpLFxuICAgICAgICBbVGltZWZyYW1lT3B0aW9uLk1PTlRIXTogKGZvcndhcmQpID0+IHRoaXMuZ2V0TmV4dERhdGUoJ2FkZENhbGVuZGFyTW9udGhzJywgMSwgZm9yd2FyZCksXG4gICAgICAgIFtUaW1lZnJhbWVPcHRpb24uREFZXTogKGZvcndhcmQpID0+IHRoaXMuZ2V0TmV4dERhdGUoJ2FkZENhbGVuZGFyRGF5cycsIDEsIGZvcndhcmQpLFxuICAgICAgICBbVGltZWZyYW1lT3B0aW9uLldFRUtdOiAoZm9yd2FyZCkgPT4gdGhpcy5nZXROZXh0RGF0ZSgnYWRkQ2FsZW5kYXJEYXlzJywgNywgZm9yd2FyZCksXG4gICAgfTtcblxuICAgIHB1YmxpYyBpc05leHREYXRlRGlzYWJsZWQgPSBmYWxzZTtcbiAgICBwdWJsaWMgaXNQcmV2RGF0ZURpc2FibGVkID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIG9uQ2hhbmdlRGVib3VuY2VkJDogU3ViamVjdDxudW1iZXI+ID0gbmV3IFN1YmplY3Q8bnVtYmVyPigpO1xuXG4gICAgcHVibGljIGRpc3BsYXllZEZvcm1hdHRlZFZhbHVlJCA9IHRoaXMuZGlzcGxheVZhbHVlJC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKSxcbiAgICAgICAgbWFwKCh2YWx1ZTogTW9tZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm4gdGhpcy5wbGFjZWhvbGRlcjtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS5nZXREaXNwbGF5UHJlZml4KCkgK1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZUFkYXB0ZXIuZm9ybWF0KHZhbHVlLCB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmdldENvbmZpZ3VyZWRGb3JtYXQodGhpcy5kYXRlUGlja2VyU2VydmljZS50aW1lZnJhbWUpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSksXG4gICAgKTtcblxuICAgIHB1YmxpYyBnZXQgY29tYmluZWRQYW5lbENsYXNzKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGJhc2VDbGFzcyA9IHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuaXNVc2luZ0RhdGVUYWdQcmVzZXRzID8gJ2RhdGUtcGlja2VyLXByZXNldC10YWcnIDogJ2RyLXRpbWVmcmFtZS1kYXRlcGlja2VyJztcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tUGFuZWxDbGFzcyA/IGAke2Jhc2VDbGFzc30gJHt0aGlzLmN1c3RvbVBhbmVsQ2xhc3N9YCA6IGJhc2VDbGFzcztcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJvdGVjdGVkIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByb3RlY3RlZCBkYXRlQWRhcHRlcjogRGF0ZUFkYXB0ZXI8YW55PixcbiAgICAgICAgcHVibGljIGRhdGVQaWNrZXJTZXJ2aWNlOiBEckRhdGVQaWNrZXJTZXJ2aWNlLFxuICAgICkge1xuICAgICAgICBzdXBlcihjZHIsIGRhdGVBZGFwdGVyLCBkYXRlUGlja2VyU2VydmljZSk7XG4gICAgICAgIGRhdGVQaWNrZXJTZXJ2aWNlLmlzVGltZWZyYW1lU2VsZWN0aW9uRW5hYmxlZCA9IHRydWU7XG5cbiAgICAgICAgZGF0ZVBpY2tlclNlcnZpY2UuZm9ybWF0JC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpKS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlRm9ybWF0LmVtaXQoZGF0ZVBpY2tlclNlcnZpY2Uubm9ybWFsaXplVmFsdWUodmFsdWUpKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZGF0ZVBpY2tlclNlcnZpY2UucHJlc2V0VGFnJC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpKS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBsZXQgdGFnT2JqID0gUFJFU0VUX1RBR1NfTElTVC5maW5kKCh2YWwpID0+IHZhbD8ua2V5ID09PSB2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnByZXNldFRhZ1NlbGVjdGVkID0gdGFnT2JqPy5sYWJlbDtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2VQcmVzZXRUYWcuZW1pdCh2YWx1ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2Uub25TYW1lRGF5U2VsZWN0ZWRJbkNhbGVuZGFyJC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpKS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlRnJvbU1vbWVudCh2YWx1ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRhdGVQaWNrZXJTZXJ2aWNlLnVwZGF0ZWREYXRlQW5kQ2xvc2UkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJCkpLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVGcm9tTW9tZW50KHZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrKHRoaXMuaW5uZXJWYWx1ZS51bml4KCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5kYXRlUGlja2VyLmNsb3NlKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuY2hhbmdlJC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpKS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlRGF0YS5lbWl0KHtcbiAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IGRhdGVQaWNrZXJTZXJ2aWNlLmZvcm1hdCQudmFsdWUsXG4gICAgICAgICAgICAgICAgcHJlc2V0OiBkYXRlUGlja2VyU2VydmljZS5wcmVzZXRUYWckLnZhbHVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmlzVGltZWZyYW1lU2VsZWN0aW9uRW5hYmxlZCA9IHRoaXMuY2FuU2VsZWN0VGltZWZyYW1lO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcblxuICAgICAgICBpZiAodGhpcy5wYWdpbmF0aW9uRGVib3VuY2UpIHtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2VEZWJvdW5jZWQkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJCksIGRlYm91bmNlVGltZSh0aGlzLnBhZ2luYXRpb25EZWJvdW5jZSkpLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sodmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzLmZvcm1hdD8uY3VycmVudFZhbHVlICYmIGNoYW5nZXMuZm9ybWF0LmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlcy5mb3JtYXQucHJldmlvdXNWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS51cGRhdGVUaW1lZnJhbWVBbmRGb3JtYXQoY2hhbmdlcy5mb3JtYXQuY3VycmVudFZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5kYXRlUGlja2VyLm9wZW4oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHBhZ2luZ0NsaWNrZWQoZm9yd2FyZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5wYWdpbmdTZXR1cFt0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLnRpbWVmcmFtZV0pIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHRWYWx1ZSA9IHRoaXMucGFnaW5nU2V0dXBbdGhpcy5kYXRlUGlja2VyU2VydmljZS50aW1lZnJhbWVdKGZvcndhcmQpO1xuICAgICAgICAgICAgdGhpcy5wYWdpbmdEYXRlQ2hhbmdlKG5leHRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRlUGlja2VyLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgcGFnaW5nRGF0ZUNoYW5nZShuZXdWYWx1ZTogTW9tZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnBhZ2luYXRpb25EZWJvdW5jZSkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyByZXF1aXJlZCBmb3Igbm90IHNlbmRpbmcgZXh0cmEgcmVxdWVzdHMgd2hlbiB1c2VyIHF1aWNrbHkgY2xpY2tpbmcgb24gcGFnaW5hdGlvblxuICAgICAgICAgICAgLy8gaGVyZSB3ZSBkbyB0aGUgc2FtZSBhcyBpbiBzZXRWYWx1ZUZyb21Nb21lbnQobmV3VmFsdWUpIHdpdGggZGlmZmVyZW5jZVxuICAgICAgICAgICAgLy8gdGhhdCB1cGRhdGluZyBvZiBuZ01vZGVsL2Zvcm1Db250cm9sIGlzIGRlYm91bmNlZFxuICAgICAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS5yZXNldFByZXNldFRhZygpO1xuICAgICAgICAgICAgdGhpcy53cml0ZVZhbHVlKG5ld1ZhbHVlLnVuaXgoKSk7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlRGVib3VuY2VkJC5uZXh0KHRoaXMuaW5uZXJWYWx1ZS51bml4KCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZUZyb21Nb21lbnQobmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IGlubmVyIHZhbHVlIGZyb20gdGltZXN0YW1wIGFuZCBwcm9wYWdhdGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSB0aW1lc3RhbXBcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgc2V0VmFsdWUodGltZXN0YW1wOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS5yZXNldFByZXNldFRhZygpO1xuICAgICAgICBzdXBlci5zZXRWYWx1ZSh0aW1lc3RhbXApO1xuICAgIH1cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLndyaXRlVmFsdWUodmFsdWUpO1xuICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm47XG4gICAgICAgIHRoaXMucmVzdHJpY3RQYWdpbmF0aW9uKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXROZXh0RGF0ZShhY3Rpb25DYWxsOiBzdHJpbmcsIGFtb3VudDogbnVtYmVyLCBmb3J3YXJkOiBib29sZWFuKTogTW9tZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZUFkYXB0ZXJbYWN0aW9uQ2FsbF0/Lih0aGlzLmlubmVyVmFsdWUsIGZvcndhcmQgPyBhbW91bnQgOiAtYW1vdW50KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc3RyaWN0UGFnaW5hdGlvbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9taW4gJiYgIXRoaXMuX21heCkgcmV0dXJuO1xuICAgICAgICBjb25zdCB0aW1lRnJhbWUgPSB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLnRpbWVmcmFtZTtcbiAgICAgICAgY29uc3QgbmV4dFZhbHVlID0gdGhpcy5wYWdpbmdTZXR1cFt0aW1lRnJhbWVdKHRydWUpO1xuICAgICAgICBjb25zdCBwcmV2VmFsdWUgPSB0aGlzLnBhZ2luZ1NldHVwW3RpbWVGcmFtZV0oZmFsc2UpO1xuICAgICAgICBjb25zdCBncmFudWxhcml0eSA9IHRpbWVGcmFtZTtcbiAgICAgICAgLyogVE9ETzogVGFrZSBpbnRvIGFjY291bnQgZmlzY2FsIHllYXIgc3RhcnQgYW5kIGJhY2sgZm9yIGNhc2VzIHdoZXJlIGZpc2NhbCB5ZWFyIGFuZCBxdWFydGVyIGlzIHRydWUgLSBodHRwczovL2RhdGFyYWlsc3RlYW0uYXRsYXNzaWFuLm5ldC9icm93c2UvRFItMzU1MjggYW5kXG4gICAgICAgICAgaHR0cHM6Ly9kYXRhcmFpbHN0ZWFtLmF0bGFzc2lhbi5uZXQvYnJvd3NlL0RSLTM1NTY4XG4gICAgICAgICovXG4gICAgICAgIGlmICh0aGlzLmZpc2NhbFllYXJCYWNrIHx8IHRoaXMuZmlzY2FsWWVhck1vbnRoc01vZGlmaWVyICE9PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmlzTmV4dERhdGVEaXNhYmxlZCA9IHRoaXMuX21heCAmJiBuZXh0VmFsdWUgJiYgbmV4dFZhbHVlLnVuaXgoKSA+IHRoaXMuX21heC51bml4KCk7XG4gICAgICAgICAgICB0aGlzLmlzUHJldkRhdGVEaXNhYmxlZCA9IHRoaXMuX21pbiAmJiBwcmV2VmFsdWUgJiYgcHJldlZhbHVlLnVuaXgoKSA8IHRoaXMuX21pbi51bml4KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzTmV4dERhdGVEaXNhYmxlZCA9ICEhKHRoaXMuX21heCAmJiBuZXh0VmFsdWUgJiYgIW5leHRWYWx1ZS5pc1NhbWVPckJlZm9yZSh0aGlzLl9tYXgsIGdyYW51bGFyaXR5KSk7XG4gICAgICAgICAgICB0aGlzLmlzUHJldkRhdGVEaXNhYmxlZCA9ICEhKHRoaXMuX21pbiAmJiBwcmV2VmFsdWUgJiYgIXByZXZWYWx1ZS5pc1NhbWVPckFmdGVyKHRoaXMuX21pbiwgZ3JhbnVsYXJpdHkpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxkci1idXR0b25cbiAgICBbZGlzYWJsZWRdPVwiaXNQcmV2RGF0ZURpc2FibGVkXCJcbiAgICAqbmdJZj1cIiFkaXNhYmxlZFwiXG4gICAgdGhlbWU9XCJpY29uXCJcbiAgICBpY29uPVwiZHItaWNvbi1hcnJvdy1sZWZ0XCJcbiAgICAoY2xpY2spPVwicGFnaW5nQ2xpY2tlZChmYWxzZSlcIj48L2RyLWJ1dHRvbj5cbjxkaXZcbiAgICBbZHJUb29sdGlwXT1cImRhdGVwaWNrZXJUb29sdGlwXCJcbiAgICBbZHJUb29sdGlwUG9zaXRpb25dPVwiZGF0ZXBpY2tlclRvb2x0aXBQb3NpdGlvblwiXG4gICAgW2RyVG9vbHRpcE1vdXNsZWF2ZVRpbWVvdXRdPVwiZGF0ZXBpY2tlclRvb2x0aXBUaW1lb3V0XCJcbiAgICBjbGFzcz1cImRyLWRhdGVwaWNrZXItaW5wdXQtY29udGFpbmVyXCI+XG4gICAgPGkgY2xhc3M9XCJkci1pY29uLWRhdGVcIiAoY2xpY2spPVwiZGF0ZXBpY2tlcklucHV0LmNsaWNrKClcIj48L2k+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZHItZGF0ZXBpY2tlci1pbnB1dC1jb250YWluZXJfX2Zvcm1hdHRlZC12YWx1ZS1kaXNwbGF5XCIgKGNsaWNrKT1cImRhdGVwaWNrZXJJbnB1dC5jbGljaygpXCI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZvcm1hdHRlZFZhbHVlVG1wbFwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgIGZvcm1hdHRlZFZhbHVlOiBkaXNwbGF5ZWRGb3JtYXR0ZWRWYWx1ZSQgfCBhc3luYyxcbiAgICAgICAgICAgIH1cIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZm9ybWF0dGVkVmFsdWVUbXBsIGxldC12YWx1ZT1cImZvcm1hdHRlZFZhbHVlXCI+XG4gICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICBkYXRlUGlja2VyU2VydmljZS5pc1VzaW5nRGF0ZVRhZ1ByZXNldHMgJiYgISFwcmVzZXRUYWdTZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBwcmVzZXRUYWdTZWxlY3RlZCArICcgKCcgKyB2YWx1ZSArICcpJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiB2YWx1ZVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gICAgPGlucHV0XG4gICAgICAgICNkYXRlcGlja2VySW5wdXRcbiAgICAgICAgW25nTW9kZWxdPVwiZGlzcGxheVZhbHVlJCB8IGFzeW5jXCJcbiAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidmFsdWVDaGFuZ2VkSW5DYWxlbmRhcigkZXZlbnQpXCJcbiAgICAgICAgKGNsaWNrKT1cImRhdGVQaWNrZXIub3BlbigpXCJcbiAgICAgICAgW21hdERhdGVwaWNrZXJdPVwiZGF0ZVBpY2tlclwiXG4gICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgIFttaW5dPVwiX21pblwiXG4gICAgICAgIFttYXhdPVwiX21heFwiIC8+XG48L2Rpdj5cbjxkci1idXR0b25cbiAgICBbZGlzYWJsZWRdPVwiaXNOZXh0RGF0ZURpc2FibGVkXCJcbiAgICAqbmdJZj1cIiFkaXNhYmxlZFwiXG4gICAgdGhlbWU9XCJpY29uXCJcbiAgICBpY29uPVwiZHItaWNvbi1hcnJvdy1yaWdodFwiXG4gICAgKGNsaWNrKT1cInBhZ2luZ0NsaWNrZWQodHJ1ZSlcIj48L2RyLWJ1dHRvbj5cblxuPG1hdC1kYXRlcGlja2VyXG4gICAgI2RhdGVQaWNrZXJcbiAgICBjbGFzcz1cImRyLXRpbWVmcmFtZS1kYXRlcGlja2VyXCJcbiAgICBbY2FsZW5kYXJIZWFkZXJDb21wb25lbnRdPVwiY3VzdG9tSGVhZGVyXCJcbiAgICAoeWVhclNlbGVjdGVkKT1cImNob3NlblBlcmlvZEhhbmRsZXIoJGV2ZW50LCB0aW1lZnJhbWVPcHRpb24uWUVBUiwgZGF0ZVBpY2tlcilcIlxuICAgIChtb250aFNlbGVjdGVkKT1cImNob3NlblBlcmlvZEhhbmRsZXIoJGV2ZW50LCB0aW1lZnJhbWVPcHRpb24uTU9OVEgsIGRhdGVQaWNrZXIpXCJcbiAgICAob3BlbmVkKT1cIm9uT3BlbigpXCJcbiAgICAoY2xvc2VkKT1cIm9uQ0xvc2UoKVwiXG4gICAgW3BhbmVsQ2xhc3NdPVwiY29tYmluZWRQYW5lbENsYXNzXCI+XG48L21hdC1kYXRlcGlja2VyPlxuIl19
297
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHItZGF0ZS1waWNrZXItd2l0aC10aW1lZnJhbWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGF0YXJhaWxzc2hhcmVkL3NyYy9saWIvZHItaW5wdXRzL2RhdGUtcGlja2Vycy9kci1kYXRlLXBpY2tlci13aXRoLXRpbWVmcmFtZS9kci1kYXRlLXBpY2tlci13aXRoLXRpbWVmcmFtZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kYXRhcmFpbHNzaGFyZWQvc3JjL2xpYi9kci1pbnB1dHMvZGF0ZS1waWNrZXJzL2RyLWRhdGUtcGlja2VyLXdpdGgtdGltZWZyYW1lL2RyLWRhdGUtcGlja2VyLXdpdGgtdGltZWZyYW1lLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUlMLE1BQU0sRUFFTixXQUFXLEdBQ2QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN6RSxPQUFPLEVBQXdCLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBcUMsZUFBZSxFQUFpQixNQUFNLDRCQUE0QixDQUFDO0FBQy9HLE9BQU8sRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlELE9BQU8sRUFBRSxPQUFP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QWlCLEVBQUU7b0JBQ3JELEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFO2lCQUNuQztnSUFRWSxnQkFBZ0I7a0JBQTVCLEtBQUs7WUFPRyxrQkFBa0I7a0JBQTFCLEtBQUs7WUFDRyxnQkFBZ0I7a0JBQXhCLEtBQUs7WUFFTyxtQkFBbUI7a0JBQS9CLEtBQUs7WUFLTyx1QkFBdUI7a0JBQW5DLEtBQUs7WUFLRyxrQkFBa0I7a0JBQTFCLEtBQUs7WUFFTyxxQkFBcUI7a0JBQWpDLEtBQUs7WUFJTyxzQkFBc0I7a0JBQWxDLEtBQUs7WUFJTyxTQUFTO2tCQUFyQixLQUFLO1lBSUcsaUJBQWlCO2tCQUF6QixLQUFLO1lBQ0cseUJBQXlCO2tCQUFqQyxLQUFLO1lBQ0csd0JBQXdCO2tCQUFoQyxLQUFLO1lBRUcsTUFBTTtrQkFBZCxLQUFLO1lBR0ksY0FBYztrQkFBdkIsTUFBTTtZQUVHLGlCQUFpQjtrQkFBMUIsTUFBTTtZQUVHLFlBQVk7a0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUZW1wbGF0ZVJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ3VzdG9tRGF0ZUFkYXB0ZXIsIERyRGF0ZVBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4uL2RyLWRhdGUtcGlja2VyL2RyLWRhdGUtcGlja2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRlQWRhcHRlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHsgRHJEYXRlUGlja2VyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2RyLWRhdGUtcGlja2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1zTW9kdWxlLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IERhdGVUYWdzLCBJRGF0ZVBpY2tlckZvcm1hdENvbmZpZywgVGltZWZyYW1lT3B0aW9uLCBUaW1lZnJhbWVEYXRhIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2RhdGVQaWNrZXInO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBtYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE1vbWVudCB9IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBQUkVTRVRfVEFHU19MSVNUIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBQb3NpdGlvbiB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9wb3NpdGlvbic7XG5pbXBvcnQgeyBEckJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2J1dHRvbi9idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IERyVG9vbHRpcE1vZHVsZSB9IGZyb20gJy4uLy4uLy4uL2RyLXRvb2x0aXAvZHItdG9vbHRpcC5tb2R1bGUnO1xuaW1wb3J0IHsgTWF0RGF0ZXBpY2tlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2RyLWRhdGUtcGlja2VyLXdpdGgtdGltZWZyYW1lJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBNYXREYXRlcGlja2VyTW9kdWxlLCBEckJ1dHRvbkNvbXBvbmVudCwgRHJUb29sdGlwTW9kdWxlXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZHItZGF0ZS1waWNrZXItd2l0aC10aW1lZnJhbWUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2RyLWRhdGUtcGlja2VyLXdpdGgtdGltZWZyYW1lLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsIHVzZUV4aXN0aW5nOiBEckRhdGVQaWNrZXJXaXRoVGltZWZyYW1lQ29tcG9uZW50LCBtdWx0aTogdHJ1ZSB9LFxuICAgICAgICB7IHByb3ZpZGU6IERhdGVBZGFwdGVyLCB1c2VDbGFzczogQ3VzdG9tRGF0ZUFkYXB0ZXIgfSxcbiAgICAgICAgeyBwcm92aWRlOiBEckRhdGVQaWNrZXJTZXJ2aWNlIH0sXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRHJEYXRlUGlja2VyV2l0aFRpbWVmcmFtZUNvbXBvbmVudFxuICAgIGV4dGVuZHMgRHJEYXRlUGlja2VyQ29tcG9uZW50XG4gICAgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBPbkluaXQsIE9uQ2hhbmdlc1xue1xuICAgIHByZXNldFRhZ1NlbGVjdGVkOiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKSBzZXQgZGF0ZUZvcm1hdENvbmZpZyh2YWx1ZTogSURhdGVQaWNrZXJGb3JtYXRDb25maWcpIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmZvcm1hdENvbmZpZyA9IHsgLi4udGhpcy5kYXRlUGlja2VyU2VydmljZS5mb3JtYXRDb25maWcsIC4uLnZhbHVlIH07XG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBJbnB1dCgpIGNhblNlbGVjdFRpbWVmcmFtZSA9IHRydWU7XG4gICAgQElucHV0KCkgY3VzdG9tUGFuZWxDbGFzczogc3RyaW5nO1xuXG4gICAgQElucHV0KCkgc2V0IGF2YWlsYWJsZVRpbWVmcmFtZXModmFsdWU6IFRpbWVmcmFtZU9wdGlvbltdKSB7XG4gICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuYXZhaWxhYmxlVGltZWZyYW1lcyA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIEBJbnB1dCgpIHNldCBhdmFpbGFibGVEYXRlVGFnUHJlc2V0cyh2YWx1ZTogQXJyYXk8eyBrZXk6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9Pikge1xuICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmF2YWlsYWJsZURhdGVUYWdQcmVzZXRzID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgQElucHV0KCkgcGFnaW5hdGlvbkRlYm91bmNlO1xuXG4gICAgQElucHV0KCkgc2V0IGlzVXNpbmdEYXRlVGFnUHJlc2V0cyhmbGFnOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuaXNVc2luZ0RhdGVUYWdQcmVzZXRzID0gZmxhZztcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgaXNVc2luZ1RpbWVGcmFtZVNlbGVjdChmbGFnOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuaXNVc2luZ1RpbWVGcmFtZVNlbGVjdCA9IGZsYWc7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHByZXNldFRhZyh0YWc6IHN0cmluZykge1xuICAgICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLnByZXNldFRhZyQubmV4dCh0YWcgYXMgRGF0ZVRhZ3MpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIGRhdGVwaWNrZXJUb29sdGlwOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbDtcbiAgICBASW5wdXQoKSBkYXRlcGlja2VyVG9vbHRpcFBvc2l0aW9uOiBQb3NpdGlvbiA9ICd0b3AnO1xuICAgIEBJbnB1dCgpIGRhdGVwaWNrZXJUb29sdGlwVGltZW91dDogbnVtYmVyID0gMDtcblxuICAgIEBJbnB1dCgpIGlzT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqIEBkZXByZWNhdGVkIFVzZSBgb25DaGFuZ2VEYXRhYCBpbnN0ZWFkIGFzIChtb2RlbCB2YWx1ZSwgZm9ybWF0LCBhbmQgcHJlc2V0IG5lZWRlZCBhbGwgc2ltdWx0YW5lb3VzbHkpICovXG4gICAgQE91dHB1dCgpIG9uQ2hhbmdlRm9ybWF0ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gICAgLyoqIEBkZXByZWNhdGVkIFVzZSBgb25DaGFuZ2VEYXRhYCBpbnN0ZWFkIGFzIChtb2RlbCB2YWx1ZSwgZm9ybWF0LCBhbmQgcHJlc2V0IG5lZWRlZCBhbGwgc2ltdWx0YW5lb3VzbHkpICovXG4gICAgQE91dHB1dCgpIG9uQ2hhbmdlUHJlc2V0VGFnID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlVGFncz4oKTtcblxuICAgIEBPdXRwdXQoKSBvbkNoYW5nZURhdGEgPSBuZXcgRXZlbnRFbWl0dGVyPFRpbWVmcmFtZURhdGE+KCk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHBhZ2luZ1NldHVwID0ge1xuICAgICAgICBbVGltZWZyYW1lT3B0aW9uLllFQVJdOiAoZm9yd2FyZCkgPT4gdGhpcy5nZXROZXh0RGF0ZSgnYWRkQ2FsZW5kYXJZZWFycycsIDEsIGZvcndhcmQpLFxuICAgICAgICBbVGltZWZyYW1lT3B0aW9uLlFVQVJURVJdOiAoZm9yd2FyZCkgPT4gdGhpcy5nZXROZXh0RGF0ZSgnYWRkQ2FsZW5kYXJNb250aHMnLCAzLCBmb3J3YXJkKSxcbiAgICAgICAgW1RpbWVmcmFtZU9wdGlvbi5NT05USF06IChmb3J3YXJkKSA9PiB0aGlzLmdldE5leHREYXRlKCdhZGRDYWxlbmRhck1vbnRocycsIDEsIGZvcndhcmQpLFxuICAgICAgICBbVGltZWZyYW1lT3B0aW9uLkRBWV06IChmb3J3YXJkKSA9PiB0aGlzLmdldE5leHREYXRlKCdhZGRDYWxlbmRhckRheXMnLCAxLCBmb3J3YXJkKSxcbiAgICAgICAgW1RpbWVmcmFtZU9wdGlvbi5XRUVLXTogKGZvcndhcmQpID0+IHRoaXMuZ2V0TmV4dERhdGUoJ2FkZENhbGVuZGFyRGF5cycsIDcsIGZvcndhcmQpLFxuICAgIH07XG5cbiAgICBwdWJsaWMgaXNOZXh0RGF0ZURpc2FibGVkID0gZmFsc2U7XG4gICAgcHVibGljIGlzUHJldkRhdGVEaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBvbkNoYW5nZURlYm91bmNlZCQ6IFN1YmplY3Q8bnVtYmVyPiA9IG5ldyBTdWJqZWN0PG51bWJlcj4oKTtcblxuICAgIHB1YmxpYyBkaXNwbGF5ZWRGb3JtYXR0ZWRWYWx1ZSQgPSB0aGlzLmRpc3BsYXlWYWx1ZSQucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJCksXG4gICAgICAgIG1hcCgodmFsdWU6IE1vbWVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuIHRoaXMucGxhY2Vob2xkZXI7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UuZ2V0RGlzcGxheVByZWZpeCgpICtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVBZGFwdGVyLmZvcm1hdCh2YWx1ZSwgdGhpcy5kYXRlUGlja2VyU2VydmljZS5nZXRDb25maWd1cmVkRm9ybWF0KHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UudGltZWZyYW1lKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pLFxuICAgICk7XG5cbiAgICBwdWJsaWMgZ2V0IGNvbWJpbmVkUGFuZWxDbGFzcygpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBiYXNlQ2xhc3MgPSB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLmlzVXNpbmdEYXRlVGFnUHJlc2V0cyA/ICdkYXRlLXBpY2tlci1wcmVzZXQtdGFnJyA6ICdkci10aW1lZnJhbWUtZGF0ZXBpY2tlcic7XG4gICAgICAgIHJldHVybiB0aGlzLmN1c3RvbVBhbmVsQ2xhc3MgPyBgJHtiYXNlQ2xhc3N9ICR7dGhpcy5jdXN0b21QYW5lbENsYXNzfWAgOiBiYXNlQ2xhc3M7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcm90ZWN0ZWQgZGF0ZUFkYXB0ZXI6IERhdGVBZGFwdGVyPGFueT4sXG4gICAgICAgIHB1YmxpYyBkYXRlUGlja2VyU2VydmljZTogRHJEYXRlUGlja2VyU2VydmljZSxcbiAgICApIHtcbiAgICAgICAgc3VwZXIoY2RyLCBkYXRlQWRhcHRlciwgZGF0ZVBpY2tlclNlcnZpY2UpO1xuICAgICAgICBkYXRlUGlja2VyU2VydmljZS5pc1RpbWVmcmFtZVNlbGVjdGlvbkVuYWJsZWQgPSB0cnVlO1xuXG4gICAgICAgIGRhdGVQaWNrZXJTZXJ2aWNlLmZvcm1hdCQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKSkuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZUZvcm1hdC5lbWl0KGRhdGVQaWNrZXJTZXJ2aWNlLm5vcm1hbGl6ZVZhbHVlKHZhbHVlKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGRhdGVQaWNrZXJTZXJ2aWNlLnByZXNldFRhZyQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKSkuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgbGV0IHRhZ09iaiA9IFBSRVNFVF9UQUdTX0xJU1QuZmluZCgodmFsKSA9PiB2YWw/LmtleSA9PT0gdmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5wcmVzZXRUYWdTZWxlY3RlZCA9IHRhZ09iaj8ubGFiZWw7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlUHJlc2V0VGFnLmVtaXQodmFsdWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmRhdGVQaWNrZXJTZXJ2aWNlLm9uU2FtZURheVNlbGVjdGVkSW5DYWxlbmRhciQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKSkuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZUZyb21Nb21lbnQodmFsdWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBkYXRlUGlja2VyU2VydmljZS51cGRhdGVkRGF0ZUFuZENsb3NlJC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpKS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlRnJvbU1vbWVudCh2YWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjayh0aGlzLmlubmVyVmFsdWUudW5peCgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGF0ZVBpY2tlci5jbG9zZSgpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNoYW5nZSQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKSkuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZURhdGEuZW1pdCh7XG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgZm9ybWF0OiBkYXRlUGlja2VyU2VydmljZS5mb3JtYXQkLnZhbHVlLFxuICAgICAgICAgICAgICAgIHByZXNldDogZGF0ZVBpY2tlclNlcnZpY2UucHJlc2V0VGFnJC52YWx1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5kYXRlUGlja2VyU2VydmljZS5pc1RpbWVmcmFtZVNlbGVjdGlvbkVuYWJsZWQgPSB0aGlzLmNhblNlbGVjdFRpbWVmcmFtZTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cbiAgICAgICAgaWYgKHRoaXMucGFnaW5hdGlvbkRlYm91bmNlKSB7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlRGVib3VuY2VkJC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpLCBkZWJvdW5jZVRpbWUodGhpcy5wYWdpbmF0aW9uRGVib3VuY2UpKS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZUNhbGxiYWNrKHZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoY2hhbmdlcy5mb3JtYXQ/LmN1cnJlbnRWYWx1ZSAmJiBjaGFuZ2VzLmZvcm1hdC5jdXJyZW50VmFsdWUgIT09IGNoYW5nZXMuZm9ybWF0LnByZXZpb3VzVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UudXBkYXRlVGltZWZyYW1lQW5kRm9ybWF0KGNoYW5nZXMuZm9ybWF0LmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHN1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpO1xuICAgICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZVBpY2tlci5vcGVuKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwYWdpbmdDbGlja2VkKGZvcndhcmQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucGFnaW5nU2V0dXBbdGhpcy5kYXRlUGlja2VyU2VydmljZS50aW1lZnJhbWVdKSB7XG4gICAgICAgICAgICBjb25zdCBuZXh0VmFsdWUgPSB0aGlzLnBhZ2luZ1NldHVwW3RoaXMuZGF0ZVBpY2tlclNlcnZpY2UudGltZWZyYW1lXShmb3J3YXJkKTtcbiAgICAgICAgICAgIHRoaXMucGFnaW5nRGF0ZUNoYW5nZShuZXh0VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0ZVBpY2tlci5jbG9zZSgpO1xuICAgIH1cblxuICAgIHBhZ2luZ0RhdGVDaGFuZ2UobmV3VmFsdWU6IE1vbWVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5wYWdpbmF0aW9uRGVib3VuY2UpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgcmVxdWlyZWQgZm9yIG5vdCBzZW5kaW5nIGV4dHJhIHJlcXVlc3RzIHdoZW4gdXNlciBxdWlja2x5IGNsaWNraW5nIG9uIHBhZ2luYXRpb25cbiAgICAgICAgICAgIC8vIGhlcmUgd2UgZG8gdGhlIHNhbWUgYXMgaW4gc2V0VmFsdWVGcm9tTW9tZW50KG5ld1ZhbHVlKSB3aXRoIGRpZmZlcmVuY2VcbiAgICAgICAgICAgIC8vIHRoYXQgdXBkYXRpbmcgb2YgbmdNb2RlbC9mb3JtQ29udHJvbCBpcyBkZWJvdW5jZWRcbiAgICAgICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UucmVzZXRQcmVzZXRUYWcoKTtcbiAgICAgICAgICAgIHRoaXMud3JpdGVWYWx1ZShuZXdWYWx1ZS51bml4KCkpO1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZURlYm91bmNlZCQubmV4dCh0aGlzLmlubmVyVmFsdWUudW5peCgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVGcm9tTW9tZW50KG5ld1ZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCBpbm5lciB2YWx1ZSBmcm9tIHRpbWVzdGFtcCBhbmQgcHJvcGFnYXRlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdGltZXN0YW1wXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHNldFZhbHVlKHRpbWVzdGFtcDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGF0ZVBpY2tlclNlcnZpY2UucmVzZXRQcmVzZXRUYWcoKTtcbiAgICAgICAgc3VwZXIuc2V0VmFsdWUodGltZXN0YW1wKTtcbiAgICB9XG4gICAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBzdXBlci53cml0ZVZhbHVlKHZhbHVlKTtcbiAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuO1xuICAgICAgICB0aGlzLnJlc3RyaWN0UGFnaW5hdGlvbigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TmV4dERhdGUoYWN0aW9uQ2FsbDogc3RyaW5nLCBhbW91bnQ6IG51bWJlciwgZm9yd2FyZDogYm9vbGVhbik6IE1vbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGVBZGFwdGVyW2FjdGlvbkNhbGxdPy4odGhpcy5pbm5lclZhbHVlLCBmb3J3YXJkID8gYW1vdW50IDogLWFtb3VudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXN0cmljdFBhZ2luYXRpb24oKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fbWluICYmICF0aGlzLl9tYXgpIHJldHVybjtcbiAgICAgICAgY29uc3QgdGltZUZyYW1lID0gdGhpcy5kYXRlUGlja2VyU2VydmljZS50aW1lZnJhbWU7XG4gICAgICAgIGNvbnN0IG5leHRWYWx1ZSA9IHRoaXMucGFnaW5nU2V0dXBbdGltZUZyYW1lXSh0cnVlKTtcbiAgICAgICAgY29uc3QgcHJldlZhbHVlID0gdGhpcy5wYWdpbmdTZXR1cFt0aW1lRnJhbWVdKGZhbHNlKTtcbiAgICAgICAgY29uc3QgZ3JhbnVsYXJpdHkgPSB0aW1lRnJhbWU7XG4gICAgICAgIC8qIFRPRE86IFRha2UgaW50byBhY2NvdW50IGZpc2NhbCB5ZWFyIHN0YXJ0IGFuZCBiYWNrIGZvciBjYXNlcyB3aGVyZSBmaXNjYWwgeWVhciBhbmQgcXVhcnRlciBpcyB0cnVlIC0gaHR0cHM6Ly9kYXRhcmFpbHN0ZWFtLmF0bGFzc2lhbi5uZXQvYnJvd3NlL0RSLTM1NTI4IGFuZFxuICAgICAgICAgIGh0dHBzOi8vZGF0YXJhaWxzdGVhbS5hdGxhc3NpYW4ubmV0L2Jyb3dzZS9EUi0zNTU2OFxuICAgICAgICAqL1xuICAgICAgICBpZiAodGhpcy5maXNjYWxZZWFyQmFjayB8fCB0aGlzLmZpc2NhbFllYXJNb250aHNNb2RpZmllciAhPT0gMCkge1xuICAgICAgICAgICAgdGhpcy5pc05leHREYXRlRGlzYWJsZWQgPSB0aGlzLl9tYXggJiYgbmV4dFZhbHVlICYmIG5leHRWYWx1ZS51bml4KCkgPiB0aGlzLl9tYXgudW5peCgpO1xuICAgICAgICAgICAgdGhpcy5pc1ByZXZEYXRlRGlzYWJsZWQgPSB0aGlzLl9taW4gJiYgcHJldlZhbHVlICYmIHByZXZWYWx1ZS51bml4KCkgPCB0aGlzLl9taW4udW5peCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc05leHREYXRlRGlzYWJsZWQgPSAhISh0aGlzLl9tYXggJiYgbmV4dFZhbHVlICYmICFuZXh0VmFsdWUuaXNTYW1lT3JCZWZvcmUodGhpcy5fbWF4LCBncmFudWxhcml0eSkpO1xuICAgICAgICAgICAgdGhpcy5pc1ByZXZEYXRlRGlzYWJsZWQgPSAhISh0aGlzLl9taW4gJiYgcHJldlZhbHVlICYmICFwcmV2VmFsdWUuaXNTYW1lT3JBZnRlcih0aGlzLl9taW4sIGdyYW51bGFyaXR5KSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZHItYnV0dG9uXG4gICAgW2Rpc2FibGVkXT1cImlzUHJldkRhdGVEaXNhYmxlZFwiXG4gICAgKm5nSWY9XCIhZGlzYWJsZWRcIlxuICAgIHRoZW1lPVwiaWNvblwiXG4gICAgaWNvbj1cImRyLWljb24tYXJyb3ctbGVmdFwiXG4gICAgKGNsaWNrKT1cInBhZ2luZ0NsaWNrZWQoZmFsc2UpXCI+PC9kci1idXR0b24+XG48ZGl2XG4gICAgW2RyVG9vbHRpcF09XCJkYXRlcGlja2VyVG9vbHRpcFwiXG4gICAgW2RyVG9vbHRpcFBvc2l0aW9uXT1cImRhdGVwaWNrZXJUb29sdGlwUG9zaXRpb25cIlxuICAgIFtkclRvb2x0aXBNb3VzbGVhdmVUaW1lb3V0XT1cImRhdGVwaWNrZXJUb29sdGlwVGltZW91dFwiXG4gICAgY2xhc3M9XCJkci1kYXRlcGlja2VyLWlucHV0LWNvbnRhaW5lclwiPlxuICAgIDxpIGNsYXNzPVwiZHItaWNvbi1kYXRlXCIgKGNsaWNrKT1cImRhdGVwaWNrZXJJbnB1dC5jbGljaygpXCI+PC9pPlxuXG4gICAgPGRpdiBjbGFzcz1cImRyLWRhdGVwaWNrZXItaW5wdXQtY29udGFpbmVyX19mb3JtYXR0ZWQtdmFsdWUtZGlzcGxheVwiIChjbGljayk9XCJkYXRlcGlja2VySW5wdXQuY2xpY2soKVwiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJmb3JtYXR0ZWRWYWx1ZVRtcGxcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZWRWYWx1ZTogZGlzcGxheWVkRm9ybWF0dGVkVmFsdWUkIHwgYXN5bmMsXG4gICAgICAgICAgICB9XCI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2Zvcm1hdHRlZFZhbHVlVG1wbCBsZXQtdmFsdWU9XCJmb3JtYXR0ZWRWYWx1ZVwiPlxuICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgZGF0ZVBpY2tlclNlcnZpY2UuaXNVc2luZ0RhdGVUYWdQcmVzZXRzICYmICEhcHJlc2V0VGFnU2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gcHJlc2V0VGFnU2VsZWN0ZWQgKyAnICgnICsgdmFsdWUgKyAnKSdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuICAgIDxpbnB1dFxuICAgICAgICAjZGF0ZXBpY2tlcklucHV0XG4gICAgICAgIFtuZ01vZGVsXT1cImRpc3BsYXlWYWx1ZSQgfCBhc3luY1wiXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInZhbHVlQ2hhbmdlZEluQ2FsZW5kYXIoJGV2ZW50KVwiXG4gICAgICAgIChjbGljayk9XCJkYXRlUGlja2VyLm9wZW4oKVwiXG4gICAgICAgIFttYXREYXRlcGlja2VyXT1cImRhdGVQaWNrZXJcIlxuICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICBbbWluXT1cIl9taW5cIlxuICAgICAgICBbbWF4XT1cIl9tYXhcIiAvPlxuPC9kaXY+XG48ZHItYnV0dG9uXG4gICAgW2Rpc2FibGVkXT1cImlzTmV4dERhdGVEaXNhYmxlZFwiXG4gICAgKm5nSWY9XCIhZGlzYWJsZWRcIlxuICAgIHRoZW1lPVwiaWNvblwiXG4gICAgaWNvbj1cImRyLWljb24tYXJyb3ctcmlnaHRcIlxuICAgIChjbGljayk9XCJwYWdpbmdDbGlja2VkKHRydWUpXCI+PC9kci1idXR0b24+XG5cbjxtYXQtZGF0ZXBpY2tlclxuICAgICNkYXRlUGlja2VyXG4gICAgY2xhc3M9XCJkci10aW1lZnJhbWUtZGF0ZXBpY2tlclwiXG4gICAgW2NhbGVuZGFySGVhZGVyQ29tcG9uZW50XT1cImN1c3RvbUhlYWRlclwiXG4gICAgKHllYXJTZWxlY3RlZCk9XCJjaG9zZW5QZXJpb2RIYW5kbGVyKCRldmVudCwgdGltZWZyYW1lT3B0aW9uLllFQVIsIGRhdGVQaWNrZXIpXCJcbiAgICAobW9udGhTZWxlY3RlZCk9XCJjaG9zZW5QZXJpb2RIYW5kbGVyKCRldmVudCwgdGltZWZyYW1lT3B0aW9uLk1PTlRILCBkYXRlUGlja2VyKVwiXG4gICAgKG9wZW5lZCk9XCJvbk9wZW4oKVwiXG4gICAgKGNsb3NlZCk9XCJvbkNMb3NlKClcIlxuICAgIFtwYW5lbENsYXNzXT1cImNvbWJpbmVkUGFuZWxDbGFzc1wiPlxuPC9tYXQtZGF0ZXBpY2tlcj5cbiJdfQ==