ctt-babylon 0.21.40 → 0.21.41

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.
@@ -1,13 +1,15 @@
1
1
  import { isPlatformBrowser } from '@angular/common';
2
- import { Directive, EventEmitter, HostListener, inject, Input, NgZone, Output, PLATFORM_ID, } from '@angular/core';
2
+ import { Directive, EventEmitter, HostListener, inject, Input, NgZone, Output, Inject, PLATFORM_ID, } from '@angular/core';
3
3
  import { SITE_CONFIG_SERVICE_TOKEN } from '../../services/mapper/mapper.service.token';
4
+ import { SCROLL_OFFSET_TOKEN } from '../../utils/scroll-config.token';
4
5
  import { complex_links } from '../../utils/complex-links.token';
5
6
  import * as i0 from "@angular/core";
6
7
  import * as i1 from "@angular/router";
7
8
  export class BabylonLinkTypeDirective {
8
- constructor(router, elRef) {
9
+ constructor(router, elRef, defaultOffset) {
9
10
  this.router = router;
10
11
  this.elRef = elRef;
12
+ this.defaultOffset = defaultOffset;
11
13
  this.disablePointerNone = false;
12
14
  this.anchorClicked = new EventEmitter();
13
15
  this.platformId = inject(PLATFORM_ID);
@@ -152,10 +154,9 @@ export class BabylonLinkTypeDirective {
152
154
  else {
153
155
  const element = document.getElementById(sectionId);
154
156
  if (element) {
155
- const yOffset = -160;
156
157
  const y = element.getBoundingClientRect().top +
157
158
  window.scrollY +
158
- yOffset;
159
+ this.defaultOffset;
159
160
  window.scrollTo({ top: y, behavior: 'smooth' });
160
161
  this.anchorClicked.emit();
161
162
  }
@@ -301,7 +302,7 @@ export class BabylonLinkTypeDirective {
301
302
  break;
302
303
  }
303
304
  }
304
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BabylonLinkTypeDirective, deps: [{ token: i1.Router }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
305
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BabylonLinkTypeDirective, deps: [{ token: i1.Router }, { token: i0.ElementRef }, { token: SCROLL_OFFSET_TOKEN }], target: i0.ɵɵFactoryTarget.Directive }); }
305
306
  static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.12", type: BabylonLinkTypeDirective, isStandalone: true, selector: "[linkType]", inputs: { linkType: "linkType", href: "href", modalClick: "modalClick", clickPopup: "clickPopup", disablePointerNone: "disablePointerNone" }, outputs: { anchorClicked: "anchorClicked" }, host: { listeners: { "click": "btnClick($event)" } }, usesOnChanges: true, ngImport: i0 }); }
306
307
  }
307
308
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BabylonLinkTypeDirective, decorators: [{
@@ -310,7 +311,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
310
311
  selector: '[linkType]',
311
312
  standalone: true,
312
313
  }]
313
- }], ctorParameters: () => [{ type: i1.Router }, { type: i0.ElementRef }], propDecorators: { linkType: [{
314
+ }], ctorParameters: () => [{ type: i1.Router }, { type: i0.ElementRef }, { type: undefined, decorators: [{
315
+ type: Inject,
316
+ args: [SCROLL_OFFSET_TOKEN]
317
+ }] }], propDecorators: { linkType: [{
314
318
  type: Input
315
319
  }], href: [{
316
320
  type: Input
@@ -326,4 +330,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
326
330
  type: HostListener,
327
331
  args: ['click', ['$event']]
328
332
  }] } });
329
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay10eXBlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhYnlsb24vc3JjL2xpYi9kaXJlY3RpdmVzL2xpbmstdHlwZS9saW5rLXR5cGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFDSCxTQUFTLEVBRVQsWUFBWSxFQUNaLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFFTixNQUFNLEVBQ04sV0FBVyxHQUNkLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7O0FBTWhFLE1BQU0sT0FBTyx3QkFBd0I7SUFnQmpDLFlBQ3FCLE1BQWMsRUFDZCxLQUFpQjtRQURqQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsVUFBSyxHQUFMLEtBQUssQ0FBWTtRQWI3Qix1QkFBa0IsR0FBYSxLQUFLLENBQUM7UUFDcEMsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBQzNDLGVBQVUsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDakMsb0JBQWUsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDL0IsWUFBTyxHQUFHLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzVDLFdBQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFeEIsYUFBUSxHQUFHLHNCQUFzQixDQUFDO1FBQ2xDLGNBQVMsR0FBRyxXQUFXLENBQUM7UUFDeEIsZUFBVSxHQUFHLGVBQWUsQ0FBQztJQUszQyxDQUFDO0lBQ0osV0FBVztRQUNQLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJ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Y0FBYyxDQUFDLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtvQkFDcEQsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDM0QsRUFBRSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7aUJBQ3JDO3FCQUFNO29CQUNILEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDM0M7Z0JBQ0QsRUFBRSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQ3BDLE1BQU07U0FDYjtJQUNMLENBQUM7K0dBcFhRLHdCQUF3QjttR0FBeEIsd0JBQXdCOzs0RkFBeEIsd0JBQXdCO2tCQUpwQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxZQUFZO29CQUN0QixVQUFVLEVBQUUsSUFBSTtpQkFDbkI7b0dBRVksUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDSSxhQUFhO3NCQUF0QixNQUFNO2dCQXlDUCxRQUFRO3NCQURQLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBEaXJlY3RpdmUsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIGluamVjdCxcbiAgICBJbnB1dCxcbiAgICBOZ1pvbmUsXG4gICAgT25DaGFuZ2VzLFxuICAgIE91dHB1dCxcbiAgICBQTEFURk9STV9JRCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgU0lURV9DT05GSUdfU0VSVklDRV9UT0tFTiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21hcHBlci9tYXBwZXIuc2VydmljZS50b2tlbic7XG5pbXBvcnQgeyBjb21wbGV4X2xpbmtzIH0gZnJvbSAnLi4vLi4vdXRpbHMvY29tcGxleC1saW5rcy50b2tlbic7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2xpbmtUeXBlXScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgQmFieWxvbkxpbmtUeXBlRGlyZWN0aXZlIGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgICBASW5wdXQoKSBsaW5rVHlwZT86IHN0cmluZztcbiAgICBASW5wdXQoKSBocmVmPzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIG1vZGFsQ2xpY2s/OiBFdmVudEVtaXR0ZXI8c3RyaW5nPjtcbiAgICBASW5wdXQoKSBjbGlja1BvcHVwPzogRXZlbnRFbWl0dGVyPHN0cmluZz47XG4gICAgQElucHV0KCkgZGlzYWJsZVBvaW50ZXJOb25lPzogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBPdXRwdXQoKSBhbmNob3JDbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIHByaXZhdGUgcGxhdGZvcm1JZCA9IGluamVjdChQTEFURk9STV9JRCk7XG4gICAgcHJpdmF0ZSBoYXNDb21wbGV4TGlua3MgPSBpbmplY3QoY29tcGxleF9saW5rcyk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBzaXRlU3ZjID0gaW5qZWN0KFNJVEVfQ09ORklHX1NFUlZJQ0VfVE9LRU4pO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbmdab25lID0gaW5qZWN0KE5nWm9uZSk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IFBIT05FX1JFID0gL15UXFxzKls6XFwtXT9cXHMqKC4rKSQvaTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IE1BSUxUT19SRSA9IC9ebWFpbHRvOi9pO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgQUREUkVTU19SRSA9IC9eY1xcL1xcLj8oLiopJC9pO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZWxSZWY6IEVsZW1lbnRSZWZcbiAgICApIHt9XG4gICAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5saW5rVHlwZSB8fCAhdGhpcy5ocmVmKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZU5vTGluaygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVsID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCBpc0FuY2hvciA9IGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2EnO1xuXG4gICAgICAgIC8vIFNPTE8gYXBsaWNhbW9zIGF0cmlidXRvcyBIVE1MIGRlIGVubGFjZXMgc2kgZXMgdW5hIGV0aXF1ZXRhIDxhPlxuICAgICAgICBpZiAoaXNBbmNob3IpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRXh0ZXJuYWxUeXBlKHRoaXMubGlua1R5cGUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGV0ZWN0ZWQgPSB0aGlzLmRldGVjdEV4dGVybmFsS2luZCh0aGlzLmhyZWYpO1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlOb3JtYWxpemVkSHJlZihkZXRlY3RlZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZSgnaHJlZicsIHRoaXMuaHJlZik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmtUeXBlID09PSAnZXh0ZXJuYWwnIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5saW5rVHlwZSA9PT0gJ2V4dGVybmFsX2xpbmsnXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ3JlbCcsICdub2ZvbGxvdycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICAgIGJ0bkNsaWNrKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMubGlua1R5cGUgfHwgIXRoaXMuaHJlZikge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVOb0xpbmsoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5saW5rVHlwZSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdsaW5rVHlwZSBpcyBtaXNzaW5nLicpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBzd2l0Y2ggKHRoaXMubGlua1R5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2ludGVybmFsJzpcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUludGVybmFsTGluayh0aGlzLmhyZWYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdpbnRlcm5hbF9saW5rJzpcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUludGVybmFsTGluayh0aGlzLmhyZWYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdzZWxmX2xpbmsnOlxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlSW50ZXJuYWxMaW5rKHRoaXMuaHJlZik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ2ludGVybmFsX2hvdGVsX2xpbmsnOlxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlSW50ZXJuYWxMaW5rKHRoaXMuaHJlZik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ2V4dGVybmFsJzpcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUV4dGVybmFsTGluayh0aGlzLmhyZWYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdleHRlcm5hbF9saW5rJzpcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUV4dGVybmFsTGluayh0aGlzLmhyZWYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdhbmNob3InOlxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQW5jaG9yTGluayh0aGlzLmhyZWYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdhbmNob3JfbGluayc6XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVBbmNob3JMaW5rKHRoaXMuaHJlZik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ3BkZl9saW5rJzpcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVBkZkxpbmsodGhpcy5ocmVmKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnbm9saW5rJzpcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZU5vTGluaygpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdjb21wb25lbnQnOlxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ29tcG9uZW50TGluayh0aGlzLmhyZWYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdjb21wb25lbnRfbGluayc6XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDb21wb25lbnRMaW5rKHRoaXMuaHJlZik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBVbnN1cHBvcnRlZCBsaW5rVHlwZTogJHt0aGlzLmxpbmtUeXBlfWApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVJbnRlcm5hbExpbmsodXJsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY2xlYW5lZFVybCA9IHVybC50cmltKCkucmVwbGFjZSgvXFwvKyQvLCAnJyk7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9ICcvJyArIGNsZWFuZWRVcmw7XG4gICAgICAgIHRoaXMuYW5jaG9yQ2xpY2tlZC5lbWl0KCk7XG5cbiAgICAgICAgY29uc3QgY3VycmVudCA9ICh0aGlzLnJvdXRlci51cmwgfHwgJycpXG4gICAgICAgICAgICAuc3BsaXQoJz8nKVswXVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcLyskLywgJycpO1xuICAgICAgICBjb25zdCB0YXJnZXRDbGVhbiA9IHRhcmdldC5zcGxpdCgnPycpWzBdLnJlcGxhY2UoL1xcLyskLywgJycpO1xuXG4gICAgICAgIGlmIChjdXJyZW50ID09PSB0YXJnZXRDbGVhbikgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodGFyZ2V0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUV4dGVybmFsTGluayh1cmw6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybjtcblxuICAgICAgICBjb25zdCBkZXRlY3RlZCA9IHRoaXMuZGV0ZWN0RXh0ZXJuYWxLaW5kKHVybCk7XG4gICAgICAgIHN3aXRjaCAoZGV0ZWN0ZWQua2luZCkge1xuICAgICAgICAgICAgY2FzZSAncGhvbmUnOlxuICAgICAgICAgICAgICAgIHRoaXMub3BlblBob25lKGRldGVjdGVkLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2VtYWlsJzpcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5FbWFpbChkZXRlY3RlZC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdhZGRyZXNzJzpcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5BZGRyZXNzKGRldGVjdGVkLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAhZGV0ZWN0ZWQudmFsdWUgfHxcbiAgICAgICAgICAgICAgICAgICAgZGV0ZWN0ZWQudmFsdWUgPT09ICcjJyB8fFxuICAgICAgICAgICAgICAgICAgICBkZXRlY3RlZC52YWx1ZSA9PT0gJy8jJ1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgICAgICAgICAnU2UgaW50ZW50w7MgYWJyaXIgdW4gZW5sYWNlIGV4dGVybm8gdmFjw61vIG8gaW52w6FsaWRvIChwbGFjZWhvbGRlcik6JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGVjdGVkLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpc0Fic29sdXRlVXJsID0gKHVybDogc3RyaW5nKSA9PiAvXihodHRwcz86KS9pLnRlc3QodXJsKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbmFsVXJsID0gaXNBYnNvbHV0ZVVybChkZXRlY3RlZC52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgPyBkZXRlY3RlZC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICA6ICdodHRwczovLycgKyBkZXRlY3RlZC52YWx1ZS5yZXBsYWNlKC9eXFwvKy8sICcnKTtcblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5vcGVuKGZpbmFsVXJsLCAnX2JsYW5rJyk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0Vycm9yIGFicmllbmRvIHZlbnRhbmEgZXh0ZXJuYSBjb24gVVJMOicsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbFVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVBkZkxpbmsodXJsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgICAgICAgIHdpbmRvdy5vcGVuKHVybCwgJ19ibGFuaycpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVBbmNob3JMaW5rKHNlY3Rpb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICAgICAgICBjb25zdCBsYW5nID1cbiAgICAgICAgICAgICAgICB0aGlzLnNpdGVTdmMuc2VsZWN0ZWRMYW5ndWFnZUluc3RhbnQ/LmxvY2F0ZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaGFzQ29tcGxleExpbmtzICYmIHRoaXMucm91dGVyLnVybCAhPT0gYC8ke2xhbmd9YCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVkaXJlY3RUb0hvbWVBbmNob3Ioc2VjdGlvbklkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNlY3Rpb25JZCk7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeU9mZnNldCA9IC0xNjA7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHkgPVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgK1xuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LnNjcm9sbFkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgeU9mZnNldDtcblxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oeyB0b3A6IHksIGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbmNob3JDbGlja2VkLmVtaXQoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYFNlY3Rpb24gd2l0aCBJRCAke3NlY3Rpb25JZH0gbm90IGZvdW5kLmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlQ29tcG9uZW50TGluayh1cmw6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBjbGVhbmVkQ29tcG9uZW50TmFtZSA9IHVybC50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKHRoaXMubW9kYWxDbGljaykge1xuICAgICAgICAgICAgdGhpcy5tb2RhbENsaWNrLmVtaXQoY2xlYW5lZENvbXBvbmVudE5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNsaWNrUG9wdXApIHtcbiAgICAgICAgICAgIHRoaXMuY2xpY2tQb3B1cC5lbWl0KGNsZWFuZWRDb21wb25lbnROYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlTm9MaW5rKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwYXJlbnRMaSA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5jbG9zZXN0KCdsaScpO1xuXG4gICAgICAgIGNvbnN0IGlzSW5zaWRlTWVudUl0ZW1XaXRoQ2hpbGRyZW4gPSBwYXJlbnRMaT8uY2xhc3NMaXN0LmNvbnRhaW5zKFxuICAgICAgICAgICAgJ21lbnUtaXRlbS1oYXMtY2hpbGRyZW4nXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKCFpc0luc2lkZU1lbnVJdGVtV2l0aENoaWxkcmVuKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZVBvaW50ZXJOb25lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnaHJlZicpO1xuICAgICAgICAgICAgICAgIHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ1tocmVmXScpO1xuICAgICAgICAgICAgICAgIHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZGlzYWJsZWQnLCAndHJ1ZScpO1xuICAgICAgICAgICAgICAgIHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJy0xJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLmN1cnNvciA9ICdkZWZhdWx0JztcbiAgICAgICAgICAgICAgICB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb3BlblBob25lKG51bTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gYHRlbDoke251bX1gO1xuICAgIH1cblxuICAgIHByaXZhdGUgb3BlbkVtYWlsKGVtYWlsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBgbWFpbHRvOiR7ZW1haWx9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9wZW5BZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBtYXBzVXJsID0gdGhpcy5idWlsZE1hcHNVcmwoYWRkcmVzcyk7XG4gICAgICAgIHdpbmRvdy5vcGVuKG1hcHNVcmwsICdfYmxhbmsnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkTWFwc1VybChhZGRyZXNzOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYGh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vbWFwcy9zZWFyY2gvP2FwaT0xJnF1ZXJ5PSR7ZW5jb2RlVVJJQ29tcG9uZW50KGFkZHJlc3MpfWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0V4dGVybmFsVHlwZSh0Pzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0ID09PSAnZXh0ZXJuYWwnIHx8IHQgPT09ICdleHRlcm5hbF9saW5rJztcbiAgICB9XG5cbiAgICBwcml2YXRlIGRldGVjdEV4dGVybmFsS2luZChyYXc6IHN0cmluZyk6IHtcbiAgICAgICAga2luZDogJ3Bob25lJyB8ICdlbWFpbCcgfCAnYWRkcmVzcycgfCAndXJsJztcbiAgICAgICAgdmFsdWU6IHN0cmluZztcbiAgICB9IHtcbiAgICAgICAgY29uc3QgdHJpbW1lZCA9IChyYXcgfHwgJycpLnRyaW0oKTtcblxuICAgICAgICBpZiAodGhpcy5NQUlMVE9fUkUudGVzdCh0cmltbWVkKSkge1xuICAgICAgICAgICAgY29uc3QgZW1haWwgPSB0cmltbWVkLnJlcGxhY2UoL15tYWlsdG86L2ksICcnKTtcbiAgICAgICAgICAgIHJldHVybiB7IGtpbmQ6ICdlbWFpbCcsIHZhbHVlOiBlbWFpbCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuUEhPTkVfUkUudGVzdCh0cmltbWVkKSkge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2ggPSB0aGlzLlBIT05FX1JFLmV4ZWModHJpbW1lZCk7XG4gICAgICAgICAgICBjb25zdCBudW1SYXcgPSAobWF0Y2g/LlsxXSA/PyAnJykudHJpbSgpO1xuICAgICAgICAgICAgY29uc3QgZGlnaXRzID0gbnVtUmF3LnJlcGxhY2UoL1teXFxkK10vZywgJycpO1xuICAgICAgICAgICAgcmV0dXJuIHsga2luZDogJ3Bob25lJywgdmFsdWU6IGRpZ2l0cyB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICgvXnRlbDovaS50ZXN0KHRyaW1tZWQpKSB7XG4gICAgICAgICAgICBjb25zdCBudW0gPSB0cmltbWVkLnJlcGxhY2UoL150ZWw6L2ksICcnKS5yZXBsYWNlKC9bXlxcZCtdL2csICcnKTtcbiAgICAgICAgICAgIHJldHVybiB7IGtpbmQ6ICdwaG9uZScsIHZhbHVlOiBudW0gfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFkZHJNYXRjaCA9IHRoaXMuQUREUkVTU19SRS5leGVjKHRyaW1tZWQpO1xuICAgICAgICBpZiAoYWRkck1hdGNoKSB7XG4gICAgICAgICAgICBjb25zdCBhZGRyID0gKGFkZHJNYXRjaFsxXSA/PyAnJykudHJpbSgpO1xuICAgICAgICAgICAgcmV0dXJuIHsga2luZDogJ2FkZHJlc3MnLCB2YWx1ZTogYWRkciB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsga2luZDogJ3VybCcsIHZhbHVlOiB0cmltbWVkIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGVja0V4dGVybmFsTGFuZ3VhZ2VzKHZhbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgbGFuZyA9IHRoaXMuc2l0ZVN2Yy5zZWxlY3RlZExhbmd1YWdlSW5zdGFudD8ubG9jYXRlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGxldCBsYW5ndXJsID0gdmFsICsgJy8nICsgbGFuZztcblxuICAgICAgICByZXR1cm4gbGFuZ3VybDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZGlyZWN0VG9Ib21lQW5jaG9yKHNlY3Rpb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGludGVydmFsTXMgPSA1MDtcbiAgICAgICAgbGV0IGludGVydmFsSWQ6IGFueTtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgnLycpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXR0ZW1wdFNjcm9sbCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNlY3Rpb25JZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9TZWN0aW9uKHNlY3Rpb25JZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaW50ZXJ2YWxJZCA9IHNldEludGVydmFsKGF0dGVtcHRTY3JvbGwsIGludGVydmFsTXMpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgU2VjdGlvbiB3aXRoIElEICR7c2VjdGlvbklkfSBub3QgZm91bmQuYCk7XG4gICAgICAgICAgICAgICAgfSwgMzAwMCk7XG5cbiAgICAgICAgICAgICAgICBhdHRlbXB0U2Nyb2xsKCk7XG4gICAgICAgICAgICB9LCAzMDApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNjcm9sbFRvU2VjdGlvbihzZWN0aW9uSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc2VjdGlvbklkKTtcbiAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHlPZmZzZXQgPSAtMTYwO1xuICAgICAgICAgICAgICAgIGNvbnN0IHkgPVxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxZICtcbiAgICAgICAgICAgICAgICAgICAgeU9mZnNldDtcblxuICAgICAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbyh7IHRvcDogeSwgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuYW5jaG9yQ2xpY2tlZC5lbWl0KCk7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYm9keScpPy5jbGFzc0xpc3QucmVtb3ZlKCdub19zY3JvbGwnKTtcbiAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYFNlY3Rpb24gd2l0aCBJRCAke3NlY3Rpb25JZH0gbm90IGZvdW5kLmApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhcHBseU5vcm1hbGl6ZWRIcmVmKGRldGVjdGVkOiB7XG4gICAgICAgIGtpbmQ6ICdwaG9uZScgfCAnZW1haWwnIHwgJ2FkZHJlc3MnIHwgJ3VybCc7XG4gICAgICAgIHZhbHVlOiBzdHJpbmc7XG4gICAgfSk6IHZvaWQge1xuICAgICAgICBjb25zdCBlbCA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgaXNBbmNob3IgPSBlbC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdhJztcblxuICAgICAgICBpZiAoIWlzQW5jaG9yKSByZXR1cm47XG5cbiAgICAgICAgc3dpdGNoIChkZXRlY3RlZC5raW5kKSB7XG4gICAgICAgICAgICBjYXNlICdwaG9uZSc6XG4gICAgICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKCdocmVmJywgYHRlbDoke2RldGVjdGVkLnZhbHVlfWApO1xuICAgICAgICAgICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZSgndGFyZ2V0Jyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdlbWFpbCc6XG4gICAgICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKCdocmVmJywgYG1haWx0bzoke2RldGVjdGVkLnZhbHVlfWApO1xuICAgICAgICAgICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZSgndGFyZ2V0Jyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdhZGRyZXNzJzpcbiAgICAgICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCB0aGlzLmJ1aWxkTWFwc1VybChkZXRlY3RlZC52YWx1ZSkpO1xuICAgICAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZSgndGFyZ2V0JywgJ19ibGFuaycpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpZiAoZWwuY2xvc2VzdCgnLmNzX25hdl9saXN0JykgJiYgdGhpcy5oYXNDb21wbGV4TGlua3MpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5ld3ZhbHVlID0gdGhpcy5jaGVja0V4dGVybmFsTGFuZ3VhZ2VzKGRldGVjdGVkLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKCdocmVmJywgbmV3dmFsdWUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZSgnaHJlZicsIGRldGVjdGVkLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKCd0YXJnZXQnLCAnX2JsYW5rJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
333
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay10eXBlLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhYnlsb24vc3JjL2xpYi9kaXJlY3RpdmVzL2xpbmstdHlwZS9saW5rLXR5cGUuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFDSCxTQUFTLEVBRVQsWUFBWSxFQUNaLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFFTixNQUFNLEVBQ04sTUFBTSxFQUNOLFdBQVcsR0FDZCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUN2RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUM7OztBQU1oRSxNQUFNLE9BQU8sd0JBQXdCO0lBZ0JqQyxZQUNxQixNQUFjLEVBQ2QsS0FBaUIsRUFDWSxhQUFxQjtRQUZsRCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsVUFBSyxHQUFMLEtBQUssQ0FBWTtRQUNZLGtCQUFhLEdBQWIsYUFBYSxDQUFRO1FBZDlELHVCQUFrQixHQUFhLEtBQUssQ0FBQztRQUNwQyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFDM0MsZUFBVSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNqQyxvQkFBZSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMvQixZQUFPLEdBQUcsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDNUMsV0FBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUV4QixhQUFRLEdBQUcsc0JBQXNCLENBQUM7UUFDbEMsY0FBUyxHQUFH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QUUsUUFBUSxDQUFDLENBQUM7Z0JBQ3BDLE1BQU07WUFDVjtnQkFDSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtvQkFDcEQsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDM0QsRUFBRSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7aUJBQ3JDO3FCQUFNO29CQUNILEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDM0M7Z0JBQ0QsRUFBRSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQ3BDLE1BQU07U0FDYjtJQUNMLENBQUM7K0dBcFhRLHdCQUF3QixrRUFtQnJCLG1CQUFtQjttR0FuQnRCLHdCQUF3Qjs7NEZBQXhCLHdCQUF3QjtrQkFKcEMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsWUFBWTtvQkFDdEIsVUFBVSxFQUFFLElBQUk7aUJBQ25COzswQkFvQlEsTUFBTTsyQkFBQyxtQkFBbUI7eUNBbEJ0QixRQUFRO3NCQUFoQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNJLGFBQWE7c0JBQXRCLE1BQU07Z0JBMENQLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgaW5qZWN0LFxuICAgIElucHV0LFxuICAgIE5nWm9uZSxcbiAgICBPbkNoYW5nZXMsXG4gICAgT3V0cHV0LFxuICAgIEluamVjdCxcbiAgICBQTEFURk9STV9JRCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgU0lURV9DT05GSUdfU0VSVklDRV9UT0tFTiB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21hcHBlci9tYXBwZXIuc2VydmljZS50b2tlbic7XG5pbXBvcnQgeyBTQ1JPTExfT0ZGU0VUX1RPS0VOIH0gZnJvbSAnLi4vLi4vdXRpbHMvc2Nyb2xsLWNvbmZpZy50b2tlbic7XG5pbXBvcnQgeyBjb21wbGV4X2xpbmtzIH0gZnJvbSAnLi4vLi4vdXRpbHMvY29tcGxleC1saW5rcy50b2tlbic7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2xpbmtUeXBlXScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgQmFieWxvbkxpbmtUeXBlRGlyZWN0aXZlIGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgICBASW5wdXQoKSBsaW5rVHlwZT86IHN0cmluZztcbiAgICBASW5wdXQoKSBocmVmPzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIG1vZGFsQ2xpY2s/OiBFdmVudEVtaXR0ZXI8c3RyaW5nPjtcbiAgICBASW5wdXQoKSBjbGlja1BvcHVwPzogRXZlbnRFbWl0dGVyPHN0cmluZz47XG4gICAgQElucHV0KCkgZGlzYWJsZVBvaW50ZXJOb25lPzogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBPdXRwdXQoKSBhbmNob3JDbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIHByaXZhdGUgcGxhdGZvcm1JZCA9IGluamVjdChQTEFURk9STV9JRCk7XG4gICAgcHJpdmF0ZSBoYXNDb21wbGV4TGlua3MgPSBpbmplY3QoY29tcGxleF9saW5rcyk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBzaXRlU3ZjID0gaW5qZWN0KFNJVEVfQ09ORklHX1NFUlZJQ0VfVE9LRU4pO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbmdab25lID0gaW5qZWN0KE5nWm9uZSk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IFBIT05FX1JFID0gL15UXFxzKls6XFwtXT9cXHMqKC4rKSQvaTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IE1BSUxUT19SRSA9IC9ebWFpbHRvOi9pO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgQUREUkVTU19SRSA9IC9eY1xcL1xcLj8oLiopJC9pO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZWxSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIEBJbmplY3QoU0NST0xMX09GRlNFVF9UT0tFTikgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0T2Zmc2V0OiBudW1iZXJcbiAgICApIHt9XG4gICAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5saW5rVHlwZSB8fCAhdGhpcy5ocmVmKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZU5vTGluaygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVsID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCBpc0FuY2hvciA9IGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2EnO1xuXG4gICAgICAgIC8vIFNPTE8gYXBsaWNhbW9zIGF0cmlidXRvcyBIVE1MIGRlIGVubGFjZXMgc2kgZXMgdW5hIGV0aXF1ZXRhIDxhPlxuICAgICAgICBpZiAoaXNBbmNob3IpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRXh0ZXJuYWxUeXBlKHRoaXMubGlua1R5cGUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGV0ZWN0ZWQgPSB0aGlzLmRldGVjdEV4dGVybmFsS2luZCh0aGlzLmhyZWYpO1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlOb3JtYWxpemVkSHJlZihkZXRlY3RlZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZSgnaHJlZicsIHRoaXMuaHJlZik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmtUeXBlID09PSAnZXh0ZXJuYWwnIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5saW5rVHlwZSA9PT0gJ2V4dGVybmFsX2xpbmsnXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ3JlbCcsICdub2ZvbGxvdycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICAgIGJ0bkNsaWNrKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMubGlua1R5cGUgfHwgIXRoaXMuaHJlZikge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVOb0xpbmsoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5saW5rVHlwZSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdsaW5rVHlwZSBpcyBtaXNzaW5nLicpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBzd2l0Y2ggKHRoaXMubGlua1R5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2ludGVybmFsJzpcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUludGVybmFsTGluayh0aGlzLmhyZWYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdpbnRlcm5hbF9saW5rJzpcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUludGVybmFsTGluayh0aGlzLmhyZWYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdzZWxmX2xpbmsnOlxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlSW50ZXJuYWxMaW5rKHRoaXMuaHJlZik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ2ludGVybmFsX2hvdGVsX2xpbmsnOlxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlSW50ZXJuYWxMaW5rKHRoaXMuaHJlZik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ2V4dGVybmFsJzpcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUV4dGVybmFsTGluayh0aGlzLmhyZWYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdleHRlcm5hbF9saW5rJzpcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUV4dGVybmFsTGluayh0aGlzLmhyZWYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdhbmNob3InOlxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQW5jaG9yTGluayh0aGlzLmhyZWYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdhbmNob3JfbGluayc6XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVBbmNob3JMaW5rKHRoaXMuaHJlZik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ3BkZl9saW5rJzpcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVBkZkxpbmsodGhpcy5ocmVmKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnbm9saW5rJzpcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZU5vTGluaygpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdjb21wb25lbnQnOlxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ29tcG9uZW50TGluayh0aGlzLmhyZWYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdjb21wb25lbnRfbGluayc6XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDb21wb25lbnRMaW5rKHRoaXMuaHJlZik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBVbnN1cHBvcnRlZCBsaW5rVHlwZTogJHt0aGlzLmxpbmtUeXBlfWApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVJbnRlcm5hbExpbmsodXJsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY2xlYW5lZFVybCA9IHVybC50cmltKCkucmVwbGFjZSgvXFwvKyQvLCAnJyk7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9ICcvJyArIGNsZWFuZWRVcmw7XG4gICAgICAgIHRoaXMuYW5jaG9yQ2xpY2tlZC5lbWl0KCk7XG5cbiAgICAgICAgY29uc3QgY3VycmVudCA9ICh0aGlzLnJvdXRlci51cmwgfHwgJycpXG4gICAgICAgICAgICAuc3BsaXQoJz8nKVswXVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcLyskLywgJycpO1xuICAgICAgICBjb25zdCB0YXJnZXRDbGVhbiA9IHRhcmdldC5zcGxpdCgnPycpWzBdLnJlcGxhY2UoL1xcLyskLywgJycpO1xuXG4gICAgICAgIGlmIChjdXJyZW50ID09PSB0YXJnZXRDbGVhbikgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwodGFyZ2V0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUV4dGVybmFsTGluayh1cmw6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybjtcblxuICAgICAgICBjb25zdCBkZXRlY3RlZCA9IHRoaXMuZGV0ZWN0RXh0ZXJuYWxLaW5kKHVybCk7XG4gICAgICAgIHN3aXRjaCAoZGV0ZWN0ZWQua2luZCkge1xuICAgICAgICAgICAgY2FzZSAncGhvbmUnOlxuICAgICAgICAgICAgICAgIHRoaXMub3BlblBob25lKGRldGVjdGVkLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2VtYWlsJzpcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5FbWFpbChkZXRlY3RlZC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdhZGRyZXNzJzpcbiAgICAgICAgICAgICAgICB0aGlzLm9wZW5BZGRyZXNzKGRldGVjdGVkLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAhZGV0ZWN0ZWQudmFsdWUgfHxcbiAgICAgICAgICAgICAgICAgICAgZGV0ZWN0ZWQudmFsdWUgPT09ICcjJyB8fFxuICAgICAgICAgICAgICAgICAgICBkZXRlY3RlZC52YWx1ZSA9PT0gJy8jJ1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgICAgICAgICAnU2UgaW50ZW50w7MgYWJyaXIgdW4gZW5sYWNlIGV4dGVybm8gdmFjw61vIG8gaW52w6FsaWRvIChwbGFjZWhvbGRlcik6JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGVjdGVkLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBpc0Fic29sdXRlVXJsID0gKHVybDogc3RyaW5nKSA9PiAvXihodHRwcz86KS9pLnRlc3QodXJsKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbmFsVXJsID0gaXNBYnNvbHV0ZVVybChkZXRlY3RlZC52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgPyBkZXRlY3RlZC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICA6ICdodHRwczovLycgKyBkZXRlY3RlZC52YWx1ZS5yZXBsYWNlKC9eXFwvKy8sICcnKTtcblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5vcGVuKGZpbmFsVXJsLCAnX2JsYW5rJyk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0Vycm9yIGFicmllbmRvIHZlbnRhbmEgZXh0ZXJuYSBjb24gVVJMOicsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbFVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVBkZkxpbmsodXJsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgICAgICAgIHdpbmRvdy5vcGVuKHVybCwgJ19ibGFuaycpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVBbmNob3JMaW5rKHNlY3Rpb25JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICAgICAgICBjb25zdCBsYW5nID1cbiAgICAgICAgICAgICAgICB0aGlzLnNpdGVTdmMuc2VsZWN0ZWRMYW5ndWFnZUluc3RhbnQ/LmxvY2F0ZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaGFzQ29tcGxleExpbmtzICYmIHRoaXMucm91dGVyLnVybCAhPT0gYC8ke2xhbmd9YCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVkaXJlY3RUb0hvbWVBbmNob3Ioc2VjdGlvbklkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNlY3Rpb25JZCk7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArXG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2Nyb2xsWSArXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRPZmZzZXQ7XG5cbiAgICAgICAgICAgICAgICAgICAgd2luZG93LnNjcm9sbFRvKHsgdG9wOiB5LCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYW5jaG9yQ2xpY2tlZC5lbWl0KCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBTZWN0aW9uIHdpdGggSUQgJHtzZWN0aW9uSWR9IG5vdCBmb3VuZC5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUNvbXBvbmVudExpbmsodXJsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY2xlYW5lZENvbXBvbmVudE5hbWUgPSB1cmwudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICh0aGlzLm1vZGFsQ2xpY2spIHtcbiAgICAgICAgICAgIHRoaXMubW9kYWxDbGljay5lbWl0KGNsZWFuZWRDb21wb25lbnROYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jbGlja1BvcHVwKSB7XG4gICAgICAgICAgICB0aGlzLmNsaWNrUG9wdXAuZW1pdChjbGVhbmVkQ29tcG9uZW50TmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZU5vTGluaygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGFyZW50TGkgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuY2xvc2VzdCgnbGknKTtcblxuICAgICAgICBjb25zdCBpc0luc2lkZU1lbnVJdGVtV2l0aENoaWxkcmVuID0gcGFyZW50TGk/LmNsYXNzTGlzdC5jb250YWlucyhcbiAgICAgICAgICAgICdtZW51LWl0ZW0taGFzLWNoaWxkcmVuJ1xuICAgICAgICApO1xuXG4gICAgICAgIGlmICghaXNJbnNpZGVNZW51SXRlbVdpdGhDaGlsZHJlbikge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVQb2ludGVyTm9uZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2hyZWYnKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdbaHJlZl0nKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWRpc2FibGVkJywgJ3RydWUnKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICctMScpO1xuICAgICAgICAgICAgICAgIHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5zdHlsZS5jdXJzb3IgPSAnZGVmYXVsdCc7XG4gICAgICAgICAgICAgICAgdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9wZW5QaG9uZShudW06IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGB0ZWw6JHtudW19YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9wZW5FbWFpbChlbWFpbDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gYG1haWx0bzoke2VtYWlsfWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvcGVuQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbWFwc1VybCA9IHRoaXMuYnVpbGRNYXBzVXJsKGFkZHJlc3MpO1xuICAgICAgICB3aW5kb3cub3BlbihtYXBzVXJsLCAnX2JsYW5rJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZE1hcHNVcmwoYWRkcmVzczogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGBodHRwczovL3d3dy5nb29nbGUuY29tL21hcHMvc2VhcmNoLz9hcGk9MSZxdWVyeT0ke2VuY29kZVVSSUNvbXBvbmVudChhZGRyZXNzKX1gO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNFeHRlcm5hbFR5cGUodD86IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdCA9PT0gJ2V4dGVybmFsJyB8fCB0ID09PSAnZXh0ZXJuYWxfbGluayc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZXRlY3RFeHRlcm5hbEtpbmQocmF3OiBzdHJpbmcpOiB7XG4gICAgICAgIGtpbmQ6ICdwaG9uZScgfCAnZW1haWwnIHwgJ2FkZHJlc3MnIHwgJ3VybCc7XG4gICAgICAgIHZhbHVlOiBzdHJpbmc7XG4gICAgfSB7XG4gICAgICAgIGNvbnN0IHRyaW1tZWQgPSAocmF3IHx8ICcnKS50cmltKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuTUFJTFRPX1JFLnRlc3QodHJpbW1lZCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGVtYWlsID0gdHJpbW1lZC5yZXBsYWNlKC9ebWFpbHRvOi9pLCAnJyk7XG4gICAgICAgICAgICByZXR1cm4geyBraW5kOiAnZW1haWwnLCB2YWx1ZTogZW1haWwgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLlBIT05FX1JFLnRlc3QodHJpbW1lZCkpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gdGhpcy5QSE9ORV9SRS5leGVjKHRyaW1tZWQpO1xuICAgICAgICAgICAgY29uc3QgbnVtUmF3ID0gKG1hdGNoPy5bMV0gPz8gJycpLnRyaW0oKTtcbiAgICAgICAgICAgIGNvbnN0IGRpZ2l0cyA9IG51bVJhdy5yZXBsYWNlKC9bXlxcZCtdL2csICcnKTtcbiAgICAgICAgICAgIHJldHVybiB7IGtpbmQ6ICdwaG9uZScsIHZhbHVlOiBkaWdpdHMgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoL150ZWw6L2kudGVzdCh0cmltbWVkKSkge1xuICAgICAgICAgICAgY29uc3QgbnVtID0gdHJpbW1lZC5yZXBsYWNlKC9edGVsOi9pLCAnJykucmVwbGFjZSgvW15cXGQrXS9nLCAnJyk7XG4gICAgICAgICAgICByZXR1cm4geyBraW5kOiAncGhvbmUnLCB2YWx1ZTogbnVtIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhZGRyTWF0Y2ggPSB0aGlzLkFERFJFU1NfUkUuZXhlYyh0cmltbWVkKTtcbiAgICAgICAgaWYgKGFkZHJNYXRjaCkge1xuICAgICAgICAgICAgY29uc3QgYWRkciA9IChhZGRyTWF0Y2hbMV0gPz8gJycpLnRyaW0oKTtcbiAgICAgICAgICAgIHJldHVybiB7IGtpbmQ6ICdhZGRyZXNzJywgdmFsdWU6IGFkZHIgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IGtpbmQ6ICd1cmwnLCB2YWx1ZTogdHJpbW1lZCB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgY2hlY2tFeHRlcm5hbExhbmd1YWdlcyh2YWw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGxhbmcgPSB0aGlzLnNpdGVTdmMuc2VsZWN0ZWRMYW5ndWFnZUluc3RhbnQ/LmxvY2F0ZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgbGFuZ3VybCA9IHZhbCArICcvJyArIGxhbmc7XG5cbiAgICAgICAgcmV0dXJuIGxhbmd1cmw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWRpcmVjdFRvSG9tZUFuY2hvcihzZWN0aW9uSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbnRlcnZhbE1zID0gNTA7XG4gICAgICAgIGxldCBpbnRlcnZhbElkOiBhbnk7XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy8nKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGF0dGVtcHRTY3JvbGwgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzZWN0aW9uSWQpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvU2VjdGlvbihzZWN0aW9uSWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGludGVydmFsSWQgPSBzZXRJbnRlcnZhbChhdHRlbXB0U2Nyb2xsLCBpbnRlcnZhbE1zKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsSWQpO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYFNlY3Rpb24gd2l0aCBJRCAke3NlY3Rpb25JZH0gbm90IGZvdW5kLmApO1xuICAgICAgICAgICAgICAgIH0sIDMwMDApO1xuXG4gICAgICAgICAgICAgICAgYXR0ZW1wdFNjcm9sbCgpO1xuICAgICAgICAgICAgfSwgMzAwKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzY3JvbGxUb1NlY3Rpb24oc2VjdGlvbklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNlY3Rpb25JZCk7XG4gICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB5T2Zmc2V0ID0gLTE2MDtcbiAgICAgICAgICAgICAgICBjb25zdCB5ID1cbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgK1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2Nyb2xsWSArXG4gICAgICAgICAgICAgICAgICAgIHlPZmZzZXQ7XG5cbiAgICAgICAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oeyB0b3A6IHksIGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmFuY2hvckNsaWNrZWQuZW1pdCgpO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2JvZHknKT8uY2xhc3NMaXN0LnJlbW92ZSgnbm9fc2Nyb2xsJyk7XG4gICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBTZWN0aW9uIHdpdGggSUQgJHtzZWN0aW9uSWR9IG5vdCBmb3VuZC5gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXBwbHlOb3JtYWxpemVkSHJlZihkZXRlY3RlZDoge1xuICAgICAgICBraW5kOiAncGhvbmUnIHwgJ2VtYWlsJyB8ICdhZGRyZXNzJyB8ICd1cmwnO1xuICAgICAgICB2YWx1ZTogc3RyaW5nO1xuICAgIH0pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZWwgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGlzQW5jaG9yID0gZWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnYSc7XG5cbiAgICAgICAgaWYgKCFpc0FuY2hvcikgcmV0dXJuO1xuXG4gICAgICAgIHN3aXRjaCAoZGV0ZWN0ZWQua2luZCkge1xuICAgICAgICAgICAgY2FzZSAncGhvbmUnOlxuICAgICAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZSgnaHJlZicsIGB0ZWw6JHtkZXRlY3RlZC52YWx1ZX1gKTtcbiAgICAgICAgICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoJ3RhcmdldCcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZW1haWwnOlxuICAgICAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZSgnaHJlZicsIGBtYWlsdG86JHtkZXRlY3RlZC52YWx1ZX1gKTtcbiAgICAgICAgICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoJ3RhcmdldCcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYWRkcmVzcyc6XG4gICAgICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKCdocmVmJywgdGhpcy5idWlsZE1hcHNVcmwoZGV0ZWN0ZWQudmFsdWUpKTtcbiAgICAgICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ3RhcmdldCcsICdfYmxhbmsnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgaWYgKGVsLmNsb3Nlc3QoJy5jc19uYXZfbGlzdCcpICYmIHRoaXMuaGFzQ29tcGxleExpbmtzKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBuZXd2YWx1ZSA9IHRoaXMuY2hlY2tFeHRlcm5hbExhbmd1YWdlcyhkZXRlY3RlZC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZSgnaHJlZicsIG5ld3ZhbHVlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBkZXRlY3RlZC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZSgndGFyZ2V0JywgJ19ibGFuaycpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19