@snabcentr/client-ui 4.12.0 → 4.14.0
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.
- package/esm2022/news/sc-news.module.mjs +4 -5
- package/esm2022/pages/frequently-asked-questions/sc-faq-question-anchor.mjs +23 -0
- package/esm2022/pages/frequently-asked-questions/sc-frequently-asked-questions.component.mjs +79 -6
- package/esm2022/pages/frequently-asked-questions-with-groups/sc-frequently-asked-questions-with-groups.component.mjs +4 -2
- package/esm2022/pages/index.mjs +2 -1
- package/esm2022/public-api.mjs +2 -2
- package/esm2022/share/index.mjs +6 -0
- package/esm2022/share/sc-share-dialog-data.mjs +2 -0
- package/esm2022/share/sc-share.service.mjs +40 -0
- package/esm2022/share/share-button/sc-share-button.component.mjs +99 -0
- package/esm2022/share/share-dialog/sc-share-dialog.component.mjs +134 -0
- package/esm2022/share/share-messengers-links/sc-share-messengers-links.component.mjs +84 -0
- package/fesm2022/snabcentr-client-ui.mjs +433 -62
- package/fesm2022/snabcentr-client-ui.mjs.map +1 -1
- package/news/sc-news.module.d.ts +3 -4
- package/package.json +1 -1
- package/pages/frequently-asked-questions/sc-faq-question-anchor.d.ts +16 -0
- package/pages/frequently-asked-questions/sc-frequently-asked-questions.component.d.ts +43 -1
- package/pages/index.d.ts +1 -0
- package/public-api.d.ts +1 -1
- package/release_notes.tmp +3 -7
- package/share/index.d.ts +5 -0
- package/share/sc-share-dialog-data.d.ts +13 -0
- package/share/sc-share.service.d.ts +19 -0
- package/share/share-button/sc-share-button.component.d.ts +78 -0
- package/share/share-dialog/sc-share-dialog.component.d.ts +87 -0
- package/share/share-messengers-links/sc-share-messengers-links.component.d.ts +49 -0
- package/styles/tailwind/tailwind.scss +18 -0
- package/esm2022/share-button/index.mjs +0 -3
- package/esm2022/share-button/sc-share-button.component.mjs +0 -35
- package/esm2022/share-button/sc-share-button.module.mjs +0 -22
- package/share-button/index.d.ts +0 -2
- package/share-button/sc-share-button.component.d.ts +0 -22
- package/share-button/sc-share-button.module.d.ts +0 -12
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, inject } from '@angular/core';
|
|
2
|
+
import { toSignal } from '@angular/core/rxjs-interop';
|
|
3
|
+
import { WA_NAVIGATOR, WA_WINDOW } from '@ng-web-apis/common';
|
|
4
|
+
import { IS_RUNNING_ON_TERMINAL, IS_SERVER, ScUserMetrikaGoalsEnum, ScUserMetrikaService } from '@snabcentr/client-core';
|
|
5
|
+
import { TUI_WINDOW_SIZE } from '@taiga-ui/cdk';
|
|
6
|
+
import { TuiAlertService, TuiButton, TuiDialogService, TuiIconPipe } from '@taiga-ui/core';
|
|
7
|
+
import { POLYMORPHEUS_CONTEXT, PolymorpheusComponent } from '@taiga-ui/polymorpheus';
|
|
8
|
+
import { QRCodeModule } from 'angularx-qrcode';
|
|
9
|
+
import { map, noop, of } from 'rxjs';
|
|
10
|
+
import { ScEmailLinkDirective } from '../../directives';
|
|
11
|
+
import { ScQRCodeDialogComponent } from '../../qrcode';
|
|
12
|
+
import * as i0 from "@angular/core";
|
|
13
|
+
import * as i1 from "angularx-qrcode";
|
|
14
|
+
/**
|
|
15
|
+
* Диалоговое окно "Поделиться": варианты, как поделиться ссылкой.
|
|
16
|
+
*
|
|
17
|
+
* На терминале вместо вариантов отображается только QR-код ссылки.
|
|
18
|
+
*/
|
|
19
|
+
export class ScShareDialogComponent {
|
|
20
|
+
constructor() {
|
|
21
|
+
/**
|
|
22
|
+
* Провайдер данных о терминале.
|
|
23
|
+
*/
|
|
24
|
+
this.terminal = inject(IS_RUNNING_ON_TERMINAL);
|
|
25
|
+
/**
|
|
26
|
+
* Контекст диалогового окна, в котором открыт компонент.
|
|
27
|
+
*/
|
|
28
|
+
this.context = inject(POLYMORPHEUS_CONTEXT);
|
|
29
|
+
/**
|
|
30
|
+
* Ссылка на объект навигатора браузера.
|
|
31
|
+
*/
|
|
32
|
+
this.navigator = inject(WA_NAVIGATOR);
|
|
33
|
+
/**
|
|
34
|
+
* Ссылка на объект окна браузера.
|
|
35
|
+
*/
|
|
36
|
+
this.window = inject(WA_WINDOW);
|
|
37
|
+
/**
|
|
38
|
+
* Сервис уведомлений.
|
|
39
|
+
*/
|
|
40
|
+
this.alerts = inject(TuiAlertService);
|
|
41
|
+
/**
|
|
42
|
+
* Сервис для работы с диалоговыми окнами.
|
|
43
|
+
*/
|
|
44
|
+
this.dialog = inject(TuiDialogService);
|
|
45
|
+
/**
|
|
46
|
+
* Сервис для сбора метрик о действиях пользователей.
|
|
47
|
+
*/
|
|
48
|
+
this.userMetrikaService = inject(ScUserMetrikaService);
|
|
49
|
+
/**
|
|
50
|
+
* {@link Signal} формата отображения вариантов: в строку на широких экранах, списком на узких.
|
|
51
|
+
*/
|
|
52
|
+
this.viewMode = toSignal(inject(IS_SERVER) ? of('list') : inject(TUI_WINDOW_SIZE).pipe(map((rect) => (rect.width > 768 ? 'row' : 'list'))), { initialValue: 'list' });
|
|
53
|
+
/**
|
|
54
|
+
* Заголовок ссылки, которой необходимо поделиться.
|
|
55
|
+
*/
|
|
56
|
+
this.title = this.context.data.title;
|
|
57
|
+
/**
|
|
58
|
+
* Ссылка, которой необходимо поделиться.
|
|
59
|
+
*/
|
|
60
|
+
this.shareUrl = this.context.data.shareUrl;
|
|
61
|
+
/**
|
|
62
|
+
* Ссылка отправки по Email.
|
|
63
|
+
*/
|
|
64
|
+
this.emailLink = `mailto:?subject=${encodeURIComponent(['ООО Снабцентр', this.title].filter(Boolean).join(' - '))}&body=${encodeURIComponent(this.shareUrl)}`;
|
|
65
|
+
/**
|
|
66
|
+
* Ссылка отправки во ВКонтакте.
|
|
67
|
+
*/
|
|
68
|
+
this.vkLink = `https://vk.com/share.php?url=${encodeURIComponent(this.shareUrl)}`;
|
|
69
|
+
/**
|
|
70
|
+
* Ссылка отправки в Telegram.
|
|
71
|
+
*/
|
|
72
|
+
this.telegramLink = `https://t.me/share/url?url=${encodeURIComponent(this.shareUrl)}`;
|
|
73
|
+
}
|
|
74
|
+
/** @inheritDoc */
|
|
75
|
+
ngOnInit() {
|
|
76
|
+
this.userMetrikaService.emitUserMetrikaEvent({
|
|
77
|
+
target: ScUserMetrikaGoalsEnum.shareShow,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Открывает окно перехода в социальную сеть.
|
|
82
|
+
*
|
|
83
|
+
* @param shareLink Ссылка перехода в социальную сеть.
|
|
84
|
+
* @param socialMedia Slug социальной сети.
|
|
85
|
+
*/
|
|
86
|
+
openShareWindow(shareLink, socialMedia) {
|
|
87
|
+
this.emitShareClick(socialMedia);
|
|
88
|
+
this.window.open(shareLink, 'sharer', 'status=0,toolbar=0,width=650,height=500');
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Копирует ссылку в буфер обмена.
|
|
92
|
+
*/
|
|
93
|
+
copyShareLink() {
|
|
94
|
+
this.emitShareClick('copy_to_clipboard');
|
|
95
|
+
this.navigator.clipboard.writeText(this.shareUrl).catch(noop);
|
|
96
|
+
this.alerts.open('Ссылка скопирована в буфер обмена.', { appearance: 'positive' }).subscribe();
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Открывает диалоговое окно с QR-кодом ссылки.
|
|
100
|
+
*/
|
|
101
|
+
showQRCode() {
|
|
102
|
+
this.emitShareClick('qr');
|
|
103
|
+
this.userMetrikaService.emitUserMetrikaEvent({
|
|
104
|
+
target: ScUserMetrikaGoalsEnum.qrShow,
|
|
105
|
+
});
|
|
106
|
+
this.dialog
|
|
107
|
+
.open(new PolymorpheusComponent(ScQRCodeDialogComponent), {
|
|
108
|
+
size: 's',
|
|
109
|
+
label: this.title || 'QR-код',
|
|
110
|
+
data: { qrdata: this.shareUrl },
|
|
111
|
+
})
|
|
112
|
+
.subscribe();
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Отправляет метрику выбора варианта "Поделиться".
|
|
116
|
+
*
|
|
117
|
+
* @param shareLinkName Наименование варианта.
|
|
118
|
+
*/
|
|
119
|
+
emitShareClick(shareLinkName) {
|
|
120
|
+
this.userMetrikaService.emitUserMetrikaEvent({
|
|
121
|
+
target: ScUserMetrikaGoalsEnum.shareClick,
|
|
122
|
+
params: {
|
|
123
|
+
share_link_name: shareLinkName,
|
|
124
|
+
},
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScShareDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
128
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ScShareDialogComponent, isStandalone: true, selector: "sc-share-dialog", ngImport: i0, template: "@if (terminal.isRunningOnTerminal) {\n <p class=\"-mt-2 mb-3 text-tui-text-02\">\u0421\u043A\u0430\u043D\u0438\u0440\u0443\u0439\u0442\u0435 QR-\u043A\u043E\u0434.</p>\n <qrcode\n [margin]=\"0\"\n [qrdata]=\"shareUrl\"\n [width]=\"250\"\n elementType=\"img\"\n ></qrcode>\n} @else {\n @let isRow = viewMode() === 'row';\n @let appearance = isRow ? 'flat' : 'outline';\n @let buttonClass = isRow ? 'button _row' : 'button w-full !justify-start';\n @let iconClass = isRow ? '!m-0 !size-8' : '!m-0 !size-6';\n @let iconSize = isRow ? 32 : 24;\n\n <div\n class=\"gap-2\"\n [class.flex]=\"isRow\"\n [class.grid]=\"!isRow\"\n [class.grid-cols-2]=\"!isRow\"\n >\n <a\n tuiButton\n size=\"m\"\n scEmailLink\n linkLocation=\"share-link\"\n automation-id=\"sc-share-dialog__email\"\n [appearance]=\"appearance\"\n [class]=\"buttonClass\"\n [href]=\"emailLink\"\n >\n <img\n [src]=\"'@tui.sc.img.email' | tuiIcon\"\n alt=\"Email\"\n [width]=\"iconSize\"\n [height]=\"iconSize\"\n [class]=\"iconClass\"\n />\n <span>Email</span>\n </a>\n <a\n tuiButton\n size=\"m\"\n target=\"_blank\"\n automation-id=\"sc-share-dialog__vk\"\n [appearance]=\"appearance\"\n [class]=\"buttonClass\"\n [href]=\"vkLink\"\n (click)=\"$event.preventDefault(); openShareWindow(vkLink, 'vk')\"\n >\n <img\n [src]=\"'@tui.sc.img.vk' | tuiIcon\"\n alt=\"\u0412\u041A\u043E\u043D\u0442\u0430\u043A\u0442\u0435\"\n [width]=\"iconSize\"\n [height]=\"iconSize\"\n [class]=\"iconClass\"\n />\n <span>\u0412\u041A\u043E\u043D\u0442\u0430\u043A\u0442\u0435</span>\n </a>\n <a\n tuiButton\n size=\"m\"\n target=\"_blank\"\n automation-id=\"sc-share-dialog__telegram\"\n [appearance]=\"appearance\"\n [class]=\"buttonClass\"\n [href]=\"telegramLink\"\n (click)=\"$event.preventDefault(); openShareWindow(telegramLink, 'telegram')\"\n >\n <img\n [src]=\"'@tui.sc.img.telegram' | tuiIcon\"\n alt=\"Telegram\"\n [width]=\"iconSize\"\n [height]=\"iconSize\"\n [class]=\"iconClass\"\n />\n <span>Telegram</span>\n </a>\n <button\n tuiButton\n size=\"m\"\n type=\"button\"\n automation-id=\"sc-share-dialog__copy\"\n [appearance]=\"appearance\"\n [class]=\"buttonClass\"\n (click)=\"copyShareLink()\"\n >\n <img\n [src]=\"'@tui.sc.img.copy' | tuiIcon\"\n alt=\"\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C\"\n [width]=\"iconSize\"\n [height]=\"iconSize\"\n [class]=\"iconClass\"\n />\n <span>\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C</span>\n </button>\n <button\n tuiButton\n size=\"m\"\n type=\"button\"\n automation-id=\"sc-share-dialog__qr\"\n [appearance]=\"appearance\"\n [class]=\"buttonClass\"\n (click)=\"showQRCode()\"\n >\n <img\n [src]=\"'@tui.sc.img.qr-code' | tuiIcon\"\n alt=\"QR-\u043A\u043E\u0434\"\n [width]=\"iconSize\"\n [height]=\"iconSize\"\n [class]=\"iconClass\"\n />\n <span>QR-\u043A\u043E\u0434</span>\n </button>\n </div>\n}\n", styles: [".button._row{--tui-padding: .625rem;--t-gap: 0 !important}.button._row span{max-width:0;overflow:hidden;opacity:0;transition-duration:.5s}.button._row:hover span{opacity:1;max-width:11.5rem;padding-left:1rem}\n"], dependencies: [{ kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "pipe", type: TuiIconPipe, name: "tuiIcon" }, { kind: "directive", type: ScEmailLinkDirective, selector: "a[scEmailLink]", inputs: ["linkLocation"] }, { kind: "ngmodule", type: QRCodeModule }, { kind: "component", type: i1.QRCodeComponent, selector: "qrcode", inputs: ["allowEmptyString", "colorDark", "colorLight", "cssClass", "elementType", "errorCorrectionLevel", "imageSrc", "imageHeight", "imageWidth", "margin", "qrdata", "scale", "version", "width", "alt", "ariaLabel", "title"], outputs: ["qrCodeURL"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
129
|
+
}
|
|
130
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScShareDialogComponent, decorators: [{
|
|
131
|
+
type: Component,
|
|
132
|
+
args: [{ standalone: true, selector: 'sc-share-dialog', imports: [TuiButton, TuiIconPipe, ScEmailLinkDirective, QRCodeModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (terminal.isRunningOnTerminal) {\n <p class=\"-mt-2 mb-3 text-tui-text-02\">\u0421\u043A\u0430\u043D\u0438\u0440\u0443\u0439\u0442\u0435 QR-\u043A\u043E\u0434.</p>\n <qrcode\n [margin]=\"0\"\n [qrdata]=\"shareUrl\"\n [width]=\"250\"\n elementType=\"img\"\n ></qrcode>\n} @else {\n @let isRow = viewMode() === 'row';\n @let appearance = isRow ? 'flat' : 'outline';\n @let buttonClass = isRow ? 'button _row' : 'button w-full !justify-start';\n @let iconClass = isRow ? '!m-0 !size-8' : '!m-0 !size-6';\n @let iconSize = isRow ? 32 : 24;\n\n <div\n class=\"gap-2\"\n [class.flex]=\"isRow\"\n [class.grid]=\"!isRow\"\n [class.grid-cols-2]=\"!isRow\"\n >\n <a\n tuiButton\n size=\"m\"\n scEmailLink\n linkLocation=\"share-link\"\n automation-id=\"sc-share-dialog__email\"\n [appearance]=\"appearance\"\n [class]=\"buttonClass\"\n [href]=\"emailLink\"\n >\n <img\n [src]=\"'@tui.sc.img.email' | tuiIcon\"\n alt=\"Email\"\n [width]=\"iconSize\"\n [height]=\"iconSize\"\n [class]=\"iconClass\"\n />\n <span>Email</span>\n </a>\n <a\n tuiButton\n size=\"m\"\n target=\"_blank\"\n automation-id=\"sc-share-dialog__vk\"\n [appearance]=\"appearance\"\n [class]=\"buttonClass\"\n [href]=\"vkLink\"\n (click)=\"$event.preventDefault(); openShareWindow(vkLink, 'vk')\"\n >\n <img\n [src]=\"'@tui.sc.img.vk' | tuiIcon\"\n alt=\"\u0412\u041A\u043E\u043D\u0442\u0430\u043A\u0442\u0435\"\n [width]=\"iconSize\"\n [height]=\"iconSize\"\n [class]=\"iconClass\"\n />\n <span>\u0412\u041A\u043E\u043D\u0442\u0430\u043A\u0442\u0435</span>\n </a>\n <a\n tuiButton\n size=\"m\"\n target=\"_blank\"\n automation-id=\"sc-share-dialog__telegram\"\n [appearance]=\"appearance\"\n [class]=\"buttonClass\"\n [href]=\"telegramLink\"\n (click)=\"$event.preventDefault(); openShareWindow(telegramLink, 'telegram')\"\n >\n <img\n [src]=\"'@tui.sc.img.telegram' | tuiIcon\"\n alt=\"Telegram\"\n [width]=\"iconSize\"\n [height]=\"iconSize\"\n [class]=\"iconClass\"\n />\n <span>Telegram</span>\n </a>\n <button\n tuiButton\n size=\"m\"\n type=\"button\"\n automation-id=\"sc-share-dialog__copy\"\n [appearance]=\"appearance\"\n [class]=\"buttonClass\"\n (click)=\"copyShareLink()\"\n >\n <img\n [src]=\"'@tui.sc.img.copy' | tuiIcon\"\n alt=\"\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C\"\n [width]=\"iconSize\"\n [height]=\"iconSize\"\n [class]=\"iconClass\"\n />\n <span>\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C</span>\n </button>\n <button\n tuiButton\n size=\"m\"\n type=\"button\"\n automation-id=\"sc-share-dialog__qr\"\n [appearance]=\"appearance\"\n [class]=\"buttonClass\"\n (click)=\"showQRCode()\"\n >\n <img\n [src]=\"'@tui.sc.img.qr-code' | tuiIcon\"\n alt=\"QR-\u043A\u043E\u0434\"\n [width]=\"iconSize\"\n [height]=\"iconSize\"\n [class]=\"iconClass\"\n />\n <span>QR-\u043A\u043E\u0434</span>\n </button>\n </div>\n}\n", styles: [".button._row{--tui-padding: .625rem;--t-gap: 0 !important}.button._row span{max-width:0;overflow:hidden;opacity:0;transition-duration:.5s}.button._row:hover span{opacity:1;max-width:11.5rem;padding-left:1rem}\n"] }]
|
|
133
|
+
}] });
|
|
134
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtc2hhcmUtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9zaGFyZS9zaGFyZS1kaWFsb2cvc2Mtc2hhcmUtZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9zaGFyZS9zaGFyZS1kaWFsb2cvc2Mtc2hhcmUtZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFrQixNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsU0FBUyxFQUF1QixzQkFBc0IsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlJLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQW9CLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFckMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDeEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sY0FBYyxDQUFDOzs7QUFHdkQ7Ozs7R0FJRztBQVNILE1B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QUFJLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsa0JBQWtCLENBQUMsb0JBQW9CLENBQUM7WUFDekMsTUFBTSxFQUFFLHNCQUFzQixDQUFDLE1BQU07U0FDeEMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE1BQU07YUFDTixJQUFJLENBQUMsSUFBSSxxQkFBcUIsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFO1lBQ3RELElBQUksRUFBRSxHQUFHO1lBQ1QsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLElBQUksUUFBUTtZQUM3QixJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRTtTQUNsQyxDQUFDO2FBQ0QsU0FBUyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxjQUFjLENBQUMsYUFBcUI7UUFDeEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDO1lBQ3pDLE1BQU0sRUFBRSxzQkFBc0IsQ0FBQyxVQUFVO1lBQ3pDLE1BQU0sRUFBRTtnQkFDSixlQUFlLEVBQUUsYUFBYTthQUNqQztTQUNKLENBQUMsQ0FBQztJQUNQLENBQUM7K0dBOUhRLHNCQUFzQjttR0FBdEIsc0JBQXNCLDJFQzNCbkMsdTVIQW9IQSw0UUQ1RmMsU0FBUywrSEFBRSxXQUFXLGdEQUFFLG9CQUFvQixvRkFBRSxZQUFZOzs0RkFHM0Qsc0JBQXNCO2tCQVJsQyxTQUFTO2lDQUNNLElBQUksWUFDTixpQkFBaUIsV0FHbEIsQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLG9CQUFvQixFQUFFLFlBQVksQ0FBQyxtQkFDcEQsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGluamVjdCwgT25Jbml0LCBTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgV0FfTkFWSUdBVE9SLCBXQV9XSU5ET1cgfSBmcm9tICdAbmctd2ViLWFwaXMvY29tbW9uJztcbmltcG9ydCB7IElTX1JVTk5JTkdfT05fVEVSTUlOQUwsIElTX1NFUlZFUiwgU2NJVGVybWluYWxQcm92aWRlciwgU2NVc2VyTWV0cmlrYUdvYWxzRW51bSwgU2NVc2VyTWV0cmlrYVNlcnZpY2UgfSBmcm9tICdAc25hYmNlbnRyL2NsaWVudC1jb3JlJztcbmltcG9ydCB7IFRVSV9XSU5ET1dfU0laRSB9IGZyb20gJ0B0YWlnYS11aS9jZGsnO1xuaW1wb3J0IHsgVHVpQWxlcnRTZXJ2aWNlLCBUdWlCdXR0b24sIFR1aURpYWxvZ0NvbnRleHQsIFR1aURpYWxvZ1NlcnZpY2UsIFR1aUljb25QaXBlIH0gZnJvbSAnQHRhaWdhLXVpL2NvcmUnO1xuaW1wb3J0IHsgUE9MWU1PUlBIRVVTX0NPTlRFWFQsIFBvbHltb3JwaGV1c0NvbXBvbmVudCB9IGZyb20gJ0B0YWlnYS11aS9wb2x5bW9ycGhldXMnO1xuaW1wb3J0IHsgUVJDb2RlTW9kdWxlIH0gZnJvbSAnYW5ndWxhcngtcXJjb2RlJztcbmltcG9ydCB7IG1hcCwgbm9vcCwgb2YgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU2NFbWFpbExpbmtEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzJztcbmltcG9ydCB7IFNjUVJDb2RlRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcXJjb2RlJztcbmltcG9ydCB7IFNjU2hhcmVEaWFsb2dEYXRhIH0gZnJvbSAnLi4vc2Mtc2hhcmUtZGlhbG9nLWRhdGEnO1xuXG4vKipcbiAqINCU0LjQsNC70L7Qs9C+0LLQvtC1INC+0LrQvdC+IFwi0J/QvtC00LXQu9C40YLRjNGB0Y9cIjog0LLQsNGA0LjQsNC90YLRiywg0LrQsNC6INC/0L7QtNC10LvQuNGC0YzRgdGPINGB0YHRi9C70LrQvtC5LlxuICpcbiAqINCd0LAg0YLQtdGA0LzQuNC90LDQu9C1INCy0LzQtdGB0YLQviDQstCw0YDQuNCw0L3RgtC+0LIg0L7RgtC+0LHRgNCw0LbQsNC10YLRgdGPINGC0L7Qu9GM0LrQviBRUi3QutC+0LQg0YHRgdGL0LvQutC4LlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnc2Mtc2hhcmUtZGlhbG9nJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2Mtc2hhcmUtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vc2Mtc2hhcmUtZGlhbG9nLmNvbXBvbmVudC5zY3NzJyxcbiAgICBpbXBvcnRzOiBbVHVpQnV0dG9uLCBUdWlJY29uUGlwZSwgU2NFbWFpbExpbmtEaXJlY3RpdmUsIFFSQ29kZU1vZHVsZV0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNjU2hhcmVEaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIC8qKlxuICAgICAqINCf0YDQvtCy0LDQudC00LXRgCDQtNCw0L3QvdGL0YUg0L4g0YLQtdGA0LzQuNC90LDQu9C1LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSB0ZXJtaW5hbDogU2NJVGVybWluYWxQcm92aWRlciA9IGluamVjdDxTY0lUZXJtaW5hbFByb3ZpZGVyPihJU19SVU5OSU5HX09OX1RFUk1JTkFMKTtcblxuICAgIC8qKlxuICAgICAqINCa0L7QvdGC0LXQutGB0YIg0LTQuNCw0LvQvtCz0L7QstC+0LPQviDQvtC60L3QsCwg0LIg0LrQvtGC0L7RgNC+0Lwg0L7RgtC60YDRi9GCINC60L7QvNC/0L7QvdC10L3Rgi5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbnRleHQ6IFR1aURpYWxvZ0NvbnRleHQ8dm9pZCwgU2NTaGFyZURpYWxvZ0RhdGE+ID0gaW5qZWN0PFR1aURpYWxvZ0NvbnRleHQ8dm9pZCwgU2NTaGFyZURpYWxvZ0RhdGE+PihQT0xZTU9SUEhFVVNfQ09OVEVYVCk7XG5cbiAgICAvKipcbiAgICAgKiDQodGB0YvQu9C60LAg0L3QsCDQvtCx0YrQtdC60YIg0L3QsNCy0LjQs9Cw0YLQvtGA0LAg0LHRgNCw0YPQt9C10YDQsC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IG5hdmlnYXRvcjogTmF2aWdhdG9yID0gaW5qZWN0KFdBX05BVklHQVRPUik7XG5cbiAgICAvKipcbiAgICAgKiDQodGB0YvQu9C60LAg0L3QsCDQvtCx0YrQtdC60YIg0L7QutC90LAg0LHRgNCw0YPQt9C10YDQsC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHdpbmRvdzogV2luZG93ID0gaW5qZWN0KFdBX1dJTkRPVyk7XG5cbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0YPQstC10LTQvtC80LvQtdC90LjQuS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGFsZXJ0czogVHVpQWxlcnRTZXJ2aWNlID0gaW5qZWN0KFR1aUFsZXJ0U2VydmljZSk7XG5cbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0LTQu9GPINGA0LDQsdC+0YLRiyDRgSDQtNC40LDQu9C+0LPQvtCy0YvQvNC4INC+0LrQvdCw0LzQuC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRpYWxvZzogVHVpRGlhbG9nU2VydmljZSA9IGluamVjdChUdWlEaWFsb2dTZXJ2aWNlKTtcblxuICAgIC8qKlxuICAgICAqINCh0LXRgNCy0LjRgSDQtNC70Y8g0YHQsdC+0YDQsCDQvNC10YLRgNC40Log0L4g0LTQtdC50YHRgtCy0LjRj9GFINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtdC5LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlck1ldHJpa2FTZXJ2aWNlOiBTY1VzZXJNZXRyaWthU2VydmljZSA9IGluamVjdChTY1VzZXJNZXRyaWthU2VydmljZSk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgU2lnbmFsfSDRhNC+0YDQvNCw0YLQsCDQvtGC0L7QsdGA0LDQttC10L3QuNGPINCy0LDRgNC40LDQvdGC0L7Qsjog0LIg0YHRgtGA0L7QutGDINC90LAg0YjQuNGA0L7QutC40YUg0Y3QutGA0LDQvdCw0YUsINGB0L/QuNGB0LrQvtC8INC90LAg0YPQt9C60LjRhS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgdmlld01vZGU6IFNpZ25hbDwncm93JyB8ICdsaXN0Jz4gPSB0b1NpZ25hbChcbiAgICAgICAgaW5qZWN0PGJvb2xlYW4+KElTX1NFUlZFUikgPyBvZjwncm93JyB8ICdsaXN0Jz4oJ2xpc3QnKSA6IGluamVjdChUVUlfV0lORE9XX1NJWkUpLnBpcGUobWFwKChyZWN0KSA9PiAocmVjdC53aWR0aCA+IDc2OCA/ICdyb3cnIDogJ2xpc3QnKSkpLFxuICAgICAgICB7IGluaXRpYWxWYWx1ZTogJ2xpc3QnIH1cbiAgICApO1xuXG4gICAgLyoqXG4gICAgICog0JfQsNCz0L7Qu9C+0LLQvtC6INGB0YHRi9C70LrQuCwg0LrQvtGC0L7RgNC+0Lkg0L3QtdC+0LHRhdC+0LTQuNC80L4g0L/QvtC00LXQu9C40YLRjNGB0Y8uXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHRpdGxlOiBzdHJpbmcgPSB0aGlzLmNvbnRleHQuZGF0YS50aXRsZTtcblxuICAgIC8qKlxuICAgICAqINCh0YHRi9C70LrQsCwg0LrQvtGC0L7RgNC+0Lkg0L3QtdC+0LHRhdC+0LTQuNC80L4g0L/QvtC00LXQu9C40YLRjNGB0Y8uXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHNoYXJlVXJsOiBzdHJpbmcgPSB0aGlzLmNvbnRleHQuZGF0YS5zaGFyZVVybDtcblxuICAgIC8qKlxuICAgICAqINCh0YHRi9C70LrQsCDQvtGC0L/RgNCw0LLQutC4INC/0L4gRW1haWwuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGVtYWlsTGluazogc3RyaW5nID0gYG1haWx0bzo/c3ViamVjdD0ke2VuY29kZVVSSUNvbXBvbmVudChbJ9Ce0J7QniDQodC90LDQsdGG0LXQvdGC0YAnLCB0aGlzLnRpdGxlXS5maWx0ZXIoQm9vbGVhbikuam9pbignIC0gJykpfSZib2R5PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuc2hhcmVVcmwpfWA7XG5cbiAgICAvKipcbiAgICAgKiDQodGB0YvQu9C60LAg0L7RgtC/0YDQsNCy0LrQuCDQstC+INCS0JrQvtC90YLQsNC60YLQtS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgdmtMaW5rOiBzdHJpbmcgPSBgaHR0cHM6Ly92ay5jb20vc2hhcmUucGhwP3VybD0ke2VuY29kZVVSSUNvbXBvbmVudCh0aGlzLnNoYXJlVXJsKX1gO1xuXG4gICAgLyoqXG4gICAgICog0KHRgdGL0LvQutCwINC+0YLQv9GA0LDQstC60Lgg0LIgVGVsZWdyYW0uXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHRlbGVncmFtTGluazogc3RyaW5nID0gYGh0dHBzOi8vdC5tZS9zaGFyZS91cmw/dXJsPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuc2hhcmVVcmwpfWA7XG5cbiAgICAvKiogQGluaGVyaXREb2MgKi9cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudXNlck1ldHJpa2FTZXJ2aWNlLmVtaXRVc2VyTWV0cmlrYUV2ZW50KHtcbiAgICAgICAgICAgIHRhcmdldDogU2NVc2VyTWV0cmlrYUdvYWxzRW51bS5zaGFyZVNob3csXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0YLQutGA0YvQstCw0LXRgiDQvtC60L3QviDQv9C10YDQtdGF0L7QtNCwINCyINGB0L7RhtC40LDQu9GM0L3Rg9GOINGB0LXRgtGMLlxuICAgICAqXG4gICAgICogQHBhcmFtIHNoYXJlTGluayDQodGB0YvQu9C60LAg0L/QtdGA0LXRhdC+0LTQsCDQsiDRgdC+0YbQuNCw0LvRjNC90YPRjiDRgdC10YLRjC5cbiAgICAgKiBAcGFyYW0gc29jaWFsTWVkaWEgU2x1ZyDRgdC+0YbQuNCw0LvRjNC90L7QuSDRgdC10YLQuC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb3BlblNoYXJlV2luZG93KHNoYXJlTGluazogc3RyaW5nLCBzb2NpYWxNZWRpYTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZW1pdFNoYXJlQ2xpY2soc29jaWFsTWVkaWEpO1xuICAgICAgICB0aGlzLndpbmRvdy5vcGVuKHNoYXJlTGluaywgJ3NoYXJlcicsICdzdGF0dXM9MCx0b29sYmFyPTAsd2lkdGg9NjUwLGhlaWdodD01MDAnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQmtC+0L/QuNGA0YPQtdGCINGB0YHRi9C70LrRgyDQsiDQsdGD0YTQtdGAINC+0LHQvNC10L3QsC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgY29weVNoYXJlTGluaygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lbWl0U2hhcmVDbGljaygnY29weV90b19jbGlwYm9hcmQnKTtcbiAgICAgICAgdGhpcy5uYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0aGlzLnNoYXJlVXJsKS5jYXRjaChub29wKTtcbiAgICAgICAgdGhpcy5hbGVydHMub3Blbign0KHRgdGL0LvQutCwINGB0LrQvtC/0LjRgNC+0LLQsNC90LAg0LIg0LHRg9GE0LXRgCDQvtCx0LzQtdC90LAuJywgeyBhcHBlYXJhbmNlOiAncG9zaXRpdmUnIH0pLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0YLQutGA0YvQstCw0LXRgiDQtNC40LDQu9C+0LPQvtCy0L7QtSDQvtC60L3QviDRgSBRUi3QutC+0LTQvtC8INGB0YHRi9C70LrQuC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgc2hvd1FSQ29kZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lbWl0U2hhcmVDbGljaygncXInKTtcbiAgICAgICAgdGhpcy51c2VyTWV0cmlrYVNlcnZpY2UuZW1pdFVzZXJNZXRyaWthRXZlbnQoe1xuICAgICAgICAgICAgdGFyZ2V0OiBTY1VzZXJNZXRyaWthR29hbHNFbnVtLnFyU2hvdyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5kaWFsb2dcbiAgICAgICAgICAgIC5vcGVuKG5ldyBQb2x5bW9ycGhldXNDb21wb25lbnQoU2NRUkNvZGVEaWFsb2dDb21wb25lbnQpLCB7XG4gICAgICAgICAgICAgICAgc2l6ZTogJ3MnLFxuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLnRpdGxlIHx8ICdRUi3QutC+0LQnLFxuICAgICAgICAgICAgICAgIGRhdGE6IHsgcXJkYXRhOiB0aGlzLnNoYXJlVXJsIH0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0YLQv9GA0LDQstC70Y/QtdGCINC80LXRgtGA0LjQutGDINCy0YvQsdC+0YDQsCDQstCw0YDQuNCw0L3RgtCwIFwi0J/QvtC00LXQu9C40YLRjNGB0Y9cIi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzaGFyZUxpbmtOYW1lINCd0LDQuNC80LXQvdC+0LLQsNC90LjQtSDQstCw0YDQuNCw0L3RgtCwLlxuICAgICAqL1xuICAgIHByaXZhdGUgZW1pdFNoYXJlQ2xpY2soc2hhcmVMaW5rTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMudXNlck1ldHJpa2FTZXJ2aWNlLmVtaXRVc2VyTWV0cmlrYUV2ZW50KHtcbiAgICAgICAgICAgIHRhcmdldDogU2NVc2VyTWV0cmlrYUdvYWxzRW51bS5zaGFyZUNsaWNrLFxuICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgc2hhcmVfbGlua19uYW1lOiBzaGFyZUxpbmtOYW1lLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwiQGlmICh0ZXJtaW5hbC5pc1J1bm5pbmdPblRlcm1pbmFsKSB7XG4gICAgPHAgY2xhc3M9XCItbXQtMiBtYi0zIHRleHQtdHVpLXRleHQtMDJcIj7QodC60LDQvdC40YDRg9C50YLQtSBRUi3QutC+0LQuPC9wPlxuICAgIDxxcmNvZGVcbiAgICAgICAgW21hcmdpbl09XCIwXCJcbiAgICAgICAgW3FyZGF0YV09XCJzaGFyZVVybFwiXG4gICAgICAgIFt3aWR0aF09XCIyNTBcIlxuICAgICAgICBlbGVtZW50VHlwZT1cImltZ1wiXG4gICAgPjwvcXJjb2RlPlxufSBAZWxzZSB7XG4gICAgQGxldCBpc1JvdyA9IHZpZXdNb2RlKCkgPT09ICdyb3cnO1xuICAgIEBsZXQgYXBwZWFyYW5jZSA9IGlzUm93ID8gJ2ZsYXQnIDogJ291dGxpbmUnO1xuICAgIEBsZXQgYnV0dG9uQ2xhc3MgPSBpc1JvdyA/ICdidXR0b24gX3JvdycgOiAnYnV0dG9uIHctZnVsbCAhanVzdGlmeS1zdGFydCc7XG4gICAgQGxldCBpY29uQ2xhc3MgPSBpc1JvdyA/ICchbS0wICFzaXplLTgnIDogJyFtLTAgIXNpemUtNic7XG4gICAgQGxldCBpY29uU2l6ZSA9IGlzUm93ID8gMzIgOiAyNDtcblxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJnYXAtMlwiXG4gICAgICAgIFtjbGFzcy5mbGV4XT1cImlzUm93XCJcbiAgICAgICAgW2NsYXNzLmdyaWRdPVwiIWlzUm93XCJcbiAgICAgICAgW2NsYXNzLmdyaWQtY29scy0yXT1cIiFpc1Jvd1wiXG4gICAgPlxuICAgICAgICA8YVxuICAgICAgICAgICAgdHVpQnV0dG9uXG4gICAgICAgICAgICBzaXplPVwibVwiXG4gICAgICAgICAgICBzY0VtYWlsTGlua1xuICAgICAgICAgICAgbGlua0xvY2F0aW9uPVwic2hhcmUtbGlua1wiXG4gICAgICAgICAgICBhdXRvbWF0aW9uLWlkPVwic2Mtc2hhcmUtZGlhbG9nX19lbWFpbFwiXG4gICAgICAgICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcbiAgICAgICAgICAgIFtjbGFzc109XCJidXR0b25DbGFzc1wiXG4gICAgICAgICAgICBbaHJlZl09XCJlbWFpbExpbmtcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgW3NyY109XCInQHR1aS5zYy5pbWcuZW1haWwnIHwgdHVpSWNvblwiXG4gICAgICAgICAgICAgICAgYWx0PVwiRW1haWxcIlxuICAgICAgICAgICAgICAgIFt3aWR0aF09XCJpY29uU2l6ZVwiXG4gICAgICAgICAgICAgICAgW2hlaWdodF09XCJpY29uU2l6ZVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzXT1cImljb25DbGFzc1wiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHNwYW4+RW1haWw8L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICAgICAgPGFcbiAgICAgICAgICAgIHR1aUJ1dHRvblxuICAgICAgICAgICAgc2l6ZT1cIm1cIlxuICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgIGF1dG9tYXRpb24taWQ9XCJzYy1zaGFyZS1kaWFsb2dfX3ZrXCJcbiAgICAgICAgICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxuICAgICAgICAgICAgW2NsYXNzXT1cImJ1dHRvbkNsYXNzXCJcbiAgICAgICAgICAgIFtocmVmXT1cInZrTGlua1wiXG4gICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IG9wZW5TaGFyZVdpbmRvdyh2a0xpbmssICd2aycpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgIFtzcmNdPVwiJ0B0dWkuc2MuaW1nLnZrJyB8IHR1aUljb25cIlxuICAgICAgICAgICAgICAgIGFsdD1cItCS0JrQvtC90YLQsNC60YLQtVwiXG4gICAgICAgICAgICAgICAgW3dpZHRoXT1cImljb25TaXplXCJcbiAgICAgICAgICAgICAgICBbaGVpZ2h0XT1cImljb25TaXplXCJcbiAgICAgICAgICAgICAgICBbY2xhc3NdPVwiaWNvbkNsYXNzXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8c3Bhbj7QktCa0L7QvdGC0LDQutGC0LU8L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICAgICAgPGFcbiAgICAgICAgICAgIHR1aUJ1dHRvblxuICAgICAgICAgICAgc2l6ZT1cIm1cIlxuICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgIGF1dG9tYXRpb24taWQ9XCJzYy1zaGFyZS1kaWFsb2dfX3RlbGVncmFtXCJcbiAgICAgICAgICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxuICAgICAgICAgICAgW2NsYXNzXT1cImJ1dHRvbkNsYXNzXCJcbiAgICAgICAgICAgIFtocmVmXT1cInRlbGVncmFtTGlua1wiXG4gICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IG9wZW5TaGFyZVdpbmRvdyh0ZWxlZ3JhbUxpbmssICd0ZWxlZ3JhbScpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgIFtzcmNdPVwiJ0B0dWkuc2MuaW1nLnRlbGVncmFtJyB8IHR1aUljb25cIlxuICAgICAgICAgICAgICAgIGFsdD1cIlRlbGVncmFtXCJcbiAgICAgICAgICAgICAgICBbd2lkdGhdPVwiaWNvblNpemVcIlxuICAgICAgICAgICAgICAgIFtoZWlnaHRdPVwiaWNvblNpemVcIlxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJpY29uQ2xhc3NcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxzcGFuPlRlbGVncmFtPC9zcGFuPlxuICAgICAgICA8L2E+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR1aUJ1dHRvblxuICAgICAgICAgICAgc2l6ZT1cIm1cIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBhdXRvbWF0aW9uLWlkPVwic2Mtc2hhcmUtZGlhbG9nX19jb3B5XCJcbiAgICAgICAgICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxuICAgICAgICAgICAgW2NsYXNzXT1cImJ1dHRvbkNsYXNzXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjb3B5U2hhcmVMaW5rKClcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgW3NyY109XCInQHR1aS5zYy5pbWcuY29weScgfCB0dWlJY29uXCJcbiAgICAgICAgICAgICAgICBhbHQ9XCLQmtC+0L/QuNGA0L7QstCw0YLRjFwiXG4gICAgICAgICAgICAgICAgW3dpZHRoXT1cImljb25TaXplXCJcbiAgICAgICAgICAgICAgICBbaGVpZ2h0XT1cImljb25TaXplXCJcbiAgICAgICAgICAgICAgICBbY2xhc3NdPVwiaWNvbkNsYXNzXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8c3Bhbj7QmtC+0L/QuNGA0L7QstCw0YLRjDwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR1aUJ1dHRvblxuICAgICAgICAgICAgc2l6ZT1cIm1cIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBhdXRvbWF0aW9uLWlkPVwic2Mtc2hhcmUtZGlhbG9nX19xclwiXG4gICAgICAgICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcbiAgICAgICAgICAgIFtjbGFzc109XCJidXR0b25DbGFzc1wiXG4gICAgICAgICAgICAoY2xpY2spPVwic2hvd1FSQ29kZSgpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgIFtzcmNdPVwiJ0B0dWkuc2MuaW1nLnFyLWNvZGUnIHwgdHVpSWNvblwiXG4gICAgICAgICAgICAgICAgYWx0PVwiUVIt0LrQvtC0XCJcbiAgICAgICAgICAgICAgICBbd2lkdGhdPVwiaWNvblNpemVcIlxuICAgICAgICAgICAgICAgIFtoZWlnaHRdPVwiaWNvblNpemVcIlxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJpY29uQ2xhc3NcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxzcGFuPlFSLdC60L7QtDwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG59XG4iXX0=
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, inject, input } from '@angular/core';
|
|
2
|
+
import { WA_WINDOW } from '@ng-web-apis/common';
|
|
3
|
+
import { IS_RUNNING_ON_TERMINAL, ScPhoneService, ScUserMetrikaGoalsEnum, ScUserMetrikaService } from '@snabcentr/client-core';
|
|
4
|
+
import { TuiButton, TuiDialogService } from '@taiga-ui/core';
|
|
5
|
+
import { PolymorpheusComponent } from '@taiga-ui/polymorpheus';
|
|
6
|
+
import { ScPhoneFormatPipe } from '../../pipes';
|
|
7
|
+
import { ScQRCodeDialogComponent } from '../../qrcode';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
/**
|
|
10
|
+
* Ссылки на мессенджеры контакта по номеру телефона.
|
|
11
|
+
*
|
|
12
|
+
* На терминале вместо перехода в мессенджер отображается QR-код ссылки.
|
|
13
|
+
*/
|
|
14
|
+
export class ScShareMessengersLinksComponent {
|
|
15
|
+
constructor() {
|
|
16
|
+
/**
|
|
17
|
+
* {@link InputSignal} телефона контакта.
|
|
18
|
+
*/
|
|
19
|
+
this.phone = input.required();
|
|
20
|
+
/**
|
|
21
|
+
* {@link InputSignal} размера кнопок.
|
|
22
|
+
*/
|
|
23
|
+
this.size = input('s');
|
|
24
|
+
/**
|
|
25
|
+
* Сервис для сбора метрик о действиях пользователей.
|
|
26
|
+
*/
|
|
27
|
+
this.userMetrikaService = inject(ScUserMetrikaService);
|
|
28
|
+
/**
|
|
29
|
+
* Ссылка на объект окна браузера.
|
|
30
|
+
*/
|
|
31
|
+
this.window = inject(WA_WINDOW);
|
|
32
|
+
/**
|
|
33
|
+
* Провайдер данных о терминале.
|
|
34
|
+
*/
|
|
35
|
+
this.terminal = inject(IS_RUNNING_ON_TERMINAL);
|
|
36
|
+
/**
|
|
37
|
+
* Сервис для работы с диалоговыми окнами.
|
|
38
|
+
*/
|
|
39
|
+
this.dialog = inject(TuiDialogService);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Открывает окно перехода в мессенджер.
|
|
43
|
+
*
|
|
44
|
+
* @param shareLink Ссылка перехода в мессенджер.
|
|
45
|
+
* @param socialMedia Slug мессенджера.
|
|
46
|
+
*/
|
|
47
|
+
openShareWindow(shareLink, socialMedia) {
|
|
48
|
+
this.userMetrikaService.emitUserMetrikaEvent({
|
|
49
|
+
target: ScUserMetrikaGoalsEnum.shareClick,
|
|
50
|
+
params: {
|
|
51
|
+
share_link_name: socialMedia,
|
|
52
|
+
phone: this.phone(),
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
if (this.terminal.isRunningOnTerminal) {
|
|
56
|
+
this.dialog
|
|
57
|
+
.open(new PolymorpheusComponent(ScQRCodeDialogComponent), {
|
|
58
|
+
size: 's',
|
|
59
|
+
label: socialMedia,
|
|
60
|
+
data: { qrdata: shareLink },
|
|
61
|
+
})
|
|
62
|
+
.subscribe();
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
this.window.open(shareLink, 'sharer', 'status=0,toolbar=0,width=650,height=500');
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Проверяет, что номер телефона подходит для использования в мессенджерах.
|
|
70
|
+
*
|
|
71
|
+
* @param value Номер телефона.
|
|
72
|
+
*/
|
|
73
|
+
// eslint-disable-next-line class-methods-use-this
|
|
74
|
+
isValidPhoneNumberForMessenger(value) {
|
|
75
|
+
return ScPhoneService.isValidPhoneNumberForMessenger(value);
|
|
76
|
+
}
|
|
77
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScShareMessengersLinksComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
78
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ScShareMessengersLinksComponent, isStandalone: true, selector: "sc-share-messengers-links", inputs: { phone: { classPropertyName: "phone", publicName: "phone", isSignal: true, isRequired: true, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (isValidPhoneNumberForMessenger(phone())) {\n @let phoneNumber = phone() | scPhoneFormat: 'cleanWithPlus';\n\n <button\n tuiIconButton\n type=\"button\"\n appearance=\"mono\"\n iconStart=\"@tui.sc.telegram\"\n title=\"Telegram\"\n aria-label=\"Telegram\"\n [size]=\"size()\"\n (click)=\"openShareWindow('https://t.me/' + phoneNumber, 'telegram')\"\n ></button>\n}\n", dependencies: [{ kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "pipe", type: ScPhoneFormatPipe, name: "scPhoneFormat" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
79
|
+
}
|
|
80
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScShareMessengersLinksComponent, decorators: [{
|
|
81
|
+
type: Component,
|
|
82
|
+
args: [{ standalone: true, selector: 'sc-share-messengers-links', imports: [TuiButton, ScPhoneFormatPipe], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (isValidPhoneNumberForMessenger(phone())) {\n @let phoneNumber = phone() | scPhoneFormat: 'cleanWithPlus';\n\n <button\n tuiIconButton\n type=\"button\"\n appearance=\"mono\"\n iconStart=\"@tui.sc.telegram\"\n title=\"Telegram\"\n aria-label=\"Telegram\"\n [size]=\"size()\"\n (click)=\"openShareWindow('https://t.me/' + phoneNumber, 'telegram')\"\n ></button>\n}\n" }]
|
|
83
|
+
}] });
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtc2hhcmUtbWVzc2VuZ2Vycy1saW5rcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvc2hhcmUvc2hhcmUtbWVzc2VuZ2Vycy1saW5rcy9zYy1zaGFyZS1tZXNzZW5nZXJzLWxpbmtzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9zaGFyZS9zaGFyZS1tZXNzZW5nZXJzLWxpbmtzL3NjLXNoYXJlLW1lc3NlbmdlcnMtbGlua3MuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFlLE1BQU0sZUFBZSxDQUFDO0FBQy9GLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsc0JBQXNCLEVBQXVCLGNBQWMsRUFBRSxzQkFBc0IsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ25KLE9BQU8sRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUUvRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDaEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sY0FBYyxDQUFDOztBQUV2RDs7OztHQUlHO0FBUUgsTUFBTSxPQUFPLCtCQUErQjtJQVA1QztRQVFJOztXQUVHO1FBQ2EsVUFBSyxHQUF3QixLQUFLLENBQUMsUUFBUSxFQUFVLENBQUM7UUFFdEU7O1dBRUc7UUFDYSxTQUFJLEdBQTJCLEtBQUssQ0FBWSxHQUFHLENBQUMsQ0FBQztRQUVyRTs7V0FFRztRQUNjLHVCQUFrQixHQUF5QixNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUV6Rjs7V0FFRztRQUNjLFdBQU0sR0FBVyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFcEQ7O1dBRUc7UUFDYyxhQUFRLEdBQXdCLE1BQU0sQ0FBc0Isc0JBQXNCLENBQUMsQ0FBQztRQUVyRzs7V0FFRztRQUNjLFdBQU0sR0FBcUIsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7S0F1Q3hFO0lBckNHOzs7OztPQUtHO0lBQ08sZUFBZSxDQUFDLFNBQWlCLEVBQUUsV0FBbUI7UUFDNUQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDO1lBQ3pDLE1BQU0sRUFBRSxzQkFBc0IsQ0FBQyxVQUFVO1lBQ3pDLE1BQU0sRUFBRTtnQkFDSixlQUFlLEVBQUUsV0FBVztnQkFDNUIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUU7YUFDdEI7U0FDSixDQUFDLENBQUM7UUFFSCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsTUFBTTtpQkFDTixJQUFJLENBQUMsSUFBSSxxQkFBcUIsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFO2dCQUN0RCxJQUFJLEVBQUUsR0FBRztnQkFDVCxLQUFLLEVBQUUsV0FBVztnQkFDbEIsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRTthQUM5QixDQUFDO2lCQUNELFNBQVMsRUFBRSxDQUFDO1FBQ3JCLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSx5Q0FBeUMsQ0FBQyxDQUFDO1FBQ3JGLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGtEQUFrRDtJQUN4Qyw4QkFBOEIsQ0FBQyxLQUFhO1FBQ2xELE9BQU8sY0FBYyxDQUFDLDhCQUE4QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hFLENBQUM7K0dBbkVRLCtCQUErQjttR0FBL0IsK0JBQStCLDZVQ3JCNUMsb2JBY0EsNENESWMsU0FBUywrSEFBRSxpQkFBaUI7OzRGQUc3QiwrQkFBK0I7a0JBUDNDLFNBQVM7aUNBQ00sSUFBSSxZQUNOLDJCQUEyQixXQUU1QixDQUFDLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyxtQkFDdEIsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGluamVjdCwgaW5wdXQsIElucHV0U2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBXQV9XSU5ET1cgfSBmcm9tICdAbmctd2ViLWFwaXMvY29tbW9uJztcbmltcG9ydCB7IElTX1JVTk5JTkdfT05fVEVSTUlOQUwsIFNjSVRlcm1pbmFsUHJvdmlkZXIsIFNjUGhvbmVTZXJ2aWNlLCBTY1VzZXJNZXRyaWthR29hbHNFbnVtLCBTY1VzZXJNZXRyaWthU2VydmljZSB9IGZyb20gJ0BzbmFiY2VudHIvY2xpZW50LWNvcmUnO1xuaW1wb3J0IHsgVHVpQnV0dG9uLCBUdWlEaWFsb2dTZXJ2aWNlLCBUdWlTaXplWFMgfSBmcm9tICdAdGFpZ2EtdWkvY29yZSc7XG5pbXBvcnQgeyBQb2x5bW9ycGhldXNDb21wb25lbnQgfSBmcm9tICdAdGFpZ2EtdWkvcG9seW1vcnBoZXVzJztcblxuaW1wb3J0IHsgU2NQaG9uZUZvcm1hdFBpcGUgfSBmcm9tICcuLi8uLi9waXBlcyc7XG5pbXBvcnQgeyBTY1FSQ29kZURpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL3FyY29kZSc7XG5cbi8qKlxuICog0KHRgdGL0LvQutC4INC90LAg0LzQtdGB0YHQtdC90LTQttC10YDRiyDQutC+0L3RgtCw0LrRgtCwINC/0L4g0L3QvtC80LXRgNGDINGC0LXQu9C10YTQvtC90LAuXG4gKlxuICog0J3QsCDRgtC10YDQvNC40L3QsNC70LUg0LLQvNC10YHRgtC+INC/0LXRgNC10YXQvtC00LAg0LIg0LzQtdGB0YHQtdC90LTQttC10YAg0L7RgtC+0LHRgNCw0LbQsNC10YLRgdGPIFFSLdC60L7QtCDRgdGB0YvQu9C60LguXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdzYy1zaGFyZS1tZXNzZW5nZXJzLWxpbmtzJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2Mtc2hhcmUtbWVzc2VuZ2Vycy1saW5rcy5jb21wb25lbnQuaHRtbCcsXG4gICAgaW1wb3J0czogW1R1aUJ1dHRvbiwgU2NQaG9uZUZvcm1hdFBpcGVdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTY1NoYXJlTWVzc2VuZ2Vyc0xpbmtzQ29tcG9uZW50IHtcbiAgICAvKipcbiAgICAgKiB7QGxpbmsgSW5wdXRTaWduYWx9INGC0LXQu9C10YTQvtC90LAg0LrQvtC90YLQsNC60YLQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgcGhvbmU6IElucHV0U2lnbmFsPHN0cmluZz4gPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmc+KCk7XG5cbiAgICAvKipcbiAgICAgKiB7QGxpbmsgSW5wdXRTaWduYWx9INGA0LDQt9C80LXRgNCwINC60L3QvtC/0L7Qui5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgc2l6ZTogSW5wdXRTaWduYWw8VHVpU2l6ZVhTPiA9IGlucHV0PFR1aVNpemVYUz4oJ3MnKTtcblxuICAgIC8qKlxuICAgICAqINCh0LXRgNCy0LjRgSDQtNC70Y8g0YHQsdC+0YDQsCDQvNC10YLRgNC40Log0L4g0LTQtdC50YHRgtCy0LjRj9GFINC/0L7Qu9GM0LfQvtCy0LDRgtC10LvQtdC5LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlck1ldHJpa2FTZXJ2aWNlOiBTY1VzZXJNZXRyaWthU2VydmljZSA9IGluamVjdChTY1VzZXJNZXRyaWthU2VydmljZSk7XG5cbiAgICAvKipcbiAgICAgKiDQodGB0YvQu9C60LAg0L3QsCDQvtCx0YrQtdC60YIg0L7QutC90LAg0LHRgNCw0YPQt9C10YDQsC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHdpbmRvdzogV2luZG93ID0gaW5qZWN0KFdBX1dJTkRPVyk7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0L7QstCw0LnQtNC10YAg0LTQsNC90L3Ri9GFINC+INGC0LXRgNC80LjQvdCw0LvQtS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHRlcm1pbmFsOiBTY0lUZXJtaW5hbFByb3ZpZGVyID0gaW5qZWN0PFNjSVRlcm1pbmFsUHJvdmlkZXI+KElTX1JVTk5JTkdfT05fVEVSTUlOQUwpO1xuXG4gICAgLyoqXG4gICAgICog0KHQtdGA0LLQuNGBINC00LvRjyDRgNCw0LHQvtGC0Ysg0YEg0LTQuNCw0LvQvtCz0L7QstGL0LzQuCDQvtC60L3QsNC80LguXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBkaWFsb2c6IFR1aURpYWxvZ1NlcnZpY2UgPSBpbmplY3QoVHVpRGlhbG9nU2VydmljZSk7XG5cbiAgICAvKipcbiAgICAgKiDQntGC0LrRgNGL0LLQsNC10YIg0L7QutC90L4g0L/QtdGA0LXRhdC+0LTQsCDQsiDQvNC10YHRgdC10L3QtNC20LXRgC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzaGFyZUxpbmsg0KHRgdGL0LvQutCwINC/0LXRgNC10YXQvtC00LAg0LIg0LzQtdGB0YHQtdC90LTQttC10YAuXG4gICAgICogQHBhcmFtIHNvY2lhbE1lZGlhIFNsdWcg0LzQtdGB0YHQtdC90LTQttC10YDQsC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb3BlblNoYXJlV2luZG93KHNoYXJlTGluazogc3RyaW5nLCBzb2NpYWxNZWRpYTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMudXNlck1ldHJpa2FTZXJ2aWNlLmVtaXRVc2VyTWV0cmlrYUV2ZW50KHtcbiAgICAgICAgICAgIHRhcmdldDogU2NVc2VyTWV0cmlrYUdvYWxzRW51bS5zaGFyZUNsaWNrLFxuICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgc2hhcmVfbGlua19uYW1lOiBzb2NpYWxNZWRpYSxcbiAgICAgICAgICAgICAgICBwaG9uZTogdGhpcy5waG9uZSgpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMudGVybWluYWwuaXNSdW5uaW5nT25UZXJtaW5hbCkge1xuICAgICAgICAgICAgdGhpcy5kaWFsb2dcbiAgICAgICAgICAgICAgICAub3BlbihuZXcgUG9seW1vcnBoZXVzQ29tcG9uZW50KFNjUVJDb2RlRGlhbG9nQ29tcG9uZW50KSwge1xuICAgICAgICAgICAgICAgICAgICBzaXplOiAncycsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBzb2NpYWxNZWRpYSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogeyBxcmRhdGE6IHNoYXJlTGluayB9LFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy53aW5kb3cub3BlbihzaGFyZUxpbmssICdzaGFyZXInLCAnc3RhdHVzPTAsdG9vbGJhcj0wLHdpZHRoPTY1MCxoZWlnaHQ9NTAwJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0L7QstC10YDRj9C10YIsINGH0YLQviDQvdC+0LzQtdGAINGC0LXQu9C10YTQvtC90LAg0L/QvtC00YXQvtC00LjRgiDQtNC70Y8g0LjRgdC/0L7Qu9GM0LfQvtCy0LDQvdC40Y8g0LIg0LzQtdGB0YHQtdC90LTQttC10YDQsNGFLlxuICAgICAqXG4gICAgICogQHBhcmFtIHZhbHVlINCd0L7QvNC10YAg0YLQtdC70LXRhNC+0L3QsC5cbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2xhc3MtbWV0aG9kcy11c2UtdGhpc1xuICAgIHByb3RlY3RlZCBpc1ZhbGlkUGhvbmVOdW1iZXJGb3JNZXNzZW5nZXIodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gU2NQaG9uZVNlcnZpY2UuaXNWYWxpZFBob25lTnVtYmVyRm9yTWVzc2VuZ2VyKHZhbHVlKTtcbiAgICB9XG59XG4iLCJAaWYgKGlzVmFsaWRQaG9uZU51bWJlckZvck1lc3NlbmdlcihwaG9uZSgpKSkge1xuICAgIEBsZXQgcGhvbmVOdW1iZXIgPSBwaG9uZSgpIHwgc2NQaG9uZUZvcm1hdDogJ2NsZWFuV2l0aFBsdXMnO1xuXG4gICAgPGJ1dHRvblxuICAgICAgICB0dWlJY29uQnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBhcHBlYXJhbmNlPVwibW9ub1wiXG4gICAgICAgIGljb25TdGFydD1cIkB0dWkuc2MudGVsZWdyYW1cIlxuICAgICAgICB0aXRsZT1cIlRlbGVncmFtXCJcbiAgICAgICAgYXJpYS1sYWJlbD1cIlRlbGVncmFtXCJcbiAgICAgICAgW3NpemVdPVwic2l6ZSgpXCJcbiAgICAgICAgKGNsaWNrKT1cIm9wZW5TaGFyZVdpbmRvdygnaHR0cHM6Ly90Lm1lLycgKyBwaG9uZU51bWJlciwgJ3RlbGVncmFtJylcIlxuICAgID48L2J1dHRvbj5cbn1cbiJdfQ==
|