geonetwork-ui 2.2.0-dev.6695ae4d → 2.2.0-dev.723017a4
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/libs/api/metadata-converter/src/lib/gn4/atomic-operations.mjs +27 -1
- package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +8 -8
- package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.mjs +2 -2
- package/esm2022/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.mjs +1 -1
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/codelists/keyword.mapper.mjs +14 -0
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/converter.mjs +7 -9
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +30 -8
- package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +31 -14
- package/esm2022/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.mjs +10 -3
- package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.mjs +14 -5
- package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +33 -8
- package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
- package/esm2022/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.mjs +1 -1
- package/esm2022/libs/common/domain/src/lib/platform.service.interface.mjs +1 -1
- package/esm2022/libs/feature/map/src/lib/map-context/map-context.service.mjs +9 -1
- package/esm2022/libs/feature/search/src/lib/utils/service/fields.mjs +41 -26
- package/esm2022/libs/feature/search/src/lib/utils/service/fields.service.mjs +11 -9
- package/esm2022/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.mjs +3 -3
- package/esm2022/libs/ui/elements/src/lib/metadata-info/metadata-info.component.mjs +7 -7
- package/esm2022/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.mjs +3 -4
- package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +4 -4
- package/esm2022/libs/ui/inputs/src/lib/button/button.component.mjs +3 -3
- package/esm2022/libs/ui/inputs/src/lib/text-area/text-area.component.mjs +3 -3
- package/esm2022/libs/ui/inputs/src/lib/ui-inputs.module.mjs +6 -6
- package/esm2022/translations/de.json +2 -1
- package/esm2022/translations/en.json +2 -1
- package/esm2022/translations/es.json +2 -1
- package/esm2022/translations/fr.json +2 -1
- package/esm2022/translations/it.json +2 -1
- package/esm2022/translations/nl.json +2 -1
- package/esm2022/translations/pt.json +2 -1
- package/fesm2022/geonetwork-ui.mjs +259 -114
- package/fesm2022/geonetwork-ui.mjs.map +1 -1
- package/libs/api/metadata-converter/src/lib/gn4/atomic-operations.d.ts +2 -0
- package/libs/api/metadata-converter/src/lib/gn4/atomic-operations.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts +3 -5
- package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/iso19139/codelists/keyword.mapper.d.ts +3 -0
- package/libs/api/metadata-converter/src/lib/iso19139/codelists/keyword.mapper.d.ts.map +1 -0
- package/libs/api/metadata-converter/src/lib/iso19139/converter.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts +2 -3
- package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts.map +1 -1
- package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts +1 -1
- package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.d.ts +1 -1
- package/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.d.ts.map +1 -1
- package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +9 -2
- package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
- package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +13 -2
- package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
- package/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.d.ts +1 -0
- package/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.d.ts.map +1 -1
- package/libs/common/domain/src/lib/platform.service.interface.d.ts +1 -1
- package/libs/common/domain/src/lib/platform.service.interface.d.ts.map +1 -1
- package/libs/feature/map/src/lib/map-context/map-context.service.d.ts +1 -0
- package/libs/feature/map/src/lib/map-context/map-context.service.d.ts.map +1 -1
- package/libs/feature/search/src/lib/utils/service/fields.d.ts +21 -8
- package/libs/feature/search/src/lib/utils/service/fields.d.ts.map +1 -1
- package/libs/feature/search/src/lib/utils/service/fields.service.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.d.ts +1 -1
- package/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts +3 -3
- package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts.map +1 -1
- package/libs/ui/elements/src/lib/ui-elements.module.d.ts +13 -13
- package/libs/ui/inputs/src/lib/button/button.component.d.ts +1 -1
- package/libs/ui/inputs/src/lib/button/button.component.d.ts.map +1 -1
- package/libs/ui/inputs/src/lib/text-area/text-area.component.d.ts +1 -1
- package/libs/ui/inputs/src/lib/text-area/text-area.component.d.ts.map +1 -1
- package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts +40 -40
- package/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.d.ts +1 -1
- package/package.json +1 -1
- package/src/libs/api/metadata-converter/src/lib/fixtures/generic.records.ts +55 -2
- package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.ts +50 -6
- package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +203 -20
- package/src/libs/api/metadata-converter/src/lib/gn4/atomic-operations.ts +29 -0
- package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +11 -8
- package/src/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.ts +1 -1
- package/src/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.ts +3 -5
- package/src/libs/api/metadata-converter/src/lib/iso19139/codelists/keyword.mapper.ts +16 -0
- package/src/libs/api/metadata-converter/src/lib/iso19139/converter.ts +5 -9
- package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +53 -19
- package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +78 -36
- package/src/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.ts +22 -2
- package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.ts +15 -4
- package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +47 -8
- package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +16 -3
- package/src/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.ts +1 -0
- package/src/libs/common/domain/src/lib/platform.service.interface.ts +1 -4
- package/src/libs/common/fixtures/src/lib/gn4/groups.fixtures.ts +1 -1
- package/src/libs/common/fixtures/src/lib/records.fixtures.ts +25 -5
- package/src/libs/feature/map/src/lib/map-context/map-context.service.ts +10 -0
- package/src/libs/feature/search/src/lib/utils/service/fields.service.ts +21 -16
- package/src/libs/feature/search/src/lib/utils/service/fields.ts +43 -34
- package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.css +5 -0
- package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.html +39 -0
- package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.ts +58 -0
- package/src/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.ts +1 -0
- package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.html +5 -5
- package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.ts +6 -3
- package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.ts +2 -3
- package/src/libs/ui/elements/src/lib/ui-elements.module.ts +1 -1
- package/src/libs/ui/inputs/src/lib/button/button.component.ts +1 -0
- package/src/libs/ui/inputs/src/lib/text-area/text-area.component.ts +1 -0
- package/src/libs/ui/inputs/src/lib/ui-inputs.module.ts +2 -2
- package/translations/de.json +2 -1
- package/translations/en.json +2 -1
- package/translations/es.json +2 -1
- package/translations/fr.json +2 -1
- package/translations/it.json +2 -1
- package/translations/nl.json +2 -1
- package/translations/pt.json +2 -1
- package/translations/sk.json +2 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { addAttribute, appendChildren, createChild, createElement, findChildElement, findChildOrCreate, findChildrenElement, findNestedChildOrCreate,
|
|
1
|
+
import { addAttribute, appendChildren, createChild, createElement, findChildElement, findChildOrCreate, findChildrenElement, findNestedChildOrCreate, findNestedElements, readAttribute, removeAllChildren, removeChildren, removeChildrenByName, setTextContent, } from '../xml-utils';
|
|
2
2
|
import { fallback, filterArray, getAtIndex, map, mapArray, noop, pipe, tap, } from '../function-utils';
|
|
3
3
|
import format from 'date-fns/format';
|
|
4
4
|
import { readKind } from './read-parts';
|
|
@@ -161,15 +161,32 @@ function updateCitationDate(date, type) {
|
|
|
161
161
|
function appendCitationDate(date, type) {
|
|
162
162
|
return appendChildren(pipe(createElement('gmd:date'), createChild('gmd:CI_Date'), appendChildren(pipe(createElement('gmd:date'), writeDateTime(date)), pipe(createElement('gmd:dateType'), createChild('gmd:CI_DateTypeCode'), addAttribute('codeList', 'http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#CI_DateTypeCode'), addAttribute('codeListValue', type)))));
|
|
163
163
|
}
|
|
164
|
-
function removeKeywords(
|
|
165
|
-
return removeChildren(pipe(findNestedElements('gmd:descriptiveKeywords')
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
164
|
+
function removeKeywords() {
|
|
165
|
+
return removeChildren(pipe(findNestedElements('gmd:descriptiveKeywords')));
|
|
166
|
+
}
|
|
167
|
+
// returns a <gmd:thesaurusName> element
|
|
168
|
+
function createThesaurus(thesaurus) {
|
|
169
|
+
return pipe(createElement('gmd:thesaurusName'), createChild('gmd:CI_Citation'), appendChildren(pipe(createElement('gmd:title'), writeCharacterString(thesaurus.name || thesaurus.id)), pipe(createElement('gmd:identifier'), createChild('gmd:MD_Identifier'), appendChildren(pipe(createElement('gmd:code'), thesaurus.url
|
|
170
|
+
? writeAnchor(thesaurus.url, thesaurus.id)
|
|
171
|
+
: writeCharacterString(thesaurus.id))))));
|
|
172
|
+
}
|
|
173
|
+
function appendKeywords(keywords) {
|
|
174
|
+
const keywordsByThesaurus = keywords.reduce((acc, keyword) => {
|
|
175
|
+
const thesaurusId = keyword.thesaurus?.id;
|
|
176
|
+
const type = keyword.type;
|
|
177
|
+
let existingGroup = acc.find((group) => group[0].thesaurus
|
|
178
|
+
? group[0].thesaurus.id === thesaurusId
|
|
179
|
+
: group[0].type === type);
|
|
180
|
+
if (!existingGroup) {
|
|
181
|
+
existingGroup = [];
|
|
182
|
+
acc.push(existingGroup);
|
|
183
|
+
}
|
|
184
|
+
existingGroup.push(keyword);
|
|
185
|
+
return acc;
|
|
186
|
+
}, []);
|
|
187
|
+
return appendChildren(...keywordsByThesaurus.map((keywords) => pipe(createElement('gmd:descriptiveKeywords'), createChild('gmd:MD_Keywords'), appendChildren(pipe(createElement('gmd:type'), createChild('gmd:MD_KeywordTypeCode'), addAttribute('codeList', 'http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#MD_KeywordTypeCode'), addAttribute('codeListValue', keywords[0].type))), keywords[0].thesaurus
|
|
188
|
+
? appendChildren(createThesaurus(keywords[0].thesaurus))
|
|
189
|
+
: noop, appendChildren(...keywords.map((keyword) => pipe(createElement('gmd:keyword'), writeCharacterString(keyword.label)))))));
|
|
173
190
|
}
|
|
174
191
|
function createConstraint(constraint, type) {
|
|
175
192
|
if (type === 'security') {
|
|
@@ -286,10 +303,10 @@ export function writeContacts(record, rootEl) {
|
|
|
286
303
|
pipe(findOrCreateIdentification(), removeChildrenByName('gmd:pointOfContact'), appendChildren(...record.contacts.map((contact) => pipe(createElement('gmd:pointOfContact'), appendResponsibleParty(contact)))))(rootEl);
|
|
287
304
|
}
|
|
288
305
|
export function writeKeywords(record, rootEl) {
|
|
289
|
-
pipe(findOrCreateIdentification(), removeKeywords(
|
|
306
|
+
pipe(findOrCreateIdentification(), removeKeywords(), appendKeywords(record.keywords))(rootEl);
|
|
290
307
|
}
|
|
291
|
-
export function
|
|
292
|
-
pipe(findOrCreateIdentification(),
|
|
308
|
+
export function writeTopics(record, rootEl) {
|
|
309
|
+
pipe(findOrCreateIdentification(), removeChildrenByName('gmd:topicCategory'), appendChildren(...record.topics.map((topic) => pipe(createElement('gmd:topicCategory'), createChild('gmd:MD_TopicCategoryCode'), setTextContent(topic)))))(rootEl);
|
|
293
310
|
}
|
|
294
311
|
export function writeLicenses(record, rootEl) {
|
|
295
312
|
pipe(findOrCreateIdentification(), removeLicenses(), appendChildren(...record.licenses.map(createLicense)))(rootEl);
|
|
@@ -366,4 +383,4 @@ function createOnlineResource(onlineResource) {
|
|
|
366
383
|
export function writeOnlineResources(record, rootEl) {
|
|
367
384
|
pipe(removeDistributions(), appendChildren(...record.onlineResources.map(createOnlineResource)))(rootEl);
|
|
368
385
|
}
|
|
369
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGUtcGFydHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwaS9tZXRhZGF0YS1jb252ZXJ0ZXIvc3JjL2xpYi9pc28xOTEzOS93cml0ZS1wYXJ0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFlQSxPQUFPLEVBQ0wsWUFBWSxFQUNaLGNBQWMsRUFDZCxXQUFXLEVBQ1gsYUFBYSxFQUNiLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ25CLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsa0JBQWtCLEVBQ2xCLGFBQWEsRUFDYixpQkFBaUIsRUFDakIsY0FBYyxFQUNkLG9CQUFvQixFQUNwQixjQUFjLEdBRWYsTUFBTSxjQUFjLENBQUE7QUFDckIsT0FBTyxFQUVMLFFBQVEsRUFDUixXQUFXLEVBQ1gsVUFBVSxFQUNWLEdBQUcsRUFDSCxRQUFRLEVBQ1IsSUFBSSxFQUNKLElBQUksRUFDSixHQUFHLEdBQ0osTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQixPQUFPLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQTtBQUNwQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBRXZDLFNBQVMsb0JBQW9CLENBQzNCLElBQVk7SUFFWixPQUFPLEdBQUcsQ0FDUixJQUFJLENBQUMsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDckUsQ0FBQTtBQUNILENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxHQUFRO0lBQzVCLE9BQU8sR0FBRyxDQUNSLElBQUksQ0FDRix1QkFBdUIsQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLEVBQ2pELGNBQWMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FDL0IsQ0FDRixDQUFBO0FBQ0gsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUNsQixHQUFRLEVBQ1IsSUFBYTtJQUViLE9BQU8s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Q0FDbEMsTUFBcUIsRUFDckIsTUFBa0I7SUFFbEIsSUFBSSxDQUNGLG1CQUFtQixFQUFFLEVBQ3JCLGNBQWMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FDcEUsQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUNYLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDYXRhbG9nUmVjb3JkLFxuICBDb25zdHJhaW50LFxuICBEYXRhc2V0RGlzdHJpYnV0aW9uLFxuICBEYXRhc2V0UmVjb3JkLFxuICBEYXRhc2V0U2VydmljZURpc3RyaWJ1dGlvbixcbiAgSW5kaXZpZHVhbCxcbiAgUmVjb3JkU3RhdHVzLFxuICBSb2xlLFxuICBTZXJ2aWNlRW5kcG9pbnQsXG4gIFNlcnZpY2VPbmxpbmVSZXNvdXJjZSxcbiAgU2VydmljZVJlY29yZCxcbiAgVXBkYXRlRnJlcXVlbmN5Q29kZSxcbiAgVXBkYXRlRnJlcXVlbmN5Q3VzdG9tLFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9kb21haW4vc3JjL2xpYi9tb2RlbC9yZWNvcmQnXG5pbXBvcnQge1xuICBhZGRBdHRyaWJ1dGUsXG4gIGFwcGVuZENoaWxkcmVuLFxuICBjcmVhdGVDaGlsZCxcbiAgY3JlYXRlRWxlbWVudCxcbiAgZmluZENoaWxkRWxlbWVudCxcbiAgZmluZENoaWxkT3JDcmVhdGUsXG4gIGZpbmRDaGlsZHJlbkVsZW1lbnQsXG4gIGZpbmROZXN0ZWRDaGlsZE9yQ3JlYXRlLFxuICBmaW5kTmVzdGVkRWxlbWVudCxcbiAgZmluZE5lc3RlZEVsZW1lbnRzLFxuICByZWFkQXR0cmlidXRlLFxuICByZW1vdmVBbGxDaGlsZHJlbixcbiAgcmVtb3ZlQ2hpbGRyZW4sXG4gIHJlbW92ZUNoaWxkcmVuQnlOYW1lLFxuICBzZXRUZXh0Q29udGVudCxcbiAgWG1sRWxlbWVudCxcbn0gZnJvbSAnLi4veG1sLXV0aWxzJ1xuaW1wb3J0IHtcbiAgQ2hhaW5hYmxlRnVuY3Rpb24sXG4gIGZhbGxiYWNrLFxuICBmaWx0ZXJBcnJheSxcbiAgZ2V0QXRJbmRleCxcbiAgbWFwLFxuICBtYXBBcnJheSxcbiAgbm9vcCxcbiAgcGlwZSxcbiAgdGFwLFxufSBmcm9tICcuLi9mdW5jdGlvbi11dGlscydcbmltcG9ydCBmb3JtYXQgZnJvbSAnZGF0ZS1mbnMvZm9ybWF0J1xuaW1wb3J0IHsgcmVhZEtpbmQgfSBmcm9tICcuL3JlYWQtcGFydHMnXG5cbmZ1bmN0aW9uIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKFxuICB0ZXh0OiBzdHJpbmdcbik6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFhtbEVsZW1lbnQ+IHtcbiAgcmV0dXJuIHRhcChcbiAgICBwaXBlKGZpbmRDaGlsZE9yQ3JlYXRlKCdnY286Q2hhcmFjdGVyU3RyaW5nJyksIHNldFRleHRDb250ZW50KHRleHQpKVxuICApXG59XG5cbmZ1bmN0aW9uIHdyaXRlTGlua2FnZSh1cmw6IFVSTCk6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFhtbEVsZW1lbnQ+IHtcbiAgcmV0dXJuIHRhcChcbiAgICBwaXBlKFxuICAgICAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoJ2dtZDpsaW5rYWdlJywgJ2dtZDpVUkwnKSxcbiAgICAgIHNldFRleHRDb250ZW50KHVybC50b1N0cmluZygpKVxuICAgIClcbiAgKVxufVxuXG5mdW5jdGlvbiB3cml0ZUFuY2hvcihcbiAgdXJsOiBVUkwsXG4gIHRleHQ/OiBzdHJpbmdcbik6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFhtbEVsZW1lbnQ+IHtcbiAgcmV0dXJuIHRhcChcbiAgICBwaXBlKFxuICAgICAgZmluZENoaWxkT3JDcmVhdGUoJ2dteDpBbmNob3InKSxcbiAgICAgIGFkZEF0dHJpYnV0ZSgneGxpbms6aHJlZicsIHVybC50b1N0cmluZygpKSxcbiAgICAgIHRleHQgPyBzZXRUZXh0Q29udGVudCh0ZXh0KSA6IG5vb3BcbiAgICApXG4gIClcbn1cblxuZnVuY3Rpb24gd3JpdGVEYXRlVGltZShkYXRlOiBEYXRlKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgWG1sRWxlbWVudD4ge1xuICByZXR1cm4gdGFwKFxuICAgIHBpcGUoXG4gICAgICBmaW5kQ2hpbGRPckNyZWF0ZSgnZ2NvOkRhdGVUaW1lJyksXG4gICAgICBzZXRUZXh0Q29udGVudChmb3JtYXQoZGF0ZSwgXCJ5eXl5LU1NLWRkJ1QnSEg6bW06c3NcIikpXG4gICAgKVxuICApXG59XG5cbmZ1bmN0aW9uIHdyaXRlRGF0ZShkYXRlOiBEYXRlKTogQ2hhaW5hYmxlRnVuY3Rpb248WG1sRWxlbWVudCwgWG1sRWxlbWVudD4ge1xuICByZXR1cm4gdGFwKFxuICAgIHBpcGUoXG4gICAgICBmaW5kQ2hpbGRPckNyZWF0ZSgnZ2NvOkRhdGUnKSxcbiAgICAgIHNldFRleHRDb250ZW50KGZvcm1hdChkYXRlLCAneXl5eS1NTS1kZCcpKVxuICAgIClcbiAgKVxufVxuXG5mdW5jdGlvbiBnZXRQcm9ncmVzc0NvZGUoc3RhdHVzOiBSZWNvcmRTdGF0dXMpOiBzdHJpbmcge1xuICBzd2l0Y2ggKHN0YXR1cykge1xuICAgIGNhc2UgJ2NvbXBsZXRlZCc6XG4gICAgICByZXR1cm4gJ2NvbXBsZXRlZCdcbiAgICBjYXNlICdkZXByZWNhdGVkJzpcbiAgICAgIHJldHVybiAnZGVwcmVjYXRlZCdcbiAgICBjYXNlICdvbmdvaW5nJzpcbiAgICAgIHJldHVybiAnb25Hb2luZydcbiAgICBjYXNlICdyZW1vdmVkJzpcbiAgICAgIHJldHVybiAncmVtb3ZlZCdcbiAgICBjYXNlICd1bmRlcl9kZXZlbG9wbWVudCc6XG4gICAgICByZXR1cm4gJ3VuZGVyRGV2ZWxvcG1lbnQnXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENvdWxkIG5vdCBkZXRlcm1pbmUgcHJvZ3Jlc3MgY29kZSBmcm9tIHN0YXR1czogJHtzdGF0dXN9YFxuICAgICAgKVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldFJvbGVDb2RlKHJvbGU6IFJvbGUpOiBzdHJpbmcge1xuICBzd2l0Y2ggKHJvbGUpIHtcbiAgICBjYXNlICdhdXRob3InOlxuICAgICAgcmV0dXJuICdhdXRob3InXG4gICAgY2FzZSAnY29sbGFib3JhdG9yJzpcbiAgICAgIHJldHVybiAnY29sbGFib3JhdG9yJ1xuICAgIGNhc2UgJ2NvbnRyaWJ1dG9yJzpcbiAgICAgIHJldHVybiAnY29udHJpYnV0b3InXG4gICAgY2FzZSAnY3VzdG9kaWFuJzpcbiAgICAgIHJldHVybiAnY3VzdG9kaWFuJ1xuICAgIGNhc2UgJ2Rpc3RyaWJ1dG9yJzpcbiAgICAgIHJldHVybiAnZGlzdHJpYnV0b3InXG4gICAgY2FzZSAnZWRpdG9yJzpcbiAgICAgIHJldHVybiAnZWRpdG9yJ1xuICAgIGNhc2UgJ2Z1bmRlcic6XG4gICAgICByZXR1cm4gJ2Z1bmRlcidcbiAgICBjYXNlICdtZWRpYXRvcic6XG4gICAgICByZXR1cm4gJ21lZGlhdG9yJ1xuICAgIGNhc2UgJ29yaWdpbmF0b3InOlxuICAgICAgcmV0dXJuICdvcmlnaW5hdG9yJ1xuICAgIGNhc2UgJ290aGVyJzpcbiAgICAgIHJldHVybiAnb3RoZXInXG4gICAgY2FzZSAnb3duZXInOlxuICAgICAgcmV0dXJuICdvd25lcidcbiAgICBjYXNlICdwb2ludF9vZl9jb250YWN0JzpcbiAgICAgIHJldHVybiAncG9pbnRPZkNvbnRhY3QnXG4gICAgY2FzZSAncHJpbmNpcGFsX2ludmVzdGlnYXRvcic6XG4gICAgICByZXR1cm4gJ3ByaW5jaXBhbEludmVzdGlnYXRvcidcbiAgICBjYXNlICdwcm9jZXNzb3InOlxuICAgICAgcmV0dXJuICdwcm9jZXNzb3InXG4gICAgY2FzZSAncHVibGlzaGVyJzpcbiAgICAgIHJldHVybiAncHVibGlzaGVyJ1xuICAgIGNhc2UgJ3Jlc291cmNlX3Byb3ZpZGVyJzpcbiAgICAgIHJldHVybiAncmVzb3VyY2VQcm92aWRlcidcbiAgICBjYXNlICdyaWdodHNfaG9sZGVyJzpcbiAgICAgIHJldHVybiAncmlnaHRzSG9sZGVyJ1xuICAgIGNhc2UgJ3Nwb25zb3InOlxuICAgICAgcmV0dXJuICdzcG9uc29yJ1xuICAgIGNhc2UgJ3N0YWtlaG9sZGVyJzpcbiAgICAgIHJldHVybiAnc3Rha2Vob2xkZXInXG4gICAgY2FzZSAndW5zcGVjaWZpZWQnOlxuICAgICAgcmV0dXJuICd1bnNwZWNpZmllZCdcbiAgICBjYXNlICd1c2VyJzpcbiAgICAgIHJldHVybiAndXNlcidcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZGV0ZXJtaW5lIHJvbGUgY29kZSBmcm9tIHJvbGU6ICR7cm9sZX1gKVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldERpc3RyaWJ1dGlvblByb3RvY29sKFxuICBkaXN0cmlidXRpb246IERhdGFzZXRTZXJ2aWNlRGlzdHJpYnV0aW9uXG4pOiBzdHJpbmcge1xuICBzd2l0Y2ggKGRpc3RyaWJ1dGlvbi5hY2Nlc3NTZXJ2aWNlUHJvdG9jb2wudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ3dmcyc6XG4gICAgICByZXR1cm4gJ09HQzpXRlMnXG4gICAgY2FzZSAnd21zJzpcbiAgICAgIHJldHVybiAnT0dDOldNUydcbiAgICBjYXNlICd3cHMnOlxuICAgICAgcmV0dXJuICdPR0M6V1BTJ1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZGlzdHJpYnV0aW9uLmFjY2Vzc1NlcnZpY2VQcm90b2NvbFxuICB9XG59XG5cbmZ1bmN0aW9uIGdldE1haW50ZW5hbmNlRnJlcXVlbmN5Q29kZShcbiAgdXBkYXRlRnJlcXVlbmN5OiBVcGRhdGVGcmVxdWVuY3lDb2RlXG4pOiBzdHJpbmcgfCBudWxsIHtcbiAgc3dpdGNoICh1cGRhdGVGcmVxdWVuY3kpIHtcbiAgICBjYXNlICdhc05lZWRlZCc6XG4gICAgICByZXR1cm4gJ2FzTmVlZGVkJ1xuICAgIGNhc2UgJ3Vua25vd24nOlxuICAgICAgcmV0dXJuICd1bmtub3duJ1xuICAgIGNhc2UgJ2lycmVndWxhcic6XG4gICAgICByZXR1cm4gJ2lycmVndWxhcidcbiAgICBjYXNlICdub3RQbGFubmVkJzpcbiAgICAgIHJldHVybiAnbm90UGxhbm5lZCdcbiAgICBjYXNlICdjb250aW51YWwnOlxuICAgICAgcmV0dXJuICdjb250aW51YWwnXG4gICAgY2FzZSAncGVyaW9kaWMnOlxuICAgICAgcmV0dXJuICdwZXJpb2RpYydcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRJU09EdXJhdGlvbih1cGRhdGVGcmVxdWVuY3k6IFVwZGF0ZUZyZXF1ZW5jeUN1c3RvbSk6IHN0cmluZyB7XG4gIGNvbnN0IGR1cmF0aW9uID0ge1xuICAgIHllYXJzOiAwLFxuICAgIG1vbnRoczogMCxcbiAgICB3ZWVrczogMCxcbiAgICBkYXlzOiAwLFxuICAgIGhvdXJzOiAwLFxuICB9XG4gIHN3aXRjaCAodXBkYXRlRnJlcXVlbmN5LnBlcikge1xuICAgIGNhc2UgJ2RheSc6XG4gICAgICBpZiAodXBkYXRlRnJlcXVlbmN5LnVwZGF0ZWRUaW1lcyA8PSAxKSBkdXJhdGlvbi5kYXlzID0gMVxuICAgICAgZWxzZSBkdXJhdGlvbi5ob3VycyA9IE1hdGgucm91bmQoMjQgLyB1cGRhdGVGcmVxdWVuY3kudXBkYXRlZFRpbWVzKVxuICAgICAgYnJlYWtcbiAgICBjYXNlICd3ZWVrJzpcbiAgICAgIGR1cmF0aW9uLmRheXMgPSBNYXRoLnJvdW5kKDcgLyB1cGRhdGVGcmVxdWVuY3kudXBkYXRlZFRpbWVzKVxuICAgICAgYnJlYWtcbiAgICBjYXNlICdtb250aCc6XG4gICAgICBpZiAodXBkYXRlRnJlcXVlbmN5LnVwZGF0ZWRUaW1lcyA8PSAxKSBkdXJhdGlvbi5tb250aHMgPSAxXG4gICAgICBlbHNlIGR1cmF0aW9uLmRheXMgPSBNYXRoLnJvdW5kKDMwIC8gdXBkYXRlRnJlcXVlbmN5LnVwZGF0ZWRUaW1lcylcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAneWVhcic6XG4gICAgICBpZiAodXBkYXRlRnJlcXVlbmN5LnVwZGF0ZWRUaW1lcyA8PSAxKSBkdXJhdGlvbi55ZWFycyA9IDFcbiAgICAgIGVsc2UgZHVyYXRpb24ubW9udGhzID0gTWF0aC5yb3VuZCgxMiAvIHVwZGF0ZUZyZXF1ZW5jeS51cGRhdGVkVGltZXMpXG4gICAgICBicmVha1xuICB9XG4gIGNvbnN0IGhvdXJzID0gZHVyYXRpb24uaG91cnMgPiAwID8gYFQke2R1cmF0aW9uLmhvdXJzfUhgIDogJydcbiAgcmV0dXJuIGBQJHtkdXJhdGlvbi55ZWFyc31ZJHtkdXJhdGlvbi5tb250aHN9TSR7ZHVyYXRpb24uZGF5c31EJHtob3Vyc31gXG59XG5cbmZ1bmN0aW9uIGFwcGVuZFJlc3BvbnNpYmxlUGFydHkoY29udGFjdDogSW5kaXZpZHVhbCkge1xuICBjb25zdCBuYW1lID1cbiAgICBjb250YWN0Lmxhc3ROYW1lICYmIGNvbnRhY3QuZmlyc3ROYW1lXG4gICAgICA/IGAke2NvbnRhY3QuZmlyc3ROYW1lfSAke2NvbnRhY3QubGFzdE5hbWV9YFxuICAgICAgOiBjb250YWN0Lmxhc3ROYW1lIHx8IGNvbnRhY3QuZmlyc3ROYW1lIHx8IG51bGxcbiAgcmV0dXJuIGFwcGVuZENoaWxkcmVuKFxuICAgIHBpcGUoXG4gICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6Q0lfUmVzcG9uc2libGVQYXJ0eScpLFxuICAgICAgbmFtZVxuICAgICAgICA/IGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOmluZGl2aWR1YWxOYW1lJyksXG4gICAgICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKG5hbWUpXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICA6IG5vb3AsXG4gICAgICBjb250YWN0LnBvc2l0aW9uXG4gICAgICAgID8gYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6cG9zaXRpb25OYW1lJyksXG4gICAgICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKGNvbnRhY3QucG9zaXRpb24pXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICA6IG5vb3AsXG4gICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6b3JnYW5pc2F0aW9uTmFtZScpLFxuICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKGNvbnRhY3Qub3JnYW5pemF0aW9uLm5hbWUpXG4gICAgICAgICksXG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOmNvbnRhY3RJbmZvJyksXG4gICAgICAgICAgY3JlYXRlQ2hpbGQoJ2dtZDpDSV9Db250YWN0JyksXG4gICAgICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6YWRkcmVzcycpLFxuICAgICAgICAgICAgICBjcmVhdGVDaGlsZCgnZ21kOkNJX0FkZHJlc3MnKSxcbiAgICAgICAgICAgICAgY3JlYXRlQ2hpbGQoJ2dtZDplbGVjdHJvbmljTWFpbEFkZHJlc3MnKSxcbiAgICAgICAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcoY29udGFjdC5lbWFpbClcbiAgICAgICAgICAgIClcbiAgICAgICAgICApLFxuICAgICAgICAgICd3ZWJzaXRlJyBpbiBjb250YWN0Lm9yZ2FuaXphdGlvblxuICAgICAgICAgICAgPyBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOm9ubGluZVJlc291cmNlJyksXG4gICAgICAgICAgICAgICAgICBjcmVhdGVDaGlsZCgnZ21kOkNJX09ubGluZVJlc291cmNlJyksXG4gICAgICAgICAgICAgICAgICB3cml0ZUxpbmthZ2UoY29udGFjdC5vcmdhbml6YXRpb24ud2Vic2l0ZSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogbm9vcFxuICAgICAgICApLFxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpyb2xlJyksXG4gICAgICAgICAgY3JlYXRlQ2hpbGQoJ2dtZDpDSV9Sb2xlQ29kZScpLFxuICAgICAgICAgIGFkZEF0dHJpYnV0ZShcbiAgICAgICAgICAgICdjb2RlTGlzdCcsXG4gICAgICAgICAgICAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTEzOS9yZXNvdXJjZXMvZ214Q29kZWxpc3RzLnhtbCNDSV9Sb2xlQ29kZSdcbiAgICAgICAgICApLFxuICAgICAgICAgIGFkZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsIGdldFJvbGVDb2RlKGNvbnRhY3Qucm9sZSkpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuZnVuY3Rpb24gdXBkYXRlQ2l0YXRpb25EYXRlKGRhdGU6IERhdGUsIHR5cGU6ICdyZXZpc2lvbicgfCAnY3JlYXRpb24nKSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGZpbmROZXN0ZWRFbGVtZW50cygnZ21kOmRhdGUnLCAnZ21kOkNJX0RhdGUnKSxcbiAgICBmaWx0ZXJBcnJheShcbiAgICAgIHBpcGUoXG4gICAgICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpDSV9EYXRlVHlwZUNvZGUnKSxcbiAgICAgICAgcmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpLFxuICAgICAgICBtYXAoKHZhbHVlKSA9PiB2YWx1ZSA9PT0gdHlwZSlcbiAgICAgIClcbiAgICApLFxuICAgIGdldEF0SW5kZXgoMCksXG4gICAgZmluZENoaWxkRWxlbWVudCgnZ21kOmRhdGUnKSxcbiAgICByZW1vdmVBbGxDaGlsZHJlbigpLFxuICAgIHdyaXRlRGF0ZVRpbWUoZGF0ZSlcbiAgKVxufVxuXG5mdW5jdGlvbiBhcHBlbmRDaXRhdGlvbkRhdGUoZGF0ZSwgdHlwZTogJ3JldmlzaW9uJyB8ICdjcmVhdGlvbicpIHtcbiAgcmV0dXJuIGFwcGVuZENoaWxkcmVuKFxuICAgIHBpcGUoXG4gICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6ZGF0ZScpLFxuICAgICAgY3JlYXRlQ2hpbGQoJ2dtZDpDSV9EYXRlJyksXG4gICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgcGlwZShjcmVhdGVFbGVtZW50KCdnbWQ6ZGF0ZScpLCB3cml0ZURhdGVUaW1lKGRhdGUpKSxcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6ZGF0ZVR5cGUnKSxcbiAgICAgICAgICBjcmVhdGVDaGlsZCgnZ21kOkNJX0RhdGVUeXBlQ29kZScpLFxuICAgICAgICAgIGFkZEF0dHJpYnV0ZShcbiAgICAgICAgICAgICdjb2RlTGlzdCcsXG4gICAgICAgICAgICAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTEzOS9yZXNvdXJjZXMvZ214Q29kZWxpc3RzLnhtbCNDSV9EYXRlVHlwZUNvZGUnXG4gICAgICAgICAgKSxcbiAgICAgICAgICBhZGRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCB0eXBlKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmZ1bmN0aW9uIHJlbW92ZUtleXdvcmRzKHR5cGU6IHN0cmluZyB8IG51bGwpIHtcbiAgcmV0dXJuIHJlbW92ZUNoaWxkcmVuKFxuICAgIHBpcGUoXG4gICAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDpkZXNjcmlwdGl2ZUtleXdvcmRzJyksXG4gICAgICBmaWx0ZXJBcnJheShcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBmaW5kTmVzdGVkRWxlbWVudChcbiAgICAgICAgICAgICdnbWQ6TURfS2V5d29yZHMnLFxuICAgICAgICAgICAgJ2dtZDp0eXBlJyxcbiAgICAgICAgICAgICdnbWQ6TURfS2V5d29yZFR5cGVDb2RlJ1xuICAgICAgICAgICksXG4gICAgICAgICAgcmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpLFxuICAgICAgICAgIC8vIGlmIGEgc3BlY2lmaWMgdHlwZSBpcyB0YXJnZXRlZCwgY29tcGFyZSB3aXRoIGl0OyBvdGhlcndpc2UgcmVtb3ZlIGtleXdvcmRzIGlmIHRoZXkgaGF2ZSBubyB0eXBlIGRlZmluZWRcbiAgICAgICAgICBtYXAoKHR5cGVWYWx1ZSkgPT4gKHR5cGUgIT09IG51bGwgPyB0eXBlID09PSB0eXBlVmFsdWUgOiB0cnVlKSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5mdW5jdGlvbiBhcHBlbmRLZXl3b3JkcyhrZXl3b3Jkczogc3RyaW5nW10sIHR5cGU6IHN0cmluZyB8IG51bGwpIHtcbiAgcmV0dXJuIGFwcGVuZENoaWxkcmVuKFxuICAgIHBpcGUoXG4gICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6ZGVzY3JpcHRpdmVLZXl3b3JkcycpLFxuICAgICAgY3JlYXRlQ2hpbGQoJ2dtZDpNRF9LZXl3b3JkcycpLFxuICAgICAgdHlwZSAhPT0gbnVsbFxuICAgICAgICA/IGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOnR5cGUnKSxcbiAgICAgICAgICAgICAgY3JlYXRlQ2hpbGQoJ2dtZDpNRF9LZXl3b3JkVHlwZUNvZGUnKSxcbiAgICAgICAgICAgICAgYWRkQXR0cmlidXRlKFxuICAgICAgICAgICAgICAgICdjb2RlTGlzdCcsXG4gICAgICAgICAgICAgICAgJ2h0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMzkvcmVzb3VyY2VzL2dteENvZGVsaXN0cy54bWwjTURfS2V5d29yZFR5cGVDb2RlJ1xuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBhZGRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCB0eXBlKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgOiBub29wLFxuICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgIC4uLmtleXdvcmRzLm1hcCgoa2V5d29yZCkgPT5cbiAgICAgICAgICBwaXBlKGNyZWF0ZUVsZW1lbnQoJ2dtZDprZXl3b3JkJyksIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKGtleXdvcmQpKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbnN0cmFpbnQoXG4gIGNvbnN0cmFpbnQ6IENvbnN0cmFpbnQsXG4gIHR5cGU6ICdsZWdhbCcgfCAnc2VjdXJpdHknIHwgJ290aGVyJ1xuKSB7XG4gIGlmICh0eXBlID09PSAnc2VjdXJpdHknKSB7XG4gICAgcmV0dXJuIHBpcGUoXG4gICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6cmVzb3VyY2VDb25zdHJhaW50cycpLFxuICAgICAgY3JlYXRlQ2hpbGQoJ2dtZDpNRF9TZWN1cml0eUNvbnN0cmFpbnRzJyksXG4gICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6Y2xhc3NpZmljYXRpb24nKSxcbiAgICAgICAgICBjcmVhdGVDaGlsZCgnZ21kOk1EX0NsYXNzaWZpY2F0aW9uQ29kZScpLFxuICAgICAgICAgIGFkZEF0dHJpYnV0ZShcbiAgICAgICAgICAgICdjb2RlTGlzdCcsXG4gICAgICAgICAgICAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTEzOS9yZXNvdXJjZXMvZ214Q29kZWxpc3RzLnhtbCNNRF9DbGFzc2lmaWNhdGlvbkNvZGUnXG4gICAgICAgICAgKSxcbiAgICAgICAgICBhZGRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCAncmVzdHJpY3RlZCcpXG4gICAgICAgICksXG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOnVzZUxpbWl0YXRpb24nKSxcbiAgICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhjb25zdHJhaW50LnRleHQpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2xlZ2FsJykge1xuICAgIHJldHVybiBwaXBlKFxuICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOnJlc291cmNlQ29uc3RyYWludHMnKSxcbiAgICAgIGNyZWF0ZUNoaWxkKCdnbWQ6TURfTGVnYWxDb25zdHJhaW50cycpLFxuICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOmFjY2Vzc0NvbnN0cmFpbnRzJyksXG4gICAgICAgICAgY3JlYXRlQ2hpbGQoJ2dtZDpNRF9SZXN0cmljdGlvbkNvZGUnKSxcbiAgICAgICAgICBhZGRBdHRyaWJ1dGUoXG4gICAgICAgICAgICAnY29kZUxpc3QnLFxuICAgICAgICAgICAgJ2h0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMzkvcmVzb3VyY2VzL2dteENvZGVsaXN0cy54bWwjTURfUmVzdHJpY3Rpb25Db2RlJ1xuICAgICAgICAgICksXG4gICAgICAgICAgYWRkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJywgJ290aGVyUmVzdHJpY3Rpb25zJylcbiAgICAgICAgKSxcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6b3RoZXJDb25zdHJhaW50cycpLFxuICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKGNvbnN0cmFpbnQudGV4dClcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgfVxuXG4gIHJldHVybiBwaXBlKFxuICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpyZXNvdXJjZUNvbnN0cmFpbnRzJyksXG4gICAgY3JlYXRlQ2hpbGQoJ2dtZDpNRF9Db25zdHJhaW50cycpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgcGlwZShcbiAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOnVzZUxpbWl0YXRpb24nKSxcbiAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcoY29uc3RyYWludC50ZXh0KVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5mdW5jdGlvbiByZW1vdmVPdGhlckNvbnN0cmFpbnRzKCkge1xuICByZXR1cm4gcmVtb3ZlQ2hpbGRyZW4oXG4gICAgcGlwZShcbiAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpyZXNvdXJjZUNvbnN0cmFpbnRzJyksXG4gICAgICBmaWx0ZXJBcnJheShcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDpNRF9Db25zdHJhaW50cycsICdnbWQ6dXNlTGltaXRhdGlvbicpLFxuICAgICAgICAgIChhcnJheSkgPT4gYXJyYXkubGVuZ3RoID4gMFxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmZ1bmN0aW9uIHJlbW92ZVNlY3VyaXR5Q29uc3RyYWludHMoKSB7XG4gIHJldHVybiByZW1vdmVDaGlsZHJlbihcbiAgICBwaXBlKFxuICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOnJlc291cmNlQ29uc3RyYWludHMnKSxcbiAgICAgIGZpbHRlckFycmF5KFxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGZpbmROZXN0ZWRFbGVtZW50cygnZ21kOk1EX1NlY3VyaXR5Q29uc3RyYWludHMnLCAnZ21kOnVzZUxpbWl0YXRpb24nKSxcbiAgICAgICAgICAoYXJyYXkpID0+IGFycmF5Lmxlbmd0aCA+IDBcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5mdW5jdGlvbiByZW1vdmVMZWdhbENvbnN0cmFpbnRzKCkge1xuICByZXR1cm4gcmVtb3ZlQ2hpbGRyZW4oXG4gICAgcGlwZShcbiAgICAgIGZpbmRDaGlsZHJlbkVsZW1lbnQoJ2dtZDpyZXNvdXJjZUNvbnN0cmFpbnRzJyksXG4gICAgICBmaWx0ZXJBcnJheShcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBmaW5kTmVzdGVkRWxlbWVudHMoXG4gICAgICAgICAgICAnZ21kOk1EX0xlZ2FsQ29uc3RyYWludHMnLFxuICAgICAgICAgICAgJ2dtZDphY2Nlc3NDb25zdHJhaW50cycsXG4gICAgICAgICAgICAnZ21kOk1EX1Jlc3RyaWN0aW9uQ29kZSdcbiAgICAgICAgICApLFxuICAgICAgICAgIG1hcEFycmF5KHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKSksXG4gICAgICAgICAgKHJlc3RyaWN0aW9uQ29kZXMpID0+XG4gICAgICAgICAgICByZXN0cmljdGlvbkNvZGVzLmV2ZXJ5KChjb2RlKSA9PiBjb2RlICE9PSAnbGljZW5zZScpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuZnVuY3Rpb24gcmVtb3ZlTGljZW5zZXMoKSB7XG4gIHJldHVybiByZW1vdmVDaGlsZHJlbihcbiAgICBwaXBlKFxuICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOnJlc291cmNlQ29uc3RyYWludHMnKSxcbiAgICAgIGZpbHRlckFycmF5KFxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGZpbmROZXN0ZWRFbGVtZW50cyhcbiAgICAgICAgICAgICdnbWQ6TURfTGVnYWxDb25zdHJhaW50cycsXG4gICAgICAgICAgICAnZ21kOmFjY2Vzc0NvbnN0cmFpbnRzJyxcbiAgICAgICAgICAgICdnbWQ6TURfUmVzdHJpY3Rpb25Db2RlJ1xuICAgICAgICAgICksXG4gICAgICAgICAgbWFwQXJyYXkocmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpKSxcbiAgICAgICAgICAocmVzdHJpY3Rpb25Db2RlcykgPT5cbiAgICAgICAgICAgIHJlc3RyaWN0aW9uQ29kZXMuc29tZSgoY29kZSkgPT4gY29kZSA9PT0gJ2xpY2Vuc2UnKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUxpY2Vuc2UobGljZW5zZTogQ29uc3RyYWludCkge1xuICByZXR1cm4gcGlwZShcbiAgICBjcmVhdGVFbGVtZW50KCdnbWQ6cmVzb3VyY2VDb25zdHJhaW50cycpLFxuICAgIGNyZWF0ZUNoaWxkKCdnbWQ6TURfTGVnYWxDb25zdHJhaW50cycpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgcGlwZShcbiAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOmFjY2Vzc0NvbnN0cmFpbnRzJyksXG4gICAgICAgIGNyZWF0ZUNoaWxkKCdnbWQ6TURfUmVzdHJpY3Rpb25Db2RlJyksXG4gICAgICAgIGFkZEF0dHJpYnV0ZShcbiAgICAgICAgICAnY29kZUxpc3QnLFxuICAgICAgICAgICdodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLzE5MTM5L3Jlc291cmNlcy9nbXhDb2RlbGlzdHMueG1sI01EX1Jlc3RyaWN0aW9uQ29kZSdcbiAgICAgICAgKSxcbiAgICAgICAgYWRkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJywgJ2xpY2Vuc2UnKVxuICAgICAgKSxcbiAgICAgIHBpcGUoXG4gICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDphY2Nlc3NDb25zdHJhaW50cycpLFxuICAgICAgICBjcmVhdGVDaGlsZCgnZ21kOk1EX1Jlc3RyaWN0aW9uQ29kZScpLFxuICAgICAgICBhZGRBdHRyaWJ1dGUoXG4gICAgICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICAgICAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTEzOS9yZXNvdXJjZXMvZ214Q29kZWxpc3RzLnhtbCNNRF9SZXN0cmljdGlvbkNvZGUnXG4gICAgICAgICksXG4gICAgICAgIGFkZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsICdvdGhlclJlc3RyaWN0aW9ucycpXG4gICAgICApLFxuICAgICAgcGlwZShcbiAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOm90aGVyQ29uc3RyYWludHMnKSxcbiAgICAgICAgJ3VybCcgaW4gbGljZW5zZVxuICAgICAgICAgID8gd3JpdGVBbmNob3IobGljZW5zZS51cmwsIGxpY2Vuc2UudGV4dClcbiAgICAgICAgICA6IHdyaXRlQ2hhcmFjdGVyU3RyaW5nKGxpY2Vuc2UudGV4dClcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuZnVuY3Rpb24gcmVtb3ZlRGlzdHJpYnV0aW9ucygpIHtcbiAgcmV0dXJuIHBpcGUocmVtb3ZlQ2hpbGRyZW5CeU5hbWUoJ2dtZDpkaXN0cmlidXRpb25JbmZvJykpXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZURpc3RyaWJ1dGlvbihkaXN0cmlidXRpb246IERhdGFzZXREaXN0cmlidXRpb24pIHtcbiAgY29uc3QgYXBwZW5kRGlzdHJpYnV0aW9uRm9ybWF0ID1cbiAgICAnbWltZVR5cGUnIGluIGRpc3RyaWJ1dGlvblxuICAgICAgPyBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOmRpc3RyaWJ1dGlvbkZvcm1hdCcpLFxuICAgICAgICAgICAgY3JlYXRlQ2hpbGQoJ2dtZDpNRF9Gb3JtYXQnKSxcbiAgICAgICAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpuYW1lJyksXG4gICAgICAgICAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcoZGlzdHJpYnV0aW9uLm1pbWVUeXBlKVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDp2ZXJzaW9uJyksXG4gICAgICAgICAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcoJzEuMCcpIC8vIGhhcmRjb2RpbmcgdGhpcyBhcyBpdCBtb3N0IGxpa2VseSB3b24ndCBiZSB1c2VkIGJ1dCBpcyBtYW5kYXRvcnlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgOiBub29wXG5cbiAgbGV0IGxpbmthZ2VVcmwsIG5hbWUsIGZ1bmN0aW9uQ29kZSwgcHJvdG9jb2xcbiAgaWYgKGRpc3RyaWJ1dGlvbi50eXBlID09PSAnc2VydmljZScpIHtcbiAgICBsaW5rYWdlVXJsID0gZGlzdHJpYnV0aW9uLnVybC50b1N0cmluZygpXG4gICAgbmFtZSA9IGRpc3RyaWJ1dGlvbi5pZGVudGlmaWVySW5TZXJ2aWNlIC8vIHRoaXMgaXMgZm9yIEdlb05ldHdvcmsgdG8ga25vdyB0aGUgbGF5ZXIgbmFtZVxuICAgIGZ1bmN0aW9uQ29kZSA9ICdkb3dubG9hZCdcbiAgICBwcm90b2NvbCA9IGdldERpc3RyaWJ1dGlvblByb3RvY29sKGRpc3RyaWJ1dGlvbilcbiAgfSBlbHNlIGlmIChkaXN0cmlidXRpb24udHlwZSA9PT0gJ2Rvd25sb2FkJykge1xuICAgIGxpbmthZ2VVcmwgPSBkaXN0cmlidXRpb24udXJsLnRvU3RyaW5nKClcbiAgICBuYW1lID0gZGlzdHJpYnV0aW9uLm5hbWVcbiAgICBmdW5jdGlvbkNvZGUgPSAnZG93bmxvYWQnXG4gICAgcHJvdG9jb2wgPSAnV1dXOkRPV05MT0FEJ1xuICB9IGVsc2Uge1xuICAgIGxpbmthZ2VVcmwgPSBkaXN0cmlidXRpb24udXJsLnRvU3RyaW5nKClcbiAgICBuYW1lID0gZGlzdHJpYnV0aW9uLm5hbWVcbiAgICBmdW5jdGlvbkNvZGUgPSAnaW5mb3JtYXRpb24nXG4gICAgcHJvdG9jb2wgPSAnV1dXOkxJTksnXG4gIH1cbiAgY29uc3QgYXBwZW5kVHJhbnNmZXJPcHRpb25zID0gYXBwZW5kQ2hpbGRyZW4oXG4gICAgcGlwZShcbiAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDp0cmFuc2Zlck9wdGlvbnMnKSxcbiAgICAgIGNyZWF0ZUNoaWxkKCdnbWQ6TURfRGlnaXRhbFRyYW5zZmVyT3B0aW9ucycpLFxuICAgICAgY3JlYXRlQ2hpbGQoJ2dtZDpvbkxpbmUnKSxcbiAgICAgIGNyZWF0ZUNoaWxkKCdnbWQ6Q0lfT25saW5lUmVzb3VyY2UnKSxcbiAgICAgIHdyaXRlTGlua2FnZShsaW5rYWdlVXJsKSxcbiAgICAgICdkZXNjcmlwdGlvbicgaW4gZGlzdHJpYnV0aW9uXG4gICAgICAgID8gYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6ZGVzY3JpcHRpb24nKSxcbiAgICAgICAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcoZGlzdHJpYnV0aW9uLmRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgOiBub29wLFxuICAgICAgbmFtZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgICBwaXBlKGNyZWF0ZUVsZW1lbnQoJ2dtZDpuYW1lJyksIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKG5hbWUpKVxuICAgICAgICAgIClcbiAgICAgICAgOiBub29wLFxuICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgIHBpcGUoY3JlYXRlRWxlbWVudCgnZ21kOnByb3RvY29sJyksIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKHByb3RvY29sKSksXG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOmZ1bmN0aW9uJyksXG4gICAgICAgICAgY3JlYXRlQ2hpbGQoJ2dtZDpDSV9PbkxpbmVGdW5jdGlvbkNvZGUnKSxcbiAgICAgICAgICBhZGRBdHRyaWJ1dGUoXG4gICAgICAgICAgICAnY29kZUxpc3QnLFxuICAgICAgICAgICAgJ2h0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMzkvcmVzb3VyY2VzL2dteENvZGVsaXN0cy54bWwjQ0lfT25MaW5lRnVuY3Rpb25Db2RlJ1xuICAgICAgICAgICksXG4gICAgICAgICAgYWRkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJywgZnVuY3Rpb25Db2RlKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG4gIHJldHVybiBwaXBlKFxuICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpkaXN0cmlidXRpb25JbmZvJyksXG4gICAgY3JlYXRlQ2hpbGQoJ2dtZDpNRF9EaXN0cmlidXRpb24nKSxcbiAgICBhcHBlbmREaXN0cmlidXRpb25Gb3JtYXQsXG4gICAgYXBwZW5kVHJhbnNmZXJPcHRpb25zXG4gIClcbn1cblxuLyoqXG4gKiBMb29rcyBmb3Igc3J2OlNWX1NlcnZpY2VJZGVudGlmaWNhdGlvbiBvciBnbWQ6TURfRGF0YUlkZW50aWZpY2F0aW9uIGVsZW1lbnRcbiAqIGRlcGVuZGluZyBvbiByZWNvcmQgdHlwZSwgY3JlYXRlIGlmIG1pc3NpbmdcbiAqL1xuZnVuY3Rpb24gZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSB7XG4gIHJldHVybiAocm9vdEVsOiBYbWxFbGVtZW50KSA9PiB7XG4gICAgY29uc3Qga2luZCA9IHJlYWRLaW5kKHJvb3RFbClcbiAgICBsZXQgZWx0TmFtZSA9ICdnbWQ6TURfRGF0YUlkZW50aWZpY2F0aW9uJ1xuICAgIGlmIChraW5kID09PSAnc2VydmljZScpIGVsdE5hbWUgPSAnc3J2OlNWX1NlcnZpY2VJZGVudGlmaWNhdGlvbidcbiAgICByZXR1cm4gZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoJ2dtZDppZGVudGlmaWNhdGlvbkluZm8nLCBlbHROYW1lKShyb290RWwpXG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZE9yQ3JlYXRlRGlzdHJpYnV0aW9uKCkge1xuICByZXR1cm4gKHJvb3RFbDogWG1sRWxlbWVudCkgPT4ge1xuICAgIHJldHVybiBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZShcbiAgICAgICdnbWQ6ZGlzdHJpYnV0aW9uSW5mbycsXG4gICAgICAnZ21kOk1EX0Rpc3RyaWJ1dGlvbidcbiAgICApKHJvb3RFbClcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVVbmlxdWVJZGVudGlmaWVyKFxuICByZWNvcmQ6IENhdGFsb2dSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHBpcGUoXG4gICAgZmluZENoaWxkT3JDcmVhdGUoJ2dtZDpmaWxlSWRlbnRpZmllcicpLFxuICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKHJlY29yZC51bmlxdWVJZGVudGlmaWVyKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlS2luZChyZWNvcmQ6IENhdGFsb2dSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIGZpbmROZXN0ZWRDaGlsZE9yQ3JlYXRlKCdnbWQ6aGllcmFyY2h5TGV2ZWwnLCAnZ21kOk1EX1Njb3BlQ29kZScpLFxuICAgIGFkZEF0dHJpYnV0ZShcbiAgICAgICdjb2RlTGlzdCcsXG4gICAgICAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTEzOS9yZXNvdXJjZXMvZ214Q29kZWxpc3RzLnhtbCNNRF9TY29wZUNvZGUnXG4gICAgKSxcbiAgICBhZGRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCByZWNvcmQua2luZClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZU93bmVyT3JnYW5pemF0aW9uKFxuICByZWNvcmQ6IENhdGFsb2dSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIC8vIGlmIG5vIGNvbnRhY3QgbWF0Y2hlcyB0aGUgb3duZXIgb3JnLCBjcmVhdGUgYW4gZW1wdHkgb25lXG4gIGNvbnN0IG93bmVyQ29udGFjdDogSW5kaXZpZHVhbCA9IHJlY29yZC5jb250YWN0cy5maW5kKFxuICAgIChjb250YWN0KSA9PiBjb250YWN0Lm9yZ2FuaXphdGlvbi5uYW1lID09PSByZWNvcmQub3duZXJPcmdhbml6YXRpb24ubmFtZVxuICApXG4gIHBpcGUoXG4gICAgZmluZENoaWxkT3JDcmVhdGUoJ2dtZDpjb250YWN0JyksXG4gICAgcmVtb3ZlQWxsQ2hpbGRyZW4oKSxcbiAgICBhcHBlbmRSZXNwb25zaWJsZVBhcnR5KFxuICAgICAgb3duZXJDb250YWN0XG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4ub3duZXJDb250YWN0LFxuICAgICAgICAgICAgLy8gb3duZXIgcmVzcG9uc2libGUgcGFydHkgaXMgYWx3YXlzIHBvaW50IG9mIGNvbnRhY3RcbiAgICAgICAgICAgIHJvbGU6ICdwb2ludF9vZl9jb250YWN0JyxcbiAgICAgICAgICB9XG4gICAgICAgIDoge1xuICAgICAgICAgICAgb3JnYW5pemF0aW9uOiByZWNvcmQub3duZXJPcmdhbml6YXRpb24sXG4gICAgICAgICAgICBlbWFpbDogJycsXG4gICAgICAgICAgICByb2xlOiAncG9pbnRfb2ZfY29udGFjdCcsXG4gICAgICAgICAgfVxuICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVJlY29yZFVwZGF0ZWQocmVjb3JkOiBDYXRhbG9nUmVjb3JkLCByb290RWw6IFhtbEVsZW1lbnQpIHtcbiAgcGlwZShcbiAgICBmaW5kQ2hpbGRPckNyZWF0ZSgnZ21kOmRhdGVTdGFtcCcpLFxuICAgIHJlbW92ZUFsbENoaWxkcmVuKCksXG4gICAgd3JpdGVEYXRlVGltZShyZWNvcmQucmVjb3JkVXBkYXRlZClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVRpdGxlKHJlY29yZDogQ2F0YWxvZ1JlY29yZCwgcm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZSgnZ21kOmNpdGF0aW9uJywgJ2dtZDpDSV9DaXRhdGlvbicsICdnbWQ6dGl0bGUnKSxcbiAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhyZWNvcmQudGl0bGUpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVBYnN0cmFjdChyZWNvcmQ6IENhdGFsb2dSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZENoaWxkT3JDcmVhdGUoJ2dtZDphYnN0cmFjdCcpLFxuICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKHJlY29yZC5hYnN0cmFjdClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVN0YXR1cyhyZWNvcmQ6IERhdGFzZXRSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoJ2dtZDpzdGF0dXMnLCAnZ21kOk1EX1Byb2dyZXNzQ29kZScpLFxuICAgIGFkZEF0dHJpYnV0ZShcbiAgICAgICdjb2RlTGlzdCcsXG4gICAgICAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTEzOS9yZXNvdXJjZXMvZ214Q29kZWxpc3RzLnhtbCNNRF9Qcm9ncmVzc0NvZGUnXG4gICAgKSxcbiAgICBhZGRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCBnZXRQcm9ncmVzc0NvZGUocmVjb3JkLnN0YXR1cykpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVDb250YWN0cyhyZWNvcmQ6IENhdGFsb2dSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgcmVtb3ZlQ2hpbGRyZW5CeU5hbWUoJ2dtZDpwb2ludE9mQ29udGFjdCcpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgLi4ucmVjb3JkLmNvbnRhY3RzLm1hcCgoY29udGFjdCkgPT5cbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6cG9pbnRPZkNvbnRhY3QnKSxcbiAgICAgICAgICBhcHBlbmRSZXNwb25zaWJsZVBhcnR5KGNvbnRhY3QpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVLZXl3b3JkcyhyZWNvcmQ6IENhdGFsb2dSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgcmVtb3ZlS2V5d29yZHMobnVsbCksXG4gICAgYXBwZW5kS2V5d29yZHMocmVjb3JkLmtleXdvcmRzLCBudWxsKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlVGhlbWVzKHJlY29yZDogQ2F0YWxvZ1JlY29yZCwgcm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICByZW1vdmVLZXl3b3JkcygndGhlbWUnKSxcbiAgICBhcHBlbmRLZXl3b3JkcyhyZWNvcmQudGhlbWVzLCAndGhlbWUnKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlTGljZW5zZXMocmVjb3JkOiBDYXRhbG9nUmVjb3JkLCByb290RWw6IFhtbEVsZW1lbnQpIHtcbiAgcGlwZShcbiAgICBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpLFxuICAgIHJlbW92ZUxpY2Vuc2VzKCksXG4gICAgYXBwZW5kQ2hpbGRyZW4oLi4ucmVjb3JkLmxpY2Vuc2VzLm1hcChjcmVhdGVMaWNlbnNlKSlcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUxlZ2FsQ29uc3RyYWludHMoXG4gIHJlY29yZDogQ2F0YWxvZ1JlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgcGlwZShcbiAgICBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpLFxuICAgIHJlbW92ZUxlZ2FsQ29uc3RyYWludHMoKSxcbiAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgIC4uLnJlY29yZC5sZWdhbENvbnN0cmFpbnRzLm1hcCgoYykgPT4gY3JlYXRlQ29uc3RyYWludChjLCAnbGVnYWwnKSlcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVTZWN1cml0eUNvbnN0cmFpbnRzKFxuICByZWNvcmQ6IENhdGFsb2dSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICByZW1vdmVTZWN1cml0eUNvbnN0cmFpbnRzKCksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAuLi5yZWNvcmQuc2VjdXJpdHlDb25zdHJhaW50cy5tYXAoKGMpID0+IGNyZWF0ZUNvbnN0cmFpbnQoYywgJ3NlY3VyaXR5JykpXG4gICAgKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlT3RoZXJDb25zdHJhaW50cyhcbiAgcmVjb3JkOiBDYXRhbG9nUmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgcmVtb3ZlT3RoZXJDb25zdHJhaW50cygpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgLi4ucmVjb3JkLm90aGVyQ29uc3RyYWludHMubWFwKChjKSA9PiBjcmVhdGVDb25zdHJhaW50KGMsICdvdGhlcicpKVxuICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVVwZGF0ZUZyZXF1ZW5jeShcbiAgcmVjb3JkOiBEYXRhc2V0UmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZENoaWxkT3JDcmVhdGUoJ2dtZDpyZXNvdXJjZU1haW50ZW5hbmNlJyksXG4gICAgcmVtb3ZlQWxsQ2hpbGRyZW4oKSxcbiAgICBmaW5kQ2hpbGRPckNyZWF0ZSgnZ21kOk1EX01haW50ZW5hbmNlSW5mb3JtYXRpb24nKSxcbiAgICB0eXBlb2YgcmVjb3JkLnVwZGF0ZUZyZXF1ZW5jeSA9PT0gJ29iamVjdCdcbiAgICAgID8gcGlwZShcbiAgICAgICAgICBjcmVhdGVDaGlsZCgnZ21kOnVzZXJEZWZpbmVkTWFpbnRlbmFuY2VGcmVxdWVuY3knKSxcbiAgICAgICAgICBjcmVhdGVDaGlsZCgnZ3RzOlRNX1BlcmlvZER1cmF0aW9uJyksXG4gICAgICAgICAgc2V0VGV4dENvbnRlbnQoZ2V0SVNPRHVyYXRpb24ocmVjb3JkLnVwZGF0ZUZyZXF1ZW5jeSkpXG4gICAgICAgIClcbiAgICAgIDogcGlwZShcbiAgICAgICAgICBjcmVhdGVDaGlsZCgnZ21kOm1haW50ZW5hbmNlQW5kVXBkYXRlRnJlcXVlbmN5JyksXG4gICAgICAgICAgY3JlYXRlQ2hpbGQoJ2dtZDpNRF9NYWludGVuYW5jZUZyZXF1ZW5jeUNvZGUnKSxcbiAgICAgICAgICBhZGRBdHRyaWJ1dGUoXG4gICAgICAgICAgICAnY29kZUxpc3QnLFxuICAgICAgICAgICAgJ2h0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMzkvcmVzb3VyY2VzL2dteENvZGVsaXN0cy54bWwjTURfTWFpbnRlbmFuY2VGcmVxdWVuY3lDb2RlJ1xuICAgICAgICAgICksXG4gICAgICAgICAgYWRkQXR0cmlidXRlKFxuICAgICAgICAgICAgJ2NvZGVMaXN0VmFsdWUnLFxuICAgICAgICAgICAgZ2V0TWFpbnRlbmFuY2VGcmVxdWVuY3lDb2RlKHJlY29yZC51cGRhdGVGcmVxdWVuY3kpXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVEYXRhc2V0Q3JlYXRlZChyZWNvcmQ6IERhdGFzZXRSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBpZiAoISgnZGF0YXNldENyZWF0ZWQnIGluIHJlY29yZCkpIHJldHVyblxuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoJ2dtZDpjaXRhdGlvbicsICdnbWQ6Q0lfQ2l0YXRpb24nKSxcbiAgICBmYWxsYmFjayhcbiAgICAgIHVwZGF0ZUNpdGF0aW9uRGF0ZShyZWNvcmQuZGF0YXNldENyZWF0ZWQsICdjcmVhdGlvbicpLFxuICAgICAgYXBwZW5kQ2l0YXRpb25EYXRlKHJlY29yZC5kYXRhc2V0Q3JlYXRlZCwgJ2NyZWF0aW9uJylcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVEYXRhc2V0VXBkYXRlZChyZWNvcmQ6IERhdGFzZXRSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBpZiAoISgnZGF0YXNldFVwZGF0ZWQnIGluIHJlY29yZCkpIHJldHVyblxuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoJ2dtZDpjaXRhdGlvbicsICdnbWQ6Q0lfQ2l0YXRpb24nKSxcbiAgICBmYWxsYmFjayhcbiAgICAgIHVwZGF0ZUNpdGF0aW9uRGF0ZShyZWNvcmQuZGF0YXNldFVwZGF0ZWQsICdyZXZpc2lvbicpLFxuICAgICAgYXBwZW5kQ2l0YXRpb25EYXRlKHJlY29yZC5kYXRhc2V0VXBkYXRlZCwgJ3JldmlzaW9uJylcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVTcGF0aWFsUmVwcmVzZW50YXRpb24oXG4gIHJlY29yZDogRGF0YXNldFJlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgcGlwZShcbiAgICBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmROZXN0ZWRDaGlsZE9yQ3JlYXRlKFxuICAgICAgJ2dtZDpzcGF0aWFsUmVwcmVzZW50YXRpb25UeXBlJyxcbiAgICAgICdnbWQ6TURfU3BhdGlhbFJlcHJlc2VudGF0aW9uVHlwZUNvZGUnXG4gICAgKSxcbiAgICBhZGRBdHRyaWJ1dGUoXG4gICAgICAnY29kZUxpc3QnLFxuICAgICAgJ2h0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMzkvcmVzb3VyY2VzL2dteENvZGVsaXN0cy54bWwjTURfU3BhdGlhbFJlcHJlc2VudGF0aW9uVHlwZUNvZGUnXG4gICAgKSxcbiAgICBhZGRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCByZWNvcmQuc3BhdGlhbFJlcHJlc2VudGF0aW9uKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlR3JhcGhpY092ZXJ2aWV3cyhcbiAgcmVjb3JkOiBEYXRhc2V0UmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgcmVtb3ZlQ2hpbGRyZW5CeU5hbWUoJ2dtZDpncmFwaGljT3ZlcnZpZXcnKSxcbiAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgIC4uLnJlY29yZC5vdmVydmlld3MubWFwKChvdmVydmlldykgPT5cbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6Z3JhcGhpY092ZXJ2aWV3JyksXG4gICAgICAgICAgY3JlYXRlQ2hpbGQoJ2dtZDpNRF9Ccm93c2VHcmFwaGljJyksXG4gICAgICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6ZmlsZU5hbWUnKSxcbiAgICAgICAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcob3ZlcnZpZXcudXJsLnRvU3RyaW5nKCkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSxcbiAgICAgICAgICAnZGVzY3JpcHRpb24nIGluIG92ZXJ2aWV3XG4gICAgICAgICAgICA/IGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6ZmlsZURlc2NyaXB0aW9uJyksXG4gICAgICAgICAgICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhvdmVydmlldy5kZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIDogbm9vcFxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlRGlzdHJpYnV0aW9ucyhyZWNvcmQ6IERhdGFzZXRSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIHJlbW92ZURpc3RyaWJ1dGlvbnMoKSxcbiAgICBhcHBlbmRDaGlsZHJlbiguLi5yZWNvcmQuZGlzdHJpYnV0aW9ucy5tYXAoY3JlYXRlRGlzdHJpYnV0aW9uKSlcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUxpbmVhZ2UocmVjb3JkOiBEYXRhc2V0UmVjb3JkLCByb290RWw6IFhtbEVsZW1lbnQpIHtcbiAgcGlwZShcbiAgICBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZShcbiAgICAgICdnbWQ6ZGF0YVF1YWxpdHlJbmZvJyxcbiAgICAgICdnbWQ6RFFfRGF0YVF1YWxpdHknLFxuICAgICAgJ2dtZDpsaW5lYWdlJyxcbiAgICAgICdnbWQ6TElfTGluZWFnZScsXG4gICAgICAnZ21kOnN0YXRlbWVudCdcbiAgICApLFxuICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKHJlY29yZC5saW5lYWdlKVxuICApKHJvb3RFbClcbn1cblxuZnVuY3Rpb24gZ2V0U2VydmljZUVuZHBvaW50UHJvdG9jb2woZW5kcG9pbnQ6IFNlcnZpY2VFbmRwb2ludCk6IHN0cmluZyB7XG4gIHN3aXRjaCAoZW5kcG9pbnQucHJvdG9jb2wudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ3dmcyc6XG4gICAgICByZXR1cm4gJ09HQzpXRlMnXG4gICAgY2FzZSAnd21zJzpcbiAgICAgIHJldHVybiAnT0dDOldNUydcbiAgICBjYXNlICd3cHMnOlxuICAgICAgcmV0dXJuICdPR0M6V1BTJ1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZW5kcG9pbnQucHJvdG9jb2xcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVPbmxpbmVSZXNvdXJjZShvbmxpbmVSZXNvdXJjZTogU2VydmljZU9ubGluZVJlc291cmNlKSB7XG4gIGxldCBsaW5rYWdlVXJsLCBmdW5jdGlvbkNvZGUsIHByb3RvY29sXG4gIGlmIChvbmxpbmVSZXNvdXJjZS50eXBlID09PSAnZW5kcG9pbnQnKSB7XG4gICAgbGlua2FnZVVybCA9IG9ubGluZVJlc291cmNlLmVuZHBvaW50VXJsLnRvU3RyaW5nKClcbiAgICBwcm90b2NvbCA9IGdldFNlcnZpY2VFbmRwb2ludFByb3RvY29sKG9ubGluZVJlc291cmNlKVxuICAgIGZ1bmN0aW9uQ29kZSA9ICdkb3dubG9hZCdcbiAgfSBlbHNlIHtcbiAgICBsaW5rYWdlVXJsID0gb25saW5lUmVzb3VyY2UudXJsLnRvU3RyaW5nKClcbiAgICBmdW5jdGlvbkNvZGUgPSAnaW5mb3JtYXRpb24nXG4gICAgcHJvdG9jb2wgPSAnV1dXOkxJTksnXG4gIH1cbiAgY29uc3QgYXBwZW5kVHJhbnNmZXJPcHRpb25zID0gYXBwZW5kQ2hpbGRyZW4oXG4gICAgcGlwZShcbiAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDp0cmFuc2Zlck9wdGlvbnMnKSxcbiAgICAgIGNyZWF0ZUNoaWxkKCdnbWQ6TURfRGlnaXRhbFRyYW5zZmVyT3B0aW9ucycpLFxuICAgICAgY3JlYXRlQ2hpbGQoJ2dtZDpvbkxpbmUnKSxcbiAgICAgIGNyZWF0ZUNoaWxkKCdnbWQ6Q0lfT25saW5lUmVzb3VyY2UnKSxcbiAgICAgIHdyaXRlTGlua2FnZShsaW5rYWdlVXJsKSxcbiAgICAgICdkZXNjcmlwdGlvbicgaW4gb25saW5lUmVzb3VyY2VcbiAgICAgICAgPyBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpkZXNjcmlwdGlvbicpLFxuICAgICAgICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhvbmxpbmVSZXNvdXJjZS5kZXNjcmlwdGlvbilcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIDogbm9vcCxcbiAgICAgICduYW1lJyBpbiBvbmxpbmVSZXNvdXJjZVxuICAgICAgICA/IGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOm5hbWUnKSxcbiAgICAgICAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcob25saW5lUmVzb3VyY2UubmFtZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIDogbm9vcCxcbiAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICBwaXBlKGNyZWF0ZUVsZW1lbnQoJ2dtZDpwcm90b2NvbCcpLCB3cml0ZUNoYXJhY3RlclN0cmluZyhwcm90b2NvbCkpLFxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpmdW5jdGlvbicpLFxuICAgICAgICAgIGNyZWF0ZUNoaWxkKCdnbWQ6Q0lfT25MaW5lRnVuY3Rpb25Db2RlJyksXG4gICAgICAgICAgYWRkQXR0cmlidXRlKFxuICAgICAgICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICAgICAgICdodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLzE5MTM5L3Jlc291cmNlcy9nbXhDb2RlbGlzdHMueG1sI0NJX09uTGluZUZ1bmN0aW9uQ29kZSdcbiAgICAgICAgICApLFxuICAgICAgICAgIGFkZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsIGZ1bmN0aW9uQ29kZSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKVxuICByZXR1cm4gcGlwZShcbiAgICBjcmVhdGVFbGVtZW50KCdnbWQ6ZGlzdHJpYnV0aW9uSW5mbycpLFxuICAgIGNyZWF0ZUNoaWxkKCdnbWQ6TURfRGlzdHJpYnV0aW9uJyksXG4gICAgYXBwZW5kVHJhbnNmZXJPcHRpb25zXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlT25saW5lUmVzb3VyY2VzKFxuICByZWNvcmQ6IFNlcnZpY2VSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHBpcGUoXG4gICAgcmVtb3ZlRGlzdHJpYnV0aW9ucygpLFxuICAgIGFwcGVuZENoaWxkcmVuKC4uLnJlY29yZC5vbmxpbmVSZXNvdXJjZXMubWFwKGNyZWF0ZU9ubGluZVJlc291cmNlKSlcbiAgKShyb290RWwpXG59XG4iXX0=
|
|
386
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGUtcGFydHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwaS9tZXRhZGF0YS1jb252ZXJ0ZXIvc3JjL2xpYi9pc28xOTEzOS93cml0ZS1wYXJ0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFpQkEsT0FBTyxFQUNMLFlBQVksRUFDWixjQUFjLEVBQ2QsV0FBVyxFQUNYLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQix1QkFBdUIsRUFFdkIsa0JBQWtCLEVBQ2xCLGFBQWEsRUFFYixpQkFBaUIsRUFDakIsY0FBYyxFQUNkLG9CQUFvQixFQUNwQixjQUFjLEdBRWYsTUFBTSxjQUFjLENBQUE7QUFDckIsT0FBTyxFQUVMLFFBQVEsRUFDUixXQUFXLEVBQ1gsVUFBVSxFQUNWLEdBQUcsRUFDSCxRQUFRLEVBQ1IsSUFBSSxFQUNKLElBQUksRUFDSixHQUFHLEdBQ0osTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQixPQUFPLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQTtBQUNwQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBRXZDLFNBQVMsb0JBQW9CLENBQzNCLElBQVk7SUFFWixPQUFPLEdBQUcsQ0FDUixJQUFJLENBQUMsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDckUsQ0FBQTtBQUNILENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxHQUFRO0lBQzVCLE9BQU8sR0FBRyxDQUNSLElBQUksQ0FDRix1QkFBdUIsQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLEVBQ2pELGNBQWMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FDL0IsQ0FDRixDQUFBO0FBQ0gsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUNsQixHQUFRLEVBQ1IsSUFBYTtJQUViLE9BQU8sR0FBRyxDQUNSLElB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QUNWLHFGQUFxRixDQUN0RixFQUNELFlBQVksQ0FBQyxlQUFlLEVBQUUsWUFBWSxDQUFDLENBQzVDLENBQ0YsQ0FDRixDQUNGLENBQUE7SUFDRCxPQUFPLElBQUksQ0FDVCxhQUFhLENBQUMsc0JBQXNCLENBQUMsRUFDckMsV0FBVyxDQUFDLHFCQUFxQixDQUFDLEVBQ2xDLHFCQUFxQixDQUN0QixDQUFBO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSxvQkFBb0IsQ0FDbEMsTUFBcUIsRUFDckIsTUFBa0I7SUFFbEIsSUFBSSxDQUNGLG1CQUFtQixFQUFFLEVBQ3JCLGNBQWMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FDcEUsQ0FBQyxNQUFNLENBQUMsQ0FBQTtBQUNYLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDYXRhbG9nUmVjb3JkLFxuICBDb25zdHJhaW50LFxuICBEYXRhc2V0RGlzdHJpYnV0aW9uLFxuICBEYXRhc2V0UmVjb3JkLFxuICBEYXRhc2V0U2VydmljZURpc3RyaWJ1dGlvbixcbiAgSW5kaXZpZHVhbCxcbiAgS2V5d29yZCxcbiAgS2V5d29yZFRoZXNhdXJ1cyxcbiAgUmVjb3JkU3RhdHVzLFxuICBSb2xlLFxuICBTZXJ2aWNlRW5kcG9pbnQsXG4gIFNlcnZpY2VPbmxpbmVSZXNvdXJjZSxcbiAgU2VydmljZVJlY29yZCxcbiAgVXBkYXRlRnJlcXVlbmN5Q29kZSxcbiAgVXBkYXRlRnJlcXVlbmN5Q3VzdG9tLFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9kb21haW4vc3JjL2xpYi9tb2RlbC9yZWNvcmQnXG5pbXBvcnQge1xuICBhZGRBdHRyaWJ1dGUsXG4gIGFwcGVuZENoaWxkcmVuLFxuICBjcmVhdGVDaGlsZCxcbiAgY3JlYXRlRWxlbWVudCxcbiAgZmluZENoaWxkRWxlbWVudCxcbiAgZmluZENoaWxkT3JDcmVhdGUsXG4gIGZpbmRDaGlsZHJlbkVsZW1lbnQsXG4gIGZpbmROZXN0ZWRDaGlsZE9yQ3JlYXRlLFxuICBmaW5kTmVzdGVkRWxlbWVudCxcbiAgZmluZE5lc3RlZEVsZW1lbnRzLFxuICByZWFkQXR0cmlidXRlLFxuICByZWFkVGV4dCxcbiAgcmVtb3ZlQWxsQ2hpbGRyZW4sXG4gIHJlbW92ZUNoaWxkcmVuLFxuICByZW1vdmVDaGlsZHJlbkJ5TmFtZSxcbiAgc2V0VGV4dENvbnRlbnQsXG4gIFhtbEVsZW1lbnQsXG59IGZyb20gJy4uL3htbC11dGlscydcbmltcG9ydCB7XG4gIENoYWluYWJsZUZ1bmN0aW9uLFxuICBmYWxsYmFjayxcbiAgZmlsdGVyQXJyYXksXG4gIGdldEF0SW5kZXgsXG4gIG1hcCxcbiAgbWFwQXJyYXksXG4gIG5vb3AsXG4gIHBpcGUsXG4gIHRhcCxcbn0gZnJvbSAnLi4vZnVuY3Rpb24tdXRpbHMnXG5pbXBvcnQgZm9ybWF0IGZyb20gJ2RhdGUtZm5zL2Zvcm1hdCdcbmltcG9ydCB7IHJlYWRLaW5kIH0gZnJvbSAnLi9yZWFkLXBhcnRzJ1xuXG5mdW5jdGlvbiB3cml0ZUNoYXJhY3RlclN0cmluZyhcbiAgdGV4dDogc3RyaW5nXG4pOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBYbWxFbGVtZW50PiB7XG4gIHJldHVybiB0YXAoXG4gICAgcGlwZShmaW5kQ2hpbGRPckNyZWF0ZSgnZ2NvOkNoYXJhY3RlclN0cmluZycpLCBzZXRUZXh0Q29udGVudCh0ZXh0KSlcbiAgKVxufVxuXG5mdW5jdGlvbiB3cml0ZUxpbmthZ2UodXJsOiBVUkwpOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBYbWxFbGVtZW50PiB7XG4gIHJldHVybiB0YXAoXG4gICAgcGlwZShcbiAgICAgIGZpbmROZXN0ZWRDaGlsZE9yQ3JlYXRlKCdnbWQ6bGlua2FnZScsICdnbWQ6VVJMJyksXG4gICAgICBzZXRUZXh0Q29udGVudCh1cmwudG9TdHJpbmcoKSlcbiAgICApXG4gIClcbn1cblxuZnVuY3Rpb24gd3JpdGVBbmNob3IoXG4gIHVybDogVVJMLFxuICB0ZXh0Pzogc3RyaW5nXG4pOiBDaGFpbmFibGVGdW5jdGlvbjxYbWxFbGVtZW50LCBYbWxFbGVtZW50PiB7XG4gIHJldHVybiB0YXAoXG4gICAgcGlwZShcbiAgICAgIGZpbmRDaGlsZE9yQ3JlYXRlKCdnbXg6QW5jaG9yJyksXG4gICAgICBhZGRBdHRyaWJ1dGUoJ3hsaW5rOmhyZWYnLCB1cmwudG9TdHJpbmcoKSksXG4gICAgICB0ZXh0ID8gc2V0VGV4dENvbnRlbnQodGV4dCkgOiBub29wXG4gICAgKVxuICApXG59XG5cbmZ1bmN0aW9uIHdyaXRlRGF0ZVRpbWUoZGF0ZTogRGF0ZSk6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFhtbEVsZW1lbnQ+IHtcbiAgcmV0dXJuIHRhcChcbiAgICBwaXBlKFxuICAgICAgZmluZENoaWxkT3JDcmVhdGUoJ2djbzpEYXRlVGltZScpLFxuICAgICAgc2V0VGV4dENvbnRlbnQoZm9ybWF0KGRhdGUsIFwieXl5eS1NTS1kZCdUJ0hIOm1tOnNzXCIpKVxuICAgIClcbiAgKVxufVxuXG5mdW5jdGlvbiB3cml0ZURhdGUoZGF0ZTogRGF0ZSk6IENoYWluYWJsZUZ1bmN0aW9uPFhtbEVsZW1lbnQsIFhtbEVsZW1lbnQ+IHtcbiAgcmV0dXJuIHRhcChcbiAgICBwaXBlKFxuICAgICAgZmluZENoaWxkT3JDcmVhdGUoJ2djbzpEYXRlJyksXG4gICAgICBzZXRUZXh0Q29udGVudChmb3JtYXQoZGF0ZSwgJ3l5eXktTU0tZGQnKSlcbiAgICApXG4gIClcbn1cblxuZnVuY3Rpb24gZ2V0UHJvZ3Jlc3NDb2RlKHN0YXR1czogUmVjb3JkU3RhdHVzKTogc3RyaW5nIHtcbiAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICBjYXNlICdjb21wbGV0ZWQnOlxuICAgICAgcmV0dXJuICdjb21wbGV0ZWQnXG4gICAgY2FzZSAnZGVwcmVjYXRlZCc6XG4gICAgICByZXR1cm4gJ2RlcHJlY2F0ZWQnXG4gICAgY2FzZSAnb25nb2luZyc6XG4gICAgICByZXR1cm4gJ29uR29pbmcnXG4gICAgY2FzZSAncmVtb3ZlZCc6XG4gICAgICByZXR1cm4gJ3JlbW92ZWQnXG4gICAgY2FzZSAndW5kZXJfZGV2ZWxvcG1lbnQnOlxuICAgICAgcmV0dXJuICd1bmRlckRldmVsb3BtZW50J1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDb3VsZCBub3QgZGV0ZXJtaW5lIHByb2dyZXNzIGNvZGUgZnJvbSBzdGF0dXM6ICR7c3RhdHVzfWBcbiAgICAgIClcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRSb2xlQ29kZShyb2xlOiBSb2xlKTogc3RyaW5nIHtcbiAgc3dpdGNoIChyb2xlKSB7XG4gICAgY2FzZSAnYXV0aG9yJzpcbiAgICAgIHJldHVybiAnYXV0aG9yJ1xuICAgIGNhc2UgJ2NvbGxhYm9yYXRvcic6XG4gICAgICByZXR1cm4gJ2NvbGxhYm9yYXRvcidcbiAgICBjYXNlICdjb250cmlidXRvcic6XG4gICAgICByZXR1cm4gJ2NvbnRyaWJ1dG9yJ1xuICAgIGNhc2UgJ2N1c3RvZGlhbic6XG4gICAgICByZXR1cm4gJ2N1c3RvZGlhbidcbiAgICBjYXNlICdkaXN0cmlidXRvcic6XG4gICAgICByZXR1cm4gJ2Rpc3RyaWJ1dG9yJ1xuICAgIGNhc2UgJ2VkaXRvcic6XG4gICAgICByZXR1cm4gJ2VkaXRvcidcbiAgICBjYXNlICdmdW5kZXInOlxuICAgICAgcmV0dXJuICdmdW5kZXInXG4gICAgY2FzZSAnbWVkaWF0b3InOlxuICAgICAgcmV0dXJuICdtZWRpYXRvcidcbiAgICBjYXNlICdvcmlnaW5hdG9yJzpcbiAgICAgIHJldHVybiAnb3JpZ2luYXRvcidcbiAgICBjYXNlICdvdGhlcic6XG4gICAgICByZXR1cm4gJ290aGVyJ1xuICAgIGNhc2UgJ293bmVyJzpcbiAgICAgIHJldHVybiAnb3duZXInXG4gICAgY2FzZSAncG9pbnRfb2ZfY29udGFjdCc6XG4gICAgICByZXR1cm4gJ3BvaW50T2ZDb250YWN0J1xuICAgIGNhc2UgJ3ByaW5jaXBhbF9pbnZlc3RpZ2F0b3InOlxuICAgICAgcmV0dXJuICdwcmluY2lwYWxJbnZlc3RpZ2F0b3InXG4gICAgY2FzZSAncHJvY2Vzc29yJzpcbiAgICAgIHJldHVybiAncHJvY2Vzc29yJ1xuICAgIGNhc2UgJ3B1Ymxpc2hlcic6XG4gICAgICByZXR1cm4gJ3B1Ymxpc2hlcidcbiAgICBjYXNlICdyZXNvdXJjZV9wcm92aWRlcic6XG4gICAgICByZXR1cm4gJ3Jlc291cmNlUHJvdmlkZXInXG4gICAgY2FzZSAncmlnaHRzX2hvbGRlcic6XG4gICAgICByZXR1cm4gJ3JpZ2h0c0hvbGRlcidcbiAgICBjYXNlICdzcG9uc29yJzpcbiAgICAgIHJldHVybiAnc3BvbnNvcidcbiAgICBjYXNlICdzdGFrZWhvbGRlcic6XG4gICAgICByZXR1cm4gJ3N0YWtlaG9sZGVyJ1xuICAgIGNhc2UgJ3Vuc3BlY2lmaWVkJzpcbiAgICAgIHJldHVybiAndW5zcGVjaWZpZWQnXG4gICAgY2FzZSAndXNlcic6XG4gICAgICByZXR1cm4gJ3VzZXInXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGRldGVybWluZSByb2xlIGNvZGUgZnJvbSByb2xlOiAke3JvbGV9YClcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXREaXN0cmlidXRpb25Qcm90b2NvbChcbiAgZGlzdHJpYnV0aW9uOiBEYXRhc2V0U2VydmljZURpc3RyaWJ1dGlvblxuKTogc3RyaW5nIHtcbiAgc3dpdGNoIChkaXN0cmlidXRpb24uYWNjZXNzU2VydmljZVByb3RvY29sLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICd3ZnMnOlxuICAgICAgcmV0dXJuICdPR0M6V0ZTJ1xuICAgIGNhc2UgJ3dtcyc6XG4gICAgICByZXR1cm4gJ09HQzpXTVMnXG4gICAgY2FzZSAnd3BzJzpcbiAgICAgIHJldHVybiAnT0dDOldQUydcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGRpc3RyaWJ1dGlvbi5hY2Nlc3NTZXJ2aWNlUHJvdG9jb2xcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRNYWludGVuYW5jZUZyZXF1ZW5jeUNvZGUoXG4gIHVwZGF0ZUZyZXF1ZW5jeTogVXBkYXRlRnJlcXVlbmN5Q29kZVxuKTogc3RyaW5nIHwgbnVsbCB7XG4gIHN3aXRjaCAodXBkYXRlRnJlcXVlbmN5KSB7XG4gICAgY2FzZSAnYXNOZWVkZWQnOlxuICAgICAgcmV0dXJuICdhc05lZWRlZCdcbiAgICBjYXNlICd1bmtub3duJzpcbiAgICAgIHJldHVybiAndW5rbm93bidcbiAgICBjYXNlICdpcnJlZ3VsYXInOlxuICAgICAgcmV0dXJuICdpcnJlZ3VsYXInXG4gICAgY2FzZSAnbm90UGxhbm5lZCc6XG4gICAgICByZXR1cm4gJ25vdFBsYW5uZWQnXG4gICAgY2FzZSAnY29udGludWFsJzpcbiAgICAgIHJldHVybiAnY29udGludWFsJ1xuICAgIGNhc2UgJ3BlcmlvZGljJzpcbiAgICAgIHJldHVybiAncGVyaW9kaWMnXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0SVNPRHVyYXRpb24odXBkYXRlRnJlcXVlbmN5OiBVcGRhdGVGcmVxdWVuY3lDdXN0b20pOiBzdHJpbmcge1xuICBjb25zdCBkdXJhdGlvbiA9IHtcbiAgICB5ZWFyczogMCxcbiAgICBtb250aHM6IDAsXG4gICAgd2Vla3M6IDAsXG4gICAgZGF5czogMCxcbiAgICBob3VyczogMCxcbiAgfVxuICBzd2l0Y2ggKHVwZGF0ZUZyZXF1ZW5jeS5wZXIpIHtcbiAgICBjYXNlICdkYXknOlxuICAgICAgaWYgKHVwZGF0ZUZyZXF1ZW5jeS51cGRhdGVkVGltZXMgPD0gMSkgZHVyYXRpb24uZGF5cyA9IDFcbiAgICAgIGVsc2UgZHVyYXRpb24uaG91cnMgPSBNYXRoLnJvdW5kKDI0IC8gdXBkYXRlRnJlcXVlbmN5LnVwZGF0ZWRUaW1lcylcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAnd2Vlayc6XG4gICAgICBkdXJhdGlvbi5kYXlzID0gTWF0aC5yb3VuZCg3IC8gdXBkYXRlRnJlcXVlbmN5LnVwZGF0ZWRUaW1lcylcbiAgICAgIGJyZWFrXG4gICAgY2FzZSAnbW9udGgnOlxuICAgICAgaWYgKHVwZGF0ZUZyZXF1ZW5jeS51cGRhdGVkVGltZXMgPD0gMSkgZHVyYXRpb24ubW9udGhzID0gMVxuICAgICAgZWxzZSBkdXJhdGlvbi5kYXlzID0gTWF0aC5yb3VuZCgzMCAvIHVwZGF0ZUZyZXF1ZW5jeS51cGRhdGVkVGltZXMpXG4gICAgICBicmVha1xuICAgIGNhc2UgJ3llYXInOlxuICAgICAgaWYgKHVwZGF0ZUZyZXF1ZW5jeS51cGRhdGVkVGltZXMgPD0gMSkgZHVyYXRpb24ueWVhcnMgPSAxXG4gICAgICBlbHNlIGR1cmF0aW9uLm1vbnRocyA9IE1hdGgucm91bmQoMTIgLyB1cGRhdGVGcmVxdWVuY3kudXBkYXRlZFRpbWVzKVxuICAgICAgYnJlYWtcbiAgfVxuICBjb25zdCBob3VycyA9IGR1cmF0aW9uLmhvdXJzID4gMCA/IGBUJHtkdXJhdGlvbi5ob3Vyc31IYCA6ICcnXG4gIHJldHVybiBgUCR7ZHVyYXRpb24ueWVhcnN9WSR7ZHVyYXRpb24ubW9udGhzfU0ke2R1cmF0aW9uLmRheXN9RCR7aG91cnN9YFxufVxuXG5mdW5jdGlvbiBhcHBlbmRSZXNwb25zaWJsZVBhcnR5KGNvbnRhY3Q6IEluZGl2aWR1YWwpIHtcbiAgY29uc3QgbmFtZSA9XG4gICAgY29udGFjdC5sYXN0TmFtZSAmJiBjb250YWN0LmZpcnN0TmFtZVxuICAgICAgPyBgJHtjb250YWN0LmZpcnN0TmFtZX0gJHtjb250YWN0Lmxhc3ROYW1lfWBcbiAgICAgIDogY29udGFjdC5sYXN0TmFtZSB8fCBjb250YWN0LmZpcnN0TmFtZSB8fCBudWxsXG4gIHJldHVybiBhcHBlbmRDaGlsZHJlbihcbiAgICBwaXBlKFxuICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOkNJX1Jlc3BvbnNpYmxlUGFydHknKSxcbiAgICAgIG5hbWVcbiAgICAgICAgPyBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDppbmRpdmlkdWFsTmFtZScpLFxuICAgICAgICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhuYW1lKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgOiBub29wLFxuICAgICAgY29udGFjdC5wb3NpdGlvblxuICAgICAgICA/IGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOnBvc2l0aW9uTmFtZScpLFxuICAgICAgICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhjb250YWN0LnBvc2l0aW9uKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgOiBub29wLFxuICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOm9yZ2FuaXNhdGlvbk5hbWUnKSxcbiAgICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhjb250YWN0Lm9yZ2FuaXphdGlvbi5uYW1lKVxuICAgICAgICApLFxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpjb250YWN0SW5mbycpLFxuICAgICAgICAgIGNyZWF0ZUNoaWxkKCdnbWQ6Q0lfQ29udGFjdCcpLFxuICAgICAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOmFkZHJlc3MnKSxcbiAgICAgICAgICAgICAgY3JlYXRlQ2hpbGQoJ2dtZDpDSV9BZGRyZXNzJyksXG4gICAgICAgICAgICAgIGNyZWF0ZUNoaWxkKCdnbWQ6ZWxlY3Ryb25pY01haWxBZGRyZXNzJyksXG4gICAgICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKGNvbnRhY3QuZW1haWwpXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSxcbiAgICAgICAgICAnd2Vic2l0ZScgaW4gY29udGFjdC5vcmdhbml6YXRpb25cbiAgICAgICAgICAgID8gYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpvbmxpbmVSZXNvdXJjZScpLFxuICAgICAgICAgICAgICAgICAgY3JlYXRlQ2hpbGQoJ2dtZDpDSV9PbmxpbmVSZXNvdXJjZScpLFxuICAgICAgICAgICAgICAgICAgd3JpdGVMaW5rYWdlKGNvbnRhY3Qub3JnYW5pemF0aW9uLndlYnNpdGUpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IG5vb3BcbiAgICAgICAgKSxcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6cm9sZScpLFxuICAgICAgICAgIGNyZWF0ZUNoaWxkKCdnbWQ6Q0lfUm9sZUNvZGUnKSxcbiAgICAgICAgICBhZGRBdHRyaWJ1dGUoXG4gICAgICAgICAgICAnY29kZUxpc3QnLFxuICAgICAgICAgICAgJ2h0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMzkvcmVzb3VyY2VzL2dteENvZGVsaXN0cy54bWwjQ0lfUm9sZUNvZGUnXG4gICAgICAgICAgKSxcbiAgICAgICAgICBhZGRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCBnZXRSb2xlQ29kZShjb250YWN0LnJvbGUpKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUNpdGF0aW9uRGF0ZShkYXRlOiBEYXRlLCB0eXBlOiAncmV2aXNpb24nIHwgJ2NyZWF0aW9uJykge1xuICByZXR1cm4gcGlwZShcbiAgICBmaW5kTmVzdGVkRWxlbWVudHMoJ2dtZDpkYXRlJywgJ2dtZDpDSV9EYXRlJyksXG4gICAgZmlsdGVyQXJyYXkoXG4gICAgICBwaXBlKFxuICAgICAgICBmaW5kQ2hpbGRFbGVtZW50KCdnbWQ6Q0lfRGF0ZVR5cGVDb2RlJyksXG4gICAgICAgIHJlYWRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnKSxcbiAgICAgICAgbWFwKCh2YWx1ZSkgPT4gdmFsdWUgPT09IHR5cGUpXG4gICAgICApXG4gICAgKSxcbiAgICBnZXRBdEluZGV4KDApLFxuICAgIGZpbmRDaGlsZEVsZW1lbnQoJ2dtZDpkYXRlJyksXG4gICAgcmVtb3ZlQWxsQ2hpbGRyZW4oKSxcbiAgICB3cml0ZURhdGVUaW1lKGRhdGUpXG4gIClcbn1cblxuZnVuY3Rpb24gYXBwZW5kQ2l0YXRpb25EYXRlKGRhdGUsIHR5cGU6ICdyZXZpc2lvbicgfCAnY3JlYXRpb24nKSB7XG4gIHJldHVybiBhcHBlbmRDaGlsZHJlbihcbiAgICBwaXBlKFxuICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOmRhdGUnKSxcbiAgICAgIGNyZWF0ZUNoaWxkKCdnbWQ6Q0lfRGF0ZScpLFxuICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgIHBpcGUoY3JlYXRlRWxlbWVudCgnZ21kOmRhdGUnKSwgd3JpdGVEYXRlVGltZShkYXRlKSksXG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOmRhdGVUeXBlJyksXG4gICAgICAgICAgY3JlYXRlQ2hpbGQoJ2dtZDpDSV9EYXRlVHlwZUNvZGUnKSxcbiAgICAgICAgICBhZGRBdHRyaWJ1dGUoXG4gICAgICAgICAgICAnY29kZUxpc3QnLFxuICAgICAgICAgICAgJ2h0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMzkvcmVzb3VyY2VzL2dteENvZGVsaXN0cy54bWwjQ0lfRGF0ZVR5cGVDb2RlJ1xuICAgICAgICAgICksXG4gICAgICAgICAgYWRkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJywgdHlwZSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5mdW5jdGlvbiByZW1vdmVLZXl3b3JkcygpIHtcbiAgcmV0dXJuIHJlbW92ZUNoaWxkcmVuKHBpcGUoZmluZE5lc3RlZEVsZW1lbnRzKCdnbWQ6ZGVzY3JpcHRpdmVLZXl3b3JkcycpKSlcbn1cblxuLy8gcmV0dXJucyBhIDxnbWQ6dGhlc2F1cnVzTmFtZT4gZWxlbWVudFxuZnVuY3Rpb24gY3JlYXRlVGhlc2F1cnVzKHRoZXNhdXJ1czogS2V5d29yZFRoZXNhdXJ1cykge1xuICByZXR1cm4gcGlwZShcbiAgICBjcmVhdGVFbGVtZW50KCdnbWQ6dGhlc2F1cnVzTmFtZScpLFxuICAgIGNyZWF0ZUNoaWxkKCdnbWQ6Q0lfQ2l0YXRpb24nKSxcbiAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgIHBpcGUoXG4gICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDp0aXRsZScpLFxuICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyh0aGVzYXVydXMubmFtZSB8fCB0aGVzYXVydXMuaWQpXG4gICAgICApLFxuICAgICAgcGlwZShcbiAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOmlkZW50aWZpZXInKSxcbiAgICAgICAgY3JlYXRlQ2hpbGQoJ2dtZDpNRF9JZGVudGlmaWVyJyksXG4gICAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6Y29kZScpLFxuICAgICAgICAgICAgdGhlc2F1cnVzLnVybFxuICAgICAgICAgICAgICA/IHdyaXRlQW5jaG9yKHRoZXNhdXJ1cy51cmwsIHRoZXNhdXJ1cy5pZClcbiAgICAgICAgICAgICAgOiB3cml0ZUNoYXJhY3RlclN0cmluZyh0aGVzYXVydXMuaWQpXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmZ1bmN0aW9uIGFwcGVuZEtleXdvcmRzKGtleXdvcmRzOiBLZXl3b3JkW10pIHtcbiAgY29uc3Qga2V5d29yZHNCeVRoZXNhdXJ1czogS2V5d29yZFtdW10gPSBrZXl3b3Jkcy5yZWR1Y2UoKGFjYywga2V5d29yZCkgPT4ge1xuICAgIGNvbnN0IHRoZXNhdXJ1c0lkID0ga2V5d29yZC50aGVzYXVydXM/LmlkXG4gICAgY29uc3QgdHlwZSA9IGtleXdvcmQudHlwZVxuICAgIGxldCBleGlzdGluZ0dyb3VwID0gYWNjLmZpbmQoKGdyb3VwKSA9PlxuICAgICAgZ3JvdXBbMF0udGhlc2F1cnVzXG4gICAgICAgID8gZ3JvdXBbMF0udGhlc2F1cnVzLmlkID09PSB0aGVzYXVydXNJZFxuICAgICAgICA6IGdyb3VwWzBdLnR5cGUgPT09IHR5cGVcbiAgICApXG4gICAgaWYgKCFleGlzdGluZ0dyb3VwKSB7XG4gICAgICBleGlzdGluZ0dyb3VwID0gW11cbiAgICAgIGFjYy5wdXNoKGV4aXN0aW5nR3JvdXApXG4gICAgfVxuICAgIGV4aXN0aW5nR3JvdXAucHVzaChrZXl3b3JkKVxuICAgIHJldHVybiBhY2NcbiAgfSwgW10pXG4gIHJldHVybiBhcHBlbmRDaGlsZHJlbihcbiAgICAuLi5rZXl3b3Jkc0J5VGhlc2F1cnVzLm1hcCgoa2V5d29yZHMpID0+XG4gICAgICBwaXBlKFxuICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6ZGVzY3JpcHRpdmVLZXl3b3JkcycpLFxuICAgICAgICBjcmVhdGVDaGlsZCgnZ21kOk1EX0tleXdvcmRzJyksXG4gICAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6dHlwZScpLFxuICAgICAgICAgICAgY3JlYXRlQ2hpbGQoJ2dtZDpNRF9LZXl3b3JkVHlwZUNvZGUnKSxcbiAgICAgICAgICAgIGFkZEF0dHJpYnV0ZShcbiAgICAgICAgICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICAgICAgICAgJ2h0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMzkvcmVzb3VyY2VzL2dteENvZGVsaXN0cy54bWwjTURfS2V5d29yZFR5cGVDb2RlJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGFkZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsIGtleXdvcmRzWzBdLnR5cGUpXG4gICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgICBrZXl3b3Jkc1swXS50aGVzYXVydXNcbiAgICAgICAgICA/IGFwcGVuZENoaWxkcmVuKGNyZWF0ZVRoZXNhdXJ1cyhrZXl3b3Jkc1swXS50aGVzYXVydXMpKVxuICAgICAgICAgIDogbm9vcCxcbiAgICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgLi4ua2V5d29yZHMubWFwKChrZXl3b3JkKSA9PlxuICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOmtleXdvcmQnKSxcbiAgICAgICAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcoa2V5d29yZC5sYWJlbClcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ29uc3RyYWludChcbiAgY29uc3RyYWludDogQ29uc3RyYWludCxcbiAgdHlwZTogJ2xlZ2FsJyB8ICdzZWN1cml0eScgfCAnb3RoZXInXG4pIHtcbiAgaWYgKHR5cGUgPT09ICdzZWN1cml0eScpIHtcbiAgICByZXR1cm4gcGlwZShcbiAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpyZXNvdXJjZUNvbnN0cmFpbnRzJyksXG4gICAgICBjcmVhdGVDaGlsZCgnZ21kOk1EX1NlY3VyaXR5Q29uc3RyYWludHMnKSxcbiAgICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpjbGFzc2lmaWNhdGlvbicpLFxuICAgICAgICAgIGNyZWF0ZUNoaWxkKCdnbWQ6TURfQ2xhc3NpZmljYXRpb25Db2RlJyksXG4gICAgICAgICAgYWRkQXR0cmlidXRlKFxuICAgICAgICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICAgICAgICdodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLzE5MTM5L3Jlc291cmNlcy9nbXhDb2RlbGlzdHMueG1sI01EX0NsYXNzaWZpY2F0aW9uQ29kZSdcbiAgICAgICAgICApLFxuICAgICAgICAgIGFkZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsICdyZXN0cmljdGVkJylcbiAgICAgICAgKSxcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6dXNlTGltaXRhdGlvbicpLFxuICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKGNvbnN0cmFpbnQudGV4dClcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnbGVnYWwnKSB7XG4gICAgcmV0dXJuIHBpcGUoXG4gICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6cmVzb3VyY2VDb25zdHJhaW50cycpLFxuICAgICAgY3JlYXRlQ2hpbGQoJ2dtZDpNRF9MZWdhbENvbnN0cmFpbnRzJyksXG4gICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6YWNjZXNzQ29uc3RyYWludHMnKSxcbiAgICAgICAgICBjcmVhdGVDaGlsZCgnZ21kOk1EX1Jlc3RyaWN0aW9uQ29kZScpLFxuICAgICAgICAgIGFkZEF0dHJpYnV0ZShcbiAgICAgICAgICAgICdjb2RlTGlzdCcsXG4gICAgICAgICAgICAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTEzOS9yZXNvdXJjZXMvZ214Q29kZWxpc3RzLnhtbCNNRF9SZXN0cmljdGlvbkNvZGUnXG4gICAgICAgICAgKSxcbiAgICAgICAgICBhZGRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCAnb3RoZXJSZXN0cmljdGlvbnMnKVxuICAgICAgICApLFxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpvdGhlckNvbnN0cmFpbnRzJyksXG4gICAgICAgICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcoY29uc3RyYWludC50ZXh0KVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIHBpcGUoXG4gICAgY3JlYXRlRWxlbWVudCgnZ21kOnJlc291cmNlQ29uc3RyYWludHMnKSxcbiAgICBjcmVhdGVDaGlsZCgnZ21kOk1EX0NvbnN0cmFpbnRzJyksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICBwaXBlKFxuICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6dXNlTGltaXRhdGlvbicpLFxuICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhjb25zdHJhaW50LnRleHQpXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmZ1bmN0aW9uIHJlbW92ZU90aGVyQ29uc3RyYWludHMoKSB7XG4gIHJldHVybiByZW1vdmVDaGlsZHJlbihcbiAgICBwaXBlKFxuICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOnJlc291cmNlQ29uc3RyYWludHMnKSxcbiAgICAgIGZpbHRlckFycmF5KFxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGZpbmROZXN0ZWRFbGVtZW50cygnZ21kOk1EX0NvbnN0cmFpbnRzJywgJ2dtZDp1c2VMaW1pdGF0aW9uJyksXG4gICAgICAgICAgKGFycmF5KSA9PiBhcnJheS5sZW5ndGggPiAwXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuZnVuY3Rpb24gcmVtb3ZlU2VjdXJpdHlDb25zdHJhaW50cygpIHtcbiAgcmV0dXJuIHJlbW92ZUNoaWxkcmVuKFxuICAgIHBpcGUoXG4gICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6cmVzb3VyY2VDb25zdHJhaW50cycpLFxuICAgICAgZmlsdGVyQXJyYXkoXG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgZmluZE5lc3RlZEVsZW1lbnRzKCdnbWQ6TURfU2VjdXJpdHlDb25zdHJhaW50cycsICdnbWQ6dXNlTGltaXRhdGlvbicpLFxuICAgICAgICAgIChhcnJheSkgPT4gYXJyYXkubGVuZ3RoID4gMFxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmZ1bmN0aW9uIHJlbW92ZUxlZ2FsQ29uc3RyYWludHMoKSB7XG4gIHJldHVybiByZW1vdmVDaGlsZHJlbihcbiAgICBwaXBlKFxuICAgICAgZmluZENoaWxkcmVuRWxlbWVudCgnZ21kOnJlc291cmNlQ29uc3RyYWludHMnKSxcbiAgICAgIGZpbHRlckFycmF5KFxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGZpbmROZXN0ZWRFbGVtZW50cyhcbiAgICAgICAgICAgICdnbWQ6TURfTGVnYWxDb25zdHJhaW50cycsXG4gICAgICAgICAgICAnZ21kOmFjY2Vzc0NvbnN0cmFpbnRzJyxcbiAgICAgICAgICAgICdnbWQ6TURfUmVzdHJpY3Rpb25Db2RlJ1xuICAgICAgICAgICksXG4gICAgICAgICAgbWFwQXJyYXkocmVhZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScpKSxcbiAgICAgICAgICAocmVzdHJpY3Rpb25Db2RlcykgPT5cbiAgICAgICAgICAgIHJlc3RyaWN0aW9uQ29kZXMuZXZlcnkoKGNvZGUpID0+IGNvZGUgIT09ICdsaWNlbnNlJylcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5mdW5jdGlvbiByZW1vdmVMaWNlbnNlcygpIHtcbiAgcmV0dXJuIHJlbW92ZUNoaWxkcmVuKFxuICAgIHBpcGUoXG4gICAgICBmaW5kQ2hpbGRyZW5FbGVtZW50KCdnbWQ6cmVzb3VyY2VDb25zdHJhaW50cycpLFxuICAgICAgZmlsdGVyQXJyYXkoXG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgZmluZE5lc3RlZEVsZW1lbnRzKFxuICAgICAgICAgICAgJ2dtZDpNRF9MZWdhbENvbnN0cmFpbnRzJyxcbiAgICAgICAgICAgICdnbWQ6YWNjZXNzQ29uc3RyYWludHMnLFxuICAgICAgICAgICAgJ2dtZDpNRF9SZXN0cmljdGlvbkNvZGUnXG4gICAgICAgICAgKSxcbiAgICAgICAgICBtYXBBcnJheShyZWFkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJykpLFxuICAgICAgICAgIChyZXN0cmljdGlvbkNvZGVzKSA9PlxuICAgICAgICAgICAgcmVzdHJpY3Rpb25Db2Rlcy5zb21lKChjb2RlKSA9PiBjb2RlID09PSAnbGljZW5zZScpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIClcbn1cblxuZnVuY3Rpb24gY3JlYXRlTGljZW5zZShsaWNlbnNlOiBDb25zdHJhaW50KSB7XG4gIHJldHVybiBwaXBlKFxuICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpyZXNvdXJjZUNvbnN0cmFpbnRzJyksXG4gICAgY3JlYXRlQ2hpbGQoJ2dtZDpNRF9MZWdhbENvbnN0cmFpbnRzJyksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICBwaXBlKFxuICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6YWNjZXNzQ29uc3RyYWludHMnKSxcbiAgICAgICAgY3JlYXRlQ2hpbGQoJ2dtZDpNRF9SZXN0cmljdGlvbkNvZGUnKSxcbiAgICAgICAgYWRkQXR0cmlidXRlKFxuICAgICAgICAgICdjb2RlTGlzdCcsXG4gICAgICAgICAgJ2h0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMzkvcmVzb3VyY2VzL2dteENvZGVsaXN0cy54bWwjTURfUmVzdHJpY3Rpb25Db2RlJ1xuICAgICAgICApLFxuICAgICAgICBhZGRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCAnbGljZW5zZScpXG4gICAgICApLFxuICAgICAgcGlwZShcbiAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOmFjY2Vzc0NvbnN0cmFpbnRzJyksXG4gICAgICAgIGNyZWF0ZUNoaWxkKCdnbWQ6TURfUmVzdHJpY3Rpb25Db2RlJyksXG4gICAgICAgIGFkZEF0dHJpYnV0ZShcbiAgICAgICAgICAnY29kZUxpc3QnLFxuICAgICAgICAgICdodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLzE5MTM5L3Jlc291cmNlcy9nbXhDb2RlbGlzdHMueG1sI01EX1Jlc3RyaWN0aW9uQ29kZSdcbiAgICAgICAgKSxcbiAgICAgICAgYWRkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJywgJ290aGVyUmVzdHJpY3Rpb25zJylcbiAgICAgICksXG4gICAgICBwaXBlKFxuICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6b3RoZXJDb25zdHJhaW50cycpLFxuICAgICAgICAndXJsJyBpbiBsaWNlbnNlXG4gICAgICAgICAgPyB3cml0ZUFuY2hvcihsaWNlbnNlLnVybCwgbGljZW5zZS50ZXh0KVxuICAgICAgICAgIDogd3JpdGVDaGFyYWN0ZXJTdHJpbmcobGljZW5zZS50ZXh0KVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5mdW5jdGlvbiByZW1vdmVEaXN0cmlidXRpb25zKCkge1xuICByZXR1cm4gcGlwZShyZW1vdmVDaGlsZHJlbkJ5TmFtZSgnZ21kOmRpc3RyaWJ1dGlvbkluZm8nKSlcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGlzdHJpYnV0aW9uKGRpc3RyaWJ1dGlvbjogRGF0YXNldERpc3RyaWJ1dGlvbikge1xuICBjb25zdCBhcHBlbmREaXN0cmlidXRpb25Gb3JtYXQgPVxuICAgICdtaW1lVHlwZScgaW4gZGlzdHJpYnV0aW9uXG4gICAgICA/IGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6ZGlzdHJpYnV0aW9uRm9ybWF0JyksXG4gICAgICAgICAgICBjcmVhdGVDaGlsZCgnZ21kOk1EX0Zvcm1hdCcpLFxuICAgICAgICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOm5hbWUnKSxcbiAgICAgICAgICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhkaXN0cmlidXRpb24ubWltZVR5cGUpXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOnZlcnNpb24nKSxcbiAgICAgICAgICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZygnMS4wJykgLy8gaGFyZGNvZGluZyB0aGlzIGFzIGl0IG1vc3QgbGlrZWx5IHdvbid0IGJlIHVzZWQgYnV0IGlzIG1hbmRhdG9yeVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICA6IG5vb3BcblxuICBsZXQgbGlua2FnZVVybCwgbmFtZSwgZnVuY3Rpb25Db2RlLCBwcm90b2NvbFxuICBpZiAoZGlzdHJpYnV0aW9uLnR5cGUgPT09ICdzZXJ2aWNlJykge1xuICAgIGxpbmthZ2VVcmwgPSBkaXN0cmlidXRpb24udXJsLnRvU3RyaW5nKClcbiAgICBuYW1lID0gZGlzdHJpYnV0aW9uLmlkZW50aWZpZXJJblNlcnZpY2UgLy8gdGhpcyBpcyBmb3IgR2VvTmV0d29yayB0byBrbm93IHRoZSBsYXllciBuYW1lXG4gICAgZnVuY3Rpb25Db2RlID0gJ2Rvd25sb2FkJ1xuICAgIHByb3RvY29sID0gZ2V0RGlzdHJpYnV0aW9uUHJvdG9jb2woZGlzdHJpYnV0aW9uKVxuICB9IGVsc2UgaWYgKGRpc3RyaWJ1dGlvbi50eXBlID09PSAnZG93bmxvYWQnKSB7XG4gICAgbGlua2FnZVVybCA9IGRpc3RyaWJ1dGlvbi51cmwudG9TdHJpbmcoKVxuICAgIG5hbWUgPSBkaXN0cmlidXRpb24ubmFtZVxuICAgIGZ1bmN0aW9uQ29kZSA9ICdkb3dubG9hZCdcbiAgICBwcm90b2NvbCA9ICdXV1c6RE9XTkxPQUQnXG4gIH0gZWxzZSB7XG4gICAgbGlua2FnZVVybCA9IGRpc3RyaWJ1dGlvbi51cmwudG9TdHJpbmcoKVxuICAgIG5hbWUgPSBkaXN0cmlidXRpb24ubmFtZVxuICAgIGZ1bmN0aW9uQ29kZSA9ICdpbmZvcm1hdGlvbidcbiAgICBwcm90b2NvbCA9ICdXV1c6TElOSydcbiAgfVxuICBjb25zdCBhcHBlbmRUcmFuc2Zlck9wdGlvbnMgPSBhcHBlbmRDaGlsZHJlbihcbiAgICBwaXBlKFxuICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOnRyYW5zZmVyT3B0aW9ucycpLFxuICAgICAgY3JlYXRlQ2hpbGQoJ2dtZDpNRF9EaWdpdGFsVHJhbnNmZXJPcHRpb25zJyksXG4gICAgICBjcmVhdGVDaGlsZCgnZ21kOm9uTGluZScpLFxuICAgICAgY3JlYXRlQ2hpbGQoJ2dtZDpDSV9PbmxpbmVSZXNvdXJjZScpLFxuICAgICAgd3JpdGVMaW5rYWdlKGxpbmthZ2VVcmwpLFxuICAgICAgJ2Rlc2NyaXB0aW9uJyBpbiBkaXN0cmlidXRpb25cbiAgICAgICAgPyBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpkZXNjcmlwdGlvbicpLFxuICAgICAgICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhkaXN0cmlidXRpb24uZGVzY3JpcHRpb24pXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICA6IG5vb3AsXG4gICAgICBuYW1lICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICAgIHBpcGUoY3JlYXRlRWxlbWVudCgnZ21kOm5hbWUnKSwgd3JpdGVDaGFyYWN0ZXJTdHJpbmcobmFtZSkpXG4gICAgICAgICAgKVxuICAgICAgICA6IG5vb3AsXG4gICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgcGlwZShjcmVhdGVFbGVtZW50KCdnbWQ6cHJvdG9jb2wnKSwgd3JpdGVDaGFyYWN0ZXJTdHJpbmcocHJvdG9jb2wpKSxcbiAgICAgICAgcGlwZShcbiAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6ZnVuY3Rpb24nKSxcbiAgICAgICAgICBjcmVhdGVDaGlsZCgnZ21kOkNJX09uTGluZUZ1bmN0aW9uQ29kZScpLFxuICAgICAgICAgIGFkZEF0dHJpYnV0ZShcbiAgICAgICAgICAgICdjb2RlTGlzdCcsXG4gICAgICAgICAgICAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTEzOS9yZXNvdXJjZXMvZ214Q29kZWxpc3RzLnhtbCNDSV9PbkxpbmVGdW5jdGlvbkNvZGUnXG4gICAgICAgICAgKSxcbiAgICAgICAgICBhZGRBdHRyaWJ1dGUoJ2NvZGVMaXN0VmFsdWUnLCBmdW5jdGlvbkNvZGUpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gIClcbiAgcmV0dXJuIHBpcGUoXG4gICAgY3JlYXRlRWxlbWVudCgnZ21kOmRpc3RyaWJ1dGlvbkluZm8nKSxcbiAgICBjcmVhdGVDaGlsZCgnZ21kOk1EX0Rpc3RyaWJ1dGlvbicpLFxuICAgIGFwcGVuZERpc3RyaWJ1dGlvbkZvcm1hdCxcbiAgICBhcHBlbmRUcmFuc2Zlck9wdGlvbnNcbiAgKVxufVxuXG4vKipcbiAqIExvb2tzIGZvciBzcnY6U1ZfU2VydmljZUlkZW50aWZpY2F0aW9uIG9yIGdtZDpNRF9EYXRhSWRlbnRpZmljYXRpb24gZWxlbWVudFxuICogZGVwZW5kaW5nIG9uIHJlY29yZCB0eXBlLCBjcmVhdGUgaWYgbWlzc2luZ1xuICovXG5mdW5jdGlvbiBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpIHtcbiAgcmV0dXJuIChyb290RWw6IFhtbEVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBraW5kID0gcmVhZEtpbmQocm9vdEVsKVxuICAgIGxldCBlbHROYW1lID0gJ2dtZDpNRF9EYXRhSWRlbnRpZmljYXRpb24nXG4gICAgaWYgKGtpbmQgPT09ICdzZXJ2aWNlJykgZWx0TmFtZSA9ICdzcnY6U1ZfU2VydmljZUlkZW50aWZpY2F0aW9uJ1xuICAgIHJldHVybiBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZSgnZ21kOmlkZW50aWZpY2F0aW9uSW5mbycsIGVsdE5hbWUpKHJvb3RFbClcbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kT3JDcmVhdGVEaXN0cmlidXRpb24oKSB7XG4gIHJldHVybiAocm9vdEVsOiBYbWxFbGVtZW50KSA9PiB7XG4gICAgcmV0dXJuIGZpbmROZXN0ZWRDaGlsZE9yQ3JlYXRlKFxuICAgICAgJ2dtZDpkaXN0cmlidXRpb25JbmZvJyxcbiAgICAgICdnbWQ6TURfRGlzdHJpYnV0aW9uJ1xuICAgICkocm9vdEVsKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVVuaXF1ZUlkZW50aWZpZXIoXG4gIHJlY29yZDogQ2F0YWxvZ1JlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgcGlwZShcbiAgICBmaW5kQ2hpbGRPckNyZWF0ZSgnZ21kOmZpbGVJZGVudGlmaWVyJyksXG4gICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcocmVjb3JkLnVuaXF1ZUlkZW50aWZpZXIpXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVLaW5kKHJlY29yZDogQ2F0YWxvZ1JlY29yZCwgcm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIHBpcGUoXG4gICAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoJ2dtZDpoaWVyYXJjaHlMZXZlbCcsICdnbWQ6TURfU2NvcGVDb2RlJyksXG4gICAgYWRkQXR0cmlidXRlKFxuICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICdodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLzE5MTM5L3Jlc291cmNlcy9nbXhDb2RlbGlzdHMueG1sI01EX1Njb3BlQ29kZSdcbiAgICApLFxuICAgIGFkZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsIHJlY29yZC5raW5kKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlT3duZXJPcmdhbml6YXRpb24oXG4gIHJlY29yZDogQ2F0YWxvZ1JlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgLy8gaWYgbm8gY29udGFjdCBtYXRjaGVzIHRoZSBvd25lciBvcmcsIGNyZWF0ZSBhbiBlbXB0eSBvbmVcbiAgY29uc3Qgb3duZXJDb250YWN0OiBJbmRpdmlkdWFsID0gcmVjb3JkLmNvbnRhY3RzLmZpbmQoXG4gICAgKGNvbnRhY3QpID0+IGNvbnRhY3Qub3JnYW5pemF0aW9uLm5hbWUgPT09IHJlY29yZC5vd25lck9yZ2FuaXphdGlvbi5uYW1lXG4gIClcbiAgcGlwZShcbiAgICBmaW5kQ2hpbGRPckNyZWF0ZSgnZ21kOmNvbnRhY3QnKSxcbiAgICByZW1vdmVBbGxDaGlsZHJlbigpLFxuICAgIGFwcGVuZFJlc3BvbnNpYmxlUGFydHkoXG4gICAgICBvd25lckNvbnRhY3RcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5vd25lckNvbnRhY3QsXG4gICAgICAgICAgICAvLyBvd25lciByZXNwb25zaWJsZSBwYXJ0eSBpcyBhbHdheXMgcG9pbnQgb2YgY29udGFjdFxuICAgICAgICAgICAgcm9sZTogJ3BvaW50X29mX2NvbnRhY3QnLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7XG4gICAgICAgICAgICBvcmdhbml6YXRpb246IHJlY29yZC5vd25lck9yZ2FuaXphdGlvbixcbiAgICAgICAgICAgIGVtYWlsOiAnJyxcbiAgICAgICAgICAgIHJvbGU6ICdwb2ludF9vZl9jb250YWN0JyxcbiAgICAgICAgICB9XG4gICAgKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlUmVjb3JkVXBkYXRlZChyZWNvcmQ6IENhdGFsb2dSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIGZpbmRDaGlsZE9yQ3JlYXRlKCdnbWQ6ZGF0ZVN0YW1wJyksXG4gICAgcmVtb3ZlQWxsQ2hpbGRyZW4oKSxcbiAgICB3cml0ZURhdGVUaW1lKHJlY29yZC5yZWNvcmRVcGRhdGVkKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlVGl0bGUocmVjb3JkOiBDYXRhbG9nUmVjb3JkLCByb290RWw6IFhtbEVsZW1lbnQpIHtcbiAgcGlwZShcbiAgICBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpLFxuICAgIGZpbmROZXN0ZWRDaGlsZE9yQ3JlYXRlKCdnbWQ6Y2l0YXRpb24nLCAnZ21kOkNJX0NpdGF0aW9uJywgJ2dtZDp0aXRsZScpLFxuICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKHJlY29yZC50aXRsZSlcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUFic3RyYWN0KHJlY29yZDogQ2F0YWxvZ1JlY29yZCwgcm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kQ2hpbGRPckNyZWF0ZSgnZ21kOmFic3RyYWN0JyksXG4gICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcocmVjb3JkLmFic3RyYWN0KVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlU3RhdHVzKHJlY29yZDogRGF0YXNldFJlY29yZCwgcm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZSgnZ21kOnN0YXR1cycsICdnbWQ6TURfUHJvZ3Jlc3NDb2RlJyksXG4gICAgYWRkQXR0cmlidXRlKFxuICAgICAgJ2NvZGVMaXN0JyxcbiAgICAgICdodHRwOi8vc3RhbmRhcmRzLmlzby5vcmcvaXNvLzE5MTM5L3Jlc291cmNlcy9nbXhDb2RlbGlzdHMueG1sI01EX1Byb2dyZXNzQ29kZSdcbiAgICApLFxuICAgIGFkZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsIGdldFByb2dyZXNzQ29kZShyZWNvcmQuc3RhdHVzKSlcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUNvbnRhY3RzKHJlY29yZDogQ2F0YWxvZ1JlY29yZCwgcm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICByZW1vdmVDaGlsZHJlbkJ5TmFtZSgnZ21kOnBvaW50T2ZDb250YWN0JyksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAuLi5yZWNvcmQuY29udGFjdHMubWFwKChjb250YWN0KSA9PlxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpwb2ludE9mQ29udGFjdCcpLFxuICAgICAgICAgIGFwcGVuZFJlc3BvbnNpYmxlUGFydHkoY29udGFjdClcbiAgICAgICAgKVxuICAgICAgKVxuICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZUtleXdvcmRzKHJlY29yZDogQ2F0YWxvZ1JlY29yZCwgcm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICByZW1vdmVLZXl3b3JkcygpLFxuICAgIGFwcGVuZEtleXdvcmRzKHJlY29yZC5rZXl3b3JkcylcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVRvcGljcyhyZWNvcmQ6IENhdGFsb2dSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgcmVtb3ZlQ2hpbGRyZW5CeU5hbWUoJ2dtZDp0b3BpY0NhdGVnb3J5JyksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAuLi5yZWNvcmQudG9waWNzLm1hcCgodG9waWMpID0+XG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOnRvcGljQ2F0ZWdvcnknKSxcbiAgICAgICAgICBjcmVhdGVDaGlsZCgnZ21kOk1EX1RvcGljQ2F0ZWdvcnlDb2RlJyksXG4gICAgICAgICAgc2V0VGV4dENvbnRlbnQodG9waWMpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVMaWNlbnNlcyhyZWNvcmQ6IENhdGFsb2dSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgcmVtb3ZlTGljZW5zZXMoKSxcbiAgICBhcHBlbmRDaGlsZHJlbiguLi5yZWNvcmQubGljZW5zZXMubWFwKGNyZWF0ZUxpY2Vuc2UpKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlTGVnYWxDb25zdHJhaW50cyhcbiAgcmVjb3JkOiBDYXRhbG9nUmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgcmVtb3ZlTGVnYWxDb25zdHJhaW50cygpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgLi4ucmVjb3JkLmxlZ2FsQ29uc3RyYWludHMubWFwKChjKSA9PiBjcmVhdGVDb25zdHJhaW50KGMsICdsZWdhbCcpKVxuICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVNlY3VyaXR5Q29uc3RyYWludHMoXG4gIHJlY29yZDogQ2F0YWxvZ1JlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgcGlwZShcbiAgICBmaW5kT3JDcmVhdGVJZGVudGlmaWNhdGlvbigpLFxuICAgIHJlbW92ZVNlY3VyaXR5Q29uc3RyYWludHMoKSxcbiAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgIC4uLnJlY29yZC5zZWN1cml0eUNvbnN0cmFpbnRzLm1hcCgoYykgPT4gY3JlYXRlQ29uc3RyYWludChjLCAnc2VjdXJpdHknKSlcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVPdGhlckNvbnN0cmFpbnRzKFxuICByZWNvcmQ6IENhdGFsb2dSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICByZW1vdmVPdGhlckNvbnN0cmFpbnRzKCksXG4gICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAuLi5yZWNvcmQub3RoZXJDb25zdHJhaW50cy5tYXAoKGMpID0+IGNyZWF0ZUNvbnN0cmFpbnQoYywgJ290aGVyJykpXG4gICAgKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlVXBkYXRlRnJlcXVlbmN5KFxuICByZWNvcmQ6IERhdGFzZXRSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kQ2hpbGRPckNyZWF0ZSgnZ21kOnJlc291cmNlTWFpbnRlbmFuY2UnKSxcbiAgICByZW1vdmVBbGxDaGlsZHJlbigpLFxuICAgIGZpbmRDaGlsZE9yQ3JlYXRlKCdnbWQ6TURfTWFpbnRlbmFuY2VJbmZvcm1hdGlvbicpLFxuICAgIHR5cGVvZiByZWNvcmQudXBkYXRlRnJlcXVlbmN5ID09PSAnb2JqZWN0J1xuICAgICAgPyBwaXBlKFxuICAgICAgICAgIGNyZWF0ZUNoaWxkKCdnbWQ6dXNlckRlZmluZWRNYWludGVuYW5jZUZyZXF1ZW5jeScpLFxuICAgICAgICAgIGNyZWF0ZUNoaWxkKCdndHM6VE1fUGVyaW9kRHVyYXRpb24nKSxcbiAgICAgICAgICBzZXRUZXh0Q29udGVudChnZXRJU09EdXJhdGlvbihyZWNvcmQudXBkYXRlRnJlcXVlbmN5KSlcbiAgICAgICAgKVxuICAgICAgOiBwaXBlKFxuICAgICAgICAgIGNyZWF0ZUNoaWxkKCdnbWQ6bWFpbnRlbmFuY2VBbmRVcGRhdGVGcmVxdWVuY3knKSxcbiAgICAgICAgICBjcmVhdGVDaGlsZCgnZ21kOk1EX01haW50ZW5hbmNlRnJlcXVlbmN5Q29kZScpLFxuICAgICAgICAgIGFkZEF0dHJpYnV0ZShcbiAgICAgICAgICAgICdjb2RlTGlzdCcsXG4gICAgICAgICAgICAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTEzOS9yZXNvdXJjZXMvZ214Q29kZWxpc3RzLnhtbCNNRF9NYWludGVuYW5jZUZyZXF1ZW5jeUNvZGUnXG4gICAgICAgICAgKSxcbiAgICAgICAgICBhZGRBdHRyaWJ1dGUoXG4gICAgICAgICAgICAnY29kZUxpc3RWYWx1ZScsXG4gICAgICAgICAgICBnZXRNYWludGVuYW5jZUZyZXF1ZW5jeUNvZGUocmVjb3JkLnVwZGF0ZUZyZXF1ZW5jeSlcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZURhdGFzZXRDcmVhdGVkKHJlY29yZDogRGF0YXNldFJlY29yZCwgcm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIGlmICghKCdkYXRhc2V0Q3JlYXRlZCcgaW4gcmVjb3JkKSkgcmV0dXJuXG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZSgnZ21kOmNpdGF0aW9uJywgJ2dtZDpDSV9DaXRhdGlvbicpLFxuICAgIGZhbGxiYWNrKFxuICAgICAgdXBkYXRlQ2l0YXRpb25EYXRlKHJlY29yZC5kYXRhc2V0Q3JlYXRlZCwgJ2NyZWF0aW9uJyksXG4gICAgICBhcHBlbmRDaXRhdGlvbkRhdGUocmVjb3JkLmRhdGFzZXRDcmVhdGVkLCAnY3JlYXRpb24nKVxuICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZURhdGFzZXRVcGRhdGVkKHJlY29yZDogRGF0YXNldFJlY29yZCwgcm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIGlmICghKCdkYXRhc2V0VXBkYXRlZCcgaW4gcmVjb3JkKSkgcmV0dXJuXG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICBmaW5kTmVzdGVkQ2hpbGRPckNyZWF0ZSgnZ21kOmNpdGF0aW9uJywgJ2dtZDpDSV9DaXRhdGlvbicpLFxuICAgIGZhbGxiYWNrKFxuICAgICAgdXBkYXRlQ2l0YXRpb25EYXRlKHJlY29yZC5kYXRhc2V0VXBkYXRlZCwgJ3JldmlzaW9uJyksXG4gICAgICBhcHBlbmRDaXRhdGlvbkRhdGUocmVjb3JkLmRhdGFzZXRVcGRhdGVkLCAncmV2aXNpb24nKVxuICAgIClcbiAgKShyb290RWwpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVNwYXRpYWxSZXByZXNlbnRhdGlvbihcbiAgcmVjb3JkOiBEYXRhc2V0UmVjb3JkLFxuICByb290RWw6IFhtbEVsZW1lbnRcbikge1xuICBwaXBlKFxuICAgIGZpbmRPckNyZWF0ZUlkZW50aWZpY2F0aW9uKCksXG4gICAgZmluZE5lc3RlZENoaWxkT3JDcmVhdGUoXG4gICAgICAnZ21kOnNwYXRpYWxSZXByZXNlbnRhdGlvblR5cGUnLFxuICAgICAgJ2dtZDpNRF9TcGF0aWFsUmVwcmVzZW50YXRpb25UeXBlQ29kZSdcbiAgICApLFxuICAgIGFkZEF0dHJpYnV0ZShcbiAgICAgICdjb2RlTGlzdCcsXG4gICAgICAnaHR0cDovL3N0YW5kYXJkcy5pc28ub3JnL2lzby8xOTEzOS9yZXNvdXJjZXMvZ214Q29kZWxpc3RzLnhtbCNNRF9TcGF0aWFsUmVwcmVzZW50YXRpb25UeXBlQ29kZSdcbiAgICApLFxuICAgIGFkZEF0dHJpYnV0ZSgnY29kZUxpc3RWYWx1ZScsIHJlY29yZC5zcGF0aWFsUmVwcmVzZW50YXRpb24pXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVHcmFwaGljT3ZlcnZpZXdzKFxuICByZWNvcmQ6IERhdGFzZXRSZWNvcmQsXG4gIHJvb3RFbDogWG1sRWxlbWVudFxuKSB7XG4gIHBpcGUoXG4gICAgZmluZE9yQ3JlYXRlSWRlbnRpZmljYXRpb24oKSxcbiAgICByZW1vdmVDaGlsZHJlbkJ5TmFtZSgnZ21kOmdyYXBoaWNPdmVydmlldycpLFxuICAgIGFwcGVuZENoaWxkcmVuKFxuICAgICAgLi4ucmVjb3JkLm92ZXJ2aWV3cy5tYXAoKG92ZXJ2aWV3KSA9PlxuICAgICAgICBwaXBlKFxuICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpncmFwaGljT3ZlcnZpZXcnKSxcbiAgICAgICAgICBjcmVhdGVDaGlsZCgnZ21kOk1EX0Jyb3dzZUdyYXBoaWMnKSxcbiAgICAgICAgICBhcHBlbmRDaGlsZHJlbihcbiAgICAgICAgICAgIHBpcGUoXG4gICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpmaWxlTmFtZScpLFxuICAgICAgICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhvdmVydmlldy51cmwudG9TdHJpbmcoKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApLFxuICAgICAgICAgICdkZXNjcmlwdGlvbicgaW4gb3ZlcnZpZXdcbiAgICAgICAgICAgID8gYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpmaWxlRGVzY3JpcHRpb24nKSxcbiAgICAgICAgICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKG92ZXJ2aWV3LmRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBub29wXG4gICAgICAgIClcbiAgICAgIClcbiAgICApXG4gICkocm9vdEVsKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVEaXN0cmlidXRpb25zKHJlY29yZDogRGF0YXNldFJlY29yZCwgcm9vdEVsOiBYbWxFbGVtZW50KSB7XG4gIHBpcGUoXG4gICAgcmVtb3ZlRGlzdHJpYnV0aW9ucygpLFxuICAgIGFwcGVuZENoaWxkcmVuKC4uLnJlY29yZC5kaXN0cmlidXRpb25zLm1hcChjcmVhdGVEaXN0cmlidXRpb24pKVxuICApKHJvb3RFbClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlTGluZWFnZShyZWNvcmQ6IERhdGFzZXRSZWNvcmQsIHJvb3RFbDogWG1sRWxlbWVudCkge1xuICBwaXBlKFxuICAgIGZpbmROZXN0ZWRDaGlsZE9yQ3JlYXRlKFxuICAgICAgJ2dtZDpkYXRhUXVhbGl0eUluZm8nLFxuICAgICAgJ2dtZDpEUV9EYXRhUXVhbGl0eScsXG4gICAgICAnZ21kOmxpbmVhZ2UnLFxuICAgICAgJ2dtZDpMSV9MaW5lYWdlJyxcbiAgICAgICdnbWQ6c3RhdGVtZW50J1xuICAgICksXG4gICAgd3JpdGVDaGFyYWN0ZXJTdHJpbmcocmVjb3JkLmxpbmVhZ2UpXG4gICkocm9vdEVsKVxufVxuXG5mdW5jdGlvbiBnZXRTZXJ2aWNlRW5kcG9pbnRQcm90b2NvbChlbmRwb2ludDogU2VydmljZUVuZHBvaW50KTogc3RyaW5nIHtcbiAgc3dpdGNoIChlbmRwb2ludC5wcm90b2NvbC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAnd2ZzJzpcbiAgICAgIHJldHVybiAnT0dDOldGUydcbiAgICBjYXNlICd3bXMnOlxuICAgICAgcmV0dXJuICdPR0M6V01TJ1xuICAgIGNhc2UgJ3dwcyc6XG4gICAgICByZXR1cm4gJ09HQzpXUFMnXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBlbmRwb2ludC5wcm90b2NvbFxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU9ubGluZVJlc291cmNlKG9ubGluZVJlc291cmNlOiBTZXJ2aWNlT25saW5lUmVzb3VyY2UpIHtcbiAgbGV0IGxpbmthZ2VVcmwsIGZ1bmN0aW9uQ29kZSwgcHJvdG9jb2xcbiAgaWYgKG9ubGluZVJlc291cmNlLnR5cGUgPT09ICdlbmRwb2ludCcpIHtcbiAgICBsaW5rYWdlVXJsID0gb25saW5lUmVzb3VyY2UuZW5kcG9pbnRVcmwudG9TdHJpbmcoKVxuICAgIHByb3RvY29sID0gZ2V0U2VydmljZUVuZHBvaW50UHJvdG9jb2wob25saW5lUmVzb3VyY2UpXG4gICAgZnVuY3Rpb25Db2RlID0gJ2Rvd25sb2FkJ1xuICB9IGVsc2Uge1xuICAgIGxpbmthZ2VVcmwgPSBvbmxpbmVSZXNvdXJjZS51cmwudG9TdHJpbmcoKVxuICAgIGZ1bmN0aW9uQ29kZSA9ICdpbmZvcm1hdGlvbidcbiAgICBwcm90b2NvbCA9ICdXV1c6TElOSydcbiAgfVxuICBjb25zdCBhcHBlbmRUcmFuc2Zlck9wdGlvbnMgPSBhcHBlbmRDaGlsZHJlbihcbiAgICBwaXBlKFxuICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOnRyYW5zZmVyT3B0aW9ucycpLFxuICAgICAgY3JlYXRlQ2hpbGQoJ2dtZDpNRF9EaWdpdGFsVHJhbnNmZXJPcHRpb25zJyksXG4gICAgICBjcmVhdGVDaGlsZCgnZ21kOm9uTGluZScpLFxuICAgICAgY3JlYXRlQ2hpbGQoJ2dtZDpDSV9PbmxpbmVSZXNvdXJjZScpLFxuICAgICAgd3JpdGVMaW5rYWdlKGxpbmthZ2VVcmwpLFxuICAgICAgJ2Rlc2NyaXB0aW9uJyBpbiBvbmxpbmVSZXNvdXJjZVxuICAgICAgICA/IGFwcGVuZENoaWxkcmVuKFxuICAgICAgICAgICAgcGlwZShcbiAgICAgICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOmRlc2NyaXB0aW9uJyksXG4gICAgICAgICAgICAgIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKG9ubGluZVJlc291cmNlLmRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgOiBub29wLFxuICAgICAgJ25hbWUnIGluIG9ubGluZVJlc291cmNlXG4gICAgICAgID8gYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgICAgICBwaXBlKFxuICAgICAgICAgICAgICBjcmVhdGVFbGVtZW50KCdnbWQ6bmFtZScpLFxuICAgICAgICAgICAgICB3cml0ZUNoYXJhY3RlclN0cmluZyhvbmxpbmVSZXNvdXJjZS5uYW1lKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgOiBub29wLFxuICAgICAgYXBwZW5kQ2hpbGRyZW4oXG4gICAgICAgIHBpcGUoY3JlYXRlRWxlbWVudCgnZ21kOnByb3RvY29sJyksIHdyaXRlQ2hhcmFjdGVyU3RyaW5nKHByb3RvY29sKSksXG4gICAgICAgIHBpcGUoXG4gICAgICAgICAgY3JlYXRlRWxlbWVudCgnZ21kOmZ1bmN0aW9uJyksXG4gICAgICAgICAgY3JlYXRlQ2hpbGQoJ2dtZDpDSV9PbkxpbmVGdW5jdGlvbkNvZGUnKSxcbiAgICAgICAgICBhZGRBdHRyaWJ1dGUoXG4gICAgICAgICAgICAnY29kZUxpc3QnLFxuICAgICAgICAgICAgJ2h0dHA6Ly9zdGFuZGFyZHMuaXNvLm9yZy9pc28vMTkxMzkvcmVzb3VyY2VzL2dteENvZGVsaXN0cy54bWwjQ0lfT25MaW5lRnVuY3Rpb25Db2RlJ1xuICAgICAgICAgICksXG4gICAgICAgICAgYWRkQXR0cmlidXRlKCdjb2RlTGlzdFZhbHVlJywgZnVuY3Rpb25Db2RlKVxuICAgICAgICApXG4gICAgICApXG4gICAgKVxuICApXG4gIHJldHVybiBwaXBlKFxuICAgIGNyZWF0ZUVsZW1lbnQoJ2dtZDpkaXN0cmlidXRpb25JbmZvJyksXG4gICAgY3JlYXRlQ2hpbGQoJ2dtZDpNRF9EaXN0cmlidXRpb24nKSxcbiAgICBhcHBlbmRUcmFuc2Zlck9wdGlvbnNcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVPbmxpbmVSZXNvdXJjZXMoXG4gIHJlY29yZDogU2VydmljZVJlY29yZCxcbiAgcm9vdEVsOiBYbWxFbGVtZW50XG4pIHtcbiAgcGlwZShcbiAgICByZW1vdmVEaXN0cmlidXRpb25zKCksXG4gICAgYXBwZW5kQ2hpbGRyZW4oLi4ucmVjb3JkLm9ubGluZVJlc291cmNlcy5tYXAoY3JlYXRlT25saW5lUmVzb3VyY2UpKVxuICApKHJvb3RFbClcbn1cbiJdfQ==
|
|
@@ -3,7 +3,7 @@ import { GroupsApiService, SearchApiService, } from '../../../../../../../libs/d
|
|
|
3
3
|
import { ElasticsearchService } from '../elasticsearch';
|
|
4
4
|
import { getAsArray, getAsUrl, mapOrganization, selectFallback, selectField, selectTranslatedField, } from '../../../../../../../libs/api/metadata-converter/src';
|
|
5
5
|
import { combineLatest, of, switchMap, takeLast } from 'rxjs';
|
|
6
|
-
import { filter, map, shareReplay, startWith, tap } from 'rxjs/operators';
|
|
6
|
+
import { filter, map, shareReplay, startWith, tap, withLatestFrom, } from 'rxjs/operators';
|
|
7
7
|
import { LangService } from '../../../../../../../libs/util/i18n/src';
|
|
8
8
|
import { PlatformServiceInterface } from '../../../../../../../libs/common/domain/src/lib/platform.service.interface';
|
|
9
9
|
import { coerce, satisfies, valid } from 'semver';
|
|
@@ -166,11 +166,18 @@ export class OrganizationsFromMetadataService {
|
|
|
166
166
|
if (!allContactOrgs.length)
|
|
167
167
|
return of(record);
|
|
168
168
|
const ownerOrganization = allContactOrgs[0];
|
|
169
|
-
|
|
169
|
+
// read the owner group as well to have a fallback logo
|
|
170
|
+
const groupId = selectField(source, 'groupOwner');
|
|
171
|
+
const group$ = this.groups$.pipe(map((groups) => groups.find((group) => {
|
|
172
|
+
return group.id === Number(groupId);
|
|
173
|
+
})));
|
|
174
|
+
return this.organisations$.pipe(takeLast(1), withLatestFrom(group$), map(([organisations, group]) => {
|
|
170
175
|
const recordOrganisation = organisations.filter((org) => org.name === ownerOrganization.name)[0];
|
|
176
|
+
const logoUrl = group?.logo && getAsUrl(`${IMAGE_URL}${group.logo}`);
|
|
171
177
|
return {
|
|
172
178
|
...record,
|
|
173
179
|
ownerOrganization: {
|
|
180
|
+
logoUrl,
|
|
174
181
|
...ownerOrganization,
|
|
175
182
|
...recordOrganisation,
|
|
176
183
|
},
|
|
@@ -183,4 +190,4 @@ export class OrganizationsFromMetadataService {
|
|
|
183
190
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: OrganizationsFromMetadataService, decorators: [{
|
|
184
191
|
type: Injectable
|
|
185
192
|
}], ctorParameters: function () { return [{ type: i1.ElasticsearchService }, { type: i2.SearchApiService }, { type: i2.GroupsApiService }, { type: i3.PlatformServiceInterface }, { type: i4.LangService }]; } });
|
|
186
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemF0aW9ucy1mcm9tLW1ldGFkYXRhLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwaS9yZXBvc2l0b3J5L3NyYy9saWIvZ240L29yZ2FuaXphdGlvbnMvb3JnYW5pemF0aW9ucy1mcm9tLW1ldGFkYXRhLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUMxQyxPQUFPLEVBRUwsZ0JBQWdCLEVBQ2hCLGdCQUFnQixHQUNqQixNQUFNLCtDQUErQyxDQUFBO0FBVXRELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ3ZELE9BQU8sRUFDTCxVQUFVLEVBQ1YsUUFBUSxFQUNSLGVBQWUsRUFFZixjQUFjLEVBQ2QsV0FBVyxFQUNYLHFCQUFxQixHQUV0QixNQUFNLHNEQUFzRCxDQUFBO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDekUsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUN6RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUNBQXlDLENBQUE7QUFDckUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sNEVBQTRFLENBQUE7QUFDckgsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sUUFBUSxDQUFBOzs7Ozs7QUFFakQsTUFBTSxTQUFTLEdBQUcsZ0NBQWdDLENBQUE7QUFxQmxELE1BQU0sT0FBTyxnQ0FBZ0M7SUEwRDNDLFlBQ1UsU0FBK0IsRUFDL0IsZ0JBQWtDLEVBQ2xDLGdCQUFrQyxFQUNsQyxlQUF5QyxFQUN6QyxXQUF3QjtR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RCxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU07WUFBRSxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUU3QyxNQUFNLGlCQUFpQixHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUUzQyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUM3QixRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQ1gsR0FBRyxDQUFDLENBQUMsYUFBdUMsRUFBRSxFQUFFO1lBQzlDLE1BQU0sa0JBQWtCLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FDN0MsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssaUJBQWlCLENBQUMsSUFBSSxDQUM3QyxDQUFDLENBQUMsQ0FBQyxDQUFBO1lBQ0osT0FBTztnQkFDTCxHQUFHLE1BQU07Z0JBQ1QsaUJBQWlCLEVBQUU7b0JBQ2pCLEdBQUcsaUJBQWlCO29CQUNwQixHQUFHLGtCQUFrQjtpQkFDdEI7YUFDRixDQUFBO1FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtJQUNILENBQUM7OEdBcFFVLGdDQUFnQztrSEFBaEMsZ0NBQWdDOzsyRkFBaEMsZ0NBQWdDO2tCQUQ1QyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQge1xuICBHcm91cEFwaU1vZGVsLFxuICBHcm91cHNBcGlTZXJ2aWNlLFxuICBTZWFyY2hBcGlTZXJ2aWNlLFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2RhdGEtYWNjZXNzL2duNC9zcmMnXG5pbXBvcnQge1xuICBGaWVsZEZpbHRlckJ5VmFsdWVzLFxuICBGaWVsZEZpbHRlcnMsXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL21vZGVsL3NlYXJjaCdcbmltcG9ydCB7XG4gIENhdGFsb2dSZWNvcmQsXG4gIE9yZ2FuaXphdGlvbixcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvbW9kZWwvcmVjb3JkJ1xuaW1wb3J0IHsgT3JnYW5pemF0aW9uc1NlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9kb21haW4vc3JjL2xpYi9vcmdhbml6YXRpb25zLnNlcnZpY2UuaW50ZXJmYWNlJ1xuaW1wb3J0IHsgRWxhc3RpY3NlYXJjaFNlcnZpY2UgfSBmcm9tICcuLi9lbGFzdGljc2VhcmNoJ1xuaW1wb3J0IHtcbiAgZ2V0QXNBcnJheSxcbiAgZ2V0QXNVcmwsXG4gIG1hcE9yZ2FuaXphdGlvbixcbiAgTWV0YWRhdGFPYmplY3QsXG4gIHNlbGVjdEZhbGxiYWNrLFxuICBzZWxlY3RGaWVsZCxcbiAgc2VsZWN0VHJhbnNsYXRlZEZpZWxkLFxuICBTb3VyY2VXaXRoVW5rbm93blByb3BzLFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwaS9tZXRhZGF0YS1jb252ZXJ0ZXIvc3JjJ1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgb2YsIHN3aXRjaE1hcCwgdGFrZUxhc3QgfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIHNoYXJlUmVwbGF5LCBzdGFydFdpdGgsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuaW1wb3J0IHsgTGFuZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3V0aWwvaTE4bi9zcmMnXG5pbXBvcnQgeyBQbGF0Zm9ybVNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9kb21haW4vc3JjL2xpYi9wbGF0Zm9ybS5zZXJ2aWNlLmludGVyZmFjZSdcbmltcG9ydCB7IGNvZXJjZSwgc2F0aXNmaWVzLCB2YWxpZCB9IGZyb20gJ3NlbXZlcidcblxuY29uc3QgSU1BR0VfVVJMID0gJy9nZW9uZXR3b3JrL2ltYWdlcy9oYXJ2ZXN0aW5nLydcblxudHlwZSBFU0J1Y2tldCA9IHtcbiAga2V5OiBzdHJpbmdcbiAgZG9jX2NvdW50OiBudW1iZXJcbn1cbmludGVyZmFjZSBPcmdhbml6YXRpb25BZ2dzQnVja2V0IGV4dGVuZHMgRVNCdWNrZXQge1xuICBtYWlsOiB7XG4gICAgYnVja2V0czogRVNCdWNrZXRbXVxuICB9XG4gIGxvZ29Vcmw6IHtcbiAgICBidWNrZXRzOiBFU0J1Y2tldFtdXG4gIH1cbn1cbmludGVyZmFjZSBJbmNvbXBsZXRlT3JnYW5pemF0aW9uIHtcbiAgbmFtZTogc3RyaW5nXG4gIGVtYWlsczogc3RyaW5nW11cbiAgcmVjb3JkQ291bnQ6IG51bWJlclxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgT3JnYW5pemF0aW9uc0Zyb21NZXRhZGF0YVNlcnZpY2VcbiAgaW1wbGVtZW50cyBPcmdhbml6YXRpb25zU2VydmljZUludGVyZmFjZVxue1xuICBwcml2YXRlIGdyb3VwcyQ6IE9ic2VydmFibGU8R3JvdXBBcGlNb2RlbFtdPiA9IG9mKHRydWUpLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuZ3JvdXBzQXBpU2VydmljZS5nZXRHcm91cHMoKSksXG4gICAgc2hhcmVSZXBsYXkoKVxuICApXG4gIHByaXZhdGUgb3JnYW5pc2F0aW9uc0FnZ3MkOiBPYnNlcnZhYmxlPE9yZ2FuaXphdGlvbkFnZ3NCdWNrZXRbXT4gPVxuICAgIHRoaXMucGxhdGZvcm1TZXJ2aWNlLmdldEFwaVZlcnNpb24oKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKCh2ZXJzaW9uKSA9PlxuICAgICAgICB0aGlzLnNlYXJjaEFwaVNlcnZpY2Uuc2VhcmNoKFxuICAgICAgICAgICdidWNrZXQnLFxuICAgICAgICAgIG51bGwsXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5nZXRBZ2dyZWdhdGlvblNlYXJjaFJlcXVlc3QodmVyc2lvbikpXG4gICAgICAgIClcbiAgICAgICksXG4gICAgICBmaWx0ZXIoKHJlc3BvbnNlKSA9PiAhIXJlc3BvbnNlLmFnZ3JlZ2F0aW9ucy5jb250YWN0Lm9yZyksXG4gICAgICB0YXAoKHJlc3BvbnNlKSA9PlxuICAgICAgICByZXNwb25zZS5hZ2dyZWdhdGlvbnMuY29udGFjdC5vcmcuYnVja2V0cy5mb3JFYWNoKFxuICAgICAgICAgIChyKSA9PlxuICAgICAgICAgICAgKHIuZG9jX2NvdW50ID1cbiAgICAgICAgICAgICAgcmVzcG9uc2UuYWdncmVnYXRpb25zLm9yZ0ZvclJlc291cmNlLmJ1Y2tldHMuZmluZChcbiAgICAgICAgICAgICAgICAob3JnKSA9PiBvcmcua2V5ID09PSByLmtleVxuICAgICAgICAgICAgICApPy5kb2NfY291bnQgfHwgci5kb2NfY291bnQpXG4gICAgICAgIClcbiAgICAgICksXG4gICAgICBtYXAoKHJlc3BvbnNlKSA9PiByZXNwb25zZS5hZ2dyZWdhdGlvbnMuY29udGFjdC5vcmcuYnVja2V0cyksXG4gICAgICBzaGFyZVJlcGxheSgpXG4gICAgKVxuICBwcml2YXRlIG9yZ2FuaXNhdGlvbnNXaXRob3V0R3JvdXBzJDogT2JzZXJ2YWJsZTxJbmNvbXBsZXRlT3JnYW5pemF0aW9uW10+ID1cbiAgICB0aGlzLm9yZ2FuaXNhdGlvbnNBZ2dzJC5waXBlKFxuICAgICAgbWFwKChidWNrZXRzKSA9PlxuICAgICAgICBidWNrZXRzLm1hcCgoYnVja2V0KSA9PiB7XG4gICAgICAgICAgY29uc3QgbG9nb1VybCA9IGJ1Y2tldC5sb2dvVXJsLmJ1Y2tldHM/LlswXT8ua2V5XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5hbWU6IGJ1Y2tldC5rZXksXG4gICAgICAgICAgICBlbWFpbHM6IGJ1Y2tldC5tYWlsLmJ1Y2tldHNcbiAgICAgICAgICAgICAgLm1hcCgoYnVja2V0KSA9PiBidWNrZXQua2V5KVxuICAgICAgICAgICAgICAuZmlsdGVyKChtYWlsKSA9PiAhIW1haWwpLFxuICAgICAgICAgICAgcmVjb3JkQ291bnQ6IGJ1Y2tldC5kb2NfY291bnQsXG4gICAgICAgICAgICAuLi4obG9nb1VybCAmJiB7IGxvZ29Vcmw6IGdldEFzVXJsKGxvZ29VcmwpIH0pLFxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICApXG4gIG9yZ2FuaXNhdGlvbnNDb3VudCQgPSB0aGlzLm9yZ2FuaXNhdGlvbnNBZ2dzJC5waXBlKFxuICAgIG1hcCgob3JnYW5pc2F0aW9ucykgPT4gb3JnYW5pc2F0aW9ucy5sZW5ndGgpXG4gIClcbiAgb3JnYW5pc2F0aW9ucyQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLm9yZ2FuaXNhdGlvbnNXaXRob3V0R3JvdXBzJCxcbiAgICB0aGlzLmdyb3VwcyQucGlwZShzdGFydFdpdGgobnVsbCkpLFxuICBdKS5waXBlKFxuICAgIG1hcCgoW29yZ2FuaXNhdGlvbnMsIGdyb3Vwc10pID0+IHtcbiAgICAgIHJldHVybiAhZ3JvdXBzID8gb3JnYW5pc2F0aW9ucyA6IHRoaXMubWFwV2l0aEdyb3VwcyhvcmdhbmlzYXRpb25zLCBncm91cHMpXG4gICAgfSksXG4gICAgc2hhcmVSZXBsYXkoKVxuICApXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlc1NlcnZpY2U6IEVsYXN0aWNzZWFyY2hTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2VhcmNoQXBpU2VydmljZTogU2VhcmNoQXBpU2VydmljZSxcbiAgICBwcml2YXRlIGdyb3Vwc0FwaVNlcnZpY2U6IEdyb3Vwc0FwaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwbGF0Zm9ybVNlcnZpY2U6IFBsYXRmb3JtU2VydmljZUludGVyZmFjZSxcbiAgICBwcml2YXRlIGxhbmdTZXJ2aWNlOiBMYW5nU2VydmljZVxuICApIHt9XG5cbiAgcHJpdmF0ZSBsYW5nMyA9IHRoaXMubGFuZ1NlcnZpY2UuZ25MYW5nXG5cbiAgZXF1YWxzTm9ybWFsaXplZFN0cmluZ3MoXG4gICAgc3RyMTogc3RyaW5nLFxuICAgIHN0cjI6IHN0cmluZyxcbiAgICByZXBsYWNlU3BlY2lhbENoYXJzID0gdHJ1ZVxuICApOiBib29sZWFuIHtcbiAgICBpZiAoIXN0cjEgfHwgIXN0cjIpIHJldHVybiBmYWxzZVxuICAgIHJldHVybiAoXG4gICAgICB0aGlzLm5vcm1hbGl6ZVN0cmluZyhzdHIxLCByZXBsYWNlU3BlY2lhbENoYXJzKSA9PT1cbiAgICAgIHRoaXMubm9ybWFsaXplU3RyaW5nKHN0cjIsIHJlcGxhY2VTcGVjaWFsQ2hhcnMpXG4gICAgKVxuICB9XG5cbiAgbm9ybWFsaXplU3RyaW5nKHN0cjogc3RyaW5nLCByZXBsYWNlU3BlY2lhbENoYXJzID0gdHJ1ZSk6IHN0cmluZyB7XG4gICAgZnVuY3Rpb24gbm9ybWFsaXplKHN0cjogc3RyaW5nKSB7XG4gICAgICByZXR1cm4gc3RyXG4gICAgICAgIC5ub3JtYWxpemUoJ05GRCcpIC8vIGRlY29tcG9zZSBncmFwaGVtZXMgdG8gcmVtb3ZlIGFjY2VudHMgZnJvbSBsZXR0ZXJzXG4gICAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJykgLy8gcmVtb3ZlIGFjY2VudCBjaGFyYWN0ZXJzXG4gICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgfVxuICAgIGlmIChyZXBsYWNlU3BlY2lhbENoYXJzKSB7XG4gICAgICByZXR1cm4gbm9ybWFsaXplKHN0cikucmVwbGFjZSgvW15hLXowLTldL2csICcnKSAvLyByZXBsYWNlIGFsbCBleGNlcHQgbGV0dGVycyAmIG51bWJlcnNcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5vcm1hbGl6ZShzdHIpXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRBZ2dyZWdhdGlvblNlYXJjaFJlcXVlc3QoZ25WZXJzaW9uOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzZW1WZXJzaW9uID0gdmFsaWQoY29lcmNlKGduVmVyc2lvbikpXG4gICAgcmV0dXJuIHRoaXMuZXNTZXJ2aWNlLmdldFNlYXJjaFJlcXVlc3RCb2R5KHtcbiAgICAgIGNvbnRhY3Q6IHtcbiAgICAgICAgbmVzdGVkOiB7XG4gICAgICAgICAgcGF0aDogJ2NvbnRhY3RGb3JSZXNvdXJjZScsXG4gICAgICAgIH0sXG4gICAgICAgIGFnZ3M6IHtcbiAgICAgICAgICBvcmc6IHtcbiAgICAgICAgICAgIHRlcm1zOiB7XG4gICAgICAgICAgICAgIGZpZWxkOlxuICAgICAgICAgICAgICAgIHNlbVZlcnNpb24gPT09ICc0LjIuMidcbiAgICAgICAgICAgICAgICAgID8gJ2NvbnRhY3RGb3JSZXNvdXJjZS5vcmdhbmlzYXRpb24nXG4gICAgICAgICAgICAgICAgICA6ICdjb250YWN0Rm9yUmVzb3VyY2Uub3JnYW5pc2F0aW9uT2JqZWN0LmRlZmF1bHQua2V5d29yZCcsXG4gICAgICAgICAgICAgIGV4Y2x1ZGU6ICcnLFxuICAgICAgICAgICAgICBzaXplOiA1MDAwLFxuICAgICAgICAgICAgICBvcmRlcjogeyBfa2V5OiAnYXNjJyB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFnZ3M6IHtcbiAgICAgICAgICAgICAgbWFpbDoge1xuICAgICAgICAgICAgICAgIHRlcm1zOiB7XG4gICAgICAgICAgICAgICAgICBzaXplOiA1MCxcbiAgICAgICAgICAgICAgICAgIGV4Y2x1ZGU6ICcnLFxuICAgICAgICAgICAgICAgICAgZmllbGQ6IHNhdGlzZmllcyhzZW1WZXJzaW9uLCAnNC4yLjIgLSA0LjIuNCcpXG4gICAgICAgICAgICAgICAgICAgID8gJ2NvbnRhY3RGb3JSZXNvdXJjZS5lbWFpbC5rZXl3b3JkJ1xuICAgICAgICAgICAgICAgICAgICA6ICdjb250YWN0Rm9yUmVzb3VyY2UuZW1haWwnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGxvZ29Vcmw6IHtcbiAgICAgICAgICAgICAgICB0ZXJtczoge1xuICAgICAgICAgICAgICAgICAgc2l6ZTogMSxcbiAgICAgICAgICAgICAgICAgIGV4Y2x1ZGU6ICcnLFxuICAgICAgICAgICAgICAgICAgZmllbGQ6ICdjb250YWN0Rm9yUmVzb3VyY2UubG9nby5rZXl3b3JkJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIG9yZ0ZvclJlc291cmNlOiB7XG4gICAgICAgIHRlcm1zOiB7XG4gICAgICAgICAgc2l6ZTogNTAwMCxcbiAgICAgICAgICBleGNsdWRlOiAnJyxcbiAgICAgICAgICBmaWVsZDpcbiAgICAgICAgICAgIHNlbVZlcnNpb24gPT09ICc0LjIuMidcbiAgICAgICAgICAgICAgPyAnT3JnRm9yUmVzb3VyY2UnXG4gICAgICAgICAgICAgIDogJ09yZ0ZvclJlc291cmNlT2JqZWN0LmRlZmF1bHQnLFxuICAgICAgICAgIG9yZGVyOiB7XG4gICAgICAgICAgICBfa2V5OiAnYXNjJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBXaXRoR3JvdXBzKFxuICAgIG9yZ2FuaXNhdGlvbnM6IEluY29tcGxldGVPcmdhbml6YXRpb25bXSxcbiAgICBncm91cHM6IEdyb3VwQXBpTW9kZWxbXVxuICApOiBPcmdhbml6YXRpb25bXSB7XG4gICAgcmV0dXJuIG9yZ2FuaXNhdGlvbnMubWFwKChvcmdhbmlzYXRpb24pID0+IHtcbiAgICAgIGNvbnN0IGdyb3VwID1cbiAgICAgICAgZ3JvdXBzLmZpbmQoKGdyb3VwKSA9PlxuICAgICAgICAgIHRoaXMuZXF1YWxzTm9ybWFsaXplZFN0cmluZ3MoXG4gICAgICAgICAgICBncm91cC5sYWJlbFsnZW5nJ10gPyBncm91cC5sYWJlbFsnZW5nJ10gOiBncm91cC5uYW1lLFxuICAgICAgICAgICAgb3JnYW5pc2F0aW9uLm5hbWVcbiAgICAgICAgICApXG4gICAgICAgICkgPz9cbiAgICAgICAgZ3JvdXBzXG4gICAgICAgICAgLmZpbHRlcigoZ3JvdXApID0+ICEhZ3JvdXAuZW1haWwpXG4gICAgICAgICAgLmZpbmQoKGdyb3VwKSA9PlxuICAgICAgICAgICAgb3JnYW5pc2F0aW9uLmVtYWlsc1xuICAgICAgICAgICAgICAubWFwKChtYWlsKSA9PiB0aGlzLm5vcm1hbGl6ZVN0cmluZyhtYWlsLCBmYWxzZSkpXG4gICAgICAgICAgICAgIC5pbmNsdWRlcyh0aGlzLm5vcm1hbGl6ZVN0cmluZyhncm91cC5lbWFpbCwgZmFsc2UpKVxuICAgICAgICAgIClcbiAgICAgIGNvbnN0IHsgZW1haWxzLCAuLi5mdWxsT3JnIH0gPSBvcmdhbmlzYXRpb25cbiAgICAgIGlmICghZ3JvdXApIHJldHVybiBmdWxsT3JnXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5mdWxsT3JnLFxuICAgICAgICAuLi4oZ3JvdXAuZGVzY3JpcHRpb24gJiYgeyBkZXNjcmlwdGlvbjogZ3JvdXAuZGVzY3JpcHRpb24gfSksXG4gICAgICAgIC4uLihncm91cC5sb2dvICYmIHsgbG9nb1VybDogZ2V0QXNVcmwoYCR7SU1BR0VfVVJMfSR7Z3JvdXAubG9nb31gKSB9KSxcbiAgICAgICAgLi4uKGdyb3VwLndlYnNpdGUgJiYgeyB3ZWJzaXRlOiBnZXRBc1VybChncm91cC53ZWJzaXRlKSB9KSxcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZ2V0RmlsdGVyc0Zvck9yZ3Mob3JnYW5pc2F0aW9uczogT3JnYW5pemF0aW9uW10pOiBPYnNlcnZhYmxlPEZpZWxkRmlsdGVycz4ge1xuICAgIHJldHVybiB0aGlzLnBsYXRmb3JtU2VydmljZS5nZXRBcGlWZXJzaW9uKCkucGlwZShcbiAgICAgIG1hcCgoZ25WZXJzaW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IGduVmVyc2lvbi5zdGFydHNXaXRoKCc0LjIuMicpXG4gICAgICAgICAgPyAnT3JnRm9yUmVzb3VyY2UnXG4gICAgICAgICAgOiAnT3JnRm9yUmVzb3VyY2VPYmplY3QuZGVmYXVsdCdcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBbZmllbGROYW1lXTogb3JnYW5pc2F0aW9ucy5yZWR1Y2UoXG4gICAgICAgICAgICAocHJldiwgY3VycikgPT4gKHsgLi4ucHJldiwgW2N1cnIubmFtZV06IHRydWUgfSksXG4gICAgICAgICAgICB7fVxuICAgICAgICAgICksXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgZ2V0T3Jnc0Zyb21GaWx0ZXJzKGZpbHRlcnM6IEZpZWxkRmlsdGVycyk6IE9ic2VydmFibGU8T3JnYW5pemF0aW9uW10+IHtcbiAgICByZXR1cm4gdGhpcy5wbGF0Zm9ybVNlcnZpY2UuZ2V0QXBpVmVyc2lvbigpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKGduVmVyc2lvbikgPT4ge1xuICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSBnblZlcnNpb24uc3RhcnRzV2l0aCgnNC4yLjInKVxuICAgICAgICAgID8gJ09yZ0ZvclJlc291cmNlJ1xuICAgICAgICAgIDogJ09yZ0ZvclJlc291cmNlT2JqZWN0LmRlZmF1bHQnXG5cbiAgICAgICAgaWYgKCEoZmllbGROYW1lIGluIGZpbHRlcnMpKSByZXR1cm4gb2YoW10pXG5cbiAgICAgICAgcmV0dXJuIHRoaXMub3JnYW5pc2F0aW9ucyQucGlwZShcbiAgICAgICAgICBtYXAoKG9yZ3M6IEluY29tcGxldGVPcmdhbml6YXRpb25bXSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3JnTmFtZXMgPSBPYmplY3Qua2V5cyhcbiAgICAgICAgICAgICAgZmlsdGVyc1tmaWVsZE5hbWVdIGFzIEZpZWxkRmlsdGVyQnlWYWx1ZXNcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHJldHVybiBvcmdOYW1lcy5tYXAoKG5hbWUpID0+XG4gICAgICAgICAgICAgIG9yZ3MuZmluZChcbiAgICAgICAgICAgICAgICAob3JnOiBPcmdhbml6YXRpb24gfCBJbmNvbXBsZXRlT3JnYW5pemF0aW9uKSA9PlxuICAgICAgICAgICAgICAgICAgb3JnLm5hbWUgPT09IG5hbWVcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgYWRkT3JnYW5pemF0aW9uVG9SZWNvcmRGcm9tU291cmNlKFxuICAgIHNvdXJjZTogTWV0YWRhdGFPYmplY3QsXG4gICAgcmVjb3JkOiBDYXRhbG9nUmVjb3JkXG4gICk6IE9ic2VydmFibGU8Q2F0YWxvZ1JlY29yZD4ge1xuICAgIGNvbnN0IGNvbnRhY3RzOiBTb3VyY2VXaXRoVW5rbm93blByb3BzW10gPSBnZXRBc0FycmF5KFxuICAgICAgc2VsZWN0RmFsbGJhY2soXG4gICAgICAgIHNlbGVjdFRyYW5zbGF0ZWRGaWVsZChzb3VyY2UsICdjb250YWN0T2JqZWN0JywgdGhpcy5sYW5nMyksXG4gICAgICAgIHNlbGVjdEZpZWxkKHNvdXJjZSwgJ2NvbnRhY3QnKVxuICAgICAgKVxuICAgIClcbiAgICBjb25zdCByZXNvdXJjZUNvbnRhY3RzOiBTb3VyY2VXaXRoVW5rbm93blByb3BzW10gPSBnZXRBc0FycmF5KFxuICAgICAgc2VsZWN0RmFsbGJhY2soXG4gICAgICAgIHNlbGVjdFRyYW5zbGF0ZWRGaWVsZChzb3VyY2UsICdjb250YWN0Rm9yUmVzb3VyY2VPYmplY3QnLCB0aGlzLmxhbmczKSxcbiAgICAgICAgc2VsZWN0RmllbGQoc291cmNlLCAnY29udGFjdEZvclJlc291cmNlJylcbiAgICAgIClcbiAgICApXG4gICAgY29uc3QgYWxsQ29udGFjdE9yZ3MgPSByZXNvdXJjZUNvbnRhY3RzXG4gICAgICAuY29uY2F0KGNvbnRhY3RzKVxuICAgICAgLm1hcCgoY29udGFjdCkgPT4gbWFwT3JnYW5pemF0aW9uKGNvbnRhY3QsIHRoaXMubGFuZzMpKVxuXG4gICAgaWYgKCFhbGxDb250YWN0T3Jncy5sZW5ndGgpIHJldHVybiBvZihyZWNvcmQpXG5cbiAgICBjb25zdCBvd25lck9yZ2FuaXphdGlvbiA9IGFsbENvbnRhY3RPcmdzWzBdXG5cbiAgICByZXR1cm4gdGhpcy5vcmdhbmlzYXRpb25zJC5waXBlKFxuICAgICAgdGFrZUxhc3QoMSksXG4gICAgICBtYXAoKG9yZ2FuaXNhdGlvbnM6IEluY29tcGxldGVPcmdhbml6YXRpb25bXSkgPT4ge1xuICAgICAgICBjb25zdCByZWNvcmRPcmdhbmlzYXRpb24gPSBvcmdhbmlzYXRpb25zLmZpbHRlcihcbiAgICAgICAgICAob3JnKSA9PiBvcmcubmFtZSA9PT0gb3duZXJPcmdhbml6YXRpb24ubmFtZVxuICAgICAgICApWzBdXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ucmVjb3JkLFxuICAgICAgICAgIG93bmVyT3JnYW5pemF0aW9uOiB7XG4gICAgICAgICAgICAuLi5vd25lck9yZ2FuaXphdGlvbixcbiAgICAgICAgICAgIC4uLnJlY29yZE9yZ2FuaXNhdGlvbixcbiAgICAgICAgICB9LFxuICAgICAgICB9XG4gICAgICB9KVxuICAgIClcbiAgfVxufVxuIl19
|
|
193
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemF0aW9ucy1mcm9tLW1ldGFkYXRhLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwaS9yZXBvc2l0b3J5L3NyYy9saWIvZ240L29yZ2FuaXphdGlvbnMvb3JnYW5pemF0aW9ucy1mcm9tLW1ldGFkYXRhLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUMxQyxPQUFPLEVBRUwsZ0JBQWdCLEVBQ2hCLGdCQUFnQixHQUNqQixNQUFNLCtDQUErQyxDQUFBO0FBVXRELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBQ3ZELE9BQU8sRUFDTCxVQUFVLEVBQ1YsUUFBUSxFQUNSLGVBQWUsRUFFZixjQUFjLEVBQ2QsV0FBVyxFQUNYLHFCQUFxQixHQUV0QixNQUFNLHNEQUFzRCxDQUFBO0FBQzdELE9BQU8sRUFBRSxhQUFhLEVBQWMsRUFBRSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDekUsT0FBTyxFQUNMLE1BQU0sRUFDTixHQUFHLEVBQ0gsV0FBVyxFQUNYLFNBQVMsRUFDVCxHQUFHLEVBQ0gsY0FBYyxHQUNmLE1BQU0sZ0JBQWdCLENBQUE7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlDQUF5QyxDQUFBO0FBQ3JFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDRFQUE0RSxDQUFBO0FBQ3JILE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLFFBQVEsQ0FBQTs7Ozs7O0FBRWpELE1BQU0sU0FBUyxHQUFHLGdDQUFnQyxDQUFBO0FBcUJsRCxNQUFNLE9BQU8sZ0NBQWdDO0lBMEQzQyxZQUNVLFNBQStCLEVBQy9CLGdCQUFrQyxFQUNsQyxnQkFBa0MsRUFDbEMsZUFBeUMsRUFD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QUNILENBQUE7SUFDSCxDQUFDOzhHQWpSVSxnQ0FBZ0M7a0hBQWhDLGdDQUFnQzs7MkZBQWhDLGdDQUFnQztrQkFENUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHtcbiAgR3JvdXBBcGlNb2RlbCxcbiAgR3JvdXBzQXBpU2VydmljZSxcbiAgU2VhcmNoQXBpU2VydmljZSxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9kYXRhLWFjY2Vzcy9nbjQvc3JjJ1xuaW1wb3J0IHtcbiAgRmllbGRGaWx0ZXJCeVZhbHVlcyxcbiAgRmllbGRGaWx0ZXJzLFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9kb21haW4vc3JjL2xpYi9tb2RlbC9zZWFyY2gnXG5pbXBvcnQge1xuICBDYXRhbG9nUmVjb3JkLFxuICBPcmdhbml6YXRpb24sXG59IGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL2RvbWFpbi9zcmMvbGliL21vZGVsL3JlY29yZCdcbmltcG9ydCB7IE9yZ2FuaXphdGlvbnNTZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvb3JnYW5pemF0aW9ucy5zZXJ2aWNlLmludGVyZmFjZSdcbmltcG9ydCB7IEVsYXN0aWNzZWFyY2hTZXJ2aWNlIH0gZnJvbSAnLi4vZWxhc3RpY3NlYXJjaCdcbmltcG9ydCB7XG4gIGdldEFzQXJyYXksXG4gIGdldEFzVXJsLFxuICBtYXBPcmdhbml6YXRpb24sXG4gIE1ldGFkYXRhT2JqZWN0LFxuICBzZWxlY3RGYWxsYmFjayxcbiAgc2VsZWN0RmllbGQsXG4gIHNlbGVjdFRyYW5zbGF0ZWRGaWVsZCxcbiAgU291cmNlV2l0aFVua25vd25Qcm9wcyxcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hcGkvbWV0YWRhdGEtY29udmVydGVyL3NyYydcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIG9mLCBzd2l0Y2hNYXAsIHRha2VMYXN0IH0gZnJvbSAncnhqcydcbmltcG9ydCB7XG4gIGZpbHRlcixcbiAgbWFwLFxuICBzaGFyZVJlcGxheSxcbiAgc3RhcnRXaXRoLFxuICB0YXAsXG4gIHdpdGhMYXRlc3RGcm9tLFxufSBmcm9tICdyeGpzL29wZXJhdG9ycydcbmltcG9ydCB7IExhbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy91dGlsL2kxOG4vc3JjJ1xuaW1wb3J0IHsgUGxhdGZvcm1TZXJ2aWNlSW50ZXJmYWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vZG9tYWluL3NyYy9saWIvcGxhdGZvcm0uc2VydmljZS5pbnRlcmZhY2UnXG5pbXBvcnQgeyBjb2VyY2UsIHNhdGlzZmllcywgdmFsaWQgfSBmcm9tICdzZW12ZXInXG5cbmNvbnN0IElNQUdFX1VSTCA9ICcvZ2VvbmV0d29yay9pbWFnZXMvaGFydmVzdGluZy8nXG5cbnR5cGUgRVNCdWNrZXQgPSB7XG4gIGtleTogc3RyaW5nXG4gIGRvY19jb3VudDogbnVtYmVyXG59XG5pbnRlcmZhY2UgT3JnYW5pemF0aW9uQWdnc0J1Y2tldCBleHRlbmRzIEVTQnVja2V0IHtcbiAgbWFpbDoge1xuICAgIGJ1Y2tldHM6IEVTQnVja2V0W11cbiAgfVxuICBsb2dvVXJsOiB7XG4gICAgYnVja2V0czogRVNCdWNrZXRbXVxuICB9XG59XG5pbnRlcmZhY2UgSW5jb21wbGV0ZU9yZ2FuaXphdGlvbiB7XG4gIG5hbWU6IHN0cmluZ1xuICBlbWFpbHM6IHN0cmluZ1tdXG4gIHJlY29yZENvdW50OiBudW1iZXJcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE9yZ2FuaXphdGlvbnNGcm9tTWV0YWRhdGFTZXJ2aWNlXG4gIGltcGxlbWVudHMgT3JnYW5pemF0aW9uc1NlcnZpY2VJbnRlcmZhY2VcbntcbiAgcHJpdmF0ZSBncm91cHMkOiBPYnNlcnZhYmxlPEdyb3VwQXBpTW9kZWxbXT4gPSBvZih0cnVlKS5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmdyb3Vwc0FwaVNlcnZpY2UuZ2V0R3JvdXBzKCkpLFxuICAgIHNoYXJlUmVwbGF5KClcbiAgKVxuICBwcml2YXRlIG9yZ2FuaXNhdGlvbnNBZ2dzJDogT2JzZXJ2YWJsZTxPcmdhbml6YXRpb25BZ2dzQnVja2V0W10+ID1cbiAgICB0aGlzLnBsYXRmb3JtU2VydmljZS5nZXRBcGlWZXJzaW9uKCkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgodmVyc2lvbikgPT5cbiAgICAgICAgdGhpcy5zZWFyY2hBcGlTZXJ2aWNlLnNlYXJjaChcbiAgICAgICAgICAnYnVja2V0JyxcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuZ2V0QWdncmVnYXRpb25TZWFyY2hSZXF1ZXN0KHZlcnNpb24pKVxuICAgICAgICApXG4gICAgICApLFxuICAgICAgZmlsdGVyKChyZXNwb25zZSkgPT4gISFyZXNwb25zZS5hZ2dyZWdhdGlvbnMuY29udGFjdC5vcmcpLFxuICAgICAgdGFwKChyZXNwb25zZSkgPT5cbiAgICAgICAgcmVzcG9uc2UuYWdncmVnYXRpb25zLmNvbnRhY3Qub3JnLmJ1Y2tldHMuZm9yRWFjaChcbiAgICAgICAgICAocikgPT5cbiAgICAgICAgICAgIChyLmRvY19jb3VudCA9XG4gICAgICAgICAgICAgIHJlc3BvbnNlLmFnZ3JlZ2F0aW9ucy5vcmdGb3JSZXNvdXJjZS5idWNrZXRzLmZpbmQoXG4gICAgICAgICAgICAgICAgKG9yZykgPT4gb3JnLmtleSA9PT0gci5rZXlcbiAgICAgICAgICAgICAgKT8uZG9jX2NvdW50IHx8IHIuZG9jX2NvdW50KVxuICAgICAgICApXG4gICAgICApLFxuICAgICAgbWFwKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYWdncmVnYXRpb25zLmNvbnRhY3Qub3JnLmJ1Y2tldHMpLFxuICAgICAgc2hhcmVSZXBsYXkoKVxuICAgIClcbiAgcHJpdmF0ZSBvcmdhbmlzYXRpb25zV2l0aG91dEdyb3VwcyQ6IE9ic2VydmFibGU8SW5jb21wbGV0ZU9yZ2FuaXphdGlvbltdPiA9XG4gICAgdGhpcy5vcmdhbmlzYXRpb25zQWdncyQucGlwZShcbiAgICAgIG1hcCgoYnVja2V0cykgPT5cbiAgICAgICAgYnVja2V0cy5tYXAoKGJ1Y2tldCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGxvZ29VcmwgPSBidWNrZXQubG9nb1VybC5idWNrZXRzPy5bMF0/LmtleVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiBidWNrZXQua2V5LFxuICAgICAgICAgICAgZW1haWxzOiBidWNrZXQubWFpbC5idWNrZXRzXG4gICAgICAgICAgICAgIC5tYXAoKGJ1Y2tldCkgPT4gYnVja2V0LmtleSlcbiAgICAgICAgICAgICAgLmZpbHRlcigobWFpbCkgPT4gISFtYWlsKSxcbiAgICAgICAgICAgIHJlY29yZENvdW50OiBidWNrZXQuZG9jX2NvdW50LFxuICAgICAgICAgICAgLi4uKGxvZ29VcmwgJiYgeyBsb2dvVXJsOiBnZXRBc1VybChsb2dvVXJsKSB9KSxcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgKVxuICBvcmdhbmlzYXRpb25zQ291bnQkID0gdGhpcy5vcmdhbmlzYXRpb25zQWdncyQucGlwZShcbiAgICBtYXAoKG9yZ2FuaXNhdGlvbnMpID0+IG9yZ2FuaXNhdGlvbnMubGVuZ3RoKVxuICApXG4gIG9yZ2FuaXNhdGlvbnMkID0gY29tYmluZUxhdGVzdChbXG4gICAgdGhpcy5vcmdhbmlzYXRpb25zV2l0aG91dEdyb3VwcyQsXG4gICAgdGhpcy5ncm91cHMkLnBpcGUoc3RhcnRXaXRoKG51bGwpKSxcbiAgXSkucGlwZShcbiAgICBtYXAoKFtvcmdhbmlzYXRpb25zLCBncm91cHNdKSA9PiB7XG4gICAgICByZXR1cm4gIWdyb3VwcyA/IG9yZ2FuaXNhdGlvbnMgOiB0aGlzLm1hcFdpdGhHcm91cHMob3JnYW5pc2F0aW9ucywgZ3JvdXBzKVxuICAgIH0pLFxuICAgIHNoYXJlUmVwbGF5KClcbiAgKVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZXNTZXJ2aWNlOiBFbGFzdGljc2VhcmNoU2VydmljZSxcbiAgICBwcml2YXRlIHNlYXJjaEFwaVNlcnZpY2U6IFNlYXJjaEFwaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBncm91cHNBcGlTZXJ2aWNlOiBHcm91cHNBcGlTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGxhdGZvcm1TZXJ2aWNlOiBQbGF0Zm9ybVNlcnZpY2VJbnRlcmZhY2UsXG4gICAgcHJpdmF0ZSBsYW5nU2VydmljZTogTGFuZ1NlcnZpY2VcbiAgKSB7fVxuXG4gIHByaXZhdGUgbGFuZzMgPSB0aGlzLmxhbmdTZXJ2aWNlLmduTGFuZ1xuXG4gIGVxdWFsc05vcm1hbGl6ZWRTdHJpbmdzKFxuICAgIHN0cjE6IHN0cmluZyxcbiAgICBzdHIyOiBzdHJpbmcsXG4gICAgcmVwbGFjZVNwZWNpYWxDaGFycyA9IHRydWVcbiAgKTogYm9vbGVhbiB7XG4gICAgaWYgKCFzdHIxIHx8ICFzdHIyKSByZXR1cm4gZmFsc2VcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5ub3JtYWxpemVTdHJpbmcoc3RyMSwgcmVwbGFjZVNwZWNpYWxDaGFycykgPT09XG4gICAgICB0aGlzLm5vcm1hbGl6ZVN0cmluZyhzdHIyLCByZXBsYWNlU3BlY2lhbENoYXJzKVxuICAgIClcbiAgfVxuXG4gIG5vcm1hbGl6ZVN0cmluZyhzdHI6IHN0cmluZywgcmVwbGFjZVNwZWNpYWxDaGFycyA9IHRydWUpOiBzdHJpbmcge1xuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZShzdHI6IHN0cmluZykge1xuICAgICAgcmV0dXJuIHN0clxuICAgICAgICAubm9ybWFsaXplKCdORkQnKSAvLyBkZWNvbXBvc2UgZ3JhcGhlbWVzIHRvIHJlbW92ZSBhY2NlbnRzIGZyb20gbGV0dGVyc1xuICAgICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpIC8vIHJlbW92ZSBhY2NlbnQgY2hhcmFjdGVyc1xuICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgIH1cbiAgICBpZiAocmVwbGFjZVNwZWNpYWxDaGFycykge1xuICAgICAgcmV0dXJuIG5vcm1hbGl6ZShzdHIpLnJlcGxhY2UoL1teYS16MC05XS9nLCAnJykgLy8gcmVwbGFjZSBhbGwgZXhjZXB0IGxldHRlcnMgJiBudW1iZXJzXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBub3JtYWxpemUoc3RyKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWdncmVnYXRpb25TZWFyY2hSZXF1ZXN0KGduVmVyc2lvbjogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2VtVmVyc2lvbiA9IHZhbGlkKGNvZXJjZShnblZlcnNpb24pKVxuICAgIHJldHVybiB0aGlzLmVzU2VydmljZS5nZXRTZWFyY2hSZXF1ZXN0Qm9keSh7XG4gICAgICBjb250YWN0OiB7XG4gICAgICAgIG5lc3RlZDoge1xuICAgICAgICAgIHBhdGg6ICdjb250YWN0Rm9yUmVzb3VyY2UnLFxuICAgICAgICB9LFxuICAgICAgICBhZ2dzOiB7XG4gICAgICAgICAgb3JnOiB7XG4gICAgICAgICAgICB0ZXJtczoge1xuICAgICAgICAgICAgICBmaWVsZDpcbiAgICAgICAgICAgICAgICBzZW1WZXJzaW9uID09PSAnNC4yLjInXG4gICAgICAgICAgICAgICAgICA/ICdjb250YWN0Rm9yUmVzb3VyY2Uub3JnYW5pc2F0aW9uJ1xuICAgICAgICAgICAgICAgICAgOiAnY29udGFjdEZvclJlc291cmNlLm9yZ2FuaXNhdGlvbk9iamVjdC5kZWZhdWx0LmtleXdvcmQnLFxuICAgICAgICAgICAgICBleGNsdWRlOiAnJyxcbiAgICAgICAgICAgICAgc2l6ZTogNTAwMCxcbiAgICAgICAgICAgICAgb3JkZXI6IHsgX2tleTogJ2FzYycgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBhZ2dzOiB7XG4gICAgICAgICAgICAgIG1haWw6IHtcbiAgICAgICAgICAgICAgICB0ZXJtczoge1xuICAgICAgICAgICAgICAgICAgc2l6ZTogNTAsXG4gICAgICAgICAgICAgICAgICBleGNsdWRlOiAnJyxcbiAgICAgICAgICAgICAgICAgIGZpZWxkOiBzYXRpc2ZpZXMoc2VtVmVyc2lvbiwgJzQuMi4yIC0gNC4yLjQnKVxuICAgICAgICAgICAgICAgICAgICA/ICdjb250YWN0Rm9yUmVzb3VyY2UuZW1haWwua2V5d29yZCdcbiAgICAgICAgICAgICAgICAgICAgOiAnY29udGFjdEZvclJlc291cmNlLmVtYWlsJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBsb2dvVXJsOiB7XG4gICAgICAgICAgICAgICAgdGVybXM6IHtcbiAgICAgICAgICAgICAgICAgIHNpemU6IDEsXG4gICAgICAgICAgICAgICAgICBleGNsdWRlOiAnJyxcbiAgICAgICAgICAgICAgICAgIGZpZWxkOiAnY29udGFjdEZvclJlc291cmNlLmxvZ28ua2V5d29yZCcsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBvcmdGb3JSZXNvdXJjZToge1xuICAgICAgICB0ZXJtczoge1xuICAgICAgICAgIHNpemU6IDUwMDAsXG4gICAgICAgICAgZXhjbHVkZTogJycsXG4gICAgICAgICAgZmllbGQ6XG4gICAgICAgICAgICBzZW1WZXJzaW9uID09PSAnNC4yLjInXG4gICAgICAgICAgICAgID8gJ09yZ0ZvclJlc291cmNlJ1xuICAgICAgICAgICAgICA6ICdPcmdGb3JSZXNvdXJjZU9iamVjdC5kZWZhdWx0JyxcbiAgICAgICAgICBvcmRlcjoge1xuICAgICAgICAgICAgX2tleTogJ2FzYycsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgbWFwV2l0aEdyb3VwcyhcbiAgICBvcmdhbmlzYXRpb25zOiBJbmNvbXBsZXRlT3JnYW5pemF0aW9uW10sXG4gICAgZ3JvdXBzOiBHcm91cEFwaU1vZGVsW11cbiAgKTogT3JnYW5pemF0aW9uW10ge1xuICAgIHJldHVybiBvcmdhbmlzYXRpb25zLm1hcCgob3JnYW5pc2F0aW9uKSA9PiB7XG4gICAgICBjb25zdCBncm91cCA9XG4gICAgICAgIGdyb3Vwcy5maW5kKChncm91cCkgPT5cbiAgICAgICAgICB0aGlzLmVxdWFsc05vcm1hbGl6ZWRTdHJpbmdzKFxuICAgICAgICAgICAgZ3JvdXAubGFiZWxbJ2VuZyddID8gZ3JvdXAubGFiZWxbJ2VuZyddIDogZ3JvdXAubmFtZSxcbiAgICAgICAgICAgIG9yZ2FuaXNhdGlvbi5uYW1lXG4gICAgICAgICAgKVxuICAgICAgICApID8/XG4gICAgICAgIGdyb3Vwc1xuICAgICAgICAgIC5maWx0ZXIoKGdyb3VwKSA9PiAhIWdyb3VwLmVtYWlsKVxuICAgICAgICAgIC5maW5kKChncm91cCkgPT5cbiAgICAgICAgICAgIG9yZ2FuaXNhdGlvbi5lbWFpbHNcbiAgICAgICAgICAgICAgLm1hcCgobWFpbCkgPT4gdGhpcy5ub3JtYWxpemVTdHJpbmcobWFpbCwgZmFsc2UpKVxuICAgICAgICAgICAgICAuaW5jbHVkZXModGhpcy5ub3JtYWxpemVTdHJpbmcoZ3JvdXAuZW1haWwsIGZhbHNlKSlcbiAgICAgICAgICApXG4gICAgICBjb25zdCB7IGVtYWlscywgLi4uZnVsbE9yZyB9ID0gb3JnYW5pc2F0aW9uXG4gICAgICBpZiAoIWdyb3VwKSByZXR1cm4gZnVsbE9yZ1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZnVsbE9yZyxcbiAgICAgICAgLi4uKGdyb3VwLmRlc2NyaXB0aW9uICYmIHsgZGVzY3JpcHRpb246IGdyb3VwLmRlc2NyaXB0aW9uIH0pLFxuICAgICAgICAuLi4oZ3JvdXAubG9nbyAmJiB7IGxvZ29Vcmw6IGdldEFzVXJsKGAke0lNQUdFX1VSTH0ke2dyb3VwLmxvZ299YCkgfSksXG4gICAgICAgIC4uLihncm91cC53ZWJzaXRlICYmIHsgd2Vic2l0ZTogZ2V0QXNVcmwoZ3JvdXAud2Vic2l0ZSkgfSksXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGdldEZpbHRlcnNGb3JPcmdzKG9yZ2FuaXNhdGlvbnM6IE9yZ2FuaXphdGlvbltdKTogT2JzZXJ2YWJsZTxGaWVsZEZpbHRlcnM+IHtcbiAgICByZXR1cm4gdGhpcy5wbGF0Zm9ybVNlcnZpY2UuZ2V0QXBpVmVyc2lvbigpLnBpcGUoXG4gICAgICBtYXAoKGduVmVyc2lvbikgPT4ge1xuICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSBnblZlcnNpb24uc3RhcnRzV2l0aCgnNC4yLjInKVxuICAgICAgICAgID8gJ09yZ0ZvclJlc291cmNlJ1xuICAgICAgICAgIDogJ09yZ0ZvclJlc291cmNlT2JqZWN0LmRlZmF1bHQnXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgW2ZpZWxkTmFtZV06IG9yZ2FuaXNhdGlvbnMucmVkdWNlKFxuICAgICAgICAgICAgKHByZXYsIGN1cnIpID0+ICh7IC4uLnByZXYsIFtjdXJyLm5hbWVdOiB0cnVlIH0pLFxuICAgICAgICAgICAge31cbiAgICAgICAgICApLFxuICAgICAgICB9XG4gICAgICB9KVxuICAgIClcbiAgfVxuXG4gIGdldE9yZ3NGcm9tRmlsdGVycyhmaWx0ZXJzOiBGaWVsZEZpbHRlcnMpOiBPYnNlcnZhYmxlPE9yZ2FuaXphdGlvbltdPiB7XG4gICAgcmV0dXJuIHRoaXMucGxhdGZvcm1TZXJ2aWNlLmdldEFwaVZlcnNpb24oKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKChnblZlcnNpb24pID0+IHtcbiAgICAgICAgY29uc3QgZmllbGROYW1lID0gZ25WZXJzaW9uLnN0YXJ0c1dpdGgoJzQuMi4yJylcbiAgICAgICAgICA/ICdPcmdGb3JSZXNvdXJjZSdcbiAgICAgICAgICA6ICdPcmdGb3JSZXNvdXJjZU9iamVjdC5kZWZhdWx0J1xuXG4gICAgICAgIGlmICghKGZpZWxkTmFtZSBpbiBmaWx0ZXJzKSkgcmV0dXJuIG9mKFtdKVxuXG4gICAgICAgIHJldHVybiB0aGlzLm9yZ2FuaXNhdGlvbnMkLnBpcGUoXG4gICAgICAgICAgbWFwKChvcmdzOiBJbmNvbXBsZXRlT3JnYW5pemF0aW9uW10pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG9yZ05hbWVzID0gT2JqZWN0LmtleXMoXG4gICAgICAgICAgICAgIGZpbHRlcnNbZmllbGROYW1lXSBhcyBGaWVsZEZpbHRlckJ5VmFsdWVzXG4gICAgICAgICAgICApXG4gICAgICAgICAgICByZXR1cm4gb3JnTmFtZXMubWFwKChuYW1lKSA9PlxuICAgICAgICAgICAgICBvcmdzLmZpbmQoXG4gICAgICAgICAgICAgICAgKG9yZzogT3JnYW5pemF0aW9uIHwgSW5jb21wbGV0ZU9yZ2FuaXphdGlvbikgPT5cbiAgICAgICAgICAgICAgICAgIG9yZy5uYW1lID09PSBuYW1lXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICB9KVxuICAgIClcbiAgfVxuXG4gIGFkZE9yZ2FuaXphdGlvblRvUmVjb3JkRnJvbVNvdXJjZShcbiAgICBzb3VyY2U6IE1ldGFkYXRhT2JqZWN0LFxuICAgIHJlY29yZDogQ2F0YWxvZ1JlY29yZFxuICApOiBPYnNlcnZhYmxlPENhdGFsb2dSZWNvcmQ+IHtcbiAgICBjb25zdCBjb250YWN0czogU291cmNlV2l0aFVua25vd25Qcm9wc1tdID0gZ2V0QXNBcnJheShcbiAgICAgIHNlbGVjdEZhbGxiYWNrKFxuICAgICAgICBzZWxlY3RUcmFuc2xhdGVkRmllbGQoc291cmNlLCAnY29udGFjdE9iamVjdCcsIHRoaXMubGFuZzMpLFxuICAgICAgICBzZWxlY3RGaWVsZChzb3VyY2UsICdjb250YWN0JylcbiAgICAgIClcbiAgICApXG4gICAgY29uc3QgcmVzb3VyY2VDb250YWN0czogU291cmNlV2l0aFVua25vd25Qcm9wc1tdID0gZ2V0QXNBcnJheShcbiAgICAgIHNlbGVjdEZhbGxiYWNrKFxuICAgICAgICBzZWxlY3RUcmFuc2xhdGVkRmllbGQoc291cmNlLCAnY29udGFjdEZvclJlc291cmNlT2JqZWN0JywgdGhpcy5sYW5nMyksXG4gICAgICAgIHNlbGVjdEZpZWxkKHNvdXJjZSwgJ2NvbnRhY3RGb3JSZXNvdXJjZScpXG4gICAgICApXG4gICAgKVxuICAgIGNvbnN0IGFsbENvbnRhY3RPcmdzID0gcmVzb3VyY2VDb250YWN0c1xuICAgICAgLmNvbmNhdChjb250YWN0cylcbiAgICAgIC5tYXAoKGNvbnRhY3QpID0+IG1hcE9yZ2FuaXphdGlvbihjb250YWN0LCB0aGlzLmxhbmczKSlcblxuICAgIGlmICghYWxsQ29udGFjdE9yZ3MubGVuZ3RoKSByZXR1cm4gb2YocmVjb3JkKVxuXG4gICAgY29uc3Qgb3duZXJPcmdhbml6YXRpb24gPSBhbGxDb250YWN0T3Jnc1swXVxuXG4gICAgLy8gcmVhZCB0aGUgb3duZXIgZ3JvdXAgYXMgd2VsbCB0byBoYXZlIGEgZmFsbGJhY2sgbG9nb1xuICAgIGNvbnN0IGdyb3VwSWQgPSBzZWxlY3RGaWVsZChzb3VyY2UsICdncm91cE93bmVyJylcbiAgICBjb25zdCBncm91cCQgPSB0aGlzLmdyb3VwcyQucGlwZShcbiAgICAgIG1hcCgoZ3JvdXBzKSA9PlxuICAgICAgICBncm91cHMuZmluZCgoZ3JvdXApID0+IHtcbiAgICAgICAgICByZXR1cm4gZ3JvdXAuaWQgPT09IE51bWJlcihncm91cElkKVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIClcblxuICAgIHJldHVybiB0aGlzLm9yZ2FuaXNhdGlvbnMkLnBpcGUoXG4gICAgICB0YWtlTGFzdCgxKSxcbiAgICAgIHdpdGhMYXRlc3RGcm9tKGdyb3VwJCksXG4gICAgICBtYXAoKFtvcmdhbmlzYXRpb25zLCBncm91cF06IFtPcmdhbml6YXRpb25bXSwgR3JvdXBBcGlNb2RlbF0pID0+IHtcbiAgICAgICAgY29uc3QgcmVjb3JkT3JnYW5pc2F0aW9uID0gb3JnYW5pc2F0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgKG9yZykgPT4gb3JnLm5hbWUgPT09IG93bmVyT3JnYW5pemF0aW9uLm5hbWVcbiAgICAgICAgKVswXVxuICAgICAgICBjb25zdCBsb2dvVXJsID0gZ3JvdXA/LmxvZ28gJiYgZ2V0QXNVcmwoYCR7SU1BR0VfVVJMfSR7Z3JvdXAubG9nb31gKVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnJlY29yZCxcbiAgICAgICAgICBvd25lck9yZ2FuaXphdGlvbjoge1xuICAgICAgICAgICAgbG9nb1VybCxcbiAgICAgICAgICAgIC4uLm93bmVyT3JnYW5pemF0aW9uLFxuICAgICAgICAgICAgLi4ucmVjb3JkT3JnYW5pc2F0aW9uLFxuICAgICAgICAgIH0sXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKVxuICB9XG59XG4iXX0=
|
|
@@ -22,12 +22,21 @@ export class Gn4PlatformMapper {
|
|
|
22
22
|
const { enabled, emailAddresses, organisation, kind, lastLoginDate, accountNonExpired, accountNonLocked, id, credentialsNonExpired, ...user } = apiUser;
|
|
23
23
|
return { ...apiUser, id: id.toString() };
|
|
24
24
|
}
|
|
25
|
-
thesaurusFromApi(thesaurus) {
|
|
25
|
+
thesaurusFromApi(thesaurus, lang3) {
|
|
26
26
|
return thesaurus.map((keyword) => {
|
|
27
|
-
|
|
27
|
+
let key = keyword.uri;
|
|
28
|
+
// sometines GN can prefix an URI with an "all thesaurus" URI; only keep the last one
|
|
29
|
+
if (key.indexOf('@@@') > -1) {
|
|
30
|
+
key = key.split('@@@')[1];
|
|
31
|
+
}
|
|
32
|
+
const label = lang3 && lang3 in keyword.values ? keyword.values[lang3] : keyword.value;
|
|
33
|
+
const description = lang3 && lang3 in keyword.definitions
|
|
34
|
+
? keyword.definitions[lang3]
|
|
35
|
+
: keyword.definition;
|
|
28
36
|
return {
|
|
29
|
-
key
|
|
30
|
-
label
|
|
37
|
+
key,
|
|
38
|
+
label,
|
|
39
|
+
description,
|
|
31
40
|
};
|
|
32
41
|
});
|
|
33
42
|
}
|
|
@@ -37,4 +46,4 @@ export class Gn4PlatformMapper {
|
|
|
37
46
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: Gn4PlatformMapper, decorators: [{
|
|
38
47
|
type: Injectable
|
|
39
48
|
}], ctorParameters: function () { return [{ type: i1.AvatarServiceInterface }]; } });
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ240LXBsYXRmb3JtLm1hcHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYXBpL3JlcG9zaXRvcnkvc3JjL2xpYi9nbjQvcGxhdGZvcm0vZ240LXBsYXRmb3JtLm1hcHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFLQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzFDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFBO0FBQ3pFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUNwQyxPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFBOzs7QUFJckMsTUFBTSxPQUFPLGlCQUFpQjtJQUM1QixZQUFvQixhQUFxQztRQUFyQyxrQkFBYSxHQUFiLGFBQWEsQ0FBd0I7SUFBRyxDQUFDO0lBQzdELGFBQWEsQ0FBQyxPQUEyQjtRQUN2QyxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzdCLE1BQU0sRUFDSixJQUFJLEVBQ0osd0JBQXdCLEVBQ3hCLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsbUJBQW1CLEVBQ25CLEtBQUssRUFDTCxHQUFHLElBQUksRUFDUixHQUFHLE9BQU8sQ0FBQTtRQUVYLE9BQU8sSUFBSSxDQUFDLGFBQWE7YUFDdEIsY0FBYyxDQUFDLElBQUksQ0FBQzthQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsV0FBVyxFQUFnQixDQUFBLENBQUMsQ0FBQyxDQUFBO0lBQ3hFLENBQUM7SUFDRCxXQUFXLENBQUMsT0FBcUI7UUFDL0IsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPLElBQUksQ0FBQTtRQUN6QixNQUFNLEVBQ0osT0FBTyxFQUNQLGNBQWMsRUFDZCxZQUFZLEVBQ1osSUFBSSxFQUNKLGFBQWEsRUFDYixpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLEVBQUUsRUFDRixxQkFBcUIsRUFDckIsR0FBRyxJQUFJLEVBQ1IsR0FBRyxPQUFPLENBQUE7UUFDWCxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBZSxDQUFBO0lBQ3ZELENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxTQUFnQixFQUFFLEtBQWM7UUFDL0MsT0FBTyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDL0IsSUFBSSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQTtZQUNyQixxRkFBcUY7WUFDckYsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO2dCQUMzQixHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTthQUMxQjtZQUNELE1BQU0sS0FBSyxHQUNULEtBQUssSUFBSSxLQUFLLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQTtZQUMxRSxNQUFNLFdBQVcsR0FDZixLQUFLLElBQUksS0FBSyxJQUFJLE9BQU8sQ0FBQyxXQUFXO2dCQUNuQyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7Z0JBQzVCLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFBO1lBQ3hCLE9BQU87Z0JBQ0wsR0FBRztnQkFDSCxLQUFLO2dCQUNMLFdBQVc7YUFDWixDQUFBO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDOzhHQXREVSxpQkFBaUI7a0hBQWpCLGlCQUFpQjs7MkZBQWpCLGlCQUFpQjtrQkFEN0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIE1lUmVzcG9uc2VBcGlNb2RlbCxcbiAgVXNlckFwaU1vZGVsLFxufSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2RhdGEtYWNjZXNzL2duNC9zcmMnXG5pbXBvcnQgeyBVc2VyTW9kZWwgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9kb21haW4vc3JjL2xpYi9tb2RlbC91c2VyL3VzZXIubW9kZWwnXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IEF2YXRhclNlcnZpY2VJbnRlcmZhY2UgfSBmcm9tICcuLi9hdXRoL2F2YXRhci5zZXJ2aWNlLmludGVyZmFjZSdcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgVGhlc2F1cnVzTW9kZWwgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9kb21haW4vc3JjL2xpYi9tb2RlbC90aGVzYXVydXMvdGhlc2F1cnVzLm1vZGVsJ1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgR240UGxhdGZvcm1NYXBwZXIge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGF2YXRhclNlcnZpY2U6IEF2YXRhclNlcnZpY2VJbnRlcmZhY2UpIHt9XG4gIHVzZXJGcm9tTWVBcGkoYXBpVXNlcjogTWVSZXNwb25zZUFwaU1vZGVsKTogT2JzZXJ2YWJsZTxVc2VyTW9kZWwgfCBudWxsPiB7XG4gICAgaWYgKCFhcGlVc2VyKSByZXR1cm4gb2YobnVsbClcbiAgICBjb25zdCB7XG4gICAgICBoYXNoLFxuICAgICAgZ3JvdXBzV2l0aFJlZ2lzdGVyZWRVc2VyLFxuICAgICAgZ3JvdXBzV2l0aEVkaXRvcixcbiAgICAgIGdyb3Vwc1dpdGhSZXZpZXdlcixcbiAgICAgIGdyb3Vwc1dpdGhVc2VyQWRtaW4sXG4gICAgICBhZG1pbixcbiAgICAgIC4uLnVzZXJcbiAgICB9ID0gYXBpVXNlclxuXG4gICAgcmV0dXJuIHRoaXMuYXZhdGFyU2VydmljZVxuICAgICAgLmdldFByb2ZpbGVJY29uKGhhc2gpXG4gICAgICAucGlwZShtYXAoKHByb2ZpbGVJY29uKSA9PiAoeyAuLi51c2VyLCBwcm9maWxlSWNvbiB9IGFzIFVzZXJNb2RlbCkpKVxuICB9XG4gIHVzZXJGcm9tQXBpKGFwaVVzZXI6IFVzZXJBcGlNb2RlbCk6IFVzZXJNb2RlbCB7XG4gICAgaWYgKCFhcGlVc2VyKSByZXR1cm4gbnVsbFxuICAgIGNvbnN0IHtcbiAgICAgIGVuYWJsZWQsXG4gICAgICBlbWFpbEFkZHJlc3NlcyxcbiAgICAgIG9yZ2FuaXNhdGlvbixcbiAgICAgIGtpbmQsXG4gICAgICBsYXN0TG9naW5EYXRlLFxuICAgICAgYWNjb3VudE5vbkV4cGlyZWQsXG4gICAgICBhY2NvdW50Tm9uTG9ja2VkLFxuICAgICAgaWQsXG4gICAgICBjcmVkZW50aWFsc05vbkV4cGlyZWQsXG4gICAgICAuLi51c2VyXG4gICAgfSA9IGFwaVVzZXJcbiAgICByZXR1cm4geyAuLi5hcGlVc2VyLCBpZDogaWQudG9TdHJpbmcoKSB9IGFzIFVzZXJNb2RlbFxuICB9XG5cbiAgdGhlc2F1cnVzRnJvbUFwaSh0aGVzYXVydXM6IGFueVtdLCBsYW5nMz86IHN0cmluZyk6IFRoZXNhdXJ1c01vZGVsIHtcbiAgICByZXR1cm4gdGhlc2F1cnVzLm1hcCgoa2V5d29yZCkgPT4ge1xuICAgICAgbGV0IGtleSA9IGtleXdvcmQudXJpXG4gICAgICAvLyBzb21ldGluZXMgR04gY2FuIHByZWZpeCBhbiBVUkkgd2l0aCBhbiBcImFsbCB0aGVzYXVydXNcIiBVUkk7IG9ubHkga2VlcCB0aGUgbGFzdCBvbmVcbiAgICAgIGlmIChrZXkuaW5kZXhPZignQEBAJykgPiAtMSkge1xuICAgICAgICBrZXkgPSBrZXkuc3BsaXQoJ0BAQCcpWzFdXG4gICAgICB9XG4gICAgICBjb25zdCBsYWJlbCA9XG4gICAgICAgIGxhbmczICYmIGxhbmczIGluIGtleXdvcmQudmFsdWVzID8ga2V5d29yZC52YWx1ZXNbbGFuZzNdIDoga2V5d29yZC52YWx1ZVxuICAgICAgY29uc3QgZGVzY3JpcHRpb24gPVxuICAgICAgICBsYW5nMyAmJiBsYW5nMyBpbiBrZXl3b3JkLmRlZmluaXRpb25zXG4gICAgICAgICAgPyBrZXl3b3JkLmRlZmluaXRpb25zW2xhbmczXVxuICAgICAgICAgIDoga2V5d29yZC5kZWZpbml0aW9uXG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXksXG4gICAgICAgIGxhYmVsLFxuICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgIH1cbiAgICB9KVxuICB9XG59XG4iXX0=
|