myrtex-mf-competition 1.0.71 → 1.0.73

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/.browserslistrc +16 -0
  2. package/karma.conf.js +44 -0
  3. package/ng-package.json +7 -0
  4. package/package.json +13 -33
  5. package/src/lib/modules/competition-header/competition-header.module.ts +47 -0
  6. package/src/lib/modules/competition-header/components/competition-header.component.html +164 -0
  7. package/src/lib/modules/competition-header/components/competition-header.component.ts +584 -0
  8. package/src/lib/modules/competition-header/constants.ts +1 -0
  9. package/src/lib/modules/competition-header/directives/competition-header-custom-buttons.directive.ts +10 -0
  10. package/src/lib/modules/competition-header/directives/index.ts +1 -0
  11. package/{lib/modules/competition-header/index.d.ts → src/lib/modules/competition-header/index.ts} +1 -1
  12. package/src/lib/modules/competition-header/models/competition-header-version.model.ts +13 -0
  13. package/src/lib/modules/competition-header/models/competition-rejection.model.ts +5 -0
  14. package/{lib/modules/competition-header/models/competition-status.model.d.ts → src/lib/modules/competition-header/models/competition-status.model.ts} +4 -3
  15. package/src/lib/modules/competition-header/models/competition-version.model.ts +12 -0
  16. package/{lib/modules/competition-header/models/eb-links.model.d.ts → src/lib/modules/competition-header/models/eb-links.model.ts} +1 -1
  17. package/src/lib/modules/competition-header/services/competition-header.service.ts +47 -0
  18. package/src/lib/modules/competition-header/services/settings.service.ts +17 -0
  19. package/src/lib/modules/competition-header/store/competition-header.actions.ts +102 -0
  20. package/src/lib/modules/competition-header/store/competition-header.effects.ts +193 -0
  21. package/src/lib/modules/competition-header/store/competition-header.reducers.ts +39 -0
  22. package/src/lib/modules/competition-header/store/competition-header.selector.ts +45 -0
  23. package/src/lib/modules/competition-header/store/competition-header.state.ts +21 -0
  24. package/{public-api.d.ts → src/public-api.ts} +4 -0
  25. package/src/test.ts +27 -0
  26. package/tsconfig.lib.json +15 -0
  27. package/tsconfig.lib.prod.json +10 -0
  28. package/tsconfig.spec.json +17 -0
  29. package/esm2020/lib/modules/competition-header/competition-header.module.mjs +0 -76
  30. package/esm2020/lib/modules/competition-header/components/competition-header.component.mjs +0 -495
  31. package/esm2020/lib/modules/competition-header/constants.mjs +0 -2
  32. package/esm2020/lib/modules/competition-header/directives/competition-header-custom-buttons.directive.mjs +0 -16
  33. package/esm2020/lib/modules/competition-header/directives/index.mjs +0 -2
  34. package/esm2020/lib/modules/competition-header/index.mjs +0 -5
  35. package/esm2020/lib/modules/competition-header/models/competition-header-version.model.mjs +0 -2
  36. package/esm2020/lib/modules/competition-header/models/competition-rejection.model.mjs +0 -2
  37. package/esm2020/lib/modules/competition-header/models/competition-status.model.mjs +0 -2
  38. package/esm2020/lib/modules/competition-header/models/competition-version.model.mjs +0 -2
  39. package/esm2020/lib/modules/competition-header/models/eb-links.model.mjs +0 -2
  40. package/esm2020/lib/modules/competition-header/models/index.mjs +0 -2
  41. package/esm2020/lib/modules/competition-header/services/competition-header.service.mjs +0 -40
  42. package/esm2020/lib/modules/competition-header/services/settings.service.mjs +0 -20
  43. package/esm2020/lib/modules/competition-header/store/competition-header.actions.mjs +0 -37
  44. package/esm2020/lib/modules/competition-header/store/competition-header.effects.mjs +0 -96
  45. package/esm2020/lib/modules/competition-header/store/competition-header.reducers.mjs +0 -31
  46. package/esm2020/lib/modules/competition-header/store/competition-header.selector.mjs +0 -14
  47. package/esm2020/lib/modules/competition-header/store/competition-header.state.mjs +0 -9
  48. package/esm2020/myrtex-mf-competition.mjs +0 -5
  49. package/esm2020/public-api.mjs +0 -6
  50. package/fesm2015/myrtex-mf-competition.mjs +0 -811
  51. package/fesm2015/myrtex-mf-competition.mjs.map +0 -1
  52. package/fesm2020/myrtex-mf-competition.mjs +0 -804
  53. package/fesm2020/myrtex-mf-competition.mjs.map +0 -1
  54. package/lib/modules/competition-header/competition-header.module.d.ts +0 -16
  55. package/lib/modules/competition-header/components/competition-header.component.d.ts +0 -89
  56. package/lib/modules/competition-header/constants.d.ts +0 -1
  57. package/lib/modules/competition-header/directives/competition-header-custom-buttons.directive.d.ts +0 -8
  58. package/lib/modules/competition-header/directives/index.d.ts +0 -1
  59. package/lib/modules/competition-header/models/competition-header-version.model.d.ts +0 -11
  60. package/lib/modules/competition-header/models/competition-rejection.model.d.ts +0 -5
  61. package/lib/modules/competition-header/models/competition-version.model.d.ts +0 -11
  62. package/lib/modules/competition-header/services/competition-header.service.d.ts +0 -20
  63. package/lib/modules/competition-header/services/settings.service.d.ts +0 -14
  64. package/lib/modules/competition-header/store/competition-header.actions.d.ts +0 -78
  65. package/lib/modules/competition-header/store/competition-header.effects.d.ts +0 -42
  66. package/lib/modules/competition-header/store/competition-header.reducers.d.ts +0 -3
  67. package/lib/modules/competition-header/store/competition-header.selector.d.ts +0 -7
  68. package/lib/modules/competition-header/store/competition-header.state.d.ts +0 -12
  69. package/myrtex-mf-competition.d.ts +0 -5
  70. /package/{lib/modules/competition-header/models/index.d.ts → src/lib/modules/competition-header/models/index.ts} +0 -0
@@ -1,495 +0,0 @@
1
- import { Component, ContentChild, EventEmitter, Input, Output } from '@angular/core';
2
- import { select } from '@ngrx/store';
3
- import { CompetitionModeEnum, CompetitionStatusEnum, CompetitionStatusEnumLabel, DialogColor, DialogType, UnSubscriber, selectCompetitionConfig, selectCompetitionLabel, CancelCompetitionTypeEnum, CompetitionVersionStatusEnum, CompetitionVersionStatusEnumLabel, CompetitionVersionStatusGrouppingLabel, CompetitionTypeEnum } from 'myrtex-mf-ui-composite';
4
- import { activateCompetition, cancelCompetition, cancelCompetitionWithValidation, competitionVersionChangeStatus, completeCompetition, createCompetitionVersion, deleteCompetitionVersion, loadCompetitionHeader, pauseCompetition, selectCompetitionVersion } from '../store/competition-header.actions';
5
- import { selectActivityId, selectCompetitionSelectedVersionId, selectCompetitionStatus, selectCompetitionType, selectCompetitionVersions, selectManualVersionStatusChanged } from '../store/competition-header.selector';
6
- import { CompetitionHeaderCustomButtonsDirective } from '../directives/competition-header-custom-buttons.directive';
7
- import * as i0 from "@angular/core";
8
- import * as i1 from "myrtex-mf-signer";
9
- import * as i2 from "@ngrx/store";
10
- import * as i3 from "myrtex-mf-ui-composite";
11
- import * as i4 from "../services/settings.service";
12
- import * as i5 from "@ng-select/ng-select";
13
- import * as i6 from "myrta-ui";
14
- import * as i7 from "@angular/common";
15
- import * as i8 from "@angular/forms";
16
- export class CompetitionHeaderComponent extends UnSubscriber {
17
- constructor(signService, store, alertService, settingsService) {
18
- super();
19
- this.signService = signService;
20
- this.store = store;
21
- this.alertService = alertService;
22
- this.settingsService = settingsService;
23
- this.canChangeStatus = true;
24
- this.canCreateVersionOnActivityPeriod = true;
25
- this.canValidateVersionOnActivityPeriod = true;
26
- this.canActivateVersionOnActivityPeriod = true;
27
- this.validateVersionAction = undefined;
28
- this.validateManagementAccess = undefined;
29
- this.validatePiblicationAccess = undefined;
30
- this.selectedCompetitionVersionInfo = new EventEmitter();
31
- this.versions = [];
32
- this.selectedVersion = '';
33
- this.competitionStatusEnum = CompetitionStatusEnum;
34
- this.cancelCompetitionTypeEnum = CancelCompetitionTypeEnum;
35
- this.competitionVersionStatusEnum = CompetitionVersionStatusEnum;
36
- this.competitionLabel = '';
37
- this.showCancelCompetitionButton = false;
38
- this.cancelCompetitionButtonLabel = 'Отменить отбор';
39
- this.showCompleteCompetitionButton = false;
40
- this.restoreButtonName = 'Возобновить';
41
- }
42
- get competitionAggregateStatusEnumLabel() {
43
- if (this.versions && this.versions.length == 1 && this.selected
44
- && this.selected.status !== CompetitionVersionStatusEnum.Active) {
45
- return CompetitionVersionStatusEnumLabel[this.selected.status];
46
- }
47
- return this.competition ? CompetitionStatusEnumLabel[this.competition.status] : '';
48
- }
49
- get competitionAggregateStatusCssClass() {
50
- if (this.versions && this.versions.length == 1 && this.selected
51
- && (this.competition?.status || CompetitionStatusEnum.New) <= CompetitionStatusEnum.Active) {
52
- return {
53
- '': this.selected?.status !== CompetitionVersionStatusEnum.Active,
54
- 'color-green': this.selected?.status === CompetitionVersionStatusEnum.Active,
55
- };
56
- }
57
- return {
58
- '': this.competition?.status === CompetitionStatusEnum.New
59
- || this.competition?.status !== CompetitionStatusEnum.Completed,
60
- 'color-green': this.competition?.status === CompetitionStatusEnum.Active,
61
- 'color-orange': this.competition?.status === CompetitionStatusEnum.Staying,
62
- 'color-red': this.competition?.status === CompetitionStatusEnum.Canceled
63
- };
64
- }
65
- get canCreateVersion() {
66
- if (!this.canCreateVersionOnActivityPeriod) {
67
- return false;
68
- }
69
- if (this.validateManagementAccess === undefined) {
70
- return this.isLastVersion && this.selected?.status === CompetitionVersionStatusEnum.Active &&
71
- this.competition !== undefined && this.competition.mode > CompetitionModeEnum.Base
72
- && (this.competition.status === CompetitionStatusEnum.Active ||
73
- this.competition.status === CompetitionStatusEnum.Staying);
74
- }
75
- else {
76
- return this.isLastVersion && this.selected?.status === CompetitionVersionStatusEnum.Active &&
77
- this.competition !== undefined && this.competition.mode > CompetitionModeEnum.Base
78
- && (this.competition.status === CompetitionStatusEnum.Active ||
79
- this.competition.status === CompetitionStatusEnum.Staying) &&
80
- this.validateManagementAccess();
81
- }
82
- }
83
- get canDeleteVersion() {
84
- if (this.validateManagementAccess === undefined) {
85
- return this.selected?.status === this.competitionVersionStatusEnum.Draft
86
- && this.versions
87
- && this.versions.length > 1;
88
- }
89
- else {
90
- return this.selected?.status === this.competitionVersionStatusEnum.Draft
91
- && this.versions
92
- && this.versions.length > 1
93
- && this.validateManagementAccess();
94
- }
95
- }
96
- get canActivateVersion() {
97
- if (!this.canActivateVersionOnActivityPeriod) {
98
- return false;
99
- }
100
- if (this.validatePiblicationAccess === undefined) {
101
- return (this.selected?.status === CompetitionVersionStatusEnum.Draft &&
102
- this.competition?.mode !== CompetitionModeEnum.VersionedExtended) ||
103
- ((this.selected?.status === CompetitionVersionStatusEnum.Confirmed ||
104
- this.selected?.status === CompetitionVersionStatusEnum.Validation) &&
105
- this.competition?.mode === CompetitionModeEnum.VersionedExtended);
106
- }
107
- else {
108
- return (this.selected?.status === CompetitionVersionStatusEnum.Draft &&
109
- this.competition?.mode !== CompetitionModeEnum.VersionedExtended) ||
110
- ((this.selected?.status === CompetitionVersionStatusEnum.Confirmed ||
111
- this.selected?.status === CompetitionVersionStatusEnum.Validation) &&
112
- this.competition?.mode === CompetitionModeEnum.VersionedExtended) &&
113
- this.validatePiblicationAccess();
114
- }
115
- }
116
- get activateVersionDisabled() {
117
- if (this.validatePiblicationAccess === undefined) {
118
- return (!this.canChangeStatus ||
119
- ((this.selected?.status !== CompetitionVersionStatusEnum.Draft &&
120
- this.competition?.mode !== CompetitionModeEnum.VersionedExtended) ||
121
- (this.selected?.status !== CompetitionVersionStatusEnum.Confirmed &&
122
- this.competition?.mode === CompetitionModeEnum.VersionedExtended)));
123
- }
124
- else {
125
- return (!this.canChangeStatus ||
126
- ((this.selected?.status !== CompetitionVersionStatusEnum.Draft &&
127
- this.competition?.mode !== CompetitionModeEnum.VersionedExtended) ||
128
- (this.selected?.status !== CompetitionVersionStatusEnum.Confirmed &&
129
- this.competition?.mode === CompetitionModeEnum.VersionedExtended))) &&
130
- this.validatePiblicationAccess();
131
- }
132
- }
133
- get validateVersionDisabled() {
134
- if (this.validatePiblicationAccess === undefined) {
135
- return !this.canChangeStatus;
136
- }
137
- else {
138
- return !this.canChangeStatus && !!this.validatePiblicationAccess();
139
- }
140
- }
141
- get createVersionDisabled() {
142
- if (this.validateManagementAccess === undefined) {
143
- return !this.canChangeStatus;
144
- }
145
- else {
146
- const validationRes = this.validateManagementAccess();
147
- return !this.canChangeStatus && validationRes;
148
- }
149
- }
150
- get backToEditDisabled() {
151
- if (this.validateManagementAccess === undefined) {
152
- return !this.canChangeStatus;
153
- }
154
- else {
155
- const validationRes = this.validateManagementAccess();
156
- return !this.canChangeStatus && validationRes;
157
- }
158
- }
159
- get canValidateVersion() {
160
- if (!this.canValidateVersionOnActivityPeriod) {
161
- return false;
162
- }
163
- if (this.validatePiblicationAccess === undefined) {
164
- return this.selected?.status === CompetitionVersionStatusEnum.Draft &&
165
- this.competition?.mode === CompetitionModeEnum.VersionedExtended &&
166
- this.competition?.status !== CompetitionStatusEnum.Canceled;
167
- }
168
- else {
169
- return this.selected?.status === CompetitionVersionStatusEnum.Draft &&
170
- this.competition?.mode === CompetitionModeEnum.VersionedExtended &&
171
- this.validatePiblicationAccess() &&
172
- this.competition?.status !== CompetitionStatusEnum.Canceled;
173
- }
174
- }
175
- get isLastVersion() {
176
- if (this.versions?.length > 0) {
177
- const m = Math.max(...this.versions.map(x => x.num));
178
- return m === this.selected?.num;
179
- }
180
- return false;
181
- }
182
- get showRejectionReason() {
183
- return !!this.selected?.rejectionReason &&
184
- (this.selected?.status === CompetitionVersionStatusEnum.Draft
185
- || this.selected?.status === CompetitionVersionStatusEnum.Rejected);
186
- }
187
- get versionStatusClass() {
188
- return {
189
- '': this.selected?.status !== CompetitionVersionStatusEnum.Active,
190
- 'color-green': this.selected?.status === CompetitionVersionStatusEnum.Active
191
- };
192
- }
193
- /** Контекст для кастомных кнопок, может расширяться */
194
- get customButtonsTemplateContext() {
195
- return {
196
- activityId: this._activityId,
197
- competitionId: this.competition?.id,
198
- competitionVersionId: this.selected?.id
199
- };
200
- }
201
- get canReturnToEdit() {
202
- if (this.validateManagementAccess === undefined) {
203
- return this.selected?.status === CompetitionVersionStatusEnum.Rejected;
204
- }
205
- else {
206
- return this.selected?.status === CompetitionVersionStatusEnum.Rejected && this.validateManagementAccess();
207
- }
208
- }
209
- get canManageCompetition() {
210
- if (this.validateManagementAccess === undefined) {
211
- return false;
212
- }
213
- else {
214
- return this.validateManagementAccess() &&
215
- this.competition?.status != this.competitionStatusEnum.New &&
216
- this.competition?.status != this.competitionStatusEnum.Completed &&
217
- this.competition?.status != this.competitionStatusEnum.NotPlace;
218
- }
219
- }
220
- get showEbLink() {
221
- return this.competition != undefined &&
222
- this.versions.some(x => x.status != CompetitionVersionStatusEnum.Draft);
223
- }
224
- get canCompleteCompetition() {
225
- return this.competition != undefined &&
226
- (this.competition.status == CompetitionStatusEnum.Active ||
227
- this.competition.status == CompetitionStatusEnum.Staying)
228
- && this.showCompleteCompetitionButton;
229
- }
230
- get canCancelCompetition() {
231
- return this.competition != undefined &&
232
- (this.competition.status == CompetitionStatusEnum.Active ||
233
- this.competition.status == CompetitionStatusEnum.Staying ||
234
- this.competition.status == CompetitionStatusEnum.Canceled)
235
- && this.showCancelCompetitionButton;
236
- }
237
- ngOnInit() {
238
- this.store.dispatch(loadCompetitionHeader());
239
- this.appendSubscription(this.store.pipe(select(selectCompetitionVersions)).subscribe(result => {
240
- if (result) {
241
- this.versions = result;
242
- this.select();
243
- }
244
- }));
245
- this.appendSubscription(this.store.pipe(select(selectCompetitionSelectedVersionId)).subscribe(result => {
246
- if (result) {
247
- this.selectedVersion = result;
248
- this.select();
249
- }
250
- }));
251
- this.appendSubscription(this.store.pipe(select(selectCompetitionStatus)).subscribe(result => {
252
- if (result) {
253
- this.competition = result;
254
- }
255
- }));
256
- this.appendSubscription(this.store.pipe(select(selectCompetitionType)).subscribe(result => {
257
- if (result !== null && result !== undefined) {
258
- this._competitionType = result;
259
- }
260
- }));
261
- this.appendSubscription(this.store.pipe(select(selectCompetitionLabel)).subscribe(result => {
262
- this.competitionLabel = result;
263
- }));
264
- this.appendSubscription(this.store.pipe(select(selectActivityId)).subscribe(result => {
265
- this._activityId = result;
266
- }));
267
- this.appendSubscription(this.store.pipe(select(selectCompetitionConfig)).subscribe(result => {
268
- if (result) {
269
- this.competitionConfig = result;
270
- if (this.competitionConfig.cancelCompetitionLabel) {
271
- this.cancelCompetitionButtonLabel = this.competitionConfig.cancelCompetitionLabel;
272
- }
273
- if (this.competitionConfig.cancelCompetitionType
274
- && this.competitionConfig.cancelCompetitionType > this.cancelCompetitionTypeEnum.Disabled) {
275
- this.showCancelCompetitionButton = true;
276
- }
277
- this.showCompleteCompetitionButton = this.competitionConfig.showCompleteCompetitionButton;
278
- if (this.competitionConfig.restoreButtonName) {
279
- this.restoreButtonName = this.competitionConfig.restoreButtonName;
280
- }
281
- }
282
- }));
283
- this.appendSubscription(this.store.pipe(select(selectManualVersionStatusChanged)).subscribe(result => {
284
- // произошло ручное изменение статуса, толкаем дальше по таймауту
285
- if (result) {
286
- setTimeout(() => {
287
- const selectedItem = this.selected;
288
- if (selectedItem) {
289
- this.store.dispatch(competitionVersionChangeStatus({
290
- versionId: selectedItem.id,
291
- status: CompetitionVersionStatusEnum.Confirmed
292
- }));
293
- }
294
- }, 10000);
295
- }
296
- }));
297
- this.settingsService.getSelelectionEditEbLinks().subscribe(res => {
298
- this._ebLinksModel = res;
299
- });
300
- }
301
- ngOnDestroy() {
302
- super.ngOnDestroy();
303
- }
304
- getCompetitionVersionStatusEnumLabel(value) {
305
- return CompetitionVersionStatusEnumLabel[value];
306
- }
307
- getCompetitionVersionStatusGrouppingLabel(value) {
308
- return CompetitionVersionStatusGrouppingLabel[value];
309
- }
310
- createVersion() {
311
- this.alertService.showDialog({
312
- title: `Формирование изменений`,
313
- message: `${this.getWarningMessageHtml('Внимание! Формирование изменений приведет к созданию новой версии отбора')}
314
- <p>
315
- Вы действительно хотите сформировать изменения?
316
- </p>`,
317
- color: DialogColor.yellow,
318
- type: DialogType.confirm,
319
- okLabel: 'Подтвердить',
320
- cancelLabel: 'Отменить',
321
- okCallback: () => {
322
- this.store.dispatch(createCompetitionVersion());
323
- }
324
- });
325
- }
326
- activateVersion() {
327
- if (this.selected) {
328
- const selectedItem = this.selected;
329
- this.alertService.showDialog({
330
- title: `Публикация ${this.competitionLabel}а`,
331
- message: `${this.getWarningMessageHtml()}
332
- <p>
333
- Вы действительно хотите опубликовать ${this.competitionLabel}?
334
- </p>`,
335
- color: DialogColor.yellow,
336
- type: DialogType.confirm,
337
- okLabel: 'Подтвердить',
338
- cancelLabel: 'Отменить',
339
- okCallback: () => {
340
- this.store.dispatch(competitionVersionChangeStatus({
341
- versionId: selectedItem.id,
342
- status: CompetitionVersionStatusEnum.Active
343
- }));
344
- }
345
- });
346
- }
347
- }
348
- validateVersion() {
349
- if (this.selected) {
350
- const selectedItem = this.selected;
351
- if (this.validateVersionAction) {
352
- this.validateVersionAction(selectedItem.id, () => {
353
- this.signService.sign({
354
- title: 'Направление документа на согласование',
355
- okLabel: 'Отправить',
356
- cancelLabel: 'Отменить',
357
- pdfUrl: `/m-data/minfin/pdf-competition/${selectedItem.id}`,
358
- xmlUrl: `/m-data/minfin/xml-competition/${selectedItem.id}`,
359
- provider: 'empty'
360
- }, () => {
361
- this.store.dispatch(competitionVersionChangeStatus({
362
- versionId: selectedItem.id,
363
- status: CompetitionVersionStatusEnum.Validation
364
- }));
365
- }, () => {
366
- });
367
- });
368
- }
369
- }
370
- }
371
- removeVersion() {
372
- if (this.selected) {
373
- const selectedItem = this.selected;
374
- this.alertService.showDialog(`Удалить версию ${this.competitionLabel}а?`, `${this.getWarningMessageHtml()}
375
- <p>
376
- Вы действительно хотите удалить версию ${this.competitionLabel?.toLowerCase()}а?
377
- </p>`, DialogType.confirm, (ok) => {
378
- this.store.dispatch(deleteCompetitionVersion({ versionId: selectedItem.id }));
379
- }, undefined, null, undefined, undefined, DialogColor.red);
380
- }
381
- }
382
- restore() {
383
- this.alertService.showDialog(`Возобновить ${this.competitionLabel}?`, null, DialogType.confirm, (ok) => {
384
- this.store.dispatch(activateCompetition());
385
- });
386
- }
387
- pause() {
388
- this.alertService.showDialog(`Приостановить ${this.competitionLabel}?`, null, DialogType.confirm, (ok) => {
389
- this.store.dispatch(pauseCompetition());
390
- });
391
- }
392
- cancel() {
393
- if (this.competitionConfig && this.competitionConfig.cancelCompetitionType == this.cancelCompetitionTypeEnum.WithValidation) {
394
- if (this.selected) {
395
- const selectedItem = this.selected;
396
- this.store.dispatch(cancelCompetitionWithValidation({ versionId: selectedItem.id }));
397
- }
398
- }
399
- else {
400
- this.alertService.showDialog(`Отменить ${this.competitionLabel}?`, null, DialogType.confirm, (ok) => {
401
- this.store.dispatch(cancelCompetition());
402
- });
403
- }
404
- }
405
- complete() {
406
- this.alertService.showDialog(`Завершить ${this.competitionLabel}?`, null, DialogType.confirm, (ok) => {
407
- this.store.dispatch(completeCompetition());
408
- });
409
- }
410
- selectVersion(id) {
411
- this.store.dispatch(selectCompetitionVersion({ versionId: id }));
412
- }
413
- backToEdit() {
414
- this.alertService.showDialog(`редактирование текущей версии`, `Вы действительно хотите редактировать текущую версию ${this.competitionLabel.toLowerCase()}a`, DialogType.confirm, (ok) => {
415
- if (!!this.selected) {
416
- this.store.dispatch(competitionVersionChangeStatus({
417
- versionId: this.selected.id,
418
- status: CompetitionVersionStatusEnum.Draft
419
- }));
420
- }
421
- }, undefined, null, 'Подтвердить', undefined, DialogColor.yellow);
422
- }
423
- showRejection(model) {
424
- this.alertService.showDialog(`Причина отклонения`, ` <div class="modal-body__author">
425
- <span>${model.author}</span>
426
- <span>${model.createdDate}</span>
427
- </div>
428
- <p class="modal-body__text">${model.reason}</p>
429
- `, DialogType.confirm, undefined, undefined, null, undefined, '', DialogColor.yellow);
430
- }
431
- redirectToEb() {
432
- if (this.competition != undefined && this._competitionType != undefined && this._ebLinksModel != undefined) {
433
- let link = '';
434
- if (this._competitionType == CompetitionTypeEnum.SocialOrder) {
435
- link = `${this._ebLinksModel.socialOrder}/#SocialOrderAgreement`;
436
- }
437
- else if (this._competitionType == CompetitionTypeEnum.Region) {
438
- link = `${this._ebLinksModel.subsidy}/#AgreementSubsidyNonFederal`;
439
- }
440
- else {
441
- link = `${this._ebLinksModel.subsidy}/#AgreementSubsidyRegistry`;
442
- }
443
- window.open(link, '_blank');
444
- }
445
- }
446
- select() {
447
- if (this.versions && this.selectedVersion) {
448
- this.selected = this.versions.find(s => s.id === this.selectedVersion);
449
- this.selectedCompetitionVersionInfo.emit(this.selected);
450
- }
451
- }
452
- getWarningMessageHtml(customText = undefined) {
453
- if (!customText) {
454
- customText = 'Внимание! Данное действие нельзя отменить';
455
- }
456
- return `<div class="bg-news px-3 py-2 radius-4 my-3 d-flex">
457
- <div class="mr-3">
458
- <svg width="16" height="16" fill="none">
459
- <use href="#alert"></use>
460
- </svg>
461
- </div>
462
- <div class="small m-0 bold">
463
- <span class="color-orange">
464
- ${customText}
465
- </span>
466
- </div>
467
- </div>`;
468
- }
469
- }
470
- CompetitionHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: CompetitionHeaderComponent, deps: [{ token: i1.SignService }, { token: i2.Store }, { token: i3.AlertService }, { token: i4.SettingsService }], target: i0.ɵɵFactoryTarget.Component });
471
- CompetitionHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: CompetitionHeaderComponent, selector: "mrx-competition-header", inputs: { canChangeStatus: "canChangeStatus", canCreateVersionOnActivityPeriod: "canCreateVersionOnActivityPeriod", canValidateVersionOnActivityPeriod: "canValidateVersionOnActivityPeriod", canActivateVersionOnActivityPeriod: "canActivateVersionOnActivityPeriod", validateVersionAction: "validateVersionAction", validateManagementAccess: "validateManagementAccess", validatePiblicationAccess: "validatePiblicationAccess" }, outputs: { selectedCompetitionVersionInfo: "selectedCompetitionVersionInfo" }, queries: [{ propertyName: "customButtonsTemplate", first: true, predicate: CompetitionHeaderCustomButtonsDirective, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"info-banner\" *ngIf=\"selected\">\r\n <div class=\"info-banner-body\">\r\n <div class=\"info-banner-block\">\r\n <!-- \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <div class=\"info-banner-item wpx-160 mr-3\">\r\n <!-- \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0449\u043D\u043E\u0441\u0442\u0438, \u043B\u0438\u0431\u043E \"\u0421\u0443\u0431\u0441\u0438\u0434\u0438\u044F\" \u043B\u0438\u0431\u043E \"\u041E\u0442\u0431\u043E\u0440\" -->\r\n <span class=\"info-banner-item__title\" myCompetitionLabel>\r\n\r\n </span>\r\n <!-- \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <!-- \u043E\u0433\u0440\u0430\u043D\u0438\u0447\u0438\u0442\u044C \u0434\u043B\u0438\u043D\u0443 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u044F \u0432 44 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 -->\r\n <!-- \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u0432 \u0442\u0443\u043B\u0442\u0438\u043F \u043F\u043E\u043B\u043D\u043E\u0435 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <span class=\"info-banner-item__text text-normal\" myTooltip [tooltip]=\"selected.name\" [tooltipMaxWidth]=\"320\">\r\n {{ selected.shortName ? selected.shortName : '\u041D\u0435 \u0443\u043A\u0430\u0437\u0430\u043D' }}\r\n </span>\r\n </div>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <div class=\"info-banner-item wpx-110\">\r\n <span class=\"info-banner-item__title\">\r\n \u0421\u0442\u0430\u0442\u0443\u0441\r\n </span>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <!-- \u0434\u043B\u044F \u0437\u0430\u0434\u0430\u043D\u0438\u044F \u0446\u0432\u0435\u0442\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0442\u044C \u043A\u043B\u0430\u0441\u0441\u044B: \u043E\u0440\u0430\u043D\u0436\u0435\u0432\u044B\u0439 - \"color-orange\", \u0437\u0435\u043B\u0435\u043D\u044B\u0439 - \"color-green\" -->\r\n <span class=\"info-banner-item__text\" [ngClass]=\"competitionAggregateStatusCssClass\">\r\n {{ competitionAggregateStatusEnumLabel }}\r\n </span>\r\n </div>\r\n </div>\r\n <!-- \u0441\u0435\u043B\u0435\u043A\u0442 \u0441 \u0432\u044B\u0431\u043E\u0440\u043E\u043C \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <div class=\"info-banner-item info-banner-item_input wpx-260 mr-3\" *ngIf=\"versions && versions.length > 1\">\r\n <div class=\"inputbox inputbox-md mb-0\">\r\n <ng-select [items]=\"versions\" [ngModel]=\"selected.id\"\r\n (ngModelChange)=\"selectVersion($event)\"\r\n [clearable]=\"false\"\r\n bindValue=\"id\"\r\n bindLabel=\"name\"\r\n groupBy=\"status\"\r\n notFoundText=\"\u041D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E\">\r\n <ng-template ng-optgroup-tmp let-item=\"item\" let-index=\"index\">\r\n {{getCompetitionVersionStatusGrouppingLabel(item.status)}}\r\n </ng-template>\r\n <ng-template ng-option-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\r\n \u0412\u0435\u0440\u0441\u0438\u044F {{item.num}} \u043E\u0442 {{item.createdDate}}\r\n </ng-template>\r\n <ng-template ng-label-tmp let-item=\"item\">\r\n \u0412\u0435\u0440\u0441\u0438\u044F {{item.num}} \u043E\u0442 {{item.createdDate}}\r\n </ng-template>\r\n </ng-select>\r\n </div>\r\n </div>\r\n <!-- \u0441\u0442\u0430\u0442\u0430\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C, \u0435\u0441\u043B\u0438 \u043D\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u0439 -->\r\n <div class=\"info-banner-item wpx-110\" *ngIf=\"versions && versions.length > 1\">\r\n <span class=\"info-banner-item__title\">\r\n \u0421\u0442\u0430\u0442\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438\r\n </span>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <!-- \u0434\u043B\u044F \u0437\u0430\u0434\u0430\u043D\u0438\u044F \u0446\u0432\u0435\u0442\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0442\u044C \u043A\u043B\u0430\u0441\u0441\u044B: \u043E\u0440\u0430\u043D\u0436\u0435\u0432\u044B\u0439 - \"color-orange\", \u0437\u0435\u043B\u0435\u043D\u044B\u0439 - \"color-green\" -->\r\n <span class=\"info-banner-item__text\" *ngIf=\"selected\" [ngClass]=\"versionStatusClass\">\r\n {{ getCompetitionVersionStatusEnumLabel(selected.status) }}\r\n </span>\r\n </div>\r\n <!-- \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435, \u0432\u044B\u0437\u043E\u0432 \u043C\u043E\u0434\u0430\u043B\u043A\u0438, \u043F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u0435 \u043E\u0431 \u0432\u043D\u0435\u0441\u0435\u043D\u0438\u0438 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 -->\r\n <div class=\"info-banner-item\">\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C, \u0435\u0441\u043B\u0438 \u043D\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F -->\r\n <!-- \"\u043A\u043E\u043D\u0432\u0435\u0440\u0442\" -->\r\n <div class=\"info-banner-item__icon\" *ngIf=\"showRejectionReason\"\r\n myTooltip\r\n [tooltip]=\"'\u041F\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u043F\u0440\u0438\u0447\u0438\u043D\u0443 \u043E\u0442\u043A\u043B\u043E\u043D\u0435\u043D\u0438\u044F'\"\r\n (click)=\"showRejection(selected.rejectionReason)\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"3\" y=\"6\" width=\"18\" height=\"12\" rx=\"1\" stroke=\"#282828\" stroke-width=\"1.5\"/>\r\n <path d=\"M3 6.25L11.3356 13.6595C11.7145 13.9962 12.2855 13.9962 12.6644 13.6595L21 6.25\" stroke=\"#282828\" stroke-width=\"1.5\"/>\r\n <path d=\"M3 18L7.5 14L9.75 12M21 18L16.5 14L14.25 12\" stroke=\"#282828\" stroke-width=\"1.5\"/>\r\n </svg>\r\n </div>\r\n <!-- \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <div *ngIf=\"canDeleteVersion\" (click)=\"removeVersion()\" class=\"info-banner-item__icon\" myTooltip [tooltip]=\"'\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0432\u0435\u0440\u0441\u0438\u044E'\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M3 6H5H21\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M8 6V4C8 3.46957 8.21071 2.96086 8.58579 2.58579C8.96086 2.21071 9.46957 2 10 2H14C14.5304 2 15.0391 2.21071 15.4142 2.58579C15.7893 2.96086 16 3.46957 16 4V6M19 6V20C19 20.5304 18.7893 21.0391 18.4142 21.4142C18.0391 21.7893 17.5304 22 17 22H7C6.46957 22 5.96086 21.7893 5.58579 21.4142C5.21071 21.0391 5 20.5304 5 20V6H19Z\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M10 11V17\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M14 11V17\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n <!-- \u0432\u043E\u0441\u043A\u043B\u0438\u0446\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0439 \u0437\u043D\u0430\u043A -->\r\n <div *ngIf=\"!isLastVersion\" class=\"info-banner-item__icon\" myTooltip [tooltip]=\"'\u0412\u043D\u0435\u0441\u0435\u043D\u0438\u0435 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u043E \u043D\u0430 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438'\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M12.2302 18V17M12.2302 14V10M4.00298 21.25H20.4575C21.9971 21.25 22.9593 19.5833 22.1895 18.25L13.9623 4C13.1925 2.66667 11.268 2.66667 10.4982 4L2.27093 18.25C1.50113 19.5833 2.46338 21.25 4.00298 21.25Z\" stroke=\"#D57B1C\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n <div class=\"info-banner-control\">\r\n <div *ngIf=\"!!customButtonsTemplate\">\r\n <ng-container *ngTemplateOutlet=\"customButtonsTemplate.templateRef;context:customButtonsTemplateContext\"></ng-container>\r\n </div>\r\n <button class=\"btn btn-md green\"\r\n (click)=\"createVersion()\"\r\n *ngIf=\"canCreateVersion\"\r\n [disabled]=\"createVersionDisabled\">\r\n \u0421\u0444\u043E\u0440\u043C\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F\r\n </button>\r\n <button class=\"btn btn-md green\"\r\n (click)=\"activateVersion()\"\r\n *ngIf=\"canActivateVersion\"\r\n [disabled]=\"activateVersionDisabled\">\r\n \u041E\u043F\u0443\u0431\u043B\u0438\u043A\u043E\u0432\u0430\u0442\u044C\r\n </button>\r\n <button class=\"btn btn-md\"\r\n (click)=\"validateVersion()\"\r\n *ngIf=\"canValidateVersion\"\r\n [disabled]=\"validateVersionDisabled\">\r\n \u0421\u043E\u0433\u043B\u0430\u0441\u043E\u0432\u0430\u043D\u0438\u0435\r\n </button>\r\n <button *ngIf=\"canReturnToEdit\" class=\"btn btn-md\"\r\n (click)=\"backToEdit()\"\r\n [disabled]=\"backToEditDisabled\">\r\n \u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C\r\n </button>\r\n <!-- \u0443\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0441\u0442\u0430\u0442\u0443\u0441\u043E\u043C/\u043E\u0442\u0431\u043E\u0440\u043E\u043C -->\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u0435\u0441\u043B\u0438 \u043D\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F -->\r\n <div class=\"info-banner-control__action\"\r\n *ngIf=\"competition && showEbLink\">\r\n <mrx-dropdown [mainPlacement]=\"'bottom-end'\" [fallbackPlacements]=\"['top-end']\">\r\n <ng-template #dropdownToggle>\r\n <span class=\"mrx-icon icon-more-vertical icon-font-24\"></span>\r\n </ng-template>\r\n <ng-template #dropdownMenu>\r\n <button mrxHideAfterClick (click)=\"redirectToEb()\">\r\n <span class=\"mrx-icon icon-link icon-font-24 mr-2\"></span>\r\n <span>\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u043F\u043E\u0434\u0441\u0438\u0441\u0442\u0435\u043C\u0443 \u0431\u044E\u0434\u0436\u0435\u0442\u043D\u043E\u0433\u043E \u043F\u043B\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0413\u0418\u0418\u0421 \u00AB\u042D\u0411\u00BB</span>\r\n </button>\r\n\r\n <button mrxHideAfterClick (click)=\"pause()\"\r\n *ngIf=\"competition.status == competitionStatusEnum.Active && canManageCompetition\">\r\n <span class=\"mrx-icon icon-pause-filled icon-font-24 mr-2\"></span>\r\n <span>\u041F\u0440\u0438\u043E\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C</span>\r\n </button>\r\n\r\n <button mrxHideAfterClick (click)=\"restore()\"\r\n *ngIf=\"competition.status == competitionStatusEnum.Staying && canManageCompetition\">\r\n <span class=\"mrx-icon icon-play-filled icon-font-24 mr-2\"></span>\r\n <span>{{restoreButtonName}}</span>\r\n </button>\r\n\r\n <button mrxHideAfterClick \r\n *ngIf=\"canCompleteCompetition && canManageCompetition\"\r\n (click)=\"complete()\">\r\n <span class=\"mrx-icon icon-stop-filled icon-font-24 mr-2\"></span>\r\n <span>\u0417\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044C</span>\r\n </button>\r\n\r\n <button mrxHideAfterClick \r\n *ngIf=\"canCancelCompetition && canManageCompetition\"\r\n (click)=\"cancel()\">\r\n <span class=\"mrx-icon icon-close icon-font-24 mr-2\"></span>\r\n <span>{{cancelCompetitionButtonLabel}}</span>\r\n </button>\r\n </ng-template>\r\n </mrx-dropdown>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n", components: [{ type: i5.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { type: i6.DropdownComponent, selector: "mrx-dropdown", inputs: ["mainPlacement", "fallbackPlacements", "closeOnClick", "customClasses"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.CompetitionLabelDirective, selector: "[myCompetitionLabel]" }, { type: i3.TooltipDirective, selector: "[myTooltip]", inputs: ["tooltip", "tooltipPosition", "tooltipMinWidth", "tooltipMaxWidth", "tooltipInteractive", "tooltipActive"] }, { type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i5.NgOptgroupTemplateDirective, selector: "[ng-optgroup-tmp]" }, { type: i5.NgOptionTemplateDirective, selector: "[ng-option-tmp]" }, { type: i5.NgLabelTemplateDirective, selector: "[ng-label-tmp]" }, { type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i6.HideAfterClickDirective, selector: "[mrxHideAfterClick]" }] });
472
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: CompetitionHeaderComponent, decorators: [{
473
- type: Component,
474
- args: [{ selector: 'mrx-competition-header', template: "<div class=\"info-banner\" *ngIf=\"selected\">\r\n <div class=\"info-banner-body\">\r\n <div class=\"info-banner-block\">\r\n <!-- \u041D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <div class=\"info-banner-item wpx-160 mr-3\">\r\n <!-- \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0449\u043D\u043E\u0441\u0442\u0438, \u043B\u0438\u0431\u043E \"\u0421\u0443\u0431\u0441\u0438\u0434\u0438\u044F\" \u043B\u0438\u0431\u043E \"\u041E\u0442\u0431\u043E\u0440\" -->\r\n <span class=\"info-banner-item__title\" myCompetitionLabel>\r\n\r\n </span>\r\n <!-- \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <!-- \u043E\u0433\u0440\u0430\u043D\u0438\u0447\u0438\u0442\u044C \u0434\u043B\u0438\u043D\u0443 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u044F \u0432 44 \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 -->\r\n <!-- \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044C \u0432 \u0442\u0443\u043B\u0442\u0438\u043F \u043F\u043E\u043B\u043D\u043E\u0435 \u043D\u0430\u0437\u0432\u0430\u043D\u0438\u0435 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <span class=\"info-banner-item__text text-normal\" myTooltip [tooltip]=\"selected.name\" [tooltipMaxWidth]=\"320\">\r\n {{ selected.shortName ? selected.shortName : '\u041D\u0435 \u0443\u043A\u0430\u0437\u0430\u043D' }}\r\n </span>\r\n </div>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <div class=\"info-banner-item wpx-110\">\r\n <span class=\"info-banner-item__title\">\r\n \u0421\u0442\u0430\u0442\u0443\u0441\r\n </span>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0441\u0443\u0431\u0441\u0438\u0434\u0438\u0438/\u043E\u0442\u0431\u043E\u0440\u0430 -->\r\n <!-- \u0434\u043B\u044F \u0437\u0430\u0434\u0430\u043D\u0438\u044F \u0446\u0432\u0435\u0442\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0442\u044C \u043A\u043B\u0430\u0441\u0441\u044B: \u043E\u0440\u0430\u043D\u0436\u0435\u0432\u044B\u0439 - \"color-orange\", \u0437\u0435\u043B\u0435\u043D\u044B\u0439 - \"color-green\" -->\r\n <span class=\"info-banner-item__text\" [ngClass]=\"competitionAggregateStatusCssClass\">\r\n {{ competitionAggregateStatusEnumLabel }}\r\n </span>\r\n </div>\r\n </div>\r\n <!-- \u0441\u0435\u043B\u0435\u043A\u0442 \u0441 \u0432\u044B\u0431\u043E\u0440\u043E\u043C \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <div class=\"info-banner-item info-banner-item_input wpx-260 mr-3\" *ngIf=\"versions && versions.length > 1\">\r\n <div class=\"inputbox inputbox-md mb-0\">\r\n <ng-select [items]=\"versions\" [ngModel]=\"selected.id\"\r\n (ngModelChange)=\"selectVersion($event)\"\r\n [clearable]=\"false\"\r\n bindValue=\"id\"\r\n bindLabel=\"name\"\r\n groupBy=\"status\"\r\n notFoundText=\"\u041D\u0435 \u043D\u0430\u0439\u0434\u0435\u043D\u043E\">\r\n <ng-template ng-optgroup-tmp let-item=\"item\" let-index=\"index\">\r\n {{getCompetitionVersionStatusGrouppingLabel(item.status)}}\r\n </ng-template>\r\n <ng-template ng-option-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\r\n \u0412\u0435\u0440\u0441\u0438\u044F {{item.num}} \u043E\u0442 {{item.createdDate}}\r\n </ng-template>\r\n <ng-template ng-label-tmp let-item=\"item\">\r\n \u0412\u0435\u0440\u0441\u0438\u044F {{item.num}} \u043E\u0442 {{item.createdDate}}\r\n </ng-template>\r\n </ng-select>\r\n </div>\r\n </div>\r\n <!-- \u0441\u0442\u0430\u0442\u0430\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C, \u0435\u0441\u043B\u0438 \u043D\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u0439 -->\r\n <div class=\"info-banner-item wpx-110\" *ngIf=\"versions && versions.length > 1\">\r\n <span class=\"info-banner-item__title\">\r\n \u0421\u0442\u0430\u0442\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438\r\n </span>\r\n <!-- \u0441\u0442\u0430\u0442\u0443\u0441 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <!-- \u0434\u043B\u044F \u0437\u0430\u0434\u0430\u043D\u0438\u044F \u0446\u0432\u0435\u0442\u0430 \u0434\u043E\u0431\u0430\u0432\u043B\u044F\u0442\u044C \u043A\u043B\u0430\u0441\u0441\u044B: \u043E\u0440\u0430\u043D\u0436\u0435\u0432\u044B\u0439 - \"color-orange\", \u0437\u0435\u043B\u0435\u043D\u044B\u0439 - \"color-green\" -->\r\n <span class=\"info-banner-item__text\" *ngIf=\"selected\" [ngClass]=\"versionStatusClass\">\r\n {{ getCompetitionVersionStatusEnumLabel(selected.status) }}\r\n </span>\r\n </div>\r\n <!-- \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435, \u0432\u044B\u0437\u043E\u0432 \u043C\u043E\u0434\u0430\u043B\u043A\u0438, \u043F\u0440\u0435\u0434\u0443\u043F\u0440\u0435\u0436\u0434\u0435\u043D\u0438\u0435 \u043E\u0431 \u0432\u043D\u0435\u0441\u0435\u043D\u0438\u0438 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 -->\r\n <div class=\"info-banner-item\">\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C, \u0435\u0441\u043B\u0438 \u043D\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F -->\r\n <!-- \"\u043A\u043E\u043D\u0432\u0435\u0440\u0442\" -->\r\n <div class=\"info-banner-item__icon\" *ngIf=\"showRejectionReason\"\r\n myTooltip\r\n [tooltip]=\"'\u041F\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u043F\u0440\u0438\u0447\u0438\u043D\u0443 \u043E\u0442\u043A\u043B\u043E\u043D\u0435\u043D\u0438\u044F'\"\r\n (click)=\"showRejection(selected.rejectionReason)\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"3\" y=\"6\" width=\"18\" height=\"12\" rx=\"1\" stroke=\"#282828\" stroke-width=\"1.5\"/>\r\n <path d=\"M3 6.25L11.3356 13.6595C11.7145 13.9962 12.2855 13.9962 12.6644 13.6595L21 6.25\" stroke=\"#282828\" stroke-width=\"1.5\"/>\r\n <path d=\"M3 18L7.5 14L9.75 12M21 18L16.5 14L14.25 12\" stroke=\"#282828\" stroke-width=\"1.5\"/>\r\n </svg>\r\n </div>\r\n <!-- \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 -->\r\n <div *ngIf=\"canDeleteVersion\" (click)=\"removeVersion()\" class=\"info-banner-item__icon\" myTooltip [tooltip]=\"'\u0423\u0434\u0430\u043B\u0438\u0442\u044C \u0432\u0435\u0440\u0441\u0438\u044E'\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M3 6H5H21\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M8 6V4C8 3.46957 8.21071 2.96086 8.58579 2.58579C8.96086 2.21071 9.46957 2 10 2H14C14.5304 2 15.0391 2.21071 15.4142 2.58579C15.7893 2.96086 16 3.46957 16 4V6M19 6V20C19 20.5304 18.7893 21.0391 18.4142 21.4142C18.0391 21.7893 17.5304 22 17 22H7C6.46957 22 5.96086 21.7893 5.58579 21.4142C5.21071 21.0391 5 20.5304 5 20V6H19Z\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M10 11V17\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path d=\"M14 11V17\" stroke=\"#D14114\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n <!-- \u0432\u043E\u0441\u043A\u043B\u0438\u0446\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0439 \u0437\u043D\u0430\u043A -->\r\n <div *ngIf=\"!isLastVersion\" class=\"info-banner-item__icon\" myTooltip [tooltip]=\"'\u0412\u043D\u0435\u0441\u0435\u043D\u0438\u0435 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0439 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u043E \u043D\u0430 \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438'\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M12.2302 18V17M12.2302 14V10M4.00298 21.25H20.4575C21.9971 21.25 22.9593 19.5833 22.1895 18.25L13.9623 4C13.1925 2.66667 11.268 2.66667 10.4982 4L2.27093 18.25C1.50113 19.5833 2.46338 21.25 4.00298 21.25Z\" stroke=\"#D57B1C\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n <div class=\"info-banner-control\">\r\n <div *ngIf=\"!!customButtonsTemplate\">\r\n <ng-container *ngTemplateOutlet=\"customButtonsTemplate.templateRef;context:customButtonsTemplateContext\"></ng-container>\r\n </div>\r\n <button class=\"btn btn-md green\"\r\n (click)=\"createVersion()\"\r\n *ngIf=\"canCreateVersion\"\r\n [disabled]=\"createVersionDisabled\">\r\n \u0421\u0444\u043E\u0440\u043C\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u044F\r\n </button>\r\n <button class=\"btn btn-md green\"\r\n (click)=\"activateVersion()\"\r\n *ngIf=\"canActivateVersion\"\r\n [disabled]=\"activateVersionDisabled\">\r\n \u041E\u043F\u0443\u0431\u043B\u0438\u043A\u043E\u0432\u0430\u0442\u044C\r\n </button>\r\n <button class=\"btn btn-md\"\r\n (click)=\"validateVersion()\"\r\n *ngIf=\"canValidateVersion\"\r\n [disabled]=\"validateVersionDisabled\">\r\n \u0421\u043E\u0433\u043B\u0430\u0441\u043E\u0432\u0430\u043D\u0438\u0435\r\n </button>\r\n <button *ngIf=\"canReturnToEdit\" class=\"btn btn-md\"\r\n (click)=\"backToEdit()\"\r\n [disabled]=\"backToEditDisabled\">\r\n \u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u0442\u044C\r\n </button>\r\n <!-- \u0443\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u0435 \u0441\u0442\u0430\u0442\u0443\u0441\u043E\u043C/\u043E\u0442\u0431\u043E\u0440\u043E\u043C -->\r\n <!-- \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u044B\u0432\u0430\u0442\u044C \u0435\u0441\u043B\u0438 \u043D\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044F -->\r\n <div class=\"info-banner-control__action\"\r\n *ngIf=\"competition && showEbLink\">\r\n <mrx-dropdown [mainPlacement]=\"'bottom-end'\" [fallbackPlacements]=\"['top-end']\">\r\n <ng-template #dropdownToggle>\r\n <span class=\"mrx-icon icon-more-vertical icon-font-24\"></span>\r\n </ng-template>\r\n <ng-template #dropdownMenu>\r\n <button mrxHideAfterClick (click)=\"redirectToEb()\">\r\n <span class=\"mrx-icon icon-link icon-font-24 mr-2\"></span>\r\n <span>\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u043F\u043E\u0434\u0441\u0438\u0441\u0442\u0435\u043C\u0443 \u0431\u044E\u0434\u0436\u0435\u0442\u043D\u043E\u0433\u043E \u043F\u043B\u0430\u043D\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0413\u0418\u0418\u0421 \u00AB\u042D\u0411\u00BB</span>\r\n </button>\r\n\r\n <button mrxHideAfterClick (click)=\"pause()\"\r\n *ngIf=\"competition.status == competitionStatusEnum.Active && canManageCompetition\">\r\n <span class=\"mrx-icon icon-pause-filled icon-font-24 mr-2\"></span>\r\n <span>\u041F\u0440\u0438\u043E\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C</span>\r\n </button>\r\n\r\n <button mrxHideAfterClick (click)=\"restore()\"\r\n *ngIf=\"competition.status == competitionStatusEnum.Staying && canManageCompetition\">\r\n <span class=\"mrx-icon icon-play-filled icon-font-24 mr-2\"></span>\r\n <span>{{restoreButtonName}}</span>\r\n </button>\r\n\r\n <button mrxHideAfterClick \r\n *ngIf=\"canCompleteCompetition && canManageCompetition\"\r\n (click)=\"complete()\">\r\n <span class=\"mrx-icon icon-stop-filled icon-font-24 mr-2\"></span>\r\n <span>\u0417\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044C</span>\r\n </button>\r\n\r\n <button mrxHideAfterClick \r\n *ngIf=\"canCancelCompetition && canManageCompetition\"\r\n (click)=\"cancel()\">\r\n <span class=\"mrx-icon icon-close icon-font-24 mr-2\"></span>\r\n <span>{{cancelCompetitionButtonLabel}}</span>\r\n </button>\r\n </ng-template>\r\n </mrx-dropdown>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n" }]
475
- }], ctorParameters: function () { return [{ type: i1.SignService }, { type: i2.Store }, { type: i3.AlertService }, { type: i4.SettingsService }]; }, propDecorators: { customButtonsTemplate: [{
476
- type: ContentChild,
477
- args: [CompetitionHeaderCustomButtonsDirective]
478
- }], canChangeStatus: [{
479
- type: Input
480
- }], canCreateVersionOnActivityPeriod: [{
481
- type: Input
482
- }], canValidateVersionOnActivityPeriod: [{
483
- type: Input
484
- }], canActivateVersionOnActivityPeriod: [{
485
- type: Input
486
- }], validateVersionAction: [{
487
- type: Input
488
- }], validateManagementAccess: [{
489
- type: Input
490
- }], validatePiblicationAccess: [{
491
- type: Input
492
- }], selectedCompetitionVersionInfo: [{
493
- type: Output
494
- }] } });
495
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGV0aXRpb24taGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cnRleC1tZi1jb21wZXRpdGlvbi9zcmMvbGliL21vZHVsZXMvY29tcGV0aXRpb24taGVhZGVyL2NvbXBvbmVudHMvY29tcGV0aXRpb24taGVhZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cnRleC1tZi1jb21wZXRpdGlvbi9zcmMvbGliL21vZHVsZXMvY29tcGV0aXRpb24taGVhZGVyL2NvbXBvbmVudHMvY29tcGV0aXRpb24taGVhZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RyxPQUFPLEVBQUUsTUFBTSxFQUFTLE1BQU0sYUFBYSxDQUFDO0FBRTVDLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIscUJBQXFCLEVBQ3JCLDBCQUEwQixFQUMxQixXQUFXLEVBQ1gsVUFBVSxFQUVWLFlBQVksRUFDWix1QkFBdUIsRUFDdkIsc0JBQXNCLEVBRXRCLHlCQUF5QixFQUN6Qiw0QkFBNEIsRUFDNUIsaUNBQWlDLEVBQ2pDLHNDQUFzQyxFQUN0QyxtQkFBbUIsRUFDcEIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLGlCQUFpQixFQUNqQiwrQkFBK0IsRUFDL0IsOEJBQThCLEVBQzlCLG1CQUFtQixFQUNuQix3QkFBd0IsRUFDeEIsd0JBQXdCLEVBQ3hCLHFCQUFxQixFQUNyQixnQkFBZ0IsRUFDaEIsd0JBQXdCLEVBQ3pCLE1BQU0scUNBQXFDLENBQUM7QUFFN0MsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixrQ0FBa0MsRUFDbEMsdUJBQXVCLEVB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QUMxRDtRQUNELE9BQU87Ozs7Ozs7O29CQVFTLFVBQVU7OzttQkFHWCxDQUFDO0lBQ2xCLENBQUM7O3dIQTNnQlUsMEJBQTBCOzRHQUExQiwwQkFBMEIsd21CQUV2Qix1Q0FBdUMsdUVDN0R2RCxpbWNBb0tBOzRGRHpHYSwwQkFBMEI7a0JBSnRDLFNBQVM7K0JBQ0Usd0JBQXdCOytLQU0zQixxQkFBcUI7c0JBRDNCLFlBQVk7dUJBQUMsdUNBQXVDO2dCQUk5QyxlQUFlO3NCQURyQixLQUFLO2dCQUlDLGdDQUFnQztzQkFEdEMsS0FBSztnQkFJQyxrQ0FBa0M7c0JBRHhDLEtBQUs7Z0JBSUMsa0NBQWtDO3NCQUR4QyxLQUFLO2dCQUlDLHFCQUFxQjtzQkFEM0IsS0FBSztnQkFJQyx3QkFBd0I7c0JBRDlCLEtBQUs7Z0JBSUMseUJBQXlCO3NCQUQvQixLQUFLO2dCQUlDLDhCQUE4QjtzQkFEcEMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgQ29udGVudENoaWxkLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHNlbGVjdCwgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XHJcbmltcG9ydCB7IENvbXBldGl0aW9uVmVyc2lvbk1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL2NvbXBldGl0aW9uLXZlcnNpb24ubW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIENvbXBldGl0aW9uTW9kZUVudW0sXHJcbiAgQ29tcGV0aXRpb25TdGF0dXNFbnVtLFxyXG4gIENvbXBldGl0aW9uU3RhdHVzRW51bUxhYmVsLFxyXG4gIERpYWxvZ0NvbG9yLFxyXG4gIERpYWxvZ1R5cGUsXHJcbiAgQWxlcnRTZXJ2aWNlLFxyXG4gIFVuU3Vic2NyaWJlcixcclxuICBzZWxlY3RDb21wZXRpdGlvbkNvbmZpZyxcclxuICBzZWxlY3RDb21wZXRpdGlvbkxhYmVsLFxyXG4gIENvbXBldGl0aW9uQ29uZmlnTW9kZWwsXHJcbiAgQ2FuY2VsQ29tcGV0aXRpb25UeXBlRW51bSxcclxuICBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLFxyXG4gIENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW1MYWJlbCxcclxuICBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNHcm91cHBpbmdMYWJlbCxcclxuICBDb21wZXRpdGlvblR5cGVFbnVtXHJcbn0gZnJvbSAnbXlydGV4LW1mLXVpLWNvbXBvc2l0ZSc7XHJcbmltcG9ydCB7XHJcbiAgYWN0aXZhdGVDb21wZXRpdGlvbixcclxuICBjYW5jZWxDb21wZXRpdGlvbixcclxuICBjYW5jZWxDb21wZXRpdGlvbldpdGhWYWxpZGF0aW9uLFxyXG4gIGNvbXBldGl0aW9uVmVyc2lvbkNoYW5nZVN0YXR1cyxcclxuICBjb21wbGV0ZUNvbXBldGl0aW9uLFxyXG4gIGNyZWF0ZUNvbXBldGl0aW9uVmVyc2lvbixcclxuICBkZWxldGVDb21wZXRpdGlvblZlcnNpb24sXHJcbiAgbG9hZENvbXBldGl0aW9uSGVhZGVyLFxyXG4gIHBhdXNlQ29tcGV0aXRpb24sXHJcbiAgc2VsZWN0Q29tcGV0aXRpb25WZXJzaW9uXHJcbn0gZnJvbSAnLi4vc3RvcmUvY29tcGV0aXRpb24taGVhZGVyLmFjdGlvbnMnO1xyXG5pbXBvcnQgeyBDb21wZXRpdGlvblN0YXR1c01vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL2NvbXBldGl0aW9uLXN0YXR1cy5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgc2VsZWN0QWN0aXZpdHlJZCxcclxuICBzZWxlY3RDb21wZXRpdGlvblNlbGVjdGVkVmVyc2lvbklkLFxyXG4gIHNlbGVjdENvbXBldGl0aW9uU3RhdHVzLFxyXG4gIHNlbGVjdENvbXBldGl0aW9uVHlwZSxcclxuICBzZWxlY3RDb21wZXRpdGlvblZlcnNpb25zLFxyXG4gIHNlbGVjdE1hbnVhbFZlcnNpb25TdGF0dXNDaGFuZ2VkXHJcbn0gZnJvbSAnLi4vc3RvcmUvY29tcGV0aXRpb24taGVhZGVyLnNlbGVjdG9yJztcclxuaW1wb3J0IHsgQ29tcGV0aXRpb25IZWFkZXJDdXN0b21CdXR0b25zRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9jb21wZXRpdGlvbi1oZWFkZXItY3VzdG9tLWJ1dHRvbnMuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQ29tcGV0aXRpb25SZWplY3Rpb25Nb2RlbCB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IFNpZ25TZXJ2aWNlIH0gZnJvbSAnbXlydGV4LW1mLXNpZ25lcic7XHJcbmltcG9ydCB7IFNldHRpbmdzU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3NldHRpbmdzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFQkxpbmtzTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvZWItbGlua3MubW9kZWwnO1xyXG5cclxuZXhwb3J0IGRlY2xhcmUgdHlwZSB2YWxpZGF0ZVZlcnNpb25GbiA9ICgocGFyYW06IHN0cmluZywgb25WYWxpZGF0ZWQ6ICgpID0+IHZvaWQpID0+IHZvaWQpO1xyXG5cclxuZGVjbGFyZSBnbG9iYWwge1xyXG4gIGludGVyZmFjZSBXaW5kb3cge1xyXG4gICAgQ3J5cHRvSW50ZXJjZXB0b3I6IGFueTtcclxuICB9XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbXJ4LWNvbXBldGl0aW9uLWhlYWRlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbXBldGl0aW9uLWhlYWRlci5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIENvbXBldGl0aW9uSGVhZGVyQ29tcG9uZW50IGV4dGVuZHMgVW5TdWJzY3JpYmVyIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG5cclxuICBAQ29udGVudENoaWxkKENvbXBldGl0aW9uSGVhZGVyQ3VzdG9tQnV0dG9uc0RpcmVjdGl2ZSlcclxuICBwdWJsaWMgY3VzdG9tQnV0dG9uc1RlbXBsYXRlITogQ29tcGV0aXRpb25IZWFkZXJDdXN0b21CdXR0b25zRGlyZWN0aXZlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBjYW5DaGFuZ2VTdGF0dXMgPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBjYW5DcmVhdGVWZXJzaW9uT25BY3Rpdml0eVBlcmlvZCA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGNhblZhbGlkYXRlVmVyc2lvbk9uQWN0aXZpdHlQZXJpb2QgPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBjYW5BY3RpdmF0ZVZlcnNpb25PbkFjdGl2aXR5UGVyaW9kID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgdmFsaWRhdGVWZXJzaW9uQWN0aW9uOiB1bmRlZmluZWQgfCB2YWxpZGF0ZVZlcnNpb25GbiA9IHVuZGVmaW5lZDtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgdmFsaWRhdGVNYW5hZ2VtZW50QWNjZXNzOiAoKCgpID0+IGJvb2xlYW4pIHwgdW5kZWZpbmVkKSA9IHVuZGVmaW5lZDtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgdmFsaWRhdGVQaWJsaWNhdGlvbkFjY2VzczogKCgoKSA9PiBib29sZWFuKSB8IHVuZGVmaW5lZCkgPSB1bmRlZmluZWQ7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyBzZWxlY3RlZENvbXBldGl0aW9uVmVyc2lvbkluZm8gPSBuZXcgRXZlbnRFbWl0dGVyPENvbXBldGl0aW9uVmVyc2lvbk1vZGVsPigpO1xyXG5cclxuICBwdWJsaWMgY29tcGV0aXRpb246IENvbXBldGl0aW9uU3RhdHVzTW9kZWwgfCB1bmRlZmluZWQ7XHJcbiAgcHVibGljIHZlcnNpb25zOiBDb21wZXRpdGlvblZlcnNpb25Nb2RlbFtdID0gW107XHJcbiAgcHVibGljIHNlbGVjdGVkOiBDb21wZXRpdGlvblZlcnNpb25Nb2RlbCB8IHVuZGVmaW5lZDtcclxuICBwdWJsaWMgc2VsZWN0ZWRWZXJzaW9uID0gJyc7XHJcbiAgcHVibGljIGNvbXBldGl0aW9uU3RhdHVzRW51bSA9IENvbXBldGl0aW9uU3RhdHVzRW51bTtcclxuICBwdWJsaWMgY2FuY2VsQ29tcGV0aXRpb25UeXBlRW51bSA9IENhbmNlbENvbXBldGl0aW9uVHlwZUVudW07XHJcbiAgcHVibGljIGNvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0gPSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtO1xyXG4gIHB1YmxpYyBjb21wZXRpdGlvbkxhYmVsID0gJyc7XHJcbiAgcHVibGljIHNob3dDYW5jZWxDb21wZXRpdGlvbkJ1dHRvbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBjYW5jZWxDb21wZXRpdGlvbkJ1dHRvbkxhYmVsID0gJ9Ce0YLQvNC10L3QuNGC0Ywg0L7RgtCx0L7RgCc7XHJcbiAgcHVibGljIGNvbXBldGl0aW9uQ29uZmlnOiBDb21wZXRpdGlvbkNvbmZpZ01vZGVsIHwgdW5kZWZpbmVkO1xyXG4gIHB1YmxpYyBzaG93Q29tcGxldGVDb21wZXRpdGlvbkJ1dHRvbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyByZXN0b3JlQnV0dG9uTmFtZSA9ICfQktC+0LfQvtCx0L3QvtCy0LjRgtGMJztcclxuICBwcml2YXRlIF9zaWduQ2FsbGJhY2s6IGFueTtcclxuICBwcml2YXRlIF9hY3Rpdml0eUlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgcHJpdmF0ZSBfZWJMaW5rc01vZGVsOiBFQkxpbmtzTW9kZWwgfCB1bmRlZmluZWQ7XHJcbiAgcHJpdmF0ZSBfY29tcGV0aXRpb25UeXBlOiBDb21wZXRpdGlvblR5cGVFbnVtIHwgdW5kZWZpbmVkO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNpZ25TZXJ2aWNlOiBTaWduU2VydmljZSxcclxuICAgIHByaXZhdGUgc3RvcmU6IFN0b3JlLFxyXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcclxuICAgIHByaXZhdGUgc2V0dGluZ3NTZXJ2aWNlOiBTZXR0aW5nc1NlcnZpY2UpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGNvbXBldGl0aW9uQWdncmVnYXRlU3RhdHVzRW51bUxhYmVsKCkge1xyXG4gICAgaWYgKHRoaXMudmVyc2lvbnMgJiYgdGhpcy52ZXJzaW9ucy5sZW5ndGggPT0gMSAmJiB0aGlzLnNlbGVjdGVkXHJcbiAgICAgICYmIHRoaXMuc2VsZWN0ZWQuc3RhdHVzICE9PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkFjdGl2ZSkge1xyXG4gICAgICByZXR1cm4gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bUxhYmVsW3RoaXMuc2VsZWN0ZWQuc3RhdHVzXTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmNvbXBldGl0aW9uID8gQ29tcGV0aXRpb25TdGF0dXNFbnVtTGFiZWxbdGhpcy5jb21wZXRpdGlvbi5zdGF0dXNdIDogJyc7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGNvbXBldGl0aW9uQWdncmVnYXRlU3RhdHVzQ3NzQ2xhc3MoKTogYW55IHtcclxuICAgIGlmICh0aGlzLnZlcnNpb25zICYmIHRoaXMudmVyc2lvbnMubGVuZ3RoID09IDEgJiYgdGhpcy5zZWxlY3RlZFxyXG4gICAgICAmJiAodGhpcy5jb21wZXRpdGlvbj8uc3RhdHVzIHx8IENvbXBldGl0aW9uU3RhdHVzRW51bS5OZXcpIDw9IENvbXBldGl0aW9uU3RhdHVzRW51bS5BY3RpdmUpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICAnJzogdGhpcy5zZWxlY3RlZD8uc3RhdHVzICE9PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkFjdGl2ZSxcclxuICAgICAgICAnY29sb3ItZ3JlZW4nOiB0aGlzLnNlbGVjdGVkPy5zdGF0dXMgPT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uQWN0aXZlLFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAnJzogdGhpcy5jb21wZXRpdGlvbj8uc3RhdHVzID09PSBDb21wZXRpdGlvblN0YXR1c0VudW0uTmV3XHJcbiAgICAgICAgfHwgdGhpcy5jb21wZXRpdGlvbj8uc3RhdHVzICE9PSBDb21wZXRpdGlvblN0YXR1c0VudW0uQ29tcGxldGVkLFxyXG4gICAgICAnY29sb3ItZ3JlZW4nOiB0aGlzLmNvbXBldGl0aW9uPy5zdGF0dXMgPT09IENvbXBldGl0aW9uU3RhdHVzRW51bS5BY3RpdmUsXHJcbiAgICAgICdjb2xvci1vcmFuZ2UnOiB0aGlzLmNvbXBldGl0aW9uPy5zdGF0dXMgPT09IENvbXBldGl0aW9uU3RhdHVzRW51bS5TdGF5aW5nLFxyXG4gICAgICAnY29sb3ItcmVkJzogdGhpcy5jb21wZXRpdGlvbj8uc3RhdHVzID09PSBDb21wZXRpdGlvblN0YXR1c0VudW0uQ2FuY2VsZWRcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY2FuQ3JlYXRlVmVyc2lvbigpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5jYW5DcmVhdGVWZXJzaW9uT25BY3Rpdml0eVBlcmlvZCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy52YWxpZGF0ZU1hbmFnZW1lbnRBY2Nlc3MgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5pc0xhc3RWZXJzaW9uICYmIHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5BY3RpdmUgJiZcclxuICAgICAgICB0aGlzLmNvbXBldGl0aW9uICE9PSB1bmRlZmluZWQgJiYgdGhpcy5jb21wZXRpdGlvbi5tb2RlID4gQ29tcGV0aXRpb25Nb2RlRW51bS5CYXNlXHJcbiAgICAgICAgJiYgKFxyXG4gICAgICAgICAgdGhpcy5jb21wZXRpdGlvbi5zdGF0dXMgPT09IENvbXBldGl0aW9uU3RhdHVzRW51bS5BY3RpdmUgfHxcclxuICAgICAgICAgIHRoaXMuY29tcGV0aXRpb24uc3RhdHVzID09PSBDb21wZXRpdGlvblN0YXR1c0VudW0uU3RheWluZyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5pc0xhc3RWZXJzaW9uICYmIHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5BY3RpdmUgJiZcclxuICAgICAgICB0aGlzLmNvbXBldGl0aW9uICE9PSB1bmRlZmluZWQgJiYgdGhpcy5jb21wZXRpdGlvbi5tb2RlID4gQ29tcGV0aXRpb25Nb2RlRW51bS5CYXNlXHJcbiAgICAgICAgJiYgKFxyXG4gICAgICAgICAgdGhpcy5jb21wZXRpdGlvbi5zdGF0dXMgPT09IENvbXBldGl0aW9uU3RhdHVzRW51bS5BY3RpdmUgfHxcclxuICAgICAgICAgIHRoaXMuY29tcGV0aXRpb24uc3RhdHVzID09PSBDb21wZXRpdGlvblN0YXR1c0VudW0uU3RheWluZykgJiZcclxuICAgICAgICB0aGlzLnZhbGlkYXRlTWFuYWdlbWVudEFjY2VzcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjYW5EZWxldGVWZXJzaW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMudmFsaWRhdGVNYW5hZ2VtZW50QWNjZXNzID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gdGhpcy5jb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkRyYWZ0XHJcbiAgICAgICAgJiYgdGhpcy52ZXJzaW9uc1xyXG4gICAgICAgICYmIHRoaXMudmVyc2lvbnMubGVuZ3RoID4gMTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkPy5zdGF0dXMgPT09IHRoaXMuY29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5EcmFmdFxyXG4gICAgICAgICYmIHRoaXMudmVyc2lvbnNcclxuICAgICAgICAmJiB0aGlzLnZlcnNpb25zLmxlbmd0aCA+IDFcclxuICAgICAgICAmJiB0aGlzLnZhbGlkYXRlTWFuYWdlbWVudEFjY2VzcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjYW5BY3RpdmF0ZVZlcnNpb24oKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMuY2FuQWN0aXZhdGVWZXJzaW9uT25BY3Rpdml0eVBlcmlvZCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy52YWxpZGF0ZVBpYmxpY2F0aW9uQWNjZXNzID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuICh0aGlzLnNlbGVjdGVkPy5zdGF0dXMgPT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uRHJhZnQgJiZcclxuICAgICAgICAgIHRoaXMuY29tcGV0aXRpb24/Lm1vZGUgIT09IENvbXBldGl0aW9uTW9kZUVudW0uVmVyc2lvbmVkRXh0ZW5kZWQpIHx8XHJcbiAgICAgICAgKCh0aGlzLnNlbGVjdGVkPy5zdGF0dXMgPT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uQ29uZmlybWVkIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5WYWxpZGF0aW9uKSAmJlxyXG4gICAgICAgICAgdGhpcy5jb21wZXRpdGlvbj8ubW9kZSA9PT0gQ29tcGV0aXRpb25Nb2RlRW51bS5WZXJzaW9uZWRFeHRlbmRlZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gKHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5EcmFmdCAmJlxyXG4gICAgICAgICAgdGhpcy5jb21wZXRpdGlvbj8ubW9kZSAhPT0gQ29tcGV0aXRpb25Nb2RlRW51bS5WZXJzaW9uZWRFeHRlbmRlZCkgfHxcclxuICAgICAgICAoKHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5Db25maXJtZWQgfHxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZD8uc3RhdHVzID09PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLlZhbGlkYXRpb24pICYmXHJcbiAgICAgICAgICB0aGlzLmNvbXBldGl0aW9uPy5tb2RlID09PSBDb21wZXRpdGlvbk1vZGVFbnVtLlZlcnNpb25lZEV4dGVuZGVkKSAmJlxyXG4gICAgICAgIHRoaXMudmFsaWRhdGVQaWJsaWNhdGlvbkFjY2VzcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBhY3RpdmF0ZVZlcnNpb25EaXNhYmxlZCgpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcclxuICAgIGlmICh0aGlzLnZhbGlkYXRlUGlibGljYXRpb25BY2Nlc3MgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gKCF0aGlzLmNhbkNoYW5nZVN0YXR1cyB8fFxyXG4gICAgICAgICgodGhpcy5zZWxlY3RlZD8uc3RhdHVzICE9PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkRyYWZ0ICYmXHJcbiAgICAgICAgICAgIHRoaXMuY29tcGV0aXRpb24/Lm1vZGUgIT09IENvbXBldGl0aW9uTW9kZUVudW0uVmVyc2lvbmVkRXh0ZW5kZWQpIHx8XHJcbiAgICAgICAgICAodGhpcy5zZWxlY3RlZD8uc3RhdHVzICE9PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkNvbmZpcm1lZCAmJlxyXG4gICAgICAgICAgICB0aGlzLmNvbXBldGl0aW9uPy5tb2RlID09PSBDb21wZXRpdGlvbk1vZGVFbnVtLlZlcnNpb25lZEV4dGVuZGVkKSkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICghdGhpcy5jYW5DaGFuZ2VTdGF0dXMgfHxcclxuICAgICAgICAgICgodGhpcy5zZWxlY3RlZD8uc3RhdHVzICE9PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkRyYWZ0ICYmXHJcbiAgICAgICAgICAgICAgdGhpcy5jb21wZXRpdGlvbj8ubW9kZSAhPT0gQ29tcGV0aXRpb25Nb2RlRW51bS5WZXJzaW9uZWRFeHRlbmRlZCkgfHxcclxuICAgICAgICAgICAgKHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyAhPT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5Db25maXJtZWQgJiZcclxuICAgICAgICAgICAgICB0aGlzLmNvbXBldGl0aW9uPy5tb2RlID09PSBDb21wZXRpdGlvbk1vZGVFbnVtLlZlcnNpb25lZEV4dGVuZGVkKSkpICYmXHJcbiAgICAgICAgdGhpcy52YWxpZGF0ZVBpYmxpY2F0aW9uQWNjZXNzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHZhbGlkYXRlVmVyc2lvbkRpc2FibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMudmFsaWRhdGVQaWJsaWNhdGlvbkFjY2VzcyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiAhdGhpcy5jYW5DaGFuZ2VTdGF0dXM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gIXRoaXMuY2FuQ2hhbmdlU3RhdHVzICYmICEhdGhpcy52YWxpZGF0ZVBpYmxpY2F0aW9uQWNjZXNzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGNyZWF0ZVZlcnNpb25EaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLnZhbGlkYXRlTWFuYWdlbWVudEFjY2VzcyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiAhdGhpcy5jYW5DaGFuZ2VTdGF0dXM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCB2YWxpZGF0aW9uUmVzID0gdGhpcy52YWxpZGF0ZU1hbmFnZW1lbnRBY2Nlc3MoKTtcclxuICAgICAgcmV0dXJuICF0aGlzLmNhbkNoYW5nZVN0YXR1cyAmJiB2YWxpZGF0aW9uUmVzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBiYWNrVG9FZGl0RGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy52YWxpZGF0ZU1hbmFnZW1lbnRBY2Nlc3MgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gIXRoaXMuY2FuQ2hhbmdlU3RhdHVzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgdmFsaWRhdGlvblJlcyA9IHRoaXMudmFsaWRhdGVNYW5hZ2VtZW50QWNjZXNzKCk7XHJcbiAgICAgIHJldHVybiAhdGhpcy5jYW5DaGFuZ2VTdGF0dXMgJiYgdmFsaWRhdGlvblJlcztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY2FuVmFsaWRhdGVWZXJzaW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLmNhblZhbGlkYXRlVmVyc2lvbk9uQWN0aXZpdHlQZXJpb2QpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudmFsaWRhdGVQaWJsaWNhdGlvbkFjY2VzcyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkPy5zdGF0dXMgPT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uRHJhZnQgJiZcclxuICAgICAgICB0aGlzLmNvbXBldGl0aW9uPy5tb2RlID09PSBDb21wZXRpdGlvbk1vZGVFbnVtLlZlcnNpb25lZEV4dGVuZGVkICYmXHJcbiAgICAgICAgdGhpcy5jb21wZXRpdGlvbj8uc3RhdHVzICE9PSBDb21wZXRpdGlvblN0YXR1c0VudW0uQ2FuY2VsZWQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZD8uc3RhdHVzID09PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkRyYWZ0ICYmXHJcbiAgICAgICAgdGhpcy5jb21wZXRpdGlvbj8ubW9kZSA9PT0gQ29tcGV0aXRpb25Nb2RlRW51bS5WZXJzaW9uZWRFeHRlbmRlZCAmJlxyXG4gICAgICAgIHRoaXMudmFsaWRhdGVQaWJsaWNhdGlvbkFjY2VzcygpICYmXHJcbiAgICAgICAgICB0aGlzLmNvbXBldGl0aW9uPy5zdGF0dXMgIT09IENvbXBldGl0aW9uU3RhdHVzRW51bS5DYW5jZWxlZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgaXNMYXN0VmVyc2lvbigpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLnZlcnNpb25zPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IG0gPSBNYXRoLm1heCguLi50aGlzLnZlcnNpb25zLm1hcCh4ID0+IHgubnVtKSk7XHJcbiAgICAgIHJldHVybiBtID09PSB0aGlzLnNlbGVjdGVkPy5udW07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHNob3dSZWplY3Rpb25SZWFzb24oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF0aGlzLnNlbGVjdGVkPy5yZWplY3Rpb25SZWFzb24gJiZcclxuICAgICAgKHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5EcmFmdFxyXG4gICAgICAgIHx8IHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5SZWplY3RlZClcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdmVyc2lvblN0YXR1c0NsYXNzKCk6IGFueSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAnJzogdGhpcy5zZWxlY3RlZD8uc3RhdHVzICE9PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkFjdGl2ZSxcclxuICAgICAgJ2NvbG9yLWdyZWVuJzogdGhpcy5zZWxlY3RlZD8uc3RhdHVzID09PSBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtLkFjdGl2ZVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqINCa0L7QvdGC0LXQutGB0YIg0LTQu9GPINC60LDRgdGC0L7QvNC90YvRhSDQutC90L7Qv9C+0LosINC80L7QttC10YIg0YDQsNGB0YjQuNGA0Y/RgtGM0YHRjyAqL1xyXG4gIHB1YmxpYyBnZXQgY3VzdG9tQnV0dG9uc1RlbXBsYXRlQ29udGV4dCgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgYWN0aXZpdHlJZDogdGhpcy5fYWN0aXZpdHlJZCxcclxuICAgICAgY29tcGV0aXRpb25JZDogdGhpcy5jb21wZXRpdGlvbj8uaWQsXHJcbiAgICAgIGNvbXBldGl0aW9uVmVyc2lvbklkOiB0aGlzLnNlbGVjdGVkPy5pZFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY2FuUmV0dXJuVG9FZGl0KCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMudmFsaWRhdGVNYW5hZ2VtZW50QWNjZXNzID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWQ/LnN0YXR1cyA9PT0gQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5SZWplY3RlZDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkPy5zdGF0dXMgPT09IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uUmVqZWN0ZWQgJiYgdGhpcy52YWxpZGF0ZU1hbmFnZW1lbnRBY2Nlc3MoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY2FuTWFuYWdlQ29tcGV0aXRpb24oKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy52YWxpZGF0ZU1hbmFnZW1lbnRBY2Nlc3MgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZU1hbmFnZW1lbnRBY2Nlc3MoKSAmJlxyXG4gICAgICAgIHRoaXMuY29tcGV0aXRpb24/LnN0YXR1cyAhPSB0aGlzLmNvbXBldGl0aW9uU3RhdHVzRW51bS5OZXcgJiZcclxuICAgICAgICB0aGlzLmNvbXBldGl0aW9uPy5zdGF0dXMgIT0gdGhpcy5jb21wZXRpdGlvblN0YXR1c0VudW0uQ29tcGxldGVkICYmXHJcbiAgICAgICAgdGhpcy5jb21wZXRpdGlvbj8uc3RhdHVzICE9IHRoaXMuY29tcGV0aXRpb25TdGF0dXNFbnVtLk5vdFBsYWNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBzaG93RWJMaW5rKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29tcGV0aXRpb24gIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgIHRoaXMudmVyc2lvbnMuc29tZSh4ID0+IHguc3RhdHVzICE9IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uRHJhZnQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjYW5Db21wbGV0ZUNvbXBldGl0aW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29tcGV0aXRpb24gIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICh0aGlzLmNvbXBldGl0aW9uLnN0YXR1cyA9PSBDb21wZXRpdGlvblN0YXR1c0VudW0uQWN0aXZlIHx8XHJcbiAgICAgIHRoaXMuY29tcGV0aXRpb24uc3RhdHVzID09IENvbXBldGl0aW9uU3RhdHVzRW51bS5TdGF5aW5nKVxyXG4gICAgICAgICAgJiYgdGhpcy5zaG93Q29tcGxldGVDb21wZXRpdGlvbkJ1dHRvbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY2FuQ2FuY2VsQ29tcGV0aXRpb24oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5jb21wZXRpdGlvbiAhPSB1bmRlZmluZWQgJiZcclxuICAgICAodGhpcy5jb21wZXRpdGlvbi5zdGF0dXMgPT0gQ29tcGV0aXRpb25TdGF0dXNFbnVtLkFjdGl2ZSB8fFxyXG4gICAgICB0aGlzLmNvbXBldGl0aW9uLnN0YXR1cyA9PSBDb21wZXRpdGlvblN0YXR1c0VudW0uU3RheWluZyB8fFxyXG4gICAgICB0aGlzLmNvbXBldGl0aW9uLnN0YXR1cyA9PSBDb21wZXRpdGlvblN0YXR1c0VudW0uQ2FuY2VsZWQpXHJcbiAgICAgICAgICAmJiB0aGlzLnNob3dDYW5jZWxDb21wZXRpdGlvbkJ1dHRvbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobG9hZENvbXBldGl0aW9uSGVhZGVyKCkpO1xyXG4gICAgdGhpcy5hcHBlbmRTdWJzY3JpcHRpb24odGhpcy5zdG9yZS5waXBlKHNlbGVjdChzZWxlY3RDb21wZXRpdGlvblZlcnNpb25zKSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICB0aGlzLnZlcnNpb25zID0gcmVzdWx0O1xyXG4gICAgICAgIHRoaXMuc2VsZWN0KCk7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuICAgIHRoaXMuYXBwZW5kU3Vic2NyaXB0aW9uKHRoaXMuc3RvcmUucGlwZShzZWxlY3Qoc2VsZWN0Q29tcGV0aXRpb25TZWxlY3RlZFZlcnNpb25JZCkpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZlcnNpb24gPSByZXN1bHQ7XHJcbiAgICAgICAgdGhpcy5zZWxlY3QoKTtcclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG5cclxuICAgIHRoaXMuYXBwZW5kU3Vic2NyaXB0aW9uKHRoaXMuc3RvcmUucGlwZShzZWxlY3Qoc2VsZWN0Q29tcGV0aXRpb25TdGF0dXMpKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgIHRoaXMuY29tcGV0aXRpb24gPSByZXN1bHQ7XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuXHJcbiAgICB0aGlzLmFwcGVuZFN1YnNjcmlwdGlvbih0aGlzLnN0b3JlLnBpcGUoc2VsZWN0KHNlbGVjdENvbXBldGl0aW9uVHlwZSkpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0ICE9PSBudWxsICYmIHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5fY29tcGV0aXRpb25UeXBlID0gcmVzdWx0O1xyXG4gICAgICB9XHJcbiAgICB9KSk7XHJcblxyXG4gICAgdGhpcy5hcHBlbmRTdWJzY3JpcHRpb24odGhpcy5zdG9yZS5waXBlKHNlbGVjdChzZWxlY3RDb21wZXRpdGlvbkxhYmVsKSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgIHRoaXMuY29tcGV0aXRpb25MYWJlbCA9IHJlc3VsdDtcclxuICAgIH0pKTtcclxuXHJcbiAgICB0aGlzLmFwcGVuZFN1YnNjcmlwdGlvbih0aGlzLnN0b3JlLnBpcGUoc2VsZWN0KHNlbGVjdEFjdGl2aXR5SWQpKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgdGhpcy5fYWN0aXZpdHlJZCA9IHJlc3VsdDtcclxuICAgIH0pKTtcclxuXHJcbiAgICB0aGlzLmFwcGVuZFN1YnNjcmlwdGlvbih0aGlzLnN0b3JlLnBpcGUoc2VsZWN0KHNlbGVjdENvbXBldGl0aW9uQ29uZmlnKSkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICB0aGlzLmNvbXBldGl0aW9uQ29uZmlnID0gcmVzdWx0O1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jb21wZXRpdGlvbkNvbmZpZy5jYW5jZWxDb21wZXRpdGlvbkxhYmVsKSB7XHJcbiAgICAgICAgICB0aGlzLmNhbmNlbENvbXBldGl0aW9uQnV0dG9uTGFiZWwgPSB0aGlzLmNvbXBldGl0aW9uQ29uZmlnLmNhbmNlbENvbXBldGl0aW9uTGFiZWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmNvbXBldGl0aW9uQ29uZmlnLmNhbmNlbENvbXBldGl0aW9uVHlwZVxyXG4gICAgICAgICAgJiYgdGhpcy5jb21wZXRpdGlvbkNvbmZpZy5jYW5jZWxDb21wZXRpdGlvblR5cGUgPiB0aGlzLmNhbmNlbENvbXBldGl0aW9uVHlwZUVudW0uRGlzYWJsZWQpIHtcclxuICAgICAgICAgIHRoaXMuc2hvd0NhbmNlbENvbXBldGl0aW9uQnV0dG9uID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zaG93Q29tcGxldGVDb21wZXRpdGlvbkJ1dHRvbiA9IHRoaXMuY29tcGV0aXRpb25Db25maWcuc2hvd0NvbXBsZXRlQ29tcGV0aXRpb25CdXR0b247XHJcbiAgICAgICAgaWYgKHRoaXMuY29tcGV0aXRpb25Db25maWcucmVzdG9yZUJ1dHRvbk5hbWUpIHtcclxuICAgICAgICAgIHRoaXMucmVzdG9yZUJ1dHRvbk5hbWUgPSB0aGlzLmNvbXBldGl0aW9uQ29uZmlnLnJlc3RvcmVCdXR0b25OYW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG5cclxuICAgIHRoaXMuYXBwZW5kU3Vic2NyaXB0aW9uKHRoaXMuc3RvcmUucGlwZShzZWxlY3Qoc2VsZWN0TWFudWFsVmVyc2lvblN0YXR1c0NoYW5nZWQpKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgLy8g0L/RgNC+0LjQt9C+0YjQu9C+INGA0YPRh9C90L7QtSDQuNC30LzQtdC90LXQvdC40LUg0YHRgtCw0YLRg9GB0LAsINGC0L7Qu9C60LDQtdC8INC00LDQu9GM0YjQtSDQv9C+INGC0LDQudC80LDRg9GC0YNcclxuICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gdGhpcy5zZWxlY3RlZDtcclxuICAgICAgICAgIGlmIChzZWxlY3RlZEl0ZW0pIHtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChjb21wZXRpdGlvblZlcnNpb25DaGFuZ2VTdGF0dXMoe1xyXG4gICAgICAgICAgICAgIHZlcnNpb25JZDogc2VsZWN0ZWRJdGVtLmlkLFxyXG4gICAgICAgICAgICAgIHN0YXR1czogQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5Db25maXJtZWRcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sIDEwMDAwKTtcclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG4gICAgdGhpcy5zZXR0aW5nc1NlcnZpY2UuZ2V0U2VsZWxlY3Rpb25FZGl0RWJMaW5rcygpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICB0aGlzLl9lYkxpbmtzTW9kZWwgPSByZXM7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Q29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bUxhYmVsKHZhbHVlOiBhbnkpIHtcclxuICAgIHJldHVybiBDb21wZXRpdGlvblZlcnNpb25TdGF0dXNFbnVtTGFiZWxbdmFsdWUgYXMgQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bV07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Q29tcGV0aXRpb25WZXJzaW9uU3RhdHVzR3JvdXBwaW5nTGFiZWwodmFsdWU6IGFueSkge1xyXG4gICAgcmV0dXJuIENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0dyb3VwcGluZ0xhYmVsW3ZhbHVlIGFzIENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW1dO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNyZWF0ZVZlcnNpb24oKTogdm9pZCB7XHJcbiAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93RGlhbG9nKHtcclxuICAgICAgdGl0bGU6IGDQpNC+0YDQvNC40YDQvtCy0LDQvdC40LUg0LjQt9C80LXQvdC10L3QuNC5YCxcclxuICAgICAgbWVzc2FnZTpcclxuICAgICAgICBgJHt0aGlzLmdldFdhcm5pbmdNZXNzYWdlSHRtbCgn0JLQvdC40LzQsNC90LjQtSEg0KTQvtGA0LzQuNGA0L7QstCw0L3QuNC1INC40LfQvNC10L3QtdC90LjQuSDQv9GA0LjQstC10LTQtdGCINC6INGB0L7Qt9C00LDQvdC40Y4g0L3QvtCy0L7QuSDQstC10YDRgdC40Lgg0L7RgtCx0L7RgNCwJyl9XHJcbiAgICAgICAgICAgIDxwPlxyXG4gICAgICAgICAgICAgINCS0Ysg0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90L4g0YXQvtGC0LjRgtC1INGB0YTQvtGA0LzQuNGA0L7QstCw0YLRjCDQuNC30LzQtdC90LXQvdC40Y8/XHJcbiAgICAgICAgICAgIDwvcD5gLFxyXG4gICAgICBjb2xvcjogRGlhbG9nQ29sb3IueWVsbG93LFxyXG4gICAgICB0eXBlOiBEaWFsb2dUeXBlLmNvbmZpcm0sXHJcbiAgICAgIG9rTGFiZWw6ICfQn9C+0LTRgtCy0LXRgNC00LjRgtGMJyxcclxuICAgICAgY2FuY2VsTGFiZWw6ICfQntGC0LzQtdC90LjRgtGMJyxcclxuICAgICAgb2tDYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goY3JlYXRlQ29tcGV0aXRpb25WZXJzaW9uKCkpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhY3RpdmF0ZVZlcnNpb24oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZCkge1xyXG4gICAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSB0aGlzLnNlbGVjdGVkO1xyXG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93RGlhbG9nKHtcclxuICAgICAgICB0aXRsZTogYNCf0YPQsdC70LjQutCw0YbQuNGPICR7dGhpcy5jb21wZXRpdGlvbkxhYmVsfdCwYCxcclxuICAgICAgICBtZXNzYWdlOiBgJHt0aGlzLmdldFdhcm5pbmdNZXNzYWdlSHRtbCgpfVxyXG4gICAgICAgICAgICA8cD5cclxuICAgICAgICAgICAgICDQktGLINC00LXQudGB0YLQstC40YLQtdC70YzQvdC+INGF0L7RgtC40YLQtSDQvtC/0YPQsdC70LjQutC+0LLQsNGC0YwgJHt0aGlzLmNvbXBldGl0aW9uTGFiZWx9P1xyXG4gICAgICAgICAgICA8L3A+YCxcclxuICAgICAgICBjb2xvcjogRGlhbG9nQ29sb3IueWVsbG93LFxyXG4gICAgICAgIHR5cGU6IERpYWxvZ1R5cGUuY29uZmlybSxcclxuICAgICAgICBva0xhYmVsOiAn0J/QvtC00YLQstC10YDQtNC40YLRjCcsXHJcbiAgICAgICAgY2FuY2VsTGFiZWw6ICfQntGC0LzQtdC90LjRgtGMJyxcclxuICAgICAgICBva0NhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKGNvbXBldGl0aW9uVmVyc2lvbkNoYW5nZVN0YXR1cyh7XHJcbiAgICAgICAgICAgIHZlcnNpb25JZDogc2VsZWN0ZWRJdGVtLmlkLFxyXG4gICAgICAgICAgICBzdGF0dXM6IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uQWN0aXZlXHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyB2YWxpZGF0ZVZlcnNpb24oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZCkge1xyXG4gICAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSB0aGlzLnNlbGVjdGVkO1xyXG5cclxuICAgICAgaWYgKHRoaXMudmFsaWRhdGVWZXJzaW9uQWN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0ZVZlcnNpb25BY3Rpb24oc2VsZWN0ZWRJdGVtLmlkLCAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnNpZ25TZXJ2aWNlLnNpZ24oe1xyXG4gICAgICAgICAgICB0aXRsZTogJ9Cd0LDQv9GA0LDQstC70LXQvdC40LUg0LTQvtC60YPQvNC10L3RgtCwINC90LAg0YHQvtCz0LvQsNGB0L7QstCw0L3QuNC1JyxcclxuICAgICAgICAgICAgb2tMYWJlbDogJ9Ce0YLQv9GA0LDQstC40YLRjCcsXHJcbiAgICAgICAgICAgIGNhbmNlbExhYmVsOiAn0J7RgtC80LXQvdC40YLRjCcsXHJcbiAgICAgICAgICAgIHBkZlVybDogYC9tLWRhdGEvbWluZmluL3BkZi1jb21wZXRpdGlvbi8ke3NlbGVjdGVkSXRlbS5pZH1gLFxyXG4gICAgICAgICAgICB4bWxVcmw6IGAvbS1kYXRhL21pbmZpbi94bWwtY29tcGV0aXRpb24vJHtzZWxlY3RlZEl0ZW0uaWR9YCxcclxuICAgICAgICAgICAgcHJvdmlkZXI6ICdlbXB0eSdcclxuICAgICAgICAgIH0sICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChjb21wZXRpdGlvblZlcnNpb25DaGFuZ2VTdGF0dXMoe1xyXG4gICAgICAgICAgICAgIHZlcnNpb25JZDogc2VsZWN0ZWRJdGVtLmlkLFxyXG4gICAgICAgICAgICAgIHN0YXR1czogQ29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bS5WYWxpZGF0aW9uXHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgIH0sICgpID0+IHtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW1vdmVWZXJzaW9uKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWQpIHtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gdGhpcy5zZWxlY3RlZDtcclxuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc2hvd0RpYWxvZyhg0KPQtNCw0LvQuNGC0Ywg0LLQtdGA0YHQuNGOICAke3RoaXMuY29tcGV0aXRpb25MYWJlbH3QsD9gLFxyXG4gICAgICAgIGAke3RoaXMuZ2V0V2FybmluZ01lc3NhZ2VIdG1sKCl9XHJcbiAgICAgIDxwPlxyXG4gICAgICAgINCS0Ysg0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90L4g0YXQvtGC0LjRgtC1INGD0LTQsNC70LjRgtGMINCy0LXRgNGB0LjRjiAke3RoaXMuY29tcGV0aXRpb25MYWJlbD8udG9Mb3dlckNhc2UoKX3QsD9cclxuICAgICAgPC9wPmAsXHJcbiAgICAgICAgRGlhbG9nVHlwZS5jb25maXJtLCAob2spID0+IHtcclxuICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goZGVsZXRlQ29tcGV0aXRpb25WZXJzaW9uKHt2ZXJzaW9uSWQ6IHNlbGVjdGVkSXRlbS5pZH0pKTtcclxuICAgICAgICB9LCB1bmRlZmluZWQsIG51bGwsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBEaWFsb2dDb2xvci5yZWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlc3RvcmUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93RGlhbG9nKGDQktC+0LfQvtCx0L3QvtCy0LjRgtGMICR7dGhpcy5jb21wZXRpdGlvbkxhYmVsfT9gLCBudWxsLCBEaWFsb2dUeXBlLmNvbmZpcm0sIChvaykgPT4ge1xyXG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKGFjdGl2YXRlQ29tcGV0aXRpb24oKSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBwYXVzZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNob3dEaWFsb2coYNCf0YDQuNC+0YHRgtCw0L3QvtCy0LjRgtGMICR7dGhpcy5jb21wZXRpdGlvbkxhYmVsfT9gLCBudWxsLCBEaWFsb2dUeXBlLmNvbmZpcm0sIChvaykgPT4ge1xyXG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKHBhdXNlQ29tcGV0aXRpb24oKSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjYW5jZWwoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jb21wZXRpdGlvbkNvbmZpZyAmJiB0aGlzLmNvbXBldGl0aW9uQ29uZmlnLmNhbmNlbENvbXBldGl0aW9uVHlwZSA9PSB0aGlzLmNhbmNlbENvbXBldGl0aW9uVHlwZUVudW0uV2l0aFZhbGlkYXRpb24pIHtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQpIHtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSB0aGlzLnNlbGVjdGVkO1xyXG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goY2FuY2VsQ29tcGV0aXRpb25XaXRoVmFsaWRhdGlvbih7dmVyc2lvbklkOiBzZWxlY3RlZEl0ZW0uaWR9KSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNob3dEaWFsb2coYNCe0YLQvNC10L3QuNGC0YwgJHt0aGlzLmNvbXBldGl0aW9uTGFiZWx9P2AsIG51bGwsIERpYWxvZ1R5cGUuY29uZmlybSwgKG9rKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChjYW5jZWxDb21wZXRpdGlvbigpKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY29tcGxldGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93RGlhbG9nKGDQl9Cw0LLQtdGA0YjQuNGC0YwgJHt0aGlzLmNvbXBldGl0aW9uTGFiZWx9P2AsIG51bGwsIERpYWxvZ1R5cGUuY29uZmlybSwgKG9rKSA9PiB7XHJcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goY29tcGxldGVDb21wZXRpdGlvbigpKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlbGVjdFZlcnNpb24oaWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChzZWxlY3RDb21wZXRpdGlvblZlcnNpb24oe3ZlcnNpb25JZDogaWR9KSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYmFja1RvRWRpdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNob3dEaWFsb2coYNGA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40LUg0YLQtdC60YPRidC10Lkg0LLQtdGA0YHQuNC4YCxcclxuICAgICAgYNCS0Ysg0LTQtdC50YHRgtCy0LjRgtC10LvRjNC90L4g0YXQvtGC0LjRgtC1INGA0LXQtNCw0LrRgtC40YDQvtCy0LDRgtGMINGC0LXQutGD0YnRg9GOINCy0LXRgNGB0LjRjiAke3RoaXMuY29tcGV0aXRpb25MYWJlbC50b0xvd2VyQ2FzZSgpfWFgLFxyXG4gICAgICBEaWFsb2dUeXBlLmNvbmZpcm0sXHJcbiAgICAgIChvaykgPT4ge1xyXG4gICAgICAgIGlmICghIXRoaXMuc2VsZWN0ZWQpIHtcclxuICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goY29tcGV0aXRpb25WZXJzaW9uQ2hhbmdlU3RhdHVzKHtcclxuICAgICAgICAgICAgdmVyc2lvbklkOiB0aGlzLnNlbGVjdGVkLmlkLFxyXG4gICAgICAgICAgICBzdGF0dXM6IENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0VudW0uRHJhZnRcclxuICAgICAgICAgIH0pKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIHVuZGVmaW5lZCwgbnVsbCwgJ9Cf0L7QtNGC0LLQtdGA0LTQuNGC0YwnLCB1bmRlZmluZWQsIERpYWxvZ0NvbG9yLnllbGxvdyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2hvd1JlamVjdGlvbihtb2RlbDogQ29tcGV0aXRpb25SZWplY3Rpb25Nb2RlbCk6IHZvaWQge1xyXG4gICAgdGhpcy5hbGVydFNlcnZpY2Uuc2hvd0RpYWxvZyhg0J/RgNC40YfQuNC90LAg0L7RgtC60LvQvtC90LXQvdC40Y9gLFxyXG4gICAgICBgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5X19hdXRob3JcIj5cclxuICAgICAgICAgIDxzcGFuPiR7bW9kZWwuYXV0aG9yfTwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuPiR7bW9kZWwuY3JlYXRlZERhdGV9PC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxwIGNsYXNzPVwibW9kYWwtYm9keV9fdGV4dFwiPiR7bW9kZWwucmVhc29ufTwvcD5cclxuICAgICAgYCwgRGlhbG9nVHlwZS5jb25maXJtLFxyXG4gICAgICB1bmRlZmluZWQsIHVuZGVmaW5lZCwgbnVsbCwgdW5kZWZpbmVkLCAnJywgRGlhbG9nQ29sb3IueWVsbG93KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZWRpcmVjdFRvRWIoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jb21wZXRpdGlvbiAhPSB1bmRlZmluZWQgJiYgdGhpcy5fY29tcGV0aXRpb25UeXBlICE9IHVuZGVmaW5lZCAmJiB0aGlzLl9lYkxpbmtzTW9kZWwgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGxldCBsaW5rID0gJyc7XHJcblxyXG4gICAgICBpZiAodGhpcy5fY29tcGV0aXRpb25UeXBlID09IENvbXBldGl0aW9uVHlwZUVudW0uU29jaWFsT3JkZXIpIHtcclxuICAgICAgICBsaW5rID0gYCR7dGhpcy5fZWJMaW5rc01vZGVsLnNvY2lhbE9yZGVyfS8jU29jaWFsT3JkZXJBZ3JlZW1lbnRgO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2NvbXBldGl0aW9uVHlwZSA9PSBDb21wZXRpdGlvblR5cGVFbnVtLlJlZ2lvbikge1xyXG4gICAgICAgIGxpbmsgPSBgJHt0aGlzLl9lYkxpbmtzTW9kZWwuc3Vic2lkeX0vI0FncmVlbWVudFN1YnNpZHlOb25GZWRlcmFsYDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsaW5rID0gYCR7dGhpcy5fZWJMaW5rc01vZGVsLnN1YnNpZHl9LyNBZ3JlZW1lbnRTdWJzaWR5UmVnaXN0cnlgO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB3aW5kb3cub3BlbihsaW5rLCAnX2JsYW5rJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlbGVjdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnZlcnNpb25zICYmIHRoaXMuc2VsZWN0ZWRWZXJzaW9uKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWQgPSB0aGlzLnZlcnNpb25zLmZpbmQocyA9PiBzLmlkID09PSB0aGlzLnNlbGVjdGVkVmVyc2lvbik7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb21wZXRpdGlvblZlcnNpb25JbmZvLmVtaXQodGhpcy5zZWxlY3RlZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFdhcm5pbmdNZXNzYWdlSHRtbChjdXN0b21UZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQpOiBzdHJpbmcge1xyXG4gICAgaWYgKCFjdXN0b21UZXh0KSB7XHJcbiAgICAgIGN1c3RvbVRleHQgPSAn0JLQvdC40LzQsNC90LjQtSEg0JTQsNC90L3QvtC1INC00LXQudGB0YLQstC40LUg0L3QtdC70YzQt9GPINC+0YLQvNC10L3QuNGC0YwnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwiYmctbmV3cyBweC0zIHB5LTIgcmFkaXVzLTQgbXktMyBkLWZsZXhcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItM1wiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8dXNlIGhyZWY9XCIjYWxlcnRcIj48L3VzZT5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbWFsbCBtLTAgYm9sZFwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvci1vcmFuZ2VcIj5cclxuICAgICAgICAgICAgICAgICAgJHtjdXN0b21UZXh0fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5gO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiaW5mby1iYW5uZXJcIiAqbmdJZj1cInNlbGVjdGVkXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaW5mby1iYW5uZXItYm9keVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLWJhbm5lci1ibG9ja1wiPlxyXG4gICAgICAgICAgICA8IS0tINCd0LDQt9Cy0LDQvdC40LUg0YHRg9Cx0YHQuNC00LjQuC/QvtGC0LHQvtGA0LAgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLWJhbm5lci1pdGVtIHdweC0xNjAgbXItM1wiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSDQstGB0YLQsNCy0LjRgtGMINC90LDQt9Cy0LDQvdC40LUg0YHRg9GJ0L3QvtGB0YLQuCwg0LvQuNCx0L4gXCLQodGD0LHRgdC40LTQuNGPXCIg0LvQuNCx0L4gXCLQntGC0LHQvtGAXCIgLS0+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImluZm8tYmFubmVyLWl0ZW1fX3RpdGxlXCIgbXlDb21wZXRpdGlvbkxhYmVsPlxyXG5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwhLS0g0L3QsNC30LLQsNC90LjQtSDRgdGD0LHRgdC40LTQuNC4L9C+0YLQsdC+0YDQsCAtLT5cclxuICAgICAgICAgICAgICAgIDwhLS0g0L7Qs9GA0LDQvdC40YfQuNGC0Ywg0LTQu9C40L3RgyDQvdCw0LfQstCw0L3QuNGPINCyIDQ0INGB0LjQvNCy0L7Qu9C+0LIgLS0+XHJcbiAgICAgICAgICAgICAgICA8IS0tINCy0YHRgtCw0LLQuNGC0Ywg0LIg0YLRg9C70YLQuNC/INC/0L7Qu9C90L7QtSDQvdCw0LfQstCw0L3QuNC1INGB0YPQsdGB0LjQtNC40Lgv0L7RgtCx0L7RgNCwIC0tPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbmZvLWJhbm5lci1pdGVtX190ZXh0IHRleHQtbm9ybWFsXCIgbXlUb29sdGlwIFt0b29sdGlwXT1cInNlbGVjdGVkLm5hbWVcIiBbdG9vbHRpcE1heFdpZHRoXT1cIjMyMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IHNlbGVjdGVkLnNob3J0TmFtZSA/IHNlbGVjdGVkLnNob3J0TmFtZSA6ICfQndC1INGD0LrQsNC30LDQvScgfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0g0YHRgtCw0YLRg9GBINGB0YPQsdGB0LjQtNC40Lgv0L7RgtCx0L7RgNCwIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1iYW5uZXItaXRlbSB3cHgtMTEwXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImluZm8tYmFubmVyLWl0ZW1fX3RpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAg0KHRgtCw0YLRg9GBXHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8IS0tINGB0YLQsNGC0YPRgSDRgdGD0LHRgdC40LTQuNC4L9C+0YLQsdC+0YDQsCAtLT5cclxuICAgICAgICAgICAgICAgIDwhLS0g0LTQu9GPINC30LDQtNCw0L3QuNGPINGG0LLQtdGC0LAg0LTQvtCx0LDQstC70Y/RgtGMINC60LvQsNGB0YHRizog0L7RgNCw0L3QttC10LLRi9C5IC0gXCJjb2xvci1vcmFuZ2VcIiwg0LfQtdC70LXQvdGL0LkgLSBcImNvbG9yLWdyZWVuXCIgLS0+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImluZm8tYmFubmVyLWl0ZW1fX3RleHRcIiBbbmdDbGFzc109XCJjb21wZXRpdGlvbkFnZ3JlZ2F0ZVN0YXR1c0Nzc0NsYXNzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgY29tcGV0aXRpb25BZ2dyZWdhdGVTdGF0dXNFbnVtTGFiZWwgfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSDRgdC10LvQtdC60YIg0YEg0LLRi9Cx0L7RgNC+0Lwg0LLQtdGA0YHQuNC4IC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLWJhbm5lci1pdGVtIGluZm8tYmFubmVyLWl0ZW1faW5wdXQgd3B4LTI2MCBtci0zXCIgKm5nSWY9XCJ2ZXJzaW9ucyAmJiB2ZXJzaW9ucy5sZW5ndGggPiAxXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dGJveCBpbnB1dGJveC1tZCBtYi0wXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctc2VsZWN0IFtpdGVtc109XCJ2ZXJzaW9uc1wiIFtuZ01vZGVsXT1cInNlbGVjdGVkLmlkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2VsZWN0VmVyc2lvbigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsZWFyYWJsZV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRWYWx1ZT1cImlkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZExhYmVsPVwibmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwQnk9XCJzdGF0dXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBub3RGb3VuZFRleHQ9XCLQndC1INC90LDQudC00LXQvdC+XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nLW9wdGdyb3VwLXRtcCBsZXQtaXRlbT1cIml0ZW1cIiBsZXQtaW5kZXg9XCJpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2dldENvbXBldGl0aW9uVmVyc2lvblN0YXR1c0dyb3VwcGluZ0xhYmVsKGl0ZW0uc3RhdHVzKX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmctb3B0aW9uLXRtcCBsZXQtaXRlbT1cIml0ZW1cIiBsZXQtaW5kZXg9XCJpbmRleFwiIGxldC1zZWFyY2g9XCJzZWFyY2hUZXJtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgINCS0LXRgNGB0LjRjyB7e2l0ZW0ubnVtfX0g0L7RgiB7e2l0ZW0uY3JlYXRlZERhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nLWxhYmVsLXRtcCBsZXQtaXRlbT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgINCS0LXRgNGB0LjRjyB7e2l0ZW0ubnVtfX0g0L7RgiB7e2l0ZW0uY3JlYXRlZERhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSDRgdGC0LDRgtCw0YPRgSDQstC10YDRgdC40LggLS0+XHJcbiAgICAgICAgPCEtLSDQvdC1INC/0L7QutCw0LfRi9Cy0LDRgtGMLCDQtdGB0LvQuCDQvdC10YIg0LLQtdGA0YHQuNC5IC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLWJhbm5lci1pdGVtIHdweC0xMTBcIiAqbmdJZj1cInZlcnNpb25zICYmIHZlcnNpb25zLmxlbmd0aCA+IDFcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbmZvLWJhbm5lci1pdGVtX190aXRsZVwiPlxyXG4gICAgICAgICAgICAgICAg0KHRgtCw0YLRg9GBINCy0LXRgNGB0LjQuFxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwhLS0g0YHRgtCw0YLRg9GBINCy0LXRgNGB0LjQuCAtLT5cclxuICAgICAgICAgICAgPCEtLSDQtNC70Y8g0LfQsNC00LDQvdC40Y8g0YbQstC10YLQsCDQtNC+0LHQsNCy0LvRj9GC0Ywg0LrQu9Cw0YHRgdGLOiDQvtGA0LDQvdC20LXQstGL0LkgLSBcImNvbG9yLW9yYW5nZVwiLCDQt9C10LvQtdC90YvQuSAtIFwiY29sb3ItZ3JlZW5cIiAtLT5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbmZvLWJhbm5lci1pdGVtX190ZXh0XCIgKm5nSWY9XCJzZWxlY3RlZFwiIFtuZ0NsYXNzXT1cInZlcnNpb25TdGF0dXNDbGFzc1wiPlxyXG4gICAgICAgICAgICAgICAge3sgZ2V0Q29tcGV0aXRpb25WZXJzaW9uU3RhdHVzRW51bUxhYmVsKHNlbGVjdGVkLnN0YXR1cykgfX1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS0g0YPQtNCw0LvQtdC90LjQtSwg0LLRi9C30L7QsiDQvNC+0LTQsNC70LrQuCwg0L/RgNC10LTRg9C/0YDQtdC20LTQtdC90LjQtSDQvtCxINCy0L3QtdGB0LXQvdC40Lgg0LjQt9C80LXQvdC10L3QuNC5IC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLWJhbm5lci1pdGVtXCI+XHJcbiAgICAgICAgICAgIDwhLS0g0L3QtSDQv9C+0LrQsNC30YvQstCw0YLRjCwg0LXRgdC70Lgg0L3QtSDRgtGA0LXQsdGD0LXRgtGB0Y8gLS0+XHJcbiAgICAgICAgICAgIDwhLS0gXCLQutC+0L3QstC10YDRglwiIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1iYW5uZXItaXRlbV9faWNvblwiICpuZ0lmPVwic2hvd1JlamVjdGlvblJlYXNvblwiXHJcbiAgICAgICAgICAgICAgICBteVRvb2x0aXBcclxuICAgICAgICAgICAgICAgIFt0b29sdGlwXT1cIifQn9C+0YHQvNC+0YLRgNC10YLRjCDQv9GA0LjRh9C40L3RgyDQvtGC0LrQu9C+0L3QtdC90LjRjydcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dSZWplY3Rpb24oc2VsZWN0ZWQucmVqZWN0aW9uUmVhc29uKVwiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjNcIiB5PVwiNlwiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxMlwiIHJ4PVwiMVwiIHN0cm9rZT1cIiMyODI4MjhcIiBzdHJva2Utd2lkdGg9XCIxLjVcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0zIDYuMjVMMTEuMzM1NiAxMy42NTk1QzExLjcxNDUgMTMuOTk2MiAxMi4yODU1IDEzLjk5NjIgMTIuNjY0NCAxMy42NTk1TDIxIDYuMjVcIiBzdHJva2U9XCIjMjgyODI4XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMyAxOEw3LjUgMTRMOS43NSAxMk0yMSAxOEwxNi41IDE0TDE0LjI1IDEyXCIgc3Ryb2tlPVwiIzI4MjgyOFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSDRg9C00LDQu9C10L3QuNC1INCy0LXRgNGB0LjQuCAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNhbkRlbGV0ZVZlcnNpb25cIiAoY2xpY2spPVwicmVtb3ZlVmVyc2lvbigpXCIgIGNsYXNzPVwiaW5mby1iYW5uZXItaXRlbV9faWNvblwiIG15VG9vbHRpcCBbdG9vbHRpcF09XCIn0KPQtNCw0LvQuNGC0Ywg0LLQtdGA0YHQuNGOJ1wiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0zIDZINUgyMVwiIHN0cm9rZT1cIiNEMTQxMTRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk04IDZWNEM4IDMuNDY5NTcgOC4yMTA3MSAyLjk2MDg2IDguNTg1NzkgMi41ODU3OUM4Ljk2MDg2IDIuMjEwNzEgOS40Njk1NyAyIDEwIDJIMTRDMTQuNTMwNCAyIDE1LjAzOTEgMi4yMTA3MSAxNS40MTQyIDIuNTg1NzlDMTUuNzg5MyAyLjk2MDg2IDE2IDMuNDY5NTcgMTYgNFY2TTE5IDZWMjBDMTkgMjAuNTMwNCAxOC43ODkzIDIxLjAzOTEgMTguNDE0MiAyMS40MTQyQzE4LjAzOTEgMjEuNzg5MyAxNy41MzA0IDIyIDE3IDIySDdDNi40Njk1NyAyMiA1Ljk2MDg2IDIxLjc4OTMgNS41ODU3OSAyMS40MTQyQzUuMjEwNzEgMjEuMDM5MSA1IDIwLjUzMDQgNSAyMFY2SDE5WlwiIHN0cm9rZT1cIiNEMTQxMTRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMCAxMVYxN1wiIHN0cm9rZT1cIiNEMTQxMTRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNCAxMVYxN1wiIHN0cm9rZT1cIiNEMTQxMTRcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0g0LLQvtGB0LrQu9C40YbQsNGC0LXQu9GM0L3Ri9C5INC30L3QsNC6IC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzTGFzdFZlcnNpb25cIiBjbGFzcz1cImluZm8tYmFubmVyLWl0ZW1fX2ljb25cIiBteVRvb2x0aXAgW3Rvb2x0aXBdPVwiJ9CS0L3QtdGB0LXQvdC40LUg0LjQt9C80LXQvdC10L3QuNC5INC00L7RgdGC0YPQv9C90L4g0L3QsCDQv9C+0YHQu9C10LTQvdC10Lkg0LLQtdGA0YHQuNC4J1wiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMi4yMzAyIDE4VjE3TTEyLjIzMDIgMTRWMTBNNC4wMDI5OCAyMS4yNUgyMC40NTc1QzIxLjk5NzEgMjEuMjUgMjIuOTU5MyAxOS41ODMzIDIyLjE4OTUgMTguMjVMMTMuOTYyMyA0QzEzLjE5MjUgMi42NjY2NyAxMS4yNjggMi42NjY2NyAxMC40OTgyIDRMMi4yNzA5MyAxOC4yNUMxLjUwMTEzIDE5LjU4MzMgMi40NjMzOCAyMS4yNSA0LjAwMjk4IDIxLjI1WlwiIHN0cm9rZT1cIiNENTdCMUNcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImluZm8tYmFubmVyLWNvbnRyb2xcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiEhY3VzdG9tQnV0dG9uc1RlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3VzdG9tQnV0dG9uc1RlbXBsYXRlLnRlbXBsYXRlUmVmO2NvbnRleHQ6Y3VzdG9tQnV0dG9uc1RlbXBsYXRlQ29udGV4dFwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tbWQgZ3JlZW5cIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjcmVhdGVWZXJzaW9uKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY2FuQ3JlYXRlVmVyc2lvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNyZWF0ZVZlcnNpb25EaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICAgICAg0KHRhNC+0YDQvNC40YDQvtCy0LDRgtGMINC40LfQvNC10L3QtdC90LjRj1xyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tbWQgZ3JlZW5cIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZVZlcnNpb24oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjYW5BY3RpdmF0ZVZlcnNpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhY3RpdmF0ZVZlcnNpb25EaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICAgICAg0J7Qv9GD0LHQu9C40LrQvtCy0LDRgtGMXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1tZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInZhbGlkYXRlVmVyc2lvbigpXCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNhblZhbGlkYXRlVmVyc2lvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInZhbGlkYXRlVmVyc2lvbkRpc2FibGVkXCI+XHJcbiAgICAgICAgICAgICAgICDQodC+0LPQu9Cw0YHQvtCy0LDQvdC40LVcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJjYW5SZXR1cm5Ub0VkaXRcIiBjbGFzcz1cImJ0biBidG4tbWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJiYWNrVG9FZGl0KClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJiYWNrVG9FZGl0RGlzYWJsZWRcIj5cclxuICAgICAgICAgICAgICAgINCg0LXQtNCw0LrRgtC40YDQvtCy0LDRgtGMXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8IS0tINGD0L/RgNCw0LLQu9C10L3QuNC1INGB0YLQsNGC0YPRgdC+0Lwv0L7RgtCx0L7RgNC+0LwgLS0+XHJcbiAgICAgICAgICAgIDwhLS0g0L3QtSDQv9C+0LrQsNC30YvQstCw0YLRjCDQtdGB0LvQuCDQvdC1INGC0YDQtdCx0YPQtdGC0YHRjyAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZm8tYmFubmVyLWNvbnRyb2xfX2FjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb21wZXRpdGlvbiAmJiBzaG93RWJMaW5rXCI+XHJcbiAgICAgICAgICAgICAgICA8bXJ4LWRyb3Bkb3duIFttYWluUGxhY2VtZW50XT1cIidib3R0b20tZW5kJ1wiIFtmYWxsYmFja1BsYWNlbWVudHNdPVwiWyd0b3AtZW5kJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Ryb3Bkb3duVG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1yeC1pY29uIGljb24tbW9yZS12ZXJ0aWNhbCBpY29uLWZvbnQtMjRcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Ryb3Bkb3duTWVudT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtcnhIaWRlQWZ0ZXJDbGljayAoY2xpY2spPVwicmVkaXJlY3RUb0ViKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXJ4LWljb24gaWNvbi1saW5rIGljb24tZm9udC0yNCBtci0yXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+0J/QtdGA0LXQudGC0Lgg0LIg0L/QvtC00YHQuNGB0YLQtdC80YMg0LHRjtC00LbQtdGC0L3QvtCz0L4g0L/Qu9Cw0L3QuNGA0L7QstCw0L3QuNGPINCT0JjQmNChIMKr0K3QkcK7PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbXJ4SGlkZUFmdGVyQ2xpY2sgKGNsaWNrKT1cInBhdXNlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb21wZXRpdGlvbi5zdGF0dXMgPT0gY29tcGV0aXRpb25TdGF0dXNFbnVtLkFjdGl2ZSAmJiBjYW5NYW5hZ2VDb21wZXRpdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcngtaWNvbiBpY29uLXBhdXNlLWZpbGxlZCBpY29uLWZvbnQtMjQgbXItMlwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPtCf0YDQuNC+0YHRgtCw0L3QvtCy0LjRgtGMPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbXJ4SGlkZUFmdGVyQ2xpY2sgKGNsaWNrKT1cInJlc3RvcmUoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbXBldGl0aW9uLnN0YXR1cyA9PSBjb21wZXRpdGlvblN0YXR1c0VudW0uU3RheWluZyAmJiBjYW5NYW5hZ2VDb21wZXRpdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcngtaWNvbiBpY29uLXBsYXktZmlsbGVkIGljb24tZm9udC0yNCBtci0yXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tyZXN0b3JlQnV0dG9uTmFtZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbXJ4SGlkZUFmdGVyQ2xpY2sgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNhbkNvbXBsZXRlQ29tcGV0aXRpb24gJiYgY2FuTWFuYWdlQ29tcGV0aXRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNvbXBsZXRlKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXJ4LWljb24gaWNvbi1zdG9wLWZpbGxlZCBpY29uLWZvbnQtMjQgbXItMlwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPtCX0LDQstC10YDRiNC40YLRjDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1yeEhpZGVBZnRlckNsaWNrIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjYW5DYW5jZWxDb21wZXRpdGlvbiAmJiBjYW5NYW5hZ2VDb21wZXRpdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2FuY2VsKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXJ4LWljb24gaWNvbi1jbG9zZSBpY29uLWZvbnQtMjQgbXItMlwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7Y2FuY2VsQ29tcGV0aXRpb25CdXR0b25MYWJlbH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPC9tcngtZHJvcGRvd24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=