@sunbird-cb/toc 0.0.21 → 0.0.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/_collection/_common/content-toc/app-toc-content-card-v2/app-toc-content-card-v2.component.mjs +1 -61
- package/esm2022/lib/_collection/_common/content-toc/content-toc.component.mjs +1 -28
- package/esm2022/lib/components/app-toc-home-v2/app-toc-home-v2.component.mjs +1 -4
- package/esm2022/lib/services/app-toc-v2.service.mjs +1 -25
- package/esm2022/lib/services/app-toc.service.mjs +1 -230
- package/esm2022/lib/services/certificate.service.mjs +51 -9
- package/esm2022/lib/services/viewer-util.service.mjs +1 -54
- package/fesm2022/sunbird-cb-toc.mjs +50 -403
- package/fesm2022/sunbird-cb-toc.mjs.map +1 -1
- package/lib/_collection/_common/content-toc/app-toc-content-card-v2/app-toc-content-card-v2.component.d.ts.map +1 -1
- package/lib/_collection/_common/content-toc/content-toc.component.d.ts.map +1 -1
- package/lib/components/app-toc-home-v2/app-toc-home-v2.component.d.ts.map +1 -1
- package/lib/services/app-toc-v2.service.d.ts.map +1 -1
- package/lib/services/app-toc.service.d.ts +0 -52
- package/lib/services/app-toc.service.d.ts.map +1 -1
- package/lib/services/certificate.service.d.ts +4 -6
- package/lib/services/certificate.service.d.ts.map +1 -1
- package/lib/services/viewer-util.service.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1,11 +1,21 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
|
-
import { of } from 'rxjs';
|
|
3
2
|
import * as i0 from "@angular/core";
|
|
4
3
|
import * as i1 from "@angular/common/http";
|
|
5
4
|
/**
|
|
6
5
|
* Certificate Service
|
|
7
6
|
* Handles certificate-related operations
|
|
8
7
|
*/
|
|
8
|
+
const urls = {
|
|
9
|
+
HIERARCHY: 'course/v1/hierarchy',
|
|
10
|
+
LEARNER_PREFIX: '/api/',
|
|
11
|
+
PROXIES_PREFIX: '/apis/proxies/v8/',
|
|
12
|
+
VALIDATE_CERTIFICATE: 'certreg/v1/certs/validate',
|
|
13
|
+
DOWNLOAD_CERTIFICATE: (id) => `certreg/v2/certs/download/${id}`,
|
|
14
|
+
DOWNLOAD_CERTIFICATE_v2: (id) => `apis/protected/v8/cohorts/course/batch/cert/download/${id}`,
|
|
15
|
+
SEARCH_CERTIFICATE: 'certreg/v1/certs/search',
|
|
16
|
+
VALIDATE_ENROLLMENT: 'cios-enroll/v1/validation',
|
|
17
|
+
CONSENT_API: 'consent/v1/acknowledge',
|
|
18
|
+
};
|
|
9
19
|
export class CertificateService {
|
|
10
20
|
constructor(http) {
|
|
11
21
|
this.http = http;
|
|
@@ -21,7 +31,7 @@ export class CertificateService {
|
|
|
21
31
|
* Download certificate
|
|
22
32
|
*/
|
|
23
33
|
downloadCertificate(certId) {
|
|
24
|
-
return this.http.get(
|
|
34
|
+
return this.http.get(`${urls.LEARNER_PREFIX}${urls.DOWNLOAD_CERTIFICATE(certId)}`, {
|
|
25
35
|
responseType: 'blob'
|
|
26
36
|
});
|
|
27
37
|
}
|
|
@@ -41,25 +51,57 @@ export class CertificateService {
|
|
|
41
51
|
* Download certificate v2
|
|
42
52
|
*/
|
|
43
53
|
downloadCertificate_v2(certId) {
|
|
44
|
-
return this.http.get(
|
|
45
|
-
responseType: 'blob'
|
|
46
|
-
});
|
|
54
|
+
return this.http.get(`${urls.DOWNLOAD_CERTIFICATE_v2(certId)}`);
|
|
47
55
|
}
|
|
48
56
|
/**
|
|
49
57
|
* Validate enrollment eligibility
|
|
50
58
|
*/
|
|
51
|
-
validateEnrollmentEligibility(
|
|
52
|
-
|
|
59
|
+
validateEnrollmentEligibility(courseId, partnerId) {
|
|
60
|
+
const option = {
|
|
61
|
+
url: `${urls.PROXIES_PREFIX}${urls.VALIDATE_ENROLLMENT}`,
|
|
62
|
+
data: {
|
|
63
|
+
courseId,
|
|
64
|
+
partnerId,
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
return this.http.post(option.url, option.data);
|
|
53
68
|
}
|
|
54
69
|
/**
|
|
55
70
|
* Submit consent for content
|
|
56
71
|
*/
|
|
57
72
|
consentSubmit(request) {
|
|
58
|
-
return this.http.post(`${this.PROXY_SLAG_V8}/consent/v1/
|
|
73
|
+
return this.http.post(`${this.PROXY_SLAG_V8}/consent/v1/acknowledge`, request);
|
|
59
74
|
}
|
|
60
75
|
downloadCertificate_v3(certId) {
|
|
61
76
|
return this.http.get(`/apis/protected/v8/cohorts/course/batch/cert/download/${certId}`);
|
|
62
77
|
}
|
|
78
|
+
validateCertificate(data) {
|
|
79
|
+
const option = {
|
|
80
|
+
data,
|
|
81
|
+
// url: `${urls.PROXIES_PREFIX}learner/${urls.VALIDATE_CERTIFICATE}`,
|
|
82
|
+
url: `${urls.LEARNER_PREFIX}${urls.VALIDATE_CERTIFICATE}`,
|
|
83
|
+
};
|
|
84
|
+
return this.http.post(option.url, option.data);
|
|
85
|
+
}
|
|
86
|
+
searchCertificate(recipientId) {
|
|
87
|
+
const option = {
|
|
88
|
+
url: `${urls.LEARNER_PREFIX}${urls.SEARCH_CERTIFICATE}`,
|
|
89
|
+
data: {
|
|
90
|
+
request: {
|
|
91
|
+
_source: ['data.badge.issuer.name', 'pdfUrl', 'data.issuedOn', 'data.badge.name'],
|
|
92
|
+
query: {
|
|
93
|
+
bool: {
|
|
94
|
+
must: [{
|
|
95
|
+
match_phrase: { 'recipient.id': recipientId },
|
|
96
|
+
}],
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
size: 50,
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
return this.http.post(option.url, option.data);
|
|
104
|
+
}
|
|
63
105
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CertificateService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
64
106
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CertificateService, providedIn: 'root' }); }
|
|
65
107
|
}
|
|
@@ -69,4 +111,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
69
111
|
providedIn: 'root',
|
|
70
112
|
}]
|
|
71
113
|
}], ctorParameters: function () { return [{ type: i1.HttpClient }]; } });
|
|
72
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
114
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VydGlmaWNhdGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi90b2Mvc3JjL2xpYi9zZXJ2aWNlcy9jZXJ0aWZpY2F0ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUE7OztBQUkxQzs7O0dBR0c7QUFFSCxNQUFNLElBQUksR0FBRztJQUNYLFNBQVMsRUFBRSxxQkFBcUI7SUFDaEMsY0FBYyxFQUFFLE9BQU87SUFDdkIsY0FBYyxFQUFFLG1CQUFtQjtJQUNuQyxvQkFBb0IsRUFBRSwyQkFBMkI7SUFDakQsb0JBQW9CLEVBQUUsQ0FBQyxFQUFVLEVBQUUsRUFBRSxDQUFDLDZCQUE2QixFQUFFLEVBQUU7SUFDdkUsdUJBQXVCLEVBQUUsQ0FBQyxFQUFVLEVBQUUsRUFBRSxDQUFDLHdEQUF3RCxFQUFFLEVBQUU7SUFDckcsa0JBQWtCLEVBQUUseUJBQXlCO0lBQzdDLG1CQUFtQixFQUFFLDJCQUEyQjtJQUNoRCxXQUFXLEVBQUUsd0JBQXdCO0NBQ3RDLENBQUE7QUFJRCxNQUFNLE9BQU8sa0JBQWtCO0lBRzdCLFlBQW9CLElBQWdCO1FBQWhCLFNBQUksR0FBSixJQUFJLENBQVk7UUFGbkIsa0JBQWEsR0FBRyxrQkFBa0IsQ0FBQTtJQUVaLENBQUM7SUFFeEM7O09BRUc7SUFDSCxxQkFBcUIsQ0FBQyxNQUFjO1FBQ2xDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSx5QkFBeUIsTUFBTSxFQUFFLENBQUMsQ0FBQTtJQUM5RSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxtQkFBbUIsQ0FBQyxNQUFjO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxvQkFB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cG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJ1xuXG4vKipcbiAqIENlcnRpZmljYXRlIFNlcnZpY2VcbiAqIEhhbmRsZXMgY2VydGlmaWNhdGUtcmVsYXRlZCBvcGVyYXRpb25zXG4gKi9cblxuY29uc3QgdXJscyA9IHtcbiAgSElFUkFSQ0hZOiAnY291cnNlL3YxL2hpZXJhcmNoeScsXG4gIExFQVJORVJfUFJFRklYOiAnL2FwaS8nLFxuICBQUk9YSUVTX1BSRUZJWDogJy9hcGlzL3Byb3hpZXMvdjgvJyxcbiAgVkFMSURBVEVfQ0VSVElGSUNBVEU6ICdjZXJ0cmVnL3YxL2NlcnRzL3ZhbGlkYXRlJyxcbiAgRE9XTkxPQURfQ0VSVElGSUNBVEU6IChpZDogc3RyaW5nKSA9PiBgY2VydHJlZy92Mi9jZXJ0cy9kb3dubG9hZC8ke2lkfWAsXG4gIERPV05MT0FEX0NFUlRJRklDQVRFX3YyOiAoaWQ6IHN0cmluZykgPT4gYGFwaXMvcHJvdGVjdGVkL3Y4L2NvaG9ydHMvY291cnNlL2JhdGNoL2NlcnQvZG93bmxvYWQvJHtpZH1gLFxuICBTRUFSQ0hfQ0VSVElGSUNBVEU6ICdjZXJ0cmVnL3YxL2NlcnRzL3NlYXJjaCcsXG4gIFZBTElEQVRFX0VOUk9MTE1FTlQ6ICdjaW9zLWVucm9sbC92MS92YWxpZGF0aW9uJyxcbiAgQ09OU0VOVF9BUEk6ICdjb25zZW50L3YxL2Fja25vd2xlZGdlJyxcbn1cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBDZXJ0aWZpY2F0ZVNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IFBST1hZX1NMQUdfVjggPSAnL2FwaXMvcHJveGllcy92OCdcbiAgXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge31cblxuICAvKipcbiAgICogR2V0IGNlcnRpZmljYXRlIGRldGFpbHMgYnkgY2VydGlmaWNhdGUgSURcbiAgICovXG4gIGdldENlcnRpZmljYXRlRGV0YWlscyhjZXJ0SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5QUk9YWV9TTEFHX1Y4fS9jZXJ0aWZpY2F0ZXMvdjEvY2VydC8ke2NlcnRJZH1gKVxuICB9XG5cbiAgLyoqXG4gICAqIERvd25sb2FkIGNlcnRpZmljYXRlXG4gICAqL1xuICBkb3dubG9hZENlcnRpZmljYXRlKGNlcnRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxCbG9iPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoIGAke3VybHMuTEVBUk5FUl9QUkVGSVh9JHt1cmxzLkRPV05MT0FEX0NFUlRJRklDQVRFKGNlcnRJZCl9YCwge1xuICAgICAgcmVzcG9uc2VUeXBlOiAnYmxvYidcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB1c2VyIGNlcnRpZmljYXRlc1xuICAgKi9cbiAgZ2V0VXNlckNlcnRpZmljYXRlcyh1c2VySWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5QUk9YWV9TTEFHX1Y4fS9jZXJ0aWZpY2F0ZXMvdjEvdXNlci8ke3VzZXJJZH1gKVxuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmeSBjZXJ0aWZpY2F0ZVxuICAgKi9cbiAgdmVyaWZ5Q2VydGlmaWNhdGUoY2VydElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuUFJPWFlfU0xBR19WOH0vY2VydGlmaWNhdGVzL3YxL3ZlcmlmeS8ke2NlcnRJZH1gKVxuICB9XG5cbiAgLyoqXG4gICAqIERvd25sb2FkIGNlcnRpZmljYXRlIHYyXG4gICAqL1xuICBkb3dubG9hZENlcnRpZmljYXRlX3YyKGNlcnRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt1cmxzLkRPV05MT0FEX0NFUlRJRklDQVRFX3YyKGNlcnRJZCl9YClcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBlbnJvbGxtZW50IGVsaWdpYmlsaXR5XG4gICAqL1xuICB2YWxpZGF0ZUVucm9sbG1lbnRFbGlnaWJpbGl0eShjb3Vyc2VJZDogc3RyaW5nLCBwYXJ0bmVySWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3Qgb3B0aW9uID0ge1xuICAgICAgdXJsOiBgJHt1cmxzLlBST1hJRVNfUFJFRklYfSR7dXJscy5WQUxJREFURV9FTlJPTExNRU5UfWAsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGNvdXJzZUlkLFxuICAgICAgICBwYXJ0bmVySWQsXG4gICAgICB9LFxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihvcHRpb24udXJsLCBvcHRpb24uZGF0YSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJtaXQgY29uc2VudCBmb3IgY29udGVudFxuICAgKi9cbiAgY29uc2VudFN1Ym1pdChyZXF1ZXN0OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLlBST1hZX1NMQUdfVjh9L2NvbnNlbnQvdjEvYWNrbm93bGVkZ2VgLCByZXF1ZXN0KVxuICB9XG5cbiAgIGRvd25sb2FkQ2VydGlmaWNhdGVfdjMoY2VydElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAvYXBpcy9wcm90ZWN0ZWQvdjgvY29ob3J0cy9jb3Vyc2UvYmF0Y2gvY2VydC9kb3dubG9hZC8ke2NlcnRJZH1gKVxuICB9XG5cbiAgdmFsaWRhdGVDZXJ0aWZpY2F0ZShkYXRhOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IG9wdGlvbiA9IHtcbiAgICAgIGRhdGEsXG4gICAgICAvLyB1cmw6IGAke3VybHMuUFJPWElFU19QUkVGSVh9bGVhcm5lci8ke3VybHMuVkFMSURBVEVfQ0VSVElGSUNBVEV9YCxcbiAgICAgIHVybDogYCR7dXJscy5MRUFSTkVSX1BSRUZJWH0ke3VybHMuVkFMSURBVEVfQ0VSVElGSUNBVEV9YCxcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4ob3B0aW9uLnVybCwgb3B0aW9uLmRhdGEpXG4gIH1cblxuICAgIHNlYXJjaENlcnRpZmljYXRlKHJlY2lwaWVudElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IG9wdGlvbiA9IHtcbiAgICAgIHVybDogYCR7dXJscy5MRUFSTkVSX1BSRUZJWH0ke3VybHMuU0VBUkNIX0NFUlRJRklDQVRFfWAsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgICBfc291cmNlOiBbJ2RhdGEuYmFkZ2UuaXNzdWVyLm5hbWUnLCAncGRmVXJsJywgJ2RhdGEuaXNzdWVkT24nLCAnZGF0YS5iYWRnZS5uYW1lJ10sXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIGJvb2w6IHtcbiAgICAgICAgICAgICAgbXVzdDogW3tcbiAgICAgICAgICAgICAgICBtYXRjaF9waHJhc2U6IHsgJ3JlY2lwaWVudC5pZCc6IHJlY2lwaWVudElkIH0sXG4gICAgICAgICAgICAgIH1dLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNpemU6IDUwLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4ob3B0aW9uLnVybCwgb3B0aW9uLmRhdGEpXG5cbiAgfVxufVxuXG5cblxuIl19
|
|
@@ -158,14 +158,9 @@ export class ViewerUtilService {
|
|
|
158
158
|
this.http
|
|
159
159
|
.patch(`${this.API_ENDPOINTS.PROGRESS_UPDATE}/${contentId}`, req)
|
|
160
160
|
.subscribe(noop, noop);
|
|
161
|
-
console.log(`🔄 [PROGRESS UPDATE] realTimeProgressUpdate called for ${contentId}`);
|
|
162
|
-
console.log(` Status: ${req.request.contents[0].status}, Percentage: ${req.request.contents[0].completionPercentage}`);
|
|
163
|
-
console.log(` Hashmap has contentId: ${!!this.tocSvc.hashmap[contentId]}`);
|
|
164
161
|
if (this.tocSvc.hashmap[contentId]) {
|
|
165
162
|
const currentStatus = this.tocSvc.hashmap[contentId]['completionStatus'];
|
|
166
|
-
console.log(` Current completionStatus in hashmap: ${currentStatus}`);
|
|
167
163
|
if (!currentStatus || currentStatus < 2) {
|
|
168
|
-
console.log(` ✅ Updating hashmap for ${contentId}`);
|
|
169
164
|
this.tocSvc.hashmap[contentId]['completionPercentage'] = req.request.contents[0].completionPercentage;
|
|
170
165
|
this.tocSvc.hashmap[contentId]['completionStatus'] = Number(req.request.contents[0].status) || 0;
|
|
171
166
|
this.tocSvc.hashmap = { ...this.tocSvc.hashmap };
|
|
@@ -174,12 +169,6 @@ export class ViewerUtilService {
|
|
|
174
169
|
// Emit to trigger viewer component refresh for Learning Pathways
|
|
175
170
|
this.markAsCompleteSubject.next(true);
|
|
176
171
|
}
|
|
177
|
-
else {
|
|
178
|
-
console.log(` ⏭️ Skipping update - content already completed (status=${currentStatus})`);
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
else {
|
|
182
|
-
console.log(` ⚠️ ContentId ${contentId} not found in hashmap - cannot update progress`);
|
|
183
172
|
}
|
|
184
173
|
}
|
|
185
174
|
else {
|
|
@@ -377,14 +366,9 @@ export class ViewerUtilService {
|
|
|
377
366
|
this.http
|
|
378
367
|
.patch(`${this.API_ENDPOINTS.PROGRESS_UPDATE}/${contentId}`, req)
|
|
379
368
|
.subscribe(noop, noop);
|
|
380
|
-
console.log(`🔄 [PROGRESS UPDATE QUIZ] realTimeProgressUpdateQuiz called for ${contentId}`);
|
|
381
|
-
console.log(` Status: ${req.request.contents[0].status}, Percentage: ${req.request.contents[0].completionPercentage}`);
|
|
382
|
-
console.log(` Hashmap exists: ${!!this.tocSvc.hashmap}, Hashmap has contentId: ${!!(this.tocSvc.hashmap && this.tocSvc.hashmap[contentId])}`);
|
|
383
369
|
if (this.tocSvc.hashmap && this.tocSvc.hashmap[contentId] && req.request.contents[0]) {
|
|
384
370
|
const currentStatus = this.tocSvc.hashmap[contentId]['completionStatus'];
|
|
385
|
-
console.log(` Current completionStatus in hashmap: ${currentStatus}`);
|
|
386
371
|
if (!currentStatus || currentStatus < 2) {
|
|
387
|
-
console.log(` ✅ Updating hashmap for ${contentId}`);
|
|
388
372
|
this.tocSvc.hashmap[contentId]['completionPercentage'] = req.request.contents[0].completionPercentage;
|
|
389
373
|
this.tocSvc.hashmap[contentId]['completionStatus'] = Number(req.request.contents[0].status) || 0;
|
|
390
374
|
this.tocSvc.hashmap = { ...this.tocSvc.hashmap };
|
|
@@ -395,12 +379,6 @@ export class ViewerUtilService {
|
|
|
395
379
|
// Emit to trigger viewer component refresh for Learning Pathways
|
|
396
380
|
this.markAsCompleteSubject.next(true);
|
|
397
381
|
}
|
|
398
|
-
else {
|
|
399
|
-
console.log(` ⏭️ Skipping update - content already completed (status=${currentStatus})`);
|
|
400
|
-
}
|
|
401
|
-
}
|
|
402
|
-
else {
|
|
403
|
-
console.log(` ⚠️ Cannot update hashmap - hashmap or contentId missing`);
|
|
404
382
|
}
|
|
405
383
|
}
|
|
406
384
|
else {
|
|
@@ -464,15 +442,6 @@ export class ViewerUtilService {
|
|
|
464
442
|
return this.http.get(`/apis/proxies/v8/action/content/v3/hierarchy/${id}?mode=${type}`);
|
|
465
443
|
}
|
|
466
444
|
updateContentHashMapForAssesstent(contentId, contentProgress) {
|
|
467
|
-
console.log('📊 [UPDATE HASHMAP] Updating assessment in hashmap:', {
|
|
468
|
-
contentId,
|
|
469
|
-
incomingProgress: contentProgress,
|
|
470
|
-
currentHashmapData: this.tocSvc.hashmap[contentId] ? {
|
|
471
|
-
completionPercentage: this.tocSvc.hashmap[contentId]['completionPercentage'],
|
|
472
|
-
completionStatus: this.tocSvc.hashmap[contentId]['completionStatus'],
|
|
473
|
-
status: this.tocSvc.hashmap[contentId]['status']
|
|
474
|
-
} : 'not found'
|
|
475
|
-
});
|
|
476
445
|
if (this.tocSvc.hashmap[contentId]) {
|
|
477
446
|
const currentStatus = this.tocSvc.hashmap[contentId]['completionStatus'] || 0;
|
|
478
447
|
const newStatus = Number(contentProgress.status) || 0;
|
|
@@ -481,29 +450,15 @@ export class ViewerUtilService {
|
|
|
481
450
|
this.tocSvc.hashmap[contentId]['completionPercentage'] = contentProgress.completionPercentage;
|
|
482
451
|
this.tocSvc.hashmap[contentId]['completionStatus'] = newStatus;
|
|
483
452
|
this.tocSvc.hashmap[contentId]['status'] = newStatus;
|
|
484
|
-
console.log('✅ [UPDATE HASHMAP] Updated assessment:', {
|
|
485
|
-
contentId,
|
|
486
|
-
name: this.tocSvc.hashmap[contentId]['name'],
|
|
487
|
-
completionPercentage: contentProgress.completionPercentage,
|
|
488
|
-
completionStatus: newStatus,
|
|
489
|
-
status: newStatus
|
|
490
|
-
});
|
|
491
453
|
// Create new hashmap reference for Angular change detection
|
|
492
454
|
this.tocSvc.hashmap = { ...this.tocSvc.hashmap };
|
|
493
455
|
// Trigger milestone lock recomputation - it will emit hashmapUpdated with both progress and lock changes
|
|
494
456
|
if (this.tocSvc.triggerMilestoneLockUpdate) {
|
|
495
|
-
console.log('🔄 [UPDATE HASHMAP] Triggering milestone lock update after assessment update');
|
|
496
457
|
this.tocSvc.triggerMilestoneLockUpdate();
|
|
497
458
|
}
|
|
498
459
|
// Emit to trigger viewer component refresh for Learning Pathways
|
|
499
460
|
this.markAsCompleteSubject.next(true);
|
|
500
461
|
}
|
|
501
|
-
else {
|
|
502
|
-
console.log('ℹ️ [UPDATE HASHMAP] Skipping update - already complete or lower status');
|
|
503
|
-
}
|
|
504
|
-
}
|
|
505
|
-
else {
|
|
506
|
-
console.log('⚠️ [UPDATE HASHMAP] Content not found in hashmap:', contentId);
|
|
507
462
|
}
|
|
508
463
|
}
|
|
509
464
|
getFormById(formId) {
|
|
@@ -584,8 +539,6 @@ export class ViewerUtilService {
|
|
|
584
539
|
// Emit to trigger viewer component refresh for Learning Pathways
|
|
585
540
|
this.markAsCompleteSubject.next(true);
|
|
586
541
|
}
|
|
587
|
-
// console.log('Updated hashmap:', this.tocSvc.hashmap)
|
|
588
|
-
// console.log('this.tocSvc.hashmap---', this.tocSvc.hashmap)
|
|
589
542
|
}
|
|
590
543
|
else {
|
|
591
544
|
req = {};
|
|
@@ -619,13 +572,10 @@ export class ViewerUtilService {
|
|
|
619
572
|
.patch(`${this.API_ENDPOINTS.PRE_ASSESSMENT_STATE_UPDATE}`, req)
|
|
620
573
|
.subscribe(noop, noop);
|
|
621
574
|
}
|
|
622
|
-
console.log('🎯 [PRE-ASSESSMENT QUIZ] Updating progress for:', contentId);
|
|
623
|
-
console.log(' Status:', status, 'Completion:', req.request.contents[0].completionPercentage);
|
|
624
575
|
// Update hashmap - create entry if it doesn't exist
|
|
625
576
|
if (this.tocSvc.hashmap) {
|
|
626
577
|
if (!this.tocSvc.hashmap[contentId]) {
|
|
627
578
|
// Create new entry for pre-assessment if it doesn't exist
|
|
628
|
-
console.log(' Creating new hashmap entry for pre-assessment');
|
|
629
579
|
this.tocSvc.hashmap[contentId] = {
|
|
630
580
|
identifier: contentId,
|
|
631
581
|
completionPercentage: req.request.contents[0].completionPercentage,
|
|
@@ -636,16 +586,13 @@ export class ViewerUtilService {
|
|
|
636
586
|
}
|
|
637
587
|
else {
|
|
638
588
|
// Update existing entry
|
|
639
|
-
console.log(' Updating existing hashmap entry');
|
|
640
589
|
this.tocSvc.hashmap[contentId]['completionPercentage'] = req.request.contents[0].completionPercentage;
|
|
641
590
|
this.tocSvc.hashmap[contentId]['completionStatus'] = Number(req.request.contents[0].status) || 0;
|
|
642
591
|
this.tocSvc.hashmap[contentId]['status'] = Number(req.request.contents[0].status) || 0;
|
|
643
592
|
}
|
|
644
|
-
console.log(' Hashmap entry after update:', this.tocSvc.hashmap[contentId]);
|
|
645
593
|
this.tocSvc.hashmap = { ...this.tocSvc.hashmap };
|
|
646
594
|
// ALWAYS trigger milestone lock recomputation when pre-assessment completes
|
|
647
595
|
// This ensures milestone 1 unlocks immediately after pre-assessment completion
|
|
648
|
-
console.log('🔄 [PRE-ASSESSMENT QUIZ] Triggering milestone lock update');
|
|
649
596
|
if (this.tocSvc.triggerMilestoneLockUpdate) {
|
|
650
597
|
this.tocSvc.triggerMilestoneLockUpdate();
|
|
651
598
|
}
|
|
@@ -677,4 +624,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
677
624
|
type: Inject,
|
|
678
625
|
args: ['environment']
|
|
679
626
|
}] }]; } });
|
|
680
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld2VyLXV0aWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi90b2Mvc3JjL2xpYi9zZXJ2aWNlcy92aWV3ZXItdXRpbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUVsRCxPQUFPLEVBQUUsSUFBSSxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUNoRCxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUE7Ozs7Ozs7QUFRekIsTUFBTSxPQUFPLGlCQUFpQjtJQW9CNUIsWUFDVSxJQUFnQixFQUNoQixhQUFvQyxFQUNwQyxVQUFnQyxFQUNoQyxNQUFxQixFQUNyQixPQUE2QixFQUM3QixjQUFzQyxFQUN0QyxhQUFnQyxFQUNULFdBQWdCO1FBUHZDLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsa0JBQWEsR0FBYixhQUFhLENBQXVCO1FBQ3BDLGVBQVUsR0FBVixVQUFVLENBQXNCO1FBQ2hDLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsWUFBTyxHQUFQLE9BQU8sQ0FBc0I7UUFDN0IsbUJBQWMsR0FBZCxjQUFjLENBQXdCO1FBQ3RDLGtCQUFhLEdBQWIsYUFBYSxDQUFtQjtRQUNULGdCQUFXLEdBQVgsV0FBVyxDQUFLO1FBM0JqRCxrQkFBYSxHQUFHO1lBQ2QsV0FBVyxFQUFFLHNDQUFzQztZQUNuRCxzRUFBc0U7WUFDdEUsZUFBZSxFQUFFLGtDQUFrQztZQUNuRCxrQkFBa0IsRUFBRSxxQ0FBcUM7WUFDekQsYUFBYSxFQUFFLENBQUMsTUFBYyxFQUFFLEVBQUUsQ0FBQywrQ0FBK0MsTUFBTSxFQUFFO1lBQzFGLFdBQVcsRUFBRSwwQ0FBMEM7WUFDdkQsdUZBQXVGO1lBQ3ZG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Q0FBQTtJQUNWLENBQUM7K0dBN3NCVSxpQkFBaUIsNlBBNEJsQixhQUFhO21IQTVCWixpQkFBaUIsY0FGaEIsTUFBTTs7NEZBRVAsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBNkJJLE1BQU07MkJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbmZpZ3VyYXRpb25zU2VydmljZSwgRG9tYWluQ29uZlNlcnZpY2UgfSBmcm9tICdAc3VuYmlyZC1jYi91dGlscy12MidcbmltcG9ydCB7IE5zQ29udGVudCB9IGZyb20gJy4uL19zZXJ2aWNlcy93aWRnZXQtY29udGVudC5tb2RlbCdcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnXG5pbXBvcnQgeyBub29wLCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcydcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcydcbmltcG9ydCB7IEFwcFRvY1NlcnZpY2UgfSBmcm9tICcuL2FwcC10b2Muc2VydmljZSdcbmltcG9ydCB7IENvbnRlbnRMYW5ndWFnZVNlcnZpY2UsIFdpZGdldFVzZXJTZXJ2aWNlTGliIH0gZnJvbSAnQHN1bmJpcmQtY2IvY29uc3VtcHRpb24nXG5pbXBvcnQgeyBXaWRnZXRDb250ZW50U2VydmljZSB9IGZyb20gJy4uL19jb2xsZWN0aW9uLWFwaSdcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFZpZXdlclV0aWxTZXJ2aWNlIHtcbiAgQVBJX0VORFBPSU5UUyA9IHtcbiAgICBzZXRTM0Nvb2tpZTogYC9hcGlzL3Y4L3Byb3RlY3RlZC9jb250ZW50L3NldENvb2tpZWAsXG4gICAgLy8gUFJPR1JFU1NfVVBEQVRFOiBgL2FwaXMvcHJvdGVjdGVkL3Y4L3VzZXIvcmVhbFRpbWVQcm9ncmVzcy91cGRhdGVgLFxuICAgIFBST0dSRVNTX1VQREFURTogYC9hcGlzL3Byb3hpZXMvdjgvY29udGVudC1wcm9ncmVzYCxcbiAgICBBU1NFU1NNRU5UX1NFQ1RJT046IGAvYXBpcy9wcm94aWVzL3Y4L2Fzc2Vzc21lbnQvdjUvcmVhZGAsXG4gICAgR0VUX0ZPUk1fQllJRDogKGZvcm1JZDogc3RyaW5nKSA9PiBgYXBpcy9wcm94aWVzL3Y4L2Zvcm1zL3YyL2dldEZvcm1CeUlkP2Zvcm1JZD0ke2Zvcm1JZH1gLFxuICAgIFNVQk1JVF9GT1JNOiBgL2FwaXMvcHJveGllcy92OC9mb3Jtcy92Mi9zYXZlRm9ybVN1Ym1pdGAsXG4gICAgLy8gR0VUX0ZPUk1fQllJRDogKGZvcm1JZDogc3RyaW5nKSA9PiBgYXBpcy9wcm94aWVzL3Y4L2Zvcm1zL2dldEZvcm1CeUlkP2lkPSR7Zm9ybUlkfWAsXG4gICAgLy8gU1VCTUlUX0ZPUk06IGAvYXBpcy9wcm94aWVzL3Y4L2Zvcm1zL3YxL3NhdmVGb3JtU3VibWl0YCxcbiAgICBQUkVfQVNTRVNTTUVOVF9TVEFURV9VUERBVEU6IGAvYXBpcy9wcm94aWVzL3Y4L2NvbnRlbnQvdjIvc3RhdGUvdXBkYXRlYFxuXG4gIH1cbiAgZG93bmxvYWRSZWdleCA9IG5ldyBSZWdFeHAoYCgvY29udGVudC1zdG9yZS8uKj8pKFxcXFxcXCk/XFxcXFxcXFw/WydcIl0pYCwgJ2dtJylcbiAgYXV0aG9yaW5nQmFzZSA9ICcvYXBpcy9hdXRoQ29udGVudC8nXG4gIG1hcmtBc0NvbXBsZXRlU3ViamVjdCA9IG5ldyBTdWJqZWN0KClcbiAgYXV0b1BsYXlOZXh0VmlkZW8gPSBuZXcgU3ViamVjdCgpXG4gIGF1dG9QbGF5TmV4dEF1ZGlvID0gbmV3IFN1YmplY3QoKVxuICBmb3JQcmV2aWV3ID0gd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJy9wdWJsaWMvJykgfHwgd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJyZwcmV2aWV3PXRydWUnKVxuICBwdWJsaWNVc2VyRGV0YWlsczogYW55ID0ge31cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgY29uZmlnc2VydmljZTogQ29uZmlndXJhdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29udGVudFN2YzogV2lkZ2V0Q29udGVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0b2NTdmM6IEFwcFRvY1NlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VyU3ZjOiBXaWRnZXRVc2VyU2VydmljZUxpYixcbiAgICBwcml2YXRlIGNvbnRlbnRMYW5nU3ZjOiBDb250ZW50TGFuZ3VhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgZG9tYWluQ29uZlN2YzogRG9tYWluQ29uZlNlcnZpY2UsXG4gICAgQEluamVjdCgnZW52aXJvbm1lbnQnKSBwcml2YXRlIGVudmlyb25tZW50OiBhbnlcbiAgKSB7IH1cblxuICBhc3luYyBmZXRjaE1hbmlmZXN0RmlsZSh1cmw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UzNDb29raWUodXJsKVxuICAgIGNvbnN0IG1hbmlmZXN0RmlsZSA9IGF3YWl0IHRoaXMuaHR0cFxuICAgICAgLmdldDxhbnk+KHVybClcbiAgICAgIC50b1Byb21pc2UoKVxuICAgICAgLmNhdGNoKChfZXJyOiBhbnkpID0+IHsgfSlcbiAgICByZXR1cm4gbWFuaWZlc3RGaWxlXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNldFMzQ29va2llKF9jb250ZW50SWQ6IHN0cmluZykge1xuICAgIC8vIGF3YWl0IHRoaXMuaHR0cFxuICAgIC8vICAgLnBvc3QodGhpcy5BUElfRU5EUE9JTlRTLnNldFMzQ29va2llLCB7IGNvbnRlbnRJZCB9KVxuICAgIC8vICAgLnRvUHJvbWlzZSgpXG4gICAgLy8gICAuY2F0Y2goKF9lcnI6IGFueSkgPT4geyB9KVxuICAgIHJldHVyblxuICB9XG5cbiAgY2FsY3VsYXRlUGVyY2VudChjdXJyZW50OiBzdHJpbmdbXSwgbWF4OiBudW1iZXIsIG1pbWVUeXBlPzogc3RyaW5nKTogbnVtYmVyIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdGVtcCA9IFsuLi5jdXJyZW50XVxuICAgICAgaWYgKHRlbXAgJiYgdGVtcC5sZW5ndGggJiYgbWF4KSB7XG4gICAgICAgIGNvbnN0IGxhdGVzdCA9IHBhcnNlRmxvYXQodGVtcC5wb3AoKSB8fCAnMCcpXG4gICAgICAgIGNvbnN0IHBlcmNlbnRNaWxpcyA9IChsYXRlc3QgLyBtYXgpICogMTAwXG4gICAgICAgIGxldCBwZXJjZW50ID0gcGFyc2VGbG9hdChwZXJjZW50TWlsaXMudG9GaXhlZCgyKSlcbiAgICAgICAgaWYgKFxuICAgICAgICAgIG1pbWVUeXBlID09PSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5NUDQgfHxcbiAgICAgICAgICBtaW1lVHlwZSA9PT0gTnNDb250ZW50LkVNaW1lVHlwZXMuTTNVOCB8fFxuICAgICAgICAgIG1pbWVUeXBlID09PSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5NUDMgfHxcbiAgICAgICAgICBtaW1lVHlwZSA9PT0gTnNDb250ZW50LkVNaW1lVHlwZXMuTTRBIHx8XG4gICAgICAgICAgbWltZVR5cGUgPT09IE5zQ29udGVudC5FTWltZVR5cGVzLllPVVRVQkUgfHxcbiAgICAgICAgICBtaW1lVHlwZSA9PT0gTnNDb250ZW50LkVNaW1lVHlwZXMuU1VSVkVZXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChwZXJjZW50IDw9IDUpIHtcbiAgICAgICAgICAgIC8vIGlmIHBlcmNlbnRhZ2UgaXMgbGVzcyB0aGFuIDUlIG1ha2UgaXQgMFxuICAgICAgICAgICAgcGVyY2VudCA9IDBcbiAgICAgICAgICB9IGVsc2UgaWYgKHBlcmNlbnQgPj0gOTUpIHtcbiAgICAgICAgICAgIC8vIGlmIHBlcmNlbnRhZ2UgaXMgZ3JlYXRlciB0aGFuIDk1JSBtYWtlIGl0IDEwMFxuICAgICAgICAgICAgcGVyY2VudCA9IDEwMFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGVyY2VudFxuICAgICAgfVxuICAgICAgcmV0dXJuIDBcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBpbiBjYWxjdWxhdGluZyBwZXJjZW50YWdlJywgZSlcbiAgICAgIHJldHVybiAwXG4gICAgfVxuICB9XG5cbiAgZ2V0U3RhdHVzKGN1cnJlbnQ6IHN0cmluZ1tdLCBtYXg6IG51bWJlciwgbWltZVR5cGU/OiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGVyY2VudGFnZSA9IHRoaXMuY2FsY3VsYXRlUGVyY2VudChjdXJyZW50LCBtYXgsIG1pbWVUeXBlKVxuICAgICAgLy8gZm9yIHZpZGVvcyBhbmQgYXVkaW9zXG4gICAgICBpZiAoXG4gICAgICAgIG1pbWVUeXBlID09PSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5NUDQgfHxcbiAgICAgICAgbWltZVR5cGUgPT09IE5zQ29udGVudC5FTWltZVR5cGVzLk0zVTggfHxcbiAgICAgICAgbWltZVR5cGUgPT09IE5zQ29udGVudC5FTWltZVR5cGVzLk1QMyB8fFxuICAgICAgICBtaW1lVHlwZSA9PT0gTnNDb250ZW50LkVNaW1lVHlwZXMuTTRBIHx8XG4gICAgICAgIG1pbWVUeXBlID09PSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5TVVJWRVkgfHxcbiAgICAgICAgbWltZVR5cGUgPT09IE5zQ29udGVudC5FTWltZVR5cGVzLlBERlxuICAgICAgKSB7XG4gICAgICAgIC8vIGlmIHBlcmNlbnRhZ2UgaXMgbGVzcyB0aGFuIDUlIHRoZW4gbWFrZSBzdGF0dXMgc3RhcnRlZFxuICAgICAgICBpZiAoTWF0aC5jZWlsKHBlcmNlbnRhZ2UpIDw9IDUpIHtcbiAgICAgICAgICByZXR1cm4gMVxuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHBlcmNlbnRhZ2UgaXMgZ3JlYXRlciB0aGFuIDk1JSB0aGVuIG1ha2Ugc3RhdHVzIGNvbXBsZXRlXG4gICAgICAgIGlmIChNYXRoLmNlaWwocGVyY2VudGFnZSkgPj0gOTUpIHtcbiAgICAgICAgICByZXR1cm4gMlxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoTWF0aC5jZWlsKHBlcmNlbnRhZ2UpID49IDEwMCkge1xuICAgICAgICAgIHJldHVybiAyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiAxXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLmxvZygnRXJyb3IgaW4gZ2V0dGluZyBjb21wbGV0aW9uIHN0YXR1cycsIGUpXG4gICAgICByZXR1cm4gMVxuICAgIH1cbiAgfVxuXG4gIHJlYWxUaW1lUHJvZ3Jlc3NVcGRhdGUoY29udGVudElkOiBzdHJpbmcsIHJlcXVlc3Q6IGFueSwgY29sbGVjdGlvbklkPzogc3RyaW5nLCBiYXRjaElkPzogc3RyaW5nKSB7XG4gICAgbGV0IHJlcTogYW55XG4gICAgaWYgKHRoaXMuY29uZmlnc2VydmljZS51c2VyUHJvZmlsZSkge1xuICAgICAgY29uc3QgbGFuZ3VhZ2UgPSB0aGlzLmdldFJlc291cmNlQ29udGVudExhbmd1YWdlKGNvbnRlbnRJZClcbiAgICAgIHJlcSA9IHtcbiAgICAgICAgcmVxdWVzdDoge1xuICAgICAgICAgIHVzZXJJZDogdGhpcy5jb25maWdzZXJ2aWNlLnVzZXJQcm9maWxlLnVzZXJJZCB8fCAnJyxcbiAgICAgICAgICBjb250ZW50czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjb250ZW50SWQsXG4gICAgICAgICAgICAgIGJhdGNoSWQsXG4gICAgICAgICAgICAgIGxhbmd1YWdlLFxuICAgICAgICAgICAgICBzdGF0dXM6IHRoaXMuZ2V0U3RhdHVzKHJlcXVlc3QuY3VycmVudCwgcmVxdWVzdC5tYXhfc2l6ZSwgcmVxdWVzdC5taW1lX3R5cGUpLFxuICAgICAgICAgICAgICBjb3Vyc2VJZDogY29sbGVjdGlvbklkLFxuICAgICAgICAgICAgICBsYXN0QWNjZXNzVGltZTogZGF5anMobmV3IERhdGUoKSkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tOnNzOlNTU1paJyksXG4gICAgICAgICAgICAgIHByb2dyZXNzZGV0YWlsczoge1xuICAgICAgICAgICAgICAgIG1heF9zaXplOiByZXF1ZXN0Lm1heF9zaXplLFxuICAgICAgICAgICAgICAgIGN1cnJlbnQ6IHJlcXVlc3QuY3VycmVudCxcbiAgICAgICAgICAgICAgICBtaW1lVHlwZTogcmVxdWVzdC5taW1lX3R5cGUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGNvbXBsZXRpb25QZXJjZW50YWdlOiB0aGlzLmNhbGN1bGF0ZVBlcmNlbnQocmVxdWVzdC5jdXJyZW50LCByZXF1ZXN0Lm1heF9zaXplLCByZXF1ZXN0Lm1pbWVfdHlwZSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgICAvLyBpZiAodGhpcy5jb25maWdzZXJ2aWNlLmNzdG9rZW4gIT09ICcnKSB7XG4gICAgICAvLyAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKVxuICAgICAgLy8gICAuc2V0KCdjc3Rva2VuJywgdGhpcy5jb25maWdzZXJ2aWNlLmNzdG9rZW4pXG5cbiAgICAgIC8vICAgdGhpcy5odHRwXG4gICAgICAvLyAgIC5wYXRjaChgJHt0aGlzLkFQSV9FTkRQT0lOVFMuUFJPR1JFU1NfVVBEQVRFfS8ke2NvbnRlbnRJZH1gLCB7IGhlYWRlcnMgfSAsIHJlcSlcbiAgICAgIC8vICAgLnN1YnNjcmliZShub29wLCBub29wKVxuICAgICAgLy8gfSBlbHNlIHtcbiAgICAgIC8vICAgdGhpcy5odHRwXG4gICAgICAvLyAgIC5wYXRjaChgJHt0aGlzLkFQSV9FTkRQT0lOVFMuUFJPR1JFU1NfVVBEQVRFfS8ke2NvbnRlbnRJZH1gLCByZXEpXG4gICAgICAvLyAgIC5zdWJzY3JpYmUobm9vcCwgbm9vcClcbiAgICAgIC8vIH1cbiAgICAgIHRoaXMuaHR0cFxuICAgICAgICAucGF0Y2goYCR7dGhpcy5BUElfRU5EUE9JTlRTLlBST0dSRVNTX1VQREFURX0vJHtjb250ZW50SWR9YCwgcmVxKVxuICAgICAgICAuc3Vic2NyaWJlKG5vb3AsIG5vb3ApXG4gICAgICBcbiAgICAgIGNvbnNvbGUubG9nKGDwn5SEIFtQUk9HUkVTUyBVUERBVEVdIHJlYWxUaW1lUHJvZ3Jlc3NVcGRhdGUgY2FsbGVkIGZvciAke2NvbnRlbnRJZH1gKVxuICAgICAgY29uc29sZS5sb2coYCAgIFN0YXR1czogJHtyZXEucmVxdWVzdC5jb250ZW50c1swXS5zdGF0dXN9LCBQZXJjZW50YWdlOiAke3JlcS5yZXF1ZXN0LmNvbnRlbnRzWzBdLmNvbXBsZXRpb25QZXJjZW50YWdlfWApXG4gICAgICBjb25zb2xlLmxvZyhgICAgSGFzaG1hcCBoYXMgY29udGVudElkOiAkeyEhdGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdfWApXG4gICAgICBcbiAgICAgIGlmICh0aGlzLnRvY1N2Yy5oYXNobWFwW2NvbnRlbnRJZF0pIHtcbiAgICAgICAgY29uc3QgY3VycmVudFN0YXR1cyA9IHRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXVsnY29tcGxldGlvblN0YXR1cyddXG4gICAgICAgIGNvbnNvbGUubG9nKGAgICBDdXJyZW50IGNvbXBsZXRpb25TdGF0dXMgaW4gaGFzaG1hcDogJHtjdXJyZW50U3RhdHVzfWApXG4gICAgICAgIFxuICAgICAgICBpZiAoIWN1cnJlbnRTdGF0dXMgfHwgY3VycmVudFN0YXR1cyA8IDIpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICAg4pyFIFVwZGF0aW5nIGhhc2htYXAgZm9yICR7Y29udGVudElkfWApXG4gICAgICAgICAgdGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdWydjb21wbGV0aW9uUGVyY2VudGFnZSddID0gcmVxLnJlcXVlc3QuY29udGVudHNbMF0uY29tcGxldGlvblBlcmNlbnRhZ2VcbiAgICAgICAgICB0aGlzLnRvY1N2Yy5oYXNobWFwW2NvbnRlbnRJZF1bJ2NvbXBsZXRpb25TdGF0dXMnXSA9IE51bWJlcihyZXEucmVxdWVzdC5jb250ZW50c1swXS5zdGF0dXMpIHx8IDBcbiAgICAgICAgICB0aGlzLnRvY1N2Yy5oYXNobWFwID0geyAuLi50aGlzLnRvY1N2Yy5oYXNobWFwIH1cbiAgICAgICAgICBcbiAgICAgICAgICAvLyBUcmlnZ2VyIG1pbGVzdG9uZSBsb2NrIHJlY29tcHV0YXRpb24gLSBpdCB3aWxsIGVtaXQgaGFzaG1hcFVwZGF0ZWQgd2l0aCBib3RoIHByb2dyZXNzIGFuZCBsb2NrIGNoYW5nZXNcbiAgICAgICAgICB0aGlzLnRvY1N2Yy50cmlnZ2VyTWlsZXN0b25lTG9ja1VwZGF0ZSgpXG4gICAgICAgICAgLy8gRW1pdCB0byB0cmlnZ2VyIHZpZXdlciBjb21wb25lbnQgcmVmcmVzaCBmb3IgTGVhcm5pbmcgUGF0aHdheXNcbiAgICAgICAgICB0aGlzLm1hcmtBc0NvbXBsZXRlU3ViamVjdC5uZXh0KHRydWUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgIOKPre+4jyBTa2lwcGluZyB1cGRhdGUgLSBjb250ZW50IGFscmVhZHkgY29tcGxldGVkIChzdGF0dXM9JHtjdXJyZW50U3RhdHVzfSlgKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhgICAg4pqg77iPIENvbnRlbnRJZCAke2NvbnRlbnRJZH0gbm90IGZvdW5kIGluIGhhc2htYXAgLSBjYW5ub3QgdXBkYXRlIHByb2dyZXNzYClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVxID0ge31cbiAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICB9XG4gIH1cblxuICBnZXRCYXRjaElkQW5kQ291cnNlSWQoY291cnNlSWQ6IHN0cmluZywgYmF0Y2hJZDogc3RyaW5nLCByZXNvdXJjZUlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0ZW1wRGF0YSA9IHtcbiAgICAgIGNvdXJzZUlkLFxuICAgICAgYmF0Y2hJZCxcbiAgICB9XG4gICAgXG4gICAgY29uc3QgdGVtcENvbnRlbnREYXRhID0gdGhpcy5jb250ZW50U3ZjLmN1cnJlbnRNZXRhRGF0YVxuICAgIGNvbnN0IHRlbXBDb250ZW50UmVhZERhdGEgPSB0aGlzLmNvbnRlbnRTdmMuY3VycmVudENvbnRlbnRSZWFkTWV0YURhdGFcbiAgICBjb25zdCBlbnJvbGxtZW50TGlzdCA9IHRoaXMuY29udGVudFN2Yy5jdXJyZW50QmF0Y2hFbnJvbGxtZW50TGlzdFxuICAgIGlmICghdGhpcy5mb3JQcmV2aWV3KSB7XG4gICAgICBpZiAodGVtcENvbnRlbnREYXRhLmNvdXJzZUNhdGVnb3J5ID09PSAnTGVhcm5pbmcgUGF0aHdheScpIHtcbiAgICAgICAgLy8gRmluZCB0aGUgY291cnNlIHRoYXQgY29udGFpbnMgdGhlIGdpdmVuIHJlc291cmNlIElEXG4gICAgICAgIGNvbnN0IGZvdW5kQ291cnNlID0gdGhpcy5maW5kQ291cnNlQ29udGFpbmluZ1Jlc291cmNlKHRlbXBDb250ZW50RGF0YSwgcmVzb3VyY2VJZClcblxuICAgICAgICBpZiAoZm91bmRDb3Vyc2UpIHtcbiAgICAgICAgICAvLyBBbHdheXMgdXBkYXRlIGNvdXJzZUlkIGlmIGNvdXJzZSBpcyBmb3VuZFxuICAgICAgICAgIHRlbXBEYXRhLmNvdXJzZUlkID0gZm91bmRDb3Vyc2UuaWRlbnRpZmllclxuXG4gICAgICAgICAgLy8gVHJ5IHRvIGZpbmQgYmF0Y2ggSUQgZnJvbSBlbnJvbGxtZW50IGRhdGEgZm9yIHRoZSBmb3VuZCBjb3Vyc2VcbiAgICAgICAgICBpZiAoZm91bmRDb3Vyc2UuaWRlbnRpZmllcikge1xuICAgICAgICAgICAgY29uc3QgZW5yb2xsbWVudCA9IGVucm9sbG1lbnRMaXN0LmZpbmQoXG4gICAgICAgICAgICAgIChjb3Vyc2U6IGFueSkgPT4gY291cnNlLmNvbGxlY3Rpb25JZCA9PT0gZm91bmRDb3Vyc2UuaWRlbnRpZmllclxuICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICBpZiAoZW5yb2xsbWVudCAmJiBlbnJvbGxtZW50LmJhdGNoSWQpIHtcbiAgICAgICAgICAgICAgdGVtcERhdGEuYmF0Y2hJZCA9IGVucm9sbG1lbnQuYmF0Y2hJZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0ZW1wQ29udGVudERhdGEgJiYgdGVtcENvbnRlbnRSZWFkRGF0YS5jdW11bGF0aXZlVHJhY2tpbmcgJiZcbiAgICAgICAgKHRlbXBDb250ZW50RGF0YS5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LlBST0dSQU0gfHxcbiAgICAgICAgICB0ZW1wQ29udGVudERhdGEucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5DVVJBVEVEX1BST0dSQU1cbiAgICAgICAgICB8fCB0ZW1wQ29udGVudERhdGEucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5CTEVOREVEX1BST0dSQU1cbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHRlbXBDb250ZW50RGF0YS5jaGlsZHJlbi5mb3JFYWNoKGFzeW5jIChjaGlsZExpc3Q6IE5zQ29udGVudC5JQ29udGVudCkgPT4ge1xuICAgICAgICAgIGlmIChjaGlsZExpc3QucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5DT1VSU0UpIHtcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbWF4LWxpbmUtbGVuZ3RoXG4gICAgICAgICAgICBjb25zdCBjb3Vyc2VFbnJvbGxtZW50TGlzdCA9IGVucm9sbG1lbnRMaXN0ICYmIGVucm9sbG1lbnRMaXN0LmZpbHRlcigodjogTnNDb250ZW50LklDb3Vyc2UpID0+IHYuY29udGVudElkID09PSBjaGlsZExpc3QuaWRlbnRpZmllcilcbiAgICAgICAgICAgIGlmIChjaGlsZExpc3QuY2hpbGROb2RlcyAmJiBjaGlsZExpc3QuY2hpbGROb2Rlcy5pbmRleE9mKHJlc291cmNlSWQpICE9PSAtMSkge1xuICAgICAgICAgICAgICBpZiAoY291cnNlRW5yb2xsbWVudExpc3QgJiYgY291cnNlRW5yb2xsbWVudExpc3QubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRlbXBEYXRhLmJhdGNoSWQgPSBjb3Vyc2VFbnJvbGxtZW50TGlzdFtjb3Vyc2VFbnJvbGxtZW50TGlzdC5sZW5ndGggLSAxXS5iYXRjaC5iYXRjaElkXG4gICAgICAgICAgICAgICAgdGVtcERhdGEuY291cnNlSWQgPSBjaGlsZExpc3QuaWRlbnRpZmllclxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGE6IGFueSA9IGF3YWl0IHRoaXMuY2hlY2tGb3JDb3Vyc2VFbnJvbGxtZW50KGNoaWxkTGlzdCwgcmVzb3VyY2VJZCwgZW5yb2xsbWVudExpc3QsIHRlbXBEYXRhKVxuICAgICAgICAgICAgICAgIHRlbXBEYXRhLmNvdXJzZUlkID0gZGF0YS5jb3Vyc2VJZFxuICAgICAgICAgICAgICAgIHRlbXBEYXRhLmJhdGNoSWQgPSBkYXRhLmJhdGNoSWRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAodGVtcENvbnRlbnREYXRhLnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuQkxFTkRFRF9QUk9HUkFNKSB7XG4gICAgICAgICAgICBpZiAodGVtcERhdGEuY291cnNlSWQgPT09IGNvdXJzZUlkKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGJQRW5yb2xsbWVudExpc3QgPSBlbnJvbGxtZW50TGlzdC5maWx0ZXIoKHY6IE5zQ29udGVudC5JQ291cnNlKSA9PiB2LmNvbnRlbnRJZCA9PT0gdGVtcENvbnRlbnREYXRhLmlkZW50aWZpZXIpXG4gICAgICAgICAgICAgIGlmICh0ZW1wQ29udGVudERhdGEuY2hpbGROb2RlcyAmJiB0ZW1wQ29udGVudERhdGEuY2hpbGROb2Rlcy5pbmRleE9mKHJlc291cmNlSWQpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGlmIChiUEVucm9sbG1lbnRMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgIHRlbXBEYXRhLmJhdGNoSWQgPSBiUEVucm9sbG1lbnRMaXN0W2JQRW5yb2xsbWVudExpc3QubGVuZ3RoIC0gMV0uYmF0Y2guYmF0Y2hJZFxuICAgICAgICAgICAgICAgICAgdGVtcERhdGEuY291cnNlSWQgPSB0ZW1wQ29udGVudERhdGEuaWRlbnRpZmllclxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRlbXBEYXRhXG4gIH1cblxuICAvKipcbiAgICogUmVjdXJzaXZlbHkgc2VhcmNoZXMgZm9yIGEgcmVzb3VyY2UgSUQgaW4gYSBjb250ZW50J3MgY2hpbGRyZW4gaGllcmFyY2h5XG4gICAqIEBwYXJhbSBjb250ZW50IFRoZSBjb250ZW50IG9iamVjdCB0byBzZWFyY2ggaW5cbiAgICogQHBhcmFtIHJlc291cmNlSWQgVGhlIHJlc291cmNlIElEIHRvIGZpbmRcbiAgICogQHJldHVybnMgdHJ1ZSBpZiByZXNvdXJjZSBpcyBmb3VuZCwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBwcml2YXRlIGZpbmRSZXNvdXJjZUluQ29udGVudChjb250ZW50OiBhbnksIHJlc291cmNlSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIC8vIENoZWNrIGlmIHRoaXMgY29udGVudCBoYXMgdGhlIHJlc291cmNlIGluIGl0cyBsZWFmTm9kZXNcbiAgICBpZiAoY29udGVudC5sZWFmTm9kZXMgJiYgQXJyYXkuaXNBcnJheShjb250ZW50LmxlYWZOb2RlcykpIHtcbiAgICAgIGlmIChjb250ZW50LmxlYWZOb2Rlcy5pbmRleE9mKHJlc291cmNlSWQpICE9PSAtMSkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHRoaXMgY29udGVudCdzIGlkZW50aWZpZXIgbWF0Y2hlcyB0aGUgcmVzb3VyY2UgSURcbiAgICBpZiAoY29udGVudC5pZGVudGlmaWVyID09PSByZXNvdXJjZUlkKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIC8vIFJlY3Vyc2l2ZWx5IHNlYXJjaCBpbiBjaGlsZHJlblxuICAgIGlmIChjb250ZW50LmNoaWxkcmVuICYmIEFycmF5LmlzQXJyYXkoY29udGVudC5jaGlsZHJlbikpIHtcbiAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY29udGVudC5jaGlsZHJlbikge1xuICAgICAgICBpZiAodGhpcy5maW5kUmVzb3VyY2VJbkNvbnRlbnQoY2hpbGQsIHJlc291cmNlSWQpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIHRoZSBjb3Vyc2UgdGhhdCBjb250YWlucyBhIGdpdmVuIHJlc291cmNlIElEIGluIGEgTGVhcm5pbmcgUGF0aHdheVxuICAgKiBAcGFyYW0gbGVhcm5pbmdQYXRod2F5Q29udGVudCBUaGUgTGVhcm5pbmcgUGF0aHdheSBjb250ZW50IGRhdGFcbiAgICogQHBhcmFtIHJlc291cmNlSWQgVGhlIHJlc291cmNlIElEIHRvIGZpbmRcbiAgICogQHJldHVybnMgVGhlIGNvdXJzZSBvYmplY3QgY29udGFpbmluZyB0aGUgcmVzb3VyY2UsIG9yIG51bGwgaWYgbm90IGZvdW5kXG4gICAqL1xuICBmaW5kQ291cnNlQ29udGFpbmluZ1Jlc291cmNlKGxlYXJuaW5nUGF0aHdheUNvbnRlbnQ6IGFueSwgcmVzb3VyY2VJZDogc3RyaW5nKTogYW55IHtcbiAgICAvLyBDaGVjayBpZiBtaWxlc3RvbmVzX3YxIGV4aXN0c1xuICAgIGlmICghbGVhcm5pbmdQYXRod2F5Q29udGVudC5taWxlc3RvbmVzX3YxIHx8ICFBcnJheS5pc0FycmF5KGxlYXJuaW5nUGF0aHdheUNvbnRlbnQubWlsZXN0b25lc192MSkpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgLy8gTG9vcCB0aHJvdWdoIGVhY2ggbWlsZXN0b25lXG4gICAgZm9yIChjb25zdCBtaWxlc3RvbmUgb2YgbGVhcm5pbmdQYXRod2F5Q29udGVudC5taWxlc3RvbmVzX3YxKSB7XG4gICAgICAvLyBDaGVjayBpZiBtaWxlc3RvbmUgaGFzIGNvdXJzZXNcbiAgICAgIGlmIChtaWxlc3RvbmUuY291cnNlcyAmJiBBcnJheS5pc0FycmF5KG1pbGVzdG9uZS5jb3Vyc2VzKSkge1xuICAgICAgICAvLyBMb29wIHRocm91Z2ggZWFjaCBjb3Vyc2UgaW4gdGhlIG1pbGVzdG9uZVxuICAgICAgICBmb3IgKGNvbnN0IGNvdXJzZSBvZiBtaWxlc3RvbmUuY291cnNlcykge1xuICAgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgY291cnNlIGNvbnRhaW5zIHRoZSByZXNvdXJjZVxuICAgICAgICAgIGlmICh0aGlzLmZpbmRSZXNvdXJjZUluQ29udGVudChjb3Vyc2UsIHJlc291cmNlSWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gY291cnNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGdldFJlc291cmNlQ29udGVudExhbmd1YWdlKHJlc291cmNlSWQ6IHN0cmluZykge1xuXG4gICAgbGV0IHRlbXBMYW5ndWFnZTogYW55ID0gJ2VuZ2xpc2gnXG4gICAgbGV0IGxhbmd1YWdlRm91bmQgPSBmYWxzZVxuICAgIGNvbnN0IHRlbXBDb250ZW50RGF0YSA9IHRoaXMuY29udGVudFN2Yy5jdXJyZW50TWV0YURhdGFcbiAgICBpZiAoIXRoaXMuZm9yUHJldmlldykge1xuICAgICAgdGVtcENvbnRlbnREYXRhLmNoaWxkcmVuPy5mb3JFYWNoKGFzeW5jIChjaGlsZExpc3Q6YW55KSA9PiB7XG4gICAgICAgIGlmIChjaGlsZExpc3QucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5DT1VSU0UpIHtcbiAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG1heC1saW5lLWxlbmd0aFxuICAgICAgICAgIGlmIChjaGlsZExpc3QubGVhZk5vZGVzICYmIGNoaWxkTGlzdC5sZWFmTm9kZXMuaW5kZXhPZihyZXNvdXJjZUlkKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRlbXBMYW5ndWFnZSA9IHRoaXMuY29udGVudExhbmdTdmMuZ2V0Q29udGVudExhbmd1YWdlKGNoaWxkTGlzdClcbiAgICAgICAgICAgIGxhbmd1YWdlRm91bmQgPSB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGNoaWxkTGlzdD8ucHJpbWFyeUNhdGVnb3J5ID09PSAnTWlsZXN0b25lJykge1xuICAgICAgICAgIGNoaWxkTGlzdC5jaGlsZHJlbj8uZm9yRWFjaChhc3luYyAoY2hpbGQ6YW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoY2hpbGQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5DT1VSU0UpIHtcbiAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcbiAgICAgICAgICAgICAgaWYgKGNoaWxkLmxlYWZOb2RlcyAmJiBjaGlsZC5sZWFmTm9kZXMuaW5kZXhPZihyZXNvdXJjZUlkKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICB0ZW1wTGFuZ3VhZ2UgPSB0aGlzLmNvbnRlbnRMYW5nU3ZjLmdldENvbnRlbnRMYW5ndWFnZShjaGlsZClcbiAgICAgICAgICAgICAgICBsYW5ndWFnZUZvdW5kID0gdHJ1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIClcbiAgICAgIGlmICghbGFuZ3VhZ2VGb3VuZCkge1xuICAgICAgICBpZiAodGVtcENvbnRlbnREYXRhLmxlYWZOb2RlcyAmJiB0ZW1wQ29udGVudERhdGEubGVhZk5vZGVzLmluZGV4T2YocmVzb3VyY2VJZCkgIT09IC0xKSB7XG4gICAgICAgICAgdGVtcExhbmd1YWdlID0gdGhpcy5jb250ZW50TGFuZ1N2Yy5nZXRDb250ZW50TGFuZ3VhZ2UodGVtcENvbnRlbnREYXRhKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0ZW1wTGFuZ3VhZ2VcbiAgfVxuXG4gIGFzeW5jIGNoZWNrRm9yQ291cnNlRW5yb2xsbWVudChjaGlsZExpc3Q6IE5zQ29udGVudC5JQ29udGVudCwgX3Jlc291cmNlSWQ6IHN0cmluZywgX2Vucm9sbG1lbnRMaXN0OiBhbnksIF90ZW1wRGF0YTogYW55KSB7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcbiAgICBjb25zdCBjb3Vyc2VEYXRhOiBhbnkgPSBhd2FpdCB0aGlzLmNvbnRlbnRTdmMuYXV0b0Fzc2lnbkJhdGNoQXBpKGNoaWxkTGlzdC5pZGVudGlmaWVyKS50b1Byb21pc2UoKS50aGVuKGFzeW5jIChkYXRhOiBOc0NvbnRlbnQuSUJhdGNoTGlzdFJlc3BvbnNlKSA9PiB7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG1heC1saW5lLWxlbmd0aFxuICAgICAgICBjb25zdCByZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLnVzZXJTdmMuZmV0Y2hFbnJvbGxtZW50RGF0YUJ5Q29udGVudElkKHRoaXMuY29uZmlnc2VydmljZS51c2VyUHJvZmlsZT8udXNlcklkLCBjaGlsZExpc3QuaWRlbnRpZmllcikudG9Qcm9taXNlKCkudGhlbihhc3luYyAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAocmVzICYmIHJlcy5jb3Vyc2VzICYmIHJlcy5jb3Vyc2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlcy5jb3Vyc2VzXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBbeyBjb3Vyc2VJZDogY2hpbGRMaXN0LmlkZW50aWZpZXIsIGJhdGNoSWQ6ICcnIH1dXG5cbiAgICAgICAgfSkuY2F0Y2goKF9lcnI6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiBbeyBjb3Vyc2VJZDogY2hpbGRMaXN0LmlkZW50aWZpZXIsIGJhdGNoSWQ6ICcnIH1dXG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMuY29udGVudFN2Yy5jdXJyZW50QmF0Y2hFbnJvbGxtZW50TGlzdCA9IFsuLi50aGlzLmNvbnRlbnRTdmMuY3VycmVudEJhdGNoRW5yb2xsbWVudExpc3QsIC4uLnJlc3BvbnNlRGF0YV1cbiAgICAgICAgcmV0dXJuIHsgY291cnNlSWQ6IGNoaWxkTGlzdC5pZGVudGlmaWVyLCBiYXRjaElkOiByZXNwb25zZURhdGFbMF0uYmF0Y2hJZCB9XG4gICAgICB9XG4gICAgfSkuY2F0Y2goKF9lcnI6IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIFt7IGNvdXJzZUlkOiBjaGlsZExpc3QuaWRlbnRpZmllciwgYmF0Y2hJZDogJycgfV1cbiAgICB9KVxuICAgIHJldHVybiBjb3Vyc2VEYXRhXG4gIH1cblxuICByZWFsVGltZVByb2dyZXNzVXBkYXRlUXVpeihjb250ZW50SWQ6IHN0cmluZywgY29sbGVjdGlvbklkPzogc3RyaW5nLCBiYXRjaElkPzogc3RyaW5nLCBzdGF0dXM/OiBudW1iZXIpIHtcbiAgICBsZXQgcmVxOiBhbnlcbiAgICBpZiAodGhpcy5jb25maWdzZXJ2aWNlLnVzZXJQcm9maWxlKSB7XG4gICAgICBjb25zdCBsYW5ndWFnZSA9IHRoaXMuZ2V0UmVzb3VyY2VDb250ZW50TGFuZ3VhZ2UoY29udGVudElkKVxuICAgICAgcmVxID0ge1xuICAgICAgICByZXF1ZXN0OiB7XG4gICAgICAgICAgdXNlcklkOiB0aGlzLmNvbmZpZ3NlcnZpY2UudXNlclByb2ZpbGUudXNlcklkIHx8ICcnLFxuICAgICAgICAgIGNvbnRlbnRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNvbnRlbnRJZCxcbiAgICAgICAgICAgICAgYmF0Y2hJZCxcbiAgICAgICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgICAgIHN0YXR1czogc3RhdHVzIHx8IDIsXG4gICAgICAgICAgICAgIGNvdXJzZUlkOiBjb2xsZWN0aW9uSWQsXG4gICAgICAgICAgICAgIGxhc3RBY2Nlc3NUaW1lOiBkYXlqcyhuZXcgRGF0ZSgpKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW06c3M6U1NTWlonKSxcbiAgICAgICAgICAgICAgY29tcGxldGlvblBlcmNlbnRhZ2U6IHN0YXR1cyA9PT0gMiA/IDEwMCA6IDAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9XG5cbiAgICAgIHRoaXMuaHR0cFxuICAgICAgICAucGF0Y2goYCR7dGhpcy5BUElfRU5EUE9JTlRTLlBST0dSRVNTX1VQREFURX0vJHtjb250ZW50SWR9YCwgcmVxKVxuICAgICAgICAuc3Vic2NyaWJlKG5vb3AsIG5vb3ApXG4gICAgICAgIFxuICAgICAgY29uc29sZS5sb2coYPCflIQgW1BST0dSRVNTIFVQREFURSBRVUlaXSByZWFsVGltZVByb2dyZXNzVXBkYXRlUXVpeiBjYWxsZWQgZm9yICR7Y29udGVudElkfWApXG4gICAgICBjb25zb2xlLmxvZyhgICAgU3RhdHVzOiAke3JlcS5yZXF1ZXN0LmNvbnRlbnRzWzBdLnN0YXR1c30sIFBlcmNlbnRhZ2U6ICR7cmVxLnJlcXVlc3QuY29udGVudHNbMF0uY29tcGxldGlvblBlcmNlbnRhZ2V9YClcbiAgICAgIGNvbnNvbGUubG9nKGAgICBIYXNobWFwIGV4aXN0czogJHshIXRoaXMudG9jU3ZjLmhhc2htYXB9LCBIYXNobWFwIGhhcyBjb250ZW50SWQ6ICR7ISEodGhpcy50b2NTdmMuaGFzaG1hcCAmJiB0aGlzLnRvY1N2Yy5oYXNobWFwW2NvbnRlbnRJZF0pfWApXG4gICAgICBcbiAgICAgIGlmICh0aGlzLnRvY1N2Yy5oYXNobWFwICYmIHRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXSAmJiByZXEucmVxdWVzdC5jb250ZW50c1swXSkge1xuICAgICAgICBjb25zdCBjdXJyZW50U3RhdHVzID0gdGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdWydjb21wbGV0aW9uU3RhdHVzJ11cbiAgICAgICAgY29uc29sZS5sb2coYCAgIEN1cnJlbnQgY29tcGxldGlvblN0YXR1cyBpbiBoYXNobWFwOiAke2N1cnJlbnRTdGF0dXN9YClcbiAgICAgICAgXG4gICAgICAgIGlmICghY3VycmVudFN0YXR1cyB8fCBjdXJyZW50U3RhdHVzIDwgMikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgICDinIUgVXBkYXRpbmcgaGFzaG1hcCBmb3IgJHtjb250ZW50SWR9YClcbiAgICAgICAgICB0aGlzLnRvY1N2Yy5oYXNobWFwW2NvbnRlbnRJZF1bJ2NvbXBsZXRpb25QZXJjZW50YWdlJ10gPSByZXEucmVxdWVzdC5jb250ZW50c1swXS5jb21wbGV0aW9uUGVyY2VudGFnZVxuICAgICAgICAgIHRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXVsnY29tcGxldGlvblN0YXR1cyddID0gTnVtYmVyKHJlcS5yZXF1ZXN0LmNvbnRlbnRzWzBdLnN0YXR1cykgfHwgMFxuICAgICAgICAgIHRoaXMudG9jU3ZjLmhhc2htYXAgPSB7IC4uLnRoaXMudG9jU3ZjLmhhc2htYXAgfVxuICAgICAgICAgIFxuICAgICAgICAgIC8vIFRyaWdnZXIgbWlsZXN0b25lIGxvY2sgcmVjb21wdXRhdGlvbiAtIGl0IHdpbGwgZW1pdCBoYXNobWFwVXBkYXRlZCB3aXRoIGJvdGggcHJvZ3Jlc3MgYW5kIGxvY2sgY2hhbmdlc1xuICAgICAgICAgIGlmICh0aGlzLnRvY1N2Yy50cmlnZ2VyTWlsZXN0b25lTG9ja1VwZGF0ZSkge1xuICAgICAgICAgICAgdGhpcy50b2NTdmMudHJpZ2dlck1pbGVzdG9uZUxvY2tVcGRhdGUoKVxuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICAvLyBFbWl0IHRvIHRyaWdnZXIgdmlld2VyIGNvbXBvbmVudCByZWZyZXNoIGZvciBMZWFybmluZyBQYXRod2F5c1xuICAgICAgICAgIHRoaXMubWFya0FzQ29tcGxldGVTdWJqZWN0Lm5leHQodHJ1ZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICAg4o+t77iPIFNraXBwaW5nIHVwZGF0ZSAtIGNvbnRlbnQgYWxyZWFkeSBjb21wbGV0ZWQgKHN0YXR1cz0ke2N1cnJlbnRTdGF0dXN9KWApXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGAgICDimqDvuI8gQ2Fubm90IHVwZGF0ZSBoYXNobWFwIC0gaGFzaG1hcCBvciBjb250ZW50SWQgbWlzc2luZ2ApXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcSA9IHt9XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfVxuICB9XG5cbiAgZ2V0Q29udGVudChjb250ZW50SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8TnNDb250ZW50LklDb250ZW50PiB7XG4gICAgY29uc3QgZm9yUHJldmlldyA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCcvcHVibGljLycpIHx8IHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCcmcHJldmlldz10cnVlJylcbiAgICBsZXQgdXJsID0gYC9hcGlzL3Byb3hpZXMvdjgvYWN0aW9uL2NvbnRlbnQvdjMvcmVhZC8ke2NvbnRlbnRJZH1gXG4gICAgaWYgKCFmb3JQcmV2aWV3KSB7XG4gICAgICB1cmwgPSBgL2FwaXMvcHJveGllcy92OC9hY3Rpb24vY29udGVudC92My9yZWFkLyR7Y29udGVudElkfWBcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCdlZGl0TW9kZT10cnVlJykgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJ19yYycpKSB7XG4gICAgICAgIHVybCA9IGAvYXBpcy9wcm94aWVzL3Y4L2FjdGlvbi9jb250ZW50L3YzL3JlYWQvJHtjb250ZW50SWR9YFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdXJsID0gYC9hcGkvY29udGVudC92MS9yZWFkLyR7Y29udGVudElkfWBcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TnNDb250ZW50LklDb250ZW50PihcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgICAgIC8vIGAvYXBpcy9hdXRoQXBpL2FjdGlvbi9jb250ZW50L2hpZXJhcmNoeS8ke2NvbnRlbnRJZH0/cm9vdE9yZz0ke3RoaXMuY29uZmlnc2VydmljZS5yb290T3JnIHx8ICdpZ290J30mb3JnPSR7dGhpcy5jb25maWdzZXJ2aWNlLmFjdGl2ZU9yZyB8fCAnZG9wdCd9YCxcbiAgICAgIHVybFxuICAgIClcbiAgfVxuXG4gIGdldEF1dGhvcmluZ1VybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHVybFxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICAgICAgPyBgL2FwaXMvYXV0aENvbnRlbnQvJHt1cmwuaW5jbHVkZXMoJy9jb250ZW50LXN0b3JlLycpID8gbmV3IFVSTCh1cmwpLnBhdGhuYW1lLnNsaWNlKDEpIDogZW5jb2RlVVJJQ29tcG9uZW50KHVybCl9YFxuICAgICAgOiAnJ1xuICB9XG5cbiAgcmVnZXhEb3dubG9hZFJlcGxhY2UgPSAoX3N0ciA9ICcnLCBncm91cDE6IHN0cmluZywgZ3JvdXAyOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgIHJldHVybiBgJHt0aGlzLmF1dGhvcmluZ0Jhc2V9JHtlbmNvZGVVUklDb21wb25lbnQoZ3JvdXAxKX0ke2dyb3VwMn1gXG4gIH1cblxuICByZXBsYWNlVG9BdXRoVXJsKGRhdGE6IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoXG4gICAgICBKU09OLnN0cmluZ2lmeShkYXRhKS5yZXBsYWNlKFxuICAgICAgICB0aGlzLmRvd25sb2FkUmVnZXgsXG4gICAgICAgIHRoaXMucmVnZXhEb3dubG9hZFJlcGxhY2UsXG4gICAgICApLFxuICAgIClcbiAgfVxuICByZWFkU2VjdGlvbnMoYXNzZXNzbWVudElkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5BUElfRU5EUE9JTlRTfS8ke2Fzc2Vzc21lbnRJZH1gXG4gIH1cblxuICBnZXRQdWJsaWNVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1haW5VcmwgPSB1cmwuc3BsaXQoJy9jb250ZW50JykucG9wKCkgfHwgJydcbiAgICByZXR1cm4gYCR7dGhpcy5lbnZpcm9ubWVudC5jb250ZW50SG9zdH0vJHt0aGlzLmVudmlyb25tZW50LmNvbnRlbnRCdWNrZXR9L2NvbnRlbnQke21haW5Vcmx9YFxuICB9XG5cbiAgZ2V0Q2RuVXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBtYWluVXJsID0gdXJsLnNwbGl0KCcvY29udGVudCcpLnBvcCgpIHx8ICcnXG4gICAgcmV0dXJuIGAke3RoaXMuZG9tYWluQ29uZlN2Yy5nZXREb21haW5DRE5Ib3N0KCl9LyR7dGhpcy5lbnZpcm9ubWVudC5jZG5Db250ZW50QnVja2V0fS9jb250ZW50JHttYWluVXJsfWBcbiAgfVxuXG4gIC8vICBmZXRjaENvbnRlbnQoXG4gIC8vICAgY29udGVudElkOiBzdHJpbmcsXG4gIC8vICAgaGllcmFyY2h5VHlwZTogJ2FsbCcgfCAnbWluaW1hbCcgfCAnZGV0YWlsJyA9ICdkZXRhaWwnXG4gIC8vICAgKTogT2JzZXJ2YWJsZTxOc0NvbnRlbnQuSUNvbnRlbnQ+IHtcbiAgLy8gICAgIGxldCB1cmwgPSAnJ1xuICAvLyAgICAgY29uc3QgZm9yUHJldmlldyA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCcvcHVibGljLycpIHx8IHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCcmcHJldmlldz10cnVlJylcbiAgLy8gICAgICAgaWYgKCFmb3JQcmV2aWV3KSB7XG4gIC8vICAgICAgICAgdXJsID0gYC9hcGlzL3Byb3hpZXMvdjgvYWN0aW9uL2NvbnRlbnQvdjMvaGllcmFyY2h5LyR7Y29udGVudElkfT9oaWVyYXJjaHlUeXBlPSR7aGllcmFyY2h5VHlwZX1gXG4gIC8vICAgICAgIH0gZWxzZSB7XG4gIC8vICAgICAgICAgdXJsID0gYC9hcGkvY291cnNlL3YxL2hpZXJhcmNoeS8ke2NvbnRlbnRJZH0/aGllcmFyY2h5VHlwZT0ke2hpZXJhcmNoeVR5cGV9YFxuICAvLyAgICAgICB9XG4gIC8vICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE5zQ29udGVudC5JQ29udGVudD4odXJsKVxuICAvLyAgIH1cblxuICBmZXRjaENvbnRlbnQoaWQ6IHN0cmluZywgdHlwZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TnNDb250ZW50LklDb250ZW50PihgL2FwaXMvcHJveGllcy92OC9hY3Rpb24vY29udGVudC92My9oaWVyYXJjaHkvJHtpZH0/bW9kZT0ke3R5cGV9YClcbiAgfVxuXG4gIHVwZGF0ZUNvbnRlbnRIYXNoTWFwRm9yQXNzZXNzdGVudChjb250ZW50SWQ6IHN0cmluZywgY29udGVudFByb2dyZXNzOiBhbnkpIHtcbiAgICBjb25zb2xlLmxvZygn8J+TiiBbVVBEQVRFIEhBU0hNQVBdIFVwZGF0aW5nIGFzc2Vzc21lbnQgaW4gaGFzaG1hcDonLCB7XG4gICAgICBjb250ZW50SWQsXG4gICAgICBpbmNvbWluZ1Byb2dyZXNzOiBjb250ZW50UHJvZ3Jlc3MsXG4gICAgICBjdXJyZW50SGFzaG1hcERhdGE6IHRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXSA/IHtcbiAgICAgICAgY29tcGxldGlvblBlcmNlbnRhZ2U6IHRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXVsnY29tcGxldGlvblBlcmNlbnRhZ2UnXSxcbiAgICAgICAgY29tcGxldGlvblN0YXR1czogdGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdWydjb21wbGV0aW9uU3RhdHVzJ10sXG4gICAgICAgIHN0YXR1czogdGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdWydzdGF0dXMnXVxuICAgICAgfSA6ICdub3QgZm91bmQnXG4gICAgfSlcbiAgICBcbiAgICBpZiAodGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdKSB7XG4gICAgICBjb25zdCBjdXJyZW50U3RhdHVzID0gdGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdWydjb21wbGV0aW9uU3RhdHVzJ10gfHwgMFxuICAgICAgY29uc3QgbmV3U3RhdHVzID0gTnVtYmVyKGNvbnRlbnRQcm9ncmVzcy5zdGF0dXMpIHx8IDBcbiAgICAgIFxuICAgICAgLy8gVXBkYXRlIGlmIG5vdCBjb21wbGV0ZSBvciBpZiBuZXcgc3RhdHVzIGlzIGhpZ2hlclxuICAgICAgaWYgKGN1cnJlbnRTdGF0dXMgPCAyIHx8IG5ld1N0YXR1cyA+PSBjdXJyZW50U3RhdHVzKSB7XG4gICAgICAgIHRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXVsnY29tcGxldGlvblBlcmNlbnRhZ2UnXSA9IGNvbnRlbnRQcm9ncmVzcy5jb21wbGV0aW9uUGVyY2VudGFnZVxuICAgICAgICB0aGlzLnRvY1N2Yy5oYXNobWFwW2NvbnRlbnRJZF1bJ2NvbXBsZXRpb25TdGF0dXMnXSA9IG5ld1N0YXR1c1xuICAgICAgICB0aGlzLnRvY1N2Yy5oYXNobWFwW2NvbnRlbnRJZF1bJ3N0YXR1cyddID0gbmV3U3RhdHVzXG4gICAgICAgIFxuICAgICAgICBjb25zb2xlLmxvZygn4pyFIFtVUERBVEUgSEFTSE1BUF0gVXBkYXRlZCBhc3Nlc3NtZW50OicsIHtcbiAgICAgICAgICBjb250ZW50SWQsXG4gICAgICAgICAgbmFtZTogdGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdWyduYW1lJ10sXG4gICAgICAgICAgY29tcGxldGlvblBlcmNlbnRhZ2U6IGNvbnRlbnRQcm9ncmVzcy5jb21wbGV0aW9uUGVyY2VudGFnZSxcbiAgICAgICAgICBjb21wbGV0aW9uU3RhdHVzOiBuZXdTdGF0dXMsXG4gICAgICAgICAgc3RhdHVzOiBuZXdTdGF0dXNcbiAgICAgICAgfSlcbiAgICAgICAgXG4gICAgICAgIC8vIENyZWF0ZSBuZXcgaGFzaG1hcCByZWZlcmVuY2UgZm9yIEFuZ3VsYXIgY2hhbmdlIGRldGVjdGlvblxuICAgICAgICB0aGlzLnRvY1N2Yy5oYXNobWFwID0geyAuLi50aGlzLnRvY1N2Yy5oYXNobWFwIH1cbiAgICAgICAgXG4gICAgICAgIC8vIFRyaWdnZXIgbWlsZXN0b25lIGxvY2sgcmVjb21wdXRhdGlvbiAtIGl0IHdpbGwgZW1pdCBoYXNobWFwVXBkYXRlZCB3aXRoIGJvdGggcHJvZ3Jlc3MgYW5kIGxvY2sgY2hhbmdlc1xuICAgICAgICBpZiAodGhpcy50b2NTdmMudHJpZ2dlck1pbGVzdG9uZUxvY2tVcGRhdGUpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygn8J+UhCBbVVBEQVRFIEhBU0hNQVBdIFRyaWdnZXJpbmcgbWlsZXN0b25lIGxvY2sgdXBkYXRlIGFmdGVyIGFzc2Vzc21lbnQgdXBkYXRlJylcbiAgICAgICAgICB0aGlzLnRvY1N2Yy50cmlnZ2VyTWlsZXN0b25lTG9ja1VwZGF0ZSgpXG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIEVtaXQgdG8gdHJpZ2dlciB2aWV3ZXIgY29tcG9uZW50IHJlZnJlc2ggZm9yIExlYXJuaW5nIFBhdGh3YXlzXG4gICAgICAgIHRoaXMubWFya0FzQ29tcGxldGVTdWJqZWN0Lm5leHQodHJ1ZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCfihLnvuI8gW1VQREFURSBIQVNITUFQXSBTa2lwcGluZyB1cGRhdGUgLSBhbHJlYWR5IGNvbXBsZXRlIG9yIGxvd2VyIHN0YXR1cycpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKCfimqDvuI8gW1VQREFURSBIQVNITUFQXSBDb250ZW50IG5vdCBmb3VuZCBpbiBoYXNobWFwOicsIGNvbnRlbnRJZClcbiAgICB9XG4gIH1cblxuICBnZXRGb3JtQnlJZChmb3JtSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuQVBJX0VORFBPSU5UUy5HRVRfRk9STV9CWUlEKGZvcm1JZCkpXG4gIH1cblxuICBzdWJtaXRGb3JtKGZvcm1EYXRhOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55Pih0aGlzLkFQSV9FTkRQT0lOVFMuU1VCTUlUX0ZPUk0sIGZvcm1EYXRhKVxuICB9XG5cbiAgcmVhbFRpbWVQcm9ncmVzc1VwZGF0ZUZvclByZUFzc2Vzc21lbnQoY29udGVudElkOiBzdHJpbmcsIHJlcXVlc3Q6IGFueSkge1xuICAgIGxldCByZXE6IGFueVxuICAgIGlmICh0aGlzLmNvbmZpZ3NlcnZpY2UudXNlclByb2ZpbGUpIHtcbiAgICAgIHJlcSA9IHtcbiAgICAgICAgcmVxdWVzdDoge1xuICAgICAgICAgIHVzZXJJZDogdGhpcy5jb25maWdzZXJ2aWNlLnVzZXJQcm9maWxlLnVzZXJJZCB8fCAnJyxcbiAgICAgICAgICBjb250ZW50czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjb250ZW50SWQsXG4gICAgICAgICAgICAgIC8vIGJhdGNoSWQsXG4gICAgICAgICAgICAgIHN0YXR1czogdGhpcy5nZXRTdGF0dXMocmVxdWVzdC5jdXJyZW50LCByZXF1ZXN0Lm1heF9zaXplLCByZXF1ZXN0Lm1pbWVfdHlwZSksXG4gICAgICAgICAgICAgIC8vIGNvdXJzZUlkOiBjb2xsZWN0aW9uSWQsXG4gICAgICAgICAgICAgIGxhc3RBY2Nlc3NUaW1lOiBkYXlqcyhuZXcgRGF0ZSgpKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW06c3M6U1NTWlonKSxcbiAgICAgICAgICAgICAgcHJvZ3Jlc3NkZXRhaWxzOiB7XG4gICAgICAgICAgICAgICAgbWF4X3NpemU6IHJlcXVlc3QubWF4X3NpemUsXG4gICAgICAgICAgICAgICAgY3VycmVudDogcmVxdWVzdC5jdXJyZW50LFxuICAgICAgICAgICAgICAgIG1pbWVUeXBlOiByZXF1ZXN0Lm1pbWVfdHlwZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgY29tcGxldGlvblBlcmNlbnRhZ2U6IHRoaXMuY2FsY3VsYXRlUGVyY2VudChyZXF1ZXN0LmN1cnJlbnQsIHJlcXVlc3QubWF4X3NpemUsIHJlcXVlc3QubWltZV90eXBlKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICAgIC8vIGlmICh0aGlzLmNvbmZpZ3NlcnZpY2UuY3N0b2tlbiAhPT0gJycpIHtcbiAgICAgIC8vICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpXG4gICAgICAvLyAgIC5zZXQoJ2NzdG9rZW4nLCB0aGlzLmNvbmZpZ3NlcnZpY2UuY3N0b2tlbilcblxuICAgICAgLy8gICB0aGlzLmh0dHBcbiAgICAgIC8vICAgLnBhdGNoKGAke3RoaXMuQVBJX0VORFBPSU5UUy5QUk9HUkVTU19VUERBVEV9LyR7Y29udGVudElkfWAsIHsgaGVhZGVycyB9ICwgcmVxKVxuICAgICAgLy8gICAuc3Vic2NyaWJlKG5vb3AsIG5vb3ApXG4gICAgICAvLyB9IGVsc2Uge1xuICAgICAgLy8gICB0aGlzLmh0dHBcbiAgICAgIC8vICAgLnBhdGNoKGAke3RoaXMuQVBJX0VORFBPSU5UUy5QUk9HUkVTU19VUERBVEV9LyR7Y29udGVudElkfWAsIHJlcSlcbiAgICAgIC8vICAgLnN1YnNjcmliZShub29wLCBub29wKVxuICAgICAgLy8gfVxuICAgICAgLy8gdGhpcy5odHRwXG4gICAgICAvLyAgIC5wYXRjaChgJHt0aGlzLkFQSV9FTkRQT0lOVFMuUFJPR1JFU1NfVVBEQVRFfS8ke2NvbnRlbnRJZH1gLCByZXEpXG4gICAgICAvLyAgIC5zdWJzY3JpYmUobm9vcCwgbm9vcClcbiAgICAgIC8vY29uc3QgY29udGVudElkTmV3PSByZXEucmVxdWVzdC5jb250ZW50c1swXS5jb250ZW50SWRcbiAgICAgIC8vIGNvbnN0IHVwZGF0ZWRDb21wbGV0aW9uUGVyY2VudGFnZSA9IHJlcS5yZXF1ZXN0LmNvbnRlbnRzWzBdLmNvbXBsZXRpb25QZXJjZW50YWdlXG4gICAgICAvLyBjb25zdCB1cGRhdGVkU3RhdHVzID0gcmVxLnJlcXVlc3QuY29udGVudHNbMF0uc3RhdHVzXG5cbiAgICAgIC8vIC8vIENsb25lIHRoZSBpbm5lciBvYmplY3QgYW5kIHVwZGF0ZVxuICAgICAgLy8gY29uc3QgZXhpc3RpbmdDb250ZW50ID0gdGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWROZXddIHx8IHt9XG5cbiAgICAgIC8vIHRoaXMudG9jU3ZjLmhhc2htYXAgPSB7XG4gICAgICAvLyAgIC4uLnRoaXMudG9jU3ZjLmhhc2htYXAsXG4gICAgICAvLyAgIFtjb250ZW50SWROZXddOiB7XG4gICAgICAvLyAgICAgLi4uZXhpc3RpbmdDb250ZW50LFxuICAgICAgLy8gICAgIGNvbXBsZXRpb25QZXJjZW50YWdlOiB1cGRhdGVkQ29tcGxldGlvblBlcmNlbnRhZ2UsXG4gICAgICAvLyAgICAgY29tcGxldGlvblN0YXR1czogdXBkYXRlZFN0YXR1c1xuICAgICAgLy8gICB9XG4gICAgICAvLyB9XG4gICAgICAvLyBjb25zb2xlLmxvZygncmVxJywgSlNPTi5zdHJpbmdpZnkocmVxKSlcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdyZXEnLCByZXEpXG5cbiAgICAgIGNvbnN0IHJlc291cmNlU3RhdHVzID0gdGhpcy5nZXRQcmVBc3Nlc3NtZW50UmVzb3VyY2VTdGF0dXMoY29udGVudElkKVxuICAgICAgaWYgKHJlc291cmNlU3RhdHVzIDwgMikge1xuICAgICAgICB0aGlzLmh0dHBcbiAgICAgICAgICAucGF0Y2goYCR7dGhpcy5BUElfRU5EUE9JTlRTLlBSRV9BU1NFU1NNRU5UX1NUQVRFX1VQREFURX1gLCByZXEpXG4gICAgICAgICAgLnN1YnNjcmliZShub29wLCBub29wKVxuICAgICAgfVxuICAgICAgXG4gICAgICBpZiAodGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdICYmXG4gICAgICAgICghdGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdWydjb21wbGV0aW9uU3RhdHVzJ10gfHwgdGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdWydjb21wbGV0aW9uU3RhdHVzJ10gPCAyKSkge1xuICAgICAgICB0aGlzLnRvY1N2Yy5oYXNobWFwW2NvbnRlbnRJZF1bJ2NvbXBsZXRpb25QZXJjZW50YWdlJ10gPSByZXEucmVxdWVzdC5jb250ZW50c1swXS5jb21wbGV0aW9uUGVyY2VudGFnZVxuICAgICAgICB0aGlzLnRvY1N2Yy5oYXNobWFwW2NvbnRlbnRJZF1bJ2NvbXBsZXRpb25TdGF0dXMnXSA9IE51bWJlcihyZXEucmVxdWVzdC5jb250ZW50c1swXS5zdGF0dXMpIHx8IDBcbiAgICAgICAgdGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdWydwYXJlbnQnXSA9IHJlcS5yZXF1ZXN0LmNvbnRlbnRzWzBdLmNvdXJzZUlkXG4gICAgICAgIHRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXVsncHJvZ3Jlc3MnXSA9IHJlcS5yZXF1ZXN0LmNvbnRlbnRzWzBdLnByb2dyZXNzZGV0YWlsc1xuICAgICAgICB0aGlzLnRvY1N2Yy5oYXNobWFwID0geyAuLi50aGlzLnRvY1N2Yy5oYXNobWFwIH1cbiAgICAgICAgXG4gICAgICAgIC8vIFRyaWdnZXIgbWlsZXN0b25lIGxvY2sgcmVjb21wdXRhdGlvbiAtIGl0IHdpbGwgZW1pdCBoYXNobWFwVXBkYXRlZCB3aXRoIGJvdGggcHJvZ3Jlc3MgYW5kIGxvY2sgY2hhbmdlc1xuICAgICAgICBpZiAodGhpcy50b2NTdmMudHJpZ2dlck1pbGVzdG9uZUxvY2tVcGRhdGUpIHtcbiAgICAgICAgICB0aGlzLnRvY1N2Yy50cmlnZ2VyTWlsZXN0b25lTG9ja1VwZGF0ZSgpXG4gICAgICAgIH1cbiAgICAgICAgICAvLyBFbWl0IHRvIHRyaWdnZXIgdmlld2VyIGNvbXBvbmVudCByZWZyZXNoIGZvciBMZWFybmluZyBQYXRod2F5c1xuICAgICAgICAgIHRoaXMubWFya0FzQ29tcGxldGVTdWJqZWN0Lm5leHQodHJ1ZSlcbiAgICAgIH1cblxuICAgICAgLy8gY29uc29sZS5sb2coJ1VwZGF0ZWQgaGFzaG1hcDonLCB0aGlzLnRvY1N2Yy5oYXNobWFwKVxuXG4gICAgICAvLyBjb25zb2xlLmxvZygndGhpcy50b2NTdmMuaGFzaG1hcC0tLScsIHRoaXMudG9jU3ZjLmhhc2htYXApXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcSA9IHt9XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfVxuICB9XG5cbiAgcmVhbFRpbWVQcm9ncmVzc1VwZGF0ZUZvclByZUFzc2Vzc21lbnRRdWl6KGNvbnRlbnRJZDogc3RyaW5nLCBzdGF0dXM/OiBudW1iZXIsIG1pbWVUeXBlPzogc3RyaW5nKSB7XG4gICAgbGV0IHJlcTogYW55XG4gICAgaWYgKHRoaXMuY29uZmlnc2VydmljZS51c2VyUHJvZmlsZSkge1xuICAgICAgcmVxID0ge1xuICAgICAgICByZXF1ZXN0OiB7XG4gICAgICAgICAgLy91c2VySWQ6IHRoaXMuY29uZmlnc2VydmljZS51c2VyUHJvZmlsZS51c2VySWQgfHwgJycsXG4gICAgICAgICAgY29udGVudHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY29udGVudElkLFxuICAgICAgICAgICAgICAvLyBiYXRjaElkLFxuICAgICAgICAgICAgICBzdGF0dXM6IHN0YXR1cyB8fCAyLFxuICAgICAgICAgICAgICAvLyBjb3Vyc2VJZDogY29sbGVjdGlvbklkLFxuICAgICAgICAgICAgICBsYXN0QWNjZXNzVGltZTogZGF5anMobmV3IERhdGUoKSkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tOnNzOlNTU1paJyksXG4gICAgICAgICAgICAgIGNvbXBsZXRpb25QZXJjZW50YWdlOiBzdGF0dXMgPT09IDIgPyAxMDAuMCA6IDAsXG4gICAgICAgICAgICAgIHByb2dyZXNzZGV0YWlsczoge1xuICAgICAgICAgICAgICAgIFwibWltZVR5cGVcIjogbWltZVR5cGUgfHwgXCJhcHBsaWNhdGlvbi92bmQuc3VuYmlyZC5xdWVzdGlvbnNldFwiXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgICBjb25zdCByZXNvdXJjZVN0YXR1cyA9IHRoaXMuZ2V0UHJlQXNzZXNzbWVudFJlc291cmNlU3RhdHVzKGNvbnRlbnRJZClcbiAgICAgIGlmIChyZXNvdXJjZVN0YXR1cyA8IDIpIHtcbiAgICAgICAgdGhpcy5odHRwXG4gICAgICAgICAgLnBhdGNoKGAke3RoaXMuQVBJX0VORFBPSU5UUy5QUkVfQVNTRVNTTUVOVF9TVEFURV9VUERBVEV9YCwgcmVxKVxuICAgICAgICAgIC5zdWJzY3JpYmUobm9vcCwgbm9vcClcbiAgICAgIH1cbiAgICAgIFxuICAgICAgY29uc29sZS5sb2coJ/Cfjq8gW1BSRS1BU1NFU1NNRU5UIFFVSVpdIFVwZGF0aW5nIHByb2dyZXNzIGZvcjonLCBjb250ZW50SWQpXG4gICAgICBjb25zb2xlLmxvZygnICAgU3RhdHVzOicsIHN0YXR1cywgJ0NvbXBsZXRpb246JywgcmVxLnJlcXVlc3QuY29udGVudHNbMF0uY29tcGxldGlvblBlcmNlbnRhZ2UpXG4gICAgICBcbiAgICAgIC8vIFVwZGF0ZSBoYXNobWFwIC0gY3JlYXRlIGVudHJ5IGlmIGl0IGRvZXNuJ3QgZXhpc3RcbiAgICAgIGlmICh0aGlzLnRvY1N2Yy5oYXNobWFwKSB7XG4gICAgICAgIGlmICghdGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdKSB7XG4gICAgICAgICAgLy8gQ3JlYXRlIG5ldyBlbnRyeSBmb3IgcHJlLWFzc2Vzc21lbnQgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICAgIGNvbnNvbGUubG9nKCcgICBDcmVhdGluZyBuZXcgaGFzaG1hcCBlbnRyeSBmb3IgcHJlLWFzc2Vzc21lbnQnKVxuICAgICAgICAgIHRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXSA9IHtcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IGNvbnRlbnRJZCxcbiAgICAgICAgICAgIGNvbXBsZXRpb25QZXJjZW50YWdlOiByZXEucmVxdWVzdC5jb250ZW50c1swXS5jb21wbGV0aW9uUGVyY2VudGFnZSxcbiAgICAgICAgICAgIGNvbXBsZXRpb25TdGF0dXM6IE51bWJlcihyZXEucmVxdWVzdC5jb250ZW50c1swXS5zdGF0dXMpIHx8IDAsXG4gICAgICAgICAgICBzdGF0dXM6IE51bWJlcihyZXEucmVxdWVzdC5jb250ZW50c1swXS5zdGF0dXMpIHx8IDAsXG4gICAgICAgICAgICBpc1ByZUFzc2Vzc21lbnQ6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gVXBkYXRlIGV4aXN0aW5nIGVudHJ5XG4gICAgICAgICAgY29uc29sZS5sb2coJyAgIFVwZGF0aW5nIGV4aXN0aW5nIGhhc2htYXAgZW50cnknKVxuICAgICAgICAgIHRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXVsnY29tcGxldGlvblBlcmNlbnRhZ2UnXSA9IHJlcS5yZXF1ZXN0LmNvbnRlbnRzWzBdLmNvbXBsZXRpb25QZXJjZW50YWdlXG4gICAgICAgICAgdGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdWydjb21wbGV0aW9uU3RhdHVzJ10gPSBOdW1iZXIocmVxLnJlcXVlc3QuY29udGVudHNbMF0uc3RhdHVzKSB8fCAwXG4gICAgICAgICAgdGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdWydzdGF0dXMnXSA9IE51bWJlcihyZXEucmVxdWVzdC5jb250ZW50c1swXS5zdGF0dXMpIHx8IDBcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgY29uc29sZS5sb2coJyAgIEhhc2htYXAgZW50cnkgYWZ0ZXIgdXBkYXRlOicsIHRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXSlcbiAgICAgICAgdGhpcy50b2NTdmMuaGFzaG1hcCA9IHsgLi4udGhpcy50b2NTdmMuaGFzaG1hcCB9XG4gICAgICAgIFxuICAgICAgICAvLyBBTFdBWVMgdHJpZ2dlciBtaWxlc3RvbmUgbG9jayByZWNvbXB1dGF0aW9uIHdoZW4gcHJlLWFzc2Vzc21lbnQgY29tcGxldGVzXG4gICAgICAgIC8vIFRoaXMgZW5zdXJlcyBtaWxlc3RvbmUgMSB1bmxvY2tzIGltbWVkaWF0ZWx5IGFmdGVyIHByZS1hc3Nlc3NtZW50IGNvbXBsZXRpb25cbiAgICAgICAgY29uc29sZS5sb2coJ/CflIQgW1BSRS1BU1NFU1NNRU5UIFFVSVpdIFRyaWdnZXJpbmcgbWlsZXN0b25lIGxvY2sgdXBkYXRlJylcbiAgICAgICAgaWYgKHRoaXMudG9jU3ZjLnRyaWdnZXJNaWxlc3RvbmVMb2NrVXBkYXRlKSB7XG4gICAgICAgICAgdGhpcy50b2NTdmMudHJpZ2dlck1pbGVzdG9uZUxvY2tVcGRhdGUoKVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBFbWl0IG1hcmtBc0NvbXBsZXRlU3ViamVjdCB0byB0cmlnZ2VyIHZpZXdlciBjb21wb25lbnQgdG8gcmVmcmVzaCBlbnJvbGxtZW50IGFuZCBwcm9ncmVzc1xuICAgICAgICAvLyBUaGlzIGlzIGNyaXRpY2FsIGZvciBMZWFybmluZyBQYXRod2F5cyB0byB1bmxvY2sgbWlsZXN0b25lcyBpbW1lZGlhdGVseVxuICAgICAgICB0aGlzLm1hcmtBc0NvbXBsZXRlU3ViamVjdC5uZXh0KHRydWUpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcSA9IHt9XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfVxuICB9XG5cbiAgZ2V0UHJlQXNzZXNzbWVudFJlc291cmNlU3RhdHVzKHJlc291cmNlSWQ6IHN0cmluZykge1xuICAgIGlmICh0aGlzLnRvY1N2YyAmJiB0aGlzLnRvY1N2Yy5oYXNobWFwICYmIHRoaXMudG9jU3ZjLmhhc2htYXBbcmVzb3VyY2VJZF0pIHtcbiAgICAgIHJldHVybiB0aGlzLnRvY1N2Yy5oYXNobWFwW3Jlc291cmNlSWRdWydjb21wbGV0aW9uU3RhdHVzJ10gfHwgMVxuICAgIH1cbiAgICByZXR1cm4gMVxuICB9XG5cblxufVxuIl19
|
|
627
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld2VyLXV0aWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi90b2Mvc3JjL2xpYi9zZXJ2aWNlcy92aWV3ZXItdXRpbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUVsRCxPQUFPLEVBQUUsSUFBSSxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUNoRCxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUE7Ozs7Ozs7QUFRekIsTUFBTSxPQUFPLGlCQUFpQjtJQW9CNUIsWUFDVSxJQUFnQixFQUNoQixhQUFvQyxFQUNwQyxVQUFnQyxFQUNoQyxNQUFxQixFQUNyQixPQUE2QixFQUM3QixjQUFzQyxFQUN0QyxhQUFnQyxFQUNULFdBQWdCO1FBUHZDLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsa0JBQWEsR0FBYixhQUFhLENBQXVCO1FBQ3BDLGVBQVUsR0FBVixVQUFVLENBQXNCO1FBQ2hDLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsWUFBTyxHQUFQLE9BQU8sQ0FBc0I7UUFDN0IsbUJBQWMsR0FBZCxjQUFjLENBQXdCO1FBQ3RDLGtCQUFhLEdBQWIsYUFBYSxDQUFtQjtRQUNULGdCQUFXLEdBQVgsV0FBVyxDQUFLO1FBM0JqRCxrQkFBYSxHQUFHO1lBQ2QsV0FBVyxFQUFFLHNDQUFzQztZQUNuRCxzRUFBc0U7WUFDdEUsZUFBZSxFQUFFLGtDQUFrQztZQUNuRCxrQkFBa0IsRUFBRSxxQ0FBcUM7WUFDekQsYUFBYSxFQUFFLENBQUMsTUFBYyxFQUFFLEVBQUUsQ0FBQywrQ0FBK0MsTUFBTSxFQUFFO1lBQzFGLFdBQVcsRUFBRSwwQ0FBMEM7WUFDdkQsdUZBQXVGO1lBQ3ZG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QUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO2FBQ3RDO1NBQ0Y7YUFBTTtZQUNMLEdBQUcsR0FBRyxFQUFFLENBQUE7WUFDUixhQUFhO1NBQ2Q7SUFDSCxDQUFDO0lBRUQsOEJBQThCLENBQUMsVUFBa0I7UUFDL0MsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3pFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUE7U0FDaEU7UUFDRCxPQUFPLENBQUMsQ0FBQTtJQUNWLENBQUM7K0dBeHBCVSxpQkFBaUIsNlBBNEJsQixhQUFhO21IQTVCWixpQkFBaUIsY0FGaEIsTUFBTTs7NEZBRVAsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBNkJJLE1BQU07MkJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbmZpZ3VyYXRpb25zU2VydmljZSwgRG9tYWluQ29uZlNlcnZpY2UgfSBmcm9tICdAc3VuYmlyZC1jYi91dGlscy12MidcbmltcG9ydCB7IE5zQ29udGVudCB9IGZyb20gJy4uL19zZXJ2aWNlcy93aWRnZXQtY29udGVudC5tb2RlbCdcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnXG5pbXBvcnQgeyBub29wLCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcydcbmltcG9ydCBkYXlqcyBmcm9tICdkYXlqcydcbmltcG9ydCB7IEFwcFRvY1NlcnZpY2UgfSBmcm9tICcuL2FwcC10b2Muc2VydmljZSdcbmltcG9ydCB7IENvbnRlbnRMYW5ndWFnZVNlcnZpY2UsIFdpZGdldFVzZXJTZXJ2aWNlTGliIH0gZnJvbSAnQHN1bmJpcmQtY2IvY29uc3VtcHRpb24nXG5pbXBvcnQgeyBXaWRnZXRDb250ZW50U2VydmljZSB9IGZyb20gJy4uL19jb2xsZWN0aW9uLWFwaSdcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFZpZXdlclV0aWxTZXJ2aWNlIHtcbiAgQVBJX0VORFBPSU5UUyA9IHtcbiAgICBzZXRTM0Nvb2tpZTogYC9hcGlzL3Y4L3Byb3RlY3RlZC9jb250ZW50L3NldENvb2tpZWAsXG4gICAgLy8gUFJPR1JFU1NfVVBEQVRFOiBgL2FwaXMvcHJvdGVjdGVkL3Y4L3VzZXIvcmVhbFRpbWVQcm9ncmVzcy91cGRhdGVgLFxuICAgIFBST0dSRVNTX1VQREFURTogYC9hcGlzL3Byb3hpZXMvdjgvY29udGVudC1wcm9ncmVzYCxcbiAgICBBU1NFU1NNRU5UX1NFQ1RJT046IGAvYXBpcy9wcm94aWVzL3Y4L2Fzc2Vzc21lbnQvdjUvcmVhZGAsXG4gICAgR0VUX0ZPUk1fQllJRDogKGZvcm1JZDogc3RyaW5nKSA9PiBgYXBpcy9wcm94aWVzL3Y4L2Zvcm1zL3YyL2dldEZvcm1CeUlkP2Zvcm1JZD0ke2Zvcm1JZH1gLFxuICAgIFNVQk1JVF9GT1JNOiBgL2FwaXMvcHJveGllcy92OC9mb3Jtcy92Mi9zYXZlRm9ybVN1Ym1pdGAsXG4gICAgLy8gR0VUX0ZPUk1fQllJRDogKGZvcm1JZDogc3RyaW5nKSA9PiBgYXBpcy9wcm94aWVzL3Y4L2Zvcm1zL2dldEZvcm1CeUlkP2lkPSR7Zm9ybUlkfWAsXG4gICAgLy8gU1VCTUlUX0ZPUk06IGAvYXBpcy9wcm94aWVzL3Y4L2Zvcm1zL3YxL3NhdmVGb3JtU3VibWl0YCxcbiAgICBQUkVfQVNTRVNTTUVOVF9TVEFURV9VUERBVEU6IGAvYXBpcy9wcm94aWVzL3Y4L2NvbnRlbnQvdjIvc3RhdGUvdXBkYXRlYFxuXG4gIH1cbiAgZG93bmxvYWRSZWdleCA9IG5ldyBSZWdFeHAoYCgvY29udGVudC1zdG9yZS8uKj8pKFxcXFxcXCk/XFxcXFxcXFw/WydcIl0pYCwgJ2dtJylcbiAgYXV0aG9yaW5nQmFzZSA9ICcvYXBpcy9hdXRoQ29udGVudC8nXG4gIG1hcmtBc0NvbXBsZXRlU3ViamVjdCA9IG5ldyBTdWJqZWN0KClcbiAgYXV0b1BsYXlOZXh0VmlkZW8gPSBuZXcgU3ViamVjdCgpXG4gIGF1dG9QbGF5TmV4dEF1ZGlvID0gbmV3IFN1YmplY3QoKVxuICBmb3JQcmV2aWV3ID0gd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJy9wdWJsaWMvJykgfHwgd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJyZwcmV2aWV3PXRydWUnKVxuICBwdWJsaWNVc2VyRGV0YWlsczogYW55ID0ge31cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgY29uZmlnc2VydmljZTogQ29uZmlndXJhdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29udGVudFN2YzogV2lkZ2V0Q29udGVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0b2NTdmM6IEFwcFRvY1NlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VyU3ZjOiBXaWRnZXRVc2VyU2VydmljZUxpYixcbiAgICBwcml2YXRlIGNvbnRlbnRMYW5nU3ZjOiBDb250ZW50TGFuZ3VhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgZG9tYWluQ29uZlN2YzogRG9tYWluQ29uZlNlcnZpY2UsXG4gICAgQEluamVjdCgnZW52aXJvbm1lbnQnKSBwcml2YXRlIGVudmlyb25tZW50OiBhbnlcbiAgKSB7IH1cblxuICBhc3luYyBmZXRjaE1hbmlmZXN0RmlsZSh1cmw6IHN0cmluZykge1xuICAgIHRoaXMuc2V0UzNDb29raWUodXJsKVxuICAgIGNvbnN0IG1hbmlmZXN0RmlsZSA9IGF3YWl0IHRoaXMuaHR0cFxuICAgICAgLmdldDxhbnk+KHVybClcbiAgICAgIC50b1Byb21pc2UoKVxuICAgICAgLmNhdGNoKChfZXJyOiBhbnkpID0+IHsgfSlcbiAgICByZXR1cm4gbWFuaWZlc3RGaWxlXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNldFMzQ29va2llKF9jb250ZW50SWQ6IHN0cmluZykge1xuICAgIC8vIGF3YWl0IHRoaXMuaHR0cFxuICAgIC8vICAgLnBvc3QodGhpcy5BUElfRU5EUE9JTlRTLnNldFMzQ29va2llLCB7IGNvbnRlbnRJZCB9KVxuICAgIC8vICAgLnRvUHJvbWlzZSgpXG4gICAgLy8gICAuY2F0Y2goKF9lcnI6IGFueSkgPT4geyB9KVxuICAgIHJldHVyblxuICB9XG5cbiAgY2FsY3VsYXRlUGVyY2VudChjdXJyZW50OiBzdHJpbmdbXSwgbWF4OiBudW1iZXIsIG1pbWVUeXBlPzogc3RyaW5nKTogbnVtYmVyIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdGVtcCA9IFsuLi5jdXJyZW50XVxuICAgICAgaWYgKHRlbXAgJiYgdGVtcC5sZW5ndGggJiYgbWF4KSB7XG4gICAgICAgIGNvbnN0IGxhdGVzdCA9IHBhcnNlRmxvYXQodGVtcC5wb3AoKSB8fCAnMCcpXG4gICAgICAgIGNvbnN0IHBlcmNlbnRNaWxpcyA9IChsYXRlc3QgLyBtYXgpICogMTAwXG4gICAgICAgIGxldCBwZXJjZW50ID0gcGFyc2VGbG9hdChwZXJjZW50TWlsaXMudG9GaXhlZCgyKSlcbiAgICAgICAgaWYgKFxuICAgICAgICAgIG1pbWVUeXBlID09PSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5NUDQgfHxcbiAgICAgICAgICBtaW1lVHlwZSA9PT0gTnNDb250ZW50LkVNaW1lVHlwZXMuTTNVOCB8fFxuICAgICAgICAgIG1pbWVUeXBlID09PSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5NUDMgfHxcbiAgICAgICAgICBtaW1lVHlwZSA9PT0gTnNDb250ZW50LkVNaW1lVHlwZXMuTTRBIHx8XG4gICAgICAgICAgbWltZVR5cGUgPT09IE5zQ29udGVudC5FTWltZVR5cGVzLllPVVRVQkUgfHxcbiAgICAgICAgICBtaW1lVHlwZSA9PT0gTnNDb250ZW50LkVNaW1lVHlwZXMuU1VSVkVZXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChwZXJjZW50IDw9IDUpIHtcbiAgICAgICAgICAgIC8vIGlmIHBlcmNlbnRhZ2UgaXMgbGVzcyB0aGFuIDUlIG1ha2UgaXQgMFxuICAgICAgICAgICAgcGVyY2VudCA9IDBcbiAgICAgICAgICB9IGVsc2UgaWYgKHBlcmNlbnQgPj0gOTUpIHtcbiAgICAgICAgICAgIC8vIGlmIHBlcmNlbnRhZ2UgaXMgZ3JlYXRlciB0aGFuIDk1JSBtYWtlIGl0IDEwMFxuICAgICAgICAgICAgcGVyY2VudCA9IDEwMFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGVyY2VudFxuICAgICAgfVxuICAgICAgcmV0dXJuIDBcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBpbiBjYWxjdWxhdGluZyBwZXJjZW50YWdlJywgZSlcbiAgICAgIHJldHVybiAwXG4gICAgfVxuICB9XG5cbiAgZ2V0U3RhdHVzKGN1cnJlbnQ6IHN0cmluZ1tdLCBtYXg6IG51bWJlciwgbWltZVR5cGU/OiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGVyY2VudGFnZSA9IHRoaXMuY2FsY3VsYXRlUGVyY2VudChjdXJyZW50LCBtYXgsIG1pbWVUeXBlKVxuICAgICAgLy8gZm9yIHZpZGVvcyBhbmQgYXVkaW9zXG4gICAgICBpZiAoXG4gICAgICAgIG1pbWVUeXBlID09PSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5NUDQgfHxcbiAgICAgICAgbWltZVR5cGUgPT09IE5zQ29udGVudC5FTWltZVR5cGVzLk0zVTggfHxcbiAgICAgICAgbWltZVR5cGUgPT09IE5zQ29udGVudC5FTWltZVR5cGVzLk1QMyB8fFxuICAgICAgICBtaW1lVHlwZSA9PT0gTnNDb250ZW50LkVNaW1lVHlwZXMuTTRBIHx8XG4gICAgICAgIG1pbWVUeXBlID09PSBOc0NvbnRlbnQuRU1pbWVUeXBlcy5TVVJWRVkgfHxcbiAgICAgICAgbWltZVR5cGUgPT09IE5zQ29udGVudC5FTWltZVR5cGVzLlBERlxuICAgICAgKSB7XG4gICAgICAgIC8vIGlmIHBlcmNlbnRhZ2UgaXMgbGVzcyB0aGFuIDUlIHRoZW4gbWFrZSBzdGF0dXMgc3RhcnRlZFxuICAgICAgICBpZiAoTWF0aC5jZWlsKHBlcmNlbnRhZ2UpIDw9IDUpIHtcbiAgICAgICAgICByZXR1cm4gMVxuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHBlcmNlbnRhZ2UgaXMgZ3JlYXRlciB0aGFuIDk1JSB0aGVuIG1ha2Ugc3RhdHVzIGNvbXBsZXRlXG4gICAgICAgIGlmIChNYXRoLmNlaWwocGVyY2VudGFnZSkgPj0gOTUpIHtcbiAgICAgICAgICByZXR1cm4gMlxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoTWF0aC5jZWlsKHBlcmNlbnRhZ2UpID49IDEwMCkge1xuICAgICAgICAgIHJldHVybiAyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiAxXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLmxvZygnRXJyb3IgaW4gZ2V0dGluZyBjb21wbGV0aW9uIHN0YXR1cycsIGUpXG4gICAgICByZXR1cm4gMVxuICAgIH1cbiAgfVxuXG4gIHJlYWxUaW1lUHJvZ3Jlc3NVcGRhdGUoY29udGVudElkOiBzdHJpbmcsIHJlcXVlc3Q6IGFueSwgY29sbGVjdGlvbklkPzogc3RyaW5nLCBiYXRjaElkPzogc3RyaW5nKSB7XG4gICAgbGV0IHJlcTogYW55XG4gICAgaWYgKHRoaXMuY29uZmlnc2VydmljZS51c2VyUHJvZmlsZSkge1xuICAgICAgY29uc3QgbGFuZ3VhZ2UgPSB0aGlzLmdldFJlc291cmNlQ29udGVudExhbmd1YWdlKGNvbnRlbnRJZClcbiAgICAgIHJlcSA9IHtcbiAgICAgICAgcmVxdWVzdDoge1xuICAgICAgICAgIHVzZXJJZDogdGhpcy5jb25maWdzZXJ2aWNlLnVzZXJQcm9maWxlLnVzZXJJZCB8fCAnJyxcbiAgICAgICAgICBjb250ZW50czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjb250ZW50SWQsXG4gICAgICAgICAgICAgIGJhdGNoSWQsXG4gICAgICAgICAgICAgIGxhbmd1YWdlLFxuICAgICAgICAgICAgICBzdGF0dXM6IHRoaXMuZ2V0U3RhdHVzKHJlcXVlc3QuY3VycmVudCwgcmVxdWVzdC5tYXhfc2l6ZSwgcmVxdWVzdC5taW1lX3R5cGUpLFxuICAgICAgICAgICAgICBjb3Vyc2VJZDogY29sbGVjdGlvbklkLFxuICAgICAgICAgICAgICBsYXN0QWNjZXNzVGltZTogZGF5anMobmV3IERhdGUoKSkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tOnNzOlNTU1paJyksXG4gICAgICAgICAgICAgIHByb2dyZXNzZGV0YWlsczoge1xuICAgICAgICAgICAgICAgIG1heF9zaXplOiByZXF1ZXN0Lm1heF9zaXplLFxuICAgICAgICAgICAgICAgIGN1cnJlbnQ6IHJlcXVlc3QuY3VycmVudCxcbiAgICAgICAgICAgICAgICBtaW1lVHlwZTogcmVxdWVzdC5taW1lX3R5cGUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGNvbXBsZXRpb25QZXJjZW50YWdlOiB0aGlzLmNhbGN1bGF0ZVBlcmNlbnQocmVxdWVzdC5jdXJyZW50LCByZXF1ZXN0Lm1heF9zaXplLCByZXF1ZXN0Lm1pbWVfdHlwZSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9XG4gICAgICAvLyBpZiAodGhpcy5jb25maWdzZXJ2aWNlLmNzdG9rZW4gIT09ICcnKSB7XG4gICAgICAvLyAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKVxuICAgICAgLy8gICAuc2V0KCdjc3Rva2VuJywgdGhpcy5jb25maWdzZXJ2aWNlLmNzdG9rZW4pXG5cbiAgICAgIC8vICAgdGhpcy5odHRwXG4gICAgICAvLyAgIC5wYXRjaChgJHt0aGlzLkFQSV9FTkRQT0lOVFMuUFJPR1JFU1NfVVBEQVRFfS8ke2NvbnRlbnRJZH1gLCB7IGhlYWRlcnMgfSAsIHJlcSlcbiAgICAgIC8vICAgLnN1YnNjcmliZShub29wLCBub29wKVxuICAgICAgLy8gfSBlbHNlIHtcbiAgICAgIC8vICAgdGhpcy5odHRwXG4gICAgICAvLyAgIC5wYXRjaChgJHt0aGlzLkFQSV9FTkRQT0lOVFMuUFJPR1JFU1NfVVBEQVRFfS8ke2NvbnRlbnRJZH1gLCByZXEpXG4gICAgICAvLyAgIC5zdWJzY3JpYmUobm9vcCwgbm9vcClcbiAgICAgIC8vIH1cbiAgICAgIHRoaXMuaHR0cFxuICAgICAgICAucGF0Y2goYCR7dGhpcy5BUElfRU5EUE9JTlRTLlBST0dSRVNTX1VQREFURX0vJHtjb250ZW50SWR9YCwgcmVxKVxuICAgICAgICAuc3Vic2NyaWJlKG5vb3AsIG5vb3ApXG4gICAgICBpZiAodGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRTdGF0dXMgPSB0aGlzLnRvY1N2Yy5oYXNobWFwW2NvbnRlbnRJZF1bJ2NvbXBsZXRpb25TdGF0dXMnXVxuICAgICAgICBcbiAgICAgICAgaWYgKCFjdXJyZW50U3RhdHVzIHx8IGN1cnJlbnRTdGF0dXMgPCAyKSB7XG4gICAgICAgICAgdGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdWydjb21wbGV0aW9uUGVyY2VudGFnZSddID0gcmVxLnJlcXVlc3QuY29udGVudHNbMF0uY29tcGxldGlvblBlcmNlbnRhZ2VcbiAgICAgICAgICB0aGlzLnRvY1N2Yy5oYXNobWFwW2NvbnRlbnRJZF1bJ2NvbXBsZXRpb25TdGF0dXMnXSA9IE51bWJlcihyZXEucmVxdWVzdC5jb250ZW50c1swXS5zdGF0dXMpIHx8IDBcbiAgICAgICAgICB0aGlzLnRvY1N2Yy5oYXNobWFwID0geyAuLi50aGlzLnRvY1N2Yy5oYXNobWFwIH1cbiAgICAgICAgICBcbiAgICAgICAgICAvLyBUcmlnZ2VyIG1pbGVzdG9uZSBsb2NrIHJlY29tcHV0YXRpb24gLSBpdCB3aWxsIGVtaXQgaGFzaG1hcFVwZGF0ZWQgd2l0aCBib3RoIHByb2dyZXNzIGFuZCBsb2NrIGNoYW5nZXNcbiAgICAgICAgICB0aGlzLnRvY1N2Yy50cmlnZ2VyTWlsZXN0b25lTG9ja1VwZGF0ZSgpXG4gICAgICAgICAgLy8gRW1pdCB0byB0cmlnZ2VyIHZpZXdlciBjb21wb25lbnQgcmVmcmVzaCBmb3IgTGVhcm5pbmcgUGF0aHdheXNcbiAgICAgICAgICB0aGlzLm1hcmtBc0NvbXBsZXRlU3ViamVjdC5uZXh0KHRydWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVxID0ge31cbiAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICB9XG4gIH1cblxuICBnZXRCYXRjaElkQW5kQ291cnNlSWQoY291cnNlSWQ6IHN0cmluZywgYmF0Y2hJZDogc3RyaW5nLCByZXNvdXJjZUlkOiBzdHJpbmcpIHtcbiAgICBjb25zdCB0ZW1wRGF0YSA9IHtcbiAgICAgIGNvdXJzZUlkLFxuICAgICAgYmF0Y2hJZCxcbiAgICB9XG4gICAgXG4gICAgY29uc3QgdGVtcENvbnRlbnREYXRhID0gdGhpcy5jb250ZW50U3ZjLmN1cnJlbnRNZXRhRGF0YVxuICAgIGNvbnN0IHRlbXBDb250ZW50UmVhZERhdGEgPSB0aGlzLmNvbnRlbnRTdmMuY3VycmVudENvbnRlbnRSZWFkTWV0YURhdGFcbiAgICBjb25zdCBlbnJvbGxtZW50TGlzdCA9IHRoaXMuY29udGVudFN2Yy5jdXJyZW50QmF0Y2hFbnJvbGxtZW50TGlzdFxuICAgIGlmICghdGhpcy5mb3JQcmV2aWV3KSB7XG4gICAgICBpZiAodGVtcENvbnRlbnREYXRhLmNvdXJzZUNhdGVnb3J5ID09PSAnTGVhcm5pbmcgUGF0aHdheScpIHtcbiAgICAgICAgLy8gRmluZCB0aGUgY291cnNlIHRoYXQgY29udGFpbnMgdGhlIGdpdmVuIHJlc291cmNlIElEXG4gICAgICAgIGNvbnN0IGZvdW5kQ291cnNlID0gdGhpcy5maW5kQ291cnNlQ29udGFpbmluZ1Jlc291cmNlKHRlbXBDb250ZW50RGF0YSwgcmVzb3VyY2VJZClcblxuICAgICAgICBpZiAoZm91bmRDb3Vyc2UpIHtcbiAgICAgICAgICAvLyBBbHdheXMgdXBkYXRlIGNvdXJzZUlkIGlmIGNvdXJzZSBpcyBmb3VuZFxuICAgICAgICAgIHRlbXBEYXRhLmNvdXJzZUlkID0gZm91bmRDb3Vyc2UuaWRlbnRpZmllclxuXG4gICAgICAgICAgLy8gVHJ5IHRvIGZpbmQgYmF0Y2ggSUQgZnJvbSBlbnJvbGxtZW50IGRhdGEgZm9yIHRoZSBmb3VuZCBjb3Vyc2VcbiAgICAgICAgICBpZiAoZm91bmRDb3Vyc2UuaWRlbnRpZmllcikge1xuICAgICAgICAgICAgY29uc3QgZW5yb2xsbWVudCA9IGVucm9sbG1lbnRMaXN0LmZpbmQoXG4gICAgICAgICAgICAgIChjb3Vyc2U6IGFueSkgPT4gY291cnNlLmNvbGxlY3Rpb25JZCA9PT0gZm91bmRDb3Vyc2UuaWRlbnRpZmllclxuICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICBpZiAoZW5yb2xsbWVudCAmJiBlbnJvbGxtZW50LmJhdGNoSWQpIHtcbiAgICAgICAgICAgICAgdGVtcERhdGEuYmF0Y2hJZCA9IGVucm9sbG1lbnQuYmF0Y2hJZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0ZW1wQ29udGVudERhdGEgJiYgdGVtcENvbnRlbnRSZWFkRGF0YS5jdW11bGF0aXZlVHJhY2tpbmcgJiZcbiAgICAgICAgKHRlbXBDb250ZW50RGF0YS5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FUHJpbWFyeUNhdGVnb3J5LlBST0dSQU0gfHxcbiAgICAgICAgICB0ZW1wQ29udGVudERhdGEucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5DVVJBVEVEX1BST0dSQU1cbiAgICAgICAgICB8fCB0ZW1wQ29udGVudERhdGEucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5CTEVOREVEX1BST0dSQU1cbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHRlbXBDb250ZW50RGF0YS5jaGlsZHJlbi5mb3JFYWNoKGFzeW5jIChjaGlsZExpc3Q6IE5zQ29udGVudC5JQ29udGVudCkgPT4ge1xuICAgICAgICAgIGlmIChjaGlsZExpc3QucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5DT1VSU0UpIHtcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbWF4LWxpbmUtbGVuZ3RoXG4gICAgICAgICAgICBjb25zdCBjb3Vyc2VFbnJvbGxtZW50TGlzdCA9IGVucm9sbG1lbnRMaXN0ICYmIGVucm9sbG1lbnRMaXN0LmZpbHRlcigodjogTnNDb250ZW50LklDb3Vyc2UpID0+IHYuY29udGVudElkID09PSBjaGlsZExpc3QuaWRlbnRpZmllcilcbiAgICAgICAgICAgIGlmIChjaGlsZExpc3QuY2hpbGROb2RlcyAmJiBjaGlsZExpc3QuY2hpbGROb2Rlcy5pbmRleE9mKHJlc291cmNlSWQpICE9PSAtMSkge1xuICAgICAgICAgICAgICBpZiAoY291cnNlRW5yb2xsbWVudExpc3QgJiYgY291cnNlRW5yb2xsbWVudExpc3QubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRlbXBEYXRhLmJhdGNoSWQgPSBjb3Vyc2VFbnJvbGxtZW50TGlzdFtjb3Vyc2VFbnJvbGxtZW50TGlzdC5sZW5ndGggLSAxXS5iYXRjaC5iYXRjaElkXG4gICAgICAgICAgICAgICAgdGVtcERhdGEuY291cnNlSWQgPSBjaGlsZExpc3QuaWRlbnRpZmllclxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGE6IGFueSA9IGF3YWl0IHRoaXMuY2hlY2tGb3JDb3Vyc2VFbnJvbGxtZW50KGNoaWxkTGlzdCwgcmVzb3VyY2VJZCwgZW5yb2xsbWVudExpc3QsIHRlbXBEYXRhKVxuICAgICAgICAgICAgICAgIHRlbXBEYXRhLmNvdXJzZUlkID0gZGF0YS5jb3Vyc2VJZFxuICAgICAgICAgICAgICAgIHRlbXBEYXRhLmJhdGNoSWQgPSBkYXRhLmJhdGNoSWRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAodGVtcENvbnRlbnREYXRhLnByaW1hcnlDYXRlZ29yeSA9PT0gTnNDb250ZW50LkVQcmltYXJ5Q2F0ZWdvcnkuQkxFTkRFRF9QUk9HUkFNKSB7XG4gICAgICAgICAgICBpZiAodGVtcERhdGEuY291cnNlSWQgPT09IGNvdXJzZUlkKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGJQRW5yb2xsbWVudExpc3QgPSBlbnJvbGxtZW50TGlzdC5maWx0ZXIoKHY6IE5zQ29udGVudC5JQ291cnNlKSA9PiB2LmNvbnRlbnRJZCA9PT0gdGVtcENvbnRlbnREYXRhLmlkZW50aWZpZXIpXG4gICAgICAgICAgICAgIGlmICh0ZW1wQ29udGVudERhdGEuY2hpbGROb2RlcyAmJiB0ZW1wQ29udGVudERhdGEuY2hpbGROb2Rlcy5pbmRleE9mKHJlc291cmNlSWQpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGlmIChiUEVucm9sbG1lbnRMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgIHRlbXBEYXRhLmJhdGNoSWQgPSBiUEVucm9sbG1lbnRMaXN0W2JQRW5yb2xsbWVudExpc3QubGVuZ3RoIC0gMV0uYmF0Y2guYmF0Y2hJZFxuICAgICAgICAgICAgICAgICAgdGVtcERhdGEuY291cnNlSWQgPSB0ZW1wQ29udGVudERhdGEuaWRlbnRpZmllclxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRlbXBEYXRhXG4gIH1cblxuICAvKipcbiAgICogUmVjdXJzaXZlbHkgc2VhcmNoZXMgZm9yIGEgcmVzb3VyY2UgSUQgaW4gYSBjb250ZW50J3MgY2hpbGRyZW4gaGllcmFyY2h5XG4gICAqIEBwYXJhbSBjb250ZW50IFRoZSBjb250ZW50IG9iamVjdCB0byBzZWFyY2ggaW5cbiAgICogQHBhcmFtIHJlc291cmNlSWQgVGhlIHJlc291cmNlIElEIHRvIGZpbmRcbiAgICogQHJldHVybnMgdHJ1ZSBpZiByZXNvdXJjZSBpcyBmb3VuZCwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqL1xuICBwcml2YXRlIGZpbmRSZXNvdXJjZUluQ29udGVudChjb250ZW50OiBhbnksIHJlc291cmNlSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIC8vIENoZWNrIGlmIHRoaXMgY29udGVudCBoYXMgdGhlIHJlc291cmNlIGluIGl0cyBsZWFmTm9kZXNcbiAgICBpZiAoY29udGVudC5sZWFmTm9kZXMgJiYgQXJyYXkuaXNBcnJheShjb250ZW50LmxlYWZOb2RlcykpIHtcbiAgICAgIGlmIChjb250ZW50LmxlYWZOb2Rlcy5pbmRleE9mKHJlc291cmNlSWQpICE9PSAtMSkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHRoaXMgY29udGVudCdzIGlkZW50aWZpZXIgbWF0Y2hlcyB0aGUgcmVzb3VyY2UgSURcbiAgICBpZiAoY29udGVudC5pZGVudGlmaWVyID09PSByZXNvdXJjZUlkKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIC8vIFJlY3Vyc2l2ZWx5IHNlYXJjaCBpbiBjaGlsZHJlblxuICAgIGlmIChjb250ZW50LmNoaWxkcmVuICYmIEFycmF5LmlzQXJyYXkoY29udGVudC5jaGlsZHJlbikpIHtcbiAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY29udGVudC5jaGlsZHJlbikge1xuICAgICAgICBpZiAodGhpcy5maW5kUmVzb3VyY2VJbkNvbnRlbnQoY2hpbGQsIHJlc291cmNlSWQpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIHRoZSBjb3Vyc2UgdGhhdCBjb250YWlucyBhIGdpdmVuIHJlc291cmNlIElEIGluIGEgTGVhcm5pbmcgUGF0aHdheVxuICAgKiBAcGFyYW0gbGVhcm5pbmdQYXRod2F5Q29udGVudCBUaGUgTGVhcm5pbmcgUGF0aHdheSBjb250ZW50IGRhdGFcbiAgICogQHBhcmFtIHJlc291cmNlSWQgVGhlIHJlc291cmNlIElEIHRvIGZpbmRcbiAgICogQHJldHVybnMgVGhlIGNvdXJzZSBvYmplY3QgY29udGFpbmluZyB0aGUgcmVzb3VyY2UsIG9yIG51bGwgaWYgbm90IGZvdW5kXG4gICAqL1xuICBmaW5kQ291cnNlQ29udGFpbmluZ1Jlc291cmNlKGxlYXJuaW5nUGF0aHdheUNvbnRlbnQ6IGFueSwgcmVzb3VyY2VJZDogc3RyaW5nKTogYW55IHtcbiAgICAvLyBDaGVjayBpZiBtaWxlc3RvbmVzX3YxIGV4aXN0c1xuICAgIGlmICghbGVhcm5pbmdQYXRod2F5Q29udGVudC5taWxlc3RvbmVzX3YxIHx8ICFBcnJheS5pc0FycmF5KGxlYXJuaW5nUGF0aHdheUNvbnRlbnQubWlsZXN0b25lc192MSkpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgLy8gTG9vcCB0aHJvdWdoIGVhY2ggbWlsZXN0b25lXG4gICAgZm9yIChjb25zdCBtaWxlc3RvbmUgb2YgbGVhcm5pbmdQYXRod2F5Q29udGVudC5taWxlc3RvbmVzX3YxKSB7XG4gICAgICAvLyBDaGVjayBpZiBtaWxlc3RvbmUgaGFzIGNvdXJzZXNcbiAgICAgIGlmIChtaWxlc3RvbmUuY291cnNlcyAmJiBBcnJheS5pc0FycmF5KG1pbGVzdG9uZS5jb3Vyc2VzKSkge1xuICAgICAgICAvLyBMb29wIHRocm91Z2ggZWFjaCBjb3Vyc2UgaW4gdGhlIG1pbGVzdG9uZVxuICAgICAgICBmb3IgKGNvbnN0IGNvdXJzZSBvZiBtaWxlc3RvbmUuY291cnNlcykge1xuICAgICAgICAgIC8vIENoZWNrIGlmIHRoaXMgY291cnNlIGNvbnRhaW5zIHRoZSByZXNvdXJjZVxuICAgICAgICAgIGlmICh0aGlzLmZpbmRSZXNvdXJjZUluQ29udGVudChjb3Vyc2UsIHJlc291cmNlSWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gY291cnNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGdldFJlc291cmNlQ29udGVudExhbmd1YWdlKHJlc291cmNlSWQ6IHN0cmluZykge1xuXG4gICAgbGV0IHRlbXBMYW5ndWFnZTogYW55ID0gJ2VuZ2xpc2gnXG4gICAgbGV0IGxhbmd1YWdlRm91bmQgPSBmYWxzZVxuICAgIGNvbnN0IHRlbXBDb250ZW50RGF0YSA9IHRoaXMuY29udGVudFN2Yy5jdXJyZW50TWV0YURhdGFcbiAgICBpZiAoIXRoaXMuZm9yUHJldmlldykge1xuICAgICAgdGVtcENvbnRlbnREYXRhLmNoaWxkcmVuPy5mb3JFYWNoKGFzeW5jIChjaGlsZExpc3Q6YW55KSA9PiB7XG4gICAgICAgIGlmIChjaGlsZExpc3QucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5DT1VSU0UpIHtcbiAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG1heC1saW5lLWxlbmd0aFxuICAgICAgICAgIGlmIChjaGlsZExpc3QubGVhZk5vZGVzICYmIGNoaWxkTGlzdC5sZWFmTm9kZXMuaW5kZXhPZihyZXNvdXJjZUlkKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRlbXBMYW5ndWFnZSA9IHRoaXMuY29udGVudExhbmdTdmMuZ2V0Q29udGVudExhbmd1YWdlKGNoaWxkTGlzdClcbiAgICAgICAgICAgIGxhbmd1YWdlRm91bmQgPSB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGNoaWxkTGlzdD8ucHJpbWFyeUNhdGVnb3J5ID09PSAnTWlsZXN0b25lJykge1xuICAgICAgICAgIGNoaWxkTGlzdC5jaGlsZHJlbj8uZm9yRWFjaChhc3luYyAoY2hpbGQ6YW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoY2hpbGQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRVByaW1hcnlDYXRlZ29yeS5DT1VSU0UpIHtcbiAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcbiAgICAgICAgICAgICAgaWYgKGNoaWxkLmxlYWZOb2RlcyAmJiBjaGlsZC5sZWFmTm9kZXMuaW5kZXhPZihyZXNvdXJjZUlkKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICB0ZW1wTGFuZ3VhZ2UgPSB0aGlzLmNvbnRlbnRMYW5nU3ZjLmdldENvbnRlbnRMYW5ndWFnZShjaGlsZClcbiAgICAgICAgICAgICAgICBsYW5ndWFnZUZvdW5kID0gdHJ1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIClcbiAgICAgIGlmICghbGFuZ3VhZ2VGb3VuZCkge1xuICAgICAgICBpZiAodGVtcENvbnRlbnREYXRhLmxlYWZOb2RlcyAmJiB0ZW1wQ29udGVudERhdGEubGVhZk5vZGVzLmluZGV4T2YocmVzb3VyY2VJZCkgIT09IC0xKSB7XG4gICAgICAgICAgdGVtcExhbmd1YWdlID0gdGhpcy5jb250ZW50TGFuZ1N2Yy5nZXRDb250ZW50TGFuZ3VhZ2UodGVtcENvbnRlbnREYXRhKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0ZW1wTGFuZ3VhZ2VcbiAgfVxuXG4gIGFzeW5jIGNoZWNrRm9yQ291cnNlRW5yb2xsbWVudChjaGlsZExpc3Q6IE5zQ29udGVudC5JQ29udGVudCwgX3Jlc291cmNlSWQ6IHN0cmluZywgX2Vucm9sbG1lbnRMaXN0OiBhbnksIF90ZW1wRGF0YTogYW55KSB7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcbiAgICBjb25zdCBjb3Vyc2VEYXRhOiBhbnkgPSBhd2FpdCB0aGlzLmNvbnRlbnRTdmMuYXV0b0Fzc2lnbkJhdGNoQXBpKGNoaWxkTGlzdC5pZGVudGlmaWVyKS50b1Byb21pc2UoKS50aGVuKGFzeW5jIChkYXRhOiBOc0NvbnRlbnQuSUJhdGNoTGlzdFJlc3BvbnNlKSA9PiB7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG1heC1saW5lLWxlbmd0aFxuICAgICAgICBjb25zdCByZXNwb25zZURhdGEgPSBhd2FpdCB0aGlzLnVzZXJTdmMuZmV0Y2hFbnJvbGxtZW50RGF0YUJ5Q29udGVudElkKHRoaXMuY29uZmlnc2VydmljZS51c2VyUHJvZmlsZT8udXNlcklkLCBjaGlsZExpc3QuaWRlbnRpZmllcikudG9Qcm9taXNlKCkudGhlbihhc3luYyAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAocmVzICYmIHJlcy5jb3Vyc2VzICYmIHJlcy5jb3Vyc2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlcy5jb3Vyc2VzXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBbeyBjb3Vyc2VJZDogY2hpbGRMaXN0LmlkZW50aWZpZXIsIGJhdGNoSWQ6ICcnIH1dXG5cbiAgICAgICAgfSkuY2F0Y2goKF9lcnI6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiBbeyBjb3Vyc2VJZDogY2hpbGRMaXN0LmlkZW50aWZpZXIsIGJhdGNoSWQ6ICcnIH1dXG4gICAgICAgIH0pXG4gICAgICAgIHRoaXMuY29udGVudFN2Yy5jdXJyZW50QmF0Y2hFbnJvbGxtZW50TGlzdCA9IFsuLi50aGlzLmNvbnRlbnRTdmMuY3VycmVudEJhdGNoRW5yb2xsbWVudExpc3QsIC4uLnJlc3BvbnNlRGF0YV1cbiAgICAgICAgcmV0dXJuIHsgY291cnNlSWQ6IGNoaWxkTGlzdC5pZGVudGlmaWVyLCBiYXRjaElkOiByZXNwb25zZURhdGFbMF0uYmF0Y2hJZCB9XG4gICAgICB9XG4gICAgfSkuY2F0Y2goKF9lcnI6IGFueSkgPT4ge1xuICAgICAgcmV0dXJuIFt7IGNvdXJzZUlkOiBjaGlsZExpc3QuaWRlbnRpZmllciwgYmF0Y2hJZDogJycgfV1cbiAgICB9KVxuICAgIHJldHVybiBjb3Vyc2VEYXRhXG4gIH1cblxuICByZWFsVGltZVByb2dyZXNzVXBkYXRlUXVpeihjb250ZW50SWQ6IHN0cmluZywgY29sbGVjdGlvbklkPzogc3RyaW5nLCBiYXRjaElkPzogc3RyaW5nLCBzdGF0dXM/OiBudW1iZXIpIHtcbiAgICBsZXQgcmVxOiBhbnlcbiAgICBpZiAodGhpcy5jb25maWdzZXJ2aWNlLnVzZXJQcm9maWxlKSB7XG4gICAgICBjb25zdCBsYW5ndWFnZSA9IHRoaXMuZ2V0UmVzb3VyY2VDb250ZW50TGFuZ3VhZ2UoY29udGVudElkKVxuICAgICAgcmVxID0ge1xuICAgICAgICByZXF1ZXN0OiB7XG4gICAgICAgICAgdXNlcklkOiB0aGlzLmNvbmZpZ3NlcnZpY2UudXNlclByb2ZpbGUudXNlcklkIHx8ICcnLFxuICAgICAgICAgIGNvbnRlbnRzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNvbnRlbnRJZCxcbiAgICAgICAgICAgICAgYmF0Y2hJZCxcbiAgICAgICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgICAgIHN0YXR1czogc3RhdHVzIHx8IDIsXG4gICAgICAgICAgICAgIGNvdXJzZUlkOiBjb2xsZWN0aW9uSWQsXG4gICAgICAgICAgICAgIGxhc3RBY2Nlc3NUaW1lOiBkYXlqcyhuZXcgRGF0ZSgpKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW06c3M6U1NTWlonKSxcbiAgICAgICAgICAgICAgY29tcGxldGlvblBlcmNlbnRhZ2U6IHN0YXR1cyA9PT0gMiA/IDEwMCA6IDAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9XG5cbiAgICAgIHRoaXMuaHR0cFxuICAgICAgICAucGF0Y2goYCR7dGhpcy5BUElfRU5EUE9JTlRTLlBST0dSRVNTX1VQREFURX0vJHtjb250ZW50SWR9YCwgcmVxKVxuICAgICAgICAuc3Vic2NyaWJlKG5vb3AsIG5vb3ApXG4gICAgICBpZiAodGhpcy50b2NTdmMuaGFzaG1hcCAmJiB0aGlzLnRvY1N2Yy5oYXNobWFwW2NvbnRlbnRJZF0gJiYgcmVxLnJlcXVlc3QuY29udGVudHNbMF0pIHtcbiAgICAgICAgY29uc3QgY3VycmVudFN0YXR1cyA9IHRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXVsnY29tcGxldGlvblN0YXR1cyddXG4gICAgICAgIFxuICAgICAgICBpZiAoIWN1cnJlbnRTdGF0dXMgfHwgY3VycmVudFN0YXR1cyA8IDIpIHtcbiAgICAgICAgICB0aGlzLnRvY1N2Yy5oYXNobWFwW2NvbnRlbnRJZF1bJ2NvbXBsZXRpb25QZXJjZW50YWdlJ10gPSByZXEucmVxdWVzdC5jb250ZW50c1swXS5jb21wbGV0aW9uUGVyY2VudGFnZVxuICAgICAgICAgIHRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXVsnY29tcGxldGlvblN0YXR1cyddID0gTnVtYmVyKHJlcS5yZXF1ZXN0LmNvbnRlbnRzWzBdLnN0YXR1cykgfHwgMFxuICAgICAgICAgIHRoaXMudG9jU3ZjLmhhc2htYXAgPSB7IC4uLnRoaXMudG9jU3ZjLmhhc2htYXAgfVxuICAgICAgICAgIFxuICAgICAgICAgIC8vIFRyaWdnZXIgbWlsZXN0b25lIGxvY2sgcmVjb21wdXRhdGlvbiAtIGl0IHdpbGwgZW1pdCBoYXNobWFwVXBkYXRlZCB3aXRoIGJvdGggcHJvZ3Jlc3MgYW5kIGxvY2sgY2hhbmdlc1xuICAgICAgICAgIGlmICh0aGlzLnRvY1N2Yy50cmlnZ2VyTWlsZXN0b25lTG9ja1VwZGF0ZSkge1xuICAgICAgICAgICAgdGhpcy50b2NTdmMudHJpZ2dlck1pbGVzdG9uZUxvY2tVcGRhdGUoKVxuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICAvLyBFbWl0IHRvIHRyaWdnZXIgdmlld2VyIGNvbXBvbmVudCByZWZyZXNoIGZvciBMZWFybmluZyBQYXRod2F5c1xuICAgICAgICAgIHRoaXMubWFya0FzQ29tcGxldGVTdWJqZWN0Lm5leHQodHJ1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXEgPSB7fVxuICAgICAgLy8gZG8gbm90aGluZ1xuICAgIH1cbiAgfVxuXG4gIGdldENvbnRlbnQoY29udGVudElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPE5zQ29udGVudC5JQ29udGVudD4ge1xuICAgIGNvbnN0IGZvclByZXZpZXcgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnL3B1YmxpYy8nKSB8fCB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnJnByZXZpZXc9dHJ1ZScpXG4gICAgbGV0IHVybCA9IGAvYXBpcy9wcm94aWVzL3Y4L2FjdGlvbi9jb250ZW50L3YzL3JlYWQvJHtjb250ZW50SWR9YFxuICAgIGlmICghZm9yUHJldmlldykge1xuICAgICAgdXJsID0gYC9hcGlzL3Byb3hpZXMvdjgvYWN0aW9uL2NvbnRlbnQvdjMvcmVhZC8ke2NvbnRlbnRJZH1gXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnZWRpdE1vZGU9dHJ1ZScpICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCdfcmMnKSkge1xuICAgICAgICB1cmwgPSBgL2FwaXMvcHJveGllcy92OC9hY3Rpb24vY29udGVudC92My9yZWFkLyR7Y29udGVudElkfWBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVybCA9IGAvYXBpL2NvbnRlbnQvdjEvcmVhZC8ke2NvbnRlbnRJZH1gXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE5zQ29udGVudC5JQ29udGVudD4oXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgICAvLyBgL2FwaXMvYXV0aEFwaS9hY3Rpb24vY29udGVudC9oaWVyYXJjaHkvJHtjb250ZW50SWR9P3Jvb3RPcmc9JHt0aGlzLmNvbmZpZ3NlcnZpY2Uucm9vdE9yZyB8fCAnaWdvdCd9Jm9yZz0ke3RoaXMuY29uZmlnc2VydmljZS5hY3RpdmVPcmcgfHwgJ2RvcHQnfWAsXG4gICAgICB1cmxcbiAgICApXG4gIH1cblxuICBnZXRBdXRob3JpbmdVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB1cmxcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgICAgID8gYC9hcGlzL2F1dGhDb250ZW50LyR7dXJsLmluY2x1ZGVzKCcvY29udGVudC1zdG9yZS8nKSA/IG5ldyBVUkwodXJsKS5wYXRobmFtZS5zbGljZSgxKSA6IGVuY29kZVVSSUNvbXBvbmVudCh1cmwpfWBcbiAgICAgIDogJydcbiAgfVxuXG4gIHJlZ2V4RG93bmxvYWRSZXBsYWNlID0gKF9zdHIgPSAnJywgZ3JvdXAxOiBzdHJpbmcsIGdyb3VwMjogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICByZXR1cm4gYCR7dGhpcy5hdXRob3JpbmdCYXNlfSR7ZW5jb2RlVVJJQ29tcG9uZW50KGdyb3VwMSl9JHtncm91cDJ9YFxuICB9XG5cbiAgcmVwbGFjZVRvQXV0aFVybChkYXRhOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKFxuICAgICAgSlNPTi5zdHJpbmdpZnkoZGF0YSkucmVwbGFjZShcbiAgICAgICAgdGhpcy5kb3dubG9hZFJlZ2V4LFxuICAgICAgICB0aGlzLnJlZ2V4RG93bmxvYWRSZXBsYWNlLFxuICAgICAgKSxcbiAgICApXG4gIH1cbiAgcmVhZFNlY3Rpb25zKGFzc2Vzc21lbnRJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGAke3RoaXMuQVBJX0VORFBPSU5UU30vJHthc3Nlc3NtZW50SWR9YFxuICB9XG5cbiAgZ2V0UHVibGljVXJsKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBtYWluVXJsID0gdXJsLnNwbGl0KCcvY29udGVudCcpLnBvcCgpIHx8ICcnXG4gICAgcmV0dXJuIGAke3RoaXMuZW52aXJvbm1lbnQuY29udGVudEhvc3R9LyR7dGhpcy5lbnZpcm9ubWVudC5jb250ZW50QnVja2V0fS9jb250ZW50JHttYWluVXJsfWBcbiAgfVxuXG4gIGdldENkblVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbWFpblVybCA9IHVybC5zcGxpdCgnL2NvbnRlbnQnKS5wb3AoKSB8fCAnJ1xuICAgIHJldHVybiBgJHt0aGlzLmRvbWFpbkNvbmZTdmMuZ2V0RG9tYWluQ0ROSG9zdCgpfS8ke3RoaXMuZW52aXJvbm1lbnQuY2RuQ29udGVudEJ1Y2tldH0vY29udGVudCR7bWFpblVybH1gXG4gIH1cblxuICAvLyAgZmV0Y2hDb250ZW50KFxuICAvLyAgIGNvbnRlbnRJZDogc3RyaW5nLFxuICAvLyAgIGhpZXJhcmNoeVR5cGU6ICdhbGwnIHwgJ21pbmltYWwnIHwgJ2RldGFpbCcgPSAnZGV0YWlsJ1xuICAvLyAgICk6IE9ic2VydmFibGU8TnNDb250ZW50LklDb250ZW50PiB7XG4gIC8vICAgICBsZXQgdXJsID0gJydcbiAgLy8gICAgIGNvbnN0IGZvclByZXZpZXcgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnL3B1YmxpYy8nKSB8fCB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnJnByZXZpZXc9dHJ1ZScpXG4gIC8vICAgICAgIGlmICghZm9yUHJldmlldykge1xuICAvLyAgICAgICAgIHVybCA9IGAvYXBpcy9wcm94aWVzL3Y4L2FjdGlvbi9jb250ZW50L3YzL2hpZXJhcmNoeS8ke2NvbnRlbnRJZH0/aGllcmFyY2h5VHlwZT0ke2hpZXJhcmNoeVR5cGV9YFxuICAvLyAgICAgICB9IGVsc2Uge1xuICAvLyAgICAgICAgIHVybCA9IGAvYXBpL2NvdXJzZS92MS9oaWVyYXJjaHkvJHtjb250ZW50SWR9P2hpZXJhcmNoeVR5cGU9JHtoaWVyYXJjaHlUeXBlfWBcbiAgLy8gICAgICAgfVxuICAvLyAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxOc0NvbnRlbnQuSUNvbnRlbnQ+KHVybClcbiAgLy8gICB9XG5cbiAgZmV0Y2hDb250ZW50KGlkOiBzdHJpbmcsIHR5cGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PE5zQ29udGVudC5JQ29udGVudD4oYC9hcGlzL3Byb3hpZXMvdjgvYWN0aW9uL2NvbnRlbnQvdjMvaGllcmFyY2h5LyR7aWR9P21vZGU9JHt0eXBlfWApXG4gIH1cblxuICB1cGRhdGVDb250ZW50SGFzaE1hcEZvckFzc2Vzc3RlbnQoY29udGVudElkOiBzdHJpbmcsIGNvbnRlbnRQcm9ncmVzczogYW55KSB7XG4gICAgXG4gICAgXG4gICAgaWYgKHRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXSkge1xuICAgICAgY29uc3QgY3VycmVudFN0YXR1cyA9IHRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXVsnY29tcGxldGlvblN0YXR1cyddIHx8IDBcbiAgICAgIGNvbnN0IG5ld1N0YXR1cyA9IE51bWJlcihjb250ZW50UHJvZ3Jlc3Muc3RhdHVzKSB8fCAwXG4gICAgICBcbiAgICAgIC8vIFVwZGF0ZSBpZiBub3QgY29tcGxldGUgb3IgaWYgbmV3IHN0YXR1cyBpcyBoaWdoZXJcbiAgICAgIGlmIChjdXJyZW50U3RhdHVzIDwgMiB8fCBuZXdTdGF0dXMgPj0gY3VycmVudFN0YXR1cykge1xuICAgICAgICB0aGlzLnRvY1N2Yy5oYXNobWFwW2NvbnRlbnRJZF1bJ2NvbXBsZXRpb25QZXJjZW50YWdlJ10gPSBjb250ZW50UHJvZ3Jlc3MuY29tcGxldGlvblBlcmNlbnRhZ2VcbiAgICAgICAgdGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdWydjb21wbGV0aW9uU3RhdHVzJ10gPSBuZXdTdGF0dXNcbiAgICAgICAgdGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdWydzdGF0dXMnXSA9IG5ld1N0YXR1c1xuICAgICAgICBcbiAgICAgICAgXG4gICAgICAgIC8vIENyZWF0ZSBuZXcgaGFzaG1hcCByZWZlcmVuY2UgZm9yIEFuZ3VsYXIgY2hhbmdlIGRldGVjdGlvblxuICAgICAgICB0aGlzLnRvY1N2Yy5oYXNobWFwID0geyAuLi50aGlzLnRvY1N2Yy5oYXNobWFwIH1cbiAgICAgICAgXG4gICAgICAgIC8vIFRyaWdnZXIgbWlsZXN0b25lIGxvY2sgcmVjb21wdXRhdGlvbiAtIGl0IHdpbGwgZW1pdCBoYXNobWFwVXBkYXRlZCB3aXRoIGJvdGggcHJvZ3Jlc3MgYW5kIGxvY2sgY2hhbmdlc1xuICAgICAgICBpZiAodGhpcy50b2NTdmMudHJpZ2dlck1pbGVzdG9uZUxvY2tVcGRhdGUpIHtcbiAgICAgICAgICB0aGlzLnRvY1N2Yy50cmlnZ2VyTWlsZXN0b25lTG9ja1VwZGF0ZSgpXG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIEVtaXQgdG8gdHJpZ2dlciB2aWV3ZXIgY29tcG9uZW50IHJlZnJlc2ggZm9yIExlYXJuaW5nIFBhdGh3YXlzXG4gICAgICAgIHRoaXMubWFya0FzQ29tcGxldGVTdWJqZWN0Lm5leHQodHJ1ZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRGb3JtQnlJZChmb3JtSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuQVBJX0VORFBPSU5UUy5HRVRfRk9STV9CWUlEKGZvcm1JZCkpXG4gIH1cblxuICBzdWJtaXRGb3JtKGZvcm1EYXRhOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55Pih0aGlzLkFQSV9FTkRQT0lOVFMuU1VCTUlUX0ZPUk0sIGZvcm1EYXRhKVxuICB9XG5cbiAgcmVhbFRpbWVQcm9ncmVzc1VwZGF0ZUZvclByZUFzc2Vzc21lbnQoY29udGVudElkOiBzdHJpbmcsIHJlcXVlc3Q6IGFueSkge1xuICAgIGxldCByZXE6IGFueVxuICAgIGlmICh0aGlzLmNvbmZpZ3NlcnZpY2UudXNlclByb2ZpbGUpIHtcbiAgICAgIHJlcSA9IHtcbiAgICAgICAgcmVxdWVzdDoge1xuICAgICAgICAgIHVzZXJJZDogdGhpcy5jb25maWdzZXJ2aWNlLnVzZXJQcm9maWxlLnVzZXJJZCB8fCAnJyxcbiAgICAgICAgICBjb250ZW50czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjb250ZW50SWQsXG4gICAgICAgICAgICAgIC8vIGJhdGNoSWQsXG4gICAgICAgICAgICAgIHN0YXR1czogdGhpcy5nZXRTdGF0dXMocmVxdWVzdC5jdXJyZW50LCByZXF1ZXN0Lm1heF9zaXplLCByZXF1ZXN0Lm1pbWVfdHlwZSksXG4gICAgICAgICAgICAgIC8vIGNvdXJzZUlkOiBjb2xsZWN0aW9uSWQsXG4gICAgICAgICAgICAgIGxhc3RBY2Nlc3NUaW1lOiBkYXlqcyhuZXcgRGF0ZSgpKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW06c3M6U1NTWlonKSxcbiAgICAgICAgICAgICAgcHJvZ3Jlc3NkZXRhaWxzOiB7XG4gICAgICAgICAgICAgICAgbWF4X3NpemU6IHJlcXVlc3QubWF4X3NpemUsXG4gICAgICAgICAgICAgICAgY3VycmVudDogcmVxdWVzdC5jdXJyZW50LFxuICAgICAgICAgICAgICAgIG1pbWVUeXBlOiByZXF1ZXN0Lm1pbWVfdHlwZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgY29tcGxldGlvblBlcmNlbnRhZ2U6IHRoaXMuY2FsY3VsYXRlUGVyY2VudChyZXF1ZXN0LmN1cnJlbnQsIHJlcXVlc3QubWF4X3NpemUsIHJlcXVlc3QubWltZV90eXBlKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICAgIC8vIGlmICh0aGlzLmNvbmZpZ3NlcnZpY2UuY3N0b2tlbiAhPT0gJycpIHtcbiAgICAgIC8vICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpXG4gICAgICAvLyAgIC5zZXQoJ2NzdG9rZW4nLCB0aGlzLmNvbmZpZ3NlcnZpY2UuY3N0b2tlbilcblxuICAgICAgLy8gICB0aGlzLmh0dHBcbiAgICAgIC8vICAgLnBhdGNoKGAke3RoaXMuQVBJX0VORFBPSU5UUy5QUk9HUkVTU19VUERBVEV9LyR7Y29udGVudElkfWAsIHsgaGVhZGVycyB9ICwgcmVxKVxuICAgICAgLy8gICAuc3Vic2NyaWJlKG5vb3AsIG5vb3ApXG4gICAgICAvLyB9IGVsc2Uge1xuICAgICAgLy8gICB0aGlzLmh0dHBcbiAgICAgIC8vICAgLnBhdGNoKGAke3RoaXMuQVBJX0VORFBPSU5UUy5QUk9HUkVTU19VUERBVEV9LyR7Y29udGVudElkfWAsIHJlcSlcbiAgICAgIC8vICAgLnN1YnNjcmliZShub29wLCBub29wKVxuICAgICAgLy8gfVxuICAgICAgLy8gdGhpcy5odHRwXG4gICAgICAvLyAgIC5wYXRjaChgJHt0aGlzLkFQSV9FTkRQT0lOVFMuUFJPR1JFU1NfVVBEQVRFfS8ke2NvbnRlbnRJZH1gLCByZXEpXG4gICAgICAvLyAgIC5zdWJzY3JpYmUobm9vcCwgbm9vcClcbiAgICAgIC8vY29uc3QgY29udGVudElkTmV3PSByZXEucmVxdWVzdC5jb250ZW50c1swXS5jb250ZW50SWRcbiAgICAgIC8vIGNvbnN0IHVwZGF0ZWRDb21wbGV0aW9uUGVyY2VudGFnZSA9IHJlcS5yZXF1ZXN0LmNvbnRlbnRzWzBdLmNvbXBsZXRpb25QZXJjZW50YWdlXG4gICAgICAvLyBjb25zdCB1cGRhdGVkU3RhdHVzID0gcmVxLnJlcXVlc3QuY29udGVudHNbMF0uc3RhdHVzXG5cbiAgICAgIC8vIC8vIENsb25lIHRoZSBpbm5lciBvYmplY3QgYW5kIHVwZGF0ZVxuICAgICAgLy8gY29uc3QgZXhpc3RpbmdDb250ZW50ID0gdGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWROZXddIHx8IHt9XG5cbiAgICAgIC8vIHRoaXMudG9jU3ZjLmhhc2htYXAgPSB7XG4gICAgICAvLyAgIC4uLnRoaXMudG9jU3ZjLmhhc2htYXAsXG4gICAgICAvLyAgIFtjb250ZW50SWROZXddOiB7XG4gICAgICAvLyAgICAgLi4uZXhpc3RpbmdDb250ZW50LFxuICAgICAgLy8gICAgIGNvbXBsZXRpb25QZXJjZW50YWdlOiB1cGRhdGVkQ29tcGxldGlvblBlcmNlbnRhZ2UsXG4gICAgICAvLyAgICAgY29tcGxldGlvblN0YXR1czogdXBkYXRlZFN0YXR1c1xuICAgICAgLy8gICB9XG4gICAgICAvLyB9XG4gICAgICAvLyBjb25zb2xlLmxvZygncmVxJywgSlNPTi5zdHJpbmdpZnkocmVxKSlcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdyZXEnLCByZXEpXG5cbiAgICAgIGNvbnN0IHJlc291cmNlU3RhdHVzID0gdGhpcy5nZXRQcmVBc3Nlc3NtZW50UmVzb3VyY2VTdGF0dXMoY29udGVudElkKVxuICAgICAgaWYgKHJlc291cmNlU3RhdHVzIDwgMikge1xuICAgICAgICB0aGlzLmh0dHBcbiAgICAgICAgICAucGF0Y2goYCR7dGhpcy5BUElfRU5EUE9JTlRTLlBSRV9BU1NFU1NNRU5UX1NUQVRFX1VQREFURX1gLCByZXEpXG4gICAgICAgICAgLnN1YnNjcmliZShub29wLCBub29wKVxuICAgICAgfVxuICAgICAgXG4gICAgICBpZiAodGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdICYmXG4gICAgICAgICghdGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdWydjb21wbGV0aW9uU3RhdHVzJ10gfHwgdGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdWydjb21wbGV0aW9uU3RhdHVzJ10gPCAyKSkge1xuICAgICAgICB0aGlzLnRvY1N2Yy5oYXNobWFwW2NvbnRlbnRJZF1bJ2NvbXBsZXRpb25QZXJjZW50YWdlJ10gPSByZXEucmVxdWVzdC5jb250ZW50c1swXS5jb21wbGV0aW9uUGVyY2VudGFnZVxuICAgICAgICB0aGlzLnRvY1N2Yy5oYXNobWFwW2NvbnRlbnRJZF1bJ2NvbXBsZXRpb25TdGF0dXMnXSA9IE51bWJlcihyZXEucmVxdWVzdC5jb250ZW50c1swXS5zdGF0dXMpIHx8IDBcbiAgICAgICAgdGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdWydwYXJlbnQnXSA9IHJlcS5yZXF1ZXN0LmNvbnRlbnRzWzBdLmNvdXJzZUlkXG4gICAgICAgIHRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXVsncHJvZ3Jlc3MnXSA9IHJlcS5yZXF1ZXN0LmNvbnRlbnRzWzBdLnByb2dyZXNzZGV0YWlsc1xuICAgICAgICB0aGlzLnRvY1N2Yy5oYXNobWFwID0geyAuLi50aGlzLnRvY1N2Yy5oYXNobWFwIH1cbiAgICAgICAgXG4gICAgICAgIC8vIFRyaWdnZXIgbWlsZXN0b25lIGxvY2sgcmVjb21wdXRhdGlvbiAtIGl0IHdpbGwgZW1pdCBoYXNobWFwVXBkYXRlZCB3aXRoIGJvdGggcHJvZ3Jlc3MgYW5kIGxvY2sgY2hhbmdlc1xuICAgICAgICBpZiAodGhpcy50b2NTdmMudHJpZ2dlck1pbGVzdG9uZUxvY2tVcGRhdGUpIHtcbiAgICAgICAgICB0aGlzLnRvY1N2Yy50cmlnZ2VyTWlsZXN0b25lTG9ja1VwZGF0ZSgpXG4gICAgICAgIH1cbiAgICAgICAgICAvLyBFbWl0IHRvIHRyaWdnZXIgdmlld2VyIGNvbXBvbmVudCByZWZyZXNoIGZvciBMZWFybmluZyBQYXRod2F5c1xuICAgICAgICAgIHRoaXMubWFya0FzQ29tcGxldGVTdWJqZWN0Lm5leHQodHJ1ZSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVxID0ge31cbiAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICB9XG4gIH1cblxuICByZWFsVGltZVByb2dyZXNzVXBkYXRlRm9yUHJlQXNzZXNzbWVudFF1aXooY29udGVudElkOiBzdHJpbmcsIHN0YXR1cz86IG51bWJlciwgbWltZVR5cGU/OiBzdHJpbmcpIHtcbiAgICBsZXQgcmVxOiBhbnlcbiAgICBpZiAodGhpcy5jb25maWdzZXJ2aWNlLnVzZXJQcm9maWxlKSB7XG4gICAgICByZXEgPSB7XG4gICAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgICAvL3VzZXJJZDogdGhpcy5jb25maWdzZXJ2aWNlLnVzZXJQcm9maWxlLnVzZXJJZCB8fCAnJyxcbiAgICAgICAgICBjb250ZW50czogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjb250ZW50SWQsXG4gICAgICAgICAgICAgIC8vIGJhdGNoSWQsXG4gICAgICAgICAgICAgIHN0YXR1czogc3RhdHVzIHx8IDIsXG4gICAgICAgICAgICAgIC8vIGNvdXJzZUlkOiBjb2xsZWN0aW9uSWQsXG4gICAgICAgICAgICAgIGxhc3RBY2Nlc3NUaW1lOiBkYXlqcyhuZXcgRGF0ZSgpKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW06c3M6U1NTWlonKSxcbiAgICAgICAgICAgICAgY29tcGxldGlvblBlcmNlbnRhZ2U6IHN0YXR1cyA9PT0gMiA/IDEwMC4wIDogMCxcbiAgICAgICAgICAgICAgcHJvZ3Jlc3NkZXRhaWxzOiB7XG4gICAgICAgICAgICAgICAgXCJtaW1lVHlwZVwiOiBtaW1lVHlwZSB8fCBcImFwcGxpY2F0aW9uL3ZuZC5zdW5iaXJkLnF1ZXN0aW9uc2V0XCJcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc291cmNlU3RhdHVzID0gdGhpcy5nZXRQcmVBc3Nlc3NtZW50UmVzb3VyY2VTdGF0dXMoY29udGVudElkKVxuICAgICAgaWYgKHJlc291cmNlU3RhdHVzIDwgMikge1xuICAgICAgICB0aGlzLmh0dHBcbiAgICAgICAgICAucGF0Y2goYCR7dGhpcy5BUElfRU5EUE9JTlRTLlBSRV9BU1NFU1NNRU5UX1NUQVRFX1VQREFURX1gLCByZXEpXG4gICAgICAgICAgLnN1YnNjcmliZShub29wLCBub29wKVxuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBVcGRhdGUgaGFzaG1hcCAtIGNyZWF0ZSBlbnRyeSBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICBpZiAodGhpcy50b2NTdmMuaGFzaG1hcCkge1xuICAgICAgICBpZiAoIXRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXSkge1xuICAgICAgICAgIC8vIENyZWF0ZSBuZXcgZW50cnkgZm9yIHByZS1hc3Nlc3NtZW50IGlmIGl0IGRvZXNuJ3QgZXhpc3RcbiAgICAgICAgICB0aGlzLnRvY1N2Yy5oYXNobWFwW2NvbnRlbnRJZF0gPSB7XG4gICAgICAgICAgICBpZGVudGlmaWVyOiBjb250ZW50SWQsXG4gICAgICAgICAgICBjb21wbGV0aW9uUGVyY2VudGFnZTogcmVxLnJlcXVlc3QuY29udGVudHNbMF0uY29tcGxldGlvblBlcmNlbnRhZ2UsXG4gICAgICAgICAgICBjb21wbGV0aW9uU3RhdHVzOiBOdW1iZXIocmVxLnJlcXVlc3QuY29udGVudHNbMF0uc3RhdHVzKSB8fCAwLFxuICAgICAgICAgICAgc3RhdHVzOiBOdW1iZXIocmVxLnJlcXVlc3QuY29udGVudHNbMF0uc3RhdHVzKSB8fCAwLFxuICAgICAgICAgICAgaXNQcmVBc3Nlc3NtZW50OiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFVwZGF0ZSBleGlzdGluZyBlbnRyeVxuICAgICAgICAgIHRoaXMudG9jU3ZjLmhhc2htYXBbY29udGVudElkXVsnY29tcGxldGlvblBlcmNlbnRhZ2UnXSA9IHJlcS5yZXF1ZXN0LmNvbnRlbnRzWzBdLmNvbXBsZXRpb25QZXJjZW50YWdlXG4gICAgICAgICAgdGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdWydjb21wbGV0aW9uU3RhdHVzJ10gPSBOdW1iZXIocmVxLnJlcXVlc3QuY29udGVudHNbMF0uc3RhdHVzKSB8fCAwXG4gICAgICAgICAgdGhpcy50b2NTdmMuaGFzaG1hcFtjb250ZW50SWRdWydzdGF0dXMnXSA9IE51bWJlcihyZXEucmVxdWVzdC5jb250ZW50c1swXS5zdGF0dXMpIHx8IDBcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgdGhpcy50b2NTdmMuaGFzaG1hcCA9IHsgLi4udGhpcy50b2NTdmMuaGFzaG1hcCB9XG4gICAgICAgIFxuICAgICAgICAvLyBBTFdBWVMgdHJpZ2dlciBtaWxlc3RvbmUgbG9jayByZWNvbXB1dGF0aW9uIHdoZW4gcHJlLWFzc2Vzc21lbnQgY29tcGxldGVzXG4gICAgICAgIC8vIFRoaXMgZW5zdXJlcyBtaWxlc3RvbmUgMSB1bmxvY2tzIGltbWVkaWF0ZWx5IGFmdGVyIHByZS1hc3Nlc3NtZW50IGNvbXBsZXRpb25cbiAgICAgICAgaWYgKHRoaXMudG9jU3ZjLnRyaWdnZXJNaWxlc3RvbmVMb2NrVXBkYXRlKSB7XG4gICAgICAgICAgdGhpcy50b2NTdmMudHJpZ2dlck1pbGVzdG9uZUxvY2tVcGRhdGUoKVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBFbWl0IG1hcmtBc0NvbXBsZXRlU3ViamVjdCB0byB0cmlnZ2VyIHZpZXdlciBjb21wb25lbnQgdG8gcmVmcmVzaCBlbnJvbGxtZW50IGFuZCBwcm9ncmVzc1xuICAgICAgICAvLyBUaGlzIGlzIGNyaXRpY2FsIGZvciBMZWFybmluZyBQYXRod2F5cyB0byB1bmxvY2sgbWlsZXN0b25lcyBpbW1lZGlhdGVseVxuICAgICAgICB0aGlzLm1hcmtBc0NvbXBsZXRlU3ViamVjdC5uZXh0KHRydWUpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcSA9IHt9XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfVxuICB9XG5cbiAgZ2V0UHJlQXNzZXNzbWVudFJlc291cmNlU3RhdHVzKHJlc291cmNlSWQ6IHN0cmluZykge1xuICAgIGlmICh0aGlzLnRvY1N2YyAmJiB0aGlzLnRvY1N2Yy5oYXNobWFwICYmIHRoaXMudG9jU3ZjLmhhc2htYXBbcmVzb3VyY2VJZF0pIHtcbiAgICAgIHJldHVybiB0aGlzLnRvY1N2Yy5oYXNobWFwW3Jlc291cmNlSWRdWydjb21wbGV0aW9uU3RhdHVzJ10gfHwgMVxuICAgIH1cbiAgICByZXR1cm4gMVxuICB9XG5cblxufVxuIl19
|