@deeksha2309/sunbird-collection-editor 8.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/esm2022/lib/collection-editor-cursor.service.mjs +3 -0
- package/esm2022/lib/collection-editor-library.component.mjs +16 -0
- package/esm2022/lib/collection-editor-library.module.mjs +137 -0
- package/esm2022/lib/components/answer/answer.component.mjs +43 -0
- package/esm2022/lib/components/asset-browser/asset-browser.component.mjs +325 -0
- package/esm2022/lib/components/asset-browser/asset-browser.data.mjs +53 -0
- package/esm2022/lib/components/assign-page-number/assign-page-number.component.mjs +191 -0
- package/esm2022/lib/components/ckeditor-tool/ckeditor-tool.component.mjs +895 -0
- package/esm2022/lib/components/collection-icon/collection-icon.component.mjs +43 -0
- package/esm2022/lib/components/contentplayer-page/contentplayer-page.component.mjs +351 -0
- package/esm2022/lib/components/csv-upload/csv-upload.component.mjs +178 -0
- package/esm2022/lib/components/dialcode/dialcode.component.mjs +182 -0
- package/esm2022/lib/components/editor/editor.component.mjs +1125 -0
- package/esm2022/lib/components/fancy-tree/fancy-tree.component.mjs +529 -0
- package/esm2022/lib/components/header/header.component.mjs +123 -0
- package/esm2022/lib/components/library/library.component.mjs +242 -0
- package/esm2022/lib/components/library-filter/library-filter.component.mjs +149 -0
- package/esm2022/lib/components/library-list/library-list.component.mjs +92 -0
- package/esm2022/lib/components/library-player/library-player.component.mjs +62 -0
- package/esm2022/lib/components/manage-collaborator/manage-collaborator.component.mjs +256 -0
- package/esm2022/lib/components/meta-form/meta-form.component.mjs +377 -0
- package/esm2022/lib/components/options/options.component.mjs +144 -0
- package/esm2022/lib/components/plain-tree/plain-tree.component.mjs +125 -0
- package/esm2022/lib/components/progress-status/progress-status.component.mjs +46 -0
- package/esm2022/lib/components/publish-checklist/publish-checklist.component.mjs +67 -0
- package/esm2022/lib/components/quality-params-modal/quality-params-modal.component.mjs +52 -0
- package/esm2022/lib/components/question/question.component.mjs +1360 -0
- package/esm2022/lib/components/quml-player/quml-player.component.mjs +73 -0
- package/esm2022/lib/components/qumlplayer-page/qumlplayer-page.component.mjs +84 -0
- package/esm2022/lib/components/resource-reorder/resource-reorder.component.mjs +143 -0
- package/esm2022/lib/components/skeleton-loader/skeleton-loader.component.mjs +26 -0
- package/esm2022/lib/components/template/template.component.mjs +42 -0
- package/esm2022/lib/components/term-and-condition/term-and-condition.component.mjs +68 -0
- package/esm2022/lib/directives/telemetry-interact/telemetry-interact.directive.mjs +33 -0
- package/esm2022/lib/interfaces/McqForm.mjs +29 -0
- package/esm2022/lib/interfaces/editor.mjs +2 -0
- package/esm2022/lib/interfaces/framework.mjs +2 -0
- package/esm2022/lib/interfaces/httpOptions.mjs +2 -0
- package/esm2022/lib/interfaces/requestParam.mjs +2 -0
- package/esm2022/lib/interfaces/serverResponse.mjs +2 -0
- package/esm2022/lib/pipes/sanitize-html.pipe.mjs +20 -0
- package/esm2022/lib/services/config/category.config.json +8 -0
- package/esm2022/lib/services/config/config.service.mjs +27 -0
- package/esm2022/lib/services/config/editor.config.json +31 -0
- package/esm2022/lib/services/config/label.config.json +314 -0
- package/esm2022/lib/services/config/player.config.json +96 -0
- package/esm2022/lib/services/config/url.config.json +69 -0
- package/esm2022/lib/services/data/data.service.mjs +192 -0
- package/esm2022/lib/services/dialcode/dialcode.service.mjs +309 -0
- package/esm2022/lib/services/editor/editor.service.mjs +682 -0
- package/esm2022/lib/services/framework/framework.service.mjs +106 -0
- package/esm2022/lib/services/helper/helper.service.mjs +160 -0
- package/esm2022/lib/services/player/player.service.mjs +99 -0
- package/esm2022/lib/services/public-data/public-data.service.mjs +21 -0
- package/esm2022/lib/services/question/question.service.mjs +167 -0
- package/esm2022/lib/services/telemetry/telemetry.service.mjs +120 -0
- package/esm2022/lib/services/toaster/toaster.service.mjs +105 -0
- package/esm2022/lib/services/tree/tree.service.mjs +284 -0
- package/esm2022/project-sunbird-sunbird-collection-editor.mjs +5 -0
- package/esm2022/public-api.mjs +4 -0
- package/fesm2022/project-sunbird-sunbird-collection-editor.mjs +10138 -0
- package/fesm2022/project-sunbird-sunbird-collection-editor.mjs.map +1 -0
- package/index.d.ts +6 -0
- package/lib/assets/.gitkeep +0 -0
- package/lib/assets/images/MCQ.png +0 -0
- package/lib/assets/images/Spin.gif +0 -0
- package/lib/assets/images/bulkuploadfile.png +0 -0
- package/lib/assets/images/cancel-sign copy.png +0 -0
- package/lib/assets/images/cancel-sign.png +0 -0
- package/lib/assets/images/emptyResult.svg +1 -0
- package/lib/assets/images/icons-rtl.gif +0 -0
- package/lib/assets/images/icons.gif +0 -0
- package/lib/assets/images/imageicon.svg +16 -0
- package/lib/assets/images/imageicon_blue.svg +16 -0
- package/lib/assets/images/layoutoneicon.svg +16 -0
- package/lib/assets/images/layoutoneicon_blue.svg +16 -0
- package/lib/assets/images/layoutthreeicon.svg +18 -0
- package/lib/assets/images/layoutthreeicon_blue.svg +18 -0
- package/lib/assets/images/layouttwoicon.svg +18 -0
- package/lib/assets/images/layouttwoicon_blue.svg +18 -0
- package/lib/assets/images/leftalignicon.svg +17 -0
- package/lib/assets/images/leftalignicon_blue.svg +17 -0
- package/lib/assets/images/loader.gif +0 -0
- package/lib/assets/images/loader.svg +1 -0
- package/lib/assets/images/loading.gif +0 -0
- package/lib/assets/images/middlealignicon.svg +17 -0
- package/lib/assets/images/middlealignicon_blue.svg +17 -0
- package/lib/assets/images/question_collection.svg +18 -0
- package/lib/assets/images/rightalignicon.svg +17 -0
- package/lib/assets/images/rightalignicon_blue.svg +17 -0
- package/lib/assets/images/vline-rtl.gif +0 -0
- package/lib/assets/images/vline.gif +0 -0
- package/lib/assets/images/writing.png +0 -0
- package/lib/collection-editor-cursor.service.d.ts +5 -0
- package/lib/collection-editor-cursor.service.d.ts.map +1 -0
- package/lib/collection-editor-library.component.d.ts +9 -0
- package/lib/collection-editor-library.component.d.ts.map +1 -0
- package/lib/collection-editor-library.module.d.ts +50 -0
- package/lib/collection-editor-library.module.d.ts.map +1 -0
- package/lib/components/answer/answer.component.d.ts +24 -0
- package/lib/components/answer/answer.component.d.ts.map +1 -0
- package/lib/components/asset-browser/asset-browser.component.d.ts +81 -0
- package/lib/components/asset-browser/asset-browser.component.d.ts.map +1 -0
- package/lib/components/asset-browser/asset-browser.data.d.ts +52 -0
- package/lib/components/asset-browser/asset-browser.data.d.ts.map +1 -0
- package/lib/components/assign-page-number/assign-page-number.component.d.ts +38 -0
- package/lib/components/assign-page-number/assign-page-number.component.d.ts.map +1 -0
- package/lib/components/ckeditor-tool/ckeditor-tool.component.d.ts +161 -0
- package/lib/components/ckeditor-tool/ckeditor-tool.component.d.ts.map +1 -0
- package/lib/components/collection-icon/collection-icon.component.d.ts +18 -0
- package/lib/components/collection-icon/collection-icon.component.d.ts.map +1 -0
- package/lib/components/contentplayer-page/contentplayer-page.component.d.ts +54 -0
- package/lib/components/contentplayer-page/contentplayer-page.component.d.ts.map +1 -0
- package/lib/components/csv-upload/csv-upload.component.d.ts +42 -0
- package/lib/components/csv-upload/csv-upload.component.d.ts.map +1 -0
- package/lib/components/dialcode/dialcode.component.d.ts +48 -0
- package/lib/components/dialcode/dialcode.component.d.ts.map +1 -0
- package/lib/components/editor/editor.component.d.ts +146 -0
- package/lib/components/editor/editor.component.d.ts.map +1 -0
- package/lib/components/fancy-tree/fancy-tree.component.d.ts +77 -0
- package/lib/components/fancy-tree/fancy-tree.component.d.ts.map +1 -0
- package/lib/components/header/header.component.d.ts +46 -0
- package/lib/components/header/header.component.d.ts.map +1 -0
- package/lib/components/library/library.component.d.ts +69 -0
- package/lib/components/library/library.component.d.ts.map +1 -0
- package/lib/components/library-filter/library-filter.component.d.ts +47 -0
- package/lib/components/library-filter/library-filter.component.d.ts.map +1 -0
- package/lib/components/library-list/library-list.component.d.ts +32 -0
- package/lib/components/library-list/library-list.component.d.ts.map +1 -0
- package/lib/components/library-player/library-player.component.d.ts +24 -0
- package/lib/components/library-player/library-player.component.d.ts.map +1 -0
- package/lib/components/manage-collaborator/manage-collaborator.component.d.ts +75 -0
- package/lib/components/manage-collaborator/manage-collaborator.component.d.ts.map +1 -0
- package/lib/components/meta-form/meta-form.component.d.ts +51 -0
- package/lib/components/meta-form/meta-form.component.d.ts.map +1 -0
- package/lib/components/options/options.component.d.ts +53 -0
- package/lib/components/options/options.component.d.ts.map +1 -0
- package/lib/components/plain-tree/plain-tree.component.d.ts +20 -0
- package/lib/components/plain-tree/plain-tree.component.d.ts.map +1 -0
- package/lib/components/progress-status/progress-status.component.d.ts +25 -0
- package/lib/components/progress-status/progress-status.component.d.ts.map +1 -0
- package/lib/components/publish-checklist/publish-checklist.component.d.ts +23 -0
- package/lib/components/publish-checklist/publish-checklist.component.d.ts.map +1 -0
- package/lib/components/quality-params-modal/quality-params-modal.component.d.ts +24 -0
- package/lib/components/quality-params-modal/quality-params-modal.component.d.ts.map +1 -0
- package/lib/components/question/question.component.d.ts +215 -0
- package/lib/components/question/question.component.d.ts.map +1 -0
- package/lib/components/quml-player/quml-player.component.d.ts +26 -0
- package/lib/components/quml-player/quml-player.component.d.ts.map +1 -0
- package/lib/components/qumlplayer-page/qumlplayer-page.component.d.ts +31 -0
- package/lib/components/qumlplayer-page/qumlplayer-page.component.d.ts.map +1 -0
- package/lib/components/resource-reorder/resource-reorder.component.d.ts +45 -0
- package/lib/components/resource-reorder/resource-reorder.component.d.ts.map +1 -0
- package/lib/components/skeleton-loader/skeleton-loader.component.d.ts +13 -0
- package/lib/components/skeleton-loader/skeleton-loader.component.d.ts.map +1 -0
- package/lib/components/template/template.component.d.ts +21 -0
- package/lib/components/template/template.component.d.ts.map +1 -0
- package/lib/components/term-and-condition/term-and-condition.component.d.ts +26 -0
- package/lib/components/term-and-condition/term-and-condition.component.d.ts.map +1 -0
- package/lib/directives/telemetry-interact/telemetry-interact.directive.d.ts +27 -0
- package/lib/directives/telemetry-interact/telemetry-interact.directive.d.ts.map +1 -0
- package/lib/interfaces/McqForm.d.ts +32 -0
- package/lib/interfaces/McqForm.d.ts.map +1 -0
- package/lib/interfaces/editor.d.ts +78 -0
- package/lib/interfaces/editor.d.ts.map +1 -0
- package/lib/interfaces/framework.d.ts +46 -0
- package/lib/interfaces/framework.d.ts.map +1 -0
- package/lib/interfaces/httpOptions.d.ts +35 -0
- package/lib/interfaces/httpOptions.d.ts.map +1 -0
- package/lib/interfaces/requestParam.d.ts +24 -0
- package/lib/interfaces/requestParam.d.ts.map +1 -0
- package/lib/interfaces/serverResponse.d.ts +38 -0
- package/lib/interfaces/serverResponse.d.ts.map +1 -0
- package/lib/pipes/sanitize-html.pipe.d.ts +11 -0
- package/lib/pipes/sanitize-html.pipe.d.ts.map +1 -0
- package/lib/services/config/config.service.d.ts +13 -0
- package/lib/services/config/config.service.d.ts.map +1 -0
- package/lib/services/data/data.service.d.ts +85 -0
- package/lib/services/data/data.service.d.ts.map +1 -0
- package/lib/services/dialcode/dialcode.service.d.ts +36 -0
- package/lib/services/dialcode/dialcode.service.d.ts.map +1 -0
- package/lib/services/editor/editor.service.d.ts +150 -0
- package/lib/services/editor/editor.service.d.ts.map +1 -0
- package/lib/services/framework/framework.service.d.ts +35 -0
- package/lib/services/framework/framework.service.d.ts.map +1 -0
- package/lib/services/helper/helper.service.d.ts +41 -0
- package/lib/services/helper/helper.service.d.ts.map +1 -0
- package/lib/services/player/player.service.d.ts +33 -0
- package/lib/services/player/player.service.d.ts.map +1 -0
- package/lib/services/public-data/public-data.service.d.ts +15 -0
- package/lib/services/public-data/public-data.service.d.ts.map +1 -0
- package/lib/services/question/question.service.d.ts +30 -0
- package/lib/services/question/question.service.d.ts.map +1 -0
- package/lib/services/telemetry/telemetry.service.d.ts +45 -0
- package/lib/services/telemetry/telemetry.service.d.ts.map +1 -0
- package/lib/services/toaster/toaster.service.d.ts +50 -0
- package/lib/services/toaster/toaster.service.d.ts.map +1 -0
- package/lib/services/tree/tree.service.d.ts +51 -0
- package/lib/services/tree/tree.service.d.ts.map +1 -0
- package/package.json +32 -0
- package/project-sunbird-sunbird-collection-editor.d.ts.map +1 -0
- package/public-api.d.ts +4 -0
- package/public-api.d.ts.map +1 -0
|
@@ -0,0 +1,377 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';
|
|
2
|
+
import { merge, of, Subject } from 'rxjs';
|
|
3
|
+
import * as _ from 'lodash-es';
|
|
4
|
+
import { takeUntil, filter, switchMap, map } from 'rxjs/operators';
|
|
5
|
+
import * as moment from 'moment';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "../../services/editor/editor.service";
|
|
8
|
+
import * as i2 from "../../services/tree/tree.service";
|
|
9
|
+
import * as i3 from "../../services/framework/framework.service";
|
|
10
|
+
import * as i4 from "../../services/helper/helper.service";
|
|
11
|
+
import * as i5 from "../../services/config/config.service";
|
|
12
|
+
import * as i6 from "../../services/toaster/toaster.service";
|
|
13
|
+
import * as i7 from "@angular/common";
|
|
14
|
+
import * as i8 from "@project-sunbird/common-form-elements-full";
|
|
15
|
+
import * as i9 from "../collection-icon/collection-icon.component";
|
|
16
|
+
let framworkServiceTemp;
|
|
17
|
+
export class MetaFormComponent {
|
|
18
|
+
constructor(editorService, treeService, frameworkService, helperService, configService, toasterService) {
|
|
19
|
+
this.editorService = editorService;
|
|
20
|
+
this.treeService = treeService;
|
|
21
|
+
this.frameworkService = frameworkService;
|
|
22
|
+
this.helperService = helperService;
|
|
23
|
+
this.configService = configService;
|
|
24
|
+
this.toasterService = toasterService;
|
|
25
|
+
this.toolbarEmitter = new EventEmitter();
|
|
26
|
+
this.onComponentDestroy$ = new Subject();
|
|
27
|
+
this.frameworkDetails = {};
|
|
28
|
+
this.showAppIcon = false;
|
|
29
|
+
framworkServiceTemp = frameworkService;
|
|
30
|
+
}
|
|
31
|
+
ngOnInit() {
|
|
32
|
+
// Initialize component
|
|
33
|
+
}
|
|
34
|
+
ngOnChanges() {
|
|
35
|
+
this.fetchFrameWorkDetails();
|
|
36
|
+
this.setAppIconData();
|
|
37
|
+
if (_.has(this.nodeMetadata, 'data.metadata.shuffle')) {
|
|
38
|
+
this.setShuffleValue(this.nodeMetadata.data.metadata.shuffle);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
setAppIconData() {
|
|
42
|
+
const isRootNode = _.get(this.nodeMetadata, 'data.root');
|
|
43
|
+
this.appIconConfig = _.find(_.flatten(_.map(this.rootFormConfig, 'fields')), { code: 'appIcon' });
|
|
44
|
+
if (_.isUndefined(this.appIconConfig)) {
|
|
45
|
+
this.appIconConfig = _.find(this.rootFormConfig, { code: 'appIcon' });
|
|
46
|
+
}
|
|
47
|
+
if (!_.isUndefined(this.appIconConfig) && isRootNode === true) {
|
|
48
|
+
this.showAppIcon = true;
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
this.showAppIcon = false;
|
|
52
|
+
}
|
|
53
|
+
this.appIcon = _.get(this.nodeMetadata, 'data.metadata.appIcon');
|
|
54
|
+
if (this.isReviewMode()) {
|
|
55
|
+
this.appIconConfig = { ...this.appIconConfig, ...{ isAppIconEditable: false } };
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
this.appIconConfig = { ...this.appIconConfig, ...{ isAppIconEditable: true } };
|
|
59
|
+
}
|
|
60
|
+
const ifEditable = this.ifFieldIsEditable('appIcon');
|
|
61
|
+
}
|
|
62
|
+
setShuffleValue(value) {
|
|
63
|
+
if (_.isBoolean(value)) {
|
|
64
|
+
this.helperService.setShuffleValue(value);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
showShuffleMessage(event) {
|
|
68
|
+
this.subscription = this.helperService.shuffleValue.subscribe(shuffle => this.previousShuffleValue = shuffle);
|
|
69
|
+
if (_.isBoolean(event.shuffle) && event.shuffle === true && _.isBoolean(this.previousShuffleValue) && this.previousShuffleValue === false) {
|
|
70
|
+
this.toasterService.simpleInfo(_.get(this.configService, 'labelConfig.lbl.shuffleOnMessage'));
|
|
71
|
+
}
|
|
72
|
+
this.setShuffleValue(event.shuffle);
|
|
73
|
+
}
|
|
74
|
+
fetchFrameWorkDetails() {
|
|
75
|
+
if (this.frameworkService.organisationFramework) {
|
|
76
|
+
this.frameworkService.frameworkData$.pipe(takeUntil(this.onComponentDestroy$), filter(data => _.get(data, `frameworkdata.${this.frameworkService.organisationFramework}`))).subscribe((frameworkDetails) => {
|
|
77
|
+
if (frameworkDetails && !frameworkDetails.err) {
|
|
78
|
+
const frameworkData = frameworkDetails.frameworkdata[this.frameworkService.organisationFramework].categories;
|
|
79
|
+
this.frameworkDetails.frameworkData = frameworkData;
|
|
80
|
+
this.frameworkDetails.topicList = _.get(_.find(frameworkData, {
|
|
81
|
+
code: 'topic'
|
|
82
|
+
}), 'terms');
|
|
83
|
+
this.frameworkDetails.targetFrameworks = _.filter(frameworkDetails.frameworkdata, (value, key) => {
|
|
84
|
+
return _.includes(this.frameworkService.targetFrameworkIds, key);
|
|
85
|
+
});
|
|
86
|
+
this.attachDefaultValues();
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
if (this.frameworkService.targetFrameworkIds) {
|
|
92
|
+
this.frameworkService.frameworkData$.pipe(takeUntil(this.onComponentDestroy$), filter(data => _.get(data, `frameworkdata.${_.first(this.frameworkService.targetFrameworkIds)}`))).subscribe((frameworkDetails) => {
|
|
93
|
+
if (frameworkDetails && !frameworkDetails.err) {
|
|
94
|
+
// const frameworkData = frameworkDetails.frameworkdata[this.frameworkService.targetFrameworkIds].categories;
|
|
95
|
+
// this.frameworkDetails.frameworkData = frameworkData;
|
|
96
|
+
// this.frameworkDetails.topicList = _.get(_.find(frameworkData, {
|
|
97
|
+
// code: 'topic'
|
|
98
|
+
// }), 'terms');
|
|
99
|
+
this.frameworkDetails.targetFrameworks = _.filter(frameworkDetails.frameworkdata, (value, key) => {
|
|
100
|
+
return _.includes(this.frameworkService.targetFrameworkIds, key);
|
|
101
|
+
});
|
|
102
|
+
this.attachDefaultValues();
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
attachDefaultValues() {
|
|
109
|
+
const metaDataFields = _.get(this.nodeMetadata, 'data.metadata');
|
|
110
|
+
// if (_.isEmpty(metaDataFields)) { return; }
|
|
111
|
+
const isRoot = _.get(metaDataFields, 'data.root');
|
|
112
|
+
const categoryMasterList = this.frameworkDetails.frameworkData ||
|
|
113
|
+
!isRoot && this.frameworkService.selectedOrganisationFramework &&
|
|
114
|
+
_.get(this.frameworkService.selectedOrganisationFramework, 'framework.categories');
|
|
115
|
+
// tslint:disable-next-line:max-line-length
|
|
116
|
+
let formConfig = (_.get(metaDataFields, 'visibility') === 'Default') ? _.cloneDeep(this.rootFormConfig) : _.cloneDeep(this.unitFormConfig);
|
|
117
|
+
formConfig = formConfig && _.has(_.first(formConfig), 'fields') ? formConfig : [{ name: '', fields: formConfig }];
|
|
118
|
+
if (!_.isEmpty(this.frameworkDetails.targetFrameworks)) {
|
|
119
|
+
const fieldTermsMap = new Map();
|
|
120
|
+
_.forEach(this.frameworkDetails.targetFrameworks, (framework) => {
|
|
121
|
+
_.forEach(formConfig, (section) => {
|
|
122
|
+
_.forEach(section.fields, field => {
|
|
123
|
+
const frameworkCategory = _.find(framework.categories, category => {
|
|
124
|
+
return category.code === field.sourceCategory && _.includes(field.code, 'target');
|
|
125
|
+
});
|
|
126
|
+
if (!_.isEmpty(frameworkCategory)) {
|
|
127
|
+
field.terms = _.cloneDeep(frameworkCategory.terms);
|
|
128
|
+
fieldTermsMap.set(field.code, field.terms);
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
_.forEach(formConfig, (section) => {
|
|
134
|
+
const fields = section.fields || [];
|
|
135
|
+
for (let i = 0; i < fields.length - 1; i++) {
|
|
136
|
+
const currentField = fields[i];
|
|
137
|
+
const nextField = fields[i + 1];
|
|
138
|
+
const nextFieldDependsOnCurrent = nextField.depends && Array.isArray(nextField.depends) && nextField.depends.includes(currentField.code);
|
|
139
|
+
if (currentField.terms && fieldTermsMap.has(nextField.code) && nextFieldDependsOnCurrent) {
|
|
140
|
+
const nextFieldTerms = fieldTermsMap.get(nextField.code);
|
|
141
|
+
currentField.terms.forEach(term => {
|
|
142
|
+
if (term && (!term.associations || _.isEmpty(term.associations))) {
|
|
143
|
+
term.associations = nextFieldTerms.map(nextTerm => ({
|
|
144
|
+
identifier: nextTerm.identifier,
|
|
145
|
+
code: nextTerm.code,
|
|
146
|
+
name: nextTerm.name,
|
|
147
|
+
description: nextTerm.description,
|
|
148
|
+
category: nextTerm.category,
|
|
149
|
+
status: nextTerm.status
|
|
150
|
+
}));
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
_.forEach(formConfig, (section) => {
|
|
158
|
+
_.forEach(section.fields, field => {
|
|
159
|
+
if (metaDataFields) {
|
|
160
|
+
if (_.has(metaDataFields, field.code)) {
|
|
161
|
+
field.default = _.get(metaDataFields, field.code);
|
|
162
|
+
}
|
|
163
|
+
else if (_.includes(['maxTime', 'warningTime'], field.code)) {
|
|
164
|
+
const value = _.get(metaDataFields, `timeLimits.${field.code}`);
|
|
165
|
+
field.default = !_.isEmpty(value) ?
|
|
166
|
+
moment.utc(moment.duration(value, 'seconds').asMilliseconds()).format(this.helperService.getTimerFormat(field)) : '';
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
if (field.code === 'framework') {
|
|
170
|
+
field.range = this.frameworkService.frameworkValues;
|
|
171
|
+
field.options = this.getFramework;
|
|
172
|
+
}
|
|
173
|
+
if (!_.includes(field.depends, 'framework') && !_.includes(field.code, 'target')) {
|
|
174
|
+
const frameworkCategory = _.find(categoryMasterList, category => {
|
|
175
|
+
return (category.code === field.sourceCategory || category.code === field.code);
|
|
176
|
+
});
|
|
177
|
+
if (!_.isEmpty(frameworkCategory)) {
|
|
178
|
+
field.terms = frameworkCategory.terms;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
if (field.code === 'license') {
|
|
182
|
+
const defaultLicense = _.get(metaDataFields, field.code);
|
|
183
|
+
field.default = !_.isEmpty(defaultLicense) ? defaultLicense : this.editorService.editorConfig.context.defaultLicense;
|
|
184
|
+
const licenses = this.helperService.getAvailableLicenses();
|
|
185
|
+
field.range = licenses ? _.map(licenses, 'name') : [];
|
|
186
|
+
}
|
|
187
|
+
if (field.code === 'additionalCategories') {
|
|
188
|
+
const channelInfo = this.helperService.channelInfo;
|
|
189
|
+
const additionalCategories = _.uniq(_.get(channelInfo, `${this.configService.categoryConfig.additionalCategories[this.editorService.editorConfig.config.objectType]}`) ||
|
|
190
|
+
_.get(this.editorService.editorConfig, 'context.additionalCategories'));
|
|
191
|
+
if (!_.isEmpty(additionalCategories)) {
|
|
192
|
+
field.range = _.uniq(additionalCategories);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
if (field.code === 'copyright') {
|
|
196
|
+
const channelData = this.helperService.channelInfo;
|
|
197
|
+
field.default = _.get(metaDataFields, field.code);
|
|
198
|
+
if (_.isEmpty(field.default) && this.editorService.editorConfig.config.setDefaultCopyRight) {
|
|
199
|
+
field.default = channelData && channelData.name;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
if (field.code === 'maxQuestions') {
|
|
203
|
+
const activeNode = this.treeService.getActiveNode();
|
|
204
|
+
const rootFirstChildNode = this.editorService.getContentChildrens(activeNode);
|
|
205
|
+
if (rootFirstChildNode && rootFirstChildNode.length > 0) {
|
|
206
|
+
field.range = _.times(_.size(rootFirstChildNode), index => index + 1);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
if (field.code === 'author') {
|
|
210
|
+
const defaultAuthor = _.get(metaDataFields, field.code);
|
|
211
|
+
field.default = !_.isEmpty(defaultAuthor) ? defaultAuthor : _.get(this.editorService.editorConfig, 'context.user.fullName');
|
|
212
|
+
}
|
|
213
|
+
if (field.code === 'showTimer') {
|
|
214
|
+
field.options = this.showTimer;
|
|
215
|
+
}
|
|
216
|
+
if (field.code === 'instructions') {
|
|
217
|
+
field.default = _.get(metaDataFields, 'instructions.default') || '';
|
|
218
|
+
}
|
|
219
|
+
if (field.code === 'setPeriod') {
|
|
220
|
+
field.default = !_.isEmpty(metaDataFields, 'endDate') ? 'Yes' : 'No';
|
|
221
|
+
}
|
|
222
|
+
if (field.code === 'allowECM') {
|
|
223
|
+
field.default = _.get(metaDataFields, 'recordedBy') !== 'Self' ? 'Yes' : 'No';
|
|
224
|
+
}
|
|
225
|
+
if (field.code === 'instances') {
|
|
226
|
+
field.default = !_.isEmpty(metaDataFields, 'instances') ? _.get(metaDataFields, 'instances.label') : '';
|
|
227
|
+
}
|
|
228
|
+
if ((_.isEmpty(field.range) || _.isEmpty(field.terms)) &&
|
|
229
|
+
!field.editable && !_.isEmpty(field.default)) {
|
|
230
|
+
if (_.has(field, 'terms')) {
|
|
231
|
+
field.terms = [];
|
|
232
|
+
if (_.isArray(field.default)) {
|
|
233
|
+
field.terms = field.default || [];
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
field.terms.push(field.default);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
field.range = [];
|
|
241
|
+
if (_.isArray(field.default)) {
|
|
242
|
+
field.range = field.default;
|
|
243
|
+
}
|
|
244
|
+
else {
|
|
245
|
+
field.range.push(field.default);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
if (field.inputType === 'nestedselect') {
|
|
250
|
+
_.map(field.range, val => {
|
|
251
|
+
return {
|
|
252
|
+
value: val.value || val,
|
|
253
|
+
label: val.value || val
|
|
254
|
+
};
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
const ifEditable = this.ifFieldIsEditable(field.code);
|
|
258
|
+
_.set(field, 'editable', ifEditable);
|
|
259
|
+
});
|
|
260
|
+
});
|
|
261
|
+
this.formFieldProperties = _.cloneDeep(formConfig);
|
|
262
|
+
console.log(this.formFieldProperties);
|
|
263
|
+
}
|
|
264
|
+
isReviewMode() {
|
|
265
|
+
return _.includes(['review', 'read', 'sourcingreview', 'orgreview'], this.editorService.editorMode);
|
|
266
|
+
}
|
|
267
|
+
ifFieldIsEditable(fieldCode) {
|
|
268
|
+
const ediorMode = this.editorService.editorMode;
|
|
269
|
+
if (!this.isReviewMode()) {
|
|
270
|
+
return true;
|
|
271
|
+
}
|
|
272
|
+
const editableFields = _.get(this.editorService.editorConfig.config, 'editableFields');
|
|
273
|
+
if (editableFields && !_.isEmpty(editableFields[ediorMode]) && _.includes(editableFields[ediorMode], fieldCode)) {
|
|
274
|
+
return true;
|
|
275
|
+
}
|
|
276
|
+
return false;
|
|
277
|
+
}
|
|
278
|
+
outputData(eventData) { }
|
|
279
|
+
onStatusChanges(event) {
|
|
280
|
+
this.toolbarEmitter.emit({ button: 'onFormStatusChange', event });
|
|
281
|
+
}
|
|
282
|
+
appIconDataHandler(event) {
|
|
283
|
+
this.appIcon = event.url;
|
|
284
|
+
this.treeService.updateAppIcon(event.url);
|
|
285
|
+
}
|
|
286
|
+
showTimer(control, depends, formGroup, loading, loaded) {
|
|
287
|
+
const oldValue = {};
|
|
288
|
+
const response = merge(..._.map(depends, depend => depend.valueChanges)).pipe(switchMap((value) => {
|
|
289
|
+
const isDependsInvalid = _.includes(_.map(depends, depend => depend.invalid), true);
|
|
290
|
+
const dependsKeyValue = _.map(depends, (depend, key) => {
|
|
291
|
+
return { [key]: depend.value };
|
|
292
|
+
});
|
|
293
|
+
if (!isDependsInvalid) {
|
|
294
|
+
const maxTimeValue = _.find(dependsKeyValue, 'maxTime');
|
|
295
|
+
if (maxTimeValue && maxTimeValue.maxTime === '00:00:00') {
|
|
296
|
+
return of(false);
|
|
297
|
+
}
|
|
298
|
+
return of(true);
|
|
299
|
+
}
|
|
300
|
+
else {
|
|
301
|
+
return of(false);
|
|
302
|
+
}
|
|
303
|
+
}));
|
|
304
|
+
return response;
|
|
305
|
+
}
|
|
306
|
+
getFramework(control, depends, formGroup, loading, loaded) {
|
|
307
|
+
const response = control.valueChanges.pipe(switchMap((value) => {
|
|
308
|
+
if (!_.isEmpty(value)) {
|
|
309
|
+
return framworkServiceTemp.getFrameworkCategories(value).pipe(map(res => {
|
|
310
|
+
const frameworkResponse = _.get(res, 'result');
|
|
311
|
+
framworkServiceTemp.selectedOrganisationFramework = frameworkResponse;
|
|
312
|
+
return frameworkResponse;
|
|
313
|
+
}));
|
|
314
|
+
}
|
|
315
|
+
else {
|
|
316
|
+
return of(null);
|
|
317
|
+
}
|
|
318
|
+
}));
|
|
319
|
+
return response;
|
|
320
|
+
}
|
|
321
|
+
valueChanges(event) {
|
|
322
|
+
if (_.has(event, 'shuffle')) {
|
|
323
|
+
this.showShuffleMessage(event);
|
|
324
|
+
}
|
|
325
|
+
const data = _.omit(event, ['allowECM', 'levels', 'setPeriod', 'instances']);
|
|
326
|
+
if (!_.isEmpty(event?.levels)) {
|
|
327
|
+
data.outcomeDeclaration = {
|
|
328
|
+
levels: this.createLeavels(event.levels)
|
|
329
|
+
};
|
|
330
|
+
}
|
|
331
|
+
if (!_.isEmpty(event?.instances)) {
|
|
332
|
+
data.instances = { label: event?.instances };
|
|
333
|
+
}
|
|
334
|
+
if (!_.isEmpty(this.appIcon) && this.showAppIcon) {
|
|
335
|
+
data.appIcon = this.appIcon;
|
|
336
|
+
}
|
|
337
|
+
if (this.isReviewMode() && !data.name) {
|
|
338
|
+
const nodeTitle = this.nodeMetadata?.data?.metadata?.name;
|
|
339
|
+
if (nodeTitle) {
|
|
340
|
+
data.name = nodeTitle;
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
this.toolbarEmitter.emit({ button: 'onFormValueChange', data });
|
|
344
|
+
this.treeService.updateNode(data);
|
|
345
|
+
}
|
|
346
|
+
createLeavels(levels) {
|
|
347
|
+
const obj = {};
|
|
348
|
+
_.forEach(levels, (el, index) => {
|
|
349
|
+
obj[`L${index + 1}`] = {
|
|
350
|
+
label: el
|
|
351
|
+
};
|
|
352
|
+
});
|
|
353
|
+
return obj;
|
|
354
|
+
}
|
|
355
|
+
ngOnDestroy() {
|
|
356
|
+
this.onComponentDestroy$.next();
|
|
357
|
+
this.onComponentDestroy$.complete();
|
|
358
|
+
if (this.subscription) {
|
|
359
|
+
this.subscription.unsubscribe();
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MetaFormComponent, deps: [{ token: i1.EditorService }, { token: i2.TreeService }, { token: i3.FrameworkService }, { token: i4.HelperService }, { token: i5.ConfigService }, { token: i6.ToasterService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
363
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: MetaFormComponent, selector: "lib-meta-form", inputs: { rootFormConfig: "rootFormConfig", unitFormConfig: "unitFormConfig", nodeMetadata: "nodeMetadata" }, outputs: { toolbarEmitter: "toolbarEmitter" }, usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"formFieldProperties\">\n <span class=\"meta-form\">\n <lib-collection-icon *ngIf=\"showAppIcon\" [appIcon]=\"appIcon\" [appIconConfig]=\"appIconConfig\" (iconEmitter)=\"appIconDataHandler($event)\"></lib-collection-icon>\n <sb-dynamic-form [config]=\"formFieldProperties\" (initialize)=\"outputData($event)\" (statusChanges)=\"onStatusChanges($event)\" (valueChanges)=\"valueChanges($event)\"></sb-dynamic-form>\n </span>\n</ng-container>", styles: ["@charset \"UTF-8\";.one-column-grid{display:grid;grid-template-columns:repeat(1,1fr);grid-template-rows:1fr 1fr;column-gap:.5rem}.two-column-grid{display:grid;grid-template-columns:repeat(2,1fr);column-gap:.5rem;border-bottom:solid 1px var(--gray-100)}.two-column-grid:last-child{border-bottom:none}.three-column-grid{display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:1fr 1fr;column-gap:.5rem}.formSection{padding:1.5rem 0}.formSection:first-child{padding:0 0 1.5rem}.multi-select-section-app{margin:.7rem 0!important}.multi-select-section-app label{margin-bottom:.3rem!important;z-index:inherit}.list-border{height:inherit!important;min-height:45px!important}.list-border ul{padding:0 22px 0 0!important;position:inherit!important}.list-border ul span{font-weight:500!important;font-size:.785rem;padding:1.4rem 0!important}.multi-select-container .sb-modal-dropdown-web ul{border:none!important}.sb-textbox,.topic-picker-selector,select,.sb-textarea,.list-border{border:1px solid rgba(34,36,38,.15)!important;padding:.85rem .5rem!important;border-radius:.28571429rem;font-size:.785rem!important;font-weight:500!important}.sb-keywordbox{border:1px solid rgba(34,36,38,.15)!important;padding:.45rem .5rem!important;border-radius:.28571429rem;font-size:.785rem!important;font-weight:500;padding:0!important}.sb-keywordbox .ng2-tag-input{padding:0}.sb-keywordbox .ng2-tag-input tag{margin-left:.5rem}.sb-keywordbox .ng2-tags-container{margin-top:.2rem}.sb-keywordbox .tag-wrapper,.sb-keywordbox delete-icon svg{height:24px!important;line-height:24px}label{font-size:12px!important;margin-bottom:.5rem!important;color:#121213e0;font-weight:500}.multi-select-container .caret-down.disabled+.list-border{cursor:not-allowed;background-color:#fafafa!important}\\200b .multi-select-container .list-border ul{font-size:12px!important;margin-bottom:.5rem!important;font-weight:500;color:#333;padding:0;margin:0!important;opacity:1!important;font-weight:500!important;position:inherit!important}.sb-dropdown label{padding:0!important}.sb-textarea-container .sb-textarea{height:2.9rem;padding-top:.5rem!important}.sb-textarea-container label{padding:0!important}.sb-checkbox{padding:1.5rem 0;margin-top:2rem}sb-icon-dropdown{top:10px!important;right:6px!important}.sb-textarea-container,.sb-dropdown{margin:1rem 0!important}.meta-form .dynamic-form .sb-search-input::-webkit-input-placeholder{padding-left:1.4rem!important}.meta-form .dynamic-form .required label:after{content:\"*\";margin:-.2em 0 0 .2em;color:#db2828}.meta-form .dynamic-form .required .multi-select-container .list-border ul:after{content:none!important}.meta-form .dynamic-form sb-dynamic-checkbox label{padding-left:1.5rem!important}.meta-form .dynamic-form sb-dynamic-checkbox label:after{color:#fff!important;width:1rem!important;height:1rem!important}.sb-textbox[disabled=true],[disabled=true].topic-picker-selector,.sb-textarea[disabled=true],.sb-dropdown-select[disabled],.treepicker-parent div[disabled=true]{opacity:1!important;font-weight:500!important;cursor:not-allowed;background-color:#fafafa!important}lib-meta-form sb-dynamic-form .dynamic-form{min-height:1100px}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.fs-8{font-size:.5rem}.fs-10{font-size:.625rem}.fs-12{font-size:.75rem}.fs-14{font-size:.875rem}.fs-16{font-size:1rem}.fs-18{font-size:1.125rem}.fs-20{font-size:1.25rem}.fs-22{font-size:1.375rem}.fs-24{font-size:1.5rem}.fs-26{font-size:1.625rem}.fs-28{font-size:1.75rem}.fs-30{font-size:1.875rem}.fs-36{font-size:2.25rem}\n"], dependencies: [{ kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i8.DynamicFormComponent, selector: "sb-dynamic-form", inputs: ["config", "dataLoadStatusDelegate"], outputs: ["initialize", "finalize", "valueChanges", "statusChanges"] }, { kind: "component", type: i9.CollectionIconComponent, selector: "lib-collection-icon", inputs: ["appIcon", "appIconConfig"], outputs: ["iconEmitter"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
364
|
+
}
|
|
365
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MetaFormComponent, decorators: [{
|
|
366
|
+
type: Component,
|
|
367
|
+
args: [{ selector: 'lib-meta-form', encapsulation: ViewEncapsulation.None, template: "<ng-container *ngIf=\"formFieldProperties\">\n <span class=\"meta-form\">\n <lib-collection-icon *ngIf=\"showAppIcon\" [appIcon]=\"appIcon\" [appIconConfig]=\"appIconConfig\" (iconEmitter)=\"appIconDataHandler($event)\"></lib-collection-icon>\n <sb-dynamic-form [config]=\"formFieldProperties\" (initialize)=\"outputData($event)\" (statusChanges)=\"onStatusChanges($event)\" (valueChanges)=\"valueChanges($event)\"></sb-dynamic-form>\n </span>\n</ng-container>", styles: ["@charset \"UTF-8\";.one-column-grid{display:grid;grid-template-columns:repeat(1,1fr);grid-template-rows:1fr 1fr;column-gap:.5rem}.two-column-grid{display:grid;grid-template-columns:repeat(2,1fr);column-gap:.5rem;border-bottom:solid 1px var(--gray-100)}.two-column-grid:last-child{border-bottom:none}.three-column-grid{display:grid;grid-template-columns:repeat(3,1fr);grid-template-rows:1fr 1fr;column-gap:.5rem}.formSection{padding:1.5rem 0}.formSection:first-child{padding:0 0 1.5rem}.multi-select-section-app{margin:.7rem 0!important}.multi-select-section-app label{margin-bottom:.3rem!important;z-index:inherit}.list-border{height:inherit!important;min-height:45px!important}.list-border ul{padding:0 22px 0 0!important;position:inherit!important}.list-border ul span{font-weight:500!important;font-size:.785rem;padding:1.4rem 0!important}.multi-select-container .sb-modal-dropdown-web ul{border:none!important}.sb-textbox,.topic-picker-selector,select,.sb-textarea,.list-border{border:1px solid rgba(34,36,38,.15)!important;padding:.85rem .5rem!important;border-radius:.28571429rem;font-size:.785rem!important;font-weight:500!important}.sb-keywordbox{border:1px solid rgba(34,36,38,.15)!important;padding:.45rem .5rem!important;border-radius:.28571429rem;font-size:.785rem!important;font-weight:500;padding:0!important}.sb-keywordbox .ng2-tag-input{padding:0}.sb-keywordbox .ng2-tag-input tag{margin-left:.5rem}.sb-keywordbox .ng2-tags-container{margin-top:.2rem}.sb-keywordbox .tag-wrapper,.sb-keywordbox delete-icon svg{height:24px!important;line-height:24px}label{font-size:12px!important;margin-bottom:.5rem!important;color:#121213e0;font-weight:500}.multi-select-container .caret-down.disabled+.list-border{cursor:not-allowed;background-color:#fafafa!important}\\200b .multi-select-container .list-border ul{font-size:12px!important;margin-bottom:.5rem!important;font-weight:500;color:#333;padding:0;margin:0!important;opacity:1!important;font-weight:500!important;position:inherit!important}.sb-dropdown label{padding:0!important}.sb-textarea-container .sb-textarea{height:2.9rem;padding-top:.5rem!important}.sb-textarea-container label{padding:0!important}.sb-checkbox{padding:1.5rem 0;margin-top:2rem}sb-icon-dropdown{top:10px!important;right:6px!important}.sb-textarea-container,.sb-dropdown{margin:1rem 0!important}.meta-form .dynamic-form .sb-search-input::-webkit-input-placeholder{padding-left:1.4rem!important}.meta-form .dynamic-form .required label:after{content:\"*\";margin:-.2em 0 0 .2em;color:#db2828}.meta-form .dynamic-form .required .multi-select-container .list-border ul:after{content:none!important}.meta-form .dynamic-form sb-dynamic-checkbox label{padding-left:1.5rem!important}.meta-form .dynamic-form sb-dynamic-checkbox label:after{color:#fff!important;width:1rem!important;height:1rem!important}.sb-textbox[disabled=true],[disabled=true].topic-picker-selector,.sb-textarea[disabled=true],.sb-dropdown-select[disabled],.treepicker-parent div[disabled=true]{opacity:1!important;font-weight:500!important;cursor:not-allowed;background-color:#fafafa!important}lib-meta-form sb-dynamic-form .dynamic-form{min-height:1100px}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.fs-8{font-size:.5rem}.fs-10{font-size:.625rem}.fs-12{font-size:.75rem}.fs-14{font-size:.875rem}.fs-16{font-size:1rem}.fs-18{font-size:1.125rem}.fs-20{font-size:1.25rem}.fs-22{font-size:1.375rem}.fs-24{font-size:1.5rem}.fs-26{font-size:1.625rem}.fs-28{font-size:1.75rem}.fs-30{font-size:1.875rem}.fs-36{font-size:2.25rem}\n"] }]
|
|
368
|
+
}], ctorParameters: function () { return [{ type: i1.EditorService }, { type: i2.TreeService }, { type: i3.FrameworkService }, { type: i4.HelperService }, { type: i5.ConfigService }, { type: i6.ToasterService }]; }, propDecorators: { rootFormConfig: [{
|
|
369
|
+
type: Input
|
|
370
|
+
}], unitFormConfig: [{
|
|
371
|
+
type: Input
|
|
372
|
+
}], nodeMetadata: [{
|
|
373
|
+
type: Input
|
|
374
|
+
}], toolbarEmitter: [{
|
|
375
|
+
type: Output
|
|
376
|
+
}] } });
|
|
377
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YS1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbGxlY3Rpb24tZWRpdG9yLWxpYnJhcnkvc3JjL2xpYi9jb21wb25lbnRzL21ldGEtZm9ybS9tZXRhLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29sbGVjdGlvbi1lZGl0b3ItbGlicmFyeS9zcmMvbGliL2NvbXBvbmVudHMvbWV0YS1mb3JtL21ldGEtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWdDLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4SCxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ3hELE9BQU8sS0FBSyxDQUFDLE1BQU0sV0FBVyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQVFuRSxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQzs7Ozs7Ozs7Ozs7QUFDakMsSUFBSSxtQkFBbUIsQ0FBQztBQVF4QixNQUFNLE9BQU8saUJBQWlCO0lBYTVCLFlBQW9CLGFBQTRCLEVBQVMsV0FBd0IsRUFDOUQsZ0JBQWtDLEVBQVUsYUFBNEIsRUFDdkUsYUFBNEIsRUFBVSxjQUE4QjtRQUZwRSxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUFTLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQzlELHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFBVSxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUN2RSxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUFVLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQVg5RSxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDM0Msd0JBQW1CLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztRQUMxQyxxQkFBZ0IsR0FBUSxFQUFFLENBQUM7UUFFM0IsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFRYixtQkFBbUIsR0FBRyxnQkFBZ0IsQ0FBQztJQUN4QyxDQUFDO0lBRWQsUUFBUTtRQUNOLHVCQUF1QjtJQUN6QixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSx1QkFBdUIsQ0FBQyxFQUFFO1lBQ3JELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQy9EO0lBQ0gsQ0FBQztJQUVELGNBQWM7UUFDWixNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBQyxJQUFJLEVBQUUsU0FBUyxFQUFDLENBQUMsQ0FBQztRQUNoRyxJQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUMsSUFBSSxFQUFFLFNBQVMsRUFBQyxDQUFDLENBQUM7U0FDckU7UUFDRCxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksVUFBVSxLQUFLLElBQUksRUFBRTtZQUM3RCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztTQUN6QjthQUFNO1lBQ0wsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7U0FDMUI7UUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO1FBQ2pFLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUcsR0FBSSxFQUFDLGlCQUFpQixFQUFFLEtBQUssRUFBQyxFQUFDLENBQUM7U0FDL0U7YUFBTTtZQUNMLElBQUksQ0FBQyxhQUFhLEdBQUcsRUFBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUcsR0FBSSxFQUFDLGlCQUFpQixFQUFFLElBQUksRUFBQyxFQUFDLENBQUM7U0FDOUU7UUFDRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUFLO1FBQ25CLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMzQztJQUNILENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxLQUFLO1FBQ3RCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLE9BQU8sQ0FBQyxDQUFDO1FBQzlHLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSyxJQUFJLENBQUMsb0JBQW9CLEtBQUssS0FBSyxFQUFFO1lBQzFJLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxrQ0FBa0MsQ0FBQyxDQUFDLENBQUM7U0FDL0Y7UUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQscUJBQXFCO1FBQ25CLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLHFCQUFxQixFQUFFO1lBQy9DLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUN2QyxTQUFTLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEVBQ25DLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLGlCQUFpQixJQUFJLENBQUMsZ0JBQWdCLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQUFDLENBQzVGLENBQUMsU0FBUyxDQUFDLENBQUMsZ0JBQXFCLEVBQUUsRUFBRTtnQkFDcEMsSUFBSSxnQkFBZ0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRTtvQkFDN0MsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLFVBQVUsQ0FBQztvQkFDN0csSUFBSSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7b0JBQ3BELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTt3QkFDNUQsSUFBSSxFQUFFLE9BQU87cUJBQ2QsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO29CQUNiLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRTt3QkFDL0YsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLENBQUMsQ0FBQztvQkFDbkUsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7aUJBQzVCO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjthQUFNO1lBQ0wsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLEVBQUU7Z0JBQzVDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUN2QyxTQUFTLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEVBQ25DLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLGlCQUFpQixDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUNsRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLGdCQUFxQixFQUFFLEVBQUU7b0JBQ3BDLElBQUksZ0JBQWdCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUU7d0JBQzdDLDZHQUE2Rzt3QkFDN0csdURBQXVEO3dCQUN2RCxrRUFBa0U7d0JBQ2xFLGtCQUFrQjt3QkFDbEIsZ0JBQWdCO3dCQUNoQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUU7NEJBQy9GLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLEVBQUUsR0FBRyxDQUFDLENBQUM7d0JBQ25FLENBQUMsQ0FBQyxDQUFDO3dCQUNILElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO3FCQUM1QjtnQkFDSCxDQUFDLENBQUMsQ0FBQzthQUNKO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsbUJBQW1CO1FBQ2pCLE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxlQUFlLENBQUMsQ0FBQztRQUNqRSw2Q0FBNkM7UUFDN0MsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDbEQsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYTtZQUM5RCxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsNkJBQTZCO2dCQUM3RCxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyw2QkFBNkIsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3BGLDJDQUEyQztRQUMzQyxJQUFJLFVBQVUsR0FBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDaEosVUFBVSxHQUFHLFVBQVUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBQyxDQUFDLENBQUM7UUFDaEgsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLEVBQUU7WUFDdEQsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNoQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLFNBQVMsRUFBRSxFQUFFO2dCQUM5RCxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFO29CQUNoQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUU7d0JBQ2hDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFOzRCQUNoRSxPQUFPLFFBQVEsQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLGNBQWMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7d0JBQ3BGLENBQUMsQ0FBQyxDQUFDO3dCQUNILElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQUU7NEJBQ2pDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQzs0QkFDbkQsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQzt5QkFDNUM7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUVILENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ2hDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO2dCQUNwQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQzFDLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDL0IsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDaEMsTUFBTSx5QkFBeUIsR0FBRyxTQUFTLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDekksSUFBSSxZQUFZLENBQUMsS0FBSyxJQUFJLGFBQWEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLHlCQUF5QixFQUFFO3dCQUN4RixNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDekQsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7NEJBQ2hDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUU7Z0NBQ2hFLElBQUksQ0FBQyxZQUFZLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7b0NBQ2xELFVBQVUsRUFBRSxRQUFRLENBQUMsVUFBVTtvQ0FDL0IsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJO29DQUNuQixJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUk7b0NBQ25CLFdBQVcsRUFBRSxRQUFRLENBQUMsV0FBVztvQ0FDakMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxRQUFRO29DQUMzQixNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU07aUNBQ3hCLENBQUMsQ0FBQyxDQUFDOzZCQUNMO3dCQUNILENBQUMsQ0FBQyxDQUFDO3FCQUNKO2lCQUNGO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUVELENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDaEMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFO2dCQUVoQyxJQUFJLGNBQWMsRUFBRTtvQkFDbEIsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7d0JBQ3JDLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO3FCQUNuRDt5QkFBTSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO3dCQUM3RCxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxjQUFjLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO3dCQUNoRSxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDOzRCQUNuQyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztxQkFDdEg7aUJBQ0Y7Z0JBQ0QsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRTtvQkFDOUIsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDO29CQUNwRCxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7aUJBQ25DO2dCQUVELElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLEVBQUU7b0JBQ2hGLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLENBQUMsRUFBRTt3QkFDNUQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLGNBQWMsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDcEYsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFBRTt3QkFDL0IsS0FBSyxDQUFDLEtBQUssR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLENBQUM7cUJBQ3pDO2lCQUNGO2dCQUVELElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUU7b0JBQzVCLE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDekQsS0FBSyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQztvQkFDckgsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO29CQUMzRCxLQUFLLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztpQkFDdkQ7Z0JBRUQsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLHNCQUFzQixFQUFFO29CQUN6QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQztvQkFDbkQsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUNuRCxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO3dCQUNoSCxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLDhCQUE4QixDQUFDLENBQUMsQ0FBQztvQkFDekUsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsRUFBRTt3QkFDcEMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7cUJBQzVDO2lCQUNGO2dCQUVELElBQUksS0FBSyxDQUFDLElBQUksS0FBTSxXQUFXLEVBQUU7b0JBQy9CLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDO29CQUNuRCxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDbEQsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLEVBQUU7d0JBQzFGLEtBQUssQ0FBQyxPQUFPLEdBQUcsV0FBVyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUM7cUJBQ2pEO2lCQUNGO2dCQUVELElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxjQUFjLEVBQUU7b0JBQ2pDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLENBQUM7b0JBQ3BELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDOUUsSUFBSSxrQkFBa0IsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO3dCQUN2RCxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO3FCQUN2RTtpQkFDRjtnQkFFRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO29CQUMzQixNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3hELEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztpQkFDOUg7Z0JBRUQsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRTtvQkFDOUIsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO2lCQUNoQztnQkFDRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssY0FBYyxFQUFFO29CQUNqQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLHNCQUFzQixDQUFDLElBQUksRUFBRSxDQUFFO2lCQUN0RTtnQkFDRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFO29CQUM5QixLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFFO2lCQUN2RTtnQkFDRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFO29CQUM3QixLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUU7aUJBQ2hGO2dCQUVELElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUU7b0JBQzlCLEtBQUssQ0FBQyxPQUFPLEdBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFFO2lCQUMzRztnQkFFRCxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3BELENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUM5QyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxFQUFFO3dCQUN6QixLQUFLLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQzt3QkFDakIsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRTs0QkFDNUIsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQzt5QkFDbkM7NkJBQU07NEJBQ0wsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO3lCQUNqQztxQkFDRjt5QkFBTTt3QkFDTCxLQUFLLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQzt3QkFDakIsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRTs0QkFDNUIsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO3lCQUM3Qjs2QkFBTTs0QkFDTCxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7eUJBQ2pDO3FCQUNGO2lCQUNGO2dCQUVELElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxjQUFjLEVBQUU7b0JBQ3RDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRTt3QkFDdkIsT0FBTzs0QkFDTCxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUssSUFBSSxHQUFHOzRCQUN2QixLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUssSUFBSSxHQUFHO3lCQUN4QixDQUFDO29CQUNKLENBQUMsQ0FBQyxDQUFDO2lCQUNKO2dCQUVELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3RELENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUV2QyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbkQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBQ0QsWUFBWTtRQUNWLE9BQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxDQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN6RyxDQUFDO0lBQ0QsaUJBQWlCLENBQUMsU0FBUztRQUN6QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQztRQUNoRCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFO1lBQ3hCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxNQUFNLGNBQWMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3ZGLElBQUksY0FBYyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFBRSxTQUFTLENBQUMsRUFBRTtZQUMvRyxPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsVUFBVSxDQUFDLFNBQWMsSUFBSSxDQUFDO0lBRTlCLGVBQWUsQ0FBQyxLQUFLO1FBQ25CLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLG9CQUFvQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVELGtCQUFrQixDQUFDLEtBQUs7UUFDdEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsU0FBUyxDQUFDLE9BQU8sRUFBRSxPQUFzQixFQUFFLFNBQW9CLEVBQUUsT0FBTyxFQUFFLE1BQU07UUFDOUUsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUMzRSxTQUFTLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUN2QixNQUFNLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDcEYsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUU7Z0JBQ3JELE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNqQyxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDckIsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ3hELElBQUssWUFBWSxJQUFJLFlBQVksQ0FBQyxPQUFPLEtBQUssVUFBVSxFQUFFO29CQUN4RCxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDbEI7Z0JBQ0QsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDakI7aUJBQU07Z0JBQ0wsT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDbEI7UUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDO1FBQ0YsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELFlBQVksQ0FBQyxPQUFPLEVBQUUsT0FBc0IsRUFBRSxTQUFvQixFQUFFLE9BQU8sRUFBRSxNQUFNO1FBQ2pGLE1BQU0sUUFBUSxHQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUN6QyxTQUFTLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUN2QixJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDckIsT0FBTyxtQkFBbUIsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUN0RSxNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO29CQUMvQyxtQkFBbUIsQ0FBQyw2QkFBNkIsR0FBRyxpQkFBaUIsQ0FBQztvQkFDdEUsT0FBTyxpQkFBaUIsQ0FBQztnQkFDM0IsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNMO2lCQUFNO2dCQUNMLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2pCO1FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUNGLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBVTtRQUNyQixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxFQUFFO1lBQzNCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNoQztRQUNELE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUM3RSxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUU7WUFDN0IsSUFBSSxDQUFDLGtCQUFrQixHQUFHO2dCQUN4QixNQUFNLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO2FBQ3pDLENBQUM7U0FDSDtRQUNELElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsRUFBRTtZQUNoQyxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQztTQUM5QztRQUNELElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2hELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUM3QjtRQUVELElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNyQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDO1lBQzFELElBQUksU0FBUyxFQUFFO2dCQUNiLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO2FBQ3ZCO1NBQ0Y7UUFFRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxhQUFhLENBQUMsTUFBTTtRQUNsQixNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDZixDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUM5QixHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRztnQkFDcEIsS0FBSyxFQUFHLEVBQUU7YUFDWCxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFHRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNwQyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDckIsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNqQztJQUNILENBQUM7K0dBL1hVLGlCQUFpQjttR0FBakIsaUJBQWlCLHVPQ3BCOUIsc2RBS2U7OzRGRGVGLGlCQUFpQjtrQkFON0IsU0FBUzsrQkFDRSxlQUFlLGlCQUdWLGlCQUFpQixDQUFDLElBQUk7a1BBRzVCLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNJLGNBQWM7c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG1lcmdlLCBvZiwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwsIGZpbHRlciwgc3dpdGNoTWFwLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBUcmVlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RyZWUvdHJlZS5zZXJ2aWNlJztcbmltcG9ydCB7IEVkaXRvclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lZGl0b3IvZWRpdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgRnJhbWV3b3JrU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZyYW1ld29yay9mcmFtZXdvcmsuc2VydmljZSc7XG5pbXBvcnQgeyBIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaGVscGVyL2hlbHBlci5zZXJ2aWNlJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29uZmlnL2NvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IFRvYXN0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdG9hc3Rlci90b2FzdGVyLnNlcnZpY2UnO1xuaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudCc7XG5sZXQgZnJhbXdvcmtTZXJ2aWNlVGVtcDtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLW1ldGEtZm9ybScsXG4gIHRlbXBsYXRlVXJsOiAnLi9tZXRhLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tZXRhLWZvcm0uY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgTWV0YUZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgQElucHV0KCkgcm9vdEZvcm1Db25maWc6IGFueTtcbiAgQElucHV0KCkgdW5pdEZvcm1Db25maWc6IGFueTtcbiAgQElucHV0KCkgbm9kZU1ldGFkYXRhOiBhbnk7XG4gIEBPdXRwdXQoKSB0b29sYmFyRW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBwcml2YXRlIG9uQ29tcG9uZW50RGVzdHJveSQgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gIHB1YmxpYyBmcmFtZXdvcmtEZXRhaWxzOiBhbnkgPSB7fTtcbiAgcHVibGljIGZvcm1GaWVsZFByb3BlcnRpZXM6IGFueTtcbiAgcHVibGljIHNob3dBcHBJY29uID0gZmFsc2U7XG4gIHB1YmxpYyBhcHBJY29uQ29uZmlnOiBhbnk7XG4gIHB1YmxpYyBhcHBJY29uOiBhbnk7XG4gIHB1YmxpYyBwcmV2aW91c1NodWZmbGVWYWx1ZTogYm9vbGVhbjtcbiAgcHVibGljIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVkaXRvclNlcnZpY2U6IEVkaXRvclNlcnZpY2UsIHB1YmxpYyB0cmVlU2VydmljZTogVHJlZVNlcnZpY2UsXG4gICAgICAgICAgICAgIHB1YmxpYyBmcmFtZXdvcmtTZXJ2aWNlOiBGcmFtZXdvcmtTZXJ2aWNlLCBwcml2YXRlIGhlbHBlclNlcnZpY2U6IEhlbHBlclNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSwgcHJpdmF0ZSB0b2FzdGVyU2VydmljZTogVG9hc3RlclNlcnZpY2UpIHtcbiAgICAgICAgICAgICAgICBmcmFtd29ya1NlcnZpY2VUZW1wID0gZnJhbWV3b3JrU2VydmljZTtcbiAgICAgICAgICAgICAgIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICAvLyBJbml0aWFsaXplIGNvbXBvbmVudFxuICB9XG5cbiAgbmdPbkNoYW5nZXMoKSB7XG4gICAgdGhpcy5mZXRjaEZyYW1lV29ya0RldGFpbHMoKTtcbiAgICB0aGlzLnNldEFwcEljb25EYXRhKCk7XG4gICAgaWYgKF8uaGFzKHRoaXMubm9kZU1ldGFkYXRhLCAnZGF0YS5tZXRhZGF0YS5zaHVmZmxlJykpIHtcbiAgICAgIHRoaXMuc2V0U2h1ZmZsZVZhbHVlKHRoaXMubm9kZU1ldGFkYXRhLmRhdGEubWV0YWRhdGEuc2h1ZmZsZSk7XG4gICAgfVxuICB9XG5cbiAgc2V0QXBwSWNvbkRhdGEoKSB7XG4gICAgY29uc3QgaXNSb290Tm9kZSA9IF8uZ2V0KHRoaXMubm9kZU1ldGFkYXRhLCAnZGF0YS5yb290Jyk7XG4gICAgdGhpcy5hcHBJY29uQ29uZmlnID0gXy5maW5kKF8uZmxhdHRlbihfLm1hcCh0aGlzLnJvb3RGb3JtQ29uZmlnLCAnZmllbGRzJykpLCB7Y29kZTogJ2FwcEljb24nfSk7XG4gICAgaWYoXy5pc1VuZGVmaW5lZCh0aGlzLmFwcEljb25Db25maWcpKSB7XG4gICAgICB0aGlzLmFwcEljb25Db25maWcgPSBfLmZpbmQodGhpcy5yb290Rm9ybUNvbmZpZywge2NvZGU6ICdhcHBJY29uJ30pO1xuICAgIH1cbiAgICBpZiAoIV8uaXNVbmRlZmluZWQodGhpcy5hcHBJY29uQ29uZmlnKSAmJiBpc1Jvb3ROb2RlID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnNob3dBcHBJY29uID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93QXBwSWNvbiA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmFwcEljb24gPSBfLmdldCh0aGlzLm5vZGVNZXRhZGF0YSwgJ2RhdGEubWV0YWRhdGEuYXBwSWNvbicpO1xuICAgIGlmICh0aGlzLmlzUmV2aWV3TW9kZSgpKSB7XG4gICAgICB0aGlzLmFwcEljb25Db25maWcgPSB7Li4udGhpcy5hcHBJY29uQ29uZmlnICwgLi4uIHtpc0FwcEljb25FZGl0YWJsZTogZmFsc2V9fTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hcHBJY29uQ29uZmlnID0gey4uLnRoaXMuYXBwSWNvbkNvbmZpZyAsIC4uLiB7aXNBcHBJY29uRWRpdGFibGU6IHRydWV9fTtcbiAgICB9XG4gICAgY29uc3QgaWZFZGl0YWJsZSA9IHRoaXMuaWZGaWVsZElzRWRpdGFibGUoJ2FwcEljb24nKTtcbiAgfVxuXG4gIHNldFNodWZmbGVWYWx1ZSh2YWx1ZSkge1xuICAgIGlmIChfLmlzQm9vbGVhbih2YWx1ZSkpIHtcbiAgICAgIHRoaXMuaGVscGVyU2VydmljZS5zZXRTaHVmZmxlVmFsdWUodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHNob3dTaHVmZmxlTWVzc2FnZShldmVudCkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5oZWxwZXJTZXJ2aWNlLnNodWZmbGVWYWx1ZS5zdWJzY3JpYmUoc2h1ZmZsZSA9PiB0aGlzLnByZXZpb3VzU2h1ZmZsZVZhbHVlID0gc2h1ZmZsZSk7XG4gICAgaWYgKF8uaXNCb29sZWFuKGV2ZW50LnNodWZmbGUpICYmIGV2ZW50LnNodWZmbGUgPT09IHRydWUgJiYgXy5pc0Jvb2xlYW4odGhpcy5wcmV2aW91c1NodWZmbGVWYWx1ZSkgJiYgIHRoaXMucHJldmlvdXNTaHVmZmxlVmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLnRvYXN0ZXJTZXJ2aWNlLnNpbXBsZUluZm8oXy5nZXQodGhpcy5jb25maWdTZXJ2aWNlLCAnbGFiZWxDb25maWcubGJsLnNodWZmbGVPbk1lc3NhZ2UnKSk7XG4gICAgfVxuICAgIHRoaXMuc2V0U2h1ZmZsZVZhbHVlKGV2ZW50LnNodWZmbGUpO1xuICB9XG5cbiAgZmV0Y2hGcmFtZVdvcmtEZXRhaWxzKCkge1xuICAgIGlmICh0aGlzLmZyYW1ld29ya1NlcnZpY2Uub3JnYW5pc2F0aW9uRnJhbWV3b3JrKSB7XG4gICAgICB0aGlzLmZyYW1ld29ya1NlcnZpY2UuZnJhbWV3b3JrRGF0YSQucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMub25Db21wb25lbnREZXN0cm95JCksXG4gICAgICAgIGZpbHRlcihkYXRhID0+IF8uZ2V0KGRhdGEsIGBmcmFtZXdvcmtkYXRhLiR7dGhpcy5mcmFtZXdvcmtTZXJ2aWNlLm9yZ2FuaXNhdGlvbkZyYW1ld29ya31gKSlcbiAgICAgICkuc3Vic2NyaWJlKChmcmFtZXdvcmtEZXRhaWxzOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGZyYW1ld29ya0RldGFpbHMgJiYgIWZyYW1ld29ya0RldGFpbHMuZXJyKSB7XG4gICAgICAgICAgY29uc3QgZnJhbWV3b3JrRGF0YSA9IGZyYW1ld29ya0RldGFpbHMuZnJhbWV3b3JrZGF0YVt0aGlzLmZyYW1ld29ya1NlcnZpY2Uub3JnYW5pc2F0aW9uRnJhbWV3b3JrXS5jYXRlZ29yaWVzO1xuICAgICAgICAgIHRoaXMuZnJhbWV3b3JrRGV0YWlscy5mcmFtZXdvcmtEYXRhID0gZnJhbWV3b3JrRGF0YTtcbiAgICAgICAgICB0aGlzLmZyYW1ld29ya0RldGFpbHMudG9waWNMaXN0ID0gXy5nZXQoXy5maW5kKGZyYW1ld29ya0RhdGEsIHtcbiAgICAgICAgICAgIGNvZGU6ICd0b3BpYydcbiAgICAgICAgICB9KSwgJ3Rlcm1zJyk7XG4gICAgICAgICAgdGhpcy5mcmFtZXdvcmtEZXRhaWxzLnRhcmdldEZyYW1ld29ya3MgPSBfLmZpbHRlcihmcmFtZXdvcmtEZXRhaWxzLmZyYW1ld29ya2RhdGEsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gXy5pbmNsdWRlcyh0aGlzLmZyYW1ld29ya1NlcnZpY2UudGFyZ2V0RnJhbWV3b3JrSWRzLCBrZXkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuYXR0YWNoRGVmYXVsdFZhbHVlcygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuZnJhbWV3b3JrU2VydmljZS50YXJnZXRGcmFtZXdvcmtJZHMpIHtcbiAgICAgICAgdGhpcy5mcmFtZXdvcmtTZXJ2aWNlLmZyYW1ld29ya0RhdGEkLnBpcGUoXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMub25Db21wb25lbnREZXN0cm95JCksXG4gICAgICAgICAgZmlsdGVyKGRhdGEgPT4gXy5nZXQoZGF0YSwgYGZyYW1ld29ya2RhdGEuJHtfLmZpcnN0KHRoaXMuZnJhbWV3b3JrU2VydmljZS50YXJnZXRGcmFtZXdvcmtJZHMpfWApKVxuICAgICAgICApLnN1YnNjcmliZSgoZnJhbWV3b3JrRGV0YWlsczogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGZyYW1ld29ya0RldGFpbHMgJiYgIWZyYW1ld29ya0RldGFpbHMuZXJyKSB7XG4gICAgICAgICAgICAvLyBjb25zdCBmcmFtZXdvcmtEYXRhID0gZnJhbWV3b3JrRGV0YWlscy5mcmFtZXdvcmtkYXRhW3RoaXMuZnJhbWV3b3JrU2VydmljZS50YXJnZXRGcmFtZXdvcmtJZHNdLmNhdGVnb3JpZXM7XG4gICAgICAgICAgICAvLyB0aGlzLmZyYW1ld29ya0RldGFpbHMuZnJhbWV3b3JrRGF0YSA9IGZyYW1ld29ya0RhdGE7XG4gICAgICAgICAgICAvLyB0aGlzLmZyYW1ld29ya0RldGFpbHMudG9waWNMaXN0ID0gXy5nZXQoXy5maW5kKGZyYW1ld29ya0RhdGEsIHtcbiAgICAgICAgICAgIC8vICAgY29kZTogJ3RvcGljJ1xuICAgICAgICAgICAgLy8gfSksICd0ZXJtcycpO1xuICAgICAgICAgICAgdGhpcy5mcmFtZXdvcmtEZXRhaWxzLnRhcmdldEZyYW1ld29ya3MgPSBfLmZpbHRlcihmcmFtZXdvcmtEZXRhaWxzLmZyYW1ld29ya2RhdGEsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBfLmluY2x1ZGVzKHRoaXMuZnJhbWV3b3JrU2VydmljZS50YXJnZXRGcmFtZXdvcmtJZHMsIGtleSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuYXR0YWNoRGVmYXVsdFZhbHVlcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXR0YWNoRGVmYXVsdFZhbHVlcygpIHtcbiAgICBjb25zdCBtZXRhRGF0YUZpZWxkcyA9IF8uZ2V0KHRoaXMubm9kZU1ldGFkYXRhLCAnZGF0YS5tZXRhZGF0YScpO1xuICAgIC8vIGlmIChfLmlzRW1wdHkobWV0YURhdGFGaWVsZHMpKSB7IHJldHVybjsgfVxuICAgIGNvbnN0IGlzUm9vdCA9IF8uZ2V0KG1ldGFEYXRhRmllbGRzLCAnZGF0YS5yb290Jyk7XG4gICAgY29uc3QgY2F0ZWdvcnlNYXN0ZXJMaXN0ID0gdGhpcy5mcmFtZXdvcmtEZXRhaWxzLmZyYW1ld29ya0RhdGEgfHxcbiAgICAhaXNSb290ICYmIHRoaXMuZnJhbWV3b3JrU2VydmljZS5zZWxlY3RlZE9yZ2FuaXNhdGlvbkZyYW1ld29yayAmJlxuICAgICBfLmdldCh0aGlzLmZyYW1ld29ya1NlcnZpY2Uuc2VsZWN0ZWRPcmdhbmlzYXRpb25GcmFtZXdvcmssICdmcmFtZXdvcmsuY2F0ZWdvcmllcycpO1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgICBsZXQgZm9ybUNvbmZpZzogYW55ID0gKF8uZ2V0KG1ldGFEYXRhRmllbGRzLCAndmlzaWJpbGl0eScpID09PSAnRGVmYXVsdCcpID8gXy5jbG9uZURlZXAodGhpcy5yb290Rm9ybUNvbmZpZykgOiBfLmNsb25lRGVlcCh0aGlzLnVuaXRGb3JtQ29uZmlnKTtcbiAgICBmb3JtQ29uZmlnID0gZm9ybUNvbmZpZyAmJiBfLmhhcyhfLmZpcnN0KGZvcm1Db25maWcpLCAnZmllbGRzJykgPyBmb3JtQ29uZmlnIDogW3tuYW1lOiAnJywgZmllbGRzOiBmb3JtQ29uZmlnfV07XG4gICAgaWYgKCFfLmlzRW1wdHkodGhpcy5mcmFtZXdvcmtEZXRhaWxzLnRhcmdldEZyYW1ld29ya3MpKSB7XG4gICAgICBjb25zdCBmaWVsZFRlcm1zTWFwID0gbmV3IE1hcCgpO1xuICAgICAgXy5mb3JFYWNoKHRoaXMuZnJhbWV3b3JrRGV0YWlscy50YXJnZXRGcmFtZXdvcmtzLCAoZnJhbWV3b3JrKSA9PiB7XG4gICAgICAgIF8uZm9yRWFjaChmb3JtQ29uZmlnLCAoc2VjdGlvbikgPT4ge1xuICAgICAgICAgIF8uZm9yRWFjaChzZWN0aW9uLmZpZWxkcywgZmllbGQgPT4ge1xuICAgICAgICAgICAgY29uc3QgZnJhbWV3b3JrQ2F0ZWdvcnkgPSBfLmZpbmQoZnJhbWV3b3JrLmNhdGVnb3JpZXMsIGNhdGVnb3J5ID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNhdGVnb3J5LmNvZGUgPT09IGZpZWxkLnNvdXJjZUNhdGVnb3J5ICYmIF8uaW5jbHVkZXMoZmllbGQuY29kZSwgJ3RhcmdldCcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIV8uaXNFbXB0eShmcmFtZXdvcmtDYXRlZ29yeSkpIHtcbiAgICAgICAgICAgICAgZmllbGQudGVybXMgPSBfLmNsb25lRGVlcChmcmFtZXdvcmtDYXRlZ29yeS50ZXJtcyk7XG4gICAgICAgICAgICAgIGZpZWxkVGVybXNNYXAuc2V0KGZpZWxkLmNvZGUsIGZpZWxkLnRlcm1zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgXy5mb3JFYWNoKGZvcm1Db25maWcsIChzZWN0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IGZpZWxkcyA9IHNlY3Rpb24uZmllbGRzIHx8IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50RmllbGQgPSBmaWVsZHNbaV07XG4gICAgICAgICAgY29uc3QgbmV4dEZpZWxkID0gZmllbGRzW2kgKyAxXTtcbiAgICAgICAgICBjb25zdCBuZXh0RmllbGREZXBlbmRzT25DdXJyZW50ID0gbmV4dEZpZWxkLmRlcGVuZHMgJiYgQXJyYXkuaXNBcnJheShuZXh0RmllbGQuZGVwZW5kcykgJiYgbmV4dEZpZWxkLmRlcGVuZHMuaW5jbHVkZXMoY3VycmVudEZpZWxkLmNvZGUpO1xuICAgICAgICAgIGlmIChjdXJyZW50RmllbGQudGVybXMgJiYgZmllbGRUZXJtc01hcC5oYXMobmV4dEZpZWxkLmNvZGUpICYmIG5leHRGaWVsZERlcGVuZHNPbkN1cnJlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHRGaWVsZFRlcm1zID0gZmllbGRUZXJtc01hcC5nZXQobmV4dEZpZWxkLmNvZGUpO1xuICAgICAgICAgICAgY3VycmVudEZpZWxkLnRlcm1zLmZvckVhY2godGVybSA9PiB7XG4gICAgICAgICAgICAgIGlmICh0ZXJtICYmICghdGVybS5hc3NvY2lhdGlvbnMgfHwgXy5pc0VtcHR5KHRlcm0uYXNzb2NpYXRpb25zKSkpIHsgIFxuICAgICAgICAgICAgICAgIHRlcm0uYXNzb2NpYXRpb25zID0gbmV4dEZpZWxkVGVybXMubWFwKG5leHRUZXJtID0+ICh7XG4gICAgICAgICAgICAgICAgICBpZGVudGlmaWVyOiBuZXh0VGVybS5pZGVudGlmaWVyLFxuICAgICAgICAgICAgICAgICAgY29kZTogbmV4dFRlcm0uY29kZSxcbiAgICAgICAgICAgICAgICAgIG5hbWU6IG5leHRUZXJtLm5hbWUsXG4gICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogbmV4dFRlcm0uZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgICBjYXRlZ29yeTogbmV4dFRlcm0uY2F0ZWdvcnksXG4gICAgICAgICAgICAgICAgICBzdGF0dXM6IG5leHRUZXJtLnN0YXR1c1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBfLmZvckVhY2goZm9ybUNvbmZpZywgKHNlY3Rpb24pID0+IHtcbiAgICAgIF8uZm9yRWFjaChzZWN0aW9uLmZpZWxkcywgZmllbGQgPT4ge1xuXG4gICAgICAgIGlmIChtZXRhRGF0YUZpZWxkcykge1xuICAgICAgICAgIGlmIChfLmhhcyhtZXRhRGF0YUZpZWxkcywgZmllbGQuY29kZSkpIHtcbiAgICAgICAgICAgIGZpZWxkLmRlZmF1bHQgPSBfLmdldChtZXRhRGF0YUZpZWxkcywgZmllbGQuY29kZSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChfLmluY2x1ZGVzKFsnbWF4VGltZScsICd3YXJuaW5nVGltZSddLCBmaWVsZC5jb2RlKSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBfLmdldChtZXRhRGF0YUZpZWxkcywgYHRpbWVMaW1pdHMuJHtmaWVsZC5jb2RlfWApO1xuICAgICAgICAgICAgZmllbGQuZGVmYXVsdCA9ICFfLmlzRW1wdHkodmFsdWUpID9cbiAgICAgICAgICAgIG1vbWVudC51dGMobW9tZW50LmR1cmF0aW9uKHZhbHVlLCAnc2Vjb25kcycpLmFzTWlsbGlzZWNvbmRzKCkpLmZvcm1hdCh0aGlzLmhlbHBlclNlcnZpY2UuZ2V0VGltZXJGb3JtYXQoZmllbGQpKSA6ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZmllbGQuY29kZSA9PT0gJ2ZyYW1ld29yaycpIHtcbiAgICAgICAgICBmaWVsZC5yYW5nZSA9IHRoaXMuZnJhbWV3b3JrU2VydmljZS5mcmFtZXdvcmtWYWx1ZXM7XG4gICAgICAgICAgZmllbGQub3B0aW9ucyA9IHRoaXMuZ2V0RnJhbWV3b3JrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFfLmluY2x1ZGVzKGZpZWxkLmRlcGVuZHMsICdmcmFtZXdvcmsnKSAmJiAhXy5pbmNsdWRlcyhmaWVsZC5jb2RlLCAndGFyZ2V0JykpIHtcbiAgICAgICAgICBjb25zdCBmcmFtZXdvcmtDYXRlZ29yeSA9IF8uZmluZChjYXRlZ29yeU1hc3Rlckxpc3QsIGNhdGVnb3J5ID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIChjYXRlZ29yeS5jb2RlID09PSBmaWVsZC5zb3VyY2VDYXRlZ29yeSB8fCBjYXRlZ29yeS5jb2RlID09PSBmaWVsZC5jb2RlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAoIV8uaXNFbXB0eShmcmFtZXdvcmtDYXRlZ29yeSkpIHtcbiAgICAgICAgICAgICAgZmllbGQudGVybXMgPSBmcmFtZXdvcmtDYXRlZ29yeS50ZXJtcztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmllbGQuY29kZSA9PT0gJ2xpY2Vuc2UnKSB7XG4gICAgICAgICAgY29uc3QgZGVmYXVsdExpY2Vuc2UgPSBfLmdldChtZXRhRGF0YUZpZWxkcywgZmllbGQuY29kZSk7XG4gICAgICAgICAgZmllbGQuZGVmYXVsdCA9ICFfLmlzRW1wdHkoZGVmYXVsdExpY2Vuc2UpID8gZGVmYXVsdExpY2Vuc2UgOiB0aGlzLmVkaXRvclNlcnZpY2UuZWRpdG9yQ29uZmlnLmNvbnRleHQuZGVmYXVsdExpY2Vuc2U7XG4gICAgICAgICAgY29uc3QgbGljZW5zZXMgPSB0aGlzLmhlbHBlclNlcnZpY2UuZ2V0QXZhaWxhYmxlTGljZW5zZXMoKTtcbiAgICAgICAgICBmaWVsZC5yYW5nZSA9IGxpY2Vuc2VzID8gXy5tYXAobGljZW5zZXMsICduYW1lJykgOiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWVsZC5jb2RlID09PSAnYWRkaXRpb25hbENhdGVnb3JpZXMnKSB7XG4gICAgICAgICAgY29uc3QgY2hhbm5lbEluZm8gPSB0aGlzLmhlbHBlclNlcnZpY2UuY2hhbm5lbEluZm87XG4gICAgICAgICAgY29uc3QgYWRkaXRpb25hbENhdGVnb3JpZXMgPSBfLnVuaXEoXy5nZXQoY2hhbm5lbEluZm8sXG4gICAgICAgICAgICBgJHt0aGlzLmNvbmZpZ1NlcnZpY2UuY2F0ZWdvcnlDb25maWcuYWRkaXRpb25hbENhdGVnb3JpZXNbdGhpcy5lZGl0b3JTZXJ2aWNlLmVkaXRvckNvbmZpZy5jb25maWcub2JqZWN0VHlwZV19YCkgfHxcbiAgICAgICAgICAgXy5nZXQodGhpcy5lZGl0b3JTZXJ2aWNlLmVkaXRvckNvbmZpZywgJ2NvbnRleHQuYWRkaXRpb25hbENhdGVnb3JpZXMnKSk7XG4gICAgICAgICAgaWYgKCFfLmlzRW1wdHkoYWRkaXRpb25hbENhdGVnb3JpZXMpKSB7XG4gICAgICAgICAgICBmaWVsZC5yYW5nZSA9IF8udW5pcShhZGRpdGlvbmFsQ2F0ZWdvcmllcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpZWxkLmNvZGUgID09PSAnY29weXJpZ2h0Jykge1xuICAgICAgICAgIGNvbnN0IGNoYW5uZWxEYXRhID0gdGhpcy5oZWxwZXJTZXJ2aWNlLmNoYW5uZWxJbmZvO1xuICAgICAgICAgIGZpZWxkLmRlZmF1bHQgPSBfLmdldChtZXRhRGF0YUZpZWxkcywgZmllbGQuY29kZSk7XG4gICAgICAgICAgaWYgKF8uaXNFbXB0eShmaWVsZC5kZWZhdWx0KSAmJiB0aGlzLmVkaXRvclNlcnZpY2UuZWRpdG9yQ29uZmlnLmNvbmZpZy5zZXREZWZhdWx0Q29weVJpZ2h0KSB7XG4gICAgICAgICAgICBmaWVsZC5kZWZhdWx0ID0gY2hhbm5lbERhdGEgJiYgY2hhbm5lbERhdGEubmFtZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmllbGQuY29kZSA9PT0gJ21heFF1ZXN0aW9ucycpIHtcbiAgICAgICAgICBjb25zdCBhY3RpdmVOb2RlID0gdGhpcy50cmVlU2VydmljZS5nZXRBY3RpdmVOb2RlKCk7XG4gICAgICAgICAgY29uc3Qgcm9vdEZpcnN0Q2hpbGROb2RlID0gdGhpcy5lZGl0b3JTZXJ2aWNlLmdldENvbnRlbnRDaGlsZHJlbnMoYWN0aXZlTm9kZSk7XG4gICAgICAgICAgaWYgKHJvb3RGaXJzdENoaWxkTm9kZSAmJiByb290Rmlyc3RDaGlsZE5vZGUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZmllbGQucmFuZ2UgPSBfLnRpbWVzKF8uc2l6ZShyb290Rmlyc3RDaGlsZE5vZGUpLCBpbmRleCA9PiBpbmRleCArIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWVsZC5jb2RlID09PSAnYXV0aG9yJykge1xuICAgICAgICAgIGNvbnN0IGRlZmF1bHRBdXRob3IgPSBfLmdldChtZXRhRGF0YUZpZWxkcywgZmllbGQuY29kZSk7XG4gICAgICAgICAgZmllbGQuZGVmYXVsdCA9ICFfLmlzRW1wdHkoZGVmYXVsdEF1dGhvcikgPyBkZWZhdWx0QXV0aG9yIDogIF8uZ2V0KHRoaXMuZWRpdG9yU2VydmljZS5lZGl0b3JDb25maWcsICdjb250ZXh0LnVzZXIuZnVsbE5hbWUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWVsZC5jb2RlID09PSAnc2hvd1RpbWVyJykge1xuICAgICAgICAgIGZpZWxkLm9wdGlvbnMgPSB0aGlzLnNob3dUaW1lcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmllbGQuY29kZSA9PT0gJ2luc3RydWN0aW9ucycpIHtcbiAgICAgICAgICBmaWVsZC5kZWZhdWx0ID0gXy5nZXQobWV0YURhdGFGaWVsZHMsICdpbnN0cnVjdGlvbnMuZGVmYXVsdCcpIHx8ICcnIDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmllbGQuY29kZSA9PT0gJ3NldFBlcmlvZCcpIHtcbiAgICAgICAgICBmaWVsZC5kZWZhdWx0ID0gIV8uaXNFbXB0eShtZXRhRGF0YUZpZWxkcywgJ2VuZERhdGUnKSA/ICdZZXMnIDogJ05vJyA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpZWxkLmNvZGUgPT09ICdhbGxvd0VDTScpIHtcbiAgICAgICAgICBmaWVsZC5kZWZhdWx0ID0gXy5nZXQobWV0YURhdGFGaWVsZHMsICdyZWNvcmRlZEJ5JykgIT09ICdTZWxmJyA/ICdZZXMnIDogJ05vJyA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmllbGQuY29kZSA9PT0gJ2luc3RhbmNlcycpIHtcbiAgICAgICAgICBmaWVsZC5kZWZhdWx0ID0gICFfLmlzRW1wdHkobWV0YURhdGFGaWVsZHMsICdpbnN0YW5jZXMnKSA/IF8uZ2V0KG1ldGFEYXRhRmllbGRzLCAnaW5zdGFuY2VzLmxhYmVsJykgOiAnJyA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKF8uaXNFbXB0eShmaWVsZC5yYW5nZSkgfHwgXy5pc0VtcHR5KGZpZWxkLnRlcm1zKSkgJiZcbiAgICAgICAgICAhZmllbGQuZWRpdGFibGUgJiYgIV8uaXNFbXB0eShmaWVsZC5kZWZhdWx0KSkge1xuICAgICAgICAgIGlmIChfLmhhcyhmaWVsZCwgJ3Rlcm1zJykpIHtcbiAgICAgICAgICAgIGZpZWxkLnRlcm1zID0gW107XG4gICAgICAgICAgICBpZiAoXy5pc0FycmF5KGZpZWxkLmRlZmF1bHQpKSB7XG4gICAgICAgICAgICAgIGZpZWxkLnRlcm1zID0gZmllbGQuZGVmYXVsdCB8fCBbXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGZpZWxkLnRlcm1zLnB1c2goZmllbGQuZGVmYXVsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZpZWxkLnJhbmdlID0gW107XG4gICAgICAgICAgICBpZiAoXy5pc0FycmF5KGZpZWxkLmRlZmF1bHQpKSB7XG4gICAgICAgICAgICAgIGZpZWxkLnJhbmdlID0gZmllbGQuZGVmYXVsdDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGZpZWxkLnJhbmdlLnB1c2goZmllbGQuZGVmYXVsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpZWxkLmlucHV0VHlwZSA9PT0gJ25lc3RlZHNlbGVjdCcpIHtcbiAgICAgICAgICBfLm1hcChmaWVsZC5yYW5nZSwgdmFsID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHZhbHVlOiB2YWwudmFsdWUgfHwgdmFsLFxuICAgICAgICAgICAgICBsYWJlbDogdmFsLnZhbHVlIHx8IHZhbFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlmRWRpdGFibGUgPSB0aGlzLmlmRmllbGRJc0VkaXRhYmxlKGZpZWxkLmNvZGUpOyBcbiAgICAgICAgXy5zZXQoZmllbGQsICdlZGl0YWJsZScsIGlmRWRpdGFibGUpO1xuXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuZm9ybUZpZWxkUHJvcGVydGllcyA9IF8uY2xvbmVEZWVwKGZvcm1Db25maWcpO1xuICAgIGNvbnNvbGUubG9nKHRoaXMuZm9ybUZpZWxkUHJvcGVydGllcyk7XG4gIH1cbiAgaXNSZXZpZXdNb2RlKCkge1xuICAgIHJldHVybiAgXy5pbmNsdWRlcyhbICdyZXZpZXcnLCAncmVhZCcsICdzb3VyY2luZ3JldmlldycsICdvcmdyZXZpZXcnIF0sIHRoaXMuZWRpdG9yU2VydmljZS5lZGl0b3JNb2RlKTtcbiAgfVxuICBpZkZpZWxkSXNFZGl0YWJsZShmaWVsZENvZGUpIHtcbiAgICBjb25zdCBlZGlvck1vZGUgPSB0aGlzLmVkaXRvclNlcnZpY2UuZWRpdG9yTW9kZTtcbiAgICBpZiAoIXRoaXMuaXNSZXZpZXdNb2RlKCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBlZGl0YWJsZUZpZWxkcyA9IF8uZ2V0KHRoaXMuZWRpdG9yU2VydmljZS5lZGl0b3JDb25maWcuY29uZmlnLCAnZWRpdGFibGVGaWVsZHMnKTtcbiAgICBpZiAoZWRpdGFibGVGaWVsZHMgJiYgIV8uaXNFbXB0eShlZGl0YWJsZUZpZWxkc1tlZGlvck1vZGVdKSAmJiBfLmluY2x1ZGVzKGVkaXRhYmxlRmllbGRzW2VkaW9yTW9kZV0sIGZpZWxkQ29kZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgb3V0cHV0RGF0YShldmVudERhdGE6IGFueSkgeyB9XG5cbiAgb25TdGF0dXNDaGFuZ2VzKGV2ZW50KSB7XG4gICAgdGhpcy50b29sYmFyRW1pdHRlci5lbWl0KHsgYnV0dG9uOiAnb25Gb3JtU3RhdHVzQ2hhbmdlJywgZXZlbnQgfSk7XG4gIH1cblxuICBhcHBJY29uRGF0YUhhbmRsZXIoZXZlbnQpIHtcbiAgICB0aGlzLmFwcEljb24gPSBldmVudC51cmw7XG4gICAgdGhpcy50cmVlU2VydmljZS51cGRhdGVBcHBJY29uKGV2ZW50LnVybCk7XG4gIH1cblxuICBzaG93VGltZXIoY29udHJvbCwgZGVwZW5kczogRm9ybUNvbnRyb2xbXSwgZm9ybUdyb3VwOiBGb3JtR3JvdXAsIGxvYWRpbmcsIGxvYWRlZCkge1xuICAgIGNvbnN0IG9sZFZhbHVlID0ge307XG4gICAgY29uc3QgcmVzcG9uc2UgPSBtZXJnZSguLi5fLm1hcChkZXBlbmRzLCBkZXBlbmQgPT4gZGVwZW5kLnZhbHVlQ2hhbmdlcykpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgaXNEZXBlbmRzSW52YWxpZCA9IF8uaW5jbHVkZXMoXy5tYXAoZGVwZW5kcywgZGVwZW5kID0+IGRlcGVuZC5pbnZhbGlkKSwgdHJ1ZSk7XG4gICAgICAgIGNvbnN0IGRlcGVuZHNLZXlWYWx1ZSA9IF8ubWFwKGRlcGVuZHMsIChkZXBlbmQsIGtleSkgPT4ge1xuICAgICAgICAgIHJldHVybiB7IFtrZXldOiBkZXBlbmQudmFsdWUgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghaXNEZXBlbmRzSW52YWxpZCkge1xuICAgICAgICAgIGNvbnN0IG1heFRpbWVWYWx1ZSA9IF8uZmluZChkZXBlbmRzS2V5VmFsdWUsICdtYXhUaW1lJyk7XG4gICAgICAgICAgaWYgKCBtYXhUaW1lVmFsdWUgJiYgbWF4VGltZVZhbHVlLm1heFRpbWUgPT09ICcwMDowMDowMCcpIHtcbiAgICAgICAgICAgIHJldHVybiBvZihmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvZih0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gb2YoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG5cbiAgZ2V0RnJhbWV3b3JrKGNvbnRyb2wsIGRlcGVuZHM6IEZvcm1Db250cm9sW10sIGZvcm1Hcm91cDogRm9ybUdyb3VwLCBsb2FkaW5nLCBsb2FkZWQpIHtcbiAgICBjb25zdCByZXNwb25zZSA9ICBjb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgIGlmICghXy5pc0VtcHR5KHZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiBmcmFtd29ya1NlcnZpY2VUZW1wLmdldEZyYW1ld29ya0NhdGVnb3JpZXModmFsdWUpLnBpcGUobWFwKHJlcyA9PiB7XG4gICAgICAgICAgICBjb25zdCBmcmFtZXdvcmtSZXNwb25zZSA9IF8uZ2V0KHJlcywgJ3Jlc3VsdCcpO1xuICAgICAgICAgICAgZnJhbXdvcmtTZXJ2aWNlVGVtcC5zZWxlY3RlZE9yZ2FuaXNhdGlvbkZyYW1ld29yayA9IGZyYW1ld29ya1Jlc3BvbnNlO1xuICAgICAgICAgICAgcmV0dXJuIGZyYW1ld29ya1Jlc3BvbnNlO1xuICAgICAgICAgIH0pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgICByZXR1cm4gcmVzcG9uc2U7XG4gIH1cblxuICB2YWx1ZUNoYW5nZXMoZXZlbnQ6IGFueSkge1xuICAgIGlmIChfLmhhcyhldmVudCwgJ3NodWZmbGUnKSkge1xuICAgICAgdGhpcy5zaG93U2h1ZmZsZU1lc3NhZ2UoZXZlbnQpO1xuICAgIH1cbiAgICBjb25zdCBkYXRhID0gXy5vbWl0KGV2ZW50LCBbJ2FsbG93RUNNJywgJ2xldmVscycsICdzZXRQZXJpb2QnLCAnaW5zdGFuY2VzJ10pO1xuICAgIGlmICghXy5pc0VtcHR5KGV2ZW50Py5sZXZlbHMpKSB7XG4gICAgICBkYXRhLm91dGNvbWVEZWNsYXJhdGlvbiA9IHtcbiAgICAgICAgbGV2ZWxzOiB0aGlzLmNyZWF0ZUxlYXZlbHMoZXZlbnQubGV2ZWxzKVxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKCFfLmlzRW1wdHkoZXZlbnQ/Lmluc3RhbmNlcykpIHtcbiAgICAgIGRhdGEuaW5zdGFuY2VzID0geyBsYWJlbDogZXZlbnQ/Lmluc3RhbmNlcyB9O1xuICAgIH1cbiAgICBpZiAoIV8uaXNFbXB0eSh0aGlzLmFwcEljb24pICYmIHRoaXMuc2hvd0FwcEljb24pIHtcbiAgICAgIGRhdGEuYXBwSWNvbiA9IHRoaXMuYXBwSWNvbjtcbiAgICB9XG4gICAgXG4gICAgaWYgKHRoaXMuaXNSZXZpZXdNb2RlKCkgJiYgIWRhdGEubmFtZSkge1xuICAgICAgY29uc3Qgbm9kZVRpdGxlID0gdGhpcy5ub2RlTWV0YWRhdGE/LmRhdGE/Lm1ldGFkYXRhPy5uYW1lO1xuICAgICAgaWYgKG5vZGVUaXRsZSkge1xuICAgICAgICBkYXRhLm5hbWUgPSBub2RlVGl0bGU7XG4gICAgICB9XG4gICAgfVxuICAgICAgXG4gICAgdGhpcy50b29sYmFyRW1pdHRlci5lbWl0KHsgYnV0dG9uOiAnb25Gb3JtVmFsdWVDaGFuZ2UnLCBkYXRhIH0pO1xuICAgIHRoaXMudHJlZVNlcnZpY2UudXBkYXRlTm9kZShkYXRhKTtcbiAgfVxuXG4gIGNyZWF0ZUxlYXZlbHMobGV2ZWxzKSB7XG4gICAgY29uc3Qgb2JqID0ge307XG4gICAgXy5mb3JFYWNoKGxldmVscywgKGVsLCBpbmRleCkgPT4ge1xuICAgICAgb2JqW2BMJHtpbmRleCArIDF9YF0gPSB7XG4gICAgICAgICBsYWJlbCA6IGVsXG4gICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4gb2JqO1xuICB9XG5cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLm9uQ29tcG9uZW50RGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMub25Db21wb25lbnREZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cbn0iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiZm9ybUZpZWxkUHJvcGVydGllc1wiPlxuICA8c3BhbiBjbGFzcz1cIm1ldGEtZm9ybVwiPlxuICAgIDxsaWItY29sbGVjdGlvbi1pY29uICpuZ0lmPVwic2hvd0FwcEljb25cIiBbYXBwSWNvbl09XCJhcHBJY29uXCIgW2FwcEljb25Db25maWddPVwiYXBwSWNvbkNvbmZpZ1wiIChpY29uRW1pdHRlcik9XCJhcHBJY29uRGF0YUhhbmRsZXIoJGV2ZW50KVwiPjwvbGliLWNvbGxlY3Rpb24taWNvbj5cbiAgICA8c2ItZHluYW1pYy1mb3JtIFtjb25maWddPVwiZm9ybUZpZWxkUHJvcGVydGllc1wiIChpbml0aWFsaXplKT1cIm91dHB1dERhdGEoJGV2ZW50KVwiIChzdGF0dXNDaGFuZ2VzKT1cIm9uU3RhdHVzQ2hhbmdlcygkZXZlbnQpXCIgKHZhbHVlQ2hhbmdlcyk9XCJ2YWx1ZUNoYW5nZXMoJGV2ZW50KVwiPjwvc2ItZHluYW1pYy1mb3JtPlxuICA8L3NwYW4+XG48L25nLWNvbnRhaW5lcj4iXX0=
|