@tilde-nlp/ngx-translate 5.0.92 → 5.0.94
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.
|
@@ -202,7 +202,8 @@ export class TldTranslateTextService {
|
|
|
202
202
|
}
|
|
203
203
|
if (!detectedLanguage && (this.activeData.sourceLanguage === AUTO_LANGUAGE_DETECTION_KEY || this.activeData.detectedLanguage)) {
|
|
204
204
|
this.language.detect(this.sourceText.replace('\n', ' ')).subscribe(res => {
|
|
205
|
-
|
|
205
|
+
// displaying english language, if text is undetectable
|
|
206
|
+
this.retranslate(params, res.detectedLanguage ?? 'en');
|
|
206
207
|
});
|
|
207
208
|
return;
|
|
208
209
|
}
|
|
@@ -405,20 +406,26 @@ export class TldTranslateTextService {
|
|
|
405
406
|
setDictionaryTerms(response, urls) {
|
|
406
407
|
response.forEach((res, i) => {
|
|
407
408
|
res.forEach((item) => {
|
|
408
|
-
const termSummary = item.languageSummaries?.find((summary) => summary.lang === this.activeData.targetLanguage);
|
|
409
409
|
const isTildeTermCollection = urls[i].includes('tilde');
|
|
410
|
+
const termWithSource = {
|
|
411
|
+
...item,
|
|
412
|
+
dictionaryDomainUrl: isTildeTermCollection ? null : urls[i],
|
|
413
|
+
sourceLabel: isTildeTermCollection ? 'Tilde Term' : null,
|
|
414
|
+
};
|
|
415
|
+
const termSummary = termWithSource.languageSummaries?.find((summary) => summary.lang === this.activeData.targetLanguage);
|
|
410
416
|
if (termSummary) {
|
|
411
|
-
const collectionEntry =
|
|
417
|
+
const collectionEntry = termWithSource.entrySummaries[0];
|
|
412
418
|
const collectionId = collectionEntry.collectionId;
|
|
413
419
|
const collectionTargetWord = termSummary.terms[0].term;
|
|
414
|
-
const collectionUrl =
|
|
420
|
+
const collectionUrl = termWithSource.dictionaryDomainUrl
|
|
421
|
+
? `https://${termWithSource.dictionaryDomainUrl}/collections/${collectionId}`
|
|
422
|
+
: `${this.terminologyPortalUrl}/collections/term/${collectionId}`;
|
|
415
423
|
if (!this.dictionaryEntry.some((term) => term.targetWord === collectionTargetWord && term.termSource === collectionEntry.collectionName)) {
|
|
416
|
-
this.dictionaryEntry.push({
|
|
424
|
+
this.dictionaryEntry.push({
|
|
425
|
+
...termWithSource,
|
|
417
426
|
targetWord: collectionTargetWord,
|
|
418
427
|
termSource: collectionEntry.collectionName,
|
|
419
428
|
collectionUrl: collectionUrl,
|
|
420
|
-
dictionaryDomainUrl: isTildeTermCollection ? null : urls[i],
|
|
421
|
-
sourceLabel: isTildeTermCollection ? 'Tilde Term' : null
|
|
422
429
|
});
|
|
423
430
|
}
|
|
424
431
|
}
|
|
@@ -526,4 +533,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
526
533
|
providedIn: 'root'
|
|
527
534
|
}]
|
|
528
535
|
}], ctorParameters: function () { return [{ type: i1.TldTranslateTextApiService }, { type: i2.TldTranslateSystemManagementService }, { type: i3.TldScrollService }, { type: i2.TldTranslateConfigService }, { type: i4.TranslateService }, { type: i2.TldHighlightService }, { type: i5.AlertService }, { type: i5.TerminologyService }, { type: i6.LanguageDetectionService }, { type: i5.LanguageTranslateService }]; } });
|
|
529
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGxkLXRyYW5zbGF0ZS10ZXh0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bGQtdHJhbnNsYXRlL3NyYy9saWIvbW9kdWxlcy90bGQtdGV4dC9zZXJ2aWNlcy90bGQtdHJhbnNsYXRlLXRleHQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBZ0IsVUFBVSxFQUE0Qix1QkFBdUIsRUFBc0IsTUFBTSx1QkFBdUIsQ0FBQztBQUN4SSxPQUFPLEVBQWMsT0FBTyxFQUFnQixFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUczRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saURBQWlELENBQUM7QUFJNUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFNeEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFMUUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sMkRBQTJELENBQUM7Ozs7Ozs7O0FBT3hHLE1BQU0sT0FBTyx1QkFBdUI7SUF3SGY7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUEvSFgsV0FBVyxDQUFTO0lBQzVCLElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRU8scUJBQXFCLENBQVM7SUFDdEMsSUFBSSxvQkFBb0I7UUFDdEIsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUM7SUFDcEMsQ0FBQztJQUVPLGFBQWEsR0FBK0IsSUFBSSxPQUFPLEVBQUUs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SztnQkFDckIsU0FBUyxFQUFFLFFBQVEsQ0FBQyxTQUFTO2dCQUM3QixjQUFjLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjO2FBQ3JFLENBQUE7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVPLHNCQUFzQjtRQUM1QixNQUFNLHFCQUFxQixHQUFHLE9BQU8sQ0FBQztRQUV0QyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLEdBQUcsS0FBSztZQUNqRSxpQkFBaUIsRUFBRSxLQUFLLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLEdBQUcsZUFBZTtnQkFDckYsS0FBSyxFQUFFLGVBQWUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxxQkFBcUIsQ0FBQzthQUN2RixDQUFDLENBQUM7U0FDSixDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7d0dBM2tCVSx1QkFBdUI7NEdBQXZCLHVCQUF1QixjQUZ0QixNQUFNOzs0RkFFUCx1QkFBdUI7a0JBSG5DLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IEFsZXJ0U2VydmljZSwgSHRtbEhlbHBlciwgTGFuZ3VhZ2VUcmFuc2xhdGVTZXJ2aWNlLCBOb3RpZmljYXRpb25NZXNzYWdlVHlwZSwgVGVybWlub2xvZ3lTZXJ2aWNlIH0gZnJvbSAnQHRpbGRlLW5scC9uZ3gtY29tbW9uJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBvZiwgdGltZXIgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZGVib3VuY2UsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtZXJnZU1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBUZXh0VG9TcGVlY2hTZXR0aW5ncyB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvc2hhcmVkL3RleHQtdG8tc3BlZWNoL21vZGVscy90ZXh0LXRvLXNwZWVjaC1zZXR0aW5ncy5tb2RlbCc7XHJcbmltcG9ydCB7IElUcmFuc2xhdGVQYXJhZ3JhcGhSZXF1ZXN0UGFyYW1zIH0gZnJvbSAnLi4vLi4vdGxkLWNvbW1vbi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBFcnJvckNvZGUgfSBmcm9tICcuLi8uLi90bGQtY29tbW9uL21vZGVscy9lcnJvcnMvZXJyb3ItY29kZXMuZW51bSc7XHJcbmltcG9ydCB7IFRsZEhpZ2hsaWdodFNlcnZpY2UsIFRsZFRyYW5zbGF0ZUNvbmZpZ1NlcnZpY2UsIFRsZFRyYW5zbGF0ZVN5c3RlbU1hbmFnZW1lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdGxkLWNvbW1vbi9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IFRsZFNjcm9sbFNlcnZpY2UgfSBmcm9tICcuLi8uLi90bGQtY29tbW9uL3NlcnZpY2VzL3Njcm9sbC90bGQtc2Nyb2xsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEaWN0aW9uYXJ5IH0gZnJvbSAnLi4vbW9kZWxzL2RpY3Rpb25hcnkubW9kZWwnO1xyXG5pbXBvcnQgeyBIaWdobGlnaHRUcmVlVHlwZSB9IGZyb20gJy4uL21vZGVscy9oaWdobGlnaHQtdHJlZS10eXBlLm1vZGVsJztcclxuaW1wb3J0IHsgSUhpZ2hsaWdodFRyZWUgfSBmcm9tICcuLi9tb2RlbHMvaGlnaGxpZ2h0LXRyZWUubW9kZWwnO1xyXG5pbXBvcnQgeyBJUGFyYWdyYXBoSW5mbyB9IGZyb20gJy4uL21vZGVscy9oaWdobGlnaHQubW9kZWwnO1xyXG5pbXBvcnQgeyBJUmV0cmFuc2xhdGVQYXJhbXMgfSBmcm9tICcuLi9tb2RlbHMvcmV0cmFuc2xhdGUtcGFyYW1zLm1vZGVsJztcclxuaW1wb3J0IHsgSVRyYW5zbGF0ZVBhcmFncmFwaFJlc3BvbnNlIH0gZnJvbSAnLi4vbW9kZWxzL3RyYW5zbGF0ZS1wYXJhZ3JhcGgtcmVzcG9uc2UubW9kZWwnO1xyXG5pbXBvcnQgeyBJVW50cmFuc2xhdGVkUGFyYWdyYXBoIH0gZnJvbSAnLi4vbW9kZWxzL3VudHJhbnNsYXRlZC1wYXJhZ3JhcGgubW9kZWwnO1xyXG5pbXBvcnQgeyBUbGRUcmFuc2xhdGVUZXh0VXRpbHMgfSBmcm9tICcuLi91dGlscy90bGQtdHJhbnNsYXRlLXRleHQudXRpbHMnO1xyXG5pbXBvcnQgeyBUbGRUcmFuc2xhdGVUZXh0QXBpU2VydmljZSB9IGZyb20gJy4vYXBpL3RsZC10cmFuc2xhdGUtdGV4dC1hcGkuc2VydmljZSc7XHJcbmltcG9ydCB7IEFVVE9fTEFOR1VBR0VfREVURUNUSU9OX0tFWSB9IGZyb20gJy4uLy4uL3RsZC1jb21tb24vbW9kZWxzL2F1dG8tbGFuZ3VhZ2UtZGV0ZWN0aW9uLWtleS5jb25zdCc7XHJcbmltcG9ydCB7IExhbmd1YWdlRGV0ZWN0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3RsZC1jb21tb24vc2VydmljZXMvbGFuZ3VhZ2UtZGV0ZWN0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTb3VyY2VDaGFuZ2VFdmVudCB9IGZyb20gJy4uL21vZGVscy9zb3VyY2UtY2hhbmdlLWV2ZW50Lm1vZGVsJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFRsZFRyYW5zbGF0ZVRleHRTZXJ2aWNlIHtcclxuXHJcbiAgcHJpdmF0ZSBfc291cmNlVGV4dDogc3RyaW5nO1xyXG4gIGdldCBzb3VyY2VUZXh0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NvdXJjZVRleHQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zb3VyY2VUZXh0SHlwb3RoZXNpczogc3RyaW5nO1xyXG4gIGdldCBzb3VyY2VUZXh0SHlwb3RoZXNpcygpIHtcclxuICAgIHJldHVybiB0aGlzLl9zb3VyY2VUZXh0SHlwb3RoZXNpcztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NvdXJjZUNoYW5nZTogU3ViamVjdDxTb3VyY2VDaGFuZ2VFdmVudD4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIGdldCBzb3VyY2VDaGFuZ2UoKSB7IHJldHVybiB0aGlzLl9zb3VyY2VDaGFuZ2UuYXNPYnNlcnZhYmxlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfc291cmNlU2Nyb2xsOiBTdWJqZWN0PG51bWJlcj4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIGdldCBzb3VyY2VTY3JvbGwoKSB7IHJldHVybiB0aGlzLl9zb3VyY2VTY3JvbGwuYXNPYnNlcnZhYmxlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfdHJhbnNsYXRlQnV0dG9uQ2xpY2s6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgZ2V0IHRyYW5zbGF0ZUJ1dHRvbkNsaWNrKCkgeyByZXR1cm4gdGhpcy5fdHJhbnNsYXRlQnV0dG9uQ2xpY2suYXNPYnNlcnZhYmxlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFzRGljdGlvbmFyeTogYm9vbGVhbjtcclxuICBnZXQgaGFzRGljdGlvbmFyeSgpIHsgcmV0dXJuIHRoaXMuX2hhc0RpY3Rpb25hcnk7IH1cclxuICBzZXQgaGFzRGljdGlvbmFyeSh2YWwpIHtcclxuICAgIHRoaXMuX2hhc0RpY3Rpb25hcnkgPSB2YWw7XHJcbiAgICBpZiAoIXZhbCkge1xyXG4gICAgICB0aGlzLl9kaWN0aW9uYXJ5RW50cnkgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZGljdGlvbmFyeUVudHJ5OiBEaWN0aW9uYXJ5W107XHJcbiAgZ2V0IGRpY3Rpb25hcnlFbnRyeSgpIHsgcmV0dXJuIHRoaXMuX2RpY3Rpb25hcnlFbnRyeTsgfVxyXG4gIHNldCBkaWN0aW9uYXJ5RW50cnkodmFsKSB7XHJcbiAgICB0aGlzLl9kaWN0aW9uYXJ5RW50cnkgPSB2YWw7XHJcbiAgICBpZiAodGhpcy5kaWN0aW9uYXJ5RW50cnkpIHtcclxuICAgICAgdGhpcy5oYXNEaWN0aW9uYXJ5ID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IHRyYW5zbGF0ZWRUZXh0KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy50YXJnZXRQYXJhZ3JhcGhzLm1hcChsaW5lID0+IGxpbmUub3JpZ2luYWxUZXh0KS5qb2luKFwiXFxuXCIpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IF9vbkNsZWFyID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG5cclxuICB1cmxUb1RyYW5zbGF0ZTogc3RyaW5nO1xyXG4gIHBhcmFncmFwaHM6IElQYXJhZ3JhcGhJbmZvW10gPSBbXTtcclxuICBzb3VyY2VQYXJhZ3JhcGhzOiBJSGlnaGxpZ2h0VHJlZVtdID0gW107XHJcbiAgdGFyZ2V0UGFyYWdyYXBoczogSUhpZ2hsaWdodFRyZWVbXSA9IFtdO1xyXG5cclxuICBpc1N5c3RlbVdha2luZ1VwITogYm9vbGVhbjtcclxuICB0cmdMYW5nQmVmb3JlRGV0ZWN0ITogc3RyaW5nO1xyXG4gIGlzVW5zdXBwb3J0ZWRMYW5nV2FybmluZ1Zpc2libGUhOiBib29sZWFuO1xyXG5cclxuICAvLyBTZXQgdGhpcyBvYmplY3Qgd2l0aCBuZWNlc3NhcnkgdmFsdWVzIHRvIGRpc3BsYXkgVFRTIGNvbXBvbmVudFxyXG4gIHRleHRUb1NwZWVjaFNvdXJjZVNldHRpbmdzOiBUZXh0VG9TcGVlY2hTZXR0aW5ncztcclxuICB0ZXh0VG9TcGVlY2hUYXJnZXRTZXR0aW5nczogVGV4dFRvU3BlZWNoU2V0dGluZ3M7XHJcblxyXG4gIHByaXZhdGUgX2ZpcnN0UGFyYWdyYXBoVHJhbnNsYXRlZDogYm9vbGVhbjtcclxuICBnZXQgZmlyc3RQYXJhZ3JhcGhUcmFuc2xhdGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ZpcnN0UGFyYWdyYXBoVHJhbnNsYXRlZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZGljdGlvbmFyeVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgcGFyYWdyYXBoVHJhbnNsYXRpb25zU3ViamVjdCA9IG5ldyBTdWJqZWN0PElVbnRyYW5zbGF0ZWRQYXJhZ3JhcGg+KCk7XHJcbiAgcHJpdmF0ZSBwYXJhZ3JhcGhUcmFuc2xhdGlvblN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVib3VuY2VyOiBTdWJqZWN0PFNvdXJjZUNoYW5nZUV2ZW50PiA9IG5ldyBTdWJqZWN0PFNvdXJjZUNoYW5nZUV2ZW50PigpO1xyXG4gIHByaXZhdGUgZGVib3VuY2VyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgLyoqIEhvdyBtYW55IHBhcmFncmFwaHMgY2FuIGJlIHRyYW5zbGF0ZWQgYXQgdGhlIHNhbWUgdGltZS4gKi9cclxuICBwcml2YXRlIHJlYWRvbmx5IENPTkNVUlJFTlRfVVBMT0FEUyA9IDU7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBERUJPVU5DRV9USU1FID0gMTAwMDtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBzdGFuZGJ5RW5naW5lTm90aWZpY2F0aW9uRXJyb3JLZXkgPSAnMjEnO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhbmRieVN5c3RlbVJldHJhbnNsYXRpb25UaW1lb3V0ID0gMzAwMDtcclxuICBwcml2YXRlIHJlYWRvbmx5IGVuZ2luZVRlcm1Db2xsZWN0aW9uTm90Rm91bmRFcnJvcktleSA9ICc0MDQyMDEnO1xyXG5cclxuICAvKiogV2hldGhlciBwcm9ncmVzcyBpbmRpY2F0b3Igc2hvdWxkIGJlIHNob3duLiBUaGlzIHZhbHVlIG11c3QgYmUgc2V0IHRvIHRydWUgb25seSBpZiBjb25maWd1cmVkIHRpbWUgaGFzIHBhc3NlZC4gKi9cclxuICBwcml2YXRlIF9zaG91bGRTaG93UHJvZ3Jlc3NJbmRpY2F0b3IgPSBmYWxzZTtcclxuICBnZXQgc2hvdWxkU2hvd1Byb2dyZXNzSW5kaWNhdG9yKCkgeyByZXR1cm4gdGhpcy5fc2hvdWxkU2hvd1Byb2dyZXNzSW5kaWNhdG9yOyB9XHJcbiAgLy9Ob2RlSlMuVGltZW91dFxyXG4gIHByaXZhdGUgcHJvZ3Jlc3NJbmRpY2F0b3JUaW1lb3V0OiBhbnk7XHJcblxyXG4gIHByaXZhdGUgX3VudHJhbnNsYXRlZFBhcmFncmFwaENvdW50ID0gMDtcclxuICBnZXQgdW50cmFuc2xhdGVkUGFyYWdyYXBoQ291bnQoKSB7IHJldHVybiB0aGlzLl91bnRyYW5zbGF0ZWRQYXJhZ3JhcGhDb3VudDsgfVxyXG4gIHNldCB1bnRyYW5zbGF0ZWRQYXJhZ3JhcGhDb3VudCh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl91bnRyYW5zbGF0ZWRQYXJhZ3JhcGhDb3VudCA9IHZhbHVlO1xyXG4gICAgLy8gV2hlbiB0cmFuc2xhdGlvbiBmaW5pc2hlZCwgcHJvZ3Jlc3MgaW5kaWNhdG9yIHNob3VsZCBub3QgYmUgc2hvd24uXHJcbiAgICBpZiAodmFsdWUgPT09IDApIHtcclxuICAgICAgdGhpcy50b2dnbGVUZXh0VG9TcGVlY2goKTtcclxuICAgICAgdGhpcy5oaWRlUHJvZ3Jlc3NJbmRpY2F0b3IoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBpc1RyYW5zbGF0aW5nKCkgeyByZXR1cm4gdGhpcy51bnRyYW5zbGF0ZWRQYXJhZ3JhcGhDb3VudCA+IDAgfHwgdGhpcy5pc1N5c3RlbVdha2luZ1VwIH1cclxuXHJcbiAgLy8gZ2V0dGVycyBmcm9tIGNvbmZpZyBzZXJ2aWNlLlxyXG4gIGdldCBhbGxvd1dlYnNpdGVUcmFuc2xhdGlvbigpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuY29uZmlnU2VydmljZS50ZXh0Q29uZmlnLmFsbG93V2Vic2l0ZVRyYW5zbGF0aW9uOyB9O1xyXG4gIGdldCBhdXRvUmVkaXJlY3RUb1dlYlRyYW5zbGF0ZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuY29uZmlnU2VydmljZS50ZXh0Q29uZmlnLmF1dG9SZWRpcmVjdFRvV2ViVHJhbnNsYXRlOyB9O1xyXG4gIGdldCB3ZWJXaWRnZXRSZWRpcmVjdFVybFByZWZpeCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5jb25maWdTZXJ2aWNlLnRleHRDb25maWcud2ViV2lkZ2V0UmVkaXJlY3RVcmxQcmVmaXg7IH07XHJcbiAgZ2V0IHdlYldpZGdldFJlZGlyZWN0VXJsUG9zZml4KCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmNvbmZpZ1NlcnZpY2UudGV4dENvbmZpZy53ZWJXaWRnZXRSZWRpcmVjdFVybFBvc2ZpeDsgfTtcclxuICBnZXQgdXNlRGljdGlvbmFyeSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuY29uZmlnU2VydmljZS50ZXh0Q29uZmlnLnVzZURpY3Rpb25hcnk7IH07XHJcbiAgZ2V0IHByb2dyZXNzSW5kaWNhdG9yVGltZW91dE1pbGlTZWNvbmRzKCk6IG51bWJlciB7IHJldHVybiB0aGlzLmNvbmZpZ1NlcnZpY2UudGV4dENvbmZpZy5wcm9ncmVzc0luZGljYXRvclRpbWVvdXRNaWxpU2Vjb25kczsgfVxyXG4gIGdldCB0ZXJtaW5vbG9neVBvcnRhbFVybCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5jb25maWdTZXJ2aWNlLnRlcm1Db25maWcudGVybWlub2xvZ3lQb3J0YWxVcmw7IH1cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBnZXQgYWN0aXZlRGF0YSgpIHtcclxuICAgIHJldHVybiB0aGlzLnN5c3RlbU1hbmFnZW1lbnRTZXJ2aWNlLmdldEFjdGl2ZVN5c3RlbU9iaigpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRyYW5zbGF0ZVVybFJlZGlyZWN0KCkge1xyXG4gICAgaWYgKHRoaXMud2ViV2lkZ2V0UmVkaXJlY3RVcmxQcmVmaXggPT09ICcnKSB7XHJcbiAgICAgIHJldHVybiBgJHt0aGlzLndlYldpZGdldFJlZGlyZWN0VXJsUHJlZml4fSR7dGhpcy53ZWJXaWRnZXRSZWRpcmVjdFVybFBvc2ZpeH0ke2VuY29kZVVSSUNvbXBvbmVudCh0aGlzLnVybFRvVHJhbnNsYXRlKX1gO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGAke3RoaXMud2ViV2lkZ2V0UmVkaXJlY3RVcmxQcmVmaXh9JHt0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZ30ke3RoaXMud2ViV2lkZ2V0UmVkaXJlY3RVcmxQb3NmaXh9JHt0aGlzLnVybFRvVHJhbnNsYXRlfWA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogSWYgZGljdGF0dGlvbiBpcyBhY3RpdmUuIEJhc2VkIG9uIHRoaXMsIGV4dGVuc2lvbnMgYXJlIGhpZGRlbi4gKi9cclxuICBpc0RpY3RhdGluZzogYm9vbGVhbjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFwaTogVGxkVHJhbnNsYXRlVGV4dEFwaVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN5c3RlbU1hbmFnZW1lbnRTZXJ2aWNlOiBUbGRUcmFuc2xhdGVTeXN0ZW1NYW5hZ2VtZW50U2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgdGxkU2Nyb2xsU2VydmljZTogVGxkU2Nyb2xsU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnU2VydmljZTogVGxkVHJhbnNsYXRlQ29uZmlnU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBoaWdobGlnaHRTZXJ2aWNlOiBUbGRIaWdobGlnaHRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBhbGVydHNTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRlcm1pbm9sb2d5U2VydmljZTogVGVybWlub2xvZ3lTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBsYW5ndWFnZTogTGFuZ3VhZ2VEZXRlY3Rpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBsYW5ndWFnZVRyYW5zbGF0ZTogTGFuZ3VhZ2VUcmFuc2xhdGVTZXJ2aWNlXHJcbiAgKSB7fVxyXG5cclxuICBjaGFuZ2VTb3VyY2UoZXZlbnQ6IFNvdXJjZUNoYW5nZUV2ZW50KSB7XHJcbiAgICBpZiAoIWV2ZW50LnBocmFzZS50cmltKCkubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuX29uQ2xlYXIubmV4dChudWxsKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmFjdGl2ZURhdGE/LmRldGVjdGVkTGFuZ3VhZ2UpIHtcclxuICAgICAgICB0aGlzLnN5c3RlbU1hbmFnZW1lbnRTZXJ2aWNlLnNldERldGVjdGVkTGFuZ3VhZ2UobnVsbCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG4gICAgdGhpcy5fc291cmNlVGV4dCA9IGV2ZW50LnBocmFzZTtcclxuICAgIHRoaXMuX3NvdXJjZUNoYW5nZS5uZXh0KGV2ZW50KTtcclxuICAgIHRoaXMuZGVib3VuY2VyLm5leHQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlU291cmNlSHlwb3RoZXNpcyh0ZXh0OiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3NvdXJjZVRleHRIeXBvdGhlc2lzID0gdGV4dDtcclxuICB9XHJcblxyXG4gIG9uU291cmNlU2Nyb2xsKG9mZnNldFRvcDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9zb3VyY2VTY3JvbGwubmV4dChvZmZzZXRUb3ApO1xyXG4gIH1cclxuXHJcbiAgb25UcmFuc2xhdGVCdXR0b25DbGljaygpIHtcclxuICAgIHRoaXMuX3RyYW5zbGF0ZUJ1dHRvbkNsaWNrLm5leHQobnVsbClcclxuICAgIHRoaXMucmV0cmFuc2xhdGUoeyBidXR0b25DbGlja2VkOiB0cnVlIH0pO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJTb3VyY2UoKSB7XHJcbiAgICB0aGlzLl9vbkNsZWFyLm5leHQobnVsbCk7XHJcbiAgICB0aGlzLnJlc2V0RGV0ZWN0ZWRMYW5ndWFnZSgpO1xyXG4gICAgdGhpcy5jaGFuZ2VTb3VyY2UoeyBwaHJhc2U6IFwiXCIgfSk7XHJcbiAgfVxyXG5cclxuICBvbkNsZWFyKCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5fb25DbGVhci5hc09ic2VydmFibGUoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVRyYW5zbGF0aW9uKG9wdGlvbnM6IHN0cmluZywgc3lzdGVtSUQ6IHN0cmluZywgdGV4dDogc3RyaW5nLCB0cmFuc2xhdGlvbjogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5hcGkudXBkYXRlVHJhbnNsYXRpb24ob3B0aW9ucywgc3lzdGVtSUQsIHRleHQsIHRyYW5zbGF0aW9uKTtcclxuICB9XHJcblxyXG4gIGxpc3Rlbk9uQ2hhbmdlcygpIHtcclxuICAgIGlmICh0aGlzLmRlYm91bmNlclN1YnNjcmlwdGlvbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kZWJvdW5jZXJTdWJzY3JpcHRpb24gPSB0aGlzLmRlYm91bmNlci5waXBlKFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocHJldmlvdXMpID0+IHtcclxuICAgICAgICByZXR1cm4gcHJldmlvdXMucGhyYXNlID09IHRoaXMuc291cmNlVGV4dDtcclxuICAgICAgfSksXHJcbiAgICAgIGRlYm91bmNlKGV2ID0+IGV2LnBocmFzZT8ubGVuZ3RoID4gMCA/IHRpbWVyKHRoaXMuREVCT1VOQ0VfVElNRSkgOiB0aW1lcigwKSlcclxuICAgIClcclxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcclxuICAgICAgICB0aGlzLmhpZ2hsaWdodFNlcnZpY2UuY2hhbmdlU2VsZWN0ZWRUYXJnZXRTZW50ZW5jZShudWxsKTtcclxuXHJcbiAgICAgICAgaWYgKCFldmVudC5kaXNhYmxlQXV0b21hdGljVHJhbnNsYXRpb24pIHtcclxuICAgICAgICAgIHRoaXMucmV0cmFuc2xhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc3RvcExpc3RlbmluZ1RvQ2hhbmdlcygpIHtcclxuICAgIGlmICghdGhpcy5kZWJvdW5jZXJTdWJzY3JpcHRpb24pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kZWJvdW5jZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuZGVib3VuY2VyU3Vic2NyaXB0aW9uID0gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vIGlmIG1ldGhvZCBnZXRzIGNhbGxlZCBiZWNhdXNlIG9mIGJ1dHRvbiBjbGljayBhbmQgdXJsIGVudGVyZWQgLSBnbyB0byB3ZWIgdHJhbnNsYXRpb25cclxuICByZXRyYW5zbGF0ZShwYXJhbXM/OiBJUmV0cmFuc2xhdGVQYXJhbXMsIGRldGVjdGVkTGFuZ3VhZ2U/OiBzdHJpbmcpIHtcclxuICAgIGlmICghdGhpcy5zb3VyY2VUZXh0Py50cmltKCkgfHwgdGhpcy5zb3VyY2VUZXh0Py50cmltKCkgPT0gXCJcIikge1xyXG4gICAgICB0aGlzLmNsZWFyU291cmNlUGFyYW1zKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocGFyYW1zPy5idXR0b25DbGlja2VkIHx8IHBhcmFtcz8uc3lzdGVtQ2hhbmdlZCkge1xyXG4gICAgICB0aGlzLmNsZWFyU291cmNlUGFyYW1zKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFkZXRlY3RlZExhbmd1YWdlICYmICh0aGlzLmFjdGl2ZURhdGEuc291cmNlTGFuZ3VhZ2UgPT09IEFVVE9fTEFOR1VBR0VfREVURUNUSU9OX0tFWSB8fCB0aGlzLmFjdGl2ZURhdGEuZGV0ZWN0ZWRMYW5ndWFnZSkpIHsgXHJcbiAgICAgIHRoaXMubGFuZ3VhZ2UuZGV0ZWN0KHRoaXMuc291cmNlVGV4dC5yZXBsYWNlKCdcXG4nLCAnICcpKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICB0aGlzLnJldHJhbnNsYXRlKHBhcmFtcywgcmVzLmRldGVjdGVkTGFuZ3VhZ2UpO1xyXG4gICAgICB9KVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYWN0aXZlU3lzdGVtSWQgPSB0aGlzLnN5c3RlbU1hbmFnZW1lbnRTZXJ2aWNlLmdldEFjdGl2ZVN5c3RlbU9iaigpLmlkO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRDb2xsZWN0aW9uID0gdGhpcy50ZXJtaW5vbG9neVNlcnZpY2UuZW5naW5lc1thY3RpdmVTeXN0ZW1JZF0/LnNlbGVjdGVkO1xyXG4gICAgLy8gaWYgY29sbGVjdGlvbiBpcyBub3QgaW1wb3J0ZWQgd2Ugd2FudCB0byBhdm9pZCBpbnN0YW50IHRyYW5zbGF0aW9uXHJcbiAgICBpZiAoc2VsZWN0ZWRDb2xsZWN0aW9uICYmICFzZWxlY3RlZENvbGxlY3Rpb24/Lm10Q29sbGVjdGlvbikge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5yZXRyYW5zbGF0ZSh7YnV0dG9uQ2xpY2tlZDogdHJ1ZX0sIGRldGVjdGVkTGFuZ3VhZ2UpO1xyXG4gICAgICAgIH0sIDMwMDApICAgICAgXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBtYXhTb3VyY2VDaGFyYWN0ZXJEaWN0aW9uYXJ5ID0gMjAwO1xyXG4gICAgY29uc3QgbWF4RGljdGlvbmFyeVdvcmRzID0gMTI7XHJcblxyXG4gICAgY29uc3Qgd29yZHNJblNvdXJjZSA9IEh0bWxIZWxwZXIuZ2V0V29yZENvdW50KHRoaXMuc291cmNlVGV4dCk7XHJcbiAgICB0aGlzLnVybFRvVHJhbnNsYXRlID0gSHRtbEhlbHBlci5pc1RleHRVcmwodGhpcy5zb3VyY2VUZXh0KTtcclxuICAgIGlmICh0aGlzLmFsbG93V2Vic2l0ZVRyYW5zbGF0aW9uICYmIHRoaXMudXJsVG9UcmFuc2xhdGUpIHtcclxuICAgICAgdGhpcy5wYXJhZ3JhcGhzID0gW107XHJcbiAgICAgIHRoaXMuc291cmNlUGFyYWdyYXBocyA9IFtdO1xyXG4gICAgICB0aGlzLnRhcmdldFBhcmFncmFwaHMgPSBbXTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmF1dG9SZWRpcmVjdFRvV2ViVHJhbnNsYXRlIHx8IHBhcmFtcz8uYnV0dG9uQ2xpY2tlZCkge1xyXG4gICAgICAgIHdpbmRvdy5vcGVuKHRoaXMudHJhbnNsYXRlVXJsUmVkaXJlY3QsIFwiX2JsYW5rXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnVybFRvVHJhbnNsYXRlID0gbnVsbDtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnVzZURpY3Rpb25hcnkgJiYgdGhpcy5zb3VyY2VUZXh0Lmxlbmd0aCA8IG1heFNvdXJjZUNoYXJhY3RlckRpY3Rpb25hcnkgJiYgd29yZHNJblNvdXJjZSA8PSBtYXhEaWN0aW9uYXJ5V29yZHMpIHtcclxuICAgICAgdGhpcy5wcmVwYXJlQW5kVHJhbnNsYXRlV29yZHMoZGV0ZWN0ZWRMYW5ndWFnZSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMudHJhbnNsYXRlVGV4dCh0aGlzLnNvdXJjZVRleHQsIGRldGVjdGVkTGFuZ3VhZ2UpO1xyXG4gIH1cclxuXHJcbiAgLyoqIFN0b3BzIHRleHQgdHJhbnNsYXRpb24gaWYgaXQgaXMgYWN0aXZlLiAqL1xyXG4gIHN0b3BUcmFuc2xhdGlvbigpIHtcclxuICAgIHRoaXMudW50cmFuc2xhdGVkUGFyYWdyYXBoQ291bnQgPSAwO1xyXG4gICAgaWYgKHRoaXMucGFyYWdyYXBoVHJhbnNsYXRpb25TdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5wYXJhZ3JhcGhUcmFuc2xhdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmRpY3Rpb25hcnlTdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5kaWN0aW9uYXJ5U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4gIHByaXZhdGUgcmVzZXREZXRlY3RlZExhbmd1YWdlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnU2VydmljZS50ZXh0Q29uZmlnLmlzQXV0b0xhbmd1YWdlRGV0ZWN0aW9uRW5hYmxlZCAmJiB0aGlzLmFjdGl2ZURhdGE/LmRldGVjdGVkTGFuZ3VhZ2UpIHtcclxuICAgICAgdGhpcy5zeXN0ZW1NYW5hZ2VtZW50U2VydmljZS5zZXREZXRlY3RlZExhbmd1YWdlKG51bGwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWNyZWF0ZVBhcmFncmFwaFRyYW5zbGF0aW9uU3ViamVjdChkZXRlY3RlZExhbmd1YWdlPzogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9maXJzdFBhcmFncmFwaFRyYW5zbGF0ZWQgPSBmYWxzZTtcclxuICAgIHRoaXMucGFyYWdyYXBoVHJhbnNsYXRpb25zU3ViamVjdCA9IG5ldyBTdWJqZWN0PElVbnRyYW5zbGF0ZWRQYXJhZ3JhcGg+KCk7XHJcblxyXG4gICAgY29uc3Qgc291cmNlID0gdGhpcy5zb3VyY2VUZXh0O1xyXG4gICAgdGhpcy51bnRyYW5zbGF0ZWRQYXJhZ3JhcGhDb3VudCA9IDA7XHJcbiAgICB0aGlzLnBhcmFncmFwaFRyYW5zbGF0aW9uU3Vic2NyaXB0aW9uID0gdGhpcy5wYXJhZ3JhcGhUcmFuc2xhdGlvbnNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoXHJcbiAgICAgIG1lcmdlTWFwKCh1bnRyYW5zbGF0ZWRQYXJhZ3JhcGgpID0+IHtcclxuICAgICAgICB0aGlzLnVudHJhbnNsYXRlZFBhcmFncmFwaENvdW50ICs9IDE7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlUGFyYWdyYXBoKHVudHJhbnNsYXRlZFBhcmFncmFwaCwgZGV0ZWN0ZWRMYW5ndWFnZSkucGlwZShcclxuICAgICAgICAgIHRhcCgocmVzcG9uc2U6IElUcmFuc2xhdGVQYXJhZ3JhcGhSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICAvLyBObyBuZWVkIHRvIGhhbmRsZSByZXNwb25zZSBpZiBzb3VyY2UgdGV4dCBoYXMgY2hhbmdlZC5cclxuICAgICAgICAgICAgaWYgKHNvdXJjZSAhPSB0aGlzLnNvdXJjZVRleHQpIHtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVUcmFuc2xhdGVkUGFyYWdyYXBoKHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVQYXJhZ3JhcGhzKHVudHJhbnNsYXRlZFBhcmFncmFwaC5peCwgcmVzcG9uc2UpO1xyXG4gICAgICAgICAgICB0aGlzLnVudHJhbnNsYXRlZFBhcmFncmFwaENvdW50IC09IDE7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy51bnRyYW5zbGF0ZWRQYXJhZ3JhcGhDb3VudCA9PT0gMCAmJiB0aGlzLmlzU3lzdGVtV2FraW5nVXApIHtcclxuICAgICAgICAgICAgICB0aGlzLmlzU3lzdGVtV2FraW5nVXAgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLmFsZXJ0c1NlcnZpY2UuZGVsZXRlTWVzc2FnZShOb3RpZmljYXRpb25NZXNzYWdlVHlwZS5JTkZPLCAnRVJST1JTLkVfMjEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gZXJyLmVycm9yO1xyXG5cclxuICAgICAgICAgICAgdGhpcy51bnRyYW5zbGF0ZWRQYXJhZ3JhcGhDb3VudCAtPSAxO1xyXG5cclxuICAgICAgICAgICAgaWYgKGVyci5zdGF0dXMgPT09IDUwMCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuYWxlcnRzU2VydmljZS51bmhhbmRlbGVkRXJyb3IoeyBFcnJvckNvZGU6IEVycm9yQ29kZS5UUkFOU0xBVElPTl9GQUlMRUQgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3I/LkVycm9yQ29kZSA9PT0gdGhpcy5zdGFuZGJ5RW5naW5lTm90aWZpY2F0aW9uRXJyb3JLZXkpIHtcclxuICAgICAgICAgICAgICB0aGlzLmFsZXJ0c1NlcnZpY2UuaW5mbygnRVJST1JTLkVfMjEnKTtcclxuICAgICAgICAgICAgICB0aGlzLmlzU3lzdGVtV2FraW5nVXAgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmV0cmFuc2xhdGUoKTtcclxuICAgICAgICAgICAgICB9LCB0aGlzLnN0YW5kYnlTeXN0ZW1SZXRyYW5zbGF0aW9uVGltZW91dClcclxuXHJcbiAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yPy5lcnJvcj8uY29kZSA9PSB0aGlzLmVuZ2luZVRlcm1Db2xsZWN0aW9uTm90Rm91bmRFcnJvcktleSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuYWxlcnRzU2VydmljZS5lcnJvcignRVJST1JTLkVfNDA0MjAxJywgZXJyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmFsZXJ0c1NlcnZpY2UudW5oYW5kZWxlZEVycm9yKGVycik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QsIHN1YmplY3QgaXMgZGVzdHJveWVkIGFuZCB1bnN1YnNjcmliZWQsIHNvIHRocm93biBlcnJvciB3b250IGhhdmUgYW55IGVmZmVjdC5cclxuICAgICAgICAgICAgdGhpcy5zdG9wVHJhbnNsYXRpb24oKTtcclxuICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgfSkpXHJcbiAgICAgIH0sIHRoaXMuQ09OQ1VSUkVOVF9VUExPQURTKSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHRyYW5zbGF0ZVBhcmFncmFwaChwYXJhZ3JhcGg6IElVbnRyYW5zbGF0ZWRQYXJhZ3JhcGgsIGRldGVjdGVkTGFuZ3VhZ2U/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPElUcmFuc2xhdGVQYXJhZ3JhcGhSZXNwb25zZT4ge1xyXG4gICAgY29uc3QgcGFyYW1zOiBJVHJhbnNsYXRlUGFyYWdyYXBoUmVxdWVzdFBhcmFtcyA9IHtcclxuXHRcdFx0cGFyYWdyYXBoSXg6IHBhcmFncmFwaC5peCxcclxuXHRcdFx0dGV4dDogcGFyYWdyYXBoLmxpbmUsXHJcblx0XHRcdHN5c3RlbTogdGhpcy5hY3RpdmVEYXRhXHJcblx0XHR9O1xyXG5cclxuICAgIGlmICgoZGV0ZWN0ZWRMYW5ndWFnZSA9PT0gcGFyYW1zLnN5c3RlbS50YXJnZXRMYW5ndWFnZSkgJiYgdGhpcy5zeXN0ZW1NYW5hZ2VtZW50U2VydmljZS5zeXN0ZW1zLmZpbmQoKHN5c3RlbSkgPT4gc3lzdGVtLnNvdXJjZUxhbmd1YWdlID09PSBkZXRlY3RlZExhbmd1YWdlKSkge1xyXG4gICAgICB0aGlzLnN5c3RlbU1hbmFnZW1lbnRTZXJ2aWNlLnNob3dTYW1lTGFuZ3VhZ2VzKGRldGVjdGVkTGFuZ3VhZ2UpO1xyXG4gICAgICB0aGlzLl9vbkNsZWFyLm5leHQobnVsbCk7XHJcblxyXG4gICAgICByZXR1cm4gb2YodGhpcy5nZXRFbXB0eVRyYW5zbGF0aW9uUmVzcG9uc2UocGFyYWdyYXBoLCBwYXJhbXMpKTtcclxuICAgIH1cclxuXHJcblx0XHRpZiAoIXBhcmFtcy50ZXh0IHx8IHBhcmFtcy50ZXh0LnRyaW0oKS5sZW5ndGggPT09IDApIHtcclxuXHRcdFx0cmV0dXJuIG9mKHRoaXMuZ2V0RW1wdHlUcmFuc2xhdGlvblJlc3BvbnNlKHBhcmFncmFwaCwgcGFyYW1zLCB0cnVlKSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGRldGVjdGVkTGFuZ3VhZ2UgJiYgKGRldGVjdGVkTGFuZ3VhZ2UgIT09IHBhcmFtcy5zeXN0ZW0uZGV0ZWN0ZWRMYW5ndWFnZSkpIHtcclxuXHRcdFx0cGFyYW1zLnN5c3RlbS5kb21haW4gPSBcIlwiO1xyXG5cdFx0XHRwYXJhbXMuc3lzdGVtLmRldGVjdGVkTGFuZ3VhZ2UgPSBkZXRlY3RlZExhbmd1YWdlO1xyXG5cclxuXHRcdFx0Y29uc3QgZW5naW5lID0gdGhpcy5zeXN0ZW1NYW5hZ2VtZW50U2VydmljZS5zeXN0ZW1zLmZpbmQoKHN5c3RlbSkgPT4gXHJcbiAgICAgICAgc3lzdGVtLnNvdXJjZUxhbmd1YWdlID09PSBkZXRlY3RlZExhbmd1YWdlICYmIHBhcmFtcy5zeXN0ZW0udGFyZ2V0TGFuZ3VhZ2UgPT09IHN5c3RlbS50YXJnZXRMYW5ndWFnZVxyXG4gICAgICApO1xyXG5cclxuXHRcdFx0dGhpcy5fb25DbGVhci5uZXh0KG51bGwpO1xyXG5cclxuXHRcdFx0aWYgKGVuZ2luZSkge1xyXG5cdFx0XHRcdHRoaXMuc3lzdGVtTWFuYWdlbWVudFNlcnZpY2Uuc2V0RGV0ZWN0ZWRMYW5ndWFnZShkZXRlY3RlZExhbmd1YWdlKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuICAgICAgICAvLyBkaXNwbGF5aW5nIHRoYXQgZW5naW5lIG5vdCBmb3VuZC5cclxuICAgICAgICB0aGlzLmFsZXJ0c1NlcnZpY2Uud2FybmluZygnRVJST1JTLkRFVEVDVElPTi5VTkFWQUlMQUJMRScsIHtcclxuICAgICAgICAgIHNyY0xhbmc6IHRoaXMubGFuZ3VhZ2VUcmFuc2xhdGUuZ2V0TGFuZ3VhZ2VDb2RlVHJhbnNsYXRpb24oZGV0ZWN0ZWRMYW5ndWFnZSksXHJcbiAgICAgICAgICB0cmdMYW5nOiB0aGlzLmxhbmd1YWdlVHJhbnNsYXRlLmdldExhbmd1YWdlQ29kZVRyYW5zbGF0aW9uKHBhcmFtcy5zeXN0ZW0udGFyZ2V0TGFuZ3VhZ2UpLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmlzVW5zdXBwb3J0ZWRMYW5nV2FybmluZ1Zpc2libGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAvLyBwcmVzZXRpbmcgc3lzdGVtIHdpdGggc3JjTGFuZyBzYW1lIGFzIGRldGVjdGVkTGFuZ3VhZ2UgKHRhcmdldCBpcyByYW5kb20gaGVyZSlcclxuICAgICAgICBpZiAodGhpcy5zeXN0ZW1NYW5hZ2VtZW50U2VydmljZS5zeXN0ZW1zLmZpbmQoKHN5c3RlbSkgPT4gc3lzdGVtLnNvdXJjZUxhbmd1YWdlID09PSBkZXRlY3RlZExhbmd1YWdlKSkge1xyXG4gICAgICAgICAgdGhpcy5zeXN0ZW1NYW5hZ2VtZW50U2VydmljZS5zZXREZXRlY3RlZExhbmd1YWdlKGRldGVjdGVkTGFuZ3VhZ2UpO1xyXG4gICAgICAgICAgdGhpcy50cmdMYW5nQmVmb3JlRGV0ZWN0ID0gcGFyYW1zLnN5c3RlbS50YXJnZXRMYW5ndWFnZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5yZXNldERldGVjdGVkTGFuZ3VhZ2UoKTsgICAgICAgICAgICBcclxuICAgICAgICAgIHJldHVybiBvZih0aGlzLmdldEVtcHR5VHJhbnNsYXRpb25SZXNwb25zZShwYXJhZ3JhcGgsIHBhcmFtcywgZmFsc2UsIHRydWUpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHRcdH1cclxuXHJcbiAgICAvLyB3ZSBzaG91bGQgY2xlYXIgdW5hdmFpbGFibGUgbm90aWZpY2F0aW9uIGFmdGVyIG1hbnVhbCBsYW5ndWFnZSBzZWxlY3Rpb24sIGJ1dCBub3Qgd2hlbiB3ZSBoYXZlIHByZXNldGVkIGVuZ2luZSB3aXRoIHJhbmRvbSB0YXJnZXQgbGFuZ3VhZ2VcclxuICAgIGlmICh0aGlzLmlzVW5zdXBwb3J0ZWRMYW5nV2FybmluZ1Zpc2libGUgJiYgKCF0aGlzLnRyZ0xhbmdCZWZvcmVEZXRlY3QgfHwgdGhpcy50cmdMYW5nQmVmb3JlRGV0ZWN0ICYmICFwYXJhbXMuc3lzdGVtLmRldGVjdGVkTGFuZ3VhZ2UpKSB7XHJcblx0XHRcdHRoaXMuX29uQ2xlYXIubmV4dChudWxsKTtcclxuICAgICAgdGhpcy5pc1Vuc3VwcG9ydGVkTGFuZ1dhcm5pbmdWaXNpYmxlID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuYXBpLnRyYW5zbGF0ZVBhcmFncmFwaChwYXJhbXMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRFbXB0eVRyYW5zbGF0aW9uUmVzcG9uc2UocGFyYWdyYXBoOiBJVW50cmFuc2xhdGVkUGFyYWdyYXBoLCBwYXJhbXM6IElUcmFuc2xhdGVQYXJhZ3JhcGhSZXF1ZXN0UGFyYW1zLCBsZWF2ZUFsbEVtcHR5PzogYm9vbGVhbiwgbGVhdmVUYXJnZXRFbXB0eT86IGJvb2xlYW4pOiBJVHJhbnNsYXRlUGFyYWdyYXBoUmVzcG9uc2Uge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgc291cmNlVHJlZTogeyB0ZXh0OiBsZWF2ZUFsbEVtcHR5ID8gJycgOiBwYXJhZ3JhcGgubGluZSwgcGFyYWdyYXBoSXg6IHBhcmFtcy5wYXJhZ3JhcGhJeCwgdHlwZTogSGlnaGxpZ2h0VHJlZVR5cGUuUEFSQUdSQVBILCByb290OiBudWxsLCBvcmlnaW5hbFRleHQ6IGxlYXZlQWxsRW1wdHkgPyAnJyA6IHBhcmFncmFwaC5saW5lIH0sXHJcbiAgICAgIHRhcmdldFRyZWU6IHsgdGV4dDogbGVhdmVUYXJnZXRFbXB0eSB8fCBsZWF2ZUFsbEVtcHR5ID8gJycgOiBwYXJhZ3JhcGgubGluZSwgcGFyYWdyYXBoSXg6IHBhcmFtcy5wYXJhZ3JhcGhJeCwgdHlwZTogSGlnaGxpZ2h0VHJlZVR5cGUuUEFSQUdSQVBILCByb290OiBudWxsLCBvcmlnaW5hbFRleHQ6IGxlYXZlQWxsRW1wdHkgPyAnJyA6IHBhcmFncmFwaC5saW5lIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlVHJhbnNsYXRlZFBhcmFncmFwaChwYXJhZ3JhcGg6IElUcmFuc2xhdGVQYXJhZ3JhcGhSZXNwb25zZSkge1xyXG4gICAgLy9pZiBhdXRvIGRvbWFpbiBkZXRlY3Rpb24gaXMgb24sIHN5c3RlbSBhcGkgc2VydmljZSBzZXRzIHN5c3RlbSBpZCB0byBgJHtzcmNMYW5nfS0ke3RhcmdldExhbmd9YCBzbyB3ZSBuZWVkIHRvIHZhbGlkYXRlIGlmIHRoYXQgaXMgdGhlIGNhc2VcclxuICAgIGlmIChwYXJhZ3JhcGguc3lzdGVtSWQgJiYgdGhpcy5hY3RpdmVEYXRhLmlkICE9PSBwYXJhZ3JhcGguc3lzdGVtSWRcclxuICAgICAgJiYgdGhpcy5hY3RpdmVEYXRhLmlkID09PSBgJHt0aGlzLmFjdGl2ZURhdGEuc291cmNlTGFuZ3VhZ2V9LSR7dGhpcy5hY3RpdmVEYXRhLnRhcmdldExhbmd1YWdlfWApIHtcclxuICAgICAgdGhpcy5zeXN0ZW1NYW5hZ2VtZW50U2VydmljZS5jaGFuZ2VTeXN0ZW0ocGFyYWdyYXBoLnN5c3RlbUlkKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBOZWVkcyB0byBzY3JvbGwgdG8gdG9wIGFmdGVyIGZpcnN0IHBhcmFncmFwaCBpcyB0cmFuc2xhdGVkLlxyXG4gICAgaWYgKCF0aGlzLl9maXJzdFBhcmFncmFwaFRyYW5zbGF0ZWQpIHtcclxuICAgICAgLy8gaWYgZW1wdHkgcGFyYWdyYXBoIGlzICd0cmFuc2xhdGVkJyBmaXJzdCwgbm8gbmVlZCB0byBkbyBhbnkgc2Nyb2xsaW5nLiBXYWl0IGZvciByZWFsIHRleHQgdG8gYmUgdHJhbnNsYXRlZC5cclxuICAgICAgaWYgKHBhcmFncmFwaC50YXJnZXRUcmVlLnRleHQudHJpbSgpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLl9maXJzdFBhcmFncmFwaFRyYW5zbGF0ZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudGxkU2Nyb2xsU2VydmljZS5zeW5jU2Nyb2xsYmFycyhudWxsLCAwKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVQYXJhZ3JhcGhzKHBhcmFncmFwaEl4OiBudW1iZXIsIHJlc3BvbnNlOiBJVHJhbnNsYXRlUGFyYWdyYXBoUmVzcG9uc2UpIHtcclxuICAgIGxldCBwYXJhZ3JhcGg6IElQYXJhZ3JhcGhJbmZvID0ge1xyXG4gICAgICBpeDogcGFyYWdyYXBoSXgsXHJcbiAgICAgIHRhcmdldDogcmVzcG9uc2UudGFyZ2V0VHJlZSxcclxuICAgICAgc291cmNlOiByZXNwb25zZS5zb3VyY2VUcmVlXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMucGFyYWdyYXBocy5zcGxpY2UocGFyYWdyYXBoSXgsIDEsIHBhcmFncmFwaCk7XHJcbiAgICB0aGlzLnNvdXJjZVBhcmFncmFwaHMuc3BsaWNlKHBhcmFncmFwaEl4LCAxLCByZXNwb25zZS5zb3VyY2VUcmVlKTtcclxuICAgIHRoaXMudGFyZ2V0UGFyYWdyYXBocy5zcGxpY2UocGFyYWdyYXBoSXgsIDEsIHJlc3BvbnNlLnRhcmdldFRyZWUpO1xyXG5cclxuICAgIHRoaXMucGFyYWdyYXBocy5zb3J0KChhLCBiKSA9PiAoYS5peCA+IGIuaXgpID8gMSA6IC0xKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYXJTb3VyY2VQYXJhbXMoKSB7XHJcbiAgICB0aGlzLl9kaWN0aW9uYXJ5RW50cnkgPSBudWxsO1xyXG4gICAgdGhpcy5faGFzRGljdGlvbmFyeSA9IGZhbHNlO1xyXG4gICAgdGhpcy5wYXJhZ3JhcGhzID0gW107XHJcbiAgICB0aGlzLnRhcmdldFBhcmFncmFwaHMgPSBbXTtcclxuICAgIHRoaXMuc291cmNlUGFyYWdyYXBocyA9IFtdO1xyXG4gICAgdGhpcy51cmxUb1RyYW5zbGF0ZSA9IG51bGw7XHJcbiAgICB0aGlzLnRleHRUb1NwZWVjaFRhcmdldFNldHRpbmdzID0gbnVsbDtcclxuICAgIHRoaXMudGV4dFRvU3BlZWNoU291cmNlU2V0dGluZ3MgPSBudWxsO1xyXG4gICAgdGhpcy5zdG9wVHJhbnNsYXRpb24oKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcHJlcGFyZUFuZFRyYW5zbGF0ZVdvcmRzKGRldGVjdGVkTGFuZ3VhZ2U/OiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGRpY3Rpb25hcnkgPSB0aGlzLmFwaS5kaWN0aW9uYXJ5VHJhbnNsYXRpb24odGhpcy5zb3VyY2VUZXh0LnRyaW0oKSwgdGhpcy5hY3RpdmVEYXRhLnNvdXJjZUxhbmd1YWdlLCB0aGlzLmFjdGl2ZURhdGEudGFyZ2V0TGFuZ3VhZ2UpO1xyXG5cclxuXHRcdHRoaXMuZGljdGlvbmFyeVN1YnNjcmlwdGlvbiA9IGRpY3Rpb25hcnkucmVxdWVzdC5zdWJzY3JpYmUoe1xyXG5cdFx0XHRuZXh0OiAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICB0aGlzLmRpY3Rpb25hcnlTdWJzY3JpcHRpb24gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZGljdGlvbmFyeUVudHJ5ID0gW107XHJcbiAgICBcclxuICAgICAgICB0aGlzLnNldERpY3Rpb25hcnlUZXJtcyhyZXNwb25zZSwgZGljdGlvbmFyeS51cmxzKTtcclxuICAgICAgICB0aGlzLnRyYW5zbGF0ZVRleHQodGhpcy5zb3VyY2VUZXh0LCBkZXRlY3RlZExhbmd1YWdlKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0ZXJyb3I6ICgpID0+IHtcclxuXHRcdFx0XHR0aGlzLnRyYW5zbGF0ZVRleHQodGhpcy5zb3VyY2VUZXh0LCBkZXRlY3RlZExhbmd1YWdlKTtcclxuXHRcdFx0XHR0aGlzLmhhc0RpY3Rpb25hcnkgPSBmYWxzZTtcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcbiAgcHJpdmF0ZSBzZXREaWN0aW9uYXJ5VGVybXMocmVzcG9uc2U6IERpY3Rpb25hcnlbXVtdLCB1cmxzOiBzdHJpbmdbXSk6IHZvaWQge1xyXG5cdFx0cmVzcG9uc2UuZm9yRWFjaCgocmVzLCBpKSA9PiB7XHJcblx0XHRcdHJlcy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdGVybVN1bW1hcnkgPSBpdGVtLmxhbmd1YWdlU3VtbWFyaWVzPy5maW5kKChzdW1tYXJ5KSA9PiBzdW1tYXJ5LmxhbmcgPT09IHRoaXMuYWN0aXZlRGF0YS50YXJnZXRMYW5ndWFnZSk7XHJcblx0XHRcdFx0Y29uc3QgaXNUaWxkZVRlcm1Db2xsZWN0aW9uID0gdXJsc1tpXS5pbmNsdWRlcygndGlsZGUnKTtcclxuXHJcbiAgICAgICAgaWYgKHRlcm1TdW1tYXJ5KSB7XHJcbiAgICAgICAgICBjb25zdCBjb2xsZWN0aW9uRW50cnkgPSBpdGVtLmVudHJ5U3VtbWFyaWVzWzBdO1xyXG4gICAgICAgICAgY29uc3QgY29sbGVjdGlvbklkID0gY29sbGVjdGlvbkVudHJ5LmNvbGxlY3Rpb25JZDtcclxuICAgICAgICAgIGNvbnN0IGNvbGxlY3Rpb25UYXJnZXRXb3JkID0gdGVybVN1bW1hcnkudGVybXNbMF0udGVybTtcclxuICAgICAgICAgIGNvbnN0IGNvbGxlY3Rpb25VcmwgPSBpc1RpbGRlVGVybUNvbGxlY3Rpb24gPyBgJHt0aGlzLnRlcm1pbm9sb2d5UG9ydGFsVXJsfS9jb2xsZWN0aW9ucy90ZXJtLyR7Y29sbGVjdGlvbklkfWAgOiBgaHR0cHM6Ly8ke2l0ZW0uZGljdGlvbmFyeURvbWFpblVybH0vY29sbGVjdGlvbnMvJHtjb2xsZWN0aW9uSWR9YDtcclxuICBcclxuICAgICAgICAgIGlmICghdGhpcy5kaWN0aW9uYXJ5RW50cnkuc29tZSgodGVybSkgPT4gdGVybS50YXJnZXRXb3JkID09PSBjb2xsZWN0aW9uVGFyZ2V0V29yZCAmJiB0ZXJtLnRlcm1Tb3VyY2UgPT09IGNvbGxlY3Rpb25FbnRyeS5jb2xsZWN0aW9uTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhpcy5kaWN0aW9uYXJ5RW50cnkucHVzaCh7IC4uLml0ZW0sIFxyXG4gICAgICAgICAgICAgIHRhcmdldFdvcmQ6IGNvbGxlY3Rpb25UYXJnZXRXb3JkLCBcclxuICAgICAgICAgICAgICB0ZXJtU291cmNlOiBjb2xsZWN0aW9uRW50cnkuY29sbGVjdGlvbk5hbWUsXHJcbiAgICAgICAgICAgICAgY29sbGVjdGlvblVybDogY29sbGVjdGlvblVybCxcclxuICAgICAgICAgICAgICBkaWN0aW9uYXJ5RG9tYWluVXJsOiBpc1RpbGRlVGVybUNvbGxlY3Rpb24gPyBudWxsIDogdXJsc1tpXSxcclxuICAgICAgICAgICAgICBzb3VyY2VMYWJlbDogaXNUaWxkZVRlcm1Db2xsZWN0aW9uID8gJ1RpbGRlIFRlcm0nIDogbnVsbFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblx0XHRcdH0pO1xyXG5cdFx0fSk7XHJcblxyXG4gICAgdGhpcy5yZW1vdmVEaWN0aW9uYXJ5RHJhZnRzKCk7XHJcblxyXG4gICAgdGhpcy5oYXNEaWN0aW9uYXJ5ID0gdGhpcy5kaWN0aW9uYXJ5RW50cnkubGVuZ3RoID4gMDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdHJhbnNsYXRlVGV4dCh0ZXh0OiBzdHJpbmcsIGRldGVjdGVkTGFuZ3VhZ2U/OiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHBhcmFncmFwaHMgPSBIdG1sSGVscGVyLnNwbGl0SW5QYXJhZ3JhcGhzKHRleHQpO1xyXG4gICAgY29uc3QgbmV3UGFyYWdyYXBoczogSVBhcmFncmFwaEluZm9bXSA9IFtdO1xyXG4gICAgY29uc3QgbmV3U291cmNlUGFyYWdyYXBoczogSUhpZ2hsaWdodFRyZWVbXSA9IFtdO1xyXG4gICAgY29uc3QgbmV3VGFyZ2V0UGFyYWdyYXBoczogSUhpZ2hsaWdodFRyZWVbXSA9IFtdO1xyXG5cclxuICAgIC8vIHNvdXJjZSB0ZXh0IGNoYW5nZWQuIFByZXZpb3VzbHkgbWFkZSBvYnNlcnZhYmxlcyBhcmVuJ3QgbmVjZXNzYXJ5IGFueW1vcmU7XHJcbiAgICB0aGlzLnJlY3JlYXRlUGFyYWdyYXBoVHJhbnNsYXRpb25TdWJqZWN0KGRldGVjdGVkTGFuZ3VhZ2UpO1xyXG5cclxuICAgIHBhcmFncmFwaHMuZm9yRWFjaCgocGFyYWdyYXBoLCBpeCkgPT4ge1xyXG4gICAgICAvLyBDaGVjayBpZiBwYXJhZ3JhcGggd2l0aCBzYW1lIHRleHQgZXhpc3RzIChzbyB5b3UgZG9uJ3QgaGF2ZSB0byB0cmFuc2xhdGUgaXQgYWdhaW4pLlxyXG4gICAgICAvLyBJZiBpdCBkb2VzLCB5b3UgY2FuIGNsb25lIGl0LlxyXG4gICAgICBjb25zdCBleGlzdGluZ1BhcmFncmFwaEluZm8gPSBUbGRUcmFuc2xhdGVUZXh0VXRpbHMuZmluZEV4aXN0aW5nUGFyYWdyYXBoKHBhcmFncmFwaCwgaXgsIHRoaXMucGFyYWdyYXBocyk7XHJcbiAgICAgIGNvbnN0IGV4aXN0aW5nUGFyYWdyYXBoID0gZXhpc3RpbmdQYXJhZ3JhcGhJbmZvLmV4aXN0aW5nUGFyYWdyYXBoO1xyXG4gICAgICBpZiAoZXhpc3RpbmdQYXJhZ3JhcGhJbmZvLmV4aXN0aW5nUGFyYWdyYXBoKSB7XHJcbiAgICAgICAgaWYgKCFleGlzdGluZ1BhcmFncmFwaEluZm8uaGFzU2FtZUl4KSB7XHJcbiAgICAgICAgICBUbGRUcmFuc2xhdGVUZXh0VXRpbHMuY2hhbmdlUm9vdEFuZFBhcmFncmFwaEl4KGV4aXN0aW5nUGFyYWdyYXBoLnNvdXJjZSwgZXhpc3RpbmdQYXJhZ3JhcGguc291cmNlLCBleGlzdGluZ1BhcmFncmFwaC5peCk7XHJcbiAgICAgICAgICBUbGRUcmFuc2xhdGVUZXh0VXRpbHMuY2hhbmdlUm9vdEFuZFBhcmFncmFwaEl4KGV4aXN0aW5nUGFyYWdyYXBoLnRhcmdldCwgZXhpc3RpbmdQYXJhZ3JhcGgudGFyZ2V0LCBleGlzdGluZ1BhcmFncmFwaC5peCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG5ld1BhcmFncmFwaHMuc3BsaWNlKGl4LCAwLCBleGlzdGluZ1BhcmFncmFwaCk7XHJcbiAgICAgICAgbmV3VGFyZ2V0UGFyYWdyYXBocy5zcGxpY2UoaXgsIDAsIGV4aXN0aW5nUGFyYWdyYXBoLnRhcmdldCk7XHJcbiAgICAgICAgbmV3U291cmNlUGFyYWdyYXBocy5zcGxpY2UoaXgsIDAsIGV4aXN0aW5nUGFyYWdyYXBoLnNvdXJjZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgbmV3UGFyYWdyYXBoID0gVGxkVHJhbnNsYXRlVGV4dFV0aWxzLmNyZWF0ZUVtcHR5UGFyYWdyYXBoSW5mbyhpeCk7XHJcblxyXG4gICAgICAgIG5ld1BhcmFncmFwaHMuc3BsaWNlKGl4LCAwLCBuZXdQYXJhZ3JhcGgpO1xyXG4gICAgICAgIG5ld1NvdXJjZVBhcmFncmFwaHMuc3BsaWNlKGl4LCAwLCBuZXdQYXJhZ3JhcGguc291cmNlKTtcclxuICAgICAgICBuZXdUYXJnZXRQYXJhZ3JhcGhzLnNwbGljZShpeCwgMCwgbmV3UGFyYWdyYXBoLnRhcmdldCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucGFyYWdyYXBocyA9IG5ld1BhcmFncmFwaHM7XHJcbiAgICB0aGlzLnRhcmdldFBhcmFncmFwaHMgPSBuZXdUYXJnZXRQYXJhZ3JhcGhzO1xyXG4gICAgdGhpcy5zb3VyY2VQYXJhZ3JhcGhzID0gbmV3U291cmNlUGFyYWdyYXBocztcclxuXHJcbiAgICBwYXJhZ3JhcGhzLmZvckVhY2goKHBhcmFncmFwaCwgaXgpID0+IHtcclxuICAgICAgdGhpcy5wYXJhZ3JhcGhUcmFuc2xhdGlvbnNTdWJqZWN0Lm5leHQoeyBpeDogaXgsIGxpbmU6IHBhcmFncmFwaCB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLmlzVHJhbnNsYXRpbmcpIHtcclxuICAgICAgdGhpcy5zZXRQcm9ncmVzc0luZGljYXRvclRpbWVvdXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBDcmVhdGVzIHRpbWVvdXQgd2hpY2ggZW5hYmxlcyBwcm9ncmVzcyBpbmRpY2F0b3IgYWZ0ZXIgZ2l2ZW4gbWlsaXNlY29uZHMgKi9cclxuICBwcml2YXRlIHNldFByb2dyZXNzSW5kaWNhdG9yVGltZW91dCgpIHtcclxuICAgIGlmICh0aGlzLnByb2dyZXNzSW5kaWNhdG9yVGltZW91dE1pbGlTZWNvbmRzID09PSBudWxsIHx8IHRoaXMucHJvZ3Jlc3NJbmRpY2F0b3JUaW1lb3V0TWlsaVNlY29uZHMgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY29uZmlnU2VydmljZS50ZXh0Q29uZmlnLnByb2dyZXNzSW5kaWNhdG9yVmlzaWJsZSkge1xyXG4gICAgICB0aGlzLnByb2dyZXNzSW5kaWNhdG9yVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2hvd1Byb2dyZXNzSW5kaWNhdG9yKCk7XHJcbiAgICAgIH0sIHRoaXMucHJvZ3Jlc3NJbmRpY2F0b3JUaW1lb3V0TWlsaVNlY29uZHMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIE1ldGhvZCBmb3Igc2V0dGluZyBuZWNlc3NhcnkgcHJvcGVydGllcyB0byBtYWtlIHByb2dyZXNzIGluZGljYXRvciB2aXNpYmxlLiAqL1xyXG4gIHByaXZhdGUgc2hvd1Byb2dyZXNzSW5kaWNhdG9yKCkge1xyXG4gICAgdGhpcy5fc2hvdWxkU2hvd1Byb2dyZXNzSW5kaWNhdG9yID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKiBNZXRob2QgZm9yIHNldHRpbmcgbmVjZXNzYXJ5IHByb3BlcnRpZXMgdG8gbWFrZSBwcm9ncmVzcyBpbmRpY2F0b3IgaGlkZGVuLiAqL1xyXG4gIGhpZGVQcm9ncmVzc0luZGljYXRvcigpIHtcclxuICAgIGlmICh0aGlzLnByb2dyZXNzSW5kaWNhdG9yVGltZW91dCkge1xyXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5wcm9ncmVzc0luZGljYXRvclRpbWVvdXQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fc2hvdWxkU2hvd1Byb2dyZXNzSW5kaWNhdG9yID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHRvZ2dsZVRleHRUb1NwZWVjaCgpIHtcclxuICAgIC8vIGlmIG5vdGhpbmcgdHJhbnNsYXRlZCwgdHRzIHNob3VsZCBub3QgYmUgYXZhaWxhYmxlXHJcbiAgICBpZiAoIXRoaXMudGFyZ2V0UGFyYWdyYXBocy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGFjdGl2ZVN5c3RlbSA9IHRoaXMuYWN0aXZlRGF0YTtcclxuICAgIHRoaXMudGV4dFRvU3BlZWNoVGFyZ2V0U2V0dGluZ3MgPSB0aGlzLmZpbmRUZXh0VG9TcGVlY2hTZXR0aW5ncyhhY3RpdmVTeXN0ZW0udGFyZ2V0TGFuZ3VhZ2UsIHRoaXMudHJhbnNsYXRlZFRleHQpO1xyXG4gICAgdGhpcy50ZXh0VG9TcGVlY2hTb3VyY2VTZXR0aW5ncyA9IHRoaXMuZmluZFRleHRUb1NwZWVjaFNldHRpbmdzKGFjdGl2ZVN5c3RlbS5zb3VyY2VMYW5ndWFnZSwgdGhpcy5zb3VyY2VUZXh0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmluZFRleHRUb1NwZWVjaFNldHRpbmdzKGxhbmd1YWdlQ29kZTogc3RyaW5nLCB0ZXh0OiBzdHJpbmcpOiBUZXh0VG9TcGVlY2hTZXR0aW5ncyB7XHJcbiAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuY29uZmlnU2VydmljZS50ZXh0VG9TcGVlY2hDb25maWcubGFuZ3VhZ2VzW2xhbmd1YWdlQ29kZV07XHJcbiAgICBpZiAoc2V0dGluZ3MpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICB0ZXh0LFxyXG4gICAgICAgIHVybDogc2V0dGluZ3MudXJsLFxyXG4gICAgICAgIHZvaWNlOiBzZXR0aW5ncy52b2ljZSxcclxuICAgICAgICBsYW5nQnBjNDc6IHNldHRpbmdzLmxhbmdCcGM0NyxcclxuICAgICAgICBtYXhDaGFyc0luVGV4dDogdGhpcy5jb25maWdTZXJ2aWNlLnRleHRUb1NwZWVjaENvbmZpZy5tYXhDaGFyc0luVGV4dFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVtb3ZlRGljdGlvbmFyeURyYWZ0cygpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNvbGxlY3Rpb25EcmFmdFN0YXR1cyA9ICdEcmFmdCc7XHJcblxyXG4gICAgdGhpcy5kaWN0aW9uYXJ5RW50cnkgPSB0aGlzLmRpY3Rpb25hcnlFbnRyeS5tYXAoZW50cnkgPT4gKHsuLi5lbnRyeSxcclxuICAgICAgbGFuZ3VhZ2VTdW1tYXJpZXM6IGVudHJ5Lmxhbmd1YWdlU3VtbWFyaWVzPy5tYXAobGFuZ3VhZ2VTdW1tYXJ5ID0+ICh7Li4ubGFuZ3VhZ2VTdW1tYXJ5LFxyXG4gICAgICAgIHRlcm1zOiBsYW5ndWFnZVN1bW1hcnkudGVybXMuZmlsdGVyKHRlcm0gPT4gdGVybS50ZXJtU3RhdHVzICE9PSBjb2xsZWN0aW9uRHJhZnRTdGF0dXMpXHJcbiAgICAgIH0pKVxyXG4gICAgfSkpO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
536
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGxkLXRyYW5zbGF0ZS10ZXh0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bGQtdHJhbnNsYXRlL3NyYy9saWIvbW9kdWxlcy90bGQtdGV4dC9zZXJ2aWNlcy90bGQtdHJhbnNsYXRlLXRleHQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBZ0IsVUFBVSxFQUE0Qix1QkFBdUIsRUFBc0IsTUFBTSx1QkFBdUIsQ0FBQztBQUN4SSxPQUFPLEVBQWMsT0FBTyxFQUFnQixFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUczRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saURBQWlELENBQUM7QUFJNUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFNeEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFMUUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sMkRBQTJELENBQUM7Ozs7Ozs7O0FBT3hHLE1BQU0sT0FBTyx1QkFBdUI7SUF3SGY7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUEvSFgsV0FBVyxDQUFTO0lBQzVCLElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRU8scUJBQXFCLENBQVM7SUFDdEMsSUFBSSxvQkFBb0I7UUFDdEIsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUM7SUFDcEMsQ0FBQztJQUVPLGFBQWEsR0FBK0IsSUFBSSxPQUFPLEVBQUUs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QVEsRUFBRTtZQUNaLE9BQU87Z0JBQ0wsSUFBSTtnQkFDSixHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUc7Z0JBQ2pCLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSztnQkFDckIsU0FBUyxFQUFFLFFBQVEsQ0FBQyxTQUFTO2dCQUM3QixjQUFjLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjO2FBQ3JFLENBQUE7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVPLHNCQUFzQjtRQUM1QixNQUFNLHFCQUFxQixHQUFHLE9BQU8sQ0FBQztRQUV0QyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLEdBQUcsS0FBSztZQUNqRSxpQkFBaUIsRUFBRSxLQUFLLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLEdBQUcsZUFBZTtnQkFDckYsS0FBSyxFQUFFLGVBQWUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxxQkFBcUIsQ0FBQzthQUN2RixDQUFDLENBQUM7U0FDSixDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7d0dBbGxCVSx1QkFBdUI7NEdBQXZCLHVCQUF1QixjQUZ0QixNQUFNOzs0RkFFUCx1QkFBdUI7a0JBSG5DLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IEFsZXJ0U2VydmljZSwgSHRtbEhlbHBlciwgTGFuZ3VhZ2VUcmFuc2xhdGVTZXJ2aWNlLCBOb3RpZmljYXRpb25NZXNzYWdlVHlwZSwgVGVybWlub2xvZ3lTZXJ2aWNlIH0gZnJvbSAnQHRpbGRlLW5scC9uZ3gtY29tbW9uJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBvZiwgdGltZXIgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZGVib3VuY2UsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtZXJnZU1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBUZXh0VG9TcGVlY2hTZXR0aW5ncyB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvc2hhcmVkL3RleHQtdG8tc3BlZWNoL21vZGVscy90ZXh0LXRvLXNwZWVjaC1zZXR0aW5ncy5tb2RlbCc7XHJcbmltcG9ydCB7IElUcmFuc2xhdGVQYXJhZ3JhcGhSZXF1ZXN0UGFyYW1zIH0gZnJvbSAnLi4vLi4vdGxkLWNvbW1vbi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBFcnJvckNvZGUgfSBmcm9tICcuLi8uLi90bGQtY29tbW9uL21vZGVscy9lcnJvcnMvZXJyb3ItY29kZXMuZW51bSc7XHJcbmltcG9ydCB7IFRsZEhpZ2hsaWdodFNlcnZpY2UsIFRsZFRyYW5zbGF0ZUNvbmZpZ1NlcnZpY2UsIFRsZFRyYW5zbGF0ZVN5c3RlbU1hbmFnZW1lbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdGxkLWNvbW1vbi9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IFRsZFNjcm9sbFNlcnZpY2UgfSBmcm9tICcuLi8uLi90bGQtY29tbW9uL3NlcnZpY2VzL3Njcm9sbC90bGQtc2Nyb2xsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBEaWN0aW9uYXJ5IH0gZnJvbSAnLi4vbW9kZWxzL2RpY3Rpb25hcnkubW9kZWwnO1xyXG5pbXBvcnQgeyBIaWdobGlnaHRUcmVlVHlwZSB9IGZyb20gJy4uL21vZGVscy9oaWdobGlnaHQtdHJlZS10eXBlLm1vZGVsJztcclxuaW1wb3J0IHsgSUhpZ2hsaWdodFRyZWUgfSBmcm9tICcuLi9tb2RlbHMvaGlnaGxpZ2h0LXRyZWUubW9kZWwnO1xyXG5pbXBvcnQgeyBJUGFyYWdyYXBoSW5mbyB9IGZyb20gJy4uL21vZGVscy9oaWdobGlnaHQubW9kZWwnO1xyXG5pbXBvcnQgeyBJUmV0cmFuc2xhdGVQYXJhbXMgfSBmcm9tICcuLi9tb2RlbHMvcmV0cmFuc2xhdGUtcGFyYW1zLm1vZGVsJztcclxuaW1wb3J0IHsgSVRyYW5zbGF0ZVBhcmFncmFwaFJlc3BvbnNlIH0gZnJvbSAnLi4vbW9kZWxzL3RyYW5zbGF0ZS1wYXJhZ3JhcGgtcmVzcG9uc2UubW9kZWwnO1xyXG5pbXBvcnQgeyBJVW50cmFuc2xhdGVkUGFyYWdyYXBoIH0gZnJvbSAnLi4vbW9kZWxzL3VudHJhbnNsYXRlZC1wYXJhZ3JhcGgubW9kZWwnO1xyXG5pbXBvcnQgeyBUbGRUcmFuc2xhdGVUZXh0VXRpbHMgfSBmcm9tICcuLi91dGlscy90bGQtdHJhbnNsYXRlLXRleHQudXRpbHMnO1xyXG5pbXBvcnQgeyBUbGRUcmFuc2xhdGVUZXh0QXBpU2VydmljZSB9IGZyb20gJy4vYXBpL3RsZC10cmFuc2xhdGUtdGV4dC1hcGkuc2VydmljZSc7XHJcbmltcG9ydCB7IEFVVE9fTEFOR1VBR0VfREVURUNUSU9OX0tFWSB9IGZyb20gJy4uLy4uL3RsZC1jb21tb24vbW9kZWxzL2F1dG8tbGFuZ3VhZ2UtZGV0ZWN0aW9uLWtleS5jb25zdCc7XHJcbmltcG9ydCB7IExhbmd1YWdlRGV0ZWN0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3RsZC1jb21tb24vc2VydmljZXMvbGFuZ3VhZ2UtZGV0ZWN0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTb3VyY2VDaGFuZ2VFdmVudCB9IGZyb20gJy4uL21vZGVscy9zb3VyY2UtY2hhbmdlLWV2ZW50Lm1vZGVsJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFRsZFRyYW5zbGF0ZVRleHRTZXJ2aWNlIHtcclxuXHJcbiAgcHJpdmF0ZSBfc291cmNlVGV4dDogc3RyaW5nO1xyXG4gIGdldCBzb3VyY2VUZXh0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NvdXJjZVRleHQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zb3VyY2VUZXh0SHlwb3RoZXNpczogc3RyaW5nO1xyXG4gIGdldCBzb3VyY2VUZXh0SHlwb3RoZXNpcygpIHtcclxuICAgIHJldHVybiB0aGlzLl9zb3VyY2VUZXh0SHlwb3RoZXNpcztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NvdXJjZUNoYW5nZTogU3ViamVjdDxTb3VyY2VDaGFuZ2VFdmVudD4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIGdldCBzb3VyY2VDaGFuZ2UoKSB7IHJldHVybiB0aGlzLl9zb3VyY2VDaGFuZ2UuYXNPYnNlcnZhYmxlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfc291cmNlU2Nyb2xsOiBTdWJqZWN0PG51bWJlcj4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIGdldCBzb3VyY2VTY3JvbGwoKSB7IHJldHVybiB0aGlzLl9zb3VyY2VTY3JvbGwuYXNPYnNlcnZhYmxlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfdHJhbnNsYXRlQnV0dG9uQ2xpY2s6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgZ2V0IHRyYW5zbGF0ZUJ1dHRvbkNsaWNrKCkgeyByZXR1cm4gdGhpcy5fdHJhbnNsYXRlQnV0dG9uQ2xpY2suYXNPYnNlcnZhYmxlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFzRGljdGlvbmFyeTogYm9vbGVhbjtcclxuICBnZXQgaGFzRGljdGlvbmFyeSgpIHsgcmV0dXJuIHRoaXMuX2hhc0RpY3Rpb25hcnk7IH1cclxuICBzZXQgaGFzRGljdGlvbmFyeSh2YWwpIHtcclxuICAgIHRoaXMuX2hhc0RpY3Rpb25hcnkgPSB2YWw7XHJcbiAgICBpZiAoIXZhbCkge1xyXG4gICAgICB0aGlzLl9kaWN0aW9uYXJ5RW50cnkgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZGljdGlvbmFyeUVudHJ5OiBEaWN0aW9uYXJ5W107XHJcbiAgZ2V0IGRpY3Rpb25hcnlFbnRyeSgpIHsgcmV0dXJuIHRoaXMuX2RpY3Rpb25hcnlFbnRyeTsgfVxyXG4gIHNldCBkaWN0aW9uYXJ5RW50cnkodmFsKSB7XHJcbiAgICB0aGlzLl9kaWN0aW9uYXJ5RW50cnkgPSB2YWw7XHJcbiAgICBpZiAodGhpcy5kaWN0aW9uYXJ5RW50cnkpIHtcclxuICAgICAgdGhpcy5oYXNEaWN0aW9uYXJ5ID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IHRyYW5zbGF0ZWRUZXh0KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy50YXJnZXRQYXJhZ3JhcGhzLm1hcChsaW5lID0+IGxpbmUub3JpZ2luYWxUZXh0KS5qb2luKFwiXFxuXCIpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IF9vbkNsZWFyID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG5cclxuICB1cmxUb1RyYW5zbGF0ZTogc3RyaW5nO1xyXG4gIHBhcmFncmFwaHM6IElQYXJhZ3JhcGhJbmZvW10gPSBbXTtcclxuICBzb3VyY2VQYXJhZ3JhcGhzOiBJSGlnaGxpZ2h0VHJlZVtdID0gW107XHJcbiAgdGFyZ2V0UGFyYWdyYXBoczogSUhpZ2hsaWdodFRyZWVbXSA9IFtdO1xyXG5cclxuICBpc1N5c3RlbVdha2luZ1VwITogYm9vbGVhbjtcclxuICB0cmdMYW5nQmVmb3JlRGV0ZWN0ITogc3RyaW5nO1xyXG4gIGlzVW5zdXBwb3J0ZWRMYW5nV2FybmluZ1Zpc2libGUhOiBib29sZWFuO1xyXG5cclxuICAvLyBTZXQgdGhpcyBvYmplY3Qgd2l0aCBuZWNlc3NhcnkgdmFsdWVzIHRvIGRpc3BsYXkgVFRTIGNvbXBvbmVudFxyXG4gIHRleHRUb1NwZWVjaFNvdXJjZVNldHRpbmdzOiBUZXh0VG9TcGVlY2hTZXR0aW5ncztcclxuICB0ZXh0VG9TcGVlY2hUYXJnZXRTZXR0aW5nczogVGV4dFRvU3BlZWNoU2V0dGluZ3M7XHJcblxyXG4gIHByaXZhdGUgX2ZpcnN0UGFyYWdyYXBoVHJhbnNsYXRlZDogYm9vbGVhbjtcclxuICBnZXQgZmlyc3RQYXJhZ3JhcGhUcmFuc2xhdGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ZpcnN0UGFyYWdyYXBoVHJhbnNsYXRlZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZGljdGlvbmFyeVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgcGFyYWdyYXBoVHJhbnNsYXRpb25zU3ViamVjdCA9IG5ldyBTdWJqZWN0PElVbnRyYW5zbGF0ZWRQYXJhZ3JhcGg+KCk7XHJcbiAgcHJpdmF0ZSBwYXJhZ3JhcGhUcmFuc2xhdGlvblN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVib3VuY2VyOiBTdWJqZWN0PFNvdXJjZUNoYW5nZUV2ZW50PiA9IG5ldyBTdWJqZWN0PFNvdXJjZUNoYW5nZUV2ZW50PigpO1xyXG4gIHByaXZhdGUgZGVib3VuY2VyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgLyoqIEhvdyBtYW55IHBhcmFncmFwaHMgY2FuIGJlIHRyYW5zbGF0ZWQgYXQgdGhlIHNhbWUgdGltZS4gKi9cclxuICBwcml2YXRlIHJlYWRvbmx5IENPTkNVUlJFTlRfVVBMT0FEUyA9IDU7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBERUJPVU5DRV9USU1FID0gMTAwMDtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBzdGFuZGJ5RW5naW5lTm90aWZpY2F0aW9uRXJyb3JLZXkgPSAnMjEnO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhbmRieVN5c3RlbVJldHJhbnNsYXRpb25UaW1lb3V0ID0gMzAwMDtcclxuICBwcml2YXRlIHJlYWRvbmx5IGVuZ2luZVRlcm1Db2xsZWN0aW9uTm90Rm91bmRFcnJvcktleSA9ICc0MDQyMDEnO1xyXG5cclxuICAvKiogV2hldGhlciBwcm9ncmVzcyBpbmRpY2F0b3Igc2hvdWxkIGJlIHNob3duLiBUaGlzIHZhbHVlIG11c3QgYmUgc2V0IHRvIHRydWUgb25seSBpZiBjb25maWd1cmVkIHRpbWUgaGFzIHBhc3NlZC4gKi9cclxuICBwcml2YXRlIF9zaG91bGRTaG93UHJvZ3Jlc3NJbmRpY2F0b3IgPSBmYWxzZTtcclxuICBnZXQgc2hvdWxkU2hvd1Byb2dyZXNzSW5kaWNhdG9yKCkgeyByZXR1cm4gdGhpcy5fc2hvdWxkU2hvd1Byb2dyZXNzSW5kaWNhdG9yOyB9XHJcbiAgLy9Ob2RlSlMuVGltZW91dFxyXG4gIHByaXZhdGUgcHJvZ3Jlc3NJbmRpY2F0b3JUaW1lb3V0OiBhbnk7XHJcblxyXG4gIHByaXZhdGUgX3VudHJhbnNsYXRlZFBhcmFncmFwaENvdW50ID0gMDtcclxuICBnZXQgdW50cmFuc2xhdGVkUGFyYWdyYXBoQ291bnQoKSB7IHJldHVybiB0aGlzLl91bnRyYW5zbGF0ZWRQYXJhZ3JhcGhDb3VudDsgfVxyXG4gIHNldCB1bnRyYW5zbGF0ZWRQYXJhZ3JhcGhDb3VudCh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl91bnRyYW5zbGF0ZWRQYXJhZ3JhcGhDb3VudCA9IHZhbHVlO1xyXG4gICAgLy8gV2hlbiB0cmFuc2xhdGlvbiBmaW5pc2hlZCwgcHJvZ3Jlc3MgaW5kaWNhdG9yIHNob3VsZCBub3QgYmUgc2hvd24uXHJcbiAgICBpZiAodmFsdWUgPT09IDApIHtcclxuICAgICAgdGhpcy50b2dnbGVUZXh0VG9TcGVlY2goKTtcclxuICAgICAgdGhpcy5oaWRlUHJvZ3Jlc3NJbmRpY2F0b3IoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBpc1RyYW5zbGF0aW5nKCkgeyByZXR1cm4gdGhpcy51bnRyYW5zbGF0ZWRQYXJhZ3JhcGhDb3VudCA+IDAgfHwgdGhpcy5pc1N5c3RlbVdha2luZ1VwIH1cclxuXHJcbiAgLy8gZ2V0dGVycyBmcm9tIGNvbmZpZyBzZXJ2aWNlLlxyXG4gIGdldCBhbGxvd1dlYnNpdGVUcmFuc2xhdGlvbigpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuY29uZmlnU2VydmljZS50ZXh0Q29uZmlnLmFsbG93V2Vic2l0ZVRyYW5zbGF0aW9uOyB9O1xyXG4gIGdldCBhdXRvUmVkaXJlY3RUb1dlYlRyYW5zbGF0ZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuY29uZmlnU2VydmljZS50ZXh0Q29uZmlnLmF1dG9SZWRpcmVjdFRvV2ViVHJhbnNsYXRlOyB9O1xyXG4gIGdldCB3ZWJXaWRnZXRSZWRpcmVjdFVybFByZWZpeCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5jb25maWdTZXJ2aWNlLnRleHRDb25maWcud2ViV2lkZ2V0UmVkaXJlY3RVcmxQcmVmaXg7IH07XHJcbiAgZ2V0IHdlYldpZGdldFJlZGlyZWN0VXJsUG9zZml4KCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmNvbmZpZ1NlcnZpY2UudGV4dENvbmZpZy53ZWJXaWRnZXRSZWRpcmVjdFVybFBvc2ZpeDsgfTtcclxuICBnZXQgdXNlRGljdGlvbmFyeSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuY29uZmlnU2VydmljZS50ZXh0Q29uZmlnLnVzZURpY3Rpb25hcnk7IH07XHJcbiAgZ2V0IHByb2dyZXNzSW5kaWNhdG9yVGltZW91dE1pbGlTZWNvbmRzKCk6IG51bWJlciB7IHJldHVybiB0aGlzLmNvbmZpZ1NlcnZpY2UudGV4dENvbmZpZy5wcm9ncmVzc0luZGljYXRvclRpbWVvdXRNaWxpU2Vjb25kczsgfVxyXG4gIGdldCB0ZXJtaW5vbG9neVBvcnRhbFVybCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5jb25maWdTZXJ2aWNlLnRlcm1Db25maWcudGVybWlub2xvZ3lQb3J0YWxVcmw7IH1cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBnZXQgYWN0aXZlRGF0YSgpIHtcclxuICAgIHJldHVybiB0aGlzLnN5c3RlbU1hbmFnZW1lbnRTZXJ2aWNlLmdldEFjdGl2ZVN5c3RlbU9iaigpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRyYW5zbGF0ZVVybFJlZGlyZWN0KCkge1xyXG4gICAgaWYgKHRoaXMud2ViV2lkZ2V0UmVkaXJlY3RVcmxQcmVmaXggPT09ICcnKSB7XHJcbiAgICAgIHJldHVybiBgJHt0aGlzLndlYldpZGdldFJlZGlyZWN0VXJsUHJlZml4fSR7dGhpcy53ZWJXaWRnZXRSZWRpcmVjdFVybFBvc2ZpeH0ke2VuY29kZVVSSUNvbXBvbmVudCh0aGlzLnVybFRvVHJhbnNsYXRlKX1gO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGAke3RoaXMud2ViV2lkZ2V0UmVkaXJlY3RVcmxQcmVmaXh9JHt0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZ30ke3RoaXMud2ViV2lkZ2V0UmVkaXJlY3RVcmxQb3NmaXh9JHt0aGlzLnVybFRvVHJhbnNsYXRlfWA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogSWYgZGljdGF0dGlvbiBpcyBhY3RpdmUuIEJhc2VkIG9uIHRoaXMsIGV4dGVuc2lvbnMgYXJlIGhpZGRlbi4gKi9cclxuICBpc0RpY3RhdGluZzogYm9vbGVhbjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFwaTogVGxkVHJhbnNsYXRlVGV4dEFwaVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN5c3RlbU1hbmFnZW1lbnRTZXJ2aWNlOiBUbGRUcmFuc2xhdGVTeXN0ZW1NYW5hZ2VtZW50U2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgdGxkU2Nyb2xsU2VydmljZTogVGxkU2Nyb2xsU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnU2VydmljZTogVGxkVHJhbnNsYXRlQ29uZmlnU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBoaWdobGlnaHRTZXJ2aWNlOiBUbGRIaWdobGlnaHRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBhbGVydHNTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRlcm1pbm9sb2d5U2VydmljZTogVGVybWlub2xvZ3lTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBsYW5ndWFnZTogTGFuZ3VhZ2VEZXRlY3Rpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBsYW5ndWFnZVRyYW5zbGF0ZTogTGFuZ3VhZ2VUcmFuc2xhdGVTZXJ2aWNlXHJcbiAgKSB7fVxyXG5cclxuICBjaGFuZ2VTb3VyY2UoZXZlbnQ6IFNvdXJjZUNoYW5nZUV2ZW50KSB7XHJcbiAgICBpZiAoIWV2ZW50LnBocmFzZS50cmltKCkubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuX29uQ2xlYXIubmV4dChudWxsKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmFjdGl2ZURhdGE/LmRldGVjdGVkTGFuZ3VhZ2UpIHtcclxuICAgICAgICB0aGlzLnN5c3RlbU1hbmFnZW1lbnRTZXJ2aWNlLnNldERldGVjdGVkTGFuZ3VhZ2UobnVsbCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG4gICAgdGhpcy5fc291cmNlVGV4dCA9IGV2ZW50LnBocmFzZTtcclxuICAgIHRoaXMuX3NvdXJjZUNoYW5nZS5uZXh0KGV2ZW50KTtcclxuICAgIHRoaXMuZGVib3VuY2VyLm5leHQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlU291cmNlSHlwb3RoZXNpcyh0ZXh0OiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3NvdXJjZVRleHRIeXBvdGhlc2lzID0gdGV4dDtcclxuICB9XHJcblxyXG4gIG9uU291cmNlU2Nyb2xsKG9mZnNldFRvcDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9zb3VyY2VTY3JvbGwubmV4dChvZmZzZXRUb3ApO1xyXG4gIH1cclxuXHJcbiAgb25UcmFuc2xhdGVCdXR0b25DbGljaygpIHtcclxuICAgIHRoaXMuX3RyYW5zbGF0ZUJ1dHRvbkNsaWNrLm5leHQobnVsbClcclxuICAgIHRoaXMucmV0cmFuc2xhdGUoeyBidXR0b25DbGlja2VkOiB0cnVlIH0pO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJTb3VyY2UoKSB7XHJcbiAgICB0aGlzLl9vbkNsZWFyLm5leHQobnVsbCk7XHJcbiAgICB0aGlzLnJlc2V0RGV0ZWN0ZWRMYW5ndWFnZSgpO1xyXG4gICAgdGhpcy5jaGFuZ2VTb3VyY2UoeyBwaHJhc2U6IFwiXCIgfSk7XHJcbiAgfVxyXG5cclxuICBvbkNsZWFyKCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5fb25DbGVhci5hc09ic2VydmFibGUoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVRyYW5zbGF0aW9uKG9wdGlvbnM6IHN0cmluZywgc3lzdGVtSUQ6IHN0cmluZywgdGV4dDogc3RyaW5nLCB0cmFuc2xhdGlvbjogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5hcGkudXBkYXRlVHJhbnNsYXRpb24ob3B0aW9ucywgc3lzdGVtSUQsIHRleHQsIHRyYW5zbGF0aW9uKTtcclxuICB9XHJcblxyXG4gIGxpc3Rlbk9uQ2hhbmdlcygpIHtcclxuICAgIGlmICh0aGlzLmRlYm91bmNlclN1YnNjcmlwdGlvbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kZWJvdW5jZXJTdWJzY3JpcHRpb24gPSB0aGlzLmRlYm91bmNlci5waXBlKFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocHJldmlvdXMpID0+IHtcclxuICAgICAgICByZXR1cm4gcHJldmlvdXMucGhyYXNlID09IHRoaXMuc291cmNlVGV4dDtcclxuICAgICAgfSksXHJcbiAgICAgIGRlYm91bmNlKGV2ID0+IGV2LnBocmFzZT8ubGVuZ3RoID4gMCA/IHRpbWVyKHRoaXMuREVCT1VOQ0VfVElNRSkgOiB0aW1lcigwKSlcclxuICAgIClcclxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcclxuICAgICAgICB0aGlzLmhpZ2hsaWdodFNlcnZpY2UuY2hhbmdlU2VsZWN0ZWRUYXJnZXRTZW50ZW5jZShudWxsKTtcclxuXHJcbiAgICAgICAgaWYgKCFldmVudC5kaXNhYmxlQXV0b21hdGljVHJhbnNsYXRpb24pIHtcclxuICAgICAgICAgIHRoaXMucmV0cmFuc2xhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc3RvcExpc3RlbmluZ1RvQ2hhbmdlcygpIHtcclxuICAgIGlmICghdGhpcy5kZWJvdW5jZXJTdWJzY3JpcHRpb24pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kZWJvdW5jZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuZGVib3VuY2VyU3Vic2NyaXB0aW9uID0gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vIGlmIG1ldGhvZCBnZXRzIGNhbGxlZCBiZWNhdXNlIG9mIGJ1dHRvbiBjbGljayBhbmQgdXJsIGVudGVyZWQgLSBnbyB0byB3ZWIgdHJhbnNsYXRpb25cclxuICByZXRyYW5zbGF0ZShwYXJhbXM/OiBJUmV0cmFuc2xhdGVQYXJhbXMsIGRldGVjdGVkTGFuZ3VhZ2U/OiBzdHJpbmcpIHtcclxuICAgIGlmICghdGhpcy5zb3VyY2VUZXh0Py50cmltKCkgfHwgdGhpcy5zb3VyY2VUZXh0Py50cmltKCkgPT0gXCJcIikge1xyXG4gICAgICB0aGlzLmNsZWFyU291cmNlUGFyYW1zKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocGFyYW1zPy5idXR0b25DbGlja2VkIHx8IHBhcmFtcz8uc3lzdGVtQ2hhbmdlZCkge1xyXG4gICAgICB0aGlzLmNsZWFyU291cmNlUGFyYW1zKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFkZXRlY3RlZExhbmd1YWdlICYmICh0aGlzLmFjdGl2ZURhdGEuc291cmNlTGFuZ3VhZ2UgPT09IEFVVE9fTEFOR1VBR0VfREVURUNUSU9OX0tFWSB8fCB0aGlzLmFjdGl2ZURhdGEuZGV0ZWN0ZWRMYW5ndWFnZSkpIHsgXHJcbiAgICAgIHRoaXMubGFuZ3VhZ2UuZGV0ZWN0KHRoaXMuc291cmNlVGV4dC5yZXBsYWNlKCdcXG4nLCAnICcpKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICAvLyBkaXNwbGF5aW5nIGVuZ2xpc2ggbGFuZ3VhZ2UsIGlmIHRleHQgaXMgdW5kZXRlY3RhYmxlXHJcbiAgICAgICAgdGhpcy5yZXRyYW5zbGF0ZShwYXJhbXMsIHJlcy5kZXRlY3RlZExhbmd1YWdlID8/ICdlbicpO1xyXG4gICAgICB9KVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYWN0aXZlU3lzdGVtSWQgPSB0aGlzLnN5c3RlbU1hbmFnZW1lbnRTZXJ2aWNlLmdldEFjdGl2ZVN5c3RlbU9iaigpLmlkO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRDb2xsZWN0aW9uID0gdGhpcy50ZXJtaW5vbG9neVNlcnZpY2UuZW5naW5lc1thY3RpdmVTeXN0ZW1JZF0/LnNlbGVjdGVkO1xyXG4gICAgLy8gaWYgY29sbGVjdGlvbiBpcyBub3QgaW1wb3J0ZWQgd2Ugd2FudCB0byBhdm9pZCBpbnN0YW50IHRyYW5zbGF0aW9uXHJcbiAgICBpZiAoc2VsZWN0ZWRDb2xsZWN0aW9uICYmICFzZWxlY3RlZENvbGxlY3Rpb24/Lm10Q29sbGVjdGlvbikge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5yZXRyYW5zbGF0ZSh7YnV0dG9uQ2xpY2tlZDogdHJ1ZX0sIGRldGVjdGVkTGFuZ3VhZ2UpO1xyXG4gICAgICAgIH0sIDMwMDApICAgICAgXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBtYXhTb3VyY2VDaGFyYWN0ZXJEaWN0aW9uYXJ5ID0gMjAwO1xyXG4gICAgY29uc3QgbWF4RGljdGlvbmFyeVdvcmRzID0gMTI7XHJcblxyXG4gICAgY29uc3Qgd29yZHNJblNvdXJjZSA9IEh0bWxIZWxwZXIuZ2V0V29yZENvdW50KHRoaXMuc291cmNlVGV4dCk7XHJcbiAgICB0aGlzLnVybFRvVHJhbnNsYXRlID0gSHRtbEhlbHBlci5pc1RleHRVcmwodGhpcy5zb3VyY2VUZXh0KTtcclxuICAgIGlmICh0aGlzLmFsbG93V2Vic2l0ZVRyYW5zbGF0aW9uICYmIHRoaXMudXJsVG9UcmFuc2xhdGUpIHtcclxuICAgICAgdGhpcy5wYXJhZ3JhcGhzID0gW107XHJcbiAgICAgIHRoaXMuc291cmNlUGFyYWdyYXBocyA9IFtdO1xyXG4gICAgICB0aGlzLnRhcmdldFBhcmFncmFwaHMgPSBbXTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmF1dG9SZWRpcmVjdFRvV2ViVHJhbnNsYXRlIHx8IHBhcmFtcz8uYnV0dG9uQ2xpY2tlZCkge1xyXG4gICAgICAgIHdpbmRvdy5vcGVuKHRoaXMudHJhbnNsYXRlVXJsUmVkaXJlY3QsIFwiX2JsYW5rXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnVybFRvVHJhbnNsYXRlID0gbnVsbDtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnVzZURpY3Rpb25hcnkgJiYgdGhpcy5zb3VyY2VUZXh0Lmxlbmd0aCA8IG1heFNvdXJjZUNoYXJhY3RlckRpY3Rpb25hcnkgJiYgd29yZHNJblNvdXJjZSA8PSBtYXhEaWN0aW9uYXJ5V29yZHMpIHtcclxuICAgICAgdGhpcy5wcmVwYXJlQW5kVHJhbnNsYXRlV29yZHMoZGV0ZWN0ZWRMYW5ndWFnZSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMudHJhbnNsYXRlVGV4dCh0aGlzLnNvdXJjZVRleHQsIGRldGVjdGVkTGFuZ3VhZ2UpO1xyXG4gIH1cclxuXHJcbiAgLyoqIFN0b3BzIHRleHQgdHJhbnNsYXRpb24gaWYgaXQgaXMgYWN0aXZlLiAqL1xyXG4gIHN0b3BUcmFuc2xhdGlvbigpIHtcclxuICAgIHRoaXMudW50cmFuc2xhdGVkUGFyYWdyYXBoQ291bnQgPSAwO1xyXG4gICAgaWYgKHRoaXMucGFyYWdyYXBoVHJhbnNsYXRpb25TdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5wYXJhZ3JhcGhUcmFuc2xhdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmRpY3Rpb25hcnlTdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5kaWN0aW9uYXJ5U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4gIHByaXZhdGUgcmVzZXREZXRlY3RlZExhbmd1YWdlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY29uZmlnU2VydmljZS50ZXh0Q29uZmlnLmlzQXV0b0xhbmd1YWdlRGV0ZWN0aW9uRW5hYmxlZCAmJiB0aGlzLmFjdGl2ZURhdGE/LmRldGVjdGVkTGFuZ3VhZ2UpIHtcclxuICAgICAgdGhpcy5zeXN0ZW1NYW5hZ2VtZW50U2VydmljZS5zZXREZXRlY3RlZExhbmd1YWdlKG51bGwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWNyZWF0ZVBhcmFncmFwaFRyYW5zbGF0aW9uU3ViamVjdChkZXRlY3RlZExhbmd1YWdlPzogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9maXJzdFBhcmFncmFwaFRyYW5zbGF0ZWQgPSBmYWxzZTtcclxuICAgIHRoaXMucGFyYWdyYXBoVHJhbnNsYXRpb25zU3ViamVjdCA9IG5ldyBTdWJqZWN0PElVbnRyYW5zbGF0ZWRQYXJhZ3JhcGg+KCk7XHJcblxyXG4gICAgY29uc3Qgc291cmNlID0gdGhpcy5zb3VyY2VUZXh0O1xyXG4gICAgdGhpcy51bnRyYW5zbGF0ZWRQYXJhZ3JhcGhDb3VudCA9IDA7XHJcbiAgICB0aGlzLnBhcmFncmFwaFRyYW5zbGF0aW9uU3Vic2NyaXB0aW9uID0gdGhpcy5wYXJhZ3JhcGhUcmFuc2xhdGlvbnNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoXHJcbiAgICAgIG1lcmdlTWFwKCh1bnRyYW5zbGF0ZWRQYXJhZ3JhcGgpID0+IHtcclxuICAgICAgICB0aGlzLnVudHJhbnNsYXRlZFBhcmFncmFwaENvdW50ICs9IDE7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlUGFyYWdyYXBoKHVudHJhbnNsYXRlZFBhcmFncmFwaCwgZGV0ZWN0ZWRMYW5ndWFnZSkucGlwZShcclxuICAgICAgICAgIHRhcCgocmVzcG9uc2U6IElUcmFuc2xhdGVQYXJhZ3JhcGhSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICAvLyBObyBuZWVkIHRvIGhhbmRsZSByZXNwb25zZSBpZiBzb3VyY2UgdGV4dCBoYXMgY2hhbmdlZC5cclxuICAgICAgICAgICAgaWYgKHNvdXJjZSAhPSB0aGlzLnNvdXJjZVRleHQpIHtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVUcmFuc2xhdGVkUGFyYWdyYXBoKHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVQYXJhZ3JhcGhzKHVudHJhbnNsYXRlZFBhcmFncmFwaC5peCwgcmVzcG9uc2UpO1xyXG4gICAgICAgICAgICB0aGlzLnVudHJhbnNsYXRlZFBhcmFncmFwaENvdW50IC09IDE7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy51bnRyYW5zbGF0ZWRQYXJhZ3JhcGhDb3VudCA9PT0gMCAmJiB0aGlzLmlzU3lzdGVtV2FraW5nVXApIHtcclxuICAgICAgICAgICAgICB0aGlzLmlzU3lzdGVtV2FraW5nVXAgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLmFsZXJ0c1NlcnZpY2UuZGVsZXRlTWVzc2FnZShOb3RpZmljYXRpb25NZXNzYWdlVHlwZS5JTkZPLCAnRVJST1JTLkVfMjEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gZXJyLmVycm9yO1xyXG5cclxuICAgICAgICAgICAgdGhpcy51bnRyYW5zbGF0ZWRQYXJhZ3JhcGhDb3VudCAtPSAxO1xyXG5cclxuICAgICAgICAgICAgaWYgKGVyci5zdGF0dXMgPT09IDUwMCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuYWxlcnRzU2VydmljZS51bmhhbmRlbGVkRXJyb3IoeyBFcnJvckNvZGU6IEVycm9yQ29kZS5UUkFOU0xBVElPTl9GQUlMRUQgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3I/LkVycm9yQ29kZSA9PT0gdGhpcy5zdGFuZGJ5RW5naW5lTm90aWZpY2F0aW9uRXJyb3JLZXkpIHtcclxuICAgICAgICAgICAgICB0aGlzLmFsZXJ0c1NlcnZpY2UuaW5mbygnRVJST1JTLkVfMjEnKTtcclxuICAgICAgICAgICAgICB0aGlzLmlzU3lzdGVtV2FraW5nVXAgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmV0cmFuc2xhdGUoKTtcclxuICAgICAgICAgICAgICB9LCB0aGlzLnN0YW5kYnlTeXN0ZW1SZXRyYW5zbGF0aW9uVGltZW91dClcclxuXHJcbiAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yPy5lcnJvcj8uY29kZSA9PSB0aGlzLmVuZ2luZVRlcm1Db2xsZWN0aW9uTm90Rm91bmRFcnJvcktleSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuYWxlcnRzU2VydmljZS5lcnJvcignRVJST1JTLkVfNDA0MjAxJywgZXJyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmFsZXJ0c1NlcnZpY2UudW5oYW5kZWxlZEVycm9yKGVycik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QsIHN1YmplY3QgaXMgZGVzdHJveWVkIGFuZCB1bnN1YnNjcmliZWQsIHNvIHRocm93biBlcnJvciB3b250IGhhdmUgYW55IGVmZmVjdC5cclxuICAgICAgICAgICAgdGhpcy5zdG9wVHJhbnNsYXRpb24oKTtcclxuICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgfSkpXHJcbiAgICAgIH0sIHRoaXMuQ09OQ1VSUkVOVF9VUExPQURTKSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHRyYW5zbGF0ZVBhcmFncmFwaChwYXJhZ3JhcGg6IElVbnRyYW5zbGF0ZWRQYXJhZ3JhcGgsIGRldGVjdGVkTGFuZ3VhZ2U/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPElUcmFuc2xhdGVQYXJhZ3JhcGhSZXNwb25zZT4ge1xyXG4gICAgY29uc3QgcGFyYW1zOiBJVHJhbnNsYXRlUGFyYWdyYXBoUmVxdWVzdFBhcmFtcyA9IHtcclxuXHRcdFx0cGFyYWdyYXBoSXg6IHBhcmFncmFwaC5peCxcclxuXHRcdFx0dGV4dDogcGFyYWdyYXBoLmxpbmUsXHJcblx0XHRcdHN5c3RlbTogdGhpcy5hY3RpdmVEYXRhXHJcblx0XHR9O1xyXG5cclxuICAgIGlmICgoZGV0ZWN0ZWRMYW5ndWFnZSA9PT0gcGFyYW1zLnN5c3RlbS50YXJnZXRMYW5ndWFnZSkgJiYgdGhpcy5zeXN0ZW1NYW5hZ2VtZW50U2VydmljZS5zeXN0ZW1zLmZpbmQoKHN5c3RlbSkgPT4gc3lzdGVtLnNvdXJjZUxhbmd1YWdlID09PSBkZXRlY3RlZExhbmd1YWdlKSkge1xyXG4gICAgICB0aGlzLnN5c3RlbU1hbmFnZW1lbnRTZXJ2aWNlLnNob3dTYW1lTGFuZ3VhZ2VzKGRldGVjdGVkTGFuZ3VhZ2UpO1xyXG4gICAgICB0aGlzLl9vbkNsZWFyLm5leHQobnVsbCk7XHJcblxyXG4gICAgICByZXR1cm4gb2YodGhpcy5nZXRFbXB0eVRyYW5zbGF0aW9uUmVzcG9uc2UocGFyYWdyYXBoLCBwYXJhbXMpKTtcclxuICAgIH1cclxuXHJcblx0XHRpZiAoIXBhcmFtcy50ZXh0IHx8IHBhcmFtcy50ZXh0LnRyaW0oKS5sZW5ndGggPT09IDApIHtcclxuXHRcdFx0cmV0dXJuIG9mKHRoaXMuZ2V0RW1wdHlUcmFuc2xhdGlvblJlc3BvbnNlKHBhcmFncmFwaCwgcGFyYW1zLCB0cnVlKSk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKGRldGVjdGVkTGFuZ3VhZ2UgJiYgKGRldGVjdGVkTGFuZ3VhZ2UgIT09IHBhcmFtcy5zeXN0ZW0uZGV0ZWN0ZWRMYW5ndWFnZSkpIHtcclxuXHRcdFx0cGFyYW1zLnN5c3RlbS5kb21haW4gPSBcIlwiO1xyXG5cdFx0XHRwYXJhbXMuc3lzdGVtLmRldGVjdGVkTGFuZ3VhZ2UgPSBkZXRlY3RlZExhbmd1YWdlO1xyXG5cclxuXHRcdFx0Y29uc3QgZW5naW5lID0gdGhpcy5zeXN0ZW1NYW5hZ2VtZW50U2VydmljZS5zeXN0ZW1zLmZpbmQoKHN5c3RlbSkgPT4gXHJcbiAgICAgICAgc3lzdGVtLnNvdXJjZUxhbmd1YWdlID09PSBkZXRlY3RlZExhbmd1YWdlICYmIHBhcmFtcy5zeXN0ZW0udGFyZ2V0TGFuZ3VhZ2UgPT09IHN5c3RlbS50YXJnZXRMYW5ndWFnZVxyXG4gICAgICApO1xyXG5cclxuXHRcdFx0dGhpcy5fb25DbGVhci5uZXh0KG51bGwpO1xyXG5cclxuXHRcdFx0aWYgKGVuZ2luZSkge1xyXG5cdFx0XHRcdHRoaXMuc3lzdGVtTWFuYWdlbWVudFNlcnZpY2Uuc2V0RGV0ZWN0ZWRMYW5ndWFnZShkZXRlY3RlZExhbmd1YWdlKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuICAgICAgICAvLyBkaXNwbGF5aW5nIHRoYXQgZW5naW5lIG5vdCBmb3VuZC5cclxuICAgICAgICB0aGlzLmFsZXJ0c1NlcnZpY2Uud2FybmluZygnRVJST1JTLkRFVEVDVElPTi5VTkFWQUlMQUJMRScsIHtcclxuICAgICAgICAgIHNyY0xhbmc6IHRoaXMubGFuZ3VhZ2VUcmFuc2xhdGUuZ2V0TGFuZ3VhZ2VDb2RlVHJhbnNsYXRpb24oZGV0ZWN0ZWRMYW5ndWFnZSksXHJcbiAgICAgICAgICB0cmdMYW5nOiB0aGlzLmxhbmd1YWdlVHJhbnNsYXRlLmdldExhbmd1YWdlQ29kZVRyYW5zbGF0aW9uKHBhcmFtcy5zeXN0ZW0udGFyZ2V0TGFuZ3VhZ2UpLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmlzVW5zdXBwb3J0ZWRMYW5nV2FybmluZ1Zpc2libGUgPSB0cnVlO1xyXG5cclxuICAgICAgICAvLyBwcmVzZXRpbmcgc3lzdGVtIHdpdGggc3JjTGFuZyBzYW1lIGFzIGRldGVjdGVkTGFuZ3VhZ2UgKHRhcmdldCBpcyByYW5kb20gaGVyZSlcclxuICAgICAgICBpZiAodGhpcy5zeXN0ZW1NYW5hZ2VtZW50U2VydmljZS5zeXN0ZW1zLmZpbmQoKHN5c3RlbSkgPT4gc3lzdGVtLnNvdXJjZUxhbmd1YWdlID09PSBkZXRlY3RlZExhbmd1YWdlKSkge1xyXG4gICAgICAgICAgdGhpcy5zeXN0ZW1NYW5hZ2VtZW50U2VydmljZS5zZXREZXRlY3RlZExhbmd1YWdlKGRldGVjdGVkTGFuZ3VhZ2UpO1xyXG4gICAgICAgICAgdGhpcy50cmdMYW5nQmVmb3JlRGV0ZWN0ID0gcGFyYW1zLnN5c3RlbS50YXJnZXRMYW5ndWFnZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5yZXNldERldGVjdGVkTGFuZ3VhZ2UoKTsgICAgICAgICAgICBcclxuICAgICAgICAgIHJldHVybiBvZih0aGlzLmdldEVtcHR5VHJhbnNsYXRpb25SZXNwb25zZShwYXJhZ3JhcGgsIHBhcmFtcywgZmFsc2UsIHRydWUpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHRcdH1cclxuXHJcbiAgICAvLyB3ZSBzaG91bGQgY2xlYXIgdW5hdmFpbGFibGUgbm90aWZpY2F0aW9uIGFmdGVyIG1hbnVhbCBsYW5ndWFnZSBzZWxlY3Rpb24sIGJ1dCBub3Qgd2hlbiB3ZSBoYXZlIHByZXNldGVkIGVuZ2luZSB3aXRoIHJhbmRvbSB0YXJnZXQgbGFuZ3VhZ2VcclxuICAgIGlmICh0aGlzLmlzVW5zdXBwb3J0ZWRMYW5nV2FybmluZ1Zpc2libGUgJiYgKCF0aGlzLnRyZ0xhbmdCZWZvcmVEZXRlY3QgfHwgdGhpcy50cmdMYW5nQmVmb3JlRGV0ZWN0ICYmICFwYXJhbXMuc3lzdGVtLmRldGVjdGVkTGFuZ3VhZ2UpKSB7XHJcblx0XHRcdHRoaXMuX29uQ2xlYXIubmV4dChudWxsKTtcclxuICAgICAgdGhpcy5pc1Vuc3VwcG9ydGVkTGFuZ1dhcm5pbmdWaXNpYmxlID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG5cdFx0cmV0dXJuIHRoaXMuYXBpLnRyYW5zbGF0ZVBhcmFncmFwaChwYXJhbXMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRFbXB0eVRyYW5zbGF0aW9uUmVzcG9uc2UocGFyYWdyYXBoOiBJVW50cmFuc2xhdGVkUGFyYWdyYXBoLCBwYXJhbXM6IElUcmFuc2xhdGVQYXJhZ3JhcGhSZXF1ZXN0UGFyYW1zLCBsZWF2ZUFsbEVtcHR5PzogYm9vbGVhbiwgbGVhdmVUYXJnZXRFbXB0eT86IGJvb2xlYW4pOiBJVHJhbnNsYXRlUGFyYWdyYXBoUmVzcG9uc2Uge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgc291cmNlVHJlZTogeyB0ZXh0OiBsZWF2ZUFsbEVtcHR5ID8gJycgOiBwYXJhZ3JhcGgubGluZSwgcGFyYWdyYXBoSXg6IHBhcmFtcy5wYXJhZ3JhcGhJeCwgdHlwZTogSGlnaGxpZ2h0VHJlZVR5cGUuUEFSQUdSQVBILCByb290OiBudWxsLCBvcmlnaW5hbFRleHQ6IGxlYXZlQWxsRW1wdHkgPyAnJyA6IHBhcmFncmFwaC5saW5lIH0sXHJcbiAgICAgIHRhcmdldFRyZWU6IHsgdGV4dDogbGVhdmVUYXJnZXRFbXB0eSB8fCBsZWF2ZUFsbEVtcHR5ID8gJycgOiBwYXJhZ3JhcGgubGluZSwgcGFyYWdyYXBoSXg6IHBhcmFtcy5wYXJhZ3JhcGhJeCwgdHlwZTogSGlnaGxpZ2h0VHJlZVR5cGUuUEFSQUdSQVBILCByb290OiBudWxsLCBvcmlnaW5hbFRleHQ6IGxlYXZlQWxsRW1wdHkgPyAnJyA6IHBhcmFncmFwaC5saW5lIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlVHJhbnNsYXRlZFBhcmFncmFwaChwYXJhZ3JhcGg6IElUcmFuc2xhdGVQYXJhZ3JhcGhSZXNwb25zZSkge1xyXG4gICAgLy9pZiBhdXRvIGRvbWFpbiBkZXRlY3Rpb24gaXMgb24sIHN5c3RlbSBhcGkgc2VydmljZSBzZXRzIHN5c3RlbSBpZCB0byBgJHtzcmNMYW5nfS0ke3RhcmdldExhbmd9YCBzbyB3ZSBuZWVkIHRvIHZhbGlkYXRlIGlmIHRoYXQgaXMgdGhlIGNhc2VcclxuICAgIGlmIChwYXJhZ3JhcGguc3lzdGVtSWQgJiYgdGhpcy5hY3RpdmVEYXRhLmlkICE9PSBwYXJhZ3JhcGguc3lzdGVtSWRcclxuICAgICAgJiYgdGhpcy5hY3RpdmVEYXRhLmlkID09PSBgJHt0aGlzLmFjdGl2ZURhdGEuc291cmNlTGFuZ3VhZ2V9LSR7dGhpcy5hY3RpdmVEYXRhLnRhcmdldExhbmd1YWdlfWApIHtcclxuICAgICAgdGhpcy5zeXN0ZW1NYW5hZ2VtZW50U2VydmljZS5jaGFuZ2VTeXN0ZW0ocGFyYWdyYXBoLnN5c3RlbUlkKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBOZWVkcyB0byBzY3JvbGwgdG8gdG9wIGFmdGVyIGZpcnN0IHBhcmFncmFwaCBpcyB0cmFuc2xhdGVkLlxyXG4gICAgaWYgKCF0aGlzLl9maXJzdFBhcmFncmFwaFRyYW5zbGF0ZWQpIHtcclxuICAgICAgLy8gaWYgZW1wdHkgcGFyYWdyYXBoIGlzICd0cmFuc2xhdGVkJyBmaXJzdCwgbm8gbmVlZCB0byBkbyBhbnkgc2Nyb2xsaW5nLiBXYWl0IGZvciByZWFsIHRleHQgdG8gYmUgdHJhbnNsYXRlZC5cclxuICAgICAgaWYgKHBhcmFncmFwaC50YXJnZXRUcmVlLnRleHQudHJpbSgpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLl9maXJzdFBhcmFncmFwaFRyYW5zbGF0ZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudGxkU2Nyb2xsU2VydmljZS5zeW5jU2Nyb2xsYmFycyhudWxsLCAwKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVQYXJhZ3JhcGhzKHBhcmFncmFwaEl4OiBudW1iZXIsIHJlc3BvbnNlOiBJVHJhbnNsYXRlUGFyYWdyYXBoUmVzcG9uc2UpIHtcclxuICAgIGxldCBwYXJhZ3JhcGg6IElQYXJhZ3JhcGhJbmZvID0ge1xyXG4gICAgICBpeDogcGFyYWdyYXBoSXgsXHJcbiAgICAgIHRhcmdldDogcmVzcG9uc2UudGFyZ2V0VHJlZSxcclxuICAgICAgc291cmNlOiByZXNwb25zZS5zb3VyY2VUcmVlXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMucGFyYWdyYXBocy5zcGxpY2UocGFyYWdyYXBoSXgsIDEsIHBhcmFncmFwaCk7XHJcbiAgICB0aGlzLnNvdXJjZVBhcmFncmFwaHMuc3BsaWNlKHBhcmFncmFwaEl4LCAxLCByZXNwb25zZS5zb3VyY2VUcmVlKTtcclxuICAgIHRoaXMudGFyZ2V0UGFyYWdyYXBocy5zcGxpY2UocGFyYWdyYXBoSXgsIDEsIHJlc3BvbnNlLnRhcmdldFRyZWUpO1xyXG5cclxuICAgIHRoaXMucGFyYWdyYXBocy5zb3J0KChhLCBiKSA9PiAoYS5peCA+IGIuaXgpID8gMSA6IC0xKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYXJTb3VyY2VQYXJhbXMoKSB7XHJcbiAgICB0aGlzLl9kaWN0aW9uYXJ5RW50cnkgPSBudWxsO1xyXG4gICAgdGhpcy5faGFzRGljdGlvbmFyeSA9IGZhbHNlO1xyXG4gICAgdGhpcy5wYXJhZ3JhcGhzID0gW107XHJcbiAgICB0aGlzLnRhcmdldFBhcmFncmFwaHMgPSBbXTtcclxuICAgIHRoaXMuc291cmNlUGFyYWdyYXBocyA9IFtdO1xyXG4gICAgdGhpcy51cmxUb1RyYW5zbGF0ZSA9IG51bGw7XHJcbiAgICB0aGlzLnRleHRUb1NwZWVjaFRhcmdldFNldHRpbmdzID0gbnVsbDtcclxuICAgIHRoaXMudGV4dFRvU3BlZWNoU291cmNlU2V0dGluZ3MgPSBudWxsO1xyXG4gICAgdGhpcy5zdG9wVHJhbnNsYXRpb24oKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcHJlcGFyZUFuZFRyYW5zbGF0ZVdvcmRzKGRldGVjdGVkTGFuZ3VhZ2U/OiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGRpY3Rpb25hcnkgPSB0aGlzLmFwaS5kaWN0aW9uYXJ5VHJhbnNsYXRpb24odGhpcy5zb3VyY2VUZXh0LnRyaW0oKSwgdGhpcy5hY3RpdmVEYXRhLnNvdXJjZUxhbmd1YWdlLCB0aGlzLmFjdGl2ZURhdGEudGFyZ2V0TGFuZ3VhZ2UpO1xyXG5cclxuXHRcdHRoaXMuZGljdGlvbmFyeVN1YnNjcmlwdGlvbiA9IGRpY3Rpb25hcnkucmVxdWVzdC5zdWJzY3JpYmUoe1xyXG5cdFx0XHRuZXh0OiAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICB0aGlzLmRpY3Rpb25hcnlTdWJzY3JpcHRpb24gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZGljdGlvbmFyeUVudHJ5ID0gW107XHJcbiAgICBcclxuICAgICAgICB0aGlzLnNldERpY3Rpb25hcnlUZXJtcyhyZXNwb25zZSwgZGljdGlvbmFyeS51cmxzKTtcclxuICAgICAgICB0aGlzLnRyYW5zbGF0ZVRleHQodGhpcy5zb3VyY2VUZXh0LCBkZXRlY3RlZExhbmd1YWdlKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0ZXJyb3I6ICgpID0+IHtcclxuXHRcdFx0XHR0aGlzLnRyYW5zbGF0ZVRleHQodGhpcy5zb3VyY2VUZXh0LCBkZXRlY3RlZExhbmd1YWdlKTtcclxuXHRcdFx0XHR0aGlzLmhhc0RpY3Rpb25hcnkgPSBmYWxzZTtcclxuXHRcdFx0fSxcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcbiAgcHJpdmF0ZSBzZXREaWN0aW9uYXJ5VGVybXMocmVzcG9uc2U6IERpY3Rpb25hcnlbXVtdLCB1cmxzOiBzdHJpbmdbXSk6IHZvaWQge1xyXG5cdFx0cmVzcG9uc2UuZm9yRWFjaCgocmVzLCBpKSA9PiB7XHJcblx0XHRcdHJlcy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgaXNUaWxkZVRlcm1Db2xsZWN0aW9uID0gdXJsc1tpXS5pbmNsdWRlcygndGlsZGUnKTtcclxuXHRcdFx0XHRjb25zdCB0ZXJtV2l0aFNvdXJjZSA9IHtcclxuXHRcdFx0XHRcdC4uLml0ZW0sXHJcblx0XHRcdFx0XHRkaWN0aW9uYXJ5RG9tYWluVXJsOiBpc1RpbGRlVGVybUNvbGxlY3Rpb24gPyBudWxsIDogdXJsc1tpXSxcclxuXHRcdFx0XHRcdHNvdXJjZUxhYmVsOiBpc1RpbGRlVGVybUNvbGxlY3Rpb24gPyAnVGlsZGUgVGVybScgOiBudWxsLFxyXG5cdFx0XHRcdH07XHJcblxyXG5cdFx0XHRcdGNvbnN0IHRlcm1TdW1tYXJ5ID0gdGVybVdpdGhTb3VyY2UubGFuZ3VhZ2VTdW1tYXJpZXM/LmZpbmQoKHN1bW1hcnkpID0+IHN1bW1hcnkubGFuZyA9PT0gdGhpcy5hY3RpdmVEYXRhLnRhcmdldExhbmd1YWdlKTtcclxuXHJcblx0XHRcdFx0aWYgKHRlcm1TdW1tYXJ5KSB7XHJcblx0XHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uRW50cnkgPSB0ZXJtV2l0aFNvdXJjZS5lbnRyeVN1bW1hcmllc1swXTtcclxuXHRcdFx0XHRcdGNvbnN0IGNvbGxlY3Rpb25JZCA9IGNvbGxlY3Rpb25FbnRyeS5jb2xsZWN0aW9uSWQ7XHJcblx0XHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uVGFyZ2V0V29yZCA9IHRlcm1TdW1tYXJ5LnRlcm1zWzBdLnRlcm07XHJcblx0XHRcdFx0XHRjb25zdCBjb2xsZWN0aW9uVXJsID0gdGVybVdpdGhTb3VyY2UuZGljdGlvbmFyeURvbWFpblVybFxyXG5cdFx0XHRcdFx0XHQ/IGBodHRwczovLyR7dGVybVdpdGhTb3VyY2UuZGljdGlvbmFyeURvbWFpblVybH0vY29sbGVjdGlvbnMvJHtjb2xsZWN0aW9uSWR9YFxyXG5cdFx0XHRcdFx0XHQ6IGAke3RoaXMudGVybWlub2xvZ3lQb3J0YWxVcmx9L2NvbGxlY3Rpb25zL3Rlcm0vJHtjb2xsZWN0aW9uSWR9YDtcclxuXHJcblx0XHRcdFx0XHRpZiAoIXRoaXMuZGljdGlvbmFyeUVudHJ5LnNvbWUoKHRlcm0pID0+IHRlcm0udGFyZ2V0V29yZCA9PT0gY29sbGVjdGlvblRhcmdldFdvcmQgJiYgdGVybS50ZXJtU291cmNlID09PSBjb2xsZWN0aW9uRW50cnkuY29sbGVjdGlvbk5hbWUpKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuZGljdGlvbmFyeUVudHJ5LnB1c2goe1xyXG5cdFx0XHRcdFx0XHRcdC4uLnRlcm1XaXRoU291cmNlLFxyXG5cdFx0XHRcdFx0XHRcdHRhcmdldFdvcmQ6IGNvbGxlY3Rpb25UYXJnZXRXb3JkLFxyXG5cdFx0XHRcdFx0XHRcdHRlcm1Tb3VyY2U6IGNvbGxlY3Rpb25FbnRyeS5jb2xsZWN0aW9uTmFtZSxcclxuXHRcdFx0XHRcdFx0XHRjb2xsZWN0aW9uVXJsOiBjb2xsZWN0aW9uVXJsLFxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0dGhpcy5yZW1vdmVEaWN0aW9uYXJ5RHJhZnRzKCk7XHJcblx0XHR0aGlzLmhhc0RpY3Rpb25hcnkgPSB0aGlzLmRpY3Rpb25hcnlFbnRyeS5sZW5ndGggPiAwO1xyXG5cdH1cclxuICBcclxuICBwcml2YXRlIHRyYW5zbGF0ZVRleHQodGV4dDogc3RyaW5nLCBkZXRlY3RlZExhbmd1YWdlPzogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBwYXJhZ3JhcGhzID0gSHRtbEhlbHBlci5zcGxpdEluUGFyYWdyYXBocyh0ZXh0KTtcclxuICAgIGNvbnN0IG5ld1BhcmFncmFwaHM6IElQYXJhZ3JhcGhJbmZvW10gPSBbXTtcclxuICAgIGNvbnN0IG5ld1NvdXJjZVBhcmFncmFwaHM6IElIaWdobGlnaHRUcmVlW10gPSBbXTtcclxuICAgIGNvbnN0IG5ld1RhcmdldFBhcmFncmFwaHM6IElIaWdobGlnaHRUcmVlW10gPSBbXTtcclxuXHJcbiAgICAvLyBzb3VyY2UgdGV4dCBjaGFuZ2VkLiBQcmV2aW91c2x5IG1hZGUgb2JzZXJ2YWJsZXMgYXJlbid0IG5lY2Vzc2FyeSBhbnltb3JlO1xyXG4gICAgdGhpcy5yZWNyZWF0ZVBhcmFncmFwaFRyYW5zbGF0aW9uU3ViamVjdChkZXRlY3RlZExhbmd1YWdlKTtcclxuXHJcbiAgICBwYXJhZ3JhcGhzLmZvckVhY2goKHBhcmFncmFwaCwgaXgpID0+IHtcclxuICAgICAgLy8gQ2hlY2sgaWYgcGFyYWdyYXBoIHdpdGggc2FtZSB0ZXh0IGV4aXN0cyAoc28geW91IGRvbid0IGhhdmUgdG8gdHJhbnNsYXRlIGl0IGFnYWluKS5cclxuICAgICAgLy8gSWYgaXQgZG9lcywgeW91IGNhbiBjbG9uZSBpdC5cclxuICAgICAgY29uc3QgZXhpc3RpbmdQYXJhZ3JhcGhJbmZvID0gVGxkVHJhbnNsYXRlVGV4dFV0aWxzLmZpbmRFeGlzdGluZ1BhcmFncmFwaChwYXJhZ3JhcGgsIGl4LCB0aGlzLnBhcmFncmFwaHMpO1xyXG4gICAgICBjb25zdCBleGlzdGluZ1BhcmFncmFwaCA9IGV4aXN0aW5nUGFyYWdyYXBoSW5mby5leGlzdGluZ1BhcmFncmFwaDtcclxuICAgICAgaWYgKGV4aXN0aW5nUGFyYWdyYXBoSW5mby5leGlzdGluZ1BhcmFncmFwaCkge1xyXG4gICAgICAgIGlmICghZXhpc3RpbmdQYXJhZ3JhcGhJbmZvLmhhc1NhbWVJeCkge1xyXG4gICAgICAgICAgVGxkVHJhbnNsYXRlVGV4dFV0aWxzLmNoYW5nZVJvb3RBbmRQYXJhZ3JhcGhJeChleGlzdGluZ1BhcmFncmFwaC5zb3VyY2UsIGV4aXN0aW5nUGFyYWdyYXBoLnNvdXJjZSwgZXhpc3RpbmdQYXJhZ3JhcGguaXgpO1xyXG4gICAgICAgICAgVGxkVHJhbnNsYXRlVGV4dFV0aWxzLmNoYW5nZVJvb3RBbmRQYXJhZ3JhcGhJeChleGlzdGluZ1BhcmFncmFwaC50YXJnZXQsIGV4aXN0aW5nUGFyYWdyYXBoLnRhcmdldCwgZXhpc3RpbmdQYXJhZ3JhcGguaXgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBuZXdQYXJhZ3JhcGhzLnNwbGljZShpeCwgMCwgZXhpc3RpbmdQYXJhZ3JhcGgpO1xyXG4gICAgICAgIG5ld1RhcmdldFBhcmFncmFwaHMuc3BsaWNlKGl4LCAwLCBleGlzdGluZ1BhcmFncmFwaC50YXJnZXQpO1xyXG4gICAgICAgIG5ld1NvdXJjZVBhcmFncmFwaHMuc3BsaWNlKGl4LCAwLCBleGlzdGluZ1BhcmFncmFwaC5zb3VyY2UpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IG5ld1BhcmFncmFwaCA9IFRsZFRyYW5zbGF0ZVRleHRVdGlscy5jcmVhdGVFbXB0eVBhcmFncmFwaEluZm8oaXgpO1xyXG5cclxuICAgICAgICBuZXdQYXJhZ3JhcGhzLnNwbGljZShpeCwgMCwgbmV3UGFyYWdyYXBoKTtcclxuICAgICAgICBuZXdTb3VyY2VQYXJhZ3JhcGhzLnNwbGljZShpeCwgMCwgbmV3UGFyYWdyYXBoLnNvdXJjZSk7XHJcbiAgICAgICAgbmV3VGFyZ2V0UGFyYWdyYXBocy5zcGxpY2UoaXgsIDAsIG5ld1BhcmFncmFwaC50YXJnZXQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnBhcmFncmFwaHMgPSBuZXdQYXJhZ3JhcGhzO1xyXG4gICAgdGhpcy50YXJnZXRQYXJhZ3JhcGhzID0gbmV3VGFyZ2V0UGFyYWdyYXBocztcclxuICAgIHRoaXMuc291cmNlUGFyYWdyYXBocyA9IG5ld1NvdXJjZVBhcmFncmFwaHM7XHJcblxyXG4gICAgcGFyYWdyYXBocy5mb3JFYWNoKChwYXJhZ3JhcGgsIGl4KSA9PiB7XHJcbiAgICAgIHRoaXMucGFyYWdyYXBoVHJhbnNsYXRpb25zU3ViamVjdC5uZXh0KHsgaXg6IGl4LCBsaW5lOiBwYXJhZ3JhcGggfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1RyYW5zbGF0aW5nKSB7XHJcbiAgICAgIHRoaXMuc2V0UHJvZ3Jlc3NJbmRpY2F0b3JUaW1lb3V0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogQ3JlYXRlcyB0aW1lb3V0IHdoaWNoIGVuYWJsZXMgcHJvZ3Jlc3MgaW5kaWNhdG9yIGFmdGVyIGdpdmVuIG1pbGlzZWNvbmRzICovXHJcbiAgcHJpdmF0ZSBzZXRQcm9ncmVzc0luZGljYXRvclRpbWVvdXQoKSB7XHJcbiAgICBpZiAodGhpcy5wcm9ncmVzc0luZGljYXRvclRpbWVvdXRNaWxpU2Vjb25kcyA9PT0gbnVsbCB8fCB0aGlzLnByb2dyZXNzSW5kaWNhdG9yVGltZW91dE1pbGlTZWNvbmRzID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZ1NlcnZpY2UudGV4dENvbmZpZy5wcm9ncmVzc0luZGljYXRvclZpc2libGUpIHtcclxuICAgICAgdGhpcy5wcm9ncmVzc0luZGljYXRvclRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLnNob3dQcm9ncmVzc0luZGljYXRvcigpO1xyXG4gICAgICB9LCB0aGlzLnByb2dyZXNzSW5kaWNhdG9yVGltZW91dE1pbGlTZWNvbmRzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBNZXRob2QgZm9yIHNldHRpbmcgbmVjZXNzYXJ5IHByb3BlcnRpZXMgdG8gbWFrZSBwcm9ncmVzcyBpbmRpY2F0b3IgdmlzaWJsZS4gKi9cclxuICBwcml2YXRlIHNob3dQcm9ncmVzc0luZGljYXRvcigpIHtcclxuICAgIHRoaXMuX3Nob3VsZFNob3dQcm9ncmVzc0luZGljYXRvciA9IHRydWU7XHJcbiAgfVxyXG5cclxuICAvKiogTWV0aG9kIGZvciBzZXR0aW5nIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzIHRvIG1ha2UgcHJvZ3Jlc3MgaW5kaWNhdG9yIGhpZGRlbi4gKi9cclxuICBoaWRlUHJvZ3Jlc3NJbmRpY2F0b3IoKSB7XHJcbiAgICBpZiAodGhpcy5wcm9ncmVzc0luZGljYXRvclRpbWVvdXQpIHtcclxuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucHJvZ3Jlc3NJbmRpY2F0b3JUaW1lb3V0KTtcclxuICAgIH1cclxuICAgIHRoaXMuX3Nob3VsZFNob3dQcm9ncmVzc0luZGljYXRvciA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0b2dnbGVUZXh0VG9TcGVlY2goKSB7XHJcbiAgICAvLyBpZiBub3RoaW5nIHRyYW5zbGF0ZWQsIHR0cyBzaG91bGQgbm90IGJlIGF2YWlsYWJsZVxyXG4gICAgaWYgKCF0aGlzLnRhcmdldFBhcmFncmFwaHMubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBhY3RpdmVTeXN0ZW0gPSB0aGlzLmFjdGl2ZURhdGE7XHJcbiAgICB0aGlzLnRleHRUb1NwZWVjaFRhcmdldFNldHRpbmdzID0gdGhpcy5maW5kVGV4dFRvU3BlZWNoU2V0dGluZ3MoYWN0aXZlU3lzdGVtLnRhcmdldExhbmd1YWdlLCB0aGlzLnRyYW5zbGF0ZWRUZXh0KTtcclxuICAgIHRoaXMudGV4dFRvU3BlZWNoU291cmNlU2V0dGluZ3MgPSB0aGlzLmZpbmRUZXh0VG9TcGVlY2hTZXR0aW5ncyhhY3RpdmVTeXN0ZW0uc291cmNlTGFuZ3VhZ2UsIHRoaXMuc291cmNlVGV4dCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbmRUZXh0VG9TcGVlY2hTZXR0aW5ncyhsYW5ndWFnZUNvZGU6IHN0cmluZywgdGV4dDogc3RyaW5nKTogVGV4dFRvU3BlZWNoU2V0dGluZ3Mge1xyXG4gICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLmNvbmZpZ1NlcnZpY2UudGV4dFRvU3BlZWNoQ29uZmlnLmxhbmd1YWdlc1tsYW5ndWFnZUNvZGVdO1xyXG4gICAgaWYgKHNldHRpbmdzKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgdGV4dCxcclxuICAgICAgICB1cmw6IHNldHRpbmdzLnVybCxcclxuICAgICAgICB2b2ljZTogc2V0dGluZ3Mudm9pY2UsXHJcbiAgICAgICAgbGFuZ0JwYzQ3OiBzZXR0aW5ncy5sYW5nQnBjNDcsXHJcbiAgICAgICAgbWF4Q2hhcnNJblRleHQ6IHRoaXMuY29uZmlnU2VydmljZS50ZXh0VG9TcGVlY2hDb25maWcubWF4Q2hhcnNJblRleHRcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbW92ZURpY3Rpb25hcnlEcmFmdHMoKTogdm9pZCB7XHJcbiAgICBjb25zdCBjb2xsZWN0aW9uRHJhZnRTdGF0dXMgPSAnRHJhZnQnO1xyXG5cclxuICAgIHRoaXMuZGljdGlvbmFyeUVudHJ5ID0gdGhpcy5kaWN0aW9uYXJ5RW50cnkubWFwKGVudHJ5ID0+ICh7Li4uZW50cnksXHJcbiAgICAgIGxhbmd1YWdlU3VtbWFyaWVzOiBlbnRyeS5sYW5ndWFnZVN1bW1hcmllcz8ubWFwKGxhbmd1YWdlU3VtbWFyeSA9PiAoey4uLmxhbmd1YWdlU3VtbWFyeSxcclxuICAgICAgICB0ZXJtczogbGFuZ3VhZ2VTdW1tYXJ5LnRlcm1zLmZpbHRlcih0ZXJtID0+IHRlcm0udGVybVN0YXR1cyAhPT0gY29sbGVjdGlvbkRyYWZ0U3RhdHVzKVxyXG4gICAgICB9KSlcclxuICAgIH0pKTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -7296,7 +7296,8 @@ class TldTranslateTextService {
|
|
|
7296
7296
|
}
|
|
7297
7297
|
if (!detectedLanguage && (this.activeData.sourceLanguage === AUTO_LANGUAGE_DETECTION_KEY || this.activeData.detectedLanguage)) {
|
|
7298
7298
|
this.language.detect(this.sourceText.replace('\n', ' ')).subscribe(res => {
|
|
7299
|
-
|
|
7299
|
+
// displaying english language, if text is undetectable
|
|
7300
|
+
this.retranslate(params, res.detectedLanguage ?? 'en');
|
|
7300
7301
|
});
|
|
7301
7302
|
return;
|
|
7302
7303
|
}
|
|
@@ -7499,20 +7500,26 @@ class TldTranslateTextService {
|
|
|
7499
7500
|
setDictionaryTerms(response, urls) {
|
|
7500
7501
|
response.forEach((res, i) => {
|
|
7501
7502
|
res.forEach((item) => {
|
|
7502
|
-
const termSummary = item.languageSummaries?.find((summary) => summary.lang === this.activeData.targetLanguage);
|
|
7503
7503
|
const isTildeTermCollection = urls[i].includes('tilde');
|
|
7504
|
+
const termWithSource = {
|
|
7505
|
+
...item,
|
|
7506
|
+
dictionaryDomainUrl: isTildeTermCollection ? null : urls[i],
|
|
7507
|
+
sourceLabel: isTildeTermCollection ? 'Tilde Term' : null,
|
|
7508
|
+
};
|
|
7509
|
+
const termSummary = termWithSource.languageSummaries?.find((summary) => summary.lang === this.activeData.targetLanguage);
|
|
7504
7510
|
if (termSummary) {
|
|
7505
|
-
const collectionEntry =
|
|
7511
|
+
const collectionEntry = termWithSource.entrySummaries[0];
|
|
7506
7512
|
const collectionId = collectionEntry.collectionId;
|
|
7507
7513
|
const collectionTargetWord = termSummary.terms[0].term;
|
|
7508
|
-
const collectionUrl =
|
|
7514
|
+
const collectionUrl = termWithSource.dictionaryDomainUrl
|
|
7515
|
+
? `https://${termWithSource.dictionaryDomainUrl}/collections/${collectionId}`
|
|
7516
|
+
: `${this.terminologyPortalUrl}/collections/term/${collectionId}`;
|
|
7509
7517
|
if (!this.dictionaryEntry.some((term) => term.targetWord === collectionTargetWord && term.termSource === collectionEntry.collectionName)) {
|
|
7510
|
-
this.dictionaryEntry.push({
|
|
7518
|
+
this.dictionaryEntry.push({
|
|
7519
|
+
...termWithSource,
|
|
7511
7520
|
targetWord: collectionTargetWord,
|
|
7512
7521
|
termSource: collectionEntry.collectionName,
|
|
7513
7522
|
collectionUrl: collectionUrl,
|
|
7514
|
-
dictionaryDomainUrl: isTildeTermCollection ? null : urls[i],
|
|
7515
|
-
sourceLabel: isTildeTermCollection ? 'Tilde Term' : null
|
|
7516
7523
|
});
|
|
7517
7524
|
}
|
|
7518
7525
|
}
|