@sunbird-cb/tree-hierarchy 0.0.11-cbrelease-4.8.26 → 0.0.13-cbrelease-4.8.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (21) hide show
  1. package/esm2022/lib/components/category-edit/category-edit-module/category-edit-module.component.mjs +1 -2
  2. package/esm2022/lib/components/create-term-from-framework/create-term-from-framework.component.mjs +4 -3
  3. package/esm2022/lib/components/org-hierarchy-add-modal/org-hierarchy-add-modal.component.mjs +67 -45
  4. package/esm2022/lib/components/term-card/term-card.component.mjs +3 -3
  5. package/esm2022/lib/components/tree-column-view/tree-column-view.component.mjs +27 -6
  6. package/esm2022/lib/components/tree-view/tree-view.component.mjs +77 -11
  7. package/esm2022/lib/tree-hierarchy.module.mjs +7 -3
  8. package/esm2022/material.module.mjs +2 -2
  9. package/fesm2022/sunbird-cb-tree-hierarchy.mjs +188 -77
  10. package/fesm2022/sunbird-cb-tree-hierarchy.mjs.map +1 -1
  11. package/lib/components/category-edit/category-edit-module/category-edit-module.component.d.ts.map +1 -1
  12. package/lib/components/org-hierarchy-add-modal/org-hierarchy-add-modal.component.d.ts +13 -3
  13. package/lib/components/org-hierarchy-add-modal/org-hierarchy-add-modal.component.d.ts.map +1 -1
  14. package/lib/components/tree-column-view/tree-column-view.component.d.ts +1 -0
  15. package/lib/components/tree-column-view/tree-column-view.component.d.ts.map +1 -1
  16. package/lib/components/tree-view/tree-view.component.d.ts +3 -1
  17. package/lib/components/tree-view/tree-view.component.d.ts.map +1 -1
  18. package/lib/tree-hierarchy.module.d.ts +2 -1
  19. package/lib/tree-hierarchy.module.d.ts.map +1 -1
  20. package/material.module.d.ts +2 -2
  21. package/package.json +1 -1
@@ -13,7 +13,7 @@ import * as i4 from "@angular/material/legacy-snack-bar";
13
13
  import * as i5 from "@angular/common";
14
14
  import * as i6 from "@angular/material/core";
15
15
  import * as i7 from "@angular/material/button";
16
- import * as i8 from "@angular/material/chips";
16
+ import * as i8 from "@angular/material/legacy-chips";
17
17
  import * as i9 from "@angular/material/dialog";
18
18
  import * as i10 from "@angular/material/expansion";
19
19
  import * as i11 from "@angular/material/icon";
@@ -23,6 +23,7 @@ import * as i14 from "@angular/material/menu";
23
23
  import * as i15 from "@angular/material/progress-spinner";
24
24
  import * as i16 from "@angular/material/radio";
25
25
  import * as i17 from "@angular/material/select";
26
+ import * as i18 from "@angular/material/chips";
26
27
  export class CreateTermFromFrameworkComponent {
27
28
  constructor(dialogRef, data, dialog, frameWorkService, fb, _snackBar) {
28
29
  this.dialogRef = dialogRef;
@@ -811,7 +812,7 @@ export class CreateTermFromFrameworkComponent {
811
812
  return this.competencyForm.get('compThemeFields');
812
813
  }
813
814
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CreateTermFromFrameworkComponent, deps: [{ token: i1.MatLegacyDialogRef }, { token: MAT_DIALOG_DATA }, { token: i1.MatLegacyDialog }, { token: i2.FrameworkService }, { token: i3.UntypedFormBuilder }, { token: i4.MatLegacySnackBar }], target: i0.ɵɵFactoryTarget.Component }); }
814
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CreateTermFromFrameworkComponent, selector: "lib-create-term-from-framework", ngImport: i0, template: "\n<div class=\"\">\n <ng-container *ngIf=\"disableMultiCreate\">\n <div class=\"flex flex-col flex-1 w-100 absolute loader-bg items-center pt-5 text-center\">\n <mat-spinner class=\"display-inline-block mb-5\" [diameter]=\"50\" [strokeWidth]=\"3\"></mat-spinner>\n <!-- <p>{{loaderMsg}}</p> -->\n </div>\n </ng-container>\n <div class=\"dialogNew\">\n <div class=\"flex items-center justify-between\">\n <ng-container [ngTemplateOutlet]=\"modalTitle\"></ng-container>\n <button type=\"button\" mat-icon-button i18n-aria-label aria-label=\"action items\"\n [matMenuTriggerFor]=\"cardMenu\" [matMenuTriggerData]=\"{'data':data}\" class=\"action-btn\">\n <mat-icon>more_vert</mat-icon>\n </button>\n </div>\n <div class=\"flex gap-4\">\n <ng-container *ngFor=\"let term of data?.selectedParentTerms\">\n <ng-container *ngIf=\"term.category !== 'competency'\">\n <div class=\"flex-1 flex-col\">\n <label for=\"name\" class=\"margin-remove-bottom form-label\" aria-label=\"First name label\">\n {{frameWorkService.getConfig(term.category).labelName}}\n </label>\n <mat-form-field appearance=\"outline\" class=\"flex-1\">\n <input matInput name=\"name\" id=\"name\" #name placeholder=\"{{app_strings.name}}\"\n [value]=\"term.name\" disabled>\n </mat-form-field>\n </div>\n </ng-container>\n </ng-container>\n </div>\n <div class=\"row-divider\"></div>\n <ng-container *ngIf=\"competencyForm\">\n <form [formGroup]=\"competencyForm\">\n <div class=\"title-text\">\n <label for=\"name\" class=\"margin-remove-bottom form-label required\" aria-label=\"First name labe \">\n {{'Select Area'}}\n </label>\n <div class=\"mt-5\">\n <mat-radio-group class=\"competency-group\" aria-label=\"Select an option\" formControlName=\"compArea\">\n <mat-radio-button [disabled]=\"data?.columnInfo?.code === 'subtheme' || data.openMode ==='view'\" class=\"learning-section\" [ngClass]=\"{'active-btn':item?.code === seletedCompetencyArea?.code}\"\n *ngFor=\"let item of competencyArea?.children\" [value]=\"item\" [checked]=\"item?.code === seletedCompetencyArea?.code\" (change)=\"clearSelectedThemes(item)\">{{item.name}}</mat-radio-button>\n </mat-radio-group>\n </div>\n </div>\n <ng-container *ngIf=\"data?.mode === 'multi-create'\">\n <div class=\"flex flex-end mb-4\" >\n <ng-container *ngIf=\"data?.columnInfo?.code !== 'subtheme'\">\n <button type=\"button\" class=\"mat-button flex items-center create-accordion-btn\" *ngIf=\"data.mode === 'multi-create'\" (click)=\"addCompetencyTheme()\">\n <mat-icon class=\"mr-2 mat-icon-custom \">add_circle_outline</mat-icon>\n Add more\n <!-- {{data.columnInfo.name}} -->\n </button>\n </ng-container>\n </div>\n <mat-accordion formArrayName=\"compThemeFields\">\n <mat-expansion-panel *ngFor=\"let field of competencyForm?.get('compThemeFields')['controls']; let i = index; let isFirst = first\" \n class=\"margin-bottom-l comp-theme-fields\" [formGroupName]=\"i\" [expanded]=\"isFirst\"> \n <mat-expansion-panel-header>\n <mat-panel-title>\n {{competencyForm?.get('compThemeFields')['controls'][i]['controls']?.competencyTheme?.value?.name}} \n </mat-panel-title>\n <ng-container *ngIf=\"data?.columnInfo?.code !== 'subtheme'\">\n <button mat-button type=\"button\" *ngIf=\"data.mode === 'multi-create'\"\n (click)=\"removeCompFields(i)\">\n <mat-icon class=\"mat-icon-custom \">delete</mat-icon>\n </button>\n </ng-container>\n </mat-expansion-panel-header>\n <div class=\"input-column\">\n <div class=\"input-wrapper margin-top-s\">\n <div class=\"flex gap-4 \">\n <div class=\"flex-1 flex-col\">\n <label for=\"name\" class=\"margin-remove-bottom form-label required\"\n aria-label=\"First name label\">\n {{data.openMode !== 'view'? 'Select Competency Theme': 'Competency Theme Name'}}\n </label>\n <mat-form-field appearance=\"outline\" class=\"flex-1\">\n <mat-select [disabled]=\"data?.columnInfo?.code === 'subtheme' || data.openMode ==='view'\" placeholder=\"Choose the Competency Theme\" formControlName=\"competencyTheme\">\n <ng-container >\n <ng-container >\n <mat-option *ngFor=\"let option of filteredallCompetencyTheme\" [value]=\"option\" [disabled]=\"onDisableTheme(option) || data.openMode ==='view'\" \n (onSelectionChange)=\"OnThemeSelection($event, i, option)\" >{{option.name}}\n <ng-container *ngIf=\"option.refId\">\n <span class=\"ml-2 ref-id\">({{option.refId}})</span>\n </ng-container>\n </mat-option>\n </ng-container>\n </ng-container>\n </mat-select>\n </mat-form-field>\n <mat-error *ngIf=\"isTermExist\">{{app_strings.alreadyExist}}</mat-error>\n </div>\n </div>\n \n <div class=\"flex-col mt-2\">\n <label for=\"fname\" class=\"margin-remove-bottom form-label required\"\n i18n=\"First Name label|Label which explains the user to enter first name\"\n i18n-aria-label aria-label=\"First name label\">\n\n {{data.openMode !== 'view'? 'Select Competency Sub-Theme': 'Competency Sub-Theme Name'}}\n \n </label>\n <!-- <mat-form-field appearance=\"outline\" class=\"flex-1\">\n <mat-select placeholder=\"Choose the Competency Theme\" formControlName=\"competencySubTheme\">\n <mat-option *ngFor=\"let option of filteredallCompetencySubTheme\" [value]=\"option\">{{option.name}}</mat-option>\n </mat-select>\n </mat-form-field> -->\n <!-- {{competencyForm?.get('compThemeFields')['controls'][i]['controls']?.competencySubTheme?.value |json}} -->\n <mat-form-field appearance=\"outline\" class=\"w-full field-height\" >\n <mat-select class=\" placeholder-text\" placeholder=\"Choose the Competency Sub-Theme\"\n formControlName=\"competencySubTheme\" multiple [disabled]=\"data.openMode ==='view'\" panelClass=\"full-width-panel\">\n <!-- [ngClass]=\"{'disbaledSelect':isHideData}\" -->\n <mat-select-trigger >\n <mat-chip-listbox>\n <!-- -->\n \n <mat-chip *ngFor=\"let item of competencyForm?.get('compThemeFields')['controls'][i]['controls']?.competencySubTheme?.value\" \n (removed)=\"onTermRemove(item, i)\" [disabled]=\"data.openMode ==='view'\"\n [ngClass]=\"{'sub-theme-disable': data?.openMode ==='view'}\" [removable]=\"data?.openMode ==='view'? false: true\">\n <span >{{ item.name }}</span>\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip>\n </mat-chip-listbox>\n </mat-select-trigger>\n <!-- {{competencyForm?.get('compThemeFields') |json}} -->\n <!-- <mat-optgroup>\n <mat-form-field floatLabel=\"never\">\n <input #search autocomplete=\"off\" placeholder=\"Search\" (keydown.space)=\"$event.stopPropagation()\"\n formControlName=\"competencySubTheme\" matInput>\n </mat-form-field>\n </mat-optgroup> -->\n <mat-optgroup *ngIf=\"filteredallCompetencySubTheme.length === 0\">\n <div>No results found!</div>\n </mat-optgroup>\n <!-- <mat-option *ngFor=\"let option of requestObjData.preferredProvider\" [value]=\"option.providerName\">{{option.providerName}}</mat-option> -->\n <ng-container *ngFor=\"let option of competencyForm?.get('compThemeFields')['controls'][i]['controls']?.competencyTheme?.value?.children\">\n <mat-option \n [value]=\"option\" class=\"mat-option-list\">{{option?.name}}\n <ng-container *ngIf=\"option?.refId\">\n <span class=\"ml-2 ref-id\">({{option?.refId}})</span>\n </ng-container>\n </mat-option>\n </ng-container>\n \n </mat-select>\n <!-- <mat-error *ngIf=\"requestForm.controls['providerText'].hasError('required')\">\n Please select up to five preferred providers for the request.\n </mat-error> -->\n </mat-form-field>\n </div>\n </div>\n </div>\n </mat-expansion-panel>\n </mat-accordion>\n <footer class=\"actions\">\n <button mat-raised-button color=\"default\" type=\"reset\"\n (click)=\"dialogClose('')\">{{app_strings.cancel}}</button>\n <ng-container *ngIf=\"data?.mode === 'create' && data.openMode !=='view'\">\n <button mat-raised-button color=\"primary\" type=\"submit\" cdkFocusInitial\n [disabled]=\"competencyForm?.invalid\" *ngIf=\"!disableCreate\">{{app_strings.create}}</button>\n </ng-container>\n <ng-container *ngIf=\"data?.mode === 'multi-create' && data.openMode !=='view'\">\n <ng-container *ngIf=\"data?.columnInfo?.code !== 'subtheme'\">\n <button mat-raised-button color=\"primary\" type=\"button\" cdkFocusInitial\n [disabled]=\"competencyForm.invalid || disableMultiCreate\" *ngIf=\"!disableCreate\" (click)=\"multiCreate(competencyForm, data)\">\n {{app_strings.create}}\n </button>\n </ng-container>\n <ng-container *ngIf=\"data?.columnInfo?.code === 'subtheme'\">\n <!-- <ng-container *ngIf=\"competencyForm?.get('compThemeFields')['controls'][0]['controls']?.competencySubTheme?.value?.length;else updateBtn\"> -->\n <button mat-raised-button color=\"primary\" type=\"button\" cdkFocusInitial\n [disabled]=\"competencyForm.invalid || disableMultiCreate\" *ngIf=\"!disableCreate\" (click)=\"multiCreateSubTheme(competencyForm, data)\">\n {{app_strings.update}}\n </button>\n <!-- </ng-container> -->\n \n <!-- <ng-template #updateBtn>\n <button mat-raised-button color=\"primary\" type=\"button\" cdkFocusInitial\n [disabled]=\"competencyForm.invalid || disableMultiCreate\" *ngIf=\"!disableCreate\" (click)=\"multiCreateSubTheme(competencyForm, data)\">\n {{app_strings.delete}}\n </button>\n </ng-template> -->\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"data?.mode === 'edit' && data.openMode !=='view'\">\n <button mat-raised-button color=\"primary\" type=\"button\" cdkFocusInitial\n (click)=\"updateTermData(competencyForm, data)\"\n [disabled]=\"competencyForm?.invalid || disableUpdate\"\n *ngIf=\"!disableCreate\">{{app_strings.update}}</button>\n </ng-container>\n </footer>\n </ng-container>\n </form>\n </ng-container>\n \n </div>\n \n \n <!-- Title of the popup -->\n <ng-template #modalTitle>\n <!-- <ng-container *ngIf=\"data?.mode === 'create' || data?.mode === 'multi-create'\">\n <div class=\"dialog-title\" mat-dialog-title>{{data.columnInfo.name === 'Theme' ? app_strings.addCompetency : app_strings.createNew}} {{data.columnInfo.name}}</div>\n </ng-container> -->\n <!-- {{data |json}} -->\n <ng-container *ngIf=\"data?.mode === 'create' || data?.mode === 'multi-create'\">\n <div class=\"dialog-title\" mat-dialog-title>{{getCreateName(data)}}</div>\n </ng-container>\n <!-- <ng-container *ngIf=\"data?.mode === 'view'\">\n <div class=\"dialog-title\" mat-dialog-title>View {{data.columnInfo.name}}</div>\n </ng-container> -->\n <ng-container *ngIf=\"data?.mode === 'edit'\">\n <div class=\"dialog-title\" mat-dialog-title>{{app_strings.edit}} {{data.columnInfo.name}}</div>\n </ng-container>\n </ng-template>\n</div>\n\n\n<mat-menu #cardMenu=\"matMenu\" class=\"menu-sec\">\n <ng-template matMenuContent let-rowData=\"data\" let-cardRef=\"cardRef\">\n <button (click)=\"deleteTheme()\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>delete</mat-icon>\n <span>Delete</span>\n </button>\n </ng-template>\n</mat-menu>", styles: [".gap-3{gap:1.25rem}.gap-4{gap:1.5rem}.row-divider{width:100%;border-top:1px solid rgba(0,0,0,.08);margin:1rem 0}.defaultForm{padding:16px;display:flex;gap:16px;flex-direction:column}.theme-actions{display:flex;justify-content:right;padding:1em 0;gap:16px;margin-top:30px;border-top:1px solid rgba(0,0,0,.0784313725)}.dialog .mat-dialog-title{padding:1em;margin-bottom:0;background:#00000014}.dialog .mat-form-field{padding:0;background:#fff;border-radius:2px}.dialog .mat-form-field ::ng-deep .mat-form-field-wrapper{padding-bottom:0}.dialog .mat-form-field ::ng-deep .mat-form-field-wrapper .mat-form-field-infix{padding:15px;margin-top:0;border-top:0}.dialog .mat-form-field ::ng-deep .mat-form-field-wrapper .mat-form-field-infix textarea{resize:none}.dialog .mat-form-field-disabled{background:#00000014}.dialog .actions{display:flex;flex-direction:row;justify-content:space-between;padding:0 1em 1em}.dialog .mat-error{padding:0 25px;margin-top:-10px}.dialogNew{padding:1rem}.dialogNew .mat-dialog-title{padding:1em 0;margin-bottom:0}.dialogNew .actions{display:flex;justify-content:right;padding:1em 0;gap:16px;margin-top:16px;border-top:1px solid rgba(0,0,0,.0784313725)}.dialogNew .mat-error{margin-top:-10px}.dialogNew .learning-section{padding:10px!important;border:1px solid rgba(0,0,0,.1803921569);border-radius:4px;margin-right:8px}.dialogNew .learning-section.active-btn{border:1px solid #1B4CA1!important}.learning-section.mat-radio-button .mat-radio-container .mat-radio-outer-circle{border-color:#1b4ca1!important}::ng-deep .competency-group .learning-section .mat-radio-inner-circle{background-color:#1b4ca1!important}::ng-deep .competency-group .learning-section .mat-radio-button.mat-accent .mat-radio-inner-circle{background-color:#1b4ca1!important}.dialog-title{align-items:center;display:flex}.flex{display:flex}.flex-col{display:flex;flex-direction:column}.mr-5{margin-right:1.5rem}.flex-1{flex:1 1}.margin-remove-bottom{margin-bottom:0}::ng-deep .custom-dialog-container{max-height:90vh}::ng-deep .custom-dialog-container .mat-dialog-container{padding:0;border-radius:0;background:#00000014}@media only screen and (max-width: 1024px){::ng-deep .cdk-overlay-pane{width:40%!important}}@media only screen and (max-width: 992px){::ng-deep .cdk-overlay-pane{width:45%!important}}@media only screen and (max-width: 1024px){.dialog{font-size:12px}.dialog .dialog-title{font-size:24px;height:1em}.dialog button{font-size:12px;line-height:3.5em}.dialog .mat-raised-button{padding:0 3em}}.flex-align{align-items:center;justify-content:flex-start}::ng-deep mat-form-field .mat-form-field-infix .mat-form-field-label,::ng-deep mat-form-field .mat-form-field-infix .mat-select-value{line-height:normal!important}ws-widget-btn-page-back-admin{margin-left:-270px}.max-wid{max-width:400px}::ng-deep .mat-form-field.mat-focused .mat-form-field-label{color:#333232!important}.margin-right-10{margin-right:10px!important}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}::ng-deep .mat-tab-header{margin:0 3rem}.heading{color:#222}.heading.mt-10{margin-top:2.5rem!important}.img-column{flex:100px 0 0}.input-column{flex:auto}.radio-toolbar input[type=radio]{opacity:0;position:fixed;width:0}.radio-toolbar{padding:10px 0}.radio-toolbar label{display:inline-block;padding:7px 21px;font-size:14px;background:#fff 0% 0% no-repeat padding-box;border:1px solid #5F5F5F;border-radius:4px;margin:0 10px 10px 0;color:#5f5f5f;cursor:pointer;transition:all .125s ease-in-out}.radio-toolbar input[type=radio]:checked+label{background:#0074b6 0% 0% no-repeat padding-box;border-radius:6px;border-color:#0074b6;color:#fff}.radio-toolbar input[type=radio]:focus+label{background:#0074b6 0% 0% no-repeat padding-box;border-radius:6px;border-color:#0074b6;color:#fff}.mar{margin-left:30px;min-width:175px}.radio-toolbar label:hover{background:none;border-color:#0074b6;color:#0074b6}::ng-deep .mat-form-field{width:100%}::ng-deep .mat-form-field.full-width{max-width:100%}::ng-deep .mat-form-field.no-pb .mat-form-field-wrapper{padding-bottom:0}.combined-field{width:100%}.w-full-imp{width:100%!important}::ng-deep .full-width-panel{width:100%!important;min-width:300px}::ng-deep .full-width-panel .mat-option{white-space:normal}.btn-success{background-color:#0075b7!important;border-radius:4px;width:240px;box-shadow:none;margin-right:16px}.btn-success.btn-responsive{width:100%}.btn-success:disabled,.btn-success[disabled]{opacity:.6}.btn-danger{height:30px;width:30px}.color-danger{font-size:30px;height:30px;width:30px;color:#e44}::ng-deep .mat-form-field-outline{min-height:40px;background:#fff;border-radius:4px}::ng-deep .mat-form-field-outline .mat-form-field-outline-start{border:1px solid rgba(112,112,112,.4117647059);border-radius:4px 0 0 4px;min-width:8px;border-right-style:none}::ng-deep .mat-form-field-outline .mat-form-field-outline-gap{border:1px solid currentColor;border-radius:82px;border-left-style:none;border-right-style:none}::ng-deep .mat-form-field-outline .mat-form-field-outline-end{border:1px solid rgba(112,112,112,.4117647059);border-left-style:none;border-radius:0 4px 4px 0}::ng-deep .mat-form-field-outline.mat-form-field-outline-thick{min-height:40px;background:#fff;border-radius:4px}::ng-deep .mat-form-field-outline.mat-form-field-outline-thick .mat-form-field-outline-start{border-radius:4px 0 0 4px;min-width:8px;border:1px solid currentColor;border-right-style:none}::ng-deep .mat-form-field-outline.mat-form-field-outline-thick .mat-form-field-outline-gap{border-width:1px;border:1px solid currentColor;border-radius:4px;border-left-style:none;border-right-style:none}::ng-deep .mat-form-field-outline.mat-form-field-outline-thick .mat-form-field-outline-end{border-width:1px;border-radius:0 4px 4px 0;border:1px solid currentColor;border-left-style:none}::ng-deep .mat-form-field-disabled .mat-form-field-outline{background:#ebebeb!important}::ng-deep .mat-form-field-infix{padding:0;margin:0;border:none}::ng-deep .mat-form-field-flex{min-height:40px;align-items:center}::ng-deep .mat-form-field-infix{padding:0;margin:8px 0 0;border:none}.form-label{color:#222;font-size:14px;margin-bottom:.5rem;font-weight:700;font-family:Lato}.form-input{font-size:14px;font-weight:400;font-family:Lato}input.mat-input-element{color:#5f5f5f}::ng-deep .mat-radio-group{padding-bottom:1.34375em}::ng-deep .mat-chip-list-wrapper{margin:0!important}::ng-deep .mat-chip{font-weight:400;background:#f1f9ff 0% 0% no-repeat padding-box!important;border-radius:12px!important;color:#0074b6!important}::ng-deep .mat-chip:hover{filter:brightness(90%)}::ng-deep .mat-chip .mat-chip-remove{opacity:1!important;color:#0074b6!important;border-radius:50%}::ng-deeptextarea .mat-input-element{padding:8px 0}::ng-deep .mat-checkbox-checked.mat-accent .mat-checkbox-background{background:#0074b6 0% 0% no-repeat padding-box!important;border-radius:4px}::ng-deep .mat-checkbox .mat-checkbox-frame{border-radius:4px!important}::ng-deep .mat-form-field-appearance-outline .mat-select-arrow-wrapper{transform:none!important}::ng-deep .mat-tab-label-container .mat-tab-list .mat-tab-labels .mat-tab-label{font-size:18px;color:#222}::ng-deep .mat-tab-label-container .mat-tab-list .mat-tab-labels .mat-tab-label-active .mat-tab-label-content{color:#0074b6}::ng-deep .mat-tab-label-container .mat-tab-list .mat-ink-bar{height:3px;background-color:#0074b6!important}.form-control{background:#fff 0% 0% no-repeat padding-box;border:1px solid rgba(112,112,112,.4117647059);border-radius:4px;display:block}.form-control::placeholder{color:#bebebe;font-size:14px}.form-control:focus{border:2px solid #0074b6;outline:none}.input-wrapper{flex:1;display:flex;flex-wrap:wrap;flex-direction:column}::ng-deep .mat-checkbox-inner-container{height:23px!important;width:23px!important}.flex-expand{flex:1!important}.heading{font-weight:600;font-family:Montserrat;font-size:1.25rem;display:block;padding:0px 0px 1rem 0}::ng-deep .multiselect-dropdown{margin-bottom:20px}::ng-deep .multiselect-dropdown .dropdown-btn{border:1px solid #ccc!important;width:92%!important}::ng-deep .multiselect-dropdown .dropdown-list .filter-textbox input{width:90%!important}.organisation{color:#212529;font-weight:700;font-size:14px;font-family:Lato}.org-name{height:50px;border:1px solid #e2e2e2;border-radius:5px;background-color:#ebebeb;font-size:14px}.add-designation{height:25px;color:#1b4ca1!important;font-weight:500;font-size:14px;font-family:Lato;cursor:pointer}.add-designation .add-icon{color:#1b4ca1!important;height:24px;width:24px;font-size:24px}.info-icon{width:14px;height:14px;font-size:14px;color:#a7a9ae!important}.themDesignation{max-height:90vh;overflow-y:auto}.designation-panel{margin-bottom:0!important;background-color:#eef1f7!important;border:1px solid #DBE0E9;box-shadow:none!important}.designation-panel .deletDesignation{font-size:18px;width:14px;height:14px;color:#5f6063}.designation-panel .saveDesignaton{color:#fff;height:40px;width:80px;background-color:#1b4ca1;border:1px solid #1B4CA1;font-weight:700;font-size:14px;font-family:Lato}.designation-footer{padding:1rem;border-top:1px solid #efefef}.cancel{width:93px;height:40px;font-weight:700;font-size:14px;font-family:Lato;border:1px solid #eee;color:#363636}.addBtn{color:#fff!important;height:40px;width:80px;background-color:#1b4ca1!important;border:1px solid #1B4CA1;font-weight:700;font-size:14px;font-family:Lato}::ng-deep .mat-option.mat-selected:not(.mat-option-disabled){color:#000000de!important}::ng-deep .theme-igot.day-mode .mat-pseudo-checkbox-checked{background:#0074b6!important}::ng-deep .mat-select-panel .mat-option{line-height:1!important}.comp-theme-fields{background:#eef1f7!important;border:1px solid #DBE0E9!important}.create-accordion-btn{color:#1b4ca1!important;padding:0!important}.create-accordion-btn mat-icon{color:#1b4ca1}.ref-id{font-size:10px}::ng-deep .mat-select-panel{min-width:103%!important;margin-left:32px}.loader-bg{background:#ffffffcf;inset:0;transform:translate(-50% -50%);pointer-events:unset;z-index:999999;display:flex;align-items:center;justify-content:center}::ng-deep .mat-chip.mat-standard-chip.mat-chip-disabled{opacity:.8!important;cursor:none;filter:brightness(90%)}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i6.MatOptgroup, selector: "mat-optgroup", inputs: ["disabled"], exportAs: ["matOptgroup"] }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i8.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disabled", "disableRipple", "tabIndex", "role", "id", "aria-label", "aria-description", "value", "removable", "highlighted"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "component", type: i8.MatChipListbox, selector: "mat-chip-listbox", inputs: ["tabIndex", "multiple", "aria-orientation", "selectable", "compareWith", "required", "hideSingleSelectionIndicator", "value"], outputs: ["change"] }, { kind: "directive", type: i8.MatChipRemove, selector: "[matChipRemove]" }, { kind: "directive", type: i9.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i10.MatAccordion, selector: "mat-accordion", inputs: ["multi", "hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i10.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i10.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { kind: "directive", type: i10.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "component", type: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i12.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i13.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i13.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i14.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i14.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i14.MatMenuContent, selector: "ng-template[matMenuContent]" }, { kind: "directive", type: i14.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i15.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i16.MatRadioGroup, selector: "mat-radio-group", exportAs: ["matRadioGroup"] }, { kind: "component", type: i16.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { kind: "component", type: i17.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "panelWidth", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "directive", type: i17.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i3.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i3.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }] }); }
815
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CreateTermFromFrameworkComponent, selector: "lib-create-term-from-framework", ngImport: i0, template: "\n<div class=\"\">\n <ng-container *ngIf=\"disableMultiCreate\">\n <div class=\"flex flex-col flex-1 w-100 absolute loader-bg items-center pt-5 text-center\">\n <mat-spinner class=\"display-inline-block mb-5\" [diameter]=\"50\" [strokeWidth]=\"3\"></mat-spinner>\n <!-- <p>{{loaderMsg}}</p> -->\n </div>\n </ng-container>\n <div class=\"dialogNew\">\n <div class=\"flex items-center justify-between\">\n <ng-container [ngTemplateOutlet]=\"modalTitle\"></ng-container>\n <button type=\"button\" mat-icon-button i18n-aria-label aria-label=\"action items\"\n [matMenuTriggerFor]=\"cardMenu\" [matMenuTriggerData]=\"{'data':data}\" class=\"action-btn\">\n <mat-icon>more_vert</mat-icon>\n </button>\n </div>\n <div class=\"flex gap-4\">\n <ng-container *ngFor=\"let term of data?.selectedParentTerms\">\n <ng-container *ngIf=\"term.category !== 'competency'\">\n <div class=\"flex-1 flex-col\">\n <label for=\"name\" class=\"margin-remove-bottom form-label\" aria-label=\"First name label\">\n {{frameWorkService.getConfig(term.category).labelName}}\n </label>\n <mat-form-field appearance=\"outline\" class=\"flex-1\">\n <input matInput name=\"name\" id=\"name\" #name placeholder=\"{{app_strings.name}}\"\n [value]=\"term.name\" disabled>\n </mat-form-field>\n </div>\n </ng-container>\n </ng-container>\n </div>\n <div class=\"row-divider\"></div>\n <ng-container *ngIf=\"competencyForm\">\n <form [formGroup]=\"competencyForm\">\n <div class=\"title-text\">\n <label for=\"name\" class=\"margin-remove-bottom form-label required\" aria-label=\"First name labe \">\n {{'Select Area'}}\n </label>\n <div class=\"mt-5\">\n <mat-radio-group class=\"competency-group\" aria-label=\"Select an option\" formControlName=\"compArea\">\n <mat-radio-button [disabled]=\"data?.columnInfo?.code === 'subtheme' || data.openMode ==='view'\" class=\"learning-section\" [ngClass]=\"{'active-btn':item?.code === seletedCompetencyArea?.code}\"\n *ngFor=\"let item of competencyArea?.children\" [value]=\"item\" [checked]=\"item?.code === seletedCompetencyArea?.code\" (change)=\"clearSelectedThemes(item)\">{{item.name}}</mat-radio-button>\n </mat-radio-group>\n </div>\n </div>\n <ng-container *ngIf=\"data?.mode === 'multi-create'\">\n <div class=\"flex flex-end mb-4\" >\n <ng-container *ngIf=\"data?.columnInfo?.code !== 'subtheme'\">\n <button type=\"button\" class=\"mat-button flex items-center create-accordion-btn\" *ngIf=\"data.mode === 'multi-create'\" (click)=\"addCompetencyTheme()\">\n <mat-icon class=\"mr-2 mat-icon-custom \">add_circle_outline</mat-icon>\n Add more\n <!-- {{data.columnInfo.name}} -->\n </button>\n </ng-container>\n </div>\n <mat-accordion formArrayName=\"compThemeFields\">\n <mat-expansion-panel *ngFor=\"let field of competencyForm?.get('compThemeFields')['controls']; let i = index; let isFirst = first\" \n class=\"margin-bottom-l comp-theme-fields\" [formGroupName]=\"i\" [expanded]=\"isFirst\"> \n <mat-expansion-panel-header>\n <mat-panel-title>\n {{competencyForm?.get('compThemeFields')['controls'][i]['controls']?.competencyTheme?.value?.name}} \n </mat-panel-title>\n <ng-container *ngIf=\"data?.columnInfo?.code !== 'subtheme'\">\n <button mat-button type=\"button\" *ngIf=\"data.mode === 'multi-create'\"\n (click)=\"removeCompFields(i)\">\n <mat-icon class=\"mat-icon-custom \">delete</mat-icon>\n </button>\n </ng-container>\n </mat-expansion-panel-header>\n <div class=\"input-column\">\n <div class=\"input-wrapper margin-top-s\">\n <div class=\"flex gap-4 \">\n <div class=\"flex-1 flex-col\">\n <label for=\"name\" class=\"margin-remove-bottom form-label required\"\n aria-label=\"First name label\">\n {{data.openMode !== 'view'? 'Select Competency Theme': 'Competency Theme Name'}}\n </label>\n <mat-form-field appearance=\"outline\" class=\"flex-1\">\n <mat-select [disabled]=\"data?.columnInfo?.code === 'subtheme' || data.openMode ==='view'\" placeholder=\"Choose the Competency Theme\" formControlName=\"competencyTheme\">\n <ng-container >\n <ng-container >\n <mat-option *ngFor=\"let option of filteredallCompetencyTheme\" [value]=\"option\" [disabled]=\"onDisableTheme(option) || data.openMode ==='view'\" \n (onSelectionChange)=\"OnThemeSelection($event, i, option)\" >{{option.name}}\n <ng-container *ngIf=\"option.refId\">\n <span class=\"ml-2 ref-id\">({{option.refId}})</span>\n </ng-container>\n </mat-option>\n </ng-container>\n </ng-container>\n </mat-select>\n </mat-form-field>\n <mat-error *ngIf=\"isTermExist\">{{app_strings.alreadyExist}}</mat-error>\n </div>\n </div>\n \n <div class=\"flex-col mt-2\">\n <label for=\"fname\" class=\"margin-remove-bottom form-label required\"\n i18n=\"First Name label|Label which explains the user to enter first name\"\n i18n-aria-label aria-label=\"First name label\">\n\n {{data.openMode !== 'view'? 'Select Competency Sub-Theme': 'Competency Sub-Theme Name'}}\n \n </label>\n <!-- <mat-form-field appearance=\"outline\" class=\"flex-1\">\n <mat-select placeholder=\"Choose the Competency Theme\" formControlName=\"competencySubTheme\">\n <mat-option *ngFor=\"let option of filteredallCompetencySubTheme\" [value]=\"option\">{{option.name}}</mat-option>\n </mat-select>\n </mat-form-field> -->\n <!-- {{competencyForm?.get('compThemeFields')['controls'][i]['controls']?.competencySubTheme?.value |json}} -->\n <mat-form-field appearance=\"outline\" class=\"w-full field-height\" >\n <mat-select class=\" placeholder-text\" placeholder=\"Choose the Competency Sub-Theme\"\n formControlName=\"competencySubTheme\" multiple [disabled]=\"data.openMode ==='view'\" panelClass=\"full-width-panel\">\n <!-- [ngClass]=\"{'disbaledSelect':isHideData}\" -->\n <mat-select-trigger >\n <mat-chip-listbox>\n <!-- -->\n \n <mat-chip *ngFor=\"let item of competencyForm?.get('compThemeFields')['controls'][i]['controls']?.competencySubTheme?.value\" \n (removed)=\"onTermRemove(item, i)\" [disabled]=\"data.openMode ==='view'\"\n [ngClass]=\"{'sub-theme-disable': data?.openMode ==='view'}\" [removable]=\"data?.openMode ==='view'? false: true\">\n <span >{{ item.name }}</span>\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip>\n </mat-chip-listbox>\n </mat-select-trigger>\n <!-- {{competencyForm?.get('compThemeFields') |json}} -->\n <!-- <mat-optgroup>\n <mat-form-field floatLabel=\"never\">\n <input #search autocomplete=\"off\" placeholder=\"Search\" (keydown.space)=\"$event.stopPropagation()\"\n formControlName=\"competencySubTheme\" matInput>\n </mat-form-field>\n </mat-optgroup> -->\n <mat-optgroup *ngIf=\"filteredallCompetencySubTheme.length === 0\">\n <div>No results found!</div>\n </mat-optgroup>\n <!-- <mat-option *ngFor=\"let option of requestObjData.preferredProvider\" [value]=\"option.providerName\">{{option.providerName}}</mat-option> -->\n <ng-container *ngFor=\"let option of competencyForm?.get('compThemeFields')['controls'][i]['controls']?.competencyTheme?.value?.children\">\n <mat-option \n [value]=\"option\" class=\"mat-option-list\">{{option?.name}}\n <ng-container *ngIf=\"option?.refId\">\n <span class=\"ml-2 ref-id\">({{option?.refId}})</span>\n </ng-container>\n </mat-option>\n </ng-container>\n \n </mat-select>\n <!-- <mat-error *ngIf=\"requestForm.controls['providerText'].hasError('required')\">\n Please select up to five preferred providers for the request.\n </mat-error> -->\n </mat-form-field>\n </div>\n </div>\n </div>\n </mat-expansion-panel>\n </mat-accordion>\n <footer class=\"actions\">\n <button mat-raised-button color=\"default\" type=\"reset\"\n (click)=\"dialogClose('')\">{{app_strings.cancel}}</button>\n <ng-container *ngIf=\"data?.mode === 'create' && data.openMode !=='view'\">\n <button mat-raised-button color=\"primary\" type=\"submit\" cdkFocusInitial\n [disabled]=\"competencyForm?.invalid\" *ngIf=\"!disableCreate\">{{app_strings.create}}</button>\n </ng-container>\n <ng-container *ngIf=\"data?.mode === 'multi-create' && data.openMode !=='view'\">\n <ng-container *ngIf=\"data?.columnInfo?.code !== 'subtheme'\">\n <button mat-raised-button color=\"primary\" type=\"button\" cdkFocusInitial\n [disabled]=\"competencyForm.invalid || disableMultiCreate\" *ngIf=\"!disableCreate\" (click)=\"multiCreate(competencyForm, data)\">\n {{app_strings.create}}\n </button>\n </ng-container>\n <ng-container *ngIf=\"data?.columnInfo?.code === 'subtheme'\">\n <!-- <ng-container *ngIf=\"competencyForm?.get('compThemeFields')['controls'][0]['controls']?.competencySubTheme?.value?.length;else updateBtn\"> -->\n <button mat-raised-button color=\"primary\" type=\"button\" cdkFocusInitial\n [disabled]=\"competencyForm.invalid || disableMultiCreate\" *ngIf=\"!disableCreate\" (click)=\"multiCreateSubTheme(competencyForm, data)\">\n {{app_strings.update}}\n </button>\n <!-- </ng-container> -->\n \n <!-- <ng-template #updateBtn>\n <button mat-raised-button color=\"primary\" type=\"button\" cdkFocusInitial\n [disabled]=\"competencyForm.invalid || disableMultiCreate\" *ngIf=\"!disableCreate\" (click)=\"multiCreateSubTheme(competencyForm, data)\">\n {{app_strings.delete}}\n </button>\n </ng-template> -->\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"data?.mode === 'edit' && data.openMode !=='view'\">\n <button mat-raised-button color=\"primary\" type=\"button\" cdkFocusInitial\n (click)=\"updateTermData(competencyForm, data)\"\n [disabled]=\"competencyForm?.invalid || disableUpdate\"\n *ngIf=\"!disableCreate\">{{app_strings.update}}</button>\n </ng-container>\n </footer>\n </ng-container>\n </form>\n </ng-container>\n \n </div>\n \n \n <!-- Title of the popup -->\n <ng-template #modalTitle>\n <!-- <ng-container *ngIf=\"data?.mode === 'create' || data?.mode === 'multi-create'\">\n <div class=\"dialog-title\" mat-dialog-title>{{data.columnInfo.name === 'Theme' ? app_strings.addCompetency : app_strings.createNew}} {{data.columnInfo.name}}</div>\n </ng-container> -->\n <!-- {{data |json}} -->\n <ng-container *ngIf=\"data?.mode === 'create' || data?.mode === 'multi-create'\">\n <div class=\"dialog-title\" mat-dialog-title>{{getCreateName(data)}}</div>\n </ng-container>\n <!-- <ng-container *ngIf=\"data?.mode === 'view'\">\n <div class=\"dialog-title\" mat-dialog-title>View {{data.columnInfo.name}}</div>\n </ng-container> -->\n <ng-container *ngIf=\"data?.mode === 'edit'\">\n <div class=\"dialog-title\" mat-dialog-title>{{app_strings.edit}} {{data.columnInfo.name}}</div>\n </ng-container>\n </ng-template>\n</div>\n\n\n<mat-menu #cardMenu=\"matMenu\" class=\"menu-sec\">\n <ng-template matMenuContent let-rowData=\"data\" let-cardRef=\"cardRef\">\n <button (click)=\"deleteTheme()\"\n mat-menu-item name=\"channel-analytics-button\" class=\"ws-mat-primary-text\" i18n-aria-label\n aria-label=\"Analytics\">\n <mat-icon>delete</mat-icon>\n <span>Delete</span>\n </button>\n </ng-template>\n</mat-menu>", styles: [".gap-3{gap:1.25rem}.gap-4{gap:1.5rem}.row-divider{width:100%;border-top:1px solid rgba(0,0,0,.08);margin:1rem 0}.defaultForm{padding:16px;display:flex;gap:16px;flex-direction:column}.theme-actions{display:flex;justify-content:right;padding:1em 0;gap:16px;margin-top:30px;border-top:1px solid rgba(0,0,0,.0784313725)}.dialog .mat-dialog-title{padding:1em;margin-bottom:0;background:#00000014}.dialog .mat-form-field{padding:0;background:#fff;border-radius:2px}.dialog .mat-form-field ::ng-deep .mat-form-field-wrapper{padding-bottom:0}.dialog .mat-form-field ::ng-deep .mat-form-field-wrapper .mat-form-field-infix{padding:15px;margin-top:0;border-top:0}.dialog .mat-form-field ::ng-deep .mat-form-field-wrapper .mat-form-field-infix textarea{resize:none}.dialog .mat-form-field-disabled{background:#00000014}.dialog .actions{display:flex;flex-direction:row;justify-content:space-between;padding:0 1em 1em}.dialog .mat-error{padding:0 25px;margin-top:-10px}.dialogNew{padding:1rem}.dialogNew .mat-dialog-title{padding:1em 0;margin-bottom:0}.dialogNew .actions{display:flex;justify-content:right;padding:1em 0;gap:16px;margin-top:16px;border-top:1px solid rgba(0,0,0,.0784313725)}.dialogNew .mat-error{margin-top:-10px}.dialogNew .learning-section{padding:10px!important;border:1px solid rgba(0,0,0,.1803921569);border-radius:4px;margin-right:8px}.dialogNew .learning-section.active-btn{border:1px solid #1B4CA1!important}.learning-section.mat-radio-button .mat-radio-container .mat-radio-outer-circle{border-color:#1b4ca1!important}::ng-deep .competency-group .learning-section .mat-radio-inner-circle{background-color:#1b4ca1!important}::ng-deep .competency-group .learning-section .mat-radio-button.mat-accent .mat-radio-inner-circle{background-color:#1b4ca1!important}.dialog-title{align-items:center;display:flex}.flex{display:flex}.flex-col{display:flex;flex-direction:column}.mr-5{margin-right:1.5rem}.flex-1{flex:1 1}.margin-remove-bottom{margin-bottom:0}::ng-deep .custom-dialog-container{max-height:90vh}::ng-deep .custom-dialog-container .mat-dialog-container{padding:0;border-radius:0;background:#00000014}@media only screen and (max-width: 1024px){::ng-deep .cdk-overlay-pane{width:40%!important}}@media only screen and (max-width: 992px){::ng-deep .cdk-overlay-pane{width:45%!important}}@media only screen and (max-width: 1024px){.dialog{font-size:12px}.dialog .dialog-title{font-size:24px;height:1em}.dialog button{font-size:12px;line-height:3.5em}.dialog .mat-raised-button{padding:0 3em}}.flex-align{align-items:center;justify-content:flex-start}::ng-deep mat-form-field .mat-form-field-infix .mat-form-field-label,::ng-deep mat-form-field .mat-form-field-infix .mat-select-value{line-height:normal!important}ws-widget-btn-page-back-admin{margin-left:-270px}.max-wid{max-width:400px}::ng-deep .mat-form-field.mat-focused .mat-form-field-label{color:#333232!important}.margin-right-10{margin-right:10px!important}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}::ng-deep .mat-tab-header{margin:0 3rem}.heading{color:#222}.heading.mt-10{margin-top:2.5rem!important}.img-column{flex:100px 0 0}.input-column{flex:auto}.radio-toolbar input[type=radio]{opacity:0;position:fixed;width:0}.radio-toolbar{padding:10px 0}.radio-toolbar label{display:inline-block;padding:7px 21px;font-size:14px;background:#fff 0% 0% no-repeat padding-box;border:1px solid #5F5F5F;border-radius:4px;margin:0 10px 10px 0;color:#5f5f5f;cursor:pointer;transition:all .125s ease-in-out}.radio-toolbar input[type=radio]:checked+label{background:#0074b6 0% 0% no-repeat padding-box;border-radius:6px;border-color:#0074b6;color:#fff}.radio-toolbar input[type=radio]:focus+label{background:#0074b6 0% 0% no-repeat padding-box;border-radius:6px;border-color:#0074b6;color:#fff}.mar{margin-left:30px;min-width:175px}.radio-toolbar label:hover{background:none;border-color:#0074b6;color:#0074b6}::ng-deep .mat-form-field{width:100%}::ng-deep .mat-form-field.full-width{max-width:100%}::ng-deep .mat-form-field.no-pb .mat-form-field-wrapper{padding-bottom:0}.combined-field{width:100%}.w-full-imp{width:100%!important}::ng-deep .full-width-panel{width:100%!important;min-width:300px}::ng-deep .full-width-panel .mat-option{white-space:normal}.btn-success{background-color:#0075b7!important;border-radius:4px;width:240px;box-shadow:none;margin-right:16px}.btn-success.btn-responsive{width:100%}.btn-success:disabled,.btn-success[disabled]{opacity:.6}.btn-danger{height:30px;width:30px}.color-danger{font-size:30px;height:30px;width:30px;color:#e44}::ng-deep .mat-form-field-outline{min-height:40px;background:#fff;border-radius:4px}::ng-deep .mat-form-field-outline .mat-form-field-outline-start{border:1px solid rgba(112,112,112,.4117647059);border-radius:4px 0 0 4px;min-width:8px;border-right-style:none}::ng-deep .mat-form-field-outline .mat-form-field-outline-gap{border:1px solid currentColor;border-radius:82px;border-left-style:none;border-right-style:none}::ng-deep .mat-form-field-outline .mat-form-field-outline-end{border:1px solid rgba(112,112,112,.4117647059);border-left-style:none;border-radius:0 4px 4px 0}::ng-deep .mat-form-field-outline.mat-form-field-outline-thick{min-height:40px;background:#fff;border-radius:4px}::ng-deep .mat-form-field-outline.mat-form-field-outline-thick .mat-form-field-outline-start{border-radius:4px 0 0 4px;min-width:8px;border:1px solid currentColor;border-right-style:none}::ng-deep .mat-form-field-outline.mat-form-field-outline-thick .mat-form-field-outline-gap{border-width:1px;border:1px solid currentColor;border-radius:4px;border-left-style:none;border-right-style:none}::ng-deep .mat-form-field-outline.mat-form-field-outline-thick .mat-form-field-outline-end{border-width:1px;border-radius:0 4px 4px 0;border:1px solid currentColor;border-left-style:none}::ng-deep .mat-form-field-disabled .mat-form-field-outline{background:#ebebeb!important}::ng-deep .mat-form-field-infix{padding:0;margin:0;border:none}::ng-deep .mat-form-field-flex{min-height:40px;align-items:center}::ng-deep .mat-form-field-infix{padding:0;margin:8px 0 0;border:none}.form-label{color:#222;font-size:14px;margin-bottom:.5rem;font-weight:700;font-family:Lato}.form-input{font-size:14px;font-weight:400;font-family:Lato}input.mat-input-element{color:#5f5f5f}::ng-deep .mat-radio-group{padding-bottom:1.34375em}::ng-deep .mat-chip-list-wrapper{margin:0!important}::ng-deep .mat-chip{font-weight:400;background:#f1f9ff 0% 0% no-repeat padding-box!important;border-radius:12px!important;color:#0074b6!important}::ng-deep .mat-chip:hover{filter:brightness(90%)}::ng-deep .mat-chip .mat-chip-remove{opacity:1!important;color:#0074b6!important;border-radius:50%}::ng-deeptextarea .mat-input-element{padding:8px 0}::ng-deep .mat-checkbox-checked.mat-accent .mat-checkbox-background{background:#0074b6 0% 0% no-repeat padding-box!important;border-radius:4px}::ng-deep .mat-checkbox .mat-checkbox-frame{border-radius:4px!important}::ng-deep .mat-form-field-appearance-outline .mat-select-arrow-wrapper{transform:none!important}::ng-deep .mat-tab-label-container .mat-tab-list .mat-tab-labels .mat-tab-label{font-size:18px;color:#222}::ng-deep .mat-tab-label-container .mat-tab-list .mat-tab-labels .mat-tab-label-active .mat-tab-label-content{color:#0074b6}::ng-deep .mat-tab-label-container .mat-tab-list .mat-ink-bar{height:3px;background-color:#0074b6!important}.form-control{background:#fff 0% 0% no-repeat padding-box;border:1px solid rgba(112,112,112,.4117647059);border-radius:4px;display:block}.form-control::placeholder{color:#bebebe;font-size:14px}.form-control:focus{border:2px solid #0074b6;outline:none}.input-wrapper{flex:1;display:flex;flex-wrap:wrap;flex-direction:column}::ng-deep .mat-checkbox-inner-container{height:23px!important;width:23px!important}.flex-expand{flex:1!important}.heading{font-weight:600;font-family:Montserrat;font-size:1.25rem;display:block;padding:0px 0px 1rem 0}::ng-deep .multiselect-dropdown{margin-bottom:20px}::ng-deep .multiselect-dropdown .dropdown-btn{border:1px solid #ccc!important;width:92%!important}::ng-deep .multiselect-dropdown .dropdown-list .filter-textbox input{width:90%!important}.organisation{color:#212529;font-weight:700;font-size:14px;font-family:Lato}.org-name{height:50px;border:1px solid #e2e2e2;border-radius:5px;background-color:#ebebeb;font-size:14px}.add-designation{height:25px;color:#1b4ca1!important;font-weight:500;font-size:14px;font-family:Lato;cursor:pointer}.add-designation .add-icon{color:#1b4ca1!important;height:24px;width:24px;font-size:24px}.info-icon{width:14px;height:14px;font-size:14px;color:#a7a9ae!important}.themDesignation{max-height:90vh;overflow-y:auto}.designation-panel{margin-bottom:0!important;background-color:#eef1f7!important;border:1px solid #DBE0E9;box-shadow:none!important}.designation-panel .deletDesignation{font-size:18px;width:14px;height:14px;color:#5f6063}.designation-panel .saveDesignaton{color:#fff;height:40px;width:80px;background-color:#1b4ca1;border:1px solid #1B4CA1;font-weight:700;font-size:14px;font-family:Lato}.designation-footer{padding:1rem;border-top:1px solid #efefef}.cancel{width:93px;height:40px;font-weight:700;font-size:14px;font-family:Lato;border:1px solid #eee;color:#363636}.addBtn{color:#fff!important;height:40px;width:80px;background-color:#1b4ca1!important;border:1px solid #1B4CA1;font-weight:700;font-size:14px;font-family:Lato}::ng-deep .mat-option.mat-selected:not(.mat-option-disabled){color:#000000de!important}::ng-deep .theme-igot.day-mode .mat-pseudo-checkbox-checked{background:#0074b6!important}::ng-deep .mat-select-panel .mat-option{line-height:1!important}.comp-theme-fields{background:#eef1f7!important;border:1px solid #DBE0E9!important}.create-accordion-btn{color:#1b4ca1!important;padding:0!important}.create-accordion-btn mat-icon{color:#1b4ca1}.ref-id{font-size:10px}::ng-deep .mat-select-panel{min-width:103%!important;margin-left:32px}.loader-bg{background:#ffffffcf;inset:0;transform:translate(-50% -50%);pointer-events:unset;z-index:999999;display:flex;align-items:center;justify-content:center}::ng-deep .mat-chip.mat-standard-chip.mat-chip-disabled{opacity:.8!important;cursor:none;filter:brightness(90%)}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i6.MatOptgroup, selector: "mat-optgroup", inputs: ["disabled"], exportAs: ["matOptgroup"] }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i8.MatLegacyChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disableRipple", "tabIndex", "role", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["matChip"] }, { kind: "directive", type: i8.MatLegacyChipRemove, selector: "[matChipRemove]" }, { kind: "directive", type: i9.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i10.MatAccordion, selector: "mat-accordion", inputs: ["multi", "hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i10.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i10.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { kind: "directive", type: i10.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "component", type: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i12.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i13.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i13.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "component", type: i14.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i14.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i14.MatMenuContent, selector: "ng-template[matMenuContent]" }, { kind: "directive", type: i14.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "component", type: i15.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i16.MatRadioGroup, selector: "mat-radio-group", exportAs: ["matRadioGroup"] }, { kind: "component", type: i16.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { kind: "component", type: i17.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "panelWidth", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "directive", type: i17.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i3.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i3.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "component", type: i18.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disabled", "disableRipple", "tabIndex", "role", "id", "aria-label", "aria-description", "value", "removable", "highlighted"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "component", type: i18.MatChipListbox, selector: "mat-chip-listbox", inputs: ["tabIndex", "multiple", "aria-orientation", "selectable", "compareWith", "required", "hideSingleSelectionIndicator", "value"], outputs: ["change"] }, { kind: "directive", type: i18.MatChipRemove, selector: "[matChipRemove]" }] }); }
815
816
  }
816
817
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CreateTermFromFrameworkComponent, decorators: [{
817
818
  type: Component,
@@ -820,4 +821,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
820
821
  type: Inject,
821
822
  args: [MAT_DIALOG_DATA]
822
823
  }] }, { type: i1.MatLegacyDialog }, { type: i2.FrameworkService }, { type: i3.UntypedFormBuilder }, { type: i4.MatLegacySnackBar }]; } });
823
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXRlcm0tZnJvbS1mcmFtZXdvcmsuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RyZWUtaGllcmFyY2h5L3NyYy9saWIvY29tcG9uZW50cy9jcmVhdGUtdGVybS1mcm9tLWZyYW1ld29yay9jcmVhdGUtdGVybS1mcm9tLWZyYW1ld29yay5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvdHJlZS1oaWVyYXJjaHkvc3JjL2xpYi9jb21wb25lbnRzL2NyZWF0ZS10ZXJtLWZyb20tZnJhbWV3b3JrL2NyZWF0ZS10ZXJtLWZyb20tZnJhbWV3b3JrLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sRUFBOEUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEgsT0FBTyxFQUFFLHNCQUFzQixJQUFJLGVBQWUsRUFBb0UsTUFBTSxpQ0FBaUMsQ0FBQztBQUU5SixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFHOUMsT0FBTyxLQUFLLFlBQVksTUFBTSw4QkFBOEIsQ0FBQztBQUc3RCxPQUFPLENBQUMsTUFBTSxRQUFRLENBQUE7QUFFdEIsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRaEcsTUFBTSxPQUFPLGdDQUFnQztJQWdDM0MsWUFDUyxTQUF5RCxFQUNoQyxJQUFTLEVBQ2pDLE1BQWlCLEVBQ2xCLGdCQUFrQyxFQUNqQyxFQUFzQixFQUN0QixTQUFzQjtRQUx2QixjQUFTLEdBQVQsU0FBUyxDQUFnRDtRQUNoQyxTQUFJLEdBQUosSUFBSSxDQUFLO1FBQ2pDLFdBQU0sR0FBTixNQUFN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QUMsaUJBQWlCLENBQXFCLENBQUM7SUFDeEUsQ0FBQzsrR0FwOEJVLGdDQUFnQyxvREFrQ2pDLGVBQWU7bUdBbENkLGdDQUFnQyxzRUNwQjdDLCsxaUJBbU9XOzs0RkQvTUUsZ0NBQWdDO2tCQUw1QyxTQUFTOytCQUNFLGdDQUFnQzs7MEJBc0N2QyxNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVbnR5cGVkRm9ybUFycmF5LCBVbnR5cGVkRm9ybUJ1aWxkZXIsIFVudHlwZWRGb3JtQ29udHJvbCwgVW50eXBlZEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1BVF9MRUdBQ1lfRElBTE9HX0RBVEEgYXMgTUFUX0RJQUxPR19EQVRBLCBNYXRMZWdhY3lEaWFsb2cgYXMgTWF0RGlhbG9nLCBNYXRMZWdhY3lEaWFsb2dSZWYgYXMgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGVnYWN5LWRpYWxvZyc7XG5pbXBvcnQgeyBNYXRMZWdhY3lTbmFja0JhciBhcyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xlZ2FjeS1zbmFjay1iYXInO1xuaW1wb3J0IHsgbGFiZWxzIH0gZnJvbSAnLi4vLi4vbGFiZWxzL3N0cmluZ3MnO1xuaW1wb3J0IHsgRnJhbWV3b3JrU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZyYW1ld29yay5zZXJ2aWNlJztcbmltcG9ydCB7IE5TRnJhbWV3b3JrIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2ZyYW1ld29yay5tb2RlbCc7XG5pbXBvcnQgKiBhcyBhcHBDb25zdGFudHMgZnJvbSAnLi4vLi4vY29uc3RhbnRzL2FwcC1jb25zdGFudCc7XG5pbXBvcnQgeyBDYXJkIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3ZhcmlhYmxlLXR5cGUubW9kZWwnO1xuLyogdHNsaW50OmRpc2FibGUgKi9cbmltcG9ydCBfIGZyb20gJ2xvZGFzaCdcbi8vIGltcG9ydCB7IHJlc29sdmUgfSBmcm9tICd1cmwnO1xuaW1wb3J0IHsgQ29uZm9yYW10aW9uUG9wdXBDb21wb25lbnQgfSBmcm9tICcuLi9jb25mb3JhbXRpb24tcG9wdXAvY29uZm9yYW10aW9uLXBvcHVwLmNvbXBvbmVudCc7XG4vKiB0c2xpbnQ6ZW5hYmxlICovXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1jcmVhdGUtdGVybS1mcm9tLWZyYW1ld29yaycsXG4gIHRlbXBsYXRlVXJsOiAnLi9jcmVhdGUtdGVybS1mcm9tLWZyYW1ld29yay5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NyZWF0ZS10ZXJtLWZyb20tZnJhbWV3b3JrLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQ3JlYXRlVGVybUZyb21GcmFtZXdvcmtDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIGFwcF9zdHJpbmdzID0gbGFiZWxzO1xuICBlbnZpcm9ubWVudDogYW55XG5cbiAgc2VsZWN0ZWRUZXJtOiBDYXJkID0ge307XG4gIHNlbGVjdGVkVGVybUFycmF5IDogYW55ID0gW11cbiAga2NtQ29uZmlnRGF0YTogYW55XG4gIHNlbGVjdGVkVGhlbWVEYXRhOiBhbnlcblxuXG4gIGlzVGVybUV4aXN0OiBib29sZWFuID0gZmFsc2U7XG4gIGRpc2FibGVDcmVhdGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZGlzYWJsZU11bHRpQ3JlYXRlOiBib29sZWFuID0gZmFsc2U7XG4gIGRpc2FibGVVcGRhdGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuXG4gIGNvbXBldGVuY3lGb3JtITogVW50eXBlZEZvcm1Hcm91cFxuXG5cbiAga2NtTGlzdCA6IGFueT0gbmV3IE1hcDxzdHJpbmcsIE5TRnJhbWV3b3JrLklDb2x1bW5WaWV3PigpO1xuICAvLyBjYXRlZ29yaWVzSGFzaDogYW55XG4gIGNvbXBldGVuY3lBcmVhOiBhbnlcbiAgc2VsZWN0ZWRDYXJkQ29tcFRoZW1lRGF0YTogYW55XG5cbiAgYWxsQ29tcGV0ZW5jeTphbnlbXT1bXVxuICBzZWxldGVkQ29tcGV0ZW5jeUFyZWE6IGFueVxuICBhbGxDb21wZXRlbmN5VGhlbWU6YW55W109W11cbiAgZmlsdGVyZWRhbGxDb21wZXRlbmN5VGhlbWU6YW55W109W11cbiAgYWxsQ29tcGV0ZW5jeVN1YnRoZW1lOmFueVtdPVtdXG4gIGZpbHRlcmVkYWxsQ29tcGV0ZW5jeVN1YlRoZW1lOmFueVtdPVtdXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPENyZWF0ZVRlcm1Gcm9tRnJhbWV3b3JrQ29tcG9uZW50PixcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IGFueSxcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLFxuICAgIHB1YmxpYyBmcmFtZVdvcmtTZXJ2aWNlOiBGcmFtZXdvcmtTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmI6IFVudHlwZWRGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIF9zbmFja0JhcjogTWF0U25hY2tCYXIsXG4gICkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5lbnZpcm9ubWVudCA9IHRoaXMuZnJhbWVXb3JrU2VydmljZS5nZXRFbnZpcm9tZW50KClcbiAgICB0aGlzLmdldENvbXB0ZW5jeURhdGEoKVxuICAgIHRoaXMua2NtQ29uZmlnRGF0YSA9IHRoaXMuZnJhbWVXb3JrU2VydmljZS5nZXRDb25maWdCeUZyYW1lV29ya0lkKHRoaXMuZW52aXJvbm1lbnQua2NtRnJhbWV3b3JrTmFtZSlcbiAgICB0aGlzLmNvbXBldGVuY3lGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBjb21wQXJlYTpbJycsVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICBjb21wVGhlbWVGaWVsZHM6IHRoaXMuZmIuYXJyYXkoW3RoaXMuY3JlYXRlQ29tcFRoZW1lRmllbGRzKCldKVxuICAgIH0pXG5cbiAgfVxuXG4gIGdldENvbXB0ZW5jeURhdGEoKXtcbiAgICB0aGlzLmZyYW1lV29ya1NlcnZpY2UuZ2V0RnJhbWV3b3JrUmVhZCh0aGlzLmVudmlyb25tZW50LmtjbUZyYW1ld29ya05hbWUpLnN1YnNjcmliZSgoZGF0YSk9PntcbiAgICAgaWYoZGF0YS5jYXRlZ29yaWVzKSB7XG4gICAgICB0aGlzLmZvcm1hdGVEYXRhKGRhdGEsIHRoaXMuZW52aXJvbm1lbnQua2NtRnJhbWV3b3JrTmFtZSlcbiAgICAgIHRoaXMuc2VsZWN0ZWRDYXJkQ29tcFRoZW1lRGF0YSA9ICAnJ1xuICAgICAgLy8gdG8gZG86IGNoYW5nZSBnZXR0aW5nIHNlbGVjdGVkUGFyZW50VGVybXMgdG8gZHluYW1pY1xuICAgICAgaWYodGhpcy5kYXRhICYmIHRoaXMuZGF0YS5zZWxlY3RlZFBhcmVudFRlcm1zKSB7XG4gICAgICAgIHRoaXMuZGF0YS5zZWxlY3RlZFBhcmVudFRlcm1zLmZvckVhY2goKGVsZTogYW55KSA9PiB7XG4gICAgICAgICAgaWYoZWxlLmNhdGVnb3J5ID09PSBcImNvbXBldGVuY3lcIikge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENhcmRDb21wVGhlbWVEYXRhID0gZWxlXG4gICAgICAgICAgICBsZXQgb3B0aW9uID0gdGhpcy5zZWxlY3RlZENhcmRDb21wVGhlbWVEYXRhLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLmNvbXBldGVuY3lBcmVhXG4gICAgICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQXJlYShvcHRpb24pXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIFxuICAgICB9XG4gICAgfSwoKF9lcnI6IGFueSkgPT4ge1xuICAgICAgdGhpcy5fc25hY2tCYXIub3BlbihgS0NNIEZyYW1ld29yayByZWFkIGZhaWxlZC5gKVxuICAgIH0pKVxuICB9XG5cbiAgZm9ybWF0ZURhdGEocmVzcG9uc2U6IGFueSwgZnJhbWV3b3JrSWQ6IHN0cmluZykge1xuICAgIChyZXNwb25zZS5jYXRlZ29yaWVzKS5mb3JFYWNoKChhOmFueSkgPT4ge1xuICAgICAgaWYoYS5jb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5rY21MaXN0LnNldChhLmNvZGUsIHtcbiAgICAgICAgICBjb2RlOiBhLmNvZGUsXG4gICAgICAgICAgaWRlbnRpZmllcjogYS5pZGVudGlmaWVyLFxuICAgICAgICAgIGluZGV4OiBhLmluZGV4LFxuICAgICAgICAgIG5hbWU6IGEubmFtZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogYS5kZXNjcmlwdGlvbixcbiAgICAgICAgICBjb25maWc6IHRoaXMuZnJhbWVXb3JrU2VydmljZS5nZXRDb25maWdPZkNhdGVnb3J5Q29uZmlnQnlGcmFtZVdvcmtJZChhLmNvZGUsIGZyYW1ld29ya0lkKSxcbiAgICAgICAgICAvLyBjaGlsZHJlbjogKFsuLi5hLnRlcm1zLCAuLi5sb2NhbERhdGFdIHx8IFtdKS5tYXAoYyA9PiB7XG4gICAgICAgICAgY2hpbGRyZW46IChhLnRlcm1zIHx8IFtdKS5tYXAoKGM6YW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhc3NvY2lhdGlvbnMgPSBjLmFzc29jaWF0aW9ucyB8fCBbXVxuICAgICAgICAgICAgaWYgKGFzc29jaWF0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oYywgeyBjaGlsZHJlbjogYXNzb2NpYXRpb25zIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY1xuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5rY21MaXN0LmZvckVhY2goKGE6IGFueSkgPT4ge1xuICAgICAgaWYoYS5jb2RlID09PSBfLmdldCh0aGlzLmtjbUNvbmZpZ0RhdGEsICdjb25maWdbMF0uY2F0ZWdvcnknKSl7XG4gICAgICAgIHRoaXMuY29tcGV0ZW5jeUFyZWEgPSBhXG4gICAgICB9XG4gICAgfSlcbiAgICBcblxuICB9XG5cblxuICBjcmVhdGVDb21wVGhlbWVGaWVsZHMoKTpVbnR5cGVkRm9ybUdyb3VwIHtcbiAgICByZXR1cm4gdGhpcy5mYi5ncm91cCh7XG4gICAgICBjb21wZXRlbmN5VGhlbWU6WycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgY29tcGV0ZW5jeVN1YlRoZW1lOlsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXVxuICAgIH0pXG4gIH1cblxuXG4gIGdldENyZWF0ZU5hbWUoZGF0YTogYW55KSB7XG4gICAgICBsZXQgcG9wVXBDYXRlZ29yeSA9IGRhdGEuY2FyZENvbEluZm8gPyBkYXRhLmNhcmRDb2xJbmZvLm5hbWUgOiBkYXRhLmNvbHVtbkluZm8ubmFtZVxuICAgICAgc3dpdGNoKHBvcFVwQ2F0ZWdvcnkpe1xuICAgICAgICBjYXNlICdEZXNpZ25hdGlvbic6XG4gICAgICAgIHJldHVybiBgQ3JlYXRlIENvbXBldGVuY3kgTWFwcGluZ2A7XG4gICAgICAgIGNhc2UgJ1N1YiBUaGVtZSc6XG4gICAgICAgICAgaWYoZGF0YS5vcGVuTW9kZSA9PT0gJ3ZpZXcnKSB7XG4gICAgICAgICAgICByZXR1cm4gYFZpZXcgQ29tcGV0ZW5jeSAke3BvcFVwQ2F0ZWdvcnl9YFxuICAgICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGBBZGQgQ29tcGV0ZW5jeSAke3BvcFVwQ2F0ZWdvcnl9YFxuICAgICAgICBjYXNlICdDb21wZXRlbmN5JzpcbiAgICAgICAgICBpZihkYXRhLm9wZW5Nb2RlID09PSAnZWRpdCcpIHtcbiAgICAgICAgICAgIHJldHVybiBgRWRpdCBDb21wZXRlbmN5IFRoZW1lYFxuICAgICAgICAgIH0gZWxzZSBpZihkYXRhLm9wZW5Nb2RlID09PSAndmlldycpIHtcbiAgICAgICAgICAgIHJldHVybiBgVmlldyBDb21wZXRlbmN5IFRoZW1lYFxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYENyZWF0ZSBDb21wZXRlbmN5IE1hcHBpbmdgXG4gICAgICAgICAgZGVmYXVsdDogcmV0dXJuICcnXG4gICAgICB9XG4gIH1cblxuICBjbGVhclNlbGVjdGVkVGhlbWVzKG9wdGlvbjphbnkpe1xuICAgIGlmKHRoaXMuaXNUaGVtZVNlbGVjdGVkKSB7XG4gICAgICB0aGlzLm9wZW5Db25mb3JhbXRpb25Qb3B1cChvcHRpb24pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub25TZWxlY3Rpb25BcmVhKG9wdGlvbilcbiAgICB9XG4gIH1cblxuICBnZXQgaXNUaGVtZVNlbGVjdGVkICgpIHtcbiAgICBsZXQgaGFzVmFsdWUgPSBmYWxzZVxuICAgIGlmICh0aGlzLmNvbXBldGVuY3lGb3JtKSB7XG4gICAgICBjb25zdCBjb21wVGhlbWVGaWVsZHMgPSB0aGlzLmNvbXBldGVuY3lGb3JtLmdldCgnY29tcFRoZW1lRmllbGRzJykgYXMgVW50eXBlZEZvcm1BcnJheTtcbiAgICAgIGlmIChjb21wVGhlbWVGaWVsZHMpIHtcbiAgICAgICAgY29tcFRoZW1lRmllbGRzLmNvbnRyb2xzLmZvckVhY2goKGVsZW1lbnQ6YW55KSA9PiB7XG4gICAgICAgICAgaWYoZWxlbWVudC5nZXQoJ2NvbXBldGVuY3lUaGVtZScpPy52YWx1ZSB8fCBlbGVtZW50LmdldCgnY29tcGV0ZW5jeVN1YlRoZW1lJyk/LnZhbHVlKSB7XG4gICAgICAgICAgICBoYXNWYWx1ZSA9IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaGFzVmFsdWVcbiAgfVxuXG4gIG9wZW5Db25mb3JhbXRpb25Qb3B1cChvcHRpb246YW55KSB7XG4gICAgY29uc3QgZGlhbG9nRGF0YSA9IHtcbiAgICAgIGRpYWxvZ1R5cGU6ICd3YXJuaW5nJyxcbiAgICAgIGRlc2NyaXB0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgaGVhZGVyOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGFsdGVyIHRoZSBjb21wZXRlbmN5IGFyZWE/JyxcbiAgICAgICAgICBoZWFkZXJDbGFzczogJ2ZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtYmx1ZSB0ZXh0Qm9sZCcsXG4gICAgICAgICAgbWVzc2FnZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbXNnQ2xhc3M6ICcnLFxuICAgICAgICAgICAgICBtc2c6IGBUaGlzIGFjdGlvbiB3aWxsIHJlc3VsdCBpbiB0aGUgbG9zcyBvZiB5b3VyIGN1cnJlbnRseSBhZGRlZCBkYXRhYCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBmb290ZXJDbGFzczogJ2l0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlcicsXG4gICAgICBidXR0b25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBidG5UZXh0OiAnQ2FuY2VsJyxcbiAgICAgICAgICBidG5DbGFzczogJ2J0bi1vdXRsaW5lJyxcbiAgICAgICAgICByZXNwb25zZTogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBidG5UZXh0OiAnQ29uZmlybScsXG4gICAgICAgICAgYnRuQ2xhc3M6ICdidG4tZnVsbC1zdWNjZXNzJyxcbiAgICAgICAgICByZXNwb25zZTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfVxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQ29uZm9yYW10aW9uUG9wdXBDb21wb25lbnQsIHtcbiAgICAgIGRhdGE6IGRpYWxvZ0RhdGEsXG4gICAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgICAgd2lkdGg6ICc2MDBweCcsXG4gICAgICBtYXhXaWR0aDogJzgwdncnLFxuICAgICAgbWF4SGVpZ2h0OiAnOTB2aCcsXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXG4gICAgfSlcbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG4gICAgICBpZiAocmVzKSB7XG4gICAgICAgIHRoaXMub25TZWxlY3Rpb25BcmVhKG9wdGlvbilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNvbXBBcmVhQ29udHJvbCA9IHRoaXMuY29tcGV0ZW5jeUZvcm0uZ2V0KCdjb21wQXJlYScpO1xuICAgICAgICBpZiAoY29tcEFyZWFDb250cm9sKSB7XG4gICAgICAgICAgY29tcEFyZWFDb250cm9sLnNldFZhbHVlKHRoaXMuc2VsZXRlZENvbXBldGVuY3lBcmVhKTtcbiAgICAgICAgICBjb21wQXJlYUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIG9uU2VsZWN0aW9uQXJlYShvcHRpb246YW55KXtcbiAgICB0aGlzLmNvbXBldGVuY3lGb3JtLnJlc2V0KClcbiAgICB3aGlsZSh0aGlzLmNvbXBUaGVtZUZpZWxkcy5sZW5ndGggIT09IDApIHtcbiAgICAgIHRoaXMuY29tcFRoZW1lRmllbGRzLnJlbW92ZUF0KDApO1xuICAgIH1cbiAgICB0aGlzLmNvbXBUaGVtZUZpZWxkcy5wdXNoKHRoaXMuY3JlYXRlQ29tcFRoZW1lRmllbGRzKCkpO1xuICAgIGlmKCd0aGVtZScgPT09IHRoaXMua2NtQ29uZmlnRGF0YS5jb25maWdbMV0uY2F0ZWdvcnkpe1xuICAgICAgdGhpcy5zZWxldGVkQ29tcGV0ZW5jeUFyZWEgPSBvcHRpb25cbiAgICAgIGNvbnN0IGNvbXBBcmVhQ29udHJvbCA9IHRoaXMuY29tcGV0ZW5jeUZvcm0uZ2V0KCdjb21wQXJlYScpO1xuICAgICAgaWYgKGNvbXBBcmVhQ29udHJvbCkge1xuICAgICAgICBjb21wQXJlYUNvbnRyb2wucGF0Y2hWYWx1ZShvcHRpb24pO1xuICAgICAgICBjb21wQXJlYUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5maWx0ZXJlZGFsbENvbXBldGVuY3lUaGVtZSA9IFtdXG4gICAgICB0aGlzLmFsbENvbXBldGVuY3lUaGVtZSA9IFtdXG4gICAgICBpZihvcHRpb24gJiYgIG9wdGlvbi5jaGlsZHJlbiAmJiAgb3B0aW9uLmNoaWxkcmVuLmxlbmd0aCl7XG4gICAgICAgIGxldCB0aGVtZVZhbHVlID0gdGhpcy5rY21MaXN0LmdldCh0aGlzLmtjbUNvbmZpZ0RhdGEuY29uZmlnWzFdLmNhdGVnb3J5KVxuICAgICAgICBvcHRpb24uY2hpbGRyZW4uZm9yRWFjaCgoZWxlOiBhbnkpID0+IHtcbiAgICAgICAgICBpZihlbGUuY2F0ZWdvcnkgPT09ICd0aGVtZScgKSB7XG4gICAgICAgICAgICAgIGxldCByZXN1bHQgPSB0aGVtZVZhbHVlLmNoaWxkcmVuLmZpbmRJbmRleCgodGhlbWVEYXRhIDphbnkgKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYoZWxlLnJlZklkID09PSB0aGVtZURhdGEucmVmSWQpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0aGVtZURhdGEuY2hpbGRyZW4gJiYgdGhlbWVEYXRhLmNoaWxkcmVuLmxlbmd0aFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgaWYocmVzdWx0ID49IDApe1xuICAgICAgICAgICAgICAgIHRoaXMuYWxsQ29tcGV0ZW5jeVRoZW1lLnB1c2goZWxlKVxuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRhbGxDb21wZXRlbmN5VGhlbWUucHVzaChlbGUpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZih0aGlzLmNvbXBldGVuY3lBcmVhICYmIHRoaXMuY29tcGV0ZW5jeUFyZWEuY2hpbGRyZW4pIHtcbiAgICAgICAgICB0aGlzLmNvbXBldGVuY3lBcmVhLmNoaWxkcmVuLmZvckVhY2goKGVsZW1lbnQ6YW55KSA9PiB7XG4gICAgICAgICAgICBpZihlbGVtZW50LmNvZGUgPT09IG9wdGlvbi5jb2RlKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZXRlZENvbXBldGVuY3lBcmVhID0gb3B0aW9uXG4gICAgICAgICAgICAgIGlmKGVsZW1lbnQuY2hpbGRyZW4gJiYgZWxlbWVudC5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LmNoaWxkcmVuLmZvckVhY2goKGVsZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZihlbGUuY2F0ZWdvcnkgPT09ICd0aGVtZScpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGxDb21wZXRlbmN5VGhlbWUucHVzaChlbGUpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRhbGxDb21wZXRlbmN5VGhlbWUucHVzaChlbGUpXG4gICAgICAgICAgICAgICAgICAgIC8vIHRvIGRvOiAgdG8gYmUgY2hlY2sgYmFzZWQgb24gcmVmZiBpZFxuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLnNlbGVjdGVkQ2FyZENvbXBUaGVtZURhdGEucmVmSWQudG9Mb3dlckNhc2UoKSA9PT0gZWxlLnJlZklkLnRvTG93ZXJDYXNlKCkpe1xuICAgICAgICAgICAgICAgICAgICAgIGxldCBmb3JtQXJyYXk6YW55ID0gdGhpcy5jb21wZXRlbmN5Rm9ybS5nZXQoJ2NvbXBUaGVtZUZpZWxkcycpIGFzIFVudHlwZWRGb3JtQXJyYXk7XG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUFycmF5LmF0KDApLmdldCgnY29tcGV0ZW5jeVRoZW1lJykucGF0Y2hWYWx1ZShlbGUpXG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUFycmF5LmF0KDApLmdldCgnY29tcGV0ZW5jeVRoZW1lJykudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tcEFyZWFDb250cm9sID0gdGhpcy5jb21wZXRlbmN5Rm9ybS5nZXQoJ2NvbXBBcmVhJyk7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBBcmVhQ29udHJvbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcEFyZWFDb250cm9sLnBhdGNoVmFsdWUob3B0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBBcmVhQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgfVxuICB9XG5cbiAgYWRkQ29tcGV0ZW5jeVRoZW1lKCl7XG4gICAgaWYgKHRoaXMuZGF0YS5tb2RlID09PSAnbXVsdGktY3JlYXRlJykge1xuICAgICAgdGhpcy5jb21wVGhlbWVGaWVsZHMuaW5zZXJ0KDAsIHRoaXMuY3JlYXRlQ29tcFRoZW1lRmllbGRzKCkpO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZUNvbXBGaWVsZHMoaW5kZXg6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmRhdGEubW9kZSA9PT0gJ211bHRpLWNyZWF0ZScpIHtcbiAgICAgIHRoaXMuY29tcFRoZW1lRmllbGRzLnJlbW92ZUF0KGluZGV4KTtcbiAgICB9XG4gIH1cblxuICBPblRoZW1lU2VsZWN0aW9uKGV2ZW50OiBhbnksIF9pbmRleFZhbHVlOiBhbnksIG9wdGlvbkRhdGE6YW55KSB7XG4gICAgLy8gaWYgKGV2ZW50LmlzVXNlcklucHV0IHx8IHRoaXMuZGF0YS5vcGVuTW9kZSA9PT0gJ3ZpZXcnKSB7ICAgXG4gICAgY29uc3Qgc2VsZWN0ZWRUaGVtZSA9IGV2ZW50LnNvdXJjZS52YWx1ZVxuICAgIHRoaXMua2NtTGlzdC5mb3JFYWNoKChlbGU6YW55KSA9PiB7XG4gICAgICBpZihzZWxlY3RlZFRoZW1lLmNhdGVnb3J5ID09PSBlbGUuY29kZSkge1xuICAgICAgICBpZihlbGUuY2hpbGRyZW4gJiYgZWxlLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgIGVsZS5jaGlsZHJlbi5mb3JFYWNoKCh0aGVtZUNoaWxkOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmKHRoZW1lQ2hpbGQuaWRlbnRpZmllciA9PT0gc2VsZWN0ZWRUaGVtZS5pZGVudGlmaWVyKSB7XG4gICAgICAgICAgICAgIGlmKHRoZW1lQ2hpbGQuY2hpbGRyZW4gJiYgdGhlbWVDaGlsZC5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25EYXRhWydjaGlsZHJlbiddID0gdGhlbWVDaGlsZC5jaGlsZHJlblxuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRhbGxDb21wZXRlbmN5U3ViVGhlbWUgPSB0aGVtZUNoaWxkLmNoaWxkcmVuIFxuICAgICAgICAgICAgICAgICAvLyB0byBkbzogIHRvIGJlIGNoZWNrIGJhc2VkIG9uIHJlZmYgaWRcbiAgICAgICAgICAgICAgICAgbGV0IG1hdGNoZWREYXRhID0gW11cbiAgICAgICAgICAgICAgICAgaWYodGhpcy5kYXRhLmNoaWxkcmVuRGF0YSAmJiB0aGlzLmRhdGEuY2hpbGRyZW5EYXRhLmNhdGVnb3J5ID09PSBcInN1YnRoZW1lXCIpIHtcbiAgICAgICAgICAgICAgICAgIG1hdGNoZWREYXRhID0gXy5pbnRlcnNlY3Rpb25CeSh0aGVtZUNoaWxkLmNoaWxkcmVuLFt0aGlzLmRhdGEuY2hpbGRyZW5EYXRhXSwgJ3JlZklkJyk7XG4gICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBtYXRjaGVkRGF0YSA9IF8uaW50ZXJzZWN0aW9uQnkodGhlbWVDaGlsZC5jaGlsZHJlbix0aGlzLnNlbGVjdGVkQ2FyZENvbXBUaGVtZURhdGEuY2hpbGRyZW4sICdyZWZJZCcpO1xuICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBsZXQgZm9ybUFycmF5ID0gdGhpcy5jb21wZXRlbmN5Rm9ybS5nZXQoJ2NvbXBUaGVtZUZpZWxkcycpIGFzIFVudHlwZWRGb3JtQXJyYXk7XG4gICAgICAgICAgICAgICAgICBjb25zdCBjb21wZXRlbmN5U3ViVGhlbWVDb250cm9sID0gZm9ybUFycmF5LmF0KF9pbmRleFZhbHVlKS5nZXQoJ2NvbXBldGVuY3lTdWJUaGVtZScpO1xuICAgICAgICAgICAgICAgICAgaWYgKGNvbXBldGVuY3lTdWJUaGVtZUNvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGV0ZW5jeVN1YlRoZW1lQ29udHJvbC5wYXRjaFZhbHVlKG1hdGNoZWREYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgY29tcGV0ZW5jeVN1YlRoZW1lQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAvLyB9XG4gIH1cblxuICBvblRlcm1SZW1vdmUodGVybURhdGE6IGFueSwgaW5kZXhWYWx1ZTogbnVtYmVyKSB7XG4gICAgbGV0IGZvcm1BcnJheSA9IHRoaXMuY29tcGV0ZW5jeUZvcm0uZ2V0KCdjb21wVGhlbWVGaWVsZHMnKSBhcyBVbnR5cGVkRm9ybUFycmF5O1xuICAgIGNvbnN0IGNvbXBUaGVtZUNvbnRyb2wgPSBmb3JtQXJyYXkuYXQoaW5kZXhWYWx1ZSkuZ2V0KCdjb21wZXRlbmN5U3ViVGhlbWUnKSBhcyBVbnR5cGVkRm9ybUNvbnRyb2wgfCBudWxsXG4gICAgaWYgKGNvbXBUaGVtZUNvbnRyb2wpIHtcbiAgICAgIGNvbnN0IHRoZW1lcyA9IGNvbXBUaGVtZUNvbnRyb2wudmFsdWVcbiAgICAgIGlmICh0aGVtZXMpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGVtZXMuaW5kZXhPZih0ZXJtRGF0YSlcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICB0aGVtZXMuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICAgIGNvbXBUaGVtZUNvbnRyb2wuc2V0VmFsdWUodGhlbWVzKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIFxuICB9XG5cbiAgT25TdWJUaGVtZVNlbGVjdGlvbihfZXZlbnQ6IGFueSwgX2luZGV4VmFsdWU6IG51bWJlciwgX29wdGlvbjogYW55KXtcbiAgICAvLyBsZXQgZm9ybUFycmF5ID0gdGhpcy5jb21wZXRlbmN5Rm9ybS5nZXQoJ2NvbXBUaGVtZUZpZWxkcycpIGFzIFVudHlwZWRGb3JtQXJyYXk7XG4gICAgLy8gY29uc3QgY29tcFRoZW1lQ29udHJvbCA9IGZvcm1BcnJheS5hdChpbmRleFZhbHVlKS5nZXQoJ2NvbXBldGVuY3lTdWJUaGVtZScpIGFzIFVudHlwZWRGb3JtQ29udHJvbCB8IG51bGxcbiAgICBcbiAgfVxuXG4gIC8vIGFkZCBmb3JtXG4gIGFzeW5jIG11bHRpQ3JlYXRlKGZvcm06IGFueSwgX2RhdGE6IGFueSkge1xuICAgIHRoaXMuZGlzYWJsZU11bHRpQ3JlYXRlID0gdHJ1ZVxuICAgIC8vIGxldCBjb3VudGVyVGhlbWUgPSAwXG4gICAgbGV0IGNvdW50ZXJTdWJUaGVtZSA9IDBcbiAgICBsZXQgcGFyZW50Q2F0ZWdvcnkgPSB7fVxuICAgIGxldCBjcmVhdGVkVGVybXM6YW55ID0gW11cbiAgICBsZXQgY3JlYXRlZFN1YlRoZW1lID0gW11cbiAgICBpZihmb3JtLnZhbGlkKSB7XG4gICAgICBjb25zdCB0aGVtZUZpZWxkcyA9IGZvcm0gJiYgZm9ybS52YWx1ZSAmJiBmb3JtLnZhbHVlLmNvbXBUaGVtZUZpZWxkc1xuICAgICAgaWYodGhlbWVGaWVsZHMgJiYgdGhlbWVGaWVsZHMubGVuZ3RoKSB7XG4gICAgICAgIGxldCBsb2NhbENvbXBBcmVhID0gey4uLnRoaXMuc2VsZXRlZENvbXBldGVuY3lBcmVhfVxuICAgICAgICBpZihsb2NhbENvbXBBcmVhLmNoaWxkcmVuICYmIGxvY2FsQ29tcEFyZWEuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgZGVsZXRlIGxvY2FsQ29tcEFyZWEuY2hpbGRyZW5cbiAgICAgICAgfVxuICAgICAgICBpZihsb2NhbENvbXBBcmVhLmFzc29jaWF0aW9ucyAmJiBsb2NhbENvbXBBcmVhLmFzc29jaWF0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICBkZWxldGUgbG9jYWxDb21wQXJlYS5hc3NvY2lhdGlvbnNcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRoZW1lRmllbGRzLmZvckVhY2goYXN5bmMgKG9ialZhbCwgdGhlbWVJbmRleCkgPT5cbiAgICAgICAgZm9yKGxldCBbaW5kZXgsIG9ialZhbF0gb2YgdGhlbWVGaWVsZHMuZW50cmllcygpKSB7XG4gICAgICAgICAgcGFyZW50Q2F0ZWdvcnkgPSB7fVxuICAgICAgICAgIGlmKG9ialZhbFsnY29tcGV0ZW5jeVRoZW1lJ10pIHtcbiAgICAgICAgICAgIGNyZWF0ZWRUZXJtcz0gW11cbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IG9ialZhbFsnY29tcGV0ZW5jeVRoZW1lJ11cbiAgICAgICAgICAgIGNvbnN0IHRlcm06IE5TRnJhbWV3b3JrLklDcmVhdGVUZXJtID0ge1xuICAgICAgICAgICAgICBjb2RlOiB0aGlzLmZyYW1lV29ya1NlcnZpY2UuZ2V0VXVpZCgpLFxuICAgICAgICAgICAgICBuYW1lOiB2YWx1ZS5uYW1lLFxuICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogdmFsdWUuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgIGNhdGVnb3J5OiB0aGlzLmRhdGEuY29sdW1uSW5mby5jb2RlLFxuICAgICAgICAgICAgICBzdGF0dXM6IGFwcENvbnN0YW50cy5MSVZFLFxuICAgICAgICAgICAgICByZWZJZDogdmFsdWUucmVmSWQgfHwgJycsXG4gICAgICAgICAgICAgIHJlZlR5cGU6IHZhbHVlLnJlZlR5cGUgfHwgJycsXG4gICAgICAgICAgICAgIC8vIGFwcHJvdmFsU3RhdHVzOmFwcENvbnN0YW50cy5EUkFGVCxcbiAgICAgICAgICAgICAgcGFyZW50czogW1xuICAgICAgICAgICAgICAgIHsgaWRlbnRpZmllcjogYCR7dGhpcy5kYXRhLmZyYW1ld29ya0lkLnRvTG93ZXJDYXNlKCl9XyR7dGhpcy5kYXRhLmNvbHVtbkluZm8uY29kZX1gIH1cbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICBjb21wZXRlbmN5QXJlYTogbG9jYWxDb21wQXJlYSxcbiAgICAgICAgICAgICAgICB0aW1lU3RhbXA6IG5ldyBEYXRlKCkuZ2V0VGltZSgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RCb2R5OmFueSA9IHtcbiAgICAgICAgICAgICAgcmVxdWVzdDoge1xuICAgICAgICAgICAgICAgIHRlcm06IHRlcm1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5mcmFtZVdvcmtTZXJ2aWNlLmNyZWF0ZVRlcm0odGhpcy5kYXRhLmZyYW1ld29ya0lkLCB0aGlzLmRhdGEuY29sdW1uSW5mby5jb2RlLCByZXF1ZXN0Qm9keSkudG9Qcm9taXNlKCkudGhlbihhc3luYyAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgcmVxdWVzdEJvZHkucmVxdWVzdC50ZXJtWydpZGVudGlmaWVyJ10gPSByZXMucmVzdWx0Lm5vZGVfaWRbMF1cbiAgICAgICAgICAgICAgdGhpcy5mcmFtZVdvcmtTZXJ2aWNlLnNlbGVjdGlvbkxpc3QuZGVsZXRlKCdjb21wZXRlbmN5JylcbiAgICAgICAgICAgICAgcGFyZW50Q2F0ZWdvcnkgPSByZXF1ZXN0Qm9keS5yZXF1ZXN0LnRlcm1cbiAgICAgICAgICAgICAgY3JlYXRlZFRlcm1zLnB1c2gocmVxdWVzdEJvZHkucmVxdWVzdC50ZXJtKVxuICAgICAgICAgICAgICAvLyBjb3VudGVyVGhlbWUrK1xuXG4gICAgICAgICAgICAgIGNvbnN0IHBhcmVudENvbHVtbjogYW55ID0gdGhpcy5mcmFtZVdvcmtTZXJ2aWNlLmdldFByZXZpb3VzQ2F0ZWdvcnkodGhpcy5kYXRhLmNvbHVtbkluZm8uY29kZSlcbiAgICAgICAgICAgICAgbGV0IHBhcmVudENvbDogYW55ID0gdGhpcy5mcmFtZVdvcmtTZXJ2aWNlLnNlbGVjdGlvbkxpc3QuZ2V0KHBhcmVudENvbHVtbi5jb2RlKVxuICBcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVUZXJtQXNzb2NpYXRpb25zTXVsdGlWMihjcmVhdGVkVGVybXMscGFyZW50Q29sKVxuICAgICAgICAgICAgICAvLyAvLyBhd2FpdCB0aGlzLnVwZGF0ZVRlcm1Bc3NvY2lhdGlvbnNNdWx0aShjcmVhdGVkVGVybXMpXG5cbiAgICAgICAgICAgICAgICAgIGxldCBkYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICBcInNlbGVjdGVkXCI6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBcImNhdGVnb3J5XCI6IHBhcmVudENvbHVtbi5jb2RlLFxuICAgICAgICAgICAgICAgICAgICBcImNhcmRTdWJUeXBlXCI6IFwibWluaW1hbFwiLFxuICAgICAgICAgICAgICAgICAgICBcImlzVmlld09ubHlcIjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIFwiaW5kZXhcIjogcGFyZW50Q29sdW1uLmluZGV4LFxuICAgICAgICAgICAgICAgICAgICBcImNvbHVtbkluZm9cIjogdGhpcy5kYXRhLmNhcmRDb2xJbmZvXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZURhdGExMiA9IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzOiB7IHRlcm06IFt0aGlzLnNlbGVjdGVkVGVybV0sIGNyZWF0ZWQ6IHRydWUsIG11bHRpOnRydWUgfSxcbiAgICAgICAgICAgICAgICAgICAgaW5kZXg6IHRoaXMuZGF0YS5jb2x1bW5JbmZvLmluZGV4LFxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbXVsdGktY3JlYXRlJ1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgdGhpcy5mcmFtZVdvcmtTZXJ2aWNlLnVwZGF0ZUFmdGVyQWRkT3JFZGl0U3ViamVjdChyZXNwb25zZURhdGExMilcblxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYob2JqVmFsWydjb21wZXRlbmN5U3ViVGhlbWUnXSkge1xuICAgICAgICAgICAgdGhpcy5mcmFtZVdvcmtTZXJ2aWNlLnNlbGVjdGlvbkxpc3Quc2V0KHRoaXMuZGF0YS5jb2x1bW5JbmZvLmNvZGUsIHBhcmVudENhdGVnb3J5KVxuXG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBvYmpWYWxbJ2NvbXBldGVuY3lTdWJUaGVtZSddXG4gICAgICAgICAgICBpZih2YWx1ZSAmJiB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgY291bnRlclN1YlRoZW1lID0gMFxuICAgICAgICAgICAgICBjcmVhdGVkU3ViVGhlbWUgPSBbXVxuICAgICAgICAgICAgICAvLyB2YWx1ZS5mb3JFYWNoKGFzeW5jIChlbGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGZvcihsZXQgZWxlIG9mIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGVybTogTlNGcmFtZXdvcmsuSUNyZWF0ZVRlcm0gPSB7XG4gICAgICAgICAgICAgICAgICBjb2RlOiB0aGlzLmZyYW1lV29ya1NlcnZpY2UuZ2V0VXVpZCgpLFxuICAgICAgICAgICAgICAgICAgbmFtZTogZWxlLm5hbWUsXG4gICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZWxlLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk6IHRoaXMuZGF0YS5uZXh0Q29sSW5mby5jb2RlLFxuICAgICAgICAgICAgICAgICAgc3RhdHVzOiBhcHBDb25zdGFudHMuTElWRSxcbiAgICAgICAgICAgICAgICAgIHJlZklkOiBlbGUucmVmSWQgfHwgJycsXG4gICAgICAgICAgICAgICAgICByZWZUeXBlOiBlbGUucmVmVHlwZSB8fCAnJyxcbiAgICAgICAgICAgICAgICAgIHBhcmVudHM6IFtcbiAgICAgICAgICAgICAgICAgICAgeyBpZGVudGlmaWVyOiBgJHt0aGlzLmRhdGEuZnJhbWV3b3JrSWQudG9Mb3dlckNhc2UoKX1fJHt0aGlzLmRhdGEubmV4dENvbEluZm8uY29kZX1gIH1cbiAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgICAgICB0aW1lU3RhbXA6IG5ldyBEYXRlKCkuZ2V0VGltZSgpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RCb2R5OmFueSA9IHtcbiAgICAgICAgICAgICAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgICAgICAgICAgICAgdGVybTogdGVybVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2VEYXRhOiBhbnkgPSBhd2FpdCB0aGlzLmNyYXRlVGVybSh0aGlzLmRhdGEuZnJhbWV3b3JrSWQsIHRoaXMuZGF0YS5uZXh0Q29sSW5mby5jb2RlLCByZXF1ZXN0Qm9keSlcblxuICAgICAgICAgICAgICAgIHJlcXVlc3RCb2R5LnJlcXVlc3QudGVybVsnaWRlbnRpZmllciddID0gcmVzcG9uc2VEYXRhLnJlc3VsdC5ub2RlX2lkWzBdXG4gICAgICAgICAgICAgICAgY3JlYXRlZFN1YlRoZW1lLnB1c2gocmVxdWVzdEJvZHkucmVxdWVzdC50ZXJtKVxuICAgICAgICAgICAgICAgIGNvdW50ZXJTdWJUaGVtZSsrXG4gICAgICAgICAgICAgICAgaWYoKGNvdW50ZXJTdWJUaGVtZSA9PT0gb2JqVmFsWydjb21wZXRlbmN5U3ViVGhlbWUnXS5sZW5ndGgpKXtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudENvbHVtbkNvbmZpZ0RhdGE6YW55ID0gdGhpcy5mcmFtZVdvcmtTZXJ2aWNlLmdldFByZXZpb3VzQ2F0ZWdvcnkodGhpcy5kYXRhLm5leHRDb2xJbmZvLmNvZGUpXG4gICAgICAgICAgICAgICAgICBsZXQgcGFyZW50Q29sOiBhbnkgPSB0aGlzLmZyYW1lV29ya1NlcnZpY2Uuc2VsZWN0aW9uTGlzdC5nZXQocGFyZW50Q29sdW1uQ29uZmlnRGF0YS5jb2RlKVxuICAgICAgXG4gICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVRlcm1Bc3NvY2lhdGlvbnNNdWx0aVYyKGNyZWF0ZWRTdWJUaGVtZSxwYXJlbnRDb2wsIGluZGV4LCB0aGVtZUZpZWxkcy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICBpZihpbmRleCA9PT0gdGhlbWVGaWVsZHMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZyYW1lV29ya1NlcnZpY2Uuc2VsZWN0aW9uTGlzdC5kZWxldGUoJ2NvbXBldGVuY3knKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ0Nsb3NlKHsgdGVybTogdGhpcy5zZWxlY3RlZFRlcm1BcnJheSwgY3JlYXRlZDogdHJ1ZSwgbXVsdGk6ZmFsc2UsIGNhbGxVcGRhdGU6IGZhbHNlIH0pXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZU11bHRpQ3JlYXRlID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc25hY2tCYXIub3BlbihgQ29tcGV0ZW5jeSBNYXBwaW5nIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5LmApXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuICBhc3luYyBjcmF0ZVRlcm0oZnJhbWV3b3JrSWQ6IGFueSwgY29sQ29kZTogYW55LCByZXF1ZXN0Qm9keTogYW55KXtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUpPT57XG4gICAgICB0aGlzLmZyYW1lV29ya1NlcnZpY2UuY3JlYXRlVGVybShmcmFtZXdvcmtJZCwgY29sQ29kZSwgcmVxdWVzdEJvZHkpLnN1YnNjcmliZSgocmVzOiBhbnkpPT57XG4gICAgICAgIHJlc29sdmUocmVzKVxuICAgICAgfSwoKF9lcnI6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLl9zbmFja0Jhci5vcGVuKGBDcmVhdGUgVGVybSBmYWlsZWQuYClcbiAgICAgIH0pKVxuICAgIH0pXG4gIH1cblxuXG5cbiAgYXN5bmMgdXBkYXRlVGVybUFzc29jaWF0aW9uc011bHRpVjIoY3JlYXRlZFRlcm1zOiBhbnlbXSwgcGFyZW50U2VsZWN0ZWRUZXJtPzogYW55LCBfcnVubmluZ0luZGV4PzogbnVtYmVyLCBfdGhlbUZpZWxkc0xlbmd0aD86IG51bWJlcikge1xuICAgIGlmKGNyZWF0ZWRUZXJtcyAmJiBjcmVhdGVkVGVybXMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVGVybUFycmF5ID0gW11cbiAgICAgIC8vIGxldCBjcmVhdGVkVGVybXNDb3VudGVyID0gMFxuICAgICAgbGV0IGNyZWF0ZWRUZXJtc0lkZW50aWZpZXJzID0gW11cbiAgICAgIHRoaXMuc2VsZWN0ZWRUZXJtQXJyYXkgPSBjcmVhdGVkVGVybXNcbiAgICAgIHRoaXMuc2VsZWN0ZWRUZXJtID0gY3JlYXRlZFRlcm1zW2NyZWF0ZWRUZXJtcy5sZW5ndGggLTFdXG4gICAgICBmb3IobGV0IGNyZWF0ZWRUZXJtIG9mIGNyZWF0ZWRUZXJtcykge1xuICAgICAgICBjcmVhdGVkVGVybXNJZGVudGlmaWVycy5wdXNoKHsgaWRlbnRpZmllcjogY3JlYXRlZFRlcm0uaWRlbnRpZmllciB9KVxuICAgICAgfVxuICAgICAgbGV0IGFzc29jaWF0aW9ucyA9IFtdXG4gICAgICBsZXQgY291bnRlciA9IDBcbiAgICAgIGlmKCFwYXJlbnRTZWxlY3RlZFRlcm0pIHtcbiAgICAgICAgZm9yKGNvbnN0IFt2YWx1ZV0gb2YgdGhpcy5mcmFtZVdvcmtTZXJ2aWNlLnNlbGVjdGlvbkxpc3Qpe1xuICAgICAgICAgIGNvbnN0IHBhcmVudDphbnkgPSB2YWx1ZVxuICAgICAgICAgIGNvdW50ZXIrK1xuICAgICAgICAgIGFzc29jaWF0aW9ucyA9IHBhcmVudC5jaGlsZHJlbiA/IHBhcmVudC5jaGlsZHJlbi5tYXAoKGM6YW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYy5pZGVudGlmaWVyID8gIHsgaWRlbnRpZmllcjogYy5pZGVudGlmaWVyIH0gOiBudWxsXG4gICAgICAgICAgfSkgOiBbXVxuICAgICAgICAgICAgYXNzb2NpYXRpb25zID0gWy4uLmFzc29jaWF0aW9ucywgLi4uY3JlYXRlZFRlcm1zSWRlbnRpZmllcnNdXG4gICAgICAgICAgICB0aGlzLmlzVGVybUV4aXN0ID0gZmFsc2VcbiAgICAgICAgICAgIGNvbnN0IHJlZ3Vlc3RCb2R5ID0ge1xuICAgICAgICAgICAgICByZXF1ZXN0OiB7XG4gICAgICAgICAgICAgICAgdGVybToge1xuICAgICAgICAgICAgICAgICAgLi4uKGFzc29jaWF0aW9ucyAmJiBhc3NvY2lhdGlvbnMubGVuZ3RoKSA/IHthc3NvY2lhdGlvbnM6IFsuLi5hc3NvY2lhdGlvbnNdfSA6IG51bGwsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNhbGxVcGRhdGVBc3NvY2lhdGlvbnNWMihjb3VudGVyLCBwYXJlbnQsIHJlZ3Vlc3RCb2R5KVxuICAgICAgICAgIC8vIGNyZWF0ZWRUZXJtc0NvdW50ZXIrK1xuICAgICAgICAgIC8vIGlmKGNyZWF0ZWRUZXJtc0NvdW50ZXIgPT09IHRoaXMuZnJhbWVXb3JrU2VydmljZS5zZWxlY3Rpb25MaXN0LnNpemUpIHtcbiAgICAgICAgICAgIC8vIGlmKHJ1bm5pbmdJbmRleCA9PT0gdGhlbUZpZWxkc0xlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gICAgIHRoaXMuZnJhbWVXb3JrU2VydmljZS5zZWxlY3Rpb25MaXN0LmRlbGV0ZSgnY29tcGV0ZW5jeScpXG4gICAgICAgICAgICAvLyAgICAgdGhpcy5kaWFsb2dDbG9zZSh7IHRlcm06IFt0aGlzLnNlbGVjdGVkVGVybV0sIGNyZWF0ZWQ6IHRydWUsIG11bHRpOnRydWUsIGNhbGxVcGRhdGU6IGZhbHNlIH0pXG4gICAgICAgICAgICAvLyAgICAgdGhpcy5kaXNhYmxlTXVsdGlDcmVhdGUgPSBmYWxzZVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyAgICAgaWYoY3JlYXRlZFRlcm1zWzBdLmNhdGVnb3J5ID09PSAndGhlbWUnKXtcbiAgICAgICAgICAgIC8vICAgICB0aGlzLl9zbmFja0Jhci5vcGVuKGBDb21wZXRlbmN5ICR7Y3JlYXRlZFRlcm1zWzBdLmNhdGVnb3J5fSBjcmVhdGVkIHN1Y2Nlc3NmdWxseS5gKVxuICAgICAgICAgICAgLy8gICAgIH1cbiAgICAgICAgICAgIC8vICAgICBpZihjcmVhdGVkVGVybXNbMF0uY2F0ZWdvcnkgPT09ICdzdWJ0aGVtZScpeyAgICAgICAgIFxuXG4gICAgICAgICAgICAvLyAgICAgdGhpcy5fc25hY2tCYXIub3BlbihgQ29tcGV0ZW5jeSAke2NyZWF0ZWRUZXJtc1swXS5jYXRlZ29yeX0gY3JlYXRlZCBzdWNjZXNzZnVsbHkuYClcbiAgICAgICAgICAgIC8vICAgICB9XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgLy8gfVxuICAgICAgICB9IFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gcGFyZW50U2VsZWN0ZWRUZXJtXG4gICAgICAgIGFzc29jaWF0aW9ucyA9IHBhcmVudC5jaGlsZHJlbiA/IHBhcmVudC5jaGlsZHJlbi5tYXAoKGM6YW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGMuaWRlbnRpZmllciA/ICB7IGlkZW50aWZpZXI6IGMuaWRlbnRpZmllciB9IDogbnVsbFxuICAgICAgICB9KSA6IFtdXG4gICAgICAgICAgYXNzb2NpYXRpb25zID0gWy4uLmFzc29jaWF0aW9ucywgLi4uY3JlYXRlZFRlcm1zSWRlbnRpZmllcnNdXG4gICAgICAgICAgdGhpcy5pc1Rlcm1FeGlzdCA9IGZhbHNlXG4gICAgICAgICAgY29uc3QgcmVndWVzdEJvZHkgPSB7XG4gICAgICAgICAgICByZXF1ZXN0OiB7XG4gICAgICAgICAgICAgIHRlcm06IHtcbiAgICAgICAgICAgICAgICAuLi4oYXNzb2NpYXRpb25zICYmIGFzc29jaWF0aW9ucy5sZW5ndGgpID8ge2Fzc29jaWF0aW9uczogWy4uLmFzc29jaWF0aW9uc119IDogbnVsbCxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jYWxsVXBkYXRlQXNzb2NpYXRpb25zVjIoY291bnRlciwgcGFyZW50LCByZWd1ZXN0Qm9keSlcblxuICAgICAgICAgIC8vIGlmKGNyZWF0ZWRUZXJtc0NvdW50ZXIgPT09IHRoaXMuZnJhbWVXb3JrU2VydmljZS5zZWxlY3Rpb25MaXN0LnNpemUpIHtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyB9XG4gICAgICAgICAgLy8gdGhpcy5kaWFsb2dDbG9zZSh7IHRlcm06IFt0aGlzLnNlbGVjdGVkVGVybV0sIGNyZWF0ZWQ6IHRydWUsIG11bHRpOnRydWUsIHN0b3BVcGRhdGU6IGZhbHNlIH0pXG4gICAgICAgICAgdGhpcy5kaXNhYmxlTXVsdGlDcmVhdGUgPSBmYWxzZVxuICAgICAgICAgIC8vIGlmKGNyZWF0ZWRUZXJtc1swXS5jYXRlZ29yeSA9PT0gJ3N1YnRoZW1lJyl7ICAgXG4gICAgICAgICAgLy8gICB0aGlzLl9zbmFja0Jhci5vcGVuKGBDb21wZXRlbmN5ICR7Y3JlYXRlZFRlcm1zWzBdLmNhdGVnb3J5fSBjcmVhdGVkIHN1Y2Nlc3NmdWxseS5gKVxuICAgICAgICAgIC8vIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyB1cGRhdGVUZXJtQXNzb2NpYXRpb25zTXVsdGkoY3JlYXRlZFRlcm1zOiBhbnlbXSkge1xuICAgIGlmKGNyZWF0ZWRUZXJtcyAmJiBjcmVhdGVkVGVybXMubGVuZ3RoKSB7XG4gICAgICAvLyBsZXQgY3JlYXRlZFRlcm1zQ291bnRlciA9IDBcbiAgICAgIGZvcihsZXQgY3JlYXRlZFRlcm0gb2YgY3JlYXRlZFRlcm1zKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUZXJtID0gY3JlYXRlZFRlcm1cbiAgICAgICAgbGV0IGFzc29jaWF0aW9ucyA9IFtdXG4gICAgICAgIGxldCB0ZW1wXG4gICAgICAgIGxldCBjb3VudGVyID0gMFxuICAgICAgICAvLyBsZXQgbG9jYWxJc0V4aXN0ID0gZmFsc2VcbiAgICAgICAgXG4gICAgICAgIGZvcihjb25zdCBbdmFsdWVdIG9mIHRoaXMuZnJhbWVXb3JrU2VydmljZS5zZWxlY3Rpb25MaXN0KXtcbiAgICAgICAgICBjb25zdCBwYXJlbnQ6YW55ID0gdmFsdWVcbiAgICAgICAgICBjb3VudGVyKytcbiAgICAgICAgICB0ZW1wID0gcGFyZW50LmNoaWxkcmVuID8gcGFyZW50LmNoaWxkcmVuLmZpbHRlcigoY2hpbGQ6YW55KSA9PiBjaGlsZC5pZGVudGlmaWVyID09PSB0aGlzLnNlbGVjdGVkVGVybS5pZGVudGlmaWVyKSA6IG51bGxcbiAgICAgICAgICBhc3NvY2lhdGlvbnMgPSBwYXJlbnQuY2hpbGRyZW4gPyBwYXJlbnQuY2hpbGRyZW4ubWFwKChjOmFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGMuaWRlbnRpZmllciA/ICB7IGlkZW50aWZpZXI6IGMuaWRlbnRpZmllciB9IDogbnVsbFxuICAgICAgICAgIH0pIDogW11cbiAgICAgICAgICBpZiAodGVtcCAmJiB0ZW1wLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5pc1Rlcm1FeGlzdCA9IHRydWVcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGFzc29jaWF0aW9ucy5wdXNoKHsgaWRlbnRpZmllcjogdGhpcy5zZWxlY3RlZFRlcm0uaWRlbnRpZmllciB9KVxuICAgICAgICAgICAgICB0aGlzLmlzVGVybUV4aXN0ID0gZmFsc2VcbiAgICAgICAgICAgICAgLy8gaWYoY3JlYXRlZFRlcm1zQ291bnRlciA9PT0gKGNyZWF0ZWRUZXJtcy5sZW5ndGgtMSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWd1ZXN0Qm9keSA9IHtcbiAgICAgICAgICAgICAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgICAgICAgICAgICAgdGVybToge1xuICAgICAgICAgICAgICAgICAgICAgIC4uLihhc3NvY2lhdGlvbnMgJiYgYXNzb2NpYXRpb25zLmxlbmd0aCkgPyB7YXNzb2NpYXRpb25zOiBbLi4uYXNzb2NpYXRpb25zXX0gOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY2FsbFVwZGF0ZUFzc29jaWF0aW9ucyhjb3VudGVyLCBwYXJlbnQsIHJlZ3Vlc3RCb2R5KVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGNyZWF0ZWRUZXJtc0NvdW50ZXIrK1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNhbGxVcGRhdGVBc3NvY2lhdGlvbnNWMihjb3VudGVyOiBhbnksIHBhcmVudDogYW55LCByZWd1ZXN0Qm9keTogYW55ICk6IFByb21pc2U8YW55PntcbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUpID0+IHtcbiAgICAgICB0aGlzLmZyYW1lV29ya1NlcnZpY2UudXBkYXRlVGVybSh0aGlzLmRhdGEuZnJhbWV3b3JrSWQsIHBhcmVudC5jYXRlZ29yeSwgcGFyZW50LmNvZGUsIHJlZ3Vlc3RCb2R5KS5zdWJzY3JpYmUoYXN5bmMgKCkgPT4ge1xuICAgICAgICBwYXJlbnRbJ2NoaWxkcmVuJ10gPSBwYXJlbnQgJiYgcGFyZW50LmNoaWxkcmVuID9bLi4ucGFyZW50LmNoaWxkcmVuLCAuLi50aGlzLnNlbGVjdGVkVGVybUFycmF5XTp0aGlzLnNlbGVjdGVkVGVybUFycmF5XG4gICAgICAgICAgbGV0IGxpc3REYXRhIDogYW55ID0gdGhpcy5mcmFtZVdvcmtTZXJ2aWNlLmxpc3QuZ2V0KHRoaXMuZGF0YS5jb2x1bW5JbmZvLmNvZGUpXG4gICAgICAgICAgbGV0IGRpZmZlcmVuY2VEYXRhID0gW11cbiAgICAgICAgICBpZihsaXN0RGF0YSAmJiBsaXN0RGF0YS5jaGlsZHJlbiAmJiBsaXN0RGF0YS5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgIGRpZmZlcmVuY2VEYXRhICA9IF8uZGlmZmVyZW5jZUJ5KHRoaXMuc2VsZWN0ZWRUZXJtQXJyYXksbGlzdERhdGEuY2hpbGRyZW4sICdpZGVudGlmaWVyJyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRpZmZlcmVuY2VEYXRhID0gdGhpcy5zZWxlY3RlZFRlcm1BcnJheVxuICAgICAgICAgIH1cbiAgICAgICAgICBsaXN0RGF0YVsnYXNzb2NpYXRpb25zJ10gPSBsaXN0RGF0YSAmJiBsaXN0RGF0YS5hc3NvY2lhdGlvbnMgP1suLi5saXN0RGF0YS5hc3NvY2lhdGlvbnMsIC4uLmRpZmZlcmVuY2VEYXRhXTpkaWZmZXJlbmNlRGF0YVxuICAgICAgICAgIGxpc3REYXRhWydjaGlsZHJlbiddID0gbGlzdERhdGEgJiYgbGlzdERhdGEuY2hpbGRyZW4gP1suLi5saXN0RGF0YS5jaGlsZHJlbiwgLi4uZGlmZmVyZW5jZURhdGFdOmRpZmZlcmVuY2VEYXRhXG5cbiAgICAgICAgICB0aGlzLmZyYW1lV29ya1NlcnZpY2Uuc2VsZWN0aW9uTGlzdC5mb3JFYWNoKChzZWxlY3RlZERhdGE6IGFueSk9PiB7XG4gICAgICAgICAgICBsZXQgbGlzdERhdGEgOiBhbnkgPSB0aGlzLmZyYW1lV29ya1NlcnZpY2UubGlzdC5nZXQoc2VsZWN0ZWREYXRhLmNhdGVnb3J5KVxuICAgICAgICAgICAgaWYobGlzdERhdGEgJiYgbGlzdERhdGEuY2hpbGRyZW4gJiYgbGlzdERhdGEuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlTG9jYWxMaXN0KGxpc3REYXRhLHBhcmVudCwgdGhpcy5zZWxlY3RlZFRlcm1BcnJheSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSBcbiAgICAgICAgLy8gbGV0IHNlbGVjdGVkQ2FyZEluZm8gPSB0aGlzLmZyYW1lV29ya1NlcnZpY2Uuc2VsZWN0aW9uTGlzdC5nZXQodGhpcy5kYXRhLmNhcmRDb2xJbmZvLmNvZGUpXG4gICAgICAgIC8vIHRoaXMuZnJhbWVXb3JrU2VydmljZS5jdXJyZW50U2VsZWN0aW9uLm5leHQoeyB0eXBlOiBzZWxlY3RlZENhcmRJbmZvLmNvZGUsIGRhdGE6c2VsZWN0ZWRDYXJkSW5mbywgY2FyZFJlZjpzZWxlY3RlZENhcmRJbmZvLmNhcmRSZWYsIGlzVXBkYXRlOiB0cnVlfSlcbiAgICAgICAgaWYgKGNvdW50ZXIgPT09IHRoaXMuZnJhbWVXb3JrU2VydmljZS5zZWxlY3Rpb25MaXN0LnNpemUpIHtcbiAgICAgICAgICAvLyB0aGlzIHZhbHVlIGlzIGZvciBzZWxlY3RlZCB0ZXJtIGluIGNhc2Ugb2YgY3JlYXRlIHNjZW5hcmlvLCBpbiBjYXNlIG9mIGVkaXQgc2NlbmFyaW8gdGhpcyB3b24ndCBiZSBhdmFpYWJsZSBcbiAgICAgICAgICAvLyBzbyB0ZXJtIGlzIHNldCBmcm9tIGNoaWxkZGF0YSB3aGljaCBpcyByZWNlaXZlZCBmcm9tIHBhcmFtcyBpbiB1cGRhdGVEYXRhXG4gICAgICAgICAgLy8gY29uc3QgdmFsdWUgPSAodGhpcy5zZWxlY3RlZFRlcm0gJiYgdGhpcy5zZWxlY3RlZFRlcm0uaWRlbnRpZmllcikgPyB0aGlzLnNlbGVjdGVkVGVybSA6IHt9XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gY29uc3QgZm91bmQgPSBwYXJlbnQuY2hpbGRyZW4gPyBwYXJlbnQuY2hpbGRyZW4uZmluZChjPT4gYy5pZGVudGlmaWVyID09PSB0aGlzLnNlbGVjdGVkVGVybS5pZGVudGlmaWVyKSA6IGZhbHNlXG4gICAgICAgICAgLy8gaWYoIWZvdW5kKSB7XG5cbiAgICAgICAgICAgIC8vIHBhcmVudFsnY2hpbGRyZW4nXSA9IHBhcmVudCAmJiBwYXJlbnQuY2hpbGRyZW4gP1suLi5wYXJlbnQuY2hpbGRyZW4sIC4uLnRoaXMuc2VsZWN0ZWRUZXJtQXJyYXldOnRoaXMuc2VsZWN0ZWRUZXJtQXJyYXlcbiAgICAgICAgICAgIC8vIHBhcmVudC5jaGlsZHJlbiA/IHBhcmVudC5jaGlsZHJlbi5wdXNoKHRoaXMuc2VsZWN0ZWRUZXJtKSA6IHBhcmVudFsnY2hpbGRyZW4nXSA9IFt0aGlzLnNlbGVjdGVkVGVybV1cbiAgICAgICAgICAvLyB9XG4gICAgICAgICAgdGhpcy5kaXNhYmxlVXBkYXRlID0gZmFsc2VcbiAgICAgICAgICBsZXQgcmV0dXJuVmFsdWUgOiBhbnkgPSB0cnVlXG4gICAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgICAgIGF3YWl0IHJldHVyblZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGV0IHJldHVyblZhbHVlIDogYW55ID0gdHJ1ZVxuICAgICAgICAgIHJlc29sdmUodHJ1ZSlcbiAgICAgICAgICBhd2FpdCByZXR1cm5WYWx1ZVxuICAgICAgICB9XG4gICAgICB9LCAoX2VycjogYW55KSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEVkaXQgJHt0aGlzLmRhdGEuY29sdW1uSW5mby5uYW1lfSBmYWlsZWQsIHBsZWFzZSB0cnkgYWdhaW4gbGF0ZXJgKVxuICAgICAgICB0aGlzLl9zbmFja0Jhci5vcGVuKGBUZXJtIEFzc29jaWF0aW9uIGZhaWxlZC5gKVxuICAgICAgICB0aGlzLmRpc2FibGVNdWx0aUNyZWF0ZSA9IGZhbHNlXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICBhc3luYyBjYWxsVXBkYXRlQXNzb2NpYXRpb25zKGNvdW50ZXI6IGFueSwgcGFyZW50OiBhbnksIHJlZ3Vlc3RCb2R5OiBhbnkgKTogUHJvbWlzZTxhbnk+e1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSkgPT4ge1xuICAgICAgIHRoaXMuZnJhbWVXb3JrU2VydmljZS51cGRhdGVUZXJtKHRoaXMuZGF0YS5mcmFtZXdvcmtJZCwgcGFyZW50LmNhdGVnb3J5LCBwYXJlbnQuY29kZSwgcmVndWVzdEJvZHkpLnN1YnNjcmliZShhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmIChjb3VudGVyID09PSB0aGlzLmZyYW1lV29ya1NlcnZpY2Uuc2VsZWN0aW9uTGlzdC5zaXplKSB7XG4gICAgICAgICAgLy8gdGhpcy5zZWxlY3RlZFRlcm1bJ2Fzc29jaWF0aW9uUHJvcGVydGllcyddWydhcHByb3ZhbFN0YXR1cyddID0gJ0RyYWZ0JztcbiAgXG4gICAgICAgICAgLy8gdGhpcyB2YWx1ZSBpcyBmb3Igc2VsZWN0ZWQgdGVybSBpbiBjYXNlIG9mIGNyZWF0ZSBzY2VuYXJpbywgaW4gY2FzZSBvZiBlZGl0IHNjZW5hcmlvIHRoaXMgd29uJ3QgYmUgYXZhaWFibGUgXG4gICAgICAgICAgLy8gc28gdGVybSBpcyBzZXQgZnJvbSBjaGlsZGRhdGEgd2hpY2ggaXMgcmVjZWl2ZWQgZnJvbSBwYXJhbXMgaW4gdXBkYXRlRGF0YVxuICAgICAgICAgIC8vIGNvbnN0IHZhbHVlID0gKHRoaXMuc2VsZWN0ZWRUZXJtICYmIHRoaXMuc2VsZWN0ZWRUZXJtLmlkZW50aWZpZXIpID8gdGhpcy5zZWxlY3RlZFRlcm0gOiB7fVxuICAgICAgICAgIGNvbnN0IGZvdW5kID0gcGFyZW50LmNoaWxkcmVuID8gcGFyZW50LmNoaWxkcmVuLmZpbmQoKGM6YW55KT0+IGMuaWRlbnRpZmllciA9PT0gdGhpcy5zZWxlY3RlZFRlcm0uaWRlbnRpZmllcikgOiBmYWxzZVxuICAgICAgICAgIGlmKCFmb3VuZCkge1xuICAgICAgICAgICAgcGFyZW50LmNoaWxkcmVuID8gcGFyZW50LmNoaWxkcmVuLnB1c2godGhpcy5zZWxlY3RlZFRlcm0pIDogcGFyZW50WydjaGlsZHJlbiddID0gW3RoaXMuc2VsZWN0ZWRUZXJtXVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmRpc2FibGVVcGRhdGUgPSBmYWxzZVxuICAgICAgICAgIGxldCByZXR1cm5WYWx1ZSA6IGFueSA9IHRydWVcbiAgICAgICAgICByZXNvbHZlKHRydWUpXG4gICAgICAgICAgYXdhaXQgcmV0dXJuVmFsdWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZXQgcmV0dXJuVmFsdWUgOiBhbnkgPSB0cnVlXG4gICAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgICAgIGF3YWl0IHJldHVyblZhbHVlXG4gICAgICAgIH1cbiAgICAgIH0sIChfZXJyOiBhbnkpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRWRpdCAke3RoaXMuZGF0YS5jb2x1bW5JbmZvLm5hbWV9IGZhaWxlZCwgcGxlYXNlIHRyeSBhZ2FpbiBsYXRlcmApXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICB1cGRhdGVUZXJtRGF0YShmb3JtOmFueSwgZGF0YTogYW55KSB7XG4gICAgdGhpcy5kaXNhYmxlVXBkYXRlID0gdHJ1ZVxuICAgIGNvbnN0IGZvcm1EYXRhID0ge1xuICAgICAgLy8gdXNlIHRoaXMgaWYgeW91IG5lZWQgZGlzYWJsZWQgZmllbGQgdmFsdWVzIDogZm9ybS5nZXRSYXdWYWx1ZSgpXG4gICAgICAuLi5mb3JtLnZhbHVlXG4gICAgfVxuICAgIGNvbnN0IHVwZGF0ZURhdGEgPSB7XG4gICAgICBmb3JtRGF0YSxcbiAgICAgIHVwZGF0ZVRlcm1EYXRhOiBkYXRhLmNoaWxkcmVuRGF0YVxuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVRlcm1Bc3NvY2lhdGlvbnModXBkYXRlRGF0YSlcbiAgfVxuXG4gIHVwZGF0ZVRlcm1Bc3NvY2lhdGlvbnModXBkYXRlRGF0YT86IGFueSkge1xuICAgIGxldCBhc3NvY2lhdGlvbnMgPSBbXVxuICAgIGxldCB0ZW1wXG4gICAgbGV0IGNvdW50ZXIgPSAwXG4gICAgLy8gbGV0IGxvY2FsSXNFeGlzdCA9IGZhbHNlXG4gICAgdGhpcy5mcmFtZVdvcmtTZXJ2aWNlLnNlbGVjdGlvbkxpc3QuZm9yRWFjaCgocGFyZW50KSA9PiB7XG4gICAgICBjb3VudGVyKytcbiAgICAgIHRlbXAgPSBwYXJlbnQuY2hpbGRyZW4gPyBwYXJlbnQuY2hpbGRyZW4uZmlsdGVyKChjaGlsZDphbnkpID0+IGNoaWxkLmlkZW50aWZpZXIgPT09IHRoaXMuc2VsZWN0ZWRUZXJtLmlkZW50aWZpZXIpIDogbnVsbFxuICAgICAgYXNzb2NpYXRpb25zID0gcGFyZW50LmNoaWxkcmVuID8gcGFyZW50LmNoaWxkcmVuLm1hcCgoYzphbnkpID0+IHtcbiAgICAgICAgLy8gcmV0dXJuIHsgaWRlbnRpZmllcjogYy5pZGVudGlmaWVyLCBhcHByb3ZhbFN0YXR1czogYy5hc3NvY2lhdGlvblByb3BlcnRpZXM/Yy5hc3NvY2lhdGlvblByb3BlcnRpZXMuYXBwcm92YWxTdGF0dXM6ICdEcmFmdCcgfVxuICAgICAgICByZXR1cm4gYy5pZGVudGlmaWVyID8gIHsgaWRlbnRpZmllcjogYy5pZGVudGlmaWVyIH0gOiBudWxsXG4gICAgICB9KSA6IFtdXG4gICAgICBpZiAodGVtcCAmJiB0ZW1wLmxlbmd0aCkge1xuICAgICAgICB0aGlzLmlzVGVybUV4aXN0ID0gdHJ1ZVxuICAgICAgICByZXR1cm5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGFzc29jaWF0aW9ucy5wdXNoKHsgaWRlbnRpZmllcjogdGhpcy5zZWxlY3RlZFRlcm0uaWRlbnRpZmllciwgYXBwcm92YWxTdGF0dXM6IGFwcENvbnN0YW50cy5EUkFGVCB9KVxuICAgICAgICBpZih0aGlzLnNlbGVjdGVkVGVybSAmJiB0aGlzLnNlbGVjdGVkVGVybS5pZGVudGlmaWVyKSB7XG4gICAgICAgICAgYXNzb2NpYXRpb25zLnB1c2goeyBpZGVudGlmaWVyOiB0aGlzLnNlbGVjdGVkVGVybS5pZGVudGlmaWVyIH0pXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc1Rlcm1FeGlzdCA9IGZhbHNlXG4gICAgICAgIGNvbnN0IHJlZ3Vlc3RCb2R5ID0ge1xuICAgICAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgICAgIHRlcm06IHtcbiAgICAgICAgICAgICAgLi4uKHVwZGF0ZURhdGEgJiYgdXBkYXRlRGF0YS5mb3JtRGF0YSAmJiB1cGRhdGVEYXRhLnVwZGF0ZVRlcm1EYXRhLmNvZGUgPT09IHBhcmVudC5jb2RlKSA/IHsuLi51cGRhdGVEYXRhLmZvcm1EYXRhfTogbnVsbCxcbiAgICAgICAgICAgICAgLi4uKGFzc29jaWF0aW9ucyAmJiBhc3NvY2lhdGlvbnMubGVuZ3RoKSA/IHthc3NvY2lhdGlvbnM6IFsuLi5hc3NvY2lhdGlvbnNdfSA6IG51bGwsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZnJhbWVXb3JrU2VydmljZS51cGRhdGVUZXJtKHRoaXMuZGF0YS5mcmFtZXdvcmtJZCwgcGFyZW50LmNhdGVnb3J5LCBwYXJlbnQuY29kZSwgcmVndWVzdEJvZHkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgaWYgKGNvdW50ZXIgPT09IHRoaXMuZnJhbWVXb3JrU2VydmljZS5zZWxlY3Rpb25MaXN0LnNpemUpIHtcbiAgICAgICAgICAgIC8vIHRoaXMuc2VsZWN0ZWRUZXJtWydhc3NvY2lhdGlvblByb3BlcnRpZXMnXVsnYXBwcm92YWxTdGF0dXMnXSA9ICdEcmFmdCc7XG5cbiAgICAgICAgICAgIC8vIHRoaXMgdmFsdWUgaXMgZm9yIHNlbGVjdGVkIHRlcm0gaW4gY2FzZSBvZiBjcmVhdGUgc2NlbmFyaW8sIGluIGNhc2Ugb2YgZWRpdCBzY2VuYXJpbyB0aGlzIHdvbid0IGJlIGF2YWlhYmxlIFxuICAgICAgICAgICAgLy8gc28gdGVybSBpcyBzZXQgZnJvbSBjaGlsZGRhdGEgd2hpY2ggaXMgcmVjZWl2ZWQgZnJvbSBwYXJhbXMgaW4gdXBkYXRlRGF0YVxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSAodGhpcy5zZWxlY3RlZFRlcm0gJiYgdGhpcy5zZWxlY3RlZFRlcm0uaWRlbnRpZmllcikgPyB0aGlzLnNlbGVjdGVkVGVybSA6ICh1cGRhdGVEYXRhKSA/IHsuLi51cGRhdGVEYXRhLnVwZGF0ZVRlcm1EYXRhLCAuLi51cGRhdGVEYXRhLmZvcm1EYXRhfSA6IHt9XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVVcGRhdGUgPSBmYWxzZVxuICAgICAgICAgICAgdGhpcy5kaWFsb2dDbG9zZSh7IHRlcm06IHsgLi4udmFsdWUgfSwgY3JlYXRlZDogdHJ1ZSB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSwgKF9lcnI6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEVkaXQgJHt0aGlzLmRhdGEuY29sdW1uSW5mby5uYW1lfSBmYWlsZWQsIHBsZWFzZSB0cnkgYWdhaW4gbGF0ZXJgKVxuICAgICAgICAgIHRoaXMuX3NuYWNrQmFyLm9wZW4oYFRlcm0gQXNzb2NpYXRpb24gZmFpbGVkLmApXG4gICAgICAgICAgdGhpcy5kaXNhYmxlTXVsdGlDcmVhdGUgPSBmYWxzZVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuXG4gIGRpYWxvZ0Nsb3NlKHRlcm06IGFueSkge1xuICAgIHRoaXMuZnJhbWVXb3JrU2VydmljZS5wdWJsaXNoRnJhbWV3b3JrKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuZGlzYWJsZU11bHRpQ3JlYXRlID0gZmFsc2VcbiAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHRlcm0pXG4gICAgfSwoX2VycjphbnkpPT4ge1xuICAgICAgdGhpcy5kaXNhYmxlTXVsdGlDcmVhdGUgPSBmYWxzZVxuICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UodGVybSlcbiAgICAgIHRoaXMuX3NuYWNrQmFyLm9wZW4oYFB1Ymxpc2ggIGZhaWxlZC5gKVxuICAgIH0pO1xuICB9XG5cblxuXG5cblxuICBhc3luYyBtdWx0aUNyZWF0ZVN1YlRoZW1lKF9mb3JtOiBhbnksIGRhdGE6IGFueSkge1xuICAgIHRoaXMuZGlzYWJsZU11bHRpQ3JlYXRlID0gdHJ1ZVxuICAgIGxldCBmb3JtQXJyYXk6YW55ID0gdGhpcy5jb21wZXRlbmN5Rm9ybS5nZXQoJ2NvbXBUaGVtZUZpZWxkcycpIGFzIFVudHlwZWRGb3JtQXJyYXk7XG4gICAgbGV0IHNlbGVjdGVkRm9ybURhdGE6YW55ICA9IGZvcm1BcnJheS5hdCgwKS5nZXQoJ2NvbXBldGVuY3lTdWJUaGVtZScpLnZhbHVlXG4gICAgbGV0IHByZXZpb3VzU3ViVGhlbWVEYXRhID0gZGF0YS5jaGlsZHJlbkRhdGEuY2hpbGRyZW5cbiAgICBsZXQgbmV3bHlBZGRlZDogYW55ID0gW11cbiAgICBsZXQgcmVtb3ZlZEV4aXN0aW5nOmFueSA9IFtdXG4gICAgbGV0IGNyZWF0ZWRTdWJUaGVtZSA9IFtdXG4gICAgbGV0IGNvdW50ZXJTdWJUaGVtZSA9IDBcbiAgICAvLyBsZXQgY291bnRlclJldGlyZVN1YlRoZW1lID0gMFxuICAgIFxuICAgIG5ld2x5QWRkZWQgPSBfLmRpZmZlcmVuY2VCeShzZWxlY3RlZEZvcm1EYXRhLCBwcmV2aW91c1N1YlRoZW1lRGF0YSwgJ3JlZklkJyk7XG4gICAgcmVtb3ZlZEV4aXN0aW5nID0gXy5kaWZmZXJlbmNlQnkocHJldmlvdXNTdWJUaGVtZURhdGEsIHNlbGVjdGVkRm9ybURhdGEsICdyZWZJZCcpO1xuICAgIGlmKG5ld2x5QWRkZWQgJiYgbmV3bHlBZGRlZC5sZW5ndGgpIHtcbiAgICAgICAgLy8gbmV3bHlBZGRlZC5mb3JFYWNoKGFzeW5jICh2YWwsIGkpID0+e1xuICAgICAgICBmb3IobGV0IHZhbCBvZiBuZXdseUFkZGVkKXtcbiAgICAgICAgICBjb25zdCB0ZXJtOiBOU0ZyYW1ld29yay5JQ3JlYXRlVGVybSA9IHtcbiAgICAgICAgICBjb2RlOiB0aGlzLmZyYW1lV29ya1NlcnZpY2UuZ2V0VXVpZCgpLFxuICAgICAgICAgIG5hbWU6IHZhbC5uYW1lLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiB2YWwuZGVzY3JpcHRpb24sXG4gICAgICAgICAgY2F0ZWdvcnk6IHRoaXMuZGF0YS5jb2x1bW5JbmZvLmNvZGUsXG4gICAgICAgICAgc3RhdHVzOiBhcHBDb25zdGFudHMuTElWRSxcbiAgICAgICAgICByZWZJZDogdmFsLnJlZklkLFxuICAgICAgICAgIHJlZlR5cGU6IHZhbC5yZWZUeXBlLFxuICAgICAgICAgIC8vIGFwcHJvdmFsU3RhdHVzOmFwcENvbnN0YW50cy5EUkFGVCxcbiAgICAgICAgICBwYXJlbnRzOiBbXG4gICAgICAgICAgICB7IGlkZW50aWZpZXI6IGAke3RoaXMuZGF0YS5mcmFtZXdvcmtJZC50b0xvd2VyQ2FzZSgpfV8ke3RoaXMuZGF0YS5jb2x1bW5JbmZvLmNvZGV9YCB9XG4gICAgICAgICAgXSxcbiAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczoge1xuICAgICAgICAgICAgdGltZVN0YW1wOiBuZXcgRGF0ZSgpLmdldFRpbWUoKVxuICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgcmVxdWVzdEJvZHk6YW55ID0ge1xuICAgICAgICAgICAgcmVxdWVzdDoge1xuICAgICAgICAgICAgICB0ZXJtOiB0ZXJtXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgcGFyZW50Q29sdW1uQ29uZmlnRGF0YTphbnkgPSB0aGlzLmZyYW1lV29ya1NlcnZpY2UuZ2V0UHJldmlvdXNDYXRlZ29yeSh0aGlzLmRhdGEuY29sdW1uSW5mby5jb2RlKVxuICAgICAgICAgIGxldCBwYXJlbnRDb2w6IGFueSA9IHRoaXMuZnJhbWVXb3JrU2VydmljZS5zZWxlY3Rpb25MaXN0LmdldChwYXJlbnRDb2x1bW5Db25maWdEYXRhLmNvZGUpXG4gICAgICAgIFxuICAgICAgICAgICAgXG4gICAgICAgICAgbGV0IHJlc3BvbnNlRGF0YTogYW55ID0gYXdhaXQgdGhpcy5jcmF0ZVRlcm0odGhpcy5kYXRhLmZyYW1ld29ya0lkLCB0aGlzLmRhdGEuY29sdW1uSW5mby5jb2RlLCByZXF1ZXN0Qm9keSlcbiAgICAgICAgICByZXF1ZXN0Qm9keS5yZXF1ZXN0LnRlcm1bJ2lkZW50aWZpZXInXSA9IHJlc3BvbnNlRGF0YS5yZXN1bHQubm9kZV9pZFswXVxuICAgICAgICAgIGNyZWF0ZWRTdWJUaGVtZS5wdXNoKHJlcXVlc3RCb2R5LnJlcXVlc3QudGVybSlcbiAgICAgICAgICBjb3VudGVyU3ViVGhlbWUrK1xuICAgICAgICAgIGlmKGNvdW50ZXJTdWJUaGVtZSA9PT0gbmV3bHlBZGRlZC5sZW5ndGgpe1xuICAgICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVUZXJtQXNzb2NpYXRpb25zTXVsdGlWMihjcmVhdGVkU3ViVGhlbWUsIHBhcmVudENvbClcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy5mcmFtZVdvcmtTZXJ2aWNlLnVwZGF0ZUZyYW1ld29ya0xpc3QodGhpcy5kYXRhLmNvbHVtbkluZm8uY29kZSwgcGFyZW50Q29sLCBjcmVhdGVkU3ViVGhlbWUsICdjcmVhdGUnKVxuICAgICAgICAgICAgaWYoIShyZW1vdmVkRXhpc3RpbmcgJiYgcmVtb3ZlZEV4aXN0aW5nLmxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgdGhpcy5kaWFsb2dDbG9zZSh7IHRlcm06IHRoaXMuc2VsZWN0ZWRUZXJtQXJyYXksIGNyZWF0ZWQ6IHRydWUsIG11bHRpOnRydWUsIGNhbGxVcGRhdGU6IGZhbHNlIH0pXG4gICAgICAgICAgICAgIHRoaXMuZGlzYWJsZU11bHRpQ3JlYXRlID0gZmFsc2VcbiAgICAgICAgICAgICAgdGhpcy5fc25hY2tCYXIub3BlbihgQ29tcGV0ZW5jeSB0aGVtZSB1cGRhdGVkIHN1Y2Nlc3NmdWxseS5gKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgXG4gICAgaWYocmVtb3ZlZEV4aXN0aW5nICYmIHJlbW92ZWRFeGlzdGluZy5sZW5ndGgpIHtcbiAgICAgIGxldCByZW1vdmVkVGVybXNDb2xsZWN0aW9uID0gW11cbiAgICAgIGZvcihsZXQgcmVtb3ZlZFRlcm0gb2YgcmVtb3ZlZEV4aXN0aW5nKSB7XG4gICAgICAgIHJlbW92ZWRUZXJtc0NvbGxlY3Rpb24ucHVzaChyZW1vdmVkVGVybS5jb2RlKVxuICAgICAgfVxuICAgICAgICBcbiAgICAgICAgbGV0IHN1YlRoZW1lUmVxdWVzdCA9e1xuICAgICAgICAgIFwicmVxdWVzdFwiOiB7IFxuICAgICAgICAgICAgXCJjb250ZW50SWRzXCI6IHJlbW92ZWRUZXJtc0NvbGxlY3Rpb24gXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBhd2FpdCB0aGlzLmZyYW1lV29ya1NlcnZpY2UucmV0aXJlTXVsdGlwbGVUZXJtKHRoaXMuZGF0YS5mcmFtZXdvcmtJZCwgdGhpcy5kYXRhLmNvbHVtbkluZm8uY29kZSwgc3ViVGhlbWVSZXF1ZXN0KS50b1Byb21pc2UoKS50aGVuKGFzeW5jICgpID0+IHtcblxuICAgICAgICAgIC8vIGNvdW50ZXJSZXRpcmVTdWJUaGVtZSsrXG4gICAgICAgICAgY29uc3QgcGFyZW50Q29sdW1uQ29uZmlnRGF0YTphbnkgPSB0aGlzLmZyYW1lV29ya1NlcnZpY2UuZ2V0UHJldmlvdXNDYXRlZ29yeSh0aGlzLmRhdGEuY29sdW1uSW5mby5jb2RlKVxuICAgICAgICAgIGxldCBwYXJlbnRDb2w6IGFueSA9IHRoaXMuZnJhbWVXb3JrU2VydmljZS5zZWxlY3Rpb25MaXN0LmdldChwYXJlbnRDb2x1bW5Db25maWdEYXRhLmNvZGUpXG5cbiAgICAgICAgICAvLyBsZXQgc2VjdGlvbkxpc3QgPSB0aGlzLmZyYW1lV29ya1NlcnZpY2Uuc2VsZWN0aW9uTGlzdC5nZXQocGFyZW50Q29sdW1uQ29uZmlnRGF0YS5jb2RlKVxuICAgICAgICAgIFxuICAgICAgICAgIGNvbnN0IHNlY3Rpb25MaXN0Y2hpbGRyZW5MaXN0OiBhbnkgPSBfLmRpZmZlcmVuY2VXaXRoKHBhcmVudENvbC5jaGlsZHJlbiwgcmVtb3ZlZEV4aXN0aW5nLCAoYTphbnksIGI6IGFueSkgPT4gYS5pZGVudGlmaWVyID09PSBiLmlkZW50aWZpZXIpO1xuICAgICAgICAgIGNvbnN0IHNlY3Rpb25MaXN0QXNzb2NpYXRpb25MaXN0OiBhbnkgPSBfLmRpZmZlcmVuY2VXaXRoKHBhcmVudENvbC5hc3NvY2lhdGlvbnMsIHJlbW92ZWRFeGlzdGluZywgKGE6YW55LCBiOiBhbnkpID0+IGEuaWRlbnRpZmllciA9PT0gYi5pZGVudGlmaWVyKTtcbiAgICAgICAgIFxuICAgICAgICAgIHBhcmVudENvbFsnY2hpbGRyZW4nXSA9IHNlY3Rpb25MaXN0Y2hpbGRyZW5MaXN0XG4gICAgICAgICAgcGFyZW50Q29sWydhc3NvY2lhdGlvbnMnXSA9IHNlY3Rpb25MaXN0QXNzb2NpYXRpb25MaXN0XG4gICAgXG5cbiAgICAgICAgICB0aGlzLmZyYW1lV29ya1NlcnZpY2UudXBkYXRlRnJhbWV3b3JrTGlzdCh0aGlzLmRhdGEuY29sdW1uSW5mby5jb2RlLCBwYXJlbnRDb2wsIHJlbW92ZWRFeGlzdGluZywgJ2RlbGV0ZScpXG5cbiAgICAgICAgICB0aGlzLmRpYWxvZ0Nsb3NlKHsgdGVybTogW10sIGNyZWF0ZWQ6IHRydWUsIG11bHRpOnRydWUsIGNhbGxVcGRhdGU6IGZhbHNlIH0pXG4gICAgICAgICAgdGhpcy5mcmFtZVdvcmtTZXJ2aWNlLmN1cnJlbnRTZWxlY3Rpb24ubmV4dCh7IHR5cGU6IHBhcmVudENvbHVtbkNvbmZpZ0RhdGEuY29kZSwgZGF0YTogcGFyZW50Q29sLCBjYXJkUmVmOiBwYXJlbnRDb2wuY2FyZFJlZiB9KTtcbiAgICAgICAgICB0aGlzLmRpc2FibGVNdWx0aUNyZWF0ZSA9IGZhbHNlXG4gICAgICAgICAgdGhpcy5fc25hY2tCYXIub3BlbihgQ29tcGV0ZW5jeSB0aGVtZSB1cGRhdGVkIHN1Y2Nlc3NmdWxseS5gKVxuXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpcy5kaXNhYmxlTXVsdGlDcmVhdGUgPSBmYWxzZVxuICB9XG5cbiAgb25EaXNhYmxlVGhlbWUob3B0aW9uOiBhbnkpe1xuICAgIGNvbnN0IHBhcmVudENvbHVtbkNvbmZpZ0RhdGE6YW55ID0gdGhpcy5mcmFtZVdvcmtTZXJ2aWNlLmdldFByZXZpb3VzQ2F0ZWdvcnkodGhpcy5kYXRhLmNvbHVtbkluZm8uY29kZSlcbiAgICBsZXQgcGFyZW50Q29sOiBhbnkgPSB0aGlzLmZyYW1lV29ya1NlcnZpY2Uuc2VsZWN0aW9uTGlzdC5nZXQocGFyZW50Q29sdW1uQ29uZmlnRGF0YS5jb2RlKVxuICAgIGxldCByZXN1bHQgPSAtMVxuICAgIGlmKHBhcmVudENvbCAmJiBwYXJlbnRDb2wuY2hpbGRyZW4gJiYgcGFyZW50Q29sLmNoaWxkcmVuLmxlbmd0aCl7XG4gICAgICByZXN1bHQgPSBwYXJlbnRDb2wuY2hpbGRyZW4uZmluZEluZGV4KChlbGU6IGFueSkgPT4ge1xuICAgICAgICBpZiggKGVsZS5yZWZUeXBlID09PSAndGhlbWUnKSAgJiYgKHRoaXMuc2VsZXRlZENvbXBldGVuY3lBcmVhLmNvZGUgPT09IGVsZS5hZGRpdGlvbmFsUHJvcGVydGllcy5jb21wZXRlbmN5QXJlYS5jb2RlKSkge1xuICAgICAgICByZXR1cm4gIGVsZS5yZWZJZCA9PT0gb3B0aW9uLnJlZklkXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmKHJlc3VsdCA8IDApe1xuICAgICAgbGV0IGZvcm1BcnJheSA9IHRoaXMuY29tcGV0ZW5jeUZvcm0uZ2V0KCdjb21wVGhlbWVGaWVsZHMnKSBhcyBVbnR5cGVkRm9ybUFycmF5O1xuICAgICAgcmVzdWx0ID0gZm9ybUFycmF5LnZhbHVlLmZpbmRJbmRleCgoZm9ybUVsZTogYW55KSA9PiB7XG4gICAgICAgIGlmKGZvcm1FbGUuY29tcGV0ZW5jeVRoZW1lICYmIGZvcm1FbGUuY29tcGV0ZW5jeVRoZW1lLnJlZklkICl7XG4gICAgICAgICAgcmV0dXJuICBmb3JtRWxlLmNvbXBldGVuY3lUaGVtZS5yZWZJZCA9PT0gb3B0aW9uLnJlZklkXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9KTtcbiAgICAgfVxuIFxuICAgIC8vIFxuICAgIFxuICAgIHJldHVybiByZXN1bHQgPj0gMCA/IHRydWU6IGZhbHNlXG4gIH1cblxuXG4gIHVwZGF0ZUxvY2FsTGlzdChpdGVtOiBhbnksIHBhcmVudDogYW55LHNlbGVjdGVkVGVybUFycmF5OiBhbnksIHVwZGF0ZVR5cGU/OmFueSkge1xuICAgIGlmKGl0ZW0gJiYgaXRlbS5jaGlsZHJlbiAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgaWYodXBkYXRlVHlwZSA9PT0gJ2RlbGV0ZScpe1xuICAgICAgICBpdGVtLmNoaWxkcmVuLmZvckVhY2goKGl0bURhdGE6IGFueSkgPT4ge1xuICAgICAgICAgIGlmKGl0bURhdGEuaWRlbnRpZmllciA9PT0gcGFyZW50LmlkZW50aWZpZXIpIHtcbiAgICAgICAgICAgIC8vIGxldCBkaWZmZXJlbmNlRGF0YSA9IFtdXG4gICAgICAgICAgICAvLyBpZihpdG1EYXRhICYmIGl0bURhdGEuY2hpbGRyZW4gJiYgaXRtRGF0YS5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vICAgZGlmZmVyZW5jZURhdGEgID0gXy5kaWZmZXJlbmNlQnkoaXRtRGF0YS5jaGlsZHJlbixzZWxlY3RlZFRlcm1BcnJheSwgJ2lkZW50aWZpZXInKTtcbiAgICAgICAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyAgIGRpZmZlcmVuY2VEYXRhID0gc2VsZWN0ZWRUZXJtQXJyYXlcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgIC8vIGRpZmZlcmVuY2VEYXRhID0gdGhpcy5zZWxlY3RlZFRlcm1BcnJheVxuICAgICAgICAgICAgY29uc3QgYXNzb2NpYXRpb25MaXN0OiBhbnkgPSBfLmRpZmZlcmVuY2VXaXRoKGl0bURhdGEuYXNzb2NpYXRpb25zLHNlbGVjdGVkVGVybUFycmF5LCAoYTphbnksIGI6IGFueSkgPT4gYS5pZGVudGlmaWVyID09PSBiLmlkZW50aWZpZXIpO1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW5MaXN0OiBhbnkgPSBfLmRpZmZlcmVuY2VXaXRoKGl0bURhdGEuY2hpbGRyZW4sIHNlbGVjdGVkVGVybUFycmF5LCAoYTphbnksIGI6IGFueSkgPT4gYS5pZGVudGlmaWVyID09PSBiLmlkZW50aWZpZXIpO1xuICAgICAgICAgICAgaXRtRGF0YVsnYXNzb2NpYXRpb25zJ10gPSBhc3NvY2lhdGlvbkxpc3RcbiAgICAgICAgICAgIGl0bURhdGFbJ2NoaWxkcmVuJ10gPSBjaGlsZHJlbkxpc3RcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoaXRtRGF0YS5jaGlsZHJlbikge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVMb2NhbExpc3QoaXRtRGF0YSwgcGFyZW50LHNlbGVjdGVkVGVybUFycmF5LHVwZGF0ZVR5cGUpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXRlbS5jaGlsZHJlbi5mb3JFYWNoKChpdG1EYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICBpZihpdG1EYXRhLmlkZW50aWZpZXIgPT09IHBhcmVudC5pZGVudGlmaWVyKSB7XG4gICAgICAgICAgICBsZXQgZGlmZmVyZW5jZURhdGEgPSBbXVxuICAgICAgICAgICAgaWYoaXRtRGF0YSAmJiBpdG1EYXRhLmNoaWxkcmVuICYmIGl0bURhdGEuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGRpZmZlcmVuY2VEYXRhICA9IF8uZGlmZmVyZW5jZUJ5KHNlbGVjdGVkVGVybUFycmF5LGl0bURhdGEuY2hpbGRyZW4sICdpZGVudGlmaWVyJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBkaWZmZXJlbmNlRGF0YSA9IHNlbGVjdGVkVGVybUFycmF5XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBkaWZmZXJlbmNlRGF0YSA9IHRoaXMuc2VsZWN0ZWRUZXJtQXJyYXlcbiAgICAgICAgICAgIGl0bURhdGFbJ2Fzc29jaWF0aW9ucyddID0gaXRtRGF0YSAmJiBpdG1EYXRhLmFzc29jaWF0aW9ucyA/Wy4uLml0bURhdGEuYXNzb2NpYXRpb25zLCAuLi5kaWZmZXJlbmNlRGF0YV06ZGlmZmVyZW5jZURhdGFcbiAgICAgICAgICAgIGl0bURhdGFbJ2NoaWxkcmVuJ10gPSBpdG1EYXRhICYmIGl0bURhdGEuY2hpbGRyZW4gP1suLi5pdG1EYXRhLmNoaWxkcmVuLCAuLi5kaWZmZXJlbmNlRGF0YV06ZGlmZmVyZW5jZURhdGFcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoaXRtRGF0YS5jaGlsZHJlbikge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVMb2NhbExpc3QoaXRtRGF0YSwgcGFyZW50LCBzZWxlY3RlZFRlcm1BcnJheSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZGVsZXRlVGhlbWUoKSB7XG4gICAgdGhpcy5kaXNhYmxlTXVsdGlDcmVhdGUgPSB0cnVlXG4gICAgY29uc3QgY2FyZERhdGEgPSB0aGlzLmRhdGEuY2hpbGRyZW5EYXRhXG4gICAgbGV0IHJlbW92ZWRMaXN0VGVybSA9IFtdXG4gICAgcmVtb3ZlZExpc3RUZXJtLnB1c2goY2FyZERhdGEuY29kZSlcbiAgICBsZXQgc3ViVGhlbWVSZXF1ZXN0ID17XG4gICAgICBcInJlcXVlc3RcIjogeyBcbiAgICAgICAgXCJjb250ZW50SWRzXCI6IHJlbW92ZWRMaXN0VGVybVxuICAgICAgfVxuICAgIH1cbiAgICBcbiAgICB0aGlzLmZyYW1lV29ya1NlcnZpY2UucmV0aXJlTXVsdGlwbGVUZXJtKHRoaXMuZnJhbWVXb3JrU2VydmljZS5mcmFtZXdvcmtJZCwgY2FyZERhdGEuY2F0ZWdvcnksIHN1YlRoZW1lUmVxdWVzdCkudG9Qcm9taXNlKCkudGhlbihhc3luYyAoKSA9PiB7XG4gICAgICBcbiAgICAgIGxldCByZW1vdmVkRXhpc3RpbmcgPSBbY2FyZERhdGFdXG4gICAgICBjb25zdCBwYXJlbnRDb2x1bW5Db25maWdEYXRhOmFueSA9IHRoaXMuZnJhbWVXb3JrU2VydmljZS5nZXRQcmV2aW91c0NhdGVnb3J5KGNhcmREYXRhLmNhdGVnb3J5KVxuICAgICAgbGV0IHBhcmVudENvbDogYW55ID0gdGhpcy5mcmFtZVdvcmtTZXJ2aWNlLnNlbGVjdGlvbkxpc3QuZ2V0KHBhcmVudENvbHVtbkNvbmZpZ0RhdGEuY29kZSlcbiAgICBcbiAgICAgIGNvbnN0IHNlY3Rpb25MaXN0Y2hpbGRyZW5MaXN0OiBhbnkgPSBfLmRpZmZlcmVuY2VXaXRoKHBhcmVudENvbC5jaGlsZHJlbiwgcmVtb3ZlZEV4aXN0aW5nLCAoYTphbnksIGI6IGFueSkgPT4gYS5pZGVudGlmaWVyID09PSBiLmlkZW50aWZpZXIpO1xuICAgICAgY29uc3Qgc2VjdGlvbkxpc3RBc3NvY2lhdGlvbkxpc3Q6IGFueSA9IF8uZGlmZmVyZW5jZVdpdGgocGFyZW50Q29sLmFzc29jaWF0aW9ucywgcmVtb3ZlZEV4aXN0aW5nLCAoYTphbnksIGI6IGFueSkgPT4gYS5pZGVudGlmaWVyID09PSBiLmlkZW50aWZpZXIpO1xuICAgIFxuICAgICAgcGFyZW50Q29sWydjaGlsZHJlbiddID0gc2VjdGlvbkxpc3RjaGlsZHJlbkxpc3RcbiAgICAgIHBhcmVudENvbFsnYXNzb2NpYXRpb25zJ10gPSBzZWN0aW9uTGlzdEFzc29jaWF0aW9uTGlzdFxuICAgICAgdGhpcy5mcmFtZVdvcmtTZXJ2aWNlLnVwZGF0ZUZyYW1ld29ya0xpc3QoY2FyZERhdGEuY2F0ZWdvcnksIHBhcmVudENvbCwgcmVtb3ZlZEV4aXN0aW5nLCAnZGVsZXRlJylcbiAgICAgIHRoaXMuZnJhbWVXb3JrU2VydmljZS5jdXJyZW50U2VsZWN0aW9uLm5leHQoeyB0eXBlOiBwYXJlbnRDb2x1bW5Db25maWdEYXRhLmNvZGUsIGRhdGE6IHBhcmVudENvbCwgY2FyZFJlZjogcGFyZW50Q29sLmNhcmRSZWYgfSlcbiAgICAgIHRoaXMuZGlhbG9nQ2xvc2Uoe30pXG4gICAgICB0aGlzLmRpc2FibGVNdWx0aUNyZWF0ZSA9IGZhbHNlXG4gICAgICB0aGlzLl9zbmFja0Jhci5vcGVuKGBDb21wZXRlbmN5IHRoZW1lIGRlbGV0ZWQgc3VjY2Vzc2Z1bGx5LmApXG4gICAgfSwoKF9lcnI6IGFueSk9PiB7XG4gICAgICB0aGlzLmRpc2FibGVNdWx0aUNyZWF0ZSA9IGZhbHNlXG4gICAgICB0aGlzLl9zbmFja0Jhci5vcGVuKGBDb21wZXRlbmN5IHRoZW1lIGRlbGV0ZSBmYWlsZWQuYClcbiAgICB9KSlcbiAgfVxuXG5cbiAgLy8gZ2V0dGVyIG1ldGhvZHNcblxuICBnZXQgY29tcFRoZW1lRmllbGRzKCk6IFVudHlwZWRGb3JtQXJyYXkge1xuICAgIHJldHVybiB0aGlzLmNvbXBldGVuY3lGb3JtLmdldCgnY29tcFRoZW1lRmllbGRzJykgYXMgVW50eXBlZEZvcm1BcnJheTtcbiAgfVxuXG59XG4iLCJcbjxkaXYgY2xhc3M9XCJcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGlzYWJsZU11bHRpQ3JlYXRlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGZsZXgtMSB3LTEwMCBhYnNvbHV0ZSBsb2FkZXItYmcgaXRlbXMtY2VudGVyIHB0LTUgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICA8bWF0LXNwaW5uZXIgY2xhc3M9XCJkaXNwbGF5LWlubGluZS1ibG9jayBtYi01XCIgW2RpYW1ldGVyXT1cIjUwXCIgW3N0cm9rZVdpZHRoXT1cIjNcIj48L21hdC1zcGlubmVyPlxuICAgICAgICAgIDwhLS0gPHA+e3tsb2FkZXJNc2d9fTwvcD4gLS0+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGlhbG9nTmV3XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwibW9kYWxUaXRsZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIGkxOG4tYXJpYS1sYWJlbCBhcmlhLWxhYmVsPVwiYWN0aW9uIGl0ZW1zXCJcbiAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJjYXJkTWVudVwiIFttYXRNZW51VHJpZ2dlckRhdGFdPVwieydkYXRhJzpkYXRhfVwiIGNsYXNzPVwiYWN0aW9uLWJ0blwiPlxuICAgICAgICAgICAgPG1hdC1pY29uPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC00XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB0ZXJtIG9mIGRhdGE/LnNlbGVjdGVkUGFyZW50VGVybXNcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGVybS5jYXRlZ29yeSAhPT0gJ2NvbXBldGVuY3knXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LTEgZmxleC1jb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJuYW1lXCIgY2xhc3M9XCJtYXJnaW4tcmVtb3ZlLWJvdHRvbSBmb3JtLWxhYmVsXCIgYXJpYS1sYWJlbD1cIkZpcnN0IG5hbWUgbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZyYW1lV29ya1NlcnZpY2UuZ2V0Q29uZmlnKHRlcm0uY2F0ZWdvcnkpLmxhYmVsTmFtZX19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJmbGV4LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT1cIm5hbWVcIiBpZD1cIm5hbWVcIiAjbmFtZSBwbGFjZWhvbGRlcj1cInt7YXBwX3N0cmluZ3MubmFtZX19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInRlcm0ubmFtZVwiIGRpc2FibGVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3ctZGl2aWRlclwiPjwvZGl2PlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29tcGV0ZW5jeUZvcm1cIj5cbiAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiY29tcGV0ZW5jeUZvcm1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwibmFtZVwiIGNsYXNzPVwibWFyZ2luLXJlbW92ZS1ib3R0b20gZm9ybS1sYWJlbCByZXF1aXJlZFwiIGFyaWEtbGFiZWw9XCJGaXJzdCBuYW1lIGxhYmUgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eydTZWxlY3QgQXJlYSd9fVxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1yYWRpby1ncm91cCBjbGFzcz1cImNvbXBldGVuY3ktZ3JvdXBcIiBhcmlhLWxhYmVsPVwiU2VsZWN0IGFuIG9wdGlvblwiIGZvcm1Db250cm9sTmFtZT1cImNvbXBBcmVhXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1yYWRpby1idXR0b24gIFtkaXNhYmxlZF09XCJkYXRhPy5jb2x1bW5JbmZvPy5jb2RlID09PSAnc3VidGhlbWUnIHx8IGRhdGEub3Blbk1vZGUgPT09J3ZpZXcnXCIgY2xhc3M9XCJsZWFybmluZy1zZWN0aW9uXCIgW25nQ2xhc3NdPVwieydhY3RpdmUtYnRuJzppdGVtPy5jb2RlID09PSBzZWxldGVkQ29tcGV0ZW5jeUFyZWE/LmNvZGV9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY29tcGV0ZW5jeUFyZWE/LmNoaWxkcmVuXCIgW3ZhbHVlXT1cIml0ZW1cIiBbY2hlY2tlZF09XCJpdGVtPy5jb2RlID09PSBzZWxldGVkQ29tcGV0ZW5jeUFyZWE/LmNvZGVcIiAoY2hhbmdlKT1cImNsZWFyU2VsZWN0ZWRUaGVtZXMoaXRlbSlcIj57e2l0ZW0ubmFtZX19PC9tYXQtcmFkaW8tYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtcmFkaW8tZ3JvdXA+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhPy5tb2RlID09PSAnbXVsdGktY3JlYXRlJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1lbmQgbWItNFwiID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YT8uY29sdW1uSW5mbz8uY29kZSAhPT0gJ3N1YnRoZW1lJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm1hdC1idXR0b24gZmxleCBpdGVtcy1jZW50ZXIgY3JlYXRlLWFjY29yZGlvbi1idG5cIiAqbmdJZj1cImRhdGEubW9kZSA9PT0gJ211bHRpLWNyZWF0ZSdcIiAoY2xpY2spPVwiYWRkQ29tcGV0ZW5jeVRoZW1lKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1yLTIgbWF0LWljb24tY3VzdG9tIFwiPmFkZF9jaXJjbGVfb3V0bGluZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGQgbW9yZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB7e2RhdGEuY29sdW1uSW5mby5uYW1lfX0gIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1hY2NvcmRpb24gZm9ybUFycmF5TmFtZT1cImNvbXBUaGVtZUZpZWxkc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBjb21wZXRlbmN5Rm9ybT8uZ2V0KCdjb21wVGhlbWVGaWVsZHMnKVsnY29udHJvbHMnXTsgbGV0IGkgPSBpbmRleDsgbGV0IGlzRmlyc3QgPSBmaXJzdFwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWFyZ2luLWJvdHRvbS1sIGNvbXAtdGhlbWUtZmllbGRzXCIgW2Zvcm1Hcm91cE5hbWVdPVwiaVwiIFtleHBhbmRlZF09XCJpc0ZpcnN0XCI+ICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tjb21wZXRlbmN5Rm9ybT8uZ2V0KCdjb21wVGhlbWVGaWVsZHMnKVsnY29udHJvbHMnXVtpXVsnY29udHJvbHMnXT8uY29tcGV0ZW5jeVRoZW1lPy52YWx1ZT8ubmFtZX19IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YT8uY29sdW1uSW5mbz8uY29kZSAhPT0gJ3N1YnRoZW1lJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCJkYXRhLm1vZGUgPT09ICdtdWx0aS1jcmVhdGUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlQ29tcEZpZWxkcyhpKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdC1pY29uLWN1c3RvbSBcIj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1jb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC13cmFwcGVyIG1hcmdpbi10b3Atc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC00IFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC0xIGZsZXgtY29sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwibmFtZVwiIGNsYXNzPVwibWFyZ2luLXJlbW92ZS1ib3R0b20gZm9ybS1sYWJlbCByZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkZpcnN0IG5hbWUgbGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2RhdGEub3Blbk1vZGUgIT09ICd2aWV3Jz8gJ1NlbGVjdCBDb21wZXRlbmN5IFRoZW1lJzogJ0NvbXBldGVuY3kgVGhlbWUgTmFtZSd9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwiZmxleC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgW2Rpc2FibGVkXT1cImRhdGE/LmNvbHVtbkluZm8/LmNvZGUgPT09ICdzdWJ0aGVtZScgfHwgZGF0YS5vcGVuTW9kZSA9PT0ndmlldydcIiBwbGFjZWhvbGRlcj1cIkNob29zZSB0aGUgQ29tcGV0ZW5jeSBUaGVtZVwiIGZvcm1Db250cm9sTmFtZT1cImNvbXBldGVuY3lUaGVtZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZmlsdGVyZWRhbGxDb21wZXRlbmN5VGhlbWVcIiAgW3ZhbHVlXT1cIm9wdGlvblwiIFtkaXNhYmxlZF09XCJvbkRpc2FibGVUaGVtZShvcHRpb24pIHx8IGRhdGEub3Blbk1vZGUgPT09J3ZpZXcnXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uU2VsZWN0aW9uQ2hhbmdlKT1cIk9uVGhlbWVTZWxlY3Rpb24oJGV2ZW50LCBpLCBvcHRpb24pXCIgID57e29wdGlvbi5uYW1lfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3B0aW9uLnJlZklkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtbC0yIHJlZi1pZFwiPih7e29wdGlvbi5yZWZJZH19KTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImlzVGVybUV4aXN0XCI+e3thcHBfc3RyaW5ncy5hbHJlYWR5RXhpc3R9fTwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWNvbCBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJmbmFtZVwiIGNsYXNzPVwibWFyZ2luLXJlbW92ZS1ib3R0b20gZm9ybS1sYWJlbCByZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMThuPVwiRmlyc3QgTmFtZSBsYWJlbHxMYWJlbCB3aGljaCBleHBsYWlucyB0aGUgdXNlciB0byBlbnRlciBmaXJzdCBuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkxOG4tYXJpYS1sYWJlbCBhcmlhLWxhYmVsPVwiRmlyc3QgbmFtZSBsYWJlbFwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2RhdGEub3Blbk1vZGUgIT09ICd2aWV3Jz8gJ1NlbGVjdCBDb21wZXRlbmN5IFN1Yi1UaGVtZSc6ICdDb21wZXRlbmN5IFN1Yi1UaGVtZSBOYW1lJ319XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cImZsZXgtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgcGxhY2Vob2xkZXI9XCJDaG9vc2UgdGhlIENvbXBldGVuY3kgVGhlbWVcIiBmb3JtQ29udHJvbE5hbWU9XCJjb21wZXRlbmN5U3ViVGhlbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGZpbHRlcmVkYWxsQ29tcGV0ZW5jeVN1YlRoZW1lXCIgW3ZhbHVlXT1cIm9wdGlvblwiPnt7b3B0aW9uLm5hbWV9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ge3tjb21wZXRlbmN5Rm9ybT8uZ2V0KCdjb21wVGhlbWVGaWVsZHMnKVsnY29udHJvbHMnXVtpXVsnY29udHJvbHMnXT8uY29tcGV0ZW5jeVN1YlRoZW1lPy52YWx1ZSB8anNvbn19IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctZnVsbCBmaWVsZC1oZWlnaHRcIiA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBjbGFzcz1cIiBwbGFjZWhvbGRlci10ZXh0XCIgcGxhY2Vob2xkZXI9XCJDaG9vc2UgdGhlIENvbXBldGVuY3kgU3ViLVRoZW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY29tcGV0ZW5jeVN1YlRoZW1lXCIgbXVsdGlwbGUgW2Rpc2FibGVkXT1cImRhdGEub3Blbk1vZGUgPT09J3ZpZXcnXCIgcGFuZWxDbGFzcz1cImZ1bGwtd2lkdGgtcGFuZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBbbmdDbGFzc109XCJ7J2Rpc2JhbGVkU2VsZWN0Jzppc0hpZGVEYXRhfVwiIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdC10cmlnZ2VyID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAtbGlzdGJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcCAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjb21wZXRlbmN5Rm9ybT8uZ2V0KCdjb21wVGhlbWVGaWVsZHMnKVsnY29udHJvbHMnXVtpXVsnY29udHJvbHMnXT8uY29tcGV0ZW5jeVN1YlRoZW1lPy52YWx1ZVwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlbW92ZWQpPVwib25UZXJtUmVtb3ZlKGl0ZW0sIGkpXCIgW2Rpc2FibGVkXT1cImRhdGEub3Blbk1vZGUgPT09J3ZpZXcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnc3ViLXRoZW1lLWRpc2FibGUnOiBkYXRhPy5vcGVuTW9kZSA9PT0ndmlldyd9XCIgIFtyZW1vdmFibGVdPVwiZGF0YT8ub3Blbk1vZGUgPT09J3ZpZXcnPyBmYWxzZTogdHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiA+e3sgaXRlbS5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0Q2hpcFJlbW92ZT5jYW5jZWw8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHt7Y29tcGV0ZW5jeUZvcm0/LmdldCgnY29tcFRoZW1lRmllbGRzJykgfGpzb259fSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bWF0LW9wdGdyb3VwPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmbG9hdExhYmVsPVwibmV2ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAjc2VhcmNoIGF1dG9jb21wbGV0ZT1cIm9mZlwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoXCIgKGtleWRvd24uc3BhY2UpPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY29tcGV0ZW5jeVN1YlRoZW1lXCIgbWF0SW5wdXQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0Z3JvdXA+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGdyb3VwICpuZ0lmPVwiZmlsdGVyZWRhbGxDb21wZXRlbmN5U3ViVGhlbWUubGVuZ3RoID09PSAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5ObyByZXN1bHRzIGZvdW5kITwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRncm91cD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHJlcXVlc3RPYmpEYXRhLnByZWZlcnJlZFByb3ZpZGVyXCIgW3ZhbHVlXT1cIm9wdGlvbi5wcm92aWRlck5hbWVcIj57e29wdGlvbi5wcm92aWRlck5hbWV9fTwvbWF0LW9wdGlvbj4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBjb21wZXRlbmN5Rm9ybT8uZ2V0KCdjb21wVGhlbWVGaWVsZHMnKVsnY29udHJvbHMnXVtpXVsnY29udHJvbHMnXT8uY29tcGV0ZW5jeVRoZW1lPy52YWx1ZT8uY2hpbGRyZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb25cIiBjbGFzcz1cIm1hdC1vcHRpb24tbGlzdFwiPnt7b3B0aW9uPy5uYW1lfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvbj8ucmVmSWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWwtMiByZWYtaWRcIj4oe3tvcHRpb24/LnJlZklkfX0pPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxtYXQtZXJyb3IgKm5nSWY9XCJyZXF1ZXN0Rm9ybS5jb250cm9sc1sncHJvdmlkZXJUZXh0J10uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGxlYXNlIHNlbGVjdCB1cCB0byBmaXZlIHByZWZlcnJlZCBwcm92aWRlcnMgZm9yIHRoZSByZXF1ZXN0LlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtYWNjb3JkaW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGZvb3RlciBjbGFzcz1cImFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwiZGVmYXVsdFwiIHR5cGU9XCJyZXNldFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkaWFsb2dDbG9zZSgnJylcIj57e2FwcF9zdHJpbmdzLmNhbmNlbH19PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGE/Lm1vZGUgPT09ICdjcmVhdGUnICYmIGRhdGEub3Blbk1vZGUgIT09J3ZpZXcnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgdHlwZT1cInN1Ym1pdFwiIGNka0ZvY3VzSW5pdGlhbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbXBldGVuY3lGb3JtPy5pbnZhbGlkXCIgKm5nSWY9XCIhZGlzYWJsZUNyZWF0ZVwiPnt7YXBwX3N0cmluZ3MuY3JlYXRlfX08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YT8ubW9kZSA9PT0gJ211bHRpLWNyZWF0ZScgJiYgZGF0YS5vcGVuTW9kZSAhPT0ndmlldydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGE/LmNvbHVtbkluZm8/LmNvZGUgIT09ICdzdWJ0aGVtZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiIGNka0ZvY3VzSW5pdGlhbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbXBldGVuY3lGb3JtLmludmFsaWQgfHwgZGlzYWJsZU11bHRpQ3JlYXRlXCIgKm5nSWY9XCIhZGlzYWJsZUNyZWF0ZVwiIChjbGljayk9XCJtdWx0aUNyZWF0ZShjb21wZXRlbmN5Rm9ybSwgZGF0YSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7YXBwX3N0cmluZ3MuY3JlYXRlfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGE/LmNvbHVtbkluZm8/LmNvZGUgPT09ICdzdWJ0aGVtZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbXBldGVuY3lGb3JtPy5nZXQoJ2NvbXBUaGVtZUZpZWxkcycpWydjb250cm9scyddWzBdWydjb250cm9scyddPy5jb21wZXRlbmN5U3ViVGhlbWU/LnZhbHVlPy5sZW5ndGg7ZWxzZSB1cGRhdGVCdG5cIj4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCIgY2RrRm9jdXNJbml0aWFsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbXBldGVuY3lGb3JtLmludmFsaWQgfHwgZGlzYWJsZU11bHRpQ3JlYXRlXCIgKm5nSWY9XCIhZGlzYWJsZUNyZWF0ZVwiIChjbGljayk9XCJtdWx0aUNyZWF0ZVN1YlRoZW1lKGNvbXBldGVuY3lGb3JtLCBkYXRhKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7YXBwX3N0cmluZ3MudXBkYXRlfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPC9uZy1jb250YWluZXI+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxuZy10ZW1wbGF0ZSAjdXBkYXRlQnRuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiIGNka0ZvY3VzSW5pdGlhbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb21wZXRlbmN5Rm9ybS5pbnZhbGlkIHx8IGRpc2FibGVNdWx0aUNyZWF0ZVwiICpuZ0lmPVwiIWRpc2FibGVDcmVhdGVcIiAoY2xpY2spPVwibXVsdGlDcmVhdGVTdWJUaGVtZShjb21wZXRlbmN5Rm9ybSwgZGF0YSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2FwcF9zdHJpbmdzLmRlbGV0ZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGE/Lm1vZGUgPT09ICdlZGl0JyAmJiBkYXRhLm9wZW5Nb2RlICE9PSd2aWV3J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHR5cGU9XCJidXR0b25cIiBjZGtGb2N1c0luaXRpYWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ1cGRhdGVUZXJtRGF0YShjb21wZXRlbmN5Rm9ybSwgZGF0YSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbXBldGVuY3lGb3JtPy5pbnZhbGlkIHx8IGRpc2FibGVVcGRhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhZGlzYWJsZUNyZWF0ZVwiPnt7YXBwX3N0cmluZ3MudXBkYXRlfX08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9vdGVyPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIFxuICAgIDwvZGl2PlxuICAgIFxuICAgIFxuICAgIDwhLS0gVGl0bGUgb2YgdGhlIHBvcHVwIC0tPlxuICAgIDxuZy10ZW1wbGF0ZSAjbW9kYWxUaXRsZT5cbiAgICAgICAgPCEtLSA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YT8ubW9kZSA9PT0gJ2NyZWF0ZScgfHwgZGF0YT8ubW9kZSA9PT0gJ211bHRpLWNyZWF0ZSdcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaWFsb2ctdGl0bGVcIiBtYXQtZGlhbG9nLXRpdGxlPnt7ZGF0YS5jb2x1bW5JbmZvLm5hbWUgPT09ICdUaGVtZScgPyBhcHBfc3RyaW5ncy5hZGRDb21wZXRlbmN5IDogYXBwX3N0cmluZ3MuY3JlYXRlTmV3fX0ge3tkYXRhLmNvbHVtbkluZm8ubmFtZX19PC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPiAtLT5cbiAgICAgICAgPCEtLSB7e2RhdGEgfGpzb259fSAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGE/Lm1vZGUgPT09ICdjcmVhdGUnIHx8IGRhdGE/Lm1vZGUgPT09ICdtdWx0aS1jcmVhdGUnXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGlhbG9nLXRpdGxlXCIgbWF0LWRpYWxvZy10aXRsZT57e2dldENyZWF0ZU5hbWUoZGF0YSl9fTwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPCEtLSA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YT8ubW9kZSA9PT0gJ3ZpZXcnXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGlhbG9nLXRpdGxlXCIgbWF0LWRpYWxvZy10aXRsZT5WaWV3IHt7ZGF0YS5jb2x1bW5JbmZvLm5hbWV9fTwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj4gLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhPy5tb2RlID09PSAnZWRpdCdcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaWFsb2ctdGl0bGVcIiBtYXQtZGlhbG9nLXRpdGxlPnt7YXBwX3N0cmluZ3MuZWRpdH19IHt7ZGF0YS5jb2x1bW5JbmZvLm5hbWV9fTwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG5cblxuPG1hdC1tZW51ICNjYXJkTWVudT1cIm1hdE1lbnVcIiBjbGFzcz1cIm1lbnUtc2VjXCI+XG4gICAgPG5nLXRlbXBsYXRlIG1hdE1lbnVDb250ZW50IGxldC1yb3dEYXRhPVwiZGF0YVwiIGxldC1jYXJkUmVmPVwiY2FyZFJlZlwiPlxuICAgICAgICA8YnV0dG9uICAoY2xpY2spPVwiZGVsZXRlVGhlbWUoKVwiXG4gICAgICAgICAgICBtYXQtbWVudS1pdGVtIG5hbWU9XCJjaGFubmVsLWFuYWx5dGljcy1idXR0b25cIiBjbGFzcz1cIndzLW1hdC1wcmltYXJ5LXRleHRcIiBpMThuLWFyaWEtbGFiZWxcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJBbmFseXRpY3NcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuICAgICAgICAgICAgPHNwYW4+RGVsZXRlPC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuPC9tYXQtbWVudT4iXX0=
824
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXRlcm0tZnJvbS1mcmFtZXdvcmsuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RyZWUtaGllcmFyY2h5L3NyYy9saWIvY29tcG9uZW50cy9jcmVhdGUtdGVybS1mcm9tLWZyYW1ld29yay9jcmVhdGUtdGVybS1mcm9tLWZyYW1ld29yay5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvdHJlZS1oaWVyYXJjaHkvc3JjL2xpYi9jb21wb25lbnRzL2NyZWF0ZS10ZXJtLWZyb20tZnJhbWV3b3JrL2NyZWF0ZS10ZXJtLWZyb20tZnJhbWV3b3JrLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sRUFBOEUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEgsT0FBTyxFQUFFLHNCQUFzQixJQUFJLGVBQWUsRUFBb0UsTUFBTSxpQ0FBaUMsQ0FBQztBQUU5SixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFHOUMsT0FBTyxLQUFLLFlBQVksTUFBTSw4QkFBOEIsQ0FBQztBQUc3RCxPQUFPLENBQUMsTUFBTSxRQUFRLENBQUE7QUFFdEIsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sb0RBQW9ELENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUWhHLE1BQU0sT0FBTyxnQ0FBZ0M7SUFnQzNDLFlBQ1MsU0FBeUQsRUFDaEMsSUFBUyxFQUNqQyxNQUFpQixFQUNsQixnQkFBa0MsRUFDakMsRUFBc0IsRUFDdEIsU0FBc0I7UUFMdkIsY0FBUyxHQUFULFNBQVMsQ0FBZ0Q7UUFDaEMsU0FBSSxHQUFKLElBQUksQ0FBSztRQUNqQyxXQUFNLEdBQU4sTUFB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QUFDLGlCQUFpQixDQUFxQixDQUFDO0lBQ3hFLENBQUM7K0dBcDhCVSxnQ0FBZ0Msb0RBa0NqQyxlQUFlO21HQWxDZCxnQ0FBZ0Msc0VDcEI3QywrMWlCQW1PVzs7NEZEL01FLGdDQUFnQztrQkFMNUMsU0FBUzsrQkFDRSxnQ0FBZ0M7OzBCQXNDdkMsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVW50eXBlZEZvcm1BcnJheSwgVW50eXBlZEZvcm1CdWlsZGVyLCBVbnR5cGVkRm9ybUNvbnRyb2wsIFVudHlwZWRGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNQVRfTEVHQUNZX0RJQUxPR19EQVRBIGFzIE1BVF9ESUFMT0dfREFUQSwgTWF0TGVnYWN5RGlhbG9nIGFzIE1hdERpYWxvZywgTWF0TGVnYWN5RGlhbG9nUmVmIGFzIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xlZ2FjeS1kaWFsb2cnO1xuaW1wb3J0IHsgTWF0TGVnYWN5U25hY2tCYXIgYXMgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9sZWdhY3ktc25hY2stYmFyJztcbmltcG9ydCB7IGxhYmVscyB9IGZyb20gJy4uLy4uL2xhYmVscy9zdHJpbmdzJztcbmltcG9ydCB7IEZyYW1ld29ya1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mcmFtZXdvcmsuc2VydmljZSc7XG5pbXBvcnQgeyBOU0ZyYW1ld29yayB9IGZyb20gJy4uLy4uL21vZGVscy9mcmFtZXdvcmsubW9kZWwnO1xuaW1wb3J0ICogYXMgYXBwQ29uc3RhbnRzIGZyb20gJy4uLy4uL2NvbnN0YW50cy9hcHAtY29uc3RhbnQnO1xuaW1wb3J0IHsgQ2FyZCB9IGZyb20gJy4uLy4uL21vZGVscy92YXJpYWJsZS10eXBlLm1vZGVsJztcbi8qIHRzbGludDpkaXNhYmxlICovXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnXG4vLyBpbXBvcnQgeyByZXNvbHZlIH0gZnJvbSAndXJsJztcbmltcG9ydCB7IENvbmZvcmFtdGlvblBvcHVwQ29tcG9uZW50IH0gZnJvbSAnLi4vY29uZm9yYW10aW9uLXBvcHVwL2NvbmZvcmFtdGlvbi1wb3B1cC5jb21wb25lbnQnO1xuLyogdHNsaW50OmVuYWJsZSAqL1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItY3JlYXRlLXRlcm0tZnJvbS1mcmFtZXdvcmsnLFxuICB0ZW1wbGF0ZVVybDogJy4vY3JlYXRlLXRlcm0tZnJvbS1mcmFtZXdvcmsuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jcmVhdGUtdGVybS1mcm9tLWZyYW1ld29yay5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIENyZWF0ZVRlcm1Gcm9tRnJhbWV3b3JrQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBhcHBfc3RyaW5ncyA9IGxhYmVscztcbiAgZW52aXJvbm1lbnQ6IGFueVxuXG4gIHNlbGVjdGVkVGVybTogQ2FyZCA9IHt9O1xuICBzZWxlY3RlZFRlcm1BcnJheSA6IGFueSA9IFtdXG4gIGtjbUNvbmZpZ0RhdGE6IGFueVxuICBzZWxlY3RlZFRoZW1lRGF0YTogYW55XG5cblxuICBpc1Rlcm1FeGlzdDogYm9vbGVhbiA9IGZhbHNlO1xuICBkaXNhYmxlQ3JlYXRlOiBib29sZWFuID0gZmFsc2U7XG4gIGRpc2FibGVNdWx0aUNyZWF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBkaXNhYmxlVXBkYXRlOiBib29sZWFuID0gZmFsc2U7XG5cblxuICBjb21wZXRlbmN5Rm9ybSE6IFVudHlwZWRGb3JtR3JvdXBcblxuXG4gIGtjbUxpc3QgOiBhbnk9IG5ldyBNYXA8c3RyaW5nLCBOU0ZyYW1ld29yay5JQ29sdW1uVmlldz4oKTtcbiAgLy8gY2F0ZWdvcmllc0hhc2g6IGFueVxuICBjb21wZXRlbmN5QXJlYTogYW55XG4gIHNlbGVjdGVkQ2FyZENvbXBUaGVtZURhdGE6IGFueVxuXG4gIGFsbENvbXBldGVuY3k6YW55W109W11cbiAgc2VsZXRlZENvbXBldGVuY3lBcmVhOiBhbnlcbiAgYWxsQ29tcGV0ZW5jeVRoZW1lOmFueVtdPVtdXG4gIGZpbHRlcmVkYWxsQ29tcGV0ZW5jeVRoZW1lOmFueVtdPVtdXG4gIGFsbENvbXBldGVuY3lTdWJ0aGVtZTphbnlbXT1bXVxuICBmaWx0ZXJlZGFsbENvbXBldGVuY3lTdWJUaGVtZTphbnlbXT1bXVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxDcmVhdGVUZXJtRnJvbUZyYW1ld29ya0NvbXBvbmVudD4sXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBhbnksXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICBwdWJsaWMgZnJhbWVXb3JrU2VydmljZTogRnJhbWV3b3JrU2VydmljZSxcbiAgICBwcml2YXRlIGZiOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBfc25hY2tCYXI6IE1hdFNuYWNrQmFyLFxuICApIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZW52aXJvbm1lbnQgPSB0aGlzLmZyYW1lV29ya1NlcnZpY2UuZ2V0RW52aXJvbWVudCgpXG4gICAgdGhpcy5nZXRDb21wdGVuY3lEYXRhKClcbiAgICB0aGlzLmtjbUNvbmZpZ0RhdGEgPSB0aGlzLmZyYW1lV29ya1NlcnZpY2UuZ2V0Q29uZmlnQnlGcmFtZVdvcmtJZCh0aGlzLmVudmlyb25tZW50LmtjbUZyYW1ld29ya05hbWUpXG4gICAgdGhpcy5jb21wZXRlbmN5Rm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgY29tcEFyZWE6WycnLFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgY29tcFRoZW1lRmllbGRzOiB0aGlzLmZiLmFycmF5KFt0aGlzLmNyZWF0ZUNvbXBUaGVtZUZpZWxkcygpXSlcbiAgICB9KVxuXG4gIH1cblxuICBnZXRDb21wdGVuY3lEYXRhKCl7XG4gICAgdGhpcy5mcmFtZVdvcmtTZXJ2aWNlLmdldEZyYW1ld29ya1JlYWQodGhpcy5lbnZpcm9ubWVudC5rY21GcmFtZXdvcmtOYW1lKS5zdWJzY3JpYmUoKGRhdGEpPT57XG4gICAgIGlmKGRhdGEuY2F0ZWdvcmllcykge1xuICAgICAgdGhpcy5mb3JtYXRlRGF0YShkYXRhLCB0aGlzLmVudmlyb25tZW50LmtjbUZyYW1ld29ya05hbWUpXG4gICAgICB0aGlzLnNlbGVjdGVkQ2FyZENvbXBUaGVtZURhdGEgPSAgJydcbiAgICAgIC8vIHRvIGRvOiBjaGFuZ2UgZ2V0dGluZyBzZWxlY3RlZFBhcmVudFRlcm1zIHRvIGR5bmFtaWNcbiAgICAgIGlmKHRoaXMuZGF0YSAmJiB0aGlzLmRhdGEuc2VsZWN0ZWRQYXJlbnRUZXJtcykge1xuICAgICAgICB0aGlzLmRhdGEuc2VsZWN0ZWRQYXJlbnRUZXJtcy5mb3JFYWNoKChlbGU6IGFueSkgPT4ge1xuICAgICAgICAgIGlmKGVsZS5jYXRlZ29yeSA9PT0gXCJjb21wZXRlbmN5XCIpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDYXJkQ29tcFRoZW1lRGF0YSA9IGVsZVxuICAgICAgICAgICAgbGV0IG9wdGlvbiA9IHRoaXMuc2VsZWN0ZWRDYXJkQ29tcFRoZW1lRGF0YS5hZGRpdGlvbmFsUHJvcGVydGllcy5jb21wZXRlbmN5QXJlYVxuICAgICAgICAgICAgdGhpcy5vblNlbGVjdGlvbkFyZWEob3B0aW9uKVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBcbiAgICAgfVxuICAgIH0sKChfZXJyOiBhbnkpID0+IHtcbiAgICAgIHRoaXMuX3NuYWNrQmFyLm9wZW4oYEtDTSBGcmFtZXdvcmsgcmVhZCBmYWlsZWQuYClcbiAgICB9KSlcbiAgfVxuXG4gIGZvcm1hdGVEYXRhKHJlc3BvbnNlOiBhbnksIGZyYW1ld29ya0lkOiBzdHJpbmcpIHtcbiAgICAocmVzcG9uc2UuY2F0ZWdvcmllcykuZm9yRWFjaCgoYTphbnkpID0+IHtcbiAgICAgIGlmKGEuY29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMua2NtTGlzdC5zZXQoYS5jb2RlLCB7XG4gICAgICAgICAgY29kZTogYS5jb2RlLFxuICAgICAgICAgIGlkZW50aWZpZXI6IGEuaWRlbnRpZmllcixcbiAgICAgICAgICBpbmRleDogYS5pbmRleCxcbiAgICAgICAgICBuYW1lOiBhLm5hbWUsXG4gICAgICAgICAgZGVzY3JpcHRpb246IGEuZGVzY3JpcHRpb24sXG4gICAgICAgICAgY29uZmlnOiB0aGlzLmZyYW1lV29ya1NlcnZpY2UuZ2V0Q29uZmlnT2ZDYXRlZ29yeUNvbmZpZ0J5RnJhbWVXb3JrSWQoYS5jb2RlLCBmcmFtZXdvcmtJZCksXG4gICAgICAgICAgLy8gY2hpbGRyZW46IChbLi4uYS50ZXJtcywgLi4ubG9jYWxEYXRhXSB8fCBbXSkubWFwKGMgPT4ge1xuICAgICAgICAgIGNoaWxkcmVuOiAoYS50ZXJtcyB8fCBbXSkubWFwKChjOmFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXNzb2NpYXRpb25zID0gYy5hc3NvY2lhdGlvbnMgfHwgW11cbiAgICAgICAgICAgIGlmIChhc3NvY2lhdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGMsIHsgY2hpbGRyZW46IGFzc29jaWF0aW9ucyB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNcbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMua2NtTGlzdC5mb3JFYWNoKChhOiBhbnkpID0+IHtcbiAgICAgIGlmKGEuY29kZSA9PT0gXy5nZXQodGhpcy5rY21Db25maWdEYXRhLCAnY29uZmlnWzBdLmNhdGVnb3J5Jykpe1xuICAgICAgICB0aGlzLmNvbXBldGVuY3lBcmVhID0gYVxuICAgICAgfVxuICAgIH0pXG4gICAgXG5cbiAgfVxuXG5cbiAgY3JlYXRlQ29tcFRoZW1lRmllbGRzKCk6VW50eXBlZEZvcm1Hcm91cCB7XG4gICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgY29tcGV0ZW5jeVRoZW1lOlsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgIGNvbXBldGVuY3lTdWJUaGVtZTpbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV1cbiAgICB9KVxuICB9XG5cblxuICBnZXRDcmVhdGVOYW1lKGRhdGE6IGFueSkge1xuICAgICAgbGV0IHBvcFVwQ2F0ZWdvcnkgPSBkYXRhLmNhcmRDb2xJbmZvID8gZGF0YS5jYXJkQ29sSW5mby5uYW1lIDogZGF0YS5jb2x1bW5JbmZvLm5hbWVcbiAgICAgIHN3aXRjaChwb3BVcENhdGVnb3J5KXtcbiAgICAgICAgY2FzZSAnRGVzaWduYXRpb24nOlxuICAgICAgICByZXR1cm4gYENyZWF0ZSBDb21wZXRlbmN5IE1hcHBpbmdgO1xuICAgICAgICBjYXNlICdTdWIgVGhlbWUnOlxuICAgICAgICAgIGlmKGRhdGEub3Blbk1vZGUgPT09ICd2aWV3Jykge1xuICAgICAgICAgICAgcmV0dXJuIGBWaWV3IENvbXBldGVuY3kgJHtwb3BVcENhdGVnb3J5fWBcbiAgICAgICAgICB9XG4gICAgICAgIHJldHVybiBgQWRkIENvbXBldGVuY3kgJHtwb3BVcENhdGVnb3J5fWBcbiAgICAgICAgY2FzZSAnQ29tcGV0ZW5jeSc6XG4gICAgICAgICAgaWYoZGF0YS5vcGVuTW9kZSA9PT0gJ2VkaXQnKSB7XG4gICAgICAgICAgICByZXR1cm4gYEVkaXQgQ29tcGV0ZW5jeSBUaGVtZWBcbiAgICAgICAgICB9IGVsc2UgaWYoZGF0YS5vcGVuTW9kZSA9PT0gJ3ZpZXcnKSB7XG4gICAgICAgICAgICByZXR1cm4gYFZpZXcgQ29tcGV0ZW5jeSBUaGVtZWBcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGBDcmVhdGUgQ29tcGV0ZW5jeSBNYXBwaW5nYFxuICAgICAgICAgIGRlZmF1bHQ6IHJldHVybiAnJ1xuICAgICAgfVxuICB9XG5cbiAgY2xlYXJTZWxlY3RlZFRoZW1lcyhvcHRpb246YW55KXtcbiAgICBpZih0aGlzLmlzVGhlbWVTZWxlY3RlZCkge1xuICAgICAgdGhpcy5vcGVuQ29uZm9yYW10aW9uUG9wdXAob3B0aW9uKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9uU2VsZWN0aW9uQXJlYShvcHRpb24pXG4gICAgfVxuICB9XG5cbiAgZ2V0IGlzVGhlbWVTZWxlY3RlZCAoKSB7XG4gICAgbGV0IGhhc1ZhbHVlID0gZmFsc2VcbiAgICBpZiAodGhpcy5jb21wZXRlbmN5Rm9ybSkge1xuICAgICAgY29uc3QgY29tcFRoZW1lRmllbGRzID0gdGhpcy5jb21wZXRlbmN5Rm9ybS5nZXQoJ2NvbXBUaGVtZUZpZWxkcycpIGFzIFVudHlwZWRGb3JtQXJyYXk7XG4gICAgICBpZiAoY29tcFRoZW1lRmllbGRzKSB7XG4gICAgICAgIGNvbXBUaGVtZUZpZWxkcy5jb250cm9scy5mb3JFYWNoKChlbGVtZW50OmFueSkgPT4ge1xuICAgICAgICAgIGlmKGVsZW1lbnQuZ2V0KCdjb21wZXRlbmN5VGhlbWUnKT8udmFsdWUgfHwgZWxlbWVudC5nZXQoJ2NvbXBldGVuY3lTdWJUaGVtZScpPy52YWx1ZSkge1xuICAgICAgICAgICAgaGFzVmFsdWUgPSB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGhhc1ZhbHVlXG4gIH1cblxuICBvcGVuQ29uZm9yYW10aW9uUG9wdXAob3B0aW9uOmFueSkge1xuICAgIGNvbnN0IGRpYWxvZ0RhdGEgPSB7XG4gICAgICBkaWFsb2dUeXBlOiAnd2FybmluZycsXG4gICAgICBkZXNjcmlwdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGhlYWRlcjogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBhbHRlciB0aGUgY29tcGV0ZW5jeSBhcmVhPycsXG4gICAgICAgICAgaGVhZGVyQ2xhc3M6ICdmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciB0ZXh0LWJsdWUgdGV4dEJvbGQnLFxuICAgICAgICAgIG1lc3NhZ2VzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG1zZ0NsYXNzOiAnJyxcbiAgICAgICAgICAgICAgbXNnOiBgVGhpcyBhY3Rpb24gd2lsbCByZXN1bHQgaW4gdGhlIGxvc3Mgb2YgeW91ciBjdXJyZW50bHkgYWRkZWQgZGF0YWAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgZm9vdGVyQ2xhc3M6ICdpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXInLFxuICAgICAgYnV0dG9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgYnRuVGV4dDogJ0NhbmNlbCcsXG4gICAgICAgICAgYnRuQ2xhc3M6ICdidG4tb3V0bGluZScsXG4gICAgICAgICAgcmVzcG9uc2U6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYnRuVGV4dDogJ0NvbmZpcm0nLFxuICAgICAgICAgIGJ0bkNsYXNzOiAnYnRuLWZ1bGwtc3VjY2VzcycsXG4gICAgICAgICAgcmVzcG9uc2U6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH1cbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENvbmZvcmFtdGlvblBvcHVwQ29tcG9uZW50LCB7XG4gICAgICBkYXRhOiBkaWFsb2dEYXRhLFxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgIHdpZHRoOiAnNjAwcHgnLFxuICAgICAgbWF4V2lkdGg6ICc4MHZ3JyxcbiAgICAgIG1heEhlaWdodDogJzkwdmgnLFxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxuICAgIH0pXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgaWYgKHJlcykge1xuICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQXJlYShvcHRpb24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjb21wQXJlYUNvbnRyb2wgPSB0aGlzLmNvbXBldGVuY3lGb3JtLmdldCgnY29tcEFyZWEnKTtcbiAgICAgICAgaWYgKGNvbXBBcmVhQ29udHJvbCkge1xuICAgICAgICAgIGNvbXBBcmVhQ29udHJvbC5zZXRWYWx1ZSh0aGlzLnNlbGV0ZWRDb21wZXRlbmN5QXJlYSk7XG4gICAgICAgICAgY29tcEFyZWFDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBvblNlbGVjdGlvbkFyZWEob3B0aW9uOmFueSl7XG4gICAgdGhpcy5jb21wZXRlbmN5Rm9ybS5yZXNldCgpXG4gICAgd2hpbGUodGhpcy5jb21wVGhlbWVGaWVsZHMubGVuZ3RoICE9PSAwKSB7XG4gICAgICB0aGlzLmNvbXBUaGVtZUZpZWxkcy5yZW1vdmVBdCgwKTtcbiAgICB9XG4gICAgdGhpcy5jb21wVGhlbWVGaWVsZHMucHVzaCh0aGlzLmNyZWF0ZUNvbXBUaGVtZUZpZWxkcygpKTtcbiAgICBpZigndGhlbWUnID09PSB0aGlzLmtjbUNvbmZpZ0RhdGEuY29uZmlnWzFdLmNhdGVnb3J5KXtcbiAgICAgIHRoaXMuc2VsZXRlZENvbXBldGVuY3lBcmVhID0gb3B0aW9uXG4gICAgICBjb25zdCBjb21wQXJlYUNvbnRyb2wgPSB0aGlzLmNvbXBldGVuY3lGb3JtLmdldCgnY29tcEFyZWEnKTtcbiAgICAgIGlmIChjb21wQXJlYUNvbnRyb2wpIHtcbiAgICAgICAgY29tcEFyZWFDb250cm9sLnBhdGNoVmFsdWUob3B0aW9uKTtcbiAgICAgICAgY29tcEFyZWFDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZmlsdGVyZWRhbGxDb21wZXRlbmN5VGhlbWUgPSBbXVxuICAgICAgdGhpcy5hbGxDb21wZXRlbmN5VGhlbWUgPSBbXVxuICAgICAgaWYob3B0aW9uICYmICBvcHRpb24uY2hpbGRyZW4gJiYgIG9wdGlvbi5jaGlsZHJlbi5sZW5ndGgpe1xuICAgICAgICBsZXQgdGhlbWVWYWx1ZSA9IHRoaXMua2NtTGlzdC5nZXQodGhpcy5rY21Db25maWdEYXRhLmNvbmZpZ1sxXS5jYXRlZ29yeSlcbiAgICAgICAgb3B0aW9uLmNoaWxkcmVuLmZvckVhY2goKGVsZTogYW55KSA9PiB7XG4gICAgICAgICAgaWYoZWxlLmNhdGVnb3J5ID09PSAndGhlbWUnICkge1xuICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gdGhlbWVWYWx1ZS5jaGlsZHJlbi5maW5kSW5kZXgoKHRoZW1lRGF0YSA6YW55ICkgPT4ge1xuICAgICAgICAgICAgICAgIGlmKGVsZS5yZWZJZCA9PT0gdGhlbWVEYXRhLnJlZklkKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhlbWVEYXRhLmNoaWxkcmVuICYmIHRoZW1lRGF0YS5jaGlsZHJlbi5sZW5ndGhcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIGlmKHJlc3VsdCA+PSAwKXtcbiAgICAgICAgICAgICAgICB0aGlzLmFsbENvbXBldGVuY3lUaGVtZS5wdXNoKGVsZSlcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlcmVkYWxsQ29tcGV0ZW5jeVRoZW1lLnB1c2goZWxlKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYodGhpcy5jb21wZXRlbmN5QXJlYSAmJiB0aGlzLmNvbXBldGVuY3lBcmVhLmNoaWxkcmVuKSB7XG4gICAgICAgICAgdGhpcy5jb21wZXRlbmN5QXJlYS5jaGlsZHJlbi5mb3JFYWNoKChlbGVtZW50OmFueSkgPT4ge1xuICAgICAgICAgICAgaWYoZWxlbWVudC5jb2RlID09PSBvcHRpb24uY29kZSkge1xuICAgICAgICAgICAgICB0aGlzLnNlbGV0ZWRDb21wZXRlbmN5QXJlYSA9IG9wdGlvblxuICAgICAgICAgICAgICBpZihlbGVtZW50LmNoaWxkcmVuICYmIGVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5jaGlsZHJlbi5mb3JFYWNoKChlbGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYoZWxlLmNhdGVnb3J5ID09PSAndGhlbWUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWxsQ29tcGV0ZW5jeVRoZW1lLnB1c2goZWxlKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlcmVkYWxsQ29tcGV0ZW5jeVRoZW1lLnB1c2goZWxlKVxuICAgICAgICAgICAgICAgICAgICAvLyB0byBkbzogIHRvIGJlIGNoZWNrIGJhc2VkIG9uIHJlZmYgaWRcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5zZWxlY3RlZENhcmRDb21wVGhlbWVEYXRhLnJlZklkLnRvTG93ZXJDYXNlKCkgPT09IGVsZS5yZWZJZC50b0xvd2VyQ2FzZSgpKXtcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgZm9ybUFycmF5OmFueSA9IHRoaXMuY29tcGV0ZW5jeUZvcm0uZ2V0KCdjb21wVGhlbWVGaWVsZHMnKSBhcyBVbnR5cGVkRm9ybUFycmF5O1xuICAgICAgICAgICAgICAgICAgICAgIGZvcm1BcnJheS5hdCgwKS5nZXQoJ2NvbXBldGVuY3lUaGVtZScpLnBhdGNoVmFsdWUoZWxlKVxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1BcnJheS5hdCgwKS5nZXQoJ2NvbXBldGVuY3lUaGVtZScpLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBBcmVhQ29udHJvbCA9IHRoaXMuY29tcGV0ZW5jeUZvcm0uZ2V0KCdjb21wQXJlYScpO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21wQXJlYUNvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBBcmVhQ29udHJvbC5wYXRjaFZhbHVlKG9wdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wQXJlYUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgIH1cbiAgfVxuXG4gIGFkZENvbXBldGVuY3lUaGVtZSgpe1xuICAgIGlmICh0aGlzLmRhdGEubW9kZSA9PT0gJ211bHRpLWNyZWF0ZScpIHtcbiAgICAgIHRoaXMuY29tcFRoZW1lRmllbGRzLmluc2VydCgwLCB0aGlzLmNyZWF0ZUNvbXBUaGVtZUZpZWxkcygpKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVDb21wRmllbGRzKGluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5kYXRhLm1vZGUgPT09ICdtdWx0aS1jcmVhdGUnKSB7XG4gICAgICB0aGlzLmNvbXBUaGVtZUZpZWxkcy5yZW1vdmVBdChpbmRleCk7XG4gICAgfVxuICB9XG5cbiAgT25UaGVtZVNlbGVjdGlvbihldmVudDogYW55LCBfaW5kZXhWYWx1ZTogYW55LCBvcHRpb25EYXRhOmFueSkge1xuICAgIC8vIGlmIChldmVudC5pc1VzZXJJbnB1dCB8fCB0aGlzLmRhdGEub3Blbk1vZGUgPT09ICd2aWV3JykgeyAgIFxuICAgIGNvbnN0IHNlbGVjdGVkVGhlbWUgPSBldmVudC5zb3VyY2UudmFsdWVcbiAgICB0aGlzLmtjbUxpc3QuZm9yRWFjaCgoZWxlOmFueSkgPT4ge1xuICAgICAgaWYoc2VsZWN0ZWRUaGVtZS5jYXRlZ29yeSA9PT0gZWxlLmNvZGUpIHtcbiAgICAgICAgaWYoZWxlLmNoaWxkcmVuICYmIGVsZS5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgICAgICBlbGUuY2hpbGRyZW4uZm9yRWFjaCgodGhlbWVDaGlsZDogYW55KSA9PiB7XG4gICAgICAgICAgICBpZih0aGVtZUNoaWxkLmlkZW50aWZpZXIgPT09IHNlbGVjdGVkVGhlbWUuaWRlbnRpZmllcikge1xuICAgICAgICAgICAgICBpZih0aGVtZUNoaWxkLmNoaWxkcmVuICYmIHRoZW1lQ2hpbGQuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9uRGF0YVsnY2hpbGRyZW4nXSA9IHRoZW1lQ2hpbGQuY2hpbGRyZW5cbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlcmVkYWxsQ29tcGV0ZW5jeVN1YlRoZW1lID0gdGhlbWVDaGlsZC5jaGlsZHJlbiBcbiAgICAgICAgICAgICAgICAgLy8gdG8gZG86ICB0byBiZSBjaGVjayBiYXNlZCBvbiByZWZmIGlkXG4gICAgICAgICAgICAgICAgIGxldCBtYXRjaGVkRGF0YSA9IFtdXG4gICAgICAgICAgICAgICAgIGlmKHRoaXMuZGF0YS5jaGlsZHJlbkRhdGEgJiYgdGhpcy5kYXRhLmNoaWxkcmVuRGF0YS5jYXRlZ29yeSA9PT0gXCJzdWJ0aGVtZVwiKSB7XG4gICAgICAgICAgICAgICAgICBtYXRjaGVkRGF0YSA9IF8uaW50ZXJzZWN0aW9uQnkodGhlbWVDaGlsZC5jaGlsZHJlbixbdGhpcy5kYXRhLmNoaWxkcmVuRGF0YV0sICdyZWZJZCcpO1xuICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgbWF0Y2hlZERhdGEgPSBfLmludGVyc2VjdGlvbkJ5KHRoZW1lQ2hpbGQuY2hpbGRyZW4sdGhpcy5zZWxlY3RlZENhcmRDb21wVGhlbWVEYXRhLmNoaWxkcmVuLCAncmVmSWQnKTtcbiAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgbGV0IGZvcm1BcnJheSA9IHRoaXMuY29tcGV0ZW5jeUZvcm0uZ2V0KCdjb21wVGhlbWVGaWVsZHMnKSBhcyBVbnR5cGVkRm9ybUFycmF5O1xuICAgICAgICAgICAgICAgICAgY29uc3QgY29tcGV0ZW5jeVN1YlRoZW1lQ29udHJvbCA9IGZvcm1BcnJheS5hdChfaW5kZXhWYWx1ZSkuZ2V0KCdjb21wZXRlbmN5U3ViVGhlbWUnKTtcbiAgICAgICAgICAgICAgICAgIGlmIChjb21wZXRlbmN5U3ViVGhlbWVDb250cm9sKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBldGVuY3lTdWJUaGVtZUNvbnRyb2wucGF0Y2hWYWx1ZShtYXRjaGVkRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBldGVuY3lTdWJUaGVtZUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgLy8gfVxuICB9XG5cbiAgb25UZXJtUmVtb3ZlKHRlcm1EYXRhOiBhbnksIGluZGV4VmFsdWU6IG51bWJlcikge1xuICAgIGxldCBmb3JtQXJyYXkgPSB0aGlzLmNvbXBldGVuY3lGb3JtLmdldCgnY29tcFRoZW1lRmllbGRzJykgYXMgVW50eXBlZEZvcm1BcnJheTtcbiAgICBjb25zdCBjb21wVGhlbWVDb250cm9sID0gZm9ybUFycmF5LmF0KGluZGV4VmFsdWUpLmdldCgnY29tcGV0ZW5jeVN1YlRoZW1lJykgYXMgVW50eXBlZEZvcm1Db250cm9sIHwgbnVsbFxuICAgIGlmIChjb21wVGhlbWVDb250cm9sKSB7XG4gICAgICBjb25zdCB0aGVtZXMgPSBjb21wVGhlbWVDb250cm9sLnZhbHVlXG4gICAgICBpZiAodGhlbWVzKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhlbWVzLmluZGV4T2YodGVybURhdGEpXG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgdGhlbWVzLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgICBjb21wVGhlbWVDb250cm9sLnNldFZhbHVlKHRoZW1lcylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBcbiAgfVxuXG4gIE9uU3ViVGhlbWVTZWxlY3Rpb24oX2V2ZW50OiBhbnksIF9pbmRleFZhbHVlOiBudW1iZXIsIF9vcHRpb246IGFueSl7XG4gICAgLy8gbGV0IGZvcm1BcnJheSA9IHRoaXMuY29tcGV0ZW5jeUZvcm0uZ2V0KCdjb21wVGhlbWVGaWVsZHMnKSBhcyBVbnR5cGVkRm9ybUFycmF5O1xuICAgIC8vIGNvbnN0IGNvbXBUaGVtZUNvbnRyb2wgPSBmb3JtQXJyYXkuYXQoaW5kZXhWYWx1ZSkuZ2V0KCdjb21wZXRlbmN5U3ViVGhlbWUnKSBhcyBVbnR5cGVkRm9ybUNvbnRyb2wgfCBudWxsXG4gICAgXG4gIH1cblxuICAvLyBhZGQgZm9ybVxuICBhc3luYyBtdWx0aUNyZWF0ZShmb3JtOiBhbnksIF9kYXRhOiBhbnkpIHtcbiAgICB0aGlzLmRpc2FibGVNdWx0aUNyZWF0ZSA9IHRydWVcbiAgICAvLyBsZXQgY291bnRlclRoZW1lID0gMFxuICAgIGxldCBjb3VudGVyU3ViVGhlbWUgPSAwXG4gICAgbGV0IHBhcmVudENhdGVnb3J5ID0ge31cbiAgICBsZXQgY3JlYXRlZFRlcm1zOmFueSA9IFtdXG4gICAgbGV0IGNyZWF0ZWRTdWJUaGVtZSA9IFtdXG4gICAgaWYoZm9ybS52YWxpZCkge1xuICAgICAgY29uc3QgdGhlbWVGaWVsZHMgPSBmb3JtICYmIGZvcm0udmFsdWUgJiYgZm9ybS52YWx1ZS5jb21wVGhlbWVGaWVsZHNcbiAgICAgIGlmKHRoZW1lRmllbGRzICYmIHRoZW1lRmllbGRzLmxlbmd0aCkge1xuICAgICAgICBsZXQgbG9jYWxDb21wQXJlYSA9IHsuLi50aGlzLnNlbGV0ZWRDb21wZXRlbmN5QXJlYX1cbiAgICAgICAgaWYobG9jYWxDb21wQXJlYS5jaGlsZHJlbiAmJiBsb2NhbENvbXBBcmVhLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgIGRlbGV0ZSBsb2NhbENvbXBBcmVhLmNoaWxkcmVuXG4gICAgICAgIH1cbiAgICAgICAgaWYobG9jYWxDb21wQXJlYS5hc3NvY2lhdGlvbnMgJiYgbG9jYWxDb21wQXJlYS5hc3NvY2lhdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgZGVsZXRlIGxvY2FsQ29tcEFyZWEuYXNzb2NpYXRpb25zXG4gICAgICAgIH1cblxuICAgICAgICAvLyB0aGVtZUZpZWxkcy5mb3JFYWNoKGFzeW5jIChvYmpWYWwsIHRoZW1lSW5kZXgpID0+XG4gICAgICAgIGZvcihsZXQgW2luZGV4LCBvYmpWYWxdIG9mIHRoZW1lRmllbGRzLmVudHJpZXMoKSkge1xuICAgICAgICAgIHBhcmVudENhdGVnb3J5ID0ge31cbiAgICAgICAgICBpZihvYmpWYWxbJ2NvbXBldGVuY3lUaGVtZSddKSB7XG4gICAgICAgICAgICBjcmVhdGVkVGVybXM9IFtdXG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBvYmpWYWxbJ2NvbXBldGVuY3lUaGVtZSddXG4gICAgICAgICAgICBjb25zdCB0ZXJtOiBOU0ZyYW1ld29yay5JQ3JlYXRlVGVybSA9IHtcbiAgICAgICAgICAgICAgY29kZTogdGhpcy5mcmFtZVdvcmtTZXJ2aWNlLmdldFV1aWQoKSxcbiAgICAgICAgICAgICAgbmFtZTogdmFsdWUubmFtZSxcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHZhbHVlLmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICBjYXRlZ29yeTogdGhpcy5kYXRhLmNvbHVtbkluZm8uY29kZSxcbiAgICAgICAgICAgICAgc3RhdHVzOiBhcHBDb25zdGFudHMuTElWRSxcbiAgICAgICAgICAgICAgcmVmSWQ6IHZhbHVlLnJlZklkIHx8ICcnLFxuICAgICAgICAgICAgICByZWZUeXBlOiB2YWx1ZS5yZWZUeXBlIHx8ICcnLFxuICAgICAgICAgICAgICAvLyBhcHByb3ZhbFN0YXR1czphcHBDb25zdGFudHMuRFJBRlQsXG4gICAgICAgICAgICAgIHBhcmVudHM6IFtcbiAgICAgICAgICAgICAgICB7IGlkZW50aWZpZXI6IGAke3RoaXMuZGF0YS5mcmFtZXdvcmtJZC50b0xvd2VyQ2FzZSgpfV8ke3RoaXMuZGF0YS5jb2x1bW5JbmZvLmNvZGV9YCB9XG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgY29tcGV0ZW5jeUFyZWE6IGxvY2FsQ29tcEFyZWEsXG4gICAgICAgICAgICAgICAgdGltZVN0YW1wOiBuZXcgRGF0ZSgpLmdldFRpbWUoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0Qm9keTphbnkgPSB7XG4gICAgICAgICAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgICAgICAgICB0ZXJtOiB0ZXJtXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZnJhbWVXb3JrU2VydmljZS5jcmVhdGVUZXJtKHRoaXMuZGF0YS5mcmFtZXdvcmtJZCwgdGhpcy5kYXRhLmNvbHVtbkluZm8uY29kZSwgcmVxdWVzdEJvZHkpLnRvUHJvbWlzZSgpLnRoZW4oYXN5bmMgKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgICAgIHJlcXVlc3RCb2R5LnJlcXVlc3QudGVybVsnaWRlbnRpZmllciddID0gcmVzLnJlc3VsdC5ub2RlX2lkWzBdXG4gICAgICAgICAgICAgIHRoaXMuZnJhbWVXb3JrU2VydmljZS5zZWxlY3Rpb25MaXN0LmRlbGV0ZSgnY29tcGV0ZW5jeScpXG4gICAgICAgICAgICAgIHBhcmVudENhdGVnb3J5ID0gcmVxdWVzdEJvZHkucmVxdWVzdC50ZXJtXG4gICAgICAgICAgICAgIGNyZWF0ZWRUZXJtcy5wdXNoKHJlcXVlc3RCb2R5LnJlcXVlc3QudGVybSlcbiAgICAgICAgICAgICAgLy8gY291bnRlclRoZW1lKytcblxuICAgICAgICAgICAgICBjb25zdCBwYXJlbnRDb2x1bW46IGFueSA9IHRoaXMuZnJhbWVXb3JrU2VydmljZS5nZXRQcmV2aW91c0NhdGVnb3J5KHRoaXMuZGF0YS5jb2x1bW5JbmZvLmNvZGUpXG4gICAgICAgICAgICAgIGxldCBwYXJlbnRDb2w6IGFueSA9IHRoaXMuZnJhbWVXb3JrU2VydmljZS5zZWxlY3Rpb25MaXN0LmdldChwYXJlbnRDb2x1bW4uY29kZSlcbiAgXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMudXBkYXRlVGVybUFzc29jaWF0aW9uc011bHRpVjIoY3JlYXRlZFRlcm1zLHBhcmVudENvbClcbiAgICAgICAgICAgICAgLy8gLy8gYXdhaXQgdGhpcy51cGRhdGVUZXJtQXNzb2NpYXRpb25zTXVsdGkoY3JlYXRlZFRlcm1zKVxuXG4gICAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgICAgXCJzZWxlY3RlZFwiOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgXCJjYXRlZ29yeVwiOiBwYXJlbnRDb2x1bW4uY29kZSxcbiAgICAgICAgICAgICAgICAgICAgXCJjYXJkU3ViVHlwZVwiOiBcIm1pbmltYWxcIixcbiAgICAgICAgICAgICAgICAgICAgXCJpc1ZpZXdPbmx5XCI6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBcImluZGV4XCI6IHBhcmVudENvbHVtbi5pbmRleCxcbiAgICAgICAgICAgICAgICAgICAgXCJjb2x1bW5JbmZvXCI6IHRoaXMuZGF0YS5jYXJkQ29sSW5mb1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2VEYXRhMTIgPSB7XG4gICAgICAgICAgICAgICAgICAgIHJlczogeyB0ZXJtOiBbdGhpcy5zZWxlY3RlZFRlcm1dLCBjcmVhdGVkOiB0cnVlLCBtdWx0aTp0cnVlIH0sXG4gICAgICAgICAgICAgICAgICAgIGluZGV4OiB0aGlzLmRhdGEuY29sdW1uSW5mby5pbmRleCxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ211bHRpLWNyZWF0ZSdcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHRoaXMuZnJhbWVXb3JrU2VydmljZS51cGRhdGVBZnRlckFkZE9yRWRpdFN1YmplY3QocmVzcG9uc2VEYXRhMTIpXG5cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKG9ialZhbFsnY29tcGV0ZW5jeVN1YlRoZW1lJ10pIHtcbiAgICAgICAgICAgIHRoaXMuZnJhbWVXb3JrU2VydmljZS5zZWxlY3Rpb25MaXN0LnNldCh0aGlzLmRhdGEuY29sdW1uSW5mby5jb2RlLCBwYXJlbnRDYXRlZ29yeSlcblxuICAgICAgICAgICAgbGV0IHZhbHVlID0gb2JqVmFsWydjb21wZXRlbmN5U3ViVGhlbWUnXVxuICAgICAgICAgICAgaWYodmFsdWUgJiYgdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGNvdW50ZXJTdWJUaGVtZSA9IDBcbiAgICAgICAgICAgICAgY3JlYXRlZFN1YlRoZW1lID0gW11cbiAgICAgICAgICAgICAgLy8gdmFsdWUuZm9yRWFjaChhc3luYyAoZWxlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBmb3IobGV0IGVsZSBvZiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRlcm06IE5TRnJhbWV3b3JrLklDcmVhdGVUZXJtID0ge1xuICAgICAgICAgICAgICAgICAgY29kZTogdGhpcy5mcmFtZVdvcmtTZXJ2aWNlLmdldFV1aWQoKSxcbiAgICAgICAgICAgICAgICAgIG5hbWU6IGVsZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGVsZS5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICAgIGNhdGVnb3J5OiB0aGlzLmRhdGEubmV4dENvbEluZm8uY29kZSxcbiAgICAgICAgICAgICAgICAgIHN0YXR1czogYXBwQ29uc3RhbnRzLkxJVkUsXG4gICAgICAgICAgICAgICAgICByZWZJZDogZWxlLnJlZklkIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgcmVmVHlwZTogZWxlLnJlZlR5cGUgfHwgJycsXG4gICAgICAgICAgICAgICAgICBwYXJlbnRzOiBbXG4gICAgICAgICAgICAgICAgICAgIHsgaWRlbnRpZmllcjogYCR7dGhpcy5kYXRhLmZyYW1ld29ya0lkLnRvTG93ZXJDYXNlKCl9XyR7dGhpcy5kYXRhLm5leHRDb2xJbmZvLmNvZGV9YCB9XG4gICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgdGltZVN0YW1wOiBuZXcgRGF0ZSgpLmdldFRpbWUoKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0Qm9keTphbnkgPSB7XG4gICAgICAgICAgICAgICAgICByZXF1ZXN0OiB7XG4gICAgICAgICAgICAgICAgICAgIHRlcm06IHRlcm1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlRGF0YTogYW55ID0gYXdhaXQgdGhpcy5jcmF0ZVRlcm0odGhpcy5kYXRhLmZyYW1ld29ya0lkLCB0aGlzLmRhdGEubmV4dENvbEluZm8uY29kZSwgcmVxdWVzdEJvZHkpXG5cbiAgICAgICAgICAgICAgICByZXF1ZXN0Qm9keS5yZXF1ZXN0LnRlcm1bJ2lkZW50aWZpZXInXSA9IHJlc3BvbnNlRGF0YS5yZXN1bHQubm9kZV9pZFswXVxuICAgICAgICAgICAgICAgIGNyZWF0ZWRTdWJUaGVtZS5wdXNoKHJlcXVlc3RCb2R5LnJlcXVlc3QudGVybSlcbiAgICAgICAgICAgICAgICBjb3VudGVyU3ViVGhlbWUrK1xuICAgICAgICAgICAgICAgIGlmKChjb3VudGVyU3ViVGhlbWUgPT09IG9ialZhbFsnY29tcGV0ZW5jeVN1YlRoZW1lJ10ubGVuZ3RoKSl7XG4gICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRDb2x1bW5Db25maWdEYXRhOmFueSA9IHRoaXMuZnJhbWVXb3JrU2VydmljZS5nZXRQcmV2aW91c0NhdGVnb3J5KHRoaXMuZGF0YS5uZXh0Q29sSW5mby5jb2RlKVxuICAgICAgICAgICAgICAgICAgbGV0IHBhcmVudENvbDogYW55ID0gdGhpcy5mcmFtZVdvcmtTZXJ2aWNlLnNlbGVjdGlvbkxpc3QuZ2V0KHBhcmVudENvbHVtbkNvbmZpZ0RhdGEuY29kZSlcbiAgICAgIFxuICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVUZXJtQXNzb2NpYXRpb25zTXVsdGlWMihjcmVhdGVkU3ViVGhlbWUscGFyZW50Q29sLCBpbmRleCwgdGhlbWVGaWVsZHMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgaWYoaW5kZXggPT09IHRoZW1lRmllbGRzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mcmFtZVdvcmtTZXJ2aWNlLnNlbGVjdGlvbkxpc3QuZGVsZXRlKCdjb21wZXRlbmN5JylcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dDbG9zZSh7IHRlcm06IHRoaXMuc2VsZWN0ZWRUZXJtQXJyYXksIGNyZWF0ZWQ6IHRydWUsIG11bHRpOmZhbHNlLCBjYWxsVXBkYXRlOiBmYWxzZSB9KVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVNdWx0aUNyZWF0ZSA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NuYWNrQmFyLm9wZW4oYENvbXBldGVuY3kgTWFwcGluZyBjcmVhdGVkIHN1Y2Nlc3NmdWxseS5gKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cbiAgYXN5bmMgY3JhdGVUZXJtKGZyYW1ld29ya0lkOiBhbnksIGNvbENvZGU6IGFueSwgcmVxdWVzdEJvZHk6IGFueSl7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlKT0+e1xuICAgICAgdGhpcy5mcmFtZVdvcmtTZXJ2aWNlLmNyZWF0ZVRlcm0oZnJhbWV3b3JrSWQsIGNvbENvZGUsIHJlcXVlc3RCb2R5KS5zdWJzY3JpYmUoKHJlczogYW55KT0+e1xuICAgICAgICByZXNvbHZlKHJlcylcbiAgICAgIH0sKChfZXJyOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5fc25hY2tCYXIub3BlbihgQ3JlYXRlIFRlcm0gZmFpbGVkLmApXG4gICAgICB9KSlcbiAgICB9KVxuICB9XG5cblxuXG4gIGFzeW5jIHVwZGF0ZVRlcm1Bc3NvY2lhdGlvbnNNdWx0aVYyKGNyZWF0ZWRUZXJtczogYW55W10sIHBhcmVudFNlbGVjdGVkVGVybT86IGFueSwgX3J1bm5pbmdJbmRleD86IG51bWJlciwgX3RoZW1GaWVsZHNMZW5ndGg/OiBudW1iZXIpIHtcbiAgICBpZihjcmVhdGVkVGVybXMgJiYgY3JlYXRlZFRlcm1zLmxlbmd0aCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFRlcm1BcnJheSA9IFtdXG4gICAgICAvLyBsZXQgY3JlYXRlZFRlcm1zQ291bnRlciA9IDBcbiAgICAgIGxldCBjcmVhdGVkVGVybXNJZGVudGlmaWVycyA9IFtdXG4gICAgICB0aGlzLnNlbGVjdGVkVGVybUFycmF5ID0gY3JlYXRlZFRlcm1zXG4gICAgICB0aGlzLnNlbGVjdGVkVGVybSA9IGNyZWF0ZWRUZXJtc1tjcmVhdGVkVGVybXMubGVuZ3RoIC0xXVxuICAgICAgZm9yKGxldCBjcmVhdGVkVGVybSBvZiBjcmVhdGVkVGVybXMpIHtcbiAgICAgICAgY3JlYXRlZFRlcm1zSWRlbnRpZmllcnMucHVzaCh7IGlkZW50aWZpZXI6IGNyZWF0ZWRUZXJtLmlkZW50aWZpZXIgfSlcbiAgICAgIH1cbiAgICAgIGxldCBhc3NvY2lhdGlvbnMgPSBbXVxuICAgICAgbGV0IGNvdW50ZXIgPSAwXG4gICAgICBpZighcGFyZW50U2VsZWN0ZWRUZXJtKSB7XG4gICAgICAgIGZvcihjb25zdCBbdmFsdWVdIG9mIHRoaXMuZnJhbWVXb3JrU2VydmljZS5zZWxlY3Rpb25MaXN0KXtcbiAgICAgICAgICBjb25zdCBwYXJlbnQ6YW55ID0gdmFsdWVcbiAgICAgICAgICBjb3VudGVyKytcbiAgICAgICAgICBhc3NvY2lhdGlvbnMgPSBwYXJlbnQuY2hpbGRyZW4gPyBwYXJlbnQuY2hpbGRyZW4ubWFwKChjOmFueSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGMuaWRlbnRpZmllciA/ICB7IGlkZW50aWZpZXI6IGMuaWRlbnRpZmllciB9IDogbnVsbFxuICAgICAgICAgIH0pIDogW11cbiAgICAgICAgICAgIGFzc29jaWF0aW9ucyA9IFsuLi5hc3NvY2lhdGlvbnMsIC4uLmNyZWF0ZWRUZXJtc0lkZW50aWZpZXJzXVxuICAgICAgICAgICAgdGhpcy5pc1Rlcm1FeGlzdCA9IGZhbHNlXG4gICAgICAgICAgICBjb25zdCByZWd1ZXN0Qm9keSA9IHtcbiAgICAgICAgICAgICAgcmVxdWVzdDoge1xuICAgICAgICAgICAgICAgIHRlcm06IHtcbiAgICAgICAgICAgICAgICAgIC4uLihhc3NvY2lhdGlvbnMgJiYgYXNzb2NpYXRpb25zLmxlbmd0aCkgPyB7YXNzb2NpYXRpb25zOiBbLi4uYXNzb2NpYXRpb25zXX0gOiBudWxsLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5jYWxsVXBkYXRlQXNzb2NpYXRpb25zVjIoY291bnRlciwgcGFyZW50LCByZWd1ZXN0Qm9keSlcbiAgICAgICAgICAvLyBjcmVhdGVkVGVybXNDb3VudGVyKytcbiAgICAgICAgICAvLyBpZihjcmVhdGVkVGVybXNDb3VudGVyID09PSB0aGlzLmZyYW1lV29ya1NlcnZpY2Uuc2VsZWN0aW9uTGlzdC5zaXplKSB7XG4gICAgICAgICAgICAvLyBpZihydW5uaW5nSW5kZXggPT09IHRoZW1GaWVsZHNMZW5ndGggLSAxKSB7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vICAgICB0aGlzLmZyYW1lV29ya1NlcnZpY2Uuc2VsZWN0aW9uTGlzdC5kZWxldGUoJ2NvbXBldGVuY3knKVxuICAgICAgICAgICAgLy8gICAgIHRoaXMuZGlhbG9nQ2xvc2UoeyB0ZXJtOiBbdGhpcy5zZWxlY3RlZFRlcm1dLCBjcmVhdGVkOiB0cnVlLCBtdWx0aTp0cnVlLCBjYWxsVXBkYXRlOiBmYWxzZSB9KVxuICAgICAgICAgICAgLy8gICAgIHRoaXMuZGlzYWJsZU11bHRpQ3JlYXRlID0gZmFsc2VcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gICAgIGlmKGNyZWF0ZWRUZXJtc1swXS5jYXRlZ29yeSA9PT0gJ3RoZW1lJyl7XG4gICAgICAgICAgICAvLyAgICAgdGhpcy5fc25hY2tCYXIub3BlbihgQ29tcGV0ZW5jeSAke2NyZWF0ZWRUZXJtc1swXS5jYXRlZ29yeX0gY3JlYXRlZCBzdWNjZXNzZnVsbHkuYClcbiAgICAgICAgICAgIC8vICAgICB9XG4gICAgICAgICAgICAvLyAgICAgaWYoY3JlYXRlZFRlcm1zWzBdLmNhdGVnb3J5ID09PSAnc3VidGhlbWUnKXsgICAgICAgICBcblxuICAgICAgICAgICAgLy8gICAgIHRoaXMuX3NuYWNrQmFyLm9wZW4oYENvbXBldGVuY3kgJHtjcmVhdGVkVGVybXNbMF0uY2F0ZWdvcnl9IGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5LmApXG4gICAgICAgICAgICAvLyAgICAgfVxuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgIC8vIH1cbiAgICAgICAgfSBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IHBhcmVudFNlbGVjdGVkVGVybVxuICAgICAgICBhc3NvY2lhdGlvbnMgPSBwYXJlbnQuY2hpbGRyZW4gPyBwYXJlbnQuY2hpbGRyZW4ubWFwKChjOmFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiBjLmlkZW50aWZpZXIgPyAgeyBpZGVudGlmaWVyOiBjLmlkZW50aWZpZXIgfSA6IG51bGxcbiAgICAgICAgfSkgOiBbXVxuICAgICAgICAgIGFzc29jaWF0aW9ucyA9IFsuLi5hc3NvY2lhdGlvbnMsIC4uLmNyZWF0ZWRUZXJtc0lkZW50aWZpZXJzXVxuICAgICAgICAgIHRoaXMuaXNUZXJtRXhpc3QgPSBmYWxzZVxuICAgICAgICAgIGNvbnN0IHJlZ3Vlc3RCb2R5ID0ge1xuICAgICAgICAgICAgcmVxdWVzdDoge1xuICAgICAgICAgICAgICB0ZXJtOiB7XG4gICAgICAgICAgICAgICAgLi4uKGFzc29jaWF0aW9ucyAmJiBhc3NvY2lhdGlvbnMubGVuZ3RoKSA/IHthc3NvY2lhdGlvbnM6IFsuLi5hc3NvY2lhdGlvbnNdfSA6IG51bGwsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY2FsbFVwZGF0ZUFzc29jaWF0aW9uc1YyKGNvdW50ZXIsIHBhcmVudCwgcmVndWVzdEJvZHkpXG5cbiAgICAgICAgICAvLyBpZihjcmVhdGVkVGVybXNDb3VudGVyID09PSB0aGlzLmZyYW1lV29ya1NlcnZpY2Uuc2VsZWN0aW9uTGlzdC5zaXplKSB7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gfVxuICAgICAgICAgIC8vIHRoaXMuZGlhbG9nQ2xvc2UoeyB0ZXJtOiBbdGhpcy5zZWxlY3RlZFRlcm1dLCBjcmVhdGVkOiB0cnVlLCBtdWx0aTp0cnVlLCBzdG9wVXBkYXRlOiBmYWxzZSB9KVxuICAgICAgICAgIHRoaXMuZGlzYWJsZU11bHRpQ3JlYXRlID0gZmFsc2VcbiAgICAgICAgICAvLyBpZihjcmVhdGVkVGVybXNbMF0uY2F0ZWdvcnkgPT09ICdzdWJ0aGVtZScpeyAgIFxuICAgICAgICAgIC8vICAgdGhpcy5fc25hY2tCYXIub3BlbihgQ29tcGV0ZW5jeSAke2NyZWF0ZWRUZXJtc1swXS5jYXRlZ29yeX0gY3JlYXRlZCBzdWNjZXNzZnVsbHkuYClcbiAgICAgICAgICAvLyB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdXBkYXRlVGVybUFzc29jaWF0aW9uc011bHRpKGNyZWF0ZWRUZXJtczogYW55W10pIHtcbiAgICBpZihjcmVhdGVkVGVybXMgJiYgY3JlYXRlZFRlcm1zLmxlbmd0aCkge1xuICAgICAgLy8gbGV0IGNyZWF0ZWRUZXJtc0NvdW50ZXIgPSAwXG4gICAgICBmb3IobGV0IGNyZWF0ZWRUZXJtIG9mIGNyZWF0ZWRUZXJtcykge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVGVybSA9IGNyZWF0ZWRUZXJtXG4gICAgICAgIGxldCBhc3NvY2lhdGlvbnMgPSBbXVxuICAgICAgICBsZXQgdGVtcFxuICAgICAgICBsZXQgY291bnRlciA9IDBcbiAgICAgICAgLy8gbGV0IGxvY2FsSXNFeGlzdCA9IGZhbHNlXG4gICAgICAgIFxuICAgICAgICBmb3IoY29uc3QgW3ZhbHVlXSBvZiB0aGlzLmZyYW1lV29ya1NlcnZpY2Uuc2VsZWN0aW9uTGlzdCl7XG4gICAgICAgICAgY29uc3QgcGFyZW50OmFueSA9IHZhbHVlXG4gICAgICAgICAgY291bnRlcisrXG4gICAgICAgICAgdGVtcCA9IHBhcmVudC5jaGlsZHJlbiA/IHBhcmVudC5jaGlsZHJlbi5maWx0ZXIoKGNoaWxkOmFueSkgPT4gY2hpbGQuaWRlbnRpZmllciA9PT0gdGhpcy5zZWxlY3RlZFRlcm0uaWRlbnRpZmllcikgOiBudWxsXG4gICAgICAgICAgYXNzb2NpYXRpb25zID0gcGFyZW50LmNoaWxkcmVuID8gcGFyZW50LmNoaWxkcmVuLm1hcCgoYzphbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjLmlkZW50aWZpZXIgPyAgeyBpZGVudGlmaWVyOiBjLmlkZW50aWZpZXIgfSA6IG51bGxcbiAgICAgICAgICB9KSA6IFtdXG4gICAgICAgICAgaWYgKHRlbXAgJiYgdGVtcC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuaXNUZXJtRXhpc3QgPSB0cnVlXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBhc3NvY2lhdGlvbnMucHVzaCh7IGlkZW50aWZpZXI6IHRoaXMuc2VsZWN0ZWRUZXJtLmlkZW50aWZpZXIgfSlcbiAgICAgICAgICAgICAgdGhpcy5pc1Rlcm1FeGlzdCA9IGZhbHNlXG4gICAgICAgICAgICAgIC8vIGlmKGNyZWF0ZWRUZXJtc0NvdW50ZXIgPT09IChjcmVhdGVkVGVybXMubGVuZ3RoLTEpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVndWVzdEJvZHkgPSB7XG4gICAgICAgICAgICAgICAgICByZXF1ZXN0OiB7XG4gICAgICAgICAgICAgICAgICAgIHRlcm06IHtcbiAgICAgICAgICAgICAgICAgICAgICAuLi4oYXNzb2NpYXRpb25zICYmIGFzc29jaWF0aW9ucy5sZW5ndGgpID8ge2Fzc29jaWF0aW9uczogWy4uLmFzc29jaWF0aW9uc119IDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNhbGxVcGRhdGVBc3NvY2lhdGlvbnMoY291bnRlciwgcGFyZW50LCByZWd1ZXN0Qm9keSlcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBjcmVhdGVkVGVybXNDb3VudGVyKytcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBjYWxsVXBkYXRlQXNzb2NpYXRpb25zVjIoY291bnRlcjogYW55LCBwYXJlbnQ6IGFueSwgcmVndWVzdEJvZHk6IGFueSApOiBQcm9taXNlPGFueT57XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlKSA9PiB7XG4gICAgICAgdGhpcy5mcmFtZVdvcmtTZXJ2aWNlLnVwZGF0ZVRlcm0odGhpcy5kYXRhLmZyYW1ld29ya0lkLCBwYXJlbnQuY2F0ZWdvcnksIHBhcmVudC5jb2RlLCByZWd1ZXN0Qm9keSkuc3Vic2NyaWJlKGFzeW5jICgpID0+IHtcbiAgICAgICAgcGFyZW50WydjaGlsZHJlbiddID0gcGFyZW50ICYmIHBhcmVudC5jaGlsZHJlbiA/Wy4uLnBhcmVudC5jaGlsZHJlbiwgLi4udGhpcy5zZWxlY3RlZFRlcm1BcnJheV06dGhpcy5zZWxlY3RlZFRlcm1BcnJheVxuICAgICAgICAgIGxldCBsaXN0RGF0YSA6IGFueSA9IHRoaXMuZnJhbWVXb3JrU2VydmljZS5saXN0LmdldCh0aGlzLmRhdGEuY29sdW1uSW5mby5jb2RlKVxuICAgICAgICAgIGxldCBkaWZmZXJlbmNlRGF0YSA9IFtdXG4gICAgICAgICAgaWYobGlzdERhdGEgJiYgbGlzdERhdGEuY2hpbGRyZW4gJiYgbGlzdERhdGEuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICBkaWZmZXJlbmNlRGF0YSAgPSBfLmRpZmZlcmVuY2VCeSh0aGlzLnNlbGVjdGVkVGVybUFycmF5LGxpc3REYXRhLmNoaWxkcmVuLCAnaWRlbnRpZmllcicpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkaWZmZXJlbmNlRGF0YSA9IHRoaXMuc2VsZWN0ZWRUZXJtQXJyYXlcbiAgICAgICAgICB9XG4gICAgICAgICAgbGlzdERhdGFbJ2Fzc29jaWF0aW9ucyddID0gbGlzdERhdGEgJiYgbGlzdERhdGEuYXNzb2NpYXRpb25zID9bLi4ubGlzdERhdGEuYXNzb2NpYXRpb25zLCAuLi5kaWZmZXJlbmNlRGF0YV06ZGlmZmVyZW5jZURhdGFcbiAgICAgICAgICBsaXN0RGF0YVsnY2hpbGRyZW4nXSA9IGxpc3REYXRhICYmIGxpc3REYXRhLmNoaWxkcmVuID9bLi4ubGlzdERhdGEuY2hpbGRyZW4sIC4uLmRpZmZlcmVuY2VEYXRhXTpkaWZmZXJlbmNlRGF0YVxuXG4gICAgICAgICAgdGhpcy5mcmFtZVdvcmtTZXJ2aWNlLnNlbGVjdGlvbkxpc3QuZm9yRWFjaCgoc2VsZWN0ZWREYXRhOiBhbnkpPT4ge1xuICAgICAgICAgICAgbGV0IGxpc3REYXRhIDogYW55ID0gdGhpcy5mcmFtZVdvcmtTZXJ2aWNlLmxpc3QuZ2V0KHNlbGVjdGVkRGF0YS5jYXRlZ29yeSlcbiAgICAgICAgICAgIGlmKGxpc3REYXRhICYmIGxpc3REYXRhLmNoaWxkcmVuICYmIGxpc3REYXRhLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUxvY2FsTGlzdChsaXN0RGF0YSxwYXJlbnQsIHRoaXMuc2VsZWN0ZWRUZXJtQXJyYXkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgXG4gICAgICAgIC8vIGxldCBzZWxlY3RlZENhcmRJbmZvID0gdGhpcy5mcmFtZVdvcmtTZXJ2aWNlLnNlbGVjdGlvbkxpc3QuZ2V0KHRoaXMuZGF0YS5jYXJkQ29sSW5mby5jb2RlKVxuICAgICAgICAvLyB0aGlzLmZyYW1lV29ya1NlcnZpY2UuY3VycmVudFNlbGVjdGlvbi5uZXh0KHsgdHlwZTogc2VsZWN0ZWRDYXJkSW5mby5jb2RlLCBkYXRhOnNlbGVjdGVkQ2FyZEluZm8sIGNhcmRSZWY6c2VsZWN0ZWRDYXJkSW5mby5jYXJkUmVmLCBpc1VwZGF0ZTogdHJ1ZX0pXG4gICAgICAgIGlmIChjb3VudGVyID09PSB0aGlzLmZyYW1lV29ya1NlcnZpY2Uuc2VsZWN0aW9uTGlzdC5zaXplKSB7XG4gICAgICAgICAgLy8gdGhpcyB2YWx1ZSBpcyBmb3Igc2VsZWN0ZWQgdGVybSBpbiBjYXNlIG9mIGNyZWF0ZSBzY2VuYXJpbywgaW4gY2FzZSBvZiBlZGl0IHNjZW5hcmlvIHRoaXMgd29uJ3QgYmUgYXZhaWFibGUgXG4gICAgICAgICAgLy8gc28gdGVybSBpcyBzZXQgZnJvbSBjaGlsZGRhdGEgd2hpY2ggaXMgcmVjZWl2ZWQgZnJvbSBwYXJhbXMgaW4gdXBkYXRlRGF0YVxuICAgICAgICAgIC8vIGNvbnN0IHZhbHVlID0gKHRoaXMuc2VsZWN0ZWRUZXJtICYmIHRoaXMuc2VsZWN0ZWRUZXJtLmlkZW50aWZpZXIpID8gdGhpcy5zZWxlY3RlZFRlcm0gOiB7fVxuICAgICAgICAgIFxuICAgICAgICAgIC8vIGNvbnN0IGZvdW5kID0gcGFyZW50LmNoaWxkcmVuID8gcGFyZW50LmNoaWxkcmVuLmZpbmQoYz0+IGMuaWRlbnRpZmllciA9PT0gdGhpcy5zZWxlY3RlZFRlcm0uaWRlbnRpZmllcikgOiBmYWxzZVxuICAgICAgICAgIC8vIGlmKCFmb3VuZCkge1xuXG4gICAgICAgICAgICAvLyBwYXJlbnRbJ2NoaWxkcmVuJ10gPSBwYXJlbnQgJiYgcGFyZW50LmNoaWxkcmVuID9bLi4ucGFyZW50LmNoaWxkcmVuLCAuLi50aGlzLnNlbGVjdGVkVGVybUFycmF5XTp0aGlzLnNlbGVjdGVkVGVybUFycmF5XG4gICAgICAgICAgICAvLyBwYXJlbnQuY2hpbGRyZW4gPyBwYXJlbnQuY2hpbGRyZW4ucHVzaCh0aGlzLnNlbGVjdGVkVGVybSkgOiBwYXJlbnRbJ2NoaWxkcmVuJ10gPSBbdGhpcy5zZWxlY3RlZFRlcm1dXG4gICAgICAgICAgLy8gfVxuICAgICAgICAgIHRoaXMuZGlzYWJsZVVwZGF0ZSA9IGZhbHNlXG4gICAgICAgICAgbGV0IHJldHVyblZhbHVlIDogYW55ID0gdHJ1ZVxuICAgICAgICAgIHJlc29sdmUodHJ1ZSlcbiAgICAgICAgICBhd2FpdCByZXR1cm5WYWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCByZXR1cm5WYWx1ZSA6IGFueSA9IHRydWVcbiAgICAgICAgICByZXNvbHZlKHRydWUpXG4gICAgICAgICAgYXdhaXQgcmV0dXJuVmFsdWVcbiAgICAgICAgfVxuICAgICAgfSwgKF9lcnI6IGFueSkgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBFZGl0ICR7dGhpcy5kYXRhLmNvbHVtbkluZm8ubmFtZX0gZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluIGxhdGVyYClcbiAgICAgICAgdGhpcy5fc25hY2tCYXIub3BlbihgVGVybSBBc3NvY2lhdGlvbiBmYWlsZWQuYClcbiAgICAgICAgdGhpcy5kaXNhYmxlTXVsdGlDcmVhdGUgPSBmYWxzZVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgYXN5bmMgY2FsbFVwZGF0ZUFzc29jaWF0aW9ucyhjb3VudGVyOiBhbnksIHBhcmVudDogYW55LCByZWd1ZXN0Qm9keTogYW55ICk6IFByb21pc2U8YW55PntcbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUpID0+IHtcbiAgICAgICB0aGlzLmZyYW1lV29ya1NlcnZpY2UudXBkYXRlVGVybSh0aGlzLmRhdGEuZnJhbWV3b3JrSWQsIHBhcmVudC5jYXRlZ29yeSwgcGFyZW50LmNvZGUsIHJlZ3Vlc3RCb2R5KS5zdWJzY3JpYmUoYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAoY291bnRlciA9PT0gdGhpcy5mcmFtZVdvcmtTZXJ2aWNlLnNlbGVjdGlvbkxpc3Quc2l6ZSkge1xuICAgICAgICAgIC8vIHRoaXMuc2VsZWN0ZWRUZXJtWydhc3NvY2lhdGlvblByb3BlcnRpZXMnXVsnYXBwcm92YWxTdGF0dXMnXSA9ICdEcmFmdCc7XG4gIFxuICAgICAgICAgIC8vIHRoaXMgdmFsdWUgaXMgZm9yIHNlbGVjdGVkIHRlcm0gaW4gY2FzZSBvZiBjcmVhdGUgc2NlbmFyaW8sIGluIGNhc2Ugb2YgZWRpdCBzY2VuYXJpbyB0aGlzIHdvbid0IGJlIGF2YWlhYmxlIFxuICAgICAgICAgIC8vIHNvIHRlcm0gaXMgc2V0IGZyb20gY2hpbGRkYXRhIHdoaWNoIGlzIHJlY2VpdmVkIGZyb20gcGFyYW1zIGluIHVwZGF0ZURhdGFcbiAgICAgICAgICAvLyBjb25zdCB2YWx1ZSA9ICh0aGlzLnNlbGVjdGVkVGVybSAmJiB0aGlzLnNlbGVjdGVkVGVybS5pZGVudGlmaWVyKSA/IHRoaXMuc2VsZWN0ZWRUZXJtIDoge31cbiAgICAgICAgICBjb25zdCBmb3VuZCA9IHBhcmVudC5jaGlsZHJlbiA/IHBhcmVudC5jaGlsZHJlbi5maW5kKChjOmFueSk9PiBjLmlkZW50aWZpZXIgPT09IHRoaXMuc2VsZWN0ZWRUZXJtLmlkZW50aWZpZXIpIDogZmFsc2VcbiAgICAgICAgICBpZighZm91bmQpIHtcbiAgICAgICAgICAgIHBhcmVudC5jaGlsZHJlbiA/IHBhcmVudC5jaGlsZHJlbi5wdXNoKHRoaXMuc2VsZWN0ZWRUZXJtKSA6IHBhcmVudFsnY2hpbGRyZW4nXSA9IFt0aGlzLnNlbGVjdGVkVGVybV1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5kaXNhYmxlVXBkYXRlID0gZmFsc2VcbiAgICAgICAgICBsZXQgcmV0dXJuVmFsdWUgOiBhbnkgPSB0cnVlXG4gICAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgICAgIGF3YWl0IHJldHVyblZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGV0IHJldHVyblZhbHVlIDogYW55ID0gdHJ1ZVxuICAgICAgICAgIHJlc29sdmUodHJ1ZSlcbiAgICAgICAgICBhd2FpdCByZXR1cm5WYWx1ZVxuICAgICAgICB9XG4gICAgICB9LCAoX2VycjogYW55KSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEVkaXQgJHt0aGlzLmRhdGEuY29sdW1uSW5mby5uYW1lfSBmYWlsZWQsIHBsZWFzZSB0cnkgYWdhaW4gbGF0ZXJgKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgdXBkYXRlVGVybURhdGEoZm9ybTphbnksIGRhdGE6IGFueSkge1xuICAgIHRoaXMuZGlzYWJsZVVwZGF0ZSA9IHRydWVcbiAgICBjb25zdCBmb3JtRGF0YSA9IHtcbiAgICAgIC8vIHVzZSB0aGlzIGlmIHlvdSBuZWVkIGRpc2FibGVkIGZpZWxkIHZhbHVlcyA6IGZvcm0uZ2V0UmF3VmFsdWUoKVxuICAgICAgLi4uZm9ybS52YWx1ZVxuICAgIH1cbiAgICBjb25zdCB1cGRhdGVEYXRhID0ge1xuICAgICAgZm9ybURhdGEsXG4gICAgICB1cGRhdGVUZXJtRGF0YTogZGF0YS5jaGlsZHJlbkRhdGFcbiAgICB9XG4gICAgdGhpcy51cGRhdGVUZXJtQXNzb2NpYXRpb25zKHVwZGF0ZURhdGEpXG4gIH1cblxuICB1cGRhdGVUZXJtQXNzb2NpYXRpb25zKHVwZGF0ZURhdGE/OiBhbnkpIHtcbiAgICBsZXQgYXNzb2NpYXRpb25zID0gW11cbiAgICBsZXQgdGVtcFxuICAgIGxldCBjb3VudGVyID0gMFxuICAgIC8vIGxldCBsb2NhbElzRXhpc3QgPSBmYWxzZVxuICAgIHRoaXMuZnJhbWVXb3JrU2VydmljZS5zZWxlY3Rpb25MaXN0LmZvckVhY2goKHBhcmVudCkgPT4ge1xuICAgICAgY291bnRlcisrXG4gICAgICB0ZW1wID0gcGFyZW50LmNoaWxkcmVuID8gcGFyZW50LmNoaWxkcmVuLmZpbHRlcigoY2hpbGQ6YW55KSA9PiBjaGlsZC5pZGVudGlmaWVyID09PSB0aGlzLnNlbGVjdGVkVGVybS5pZGVudGlmaWVyKSA6IG51bGxcbiAgICAgIGFzc29jaWF0aW9ucyA9IHBhcmVudC5jaGlsZHJlbiA/IHBhcmVudC5jaGlsZHJlbi5tYXAoKGM6YW55KSA9PiB7XG4gICAgICAgIC8vIHJldHVybiB7IGlkZW50aWZpZXI6IGMuaWRlbnRpZmllciwgYXBwcm92YWxTdGF0dXM6IGMuYXNzb2NpYXRpb25Qcm9wZXJ0aWVzP2MuYXNzb2NpYXRpb25Qcm9wZXJ0aWVzLmFwcHJvdmFsU3RhdHVzOiAnRHJhZnQnIH1cbiAgICAgICAgcmV0dXJuIGMuaWRlbnRpZmllciA/ICB7IGlkZW50aWZpZXI6IGMuaWRlbnRpZmllciB9IDogbnVsbFxuICAgICAgfSkgOiBbXVxuICAgICAgaWYgKHRlbXAgJiYgdGVtcC5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5pc1Rlcm1FeGlzdCA9IHRydWVcbiAgICAgICAgcmV0dXJuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBhc3NvY2lhdGlvbnMucHVzaCh7IGlkZW50aWZpZXI6IHRoaXMuc2VsZWN0ZWRUZXJtLmlkZW50aWZpZXIsIGFwcHJvdmFsU3RhdHVzOiBhcHBDb25zdGFudHMuRFJBRlQgfSlcbiAgICAgICAgaWYodGhpcy5zZWxlY3RlZFRlcm0gJiYgdGhpcy5zZWxlY3RlZFRlcm0uaWRlbnRpZmllcikge1xuICAgICAgICAgIGFzc29jaWF0aW9ucy5wdXNoKHsgaWRlbnRpZmllcjogdGhpcy5zZWxlY3RlZFRlcm0uaWRlbnRpZmllciB9KVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNUZXJtRXhpc3QgPSBmYWxzZVxuICAgICAgICBjb25zdCByZWd1ZXN0Qm9keSA9IHtcbiAgICAgICAgICByZXF1ZXN0OiB7XG4gICAgICAgICAgICB0ZXJtOiB7XG4gICAgICAgICAgICAgIC4uLih1cGRhdGVEYXRhICYmIHVwZGF0ZURhdGEuZm9ybURhdGEgJiYgdXBkYXRlRGF0YS51cGRhdGVUZXJtRGF0YS5jb2RlID09PSBwYXJlbnQuY29kZSkgPyB7Li4udXBkYXRlRGF0YS5mb3JtRGF0YX06IG51bGwsXG4gICAgICAgICAgICAgIC4uLihhc3NvY2lhdGlvbnMgJiYgYXNzb2NpYXRpb25zLmxlbmd0aCkgPyB7YXNzb2NpYXRpb25zOiBbLi4uYXNzb2NpYXRpb25zXX0gOiBudWxsLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZyYW1lV29ya1NlcnZpY2UudXBkYXRlVGVybSh0aGlzLmRhdGEuZnJhbWV3b3JrSWQsIHBhcmVudC5jYXRlZ29yeSwgcGFyZW50LmNvZGUsIHJlZ3Vlc3RCb2R5KS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIGlmIChjb3VudGVyID09PSB0aGlzLmZyYW1lV29ya1NlcnZpY2Uuc2VsZWN0aW9uTGlzdC5zaXplKSB7XG4gICAgICAgICAgICAvLyB0aGlzLnNlbGVjdGVkVGVybVsnYXNzb2NpYXRpb25Qcm9wZXJ0aWVzJ11bJ2FwcHJvdmFsU3RhdHVzJ10gPSAnRHJhZnQnO1xuXG4gICAgICAgICAgICAvLyB0aGlzIHZhbHVlIGlzIGZvciBzZWxlY3RlZCB0ZXJtIGluIGNhc2Ugb2YgY3JlYXRlIHNjZW5hcmlvLCBpbiBjYXNlIG9mIGVkaXQgc2NlbmFyaW8gdGhpcyB3b24ndCBiZSBhdmFpYWJsZSBcbiAgICAgICAgICAgIC8vIHNvIHRlcm0gaXMgc2V0IGZyb20gY2hpbGRkYXRhIHdoaWNoIGlzIHJlY2VpdmVkIGZyb20gcGFyYW1zIGluIHVwZGF0ZURhdGFcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gKHRoaXMuc2VsZWN0ZWRUZXJtICYmIHRoaXMuc2VsZWN0ZWRUZXJtLmlkZW50aWZpZXIpID8gdGhpcy5zZWxlY3RlZFRlcm0gOiAodXBkYXRlRGF0YSkgPyB7Li4udXBkYXRlRGF0YS51cGRhdGVUZXJtRGF0YSwgLi4udXBkYXRlRGF0YS5mb3JtRGF0YX0gOiB7fVxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlVXBkYXRlID0gZmFsc2VcbiAgICAgICAgICAgIHRoaXMuZGlhbG9nQ2xvc2UoeyB0ZXJtOiB7IC4uLnZhbHVlIH0sIGNyZWF0ZWQ6IHRydWUgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0sIChfZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBFZGl0ICR7dGhpcy5kYXRhLmNvbHVtbkluZm8ubmFtZX0gZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluIGxhdGVyYClcbiAgICAgICAgICB0aGlzLl9zbmFja0Jhci5vcGVuKGBUZXJtIEFzc29jaWF0aW9uIGZhaWxlZC5gKVxuICAgICAgICAgIHRoaXMuZGlzYWJsZU11bHRpQ3JlYXRlID0gZmFsc2VcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cblxuICBkaWFsb2dDbG9zZSh0ZXJtOiBhbnkpIHtcbiAgICB0aGlzLmZyYW1lV29ya1NlcnZpY2UucHVibGlzaEZyYW1ld29yaygpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmRpc2FibGVNdWx0aUNyZWF0ZSA9IGZhbHNlXG4gICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh0ZXJtKVxuICAgIH0sKF9lcnI6YW55KT0+IHtcbiAgICAgIHRoaXMuZGlzYWJsZU11bHRpQ3JlYXRlID0gZmFsc2VcbiAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHRlcm0pXG4gICAgICB0aGlzLl9zbmFja0Jhci5vcGVuKGBQdWJsaXNoICBmYWlsZWQuYClcbiAgICB9KTtcbiAgfVxuXG5cblxuXG5cbiAgYXN5bmMgbXVsdGlDcmVhdGVTdWJUaGVtZShfZm9ybTogYW55LCBkYXRhOiBhbnkpIHtcbiAgICB0aGlzLmRpc2FibGVNdWx0aUNyZWF0ZSA9IHRydWVcbiAgICBsZXQgZm9ybUFycmF5OmFueSA9IHRoaXMuY29tcGV0ZW5jeUZvcm0uZ2V0KCdjb21wVGhlbWVGaWVsZHMnKSBhcyBVbnR5cGVkRm9ybUFycmF5O1xuICAgIGxldCBzZWxlY3RlZEZvcm1EYXRhOmFueSAgPSBmb3JtQXJyYXkuYXQoMCkuZ2V0KCdjb21wZXRlbmN5U3ViVGhlbWUnKS52YWx1ZVxuICAgIGxldCBwcmV2aW91c1N1YlRoZW1lRGF0YSA9IGRhdGEuY2hpbGRyZW5EYXRhLmNoaWxkcmVuXG4gICAgbGV0IG5ld2x5QWRkZWQ6IGFueSA9IFtdXG4gICAgbGV0IHJlbW92ZWRFeGlzdGluZzphbnkgPSBbXVxuICAgIGxldCBjcmVhdGVkU3ViVGhlbWUgPSBbXVxuICAgIGxldCBjb3VudGVyU3ViVGhlbWUgPSAwXG4gICAgLy8gbGV0IGNvdW50ZXJSZXRpcmVTdWJUaGVtZSA9IDBcbiAgICBcbiAgICBuZXdseUFkZGVkID0gXy5kaWZmZXJlbmNlQnkoc2VsZWN0ZWRGb3JtRGF0YSwgcHJldmlvdXNTdWJUaGVtZURhdGEsICdyZWZJZCcpO1xuICAgIHJlbW92ZWRFeGlzdGluZyA9IF8uZGlmZmVyZW5jZUJ5KHByZXZpb3VzU3ViVGhlbWVEYXRhLCBzZWxlY3RlZEZvcm1EYXRhLCAncmVmSWQnKTtcbiAgICBpZihuZXdseUFkZGVkICYmIG5ld2x5QWRkZWQubGVuZ3RoKSB7XG4gICAgICAgIC8vIG5ld2x5QWRkZWQuZm9yRWFjaChhc3luYyAodmFsLCBpKSA9PntcbiAgICAgICAgZm9yKGxldCB2YWwgb2YgbmV3bHlBZGRlZCl7XG4gICAgICAgICAgY29uc3QgdGVybTogTlNGcmFtZXdvcmsuSUNyZWF0ZVRlcm0gPSB7XG4gICAgICAgICAgY29kZTogdGhpcy5mcmFtZVdvcmtTZXJ2aWNlLmdldFV1aWQoKSxcbiAgICAgICAgICBuYW1lOiB2YWwubmFtZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogdmFsLmRlc2NyaXB0aW9uLFxuICAgICAgICAgIGNhdGVnb3J5OiB0aGlzLmRhdGEuY29sdW1uSW5mby5jb2RlLFxuICAgICAgICAgIHN0YXR1czogYXBwQ29uc3RhbnRzLkxJVkUsXG4gICAgICAgICAgcmVmSWQ6IHZhbC5yZWZJZCxcbiAgICAgICAgICByZWZUeXBlOiB2YWwucmVmVHlwZSxcbiAgICAgICAgICAvLyBhcHByb3ZhbFN0YXR1czphcHBDb25zdGFudHMuRFJBRlQsXG4gICAgICAgICAgcGFyZW50czogW1xuICAgICAgICAgICAgeyBpZGVudGlmaWVyOiBgJHt0aGlzLmRhdGEuZnJhbWV3b3JrSWQudG9Mb3dlckNhc2UoKX1fJHt0aGlzLmRhdGEuY29sdW1uSW5mby5jb2RlfWAgfVxuICAgICAgICAgIF0sXG4gICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgIHRpbWVTdGFtcDogbmV3IERhdGUoKS5nZXRUaW1lKClcbiAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHJlcXVlc3RCb2R5OmFueSA9IHtcbiAgICAgICAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgICAgICAgdGVybTogdGVybVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHBhcmVudENvbHVtbkNvbmZpZ0RhdGE6YW55ID0gdGhpcy5mcmFtZVdvcmtTZXJ2aWNlLmdldFByZXZpb3VzQ2F0ZWdvcnkodGhpcy5kYXRhLmNvbHVtbkluZm8uY29kZSlcbiAgICAgICAgICBsZXQgcGFyZW50Q29sOiBhbnkgPSB0aGlzLmZyYW1lV29ya1NlcnZpY2Uuc2VsZWN0aW9uTGlzdC5nZXQocGFyZW50Q29sdW1uQ29uZmlnRGF0YS5jb2RlKVxuICAgICAgICBcbiAgICAgICAgICAgIFxuICAgICAgICAgIGxldCByZXNwb25zZURhdGE6IGFueSA9IGF3YWl0IHRoaXMuY3JhdGVUZXJtKHRoaXMuZGF0YS5mcmFtZXdvcmtJZCwgdGhpcy5kYXRhLmNvbHVtbkluZm8uY29kZSwgcmVxdWVzdEJvZHkpXG4gICAgICAgICAgcmVxdWVzdEJvZHkucmVxdWVzdC50ZXJtWydpZGVudGlmaWVyJ10gPSByZXNwb25zZURhdGEucmVzdWx0Lm5vZGVfaWRbMF1cbiAgICAgICAgICBjcmVhdGVkU3ViVGhlbWUucHVzaChyZXF1ZXN0Qm9keS5yZXF1ZXN0LnRlcm0pXG4gICAgICAgICAgY291bnRlclN1YlRoZW1lKytcbiAgICAgICAgICBpZihjb3VudGVyU3ViVGhlbWUgPT09IG5ld2x5QWRkZWQubGVuZ3RoKXtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMudXBkYXRlVGVybUFzc29jaWF0aW9uc011bHRpVjIoY3JlYXRlZFN1YlRoZW1lLCBwYXJlbnRDb2wpXG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHRoaXMuZnJhbWVXb3JrU2VydmljZS51cGRhdGVGcmFtZXdvcmtMaXN0KHRoaXMuZGF0YS5jb2x1bW5JbmZvLmNvZGUsIHBhcmVudENvbCwgY3JlYXRlZFN1YlRoZW1lLCAnY3JlYXRlJylcbiAgICAgICAgICAgIGlmKCEocmVtb3ZlZEV4aXN0aW5nICYmIHJlbW92ZWRFeGlzdGluZy5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgIHRoaXMuZGlhbG9nQ2xvc2UoeyB0ZXJtOiB0aGlzLnNlbGVjdGVkVGVybUFycmF5LCBjcmVhdGVkOiB0cnVlLCBtdWx0aTp0cnVlLCBjYWxsVXBkYXRlOiBmYWxzZSB9KVxuICAgICAgICAgICAgICB0aGlzLmRpc2FibGVNdWx0aUNyZWF0ZSA9IGZhbHNlXG4gICAgICAgICAgICAgIHRoaXMuX3NuYWNrQmFyLm9wZW4oYENvbXBldGVuY3kgdGhlbWUgdXBkYXRlZCBzdWNjZXNzZnVsbHkuYClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gIFxuICAgIGlmKHJlbW92ZWRFeGlzdGluZyAmJiByZW1vdmVkRXhpc3RpbmcubGVuZ3RoKSB7XG4gICAgICBsZXQgcmVtb3ZlZFRlcm1zQ29sbGVjdGlvbiA9IFtdXG4gICAgICBmb3IobGV0IHJlbW92ZWRUZXJtIG9mIHJlbW92ZWRFeGlzdGluZykge1xuICAgICAgICByZW1vdmVkVGVybXNDb2xsZWN0aW9uLnB1c2gocmVtb3ZlZFRlcm0uY29kZSlcbiAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGxldCBzdWJUaGVtZVJlcXVlc3QgPXtcbiAgICAgICAgICBcInJlcXVlc3RcIjogeyBcbiAgICAgICAgICAgIFwiY29udGVudElkc1wiOiByZW1vdmVkVGVybXNDb2xsZWN0aW9uIFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgYXdhaXQgdGhpcy5mcmFtZVdvcmtTZXJ2aWNlLnJldGlyZU11bHRpcGxlVGVybSh0aGlzLmRhdGEuZnJhbWV3b3JrSWQsIHRoaXMuZGF0YS5jb2x1bW5JbmZvLmNvZGUsIHN1YlRoZW1lUmVxdWVzdCkudG9Qcm9taXNlKCkudGhlbihhc3luYyAoKSA9PiB7XG5cbiAgICAgICAgICAvLyBjb3VudGVyUmV0aXJlU3ViVGhlbWUrK1xuICAgICAgICAgIGNvbnN0IHBhcmVudENvbHVtbkNvbmZpZ0RhdGE6YW55ID0gdGhpcy5mcmFtZVdvcmtTZXJ2aWNlLmdldFByZXZpb3VzQ2F0ZWdvcnkodGhpcy5kYXRhLmNvbHVtbkluZm8uY29kZSlcbiAgICAgICAgICBsZXQgcGFyZW50Q29sOiBhbnkgPSB0aGlzLmZyYW1lV29ya1NlcnZpY2Uuc2VsZWN0aW9uTGlzdC5nZXQocGFyZW50Q29sdW1uQ29uZmlnRGF0YS5jb2RlKVxuXG4gICAgICAgICAgLy8gbGV0IHNlY3Rpb25MaXN0ID0gdGhpcy5mcmFtZVdvcmtTZXJ2aWNlLnNlbGVjdGlvbkxpc3QuZ2V0KHBhcmVudENvbHVtbkNvbmZpZ0RhdGEuY29kZSlcbiAgICAgICAgICBcbiAgICAgICAgICBjb25zdCBzZWN0aW9uTGlzdGNoaWxkcmVuTGlzdDogYW55ID0gXy5kaWZmZXJlbmNlV2l0aChwYXJlbnRDb2wuY2hpbGRyZW4sIHJlbW92ZWRFeGlzdGluZywgKGE6YW55LCBiOiBhbnkpID0+IGEuaWRlbnRpZmllciA9PT0gYi5pZGVudGlmaWVyKTtcbiAgICAgICAgICBjb25zdCBzZWN0aW9uTGlzdEFzc29jaWF0aW9uTGlzdDogYW55ID0gXy5kaWZmZXJlbmNlV2l0aChwYXJlbnRDb2wuYXNzb2NpYXRpb25zLCByZW1vdmVkRXhpc3RpbmcsIChhOmFueSwgYjogYW55KSA9PiBhLmlkZW50aWZpZXIgPT09IGIuaWRlbnRpZmllcik7XG4gICAgICAgICBcbiAgICAgICAgICBwYXJlbnRDb2xbJ2NoaWxkcmVuJ10gPSBzZWN0aW9uTGlzdGNoaWxkcmVuTGlzdFxuICAgICAgICAgIHBhcmVudENvbFsnYXNzb2NpYXRpb25zJ10gPSBzZWN0aW9uTGlzdEFzc29jaWF0aW9uTGlzdFxuICAgIFxuXG4gICAgICAgICAgdGhpcy5mcmFtZVdvcmtTZXJ2aWNlLnVwZGF0ZUZyYW1ld29ya0xpc3QodGhpcy5kYXRhLmNvbHVtbkluZm8uY29kZSwgcGFyZW50Q29sLCByZW1vdmVkRXhpc3RpbmcsICdkZWxldGUnKVxuXG4gICAgICAgICAgdGhpcy5kaWFsb2dDbG9zZSh7IHRlcm06IFtdLCBjcmVhdGVkOiB0cnVlLCBtdWx0aTp0cnVlLCBjYWxsVXBkYXRlOiBmYWxzZSB9KVxuICAgICAgICAgIHRoaXMuZnJhbWVXb3JrU2VydmljZS5jdXJyZW50U2VsZWN0aW9uLm5leHQoeyB0eXBlOiBwYXJlbnRDb2x1bW5Db25maWdEYXRhLmNvZGUsIGRhdGE6IHBhcmVudENvbCwgY2FyZFJlZjogcGFyZW50Q29sLmNhcmRSZWYgfSk7XG4gICAgICAgICAgdGhpcy5kaXNhYmxlTXVsdGlDcmVhdGUgPSBmYWxzZVxuICAgICAgICAgIHRoaXMuX3NuYWNrQmFyLm9wZW4oYENvbXBldGVuY3kgdGhlbWUgdXBkYXRlZCBzdWNjZXNzZnVsbHkuYClcblxuICAgICAgICB9KVxuICAgIH1cblxuICAgIHRoaXMuZGlzYWJsZU11bHRpQ3JlYXRlID0gZmFsc2VcbiAgfVxuXG4gIG9uRGlzYWJsZVRoZW1lKG9wdGlvbjogYW55KXtcbiAgICBjb25zdCBwYXJlbnRDb2x1bW5Db25maWdEYXRhOmFueSA9IHRoaXMuZnJhbWVXb3JrU2VydmljZS5nZXRQcmV2aW91c0NhdGVnb3J5KHRoaXMuZGF0YS5jb2x1bW5JbmZvLmNvZGUpXG4gICAgbGV0IHBhcmVudENvbDogYW55ID0gdGhpcy5mcmFtZVdvcmtTZXJ2aWNlLnNlbGVjdGlvbkxpc3QuZ2V0KHBhcmVudENvbHVtbkNvbmZpZ0RhdGEuY29kZSlcbiAgICBsZXQgcmVzdWx0ID0gLTFcbiAgICBpZihwYXJlbnRDb2wgJiYgcGFyZW50Q29sLmNoaWxkcmVuICYmIHBhcmVudENvbC5jaGlsZHJlbi5sZW5ndGgpe1xuICAgICAgcmVzdWx0ID0gcGFyZW50Q29sLmNoaWxkcmVuLmZpbmRJbmRleCgoZWxlOiBhbnkpID0+IHtcbiAgICAgICAgaWYoIChlbGUucmVmVHlwZSA9PT0gJ3RoZW1lJykgICYmICh0aGlzLnNlbGV0ZWRDb21wZXRlbmN5QXJlYS5jb2RlID09PSBlbGUuYWRkaXRpb25hbFByb3BlcnRpZXMuY29tcGV0ZW5jeUFyZWEuY29kZSkpIHtcbiAgICAgICAgcmV0dXJuICBlbGUucmVmSWQgPT09IG9wdGlvbi5yZWZJZFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZihyZXN1bHQgPCAwKXtcbiAgICAgIGxldCBmb3JtQXJyYXkgPSB0aGlzLmNvbXBldGVuY3lGb3JtLmdldCgnY29tcFRoZW1lRmllbGRzJykgYXMgVW50eXBlZEZvcm1BcnJheTtcbiAgICAgIHJlc3VsdCA9IGZvcm1BcnJheS52YWx1ZS5maW5kSW5kZXgoKGZvcm1FbGU6IGFueSkgPT4ge1xuICAgICAgICBpZihmb3JtRWxlLmNvbXBldGVuY3lUaGVtZSAmJiBmb3JtRWxlLmNvbXBldGVuY3lUaGVtZS5yZWZJZCApe1xuICAgICAgICAgIHJldHVybiAgZm9ybUVsZS5jb21wZXRlbmN5VGhlbWUucmVmSWQgPT09IG9wdGlvbi5yZWZJZFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfSk7XG4gICAgIH1cbiBcbiAgICAvLyBcbiAgICBcbiAgICByZXR1cm4gcmVzdWx0ID49IDAgPyB0cnVlOiBmYWxzZVxuICB9XG5cblxuICB1cGRhdGVMb2NhbExpc3QoaXRlbTogYW55LCBwYXJlbnQ6IGFueSxzZWxlY3RlZFRlcm1BcnJheTogYW55LCB1cGRhdGVUeXBlPzphbnkpIHtcbiAgICBpZihpdGVtICYmIGl0ZW0uY2hpbGRyZW4gJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIGlmKHVwZGF0ZVR5cGUgPT09ICdkZWxldGUnKXtcbiAgICAgICAgaXRlbS5jaGlsZHJlbi5mb3JFYWNoKChpdG1EYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICBpZihpdG1EYXRhLmlkZW50aWZpZXIgPT09IHBhcmVudC5pZGVudGlmaWVyKSB7XG4gICAgICAgICAgICAvLyBsZXQgZGlmZmVyZW5jZURhdGEgPSBbXVxuICAgICAgICAgICAgLy8gaWYoaXRtRGF0YSAmJiBpdG1EYXRhLmNoaWxkcmVuICYmIGl0bURhdGEuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyAgIGRpZmZlcmVuY2VEYXRhICA9IF8uZGlmZmVyZW5jZUJ5KGl0bURhdGEuY2hpbGRyZW4sc2VsZWN0ZWRUZXJtQXJyYXksICdpZGVudGlmaWVyJyk7XG4gICAgICAgICAgICAvLyB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gICBkaWZmZXJlbmNlRGF0YSA9IHNlbGVjdGVkVGVybUFycmF5XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAvLyBkaWZmZXJlbmNlRGF0YSA9IHRoaXMuc2VsZWN0ZWRUZXJtQXJyYXlcbiAgICAgICAgICAgIGNvbnN0IGFzc29jaWF0aW9uTGlzdDogYW55ID0gXy5kaWZmZXJlbmNlV2l0aChpdG1EYXRhLmFzc29jaWF0aW9ucyxzZWxlY3RlZFRlcm1BcnJheSwgKGE6YW55LCBiOiBhbnkpID0+IGEuaWRlbnRpZmllciA9PT0gYi5pZGVudGlmaWVyKTtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuTGlzdDogYW55ID0gXy5kaWZmZXJlbmNlV2l0aChpdG1EYXRhLmNoaWxkcmVuLCBzZWxlY3RlZFRlcm1BcnJheSwgKGE6YW55LCBiOiBhbnkpID0+IGEuaWRlbnRpZmllciA9PT0gYi5pZGVudGlmaWVyKTtcbiAgICAgICAgICAgIGl0bURhdGFbJ2Fzc29jaWF0aW9ucyddID0gYXNzb2NpYXRpb25MaXN0XG4gICAgICAgICAgICBpdG1EYXRhWydjaGlsZHJlbiddID0gY2hpbGRyZW5MaXN0XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKGl0bURhdGEuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTG9jYWxMaXN0KGl0bURhdGEsIHBhcmVudCxzZWxlY3RlZFRlcm1BcnJheSx1cGRhdGVUeXBlKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGl0ZW0uY2hpbGRyZW4uZm9yRWFjaCgoaXRtRGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgaWYoaXRtRGF0YS5pZGVudGlmaWVyID09PSBwYXJlbnQuaWRlbnRpZmllcikge1xuICAgICAgICAgICAgbGV0IGRpZmZlcmVuY2VEYXRhID0gW11cbiAgICAgICAgICAgIGlmKGl0bURhdGEgJiYgaXRtRGF0YS5jaGlsZHJlbiAmJiBpdG1EYXRhLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgICAgICBkaWZmZXJlbmNlRGF0YSAgPSBfLmRpZmZlcmVuY2VCeShzZWxlY3RlZFRlcm1BcnJheSxpdG1EYXRhLmNoaWxkcmVuLCAnaWRlbnRpZmllcicpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZGlmZmVyZW5jZURhdGEgPSBzZWxlY3RlZFRlcm1BcnJheVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZGlmZmVyZW5jZURhdGEgPSB0aGlzLnNlbGVjdGVkVGVybUFycmF5XG4gICAgICAgICAgICBpdG1EYXRhWydhc3NvY2lhdGlvbnMnXSA9IGl0bURhdGEgJiYgaXRtRGF0YS5hc3NvY2lhdGlvbnMgP1suLi5pdG1EYXRhLmFzc29jaWF0aW9ucywgLi4uZGlmZmVyZW5jZURhdGFdOmRpZmZlcmVuY2VEYXRhXG4gICAgICAgICAgICBpdG1EYXRhWydjaGlsZHJlbiddID0gaXRtRGF0YSAmJiBpdG1EYXRhLmNoaWxkcmVuID9bLi4uaXRtRGF0YS5jaGlsZHJlbiwgLi4uZGlmZmVyZW5jZURhdGFdOmRpZmZlcmVuY2VEYXRhXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKGl0bURhdGEuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTG9jYWxMaXN0KGl0bURhdGEsIHBhcmVudCwgc2VsZWN0ZWRUZXJtQXJyYXkpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGRlbGV0ZVRoZW1lKCkge1xuICAgIHRoaXMuZGlzYWJsZU11bHRpQ3JlYXRlID0gdHJ1ZVxuICAgIGNvbnN0IGNhcmREYXRhID0gdGhpcy5kYXRhLmNoaWxkcmVuRGF0YVxuICAgIGxldCByZW1vdmVkTGlzdFRlcm0gPSBbXVxuICAgIHJlbW92ZWRMaXN0VGVybS5wdXNoKGNhcmREYXRhLmNvZGUpXG4gICAgbGV0IHN1YlRoZW1lUmVxdWVzdCA9e1xuICAgICAgXCJyZXF1ZXN0XCI6IHsgXG4gICAgICAgIFwiY29udGVudElkc1wiOiByZW1vdmVkTGlzdFRlcm1cbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgdGhpcy5mcmFtZVdvcmtTZXJ2aWNlLnJldGlyZU11bHRpcGxlVGVybSh0aGlzLmZyYW1lV29ya1NlcnZpY2UuZnJhbWV3b3JrSWQsIGNhcmREYXRhLmNhdGVnb3J5LCBzdWJUaGVtZVJlcXVlc3QpLnRvUHJvbWlzZSgpLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgXG4gICAgICBsZXQgcmVtb3ZlZEV4aXN0aW5nID0gW2NhcmREYXRhXVxuICAgICAgY29uc3QgcGFyZW50Q29sdW1uQ29uZmlnRGF0YTphbnkgPSB0aGlzLmZyYW1lV29ya1NlcnZpY2UuZ2V0UHJldmlvdXNDYXRlZ29yeShjYXJkRGF0YS5jYXRlZ29yeSlcbiAgICAgIGxldCBwYXJlbnRDb2w6IGFueSA9IHRoaXMuZnJhbWVXb3JrU2VydmljZS5zZWxlY3Rpb25MaXN0LmdldChwYXJlbnRDb2x1bW5Db25maWdEYXRhLmNvZGUpXG4gICAgXG4gICAgICBjb25zdCBzZWN0aW9uTGlzdGNoaWxkcmVuTGlzdDogYW55ID0gXy5kaWZmZXJlbmNlV2l0aChwYXJlbnRDb2wuY2hpbGRyZW4sIHJlbW92ZWRFeGlzdGluZywgKGE6YW55LCBiOiBhbnkpID0+IGEuaWRlbnRpZmllciA9PT0gYi5pZGVudGlmaWVyKTtcbiAgICAgIGNvbnN0IHNlY3Rpb25MaXN0QXNzb2NpYXRpb25MaXN0OiBhbnkgPSBfLmRpZmZlcmVuY2VXaXRoKHBhcmVudENvbC5hc3NvY2lhdGlvbnMsIHJlbW92ZWRFeGlzdGluZywgKGE6YW55LCBiOiBhbnkpID0+IGEuaWRlbnRpZmllciA9PT0gYi5pZGVudGlmaWVyKTtcbiAgICBcbiAgICAgIHBhcmVudENvbFsnY2hpbGRyZW4nXSA9IHNlY3Rpb25MaXN0Y2hpbGRyZW5MaXN0XG4gICAgICBwYXJlbnRDb2xbJ2Fzc29jaWF0aW9ucyddID0gc2VjdGlvbkxpc3RBc3NvY2lhdGlvbkxpc3RcbiAgICAgIHRoaXMuZnJhbWVXb3JrU2VydmljZS51cGRhdGVGcmFtZXdvcmtMaXN0KGNhcmREYXRhLmNhdGVnb3J5LCBwYXJlbnRDb2wsIHJlbW92ZWRFeGlzdGluZywgJ2RlbGV0ZScpXG4gICAgICB0aGlzLmZyYW1lV29ya1NlcnZpY2UuY3VycmVudFNlbGVjdGlvbi5uZXh0KHsgdHlwZTogcGFyZW50Q29sdW1uQ29uZmlnRGF0YS5jb2RlLCBkYXRhOiBwYXJlbnRDb2wsIGNhcmRSZWY6IHBhcmVudENvbC5jYXJkUmVmIH0pXG4gICAgICB0aGlzLmRpYWxvZ0Nsb3NlKHt9KVxuICAgICAgdGhpcy5kaXNhYmxlTXVsdGlDcmVhdGUgPSBmYWxzZVxuICAgICAgdGhpcy5fc25hY2tCYXIub3BlbihgQ29tcGV0ZW5jeSB0aGVtZSBkZWxldGVkIHN1Y2Nlc3NmdWxseS5gKVxuICAgIH0sKChfZXJyOiBhbnkpPT4ge1xuICAgICAgdGhpcy5kaXNhYmxlTXVsdGlDcmVhdGUgPSBmYWxzZVxuICAgICAgdGhpcy5fc25hY2tCYXIub3BlbihgQ29tcGV0ZW5jeSB0aGVtZSBkZWxldGUgZmFpbGVkLmApXG4gICAgfSkpXG4gIH1cblxuXG4gIC8vIGdldHRlciBtZXRob2RzXG5cbiAgZ2V0IGNvbXBUaGVtZUZpZWxkcygpOiBVbnR5cGVkRm9ybUFycmF5IHtcbiAgICByZXR1cm4gdGhpcy5jb21wZXRlbmN5Rm9ybS5nZXQoJ2NvbXBUaGVtZUZpZWxkcycpIGFzIFVudHlwZWRGb3JtQXJyYXk7XG4gIH1cblxufVxuIiwiXG48ZGl2IGNsYXNzPVwiXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRpc2FibGVNdWx0aUNyZWF0ZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBmbGV4LTEgdy0xMDAgYWJzb2x1dGUgbG9hZGVyLWJnIGl0ZW1zLWNlbnRlciBwdC01IHRleHQtY2VudGVyXCI+XG4gICAgICAgICAgPG1hdC1zcGlubmVyIGNsYXNzPVwiZGlzcGxheS1pbmxpbmUtYmxvY2sgbWItNVwiIFtkaWFtZXRlcl09XCI1MFwiIFtzdHJva2VXaWR0aF09XCIzXCI+PC9tYXQtc3Bpbm5lcj5cbiAgICAgICAgICA8IS0tIDxwPnt7bG9hZGVyTXNnfX08L3A+IC0tPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPGRpdiBjbGFzcz1cImRpYWxvZ05ld1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm1vZGFsVGl0bGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBpMThuLWFyaWEtbGFiZWwgYXJpYS1sYWJlbD1cImFjdGlvbiBpdGVtc1wiXG4gICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwiY2FyZE1lbnVcIiBbbWF0TWVudVRyaWdnZXJEYXRhXT1cInsnZGF0YSc6ZGF0YX1cIiBjbGFzcz1cImFjdGlvbi1idG5cIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtNFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdGVybSBvZiBkYXRhPy5zZWxlY3RlZFBhcmVudFRlcm1zXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRlcm0uY2F0ZWdvcnkgIT09ICdjb21wZXRlbmN5J1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC0xIGZsZXgtY29sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwibmFtZVwiIGNsYXNzPVwibWFyZ2luLXJlbW92ZS1ib3R0b20gZm9ybS1sYWJlbFwiIGFyaWEtbGFiZWw9XCJGaXJzdCBuYW1lIGxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tmcmFtZVdvcmtTZXJ2aWNlLmdldENvbmZpZyh0ZXJtLmNhdGVnb3J5KS5sYWJlbE5hbWV9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwiZmxleC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG5hbWU9XCJuYW1lXCIgaWQ9XCJuYW1lXCIgI25hbWUgcGxhY2Vob2xkZXI9XCJ7e2FwcF9zdHJpbmdzLm5hbWV9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ0ZXJtLm5hbWVcIiBkaXNhYmxlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93LWRpdmlkZXJcIj48L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbXBldGVuY3lGb3JtXCI+XG4gICAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImNvbXBldGVuY3lGb3JtXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cIm5hbWVcIiBjbGFzcz1cIm1hcmdpbi1yZW1vdmUtYm90dG9tIGZvcm0tbGFiZWwgcmVxdWlyZWRcIiBhcmlhLWxhYmVsPVwiRmlyc3QgbmFtZSBsYWJlIFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3snU2VsZWN0IEFyZWEnfX1cbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tZ3JvdXAgY2xhc3M9XCJjb21wZXRlbmN5LWdyb3VwXCIgYXJpYS1sYWJlbD1cIlNlbGVjdCBhbiBvcHRpb25cIiBmb3JtQ29udHJvbE5hbWU9XCJjb21wQXJlYVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uICBbZGlzYWJsZWRdPVwiZGF0YT8uY29sdW1uSW5mbz8uY29kZSA9PT0gJ3N1YnRoZW1lJyB8fCBkYXRhLm9wZW5Nb2RlID09PSd2aWV3J1wiIGNsYXNzPVwibGVhcm5pbmctc2VjdGlvblwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlLWJ0bic6aXRlbT8uY29kZSA9PT0gc2VsZXRlZENvbXBldGVuY3lBcmVhPy5jb2RlfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNvbXBldGVuY3lBcmVhPy5jaGlsZHJlblwiIFt2YWx1ZV09XCJpdGVtXCIgW2NoZWNrZWRdPVwiaXRlbT8uY29kZSA9PT0gc2VsZXRlZENvbXBldGVuY3lBcmVhPy5jb2RlXCIgKGNoYW5nZSk9XCJjbGVhclNlbGVjdGVkVGhlbWVzKGl0ZW0pXCI+e3tpdGVtLm5hbWV9fTwvbWF0LXJhZGlvLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXJhZGlvLWdyb3VwPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YT8ubW9kZSA9PT0gJ211bHRpLWNyZWF0ZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtZW5kIG1iLTRcIiA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGE/LmNvbHVtbkluZm8/LmNvZGUgIT09ICdzdWJ0aGVtZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJtYXQtYnV0dG9uIGZsZXggaXRlbXMtY2VudGVyIGNyZWF0ZS1hY2NvcmRpb24tYnRuXCIgKm5nSWY9XCJkYXRhLm1vZGUgPT09ICdtdWx0aS1jcmVhdGUnXCIgKGNsaWNrKT1cImFkZENvbXBldGVuY3lUaGVtZSgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtci0yIG1hdC1pY29uLWN1c3RvbSBcIj5hZGRfY2lyY2xlX291dGxpbmU8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIG1vcmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ge3tkYXRhLmNvbHVtbkluZm8ubmFtZX19ICAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtYWNjb3JkaW9uIGZvcm1BcnJheU5hbWU9XCJjb21wVGhlbWVGaWVsZHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCAqbmdGb3I9XCJsZXQgZmllbGQgb2YgY29tcGV0ZW5jeUZvcm0/LmdldCgnY29tcFRoZW1lRmllbGRzJylbJ2NvbnRyb2xzJ107IGxldCBpID0gaW5kZXg7IGxldCBpc0ZpcnN0ID0gZmlyc3RcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hcmdpbi1ib3R0b20tbCBjb21wLXRoZW1lLWZpZWxkc1wiIFtmb3JtR3JvdXBOYW1lXT1cImlcIiBbZXhwYW5kZWRdPVwiaXNGaXJzdFwiPiAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Y29tcGV0ZW5jeUZvcm0/LmdldCgnY29tcFRoZW1lRmllbGRzJylbJ2NvbnRyb2xzJ11baV1bJ2NvbnRyb2xzJ10/LmNvbXBldGVuY3lUaGVtZT8udmFsdWU/Lm5hbWV9fSBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGE/LmNvbHVtbkluZm8/LmNvZGUgIT09ICdzdWJ0aGVtZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwiZGF0YS5tb2RlID09PSAnbXVsdGktY3JlYXRlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUNvbXBGaWVsZHMoaSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXQtaWNvbi1jdXN0b20gXCI+ZGVsZXRlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtd3JhcHBlciBtYXJnaW4tdG9wLXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtNCBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtMSBmbGV4LWNvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cIm5hbWVcIiBjbGFzcz1cIm1hcmdpbi1yZW1vdmUtYm90dG9tIGZvcm0tbGFiZWwgcmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJGaXJzdCBuYW1lIGxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkYXRhLm9wZW5Nb2RlICE9PSAndmlldyc/ICdTZWxlY3QgQ29tcGV0ZW5jeSBUaGVtZSc6ICdDb21wZXRlbmN5IFRoZW1lIE5hbWUnfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cImZsZXgtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IFtkaXNhYmxlZF09XCJkYXRhPy5jb2x1bW5JbmZvPy5jb2RlID09PSAnc3VidGhlbWUnIHx8IGRhdGEub3Blbk1vZGUgPT09J3ZpZXcnXCIgcGxhY2Vob2xkZXI9XCJDaG9vc2UgdGhlIENvbXBldGVuY3kgVGhlbWVcIiBmb3JtQ29udHJvbE5hbWU9XCJjb21wZXRlbmN5VGhlbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGZpbHRlcmVkYWxsQ29tcGV0ZW5jeVRoZW1lXCIgIFt2YWx1ZV09XCJvcHRpb25cIiBbZGlzYWJsZWRdPVwib25EaXNhYmxlVGhlbWUob3B0aW9uKSB8fCBkYXRhLm9wZW5Nb2RlID09PSd2aWV3J1wiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvblNlbGVjdGlvbkNoYW5nZSk9XCJPblRoZW1lU2VsZWN0aW9uKCRldmVudCwgaSwgb3B0aW9uKVwiICA+e3tvcHRpb24ubmFtZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9wdGlvbi5yZWZJZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWwtMiByZWYtaWRcIj4oe3tvcHRpb24ucmVmSWR9fSk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJpc1Rlcm1FeGlzdFwiPnt7YXBwX3N0cmluZ3MuYWxyZWFkeUV4aXN0fX08L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1jb2wgbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZm5hbWVcIiBjbGFzcz1cIm1hcmdpbi1yZW1vdmUtYm90dG9tIGZvcm0tbGFiZWwgcmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTE4bj1cIkZpcnN0IE5hbWUgbGFiZWx8TGFiZWwgd2hpY2ggZXhwbGFpbnMgdGhlIHVzZXIgdG8gZW50ZXIgZmlyc3QgbmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMThuLWFyaWEtbGFiZWwgYXJpYS1sYWJlbD1cIkZpcnN0IG5hbWUgbGFiZWxcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkYXRhLm9wZW5Nb2RlICE9PSAndmlldyc/ICdTZWxlY3QgQ29tcGV0ZW5jeSBTdWItVGhlbWUnOiAnQ29tcGV0ZW5jeSBTdWItVGhlbWUgTmFtZSd9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJmbGV4LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IHBsYWNlaG9sZGVyPVwiQ2hvb3NlIHRoZSBDb21wZXRlbmN5IFRoZW1lXCIgZm9ybUNvbnRyb2xOYW1lPVwiY29tcGV0ZW5jeVN1YlRoZW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXJlZGFsbENvbXBldGVuY3lTdWJUaGVtZVwiIFt2YWx1ZV09XCJvcHRpb25cIj57e29wdGlvbi5uYW1lfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHt7Y29tcGV0ZW5jeUZvcm0/LmdldCgnY29tcFRoZW1lRmllbGRzJylbJ2NvbnRyb2xzJ11baV1bJ2NvbnRyb2xzJ10/LmNvbXBldGVuY3lTdWJUaGVtZT8udmFsdWUgfGpzb259fSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ3LWZ1bGwgZmllbGQtaGVpZ2h0XCIgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgY2xhc3M9XCIgcGxhY2Vob2xkZXItdGV4dFwiIHBsYWNlaG9sZGVyPVwiQ2hvb3NlIHRoZSBDb21wZXRlbmN5IFN1Yi1UaGVtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNvbXBldGVuY3lTdWJUaGVtZVwiIG11bHRpcGxlIFtkaXNhYmxlZF09XCJkYXRhLm9wZW5Nb2RlID09PSd2aWV3J1wiIHBhbmVsQ2xhc3M9XCJmdWxsLXdpZHRoLXBhbmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gW25nQ2xhc3NdPVwieydkaXNiYWxlZFNlbGVjdCc6aXNIaWRlRGF0YX1cIiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QtdHJpZ2dlciA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGlwLWxpc3Rib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY29tcGV0ZW5jeUZvcm0/LmdldCgnY29tcFRoZW1lRmllbGRzJylbJ2NvbnRyb2xzJ11baV1bJ2NvbnRyb2xzJ10/LmNvbXBldGVuY3lTdWJUaGVtZT8udmFsdWVcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZW1vdmVkKT1cIm9uVGVybVJlbW92ZShpdGVtLCBpKVwiIFtkaXNhYmxlZF09XCJkYXRhLm9wZW5Nb2RlID09PSd2aWV3J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3N1Yi10aGVtZS1kaXNhYmxlJzogZGF0YT8ub3Blbk1vZGUgPT09J3ZpZXcnfVwiICBbcmVtb3ZhYmxlXT1cImRhdGE/Lm9wZW5Nb2RlID09PSd2aWV3Jz8gZmFsc2U6IHRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gPnt7IGl0ZW0ubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdENoaXBSZW1vdmU+Y2FuY2VsPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcC1saXN0Ym94PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3QtdHJpZ2dlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB7e2NvbXBldGVuY3lGb3JtPy5nZXQoJ2NvbXBUaGVtZUZpZWxkcycpIHxqc29ufX0gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPG1hdC1vcHRncm91cD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZmxvYXRMYWJlbD1cIm5ldmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgI3NlYXJjaCBhdXRvY29tcGxldGU9XCJvZmZcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaFwiIChrZXlkb3duLnNwYWNlKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNvbXBldGVuY3lTdWJUaGVtZVwiIG1hdElucHV0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGdyb3VwPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRncm91cCAqbmdJZj1cImZpbHRlcmVkYWxsQ29tcGV0ZW5jeVN1YlRoZW1lLmxlbmd0aCA9PT0gMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+Tm8gcmVzdWx0cyBmb3VuZCE8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0Z3JvdXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiByZXF1ZXN0T2JqRGF0YS5wcmVmZXJyZWRQcm92aWRlclwiIFt2YWx1ZV09XCJvcHRpb24ucHJvdmlkZXJOYW1lXCI+e3tvcHRpb24ucHJvdmlkZXJOYW1lfX08L21hdC1vcHRpb24+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgY29tcGV0ZW5jeUZvcm0/LmdldCgnY29tcFRoZW1lRmllbGRzJylbJ2NvbnRyb2xzJ11baV1bJ2NvbnRyb2xzJ10/LmNvbXBldGVuY3lUaGVtZT8udmFsdWU/LmNoaWxkcmVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uXCIgY2xhc3M9XCJtYXQtb3B0aW9uLWxpc3RcIj57e29wdGlvbj8ubmFtZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvcHRpb24/LnJlZklkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1sLTIgcmVmLWlkXCI+KHt7b3B0aW9uPy5yZWZJZH19KTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bWF0LWVycm9yICpuZ0lmPVwicmVxdWVzdEZvcm0uY29udHJvbHNbJ3Byb3ZpZGVyVGV4dCddLmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBzZWxlY3QgdXAgdG8gZml2ZSBwcmVmZXJyZWQgcHJvdmlkZXJzIGZvciB0aGUgcmVxdWVzdC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWFjY29yZGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxmb290ZXIgY2xhc3M9XCJhY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cImRlZmF1bHRcIiB0eXBlPVwicmVzZXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGlhbG9nQ2xvc2UoJycpXCI+e3thcHBfc3RyaW5ncy5jYW5jZWx9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhPy5tb2RlID09PSAnY3JlYXRlJyAmJiBkYXRhLm9wZW5Nb2RlICE9PSd2aWV3J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHR5cGU9XCJzdWJtaXRcIiBjZGtGb2N1c0luaXRpYWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb21wZXRlbmN5Rm9ybT8uaW52YWxpZFwiICpuZ0lmPVwiIWRpc2FibGVDcmVhdGVcIj57e2FwcF9zdHJpbmdzLmNyZWF0ZX19PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGE/Lm1vZGUgPT09ICdtdWx0aS1jcmVhdGUnICYmIGRhdGEub3Blbk1vZGUgIT09J3ZpZXcnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhPy5jb2x1bW5JbmZvPy5jb2RlICE9PSAnc3VidGhlbWUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHR5cGU9XCJidXR0b25cIiBjZGtGb2N1c0luaXRpYWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb21wZXRlbmN5Rm9ybS5pbnZhbGlkIHx8IGRpc2FibGVNdWx0aUNyZWF0ZVwiICpuZ0lmPVwiIWRpc2FibGVDcmVhdGVcIiAoY2xpY2spPVwibXVsdGlDcmVhdGUoY29tcGV0ZW5jeUZvcm0sIGRhdGEpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2FwcF9zdHJpbmdzLmNyZWF0ZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhPy5jb2x1bW5JbmZvPy5jb2RlID09PSAnc3VidGhlbWUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb21wZXRlbmN5Rm9ybT8uZ2V0KCdjb21wVGhlbWVGaWVsZHMnKVsnY29udHJvbHMnXVswXVsnY29udHJvbHMnXT8uY29tcGV0ZW5jeVN1YlRoZW1lPy52YWx1ZT8ubGVuZ3RoO2Vsc2UgdXBkYXRlQnRuXCI+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiIGNka0ZvY3VzSW5pdGlhbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb21wZXRlbmN5Rm9ybS5pbnZhbGlkIHx8IGRpc2FibGVNdWx0aUNyZWF0ZVwiICpuZ0lmPVwiIWRpc2FibGVDcmVhdGVcIiAoY2xpY2spPVwibXVsdGlDcmVhdGVTdWJUaGVtZShjb21wZXRlbmN5Rm9ybSwgZGF0YSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2FwcF9zdHJpbmdzLnVwZGF0ZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDwvbmctY29udGFpbmVyPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bmctdGVtcGxhdGUgI3VwZGF0ZUJ0bj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiIHR5cGU9XCJidXR0b25cIiBjZGtGb2N1c0luaXRpYWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29tcGV0ZW5jeUZvcm0uaW52YWxpZCB8fCBkaXNhYmxlTXVsdGlDcmVhdGVcIiAqbmdJZj1cIiFkaXNhYmxlQ3JlYXRlXCIgKGNsaWNrKT1cIm11bHRpQ3JlYXRlU3ViVGhlbWUoY29tcGV0ZW5jeUZvcm0sIGRhdGEpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3thcHBfc3RyaW5ncy5kZWxldGV9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhPy5tb2RlID09PSAnZWRpdCcgJiYgZGF0YS5vcGVuTW9kZSAhPT0ndmlldydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCIgY2RrRm9jdXNJbml0aWFsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidXBkYXRlVGVybURhdGEoY29tcGV0ZW5jeUZvcm0sIGRhdGEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjb21wZXRlbmN5Rm9ybT8uaW52YWxpZCB8fCBkaXNhYmxlVXBkYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWRpc2FibGVDcmVhdGVcIj57e2FwcF9zdHJpbmdzLnVwZGF0ZX19PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Zvb3Rlcj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICBcbiAgICA8L2Rpdj5cbiAgICBcbiAgICBcbiAgICA8IS0tIFRpdGxlIG9mIHRoZSBwb3B1cCAtLT5cbiAgICA8bmctdGVtcGxhdGUgI21vZGFsVGl0bGU+XG4gICAgICAgIDwhLS0gPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGE/Lm1vZGUgPT09ICdjcmVhdGUnIHx8IGRhdGE/Lm1vZGUgPT09ICdtdWx0aS1jcmVhdGUnXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGlhbG9nLXRpdGxlXCIgbWF0LWRpYWxvZy10aXRsZT57e2RhdGEuY29sdW1uSW5mby5uYW1lID09PSAnVGhlbWUnID8gYXBwX3N0cmluZ3MuYWRkQ29tcGV0ZW5jeSA6IGFwcF9zdHJpbmdzLmNyZWF0ZU5ld319IHt7ZGF0YS5jb2x1bW5JbmZvLm5hbWV9fTwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj4gLS0+XG4gICAgICAgIDwhLS0ge3tkYXRhIHxqc29ufX0gLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhPy5tb2RlID09PSAnY3JlYXRlJyB8fCBkYXRhPy5tb2RlID09PSAnbXVsdGktY3JlYXRlJ1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpYWxvZy10aXRsZVwiIG1hdC1kaWFsb2ctdGl0bGU+e3tnZXRDcmVhdGVOYW1lKGRhdGEpfX08L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwhLS0gPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGE/Lm1vZGUgPT09ICd2aWV3J1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpYWxvZy10aXRsZVwiIG1hdC1kaWFsb2ctdGl0bGU+VmlldyB7e2RhdGEuY29sdW1uSW5mby5uYW1lfX08L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+IC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YT8ubW9kZSA9PT0gJ2VkaXQnXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGlhbG9nLXRpdGxlXCIgbWF0LWRpYWxvZy10aXRsZT57e2FwcF9zdHJpbmdzLmVkaXR9fSB7e2RhdGEuY29sdW1uSW5mby5uYW1lfX08L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuXG5cbjxtYXQtbWVudSAjY2FyZE1lbnU9XCJtYXRNZW51XCIgY2xhc3M9XCJtZW51LXNlY1wiPlxuICAgIDxuZy10ZW1wbGF0ZSBtYXRNZW51Q29udGVudCBsZXQtcm93RGF0YT1cImRhdGFcIiBsZXQtY2FyZFJlZj1cImNhcmRSZWZcIj5cbiAgICAgICAgPGJ1dHRvbiAgKGNsaWNrKT1cImRlbGV0ZVRoZW1lKClcIlxuICAgICAgICAgICAgbWF0LW1lbnUtaXRlbSBuYW1lPVwiY2hhbm5lbC1hbmFseXRpY3MtYnV0dG9uXCIgY2xhc3M9XCJ3cy1tYXQtcHJpbWFyeS10ZXh0XCIgaTE4bi1hcmlhLWxhYmVsXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiQW5hbHl0aWNzXCI+XG4gICAgICAgICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxzcGFuPkRlbGV0ZTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbjwvbWF0LW1lbnU+Il19