@vgip/meta-ui 1.7.2 → 1.7.3

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 (87) hide show
  1. package/esm2022/lib/common/metaIcons.pipe.mjs +3 -3
  2. package/esm2022/lib/common/metaModel.pipe.mjs +3 -5
  3. package/esm2022/lib/common/metaNormalizer.mjs +2 -3
  4. package/esm2022/lib/common/utils/colorThemes.mjs +1 -3
  5. package/esm2022/lib/common/utils/indexedDbStore/index.mjs +3 -3
  6. package/esm2022/lib/common/utils/templateBuilder.mjs +3 -3
  7. package/esm2022/lib/fieldAbstract.mjs +7 -3
  8. package/esm2022/lib/fieldDatetime/index.mjs +6 -4
  9. package/esm2022/lib/fieldInput/index.mjs +3 -3
  10. package/esm2022/lib/fieldList/index.mjs +3 -3
  11. package/esm2022/lib/fieldRadio/index.mjs +3 -3
  12. package/esm2022/lib/fieldReference/index.mjs +12 -8
  13. package/esm2022/lib/fieldRichtext/index.mjs +3 -3
  14. package/esm2022/lib/fieldSelect/index.mjs +11 -6
  15. package/esm2022/lib/fieldText/index.mjs +3 -3
  16. package/esm2022/lib/fieldUnknown/index.mjs +3 -3
  17. package/esm2022/lib/layout/index.mjs +26 -20
  18. package/esm2022/lib/refDialog/index.mjs +14 -6
  19. package/esm2022/lib/resource/index.mjs +9 -5
  20. package/esm2022/lib/services/metaMsg/index.mjs +2 -2
  21. package/esm2022/lib/services/metaReference/index.mjs +2 -2
  22. package/esm2022/lib/services/metaResource/index.mjs +4 -4
  23. package/esm2022/lib/services/metaResource/metaHttpClient.mjs +2 -2
  24. package/esm2022/lib/services/resourceDrafts/index.mjs +9 -8
  25. package/fesm2022/{vgip-meta-ui-fieldAbstract-ce47588e.mjs → vgip-meta-ui-fieldAbstract-9955be39.mjs} +7 -5
  26. package/fesm2022/vgip-meta-ui-fieldAbstract-9955be39.mjs.map +1 -0
  27. package/fesm2022/{vgip-meta-ui-index-f5e42e1d.mjs → vgip-meta-ui-index-39011b04.mjs} +14 -14
  28. package/fesm2022/{vgip-meta-ui-index-f5e42e1d.mjs.map → vgip-meta-ui-index-39011b04.mjs.map} +1 -1
  29. package/fesm2022/{vgip-meta-ui-index-617c4bac.mjs → vgip-meta-ui-index-3bc3d41b.mjs} +52 -35
  30. package/fesm2022/vgip-meta-ui-index-3bc3d41b.mjs.map +1 -0
  31. package/fesm2022/vgip-meta-ui-index-3fda8c0e.mjs +74 -0
  32. package/fesm2022/vgip-meta-ui-index-3fda8c0e.mjs.map +1 -0
  33. package/fesm2022/vgip-meta-ui-index-5871a6f2.mjs +95 -0
  34. package/fesm2022/vgip-meta-ui-index-5871a6f2.mjs.map +1 -0
  35. package/fesm2022/vgip-meta-ui-index-5891b8e7.mjs +24 -0
  36. package/fesm2022/vgip-meta-ui-index-5891b8e7.mjs.map +1 -0
  37. package/fesm2022/{vgip-meta-ui-index-cb0d4f82.mjs → vgip-meta-ui-index-5d13f5e6.mjs} +2 -2
  38. package/fesm2022/{vgip-meta-ui-index-cb0d4f82.mjs.map → vgip-meta-ui-index-5d13f5e6.mjs.map} +1 -1
  39. package/fesm2022/{vgip-meta-ui-index-5509b1d2.mjs → vgip-meta-ui-index-9e4137fe.mjs} +6 -6
  40. package/fesm2022/vgip-meta-ui-index-9e4137fe.mjs.map +1 -0
  41. package/fesm2022/{vgip-meta-ui-index-5d664781.mjs → vgip-meta-ui-index-a2a973a6.mjs} +17 -13
  42. package/fesm2022/vgip-meta-ui-index-a2a973a6.mjs.map +1 -0
  43. package/fesm2022/{vgip-meta-ui-index-eba0dd05.mjs → vgip-meta-ui-index-af4eda3c.mjs} +6 -6
  44. package/fesm2022/vgip-meta-ui-index-af4eda3c.mjs.map +1 -0
  45. package/fesm2022/vgip-meta-ui-index-b0a76073.mjs +97 -0
  46. package/fesm2022/vgip-meta-ui-index-b0a76073.mjs.map +1 -0
  47. package/fesm2022/{vgip-meta-ui-index-cfb67422.mjs → vgip-meta-ui-index-b48e32ce.mjs} +16 -11
  48. package/fesm2022/vgip-meta-ui-index-b48e32ce.mjs.map +1 -0
  49. package/fesm2022/{vgip-meta-ui-index-78d7b9be.mjs → vgip-meta-ui-index-b6fcc07d.mjs} +8 -6
  50. package/fesm2022/vgip-meta-ui-index-b6fcc07d.mjs.map +1 -0
  51. package/fesm2022/{vgip-meta-ui-index-eef5fc0f.mjs → vgip-meta-ui-index-c39ea0ec.mjs} +3 -3
  52. package/fesm2022/{vgip-meta-ui-index-eef5fc0f.mjs.map → vgip-meta-ui-index-c39ea0ec.mjs.map} +1 -1
  53. package/fesm2022/{vgip-meta-ui-index-1467556e.mjs → vgip-meta-ui-index-ea5c2466.mjs} +3 -3
  54. package/fesm2022/vgip-meta-ui-index-ea5c2466.mjs.map +1 -0
  55. package/fesm2022/{vgip-meta-ui-index-f0fa2cbd.mjs → vgip-meta-ui-index-fef499eb.mjs} +3 -3
  56. package/fesm2022/{vgip-meta-ui-index-f0fa2cbd.mjs.map → vgip-meta-ui-index-fef499eb.mjs.map} +1 -1
  57. package/fesm2022/{vgip-meta-ui-metaModel.pipe-3487ede2.mjs → vgip-meta-ui-metaModel.pipe-6b803e66.mjs} +3 -5
  58. package/fesm2022/vgip-meta-ui-metaModel.pipe-6b803e66.mjs.map +1 -0
  59. package/fesm2022/vgip-meta-ui.mjs +31 -30
  60. package/fesm2022/vgip-meta-ui.mjs.map +1 -1
  61. package/lib/common/metaIcons.pipe.d.ts +1 -1
  62. package/lib/common/metaModel.pipe.d.ts +1 -2
  63. package/lib/common/utils/indexedDbStore/index.d.ts +2 -2
  64. package/lib/fieldAbstract.d.ts +0 -4
  65. package/lib/fieldReference/index.d.ts +1 -1
  66. package/lib/fieldSelect/index.d.ts +1 -1
  67. package/lib/layout/index.d.ts +4 -4
  68. package/lib/refDialog/index.d.ts +3 -3
  69. package/lib/resource/index.d.ts +1 -1
  70. package/package.json +2 -2
  71. package/fesm2022/vgip-meta-ui-fieldAbstract-ce47588e.mjs.map +0 -1
  72. package/fesm2022/vgip-meta-ui-index-1467556e.mjs.map +0 -1
  73. package/fesm2022/vgip-meta-ui-index-5509b1d2.mjs.map +0 -1
  74. package/fesm2022/vgip-meta-ui-index-5d664781.mjs.map +0 -1
  75. package/fesm2022/vgip-meta-ui-index-617c4bac.mjs.map +0 -1
  76. package/fesm2022/vgip-meta-ui-index-6dcb4942.mjs +0 -24
  77. package/fesm2022/vgip-meta-ui-index-6dcb4942.mjs.map +0 -1
  78. package/fesm2022/vgip-meta-ui-index-78d7b9be.mjs.map +0 -1
  79. package/fesm2022/vgip-meta-ui-index-85109066.mjs +0 -97
  80. package/fesm2022/vgip-meta-ui-index-85109066.mjs.map +0 -1
  81. package/fesm2022/vgip-meta-ui-index-86211382.mjs +0 -74
  82. package/fesm2022/vgip-meta-ui-index-86211382.mjs.map +0 -1
  83. package/fesm2022/vgip-meta-ui-index-adb42356.mjs +0 -95
  84. package/fesm2022/vgip-meta-ui-index-adb42356.mjs.map +0 -1
  85. package/fesm2022/vgip-meta-ui-index-cfb67422.mjs.map +0 -1
  86. package/fesm2022/vgip-meta-ui-index-eba0dd05.mjs.map +0 -1
  87. package/fesm2022/vgip-meta-ui-metaModel.pipe-3487ede2.mjs.map +0 -1
@@ -306,7 +306,7 @@ export class FieldReference extends FieldAbstract {
306
306
  }
307
307
  }
308
308
  }
309
- if (typeof (this.meta.disabled) !== undefined) {
309
+ if (typeof (this.meta.disabled) !== 'undefined') {
310
310
  if (typeof (this.meta.disabled) === 'object') {
311
311
  for (const p of Object.keys(this.meta.disabled)) {
312
312
  const props = p.split('.');
@@ -441,7 +441,7 @@ export class FieldReference extends FieldAbstract {
441
441
  const searchParams = this.meta.search.params || {};
442
442
  let searchUrl = `/fields/${this.meta.name}/search`;
443
443
  if (this.meta.search.url) {
444
- searchUrl = this.meta.search.url.replace(/\${\s*([\w\.]+)\s*}/g, (match, key) => {
444
+ searchUrl = this.meta.search.url.replace(/\${\s*([\w.]+)\s*}/g, (match, key) => {
445
445
  if (searchParams.hasOwnProperty(key)) {
446
446
  const props = searchParams[key].split('.');
447
447
  const field = props[0];
@@ -525,7 +525,11 @@ export class FieldReference extends FieldAbstract {
525
525
  delete this.keyListenerActive;
526
526
  }
527
527
  }
528
- removeSelection() {
528
+ removeSelection(ev) {
529
+ if (ev) {
530
+ ev.preventDefault();
531
+ ev.stopPropagation();
532
+ }
529
533
  if (this.model && !this.suggestions.find((s) => (s.id === this.model.id && s.type === this.model.type))) {
530
534
  this.smartSuggestions.push({
531
535
  id: this.model.id,
@@ -766,7 +770,7 @@ export class FieldReference extends FieldAbstract {
766
770
  let searchUrl = `/suggestions/${this.meta.name}/search`;
767
771
  if (this.meta.auto && this.meta.auto.search) {
768
772
  if (this.meta.auto.search.url) {
769
- searchUrl = this.meta.auto.search.url.replace(/\${\s*([\w\.]+)\s*}/g, (match, key) => {
773
+ searchUrl = this.meta.auto.search.url.replace(/\${\s*([\w.]+)\s*}/g, (match, key) => {
770
774
  if (params.hasOwnProperty(key)) {
771
775
  const val = params[key];
772
776
  delete params[key];
@@ -810,16 +814,16 @@ export class FieldReference extends FieldAbstract {
810
814
  }
811
815
  this.asyncSuggestions = asyncSuggestions;
812
816
  }
813
- }, (err) => {
817
+ }, () => {
814
818
  delete this.searching;
815
819
  });
816
820
  }
817
821
  }
818
822
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.11", ngImport: i0, type: FieldReference, deps: [{ token: i1.MetaReferenceService }, { token: i2.MetaResourceService }, { token: i3.MetaMsgService }, { token: i4.MetaContextService }, { token: i5.MetaTrackerService }, { token: i0.ViewContainerRef }], target: i0.ɵɵFactoryTarget.Component }); }
819
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.11", type: FieldReference, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<div class='vgip-meta-field-preview' *ngIf='preview && model && (!multiple || (multiple && model.length))'>\n <div class='vgip-meta-field-label' [title]='meta.label || meta.name'>{{meta.label || meta.name}}</div>\n <div *ngIf='!multiple' class='vgip-meta-field-value __gu'>\n <svg class=\"Vlt-icon Vlt-icon--smaller\" style='margin-top: -3px;'><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n {{model.label || model.id}} <span class='Vlt-grey'>({{model.type}})</span>\n </div>\n <div *ngIf='multiple' class='vgip-meta-field-value __gu'>\n <span *ngFor='let m of (model || [])' class='Vlt-badge Vlt-badge--app'>\n {{m.label || m.id || m}} <span class='Vlt-grey-dark' *ngIf='isPolymorphic'>({{m.type}})</span>\n </span>\n </div>\n <a [href]='externalLink || model.externalLink' target='_blank' rel='noopener' *ngIf='externalLink && (model && !multiple)' class=\"Vlt-composite__append--icon preview\" aria-label='Open external'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-open\"/></svg>\n </div>\n </a>\n</div>\n<div *ngIf='!preview' class=\"meta-field-reference Vlt-form__element Vlt-form__element--big\" [ngClass]=\"{ 'Vlt-form__element--error': (searchError && keyListenerActive) || (f.invalid && ((f | metaModel)._parent.submitted || (ft | metaModel ).touched)), 'multiple': multiple, 'has-value': model, active: keyListenerActive }\">\n <div *ngIf='multiple' class='items-container' [ngClass]='{ creatable: isCreatable }'>\n <div *ngIf='model' class='badges-container keep-focus' (click)='focus()' style='width: 100%;'>\n <div *ngFor='let item of model' class=\"Vlt-badge Vlt-badge--app Vlt-badge--large keep-focus\" [ngClass]=\"{ grid: (item.label || item.id || '').length > 56}\">\n <span class='Vlt-truncate'>{{item.label || item.id || item }} <span *ngIf='isPolymorphic' class='Vlt-grey-dark' style='font-weight: normal;'>({{item.type}})</span></span>\n <button class=\"Vlt-badge__dismiss keep-focus\" (click)='remove($event, item)' style='position: absolute; right: 12px; top: 8px;' aria-label='Remove'></button>\n </div>\n </div>\n </div>\n <div class=\"Vlt-composite\">\n <div class='dropdown-wrapper Vlt-dropdown' style='width: 100%; position: absolute; top: 48px;'>\n <div class=\"Vlt-dropdown__panel\">\n <div *ngIf='searchError'>\n <div class=\"Vlt-callout Vlt-callout--critical keep-focus\">\n <i></i>\n <div class=\"Vlt-callout__content\">{{searchError}}</div>\n </div>\n </div>\n <div *ngIf='!searchError && (suggestions.length || searchResults)' [ngClass]=\"{ suggestions: !searchResults}\" class=\"Vlt-dropdown__panel__content Vlt-dropdown__panel__content--scroll-area\" style='padding: 0;'>\n <div class=\"Vlt-dropdown__block\"></div>\n <div *ngIf='!searchResults' class=\"Vlt-dropdown__scroll\">\n <div [ngClass]=\"{ 'Vlt-dropdown__link--selected': activeSuggestionIndex === i, smart: suggestion.smart }\" (click)='onSuggestionSelect($event, suggestion)' *ngFor='let suggestion of suggestions; let i = index' class=\"Vlt-dropdown__link has-type\">\n <svg class='Vlt-icon Vlt-icon--small'><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n <div class='__gu' [title]='suggestion.label'>{{ suggestion.label }}</div>\n <small class='Vlt-grey-dark' style='text-transform: capitalize;'>{{suggestion.type}}</small>\n </div>\n </div>\n <div *ngIf='searchResults' class=\"Vlt-dropdown__scroll\">\n <div *ngIf='!searchResults.length' class='Vlt-dropdown__block'> No records matching '<b style='pointer-events: none;'>{{searchText}}</b>' were found.</div>\n <div [ngClass]=\"{ 'Vlt-dropdown__link--selected': activeSuggestionIndex === i }\" (click)='onSuggestionSelect($event, suggestion)' *ngFor='let suggestion of searchResults; let i = index' class=\"Vlt-dropdown__link has-type\">\n <svg class='Vlt-icon Vlt-icon--small'><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n <div class='__gu' [title]='suggestion.label'>{{ suggestion.label }}</div>\n <small class='Vlt-grey-dark' style='text-transform: capitalize;'>{{suggestion.type}}</small>\n </div>\n </div>\n <!-- <div *ngIf='searchResults' class=\"Vlt-dropdown__block\" style='text-align: right; padding-top: 0;'>\n <small>\n {{ searchResults ? searchResults.length+' results' : 'Suggestions' }} <span style='font-style: italic; font-weight: normal;' *ngIf='searchResults'>~{{ model ? 'last search' : searchText}}</span>\n </small>\n </div> -->\n <div class=\"Vlt-dropdown__block\"></div>\n </div>\n </div>\n </div>\n <div class=\"Vlt-composite__prepend\" *ngIf='isPolymorphic && showTypes && (multiple || !model || (dropdownVisible && ((suggestions || searchResults || []).length || searchResourceType.resourceType)))'>\n <div class=\"search-scope\" [ngClass]=\"{ 'has-value': searchResourceType.resourceType }\">\n <vgip-meta-field class='shown' [meta]='searchResourceTypeMeta' [parent]='searchResourceType' (onChange)='onSearchResourceTypeChanged($event)' (onLeave)='onBlur($event)' [integrationCode]='integrationCode' theme='inherit'></vgip-meta-field>\n <svg class='Vlt-icon Vlt-grey Vlt-icon--smaller visible-mobile mobile-icon' style='position: absolute; top: 15px; left: 14px; pointer-events: none;'>\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-menu\"/>\n </svg>\n <label class='mobile-label hidden-mobile hidden-desktop'>Search</label>\n </div>\n </div>\n <div *ngIf='!(isPolymorphic && showTypes && (multiple || !model || dropdownVisible))'><!-- required by css --></div>\n <div class=\"Vlt-composite__wrapper Vlt-input\" style='overflow: hidden;' [ngClass]=\"{ 'has-append-button': hasAppendButton && !disabled }\">\n <label class='wrapper'>\n <div class=\"Vlt-composite__prepend Vlt-composite__prepend--icon\" style='top: 0; padding-top: 15px;'>\n <div class=\"Vlt-composite__icon\">\n <svg *ngIf='isSearchable && (!model || multiple)' class='Vlt-grey'><use attr.xlink:href=\"volta/volta-icons.svg#Vlt-icon-{{ multiple ? 'stack' : 'search'}}\"/></svg>\n <svg *ngIf='!isSearchable || (model && !multiple)' [ngStyle]=\"{fill: integrationIcon === 'Brand-icon-vonage' ? 'var(--vgip-meta-input-color)' : ''}\"><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n </div>\n <div *ngIf='suggestions.length' class=\"Vlt-badge Vlt-badge--small Vlt-badge--purple\" style='padding: 0px 4px; position: absolute; top: 26px; left: 4px; pointer-events: none; min-width: 14px;'>{{suggestions.length}}</div>\n </div>\n <input class='model' type='hidden' [required]='validations.required' [(ngModel)]='model' #f='ngModel' [name]='name' />\n <input class='main' [readonly]='!isSearchable || (model && !multiple)' [ngModel]='searchText' #ft='ngModel' (ngModelChange)='onSearchTextChanged($event)' [ngModelOptions]=\"{standalone: true}\" type=\"text\" placeholder=\"{{ placeHolderLabel || ' ' }}\" [ngClass]='{ ext: externalLink }' (click)='onActivated($event)' (focus)='onActivated($event)' (blur)='onBlur($event)' [disabled]='disabled' [title]=\"model ? model.label : ''\"/>\n <label class='Vlt-truncate hidden-mobile' style='padding-left: 25px; padding-right: 42px;'>{{ (multiple && isPolymorphic) ? '+Add ' : ((model || !isPolymorphic) ? meta.label : ( meta.searchLabel || 'Search')) }}<span *ngIf='validations.required' class='Vlt-red'>*</span>&nbsp;<span style='color: var(--vgip-meta-input-color); text-transform: capitalize;' *ngIf='model'>({{model.type || model.resourceType || model.length}})</span></label>\n <label class='Vlt-truncate hidden-desktop' style='padding-left: 25px; padding-right: 42px;'>{{meta.label || meta.name}}<span *ngIf='validations.required' class='Vlt-red'>*</span>&nbsp;<span style='color: var(--vgip-meta-input-color); text-transform: capitalize;' *ngIf='model'>({{model.type || model.resourceType || model.length}})</span></label>\n </label>\n <div *ngIf='searching' class='search-progress'>\n <div class=\"container\">\n <div class=\"bar Vlt-bg-purple\"></div>\n </div>\n </div>\n <div class='Vlt-composite__append right-actions'>\n <!-- <div *ngIf='prevModel && !model' class=\"Vlt-composite__append--icon\" (click)='revert()'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-reply\"/></svg>\n </div>\n </div> -->\n <div *ngIf='model && !multiple' class=\"Vlt-composite__append--icon\" (click)='removeSelection()'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\"/></svg>\n </div>\n </div>\n <a [href]='externalLink || model.externalLink' target='_blank' rel='noopener' *ngIf='externalLink && (model && !multiple)' class=\"Vlt-composite__append--icon\" aria-label='Open external'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-open\"/></svg>\n </div>\n </a>\n </div>\n </div>\n <!-- <span *ngIf='hasCreatables'>\n <button type='button' *ngIf='!model || multiple' (click)='openResource()' class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--icon Vlt-btn--large\" style='margin-left: 12px;'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>\n </button>\n <button type='button' *ngIf='model && !multiple' (click)='openResource(model)' class=\"Vlt-btn Vlt-btn--primary Vlt-btn--icon Vlt-btn--large\" style='margin-left: 12px;'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-edit\"/></svg>\n </button>\n </span> -->\n <div *ngIf='hasAppendButton && !disabled' class=\"Vlt-composite__append\">\n <button (focus)='onActivated($event)' (blur)='onBlur($event)' type='button' *ngIf='!model || multiple' (click)='openResource()' class=\"Vlt-btn Vlt-btn--white Vlt-btn--icon\" aria-label='Add new'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>\n </button>\n <button (focus)='onActivated($event)' (blur)='onBlur($event)' type='button' *ngIf='model && !multiple' (click)='openResource(model)' class=\"Vlt-btn Vlt-btn--white Vlt-btn--icon\" aria-label='Edit'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-edit\"/></svg>\n </button>\n </div>\n </div>\n <small *ngIf='f.invalid && ((f | metaModel)._parent.submitted || ((ft | metaModel).touched && keyListenerActive))' class=\"Vlt-form__element__error\">\n <span *ngIf=\"f.errors.required\">Required</span>\n <span *ngIf=\"f.errors.pattern\">Should match '{{validations.pattern}}' pattern</span>\n <span *ngIf=\"f.errors.custom\">{{f.errors.custom}}&nbsp;</span>\n </small>\n <small *ngIf='meta.helpText || meta.hint' class=\"Vlt-form__element__hint\">{{meta.helpText || meta.hint}}</small>\n</div>\n", styles: [".Vlt-form__element--big .Vlt-input input:placeholder-shown:not(:focus)~label.Vlt-truncate{font-size:1.6rem;margin-top:-.8rem;top:50%}.Vlt-form__element--big ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-right:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.Vlt-form__element--big:hover .items-container,.Vlt-form__element--big:hover .main,.Vlt-form__element--big:hover .Vlt-composite__append button,.Vlt-form__element--big:hover ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone,.Vlt-form__element--big.active .items-container,.Vlt-form__element--big.active .main,.Vlt-form__element--big.active .Vlt-composite__append button,.Vlt-form__element--big.active ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big.Vlt-form__element--error .items-container,.Vlt-form__element--big.Vlt-form__element--error .main,.Vlt-form__element--big.Vlt-form__element--error .Vlt-composite__append button,.Vlt-form__element--big.Vlt-form__element--error ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-color:#f25a6b}.Vlt-form__element--big.multiple .Vlt-composite.Vlt-dropdown{margin-top:3px}.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .items-container,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .main,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .Vlt-composite__append button,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .items-container,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .main,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .Vlt-composite__append button,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big.multiple .items-container{background-color:var(--vgip-meta-input-bg-color);border:1px solid var(--vgip-meta-input-border-color);border-bottom:0;border-top-left-radius:6px;border-top-right-radius:6px}.Vlt-form__element--big.multiple .items-container .badges-container{overflow:auto;padding:6px 4px 3px 6px}.Vlt-form__element--big.multiple .items-container .badges-container .Vlt-badge{margin-bottom:3px;margin-left:0;margin-right:3px;overflow:hidden;max-width:100%;position:relative;padding-right:30px}.Vlt-form__element--big.multiple .items-container .badges-container .Vlt-badge.grid{display:grid}.Vlt-form__element--big.multiple:not(.has-value) .items-container{border:0}.Vlt-form__element--big.multiple.has-value .main,.Vlt-form__element--big.multiple.has-value .Vlt-composite__append button,.Vlt-form__element--big.multiple.has-value ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-top-left-radius:0;border-top-right-radius:0;height:48px}.Vlt-form__element--big.multiple.has-value .main:not(.Vlt-btn--icon),.Vlt-form__element--big.multiple.has-value .Vlt-composite__append button:not(.Vlt-btn--icon),.Vlt-form__element--big.multiple.has-value ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone:not(.Vlt-btn--icon){border-top:0}.Vlt-form__element--big.multiple.has-value .Vlt-composite__prepend ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-top-right-radius:6px}.Vlt-form__element--big.multiple.has-value .Vlt-composite__append button{border-top-left-radius:6px;border-top:0}.Vlt-composite__prepend{z-index:initial}.Vlt-composite__prepend--icon{top:0;padding-top:15px;left:3px}.Vlt-input.has-append-button .Vlt-composite__append.right-actions{right:0}.Vlt-input.has-append-button .Vlt-composite__append.right-actions .Vlt-composite__append--icon:last-child{width:36px}.Vlt-composite__append.right-actions{position:absolute;top:5px;right:5px;cursor:pointer}.Vlt-composite__append.right-actions .Vlt-composite__append--icon{outline:none;position:initial;display:inline-block}.Vlt-composite__append.right-actions .Vlt-composite__append--icon svg{height:14px;width:14px}.Vlt-composite__append.right-actions .Vlt-composite__append--icon:hover svg,.Vlt-composite__append.right-actions .Vlt-composite__append--icon:focus svg{fill:var(--vgip-meta-input-accent-color)}.Vlt-composite__append--icon.preview{bottom:initial;padding:0 2px}.Vlt-composite__append button{height:48px;padding-right:16px;background:var(--vgip-meta-input-bg-color);border-color:var(--vgip-meta-input-border-color);padding-left:16px;border-left:0}.Vlt-composite__append button:hover{background:var(--vgip-meta-input-action-hover-bg-color)}.Vlt-composite__append button svg{margin:-2px 0 0;fill:var(--vgip-meta-input-accent-color)}.Vlt-input input{padding-left:38px;text-overflow:ellipsis;padding-right:36px}.Vlt-input input.ext{padding-right:72px}.Vlt-composite__wrapper.has-append-button input.main{border-top-right-radius:0;border-bottom-right-radius:0;border-right:0}.Vlt-input input{background:var(--vgip-meta-input-bg-color);border-color:var(--vgip-meta-input-border-color);font-weight:700}.Vlt-dropdown__panel{max-width:100%;width:100%;min-width:280px}.Vlt-dropdown__panel .Vlt-dropdown__link.smart{font-weight:700;background:var(--vgip-meta-dropdown-bg-color)}.Vlt-dropdown__panel .Vlt-dropdown__link.smart.hidden{display:none}.Vlt-dropdown__panel .Vlt-dropdown__link.bold:after{background-color:#e1e2e6;content:\"\";height:1px;left:0;position:absolute;right:0;bottom:0}.Vlt-dropdown__panel .Vlt-dropdown__link--selected{background:rgba(44,45,48,.05)}.Vlt-dropdown__panel .Vlt-dropdown__link>div{flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.Vlt-dropdown__panel .Vlt-dropdown__link>svg{margin-right:8px}.vgip-meta-field-preview .Vlt-badge{margin:1px 3px 1px 0;overflow:hidden;max-width:100%}:host .search-scope{width:130px}:host .search-scope ::ng-deep .Vlt-form__element.has-value .Vlt-select:after{display:none}:host .search-scope ::ng-deep .Vlt-form__element .right-actions{right:12px}:host .search-scope ::ng-deep .Vlt-form__element label.Vlt-truncate{padding-right:48px}:host .search-scope .mobile-icon{display:none}@media only screen and (max-width: 575px){:host .search-scope{width:60px}:host .search-scope:not(.has-value) .mobile-icon{display:block}:host .search-scope.has-value .mobile-label{display:block}:host .search-scope ::ng-deep .Vlt-form__element.Vlt-form__element--big .Vlt-composite__append{display:none}:host .search-scope ::ng-deep .Vlt-form__element.Vlt-form__element--big .Vlt-select:after{margin-right:-7px}:host .search-scope ::ng-deep .Vlt-form__element.Vlt-form__element--big label.Vlt-truncate{visibility:hidden}}:host .search-scope ::ng-deep vgip-meta-field .Vlt-input input.main.standalone{padding-right:initial;background:var(--vgip-meta-input-accent-bg-color);border-color:var(--vgip-meta-input-border-color)}:host .search-scope ::ng-deep vgip-meta-field .Vlt-form__element{padding:0}:host .search-scope ::ng-deep vgip-meta-field .Vlt-form__element .Vlt-dropdown__panel{width:initial}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.MetaField, selector: "vgip-meta-field", inputs: ["meta", "parent", "integrationCode", "resourceType", "index", "scope", "preview", "theme"], outputs: ["onChange", "onLeave"] }, { kind: "pipe", type: i9.MetaModelPipe, name: "metaModel" }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] }); }
823
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.11", type: FieldReference, selector: "ng-component", usesInheritance: true, ngImport: i0, template: "<div class='vgip-meta-field-preview' *ngIf='preview && model && (!multiple || (multiple && model.length))'>\n <div class='vgip-meta-field-label' [title]='meta.label || meta.name'>{{meta.label || meta.name}}</div>\n <div *ngIf='!multiple' class='vgip-meta-field-value __gu'>\n <svg class=\"Vlt-icon Vlt-icon--smaller\" style='margin-top: -3px;'><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n {{model.label || model.id}} <span class='Vlt-grey'>({{model.type}})</span>\n </div>\n <div *ngIf='multiple' class='vgip-meta-field-value __gu'>\n <span *ngFor='let m of (model || [])' class='Vlt-badge Vlt-badge--app'>\n {{m.label || m.id || m}} <span class='Vlt-grey-dark' *ngIf='isPolymorphic'>({{m.type}})</span>\n </span>\n </div>\n <a [href]='externalLink || model.externalLink' target='_blank' rel='noopener' *ngIf='externalLink && (model && !multiple)' class=\"Vlt-composite__append--icon preview\" aria-label='Open external'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-open\"/></svg>\n </div>\n </a>\n</div>\n<div *ngIf='!preview' class=\"meta-field-reference Vlt-form__element Vlt-form__element--big\" [ngClass]=\"{ 'Vlt-form__element--error': (searchError && keyListenerActive) || (f.invalid && ((f | metaModel)._parent.submitted || (ft | metaModel ).touched)), 'multiple': multiple, 'has-value': model, active: keyListenerActive }\">\n <div *ngIf='multiple' class='items-container' [ngClass]='{ creatable: isCreatable }'>\n <div *ngIf='model' class='badges-container keep-focus' (click)='focus()' style='width: 100%;'> <!-- eslint-disable-line -->\n <div *ngFor='let item of model' class=\"Vlt-badge Vlt-badge--app Vlt-badge--large keep-focus\" [ngClass]=\"{ grid: (item.label || item.id || '').length > 56}\">\n <span class='Vlt-truncate'>{{item.label || item.id || item }} <span *ngIf='isPolymorphic' class='Vlt-grey-dark' style='font-weight: normal;'>({{item.type}})</span></span>\n <button class=\"Vlt-badge__dismiss keep-focus\" (click)='remove($event, item)' style='position: absolute; right: 12px; top: 8px;' aria-label='Remove'></button>\n </div>\n </div>\n </div>\n <div class=\"Vlt-composite\">\n <div class='dropdown-wrapper Vlt-dropdown' style='width: 100%; position: absolute; top: 48px;'>\n <div class=\"Vlt-dropdown__panel\">\n <div *ngIf='searchError'>\n <div class=\"Vlt-callout Vlt-callout--critical keep-focus\">\n <i></i>\n <div class=\"Vlt-callout__content\">{{searchError}}</div>\n </div>\n </div>\n <div *ngIf='!searchError && (suggestions.length || searchResults)' [ngClass]=\"{ suggestions: !searchResults}\" class=\"Vlt-dropdown__panel__content Vlt-dropdown__panel__content--scroll-area\" style='padding: 0;'>\n <div class=\"Vlt-dropdown__block\"></div>\n <div *ngIf='!searchResults' class=\"Vlt-dropdown__scroll\">\n <a href='#' [ngClass]=\"{ 'Vlt-dropdown__link--selected': activeSuggestionIndex === i, smart: suggestion.smart }\" (click)='onSuggestionSelect($event, suggestion)' *ngFor='let suggestion of suggestions; let i = index' class=\"Vlt-dropdown__link has-type\">\n <svg class='Vlt-icon Vlt-icon--small'><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n <div class='__gu' [title]='suggestion.label'>{{ suggestion.label }}</div>\n <small class='Vlt-grey-dark' style='text-transform: capitalize;'>{{suggestion.type}}</small>\n </a>\n </div>\n <div *ngIf='searchResults' class=\"Vlt-dropdown__scroll\">\n <div *ngIf='!searchResults.length' class='Vlt-dropdown__block'> No records matching '<b style='pointer-events: none;'>{{searchText}}</b>' were found.</div>\n <a href='#' [ngClass]=\"{ 'Vlt-dropdown__link--selected': activeSuggestionIndex === i }\" (click)='onSuggestionSelect($event, suggestion)' *ngFor='let suggestion of searchResults; let i = index' class=\"Vlt-dropdown__link has-type\">\n <svg class='Vlt-icon Vlt-icon--small'><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n <div class='__gu' [title]='suggestion.label'>{{ suggestion.label }}</div>\n <small class='Vlt-grey-dark' style='text-transform: capitalize;'>{{suggestion.type}}</small>\n </a>\n </div>\n <!-- <div *ngIf='searchResults' class=\"Vlt-dropdown__block\" style='text-align: right; padding-top: 0;'>\n <small>\n {{ searchResults ? searchResults.length+' results' : 'Suggestions' }} <span style='font-style: italic; font-weight: normal;' *ngIf='searchResults'>~{{ model ? 'last search' : searchText}}</span>\n </small>\n </div> -->\n <div class=\"Vlt-dropdown__block\"></div>\n </div>\n </div>\n </div>\n <div class=\"Vlt-composite__prepend\" *ngIf='isPolymorphic && showTypes && (multiple || !model || (dropdownVisible && ((suggestions || searchResults || []).length || searchResourceType.resourceType)))'>\n <div class=\"search-scope\" [ngClass]=\"{ 'has-value': searchResourceType.resourceType }\">\n <vgip-meta-field class='shown' [meta]='searchResourceTypeMeta' [parent]='searchResourceType' (onChange)='onSearchResourceTypeChanged($event)' (onLeave)='onBlur($event)' [integrationCode]='integrationCode' theme='inherit'></vgip-meta-field>\n <svg class='Vlt-icon Vlt-grey Vlt-icon--smaller visible-mobile mobile-icon' style='position: absolute; top: 15px; left: 14px; pointer-events: none;'>\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-menu\"/>\n </svg>\n </div>\n </div>\n <div *ngIf='!(isPolymorphic && showTypes && (multiple || !model || dropdownVisible))'><!-- required by css --></div>\n <div class=\"Vlt-composite__wrapper Vlt-input\" style='overflow: hidden;' [ngClass]=\"{ 'has-append-button': hasAppendButton && !disabled }\">\n <label class='wrapper'>\n <div class=\"Vlt-composite__prepend Vlt-composite__prepend--icon\" style='top: 0; padding-top: 15px;'>\n <div class=\"Vlt-composite__icon\">\n <svg *ngIf='isSearchable && (!model || multiple)' class='Vlt-grey'><use attr.xlink:href=\"volta/volta-icons.svg#Vlt-icon-{{ multiple ? 'stack' : 'search'}}\"/></svg>\n <svg *ngIf='!isSearchable || (model && !multiple)' [ngStyle]=\"{fill: integrationIcon === 'Brand-icon-vonage' ? 'var(--vgip-meta-input-color)' : ''}\"><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n </div>\n <div *ngIf='suggestions.length' class=\"Vlt-badge Vlt-badge--small Vlt-badge--purple\" style='padding: 0px 4px; position: absolute; top: 26px; left: 4px; pointer-events: none; min-width: 14px;'>{{suggestions.length}}</div>\n </div>\n <input class='model' type='hidden' [required]='validations.required' [(ngModel)]='model' #f='ngModel' [name]='name' />\n <input class='main' [readonly]='!isSearchable || (model && !multiple)' [ngModel]='searchText' #ft='ngModel' (ngModelChange)='onSearchTextChanged($event)' [ngModelOptions]=\"{standalone: true}\" type=\"text\" placeholder=\"{{ placeHolderLabel || ' ' }}\" [ngClass]='{ ext: externalLink }' (click)='onActivated($event)' (focus)='onActivated($event)' (blur)='onBlur($event)' [disabled]='disabled' [title]=\"model ? model.label : ''\"/>\n <label class='Vlt-truncate hidden-mobile' style='padding-left: 25px; padding-right: 42px;'>{{ (multiple && isPolymorphic) ? '+Add ' : ((model || !isPolymorphic) ? meta.label : ( meta.searchLabel || 'Search')) }}<span *ngIf='validations.required' class='Vlt-red'>*</span>&nbsp;<span style='color: var(--vgip-meta-input-color); text-transform: capitalize;' *ngIf='model'>({{model.type || model.resourceType || model.length}})</span></label> <!-- eslint-disable-line @angular-eslint/template/label-has-associated-control-->\n <label class='Vlt-truncate hidden-desktop' style='padding-left: 25px; padding-right: 42px;'>{{meta.label || meta.name}}<span *ngIf='validations.required' class='Vlt-red'>*</span>&nbsp;<span style='color: var(--vgip-meta-input-color); text-transform: capitalize;' *ngIf='model'>({{model.type || model.resourceType || model.length}})</span></label> <!-- eslint-disable-line @angular-eslint/template/label-has-associated-control-->\n </label>\n <div *ngIf='searching' class='search-progress'>\n <div class=\"container\">\n <div class=\"bar Vlt-bg-purple\"></div>\n </div>\n </div>\n <div class='Vlt-composite__append right-actions'>\n <!-- <div *ngIf='prevModel && !model' class=\"Vlt-composite__append--icon\" (click)='revert()'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-reply\"/></svg>\n </div>\n </div> -->\n <a href='#' *ngIf='model && !multiple' class=\"Vlt-composite__append--icon\" (click)='removeSelection($event)'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\"/></svg>\n </div>\n </a>\n <a [href]='externalLink || model.externalLink' target='_blank' rel='noopener' *ngIf='externalLink && (model && !multiple)' class=\"Vlt-composite__append--icon\" aria-label='Open external'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-open\"/></svg>\n </div>\n </a>\n </div>\n </div>\n <!-- <span *ngIf='hasCreatables'>\n <button type='button' *ngIf='!model || multiple' (click)='openResource()' class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--icon Vlt-btn--large\" style='margin-left: 12px;'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>\n </button>\n <button type='button' *ngIf='model && !multiple' (click)='openResource(model)' class=\"Vlt-btn Vlt-btn--primary Vlt-btn--icon Vlt-btn--large\" style='margin-left: 12px;'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-edit\"/></svg>\n </button>\n </span> -->\n <div *ngIf='hasAppendButton && !disabled' class=\"Vlt-composite__append\">\n <button (focus)='onActivated($event)' (blur)='onBlur($event)' type='button' *ngIf='!model || multiple' (click)='openResource()' class=\"Vlt-btn Vlt-btn--white Vlt-btn--icon\" aria-label='Add new'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>\n </button>\n <button (focus)='onActivated($event)' (blur)='onBlur($event)' type='button' *ngIf='model && !multiple' (click)='openResource(model)' class=\"Vlt-btn Vlt-btn--white Vlt-btn--icon\" aria-label='Edit'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-edit\"/></svg>\n </button>\n </div>\n </div>\n <small *ngIf='f.invalid && ((f | metaModel)._parent.submitted || ((ft | metaModel).touched && keyListenerActive))' class=\"Vlt-form__element__error\">\n <span *ngIf=\"f.errors.required\">Required</span>\n <span *ngIf=\"f.errors.pattern\">Should match '{{validations.pattern}}' pattern</span>\n <span *ngIf=\"f.errors.custom\">{{f.errors.custom}}&nbsp;</span>\n </small>\n <small *ngIf='meta.helpText || meta.hint' class=\"Vlt-form__element__hint\">{{meta.helpText || meta.hint}}</small>\n</div>\n", styles: [".Vlt-form__element--big .Vlt-input input:placeholder-shown:not(:focus)~label.Vlt-truncate{font-size:1.6rem;margin-top:-.8rem;top:50%}.Vlt-form__element--big ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-right:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.Vlt-form__element--big:hover .items-container,.Vlt-form__element--big:hover .main,.Vlt-form__element--big:hover .Vlt-composite__append button,.Vlt-form__element--big:hover ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone,.Vlt-form__element--big.active .items-container,.Vlt-form__element--big.active .main,.Vlt-form__element--big.active .Vlt-composite__append button,.Vlt-form__element--big.active ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big.Vlt-form__element--error .items-container,.Vlt-form__element--big.Vlt-form__element--error .main,.Vlt-form__element--big.Vlt-form__element--error .Vlt-composite__append button,.Vlt-form__element--big.Vlt-form__element--error ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-color:#f25a6b}.Vlt-form__element--big.multiple .Vlt-composite.Vlt-dropdown{margin-top:3px}.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .items-container,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .main,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .Vlt-composite__append button,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .items-container,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .main,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .Vlt-composite__append button,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big.multiple .items-container{background-color:var(--vgip-meta-input-bg-color);border:1px solid var(--vgip-meta-input-border-color);border-bottom:0;border-top-left-radius:6px;border-top-right-radius:6px}.Vlt-form__element--big.multiple .items-container .badges-container{overflow:auto;padding:6px 4px 3px 6px}.Vlt-form__element--big.multiple .items-container .badges-container .Vlt-badge{margin-bottom:3px;margin-left:0;margin-right:3px;overflow:hidden;max-width:100%;position:relative;padding-right:30px}.Vlt-form__element--big.multiple .items-container .badges-container .Vlt-badge.grid{display:grid}.Vlt-form__element--big.multiple:not(.has-value) .items-container{border:0}.Vlt-form__element--big.multiple.has-value .main,.Vlt-form__element--big.multiple.has-value .Vlt-composite__append button,.Vlt-form__element--big.multiple.has-value ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-top-left-radius:0;border-top-right-radius:0;height:48px}.Vlt-form__element--big.multiple.has-value .main:not(.Vlt-btn--icon),.Vlt-form__element--big.multiple.has-value .Vlt-composite__append button:not(.Vlt-btn--icon),.Vlt-form__element--big.multiple.has-value ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone:not(.Vlt-btn--icon){border-top:0}.Vlt-form__element--big.multiple.has-value .Vlt-composite__prepend ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-top-right-radius:6px}.Vlt-form__element--big.multiple.has-value .Vlt-composite__append button{border-top-left-radius:6px;border-top:0}.Vlt-composite__prepend{z-index:initial}.Vlt-composite__prepend--icon{top:0;padding-top:15px;left:3px}.Vlt-input.has-append-button .Vlt-composite__append.right-actions{right:0}.Vlt-input.has-append-button .Vlt-composite__append.right-actions .Vlt-composite__append--icon:last-child{width:36px}.Vlt-composite__append.right-actions{position:absolute;top:5px;right:5px;cursor:pointer}.Vlt-composite__append.right-actions .Vlt-composite__append--icon{outline:none;position:initial;display:inline-block}.Vlt-composite__append.right-actions .Vlt-composite__append--icon svg{height:14px;width:14px}.Vlt-composite__append.right-actions .Vlt-composite__append--icon:hover svg,.Vlt-composite__append.right-actions .Vlt-composite__append--icon:focus svg{fill:var(--vgip-meta-input-accent-color)}.Vlt-composite__append--icon.preview{bottom:initial;padding:0 2px}.Vlt-composite__append button{height:48px;padding-right:16px;background:var(--vgip-meta-input-bg-color);border-color:var(--vgip-meta-input-border-color);padding-left:16px;border-left:0}.Vlt-composite__append button:hover{background:var(--vgip-meta-input-action-hover-bg-color)}.Vlt-composite__append button svg{margin:-2px 0 0;fill:var(--vgip-meta-input-accent-color)}.Vlt-input input{padding-left:38px;text-overflow:ellipsis;padding-right:36px}.Vlt-input input.ext{padding-right:72px}.Vlt-composite__wrapper.has-append-button input.main{border-top-right-radius:0;border-bottom-right-radius:0;border-right:0}.Vlt-input input{background:var(--vgip-meta-input-bg-color);border-color:var(--vgip-meta-input-border-color);font-weight:700}.Vlt-dropdown__panel{max-width:100%;width:100%;min-width:280px}.Vlt-dropdown__panel .Vlt-dropdown__link.smart{font-weight:700;background:var(--vgip-meta-dropdown-bg-color)}.Vlt-dropdown__panel .Vlt-dropdown__link.smart.hidden{display:none}.Vlt-dropdown__panel .Vlt-dropdown__link.bold:after{background-color:#e1e2e6;content:\"\";height:1px;left:0;position:absolute;right:0;bottom:0}.Vlt-dropdown__panel .Vlt-dropdown__link--selected{background:rgba(44,45,48,.05)}.Vlt-dropdown__panel .Vlt-dropdown__link>div{flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.Vlt-dropdown__panel .Vlt-dropdown__link>svg{margin-right:8px}.vgip-meta-field-preview .Vlt-badge{margin:1px 3px 1px 0;overflow:hidden;max-width:100%}:host .search-scope{width:130px}:host .search-scope ::ng-deep .Vlt-form__element.has-value .Vlt-select:after{display:none}:host .search-scope ::ng-deep .Vlt-form__element .right-actions{right:12px}:host .search-scope ::ng-deep .Vlt-form__element label.Vlt-truncate{padding-right:48px}:host .search-scope .mobile-icon{display:none}@media only screen and (max-width: 575px){:host .search-scope{width:60px}:host .search-scope:not(.has-value) .mobile-icon{display:block}:host .search-scope.has-value .mobile-label{display:block}:host .search-scope ::ng-deep .Vlt-form__element.Vlt-form__element--big .Vlt-composite__append{display:none}:host .search-scope ::ng-deep .Vlt-form__element.Vlt-form__element--big .Vlt-select:after{margin-right:-7px}:host .search-scope ::ng-deep .Vlt-form__element.Vlt-form__element--big label.Vlt-truncate{visibility:hidden}}:host .search-scope ::ng-deep vgip-meta-field .Vlt-input input.main.standalone{padding-right:initial;background:var(--vgip-meta-input-accent-bg-color);border-color:var(--vgip-meta-input-border-color)}:host .search-scope ::ng-deep vgip-meta-field .Vlt-form__element{padding:0}:host .search-scope ::ng-deep vgip-meta-field .Vlt-form__element .Vlt-dropdown__panel{width:initial}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.MetaField, selector: "vgip-meta-field", inputs: ["meta", "parent", "integrationCode", "resourceType", "index", "scope", "preview", "theme"], outputs: ["onChange", "onLeave"] }, { kind: "pipe", type: i9.MetaModelPipe, name: "metaModel" }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] }); }
820
824
  }
821
825
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.11", ngImport: i0, type: FieldReference, decorators: [{
822
826
  type: Component,
823
- args: [{ viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], template: "<div class='vgip-meta-field-preview' *ngIf='preview && model && (!multiple || (multiple && model.length))'>\n <div class='vgip-meta-field-label' [title]='meta.label || meta.name'>{{meta.label || meta.name}}</div>\n <div *ngIf='!multiple' class='vgip-meta-field-value __gu'>\n <svg class=\"Vlt-icon Vlt-icon--smaller\" style='margin-top: -3px;'><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n {{model.label || model.id}} <span class='Vlt-grey'>({{model.type}})</span>\n </div>\n <div *ngIf='multiple' class='vgip-meta-field-value __gu'>\n <span *ngFor='let m of (model || [])' class='Vlt-badge Vlt-badge--app'>\n {{m.label || m.id || m}} <span class='Vlt-grey-dark' *ngIf='isPolymorphic'>({{m.type}})</span>\n </span>\n </div>\n <a [href]='externalLink || model.externalLink' target='_blank' rel='noopener' *ngIf='externalLink && (model && !multiple)' class=\"Vlt-composite__append--icon preview\" aria-label='Open external'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-open\"/></svg>\n </div>\n </a>\n</div>\n<div *ngIf='!preview' class=\"meta-field-reference Vlt-form__element Vlt-form__element--big\" [ngClass]=\"{ 'Vlt-form__element--error': (searchError && keyListenerActive) || (f.invalid && ((f | metaModel)._parent.submitted || (ft | metaModel ).touched)), 'multiple': multiple, 'has-value': model, active: keyListenerActive }\">\n <div *ngIf='multiple' class='items-container' [ngClass]='{ creatable: isCreatable }'>\n <div *ngIf='model' class='badges-container keep-focus' (click)='focus()' style='width: 100%;'>\n <div *ngFor='let item of model' class=\"Vlt-badge Vlt-badge--app Vlt-badge--large keep-focus\" [ngClass]=\"{ grid: (item.label || item.id || '').length > 56}\">\n <span class='Vlt-truncate'>{{item.label || item.id || item }} <span *ngIf='isPolymorphic' class='Vlt-grey-dark' style='font-weight: normal;'>({{item.type}})</span></span>\n <button class=\"Vlt-badge__dismiss keep-focus\" (click)='remove($event, item)' style='position: absolute; right: 12px; top: 8px;' aria-label='Remove'></button>\n </div>\n </div>\n </div>\n <div class=\"Vlt-composite\">\n <div class='dropdown-wrapper Vlt-dropdown' style='width: 100%; position: absolute; top: 48px;'>\n <div class=\"Vlt-dropdown__panel\">\n <div *ngIf='searchError'>\n <div class=\"Vlt-callout Vlt-callout--critical keep-focus\">\n <i></i>\n <div class=\"Vlt-callout__content\">{{searchError}}</div>\n </div>\n </div>\n <div *ngIf='!searchError && (suggestions.length || searchResults)' [ngClass]=\"{ suggestions: !searchResults}\" class=\"Vlt-dropdown__panel__content Vlt-dropdown__panel__content--scroll-area\" style='padding: 0;'>\n <div class=\"Vlt-dropdown__block\"></div>\n <div *ngIf='!searchResults' class=\"Vlt-dropdown__scroll\">\n <div [ngClass]=\"{ 'Vlt-dropdown__link--selected': activeSuggestionIndex === i, smart: suggestion.smart }\" (click)='onSuggestionSelect($event, suggestion)' *ngFor='let suggestion of suggestions; let i = index' class=\"Vlt-dropdown__link has-type\">\n <svg class='Vlt-icon Vlt-icon--small'><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n <div class='__gu' [title]='suggestion.label'>{{ suggestion.label }}</div>\n <small class='Vlt-grey-dark' style='text-transform: capitalize;'>{{suggestion.type}}</small>\n </div>\n </div>\n <div *ngIf='searchResults' class=\"Vlt-dropdown__scroll\">\n <div *ngIf='!searchResults.length' class='Vlt-dropdown__block'> No records matching '<b style='pointer-events: none;'>{{searchText}}</b>' were found.</div>\n <div [ngClass]=\"{ 'Vlt-dropdown__link--selected': activeSuggestionIndex === i }\" (click)='onSuggestionSelect($event, suggestion)' *ngFor='let suggestion of searchResults; let i = index' class=\"Vlt-dropdown__link has-type\">\n <svg class='Vlt-icon Vlt-icon--small'><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n <div class='__gu' [title]='suggestion.label'>{{ suggestion.label }}</div>\n <small class='Vlt-grey-dark' style='text-transform: capitalize;'>{{suggestion.type}}</small>\n </div>\n </div>\n <!-- <div *ngIf='searchResults' class=\"Vlt-dropdown__block\" style='text-align: right; padding-top: 0;'>\n <small>\n {{ searchResults ? searchResults.length+' results' : 'Suggestions' }} <span style='font-style: italic; font-weight: normal;' *ngIf='searchResults'>~{{ model ? 'last search' : searchText}}</span>\n </small>\n </div> -->\n <div class=\"Vlt-dropdown__block\"></div>\n </div>\n </div>\n </div>\n <div class=\"Vlt-composite__prepend\" *ngIf='isPolymorphic && showTypes && (multiple || !model || (dropdownVisible && ((suggestions || searchResults || []).length || searchResourceType.resourceType)))'>\n <div class=\"search-scope\" [ngClass]=\"{ 'has-value': searchResourceType.resourceType }\">\n <vgip-meta-field class='shown' [meta]='searchResourceTypeMeta' [parent]='searchResourceType' (onChange)='onSearchResourceTypeChanged($event)' (onLeave)='onBlur($event)' [integrationCode]='integrationCode' theme='inherit'></vgip-meta-field>\n <svg class='Vlt-icon Vlt-grey Vlt-icon--smaller visible-mobile mobile-icon' style='position: absolute; top: 15px; left: 14px; pointer-events: none;'>\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-menu\"/>\n </svg>\n <label class='mobile-label hidden-mobile hidden-desktop'>Search</label>\n </div>\n </div>\n <div *ngIf='!(isPolymorphic && showTypes && (multiple || !model || dropdownVisible))'><!-- required by css --></div>\n <div class=\"Vlt-composite__wrapper Vlt-input\" style='overflow: hidden;' [ngClass]=\"{ 'has-append-button': hasAppendButton && !disabled }\">\n <label class='wrapper'>\n <div class=\"Vlt-composite__prepend Vlt-composite__prepend--icon\" style='top: 0; padding-top: 15px;'>\n <div class=\"Vlt-composite__icon\">\n <svg *ngIf='isSearchable && (!model || multiple)' class='Vlt-grey'><use attr.xlink:href=\"volta/volta-icons.svg#Vlt-icon-{{ multiple ? 'stack' : 'search'}}\"/></svg>\n <svg *ngIf='!isSearchable || (model && !multiple)' [ngStyle]=\"{fill: integrationIcon === 'Brand-icon-vonage' ? 'var(--vgip-meta-input-color)' : ''}\"><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n </div>\n <div *ngIf='suggestions.length' class=\"Vlt-badge Vlt-badge--small Vlt-badge--purple\" style='padding: 0px 4px; position: absolute; top: 26px; left: 4px; pointer-events: none; min-width: 14px;'>{{suggestions.length}}</div>\n </div>\n <input class='model' type='hidden' [required]='validations.required' [(ngModel)]='model' #f='ngModel' [name]='name' />\n <input class='main' [readonly]='!isSearchable || (model && !multiple)' [ngModel]='searchText' #ft='ngModel' (ngModelChange)='onSearchTextChanged($event)' [ngModelOptions]=\"{standalone: true}\" type=\"text\" placeholder=\"{{ placeHolderLabel || ' ' }}\" [ngClass]='{ ext: externalLink }' (click)='onActivated($event)' (focus)='onActivated($event)' (blur)='onBlur($event)' [disabled]='disabled' [title]=\"model ? model.label : ''\"/>\n <label class='Vlt-truncate hidden-mobile' style='padding-left: 25px; padding-right: 42px;'>{{ (multiple && isPolymorphic) ? '+Add ' : ((model || !isPolymorphic) ? meta.label : ( meta.searchLabel || 'Search')) }}<span *ngIf='validations.required' class='Vlt-red'>*</span>&nbsp;<span style='color: var(--vgip-meta-input-color); text-transform: capitalize;' *ngIf='model'>({{model.type || model.resourceType || model.length}})</span></label>\n <label class='Vlt-truncate hidden-desktop' style='padding-left: 25px; padding-right: 42px;'>{{meta.label || meta.name}}<span *ngIf='validations.required' class='Vlt-red'>*</span>&nbsp;<span style='color: var(--vgip-meta-input-color); text-transform: capitalize;' *ngIf='model'>({{model.type || model.resourceType || model.length}})</span></label>\n </label>\n <div *ngIf='searching' class='search-progress'>\n <div class=\"container\">\n <div class=\"bar Vlt-bg-purple\"></div>\n </div>\n </div>\n <div class='Vlt-composite__append right-actions'>\n <!-- <div *ngIf='prevModel && !model' class=\"Vlt-composite__append--icon\" (click)='revert()'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-reply\"/></svg>\n </div>\n </div> -->\n <div *ngIf='model && !multiple' class=\"Vlt-composite__append--icon\" (click)='removeSelection()'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\"/></svg>\n </div>\n </div>\n <a [href]='externalLink || model.externalLink' target='_blank' rel='noopener' *ngIf='externalLink && (model && !multiple)' class=\"Vlt-composite__append--icon\" aria-label='Open external'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-open\"/></svg>\n </div>\n </a>\n </div>\n </div>\n <!-- <span *ngIf='hasCreatables'>\n <button type='button' *ngIf='!model || multiple' (click)='openResource()' class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--icon Vlt-btn--large\" style='margin-left: 12px;'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>\n </button>\n <button type='button' *ngIf='model && !multiple' (click)='openResource(model)' class=\"Vlt-btn Vlt-btn--primary Vlt-btn--icon Vlt-btn--large\" style='margin-left: 12px;'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-edit\"/></svg>\n </button>\n </span> -->\n <div *ngIf='hasAppendButton && !disabled' class=\"Vlt-composite__append\">\n <button (focus)='onActivated($event)' (blur)='onBlur($event)' type='button' *ngIf='!model || multiple' (click)='openResource()' class=\"Vlt-btn Vlt-btn--white Vlt-btn--icon\" aria-label='Add new'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>\n </button>\n <button (focus)='onActivated($event)' (blur)='onBlur($event)' type='button' *ngIf='model && !multiple' (click)='openResource(model)' class=\"Vlt-btn Vlt-btn--white Vlt-btn--icon\" aria-label='Edit'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-edit\"/></svg>\n </button>\n </div>\n </div>\n <small *ngIf='f.invalid && ((f | metaModel)._parent.submitted || ((ft | metaModel).touched && keyListenerActive))' class=\"Vlt-form__element__error\">\n <span *ngIf=\"f.errors.required\">Required</span>\n <span *ngIf=\"f.errors.pattern\">Should match '{{validations.pattern}}' pattern</span>\n <span *ngIf=\"f.errors.custom\">{{f.errors.custom}}&nbsp;</span>\n </small>\n <small *ngIf='meta.helpText || meta.hint' class=\"Vlt-form__element__hint\">{{meta.helpText || meta.hint}}</small>\n</div>\n", styles: [".Vlt-form__element--big .Vlt-input input:placeholder-shown:not(:focus)~label.Vlt-truncate{font-size:1.6rem;margin-top:-.8rem;top:50%}.Vlt-form__element--big ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-right:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.Vlt-form__element--big:hover .items-container,.Vlt-form__element--big:hover .main,.Vlt-form__element--big:hover .Vlt-composite__append button,.Vlt-form__element--big:hover ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone,.Vlt-form__element--big.active .items-container,.Vlt-form__element--big.active .main,.Vlt-form__element--big.active .Vlt-composite__append button,.Vlt-form__element--big.active ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big.Vlt-form__element--error .items-container,.Vlt-form__element--big.Vlt-form__element--error .main,.Vlt-form__element--big.Vlt-form__element--error .Vlt-composite__append button,.Vlt-form__element--big.Vlt-form__element--error ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-color:#f25a6b}.Vlt-form__element--big.multiple .Vlt-composite.Vlt-dropdown{margin-top:3px}.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .items-container,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .main,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .Vlt-composite__append button,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .items-container,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .main,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .Vlt-composite__append button,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big.multiple .items-container{background-color:var(--vgip-meta-input-bg-color);border:1px solid var(--vgip-meta-input-border-color);border-bottom:0;border-top-left-radius:6px;border-top-right-radius:6px}.Vlt-form__element--big.multiple .items-container .badges-container{overflow:auto;padding:6px 4px 3px 6px}.Vlt-form__element--big.multiple .items-container .badges-container .Vlt-badge{margin-bottom:3px;margin-left:0;margin-right:3px;overflow:hidden;max-width:100%;position:relative;padding-right:30px}.Vlt-form__element--big.multiple .items-container .badges-container .Vlt-badge.grid{display:grid}.Vlt-form__element--big.multiple:not(.has-value) .items-container{border:0}.Vlt-form__element--big.multiple.has-value .main,.Vlt-form__element--big.multiple.has-value .Vlt-composite__append button,.Vlt-form__element--big.multiple.has-value ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-top-left-radius:0;border-top-right-radius:0;height:48px}.Vlt-form__element--big.multiple.has-value .main:not(.Vlt-btn--icon),.Vlt-form__element--big.multiple.has-value .Vlt-composite__append button:not(.Vlt-btn--icon),.Vlt-form__element--big.multiple.has-value ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone:not(.Vlt-btn--icon){border-top:0}.Vlt-form__element--big.multiple.has-value .Vlt-composite__prepend ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-top-right-radius:6px}.Vlt-form__element--big.multiple.has-value .Vlt-composite__append button{border-top-left-radius:6px;border-top:0}.Vlt-composite__prepend{z-index:initial}.Vlt-composite__prepend--icon{top:0;padding-top:15px;left:3px}.Vlt-input.has-append-button .Vlt-composite__append.right-actions{right:0}.Vlt-input.has-append-button .Vlt-composite__append.right-actions .Vlt-composite__append--icon:last-child{width:36px}.Vlt-composite__append.right-actions{position:absolute;top:5px;right:5px;cursor:pointer}.Vlt-composite__append.right-actions .Vlt-composite__append--icon{outline:none;position:initial;display:inline-block}.Vlt-composite__append.right-actions .Vlt-composite__append--icon svg{height:14px;width:14px}.Vlt-composite__append.right-actions .Vlt-composite__append--icon:hover svg,.Vlt-composite__append.right-actions .Vlt-composite__append--icon:focus svg{fill:var(--vgip-meta-input-accent-color)}.Vlt-composite__append--icon.preview{bottom:initial;padding:0 2px}.Vlt-composite__append button{height:48px;padding-right:16px;background:var(--vgip-meta-input-bg-color);border-color:var(--vgip-meta-input-border-color);padding-left:16px;border-left:0}.Vlt-composite__append button:hover{background:var(--vgip-meta-input-action-hover-bg-color)}.Vlt-composite__append button svg{margin:-2px 0 0;fill:var(--vgip-meta-input-accent-color)}.Vlt-input input{padding-left:38px;text-overflow:ellipsis;padding-right:36px}.Vlt-input input.ext{padding-right:72px}.Vlt-composite__wrapper.has-append-button input.main{border-top-right-radius:0;border-bottom-right-radius:0;border-right:0}.Vlt-input input{background:var(--vgip-meta-input-bg-color);border-color:var(--vgip-meta-input-border-color);font-weight:700}.Vlt-dropdown__panel{max-width:100%;width:100%;min-width:280px}.Vlt-dropdown__panel .Vlt-dropdown__link.smart{font-weight:700;background:var(--vgip-meta-dropdown-bg-color)}.Vlt-dropdown__panel .Vlt-dropdown__link.smart.hidden{display:none}.Vlt-dropdown__panel .Vlt-dropdown__link.bold:after{background-color:#e1e2e6;content:\"\";height:1px;left:0;position:absolute;right:0;bottom:0}.Vlt-dropdown__panel .Vlt-dropdown__link--selected{background:rgba(44,45,48,.05)}.Vlt-dropdown__panel .Vlt-dropdown__link>div{flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.Vlt-dropdown__panel .Vlt-dropdown__link>svg{margin-right:8px}.vgip-meta-field-preview .Vlt-badge{margin:1px 3px 1px 0;overflow:hidden;max-width:100%}:host .search-scope{width:130px}:host .search-scope ::ng-deep .Vlt-form__element.has-value .Vlt-select:after{display:none}:host .search-scope ::ng-deep .Vlt-form__element .right-actions{right:12px}:host .search-scope ::ng-deep .Vlt-form__element label.Vlt-truncate{padding-right:48px}:host .search-scope .mobile-icon{display:none}@media only screen and (max-width: 575px){:host .search-scope{width:60px}:host .search-scope:not(.has-value) .mobile-icon{display:block}:host .search-scope.has-value .mobile-label{display:block}:host .search-scope ::ng-deep .Vlt-form__element.Vlt-form__element--big .Vlt-composite__append{display:none}:host .search-scope ::ng-deep .Vlt-form__element.Vlt-form__element--big .Vlt-select:after{margin-right:-7px}:host .search-scope ::ng-deep .Vlt-form__element.Vlt-form__element--big label.Vlt-truncate{visibility:hidden}}:host .search-scope ::ng-deep vgip-meta-field .Vlt-input input.main.standalone{padding-right:initial;background:var(--vgip-meta-input-accent-bg-color);border-color:var(--vgip-meta-input-border-color)}:host .search-scope ::ng-deep vgip-meta-field .Vlt-form__element{padding:0}:host .search-scope ::ng-deep vgip-meta-field .Vlt-form__element .Vlt-dropdown__panel{width:initial}\n"] }]
827
+ args: [{ viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], template: "<div class='vgip-meta-field-preview' *ngIf='preview && model && (!multiple || (multiple && model.length))'>\n <div class='vgip-meta-field-label' [title]='meta.label || meta.name'>{{meta.label || meta.name}}</div>\n <div *ngIf='!multiple' class='vgip-meta-field-value __gu'>\n <svg class=\"Vlt-icon Vlt-icon--smaller\" style='margin-top: -3px;'><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n {{model.label || model.id}} <span class='Vlt-grey'>({{model.type}})</span>\n </div>\n <div *ngIf='multiple' class='vgip-meta-field-value __gu'>\n <span *ngFor='let m of (model || [])' class='Vlt-badge Vlt-badge--app'>\n {{m.label || m.id || m}} <span class='Vlt-grey-dark' *ngIf='isPolymorphic'>({{m.type}})</span>\n </span>\n </div>\n <a [href]='externalLink || model.externalLink' target='_blank' rel='noopener' *ngIf='externalLink && (model && !multiple)' class=\"Vlt-composite__append--icon preview\" aria-label='Open external'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-open\"/></svg>\n </div>\n </a>\n</div>\n<div *ngIf='!preview' class=\"meta-field-reference Vlt-form__element Vlt-form__element--big\" [ngClass]=\"{ 'Vlt-form__element--error': (searchError && keyListenerActive) || (f.invalid && ((f | metaModel)._parent.submitted || (ft | metaModel ).touched)), 'multiple': multiple, 'has-value': model, active: keyListenerActive }\">\n <div *ngIf='multiple' class='items-container' [ngClass]='{ creatable: isCreatable }'>\n <div *ngIf='model' class='badges-container keep-focus' (click)='focus()' style='width: 100%;'> <!-- eslint-disable-line -->\n <div *ngFor='let item of model' class=\"Vlt-badge Vlt-badge--app Vlt-badge--large keep-focus\" [ngClass]=\"{ grid: (item.label || item.id || '').length > 56}\">\n <span class='Vlt-truncate'>{{item.label || item.id || item }} <span *ngIf='isPolymorphic' class='Vlt-grey-dark' style='font-weight: normal;'>({{item.type}})</span></span>\n <button class=\"Vlt-badge__dismiss keep-focus\" (click)='remove($event, item)' style='position: absolute; right: 12px; top: 8px;' aria-label='Remove'></button>\n </div>\n </div>\n </div>\n <div class=\"Vlt-composite\">\n <div class='dropdown-wrapper Vlt-dropdown' style='width: 100%; position: absolute; top: 48px;'>\n <div class=\"Vlt-dropdown__panel\">\n <div *ngIf='searchError'>\n <div class=\"Vlt-callout Vlt-callout--critical keep-focus\">\n <i></i>\n <div class=\"Vlt-callout__content\">{{searchError}}</div>\n </div>\n </div>\n <div *ngIf='!searchError && (suggestions.length || searchResults)' [ngClass]=\"{ suggestions: !searchResults}\" class=\"Vlt-dropdown__panel__content Vlt-dropdown__panel__content--scroll-area\" style='padding: 0;'>\n <div class=\"Vlt-dropdown__block\"></div>\n <div *ngIf='!searchResults' class=\"Vlt-dropdown__scroll\">\n <a href='#' [ngClass]=\"{ 'Vlt-dropdown__link--selected': activeSuggestionIndex === i, smart: suggestion.smart }\" (click)='onSuggestionSelect($event, suggestion)' *ngFor='let suggestion of suggestions; let i = index' class=\"Vlt-dropdown__link has-type\">\n <svg class='Vlt-icon Vlt-icon--small'><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n <div class='__gu' [title]='suggestion.label'>{{ suggestion.label }}</div>\n <small class='Vlt-grey-dark' style='text-transform: capitalize;'>{{suggestion.type}}</small>\n </a>\n </div>\n <div *ngIf='searchResults' class=\"Vlt-dropdown__scroll\">\n <div *ngIf='!searchResults.length' class='Vlt-dropdown__block'> No records matching '<b style='pointer-events: none;'>{{searchText}}</b>' were found.</div>\n <a href='#' [ngClass]=\"{ 'Vlt-dropdown__link--selected': activeSuggestionIndex === i }\" (click)='onSuggestionSelect($event, suggestion)' *ngFor='let suggestion of searchResults; let i = index' class=\"Vlt-dropdown__link has-type\">\n <svg class='Vlt-icon Vlt-icon--small'><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n <div class='__gu' [title]='suggestion.label'>{{ suggestion.label }}</div>\n <small class='Vlt-grey-dark' style='text-transform: capitalize;'>{{suggestion.type}}</small>\n </a>\n </div>\n <!-- <div *ngIf='searchResults' class=\"Vlt-dropdown__block\" style='text-align: right; padding-top: 0;'>\n <small>\n {{ searchResults ? searchResults.length+' results' : 'Suggestions' }} <span style='font-style: italic; font-weight: normal;' *ngIf='searchResults'>~{{ model ? 'last search' : searchText}}</span>\n </small>\n </div> -->\n <div class=\"Vlt-dropdown__block\"></div>\n </div>\n </div>\n </div>\n <div class=\"Vlt-composite__prepend\" *ngIf='isPolymorphic && showTypes && (multiple || !model || (dropdownVisible && ((suggestions || searchResults || []).length || searchResourceType.resourceType)))'>\n <div class=\"search-scope\" [ngClass]=\"{ 'has-value': searchResourceType.resourceType }\">\n <vgip-meta-field class='shown' [meta]='searchResourceTypeMeta' [parent]='searchResourceType' (onChange)='onSearchResourceTypeChanged($event)' (onLeave)='onBlur($event)' [integrationCode]='integrationCode' theme='inherit'></vgip-meta-field>\n <svg class='Vlt-icon Vlt-grey Vlt-icon--smaller visible-mobile mobile-icon' style='position: absolute; top: 15px; left: 14px; pointer-events: none;'>\n <use xlink:href=\"volta/volta-icons.svg#Vlt-icon-menu\"/>\n </svg>\n </div>\n </div>\n <div *ngIf='!(isPolymorphic && showTypes && (multiple || !model || dropdownVisible))'><!-- required by css --></div>\n <div class=\"Vlt-composite__wrapper Vlt-input\" style='overflow: hidden;' [ngClass]=\"{ 'has-append-button': hasAppendButton && !disabled }\">\n <label class='wrapper'>\n <div class=\"Vlt-composite__prepend Vlt-composite__prepend--icon\" style='top: 0; padding-top: 15px;'>\n <div class=\"Vlt-composite__icon\">\n <svg *ngIf='isSearchable && (!model || multiple)' class='Vlt-grey'><use attr.xlink:href=\"volta/volta-icons.svg#Vlt-icon-{{ multiple ? 'stack' : 'search'}}\"/></svg>\n <svg *ngIf='!isSearchable || (model && !multiple)' [ngStyle]=\"{fill: integrationIcon === 'Brand-icon-vonage' ? 'var(--vgip-meta-input-color)' : ''}\"><use attr.xlink:href=\"volta/volta-brand-icons.svg#{{integrationIcon}}\"/></svg>\n </div>\n <div *ngIf='suggestions.length' class=\"Vlt-badge Vlt-badge--small Vlt-badge--purple\" style='padding: 0px 4px; position: absolute; top: 26px; left: 4px; pointer-events: none; min-width: 14px;'>{{suggestions.length}}</div>\n </div>\n <input class='model' type='hidden' [required]='validations.required' [(ngModel)]='model' #f='ngModel' [name]='name' />\n <input class='main' [readonly]='!isSearchable || (model && !multiple)' [ngModel]='searchText' #ft='ngModel' (ngModelChange)='onSearchTextChanged($event)' [ngModelOptions]=\"{standalone: true}\" type=\"text\" placeholder=\"{{ placeHolderLabel || ' ' }}\" [ngClass]='{ ext: externalLink }' (click)='onActivated($event)' (focus)='onActivated($event)' (blur)='onBlur($event)' [disabled]='disabled' [title]=\"model ? model.label : ''\"/>\n <label class='Vlt-truncate hidden-mobile' style='padding-left: 25px; padding-right: 42px;'>{{ (multiple && isPolymorphic) ? '+Add ' : ((model || !isPolymorphic) ? meta.label : ( meta.searchLabel || 'Search')) }}<span *ngIf='validations.required' class='Vlt-red'>*</span>&nbsp;<span style='color: var(--vgip-meta-input-color); text-transform: capitalize;' *ngIf='model'>({{model.type || model.resourceType || model.length}})</span></label> <!-- eslint-disable-line @angular-eslint/template/label-has-associated-control-->\n <label class='Vlt-truncate hidden-desktop' style='padding-left: 25px; padding-right: 42px;'>{{meta.label || meta.name}}<span *ngIf='validations.required' class='Vlt-red'>*</span>&nbsp;<span style='color: var(--vgip-meta-input-color); text-transform: capitalize;' *ngIf='model'>({{model.type || model.resourceType || model.length}})</span></label> <!-- eslint-disable-line @angular-eslint/template/label-has-associated-control-->\n </label>\n <div *ngIf='searching' class='search-progress'>\n <div class=\"container\">\n <div class=\"bar Vlt-bg-purple\"></div>\n </div>\n </div>\n <div class='Vlt-composite__append right-actions'>\n <!-- <div *ngIf='prevModel && !model' class=\"Vlt-composite__append--icon\" (click)='revert()'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-reply\"/></svg>\n </div>\n </div> -->\n <a href='#' *ngIf='model && !multiple' class=\"Vlt-composite__append--icon\" (click)='removeSelection($event)'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-cross\"/></svg>\n </div>\n </a>\n <a [href]='externalLink || model.externalLink' target='_blank' rel='noopener' *ngIf='externalLink && (model && !multiple)' class=\"Vlt-composite__append--icon\" aria-label='Open external'>\n <div class=\"Vlt-composite__icon\">\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-open\"/></svg>\n </div>\n </a>\n </div>\n </div>\n <!-- <span *ngIf='hasCreatables'>\n <button type='button' *ngIf='!model || multiple' (click)='openResource()' class=\"Vlt-btn Vlt-btn--secondary Vlt-btn--icon Vlt-btn--large\" style='margin-left: 12px;'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>\n </button>\n <button type='button' *ngIf='model && !multiple' (click)='openResource(model)' class=\"Vlt-btn Vlt-btn--primary Vlt-btn--icon Vlt-btn--large\" style='margin-left: 12px;'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-edit\"/></svg>\n </button>\n </span> -->\n <div *ngIf='hasAppendButton && !disabled' class=\"Vlt-composite__append\">\n <button (focus)='onActivated($event)' (blur)='onBlur($event)' type='button' *ngIf='!model || multiple' (click)='openResource()' class=\"Vlt-btn Vlt-btn--white Vlt-btn--icon\" aria-label='Add new'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-plus\"/></svg>\n </button>\n <button (focus)='onActivated($event)' (blur)='onBlur($event)' type='button' *ngIf='model && !multiple' (click)='openResource(model)' class=\"Vlt-btn Vlt-btn--white Vlt-btn--icon\" aria-label='Edit'>\n <svg><use xlink:href=\"volta/volta-icons.svg#Vlt-icon-edit\"/></svg>\n </button>\n </div>\n </div>\n <small *ngIf='f.invalid && ((f | metaModel)._parent.submitted || ((ft | metaModel).touched && keyListenerActive))' class=\"Vlt-form__element__error\">\n <span *ngIf=\"f.errors.required\">Required</span>\n <span *ngIf=\"f.errors.pattern\">Should match '{{validations.pattern}}' pattern</span>\n <span *ngIf=\"f.errors.custom\">{{f.errors.custom}}&nbsp;</span>\n </small>\n <small *ngIf='meta.helpText || meta.hint' class=\"Vlt-form__element__hint\">{{meta.helpText || meta.hint}}</small>\n</div>\n", styles: [".Vlt-form__element--big .Vlt-input input:placeholder-shown:not(:focus)~label.Vlt-truncate{font-size:1.6rem;margin-top:-.8rem;top:50%}.Vlt-form__element--big ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-right:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.Vlt-form__element--big:hover .items-container,.Vlt-form__element--big:hover .main,.Vlt-form__element--big:hover .Vlt-composite__append button,.Vlt-form__element--big:hover ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone,.Vlt-form__element--big.active .items-container,.Vlt-form__element--big.active .main,.Vlt-form__element--big.active .Vlt-composite__append button,.Vlt-form__element--big.active ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big.Vlt-form__element--error .items-container,.Vlt-form__element--big.Vlt-form__element--error .main,.Vlt-form__element--big.Vlt-form__element--error .Vlt-composite__append button,.Vlt-form__element--big.Vlt-form__element--error ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-color:#f25a6b}.Vlt-form__element--big.multiple .Vlt-composite.Vlt-dropdown{margin-top:3px}.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .items-container,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .main,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) .Vlt-composite__append button,.Vlt-form__element--big.multiple:hover:not(.Vlt-form__element--error) ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .items-container,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .main,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) .Vlt-composite__append button,.Vlt-form__element--big.multiple.active:not(.Vlt-form__element--error) ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-color:var(--vgip-meta-input-active-border-color)}.Vlt-form__element--big.multiple .items-container{background-color:var(--vgip-meta-input-bg-color);border:1px solid var(--vgip-meta-input-border-color);border-bottom:0;border-top-left-radius:6px;border-top-right-radius:6px}.Vlt-form__element--big.multiple .items-container .badges-container{overflow:auto;padding:6px 4px 3px 6px}.Vlt-form__element--big.multiple .items-container .badges-container .Vlt-badge{margin-bottom:3px;margin-left:0;margin-right:3px;overflow:hidden;max-width:100%;position:relative;padding-right:30px}.Vlt-form__element--big.multiple .items-container .badges-container .Vlt-badge.grid{display:grid}.Vlt-form__element--big.multiple:not(.has-value) .items-container{border:0}.Vlt-form__element--big.multiple.has-value .main,.Vlt-form__element--big.multiple.has-value .Vlt-composite__append button,.Vlt-form__element--big.multiple.has-value ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-top-left-radius:0;border-top-right-radius:0;height:48px}.Vlt-form__element--big.multiple.has-value .main:not(.Vlt-btn--icon),.Vlt-form__element--big.multiple.has-value .Vlt-composite__append button:not(.Vlt-btn--icon),.Vlt-form__element--big.multiple.has-value ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone:not(.Vlt-btn--icon){border-top:0}.Vlt-form__element--big.multiple.has-value .Vlt-composite__prepend ::ng-deep .search-scope vgip-meta-field .Vlt-input input.main.standalone{border-top-right-radius:6px}.Vlt-form__element--big.multiple.has-value .Vlt-composite__append button{border-top-left-radius:6px;border-top:0}.Vlt-composite__prepend{z-index:initial}.Vlt-composite__prepend--icon{top:0;padding-top:15px;left:3px}.Vlt-input.has-append-button .Vlt-composite__append.right-actions{right:0}.Vlt-input.has-append-button .Vlt-composite__append.right-actions .Vlt-composite__append--icon:last-child{width:36px}.Vlt-composite__append.right-actions{position:absolute;top:5px;right:5px;cursor:pointer}.Vlt-composite__append.right-actions .Vlt-composite__append--icon{outline:none;position:initial;display:inline-block}.Vlt-composite__append.right-actions .Vlt-composite__append--icon svg{height:14px;width:14px}.Vlt-composite__append.right-actions .Vlt-composite__append--icon:hover svg,.Vlt-composite__append.right-actions .Vlt-composite__append--icon:focus svg{fill:var(--vgip-meta-input-accent-color)}.Vlt-composite__append--icon.preview{bottom:initial;padding:0 2px}.Vlt-composite__append button{height:48px;padding-right:16px;background:var(--vgip-meta-input-bg-color);border-color:var(--vgip-meta-input-border-color);padding-left:16px;border-left:0}.Vlt-composite__append button:hover{background:var(--vgip-meta-input-action-hover-bg-color)}.Vlt-composite__append button svg{margin:-2px 0 0;fill:var(--vgip-meta-input-accent-color)}.Vlt-input input{padding-left:38px;text-overflow:ellipsis;padding-right:36px}.Vlt-input input.ext{padding-right:72px}.Vlt-composite__wrapper.has-append-button input.main{border-top-right-radius:0;border-bottom-right-radius:0;border-right:0}.Vlt-input input{background:var(--vgip-meta-input-bg-color);border-color:var(--vgip-meta-input-border-color);font-weight:700}.Vlt-dropdown__panel{max-width:100%;width:100%;min-width:280px}.Vlt-dropdown__panel .Vlt-dropdown__link.smart{font-weight:700;background:var(--vgip-meta-dropdown-bg-color)}.Vlt-dropdown__panel .Vlt-dropdown__link.smart.hidden{display:none}.Vlt-dropdown__panel .Vlt-dropdown__link.bold:after{background-color:#e1e2e6;content:\"\";height:1px;left:0;position:absolute;right:0;bottom:0}.Vlt-dropdown__panel .Vlt-dropdown__link--selected{background:rgba(44,45,48,.05)}.Vlt-dropdown__panel .Vlt-dropdown__link>div{flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.Vlt-dropdown__panel .Vlt-dropdown__link>svg{margin-right:8px}.vgip-meta-field-preview .Vlt-badge{margin:1px 3px 1px 0;overflow:hidden;max-width:100%}:host .search-scope{width:130px}:host .search-scope ::ng-deep .Vlt-form__element.has-value .Vlt-select:after{display:none}:host .search-scope ::ng-deep .Vlt-form__element .right-actions{right:12px}:host .search-scope ::ng-deep .Vlt-form__element label.Vlt-truncate{padding-right:48px}:host .search-scope .mobile-icon{display:none}@media only screen and (max-width: 575px){:host .search-scope{width:60px}:host .search-scope:not(.has-value) .mobile-icon{display:block}:host .search-scope.has-value .mobile-label{display:block}:host .search-scope ::ng-deep .Vlt-form__element.Vlt-form__element--big .Vlt-composite__append{display:none}:host .search-scope ::ng-deep .Vlt-form__element.Vlt-form__element--big .Vlt-select:after{margin-right:-7px}:host .search-scope ::ng-deep .Vlt-form__element.Vlt-form__element--big label.Vlt-truncate{visibility:hidden}}:host .search-scope ::ng-deep vgip-meta-field .Vlt-input input.main.standalone{padding-right:initial;background:var(--vgip-meta-input-accent-bg-color);border-color:var(--vgip-meta-input-border-color)}:host .search-scope ::ng-deep vgip-meta-field .Vlt-form__element{padding:0}:host .search-scope ::ng-deep vgip-meta-field .Vlt-form__element .Vlt-dropdown__panel{width:initial}\n"] }]
824
828
  }], ctorParameters: function () { return [{ type: i1.MetaReferenceService }, { type: i2.MetaResourceService }, { type: i3.MetaMsgService }, { type: i4.MetaContextService }, { type: i5.MetaTrackerService }, { type: i0.ViewContainerRef }]; } });
825
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXRhLXVpL3NyYy9saWIvZmllbGRSZWZlcmVuY2UvaW5kZXgudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXRhLXVpL3NyYy9saWIvZmllbGRSZWZlcmVuY2Uvdmlldy5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQTRCLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7Ozs7Ozs7Ozs7QUFVN0MsTUFBTSxPQUFPLGNBQWUsU0FBUSxhQUFhO0lBZ0MvQyxZQUNVLGdCQUFzQyxFQUN0QyxZQUFpQyxFQUNqQyxjQUE4QixFQUM5QixXQUErQixFQUMvQixXQUErQixFQUMvQixnQkFBa0M7UUFFMUMsS0FBSyxFQUFFLENBQUM7UUFQQSxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXNCO1FBQ3RDLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtRQUNqQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQy9CLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQUMvQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBakM1Qyx1QkFBa0IsR0FBUSxFQUFFLENBQUM7UUFNN0Isc0JBQWlCLEdBQW9CLElBQUksT0FBTyxFQUFVLENBQUM7UUFDM0QsZ0JBQVcsR0FBRyxLQUFLLENB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QU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO3lCQUM5QjtxQkFDRjtvQkFDRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7aUJBQzFDO1lBQ0gsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ1QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ3hCLENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDOytHQXYwQlUsY0FBYzttR0FBZCxjQUFjLDJFQ2pCM0Isa2xXQW9JQSxpbVJEckhpQixDQUFDLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQzs7NEZBRXhELGNBQWM7a0JBTDFCLFNBQVM7b0NBR08sQ0FBQyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRmllbGRBYnN0cmFjdCB9IGZyb20gJy4uL2ZpZWxkQWJzdHJhY3QnO1xuaW1wb3J0IHsgQ29udHJvbENvbnRhaW5lciwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWV0YVJlZmVyZW5jZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9tZXRhUmVmZXJlbmNlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBNZXRhUmVzb3VyY2VTZXJ2aWNlLCBJTWV0YVJlc291cmNlQ29uZmlnIH0gZnJvbSAnLi4vc2VydmljZXMvbWV0YVJlc291cmNlJztcbmltcG9ydCB7IE1ldGFSZWZEaWFsb2cgfSBmcm9tICcuLi9yZWZEaWFsb2cnO1xuaW1wb3J0IHsgTWV0YU1zZ1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9tZXRhTXNnJztcbmltcG9ydCB7IE1ldGFDb250ZXh0U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL21ldGFDb250ZXh0JztcbmltcG9ydCB7IElNZXRhVHJhY2tlckV2ZW50LCBNZXRhVHJhY2tlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9tZXRhVHJhY2tlcic7XG5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZVVybDogJy4vdmlldy5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc3R5bGUuc2NzcyddLFxuICB2aWV3UHJvdmlkZXJzOiBbeyBwcm92aWRlOiBDb250cm9sQ29udGFpbmVyLCB1c2VFeGlzdGluZzogTmdGb3JtIH1dXG59KVxuZXhwb3J0IGNsYXNzIEZpZWxkUmVmZXJlbmNlIGV4dGVuZHMgRmllbGRBYnN0cmFjdCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGlucHV0OiBhbnk7XG4gIGRyb3Bkb3duOiBIVE1MRWxlbWVudDtcbiAgZHJvcGRvd25TY3JvbGxDb250YWluZXI6IEhUTUxFbGVtZW50O1xuICBzZWFyY2hpbmc6IGJvb2xlYW47XG4gIHNlYXJjaFJlc291cmNlVHlwZTogYW55ID0ge307XG4gIHNlYXJjaFRleHQ6IHN0cmluZztcbiAgc2VhcmNoUmVzdWx0czogQXJyYXk8YW55PjtcbiAgc2VhcmNoRXJyb3I6IGFueTtcbiAgYWN0aXZlU3VnZ2VzdGlvbkluZGV4OiBudW1iZXI7XG4gIHNlYXJjaFJlc291cmNlVHlwZXNTY29wZTogc3RyaW5nO1xuICBzZWFyY2hUZXh0Q2hhbmdlZDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuICBpc0NyZWF0YWJsZSA9IGZhbHNlO1xuICB2YWx1ZTogYW55O1xuICBpc1BvbHltb3JwaGljOiBib29sZWFuO1xuICBpc1NlYXJjaGFibGU6IGJvb2xlYW47XG4gIG11bHRpcGxlOiBib29sZWFuO1xuICB2cjogTWV0YVJlc291cmNlU2VydmljZTtcbiAgZXh0ZXJuYWxMaW5rOiBzdHJpbmc7XG4gIGRyb3Bkb3duVmlzaWJsZSA9IGZhbHNlO1xuICBzZWFyY2hSZXNvdXJjZVR5cGVNZXRhOiBhbnkgPSB7XG4gICAgdHlwZTogJ3NlbGVjdCcsXG4gICAgbmFtZTogJ3Jlc291cmNlVHlwZScsXG4gICAgbGFiZWw6ICdUeXBlJyxcbiAgICBvcHRpb25zOiBbXSwgLy8geyBsYWJlbDogJy0tIEFsbCB0eXBlcyAtLScgfV0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxuICB9O1xuICBmaWx0ZXJlZFN1Z2dlc3Rpb25zOiBBcnJheTxhbnk+ID0gW107XG4gIHBsYWNlSG9sZGVyTGFiZWw6IHN0cmluZztcbiAgYXN5bmNTdWdnZXN0aW9uczogQXJyYXk8YW55PjtcbiAgc21hcnRTdWdnZXN0aW9uczogQXJyYXk8YW55PiA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVmZXJlbmNlU2VydmljZTogTWV0YVJlZmVyZW5jZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtZXRhUmVzb3VyY2U6IE1ldGFSZXNvdXJjZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtZXRhTXNnU2VydmljZTogTWV0YU1zZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBtZXRhQ29udGV4dDogTWV0YUNvbnRleHRTZXJ2aWNlLFxuICAgIHByaXZhdGUgbWV0YVRyYWNrZXI6IE1ldGFUcmFja2VyU2VydmljZSxcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWZcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGdldCBkaXNhYmxlZCgpIHtcbiAgICBjb25zdCBzdXBlckRpc2FibGVkID0gdGhpcy5sb2dpY2FsRGlzYWJsZWQgfHwgdGhpcy52YWxpZGF0aW9ucy5kaXNhYmxlZCB8fCB0aGlzLm1ldGEuZGlzYWJsZWQgPT09IHRydWVcbiAgICAgIHx8ICh0aGlzLm1ldGEudXBkYXRhYmxlID09PSBmYWxzZSAmJiB0aGlzLmlzUGVyc2lzdGVkUGFyZW50KTtcbiAgICB0aGlzLnNlYXJjaFJlc291cmNlVHlwZU1ldGEuZGlzYWJsZWQgPSBzdXBlckRpc2FibGVkO1xuICAgIHJldHVybiBzdXBlckRpc2FibGVkO1xuICB9XG5cbiAgZ2V0IHNob3dUeXBlcygpIHtcbiAgICByZXR1cm4gKHR5cGVvZiAodGhpcy5tZXRhLnNob3dUeXBlcykgIT09ICd1bmRlZmluZWQnKSA/IHRoaXMubWV0YS5zaG93VHlwZXMgOiB0cnVlO1xuICB9XG5cbiAgZ2V0IHN1Z2dlc3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLnNtYXJ0U3VnZ2VzdGlvbnMuY29uY2F0KFxuICAgICAgIXRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlLnJlc291cmNlVHlwZSA/XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG4gICAgICAgICh0aGlzLmFzeW5jU3VnZ2VzdGlvbnMgfHwgdGhpcy5tZXRhLnN1Z2dlc3Rpb25zIHx8IFtdKSA6ICh0aGlzLmFzeW5jU3VnZ2VzdGlvbnMgfHwgdGhpcy5tZXRhLnN1Z2dlc3Rpb25zIHx8IFtdKS5maWx0ZXIoKHMpID0+IHMudHlwZSA9PT0gdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGUucmVzb3VyY2VUeXBlKVxuICAgICk7XG4gIH1cblxuICBnZXQgaGFzQXBwZW5kQnV0dG9uKCkge1xuICAgIGlmICghdGhpcy5tdWx0aXBsZSAmJiB0aGlzLm1vZGVsKSB7XG4gICAgICBpZiAodGhpcy5pc1BvbHltb3JwaGljKSB7XG4gICAgICAgIGZvciAoY29uc3QgcmVmIG9mIHRoaXMubWV0YVJlZmVyZW5jZSkge1xuICAgICAgICAgIGlmICgocmVmLm5hbWUgfHwgcmVmLnJlc291cmNlVHlwZSkgPT09ICh0aGlzLm1vZGVsLnR5cGUgfHwgdGhpcy5tb2RlbC5yZXNvdXJjZVR5cGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVmLnVwZGF0YWJsZSB8fCAocmVmLmNyZWF0YWJsZSAmJiByZWYudXBkYXRhYmxlICE9PSBmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5tZXRhUmVmZXJlbmNlLnVwZGF0YWJsZSB8fCAodGhpcy5tZXRhUmVmZXJlbmNlLmNyZWF0YWJsZSAmJiB0aGlzLm1ldGFSZWZlcmVuY2UudXBkYXRhYmxlICE9PSBmYWxzZSk7IC8vIFZHSVMtNjkxMVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5tZXRhUmVmZXJlbmNlIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGVzU2NvcGUgPSB0aGlzLm1ldGFSZWZlcmVuY2UubWFwKHJ0ID0+IHJ0Lm5hbWUpLmpvaW4oJywnKTtcbiAgICAgIC8vIH0sIDApO1xuICAgICAgZm9yIChjb25zdCBydCBvZiB0aGlzLm1ldGFSZWZlcmVuY2UpIHtcbiAgICAgICAgaWYgKHJ0LmhpZGRlbiAhPT0gZmFsc2UgJiYgcnQuY3JlYXRhYmxlKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMubWV0YVJlZmVyZW5jZS5jcmVhdGFibGU7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHJlc291cmNlU2VydmljZSgpIHtcbiAgICBpZiAoIXRoaXMubWV0YVJlc291cmNlU2VydmljZSkge1xuICAgICAgY29uc3QgbWV0YVJlc291cmNlQ29uZmlnOiBJTWV0YVJlc291cmNlQ29uZmlnID0ge1xuICAgICAgICBpbnRlZ3JhdGlvbkNvZGU6IHRoaXMuaW50ZWdyYXRpb25Db2RlLFxuICAgICAgICByZXNvdXJjZVR5cGU6IHRoaXMucmVzb3VyY2VUeXBlXG4gICAgICB9O1xuICAgICAgdGhpcy5tZXRhUmVzb3VyY2VTZXJ2aWNlID0gdGhpcy5tZXRhUmVzb3VyY2UubmV3KG1ldGFSZXNvdXJjZUNvbmZpZyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm1ldGFSZXNvdXJjZVNlcnZpY2U7XG4gIH1cblxuICBnZXQgbWV0YVJlZmVyZW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRhLnJlZmVyZW5jZSB8fCB7fTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMubXVsdGlwbGUgPSAodGhpcy5tZXRhLnR5cGUgPT09ICdtdWx0aXJlZmVyZW5jZScpIHx8IHRoaXMubWV0YS5tdWx0aXBsZTtcbiAgICB0aGlzLnNlYXJjaFJlc291cmNlVHlwZU1ldGEubGFiZWwgPSB0aGlzLm1ldGEubGFiZWw7XG4gICAgaWYgKCF0aGlzLm1ldGEudmFsdWVUeXBlKSB7XG4gICAgICAvLyB0aGlzLm1ldGEudmFsdWVUeXBlID0gJ29iamVjdCc7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5tZXRhLCAndmFsdWVUeXBlJywge1xuICAgICAgICB2YWx1ZTogJ29iamVjdCdcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5tZXRhUmVmZXJlbmNlIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgIHRoaXMuaXNQb2x5bW9ycGhpYyA9IHRydWU7XG4gICAgICB0aGlzLmlzU2VhcmNoYWJsZSA9IHRydWU7XG4gICAgICB0aGlzLnNlYXJjaFJlc291cmNlVHlwZXNTY29wZSA9IHRoaXMubWV0YVJlZmVyZW5jZS5maWx0ZXIocnQgPT4gcnQuaGlkZGVuICE9PSB0cnVlKS5tYXAocnQgPT4gcnQubmFtZSkuam9pbignLCcpO1xuICAgICAgZm9yIChjb25zdCBydCBvZiB0aGlzLm1ldGFSZWZlcmVuY2UpIHtcbiAgICAgICAgaWYgKHJ0LmNyZWF0YWJsZSkge1xuICAgICAgICAgIHRoaXMuaXNDcmVhdGFibGUgPSB0cnVlO1xuICAgICAgICAgIGlmICh0eXBlb2YgKHJ0LnNlYXJjaGFibGUpICE9PSAndW5kZWZpbmVkJyAmJiAhcnQuc2VhcmNoYWJsZSkge1xuICAgICAgICAgICAgdGhpcy5pc1NlYXJjaGFibGUgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMubWV0YVJlZmVyZW5jZS5mb3JFYWNoKChyKSA9PiB7XG4gICAgICAgIGlmICghci5oaWRkZW4pIHtcbiAgICAgICAgICB0aGlzLnNlYXJjaFJlc291cmNlVHlwZU1ldGEub3B0aW9ucy5wdXNoKHsgaWQ6IHIubmFtZSwgbGFiZWw6IHIubGFiZWwgfHwgci5uYW1lIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc1NlYXJjaGFibGUgPSB0eXBlb2YgKHRoaXMubWV0YVJlZmVyZW5jZS5zZWFyY2hhYmxlKSA9PT0gJ3VuZGVmaW5lZCcgfHwgdGhpcy5tZXRhUmVmZXJlbmNlLnNlYXJjaGFibGU7XG4gICAgICB0aGlzLnNlYXJjaFJlc291cmNlVHlwZSA9IHRoaXMubWV0YVJlZmVyZW5jZTtcbiAgICAgIHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlc1Njb3BlID0gdGhpcy5tZXRhUmVmZXJlbmNlLm5hbWUgfHwgdGhpcy5tZXRhUmVmZXJlbmNlLnJlc291cmNlVHlwZTtcbiAgICAgIHRoaXMuaXNDcmVhdGFibGUgPSB0aGlzLm1ldGFSZWZlcmVuY2UuY3JlYXRhYmxlO1xuICAgIH1cbiAgICB0aGlzLmJ1aWxkUGxhY2Vob2xkZXJMYWJlbCgpO1xuICAgIHRoaXMuc2VhcmNoVGV4dENoYW5nZWQucGlwZShkZWJvdW5jZVRpbWUoMzAwKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSkuc3Vic2NyaWJlKCh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICB0aGlzLnNlYXJjaFRleHQgPSB2YWx1ZTtcbiAgICAgIHRoaXMuc2VhcmNoKCk7XG4gICAgfSk7XG4gICAgY29uc3Qgb3JpZ1ZhbHVlID0gdGhpcy5wYXJlbnRbdGhpcy5tZXRhLm5hbWVdO1xuXG4gICAgLy8gdGhpcy5zdWdnZXN0aW9ucyA9IHRoaXMubWV0YS5zdWdnZXN0aW9uczsgLy8gVE9ETyBmaWx0ZXIgYnkgZGVmYXVsdCB0eXBlXG4gICAgLy8gY29uc29sZS5sb2coJ3RoaXMuc3VnZ2VzdGlvbnMnLCB0aGlzLnN1Z2dlc3Rpb25zKTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLnBhcmVudCwgdGhpcy5tZXRhLm5hbWUsIHtcbiAgICAgIHNldDogKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCB2IG9mIHZhbHVlKSB7XG4gICAgICAgICAgICAgIGlmICghdGhpcy5tb2RlbCkge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwgPSBbXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAodHlwZW9mICh2KSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnB1c2goe1xuICAgICAgICAgICAgICAgICAgaWQ6IHYsXG4gICAgICAgICAgICAgICAgICBsYWJlbDogdixcbiAgICAgICAgICAgICAgICAgIHR5cGU6IHRoaXMubWV0YVJlZmVyZW5jZS5uYW1lXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUgPSBudWxsOyAvLyBwcm90ZWN0IHdoZW4gdmFsdWUgZnJvbSBzZXJ2ZXIgaXMgbm90IGFycmF5XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgKHZhbHVlKSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHZhbHVlID0ge1xuICAgICAgICAgICAgICBpZDogdmFsdWUsXG4gICAgICAgICAgICAgIGxhYmVsOiB2YWx1ZSwgLy8gY291bGQgYmUgZm91bmQgd2l0aCBleHRyYSBjYWxsXG4gICAgICAgICAgICAgIHR5cGU6IHRoaXMubWV0YVJlZmVyZW5jZS5uYW1lXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnNlYXJjaFRleHQgPSB2YWx1ZSA/XG4gICAgICAgICAgICAoKCF2YWx1ZS5sYWJlbCB8fCB2YWx1ZS5sYWJlbCA9PT0gJyAnKSA/IGBOL0EgKCR7dmFsdWUudHlwZX0jJHt2YWx1ZS5pZH0pYCA6IHZhbHVlLmxhYmVsIHx8IHZhbHVlKSA6XG4gICAgICAgICAgICAnJztcbiAgICAgICAgICAvLyBpZiAodGhpcy5pc1BvbHltb3JwaGljICYmIHRoaXMubW9kZWwpIHsgLy9UT0RPIHNob3cgb3Igbm90P1xuICAgICAgICAgIC8vICAgdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGUgPSB0aGlzLm1ldGFSZWZlcmVuY2UuZmluZCgocnQpPT4ge1xuICAgICAgICAgIC8vICAgICByZXR1cm4gcnQubmFtZSA9PT0gdGhpcy5tb2RlbC50eXBlO1xuICAgICAgICAgIC8vICAgfSk7XG4gICAgICAgICAgLy8gfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMubW9kZWwgPSB2YWx1ZTtcbiAgICAgICAgaWYgKCF0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubW9kZWxUb1ZhbHVlKHZhbHVlLCB0aGlzLm1ldGEudmFsdWVUeXBlIHx8ICdvYmplY3QnKTtcbiAgICAgICAgICB0aGlzLmJ1aWxkRXh0ZXJuYWxMaW5rKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9ICF0aGlzLm1vZGVsID8gdGhpcy5tb2RlbCA6IHRoaXMubW9kZWwubWFwKChtKSA9PiB0aGlzLm1vZGVsVG9WYWx1ZShtLCB0aGlzLm1ldGEudmFsdWVUeXBlIHx8ICdvYmplY3QnKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tZXRhLiRvcHRpb25hbCA9IHRoaXMuaXNPcHRpb25hbDtcbiAgICAgIH0sXG4gICAgICBnZXQ6ICgpID0+IHRoaXMudmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0aGlzLnNlbmRUb1NlcnZlcixcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGlmIChvcmlnVmFsdWUpIHtcbiAgICAgIHRoaXMucGFyZW50W3RoaXMubWV0YS5uYW1lXSA9IG9yaWdWYWx1ZTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLm1vZGVsICYmIHRoaXMuZGVmYXVsdCkge1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgdGhpcy5wYXJlbnRbdGhpcy5tZXRhLm5hbWVdID0gW107XG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHQubGVuZ3RoKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBkdiBvZiB0aGlzLmRlZmF1bHQpIHtcbiAgICAgICAgICAgIGlmICgoZHYuaWQgfHwgZHYudmFsdWUpICYmIGR2LnR5cGUpIHtcbiAgICAgICAgICAgICAgY29uc3QgaXRlbTogYW55ID0ge1xuICAgICAgICAgICAgICAgIGlkOiBkdi5pZCB8fCBkdi52YWx1ZSxcbiAgICAgICAgICAgICAgICBsYWJlbDogZHYubGFiZWwgfHwgZHYuaWQgfHwgZHYudmFsdWUsXG4gICAgICAgICAgICAgICAgdHlwZTogZHYudHlwZVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBpZiAoZHYuZXh0ZXJuYWxMaW5rKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5leHRlcm5hbExpbmsgPSBkdi5leHRlcm5hbExpbms7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5wYXJlbnRbdGhpcy5tZXRhLm5hbWVdLnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5wYXJlbnRbdGhpcy5tZXRhLm5hbWVdLmxlbmd0aCkge1xuICAgICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdC5pZCAmJiB0aGlzLmRlZmF1bHQubGFiZWwgJiYgdGhpcy5kZWZhdWx0LnR5cGUpIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW06IGFueSA9IHtcbiAgICAgICAgICAgICAgaWQ6IHRoaXMuZGVmYXVsdC5pZCB8fCB0aGlzLmRlZmF1bHQudmFsdWUsXG4gICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmRlZmF1bHQubGFiZWwgfHwgdGhpcy5kZWZhdWx0LmlkIHx8IHRoaXMuZGVmYXVsdC52YWx1ZSxcbiAgICAgICAgICAgICAgdHlwZTogdGhpcy5kZWZhdWx0LnR5cGUsXG4gICAgICAgICAgICAgIHNtYXJ0OiB0cnVlXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHRoaXMuZGVmYXVsdC5leHRlcm5hbExpbmspIHtcbiAgICAgICAgICAgICAgaXRlbS5leHRlcm5hbExpbmsgPSB0aGlzLmRlZmF1bHQuZXh0ZXJuYWxMaW5rO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wYXJlbnRbdGhpcy5tZXRhLm5hbWVdID0gaXRlbTtcbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJyEhIWRlZmF1bHQgdmFsdWUgaXMgbm90IHZhbGlkIGZvcm1hdCcsIHRoaXMubWV0YSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mICh0aGlzLm1ldGEuZGlzYWJsZWQpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2YgKHRoaXMubWV0YS5kaXNhYmxlZCkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiBPYmplY3Qua2V5cyh0aGlzLm1ldGEuZGlzYWJsZWQpKSB7XG4gICAgICAgICAgY29uc3QgcHJvcHMgPSBwLnNwbGl0KCcuJyk7XG4gICAgICAgICAgaWYgKHR5cGVvZiAodGhpcy5wYXJlbnRbcHJvcHNbMF1dKSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGxldCB2YWwgPSB0aGlzLnBhcmVudDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBwcm9wcykge1xuICAgICAgICAgICAgICB2YWwgPSB2YWxbcHJvcF07XG4gICAgICAgICAgICAgIGlmICghdmFsKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2YWwgPT09IHRoaXMubWV0YS5kaXNhYmxlZFtwXSkge1xuICAgICAgICAgICAgICB0aGlzLmxvZ2ljYWxEaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5wYXJlbnRDaGFuZ2VTdWJqZWN0LnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5oYXNPd25Qcm9wZXJ0eShwcm9wc1swXSkpIHtcbiAgICAgICAgICAgICAgbGV0IHZhbCA9IHRoaXMucGFyZW50O1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgcHJvcHMpIHtcbiAgICAgICAgICAgICAgICB2YWwgPSB2YWxbcHJvcF07XG4gICAgICAgICAgICAgICAgaWYgKCF2YWwpIHtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAodmFsID09PSB0aGlzLm1ldGEuZGlzYWJsZWRbcF0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2ljYWxEaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmxvZ2ljYWxEaXNhYmxlZDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWV0YS5hdXRvICYmIHRoaXMubWV0YS5hdXRvLnNlYXJjaCkge1xuICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gdGhpcy5tZXRhLmF1dG8uc2VhcmNoLnBhcmFtcztcbiAgICAgIGlmIChzZWFyY2hQYXJhbXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBwYXIgb2YgT2JqZWN0LmtleXMoc2VhcmNoUGFyYW1zKSkge1xuICAgICAgICAgIGNvbnN0IHByb3BzID0gc2VhcmNoUGFyYW1zW3Bhcl0uc3BsaXQoJy4nKTtcbiAgICAgICAgICBjb25zdCBmaWVsZCA9IHByb3BzWzBdO1xuICAgICAgICAgIGNvbnN0IHByb3AgPSBwcm9wc1sxXTtcbiAgICAgICAgICBsZXQgcGFyVmFsdWUgPSB0aGlzLnBhcmVudFtmaWVsZF07XG4gICAgICAgICAgaWYgKHBhclZhbHVlKSB7XG4gICAgICAgICAgICBpZiAocHJvcCkge1xuICAgICAgICAgICAgICBwYXJWYWx1ZSA9IHBhclZhbHVlW3Byb3BdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBhclZhbHVlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHt9O1xuICAgICAgICAgICAgICBwYXJhbXNbcGFyXSA9IHBhclZhbHVlO1xuICAgICAgICAgICAgICB0aGlzLnNlYXJjaEF1dG9TdWdnZXN0aW9ucyhwYXJhbXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnBhcmVudENoYW5nZVN1YmplY3Quc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmhhc093blByb3BlcnR5KGZpZWxkKSkge1xuICAgICAgICAgICAgICBpZiAodmFsdWVbZmllbGRdKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb3ApIHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlW2ZpZWxkXSA9IHZhbHVlW2ZpZWxkXVtwcm9wXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyYW1zID0ge307XG4gICAgICAgICAgICAgICAgcGFyYW1zW3Bhcl0gPSB2YWx1ZVtmaWVsZF07XG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hBdXRvU3VnZ2VzdGlvbnMocGFyYW1zKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2xlYXJTZWFyY2hSZXNvdXJjZVR5cGUoKSB7XG4gICAgdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGUgPSB7fTtcbiAgICB0aGlzLm9uU2VhcmNoUmVzb3VyY2VUeXBlQ2hhbmdlZCgpO1xuICB9XG5cbiAgb25TZWFyY2hSZXNvdXJjZVR5cGVDaGFuZ2VkKHJlc291cmNlVHlwZT8pIHtcbiAgICBpZiAoIXJlc291cmNlVHlwZSB8fCAhcmVzb3VyY2VUeXBlLmlkKSB7XG4gICAgICB0aGlzLnNlYXJjaFJlc291cmNlVHlwZS5yZXNvdXJjZVR5cGUgPSBudWxsO1xuICAgICAgdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGVzU2NvcGUgPSAodGhpcy5tZXRhUmVmZXJlbmNlIHx8IFtdKS5maWx0ZXIocnQgPT4gcnQuaGlkZGVuICE9PSB0cnVlKS5tYXAocnQgPT4gcnQubmFtZSkuam9pbignLCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlYXJjaFJlc291cmNlVHlwZS5yZXNvdXJjZVR5cGUgPSByZXNvdXJjZVR5cGUuaWQ7XG4gICAgICB0aGlzLnNlYXJjaFJlc291cmNlVHlwZXNTY29wZSA9IHJlc291cmNlVHlwZS5pZDtcbiAgICB9XG4gICAgdGhpcy5idWlsZFBsYWNlaG9sZGVyTGFiZWwoKTtcbiAgICB0aGlzLmZvY3VzKCk7XG4gICAgaWYgKCF0aGlzLm1vZGVsICYmICF0aGlzLnNlYXJjaFRleHQpIHsgLy8gZmlsdGVyIHN1Z2dlc3Rpb25zIGJ5IHR5cGVcbiAgICAgIHRoaXMuZmlsdGVyZWRTdWdnZXN0aW9ucyA9ICFyZXNvdXJjZVR5cGUgPyAodGhpcy5tZXRhLnN1Z2dlc3Rpb25zIHx8IFtdKSA6ICh0aGlzLm1ldGEuc3VnZ2VzdGlvbnMgfHwgW10pLmZpbHRlcihcbiAgICAgICAgKHMpID0+IHMudHlwZSA9PT0gcmVzb3VyY2VUeXBlLmlkXG4gICAgICApO1xuICAgIH0gZWxzZSB7IC8vIHJlZ3VsYXIgc2VhcmNoIChyZXR1cm4gc2NvcGVkIHJlc3VsdHMpXG4gICAgICBpZiAoIXRoaXMubW9kZWwpIHtcbiAgICAgICAgdGhpcy5zZWFyY2goKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWFyY2hSZXN1bHRzICYmIHJlc291cmNlVHlwZSkge1xuICAgICAgICB0aGlzLnNlYXJjaFJlc3VsdHMgPSB0aGlzLnNlYXJjaFJlc3VsdHMuZmlsdGVyKChzKSA9PiBzLnR5cGUgPT09IHJlc291cmNlVHlwZS5pZCk7XG4gICAgICB9XG4gICAgfVxuICAgIGRlbGV0ZSB0aGlzLnNlYXJjaEVycm9yO1xuICB9XG5cbiAgb25TZWFyY2hUZXh0Q2hhbmdlZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZWFyY2hUZXh0Q2hhbmdlZC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHNlYXJjaCgpIHtcbiAgICB0aGlzLnNlYXJjaGluZyA9IHRydWU7XG4gICAgLy8gdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXg7XG4gICAgaWYgKCF0aGlzLnNlYXJjaFRleHQgfHwgdGhpcy5zZWFyY2hUZXh0Lmxlbmd0aCA8IDIpIHtcbiAgICAgIHRoaXMuc2VhcmNoaW5nID0gZmFsc2U7XG4gICAgICBkZWxldGUgdGhpcy5zZWFyY2hSZXN1bHRzO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzaG93U2VhcmNoUmVzdWx0cyA9IChyZXN1bHRzKSA9PiB7XG4gICAgICB0aGlzLnNlYXJjaGluZyA9IGZhbHNlO1xuICAgICAgZGVsZXRlIHRoaXMuc2VhcmNoRXJyb3I7XG4gICAgICBkZWxldGUgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXg7XG4gICAgICBpZiAoIXJlc3VsdHMgfHwgIShyZXN1bHRzIGluc3RhbmNlb2YgQXJyYXkpKSB7XG4gICAgICAgIHJlc3VsdHMgPSBbXTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm1ldGEuYWNjZXB0TmV3ICYmIHRoaXMubWV0YS5hY2NlcHROZXcudHlwZSAmJiB0aGlzLm1ldGEuYWNjZXB0TmV3LnBhdHRlcm4pIHtcbiAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKHRoaXMubWV0YS5hY2NlcHROZXcucGF0dGVybik7XG4gICAgICAgIGlmIChyZWdleC50ZXN0KHRoaXMuc2VhcmNoVGV4dCkpIHtcbiAgICAgICAgICByZXN1bHRzLnVuc2hpZnQoeyBpZDogbnVsbCwgbGFiZWw6IHRoaXMuc2VhcmNoVGV4dCwgdHlwZTogdGhpcy5tZXRhLmFjY2VwdE5ldy50eXBlIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnNlYXJjaFJlc3VsdHMgPSByZXN1bHRzLm1hcCgocikgPT4geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGFycm93LWJvZHktc3R5bGVcbiAgICAgICAgcmV0dXJuIHsgaWQ6IHIuaWQsIGxhYmVsOiByLmxhYmVsLCB0eXBlOiByLnR5cGUgfHwgci5yZXNvdXJjZVR5cGUgfHwgdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGUubmFtZSwgZXh0ZXJuYWxMaW5rOiByLmV4dGVybmFsTGluayB9O1xuICAgICAgfSk7XG4gICAgICBpZiAoIS9WbHQtZHJvcGRvd24tLWV4cGFuZGVkLy50ZXN0KHRoaXMuZHJvcGRvd24uY2xhc3NOYW1lKSkge1xuICAgICAgICB0aGlzLnNob3dEcm9wZG93bigpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAodGhpcy5tZXRhLnNlYXJjaCkge1xuICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gdGhpcy5tZXRhLnNlYXJjaC5wYXJhbXMgfHwge307XG4gICAgICBsZXQgc2VhcmNoVXJsID0gYC9maWVsZHMvJHt0aGlzLm1ldGEubmFtZX0vc2VhcmNoYDtcbiAgICAgIGlmICh0aGlzLm1ldGEuc2VhcmNoLnVybCkge1xuICAgICAgICBzZWFyY2hVcmwgPSB0aGlzLm1ldGEuc2VhcmNoLnVybC5yZXBsYWNlKC9cXCR7XFxzKihbXFx3XFwuXSspXFxzKn0vZywgKG1hdGNoLCBrZXkpID0+IHtcbiAgICAgICAgICBpZiAoc2VhcmNoUGFyYW1zLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BzID0gc2VhcmNoUGFyYW1zW2tleV0uc3BsaXQoJy4nKTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gcHJvcHNbMF07XG4gICAgICAgICAgICBjb25zdCBwcm9wID0gcHJvcHNbMV07XG4gICAgICAgICAgICBkZWxldGUgc2VhcmNoUGFyYW1zW2tleV07IC8vIGlmIGl0IGlzIFVSTCBwYXJhbSwgcmVtb3ZlIGl0IGFzIHF1ZXJ5IHBhcmFtXG4gICAgICAgICAgICBsZXQgcGFyVmFsdWUgPSB0aGlzLnBhcmVudFtmaWVsZF07XG4gICAgICAgICAgICBpZiAocGFyVmFsdWUpIHtcbiAgICAgICAgICAgICAgaWYgKHByb3ApIHtcbiAgICAgICAgICAgICAgICBwYXJWYWx1ZSA9IHBhclZhbHVlW3Byb3BdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChwYXJWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJWYWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gJ3VuZGVmaW5lZCc7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBwIG9mIE9iamVjdC5rZXlzKHNlYXJjaFBhcmFtcykpIHtcbiAgICAgICAgc2VhcmNoVXJsICs9IGAke3NlYXJjaFVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnfSR7ZW5jb2RlVVJJQ29tcG9uZW50KHApfT0ke2VuY29kZVVSSUNvbXBvbmVudChzZWFyY2hQYXJhbXNbcF0pfWA7XG4gICAgICB9XG4gICAgICBzZWFyY2hVcmwgKz0gYCR7c2VhcmNoVXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJid9cT0ke2VuY29kZVVSSUNvbXBvbmVudCh0aGlzLnNlYXJjaFRleHQpfWA7XG4gICAgICB0aGlzLnNlYXJjaGluZyA9IHRydWU7XG4gICAgICB0aGlzLnJlc291cmNlU2VydmljZS5nZXRCeVBhdGgoc2VhcmNoVXJsKS5zdWJzY3JpYmUoKHJlc3VsdHMpID0+IHtcbiAgICAgICAgc2hvd1NlYXJjaFJlc3VsdHMocmVzdWx0cyk7XG4gICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgZGVsZXRlIHRoaXMuc2VhcmNoaW5nO1xuICAgICAgICB0aGlzLnNlYXJjaFJlc3VsdHMgPSBbXTtcbiAgICAgICAgdGhpcy5zZWFyY2hFcnJvciA9IGVycm9yLmVycm9yID8gZXJyb3IuZXJyb3IubWVzc2FnZSB8fCBlcnJvci5lcnJvciA6IGVycm9yLm1lc3NhZ2UgfHwgZXJyb3I7XG4gICAgICAgIGlmICghL1ZsdC1kcm9wZG93bi0tZXhwYW5kZWQvLnRlc3QodGhpcy5kcm9wZG93bi5jbGFzc05hbWUpKSB7XG4gICAgICAgICAgdGhpcy5zaG93RHJvcGRvd24oKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghdGhpcy52cikge1xuICAgICAgICB0aGlzLnZyID0gdGhpcy5tZXRhUmVzb3VyY2UubmV3KHtcbiAgICAgICAgICBpbnRlZ3JhdGlvbkNvZGU6IHRoaXMuaW50ZWdyYXRpb25Db2RlLFxuICAgICAgICAgIHJlc291cmNlVHlwZTogbnVsbFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMudnIuc2VhcmNoSW50ZWdyYXRpb24oXG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCxcbiAgICAgICAgdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGUubmFtZSB8fCB0aGlzLnNlYXJjaFJlc291cmNlVHlwZXNTY29wZVxuICAgICAgKS5zdWJzY3JpYmUoKHJlc3VsdHM6IEFycmF5PGFueT4pID0+IHtcbiAgICAgICAgc2hvd1NlYXJjaFJlc3VsdHMocmVzdWx0cyk7XG4gICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5zZWFyY2hpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zZWFyY2hSZXN1bHRzID0gW107XG4gICAgICAgIHRoaXMuc2VhcmNoRXJyb3IgPSBlcnJvci5lcnJvciA/IGVycm9yLmVycm9yLm1lc3NhZ2UgfHwgZXJyb3IuZXJyb3IgOiBlcnJvci5tZXNzYWdlIHx8IGVycm9yO1xuICAgICAgICBpZiAoIS9WbHQtZHJvcGRvd24tLWV4cGFuZGVkLy50ZXN0KHRoaXMuZHJvcGRvd24uY2xhc3NOYW1lKSkge1xuICAgICAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uQWN0aXZhdGVkKGV2KSB7XG4gICAgLy8gZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAvLyBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmlucHV0ID0gZXYuc3JjRWxlbWVudDtcbiAgICBpZiAoIXRoaXMuZHJvcGRvd24pIHtcbiAgICAgIC8vIHRoaXMuZHJvcGRvd24gPSBldi5zcmNFbGVtZW50LnBhcmVudE5vZGUucGFyZW50Tm9kZTtcbiAgICAgIHRoaXMuZHJvcGRvd24gPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZHJvcGRvd24td3JhcHBlcicpO1xuICAgIH1cbiAgICB0aGlzLnNob3dEcm9wZG93bigpO1xuICB9XG5cbiAgb25CbHVyKGV2KSB7XG4gICAgbGV0IGludGVybmFsQ29udHJvbCA9IGZhbHNlO1xuICAgIGlmIChldi5yZWxhdGVkVGFyZ2V0KSB7XG4gICAgICBpZiAoIXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2LnJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgICAgIHRoaXMuZGlzbWlzc0Ryb3Bkb3duKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbnRlcm5hbENvbnRyb2wgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5rZXlMaXN0ZW5lckFjdGl2ZSAmJiAhaW50ZXJuYWxDb250cm9sKSB7XG4gICAgICB0aGlzLmlucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLmtleWRvd24pO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5rZXlMaXN0ZW5lckFjdGl2ZSkge1xuICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5jbGlja291dCk7XG4gICAgICAgIH1cbiAgICAgIH0sIDQwMCk7XG4gICAgICBkZWxldGUgdGhpcy5rZXlMaXN0ZW5lckFjdGl2ZTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVTZWxlY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMubW9kZWwgJiYgIXRoaXMuc3VnZ2VzdGlvbnMuZmluZCgocykgPT4gKHMuaWQgPT09IHRoaXMubW9kZWwuaWQgJiYgcy50eXBlID09PSB0aGlzLm1vZGVsLnR5cGUpKSkge1xuICAgICAgdGhpcy5zbWFydFN1Z2dlc3Rpb25zLnB1c2goe1xuICAgICAgICBpZDogdGhpcy5tb2RlbC5pZCxcbiAgICAgICAgbGFiZWw6IHRoaXMubW9kZWwubGFiZWwsXG4gICAgICAgIHR5cGU6IHRoaXMubW9kZWwudHlwZSxcbiAgICAgICAgc21hcnQ6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLm1ldGFUcmFja2VyLmVtaXQodGhpcy5idWlsZFRyYWNrRXZlbnQoJ1JFTU9WRScpKTtcbiAgICB0aGlzLmNsZWFyKCk7XG4gIH1cblxuICBvblN1Z2dlc3Rpb25TZWxlY3QoZXYsIHN1Z2dlc3Rpb24pIHtcbiAgICBpZiAoIXN1Z2dlc3Rpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmZvY3VzKCk7XG4gICAgdGhpcy5tZXRhVHJhY2tlci5lbWl0KHRoaXMuYnVpbGRUcmFja0V2ZW50KCdTRUxFQ1QnKSk7XG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgIGlmICghdGhpcy5tb2RlbCkge1xuICAgICAgICB0aGlzLm1vZGVsID0gW107XG4gICAgICB9XG4gICAgICBsZXQgZXhpc3RpbmdFbnRyeTtcbiAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5tb2RlbCkge1xuICAgICAgICBpZiAoc3VnZ2VzdGlvbi5pZCAmJiAoZW50cnkuaWQgPT09IHN1Z2dlc3Rpb24uaWQpKSB7XG4gICAgICAgICAgZXhpc3RpbmdFbnRyeSA9IGVudHJ5O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2UgaWYgKHN1Z2dlc3Rpb24ubGFiZWwgPT09IGVudHJ5LmxhYmVsKSB7IC8vIGNyZWF0ZSBuZXcgKGdvb2dsZSBlbWFpbHMpXG4gICAgICAgICAgZXhpc3RpbmdFbnRyeSA9IGVudHJ5O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIWV4aXN0aW5nRW50cnkpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5wdXNoKHN1Z2dlc3Rpb24pO1xuICAgICAgfVxuICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKHRoaXMubW9kZWwpO1xuICAgICAgZGVsZXRlIHRoaXMuc2VhcmNoVGV4dDtcbiAgICAgIHRoaXMuc2VhcmNoVGV4dENoYW5nZWQubmV4dCh0aGlzLnNlYXJjaFRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1vZGVsID0gc3VnZ2VzdGlvbjtcbiAgICAgIHRoaXMuZXh0ZXJuYWxMaW5rID0gc3VnZ2VzdGlvbi5leHRlcm5hbExpbms7XG4gICAgICB0aGlzLm9uTW9kZWxDaGFuZ2Uoc3VnZ2VzdGlvbik7XG4gICAgICB0aGlzLnNlYXJjaFRleHQgPSBzdWdnZXN0aW9uLmxhYmVsO1xuICAgICAgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXggPSAodGhpcy5zZWFyY2hSZXN1bHRzIHx8IHRoaXMuc3VnZ2VzdGlvbnMpLmluZGV4T2Yoc3VnZ2VzdGlvbik7XG4gICAgfVxuICAgIHRoaXMuZGlzbWlzc0Ryb3Bkb3duKCk7XG4gICAgLy8gaWYgKHRoaXMuaXNQb2x5bW9ycGhpYykge1xuICAgIC8vICAgdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGUgPSB0aGlzLm1ldGFSZWZlcmVuY2UuZmluZCgocnQpPT4ge1xuICAgIC8vICAgICByZXR1cm4gcnQubmFtZSA9PT0gc3VnZ2VzdGlvbi50eXBlO1xuICAgIC8vICAgfSk7XG4gICAgLy8gfVxuICB9XG5cbiAgc2hvd0Ryb3Bkb3duKCkge1xuICAgIHRoaXMuZHJvcGRvd25WaXNpYmxlID0gdHJ1ZTtcbiAgICB0aGlzLmRyb3Bkb3duLmNsYXNzTGlzdC5hZGQoJ1ZsdC1kcm9wZG93bi0tZXhwYW5kZWQnKTtcbiAgICBpZiAoIXRoaXMua2V5TGlzdGVuZXJBY3RpdmUpIHtcbiAgICAgIHRoaXMuaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMua2V5ZG93bik7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmNsaWNrb3V0KTtcbiAgICAgIH0sIDIwMCk7XG4gICAgICB0aGlzLmtleUxpc3RlbmVyQWN0aXZlID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiAodGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXgpID09PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKHRoaXMubW9kZWwgJiYgKHRoaXMuc2VhcmNoUmVzdWx0cyB8fCB0aGlzLnN1Z2dlc3Rpb25zKSkge1xuICAgICAgICBmb3IgKGxldCBzdWdnZXN0aW9uSW5kZXggPSAwOyBzdWdnZXN0aW9uSW5kZXggPCAodGhpcy5zZWFyY2hSZXN1bHRzIHx8IHRoaXMuc3VnZ2VzdGlvbnMpLmxlbmd0aDsgc3VnZ2VzdGlvbkluZGV4KyspIHtcbiAgICAgICAgICBjb25zdCBpdGVtID0gKHRoaXMuc2VhcmNoUmVzdWx0cyB8fCB0aGlzLnN1Z2dlc3Rpb25zKVtzdWdnZXN0aW9uSW5kZXhdO1xuICAgICAgICAgIGlmICh0aGlzLm1vZGVsLmlkID09PSBpdGVtLmlkICYmIHRoaXMubW9kZWwudHlwZSA9PT0gaXRlbS50eXBlKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCA9IHN1Z2dlc3Rpb25JbmRleDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmVuc3VyZURyb3Bkb3duSXNWaXNpYmxlKCk7XG4gIH1cblxuICBkaXNtaXNzRHJvcGRvd24oZXZlbnQ/KSB7XG4gICAgdGhpcy5kcm9wZG93blZpc2libGUgPSBmYWxzZTtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZHJvcGRvd24pIHtcbiAgICAgIHRoaXMuZHJvcGRvd24uY2xhc3NMaXN0LnJlbW92ZSgnVmx0LWRyb3Bkb3duLS1leHBhbmRlZCcpO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIHRoaXMucHJldk1vZGVsID0gdGhpcy5tb2RlbDtcbiAgICBkZWxldGUgdGhpcy5zZWFyY2hUZXh0O1xuICAgIGRlbGV0ZSB0aGlzLnNlYXJjaFJlc3VsdHM7XG4gICAgZGVsZXRlIHRoaXMubW9kZWw7XG4gICAgZGVsZXRlIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4O1xuICAgIHRoaXMub25Nb2RlbENoYW5nZSh0aGlzLm1vZGVsKTtcbiAgICB0aGlzLm9uU2VhcmNoVGV4dENoYW5nZWQodGhpcy5zZWFyY2hUZXh0KTtcbiAgICB0aGlzLmZvY3VzKCk7XG4gIH1cblxuICByZXZlcnQoKSB7XG4gICAgdGhpcy5tb2RlbCA9IHRoaXMucHJldk1vZGVsO1xuICAgIGRlbGV0ZSB0aGlzLnByZXZNb2RlbDtcbiAgICB0aGlzLm9uTW9kZWxDaGFuZ2UodGhpcy5tb2RlbCk7XG4gICAgdGhpcy5mb2N1cygpO1xuICB9XG5cbiAgcmVtb3ZlKGV2LCBpdGVtKSB7XG4gICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICBldi5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBvcHRpb25JbmRleCA9IHRoaXMubW9kZWwuaW5kZXhPZihpdGVtKTtcbiAgICBpZiAob3B0aW9uSW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLm1vZGVsLnNwbGljZShvcHRpb25JbmRleCwgMSk7XG4gICAgICBpZiAoIXRoaXMubW9kZWwubGVuZ3RoKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLm1vZGVsO1xuICAgICAgICBkZWxldGUgdGhpcy52YWx1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMub25Nb2RlbENoYW5nZSh0aGlzLm1vZGVsKTtcbiAgICB9XG4gIH1cblxuICBvcGVuUmVzb3VyY2UobW9kZWw/KSB7XG4gICAgdGhpcy5rZXlMaXN0ZW5lckFjdGl2ZSA9IHRydWU7IC8vIHN1cHByZXNzIGRyb3Bkb3duIGluIHRoaXMgY2FzZVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5kaXNtaXNzRHJvcGRvd24oKTtcbiAgICB9KTtcbiAgICBjb25zdCByZWZEaWFsb2dDb21wb25lbnQgPSB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KE1ldGFSZWZEaWFsb2cpO1xuICAgIHRoaXMubWV0YVRyYWNrZXIuZW1pdCh0aGlzLmJ1aWxkVHJhY2tFdmVudChtb2RlbCA/ICdFRElUJyA6ICdORVcnKSk7XG4gICAgbGV0IHRoZW1lID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZGF0YXNldC50aGVtZTtcbiAgICBpZiAoIXRoZW1lIHx8IHRoZW1lID09PSAnaW5oZXJpdCcpIHtcbiAgICAgIGxldCBwYXJlbnRDb21wb25lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbG9zZXN0KCd2Z2lwLW1ldGEtbGF5b3V0Jyk7XG4gICAgICBpZiAocGFyZW50Q29tcG9uZW50KSB7XG4gICAgICAgIHRoZW1lID0gcGFyZW50Q29tcG9uZW50LmRhdGFzZXQudGhlbWU7XG4gICAgICB9XG4gICAgICBpZiAoIXRoZW1lIHx8IHRoZW1lID09PSAnaW5oZXJpdCcpIHtcbiAgICAgICAgcGFyZW50Q29tcG9uZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xvc2VzdCgndmdpcC1tZXRhLXJlc291cmNlJyk7XG4gICAgICAgIGlmIChwYXJlbnRDb21wb25lbnQpIHtcbiAgICAgICAgICB0aGVtZSA9IHBhcmVudENvbXBvbmVudC5kYXRhc2V0LnRoZW1lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucmVmZXJlbmNlU2VydmljZS5vcGVuRGlhbG9nKFxuICAgICAgcmVmRGlhbG9nQ29tcG9uZW50LCB0aGlzLm1ldGFSZXNvdXJjZSwgdGhpcy5pbnRlZ3JhdGlvbkNvZGUsXG4gICAgICAodGhpcy5tZXRhUmVmZXJlbmNlIGluc3RhbmNlb2YgQXJyYXkpID8gdGhpcy5tZXRhUmVmZXJlbmNlLmZpbHRlcihydCA9PiBydC5oaWRkZW4gIT09IHRydWUpIDogdGhpcy5tZXRhUmVmZXJlbmNlLFxuICAgICAgbW9kZWwsIG51bGwsIHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlLnJlc291cmNlVHlwZSwgdGhlbWVcbiAgICApLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgdGhpcy5wYXJlbnRbdGhpcy5tZXRhLm5hbWVdID0gcmVzdWx0O1xuICAgICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQocmVzdWx0KTtcbiAgICAgICAgY29uc3QgZXhpc3RpbmdTdWdnZXN0aW9uID0gKHRoaXMubWV0YS5zdWdnZXN0aW9ucyB8fCBbXSkuZmluZCgocykgPT4gKHMuaWQgPT09IHJlc3VsdC5pZCAmJiBzLnR5cGUgPT09IHJlc3VsdC50eXBlKSk7XG4gICAgICAgIGlmIChleGlzdGluZ1N1Z2dlc3Rpb24pIHtcbiAgICAgICAgICBleGlzdGluZ1N1Z2dlc3Rpb24ubGFiZWwgPSByZXN1bHQubGFiZWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCF0aGlzLm1ldGEuc3VnZ2VzdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMubWV0YS5zdWdnZXN0aW9ucyA9IFtdO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm1ldGEuc3VnZ2VzdGlvbnMudW5zaGlmdChyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWV0YVRyYWNrZXIuZW1pdCh0aGlzLmJ1aWxkVHJhY2tFdmVudChtb2RlbCA/ICdVUERBVEUnIDogJ0NSRUFURScsIHJlc3VsdC50eXBlIHx8IHJlc3VsdC5yZXNvdXJjZVR5cGUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubWV0YVRyYWNrZXIuZW1pdCh0aGlzLmJ1aWxkVHJhY2tFdmVudChtb2RlbCA/ICdDQU5DRUxfRURJVCcgOiAnQ0FOQ0VMX1VQREFURScpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZW5zdXJlRHJvcGRvd25Jc1Zpc2libGUoKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBob2xkZXIgPSB0aGlzLmRyb3Bkb3duLmNsb3Nlc3QoJy5WbHQtY2FyZF9fY29udGVudCcpO1xuICAgICAgaWYgKGhvbGRlcikge1xuICAgICAgICBjb25zdCBlbCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5WbHQtZHJvcGRvd25fX3BhbmVsJyk7XG4gICAgICAgIGNvbnN0IGVsUmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBob2xkZXJSZWN0ID0gaG9sZGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBpZiAoaG9sZGVyUmVjdC50b3AgKyBob2xkZXJSZWN0LmhlaWdodCA8IGVsUmVjdC50b3AgKyBlbFJlY3QuaGVpZ2h0KSB7XG4gICAgICAgICAgZWwuc2Nyb2xsSW50b1ZpZXcoeyBibG9jazogJ2VuZCcgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCA0MDApO1xuICB9XG5cbiAgcHJpdmF0ZSBlbnN1cmVEcm9wZG93bk9wdGlvbklzVmlzaWJsZSgpIHtcbiAgICBpZiAoIXRoaXMuZHJvcGRvd25TY3JvbGxDb250YWluZXIpIHtcbiAgICAgIHRoaXMuZHJvcGRvd25TY3JvbGxDb250YWluZXIgPSB0aGlzLmRyb3Bkb3duLnF1ZXJ5U2VsZWN0b3IoJy5WbHQtZHJvcGRvd25fX3Njcm9sbCcpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kcm9wZG93blNjcm9sbENvbnRhaW5lciAmJiB0eXBlb2YgKHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4KSA9PT0gJ251bWJlcicpIHtcbiAgICAgIGNvbnN0IHNjcm9sbFRvcCA9IDQ0ICogdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXg7XG4gICAgICBjb25zdCBzY3JvbGxCb3R0b20gPSA0NCAqICh0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCAtIDcpO1xuICAgICAgaWYgKHNjcm9sbFRvcCA8IHRoaXMuZHJvcGRvd25TY3JvbGxDb250YWluZXIuc2Nyb2xsVG9wKSB7XG4gICAgICAgIHRoaXMuZHJvcGRvd25TY3JvbGxDb250YWluZXIuc2Nyb2xsVG9wID0gc2Nyb2xsVG9wO1xuICAgICAgfSBlbHNlIGlmIChzY3JvbGxCb3R0b20gPiB0aGlzLmRyb3Bkb3duU2Nyb2xsQ29udGFpbmVyLnNjcm9sbFRvcCkge1xuICAgICAgICB0aGlzLmRyb3Bkb3duU2Nyb2xsQ29udGFpbmVyLnNjcm9sbFRvcCA9IHNjcm9sbEJvdHRvbTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNsaWNrb3V0ID0gKGV2ZW50KSA9PiB7XG4gICAgY29uc3QgaW50ZXJuYWxDb250cm9sID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KTtcbiAgICBpZiAoaW50ZXJuYWxDb250cm9sICYmIFsnVmx0LWRyb3Bkb3duX19saW5rJywgJ1ZsdC1kcm9wZG93bl9fYmxvY2snXS5pbmRleE9mKGV2ZW50LnRhcmdldC5jbGFzc05hbWUpICE9PSAtMSkge1xuICAgICAgdGhpcy5mb2N1cygpO1xuICAgIH0gZWxzZSBpZiAoIWludGVybmFsQ29udHJvbCAmJiBldmVudC50YXJnZXQgIT09IHRoaXMuaW5wdXQgJiYgZXZlbnQudGFyZ2V0LmNsYXNzTmFtZSAhPT0gJ1ZsdC1kcm9wZG93bl9fdGl0bGUnKSB7XG4gICAgICB0aGlzLmRpc21pc3NEcm9wZG93bigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWludGVybmFsQ29udHJvbCAmJiBpbnRlcm5hbENvbnRyb2wudGFnTmFtZSAhPT0gJ0lOUFVUJykge1xuICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgYnVpbGRUcmFja0V2ZW50KGFjdGlvbjogc3RyaW5nLCB2YWx1ZT86IHN0cmluZykge1xuICAgIGNvbnN0IGU6IElNZXRhVHJhY2tlckV2ZW50ID0ge1xuICAgICAgaW50ZWdyYXRpb246IHRoaXMuaW50ZWdyYXRpb25Db2RlLFxuICAgICAgcmVzb3VyY2U6IHRoaXMubW9kZWwgPyAodGhpcy5tb2RlbC50eXBlIHx8IHRoaXMubW9kZWwucmVzb3VyY2VUeXBlKSA6IHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlLnJlc291cmNlVHlwZSxcbiAgICAgIGZpZWxkOiB0aGlzLm1ldGEubmFtZSxcbiAgICAgIGFjdGlvblxuICAgIH07XG4gICAgaWYgKHRoaXMubWV0YS4kaXNDb250YWN0YWJsZSkge1xuICAgICAgZS5pc0NvbnRhY3RhYmxlID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiAodmFsdWUpICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgZS52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gZTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRQbGFjZWhvbGRlckxhYmVsKCkge1xuICAgIHRoaXMucGxhY2VIb2xkZXJMYWJlbCA9IHRoaXMubWV0YS5sYWJlbDtcbiAgICBpZiAodGhpcy5tdWx0aXBsZSAmJiAhdGhpcy5pc1BvbHltb3JwaGljKSB7XG4gICAgICB0aGlzLnBsYWNlSG9sZGVyTGFiZWwgPSAnK0FkZCAnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBsYWNlSG9sZGVyTGFiZWwgPSAodGhpcy5pc1NlYXJjaGFibGUgJiYgKHRoaXMubXVsdGlwbGUgfHwgIXRoaXMuaXNQb2x5bW9ycGhpYykpID8gJ1NlYXJjaCAnIDogJyc7XG4gICAgfVxuICAgIHRoaXMucGxhY2VIb2xkZXJMYWJlbCArPSB0aGlzLnNlYXJjaFJlc291cmNlVHlwZS5yZXNvdXJjZVR5cGUgPyB0aGlzLnNlYXJjaFJlc291cmNlVHlwZS5yZXNvdXJjZVR5cGUgOiB0aGlzLnNlYXJjaFJlc291cmNlVHlwZXNTY29wZTtcbiAgfVxuXG4gIHByaXZhdGUga2V5ZG93biA9IChldmVudCkgPT4ge1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOiB7XG4gICAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duKCk7XG4gICAgICAgIGlmICh0eXBlb2YgKHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4KSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXgrKztcbiAgICAgICAgICBpZiAodGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXggPj0gKHRoaXMuc2VhcmNoUmVzdWx0cyB8fCB0aGlzLnN1Z2dlc3Rpb25zKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4ID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbnN1cmVEcm9wZG93bk9wdGlvbklzVmlzaWJsZSgpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdBcnJvd1VwJzoge1xuICAgICAgICB0aGlzLnNob3dEcm9wZG93bigpO1xuICAgICAgICBpZiAodHlwZW9mICh0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXggPSAodGhpcy5zZWFyY2hSZXN1bHRzIHx8IHRoaXMuc3VnZ2VzdGlvbnMpLmxlbmd0aCAtIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXgtLTtcbiAgICAgICAgICBpZiAodGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXggPCAwKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCA9ICh0aGlzLnNlYXJjaFJlc3VsdHMgfHwgdGhpcy5zdWdnZXN0aW9ucykubGVuZ3RoIC0gMTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbnN1cmVEcm9wZG93bk9wdGlvbklzVmlzaWJsZSgpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdTcGFjZSc6XG4gICAgICBjYXNlICdFbnRlcic6IHtcbiAgICAgICAgaWYgKHR5cGVvZiAodGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXgpICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgdGhpcy5vblN1Z2dlc3Rpb25TZWxlY3QoZXZlbnQsICh0aGlzLnNlYXJjaFJlc3VsdHMgfHwgdGhpcy5zdWdnZXN0aW9ucylbdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXhdKTtcbiAgICAgICAgICBkZWxldGUgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdFc2NhcGUnOiB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLmRpc21pc3NEcm9wZG93bigpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0JhY2tzcGFjZSc6IHtcbiAgICAgICAgaWYgKCF0aGlzLm11bHRpcGxlICYmIHRoaXMubW9kZWwpIHsgLy8gSFBCUi04MjI5XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB0aGlzLnJlbW92ZVNlbGVjdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIGJ1aWxkRXh0ZXJuYWxMaW5rKCkge1xuICAgIGlmICh0aGlzLm1vZGVsKSB7XG4gICAgICBpZiAodGhpcy5tb2RlbC5leHRlcm5hbExpbmspIHtcbiAgICAgICAgdGhpcy5leHRlcm5hbExpbmsgPSB0aGlzLm1vZGVsLmV4dGVybmFsTGluaztcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5tZXRhQ29udGV4dC5wcm9maWxlc1t0aGlzLmludGVncmF0aW9uQ29kZS50b1VwcGVyQ2FzZSgpXSkge1xuICAgICAgICBkZWxldGUgdGhpcy5leHRlcm5hbExpbms7XG4gICAgICAgIHRoaXMubWV0YU1zZ1NlcnZpY2Uuc2VuZE1lc3NhZ2UoXG4gICAgICAgICAgdGhpcy5pbnRlZ3JhdGlvbkNvZGUudG9VcHBlckNhc2UoKSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhY3Rpb246ICdidWlsZEV4dGVybmFsTGluaycsXG4gICAgICAgICAgICBpbnRlZ3JhdGlvbkNvZGU6IHRoaXMuaW50ZWdyYXRpb25Db2RlLFxuICAgICAgICAgICAgcmVmOiB0aGlzLm1vZGVsLFxuICAgICAgICAgICAgcHJvZmlsZTogdGhpcy5tZXRhQ29udGV4dC5wcm9maWxlc1t0aGlzLmludGVncmF0aW9uQ29kZS50b1VwcGVyQ2FzZSgpXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLmVycm9yKSB7XG4gICAgICAgICAgICAgIHRoaXMuZXh0ZXJuYWxMaW5rID0gcmVzcG9uc2UuZXh0ZXJuYWxMaW5rO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdObyBleHRlcm5hbCBsaW5rIHN1cHBvcnQgZm9yJywgdGhpcy5pbnRlZ3JhdGlvbkNvZGUsIHRoaXMubW9kZWwucmVzb3VyY2VUeXBlIHx8IHRoaXMubW9kZWwudHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdGhpcy5leHRlcm5hbExpbms7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZWFyY2hBdXRvU3VnZ2VzdGlvbnMocGFyYW1zPykge1xuICAgIGxldCBzZWFyY2hVcmwgPSBgL3N1Z2dlc3Rpb25zLyR7dGhpcy5tZXRhLm5hbWV9L3NlYXJjaGA7XG4gICAgaWYgKHRoaXMubWV0YS5hdXRvICYmIHRoaXMubWV0YS5hdXRvLnNlYXJjaCkge1xuICAgICAgaWYgKHRoaXMubWV0YS5hdXRvLnNlYXJjaC51cmwpIHtcbiAgICAgICAgc2VhcmNoVXJsID0gdGhpcy5tZXRhLmF1dG8uc2VhcmNoLnVybC5yZXBsYWNlKC9cXCR7XFxzKihbXFx3XFwuXSspXFxzKn0vZywgKG1hdGNoLCBrZXkpID0+IHtcbiAgICAgICAgICBpZiAocGFyYW1zLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9IHBhcmFtc1trZXldO1xuICAgICAgICAgICAgZGVsZXRlIHBhcmFtc1trZXldO1xuICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgcCBvZiBPYmplY3Qua2V5cyhwYXJhbXMpKSB7XG4gICAgICAgIHNlYXJjaFVybCArPSBgJHtzZWFyY2hVcmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJ30ke2VuY29kZVVSSUNvbXBvbmVudChwKX09JHtlbmNvZGVVUklDb21wb25lbnQocGFyYW1zW3BdKX1gO1xuICAgICAgfVxuICAgICAgdGhpcy5zZWFyY2hpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5yZXNvdXJjZVNlcnZpY2UuZ2V0QnlQYXRoKHNlYXJjaFVybCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgZGVsZXRlIHRoaXMuc2VhcmNoaW5nO1xuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgbGV0IHN1Z2dlc3Rpb25zO1xuICAgICAgICAgIHN1Z2dlc3Rpb25zID0gcmVzdWx0O1xuICAgICAgICAgIGlmICh0aGlzLm1ldGEuYXV0by5zZWFyY2guZXh0cmFjdCkge1xuICAgICAgICAgICAgc3VnZ2VzdGlvbnMgPSByZXN1bHRbdGhpcy5tZXRhLmF1dG8uc2VhcmNoLmV4dHJhY3RdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc3VnZ2VzdGlvbnMgaW5zdGFuY2VvZiBBcnJheSAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgc3VnZ2VzdGlvbnMgPSBbc3VnZ2VzdGlvbnNdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBhc3luY1N1Z2dlc3Rpb25zID0gW107XG4gICAgICAgICAgc3VnZ2VzdGlvbnMuZm9yRWFjaCgocykgPT4ge1xuICAgICAgICAgICAgaWYgKHMgJiYgcy5pZCAmJiBzLnR5cGUpIHsgLy8gVE9PRCBjaGVjayB0aGUgdHlwZSBpcyBhY2NlcHRhYmxlXG4gICAgICAgICAgICAgIGFzeW5jU3VnZ2VzdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgaWQ6IHMuaWQsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHMubGFiZWwgfHwgYCR7cy50eXBlfSMke3MuaWR9YCxcbiAgICAgICAgICAgICAgICB0eXBlOiBzLnR5cGVcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGFzeW5jU3VnZ2VzdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoYXN5bmNTdWdnZXN0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgdGhpcy5wYXJlbnRbdGhpcy5tZXRhLm5hbWVdID0gYXN5bmNTdWdnZXN0aW9uc1swXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmFzeW5jU3VnZ2VzdGlvbnM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuYXN5bmNTdWdnZXN0aW9ucyA9IGFzeW5jU3VnZ2VzdGlvbnM7XG4gICAgICAgIH1cbiAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgZGVsZXRlIHRoaXMuc2VhcmNoaW5nO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9J3ZnaXAtbWV0YS1maWVsZC1wcmV2aWV3JyAqbmdJZj0ncHJldmlldyAmJiBtb2RlbCAmJiAoIW11bHRpcGxlIHx8IChtdWx0aXBsZSAmJiBtb2RlbC5sZW5ndGgpKSc+XG4gIDxkaXYgY2xhc3M9J3ZnaXAtbWV0YS1maWVsZC1sYWJlbCcgW3RpdGxlXT0nbWV0YS5sYWJlbCB8fCBtZXRhLm5hbWUnPnt7bWV0YS5sYWJlbCB8fCBtZXRhLm5hbWV9fTwvZGl2PlxuICA8ZGl2ICpuZ0lmPSchbXVsdGlwbGUnIGNsYXNzPSd2Z2lwLW1ldGEtZmllbGQtdmFsdWUgX19ndSc+XG4gICAgPHN2ZyBjbGFzcz1cIlZsdC1pY29uIFZsdC1pY29uLS1zbWFsbGVyXCIgc3R5bGU9J21hcmdpbi10b3A6IC0zcHg7Jz48dXNlIGF0dHIueGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWJyYW5kLWljb25zLnN2ZyN7e2ludGVncmF0aW9uSWNvbn19XCIvPjwvc3ZnPlxuICAgIHt7bW9kZWwubGFiZWwgfHwgbW9kZWwuaWR9fSA8c3BhbiBjbGFzcz0nVmx0LWdyZXknPih7e21vZGVsLnR5cGV9fSk8L3NwYW4+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPSdtdWx0aXBsZScgY2xhc3M9J3ZnaXAtbWV0YS1maWVsZC12YWx1ZSBfX2d1Jz5cbiAgICA8c3BhbiAqbmdGb3I9J2xldCBtIG9mIChtb2RlbCB8fCBbXSknIGNsYXNzPSdWbHQtYmFkZ2UgVmx0LWJhZGdlLS1hcHAnPlxuICAgICAge3ttLmxhYmVsIHx8IG0uaWQgfHwgbX19IDxzcGFuIGNsYXNzPSdWbHQtZ3JleS1kYXJrJyAqbmdJZj0naXNQb2x5bW9ycGhpYyc+KHt7bS50eXBlfX0pPC9zcGFuPlxuICAgIDwvc3Bhbj5cbiAgPC9kaXY+XG4gIDxhIFtocmVmXT0nZXh0ZXJuYWxMaW5rIHx8IG1vZGVsLmV4dGVybmFsTGluaycgdGFyZ2V0PSdfYmxhbmsnIHJlbD0nbm9vcGVuZXInICpuZ0lmPSdleHRlcm5hbExpbmsgJiYgKG1vZGVsICYmICFtdWx0aXBsZSknIGNsYXNzPVwiVmx0LWNvbXBvc2l0ZV9fYXBwZW5kLS1pY29uIHByZXZpZXdcIiBhcmlhLWxhYmVsPSdPcGVuIGV4dGVybmFsJz5cbiAgICA8ZGl2IGNsYXNzPVwiVmx0LWNvbXBvc2l0ZV9faWNvblwiPlxuICAgICAgPHN2Zz48dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tb3BlblwiLz48L3N2Zz5cbiAgICA8L2Rpdj5cbiAgPC9hPlxuPC9kaXY+XG48ZGl2ICpuZ0lmPSchcHJldmlldycgY2xhc3M9XCJtZXRhLWZpZWxkLXJlZmVyZW5jZSBWbHQtZm9ybV9fZWxlbWVudCBWbHQtZm9ybV9fZWxlbWVudC0tYmlnXCIgW25nQ2xhc3NdPVwieyAnVmx0LWZvcm1fX2VsZW1lbnQtLWVycm9yJzogKHNlYXJjaEVycm9yICYmIGtleUxpc3RlbmVyQWN0aXZlKSB8fCAoZi5pbnZhbGlkICYmICgoZiB8IG1ldGFNb2RlbCkuX3BhcmVudC5zdWJtaXR0ZWQgfHwgKGZ0IHwgbWV0YU1vZGVsICkudG91Y2hlZCkpLCAnbXVsdGlwbGUnOiBtdWx0aXBsZSwgJ2hhcy12YWx1ZSc6IG1vZGVsLCBhY3RpdmU6IGtleUxpc3RlbmVyQWN0aXZlIH1cIj5cbiAgPGRpdiAqbmdJZj0nbXVsdGlwbGUnIGNsYXNzPSdpdGVtcy1jb250YWluZXInIFtuZ0NsYXNzXT0neyBjcmVhdGFibGU6IGlzQ3JlYXRhYmxlIH0nPlxuICAgIDxkaXYgKm5nSWY9J21vZGVsJyBjbGFzcz0nYmFkZ2VzLWNvbnRhaW5lciBrZWVwLWZvY3VzJyAoY2xpY2spPSdmb2N1cygpJyBzdHlsZT0nd2lkdGg6IDEwMCU7Jz5cbiAgICAgIDxkaXYgKm5nRm9yPSdsZXQgaXRlbSBvZiBtb2RlbCcgY2xhc3M9XCJWbHQtYmFkZ2UgVmx0LWJhZGdlLS1hcHAgVmx0LWJhZGdlLS1sYXJnZSBrZWVwLWZvY3VzXCIgW25nQ2xhc3NdPVwieyBncmlkOiAoaXRlbS5sYWJlbCB8fCBpdGVtLmlkIHx8ICcnKS5sZW5ndGggPiA1Nn1cIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9J1ZsdC10cnVuY2F0ZSc+e3tpdGVtLmxhYmVsIHx8IGl0ZW0uaWQgfHwgaXRlbSB9fSA8c3BhbiAqbmdJZj0naXNQb2x5bW9ycGhpYycgY2xhc3M9J1ZsdC1ncmV5LWRhcmsnIHN0eWxlPSdmb250LXdlaWdodDogbm9ybWFsOyc+KHt7aXRlbS50eXBlfX0pPC9zcGFuPjwvc3Bhbj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIlZsdC1iYWRnZV9fZGlzbWlzcyBrZWVwLWZvY3VzXCIgKGNsaWNrKT0ncmVtb3ZlKCRldmVudCwgaXRlbSknIHN0eWxlPSdwb3NpdGlvbjogYWJzb2x1dGU7IHJpZ2h0OiAxMnB4OyB0b3A6IDhweDsnIGFyaWEtbGFiZWw9J1JlbW92ZSc+PC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJWbHQtY29tcG9zaXRlXCI+XG4gICAgPGRpdiBjbGFzcz0nZHJvcGRvd24td3JhcHBlciBWbHQtZHJvcGRvd24nIHN0eWxlPSd3aWR0aDogMTAwJTsgcG9zaXRpb246IGFic29sdXRlOyB0b3A6IDQ4cHg7Jz5cbiAgICAgIDxkaXYgY2xhc3M9XCJWbHQtZHJvcGRvd25fX3BhbmVsXCI+XG4gICAgICAgIDxkaXYgKm5nSWY9J3NlYXJjaEVycm9yJz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiVmx0LWNhbGxvdXQgVmx0LWNhbGxvdXQtLWNyaXRpY2FsIGtlZXAtZm9jdXNcIj5cbiAgICAgICAgICAgIDxpPjwvaT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJWbHQtY2FsbG91dF9fY29udGVudFwiPnt7c2VhcmNoRXJyb3J9fTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj0nIXNlYXJjaEVycm9yICYmIChzdWdnZXN0aW9ucy5sZW5ndGggfHwgc2VhcmNoUmVzdWx0cyknIFtuZ0NsYXNzXT1cInsgc3VnZ2VzdGlvbnM6ICFzZWFyY2hSZXN1bHRzfVwiIGNsYXNzPVwiVmx0LWRyb3Bkb3duX19wYW5lbF9fY29udGVudCBWbHQtZHJvcGRvd25fX3BhbmVsX19jb250ZW50LS1zY3JvbGwtYXJlYVwiIHN0eWxlPSdwYWRkaW5nOiAwOyc+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIlZsdC1kcm9wZG93bl9fYmxvY2tcIj48L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPSchc2VhcmNoUmVzdWx0cycgY2xhc3M9XCJWbHQtZHJvcGRvd25fX3Njcm9sbFwiPlxuICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7ICdWbHQtZHJvcGRvd25fX2xpbmstLXNlbGVjdGVkJzogYWN0aXZlU3VnZ2VzdGlvbkluZGV4ID09PSBpLCBzbWFydDogc3VnZ2VzdGlvbi5zbWFydCB9XCIgKGNsaWNrKT0nb25TdWdnZXN0aW9uU2VsZWN0KCRldmVudCwgc3VnZ2VzdGlvbiknICpuZ0Zvcj0nbGV0IHN1Z2dlc3Rpb24gb2Ygc3VnZ2VzdGlvbnM7IGxldCBpID0gaW5kZXgnICBjbGFzcz1cIlZsdC1kcm9wZG93bl9fbGluayBoYXMtdHlwZVwiPlxuICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSdWbHQtaWNvbiAgVmx0LWljb24tLXNtYWxsJz48dXNlIGF0dHIueGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWJyYW5kLWljb25zLnN2ZyN7e2ludGVncmF0aW9uSWNvbn19XCIvPjwvc3ZnPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdfX2d1JyBbdGl0bGVdPSdzdWdnZXN0aW9uLmxhYmVsJz57eyBzdWdnZXN0aW9uLmxhYmVsIH19PC9kaXY+XG4gICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz0nVmx0LWdyZXktZGFyaycgc3R5bGU9J3RleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplOyc+e3tzdWdnZXN0aW9uLnR5cGV9fTwvc21hbGw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPSdzZWFyY2hSZXN1bHRzJyBjbGFzcz1cIlZsdC1kcm9wZG93bl9fc2Nyb2xsXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPSchc2VhcmNoUmVzdWx0cy5sZW5ndGgnIGNsYXNzPSdWbHQtZHJvcGRvd25fX2Jsb2NrJz4gTm8gcmVjb3JkcyBtYXRjaGluZyAnPGIgc3R5bGU9J3BvaW50ZXItZXZlbnRzOiBub25lOyc+e3tzZWFyY2hUZXh0fX08L2I+JyB3ZXJlIGZvdW5kLjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7ICdWbHQtZHJvcGRvd25fX2xpbmstLXNlbGVjdGVkJzogYWN0aXZlU3VnZ2VzdGlvbkluZGV4ID09PSBpIH1cIiAoY2xpY2spPSdvblN1Z2dlc3Rpb25TZWxlY3QoJGV2ZW50LCBzdWdnZXN0aW9uKScgKm5nRm9yPSdsZXQgc3VnZ2VzdGlvbiBvZiBzZWFyY2hSZXN1bHRzOyBsZXQgaSA9IGluZGV4JyAgY2xhc3M9XCJWbHQtZHJvcGRvd25fX2xpbmsgaGFzLXR5cGVcIj5cbiAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0nVmx0LWljb24gVmx0LWljb24tLXNtYWxsJz48dXNlIGF0dHIueGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWJyYW5kLWljb25zLnN2ZyN7e2ludGVncmF0aW9uSWNvbn19XCIvPjwvc3ZnPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdfX2d1JyBbdGl0bGVdPSdzdWdnZXN0aW9uLmxhYmVsJz57eyBzdWdnZXN0aW9uLmxhYmVsIH19PC9kaXY+XG4gICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz0nVmx0LWdyZXktZGFyaycgc3R5bGU9J3RleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplOyc+e3tzdWdnZXN0aW9uLnR5cGV9fTwvc21hbGw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIDxkaXYgKm5nSWY9J3NlYXJjaFJlc3VsdHMnIGNsYXNzPVwiVmx0LWRyb3Bkb3duX19ibG9ja1wiIHN0eWxlPSd0ZXh0LWFsaWduOiByaWdodDsgcGFkZGluZy10b3A6IDA7Jz5cbiAgICAgICAgICAgIDxzbWFsbD5cbiAgICAgICAgICAgICAge3sgc2VhcmNoUmVzdWx0cyA/IHNlYXJjaFJlc3VsdHMubGVuZ3RoKycgcmVzdWx0cycgOiAnU3VnZ2VzdGlvbnMnIH19IDxzcGFuIHN0eWxlPSdmb250LXN0eWxlOiBpdGFsaWM7IGZvbnQtd2VpZ2h0OiBub3JtYWw7JyAqbmdJZj0nc2VhcmNoUmVzdWx0cyc+fnt7IG1vZGVsID8gJ2xhc3Qgc2VhcmNoJyA6IHNlYXJjaFRleHR9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJWbHQtZHJvcGRvd25fX2Jsb2NrXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIlZsdC1jb21wb3NpdGVfX3ByZXBlbmRcIiAqbmdJZj0naXNQb2x5bW9ycGhpYyAmJiBzaG93VHlwZXMgJiYgKG11bHRpcGxlIHx8ICFtb2RlbCB8fCAoZHJvcGRvd25WaXNpYmxlICYmICgoc3VnZ2VzdGlvbnMgfHwgc2VhcmNoUmVzdWx0cyB8fCBbXSkubGVuZ3RoIHx8IHNlYXJjaFJlc291cmNlVHlwZS5yZXNvdXJjZVR5cGUpKSknPlxuICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1zY29wZVwiIFtuZ0NsYXNzXT1cInsgJ2hhcy12YWx1ZSc6IHNlYXJjaFJlc291cmNlVHlwZS5yZXNvdXJjZVR5cGUgfVwiPlxuICAgICAgICA8dmdpcC1tZXRhLWZpZWxkIGNsYXNzPSdzaG93bicgW21ldGFdPSdzZWFyY2hSZXNvdXJjZVR5cGVNZXRhJyBbcGFyZW50XT0nc2VhcmNoUmVzb3VyY2VUeXBlJyAob25DaGFuZ2UpPSdvblNlYXJjaFJlc291cmNlVHlwZUNoYW5nZWQoJGV2ZW50KScgKG9uTGVhdmUpPSdvbkJsdXIoJGV2ZW50KScgW2ludGVncmF0aW9uQ29kZV09J2ludGVncmF0aW9uQ29kZScgdGhlbWU9J2luaGVyaXQnPjwvdmdpcC1tZXRhLWZpZWxkPlxuICAgICAgICA8c3ZnIGNsYXNzPSdWbHQtaWNvbiBWbHQtZ3JleSBWbHQtaWNvbi0tc21hbGxlciB2aXNpYmxlLW1vYmlsZSBtb2JpbGUtaWNvbicgc3R5bGU9J3Bvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAxNXB4OyBsZWZ0OiAxNHB4OyBwb2ludGVyLWV2ZW50czogbm9uZTsnPlxuICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1tZW51XCIvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgICAgPGxhYmVsIGNsYXNzPSdtb2JpbGUtbGFiZWwgaGlkZGVuLW1vYmlsZSBoaWRkZW4tZGVza3RvcCc+U2VhcmNoPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9JyEoaXNQb2x5bW9ycGhpYyAmJiBzaG93VHlwZXMgJiYgKG11bHRpcGxlIHx8ICFtb2RlbCB8fCBkcm9wZG93blZpc2libGUpKSc+PCEtLSByZXF1aXJlZCBieSBjc3MgLS0+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIlZsdC1jb21wb3NpdGVfX3dyYXBwZXIgVmx0LWlucHV0XCIgc3R5bGU9J292ZXJmbG93OiBoaWRkZW47JyBbbmdDbGFzc109XCJ7ICdoYXMtYXBwZW5kLWJ1dHRvbic6IGhhc0FwcGVuZEJ1dHRvbiAmJiAhZGlzYWJsZWQgfVwiPlxuICAgICAgPGxhYmVsIGNsYXNzPSd3cmFwcGVyJz5cbiAgICAgICAgPGRpdiBjbGFzcz1cIlZsdC1jb21wb3NpdGVfX3ByZXBlbmQgVmx0LWNvbXBvc2l0ZV9fcHJlcGVuZC0taWNvblwiIHN0eWxlPSd0b3A6IDA7IHBhZGRpbmctdG9wOiAxNXB4Oyc+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIlZsdC1jb21wb3NpdGVfX2ljb25cIj5cbiAgICAgICAgICAgIDxzdmcgKm5nSWY9J2lzU2VhcmNoYWJsZSAmJiAoIW1vZGVsIHx8IG11bHRpcGxlKScgY2xhc3M9J1ZsdC1ncmV5Jz48dXNlIGF0dHIueGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi17eyBtdWx0aXBsZSA/ICdzdGFjaycgOiAnc2VhcmNoJ319XCIvPjwvc3ZnPlxuICAgICAgICAgICAgPHN2ZyAqbmdJZj0nIWlzU2VhcmNoYWJsZSB8fCAobW9kZWwgJiYgIW11bHRpcGxlKScgW25nU3R5bGVdPVwie2ZpbGw6IGludGVncmF0aW9uSWNvbiA9PT0gJ0JyYW5kLWljb24tdm9uYWdlJyA/ICd2YXIoLS12Z2lwLW1ldGEtaW5wdXQtY29sb3IpJyA6ICcnfVwiPjx1c2UgYXR0ci54bGluazpocmVmPVwidm9sdGEvdm9sdGEtYnJhbmQtaWNvbnMuc3ZnI3t7aW50ZWdyYXRpb25JY29ufX1cIi8+PC9zdmc+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj0nc3VnZ2VzdGlvbnMubGVuZ3RoJyBjbGFzcz1cIlZsdC1iYWRnZSBWbHQtYmFkZ2UtLXNtYWxsIFZsdC1iYWRnZS0tcHVycGxlXCIgc3R5bGU9J3BhZGRpbmc6IDBweCA0cHg7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAyNnB4OyBsZWZ0OiA0cHg7IHBvaW50ZXItZXZlbnRzOiBub25lOyBtaW4td2lkdGg6IDE0cHg7Jz57e3N1Z2dlc3Rpb25zLmxlbmd0aH19PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8aW5wdXQgY2xhc3M9J21vZGVsJyB0eXBlPSdoaWRkZW4nIFtyZXF1aXJlZF09J3ZhbGlkYXRpb25zLnJlcXVpcmVkJyBbKG5nTW9kZWwpXT0nbW9kZWwnICNmPSduZ01vZGVsJyBbbmFtZV09J25hbWUnIC8+XG4gICAgICAgIDxpbnB1dCBjbGFzcz0nbWFpbicgW3JlYWRvbmx5XT0nIWlzU2VhcmNoYWJsZSB8fCAobW9kZWwgJiYgIW11bHRpcGxlKScgW25nTW9kZWxdPSdzZWFyY2hUZXh0JyAjZnQ9J25nTW9kZWwnIChuZ01vZGVsQ2hhbmdlKT0nb25TZWFyY2hUZXh0Q2hhbmdlZCgkZXZlbnQpJyBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCIgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cInt7IHBsYWNlSG9sZGVyTGFiZWwgfHwgJyAnIH19XCIgW25nQ2xhc3NdPSd7IGV4dDogZXh0ZXJuYWxMaW5rIH0nIChjbGljayk9J29uQWN0aXZhdGVkKCRldmVudCknIChmb2N1cyk9J29uQWN0aXZhdGVkKCRldmVudCknIChibHVyKT0nb25CbHVyKCRldmVudCknIFtkaXNhYmxlZF09J2Rpc2FibGVkJyBbdGl0bGVdPVwibW9kZWwgPyBtb2RlbC5sYWJlbCA6ICcnXCIvPlxuICAgICAgICA8bGFiZWwgY2xhc3M9J1ZsdC10cnVuY2F0ZSBoaWRkZW4tbW9iaWxlJyBzdHlsZT0ncGFkZGluZy1sZWZ0OiAyNXB4OyBwYWRkaW5nLXJpZ2h0OiA0MnB4Oyc+e3sgKG11bHRpcGxlICYmIGlzUG9seW1vcnBoaWMpID8gJytBZGQgJyA6ICgobW9kZWwgfHwgIWlzUG9seW1vcnBoaWMpID8gbWV0YS5sYWJlbCA6ICggbWV0YS5zZWFyY2hMYWJlbCB8fCAnU2VhcmNoJykpIH19PHNwYW4gKm5nSWY9J3ZhbGlkYXRpb25zLnJlcXVpcmVkJyBjbGFzcz0nVmx0LXJlZCc+Kjwvc3Bhbj4mbmJzcDs8c3BhbiBzdHlsZT0nY29sb3I6IHZhcigtLXZnaXAtbWV0YS1pbnB1dC1jb2xvcik7IHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplOycgKm5nSWY9J21vZGVsJz4oe3ttb2RlbC50eXBlIHx8IG1vZGVsLnJlc291cmNlVHlwZSB8fCBtb2RlbC5sZW5ndGh9fSk8L3NwYW4+PC9sYWJlbD5cbiAgICAgICAgPGxhYmVsIGNsYXNzPSdWbHQtdHJ1bmNhdGUgaGlkZGVuLWRlc2t0b3AnIHN0eWxlPSdwYWRkaW5nLWxlZnQ6IDI1cHg7IHBhZGRpbmctcmlnaHQ6IDQycHg7Jz57e21ldGEubGFiZWwgfHwgbWV0YS5uYW1lfX08c3BhbiAqbmdJZj0ndmFsaWRhdGlvbnMucmVxdWlyZWQnIGNsYXNzPSdWbHQtcmVkJz4qPC9zcGFuPiZuYnNwOzxzcGFuIHN0eWxlPSdjb2xvcjogdmFyKC0tdmdpcC1tZXRhLWlucHV0LWNvbG9yKTsgdGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7JyAqbmdJZj0nbW9kZWwnPih7e21vZGVsLnR5cGUgfHwgbW9kZWwucmVzb3VyY2VUeXBlIHx8IG1vZGVsLmxlbmd0aH19KTwvc3Bhbj48L2xhYmVsPlxuICAgICAgPC9sYWJlbD5cbiAgICAgIDxkaXYgKm5nSWY9J3NlYXJjaGluZycgY2xhc3M9J3NlYXJjaC1wcm9ncmVzcyc+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFyIFZsdC1iZy1wdXJwbGVcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9J1ZsdC1jb21wb3NpdGVfX2FwcGVuZCByaWdodC1hY3Rpb25zJz5cbiAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPSdwcmV2TW9kZWwgJiYgIW1vZGVsJyBjbGFzcz1cIlZsdC1jb21wb3NpdGVfX2FwcGVuZC0taWNvblwiIChjbGljayk9J3JldmVydCgpJz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiVmx0LWNvbXBvc2l0ZV9faWNvblwiPlxuICAgICAgICAgICAgPHN2Zz48dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tcmVwbHlcIi8+PC9zdmc+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgPGRpdiAqbmdJZj0nbW9kZWwgJiYgIW11bHRpcGxlJyBjbGFzcz1cIlZsdC1jb21wb3NpdGVfX2FwcGVuZC0taWNvblwiIChjbGljayk9J3JlbW92ZVNlbGVjdGlvbigpJz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiVmx0LWNvbXBvc2l0ZV9faWNvblwiPlxuICAgICAgICAgICAgPHN2Zz48dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tY3Jvc3NcIi8+PC9zdmc+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YSBbaHJlZl09J2V4dGVybmFsTGluayB8fCBtb2RlbC5leHRlcm5hbExpbmsnIHRhcmdldD0nX2JsYW5rJyByZWw9J25vb3BlbmVyJyAqbmdJZj0nZXh0ZXJuYWxMaW5rICYmIChtb2RlbCAmJiAhbXVsdGlwbGUpJyBjbGFzcz1cIlZsdC1jb21wb3NpdGVfX2FwcGVuZC0taWNvblwiIGFyaWEtbGFiZWw9J09wZW4gZXh0ZXJuYWwnPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJWbHQtY29tcG9zaXRlX19pY29uXCI+XG4gICAgICAgICAgICA8c3ZnPjx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1vcGVuXCIvPjwvc3ZnPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2E+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIDxzcGFuICpuZ0lmPSdoYXNDcmVhdGFibGVzJz5cbiAgICAgIDxidXR0b24gdHlwZT0nYnV0dG9uJyAqbmdJZj0nIW1vZGVsIHx8IG11bHRpcGxlJyAoY2xpY2spPSdvcGVuUmVzb3VyY2UoKScgY2xhc3M9XCJWbHQtYnRuIFZsdC1idG4tLXNlY29uZGFyeSBWbHQtYnRuLS1pY29uIFZsdC1idG4tLWxhcmdlXCIgc3R5bGU9J21hcmdpbi1sZWZ0OiAxMnB4Oyc+XG4gICAgICAgIDxzdmc+PHVzZSB4bGluazpocmVmPVwidm9sdGEvdm9sdGEtaWNvbnMuc3ZnI1ZsdC1pY29uLXBsdXNcIi8+PC9zdmc+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gdHlwZT0nYnV0dG9uJyAqbmdJZj0nbW9kZWwgJiYgIW11bHRpcGxlJyAoY2xpY2spPSdvcGVuUmVzb3VyY2UobW9kZWwpJyBjbGFzcz1cIlZsdC1idG4gVmx0LWJ0bi0tcHJpbWFyeSBWbHQtYnRuLS1pY29uIFZsdC1idG4tLWxhcmdlXCIgc3R5bGU9J21hcmdpbi1sZWZ0OiAxMnB4Oyc+XG4gICAgICAgIDxzdmc+PHVzZSB4bGluazpocmVmPVwidm9sdGEvdm9sdGEtaWNvbnMuc3ZnI1ZsdC1pY29uLWVkaXRcIi8+PC9zdmc+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L3NwYW4+IC0tPlxuICAgIDxkaXYgKm5nSWY9J2hhc0FwcGVuZEJ1dHRvbiAmJiAhZGlzYWJsZWQnIGNsYXNzPVwiVmx0LWNvbXBvc2l0ZV9fYXBwZW5kXCI+XG4gICAgICA8YnV0dG9uIChmb2N1cyk9J29uQWN0aXZhdGVkKCRldmVudCknIChibHVyKT0nb25CbHVyKCRldmVudCknIHR5cGU9J2J1dHRvbicgKm5nSWY9JyFtb2RlbCB8fCBtdWx0aXBsZScgKGNsaWNrKT0nb3BlblJlc291cmNlKCknIGNsYXNzPVwiVmx0LWJ0biBWbHQtYnRuLS13aGl0ZSBWbHQtYnRuLS1pY29uXCIgYXJpYS1sYWJlbD0nQWRkIG5ldyc+XG4gICAgICAgIDxzdmc+PHVzZSB4bGluazpocmVmPVwidm9sdGEvdm9sdGEtaWNvbnMuc3ZnI1ZsdC1pY29uLXBsdXNcIi8+PC9zdmc+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gKGZvY3VzKT0nb25BY3RpdmF0ZWQoJGV2ZW50KScgKGJsdXIpPSdvbkJsdXIoJGV2ZW50KScgdHlwZT0nYnV0dG9uJyAqbmdJZj0nbW9kZWwgJiYgIW11bHRpcGxlJyAoY2xpY2spPSdvcGVuUmVzb3VyY2UobW9kZWwpJyBjbGFzcz1cIlZsdC1idG4gVmx0LWJ0bi0td2hpdGUgVmx0LWJ0bi0taWNvblwiIGFyaWEtbGFiZWw9J0VkaXQnPlxuICAgICAgICA8c3ZnPjx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1lZGl0XCIvPjwvc3ZnPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8c21hbGwgKm5nSWY9J2YuaW52YWxpZCAmJiAoKGYgfCBtZXRhTW9kZWwpLl9wYXJlbnQuc3VibWl0dGVkIHx8ICgoZnQgfCBtZXRhTW9kZWwpLnRvdWNoZWQgJiYga2V5TGlzdGVuZXJBY3RpdmUpKScgY2xhc3M9XCJWbHQtZm9ybV9fZWxlbWVudF9fZXJyb3JcIj5cbiAgICA8c3BhbiAqbmdJZj1cImYuZXJyb3JzLnJlcXVpcmVkXCI+UmVxdWlyZWQ8L3NwYW4+XG4gICAgPHNwYW4gKm5nSWY9XCJmLmVycm9ycy5wYXR0ZXJuXCI+U2hvdWxkIG1hdGNoICd7e3ZhbGlkYXRpb25zLnBhdHRlcm59fScgcGF0dGVybjwvc3Bhbj5cbiAgICA8c3BhbiAqbmdJZj1cImYuZXJyb3JzLmN1c3RvbVwiPnt7Zi5lcnJvcnMuY3VzdG9tfX0mbmJzcDs8L3NwYW4+XG4gIDwvc21hbGw+XG4gIDxzbWFsbCAqbmdJZj0nbWV0YS5oZWxwVGV4dCB8fCBtZXRhLmhpbnQnIGNsYXNzPVwiVmx0LWZvcm1fX2VsZW1lbnRfX2hpbnRcIj57e21ldGEuaGVscFRleHQgfHwgbWV0YS5oaW50fX08L3NtYWxsPlxuPC9kaXY+XG4iXX0=
829
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXRhLXVpL3NyYy9saWIvZmllbGRSZWZlcmVuY2UvaW5kZXgudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tZXRhLXVpL3NyYy9saWIvZmllbGRSZWZlcmVuY2Uvdmlldy5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQTRCLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7Ozs7Ozs7Ozs7QUFVN0MsTUFBTSxPQUFPLGNBQWUsU0FBUSxhQUFhO0lBZ0MvQyxZQUNVLGdCQUFzQyxFQUN0QyxZQUFpQyxFQUNqQyxjQUE4QixFQUM5QixXQUErQixFQUMvQixXQUErQixFQUMvQixnQkFBa0M7UUFFMUMsS0FBSyxFQUFFLENBQUM7UUFQQSxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXNCO1FBQ3RDLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtRQUNqQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQy9CLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQUMvQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBakM1Qyx1QkFBa0IsR0FBUSxFQUFFLENBQUM7UUFNN0Isc0JBQWlCLEdBQW9CLElBQUksT0FBTyxFQUFVLENBQUM7UUFDM0QsZ0JBQVcsR0FBRyxLQUFLLENB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Q0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQzt5QkFDbkQ7NkJBQU07NEJBQ0wsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7eUJBQzlCO3FCQUNGO29CQUNELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztpQkFDMUM7WUFDSCxDQUFDLEVBQUUsR0FBRyxFQUFFO2dCQUNOLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUN4QixDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQzsrR0EzMEJVLGNBQWM7bUdBQWQsY0FBYywyRUNqQjNCLHV0V0FtSUEsaW1SRHBIaUIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLENBQUM7OzRGQUV4RCxjQUFjO2tCQUwxQixTQUFTO29DQUdPLENBQUMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZpZWxkQWJzdHJhY3QgfSBmcm9tICcuLi9maWVsZEFic3RyYWN0JztcbmltcG9ydCB7IENvbnRyb2xDb250YWluZXIsIE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1ldGFSZWZlcmVuY2VTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbWV0YVJlZmVyZW5jZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTWV0YVJlc291cmNlU2VydmljZSwgSU1ldGFSZXNvdXJjZUNvbmZpZyB9IGZyb20gJy4uL3NlcnZpY2VzL21ldGFSZXNvdXJjZSc7XG5pbXBvcnQgeyBNZXRhUmVmRGlhbG9nIH0gZnJvbSAnLi4vcmVmRGlhbG9nJztcbmltcG9ydCB7IE1ldGFNc2dTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbWV0YU1zZyc7XG5pbXBvcnQgeyBNZXRhQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9tZXRhQ29udGV4dCc7XG5pbXBvcnQgeyBJTWV0YVRyYWNrZXJFdmVudCwgTWV0YVRyYWNrZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbWV0YVRyYWNrZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICcuL3ZpZXcuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3N0eWxlLnNjc3MnXSxcbiAgdmlld1Byb3ZpZGVyczogW3sgcHJvdmlkZTogQ29udHJvbENvbnRhaW5lciwgdXNlRXhpc3Rpbmc6IE5nRm9ybSB9XVxufSlcbmV4cG9ydCBjbGFzcyBGaWVsZFJlZmVyZW5jZSBleHRlbmRzIEZpZWxkQWJzdHJhY3QgaW1wbGVtZW50cyBPbkluaXQge1xuICBpbnB1dDogYW55O1xuICBkcm9wZG93bjogSFRNTEVsZW1lbnQ7XG4gIGRyb3Bkb3duU2Nyb2xsQ29udGFpbmVyOiBIVE1MRWxlbWVudDtcbiAgc2VhcmNoaW5nOiBib29sZWFuO1xuICBzZWFyY2hSZXNvdXJjZVR5cGU6IGFueSA9IHt9O1xuICBzZWFyY2hUZXh0OiBzdHJpbmc7XG4gIHNlYXJjaFJlc3VsdHM6IEFycmF5PGFueT47XG4gIHNlYXJjaEVycm9yOiBhbnk7XG4gIGFjdGl2ZVN1Z2dlc3Rpb25JbmRleDogbnVtYmVyO1xuICBzZWFyY2hSZXNvdXJjZVR5cGVzU2NvcGU6IHN0cmluZztcbiAgc2VhcmNoVGV4dENoYW5nZWQ6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcbiAgaXNDcmVhdGFibGUgPSBmYWxzZTtcbiAgdmFsdWU6IGFueTtcbiAgaXNQb2x5bW9ycGhpYzogYm9vbGVhbjtcbiAgaXNTZWFyY2hhYmxlOiBib29sZWFuO1xuICBtdWx0aXBsZTogYm9vbGVhbjtcbiAgdnI6IE1ldGFSZXNvdXJjZVNlcnZpY2U7XG4gIGV4dGVybmFsTGluazogc3RyaW5nO1xuICBkcm9wZG93blZpc2libGUgPSBmYWxzZTtcbiAgc2VhcmNoUmVzb3VyY2VUeXBlTWV0YTogYW55ID0ge1xuICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgIG5hbWU6ICdyZXNvdXJjZVR5cGUnLFxuICAgIGxhYmVsOiAnVHlwZScsXG4gICAgb3B0aW9uczogW10sIC8vIHsgbGFiZWw6ICctLSBBbGwgdHlwZXMgLS0nIH1dLFxuICAgIHN0YW5kYWxvbmU6IHRydWVcbiAgfTtcbiAgZmlsdGVyZWRTdWdnZXN0aW9uczogQXJyYXk8YW55PiA9IFtdO1xuICBwbGFjZUhvbGRlckxhYmVsOiBzdHJpbmc7XG4gIGFzeW5jU3VnZ2VzdGlvbnM6IEFycmF5PGFueT47XG4gIHNtYXJ0U3VnZ2VzdGlvbnM6IEFycmF5PGFueT4gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlZmVyZW5jZVNlcnZpY2U6IE1ldGFSZWZlcmVuY2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgbWV0YVJlc291cmNlOiBNZXRhUmVzb3VyY2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgbWV0YU1zZ1NlcnZpY2U6IE1ldGFNc2dTZXJ2aWNlLFxuICAgIHByaXZhdGUgbWV0YUNvbnRleHQ6IE1ldGFDb250ZXh0U2VydmljZSxcbiAgICBwcml2YXRlIG1ldGFUcmFja2VyOiBNZXRhVHJhY2tlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmXG4gICkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBnZXQgZGlzYWJsZWQoKSB7XG4gICAgY29uc3Qgc3VwZXJEaXNhYmxlZCA9IHRoaXMubG9naWNhbERpc2FibGVkIHx8IHRoaXMudmFsaWRhdGlvbnMuZGlzYWJsZWQgfHwgdGhpcy5tZXRhLmRpc2FibGVkID09PSB0cnVlXG4gICAgICB8fCAodGhpcy5tZXRhLnVwZGF0YWJsZSA9PT0gZmFsc2UgJiYgdGhpcy5pc1BlcnNpc3RlZFBhcmVudCk7XG4gICAgdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGVNZXRhLmRpc2FibGVkID0gc3VwZXJEaXNhYmxlZDtcbiAgICByZXR1cm4gc3VwZXJEaXNhYmxlZDtcbiAgfVxuXG4gIGdldCBzaG93VHlwZXMoKSB7XG4gICAgcmV0dXJuICh0eXBlb2YgKHRoaXMubWV0YS5zaG93VHlwZXMpICE9PSAndW5kZWZpbmVkJykgPyB0aGlzLm1ldGEuc2hvd1R5cGVzIDogdHJ1ZTtcbiAgfVxuXG4gIGdldCBzdWdnZXN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5zbWFydFN1Z2dlc3Rpb25zLmNvbmNhdChcbiAgICAgICF0aGlzLnNlYXJjaFJlc291cmNlVHlwZS5yZXNvdXJjZVR5cGUgP1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICAgICAodGhpcy5hc3luY1N1Z2dlc3Rpb25zIHx8IHRoaXMubWV0YS5zdWdnZXN0aW9ucyB8fCBbXSkgOiAodGhpcy5hc3luY1N1Z2dlc3Rpb25zIHx8IHRoaXMubWV0YS5zdWdnZXN0aW9ucyB8fCBbXSkuZmlsdGVyKChzKSA9PiBzLnR5cGUgPT09IHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlLnJlc291cmNlVHlwZSlcbiAgICApO1xuICB9XG5cbiAgZ2V0IGhhc0FwcGVuZEJ1dHRvbigpIHtcbiAgICBpZiAoIXRoaXMubXVsdGlwbGUgJiYgdGhpcy5tb2RlbCkge1xuICAgICAgaWYgKHRoaXMuaXNQb2x5bW9ycGhpYykge1xuICAgICAgICBmb3IgKGNvbnN0IHJlZiBvZiB0aGlzLm1ldGFSZWZlcmVuY2UpIHtcbiAgICAgICAgICBpZiAoKHJlZi5uYW1lIHx8IHJlZi5yZXNvdXJjZVR5cGUpID09PSAodGhpcy5tb2RlbC50eXBlIHx8IHRoaXMubW9kZWwucmVzb3VyY2VUeXBlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlZi51cGRhdGFibGUgfHwgKHJlZi5jcmVhdGFibGUgJiYgcmVmLnVwZGF0YWJsZSAhPT0gZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0YVJlZmVyZW5jZS51cGRhdGFibGUgfHwgKHRoaXMubWV0YVJlZmVyZW5jZS5jcmVhdGFibGUgJiYgdGhpcy5tZXRhUmVmZXJlbmNlLnVwZGF0YWJsZSAhPT0gZmFsc2UpOyAvLyBWR0lTLTY5MTFcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMubWV0YVJlZmVyZW5jZSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIC8vIHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlc1Njb3BlID0gdGhpcy5tZXRhUmVmZXJlbmNlLm1hcChydCA9PiBydC5uYW1lKS5qb2luKCcsJyk7XG4gICAgICAvLyB9LCAwKTtcbiAgICAgIGZvciAoY29uc3QgcnQgb2YgdGhpcy5tZXRhUmVmZXJlbmNlKSB7XG4gICAgICAgIGlmIChydC5oaWRkZW4gIT09IGZhbHNlICYmIHJ0LmNyZWF0YWJsZSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLm1ldGFSZWZlcmVuY2UuY3JlYXRhYmxlO1xuICAgIH1cbiAgfVxuXG4gIGdldCByZXNvdXJjZVNlcnZpY2UoKSB7XG4gICAgaWYgKCF0aGlzLm1ldGFSZXNvdXJjZVNlcnZpY2UpIHtcbiAgICAgIGNvbnN0IG1ldGFSZXNvdXJjZUNvbmZpZzogSU1ldGFSZXNvdXJjZUNvbmZpZyA9IHtcbiAgICAgICAgaW50ZWdyYXRpb25Db2RlOiB0aGlzLmludGVncmF0aW9uQ29kZSxcbiAgICAgICAgcmVzb3VyY2VUeXBlOiB0aGlzLnJlc291cmNlVHlwZVxuICAgICAgfTtcbiAgICAgIHRoaXMubWV0YVJlc291cmNlU2VydmljZSA9IHRoaXMubWV0YVJlc291cmNlLm5ldyhtZXRhUmVzb3VyY2VDb25maWcpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5tZXRhUmVzb3VyY2VTZXJ2aWNlO1xuICB9XG5cbiAgZ2V0IG1ldGFSZWZlcmVuY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0YS5yZWZlcmVuY2UgfHwge307XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLm11bHRpcGxlID0gKHRoaXMubWV0YS50eXBlID09PSAnbXVsdGlyZWZlcmVuY2UnKSB8fCB0aGlzLm1ldGEubXVsdGlwbGU7XG4gICAgdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGVNZXRhLmxhYmVsID0gdGhpcy5tZXRhLmxhYmVsO1xuICAgIGlmICghdGhpcy5tZXRhLnZhbHVlVHlwZSkge1xuICAgICAgLy8gdGhpcy5tZXRhLnZhbHVlVHlwZSA9ICdvYmplY3QnO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMubWV0YSwgJ3ZhbHVlVHlwZScsIHtcbiAgICAgICAgdmFsdWU6ICdvYmplY3QnXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMubWV0YVJlZmVyZW5jZSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICB0aGlzLmlzUG9seW1vcnBoaWMgPSB0cnVlO1xuICAgICAgdGhpcy5pc1NlYXJjaGFibGUgPSB0cnVlO1xuICAgICAgdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGVzU2NvcGUgPSB0aGlzLm1ldGFSZWZlcmVuY2UuZmlsdGVyKHJ0ID0+IHJ0LmhpZGRlbiAhPT0gdHJ1ZSkubWFwKHJ0ID0+IHJ0Lm5hbWUpLmpvaW4oJywnKTtcbiAgICAgIGZvciAoY29uc3QgcnQgb2YgdGhpcy5tZXRhUmVmZXJlbmNlKSB7XG4gICAgICAgIGlmIChydC5jcmVhdGFibGUpIHtcbiAgICAgICAgICB0aGlzLmlzQ3JlYXRhYmxlID0gdHJ1ZTtcbiAgICAgICAgICBpZiAodHlwZW9mIChydC5zZWFyY2hhYmxlKSAhPT0gJ3VuZGVmaW5lZCcgJiYgIXJ0LnNlYXJjaGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuaXNTZWFyY2hhYmxlID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLm1ldGFSZWZlcmVuY2UuZm9yRWFjaCgocikgPT4ge1xuICAgICAgICBpZiAoIXIuaGlkZGVuKSB7XG4gICAgICAgICAgdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGVNZXRhLm9wdGlvbnMucHVzaCh7IGlkOiByLm5hbWUsIGxhYmVsOiByLmxhYmVsIHx8IHIubmFtZSB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNTZWFyY2hhYmxlID0gdHlwZW9mICh0aGlzLm1ldGFSZWZlcmVuY2Uuc2VhcmNoYWJsZSkgPT09ICd1bmRlZmluZWQnIHx8IHRoaXMubWV0YVJlZmVyZW5jZS5zZWFyY2hhYmxlO1xuICAgICAgdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGUgPSB0aGlzLm1ldGFSZWZlcmVuY2U7XG4gICAgICB0aGlzLnNlYXJjaFJlc291cmNlVHlwZXNTY29wZSA9IHRoaXMubWV0YVJlZmVyZW5jZS5uYW1lIHx8IHRoaXMubWV0YVJlZmVyZW5jZS5yZXNvdXJjZVR5cGU7XG4gICAgICB0aGlzLmlzQ3JlYXRhYmxlID0gdGhpcy5tZXRhUmVmZXJlbmNlLmNyZWF0YWJsZTtcbiAgICB9XG4gICAgdGhpcy5idWlsZFBsYWNlaG9sZGVyTGFiZWwoKTtcbiAgICB0aGlzLnNlYXJjaFRleHRDaGFuZ2VkLnBpcGUoZGVib3VuY2VUaW1lKDMwMCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpLnN1YnNjcmliZSgodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gdmFsdWU7XG4gICAgICB0aGlzLnNlYXJjaCgpO1xuICAgIH0pO1xuICAgIGNvbnN0IG9yaWdWYWx1ZSA9IHRoaXMucGFyZW50W3RoaXMubWV0YS5uYW1lXTtcblxuICAgIC8vIHRoaXMuc3VnZ2VzdGlvbnMgPSB0aGlzLm1ldGEuc3VnZ2VzdGlvbnM7IC8vIFRPRE8gZmlsdGVyIGJ5IGRlZmF1bHQgdHlwZVxuICAgIC8vIGNvbnNvbGUubG9nKCd0aGlzLnN1Z2dlc3Rpb25zJywgdGhpcy5zdWdnZXN0aW9ucyk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5wYXJlbnQsIHRoaXMubWV0YS5uYW1lLCB7XG4gICAgICBzZXQ6ICh2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdiBvZiB2YWx1ZSkge1xuICAgICAgICAgICAgICBpZiAoIXRoaXMubW9kZWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsID0gW107XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiAodikgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIGlkOiB2LFxuICAgICAgICAgICAgICAgICAgbGFiZWw6IHYsXG4gICAgICAgICAgICAgICAgICB0eXBlOiB0aGlzLm1ldGFSZWZlcmVuY2UubmFtZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlID0gbnVsbDsgLy8gcHJvdGVjdCB3aGVuIHZhbHVlIGZyb20gc2VydmVyIGlzIG5vdCBhcnJheVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mICh2YWx1ZSkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHtcbiAgICAgICAgICAgICAgaWQ6IHZhbHVlLFxuICAgICAgICAgICAgICBsYWJlbDogdmFsdWUsIC8vIGNvdWxkIGJlIGZvdW5kIHdpdGggZXh0cmEgY2FsbFxuICAgICAgICAgICAgICB0eXBlOiB0aGlzLm1ldGFSZWZlcmVuY2UubmFtZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gdmFsdWUgP1xuICAgICAgICAgICAgKCghdmFsdWUubGFiZWwgfHwgdmFsdWUubGFiZWwgPT09ICcgJykgPyBgTi9BICgke3ZhbHVlLnR5cGV9IyR7dmFsdWUuaWR9KWAgOiB2YWx1ZS5sYWJlbCB8fCB2YWx1ZSkgOlxuICAgICAgICAgICAgJyc7XG4gICAgICAgICAgLy8gaWYgKHRoaXMuaXNQb2x5bW9ycGhpYyAmJiB0aGlzLm1vZGVsKSB7IC8vVE9ETyBzaG93IG9yIG5vdD9cbiAgICAgICAgICAvLyAgIHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlID0gdGhpcy5tZXRhUmVmZXJlbmNlLmZpbmQoKHJ0KT0+IHtcbiAgICAgICAgICAvLyAgICAgcmV0dXJuIHJ0Lm5hbWUgPT09IHRoaXMubW9kZWwudHlwZTtcbiAgICAgICAgICAvLyAgIH0pO1xuICAgICAgICAgIC8vIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1vZGVsID0gdmFsdWU7XG4gICAgICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm1vZGVsVG9WYWx1ZSh2YWx1ZSwgdGhpcy5tZXRhLnZhbHVlVHlwZSB8fCAnb2JqZWN0Jyk7XG4gICAgICAgICAgdGhpcy5idWlsZEV4dGVybmFsTGluaygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSAhdGhpcy5tb2RlbCA/IHRoaXMubW9kZWwgOiB0aGlzLm1vZGVsLm1hcCgobSkgPT4gdGhpcy5tb2RlbFRvVmFsdWUobSwgdGhpcy5tZXRhLnZhbHVlVHlwZSB8fCAnb2JqZWN0JykpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWV0YS4kb3B0aW9uYWwgPSB0aGlzLmlzT3B0aW9uYWw7XG4gICAgICB9LFxuICAgICAgZ2V0OiAoKSA9PiB0aGlzLnZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogdGhpcy5zZW5kVG9TZXJ2ZXIsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBpZiAob3JpZ1ZhbHVlKSB7XG4gICAgICB0aGlzLnBhcmVudFt0aGlzLm1ldGEubmFtZV0gPSBvcmlnVmFsdWU7XG4gICAgfVxuICAgIGlmICghdGhpcy5tb2RlbCAmJiB0aGlzLmRlZmF1bHQpIHtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIHRoaXMucGFyZW50W3RoaXMubWV0YS5uYW1lXSA9IFtdO1xuICAgICAgICBpZiAodGhpcy5kZWZhdWx0Lmxlbmd0aCkge1xuICAgICAgICAgIGZvciAoY29uc3QgZHYgb2YgdGhpcy5kZWZhdWx0KSB7XG4gICAgICAgICAgICBpZiAoKGR2LmlkIHx8IGR2LnZhbHVlKSAmJiBkdi50eXBlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGl0ZW06IGFueSA9IHtcbiAgICAgICAgICAgICAgICBpZDogZHYuaWQgfHwgZHYudmFsdWUsXG4gICAgICAgICAgICAgICAgbGFiZWw6IGR2LmxhYmVsIHx8IGR2LmlkIHx8IGR2LnZhbHVlLFxuICAgICAgICAgICAgICAgIHR5cGU6IGR2LnR5cGVcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgaWYgKGR2LmV4dGVybmFsTGluaykge1xuICAgICAgICAgICAgICAgIGl0ZW0uZXh0ZXJuYWxMaW5rID0gZHYuZXh0ZXJuYWxMaW5rO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMucGFyZW50W3RoaXMubWV0YS5uYW1lXS5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMucGFyZW50W3RoaXMubWV0YS5uYW1lXS5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHQuaWQgJiYgdGhpcy5kZWZhdWx0LmxhYmVsICYmIHRoaXMuZGVmYXVsdC50eXBlKSB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpdGVtOiBhbnkgPSB7XG4gICAgICAgICAgICAgIGlkOiB0aGlzLmRlZmF1bHQuaWQgfHwgdGhpcy5kZWZhdWx0LnZhbHVlLFxuICAgICAgICAgICAgICBsYWJlbDogdGhpcy5kZWZhdWx0LmxhYmVsIHx8IHRoaXMuZGVmYXVsdC5pZCB8fCB0aGlzLmRlZmF1bHQudmFsdWUsXG4gICAgICAgICAgICAgIHR5cGU6IHRoaXMuZGVmYXVsdC50eXBlLFxuICAgICAgICAgICAgICBzbWFydDogdHJ1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmICh0aGlzLmRlZmF1bHQuZXh0ZXJuYWxMaW5rKSB7XG4gICAgICAgICAgICAgIGl0ZW0uZXh0ZXJuYWxMaW5rID0gdGhpcy5kZWZhdWx0LmV4dGVybmFsTGluaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucGFyZW50W3RoaXMubWV0YS5uYW1lXSA9IGl0ZW07XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCchISFkZWZhdWx0IHZhbHVlIGlzIG5vdCB2YWxpZCBmb3JtYXQnLCB0aGlzLm1ldGEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiAodGhpcy5tZXRhLmRpc2FibGVkKSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmICh0eXBlb2YgKHRoaXMubWV0YS5kaXNhYmxlZCkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiBPYmplY3Qua2V5cyh0aGlzLm1ldGEuZGlzYWJsZWQpKSB7XG4gICAgICAgICAgY29uc3QgcHJvcHMgPSBwLnNwbGl0KCcuJyk7XG4gICAgICAgICAgaWYgKHR5cGVvZiAodGhpcy5wYXJlbnRbcHJvcHNbMF1dKSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGxldCB2YWwgPSB0aGlzLnBhcmVudDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBwcm9wcykge1xuICAgICAgICAgICAgICB2YWwgPSB2YWxbcHJvcF07XG4gICAgICAgICAgICAgIGlmICghdmFsKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2YWwgPT09IHRoaXMubWV0YS5kaXNhYmxlZFtwXSkge1xuICAgICAgICAgICAgICB0aGlzLmxvZ2ljYWxEaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5wYXJlbnRDaGFuZ2VTdWJqZWN0LnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5oYXNPd25Qcm9wZXJ0eShwcm9wc1swXSkpIHtcbiAgICAgICAgICAgICAgbGV0IHZhbCA9IHRoaXMucGFyZW50O1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IHByb3Agb2YgcHJvcHMpIHtcbiAgICAgICAgICAgICAgICB2YWwgPSB2YWxbcHJvcF07XG4gICAgICAgICAgICAgICAgaWYgKCF2YWwpIHtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAodmFsID09PSB0aGlzLm1ldGEuZGlzYWJsZWRbcF0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2ljYWxEaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmxvZ2ljYWxEaXNhYmxlZDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWV0YS5hdXRvICYmIHRoaXMubWV0YS5hdXRvLnNlYXJjaCkge1xuICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gdGhpcy5tZXRhLmF1dG8uc2VhcmNoLnBhcmFtcztcbiAgICAgIGlmIChzZWFyY2hQYXJhbXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBwYXIgb2YgT2JqZWN0LmtleXMoc2VhcmNoUGFyYW1zKSkge1xuICAgICAgICAgIGNvbnN0IHByb3BzID0gc2VhcmNoUGFyYW1zW3Bhcl0uc3BsaXQoJy4nKTtcbiAgICAgICAgICBjb25zdCBmaWVsZCA9IHByb3BzWzBdO1xuICAgICAgICAgIGNvbnN0IHByb3AgPSBwcm9wc1sxXTtcbiAgICAgICAgICBsZXQgcGFyVmFsdWUgPSB0aGlzLnBhcmVudFtmaWVsZF07XG4gICAgICAgICAgaWYgKHBhclZhbHVlKSB7XG4gICAgICAgICAgICBpZiAocHJvcCkge1xuICAgICAgICAgICAgICBwYXJWYWx1ZSA9IHBhclZhbHVlW3Byb3BdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBhclZhbHVlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHt9O1xuICAgICAgICAgICAgICBwYXJhbXNbcGFyXSA9IHBhclZhbHVlO1xuICAgICAgICAgICAgICB0aGlzLnNlYXJjaEF1dG9TdWdnZXN0aW9ucyhwYXJhbXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnBhcmVudENoYW5nZVN1YmplY3Quc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmhhc093blByb3BlcnR5KGZpZWxkKSkge1xuICAgICAgICAgICAgICBpZiAodmFsdWVbZmllbGRdKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb3ApIHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlW2ZpZWxkXSA9IHZhbHVlW2ZpZWxkXVtwcm9wXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyYW1zID0ge307XG4gICAgICAgICAgICAgICAgcGFyYW1zW3Bhcl0gPSB2YWx1ZVtmaWVsZF07XG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hBdXRvU3VnZ2VzdGlvbnMocGFyYW1zKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2xlYXJTZWFyY2hSZXNvdXJjZVR5cGUoKSB7XG4gICAgdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGUgPSB7fTtcbiAgICB0aGlzLm9uU2VhcmNoUmVzb3VyY2VUeXBlQ2hhbmdlZCgpO1xuICB9XG5cbiAgb25TZWFyY2hSZXNvdXJjZVR5cGVDaGFuZ2VkKHJlc291cmNlVHlwZT8pIHtcbiAgICBpZiAoIXJlc291cmNlVHlwZSB8fCAhcmVzb3VyY2VUeXBlLmlkKSB7XG4gICAgICB0aGlzLnNlYXJjaFJlc291cmNlVHlwZS5yZXNvdXJjZVR5cGUgPSBudWxsO1xuICAgICAgdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGVzU2NvcGUgPSAodGhpcy5tZXRhUmVmZXJlbmNlIHx8IFtdKS5maWx0ZXIocnQgPT4gcnQuaGlkZGVuICE9PSB0cnVlKS5tYXAocnQgPT4gcnQubmFtZSkuam9pbignLCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlYXJjaFJlc291cmNlVHlwZS5yZXNvdXJjZVR5cGUgPSByZXNvdXJjZVR5cGUuaWQ7XG4gICAgICB0aGlzLnNlYXJjaFJlc291cmNlVHlwZXNTY29wZSA9IHJlc291cmNlVHlwZS5pZDtcbiAgICB9XG4gICAgdGhpcy5idWlsZFBsYWNlaG9sZGVyTGFiZWwoKTtcbiAgICB0aGlzLmZvY3VzKCk7XG4gICAgaWYgKCF0aGlzLm1vZGVsICYmICF0aGlzLnNlYXJjaFRleHQpIHsgLy8gZmlsdGVyIHN1Z2dlc3Rpb25zIGJ5IHR5cGVcbiAgICAgIHRoaXMuZmlsdGVyZWRTdWdnZXN0aW9ucyA9ICFyZXNvdXJjZVR5cGUgPyAodGhpcy5tZXRhLnN1Z2dlc3Rpb25zIHx8IFtdKSA6ICh0aGlzLm1ldGEuc3VnZ2VzdGlvbnMgfHwgW10pLmZpbHRlcihcbiAgICAgICAgKHMpID0+IHMudHlwZSA9PT0gcmVzb3VyY2VUeXBlLmlkXG4gICAgICApO1xuICAgIH0gZWxzZSB7IC8vIHJlZ3VsYXIgc2VhcmNoIChyZXR1cm4gc2NvcGVkIHJlc3VsdHMpXG4gICAgICBpZiAoIXRoaXMubW9kZWwpIHtcbiAgICAgICAgdGhpcy5zZWFyY2goKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWFyY2hSZXN1bHRzICYmIHJlc291cmNlVHlwZSkge1xuICAgICAgICB0aGlzLnNlYXJjaFJlc3VsdHMgPSB0aGlzLnNlYXJjaFJlc3VsdHMuZmlsdGVyKChzKSA9PiBzLnR5cGUgPT09IHJlc291cmNlVHlwZS5pZCk7XG4gICAgICB9XG4gICAgfVxuICAgIGRlbGV0ZSB0aGlzLnNlYXJjaEVycm9yO1xuICB9XG5cbiAgb25TZWFyY2hUZXh0Q2hhbmdlZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZWFyY2hUZXh0Q2hhbmdlZC5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIHNlYXJjaCgpIHtcbiAgICB0aGlzLnNlYXJjaGluZyA9IHRydWU7XG4gICAgLy8gdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXg7XG4gICAgaWYgKCF0aGlzLnNlYXJjaFRleHQgfHwgdGhpcy5zZWFyY2hUZXh0Lmxlbmd0aCA8IDIpIHtcbiAgICAgIHRoaXMuc2VhcmNoaW5nID0gZmFsc2U7XG4gICAgICBkZWxldGUgdGhpcy5zZWFyY2hSZXN1bHRzO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzaG93U2VhcmNoUmVzdWx0cyA9IChyZXN1bHRzKSA9PiB7XG4gICAgICB0aGlzLnNlYXJjaGluZyA9IGZhbHNlO1xuICAgICAgZGVsZXRlIHRoaXMuc2VhcmNoRXJyb3I7XG4gICAgICBkZWxldGUgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXg7XG4gICAgICBpZiAoIXJlc3VsdHMgfHwgIShyZXN1bHRzIGluc3RhbmNlb2YgQXJyYXkpKSB7XG4gICAgICAgIHJlc3VsdHMgPSBbXTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLm1ldGEuYWNjZXB0TmV3ICYmIHRoaXMubWV0YS5hY2NlcHROZXcudHlwZSAmJiB0aGlzLm1ldGEuYWNjZXB0TmV3LnBhdHRlcm4pIHtcbiAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKHRoaXMubWV0YS5hY2NlcHROZXcucGF0dGVybik7XG4gICAgICAgIGlmIChyZWdleC50ZXN0KHRoaXMuc2VhcmNoVGV4dCkpIHtcbiAgICAgICAgICByZXN1bHRzLnVuc2hpZnQoeyBpZDogbnVsbCwgbGFiZWw6IHRoaXMuc2VhcmNoVGV4dCwgdHlwZTogdGhpcy5tZXRhLmFjY2VwdE5ldy50eXBlIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnNlYXJjaFJlc3VsdHMgPSByZXN1bHRzLm1hcCgocikgPT4geyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGFycm93LWJvZHktc3R5bGVcbiAgICAgICAgcmV0dXJuIHsgaWQ6IHIuaWQsIGxhYmVsOiByLmxhYmVsLCB0eXBlOiByLnR5cGUgfHwgci5yZXNvdXJjZVR5cGUgfHwgdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGUubmFtZSwgZXh0ZXJuYWxMaW5rOiByLmV4dGVybmFsTGluayB9O1xuICAgICAgfSk7XG4gICAgICBpZiAoIS9WbHQtZHJvcGRvd24tLWV4cGFuZGVkLy50ZXN0KHRoaXMuZHJvcGRvd24uY2xhc3NOYW1lKSkge1xuICAgICAgICB0aGlzLnNob3dEcm9wZG93bigpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAodGhpcy5tZXRhLnNlYXJjaCkge1xuICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gdGhpcy5tZXRhLnNlYXJjaC5wYXJhbXMgfHwge307XG4gICAgICBsZXQgc2VhcmNoVXJsID0gYC9maWVsZHMvJHt0aGlzLm1ldGEubmFtZX0vc2VhcmNoYDtcbiAgICAgIGlmICh0aGlzLm1ldGEuc2VhcmNoLnVybCkge1xuICAgICAgICBzZWFyY2hVcmwgPSB0aGlzLm1ldGEuc2VhcmNoLnVybC5yZXBsYWNlKC9cXCR7XFxzKihbXFx3Ll0rKVxccyp9L2csIChtYXRjaCwga2V5KSA9PiB7XG4gICAgICAgICAgaWYgKHNlYXJjaFBhcmFtcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IHNlYXJjaFBhcmFtc1trZXldLnNwbGl0KCcuJyk7XG4gICAgICAgICAgICBjb25zdCBmaWVsZCA9IHByb3BzWzBdO1xuICAgICAgICAgICAgY29uc3QgcHJvcCA9IHByb3BzWzFdO1xuICAgICAgICAgICAgZGVsZXRlIHNlYXJjaFBhcmFtc1trZXldOyAvLyBpZiBpdCBpcyBVUkwgcGFyYW0sIHJlbW92ZSBpdCBhcyBxdWVyeSBwYXJhbVxuICAgICAgICAgICAgbGV0IHBhclZhbHVlID0gdGhpcy5wYXJlbnRbZmllbGRdO1xuICAgICAgICAgICAgaWYgKHBhclZhbHVlKSB7XG4gICAgICAgICAgICAgIGlmIChwcm9wKSB7XG4gICAgICAgICAgICAgICAgcGFyVmFsdWUgPSBwYXJWYWx1ZVtwcm9wXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAocGFyVmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyVmFsdWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgcCBvZiBPYmplY3Qua2V5cyhzZWFyY2hQYXJhbXMpKSB7XG4gICAgICAgIHNlYXJjaFVybCArPSBgJHtzZWFyY2hVcmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJ30ke2VuY29kZVVSSUNvbXBvbmVudChwKX09JHtlbmNvZGVVUklDb21wb25lbnQoc2VhcmNoUGFyYW1zW3BdKX1gO1xuICAgICAgfVxuICAgICAgc2VhcmNoVXJsICs9IGAke3NlYXJjaFVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnfXE9JHtlbmNvZGVVUklDb21wb25lbnQodGhpcy5zZWFyY2hUZXh0KX1gO1xuICAgICAgdGhpcy5zZWFyY2hpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5yZXNvdXJjZVNlcnZpY2UuZ2V0QnlQYXRoKHNlYXJjaFVybCkuc3Vic2NyaWJlKChyZXN1bHRzKSA9PiB7XG4gICAgICAgIHNob3dTZWFyY2hSZXN1bHRzKHJlc3VsdHMpO1xuICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnNlYXJjaGluZztcbiAgICAgICAgdGhpcy5zZWFyY2hSZXN1bHRzID0gW107XG4gICAgICAgIHRoaXMuc2VhcmNoRXJyb3IgPSBlcnJvci5lcnJvciA/IGVycm9yLmVycm9yLm1lc3NhZ2UgfHwgZXJyb3IuZXJyb3IgOiBlcnJvci5tZXNzYWdlIHx8IGVycm9yO1xuICAgICAgICBpZiAoIS9WbHQtZHJvcGRvd24tLWV4cGFuZGVkLy50ZXN0KHRoaXMuZHJvcGRvd24uY2xhc3NOYW1lKSkge1xuICAgICAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIXRoaXMudnIpIHtcbiAgICAgICAgdGhpcy52ciA9IHRoaXMubWV0YVJlc291cmNlLm5ldyh7XG4gICAgICAgICAgaW50ZWdyYXRpb25Db2RlOiB0aGlzLmludGVncmF0aW9uQ29kZSxcbiAgICAgICAgICByZXNvdXJjZVR5cGU6IG51bGxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLnZyLnNlYXJjaEludGVncmF0aW9uKFxuICAgICAgICB0aGlzLnNlYXJjaFRleHQsXG4gICAgICAgIHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlLm5hbWUgfHwgdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGVzU2NvcGVcbiAgICAgICkuc3Vic2NyaWJlKChyZXN1bHRzOiBBcnJheTxhbnk+KSA9PiB7XG4gICAgICAgIHNob3dTZWFyY2hSZXN1bHRzKHJlc3VsdHMpO1xuICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMuc2VhcmNoaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2VhcmNoUmVzdWx0cyA9IFtdO1xuICAgICAgICB0aGlzLnNlYXJjaEVycm9yID0gZXJyb3IuZXJyb3IgPyBlcnJvci5lcnJvci5tZXNzYWdlIHx8IGVycm9yLmVycm9yIDogZXJyb3IubWVzc2FnZSB8fCBlcnJvcjtcbiAgICAgICAgaWYgKCEvVmx0LWRyb3Bkb3duLS1leHBhbmRlZC8udGVzdCh0aGlzLmRyb3Bkb3duLmNsYXNzTmFtZSkpIHtcbiAgICAgICAgICB0aGlzLnNob3dEcm9wZG93bigpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvbkFjdGl2YXRlZChldikge1xuICAgIC8vIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgLy8gZXYuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5pbnB1dCA9IGV2LnNyY0VsZW1lbnQ7XG4gICAgaWYgKCF0aGlzLmRyb3Bkb3duKSB7XG4gICAgICAvLyB0aGlzLmRyb3Bkb3duID0gZXYuc3JjRWxlbWVudC5wYXJlbnROb2RlLnBhcmVudE5vZGU7XG4gICAgICB0aGlzLmRyb3Bkb3duID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmRyb3Bkb3duLXdyYXBwZXInKTtcbiAgICB9XG4gICAgdGhpcy5zaG93RHJvcGRvd24oKTtcbiAgfVxuXG4gIG9uQmx1cihldikge1xuICAgIGxldCBpbnRlcm5hbENvbnRyb2wgPSBmYWxzZTtcbiAgICBpZiAoZXYucmVsYXRlZFRhcmdldCkge1xuICAgICAgaWYgKCF0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhldi5yZWxhdGVkVGFyZ2V0KSkge1xuICAgICAgICB0aGlzLmRpc21pc3NEcm9wZG93bigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW50ZXJuYWxDb250cm9sID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMua2V5TGlzdGVuZXJBY3RpdmUgJiYgIWludGVybmFsQ29udHJvbCkge1xuICAgICAgdGhpcy5pbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5rZXlkb3duKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMua2V5TGlzdGVuZXJBY3RpdmUpIHtcbiAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuY2xpY2tvdXQpO1xuICAgICAgICB9XG4gICAgICB9LCA0MDApO1xuICAgICAgZGVsZXRlIHRoaXMua2V5TGlzdGVuZXJBY3RpdmU7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlU2VsZWN0aW9uKGV2Pykge1xuICAgIGlmIChldikge1xuICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgICBpZiAodGhpcy5tb2RlbCAmJiAhdGhpcy5zdWdnZXN0aW9ucy5maW5kKChzKSA9PiAocy5pZCA9PT0gdGhpcy5tb2RlbC5pZCAmJiBzLnR5cGUgPT09IHRoaXMubW9kZWwudHlwZSkpKSB7XG4gICAgICB0aGlzLnNtYXJ0U3VnZ2VzdGlvbnMucHVzaCh7XG4gICAgICAgIGlkOiB0aGlzLm1vZGVsLmlkLFxuICAgICAgICBsYWJlbDogdGhpcy5tb2RlbC5sYWJlbCxcbiAgICAgICAgdHlwZTogdGhpcy5tb2RlbC50eXBlLFxuICAgICAgICBzbWFydDogdHJ1ZVxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMubWV0YVRyYWNrZXIuZW1pdCh0aGlzLmJ1aWxkVHJhY2tFdmVudCgnUkVNT1ZFJykpO1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgfVxuXG4gIG9uU3VnZ2VzdGlvblNlbGVjdChldiwgc3VnZ2VzdGlvbikge1xuICAgIGlmICghc3VnZ2VzdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuZm9jdXMoKTtcbiAgICB0aGlzLm1ldGFUcmFja2VyLmVtaXQodGhpcy5idWlsZFRyYWNrRXZlbnQoJ1NFTEVDVCcpKTtcbiAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgaWYgKCF0aGlzLm1vZGVsKSB7XG4gICAgICAgIHRoaXMubW9kZWwgPSBbXTtcbiAgICAgIH1cbiAgICAgIGxldCBleGlzdGluZ0VudHJ5O1xuICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLm1vZGVsKSB7XG4gICAgICAgIGlmIChzdWdnZXN0aW9uLmlkICYmIChlbnRyeS5pZCA9PT0gc3VnZ2VzdGlvbi5pZCkpIHtcbiAgICAgICAgICBleGlzdGluZ0VudHJ5ID0gZW50cnk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSBpZiAoc3VnZ2VzdGlvbi5sYWJlbCA9PT0gZW50cnkubGFiZWwpIHsgLy8gY3JlYXRlIG5ldyAoZ29vZ2xlIGVtYWlscylcbiAgICAgICAgICBleGlzdGluZ0VudHJ5ID0gZW50cnk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghZXhpc3RpbmdFbnRyeSkge1xuICAgICAgICB0aGlzLm1vZGVsLnB1c2goc3VnZ2VzdGlvbik7XG4gICAgICB9XG4gICAgICB0aGlzLm9uTW9kZWxDaGFuZ2UodGhpcy5tb2RlbCk7XG4gICAgICBkZWxldGUgdGhpcy5zZWFyY2hUZXh0O1xuICAgICAgdGhpcy5zZWFyY2hUZXh0Q2hhbmdlZC5uZXh0KHRoaXMuc2VhcmNoVGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubW9kZWwgPSBzdWdnZXN0aW9uO1xuICAgICAgdGhpcy5leHRlcm5hbExpbmsgPSBzdWdnZXN0aW9uLmV4dGVybmFsTGluaztcbiAgICAgIHRoaXMub25Nb2RlbENoYW5nZShzdWdnZXN0aW9uKTtcbiAgICAgIHRoaXMuc2VhcmNoVGV4dCA9IHN1Z2dlc3Rpb24ubGFiZWw7XG4gICAgICB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCA9ICh0aGlzLnNlYXJjaFJlc3VsdHMgfHwgdGhpcy5zdWdnZXN0aW9ucykuaW5kZXhPZihzdWdnZXN0aW9uKTtcbiAgICB9XG4gICAgdGhpcy5kaXNtaXNzRHJvcGRvd24oKTtcbiAgICAvLyBpZiAodGhpcy5pc1BvbHltb3JwaGljKSB7XG4gICAgLy8gICB0aGlzLnNlYXJjaFJlc291cmNlVHlwZSA9IHRoaXMubWV0YVJlZmVyZW5jZS5maW5kKChydCk9PiB7XG4gICAgLy8gICAgIHJldHVybiBydC5uYW1lID09PSBzdWdnZXN0aW9uLnR5cGU7XG4gICAgLy8gICB9KTtcbiAgICAvLyB9XG4gIH1cblxuICBzaG93RHJvcGRvd24oKSB7XG4gICAgdGhpcy5kcm9wZG93blZpc2libGUgPSB0cnVlO1xuICAgIHRoaXMuZHJvcGRvd24uY2xhc3NMaXN0LmFkZCgnVmx0LWRyb3Bkb3duLS1leHBhbmRlZCcpO1xuICAgIGlmICghdGhpcy5rZXlMaXN0ZW5lckFjdGl2ZSkge1xuICAgICAgdGhpcy5pbnB1dC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5rZXlkb3duKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuY2xpY2tvdXQpO1xuICAgICAgfSwgMjAwKTtcbiAgICAgIHRoaXMua2V5TGlzdGVuZXJBY3RpdmUgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mICh0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAodGhpcy5tb2RlbCAmJiAodGhpcy5zZWFyY2hSZXN1bHRzIHx8IHRoaXMuc3VnZ2VzdGlvbnMpKSB7XG4gICAgICAgIGZvciAobGV0IHN1Z2dlc3Rpb25JbmRleCA9IDA7IHN1Z2dlc3Rpb25JbmRleCA8ICh0aGlzLnNlYXJjaFJlc3VsdHMgfHwgdGhpcy5zdWdnZXN0aW9ucykubGVuZ3RoOyBzdWdnZXN0aW9uSW5kZXgrKykge1xuICAgICAgICAgIGNvbnN0IGl0ZW0gPSAodGhpcy5zZWFyY2hSZXN1bHRzIHx8IHRoaXMuc3VnZ2VzdGlvbnMpW3N1Z2dlc3Rpb25JbmRleF07XG4gICAgICAgICAgaWYgKHRoaXMubW9kZWwuaWQgPT09IGl0ZW0uaWQgJiYgdGhpcy5tb2RlbC50eXBlID09PSBpdGVtLnR5cGUpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4ID0gc3VnZ2VzdGlvbkluZGV4O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZW5zdXJlRHJvcGRvd25Jc1Zpc2libGUoKTtcbiAgfVxuXG4gIGRpc21pc3NEcm9wZG93bihldmVudD8pIHtcbiAgICB0aGlzLmRyb3Bkb3duVmlzaWJsZSA9IGZhbHNlO1xuICAgIGlmIChldmVudCkge1xuICAgICAgdGhpcy5mb2N1cygpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kcm9wZG93bikge1xuICAgICAgdGhpcy5kcm9wZG93bi5jbGFzc0xpc3QucmVtb3ZlKCdWbHQtZHJvcGRvd24tLWV4cGFuZGVkJyk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXIoKSB7XG4gICAgdGhpcy5wcmV2TW9kZWwgPSB0aGlzLm1vZGVsO1xuICAgIGRlbGV0ZSB0aGlzLnNlYXJjaFRleHQ7XG4gICAgZGVsZXRlIHRoaXMuc2VhcmNoUmVzdWx0cztcbiAgICBkZWxldGUgdGhpcy5tb2RlbDtcbiAgICBkZWxldGUgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXg7XG4gICAgdGhpcy5vbk1vZGVsQ2hhbmdlKHRoaXMubW9kZWwpO1xuICAgIHRoaXMub25TZWFyY2hUZXh0Q2hhbmdlZCh0aGlzLnNlYXJjaFRleHQpO1xuICAgIHRoaXMuZm9jdXMoKTtcbiAgfVxuXG4gIHJldmVydCgpIHtcbiAgICB0aGlzLm1vZGVsID0gdGhpcy5wcmV2TW9kZWw7XG4gICAgZGVsZXRlIHRoaXMucHJldk1vZGVsO1xuICAgIHRoaXMub25Nb2RlbENoYW5nZSh0aGlzLm1vZGVsKTtcbiAgICB0aGlzLmZvY3VzKCk7XG4gIH1cblxuICByZW1vdmUoZXYsIGl0ZW0pIHtcbiAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IG9wdGlvbkluZGV4ID0gdGhpcy5tb2RlbC5pbmRleE9mKGl0ZW0pO1xuICAgIGlmIChvcHRpb25JbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMubW9kZWwuc3BsaWNlKG9wdGlvbkluZGV4LCAxKTtcbiAgICAgIGlmICghdGhpcy5tb2RlbC5sZW5ndGgpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMubW9kZWw7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnZhbHVlO1xuICAgICAgfVxuICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKHRoaXMubW9kZWwpO1xuICAgIH1cbiAgfVxuXG4gIG9wZW5SZXNvdXJjZShtb2RlbD8pIHtcbiAgICB0aGlzLmtleUxpc3RlbmVyQWN0aXZlID0gdHJ1ZTsgLy8gc3VwcHJlc3MgZHJvcGRvd24gaW4gdGhpcyBjYXNlXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmRpc21pc3NEcm9wZG93bigpO1xuICAgIH0pO1xuICAgIGNvbnN0IHJlZkRpYWxvZ0NvbXBvbmVudCA9IHRoaXMudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoTWV0YVJlZkRpYWxvZyk7XG4gICAgdGhpcy5tZXRhVHJhY2tlci5lbWl0KHRoaXMuYnVpbGRUcmFja0V2ZW50KG1vZGVsID8gJ0VESVQnIDogJ05FVycpKTtcbiAgICBsZXQgdGhlbWUgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5kYXRhc2V0LnRoZW1lO1xuICAgIGlmICghdGhlbWUgfHwgdGhlbWUgPT09ICdpbmhlcml0Jykge1xuICAgICAgbGV0IHBhcmVudENvbXBvbmVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsb3Nlc3QoJ3ZnaXAtbWV0YS1sYXlvdXQnKTtcbiAgICAgIGlmIChwYXJlbnRDb21wb25lbnQpIHtcbiAgICAgICAgdGhlbWUgPSBwYXJlbnRDb21wb25lbnQuZGF0YXNldC50aGVtZTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhlbWUgfHwgdGhlbWUgPT09ICdpbmhlcml0Jykge1xuICAgICAgICBwYXJlbnRDb21wb25lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbG9zZXN0KCd2Z2lwLW1ldGEtcmVzb3VyY2UnKTtcbiAgICAgICAgaWYgKHBhcmVudENvbXBvbmVudCkge1xuICAgICAgICAgIHRoZW1lID0gcGFyZW50Q29tcG9uZW50LmRhdGFzZXQudGhlbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5yZWZlcmVuY2VTZXJ2aWNlLm9wZW5EaWFsb2coXG4gICAgICByZWZEaWFsb2dDb21wb25lbnQsIHRoaXMubWV0YVJlc291cmNlLCB0aGlzLmludGVncmF0aW9uQ29kZSxcbiAgICAgICh0aGlzLm1ldGFSZWZlcmVuY2UgaW5zdGFuY2VvZiBBcnJheSkgPyB0aGlzLm1ldGFSZWZlcmVuY2UuZmlsdGVyKHJ0ID0+IHJ0LmhpZGRlbiAhPT0gdHJ1ZSkgOiB0aGlzLm1ldGFSZWZlcmVuY2UsXG4gICAgICBtb2RlbCwgbnVsbCwgdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGUucmVzb3VyY2VUeXBlLCB0aGVtZVxuICAgICkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICB0aGlzLnBhcmVudFt0aGlzLm1ldGEubmFtZV0gPSByZXN1bHQ7XG4gICAgICAgIHRoaXMub25DaGFuZ2UuZW1pdChyZXN1bHQpO1xuICAgICAgICBjb25zdCBleGlzdGluZ1N1Z2dlc3Rpb24gPSAodGhpcy5tZXRhLnN1Z2dlc3Rpb25zIHx8IFtdKS5maW5kKChzKSA9PiAocy5pZCA9PT0gcmVzdWx0LmlkICYmIHMudHlwZSA9PT0gcmVzdWx0LnR5cGUpKTtcbiAgICAgICAgaWYgKGV4aXN0aW5nU3VnZ2VzdGlvbikge1xuICAgICAgICAgIGV4aXN0aW5nU3VnZ2VzdGlvbi5sYWJlbCA9IHJlc3VsdC5sYWJlbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoIXRoaXMubWV0YS5zdWdnZXN0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5tZXRhLnN1Z2dlc3Rpb25zID0gW107XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubWV0YS5zdWdnZXN0aW9ucy51bnNoaWZ0KHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tZXRhVHJhY2tlci5lbWl0KHRoaXMuYnVpbGRUcmFja0V2ZW50KG1vZGVsID8gJ1VQREFURScgOiAnQ1JFQVRFJywgcmVzdWx0LnR5cGUgfHwgcmVzdWx0LnJlc291cmNlVHlwZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5tZXRhVHJhY2tlci5lbWl0KHRoaXMuYnVpbGRUcmFja0V2ZW50KG1vZGVsID8gJ0NBTkNFTF9FRElUJyA6ICdDQU5DRUxfVVBEQVRFJykpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBlbnN1cmVEcm9wZG93bklzVmlzaWJsZSgpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGhvbGRlciA9IHRoaXMuZHJvcGRvd24uY2xvc2VzdCgnLlZsdC1jYXJkX19jb250ZW50Jyk7XG4gICAgICBpZiAoaG9sZGVyKSB7XG4gICAgICAgIGNvbnN0IGVsID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLlZsdC1kcm9wZG93bl9fcGFuZWwnKTtcbiAgICAgICAgY29uc3QgZWxSZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IGhvbGRlclJlY3QgPSBob2xkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGlmIChob2xkZXJSZWN0LnRvcCArIGhvbGRlclJlY3QuaGVpZ2h0IDwgZWxSZWN0LnRvcCArIGVsUmVjdC5oZWlnaHQpIHtcbiAgICAgICAgICBlbC5zY3JvbGxJbnRvVmlldyh7IGJsb2NrOiAnZW5kJyB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sIDQwMCk7XG4gIH1cblxuICBwcml2YXRlIGVuc3VyZURyb3Bkb3duT3B0aW9uSXNWaXNpYmxlKCkge1xuICAgIGlmICghdGhpcy5kcm9wZG93blNjcm9sbENvbnRhaW5lcikge1xuICAgICAgdGhpcy5kcm9wZG93blNjcm9sbENvbnRhaW5lciA9IHRoaXMuZHJvcGRvd24ucXVlcnlTZWxlY3RvcignLlZsdC1kcm9wZG93bl9fc2Nyb2xsJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRyb3Bkb3duU2Nyb2xsQ29udGFpbmVyICYmIHR5cGVvZiAodGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXgpID09PSAnbnVtYmVyJykge1xuICAgICAgY29uc3Qgc2Nyb2xsVG9wID0gNDQgKiB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleDtcbiAgICAgIGNvbnN0IHNjcm9sbEJvdHRvbSA9IDQ0ICogKHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4IC0gNyk7XG4gICAgICBpZiAoc2Nyb2xsVG9wIDwgdGhpcy5kcm9wZG93blNjcm9sbENvbnRhaW5lci5zY3JvbGxUb3ApIHtcbiAgICAgICAgdGhpcy5kcm9wZG93blNjcm9sbENvbnRhaW5lci5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7XG4gICAgICB9IGVsc2UgaWYgKHNjcm9sbEJvdHRvbSA+IHRoaXMuZHJvcGRvd25TY3JvbGxDb250YWluZXIuc2Nyb2xsVG9wKSB7XG4gICAgICAgIHRoaXMuZHJvcGRvd25TY3JvbGxDb250YWluZXIuc2Nyb2xsVG9wID0gc2Nyb2xsQm90dG9tO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xpY2tvdXQgPSAoZXZlbnQpID0+IHtcbiAgICBjb25zdCBpbnRlcm5hbENvbnRyb2wgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpO1xuICAgIGlmIChpbnRlcm5hbENvbnRyb2wgJiYgWydWbHQtZHJvcGRvd25fX2xpbmsnLCAnVmx0LWRyb3Bkb3duX19ibG9jayddLmluZGV4T2YoZXZlbnQudGFyZ2V0LmNsYXNzTmFtZSkgIT09IC0xKSB7XG4gICAgICB0aGlzLmZvY3VzKCk7XG4gICAgfSBlbHNlIGlmICghaW50ZXJuYWxDb250cm9sICYmIGV2ZW50LnRhcmdldCAhPT0gdGhpcy5pbnB1dCAmJiBldmVudC50YXJnZXQuY2xhc3NOYW1lICE9PSAnVmx0LWRyb3Bkb3duX190aXRsZScpIHtcbiAgICAgIHRoaXMuZGlzbWlzc0Ryb3Bkb3duKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghaW50ZXJuYWxDb250cm9sICYmIGludGVybmFsQ29udHJvbC50YWdOYW1lICE9PSAnSU5QVVQnKSB7XG4gICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSBidWlsZFRyYWNrRXZlbnQoYWN0aW9uOiBzdHJpbmcsIHZhbHVlPzogc3RyaW5nKSB7XG4gICAgY29uc3QgZTogSU1ldGFUcmFja2VyRXZlbnQgPSB7XG4gICAgICBpbnRlZ3JhdGlvbjogdGhpcy5pbnRlZ3JhdGlvbkNvZGUsXG4gICAgICByZXNvdXJjZTogdGhpcy5tb2RlbCA/ICh0aGlzLm1vZGVsLnR5cGUgfHwgdGhpcy5tb2RlbC5yZXNvdXJjZVR5cGUpIDogdGhpcy5zZWFyY2hSZXNvdXJjZVR5cGUucmVzb3VyY2VUeXBlLFxuICAgICAgZmllbGQ6IHRoaXMubWV0YS5uYW1lLFxuICAgICAgYWN0aW9uXG4gICAgfTtcbiAgICBpZiAodGhpcy5tZXRhLiRpc0NvbnRhY3RhYmxlKSB7XG4gICAgICBlLmlzQ29udGFjdGFibGUgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mICh2YWx1ZSkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBlLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBlO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFBsYWNlaG9sZGVyTGFiZWwoKSB7XG4gICAgdGhpcy5wbGFjZUhvbGRlckxhYmVsID0gdGhpcy5tZXRhLmxhYmVsO1xuICAgIGlmICh0aGlzLm11bHRpcGxlICYmICF0aGlzLmlzUG9seW1vcnBoaWMpIHtcbiAgICAgIHRoaXMucGxhY2VIb2xkZXJMYWJlbCA9ICcrQWRkICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGxhY2VIb2xkZXJMYWJlbCA9ICh0aGlzLmlzU2VhcmNoYWJsZSAmJiAodGhpcy5tdWx0aXBsZSB8fCAhdGhpcy5pc1BvbHltb3JwaGljKSkgPyAnU2VhcmNoICcgOiAnJztcbiAgICB9XG4gICAgdGhpcy5wbGFjZUhvbGRlckxhYmVsICs9IHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlLnJlc291cmNlVHlwZSA/IHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlLnJlc291cmNlVHlwZSA6IHRoaXMuc2VhcmNoUmVzb3VyY2VUeXBlc1Njb3BlO1xuICB9XG5cbiAgcHJpdmF0ZSBrZXlkb3duID0gKGV2ZW50KSA9PiB7XG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ0Fycm93RG93bic6IHtcbiAgICAgICAgdGhpcy5zaG93RHJvcGRvd24oKTtcbiAgICAgICAgaWYgKHR5cGVvZiAodGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXgpID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4ID0gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCsrO1xuICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCA+PSAodGhpcy5zZWFyY2hSZXN1bHRzIHx8IHRoaXMuc3VnZ2VzdGlvbnMpLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVTdWdnZXN0aW9uSW5kZXggPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVuc3VyZURyb3Bkb3duT3B0aW9uSXNWaXNpYmxlKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0Fycm93VXAnOiB7XG4gICAgICAgIHRoaXMuc2hvd0Ryb3Bkb3duKCk7XG4gICAgICAgIGlmICh0eXBlb2YgKHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4KSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCA9ICh0aGlzLnNlYXJjaFJlc3VsdHMgfHwgdGhpcy5zdWdnZXN0aW9ucykubGVuZ3RoIC0gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleC0tO1xuICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCA8IDApIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlU3VnZ2VzdGlvbkluZGV4ID0gKHRoaXMuc2VhcmNoUmVzdWx0cyB8fCB0aGlzLnN1Z2dlc3Rpb25zKS5sZW5ndGggLSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVuc3VyZURyb3Bkb3duT3B0aW9uSXNWaXNpYmxlKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ1NwYWNlJzpcbiAgICAgIGNhc2UgJ0VudGVyJzoge1xuICAgICAgICBpZiAodHlwZW9mICh0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleCkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB0aGlzLm9uU3VnZ2VzdGlvblNlbGVjdChldmVudCwgKHRoaXMuc2VhcmNoUmVzdWx0cyB8fCB0aGlzLnN1Z2dlc3Rpb25zKVt0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleF0pO1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLmFjdGl2ZVN1Z2dlc3Rpb25JbmRleDtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0VzY2FwZSc6IHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMuZGlzbWlzc0Ryb3Bkb3duKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnQmFja3NwYWNlJzoge1xuICAgICAgICBpZiAoIXRoaXMubXVsdGlwbGUgJiYgdGhpcy5tb2RlbCkgeyAvLyBIUEJSLTgyMjlcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHRoaXMucmVtb3ZlU2VsZWN0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgYnVpbGRFeHRlcm5hbExpbmsoKSB7XG4gICAgaWYgKHRoaXMubW9kZWwpIHtcbiAgICAgIGlmICh0aGlzLm1vZGVsLmV4dGVybmFsTGluaykge1xuICAgICAgICB0aGlzLmV4dGVybmFsTGluayA9IHRoaXMubW9kZWwuZXh0ZXJuYWxMaW5rO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLm1ldGFDb250ZXh0LnByb2ZpbGVzW3RoaXMuaW50ZWdyYXRpb25Db2RlLnRvVXBwZXJDYXNlKCldKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmV4dGVybmFsTGluaztcbiAgICAgICAgdGhpcy5tZXRhTXNnU2VydmljZS5zZW5kTWVzc2FnZShcbiAgICAgICAgICB0aGlzLmludGVncmF0aW9uQ29kZS50b1VwcGVyQ2FzZSgpLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFjdGlvbjogJ2J1aWxkRXh0ZXJuYWxMaW5rJyxcbiAgICAgICAgICAgIGludGVncmF0aW9uQ29kZTogdGhpcy5pbnRlZ3JhdGlvbkNvZGUsXG4gICAgICAgICAgICByZWY6IHRoaXMubW9kZWwsXG4gICAgICAgICAgICBwcm9maWxlOiB0aGlzLm1ldGFDb250ZXh0LnByb2ZpbGVzW3RoaXMuaW50ZWdyYXRpb25Db2RlLnRvVXBwZXJDYXNlKCldXG4gICAgICAgICAgfSxcbiAgICAgICAgICAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGlmICghcmVzcG9uc2UuZXJyb3IpIHtcbiAgICAgICAgICAgICAgdGhpcy5leHRlcm5hbExpbmsgPSByZXNwb25zZS5leHRlcm5hbExpbms7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ05vIGV4dGVybmFsIGxpbmsgc3VwcG9ydCBmb3InLCB0aGlzLmludGVncmF0aW9uQ29kZSwgdGhpcy5tb2RlbC5yZXNvdXJjZVR5cGUgfHwgdGhpcy5tb2RlbC50eXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB0aGlzLmV4dGVybmFsTGluaztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNlYXJjaEF1dG9TdWdnZXN0aW9ucyhwYXJhbXM/KSB7XG4gICAgbGV0IHNlYXJjaFVybCA9IGAvc3VnZ2VzdGlvbnMvJHt0aGlzLm1ldGEubmFtZX0vc2VhcmNoYDtcbiAgICBpZiAodGhpcy5tZXRhLmF1dG8gJiYgdGhpcy5tZXRhLmF1dG8uc2VhcmNoKSB7XG4gICAgICBpZiAodGhpcy5tZXRhLmF1dG8uc2VhcmNoLnVybCkge1xuICAgICAgICBzZWFyY2hVcmwgPSB0aGlzLm1ldGEuYXV0by5zZWFyY2gudXJsLnJlcGxhY2UoL1xcJHtcXHMqKFtcXHcuXSspXFxzKn0vZywgKG1hdGNoLCBrZXkpID0+IHtcbiAgICAgICAgICBpZiAocGFyYW1zLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9IHBhcmFtc1trZXldO1xuICAgICAgICAgICAgZGVsZXRlIHBhcmFtc1trZXldO1xuICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgcCBvZiBPYmplY3Qua2V5cyhwYXJhbXMpKSB7XG4gICAgICAgIHNlYXJjaFVybCArPSBgJHtzZWFyY2hVcmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJ30ke2VuY29kZVVSSUNvbXBvbmVudChwKX09JHtlbmNvZGVVUklDb21wb25lbnQocGFyYW1zW3BdKX1gO1xuICAgICAgfVxuICAgICAgdGhpcy5zZWFyY2hpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5yZXNvdXJjZVNlcnZpY2UuZ2V0QnlQYXRoKHNlYXJjaFVybCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgZGVsZXRlIHRoaXMuc2VhcmNoaW5nO1xuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgbGV0IHN1Z2dlc3Rpb25zO1xuICAgICAgICAgIHN1Z2dlc3Rpb25zID0gcmVzdWx0O1xuICAgICAgICAgIGlmICh0aGlzLm1ldGEuYXV0by5zZWFyY2guZXh0cmFjdCkge1xuICAgICAgICAgICAgc3VnZ2VzdGlvbnMgPSByZXN1bHRbdGhpcy5tZXRhLmF1dG8uc2VhcmNoLmV4dHJhY3RdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc3VnZ2VzdGlvbnMgaW5zdGFuY2VvZiBBcnJheSAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgc3VnZ2VzdGlvbnMgPSBbc3VnZ2VzdGlvbnNdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBhc3luY1N1Z2dlc3Rpb25zID0gW107XG4gICAgICAgICAgc3VnZ2VzdGlvbnMuZm9yRWFjaCgocykgPT4ge1xuICAgICAgICAgICAgaWYgKHMgJiYgcy5pZCAmJiBzLnR5cGUpIHsgLy8gVE9PRCBjaGVjayB0aGUgdHlwZSBpcyBhY2NlcHRhYmxlXG4gICAgICAgICAgICAgIGFzeW5jU3VnZ2VzdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgaWQ6IHMuaWQsXG4gICAgICAgICAgICAgICAgbGFiZWw6IHMubGFiZWwgfHwgYCR7cy50eXBlfSMke3MuaWR9YCxcbiAgICAgICAgICAgICAgICB0eXBlOiBzLnR5cGVcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGFzeW5jU3VnZ2VzdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoYXN5bmNTdWdnZXN0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgdGhpcy5wYXJlbnRbdGhpcy5tZXRhLm5hbWVdID0gYXN5bmNTdWdnZXN0aW9uc1swXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmFzeW5jU3VnZ2VzdGlvbnM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuYXN5bmNTdWdnZXN0aW9ucyA9IGFzeW5jU3VnZ2VzdGlvbnM7XG4gICAgICAgIH1cbiAgICAgIH0sICgpID0+IHtcbiAgICAgICAgZGVsZXRlIHRoaXMuc2VhcmNoaW5nO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9J3ZnaXAtbWV0YS1maWVsZC1wcmV2aWV3JyAqbmdJZj0ncHJldmlldyAmJiBtb2RlbCAmJiAoIW11bHRpcGxlIHx8IChtdWx0aXBsZSAmJiBtb2RlbC5sZW5ndGgpKSc+XG4gIDxkaXYgY2xhc3M9J3ZnaXAtbWV0YS1maWVsZC1sYWJlbCcgW3RpdGxlXT0nbWV0YS5sYWJlbCB8fCBtZXRhLm5hbWUnPnt7bWV0YS5sYWJlbCB8fCBtZXRhLm5hbWV9fTwvZGl2PlxuICA8ZGl2ICpuZ0lmPSchbXVsdGlwbGUnIGNsYXNzPSd2Z2lwLW1ldGEtZmllbGQtdmFsdWUgX19ndSc+XG4gICAgPHN2ZyBjbGFzcz1cIlZsdC1pY29uIFZsdC1pY29uLS1zbWFsbGVyXCIgc3R5bGU9J21hcmdpbi10b3A6IC0zcHg7Jz48dXNlIGF0dHIueGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWJyYW5kLWljb25zLnN2ZyN7e2ludGVncmF0aW9uSWNvbn19XCIvPjwvc3ZnPlxuICAgIHt7bW9kZWwubGFiZWwgfHwgbW9kZWwuaWR9fSA8c3BhbiBjbGFzcz0nVmx0LWdyZXknPih7e21vZGVsLnR5cGV9fSk8L3NwYW4+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPSdtdWx0aXBsZScgY2xhc3M9J3ZnaXAtbWV0YS1maWVsZC12YWx1ZSBfX2d1Jz5cbiAgICA8c3BhbiAqbmdGb3I9J2xldCBtIG9mIChtb2RlbCB8fCBbXSknIGNsYXNzPSdWbHQtYmFkZ2UgVmx0LWJhZGdlLS1hcHAnPlxuICAgICAge3ttLmxhYmVsIHx8IG0uaWQgfHwgbX19IDxzcGFuIGNsYXNzPSdWbHQtZ3JleS1kYXJrJyAqbmdJZj0naXNQb2x5bW9ycGhpYyc+KHt7bS50eXBlfX0pPC9zcGFuPlxuICAgIDwvc3Bhbj5cbiAgPC9kaXY+XG4gIDxhIFtocmVmXT0nZXh0ZXJuYWxMaW5rIHx8IG1vZGVsLmV4dGVybmFsTGluaycgdGFyZ2V0PSdfYmxhbmsnIHJlbD0nbm9vcGVuZXInICpuZ0lmPSdleHRlcm5hbExpbmsgJiYgKG1vZGVsICYmICFtdWx0aXBsZSknIGNsYXNzPVwiVmx0LWNvbXBvc2l0ZV9fYXBwZW5kLS1pY29uIHByZXZpZXdcIiBhcmlhLWxhYmVsPSdPcGVuIGV4dGVybmFsJz5cbiAgICA8ZGl2IGNsYXNzPVwiVmx0LWNvbXBvc2l0ZV9faWNvblwiPlxuICAgICAgPHN2Zz48dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tb3BlblwiLz48L3N2Zz5cbiAgICA8L2Rpdj5cbiAgPC9hPlxuPC9kaXY+XG48ZGl2ICpuZ0lmPSchcHJldmlldycgY2xhc3M9XCJtZXRhLWZpZWxkLXJlZmVyZW5jZSBWbHQtZm9ybV9fZWxlbWVudCBWbHQtZm9ybV9fZWxlbWVudC0tYmlnXCIgW25nQ2xhc3NdPVwieyAnVmx0LWZvcm1fX2VsZW1lbnQtLWVycm9yJzogKHNlYXJjaEVycm9yICYmIGtleUxpc3RlbmVyQWN0aXZlKSB8fCAoZi5pbnZhbGlkICYmICgoZiB8IG1ldGFNb2RlbCkuX3BhcmVudC5zdWJtaXR0ZWQgfHwgKGZ0IHwgbWV0YU1vZGVsICkudG91Y2hlZCkpLCAnbXVsdGlwbGUnOiBtdWx0aXBsZSwgJ2hhcy12YWx1ZSc6IG1vZGVsLCBhY3RpdmU6IGtleUxpc3RlbmVyQWN0aXZlIH1cIj5cbiAgPGRpdiAqbmdJZj0nbXVsdGlwbGUnIGNsYXNzPSdpdGVtcy1jb250YWluZXInIFtuZ0NsYXNzXT0neyBjcmVhdGFibGU6IGlzQ3JlYXRhYmxlIH0nPlxuICAgIDxkaXYgKm5nSWY9J21vZGVsJyBjbGFzcz0nYmFkZ2VzLWNvbnRhaW5lciBrZWVwLWZvY3VzJyAoY2xpY2spPSdmb2N1cygpJyBzdHlsZT0nd2lkdGg6IDEwMCU7Jz4gPCEtLSBlc2xpbnQtZGlzYWJsZS1saW5lIC0tPlxuICAgICAgPGRpdiAqbmdGb3I9J2xldCBpdGVtIG9mIG1vZGVsJyBjbGFzcz1cIlZsdC1iYWRnZSBWbHQtYmFkZ2UtLWFwcCBWbHQtYmFkZ2UtLWxhcmdlIGtlZXAtZm9jdXNcIiBbbmdDbGFzc109XCJ7IGdyaWQ6IChpdGVtLmxhYmVsIHx8IGl0ZW0uaWQgfHwgJycpLmxlbmd0aCA+IDU2fVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz0nVmx0LXRydW5jYXRlJz57e2l0ZW0ubGFiZWwgfHwgaXRlbS5pZCB8fCBpdGVtIH19IDxzcGFuICpuZ0lmPSdpc1BvbHltb3JwaGljJyBjbGFzcz0nVmx0LWdyZXktZGFyaycgc3R5bGU9J2ZvbnQtd2VpZ2h0OiBub3JtYWw7Jz4oe3tpdGVtLnR5cGV9fSk8L3NwYW4+PC9zcGFuPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiVmx0LWJhZGdlX19kaXNtaXNzIGtlZXAtZm9jdXNcIiAoY2xpY2spPSdyZW1vdmUoJGV2ZW50LCBpdGVtKScgc3R5bGU9J3Bvc2l0aW9uOiBhYnNvbHV0ZTsgcmlnaHQ6IDEycHg7IHRvcDogOHB4OycgYXJpYS1sYWJlbD0nUmVtb3ZlJz48L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIlZsdC1jb21wb3NpdGVcIj5cbiAgICA8ZGl2IGNsYXNzPSdkcm9wZG93bi13cmFwcGVyIFZsdC1kcm9wZG93bicgc3R5bGU9J3dpZHRoOiAxMDAlOyBwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogNDhweDsnPlxuICAgICAgPGRpdiBjbGFzcz1cIlZsdC1kcm9wZG93bl9fcGFuZWxcIj5cbiAgICAgICAgPGRpdiAqbmdJZj0nc2VhcmNoRXJyb3InPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJWbHQtY2FsbG91dCBWbHQtY2FsbG91dC0tY3JpdGljYWwga2VlcC1mb2N1c1wiPlxuICAgICAgICAgICAgPGk+PC9pPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlZsdC1jYWxsb3V0X19jb250ZW50XCI+e3tzZWFyY2hFcnJvcn19PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPSchc2VhcmNoRXJyb3IgJiYgKHN1Z2dlc3Rpb25zLmxlbmd0aCB8fCBzZWFyY2hSZXN1bHRzKScgW25nQ2xhc3NdPVwieyBzdWdnZXN0aW9uczogIXNlYXJjaFJlc3VsdHN9XCIgY2xhc3M9XCJWbHQtZHJvcGRvd25fX3BhbmVsX19jb250ZW50IFZsdC1kcm9wZG93bl9fcGFuZWxfX2NvbnRlbnQtLXNjcm9sbC1hcmVhXCIgc3R5bGU9J3BhZGRpbmc6IDA7Jz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiVmx0LWRyb3Bkb3duX19ibG9ja1wiPjwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9JyFzZWFyY2hSZXN1bHRzJyBjbGFzcz1cIlZsdC1kcm9wZG93bl9fc2Nyb2xsXCI+XG4gICAgICAgICAgICA8YSBocmVmPScjJyBbbmdDbGFzc109XCJ7ICdWbHQtZHJvcGRvd25fX2xpbmstLXNlbGVjdGVkJzogYWN0aXZlU3VnZ2VzdGlvbkluZGV4ID09PSBpLCBzbWFydDogc3VnZ2VzdGlvbi5zbWFydCB9XCIgKGNsaWNrKT0nb25TdWdnZXN0aW9uU2VsZWN0KCRldmVudCwgc3VnZ2VzdGlvbiknICpuZ0Zvcj0nbGV0IHN1Z2dlc3Rpb24gb2Ygc3VnZ2VzdGlvbnM7IGxldCBpID0gaW5kZXgnICBjbGFzcz1cIlZsdC1kcm9wZG93bl9fbGluayBoYXMtdHlwZVwiPlxuICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSdWbHQtaWNvbiAgVmx0LWljb24tLXNtYWxsJz48dXNlIGF0dHIueGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWJyYW5kLWljb25zLnN2ZyN7e2ludGVncmF0aW9uSWNvbn19XCIvPjwvc3ZnPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdfX2d1JyBbdGl0bGVdPSdzdWdnZXN0aW9uLmxhYmVsJz57eyBzdWdnZXN0aW9uLmxhYmVsIH19PC9kaXY+XG4gICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz0nVmx0LWdyZXktZGFyaycgc3R5bGU9J3RleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplOyc+e3tzdWdnZXN0aW9uLnR5cGV9fTwvc21hbGw+XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj0nc2VhcmNoUmVzdWx0cycgY2xhc3M9XCJWbHQtZHJvcGRvd25fX3Njcm9sbFwiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj0nIXNlYXJjaFJlc3VsdHMubGVuZ3RoJyBjbGFzcz0nVmx0LWRyb3Bkb3duX19ibG9jayc+IE5vIHJlY29yZHMgbWF0Y2hpbmcgJzxiIHN0eWxlPSdwb2ludGVyLWV2ZW50czogbm9uZTsnPnt7c2VhcmNoVGV4dH19PC9iPicgd2VyZSBmb3VuZC48L2Rpdj5cbiAgICAgICAgICAgIDxhIGhyZWY9JyMnIFtuZ0NsYXNzXT1cInsgJ1ZsdC1kcm9wZG93bl9fbGluay0tc2VsZWN0ZWQnOiBhY3RpdmVTdWdnZXN0aW9uSW5kZXggPT09IGkgfVwiIChjbGljayk9J29uU3VnZ2VzdGlvblNlbGVjdCgkZXZlbnQsIHN1Z2dlc3Rpb24pJyAqbmdGb3I9J2xldCBzdWdnZXN0aW9uIG9mIHNlYXJjaFJlc3VsdHM7IGxldCBpID0gaW5kZXgnICBjbGFzcz1cIlZsdC1kcm9wZG93bl9fbGluayBoYXMtdHlwZVwiPlxuICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSdWbHQtaWNvbiBWbHQtaWNvbi0tc21hbGwnPjx1c2UgYXR0ci54bGluazpocmVmPVwidm9sdGEvdm9sdGEtYnJhbmQtaWNvbnMuc3ZnI3t7aW50ZWdyYXRpb25JY29ufX1cIi8+PC9zdmc+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9J19fZ3UnIFt0aXRsZV09J3N1Z2dlc3Rpb24ubGFiZWwnPnt7IHN1Z2dlc3Rpb24ubGFiZWwgfX08L2Rpdj5cbiAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPSdWbHQtZ3JleS1kYXJrJyBzdHlsZT0ndGV4dC10cmFuc2Zvcm06IGNhcGl0YWxpemU7Jz57e3N1Z2dlc3Rpb24udHlwZX19PC9zbWFsbD5cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIDxkaXYgKm5nSWY9J3NlYXJjaFJlc3VsdHMnIGNsYXNzPVwiVmx0LWRyb3Bkb3duX19ibG9ja1wiIHN0eWxlPSd0ZXh0LWFsaWduOiByaWdodDsgcGFkZGluZy10b3A6IDA7Jz5cbiAgICAgICAgICAgIDxzbWFsbD5cbiAgICAgICAgICAgICAge3sgc2VhcmNoUmVzdWx0cyA/IHNlYXJjaFJlc3VsdHMubGVuZ3RoKycgcmVzdWx0cycgOiAnU3VnZ2VzdGlvbnMnIH19IDxzcGFuIHN0eWxlPSdmb250LXN0eWxlOiBpdGFsaWM7IGZvbnQtd2VpZ2h0OiBub3JtYWw7JyAqbmdJZj0nc2VhcmNoUmVzdWx0cyc+fnt7IG1vZGVsID8gJ2xhc3Qgc2VhcmNoJyA6IHNlYXJjaFRleHR9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJWbHQtZHJvcGRvd25fX2Jsb2NrXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIlZsdC1jb21wb3NpdGVfX3ByZXBlbmRcIiAqbmdJZj0naXNQb2x5bW9ycGhpYyAmJiBzaG93VHlwZXMgJiYgKG11bHRpcGxlIHx8ICFtb2RlbCB8fCAoZHJvcGRvd25WaXNpYmxlICYmICgoc3VnZ2VzdGlvbnMgfHwgc2VhcmNoUmVzdWx0cyB8fCBbXSkubGVuZ3RoIHx8IHNlYXJjaFJlc291cmNlVHlwZS5yZXNvdXJjZVR5cGUpKSknPlxuICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1zY29wZVwiIFtuZ0NsYXNzXT1cInsgJ2hhcy12YWx1ZSc6IHNlYXJjaFJlc291cmNlVHlwZS5yZXNvdXJjZVR5cGUgfVwiPlxuICAgICAgICA8dmdpcC1tZXRhLWZpZWxkIGNsYXNzPSdzaG93bicgW21ldGFdPSdzZWFyY2hSZXNvdXJjZVR5cGVNZXRhJyBbcGFyZW50XT0nc2VhcmNoUmVzb3VyY2VUeXBlJyAob25DaGFuZ2UpPSdvblNlYXJjaFJlc291cmNlVHlwZUNoYW5nZWQoJGV2ZW50KScgKG9uTGVhdmUpPSdvbkJsdXIoJGV2ZW50KScgW2ludGVncmF0aW9uQ29kZV09J2ludGVncmF0aW9uQ29kZScgdGhlbWU9J2luaGVyaXQnPjwvdmdpcC1tZXRhLWZpZWxkPlxuICAgICAgICA8c3ZnIGNsYXNzPSdWbHQtaWNvbiBWbHQtZ3JleSBWbHQtaWNvbi0tc21hbGxlciB2aXNpYmxlLW1vYmlsZSBtb2JpbGUtaWNvbicgc3R5bGU9J3Bvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAxNXB4OyBsZWZ0OiAxNHB4OyBwb2ludGVyLWV2ZW50czogbm9uZTsnPlxuICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1tZW51XCIvPlxuICAgICAgICA8L3N2Zz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9JyEoaXNQb2x5bW9ycGhpYyAmJiBzaG93VHlwZXMgJiYgKG11bHRpcGxlIHx8ICFtb2RlbCB8fCBkcm9wZG93blZpc2libGUpKSc+PCEtLSByZXF1aXJlZCBieSBjc3MgLS0+PC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIlZsdC1jb21wb3NpdGVfX3dyYXBwZXIgVmx0LWlucHV0XCIgc3R5bGU9J292ZXJmbG93OiBoaWRkZW47JyBbbmdDbGFzc109XCJ7ICdoYXMtYXBwZW5kLWJ1dHRvbic6IGhhc0FwcGVuZEJ1dHRvbiAmJiAhZGlzYWJsZWQgfVwiPlxuICAgICAgPGxhYmVsIGNsYXNzPSd3cmFwcGVyJz5cbiAgICAgICAgPGRpdiBjbGFzcz1cIlZsdC1jb21wb3NpdGVfX3ByZXBlbmQgVmx0LWNvbXBvc2l0ZV9fcHJlcGVuZC0taWNvblwiIHN0eWxlPSd0b3A6IDA7IHBhZGRpbmctdG9wOiAxNXB4Oyc+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIlZsdC1jb21wb3NpdGVfX2ljb25cIj5cbiAgICAgICAgICAgIDxzdmcgKm5nSWY9J2lzU2VhcmNoYWJsZSAmJiAoIW1vZGVsIHx8IG11bHRpcGxlKScgY2xhc3M9J1ZsdC1ncmV5Jz48dXNlIGF0dHIueGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi17eyBtdWx0aXBsZSA/ICdzdGFjaycgOiAnc2VhcmNoJ319XCIvPjwvc3ZnPlxuICAgICAgICAgICAgPHN2ZyAqbmdJZj0nIWlzU2VhcmNoYWJsZSB8fCAobW9kZWwgJiYgIW11bHRpcGxlKScgW25nU3R5bGVdPVwie2ZpbGw6IGludGVncmF0aW9uSWNvbiA9PT0gJ0JyYW5kLWljb24tdm9uYWdlJyA/ICd2YXIoLS12Z2lwLW1ldGEtaW5wdXQtY29sb3IpJyA6ICcnfVwiPjx1c2UgYXR0ci54bGluazpocmVmPVwidm9sdGEvdm9sdGEtYnJhbmQtaWNvbnMuc3ZnI3t7aW50ZWdyYXRpb25JY29ufX1cIi8+PC9zdmc+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj0nc3VnZ2VzdGlvbnMubGVuZ3RoJyBjbGFzcz1cIlZsdC1iYWRnZSBWbHQtYmFkZ2UtLXNtYWxsIFZsdC1iYWRnZS0tcHVycGxlXCIgc3R5bGU9J3BhZGRpbmc6IDBweCA0cHg7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAyNnB4OyBsZWZ0OiA0cHg7IHBvaW50ZXItZXZlbnRzOiBub25lOyBtaW4td2lkdGg6IDE0cHg7Jz57e3N1Z2dlc3Rpb25zLmxlbmd0aH19PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8aW5wdXQgY2xhc3M9J21vZGVsJyB0eXBlPSdoaWRkZW4nIFtyZXF1aXJlZF09J3ZhbGlkYXRpb25zLnJlcXVpcmVkJyBbKG5nTW9kZWwpXT0nbW9kZWwnICNmPSduZ01vZGVsJyBbbmFtZV09J25hbWUnIC8+XG4gICAgICAgIDxpbnB1dCBjbGFzcz0nbWFpbicgW3JlYWRvbmx5XT0nIWlzU2VhcmNoYWJsZSB8fCAobW9kZWwgJiYgIW11bHRpcGxlKScgW25nTW9kZWxdPSdzZWFyY2hUZXh0JyAjZnQ9J25nTW9kZWwnIChuZ01vZGVsQ2hhbmdlKT0nb25TZWFyY2hUZXh0Q2hhbmdlZCgkZXZlbnQpJyBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCIgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cInt7IHBsYWNlSG9sZGVyTGFiZWwgfHwgJyAnIH19XCIgW25nQ2xhc3NdPSd7IGV4dDogZXh0ZXJuYWxMaW5rIH0nIChjbGljayk9J29uQWN0aXZhdGVkKCRldmVudCknIChmb2N1cyk9J29uQWN0aXZhdGVkKCRldmVudCknIChibHVyKT0nb25CbHVyKCRldmVudCknIFtkaXNhYmxlZF09J2Rpc2FibGVkJyBbdGl0bGVdPVwibW9kZWwgPyBtb2RlbC5sYWJlbCA6ICcnXCIvPlxuICAgICAgICA8bGFiZWwgY2xhc3M9J1ZsdC10cnVuY2F0ZSBoaWRkZW4tbW9iaWxlJyBzdHlsZT0ncGFkZGluZy1sZWZ0OiAyNXB4OyBwYWRkaW5nLXJpZ2h0OiA0MnB4Oyc+e3sgKG11bHRpcGxlICYmIGlzUG9seW1vcnBoaWMpID8gJytBZGQgJyA6ICgobW9kZWwgfHwgIWlzUG9seW1vcnBoaWMpID8gbWV0YS5sYWJlbCA6ICggbWV0YS5zZWFyY2hMYWJlbCB8fCAnU2VhcmNoJykpIH19PHNwYW4gKm5nSWY9J3ZhbGlkYXRpb25zLnJlcXVpcmVkJyBjbGFzcz0nVmx0LXJlZCc+Kjwvc3Bhbj4mbmJzcDs8c3BhbiBzdHlsZT0nY29sb3I6IHZhcigtLXZnaXAtbWV0YS1pbnB1dC1jb2xvcik7IHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplOycgKm5nSWY9J21vZGVsJz4oe3ttb2RlbC50eXBlIHx8IG1vZGVsLnJlc291cmNlVHlwZSB8fCBtb2RlbC5sZW5ndGh9fSk8L3NwYW4+PC9sYWJlbD4gPCEtLSBlc2xpbnQtZGlzYWJsZS1saW5lIEBhbmd1bGFyLWVzbGludC90ZW1wbGF0ZS9sYWJlbC1oYXMtYXNzb2NpYXRlZC1jb250cm9sLS0+XG4gICAgICAgIDxsYWJlbCBjbGFzcz0nVmx0LXRydW5jYXRlIGhpZGRlbi1kZXNrdG9wJyBzdHlsZT0ncGFkZGluZy1sZWZ0OiAyNXB4OyBwYWRkaW5nLXJpZ2h0OiA0MnB4Oyc+e3ttZXRhLmxhYmVsIHx8IG1ldGEubmFtZX19PHNwYW4gKm5nSWY9J3ZhbGlkYXRpb25zLnJlcXVpcmVkJyBjbGFzcz0nVmx0LXJlZCc+Kjwvc3Bhbj4mbmJzcDs8c3BhbiBzdHlsZT0nY29sb3I6IHZhcigtLXZnaXAtbWV0YS1pbnB1dC1jb2xvcik7IHRleHQtdHJhbnNmb3JtOiBjYXBpdGFsaXplOycgKm5nSWY9J21vZGVsJz4oe3ttb2RlbC50eXBlIHx8IG1vZGVsLnJlc291cmNlVHlwZSB8fCBtb2RlbC5sZW5ndGh9fSk8L3NwYW4+PC9sYWJlbD4gPCEtLSBlc2xpbnQtZGlzYWJsZS1saW5lIEBhbmd1bGFyLWVzbGludC90ZW1wbGF0ZS9sYWJlbC1oYXMtYXNzb2NpYXRlZC1jb250cm9sLS0+XG4gICAgICA8L2xhYmVsPlxuICAgICAgPGRpdiAqbmdJZj0nc2VhcmNoaW5nJyBjbGFzcz0nc2VhcmNoLXByb2dyZXNzJz5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYXIgVmx0LWJnLXB1cnBsZVwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz0nVmx0LWNvbXBvc2l0ZV9fYXBwZW5kIHJpZ2h0LWFjdGlvbnMnPlxuICAgICAgICA8IS0tIDxkaXYgKm5nSWY9J3ByZXZNb2RlbCAmJiAhbW9kZWwnIGNsYXNzPVwiVmx0LWNvbXBvc2l0ZV9fYXBwZW5kLS1pY29uXCIgKGNsaWNrKT0ncmV2ZXJ0KCknPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJWbHQtY29tcG9zaXRlX19pY29uXCI+XG4gICAgICAgICAgICA8c3ZnPjx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1yZXBseVwiLz48L3N2Zz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICA8YSBocmVmPScjJyAqbmdJZj0nbW9kZWwgJiYgIW11bHRpcGxlJyBjbGFzcz1cIlZsdC1jb21wb3NpdGVfX2FwcGVuZC0taWNvblwiIChjbGljayk9J3JlbW92ZVNlbGVjdGlvbigkZXZlbnQpJz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiVmx0LWNvbXBvc2l0ZV9faWNvblwiPlxuICAgICAgICAgICAgPHN2Zz48dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tY3Jvc3NcIi8+PC9zdmc+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYT5cbiAgICAgICAgPGEgW2hyZWZdPSdleHRlcm5hbExpbmsgfHwgbW9kZWwuZXh0ZXJuYWxMaW5rJyB0YXJnZXQ9J19ibGFuaycgcmVsPSdub29wZW5lcicgKm5nSWY9J2V4dGVybmFsTGluayAmJiAobW9kZWwgJiYgIW11bHRpcGxlKScgY2xhc3M9XCJWbHQtY29tcG9zaXRlX19hcHBlbmQtLWljb25cIiBhcmlhLWxhYmVsPSdPcGVuIGV4dGVybmFsJz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiVmx0LWNvbXBvc2l0ZV9faWNvblwiPlxuICAgICAgICAgICAgPHN2Zz48dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tb3BlblwiLz48L3N2Zz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9hPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPCEtLSA8c3BhbiAqbmdJZj0naGFzQ3JlYXRhYmxlcyc+XG4gICAgICA8YnV0dG9uIHR5cGU9J2J1dHRvbicgKm5nSWY9JyFtb2RlbCB8fCBtdWx0aXBsZScgKGNsaWNrKT0nb3BlblJlc291cmNlKCknIGNsYXNzPVwiVmx0LWJ0biBWbHQtYnRuLS1zZWNvbmRhcnkgVmx0LWJ0bi0taWNvbiBWbHQtYnRuLS1sYXJnZVwiIHN0eWxlPSdtYXJnaW4tbGVmdDogMTJweDsnPlxuICAgICAgICA8c3ZnPjx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1wbHVzXCIvPjwvc3ZnPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIHR5cGU9J2J1dHRvbicgKm5nSWY9J21vZGVsICYmICFtdWx0aXBsZScgKGNsaWNrKT0nb3BlblJlc291cmNlKG1vZGVsKScgY2xhc3M9XCJWbHQtYnRuIFZsdC1idG4tLXByaW1hcnkgVmx0LWJ0bi0taWNvbiBWbHQtYnRuLS1sYXJnZVwiIHN0eWxlPSdtYXJnaW4tbGVmdDogMTJweDsnPlxuICAgICAgICA8c3ZnPjx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1lZGl0XCIvPjwvc3ZnPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9zcGFuPiAtLT5cbiAgICA8ZGl2ICpuZ0lmPSdoYXNBcHBlbmRCdXR0b24gJiYgIWRpc2FibGVkJyBjbGFzcz1cIlZsdC1jb21wb3NpdGVfX2FwcGVuZFwiPlxuICAgICAgPGJ1dHRvbiAoZm9jdXMpPSdvbkFjdGl2YXRlZCgkZXZlbnQpJyAoYmx1cik9J29uQmx1cigkZXZlbnQpJyB0eXBlPSdidXR0b24nICpuZ0lmPSchbW9kZWwgfHwgbXVsdGlwbGUnIChjbGljayk9J29wZW5SZXNvdXJjZSgpJyBjbGFzcz1cIlZsdC1idG4gVmx0LWJ0bi0td2hpdGUgVmx0LWJ0bi0taWNvblwiIGFyaWEtbGFiZWw9J0FkZCBuZXcnPlxuICAgICAgICA8c3ZnPjx1c2UgeGxpbms6aHJlZj1cInZvbHRhL3ZvbHRhLWljb25zLnN2ZyNWbHQtaWNvbi1wbHVzXCIvPjwvc3ZnPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uIChmb2N1cyk9J29uQWN0aXZhdGVkKCRldmVudCknIChibHVyKT0nb25CbHVyKCRldmVudCknIHR5cGU9J2J1dHRvbicgKm5nSWY9J21vZGVsICYmICFtdWx0aXBsZScgKGNsaWNrKT0nb3BlblJlc291cmNlKG1vZGVsKScgY2xhc3M9XCJWbHQtYnRuIFZsdC1idG4tLXdoaXRlIFZsdC1idG4tLWljb25cIiBhcmlhLWxhYmVsPSdFZGl0Jz5cbiAgICAgICAgPHN2Zz48dXNlIHhsaW5rOmhyZWY9XCJ2b2x0YS92b2x0YS1pY29ucy5zdmcjVmx0LWljb24tZWRpdFwiLz48L3N2Zz5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPHNtYWxsICpuZ0lmPSdmLmludmFsaWQgJiYgKChmIHwgbWV0YU1vZGVsKS5fcGFyZW50LnN1Ym1pdHRlZCB8fCAoKGZ0IHwgbWV0YU1vZGVsKS50b3VjaGVkICYmIGtleUxpc3RlbmVyQWN0aXZlKSknIGNsYXNzPVwiVmx0LWZvcm1fX2VsZW1lbnRfX2Vycm9yXCI+XG4gICAgPHNwYW4gKm5nSWY9XCJmLmVycm9ycy5yZXF1aXJlZFwiPlJlcXVpcmVkPC9zcGFuPlxuICAgIDxzcGFuICpuZ0lmPVwiZi5lcnJvcnMucGF0dGVyblwiPlNob3VsZCBtYXRjaCAne3t2YWxpZGF0aW9ucy5wYXR0ZXJufX0nIHBhdHRlcm48L3NwYW4+XG4gICAgPHNwYW4gKm5nSWY9XCJmLmVycm9ycy5jdXN0b21cIj57e2YuZXJyb3JzLmN1c3RvbX19Jm5ic3A7PC9zcGFuPlxuICA8L3NtYWxsPlxuICA8c21hbGwgKm5nSWY9J21ldGEuaGVscFRleHQgfHwgbWV0YS5oaW50JyBjbGFzcz1cIlZsdC1mb3JtX19lbGVtZW50X19oaW50XCI+e3ttZXRhLmhlbHBUZXh0IHx8IG1ldGEuaGludH19PC9zbWFsbD5cbjwvZGl2PlxuIl19