1 | import { Injectable, Component, Input, Output, EventEmitter, ElementRef, HostBinding, NgZone, Directive, Optional, NgModule } from '@angular/core';
|
2 | import { fromEvent, Observable, Subject, of, merge, zip } from 'rxjs';
|
3 | import { filter, map, share, tap, take } from 'rxjs/operators';
|
4 | import { __spread } from 'tslib';
|
5 | import { CommonModule } from '@angular/common';
|
6 |
|
7 | /**
|
8 | * @fileoverview added by tsickle
|
9 | * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
10 | */
|
11 | /** @enum {number} */
|
12 | var BsModalHideType = {
|
13 | Close: 0,
|
14 | Dismiss: 1,
|
15 | Backdrop: 2,
|
16 | Keyboard: 3,
|
17 | RouteChange: 4,
|
18 | Destroy: 5,
|
19 | };
|
20 | BsModalHideType[BsModalHideType.Close] = 'Close';
|
21 | BsModalHideType[BsModalHideType.Dismiss] = 'Dismiss';
|
22 | BsModalHideType[BsModalHideType.Backdrop] = 'Backdrop';
|
23 | BsModalHideType[BsModalHideType.Keyboard] = 'Keyboard';
|
24 | BsModalHideType[BsModalHideType.RouteChange] = 'RouteChange';
|
25 | BsModalHideType[BsModalHideType.Destroy] = 'Destroy';
|
26 |
|
27 | /**
|
28 | * @fileoverview added by tsickle
|
29 | * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
30 | */
|
31 | var BsModalSize = /** @class */ (function () {
|
32 | function BsModalSize() {
|
33 | }
|
34 | /**
|
35 | * @param {?} size
|
36 | * @return {?}
|
37 | */
|
38 | BsModalSize.isValidSize = /**
|
39 | * @param {?} size
|
40 | * @return {?}
|
41 | */
|
42 | function (size) {
|
43 | return size && (size === BsModalSize.Small || size === BsModalSize.Large);
|
44 | };
|
45 | BsModalSize.Small = 'sm';
|
46 | BsModalSize.Large = 'lg';
|
47 | return BsModalSize;
|
48 | }());
|
49 |
|
50 | /**
|
51 | * @fileoverview added by tsickle
|
52 | * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
53 | */
|
54 |
|
55 | /**
|
56 | * @fileoverview added by tsickle
|
57 | * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
58 | */
|
59 | /** @type {?} */
|
60 | var EVENT_SUFFIX = 'ng2-bs3-modal';
|
61 | /** @type {?} */
|
62 | var KEYUP_EVENT_NAME = "keyup." + EVENT_SUFFIX;
|
63 | /** @type {?} */
|
64 | var CLICK_EVENT_NAME = "click." + EVENT_SUFFIX;
|
65 | /** @type {?} */
|
66 | var SHOW_EVENT_NAME = "show.bs.modal." + EVENT_SUFFIX;
|
67 | var BsModalService = /** @class */ (function () {
|
68 | function BsModalService() {
|
69 | var _this = this;
|
70 | this.modals = [];
|
71 | this.$body = jQuery(document.body);
|
72 | this.onBackdropClose$ = fromEvent(this.$body, CLICK_EVENT_NAME).pipe(filter(function (e) { return jQuery(e.target).is('.modal'); }), map(function () { return BsModalHideType.Backdrop; }), share());
|
73 | this.onKeyboardClose$ = fromEvent(this.$body, KEYUP_EVENT_NAME).pipe(filter(function (e) { return e.which === 27; }), map(function () { return BsModalHideType.Keyboard; }), share());
|
74 | this.onModalStack$ = fromEvent(this.$body, SHOW_EVENT_NAME).pipe(tap(function () {
|
75 | /** @type {?} */
|
76 | var zIndex = 1040 + (10 * jQuery('.modal:visible').length);
|
77 | jQuery(_this).css('z-index', zIndex);
|
78 | setTimeout(function () {
|
79 | jQuery('.modal-backdrop').not('.modal-stack').css('z-index', zIndex - 1).addClass('modal-stack');
|
80 | }, 0);
|
81 | }), share());
|
82 | }
|
83 | /**
|
84 | * @param {?} modal
|
85 | * @return {?}
|
86 | */
|
87 | BsModalService.prototype.add = /**
|
88 | * @param {?} modal
|
89 | * @return {?}
|
90 | */
|
91 | function (modal) {
|
92 | this.modals.push(modal);
|
93 | };
|
94 | /**
|
95 | * @param {?} modal
|
96 | * @return {?}
|
97 | */
|
98 | BsModalService.prototype.remove = /**
|
99 | * @param {?} modal
|
100 | * @return {?}
|
101 | */
|
102 | function (modal) {
|
103 | /** @type {?} */
|
104 | var index = this.modals.indexOf(modal);
|
105 | if (index > -1) {
|
106 | this.modals.splice(index, 1);
|
107 | }
|
108 | };
|
109 | /**
|
110 | * @return {?}
|
111 | */
|
112 | BsModalService.prototype.focusNext = /**
|
113 | * @return {?}
|
114 | */
|
115 | function () {
|
116 | /** @type {?} */
|
117 | var visible = this.modals.filter(function (m) { return m.visible; });
|
118 | if (visible.length) {
|
119 | this.$body.addClass('modal-open');
|
120 | visible[visible.length - 1].focus();
|
121 | }
|
122 | };
|
123 | /**
|
124 | * @return {?}
|
125 | */
|
126 | BsModalService.prototype.dismissAll = /**
|
127 | * @return {?}
|
128 | */
|
129 | function () {
|
130 | return Promise.all(this.modals.map(function (m) {
|
131 | return m.dismiss();
|
132 | }));
|
133 | };
|
134 | BsModalService.decorators = [
|
135 | { type: Injectable },
|
136 | ];
|
137 | /** @nocollapse */
|
138 | BsModalService.ctorParameters = function () { return []; };
|
139 | return BsModalService;
|
140 | }());
|
141 |
|
142 | /**
|
143 | * @fileoverview added by tsickle
|
144 | * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
145 | */
|
146 | /** @type {?} */
|
147 | var EVENT_SUFFIX$1 = 'ng2-bs3-modal';
|
148 | /** @type {?} */
|
149 | var SHOW_EVENT_NAME$1 = "show.bs.modal." + EVENT_SUFFIX$1;
|
150 | /** @type {?} */
|
151 | var SHOWN_EVENT_NAME = "shown.bs.modal." + EVENT_SUFFIX$1;
|
152 | /** @type {?} */
|
153 | var HIDE_EVENT_NAME = "hide.bs.modal." + EVENT_SUFFIX$1;
|
154 | /** @type {?} */
|
155 | var HIDDEN_EVENT_NAME = "hidden.bs.modal." + EVENT_SUFFIX$1;
|
156 | /** @type {?} */
|
157 | var LOADED_EVENT_NAME = "loaded.bs.modal." + EVENT_SUFFIX$1;
|
158 | /** @type {?} */
|
159 | var DATA_KEY = 'bs.modal';
|
160 | var BsModalComponent = /** @class */ (function () {
|
161 | function BsModalComponent(element, service, zone) {
|
162 | var _this = this;
|
163 | this.element = element;
|
164 | this.service = service;
|
165 | this.zone = zone;
|
166 | this.overrideSize = null;
|
167 | this.onInternalClose$ = new Subject();
|
168 | this.subscriptions = [];
|
169 | this.visible = false;
|
170 | this.showing = false;
|
171 | this.hiding = false;
|
172 | this.animation = true;
|
173 | this.backdrop = true;
|
174 | this.keyboard = true;
|
175 | this.onShow = new EventEmitter();
|
176 | this.onOpen = new EventEmitter();
|
177 | this.onHide = new EventEmitter();
|
178 | this.onClose = new EventEmitter();
|
179 | this.onDismiss = new EventEmitter();
|
180 | this.onLoaded = new EventEmitter();
|
181 | this.setVisible = function (isVisible) {
|
182 | return function () {
|
183 | _this.visible = isVisible;
|
184 | _this.showing = false;
|
185 | _this.hiding = false;
|
186 | };
|
187 | };
|
188 | this.setOptions = function (options) {
|
189 | /** @type {?} */
|
190 | var backdrop = options.backdrop;
|
191 | if (typeof backdrop === 'string' && backdrop !== 'static') {
|
192 | backdrop = true;
|
193 | }
|
194 | if (options.backdrop !== undefined) {
|
195 | _this.options.backdrop = backdrop;
|
196 | }
|
197 | if (options.keyboard !== undefined) {
|
198 | _this.options.keyboard = options.keyboard;
|
199 | }
|
200 | };
|
201 | this.service.add(this);
|
202 | this.init();
|
203 | }
|
204 | Object.defineProperty(BsModalComponent.prototype, "options", {
|
205 | get: /**
|
206 | * @return {?}
|
207 | */
|
208 | function () {
|
209 | if (!this.$modal) {
|
210 | this.init();
|
211 | }
|
212 | return this.$modal.data(DATA_KEY).options;
|
213 | },
|
214 | enumerable: true,
|
215 | configurable: true
|
216 | });
|
217 | Object.defineProperty(BsModalComponent.prototype, "fadeClass", {
|
218 | get: /**
|
219 | * @return {?}
|
220 | */
|
221 | function () { return this.animation; },
|
222 | enumerable: true,
|
223 | configurable: true
|
224 | });
|
225 | Object.defineProperty(BsModalComponent.prototype, "modalClass", {
|
226 | get: /**
|
227 | * @return {?}
|
228 | */
|
229 | function () { return true; },
|
230 | enumerable: true,
|
231 | configurable: true
|
232 | });
|
233 | Object.defineProperty(BsModalComponent.prototype, "roleAttr", {
|
234 | get: /**
|
235 | * @return {?}
|
236 | */
|
237 | function () { return 'dialog'; },
|
238 | enumerable: true,
|
239 | configurable: true
|
240 | });
|
241 | Object.defineProperty(BsModalComponent.prototype, "tabindexAttr", {
|
242 | get: /**
|
243 | * @return {?}
|
244 | */
|
245 | function () { return '-1'; },
|
246 | enumerable: true,
|
247 | configurable: true
|
248 | });
|
249 | /**
|
250 | * @return {?}
|
251 | */
|
252 | BsModalComponent.prototype.ngOnInit = /**
|
253 | * @return {?}
|
254 | */
|
255 | function () {
|
256 | this.wireUpEventEmitters();
|
257 | };
|
258 | /**
|
259 | * @return {?}
|
260 | */
|
261 | BsModalComponent.prototype.ngAfterViewInit = /**
|
262 | * @return {?}
|
263 | */
|
264 | function () {
|
265 | this.$dialog = this.$modal.find('.modal-dialog');
|
266 | };
|
267 | /**
|
268 | * @return {?}
|
269 | */
|
270 | BsModalComponent.prototype.ngOnChanges = /**
|
271 | * @return {?}
|
272 | */
|
273 | function () {
|
274 | this.setOptions({
|
275 | backdrop: this.backdrop,
|
276 | keyboard: this.keyboard
|
277 | });
|
278 | };
|
279 | /**
|
280 | * @return {?}
|
281 | */
|
282 | BsModalComponent.prototype.ngOnDestroy = /**
|
283 | * @return {?}
|
284 | */
|
285 | function () {
|
286 | this.onInternalClose$.next(BsModalHideType.Destroy);
|
287 | return this.destroy();
|
288 | };
|
289 | /**
|
290 | * @return {?}
|
291 | */
|
292 | BsModalComponent.prototype.focus = /**
|
293 | * @return {?}
|
294 | */
|
295 | function () {
|
296 | this.$modal.trigger('focus');
|
297 | };
|
298 | /**
|
299 | * @return {?}
|
300 | */
|
301 | BsModalComponent.prototype.routerCanDeactivate = /**
|
302 | * @return {?}
|
303 | */
|
304 | function () {
|
305 | this.onInternalClose$.next(BsModalHideType.RouteChange);
|
306 | return this.destroy();
|
307 | };
|
308 | /**
|
309 | * @param {?=} size
|
310 | * @return {?}
|
311 | */
|
312 | BsModalComponent.prototype.open = /**
|
313 | * @param {?=} size
|
314 | * @return {?}
|
315 | */
|
316 | function (size) {
|
317 | this.overrideSize = null;
|
318 | if (BsModalSize.isValidSize(size)) {
|
319 | this.overrideSize = size;
|
320 | }
|
321 | return this.show().toPromise();
|
322 | };
|
323 | /**
|
324 | * @param {?=} value
|
325 | * @return {?}
|
326 | */
|
327 | BsModalComponent.prototype.close = /**
|
328 | * @param {?=} value
|
329 | * @return {?}
|
330 | */
|
331 | function (value) {
|
332 | var _this = this;
|
333 | this.onInternalClose$.next(BsModalHideType.Close);
|
334 | return this.hide().pipe(tap(function () { return _this.onClose.emit(value); })).toPromise().then(function () { return value; });
|
335 | };
|
336 | /**
|
337 | * @return {?}
|
338 | */
|
339 | BsModalComponent.prototype.dismiss = /**
|
340 | * @return {?}
|
341 | */
|
342 | function () {
|
343 | this.onInternalClose$.next(BsModalHideType.Dismiss);
|
344 | return this.hide().toPromise();
|
345 | };
|
346 | /**
|
347 | * @return {?}
|
348 | */
|
349 | BsModalComponent.prototype.getCssClasses = /**
|
350 | * @return {?}
|
351 | */
|
352 | function () {
|
353 | /** @type {?} */
|
354 | var classes = [];
|
355 | if (this.isSmall()) {
|
356 | classes.push('modal-sm');
|
357 | }
|
358 | if (this.isLarge()) {
|
359 | classes.push('modal-lg');
|
360 | }
|
361 | if (this.cssClass) {
|
362 | classes.push(this.cssClass);
|
363 | }
|
364 | return classes.join(' ');
|
365 | };
|
366 | /**
|
367 | * @return {?}
|
368 | */
|
369 | BsModalComponent.prototype.isSmall = /**
|
370 | * @return {?}
|
371 | */
|
372 | function () {
|
373 | return this.overrideSize !== BsModalSize.Large
|
374 | && this.size === BsModalSize.Small
|
375 | || this.overrideSize === BsModalSize.Small;
|
376 | };
|
377 | /**
|
378 | * @return {?}
|
379 | */
|
380 | BsModalComponent.prototype.isLarge = /**
|
381 | * @return {?}
|
382 | */
|
383 | function () {
|
384 | return this.overrideSize !== BsModalSize.Small
|
385 | && this.size === BsModalSize.Large
|
386 | || this.overrideSize === BsModalSize.Large;
|
387 | };
|
388 | /**
|
389 | * @return {?}
|
390 | */
|
391 | BsModalComponent.prototype.show = /**
|
392 | * @return {?}
|
393 | */
|
394 | function () {
|
395 | var _this = this;
|
396 | if (this.visible && !this.hiding) {
|
397 | return of(null);
|
398 | }
|
399 | this.showing = true;
|
400 | return Observable.create(function (o) {
|
401 | _this.onShown$.pipe(take(1)).subscribe(function (next) {
|
402 | o.next(next);
|
403 | o.complete();
|
404 | });
|
405 | _this.transitionFix();
|
406 | _this.$modal.modal('show');
|
407 | });
|
408 | };
|
409 | /**
|
410 | * @return {?}
|
411 | */
|
412 | BsModalComponent.prototype.transitionFix = /**
|
413 | * @return {?}
|
414 | */
|
415 | function () {
|
416 | var _this = this;
|
417 | // Fix for shown.bs.modal not firing when .fade is present
|
418 | // https://github.com/twbs/bootstrap/issues/11793
|
419 | if (this.animation) {
|
420 | setTimeout(function () {
|
421 | _this.$modal.trigger('focus').trigger(SHOWN_EVENT_NAME);
|
422 | }, jQuery.fn.modal['Constructor'].TRANSITION_DURATION);
|
423 | }
|
424 | };
|
425 | /**
|
426 | * @return {?}
|
427 | */
|
428 | BsModalComponent.prototype.hide = /**
|
429 | * @return {?}
|
430 | */
|
431 | function () {
|
432 | var _this = this;
|
433 | if (!this.visible && !this.showing) {
|
434 | return of(null);
|
435 | }
|
436 | this.hiding = true;
|
437 | return Observable.create(function (o) {
|
438 | _this.onHidden$.pipe(take(1)).subscribe(function (next) {
|
439 | o.next(next);
|
440 | o.complete();
|
441 | });
|
442 | _this.$modal.modal('hide');
|
443 | });
|
444 | };
|
445 | /**
|
446 | * @return {?}
|
447 | */
|
448 | BsModalComponent.prototype.init = /**
|
449 | * @return {?}
|
450 | */
|
451 | function () {
|
452 | var _this = this;
|
453 | this.$modal = jQuery(this.element.nativeElement);
|
454 | this.$modal.appendTo(document.body);
|
455 | this.$modal.modal({
|
456 | show: false
|
457 | });
|
458 | this.onShowEvent$ = fromEvent(this.$modal, SHOW_EVENT_NAME$1);
|
459 | this.onShownEvent$ = fromEvent(this.$modal, SHOWN_EVENT_NAME);
|
460 | this.onHideEvent$ = fromEvent(this.$modal, HIDE_EVENT_NAME);
|
461 | this.onHiddenEvent$ = fromEvent(this.$modal, HIDDEN_EVENT_NAME);
|
462 | this.onLoadedEvent$ = fromEvent(this.$modal, LOADED_EVENT_NAME);
|
463 | /** @type {?} */
|
464 | var onClose$ = merge(this.onInternalClose$, this.service.onBackdropClose$, this.service.onKeyboardClose$);
|
465 | this.onHide$ = zip(this.onHideEvent$, onClose$).pipe(map(function (x) { return ({ event: x[0], type: x[1] }); }));
|
466 | this.onHidden$ = zip(this.onHiddenEvent$, onClose$).pipe(map(function (x) { return x[1]; }), tap(this.setVisible(false)), tap(function () { return _this.service.focusNext(); }), share());
|
467 | this.onShown$ = this.onShownEvent$.pipe(tap(this.setVisible(true)), share());
|
468 | this.onDismiss$ = this.onHidden$.pipe(filter(function (x) { return x !== BsModalHideType.Close; }));
|
469 | // Start watching for events
|
470 | // Start watching for events
|
471 | (_a = this.subscriptions).push.apply(_a, __spread([
|
472 | this.onShown$.subscribe(function () { }),
|
473 | this.onHidden$.subscribe(function () { }),
|
474 | this.service.onModalStack$.subscribe(function () { })
|
475 | ]));
|
476 | var _a;
|
477 | };
|
478 | /**
|
479 | * @return {?}
|
480 | */
|
481 | BsModalComponent.prototype.wireUpEventEmitters = /**
|
482 | * @return {?}
|
483 | */
|
484 | function () {
|
485 | this.wireUpEventEmitter(this.onShow, this.onShowEvent$);
|
486 | this.wireUpEventEmitter(this.onOpen, this.onShown$);
|
487 | this.wireUpEventEmitter(this.onHide, this.onHide$);
|
488 | this.wireUpEventEmitter(this.onDismiss, this.onDismiss$);
|
489 | this.wireUpEventEmitter(this.onLoaded, this.onLoadedEvent$);
|
490 | };
|
491 | /**
|
492 | * @template T
|
493 | * @param {?} emitter
|
494 | * @param {?} stream$
|
495 | * @return {?}
|
496 | */
|
497 | BsModalComponent.prototype.wireUpEventEmitter = /**
|
498 | * @template T
|
499 | * @param {?} emitter
|
500 | * @param {?} stream$
|
501 | * @return {?}
|
502 | */
|
503 | function (emitter, stream$) {
|
504 | var _this = this;
|
505 | if (emitter.observers.length === 0) {
|
506 | return;
|
507 | }
|
508 | /** @type {?} */
|
509 | var sub = stream$.subscribe(function (next) {
|
510 | _this.zone.run(function () {
|
511 | emitter.next(next);
|
512 | });
|
513 | });
|
514 | this.subscriptions.push(sub);
|
515 | };
|
516 | /**
|
517 | * @return {?}
|
518 | */
|
519 | BsModalComponent.prototype.destroy = /**
|
520 | * @return {?}
|
521 | */
|
522 | function () {
|
523 | var _this = this;
|
524 | return this.hide().pipe(tap(function () {
|
525 | _this.service.remove(_this);
|
526 | _this.subscriptions.forEach(function (s) { return s.unsubscribe(); });
|
527 | _this.subscriptions = [];
|
528 | if (_this.$modal) {
|
529 | _this.$modal.data(DATA_KEY, null);
|
530 | _this.$modal.remove();
|
531 | _this.$modal = null;
|
532 | }
|
533 | })).toPromise();
|
534 | };
|
535 | BsModalComponent.decorators = [
|
536 | { type: Component, args: [{
|
537 | selector: 'bs-modal',
|
538 | template: "\n <div class=\"modal-dialog\" [ngClass]=\"getCssClasses()\">\n <div class=\"modal-content\">\n <ng-content></ng-content>\n </div>\n </div>\n "
|
539 | },] },
|
540 | ];
|
541 | /** @nocollapse */
|
542 | BsModalComponent.ctorParameters = function () { return [
|
543 | { type: ElementRef },
|
544 | { type: BsModalService },
|
545 | { type: NgZone }
|
546 | ]; };
|
547 | BsModalComponent.propDecorators = {
|
548 | animation: [{ type: Input }],
|
549 | backdrop: [{ type: Input }],
|
550 | keyboard: [{ type: Input }],
|
551 | size: [{ type: Input }],
|
552 | cssClass: [{ type: Input }],
|
553 | onShow: [{ type: Output }],
|
554 | onOpen: [{ type: Output }],
|
555 | onHide: [{ type: Output }],
|
556 | onClose: [{ type: Output }],
|
557 | onDismiss: [{ type: Output }],
|
558 | onLoaded: [{ type: Output }],
|
559 | fadeClass: [{ type: HostBinding, args: ['class.fade',] }],
|
560 | modalClass: [{ type: HostBinding, args: ['class.modal',] }],
|
561 | roleAttr: [{ type: HostBinding, args: ['attr.role',] }],
|
562 | tabindexAttr: [{ type: HostBinding, args: ['attr.tabindex',] }]
|
563 | };
|
564 | return BsModalComponent;
|
565 | }());
|
566 |
|
567 | /**
|
568 | * @fileoverview added by tsickle
|
569 | * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
570 | */
|
571 | var BsModalHeaderComponent = /** @class */ (function () {
|
572 | function BsModalHeaderComponent(modal) {
|
573 | this.modal = modal;
|
574 | this.showDismiss = false;
|
575 | }
|
576 | BsModalHeaderComponent.decorators = [
|
577 | { type: Component, args: [{
|
578 | selector: 'bs-modal-header',
|
579 | template: "\n <div class=\"modal-header\">\n <button *ngIf=\"showDismiss\" type=\"button\" class=\"close\" aria-label=\"Dismiss\" (click)=\"modal.dismiss()\">\n <span aria-hidden=\"true\">×</span>\n </button>\n <ng-content></ng-content>\n </div>\n "
|
580 | },] },
|
581 | ];
|
582 | /** @nocollapse */
|
583 | BsModalHeaderComponent.ctorParameters = function () { return [
|
584 | { type: BsModalComponent }
|
585 | ]; };
|
586 | BsModalHeaderComponent.propDecorators = {
|
587 | showDismiss: [{ type: Input }]
|
588 | };
|
589 | return BsModalHeaderComponent;
|
590 | }());
|
591 |
|
592 | /**
|
593 | * @fileoverview added by tsickle
|
594 | * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
595 | */
|
596 | var BsModalBodyComponent = /** @class */ (function () {
|
597 | function BsModalBodyComponent() {
|
598 | }
|
599 | BsModalBodyComponent.decorators = [
|
600 | { type: Component, args: [{
|
601 | selector: 'bs-modal-body',
|
602 | template: "\n <div class=\"modal-body\">\n <ng-content></ng-content>\n </div>\n "
|
603 | },] },
|
604 | ];
|
605 | return BsModalBodyComponent;
|
606 | }());
|
607 |
|
608 | /**
|
609 | * @fileoverview added by tsickle
|
610 | * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
611 | */
|
612 | var BsModalFooterComponent = /** @class */ (function () {
|
613 | function BsModalFooterComponent(modal) {
|
614 | this.modal = modal;
|
615 | this.showDefaultButtons = false;
|
616 | this.dismissButtonLabel = 'Dismiss';
|
617 | this.closeButtonLabel = 'Close';
|
618 | }
|
619 | BsModalFooterComponent.decorators = [
|
620 | { type: Component, args: [{
|
621 | selector: 'bs-modal-footer',
|
622 | template: "\n <div class=\"modal-footer\">\n <ng-content></ng-content>\n <button *ngIf=\"showDefaultButtons\" type=\"button\" class=\"btn btn-default\" (click)=\"modal.dismiss()\">\n {{dismissButtonLabel}}\n </button>\n <button *ngIf=\"showDefaultButtons\" type=\"button\" class=\"btn btn-primary\" (click)=\"modal.close()\">\n {{closeButtonLabel}}\n </button>\n </div>\n "
|
623 | },] },
|
624 | ];
|
625 | /** @nocollapse */
|
626 | BsModalFooterComponent.ctorParameters = function () { return [
|
627 | { type: BsModalComponent }
|
628 | ]; };
|
629 | BsModalFooterComponent.propDecorators = {
|
630 | showDefaultButtons: [{ type: Input }],
|
631 | dismissButtonLabel: [{ type: Input }],
|
632 | closeButtonLabel: [{ type: Input }]
|
633 | };
|
634 | return BsModalFooterComponent;
|
635 | }());
|
636 |
|
637 | /**
|
638 | * @fileoverview added by tsickle
|
639 | * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
640 | */
|
641 | var BsAutofocusDirective = /** @class */ (function () {
|
642 | function BsAutofocusDirective(el, modal) {
|
643 | var _this = this;
|
644 | this.el = el;
|
645 | this.modal = modal;
|
646 | if (modal) {
|
647 | this.modal.onOpen.subscribe(function () {
|
648 | _this.el.nativeElement.focus();
|
649 | });
|
650 | }
|
651 | }
|
652 | BsAutofocusDirective.decorators = [
|
653 | { type: Directive, args: [{
|
654 | // tslint:disable-next-line:directive-selector
|
655 | selector: '[autofocus]'
|
656 | },] },
|
657 | ];
|
658 | /** @nocollapse */
|
659 | BsAutofocusDirective.ctorParameters = function () { return [
|
660 | { type: ElementRef },
|
661 | { type: BsModalComponent, decorators: [{ type: Optional }] }
|
662 | ]; };
|
663 | return BsAutofocusDirective;
|
664 | }());
|
665 |
|
666 | /**
|
667 | * @fileoverview added by tsickle
|
668 | * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
669 | */
|
670 | var BsModalModule = /** @class */ (function () {
|
671 | function BsModalModule() {
|
672 | }
|
673 | BsModalModule.decorators = [
|
674 | { type: NgModule, args: [{
|
675 | imports: [
|
676 | CommonModule
|
677 | ],
|
678 | declarations: [
|
679 | BsModalComponent,
|
680 | BsModalHeaderComponent,
|
681 | BsModalBodyComponent,
|
682 | BsModalFooterComponent,
|
683 | BsAutofocusDirective
|
684 | ],
|
685 | providers: [
|
686 | BsModalService
|
687 | ],
|
688 | exports: [
|
689 | BsModalComponent,
|
690 | BsModalHeaderComponent,
|
691 | BsModalBodyComponent,
|
692 | BsModalFooterComponent,
|
693 | BsAutofocusDirective
|
694 | ]
|
695 | },] },
|
696 | ];
|
697 | return BsModalModule;
|
698 | }());
|
699 |
|
700 | /**
|
701 | * @fileoverview added by tsickle
|
702 | * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
703 | */
|
704 |
|
705 | /**
|
706 | * @fileoverview added by tsickle
|
707 | * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
708 | */
|
709 |
|
710 | export { BsModalService, BsModalComponent, BsModalHeaderComponent, BsModalBodyComponent, BsModalFooterComponent, BsModalHideType, BsModalSize, BsModalModule, BsAutofocusDirective as ɵa };
|
711 |
|
712 | //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmcyLWJzMy1tb2RhbC5qcy5tYXAiLCJzb3VyY2VzIjpbIm5nOi8vbmcyLWJzMy1tb2RhbC9tb2RhbC9tb2RlbHMvbW9kYWwtaGlkZS10eXBlLnRzIiwibmc6Ly9uZzItYnMzLW1vZGFsL21vZGFsL21vZGVscy9tb2RhbC1zaXplLnRzIiwibmc6Ly9uZzItYnMzLW1vZGFsL21vZGFsL21vZGFsLnNlcnZpY2UudHMiLCJuZzovL25nMi1iczMtbW9kYWwvbW9kYWwvbW9kYWwuY29tcG9uZW50LnRzIiwibmc6Ly9uZzItYnMzLW1vZGFsL21vZGFsL2hlYWRlci5jb21wb25lbnQudHMiLCJuZzovL25nMi1iczMtbW9kYWwvbW9kYWwvYm9keS5jb21wb25lbnQudHMiLCJuZzovL25nMi1iczMtbW9kYWwvbW9kYWwvZm9vdGVyLmNvbXBvbmVudC50cyIsIm5nOi8vbmcyLWJzMy1tb2RhbC9hdXRvZm9jdXMvYXV0b2ZvY3VzLmRpcmVjdGl2ZS50cyIsIm5nOi8vbmcyLWJzMy1tb2RhbC9tb2RhbC5tb2R1bGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGVudW0gQnNNb2RhbEhpZGVUeXBlIHtcbiAgICBDbG9zZSxcbiAgICBEaXNtaXNzLFxuICAgIEJhY2tkcm9wLFxuICAgIEtleWJvYXJkLFxuICAgIFJvdXRlQ2hhbmdlLFxuICAgIERlc3Ryb3lcbn1cbiIsImV4cG9ydCBjbGFzcyBCc01vZGFsU2l6ZSB7XG4gICAgc3RhdGljIFNtYWxsID0gJ3NtJztcbiAgICBzdGF0aWMgTGFyZ2UgPSAnbGcnO1xuXG4gICAgc3RhdGljIGlzVmFsaWRTaXplKHNpemU6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gc2l6ZSAmJiAoc2l6ZSA9PT0gQnNNb2RhbFNpemUuU21hbGwgfHwgc2l6ZSA9PT0gQnNNb2RhbFNpemUuTGFyZ2UpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIHNoYXJlLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEJzTW9kYWxDb21wb25lbnQgfSBmcm9tICcuL21vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCc01vZGFsSGlkZVR5cGUgfSBmcm9tICcuL21vZGVscyc7XG5cbmNvbnN0IEVWRU5UX1NVRkZJWCA9ICduZzItYnMzLW1vZGFsJztcbmNvbnN0IEtFWVVQX0VWRU5UX05BTUUgPSBga2V5dXAuJHtFVkVOVF9TVUZGSVh9YDtcbmNvbnN0IENMSUNLX0VWRU5UX05BTUUgPSBgY2xpY2suJHtFVkVOVF9TVUZGSVh9YDtcbmNvbnN0IFNIT1dfRVZFTlRfTkFNRSA9IGBzaG93LmJzLm1vZGFsLiR7RVZFTlRfU1VGRklYfWA7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBCc01vZGFsU2VydmljZSB7XG5cbiAgICBwcml2YXRlIG1vZGFsczogQnNNb2RhbENvbXBvbmVudFtdID0gW107XG4gICAgcHJpdmF0ZSAkYm9keTogSlF1ZXJ5O1xuXG4gICAgb25CYWNrZHJvcENsb3NlJDogT2JzZXJ2YWJsZTxCc01vZGFsSGlkZVR5cGU+O1xuICAgIG9uS2V5Ym9hcmRDbG9zZSQ6IE9ic2VydmFibGU8QnNNb2RhbEhpZGVUeXBlPjtcbiAgICBvbk1vZGFsU3RhY2skOiBPYnNlcnZhYmxlPEV2ZW50PjtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLiRib2R5ID0galF1ZXJ5KGRvY3VtZW50LmJvZHkpO1xuXG4gICAgICAgIHRoaXMub25CYWNrZHJvcENsb3NlJCA9IGZyb21FdmVudCh0aGlzLiRib2R5LCBDTElDS19FVkVOVF9OQU1FKS5waXBlKFxuICAgICAgICAgICAgZmlsdGVyKChlOiBNb3VzZUV2ZW50KSA9PiBqUXVlcnkoZS50YXJnZXQpLmlzKCcubW9kYWwnKSksXG4gICAgICAgICAgICBtYXAoKCkgPT4gQnNNb2RhbEhpZGVUeXBlLkJhY2tkcm9wKSxcbiAgICAgICAgICAgIHNoYXJlKCksXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5vbktleWJvYXJkQ2xvc2UkID0gZnJvbUV2ZW50KHRoaXMuJGJvZHksIEtFWVVQX0VWRU5UX05BTUUpLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoKGU6IEtleWJvYXJkRXZlbnQpID0+IGUud2hpY2ggPT09IDI3KSxcbiAgICAgICAgICAgIG1hcCgoKSA9PiBCc01vZGFsSGlkZVR5cGUuS2V5Ym9hcmQpLFxuICAgICAgICAgICAgc2hhcmUoKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMub25Nb2RhbFN0YWNrJCA9IGZyb21FdmVudDxFdmVudD4odGhpcy4kYm9keSwgU0hPV19FVkVOVF9OQU1FKS5waXBlKFxuICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB6SW5kZXggPSAxMDQwICsgKDEwICogalF1ZXJ5KCcubW9kYWw6dmlzaWJsZScpLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgalF1ZXJ5KHRoaXMpLmNzcygnei1pbmRleCcsIHpJbmRleCk7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KCcubW9kYWwtYmFja2Ryb3AnKS5ub3QoJy5tb2RhbC1zdGFjaycpLmNzcygnei1pbmRleCcsIHpJbmRleCAtIDEpLmFkZENsYXNzKCdtb2RhbC1zdGFjaycpO1xuICAgICAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBzaGFyZSgpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgYWRkKG1vZGFsOiBCc01vZGFsQ29tcG9uZW50KSB7XG4gICAgICAgIHRoaXMubW9kYWxzLnB1c2gobW9kYWwpO1xuICAgIH1cblxuICAgIHJlbW92ZShtb2RhbDogQnNNb2RhbENvbXBvbmVudCkge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMubW9kYWxzLmluZGV4T2YobW9kYWwpO1xuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgdGhpcy5tb2RhbHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvY3VzTmV4dCgpIHtcbiAgICAgICAgY29uc3QgdmlzaWJsZSA9IHRoaXMubW9kYWxzLmZpbHRlcihtID0+IG0udmlzaWJsZSk7XG4gICAgICAgIGlmICh2aXNpYmxlLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy4kYm9keS5hZGRDbGFzcygnbW9kYWwtb3BlbicpO1xuICAgICAgICAgICAgdmlzaWJsZVt2aXNpYmxlLmxlbmd0aCAtIDFdLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkaXNtaXNzQWxsKCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwodGhpcy5tb2RhbHMubWFwKChtKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbS5kaXNtaXNzKCk7XG4gICAgICAgIH0pKTtcbiAgICB9XG59XG4iLCIvLyB0c2xpbnQ6ZGlzYWJsZTpuby1vdXRwdXQtb24tcHJlZml4XG5pbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBPbkluaXQsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgRWxlbWVudFJlZixcbiAgICBIb3N0QmluZGluZyxcbiAgICBOZ1pvbmVcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBPYnNlcnZlciwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBvZiBhcyBvYnNlcnZhYmxlT2YsIGZyb21FdmVudCwgbWVyZ2UsIHppcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZSwgZmlsdGVyLCB0YXAsIHNoYXJlLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEJzTW9kYWxIaWRlRXZlbnQsIEJzTW9kYWxIaWRlVHlwZSwgQnNNb2RhbE9wdGlvbnMsIEJzTW9kYWxTaXplIH0gZnJvbSAnLi9tb2RlbHMnO1xuaW1wb3J0IHsgQnNNb2RhbFNlcnZpY2UgfSBmcm9tICcuL21vZGFsLnNlcnZpY2UnO1xuXG5jb25zdCBFVkVOVF9TVUZGSVggPSAnbmcyLWJzMy1tb2RhbCc7XG5jb25zdCBTSE9XX0VWRU5UX05BTUUgPSBgc2hvdy5icy5tb2RhbC4ke0VWRU5UX1NVRkZJWH1gO1xuY29uc3QgU0hPV05fRVZFTlRfTkFNRSA9IGBzaG93bi5icy5tb2RhbC4ke0VWRU5UX1NVRkZJWH1gO1xuY29uc3QgSElERV9FVkVOVF9OQU1FID0gYGhpZGUuYnMubW9kYWwuJHtFVkVOVF9TVUZGSVh9YDtcbmNvbnN0IEhJRERFTl9FVkVOVF9OQU1FID0gYGhpZGRlbi5icy5tb2RhbC4ke0VWRU5UX1NVRkZJWH1gO1xuY29uc3QgTE9BREVEX0VWRU5UX05BTUUgPSBgbG9hZGVkLmJzLm1vZGFsLiR7RVZFTlRfU1VGRklYfWA7XG5jb25zdCBEQVRBX0tFWSA9ICdicy5tb2RhbCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYnMtbW9kYWwnLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIiBbbmdDbGFzc109XCJnZXRDc3NDbGFzc2VzKClcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIGBcbn0pXG5leHBvcnQgY2xhc3MgQnNNb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuXG4gICAgcHJpdmF0ZSBvdmVycmlkZVNpemU6IHN0cmluZyA9IG51bGw7XG4gICAgcHJpdmF0ZSAkbW9kYWw6IEpRdWVyeTtcbiAgICBwcml2YXRlICRkaWFsb2c6IEpRdWVyeTtcbiAgICBwcml2YXRlIG9uU2hvd0V2ZW50JDogT2JzZXJ2YWJsZTxFdmVudD47XG4gICAgcHJpdmF0ZSBvblNob3duRXZlbnQkOiBPYnNlcnZhYmxlPEV2ZW50PjtcbiAgICBwcml2YXRlIG9uSGlkZUV2ZW50JDogT2JzZXJ2YWJsZTxFdmVudD47XG4gICAgcHJpdmF0ZSBvbkhpZGRlbkV2ZW50JDogT2JzZXJ2YWJsZTxFdmVudD47XG4gICAgcHJpdmF0ZSBvbkxvYWRlZEV2ZW50JDogT2JzZXJ2YWJsZTxFdmVudD47XG4gICAgcHJpdmF0ZSBvblNob3duJDogT2JzZXJ2YWJsZTx7fT47XG4gICAgcHJpdmF0ZSBvbkludGVybmFsQ2xvc2UkOiBTdWJqZWN0PEJzTW9kYWxIaWRlVHlwZT4gPSBuZXcgU3ViamVjdDxCc01vZGFsSGlkZVR5cGU+KCk7XG4gICAgcHJpdmF0ZSBvbkRpc21pc3MkOiBPYnNlcnZhYmxlPEJzTW9kYWxIaWRlVHlwZT47XG4gICAgcHJpdmF0ZSBvbkhpZGUkOiBPYnNlcnZhYmxlPEJzTW9kYWxIaWRlRXZlbnQ+O1xuICAgIHByaXZhdGUgb25IaWRkZW4kOiBPYnNlcnZhYmxlPEJzTW9kYWxIaWRlVHlwZT47XG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuICAgIHByaXZhdGUgZ2V0IG9wdGlvbnMoKSB7XG4gICAgICAgIGlmICghdGhpcy4kbW9kYWwpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLiRtb2RhbC5kYXRhKERBVEFfS0VZKS5vcHRpb25zO1xuICAgIH1cblxuICAgIHZpc2libGUgPSBmYWxzZTtcbiAgICBzaG93aW5nID0gZmFsc2U7XG4gICAgaGlkaW5nID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBhbmltYXRpb24gPSB0cnVlO1xuICAgIEBJbnB1dCgpIGJhY2tkcm9wOiBzdHJpbmcgfCBib29sZWFuID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBrZXlib2FyZCA9IHRydWU7XG4gICAgQElucHV0KCkgc2l6ZTogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGNzc0NsYXNzOiBzdHJpbmc7XG5cbiAgICBAT3V0cHV0KCkgb25TaG93ID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcbiAgICBAT3V0cHV0KCkgb25PcGVuID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uSGlkZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbkNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uRGlzbWlzcyA9IG5ldyBFdmVudEVtaXR0ZXI8QnNNb2RhbEhpZGVUeXBlPigpO1xuICAgIEBPdXRwdXQoKSBvbkxvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5mYWRlJylcbiAgICBnZXQgZmFkZUNsYXNzKCkgeyByZXR1cm4gdGhpcy5hbmltYXRpb247IH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MubW9kYWwnKVxuICAgIGdldCBtb2RhbENsYXNzKCkgeyByZXR1cm4gdHJ1ZTsgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKVxuICAgIGdldCByb2xlQXR0cigpIHsgcmV0dXJuICdkaWFsb2cnOyB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIudGFiaW5kZXgnKVxuICAgIGdldCB0YWJpbmRleEF0dHIoKSB7IHJldHVybiAnLTEnOyB9XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWYsIHByaXZhdGUgc2VydmljZTogQnNNb2RhbFNlcnZpY2UsIHByaXZhdGUgem9uZTogTmdab25lKSB7XG4gICAgICAgIHRoaXMuc2VydmljZS5hZGQodGhpcyk7XG4gICAgICAgIHRoaXMuaW5pdCgpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLndpcmVVcEV2ZW50RW1pdHRlcnMoKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMuJGRpYWxvZyA9IHRoaXMuJG1vZGFsLmZpbmQoJy5tb2RhbC1kaWFsb2cnKTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcygpIHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb25zKHtcbiAgICAgICAgICAgIGJhY2tkcm9wOiB0aGlzLmJhY2tkcm9wLFxuICAgICAgICAgICAga2V5Ym9hcmQ6IHRoaXMua2V5Ym9hcmRcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMub25JbnRlcm5hbENsb3NlJC5uZXh0KEJzTW9kYWxIaWRlVHlwZS5EZXN0cm95KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIGZvY3VzKCkge1xuICAgICAgICB0aGlzLiRtb2RhbC50cmlnZ2VyKCdmb2N1cycpO1xuICAgIH1cblxuICAgIHJvdXRlckNhbkRlYWN0aXZhdGUoKTogYW55IHtcbiAgICAgICAgdGhpcy5vbkludGVybmFsQ2xvc2UkLm5leHQoQnNNb2RhbEhpZGVUeXBlLlJvdXRlQ2hhbmdlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIG9wZW4oc2l6ZT86IHN0cmluZykge1xuICAgICAgICB0aGlzLm92ZXJyaWRlU2l6ZSA9IG51bGw7XG4gICAgICAgIGlmIChCc01vZGFsU2l6ZS5pc1ZhbGlkU2l6ZShzaXplKSkge1xuICAgICAgICAgICAgdGhpcy5vdmVycmlkZVNpemUgPSBzaXplO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnNob3coKS50b1Byb21pc2UoKTtcbiAgICB9XG5cbiAgICBjbG9zZSh2YWx1ZT86IGFueSk6IFByb21pc2U8e30+IHtcbiAgICAgICAgdGhpcy5vbkludGVybmFsQ2xvc2UkLm5leHQoQnNNb2RhbEhpZGVUeXBlLkNsb3NlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGlkZSgpLnBpcGUoXG4gICAgICAgICAgICB0YXAoKCkgPT4gdGhpcy5vbkNsb3NlLmVtaXQodmFsdWUpKSxcbiAgICAgICAgKS50b1Byb21pc2UoKS50aGVuKCgpID0+IHZhbHVlKTtcbiAgICB9XG5cbiAgICBkaXNtaXNzKCk6IFByb21pc2U8e30+IHtcbiAgICAgICAgdGhpcy5vbkludGVybmFsQ2xvc2UkLm5leHQoQnNNb2RhbEhpZGVUeXBlLkRpc21pc3MpO1xuICAgICAgICByZXR1cm4gdGhpcy5oaWRlKCkudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgZ2V0Q3NzQ2xhc3NlcygpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBjbGFzc2VzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICAgIGlmICh0aGlzLmlzU21hbGwoKSkge1xuICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCdtb2RhbC1zbScpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNMYXJnZSgpKSB7XG4gICAgICAgICAgICBjbGFzc2VzLnB1c2goJ21vZGFsLWxnJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jc3NDbGFzcykge1xuICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKHRoaXMuY3NzQ2xhc3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNsYXNzZXMuam9pbignICcpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNTbWFsbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3ZlcnJpZGVTaXplICE9PSBCc01vZGFsU2l6ZS5MYXJnZVxuICAgICAgICAgICAgJiYgdGhpcy5zaXplID09PSBCc01vZGFsU2l6ZS5TbWFsbFxuICAgICAgICAgICAgfHwgdGhpcy5vdmVycmlkZVNpemUgPT09IEJzTW9kYWxTaXplLlNtYWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNMYXJnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3ZlcnJpZGVTaXplICE9PSBCc01vZGFsU2l6ZS5TbWFsbFxuICAgICAgICAgICAgJiYgdGhpcy5zaXplID09PSBCc01vZGFsU2l6ZS5MYXJnZVxuICAgICAgICAgICAgfHwgdGhpcy5vdmVycmlkZVNpemUgPT09IEJzTW9kYWxTaXplLkxhcmdlO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2hvdygpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBpZiAodGhpcy52aXNpYmxlICYmICF0aGlzLmhpZGluZykge1xuICAgICAgICAgICAgcmV0dXJuIG9ic2VydmFibGVPZihudWxsKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNob3dpbmcgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiBPYnNlcnZhYmxlLmNyZWF0ZSgobzogT2JzZXJ2ZXI8YW55PikgPT4ge1xuICAgICAgICAgICAgdGhpcy5vblNob3duJC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICApLnN1YnNjcmliZShuZXh0ID0+IHtcbiAgICAgICAgICAgICAgICBvLm5leHQobmV4dCk7XG4gICAgICAgICAgICAgICAgby5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvbkZpeCgpO1xuICAgICAgICAgICAgdGhpcy4kbW9kYWwubW9kYWwoJ3Nob3cnKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0cmFuc2l0aW9uRml4KCkge1xuICAgICAgICAvLyBGaXggZm9yIHNob3duLmJzLm1vZGFsIG5vdCBmaXJpbmcgd2hlbiAuZmFkZSBpcyBwcmVzZW50XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMTE3OTNcbiAgICAgICAgaWYgKHRoaXMuYW5pbWF0aW9uKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLiRtb2RhbC50cmlnZ2VyKCdmb2N1cycpLnRyaWdnZXIoU0hPV05fRVZFTlRfTkFNRSk7XG4gICAgICAgICAgICB9LCBqUXVlcnkuZm4ubW9kYWxbJ0NvbnN0cnVjdG9yJ10uVFJBTlNJVElPTl9EVVJBVElPTik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhpZGUoKTogT2JzZXJ2YWJsZTxCc01vZGFsSGlkZVR5cGU+IHtcbiAgICAgICAgaWYgKCF0aGlzLnZpc2libGUgJiYgIXRoaXMuc2hvd2luZykge1xuICAgICAgICAgICAgcmV0dXJuIG9ic2VydmFibGVPZjxCc01vZGFsSGlkZVR5cGU+KG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaGlkaW5nID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS5jcmVhdGUoKG86IE9ic2VydmVyPGFueT4pID0+IHtcbiAgICAgICAgICAgIHRoaXMub25IaWRkZW4kLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZSgxKVxuICAgICAgICAgICAgKS5zdWJzY3JpYmUobmV4dCA9PiB7XG4gICAgICAgICAgICAgICAgby5uZXh0KG5leHQpO1xuICAgICAgICAgICAgICAgIG8uY29tcGxldGUoKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLiRtb2RhbC5tb2RhbCgnaGlkZScpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXQoKSB7XG4gICAgICAgIHRoaXMuJG1vZGFsID0galF1ZXJ5KHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgdGhpcy4kbW9kYWwuYXBwZW5kVG8oZG9jdW1lbnQuYm9keSk7XG4gICAgICAgIHRoaXMuJG1vZGFsLm1vZGFsKHtcbiAgICAgICAgICAgIHNob3c6IGZhbHNlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMub25TaG93RXZlbnQkID0gZnJvbUV2ZW50KHRoaXMuJG1vZGFsLCBTSE9XX0VWRU5UX05BTUUpO1xuICAgICAgICB0aGlzLm9uU2hvd25FdmVudCQgPSBmcm9tRXZlbnQodGhpcy4kbW9kYWwsIFNIT1dOX0VWRU5UX05BTUUpO1xuICAgICAgICB0aGlzLm9uSGlkZUV2ZW50JCA9IGZyb21FdmVudCh0aGlzLiRtb2RhbCwgSElERV9FVkVOVF9OQU1FKTtcbiAgICAgICAgdGhpcy5vbkhpZGRlbkV2ZW50JCA9IGZyb21FdmVudCh0aGlzLiRtb2RhbCwgSElEREVOX0VWRU5UX05BTUUpO1xuICAgICAgICB0aGlzLm9uTG9hZGVkRXZlbnQkID0gZnJvbUV2ZW50KHRoaXMuJG1vZGFsLCBMT0FERURfRVZFTlRfTkFNRSk7XG5cbiAgICAgICAgY29uc3Qgb25DbG9zZSQgPSBtZXJnZSh0aGlzLm9uSW50ZXJuYWxDbG9zZSQsIHRoaXMuc2VydmljZS5vbkJhY2tkcm9wQ2xvc2UkLCB0aGlzLnNlcnZpY2Uub25LZXlib2FyZENsb3NlJCk7XG5cbiAgICAgICAgdGhpcy5vbkhpZGUkID0gemlwKHRoaXMub25IaWRlRXZlbnQkLCBvbkNsb3NlJCkucGlwZShcbiAgICAgICAgICAgIG1hcCh4ID0+IDxCc01vZGFsSGlkZUV2ZW50PnsgZXZlbnQ6IHhbMF0sIHR5cGU6IHhbMV0gfSksXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5vbkhpZGRlbiQgPSB6aXA8QnNNb2RhbEhpZGVUeXBlPih0aGlzLm9uSGlkZGVuRXZlbnQkLCBvbkNsb3NlJCkucGlwZShcbiAgICAgICAgICAgIG1hcCh4ID0+IHhbMV0pLFxuICAgICAgICAgICAgdGFwKHRoaXMuc2V0VmlzaWJsZShmYWxzZSkpLFxuICAgICAgICAgICAgdGFwKCgpID0+IHRoaXMuc2VydmljZS5mb2N1c05leHQoKSksXG4gICAgICAgICAgICBzaGFyZSgpLFxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMub25TaG93biQgPSB0aGlzLm9uU2hvd25FdmVudCQucGlwZShcbiAgICAgICAgICAgIHRhcCh0aGlzLnNldFZpc2libGUodHJ1ZSkpLFxuICAgICAgICAgICAgc2hhcmUoKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMub25EaXNtaXNzJCA9IHRoaXMub25IaWRkZW4kLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoKHgpID0+IHggIT09IEJzTW9kYWxIaWRlVHlwZS5DbG9zZSlcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBTdGFydCB3YXRjaGluZyBmb3IgZXZlbnRzXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKC4uLltcbiAgICAgICAgICAgIHRoaXMub25TaG93biQuc3Vic2NyaWJlKCgpID0+IHsgfSksXG4gICAgICAgICAgICB0aGlzLm9uSGlkZGVuJC5zdWJzY3JpYmUoKCkgPT4geyB9KSxcbiAgICAgICAgICAgIHRoaXMuc2VydmljZS5vbk1vZGFsU3RhY2skLnN1YnNjcmliZSgoKSA9PiB7IH0pXG4gICAgICAgIF0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgd2lyZVVwRXZlbnRFbWl0dGVycygpIHtcblxuICAgICAgICB0aGlzLndpcmVVcEV2ZW50RW1pdHRlcih0aGlzLm9uU2hvdywgdGhpcy5vblNob3dFdmVudCQpO1xuICAgICAgICB0aGlzLndpcmVVcEV2ZW50RW1pdHRlcih0aGlzLm9uT3BlbiwgdGhpcy5vblNob3duJCk7XG4gICAgICAgIHRoaXMud2lyZVVwRXZlbnRFbWl0dGVyKHRoaXMub25IaWRlLCB0aGlzLm9uSGlkZSQpO1xuICAgICAgICB0aGlzLndpcmVVcEV2ZW50RW1pdHRlcih0aGlzLm9uRGlzbWlzcywgdGhpcy5vbkRpc21pc3MkKTtcbiAgICAgICAgdGhpcy53aXJlVXBFdmVudEVtaXR0ZXIodGhpcy5vbkxvYWRlZCwgdGhpcy5vbkxvYWRlZEV2ZW50JCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB3aXJlVXBFdmVudEVtaXR0ZXI8VD4oZW1pdHRlcjogRXZlbnRFbWl0dGVyPFQ+LCBzdHJlYW0kOiBPYnNlcnZhYmxlPFQ+KSB7XG4gICAgICAgIGlmIChlbWl0dGVyLm9ic2VydmVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN1YiA9IHN0cmVhbSQuc3Vic2NyaWJlKChuZXh0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBlbWl0dGVyLm5leHQobmV4dCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goc3ViKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFZpc2libGUgPSAoaXNWaXNpYmxlKSA9PiB7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnZpc2libGUgPSBpc1Zpc2libGU7XG4gICAgICAgICAgICB0aGlzLnNob3dpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaGlkaW5nID0gZmFsc2U7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRPcHRpb25zID0gKG9wdGlvbnM6IEJzTW9kYWxPcHRpb25zKSA9PiB7XG4gICAgICAgIGxldCBiYWNrZHJvcCA9IG9wdGlvbnMuYmFja2Ryb3A7XG4gICAgICAgIGlmICh0eXBlb2YgYmFja2Ryb3AgPT09ICdzdHJpbmcnICYmIGJhY2tkcm9wICE9PSAnc3RhdGljJykge1xuICAgICAgICAgICAgYmFja2Ryb3AgPSB0cnVlO1xuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5iYWNrZHJvcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuYmFja2Ryb3AgPSBiYWNrZHJvcDtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5rZXlib2FyZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMua2V5Ym9hcmQgPSBvcHRpb25zLmtleWJvYXJkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZXN0cm95KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5oaWRlKCkucGlwZShcbiAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlLnJlbW92ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zID0gW107XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuJG1vZGFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJG1vZGFsLmRhdGEoREFUQV9LRVksIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiRtb2RhbC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kbW9kYWwgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICkudG9Qcm9taXNlKCk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQnNNb2RhbENvbXBvbmVudCB9IGZyb20gJy4vbW9kYWwuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdicy1tb2RhbC1oZWFkZXInLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJzaG93RGlzbWlzc1wiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsb3NlXCIgYXJpYS1sYWJlbD1cIkRpc21pc3NcIiAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cbiAgICBgXG59KVxuZXhwb3J0IGNsYXNzIEJzTW9kYWxIZWFkZXJDb21wb25lbnQge1xuICAgIEBJbnB1dCgpIHNob3dEaXNtaXNzID0gZmFsc2U7XG4gICAgY29uc3RydWN0b3IocHVibGljIG1vZGFsOiBCc01vZGFsQ29tcG9uZW50KSB7IH1cbn1cbiIsImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2JzLW1vZGFsLWJvZHknLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XG4gICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvZGl2PlxuICAgIGBcbn0pXG5leHBvcnQgY2xhc3MgQnNNb2RhbEJvZHlDb21wb25lbnQgeyB9XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCc01vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi9tb2RhbC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2JzLW1vZGFsLWZvb3RlcicsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInNob3dEZWZhdWx0QnV0dG9uc1wiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cbiAgICAgICAgICAgICAgICB7e2Rpc21pc3NCdXR0b25MYWJlbH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJzaG93RGVmYXVsdEJ1dHRvbnNcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwibW9kYWwuY2xvc2UoKVwiPlxuICAgICAgICAgICAgICAgIHt7Y2xvc2VCdXR0b25MYWJlbH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICBgXG59KVxuZXhwb3J0IGNsYXNzIEJzTW9kYWxGb290ZXJDb21wb25lbnQge1xuICAgIEBJbnB1dCgpIHNob3dEZWZhdWx0QnV0dG9ucyA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGRpc21pc3NCdXR0b25MYWJlbCA9ICdEaXNtaXNzJztcbiAgICBASW5wdXQoKSBjbG9zZUJ1dHRvbkxhYmVsID0gJ0Nsb3NlJztcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgbW9kYWw6IEJzTW9kYWxDb21wb25lbnQpIHsgfVxufVxuIiwiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbmplY3QsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCc01vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vbW9kYWwvbW9kYWwuY29tcG9uZW50JztcblxuQERpcmVjdGl2ZSh7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmRpcmVjdGl2ZS1zZWxlY3RvclxuICAgIHNlbGVjdG9yOiAnW2F1dG9mb2N1c10nXG59KVxuZXhwb3J0IGNsYXNzIEJzQXV0b2ZvY3VzRGlyZWN0aXZlIHtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsOiBFbGVtZW50UmVmLCBAT3B0aW9uYWwoKSBwcml2YXRlIG1vZGFsOiBCc01vZGFsQ29tcG9uZW50KSB7XG4gICAgICAgIGlmIChtb2RhbCkge1xuICAgICAgICAgICAgdGhpcy5tb2RhbC5vbk9wZW4uc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmltcG9ydCB7IEJzTW9kYWxTZXJ2aWNlIH0gZnJvbSAnLi9tb2RhbC9tb2RhbC5zZXJ2aWNlJztcbmltcG9ydCB7IEJzTW9kYWxDb21wb25lbnQgfSBmcm9tICcuL21vZGFsL21vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCc01vZGFsSGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9tb2RhbC9oZWFkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEJzTW9kYWxCb2R5Q29tcG9uZW50IH0gZnJvbSAnLi9tb2RhbC9ib2R5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCc01vZGFsRm9vdGVyQ29tcG9uZW50IH0gZnJvbSAnLi9tb2RhbC9mb290ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEJzQXV0b2ZvY3VzRGlyZWN0aXZlIH0gZnJvbSAnLi9hdXRvZm9jdXMvYXV0b2ZvY3VzLmRpcmVjdGl2ZSc7XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGVcbiAgICBdLFxuICAgIGRlY2xhcmF0aW9uczogW1xuICAgICAgICBCc01vZGFsQ29tcG9uZW50LFxuICAgICAgICBCc01vZGFsSGVhZGVyQ29tcG9uZW50LFxuICAgICAgICBCc01vZGFsQm9keUNvbXBvbmVudCxcbiAgICAgICAgQnNNb2RhbEZvb3RlckNvbXBvbmVudCxcbiAgICAgICAgQnNBdXRvZm9jdXNEaXJlY3RpdmVcbiAgICBdLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBCc01vZGFsU2VydmljZVxuICAgIF0sXG4gICAgZXhwb3J0czogW1xuICAgICAgICBCc01vZGFsQ29tcG9uZW50LFxuICAgICAgICBCc01vZGFsSGVhZGVyQ29tcG9uZW50LFxuICAgICAgICBCc01vZGFsQm9keUNvbXBvbmVudCxcbiAgICAgICAgQnNNb2RhbEZvb3RlckNvbXBvbmVudCxcbiAgICAgICAgQnNBdXRvZm9jdXNEaXJlY3RpdmVcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIEJzTW9kYWxNb2R1bGUgeyB9XG4iXSwibmFtZXMiOlsiRVZFTlRfU1VGRklYIiwiU0hPV19FVkVOVF9OQU1FIiwib2JzZXJ2YWJsZU9mIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFDSSxRQUFLO0lBQ0wsVUFBTztJQUNQLFdBQVE7SUFDUixXQUFRO0lBQ1IsY0FBVztJQUNYLFVBQU87O2dDQUxQLEtBQUs7Z0NBQ0wsT0FBTztnQ0FDUCxRQUFRO2dDQUNSLFFBQVE7Z0NBQ1IsV0FBVztnQ0FDWCxPQUFPOzs7Ozs7Ozs7Ozs7O0lDRkEsdUJBQVc7Ozs7SUFBbEIsVUFBbUIsSUFBWTtRQUMzQixPQUFPLElBQUksS0FBSyxJQUFJLEtBQUssV0FBVyxDQUFDLEtBQUssSUFBSSxJQUFJLEtBQUssV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQzdFO3dCQUxjLElBQUk7d0JBQ0osSUFBSTtzQkFGdkI7Ozs7Ozs7Ozs7OztBQ0FBO0FBT0EsSUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDOztBQUNyQyxJQUFNLGdCQUFnQixHQUFHLFdBQVMsWUFBYyxDQUFDOztBQUNqRCxJQUFNLGdCQUFnQixHQUFHLFdBQVMsWUFBYyxDQUFDOztBQUNqRCxJQUFNLGVBQWUsR0FBRyxtQkFBaUIsWUFBYyxDQUFDOztJQVlwRDtRQUFBLGlCQXlCQztzQkFoQ29DLEVBQUU7UUFRbkMsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRW5DLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLElBQUksQ0FDaEUsTUFB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 |
\ | No newline at end of file |