@wavemaker/app-ng-runtime 11.11.0-rc.6126 → 11.11.1-rc.210
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/components/containers/wizard/bundles/index.umd.js +16 -6
- package/components/containers/wizard/esm2022/wizard.component.mjs +17 -7
- package/components/containers/wizard/fesm2022/index.mjs +16 -6
- package/components/containers/wizard/fesm2022/index.mjs.map +1 -1
- package/components/containers/wizard/wizard.component.d.ts +1 -0
- package/components/data/table/bundles/index.umd.js +9 -7
- package/components/data/table/esm2022/table-filter.directive.mjs +10 -8
- package/components/data/table/fesm2022/index.mjs +9 -7
- package/components/data/table/fesm2022/index.mjs.map +1 -1
- package/core/bundles/index.umd.js +4 -17
- package/core/esm2022/services/script-loader.service.mjs +5 -18
- package/core/fesm2022/index.mjs +4 -17
- package/core/fesm2022/index.mjs.map +1 -1
- package/core/services/script-loader.service.d.ts +0 -2
- package/npm-shrinkwrap.json +2 -2
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/scripts/@wavemaker/nvd3/build/nv.d3.min.js +1 -1
|
@@ -313,18 +313,20 @@ export class TableFilterSortDirective {
|
|
|
313
313
|
// Returns data sorted using sortObj
|
|
314
314
|
getSortResult(data, sortObj) {
|
|
315
315
|
if (sortObj && sortObj.direction) {
|
|
316
|
-
const
|
|
316
|
+
const fieldValue = get(find(data, sortObj.field), sortObj.field);
|
|
317
|
+
const isValidDateString = typeof fieldValue === 'string' ? this.parseDateString(fieldValue) : NaN;
|
|
317
318
|
if (!isNaN(isValidDateString)) { // if the field is a date string
|
|
318
319
|
data = orderBy(data, [(item) => this.parseDateString(item[sortObj.field])], [sortObj.direction]);
|
|
319
320
|
}
|
|
320
321
|
else if (this.table.columns[sortObj.field]?.caseinsensitive) {
|
|
321
322
|
//Fix for [WMS-27505]: Added case-insensitive sorting so that uppercase and lowercase letters are treated the same when sorting.
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
323
|
+
data = orderBy(data, [
|
|
324
|
+
(item) => {
|
|
325
|
+
const val = get(item, sortObj.field);
|
|
326
|
+
return typeof val === 'string' ? val.toLowerCase() : val;
|
|
327
|
+
},
|
|
328
|
+
(item) => get(item, sortObj.field) // fallback to original value
|
|
329
|
+
], [sortObj.direction, sortObj.direction]);
|
|
328
330
|
}
|
|
329
331
|
else {
|
|
330
332
|
data = orderBy(data, sortObj.field, sortObj.direction);
|
|
@@ -691,4 +693,4 @@ export class TableFilterSortDirective {
|
|
|
691
693
|
type: Inject,
|
|
692
694
|
args: [TableComponent]
|
|
693
695
|
}] }], null); })();
|
|
694
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtZmlsdGVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhL3RhYmxlL3NyYy90YWJsZS1maWx0ZXIuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV4RCxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLHlCQUF5QixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2pKLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxvQkFBb0IsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVuSixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUNILFFBQVEsRUFDUixNQUFNLEVBQ04sSUFBSSxFQUNKLE9BQU8sRUFDUCxHQUFHLEVBQUUsSUFBSSxFQUNULFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUMxQixPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFDaEQsVUFBVSxFQUFFLE9BQU8sRUFDbkIsUUFBUSxFQUNSLFFBQVEsRUFDWCxNQUFNLFdBQVcsQ0FBQztBQUduQixPQUFPLEtBQUssU0FBUyxNQUFPLFFBQVEsQ0FBQzs7QUFDckMsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUFFckQsTUFBTSxlQUFlLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUM7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QU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFDekMsTUFBTSxXQUFXLEdBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDdkcsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN4RCxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRTtZQUNyQyxJQUFJLEVBQUUsSUFBSTtZQUNWLFlBQVksRUFBRyxZQUFZO1lBQzNCLE9BQU8sRUFBRyxXQUFXO1lBQ3JCLFNBQVMsRUFBRyxTQUFTO1NBQ3hCLENBQUMsQ0FBQztJQUNQLENBQUM7eUhBdGhCUSx3QkFBd0IsdUJBRUwsY0FBYztvRUFGakMsd0JBQXdCOztpRkFBeEIsd0JBQXdCO2NBSnBDLFNBQVM7ZUFBQztnQkFDVCxVQUFVLEVBQUUsSUFBSTtnQkFDZCxRQUFRLEVBQUUscUJBQXFCO2FBQ2xDOztzQkFHZ0IsSUFBSTs7c0JBQUksTUFBTTt1QkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbmplY3QsIFNlbGYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgJGFwcERpZ2VzdCwgRGF0YVNvdXJjZSwgRGF0YVR5cGUsIEZvcm1XaWRnZXRUeXBlLCBnZXRDbG9uZWRPYmplY3QsIGlzRGVmaW5lZCwgaXNOdW1iZXJUeXBlLCBhZGp1c3RDb250YWluZXJSaWdodEVkZ2VzIH0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHsgZ2V0TWF0Y2hNb2RlTXNncywgZ2V0TWF0Y2hNb2RlVHlwZXNNYXAsIGlzRGF0YVNldFdpZGdldCwgcmVmcmVzaERhdGFTb3VyY2UsIHVuc3VwcG9ydGVkU3RhdGVQZXJzaXN0ZW5jZVR5cGVzIH0gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5cbmltcG9ydCB7IFRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgICBlbmRzV2l0aCxcbiAgICBmaWx0ZXIsXG4gICAgZmluZCxcbiAgICBmb3JFYWNoLFxuICAgIGdldCwgaGVhZCxcbiAgICBpbmNsdWRlcywgaXNBcnJheSwgaXNFbXB0eSxcbiAgICBpc0VxdWFsLCBpc051bGwsIGlzT2JqZWN0LCBvcmRlckJ5LCByYW5nZSwgc3BsaXQsXG4gICAgc3RhcnRzV2l0aCwgdG9Mb3dlcixcbiAgICB0b051bWJlcixcbiAgICB0b1N0cmluZ1xufSBmcm9tIFwibG9kYXNoLWVzXCI7XG5cbmRlY2xhcmUgY29uc3QgJDtcbmltcG9ydCAqIGFzIG1vbWVudExpYiAgZnJvbSAnbW9tZW50JztcbmNvbnN0IG1vbWVudCA9IG1vbWVudExpYi5kZWZhdWx0IHx8IHdpbmRvd1snbW9tZW50J107XG5cbmNvbnN0IGVtcHR5TWF0Y2hNb2RlcyA9IFsnbnVsbCcsICdlbXB0eScsICdudWxsb3JlbXB0eScsICdpc25vdG51bGwnLCAnaXNub3RlbXB0eSddO1xuXG4vLyBHZXQgc2VhcmNoIHZhbHVlIGJhc2VkIG9uIHRoZSB0aW1lXG5jb25zdCBnZXRTZWFyY2hWYWx1ZSA9ICh2YWx1ZSwgdHlwZSkgPT4ge1xuICAgIGlmICghaXNEZWZpbmVkKHZhbHVlKSB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKGlzTnVtYmVyVHlwZSh0eXBlKSkge1xuICAgICAgICByZXR1cm4gdG9OdW1iZXIodmFsdWUpO1xuICAgIH1cbiAgICBpZiAodHlwZSA9PT0gRGF0YVR5cGUuREFURVRJTUUpIHtcbiAgICAgICAgcmV0dXJuIG1vbWVudCh2YWx1ZSkudmFsdWVPZigpO1xuICAgIH1cbiAgICByZXR1cm4gdG9TdHJpbmcodmFsdWUpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG4vLyBGaWx0ZXIgdGhlIGRhdGEgYmFzZWQgb24gdGhlIHNlYXJjaCB2YWx1ZSBhbmQgY29uZGl0aW9uc1xuY29uc3QgZ2V0RmlsdGVyZWREYXRhID0gKGRhdGEsIHNlYXJjaE9iaiwgdmlzaWJsZUNvbHMgPSBbXSkgPT4ge1xuICAgIGNvbnN0IHNlYXJjaFZhbCA9IGdldFNlYXJjaFZhbHVlKHNlYXJjaE9iai52YWx1ZSwgc2VhcmNoT2JqLnR5cGUpO1xuICAgIGxldCBjdXJyZW50VmFsO1xuICAgIC8vIFJldHVybiB3aG9sZSBkYXRhIGlmXG4gICAgLy8gLSBzZWFyY2ggdmFsdWUgaXMgdW5kZWZpbmVkIGFuZCBtYXRjaG1vZGUgaXMgbm90IGFuIGVtcHR5IG1hdGNobW9kZSB0eXBlXG4gICAgLy8gLSBzZWFyY2ggdmFsdWUgaXMgbnVsbCBhbmQgZGF0YXR5cGUgaXMgbnVtYmVyLiBOdWxsIGNhbiBub3QgYmUgY29tcGFyZWQgd2l0aCBudW1lcmljIHZhbHVlc1tXTVMtMTkyNzVdLlxuICAgIGlmICgoIWlzRGVmaW5lZChzZWFyY2hWYWwpICYmICFpbmNsdWRlcyhlbXB0eU1hdGNoTW9kZXMsIHNlYXJjaE9iai5tYXRjaE1vZGUpKSB8fCAoaXNOdW1iZXJUeXBlKHNlYXJjaE9iai50eXBlKSAmJiBpc051bGwoc2VhcmNoT2JqLnZhbHVlKSkpIHtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGRhdGEgPSBkYXRhLmZpbHRlcigob2JqKSA9PiB7XG4gICAgICAgIGxldCBpc0V4aXN0cztcbiAgICAgICAgaWYgKHNlYXJjaE9iai5maWVsZCkge1xuICAgICAgICAgICAgY3VycmVudFZhbCA9IGdldFNlYXJjaFZhbHVlKGdldChvYmosIHNlYXJjaE9iai5maWVsZCksIHNlYXJjaE9iai50eXBlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGN1cnJlbnRWYWwgPSBbXTtcbiAgICAgICAgICAgIGZvckVhY2gob2JqLCAodmFsLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoKGluY2x1ZGVzKHZpc2libGVDb2xzLCBrZXkpKSkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VmFsLnB1c2godmFsKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBXTVMtMjIyNzEgSWYgdGhlIGtleSBpcyBpbiBuZXN0ZWQga2V5IGZvcm1hdCAoZG90IGZvcm1hdClcbiAgICAgICAgICAgICAgICAgICAgLy8gRmluZCBhbGwgdGhlIGluZGV4ZXMgb2YgdGhlIGtleSBpbiB2aXNpYmxlY29scyBhbmQgZXh0cmFjdCB0aGVpciB2YWx1ZXMgZnJvbSBvYmpcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sSW5kZXggPSBmaWx0ZXIocmFuZ2UodmlzaWJsZUNvbHMubGVuZ3RoKSwgKGkpID0+IHZpc2libGVDb2xzW2ldLmluY2x1ZGVzKGtleSkpO1xuICAgICAgICAgICAgICAgICAgICBmb3JFYWNoKGNvbEluZGV4LCAoaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZ2V0KG9iaiwgdmlzaWJsZUNvbHNbaW5kZXhdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VmFsLmluZGV4T2YodmFsdWUpIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRWYWwucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY3VycmVudFZhbCA9IGN1cnJlbnRWYWwuam9pbignICcpLnRvTG93ZXJDYXNlKCk7IC8vIElmIGZpZWxkIGlzIG5vdCB0aGVyZSwgc2VhcmNoIG9uIGFsbCB0aGUgY29sdW1uc1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoc2VhcmNoT2JqLm1hdGNoTW9kZSkge1xuICAgICAgICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICAgICAgICAgIGlzRXhpc3RzID0gc3RhcnRzV2l0aChjdXJyZW50VmFsLCBzZWFyY2hWYWwgYXMgc3RyaW5nKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICAgICAgaXNFeGlzdHMgPSBlbmRzV2l0aChjdXJyZW50VmFsLCBzZWFyY2hWYWwgYXMgc3RyaW5nKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2V4YWN0JzpcbiAgICAgICAgICAgICAgICBpc0V4aXN0cyA9IGlzRXF1YWwoY3VycmVudFZhbCwgc2VhcmNoVmFsKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ25vdGVxdWFscyc6XG4gICAgICAgICAgICAgICAgaXNFeGlzdHMgPSAhaXNFcXVhbChjdXJyZW50VmFsLCBzZWFyY2hWYWwpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbnVsbCc6XG4gICAgICAgICAgICAgICAgaXNFeGlzdHMgPSBpc051bGwoY3VycmVudFZhbCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdpc25vdG51bGwnOlxuICAgICAgICAgICAgICAgIGlzRXhpc3RzID0gIWlzTnVsbChjdXJyZW50VmFsKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2VtcHR5JzpcbiAgICAgICAgICAgICAgICBpc0V4aXN0cyA9IGlzRW1wdHkoY3VycmVudFZhbCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdpc25vdGVtcHR5JzpcbiAgICAgICAgICAgICAgICBpc0V4aXN0cyA9ICFpc0VtcHR5KGN1cnJlbnRWYWwpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbnVsbG9yZW1wdHknOlxuICAgICAgICAgICAgICAgIGlzRXhpc3RzID0gaXNOdWxsKGN1cnJlbnRWYWwpIHx8IGlzRW1wdHkoY3VycmVudFZhbCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdsZXNzdGhhbic6XG4gICAgICAgICAgICAgICAgaXNFeGlzdHMgPSBjdXJyZW50VmFsIDwgc2VhcmNoVmFsO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbGVzc3RoYW5lcXVhbCc6XG4gICAgICAgICAgICAgICAgaXNFeGlzdHMgPSBjdXJyZW50VmFsIDw9IHNlYXJjaFZhbDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2dyZWF0ZXJ0aGFuJzpcbiAgICAgICAgICAgICAgICBpc0V4aXN0cyA9IGN1cnJlbnRWYWwgPiBzZWFyY2hWYWw7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdncmVhdGVydGhhbmVxdWFsJzpcbiAgICAgICAgICAgICAgICBpc0V4aXN0cyA9IGN1cnJlbnRWYWwgPj0gc2VhcmNoVmFsO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpc0V4aXN0cyA9IGlzTnVtYmVyVHlwZShzZWFyY2hPYmoudHlwZSkgPyBpc0VxdWFsKGN1cnJlbnRWYWwsIHNlYXJjaFZhbCkgOiBpbmNsdWRlcyhjdXJyZW50VmFsLCBzZWFyY2hWYWwpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc0V4aXN0cztcbiAgICB9KTtcbiAgICByZXR1cm4gZGF0YTtcbn07XG5cbi8vIFNldCB0aGUgZmlsdGVyIGZpZWxkcyB3aGVuIHRoZSBzZWFyY2ggdmFsdWUgaXMgc3BlY2lmaWVkIGFuZCBmaWVsZCBpcyBub3Qgc2VsZWN0ZWRcbmNvbnN0IHNldEFsbEZpbHRlckZpZWxkcyA9IGZ1bmN0aW9uKGZpbHRlckZpZWxkcywgc2VhcmNoT2JqLCB2aXNpYmxlQ29scykge1xuICAgIHZpc2libGVDb2xzLmZvckVhY2goZnVuY3Rpb24oZmllbGQpIHtcbiAgICAgICAgZmlsdGVyRmllbGRzW2ZpZWxkXSA9IHtcbiAgICAgICAgICAgICd2YWx1ZSc6IHNlYXJjaE9iai52YWx1ZSxcbiAgICAgICAgICAgICd0eXBlJyA6IHNlYXJjaE9iai52YWx1ZS50eXBlLFxuICAgICAgICAgICAgJ2xvZ2ljYWxPcCc6ICdPUidcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHNlYXJjaE9iai5tYXRjaE1vZGUpIHtcbiAgICAgICAgICAgIGZpbHRlckZpZWxkc1tmaWVsZF0ubWF0Y2hNb2RlID0gc2VhcmNoT2JqLm1hdGNoTW9kZTtcbiAgICAgICAgfVxuICAgIH0pO1xufTtcblxuLy8gU2V0IHRoZSBmaWx0ZXIgZmllbGRzIGFzIHJlcXVpcmVkIGJ5IGRhdGFzb3VyY2VcbmNvbnN0IHNldEZpbHRlckZpZWxkcyA9IChmaWx0ZXJGaWVsZHMsIHNlYXJjaE9iaiwgdmlzaWJsZUNvbHMgPSBbXSkgPT4ge1xuICAgIGNvbnN0IGZpZWxkID0gc2VhcmNoT2JqICYmIHNlYXJjaE9iai5maWVsZDtcbiAgICAvKlNldCB0aGUgZmlsdGVyIG9wdGlvbnMgd2hlbiBhIGZpZWxkL2NvbHVtbiBoYXMgYmVlbiBzZWxlY3RlZC4qL1xuICAgIGlmIChmaWVsZCkge1xuICAgICAgICBmaWx0ZXJGaWVsZHNbZmllbGRdID0ge1xuICAgICAgICAgICAgJ3ZhbHVlJyAgICAgOiBzZWFyY2hPYmoudmFsdWUsXG4gICAgICAgICAgICAnbG9naWNhbE9wJyA6ICdBTkQnXG4gICAgICAgIH07XG4gICAgICAgIGlmIChzZWFyY2hPYmoubWF0Y2hNb2RlKSB7XG4gICAgICAgICAgICBmaWx0ZXJGaWVsZHNbZmllbGRdLm1hdGNoTW9kZSA9IHNlYXJjaE9iai5tYXRjaE1vZGU7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICAvKlNldCB0aGUgZmlsdGVyIG9wdGlvbnMgd2hlbiBhIGZpZWxkL2NvbHVtbiBoYXNuJ3QgYmVlbiBzZWxlY3RlZC4qL1xuICAgICAgICBzZXRBbGxGaWx0ZXJGaWVsZHMoZmlsdGVyRmllbGRzLCBzZWFyY2hPYmosIHZpc2libGVDb2xzKTtcbiAgICB9XG59O1xuXG4vLyBUcmFuc2Zvcm0gZmlsdGVyIGZpZWxkcyBmcm9tIGFycmF5IHRvIG9iamVjdCBoYXZpbmcgZmllbGQgbmFtZXMgYXMga2V5c1xuY29uc3QgdHJhbnNmb3JtRmlsdGVyRmllbGQgPSAodXNlckZpbHRlcnMsIGZpbHRlckZpZWxkKSA9PiB7XG4gICAgaWYgKGZpbHRlckZpZWxkLmZpZWxkKSB7XG4gICAgICAgIHVzZXJGaWx0ZXJzW2ZpbHRlckZpZWxkLmZpZWxkXSA9IHtcbiAgICAgICAgICAgIHZhbHVlOiBmaWx0ZXJGaWVsZC52YWx1ZSxcbiAgICAgICAgICAgIG1hdGNoTW9kZTogZmlsdGVyRmllbGQubWF0Y2hNb2RlLFxuICAgICAgICAgICAgdHlwZTogZmlsdGVyRmllbGQudHlwZVxuICAgICAgICB9O1xuICAgIH1cbn07XG5cbi8vIEJ1aWxkIGEgZmlsdGVyIEZpZWxkcyBvYmplY3RcbmNvbnN0IGFkZFRvRmlsdGVyRmllbGRzID0gKGZpbHRlckZpZWxkcywgc2VhcmNoT2JqKSA9PiB7XG4gICAgZmlsdGVyRmllbGRzLnB1c2goe1xuICAgICAgICBmaWVsZDogKHNlYXJjaE9iai5rZXkpID8gc2VhcmNoT2JqLmtleSA6ICcnLFxuICAgICAgICBtYXRjaE1vZGU6IHNlYXJjaE9iai5tYXRjaE1vZGUsXG4gICAgICAgIHR5cGU6IHNlYXJjaE9iai50eXBlLFxuICAgICAgICB2YWx1ZTogc2VhcmNoT2JqLnZhbHVlXG4gICAgfSk7XG59O1xuXG5ARGlyZWN0aXZlKHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ1t3bVRhYmxlRmlsdGVyU29ydF0nXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlRmlsdGVyU29ydERpcmVjdGl2ZSB7XG5cbiAgICBjb25zdHJ1Y3RvcihAU2VsZigpIEBJbmplY3QoVGFibGVDb21wb25lbnQpIHByaXZhdGUgdGFibGUpIHtcbiAgICAgICAgdGFibGUuX3NlYXJjaFNvcnRIYW5kbGVyID0gdGhpcy5zZWFyY2hTb3J0SGFuZGxlci5iaW5kKHRoaXMpO1xuICAgICAgICB0YWJsZS5nZXRTZWFyY2hSZXN1bHQgPSB0aGlzLmdldFNlYXJjaFJlc3VsdC5iaW5kKHRoaXMpO1xuICAgICAgICB0YWJsZS5nZXRTb3J0UmVzdWx0ID0gdGhpcy5nZXRTb3J0UmVzdWx0LmJpbmQodGhpcyk7XG4gICAgICAgIHRhYmxlLmNoZWNrRmlsdGVyc0FwcGxpZWQgPSB0aGlzLmNoZWNrRmlsdGVyc0FwcGxpZWQuYmluZCh0aGlzKTtcbiAgICAgICAgdGFibGUuZ2V0RmlsdGVyRmllbGRzID0gdGhpcy5nZXRGaWx0ZXJGaWVsZHMuYmluZCh0aGlzKTtcbiAgICAgICAgdGFibGUub25Sb3dGaWx0ZXJDaGFuZ2UgPSB0aGlzLm9uUm93RmlsdGVyQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRhYmxlLm9uRmlsdGVyQ29uZGl0aW9uU2VsZWN0ID0gdGhpcy5vbkZpbHRlckNvbmRpdGlvblNlbGVjdC5iaW5kKHRoaXMpO1xuICAgICAgICB0YWJsZS5zaG93Q2xlYXJJY29uID0gdGhpcy5zaG93Q2xlYXJJY29uLmJpbmQodGhpcyk7XG4gICAgICAgIHRhYmxlLmNsZWFyUm93RmlsdGVyID0gdGhpcy5jbGVhclJvd0ZpbHRlci5iaW5kKHRoaXMpO1xuICAgICAgICB0YWJsZS5tYXRjaE1vZGVUeXBlc01hcCA9IGdldE1hdGNoTW9kZVR5cGVzTWFwKCk7XG4gICAgICAgIHRhYmxlLm1hdGNoTW9kZU1zZ3MgPSBnZXRNYXRjaE1vZGVNc2dzKHRhYmxlLmFwcExvY2FsZSk7XG4gICAgICAgIHRhYmxlLmVtcHR5TWF0Y2hNb2RlcyA9IGVtcHR5TWF0Y2hNb2RlcztcbiAgICAgICAgdGFibGUuZ2V0TmF2aWdhdGlvblRhcmdldEJ5U29ydEluZm8gPSB0aGlzLmdldE5hdmlnYXRpb25UYXJnZXRCeVNvcnRJbmZvLmJpbmQodGhpcyk7XG4gICAgICAgIHRhYmxlLnJlZnJlc2hEYXRhID0gdGhpcy5yZWZyZXNoRGF0YS5iaW5kKHRoaXMpO1xuICAgICAgICB0YWJsZS5jbGVhckZpbHRlciA9IHRoaXMuY2xlYXJGaWx0ZXIuYmluZCh0aGlzKTtcbiAgICAgICAgdGFibGUuYWRqdXN0Q29udGFpbmVyID0gdGhpcy5hZGp1c3RDb250YWluZXIuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBhZGp1c3RDb250YWluZXIoZmllbGROYW1lKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgYWRqdXN0Q29udGFpbmVyUmlnaHRFZGdlcygkKCdicy1kcm9wZG93bi1jb250YWluZXInKSwgdGhpcy50YWJsZS5yb3dGaWx0ZXJDb21wbGllZFRsW2ZpZWxkTmFtZV0sIHRoaXMudGFibGUsICQoJ2JzLWRyb3Bkb3duLWNvbnRhaW5lciAuZHJvcGRvd24tbWVudScpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gR2V0IGZpcnN0IG9yIGxhc3QgcGFnZSBiYXNlZCBvbiBzb3J0IGluZm8gb2YgcHJpbWFyeSBrZXlcbiAgICBnZXROYXZpZ2F0aW9uVGFyZ2V0QnlTb3J0SW5mbygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGUuc29ydEluZm8gJiYgdGhpcy50YWJsZS5zb3J0SW5mby5kaXJlY3Rpb24gPT09ICdkZXNjJyAmJlxuICAgICAgICBpbmNsdWRlcyh0aGlzLnRhYmxlLnByaW1hcnlLZXksIHRoaXMudGFibGUuc29ydEluZm8uZmllbGQpID8gJ2ZpcnN0JyA6ICdsYXN0JztcbiAgICB9XG5cbiAgICAvLyBSZXR1cm5zIGFsbCB0aGUgY29sdW1ucyBvZiB0aGUgdGFibGUgd2hlcmVpbiwgc2hvd2luZmlsdGVyIGlzIHNldCB0byB0cnVlXG4gICAgZ2V0VGFibGVWaXNpYmxlQ29scygpIHtcbiAgICAgICAgY29uc3QgdmlzaWJsZUNvbHMgPSBbXTtcbiAgICAgICAgZm9yRWFjaCh0aGlzLnRhYmxlLmNvbHVtbnMsICh2YWwsIGNvbCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRvTG93ZXIodG9TdHJpbmcodmFsLnNob3dpbmZpbHRlcikpID09PSAndHJ1ZScgJiYgY29sICE9PSAncm93T3BlcmF0aW9ucycgJiYgdmFsLnNlYXJjaGFibGUpIHtcbiAgICAgICAgICAgICAgICB2aXNpYmxlQ29scy5wdXNoKGNvbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdmlzaWJsZUNvbHM7XG4gICAgfVxuXG4gICAgLy8gY2FsbCB0aGUgc2V0IGZpbHRlciBmaWVsZHMgZnVuY3Rpb24gYmFzZWQgb24gdGhlIGZpZWxkIHNlbGVjdGVkIG9yIG5vdFxuICAgIGludm9rZVNldEZpbHRlcmZpZWxkQmFzZWRPbkZpZWxkdmFsKHNlYXJjaE9iaiwgZmlsdGVyRmllbGRzKSB7XG4gICAgICAgIGlmIChzZWFyY2hPYmouZmllbGQpIHtcbiAgICAgICAgICAgIHNldEZpbHRlckZpZWxkcyhmaWx0ZXJGaWVsZHMsIHNlYXJjaE9iaik7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzRW1wdHkoc2VhcmNoT2JqKSkge1xuICAgICAgICAgICBjb25zdCB2aXNpYmxlQ29scyA9IHRoaXMuZ2V0VGFibGVWaXNpYmxlQ29scygpO1xuICAgICAgICAgICAgc2V0RmlsdGVyRmllbGRzKGZpbHRlckZpZWxkcywgc2VhcmNoT2JqLCB2aXNpYmxlQ29scyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBHZXQgdGhlIGZpbHRlciBmaWVsZHMgYXMgcmVxdWlyZWQgYnkgZGF0YXNvdXJjZVxuICAgIGdldEZpbHRlckZpZWxkcyhzZWFyY2hPYmopIHtcbiAgICAgICAgc2VhcmNoT2JqID0gc2VhcmNoT2JqIHx8IHt9O1xuICAgICAgICBjb25zdCBmaWx0ZXJGaWVsZHMgPSB7fTtcbiAgICAgICAgaWYgKGlzQXJyYXkoc2VhcmNoT2JqKSkge1xuICAgICAgICAgICAgZm9yRWFjaChzZWFyY2hPYmosIG9iaiA9PiB7XG4gICAgICAgICAgICAgICB0aGlzLmludm9rZVNldEZpbHRlcmZpZWxkQmFzZWRPbkZpZWxkdmFsKG9iaiwgZmlsdGVyRmllbGRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbnZva2VTZXRGaWx0ZXJmaWVsZEJhc2VkT25GaWVsZHZhbChzZWFyY2hPYmosIGZpbHRlckZpZWxkcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbHRlckZpZWxkcztcbiAgICB9XG5cbiAgICAvLyBHZXQgdGhlIGxvZ2ljYWwgb3BlcmF0b3IgZm9yIHRoZSBzZWFyY2ggZmlsdGVyXG4gICAgZ2V0TG9naWNhbE9wZXJhdG9yKGZpbHRlckZpZWxkcykge1xuICAgICAgICBsZXQgb3BlcmF0b3IgPSAnJztcbiAgICAgICAgZm9yIChjb25zdCBmaWVsZCBpbiBmaWx0ZXJGaWVsZHMpIHtcbiAgICAgICAgICAgIG9wZXJhdG9yID0gZmlsdGVyRmllbGRzW2ZpZWxkXVsnbG9naWNhbE9wJ10gfHwgJyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3BlcmF0b3I7XG4gICAgfVxuXG4gICAgLy8gUmVzZXQgdGhlIHNvcnQgYmFzZWQgb24gc29ydCByZXR1cm5lZCBieSB0aGUgY2FsbFxuICAgIHJlc2V0U29ydFN0YXR1cyh2YXJpYWJsZVNvcnQpIHtcbiAgICAgICAgbGV0IGdyaWRTb3J0U3RyaW5nO1xuICAgICAgICBpZiAoIWlzRW1wdHkodGhpcy50YWJsZS5zb3J0SW5mbykgJiYgdGhpcy50YWJsZS5kYXRhc291cmNlKSB7XG4gICAgICAgICAgICBncmlkU29ydFN0cmluZyA9IHRoaXMudGFibGUuc29ydEluZm8uZmllbGQgKyAnICcgKyB0aGlzLnRhYmxlLnNvcnRJbmZvLmRpcmVjdGlvbjtcbiAgICAgICAgICAgIHZhcmlhYmxlU29ydCA9IHRoaXMudGFibGUuZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkdFVF9PUFRJT05TKS5vcmRlckJ5IHx8IHZhcmlhYmxlU29ydDtcbiAgICAgICAgICAgIGlmICh2YXJpYWJsZVNvcnQpIHsgLy8gSWYgbXVsdGlwbGUgb3JkZXIgYnkgZmllbGRzIGFyZSBwcmVzZW50LCBjb21wYXJlIHdpdGggdGhlIGZpcnN0IG9uZVxuICAgICAgICAgICAgICAgIHZhcmlhYmxlU29ydCA9IGhlYWQoc3BsaXQodmFyaWFibGVTb3J0LCAnLCcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChncmlkU29ydFN0cmluZyAhPT0gdmFyaWFibGVTb3J0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZS5jYWxsRGF0YUdyaWRNZXRob2QoJ3Jlc2V0U29ydEljb25zJyk7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZS5zb3J0SW5mbyA9IHt9O1xuICAgICAgICAgICAgICAgIHRoaXMudGFibGUuc2V0RGF0YUdyaWRPcHRpb24oJ3NvcnRJbmZvJywge30pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2xlYXIgdGhlIGFsbCB0aGUgZmlsdGVycyBhcHBsaWVkXG4gICAgY2xlYXJGaWx0ZXIoc2tpcEZpbHRlcikge1xuICAgICAgICBsZXQgJGdyaWRFbGVtZW50O1xuICAgICAgICB0aGlzLnRhYmxlLmZpbHRlckluZm8gPSB7fTtcbiAgICAgICAgaWYgKHRoaXMudGFibGUuZmlsdGVybW9kZSA9PT0gJ211bHRpY29sdW1uJykge1xuICAgICAgICAgICAgdGhpcy50YWJsZS5maWVsZERlZnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjb2wucmVzZXRGaWx0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sLnJlc2V0RmlsdGVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIXNraXBGaWx0ZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlLm9uUm93RmlsdGVyQ2hhbmdlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy50YWJsZS5maWx0ZXJtb2RlID09PSAnc2VhcmNoJykge1xuICAgICAgICAgICAgJGdyaWRFbGVtZW50ID0gdGhpcy50YWJsZS5kYXRhZ3JpZEVsZW1lbnQ7XG4gICAgICAgICAgICAkZ3JpZEVsZW1lbnQuZmluZCgnW2RhdGEtZWxlbWVudD1cImRnU2VhcmNoVGV4dFwiXScpLnZhbCgnJyk7XG4gICAgICAgICAgICAkZ3JpZEVsZW1lbnQuZmluZCgnW2RhdGEtZWxlbWVudD1cImRnRmlsdGVyVmFsdWVcIl0nKS52YWwoJycpO1xuICAgICAgICAgICAgaWYgKCFza2lwRmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgJGdyaWRFbGVtZW50LmZpbmQoJy5hcHAtc2VhcmNoLWJ1dHRvbicpLnRyaWdnZXIoJ2NsaWNrJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDaGVjayB0aGUgZmlsdGVycyBhcHBsaWVkIGFuZCByZW1vdmUgaWYgZGF0IGRvZXMgbm90IGNvbnRhaW4gYW55IGZpbHRlcnNcbiAgICBjaGVja0ZpbHRlcnNBcHBsaWVkKHZhcmlhYmxlU29ydCkge1xuICAgICAgICBpZiAoIXRoaXMudGFibGUuZGF0YXNvdXJjZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnRhYmxlLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5TVVBQT1JUU19TRVJWRVJfRklMVEVSKSkge1xuICAgICAgICAgICAgaWYgKGlzRW1wdHkodGhpcy50YWJsZS5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX09QVElPTlMpLmZpbHRlckZpZWxkcykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyRmlsdGVyKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZXNldFNvcnRTdGF0dXModmFyaWFibGVTb3J0KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy50YWJsZS5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uSVNfUEFHRUFCTEUpKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0U29ydFN0YXR1cyh2YXJpYWJsZVNvcnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJucyBkYXRhIGZpbHRlcmVkIHVzaW5nIHNlYXJjaE9ialxuICAgIGdldFNlYXJjaFJlc3VsdChkYXRhLCBzZWFyY2hPYmopIHtcbiAgICAgICAgY29uc3QgdmlzaWJsZUNvbHMgPSB0aGlzLmdldFRhYmxlVmlzaWJsZUNvbHMoKTtcbiAgICAgICAgaWYgKCFzZWFyY2hPYmopIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FycmF5KHNlYXJjaE9iaikpIHtcbiAgICAgICAgICAgIHNlYXJjaE9iai5mb3JFYWNoKChvYmopID0+IHtcbiAgICAgICAgICAgICAgICBkYXRhID0gZ2V0RmlsdGVyZWREYXRhKGRhdGEsIG9iaiwgdmlzaWJsZUNvbHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRhID0gZ2V0RmlsdGVyZWREYXRhKGRhdGEsIHNlYXJjaE9iaiwgdmlzaWJsZUNvbHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICAvLyBGdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiBhIGdpdmVuIHN0cmluZyBpcyBhIHZhbGlkIGRhdGUgYW5kIHJldHVybnMgdGhlIHRpbWVzdGFtcCBpZiBpdCBpcywgb3IgTmFOIGlmIGl0J3Mgbm90LlxuICAgIHBhcnNlRGF0ZVN0cmluZyhkYXRlU3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcCA9IERhdGUucGFyc2UoZGF0ZVN0cmluZyk7XG4gICAgICAgIGlmICghaXNOYU4odGltZXN0YW1wKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRpbWVzdGFtcDtcbiAgICAgICAgfSBlbHNlIHsgLy8gU2luY2UgRGF0ZS5wYXJzZSgpIGRvZXNuJ3Qgc3VwcG9ydCBhbGwgZGF0ZSBmb3JtYXRzLCBtYW51YWxseSB2YWxpZGF0aW5nIHRoZSBkYXRlLlxuICAgICAgICAgICAgY29uc3QgcGFydHMgPSBkYXRlU3RyaW5nPy5zcGxpdCgvWy0vXFxzXSsvKT8ubWFwKE51bWJlcikgfHwgW107XG4gICAgICAgICAgICByZXR1cm4gIG5ldyBEYXRlKHBhcnRzWzJdLCBwYXJ0c1sxXSAtIDEsIHBhcnRzWzBdKS5nZXRUaW1lKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE5hTjtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm5zIGRhdGEgc29ydGVkIHVzaW5nIHNvcnRPYmpcbiAgICBnZXRTb3J0UmVzdWx0KGRhdGEsIHNvcnRPYmopIHtcbiAgICAgICAgaWYgKHNvcnRPYmogJiYgc29ydE9iai5kaXJlY3Rpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGlzVmFsaWREYXRlU3RyaW5nID0gdGhpcy5wYXJzZURhdGVTdHJpbmcoZ2V0KGZpbmQoZGF0YSwgc29ydE9iai5maWVsZCksIHNvcnRPYmouZmllbGQpKTtcbiAgICAgICAgICAgIGlmICghaXNOYU4oaXNWYWxpZERhdGVTdHJpbmcpKSB7IC8vIGlmIHRoZSBmaWVsZCBpcyBhIGRhdGUgc3RyaW5nXG4gICAgICAgICAgICAgICAgZGF0YSA9IG9yZGVyQnkoZGF0YSwgWyhpdGVtKSA9PiB0aGlzLnBhcnNlRGF0ZVN0cmluZyhpdGVtW3NvcnRPYmouZmllbGRdKV0sIFtzb3J0T2JqLmRpcmVjdGlvbl0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnRhYmxlLmNvbHVtbnNbc29ydE9iai5maWVsZF0/LmNhc2VpbnNlbnNpdGl2ZSkge1xuICAgICAgICAgICAgICAgIC8vRml4IGZvciBbV01TLTI3NTA1XTogQWRkZWQgY2FzZS1pbnNlbnNpdGl2ZSBzb3J0aW5nIHNvIHRoYXQgdXBwZXJjYXNlIGFuZCBsb3dlcmNhc2UgbGV0dGVycyBhcmUgdHJlYXRlZCB0aGUgc2FtZSB3aGVuIHNvcnRpbmcuXG4gICAgICAgICAgICAgICAgaWYgKHNvcnRPYmouZGlyZWN0aW9uID09PSAnYXNjJykge1xuICAgICAgICAgICAgICAgICAgICBkYXRhID0gb3JkZXJCeShkYXRhLCBbKGl0ZW0pID0+IGdldChpdGVtLCBzb3J0T2JqLmZpZWxkKT8udG9Mb3dlckNhc2UoKSwgKGl0ZW0pID0+IGl0ZW1bc29ydE9iai5maWVsZF1dKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkYXRhID0gb3JkZXJCeShkYXRhLFsoaXRlbSkgPT4gZ2V0KGl0ZW0sIHNvcnRPYmouZmllbGQpPy50b0xvd2VyQ2FzZSgpLChpdGVtKSA9PiBpdGVtW3NvcnRPYmouZmllbGRdXSwgWydkZXNjJywgJ2Rlc2MnXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gb3JkZXJCeShkYXRhLCBzb3J0T2JqLmZpZWxkLCBzb3J0T2JqLmRpcmVjdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBtZXRob2QgaGFuZGxlcyB0aGUgY2xpZW50IHNpZGUgc29ydCBhbmQgc2VhcmNoXG4gICAgcHJpdmF0ZSBoYW5kbGVDbGllbnRTaWRlU29ydFNlYXJjaChzZWFyY2hTb3J0T2JqLCBlLCB0eXBlKSB7XG4gICAgICAgIHRoaXMudGFibGUuX2lzQ2xpZW50U2VhcmNoID0gdHJ1ZTtcblxuICAgICAgICBsZXQgZGF0YTtcbiAgICAgICAgZGF0YSA9IHRoaXMudGFibGUuaXNOYXZpZ2F0aW9uRW5hYmxlZCgpID8gZ2V0Q2xvbmVkT2JqZWN0KHRoaXMudGFibGUuX19mdWxsRGF0YSkgOiBnZXRDbG9uZWRPYmplY3QodGhpcy50YWJsZS5kYXRhc2V0KTtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdzZWFyY2gnKSB7XG4gICAgICAgICAgICB0aGlzLnRhYmxlLmZpbHRlckluZm8gPSBzZWFyY2hTb3J0T2JqO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50YWJsZS5zb3J0SW5mbyA9IHNlYXJjaFNvcnRPYmo7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzT2JqZWN0KGRhdGEpICYmICFpc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICB9XG4gICAgICAgIC8qQm90aCB0aGUgZnVuY3Rpb25zIHJldHVybiBzYW1lICdkYXRhJyBpZiBhcmd1bWVudHMgYXJlIHVuZGVmaW5lZCovXG4gICAgICAgIGRhdGEgPSB0aGlzLmdldFNlYXJjaFJlc3VsdChkYXRhLCB0aGlzLnRhYmxlLmZpbHRlckluZm8pO1xuICAgICAgICBkYXRhID0gdGhpcy5nZXRTb3J0UmVzdWx0KGRhdGEsIHRoaXMudGFibGUuc29ydEluZm8pO1xuICAgICAgICB0aGlzLnRhYmxlLnNlcnZlckRhdGEgPSBkYXRhO1xuXG4gICAgICAgIGlmICh0eXBlID09PSAnc29ydCcpIHtcbiAgICAgICAgICAgIC8vIENhbGxpbmcgJ29uU29ydCcgZXZlbnRcbiAgICAgICAgICAgIHRoaXMudGFibGUuaW52b2tlRXZlbnRDYWxsYmFjaygnc29ydCcsIHskZXZlbnQ6IGUsICRkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMudGFibGUuc2VydmVyRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgc29ydERpcmVjdGlvbjogdGhpcy50YWJsZS5zb3J0SW5mby5kaXJlY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIGNvbERlZjogdGhpcy50YWJsZS5jb2x1bW5zW3RoaXMudGFibGUuc29ydEluZm8uZmllbGRdXG4gICAgICAgICAgICAgICAgfX0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudGFibGUuaXNOYXZpZ2F0aW9uRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAvLyBSZXNldCB0aGUgcGFnZSBudW1iZXIgdG8gMVxuICAgICAgICAgICAgdGhpcy50YWJsZS5kYXRhTmF2aWdhdG9yLmRuLmN1cnJlbnRQYWdlID0gMTtcbiAgICAgICAgICAgIHRoaXMudGFibGUuZGF0YU5hdmlnYXRvci5zZXRQYWdpbmdWYWx1ZXMoZGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRhYmxlLnNldEdyaWREYXRhKHRoaXMudGFibGUuc2VydmVyRGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaGlzIG1ldGhvZCBoYW5kbGVzIHRoZSBzZWFyY2ggZm9yIHBhZ2VhYmxlIGRhdGFzb3VyY2VcbiAgICBwcml2YXRlIGhhbmRsZVNpbmdsZVBhZ2VTZWFyY2goc2VhcmNoT2JqKSB7XG4gICAgICAgIHRoaXMudGFibGUuX2lzUGFnZVNlYXJjaCA9IHRydWU7XG5cbiAgICAgICAgbGV0IGRhdGEgID0gZ2V0Q2xvbmVkT2JqZWN0KHRoaXMudGFibGUuZ3JpZERhdGEpO1xuICAgICAgICBjb25zdCAkcm93cyA9IHRoaXMudGFibGUuZGF0YWdyaWRFbGVtZW50LmZpbmQoJ3Rib2R5IHRyLmFwcC1kYXRhZ3JpZC1yb3cnKTtcbiAgICAgICAgdGhpcy50YWJsZS5maWx0ZXJJbmZvID0gc2VhcmNoT2JqO1xuICAgICAgICBkYXRhID0gdGhpcy5nZXRTZWFyY2hSZXN1bHQoZGF0YSwgc2VhcmNoT2JqKTtcbiAgICAgICAgLy8gQ29tcGFyZWQgdGhlIGZpbHRlcmVkIGRhdGEgYW5kIG9yaWdpbmFsIGRhdGEsIHRvIHNob3cgb3IgaGlkZSB0aGUgcm93c1xuICAgICAgICBmb3JFYWNoKHRoaXMudGFibGUuZ3JpZERhdGEsICh2YWx1ZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0ICRyb3cgPSAkKCRyb3dzW2luZGV4XSk7XG4gICAgICAgICAgICBpZiAoZmluZChkYXRhLCBvYmogPT4gaXNFcXVhbChvYmosIHZhbHVlKSkpIHtcbiAgICAgICAgICAgICAgICAkcm93LnNob3coKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgJHJvdy5oaWRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy50YWJsZS5jYWxsRGF0YUdyaWRNZXRob2QoJ3NldFN0YXR1cycsICdyZWFkeScpO1xuICAgICAgICAgICAgLy8gU2VsZWN0IHRoZSBmaXJzdCByb3cgYWZ0ZXIgdGhlIHNlYXJjaCBmb3Igc2luZ2xlIHNlbGVjdFxuICAgICAgICAgICAgaWYgKHRoaXMudGFibGUuZ3JpZGZpcnN0cm93c2VsZWN0ICYmICF0aGlzLnRhYmxlLm11bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZS5jYWxsRGF0YUdyaWRNZXRob2QoJ3NlbGVjdEZpcnN0Um93JywgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRhYmxlLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0U3RhdHVzJywgJ25vZGF0YScsIHRoaXMudGFibGUubm9kYXRhbWVzc2FnZSk7XG4gICAgICAgICAgICB0aGlzLnRhYmxlLnNlbGVjdGVkaXRlbSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRhYmxlLmNhbGxEYXRhR3JpZE1ldGhvZCgndXBkYXRlU2VsZWN0QWxsQ2hlY2tib3hTdGF0ZScpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgbWV0aG9kIGhhbmRsZXMgdGhlIHNlYXJjaCBmb3Igc2VydmVyIHNpZGUgdmFyaWFibGVzXG4gICAgcHJpdmF0ZSBoYW5kbGVTZXJ2ZXJTaWRlU2VhcmNoKHNlYXJjaE9iaikge1xuICAgICAgICB0aGlzLnRhYmxlLmZpbHRlckluZm8gPSBzZWFyY2hPYmo7XG5cbiAgICAgICAgaWYgKCF0aGlzLnRhYmxlLmRhdGFzb3VyY2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNvcnRJbmZvICAgICA9IHRoaXMudGFibGUuc29ydEluZm87XG4gICAgICAgIGNvbnN0IHNvcnRPcHRpb25zICA9IHNvcnRJbmZvICYmIHNvcnRJbmZvLmRpcmVjdGlvbiA/IChzb3J0SW5mby5maWVsZCArICcgJyArIHNvcnRJbmZvLmRpcmVjdGlvbikgOiAnJztcbiAgICAgICAgY29uc3QgZmlsdGVyRmllbGRzID0gdGhpcy5nZXRGaWx0ZXJGaWVsZHMoc2VhcmNoT2JqKTtcbiAgICAgICAgY29uc3QgbG9naWNhbE9wID0gdGhpcy5nZXRMb2dpY2FsT3BlcmF0b3IoZmlsdGVyRmllbGRzKTtcbiAgICAgICAgcmVmcmVzaERhdGFTb3VyY2UodGhpcy50YWJsZS5kYXRhc291cmNlLCB7XG4gICAgICAgICAgICBwYWdlOiAxLFxuICAgICAgICAgICAgZmlsdGVyRmllbGRzIDogZmlsdGVyRmllbGRzLFxuICAgICAgICAgICAgb3JkZXJCeSA6IHNvcnRPcHRpb25zLFxuICAgICAgICAgICAgY29uZGl0aW9uIDogbG9naWNhbE9wXG4gICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgJGFwcERpZ2VzdCgpO1xuICAgICAgICB9LCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRhYmxlLnRvZ2dsZU1lc3NhZ2UodHJ1ZSwgJ2Vycm9yJywgdGhpcy50YWJsZS5ub2RhdGFtZXNzYWdlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBtZXRob2QgaGFuZGxlcyB0aGUgc29ydCBmb3Igc2VydmVyIHNpZGUgdmFyaWFibGVzXG4gICAgcHJpdmF0ZSBoYW5kbGVTZXZlclNpZGVTb3J0KHNvcnRPYmosIGUsIHN0YXRlUGVyc2lzdGVuY2VUcmlnZ2VyZWQ/KSB7XG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgc29ydCBpbmZvIGZvciBwYXNzaW5nIHRvIGRhdGFncmlkXG4gICAgICAgIHRoaXMudGFibGUuZ3JpZE9wdGlvbnMuc29ydEluZm8uZmllbGQgPSBzb3J0T2JqLmZpZWxkO1xuICAgICAgICB0aGlzLnRhYmxlLmdyaWRPcHRpb25zLnNvcnRJbmZvLmRpcmVjdGlvbiA9IHNvcnRPYmouZGlyZWN0aW9uO1xuICAgICAgICB0aGlzLnRhYmxlLnNvcnRJbmZvID0gZ2V0Q2xvbmVkT2JqZWN0KHNvcnRPYmopO1xuXG4gICAgICAgIGNvbnN0IHNvcnRPcHRpb25zICA9IHNvcnRPYmogJiYgc29ydE9iai5kaXJlY3Rpb24gPyAoc29ydE9iai5maWVsZCArICcgJyArIHNvcnRPYmouZGlyZWN0aW9uKSA6ICcnO1xuICAgICAgICBjb25zdCBmaWx0ZXJGaWVsZHMgPSB0aGlzLmdldEZpbHRlckZpZWxkcyh0aGlzLnRhYmxlLmZpbHRlckluZm8pO1xuICAgICAgICBjb25zdCBjb25kaXRpb24gPSB0aGlzLmdldExvZ2ljYWxPcGVyYXRvcihmaWx0ZXJGaWVsZHMpO1xuICAgICAgICBpZiAoIXN0YXRlUGVyc2lzdGVuY2VUcmlnZ2VyZWQgJiYgdGhpcy50YWJsZS5nZXRDb25maWd1cmVkU3RhdGUoKSAhPT0gJ25vbmUnKSB7XG4gICAgICAgICAgICB0aGlzLnRhYmxlLnN0YXRlUGVyc2lzdGVuY2UucmVtb3ZlV2lkZ2V0U3RhdGUodGhpcy50YWJsZSwgJ3BhZ2luYXRpb24nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlZnJlc2hEYXRhU291cmNlKHRoaXMudGFibGUuZGF0YXNvdXJjZSwge1xuICAgICAgICAgICAgcGFnZSA6IDEsXG4gICAgICAgICAgICBmaWx0ZXJGaWVsZHMgOiBmaWx0ZXJGaWVsZHMsXG4gICAgICAgICAgICBvcmRlckJ5IDogc29ydE9wdGlvbnMsXG4gICAgICAgICAgICBjb25kaXRpb24gOiBjb25kaXRpb25cbiAgICAgICAgfSkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICRhcHBEaWdlc3QoKTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSAocmVzcG9uc2UgJiYgcmVzcG9uc2UuZGF0YSkgPyByZXNwb25zZS5kYXRhIDogcmVzcG9uc2U7XG4gICAgICAgICAgICB0aGlzLnRhYmxlLmludm9rZUV2ZW50Q2FsbGJhY2soJ3NvcnQnLCB7JGV2ZW50OiBlLCAkZGF0YToge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgICAgICBzb3J0RGlyZWN0aW9uOiBzb3J0T2JqLmRpcmVjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgY29sRGVmOiB0aGlzLnRhYmxlLmNvbHVtbnNbc29ydE9iai5maWVsZF1cblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZWFyY2hIYW5kbGVyKHNlYXJjaFNvcnRPYmosIGUsIHR5cGUsIHN0YXRlUGVyc2lzdGVuY2VUcmlnZ2VyZWQ/KSB7XG4gICAgICAgIGxldCBvYmo7XG4gICAgICAgIGlmIChpc0FycmF5KHNlYXJjaFNvcnRPYmopKSB7XG4gICAgICAgICAgICBvYmogPSBzZWFyY2hTb3J0T2JqLmZpbHRlcihmdW5jdGlvbihzZWFyY2hPYmplY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHNlYXJjaE9iamVjdC5tYXRjaE1vZGUgIT09IHVuZGVmaW5lZCAmJiBzZWFyY2hPYmplY3QudmFsdWUgIT09IHVuZGVmaW5lZCkgfHwgKHNlYXJjaE9iamVjdC52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHNlYXJjaE9iamVjdC5maWVsZCA9PT0gJycpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvYmogPSB7ZmllbGQ6IHNlYXJjaFNvcnRPYmouZmllbGQsIHZhbHVlOiBzZWFyY2hTb3J0T2JqLnZhbHVlLCB0eXBlOiBzZWFyY2hTb3J0T2JqLnR5cGV9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnRhYmxlLmdldENvbmZpZ3VyZWRTdGF0ZSgpICE9PSAnbm9uZScgJiYgdW5zdXBwb3J0ZWRTdGF0ZVBlcnNpc3RlbmNlVHlwZXMuaW5kZXhPZih0aGlzLnRhYmxlLm5hdmlnYXRpb24pIDwgMCkge1xuICAgICAgICAgICAgaWYgKChpc0FycmF5KHNlYXJjaFNvcnRPYmopICYmIG9iai5sZW5ndGgpIHx8IChzZWFyY2hTb3J0T2JqLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMudGFibGUuc3RhdGVQZXJzaXN0ZW5jZS5yZW1vdmVXaWRnZXRTdGF0ZSh0aGlzLnRhYmxlLCAnc2VhcmNoJyk7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZS5zdGF0ZVBlcnNpc3RlbmNlLnNldFdpZGdldFN0YXRlKHRoaXMudGFibGUsIHtzZWFyY2g6IG9ian0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlLnN0YXRlUGVyc2lzdGVuY2UucmVtb3ZlV2lkZ2V0U3RhdGUodGhpcy50YWJsZSwgJ3NlYXJjaCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdGF0ZVBlcnNpc3RlbmNlVHJpZ2dlcmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZS5zdGF0ZVBlcnNpc3RlbmNlLnJlbW92ZVdpZGdldFN0YXRlKHRoaXMudGFibGUsICdwYWdpbmF0aW9uJyk7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZS5zdGF0ZVBlcnNpc3RlbmNlLnJlbW92ZVdpZGdldFN0YXRlKHRoaXMudGFibGUsICdzZWxlY3RlZEl0ZW0nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUmV0YWluIFN0YXRlIGhhbmRsaW5nIG9uIFdpZGdldCAnICsgdGhpcy50YWJsZS5uYW1lICsgJyBpcyBub3Qgc3VwcG9ydGVkIGZvciBjdXJyZW50IHBhZ2luYXRpb24gdHlwZS4nKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZmlsdGVyRmllbGRzID0gZ2V0Q2xvbmVkT2JqZWN0KHNlYXJjaFNvcnRPYmopO1xuICAgICAgICBjb25zdCBkYXRhU291cmNlID0gdGhpcy50YWJsZS5kYXRhc291cmNlO1xuICAgICAgICBpZiAoIWRhdGFTb3VyY2UgJiYgIXRoaXMudGFibGUuZGF0YXNldCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBvdXRwdXQ7XG4gICAgICAgIGNvbnN0IHVzZXJGaWx0ZXJzID0ge307XG4gICAgICAgIC8vIFRyYW5zZm9ybSBmaWx0ZXIgZmllbGRzIGZyb20gYXJyYXkgdG8gb2JqZWN0IGhhdmluZyBmaWVsZCBuYW1lcyBhcyBrZXlzXG4gICAgICAgIGlmIChpc0FycmF5KGZpbHRlckZpZWxkcykpIHtcbiAgICAgICAgICAgIGZpbHRlckZpZWxkcy5mb3JFYWNoKGZpbHRlckZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1GaWx0ZXJGaWVsZCh1c2VyRmlsdGVycywgZmlsdGVyRmllbGQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0cmFuc2Zvcm1GaWx0ZXJGaWVsZCh1c2VyRmlsdGVycywgZmlsdGVyRmllbGRzKTtcbiAgICAgICAgfVxuICAgICAgICBvdXRwdXQgPSB0aGlzLnRhYmxlLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZWZpbHRlcicsIHskZXZlbnQ6IGUsICRkYXRhOiB1c2VyRmlsdGVycywgY29sdW1uczogdXNlckZpbHRlcnN9KTtcbiAgICAgICAgLy8gSWYgY2FsbGJhY2sgcmV0dXJucyBmYWxzZSwgZG9uJ3QgdHJpZ2dlciB0aGUgZmlsdGVyIGNhbGxcbiAgICAgICAgaWYgKG91dHB1dCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBmaWx0ZXJGaWVsZHMgPSBbXTtcbiAgICAgICAgLy8gaWYgdGhlIGZpZWxkIGlzIG5vdCBzZWxlY3RlZCBpbiBzZWFyY2ggZmlsdGVyIGRyb3Bkb3duLCBidWlsZGluZyB0aGUgZmlsdGVyIGZpZWxkcyBvYmplY3RcbiAgICAgICAgaWYgKGlzRW1wdHkodXNlckZpbHRlcnMpICYmICFpc0VtcHR5KG9iaikpIHtcbiAgICAgICAgICAgIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAgICAgICAgICAgICBmb3JFYWNoKG9iaiwgc2VhcmNoT2JqID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYWRkVG9GaWx0ZXJGaWVsZHMoZmlsdGVyRmllbGRzLCBzZWFyY2hPYmopO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhZGRUb0ZpbHRlckZpZWxkcyhmaWx0ZXJGaWVsZHMsIG9iaik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBUcmFuc2Zvcm0gYmFjayB0aGUgZmlsdGVyIGZpZWxkcyBmcm9tIG9iamVjdCB0byBhcnJheVxuICAgICAgICAgICAgZm9yRWFjaCh1c2VyRmlsdGVycywgKHZhbCwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgIGZpbHRlckZpZWxkcy5wdXNoKHtmaWVsZDoga2V5LCBtYXRjaE1vZGU6IHZhbC5tYXRjaE1vZGUsIHR5cGU6IHZhbC50eXBlLCB2YWx1ZTogdmFsLnZhbHVlfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YVNvdXJjZSAmJiBkYXRhU291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uU1VQUE9SVFNfU0VSVkVSX0ZJTFRFUikpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlU2VydmVyU2lkZVNlYXJjaChmaWx0ZXJGaWVsZHMpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhU291cmNlICYmIGRhdGFTb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5JU19BUElfQVdBUkUpICYmIGRhdGFTb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5JU19QQUdFQUJMRSkpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlU2luZ2xlUGFnZVNlYXJjaChmaWx0ZXJGaWVsZHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVDbGllbnRTaWRlU29ydFNlYXJjaChmaWx0ZXJGaWVsZHMsIGUsIHR5cGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzb3J0SGFuZGxlcihzZWFyY2hTb3J0T2JqLCBlLCB0eXBlLCBzdGF0ZVBlcnNpc3RlbmNlVHJpZ2dlcmVkPykge1xuICAgICAgICBjb25zdCBkYXRhU291cmNlID0gdGhpcy50YWJsZS5kYXRhc291cmNlO1xuICAgICAgICBpZiAoIWRhdGFTb3VyY2UgJiYgIXRoaXMudGFibGUuZGF0YXNldCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc3RhdGVQZXJzaXN0ZW5jZVRyaWdnZXJlZCAmJiB0aGlzLnRhYmxlLmdldENvbmZpZ3VyZWRTdGF0ZSgpICE9PSAnbm9uZScgJiYgdW5zdXBwb3J0ZWRTdGF0ZVBlcnNpc3RlbmNlVHlwZXMuaW5kZXhPZih0aGlzLnRhYmxlLm5hdmlnYXRpb24pIDwgMCkge1xuICAgICAgICAgICAgY29uc3Qgb2JqID0ge2RpcmVjdGlvbjogc2VhcmNoU29ydE9iai5kaXJlY3Rpb24sIGZpZWxkOiBzZWFyY2hTb3J0T2JqLmZpZWxkfTtcbiAgICAgICAgICAgIGlmIChzZWFyY2hTb3J0T2JqLmRpcmVjdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMudGFibGUuc3RhdGVQZXJzaXN0ZW5jZS5zZXRXaWRnZXRTdGF0ZSh0aGlzLnRhYmxlLCB7c29ydDogb2JqfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudGFibGUuc3RhdGVQZXJzaXN0ZW5jZS5yZW1vdmVXaWRnZXRTdGF0ZSh0aGlzLnRhYmxlLCAnc29ydCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy50YWJsZS5zdGF0ZVBlcnNpc3RlbmNlLnJlbW92ZVdpZGdldFN0YXRlKHRoaXMudGFibGUsICdzZWxlY3RlZEl0ZW0nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUmV0YWluIFN0YXRlIGhhbmRsaW5nIG9uIFdpZGdldCAnICsgdGhpcy50YWJsZS5uYW1lICsgJyBpcyBub3Qgc3VwcG9ydGVkIGZvciBjdXJyZW50IHBhZ2luYXRpb24gdHlwZS4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdNUy0yMjM4NzogRm9yIHNlcnZlciBzaWRlIHBhZ2luYXRpb24sIGV4ZWN1dGUgY2xpZW50IHNpZGUgc29ydGluZ1xuICAgICAgICBpZiAoZGF0YVNvdXJjZSAmJiBkYXRhU291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uSVNfU09SVEFCTEUpKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVNldmVyU2lkZVNvcnQoc2VhcmNoU29ydE9iaiwgZSwgc3RhdGVQZXJzaXN0ZW5jZVRyaWdnZXJlZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUNsaWVudFNpZGVTb3J0U2VhcmNoKHNlYXJjaFNvcnRPYmosIGUsIHR5cGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIHNldCB0aGUgJ2xhc3RBY3Rpb24nIHBlcmZvcm1lZCBvbiB0aGUgdGFibGUgdG8gJ3NlYXJjaF9vcl9zb3J0J1xuICAgIHNldExhc3RBY3Rpb25QZXJmb3JtZWRUb1NlYXJjaFNvcnQoKSB7XG4gICAgICAgIHRoaXMudGFibGUuZ3JpZE9wdGlvbnMuc2V0TGFzdEFjdGlvblBlcmZvcm1lZCh0aGlzLnRhYmxlLmdyaWRPcHRpb25zLkFDVElPTlMuU0VBUkNIX09SX1NPUlQpO1xuICAgICAgICB0aGlzLnRhYmxlLmdyaWRPcHRpb25zLnNldElzU2VhcmNoVHJpZ2VycmVkKHRydWUpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgbWV0aG9kIGlzIHRyaWdnZXJlZCBieSBqcXVlcnkgdGFibGVcbiAgICBzZWFyY2hTb3J0SGFuZGxlcihzZWFyY2hTb3J0T2JqLCBlLCB0eXBlLCBzdGF0ZVBlcnNpc3RlbmNlVHJpZ2dlcmVkPykge1xuICAgICAgICBjb25zdCBldmVudF90eXBlID0gZSA/IGUudHlwZSA6ICcnO1xuICAgICAgICBpZiAoZXZlbnRfdHlwZSA9PT0gJ2NoYW5nZScgJiYgdGhpcy50YWJsZS5maWx0ZXJtb2RlICE9PSAnbXVsdGljb2x1bW4nKSB7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRMYXN0QWN0aW9uUGVyZm9ybWVkVG9TZWFyY2hTb3J0KCk7XG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gJ3NlYXJjaCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaEhhbmRsZXIoc2VhcmNoU29ydE9iaiwgZSwgdHlwZSwgc3RhdGVQZXJzaXN0ZW5jZVRyaWdnZXJlZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc29ydEhhbmRsZXIoc2VhcmNoU29ydE9iaiwgZSwgdHlwZSwgc3RhdGVQZXJzaXN0ZW5jZVRyaWdnZXJlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNZXRob2QgdG8gc2hvdy9oaWRlIGNsZWFyIGljb24gaW4gbXVsdGkgY29sdW1uIGZpbHRlclxuICAgIHNob3dDbGVhckljb24oZmllbGROYW1lKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy50YWJsZS5yb3dGaWx0ZXJbZmllbGROYW1lXSAmJiB0aGlzLnRhYmxlLnJvd0ZpbHRlcltmaWVsZE5hbWVdLnZhbHVlO1xuICAgICAgICByZXR1cm4gaXNEZWZpbmVkKHZhbHVlKSAmJiB2YWx1ZSAhPT0gJycgJiYgdmFsdWUgIT09IG51bGw7XG4gICAgfVxuXG4gICAgLy8gTWV0aG9kIGNsZWFyIHRoZSBmaWx0ZXIgdmFsdWUgaW4gbXVsdGkgY29sdW1uIGZpbHRlclxuICAgIGNsZWFyUm93RmlsdGVyKGZpZWxkTmFtZSkge1xuICAgICAgICBpZiAodGhpcy50YWJsZS5yb3dGaWx0ZXIgJiYgdGhpcy50YWJsZS5yb3dGaWx0ZXJbZmllbGROYW1lXSkge1xuICAgICAgICAgICAgdGhpcy50YWJsZS5jb2x1bW5zW2ZpZWxkTmFtZV0ucmVzZXRGaWx0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMub25Sb3dGaWx0ZXJDaGFuZ2UoZmllbGROYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRoaXMgbWV0aG9kIGlzIHRyaWdnZXJlZCBvbiBzZWxlY3Qgb2YgY29uZGl0aW9uIGluIG11bHRpIGNvbHVtbiBmaWx0ZXJcbiAgICBvbkZpbHRlckNvbmRpdGlvblNlbGVjdChmaWVsZE5hbWUsIGNvbmRpdGlvbikge1xuICAgICAgICB0aGlzLnRhYmxlLnJvd0ZpbHRlcltmaWVsZE5hbWVdID0gdGhpcy50YWJsZS5yb3dGaWx0ZXJbZmllbGROYW1lXSB8fCB7fTtcbiAgICAgICAgdGhpcy50YWJsZS5yb3dGaWx0ZXJbZmllbGROYW1lXS5tYXRjaE1vZGUgPSBjb25kaXRpb247XG4gICAgICAgIC8vIEZvciBlbXB0eSBtYXRjaCBtb2RlcywgY2xlYXIgb2ZmIHRoZSB2YWx1ZSBhbmQgY2FsbCBmaWx0ZXJcbiAgICAgICAgaWYgKGluY2x1ZGVzKHRoaXMudGFibGUuZW1wdHlNYXRjaE1vZGVzLCBjb25kaXRpb24pKSB7XG4gICAgICAgICAgICB0aGlzLnRhYmxlLmNvbHVtbnNbZmllbGROYW1lXS5yZXNldEZpbHRlcigpO1xuICAgICAgICAgICAgdGhpcy50YWJsZS5vblJvd0ZpbHRlckNoYW5nZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSWYgdmFsdWUgaXMgcHJlc2VudCwgY2FsbCB0aGUgZmlsdGVyLiBFbHNlLCBmb2N1cyBvbiB0aGUgZmllbGRcbiAgICAgICAgICAgIGlmIChpc0RlZmluZWQodGhpcy50YWJsZS5yb3dGaWx0ZXJbZmllbGROYW1lXS52YWx1ZSkgJiYgdGhpcy50YWJsZS5yb3dGaWx0ZXJbZmllbGROYW1lXS52YWx1ZSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlLm9uUm93RmlsdGVyQ2hhbmdlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlLmNvbHVtbnNbZmllbGROYW1lXS5maWx0ZXJJbnN0YW5jZS5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTWV0aG9kIHRvIGdldCB0aGUgdXBkYXRlZCB2YWx1ZXMgd2hlbiBmaWx0ZXIgb24gZmllbGQgaXMgY2hhbmdlZCBmb3IgbXVsdGljb2x1bW4gZmlsdGVyXG4gICAgcHJpdmF0ZSBnZXRGaWx0ZXJPbkZpZWxkVmFsdWVzKGZpbHRlckRlZikge1xuICAgICAgICBpZiAoIXRoaXMudGFibGUuZGF0YXNvdXJjZSB8fCAhdGhpcy50YWJsZS5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uU1VQUE9SVFNfRElTVElOQ1RfQVBJKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmllbGROYW1lID0gZmlsdGVyRGVmLmZpZWxkO1xuICAgICAgICBjb25zdCBmb3JtRmllbGRzID0gdGhpcy50YWJsZS5mdWxsRmllbGREZWZzO1xuICAgICAgICBjb25zdCBmaWx0ZXJPbkZpZWxkcyA9IGZpbHRlcihmb3JtRmllbGRzLCB7J2ZpbHRlcm9uZmlsdGVyJzogZmllbGROYW1lfSk7XG4gICAgICAgIGNvbnN0IG5ld1ZhbCA9IGdldCh0aGlzLnRhYmxlLnJvd0ZpbHRlciwgW2ZpZWxkTmFtZSwgJ3ZhbHVlJ10pO1xuXG4gICAgICAgIC8vIExvb3Agb3ZlciB0aGUgZmllbGRzIGZvciB3aGljaCB0aGUgY3VycmVudCBmaWVsZCBpcyBmaWx0ZXIgb24gZmllbGRcbiAgICAgICAgZm9yRWFjaChmaWx0ZXJPbkZpZWxkcywgZmlsdGVyRmllbGQgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyT24gPSBmaWx0ZXJGaWVsZC5maWx0ZXJvbmZpbHRlcjtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcktleSA9IGZpbHRlckZpZWxkLmZpZWxkO1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyRmllbGRzID0ge307XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJXaWRnZXQgPSBmaWx0ZXJGaWVsZC5maWx0ZXJ3aWRnZXQ7XG5cbiAgICAgICAgICAgIGlmICghaXNEYXRhU2V0V2lkZ2V0KGZpbHRlcldpZGdldCkgfHwgZmlsdGVyT24gPT09IGZpbHRlcktleSB8fCBmaWx0ZXJGaWVsZC5pc0ZpbHRlckRhdGFTZXRCb3VuZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZmlsdGVyRmllbGRzW2ZpbHRlck9uXSA9IChpc0RlZmluZWQobmV3VmFsKSAmJiBuZXdWYWwgIT09ICcnICYmIG5ld1ZhbCAhPT0gbnVsbCkgPyB7J3ZhbHVlJyA6IG5ld1ZhbH0gOiB7fTtcblxuICAgICAgICAgICAgaWYgKGZpbHRlcldpZGdldCA9PT0gRm9ybVdpZGdldFR5cGUuQVVUT0NPTVBMRVRFICYmIGZpbHRlckZpZWxkLmZpbHRlckluc3RhbmNlLmRhdGFvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgZmlsdGVyRmllbGQuZmlsdGVySW5zdGFuY2UuZGF0YW9wdGlvbnMuZmlsdGVyRmllbGRzID0gZmlsdGVyRmllbGRzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5HRVRfRElTVElOQ1RfREFUQV9CWV9GSUVMRFMsIHtcbiAgICAgICAgICAgICAgICAgICAgJ2ZpZWxkcycgICAgICAgICA6IGZpbHRlcktleSxcbiAgICAgICAgICAgICAgICAgICAgJ2ZpbHRlckZpZWxkcycgICA6IGZpbHRlckZpZWxkc1xuICAgICAgICAgICAgICAgIH0pLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckZpZWxkLmZpbHRlcmRhdGFzZXQgPSBkYXRhLmRhdGE7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFRoaXMgbWV0aG9kIGlzIHRyaWdnZXJlZCBvbiB2YWx1ZSBjaGFuZ2UgaW4gbXVsdGkgY29sdW1uIGZpbHRlclxuICAgIG9uUm93RmlsdGVyQ2hhbmdlKGZpZWxkTmFtZSkge1xuICAgICAgICBjb25zdCBzZWFyY2hPYmogPSBbXTtcbiAgICAgICAgY29uc3QgZmllbGQgPSBmaW5kKHRoaXMudGFibGUuZnVsbEZpZWxkRGVmcywgeydmaWVsZCc6IGZpZWxkTmFtZX0pO1xuICAgICAgICAvLyBDb252ZXJ0IHJvdyBmaWx0ZXJzIHRvIGEgc2VhcmNoIG9iamVjdCBhbmQgY2FsbCBzZWFyY2ggaGFuZGxlclxuICAgICAgICBmb3JFYWNoKHRoaXMudGFibGUucm93RmlsdGVyLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKChpc0RlZmluZWQodmFsdWUudmFsdWUpICYmIHZhbHVlLnZhbHVlICE9PSAnJykgfHwgaW5jbHVkZXModGhpcy50YWJsZS5lbXB0eU1hdGNoTW9kZXMsIHZhbHVlLm1hdGNoTW9kZSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQgJiYga2V5ID09PSBmaWVsZC5maWVsZCkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS50eXBlICAgICAgPSB2YWx1ZS50eXBlIHx8IGZpZWxkLnR5cGU7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLm1hdGNoTW9kZSA9IHZhbHVlLm1hdGNoTW9kZSB8fCBnZXQodGhpcy50YWJsZS5tYXRjaE1vZGVUeXBlc01hcFt2YWx1ZS50eXBlXSwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNlYXJjaE9iai5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGtleSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBtYXRjaE1vZGU6IHZhbHVlLm1hdGNoTW9kZSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogdmFsdWUudHlwZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy50YWJsZS5ncmlkT3B0aW9ucy5zZWFyY2hIYW5kbGVyKHNlYXJjaE9iaiwgdW5kZWZpbmVkLCAnc2VhcmNoJyk7XG5cbiAgICAgICAgLy8gSWYgZmllbGQgaXMgcGFzc2VkLCB1cGRhdGUgYW55IGZpbHRlciBvbiBmaWVsZCB2YWx1ZXMgaWYgcHJlc2VudFxuICAgICAgICBpZiAoZmllbGQpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0RmlsdGVyT25GaWVsZFZhbHVlcyhmaWVsZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZWZyZXNoRGF0YShpc1NhbWVQYWdlKSB7XG4gICAgICAgIGlmICghdGhpcy50YWJsZS5kYXRhc291cmNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFnZSA9IGlzU2FtZVBhZ2UgPyB0aGlzLnRhYmxlLmRhdGFOYXZpZ2F0b3IuZG4uY3VycmVudFBhZ2UgOiAxO1xuICAgICAgICBjb25zdCBzb3J0SW5mbyAgICAgPSB0aGlzLnRhYmxlLnNvcnRJbmZvO1xuICAgICAgICBjb25zdCBzb3J0T3B0aW9ucyAgPSBzb3J0SW5mbyAmJiBzb3J0SW5mby5kaXJlY3Rpb24gPyAoc29ydEluZm8uZmllbGQgKyAnICcgKyBzb3J0SW5mby5kaXJlY3Rpb24pIDogJyc7XG4gICAgICAgIGNvbnN0IGZpbHRlckZpZWxkcyA9IHRoaXMuZ2V0RmlsdGVyRmllbGRzKHRoaXMudGFibGUuZmlsdGVySW5mbyk7XG4gICAgICAgIGNvbnN0IGxvZ2ljYWxPcCA9IHRoaXMuZ2V0TG9naWNhbE9wZXJhdG9yKGZpbHRlckZpZWxkcyk7XG4gICAgICAgIHJlZnJlc2hEYXRhU291cmNlKHRoaXMudGFibGUuZGF0YXNvdXJjZSwge1xuICAgICAgICAgICAgcGFnZTogcGFnZSxcbiAgICAgICAgICAgIGZpbHRlckZpZWxkcyA6IGZpbHRlckZpZWxkcyxcbiAgICAgICAgICAgIG9yZGVyQnkgOiBzb3J0T3B0aW9ucyxcbiAgICAgICAgICAgIGNvbmRpdGlvbiA6IGxvZ2ljYWxPcFxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
|
|
696
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtZmlsdGVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhL3RhYmxlL3NyYy90YWJsZS1maWx0ZXIuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV4RCxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLHlCQUF5QixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2pKLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxvQkFBb0IsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVuSixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUNILFFBQVEsRUFDUixNQUFNLEVBQ04sSUFBSSxFQUNKLE9BQU8sRUFDUCxHQUFHLEVBQUUsSUFBSSxFQUNULFFBQVEsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUMxQixPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFDaEQsVUFBVSxFQUFFLE9BQU8sRUFDbkIsUUFBUSxFQUNSLFFBQVEsRUFDWCxNQUFNLFdBQVcsQ0FBQztBQUduQixPQUFPLEtBQUssU0FBUyxNQUFPLFFBQVEsQ0FBQzs7QUFDckMsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUFFckQsTUFBTSxlQUFlLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUM7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Q3pDLE1BQU0sV0FBVyxHQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3ZHLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqRSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDeEQsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUU7WUFDckMsSUFBSSxFQUFFLElBQUk7WUFDVixZQUFZLEVBQUcsWUFBWTtZQUMzQixPQUFPLEVBQUcsV0FBVztZQUNyQixTQUFTLEVBQUcsU0FBUztTQUN4QixDQUFDLENBQUM7SUFDUCxDQUFDO3lIQTNoQlEsd0JBQXdCLHVCQUVMLGNBQWM7b0VBRmpDLHdCQUF3Qjs7aUZBQXhCLHdCQUF3QjtjQUpwQyxTQUFTO2VBQUM7Z0JBQ1QsVUFBVSxFQUFFLElBQUk7Z0JBQ2QsUUFBUSxFQUFFLHFCQUFxQjthQUNsQzs7c0JBR2dCLElBQUk7O3NCQUFJLE1BQU07dUJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSW5qZWN0LCBTZWxmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7ICRhcHBEaWdlc3QsIERhdGFTb3VyY2UsIERhdGFUeXBlLCBGb3JtV2lkZ2V0VHlwZSwgZ2V0Q2xvbmVkT2JqZWN0LCBpc0RlZmluZWQsIGlzTnVtYmVyVHlwZSwgYWRqdXN0Q29udGFpbmVyUmlnaHRFZGdlcyB9IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7IGdldE1hdGNoTW9kZU1zZ3MsIGdldE1hdGNoTW9kZVR5cGVzTWFwLCBpc0RhdGFTZXRXaWRnZXQsIHJlZnJlc2hEYXRhU291cmNlLCB1bnN1cHBvcnRlZFN0YXRlUGVyc2lzdGVuY2VUeXBlcyB9IGZyb20gJ0B3bS9jb21wb25lbnRzL2Jhc2UnO1xuXG5pbXBvcnQgeyBUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4vdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7XG4gICAgZW5kc1dpdGgsXG4gICAgZmlsdGVyLFxuICAgIGZpbmQsXG4gICAgZm9yRWFjaCxcbiAgICBnZXQsIGhlYWQsXG4gICAgaW5jbHVkZXMsIGlzQXJyYXksIGlzRW1wdHksXG4gICAgaXNFcXVhbCwgaXNOdWxsLCBpc09iamVjdCwgb3JkZXJCeSwgcmFuZ2UsIHNwbGl0LFxuICAgIHN0YXJ0c1dpdGgsIHRvTG93ZXIsXG4gICAgdG9OdW1iZXIsXG4gICAgdG9TdHJpbmdcbn0gZnJvbSBcImxvZGFzaC1lc1wiO1xuXG5kZWNsYXJlIGNvbnN0ICQ7XG5pbXBvcnQgKiBhcyBtb21lbnRMaWIgIGZyb20gJ21vbWVudCc7XG5jb25zdCBtb21lbnQgPSBtb21lbnRMaWIuZGVmYXVsdCB8fCB3aW5kb3dbJ21vbWVudCddO1xuXG5jb25zdCBlbXB0eU1hdGNoTW9kZXMgPSBbJ251bGwnLCAnZW1wdHknLCAnbnVsbG9yZW1wdHknLCAnaXNub3RudWxsJywgJ2lzbm90ZW1wdHknXTtcblxuLy8gR2V0IHNlYXJjaCB2YWx1ZSBiYXNlZCBvbiB0aGUgdGltZVxuY29uc3QgZ2V0U2VhcmNoVmFsdWUgPSAodmFsdWUsIHR5cGUpID0+IHtcbiAgICBpZiAoIWlzRGVmaW5lZCh2YWx1ZSkgfHwgdmFsdWUgPT09ICcnKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmIChpc051bWJlclR5cGUodHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIHRvTnVtYmVyKHZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHR5cGUgPT09IERhdGFUeXBlLkRBVEVUSU1FKSB7XG4gICAgICAgIHJldHVybiBtb21lbnQodmFsdWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRvU3RyaW5nKHZhbHVlKS50b0xvd2VyQ2FzZSgpO1xufTtcblxuLy8gRmlsdGVyIHRoZSBkYXRhIGJhc2VkIG9uIHRoZSBzZWFyY2ggdmFsdWUgYW5kIGNvbmRpdGlvbnNcbmNvbnN0IGdldEZpbHRlcmVkRGF0YSA9IChkYXRhLCBzZWFyY2hPYmosIHZpc2libGVDb2xzID0gW10pID0+IHtcbiAgICBjb25zdCBzZWFyY2hWYWwgPSBnZXRTZWFyY2hWYWx1ZShzZWFyY2hPYmoudmFsdWUsIHNlYXJjaE9iai50eXBlKTtcbiAgICBsZXQgY3VycmVudFZhbDtcbiAgICAvLyBSZXR1cm4gd2hvbGUgZGF0YSBpZlxuICAgIC8vIC0gc2VhcmNoIHZhbHVlIGlzIHVuZGVmaW5lZCBhbmQgbWF0Y2htb2RlIGlzIG5vdCBhbiBlbXB0eSBtYXRjaG1vZGUgdHlwZVxuICAgIC8vIC0gc2VhcmNoIHZhbHVlIGlzIG51bGwgYW5kIGRhdGF0eXBlIGlzIG51bWJlci4gTnVsbCBjYW4gbm90IGJlIGNvbXBhcmVkIHdpdGggbnVtZXJpYyB2YWx1ZXNbV01TLTE5Mjc1XS5cbiAgICBpZiAoKCFpc0RlZmluZWQoc2VhcmNoVmFsKSAmJiAhaW5jbHVkZXMoZW1wdHlNYXRjaE1vZGVzLCBzZWFyY2hPYmoubWF0Y2hNb2RlKSkgfHwgKGlzTnVtYmVyVHlwZShzZWFyY2hPYmoudHlwZSkgJiYgaXNOdWxsKHNlYXJjaE9iai52YWx1ZSkpKSB7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBkYXRhID0gZGF0YS5maWx0ZXIoKG9iaikgPT4ge1xuICAgICAgICBsZXQgaXNFeGlzdHM7XG4gICAgICAgIGlmIChzZWFyY2hPYmouZmllbGQpIHtcbiAgICAgICAgICAgIGN1cnJlbnRWYWwgPSBnZXRTZWFyY2hWYWx1ZShnZXQob2JqLCBzZWFyY2hPYmouZmllbGQpLCBzZWFyY2hPYmoudHlwZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjdXJyZW50VmFsID0gW107XG4gICAgICAgICAgICBmb3JFYWNoKG9iaiwgKHZhbCwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKChpbmNsdWRlcyh2aXNpYmxlQ29scywga2V5KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFZhbC5wdXNoKHZhbCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gV01TLTIyMjcxIElmIHRoZSBrZXkgaXMgaW4gbmVzdGVkIGtleSBmb3JtYXQgKGRvdCBmb3JtYXQpXG4gICAgICAgICAgICAgICAgICAgIC8vIEZpbmQgYWxsIHRoZSBpbmRleGVzIG9mIHRoZSBrZXkgaW4gdmlzaWJsZWNvbHMgYW5kIGV4dHJhY3QgdGhlaXIgdmFsdWVzIGZyb20gb2JqXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbEluZGV4ID0gZmlsdGVyKHJhbmdlKHZpc2libGVDb2xzLmxlbmd0aCksIChpKSA9PiB2aXNpYmxlQ29sc1tpXS5pbmNsdWRlcyhrZXkpKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yRWFjaChjb2xJbmRleCwgKGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGdldChvYmosIHZpc2libGVDb2xzW2luZGV4XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFZhbC5pbmRleE9mKHZhbHVlKSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VmFsLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGN1cnJlbnRWYWwgPSBjdXJyZW50VmFsLmpvaW4oJyAnKS50b0xvd2VyQ2FzZSgpOyAvLyBJZiBmaWVsZCBpcyBub3QgdGhlcmUsIHNlYXJjaCBvbiBhbGwgdGhlIGNvbHVtbnNcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKHNlYXJjaE9iai5tYXRjaE1vZGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgICAgICAgICBpc0V4aXN0cyA9IHN0YXJ0c1dpdGgoY3VycmVudFZhbCwgc2VhcmNoVmFsIGFzIHN0cmluZyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgICAgIGlzRXhpc3RzID0gZW5kc1dpdGgoY3VycmVudFZhbCwgc2VhcmNoVmFsIGFzIHN0cmluZyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdleGFjdCc6XG4gICAgICAgICAgICAgICAgaXNFeGlzdHMgPSBpc0VxdWFsKGN1cnJlbnRWYWwsIHNlYXJjaFZhbCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdub3RlcXVhbHMnOlxuICAgICAgICAgICAgICAgIGlzRXhpc3RzID0gIWlzRXF1YWwoY3VycmVudFZhbCwgc2VhcmNoVmFsKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ251bGwnOlxuICAgICAgICAgICAgICAgIGlzRXhpc3RzID0gaXNOdWxsKGN1cnJlbnRWYWwpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaXNub3RudWxsJzpcbiAgICAgICAgICAgICAgICBpc0V4aXN0cyA9ICFpc051bGwoY3VycmVudFZhbCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdlbXB0eSc6XG4gICAgICAgICAgICAgICAgaXNFeGlzdHMgPSBpc0VtcHR5KGN1cnJlbnRWYWwpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaXNub3RlbXB0eSc6XG4gICAgICAgICAgICAgICAgaXNFeGlzdHMgPSAhaXNFbXB0eShjdXJyZW50VmFsKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ251bGxvcmVtcHR5JzpcbiAgICAgICAgICAgICAgICBpc0V4aXN0cyA9IGlzTnVsbChjdXJyZW50VmFsKSB8fCBpc0VtcHR5KGN1cnJlbnRWYWwpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbGVzc3RoYW4nOlxuICAgICAgICAgICAgICAgIGlzRXhpc3RzID0gY3VycmVudFZhbCA8IHNlYXJjaFZhbDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2xlc3N0aGFuZXF1YWwnOlxuICAgICAgICAgICAgICAgIGlzRXhpc3RzID0gY3VycmVudFZhbCA8PSBzZWFyY2hWYWw7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdncmVhdGVydGhhbic6XG4gICAgICAgICAgICAgICAgaXNFeGlzdHMgPSBjdXJyZW50VmFsID4gc2VhcmNoVmFsO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZ3JlYXRlcnRoYW5lcXVhbCc6XG4gICAgICAgICAgICAgICAgaXNFeGlzdHMgPSBjdXJyZW50VmFsID49IHNlYXJjaFZhbDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgaXNFeGlzdHMgPSBpc051bWJlclR5cGUoc2VhcmNoT2JqLnR5cGUpID8gaXNFcXVhbChjdXJyZW50VmFsLCBzZWFyY2hWYWwpIDogaW5jbHVkZXMoY3VycmVudFZhbCwgc2VhcmNoVmFsKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNFeGlzdHM7XG4gICAgfSk7XG4gICAgcmV0dXJuIGRhdGE7XG59O1xuXG4vLyBTZXQgdGhlIGZpbHRlciBmaWVsZHMgd2hlbiB0aGUgc2VhcmNoIHZhbHVlIGlzIHNwZWNpZmllZCBhbmQgZmllbGQgaXMgbm90IHNlbGVjdGVkXG5jb25zdCBzZXRBbGxGaWx0ZXJGaWVsZHMgPSBmdW5jdGlvbihmaWx0ZXJGaWVsZHMsIHNlYXJjaE9iaiwgdmlzaWJsZUNvbHMpIHtcbiAgICB2aXNpYmxlQ29scy5mb3JFYWNoKGZ1bmN0aW9uKGZpZWxkKSB7XG4gICAgICAgIGZpbHRlckZpZWxkc1tmaWVsZF0gPSB7XG4gICAgICAgICAgICAndmFsdWUnOiBzZWFyY2hPYmoudmFsdWUsXG4gICAgICAgICAgICAndHlwZScgOiBzZWFyY2hPYmoudmFsdWUudHlwZSxcbiAgICAgICAgICAgICdsb2dpY2FsT3AnOiAnT1InXG4gICAgICAgIH07XG4gICAgICAgIGlmIChzZWFyY2hPYmoubWF0Y2hNb2RlKSB7XG4gICAgICAgICAgICBmaWx0ZXJGaWVsZHNbZmllbGRdLm1hdGNoTW9kZSA9IHNlYXJjaE9iai5tYXRjaE1vZGU7XG4gICAgICAgIH1cbiAgICB9KTtcbn07XG5cbi8vIFNldCB0aGUgZmlsdGVyIGZpZWxkcyBhcyByZXF1aXJlZCBieSBkYXRhc291cmNlXG5jb25zdCBzZXRGaWx0ZXJGaWVsZHMgPSAoZmlsdGVyRmllbGRzLCBzZWFyY2hPYmosIHZpc2libGVDb2xzID0gW10pID0+IHtcbiAgICBjb25zdCBmaWVsZCA9IHNlYXJjaE9iaiAmJiBzZWFyY2hPYmouZmllbGQ7XG4gICAgLypTZXQgdGhlIGZpbHRlciBvcHRpb25zIHdoZW4gYSBmaWVsZC9jb2x1bW4gaGFzIGJlZW4gc2VsZWN0ZWQuKi9cbiAgICBpZiAoZmllbGQpIHtcbiAgICAgICAgZmlsdGVyRmllbGRzW2ZpZWxkXSA9IHtcbiAgICAgICAgICAgICd2YWx1ZScgICAgIDogc2VhcmNoT2JqLnZhbHVlLFxuICAgICAgICAgICAgJ2xvZ2ljYWxPcCcgOiAnQU5EJ1xuICAgICAgICB9O1xuICAgICAgICBpZiAoc2VhcmNoT2JqLm1hdGNoTW9kZSkge1xuICAgICAgICAgICAgZmlsdGVyRmllbGRzW2ZpZWxkXS5tYXRjaE1vZGUgPSBzZWFyY2hPYmoubWF0Y2hNb2RlO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLypTZXQgdGhlIGZpbHRlciBvcHRpb25zIHdoZW4gYSBmaWVsZC9jb2x1bW4gaGFzbid0IGJlZW4gc2VsZWN0ZWQuKi9cbiAgICAgICAgc2V0QWxsRmlsdGVyRmllbGRzKGZpbHRlckZpZWxkcywgc2VhcmNoT2JqLCB2aXNpYmxlQ29scyk7XG4gICAgfVxufTtcblxuLy8gVHJhbnNmb3JtIGZpbHRlciBmaWVsZHMgZnJvbSBhcnJheSB0byBvYmplY3QgaGF2aW5nIGZpZWxkIG5hbWVzIGFzIGtleXNcbmNvbnN0IHRyYW5zZm9ybUZpbHRlckZpZWxkID0gKHVzZXJGaWx0ZXJzLCBmaWx0ZXJGaWVsZCkgPT4ge1xuICAgIGlmIChmaWx0ZXJGaWVsZC5maWVsZCkge1xuICAgICAgICB1c2VyRmlsdGVyc1tmaWx0ZXJGaWVsZC5maWVsZF0gPSB7XG4gICAgICAgICAgICB2YWx1ZTogZmlsdGVyRmllbGQudmFsdWUsXG4gICAgICAgICAgICBtYXRjaE1vZGU6IGZpbHRlckZpZWxkLm1hdGNoTW9kZSxcbiAgICAgICAgICAgIHR5cGU6IGZpbHRlckZpZWxkLnR5cGVcbiAgICAgICAgfTtcbiAgICB9XG59O1xuXG4vLyBCdWlsZCBhIGZpbHRlciBGaWVsZHMgb2JqZWN0XG5jb25zdCBhZGRUb0ZpbHRlckZpZWxkcyA9IChmaWx0ZXJGaWVsZHMsIHNlYXJjaE9iaikgPT4ge1xuICAgIGZpbHRlckZpZWxkcy5wdXNoKHtcbiAgICAgICAgZmllbGQ6IChzZWFyY2hPYmoua2V5KSA/IHNlYXJjaE9iai5rZXkgOiAnJyxcbiAgICAgICAgbWF0Y2hNb2RlOiBzZWFyY2hPYmoubWF0Y2hNb2RlLFxuICAgICAgICB0eXBlOiBzZWFyY2hPYmoudHlwZSxcbiAgICAgICAgdmFsdWU6IHNlYXJjaE9iai52YWx1ZVxuICAgIH0pO1xufTtcblxuQERpcmVjdGl2ZSh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdbd21UYWJsZUZpbHRlclNvcnRdJ1xufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUZpbHRlclNvcnREaXJlY3RpdmUge1xuXG4gICAgY29uc3RydWN0b3IoQFNlbGYoKSBASW5qZWN0KFRhYmxlQ29tcG9uZW50KSBwcml2YXRlIHRhYmxlKSB7XG4gICAgICAgIHRhYmxlLl9zZWFyY2hTb3J0SGFuZGxlciA9IHRoaXMuc2VhcmNoU29ydEhhbmRsZXIuYmluZCh0aGlzKTtcbiAgICAgICAgdGFibGUuZ2V0U2VhcmNoUmVzdWx0ID0gdGhpcy5nZXRTZWFyY2hSZXN1bHQuYmluZCh0aGlzKTtcbiAgICAgICAgdGFibGUuZ2V0U29ydFJlc3VsdCA9IHRoaXMuZ2V0U29ydFJlc3VsdC5iaW5kKHRoaXMpO1xuICAgICAgICB0YWJsZS5jaGVja0ZpbHRlcnNBcHBsaWVkID0gdGhpcy5jaGVja0ZpbHRlcnNBcHBsaWVkLmJpbmQodGhpcyk7XG4gICAgICAgIHRhYmxlLmdldEZpbHRlckZpZWxkcyA9IHRoaXMuZ2V0RmlsdGVyRmllbGRzLmJpbmQodGhpcyk7XG4gICAgICAgIHRhYmxlLm9uUm93RmlsdGVyQ2hhbmdlID0gdGhpcy5vblJvd0ZpbHRlckNoYW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0YWJsZS5vbkZpbHRlckNvbmRpdGlvblNlbGVjdCA9IHRoaXMub25GaWx0ZXJDb25kaXRpb25TZWxlY3QuYmluZCh0aGlzKTtcbiAgICAgICAgdGFibGUuc2hvd0NsZWFySWNvbiA9IHRoaXMuc2hvd0NsZWFySWNvbi5iaW5kKHRoaXMpO1xuICAgICAgICB0YWJsZS5jbGVhclJvd0ZpbHRlciA9IHRoaXMuY2xlYXJSb3dGaWx0ZXIuYmluZCh0aGlzKTtcbiAgICAgICAgdGFibGUubWF0Y2hNb2RlVHlwZXNNYXAgPSBnZXRNYXRjaE1vZGVUeXBlc01hcCgpO1xuICAgICAgICB0YWJsZS5tYXRjaE1vZGVNc2dzID0gZ2V0TWF0Y2hNb2RlTXNncyh0YWJsZS5hcHBMb2NhbGUpO1xuICAgICAgICB0YWJsZS5lbXB0eU1hdGNoTW9kZXMgPSBlbXB0eU1hdGNoTW9kZXM7XG4gICAgICAgIHRhYmxlLmdldE5hdmlnYXRpb25UYXJnZXRCeVNvcnRJbmZvID0gdGhpcy5nZXROYXZpZ2F0aW9uVGFyZ2V0QnlTb3J0SW5mby5iaW5kKHRoaXMpO1xuICAgICAgICB0YWJsZS5yZWZyZXNoRGF0YSA9IHRoaXMucmVmcmVzaERhdGEuYmluZCh0aGlzKTtcbiAgICAgICAgdGFibGUuY2xlYXJGaWx0ZXIgPSB0aGlzLmNsZWFyRmlsdGVyLmJpbmQodGhpcyk7XG4gICAgICAgIHRhYmxlLmFkanVzdENvbnRhaW5lciA9IHRoaXMuYWRqdXN0Q29udGFpbmVyLmJpbmQodGhpcyk7XG4gICAgfVxuXG4gICAgYWRqdXN0Q29udGFpbmVyKGZpZWxkTmFtZSkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGFkanVzdENvbnRhaW5lclJpZ2h0RWRnZXMoJCgnYnMtZHJvcGRvd24tY29udGFpbmVyJyksIHRoaXMudGFibGUucm93RmlsdGVyQ29tcGxpZWRUbFtmaWVsZE5hbWVdLCB0aGlzLnRhYmxlLCAkKCdicy1kcm9wZG93bi1jb250YWluZXIgLmRyb3Bkb3duLW1lbnUnKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEdldCBmaXJzdCBvciBsYXN0IHBhZ2UgYmFzZWQgb24gc29ydCBpbmZvIG9mIHByaW1hcnkga2V5XG4gICAgZ2V0TmF2aWdhdGlvblRhcmdldEJ5U29ydEluZm8oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhYmxlLnNvcnRJbmZvICYmIHRoaXMudGFibGUuc29ydEluZm8uZGlyZWN0aW9uID09PSAnZGVzYycgJiZcbiAgICAgICAgaW5jbHVkZXModGhpcy50YWJsZS5wcmltYXJ5S2V5LCB0aGlzLnRhYmxlLnNvcnRJbmZvLmZpZWxkKSA/ICdmaXJzdCcgOiAnbGFzdCc7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJucyBhbGwgdGhlIGNvbHVtbnMgb2YgdGhlIHRhYmxlIHdoZXJlaW4sIHNob3dpbmZpbHRlciBpcyBzZXQgdG8gdHJ1ZVxuICAgIGdldFRhYmxlVmlzaWJsZUNvbHMoKSB7XG4gICAgICAgIGNvbnN0IHZpc2libGVDb2xzID0gW107XG4gICAgICAgIGZvckVhY2godGhpcy50YWJsZS5jb2x1bW5zLCAodmFsLCBjb2wpID0+IHtcbiAgICAgICAgICAgIGlmICh0b0xvd2VyKHRvU3RyaW5nKHZhbC5zaG93aW5maWx0ZXIpKSA9PT0gJ3RydWUnICYmIGNvbCAhPT0gJ3Jvd09wZXJhdGlvbnMnICYmIHZhbC5zZWFyY2hhYmxlKSB7XG4gICAgICAgICAgICAgICAgdmlzaWJsZUNvbHMucHVzaChjb2wpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHZpc2libGVDb2xzO1xuICAgIH1cblxuICAgIC8vIGNhbGwgdGhlIHNldCBmaWx0ZXIgZmllbGRzIGZ1bmN0aW9uIGJhc2VkIG9uIHRoZSBmaWVsZCBzZWxlY3RlZCBvciBub3RcbiAgICBpbnZva2VTZXRGaWx0ZXJmaWVsZEJhc2VkT25GaWVsZHZhbChzZWFyY2hPYmosIGZpbHRlckZpZWxkcykge1xuICAgICAgICBpZiAoc2VhcmNoT2JqLmZpZWxkKSB7XG4gICAgICAgICAgICBzZXRGaWx0ZXJGaWVsZHMoZmlsdGVyRmllbGRzLCBzZWFyY2hPYmopO1xuICAgICAgICB9IGVsc2UgaWYgKCFpc0VtcHR5KHNlYXJjaE9iaikpIHtcbiAgICAgICAgICAgY29uc3QgdmlzaWJsZUNvbHMgPSB0aGlzLmdldFRhYmxlVmlzaWJsZUNvbHMoKTtcbiAgICAgICAgICAgIHNldEZpbHRlckZpZWxkcyhmaWx0ZXJGaWVsZHMsIHNlYXJjaE9iaiwgdmlzaWJsZUNvbHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gR2V0IHRoZSBmaWx0ZXIgZmllbGRzIGFzIHJlcXVpcmVkIGJ5IGRhdGFzb3VyY2VcbiAgICBnZXRGaWx0ZXJGaWVsZHMoc2VhcmNoT2JqKSB7XG4gICAgICAgIHNlYXJjaE9iaiA9IHNlYXJjaE9iaiB8fCB7fTtcbiAgICAgICAgY29uc3QgZmlsdGVyRmllbGRzID0ge307XG4gICAgICAgIGlmIChpc0FycmF5KHNlYXJjaE9iaikpIHtcbiAgICAgICAgICAgIGZvckVhY2goc2VhcmNoT2JqLCBvYmogPT4ge1xuICAgICAgICAgICAgICAgdGhpcy5pbnZva2VTZXRGaWx0ZXJmaWVsZEJhc2VkT25GaWVsZHZhbChvYmosIGZpbHRlckZpZWxkcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW52b2tlU2V0RmlsdGVyZmllbGRCYXNlZE9uRmllbGR2YWwoc2VhcmNoT2JqLCBmaWx0ZXJGaWVsZHMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaWx0ZXJGaWVsZHM7XG4gICAgfVxuXG4gICAgLy8gR2V0IHRoZSBsb2dpY2FsIG9wZXJhdG9yIGZvciB0aGUgc2VhcmNoIGZpbHRlclxuICAgIGdldExvZ2ljYWxPcGVyYXRvcihmaWx0ZXJGaWVsZHMpIHtcbiAgICAgICAgbGV0IG9wZXJhdG9yID0gJyc7XG4gICAgICAgIGZvciAoY29uc3QgZmllbGQgaW4gZmlsdGVyRmllbGRzKSB7XG4gICAgICAgICAgICBvcGVyYXRvciA9IGZpbHRlckZpZWxkc1tmaWVsZF1bJ2xvZ2ljYWxPcCddIHx8ICcnO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9wZXJhdG9yO1xuICAgIH1cblxuICAgIC8vIFJlc2V0IHRoZSBzb3J0IGJhc2VkIG9uIHNvcnQgcmV0dXJuZWQgYnkgdGhlIGNhbGxcbiAgICByZXNldFNvcnRTdGF0dXModmFyaWFibGVTb3J0KSB7XG4gICAgICAgIGxldCBncmlkU29ydFN0cmluZztcbiAgICAgICAgaWYgKCFpc0VtcHR5KHRoaXMudGFibGUuc29ydEluZm8pICYmIHRoaXMudGFibGUuZGF0YXNvdXJjZSkge1xuICAgICAgICAgICAgZ3JpZFNvcnRTdHJpbmcgPSB0aGlzLnRhYmxlLnNvcnRJbmZvLmZpZWxkICsgJyAnICsgdGhpcy50YWJsZS5zb3J0SW5mby5kaXJlY3Rpb247XG4gICAgICAgICAgICB2YXJpYWJsZVNvcnQgPSB0aGlzLnRhYmxlLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5HRVRfT1BUSU9OUykub3JkZXJCeSB8fCB2YXJpYWJsZVNvcnQ7XG4gICAgICAgICAgICBpZiAodmFyaWFibGVTb3J0KSB7IC8vIElmIG11bHRpcGxlIG9yZGVyIGJ5IGZpZWxkcyBhcmUgcHJlc2VudCwgY29tcGFyZSB3aXRoIHRoZSBmaXJzdCBvbmVcbiAgICAgICAgICAgICAgICB2YXJpYWJsZVNvcnQgPSBoZWFkKHNwbGl0KHZhcmlhYmxlU29ydCwgJywnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZ3JpZFNvcnRTdHJpbmcgIT09IHZhcmlhYmxlU29ydCkge1xuICAgICAgICAgICAgICAgIHRoaXMudGFibGUuY2FsbERhdGFHcmlkTWV0aG9kKCdyZXNldFNvcnRJY29ucycpO1xuICAgICAgICAgICAgICAgIHRoaXMudGFibGUuc29ydEluZm8gPSB7fTtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlLnNldERhdGFHcmlkT3B0aW9uKCdzb3J0SW5mbycsIHt9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIENsZWFyIHRoZSBhbGwgdGhlIGZpbHRlcnMgYXBwbGllZFxuICAgIGNsZWFyRmlsdGVyKHNraXBGaWx0ZXIpIHtcbiAgICAgICAgbGV0ICRncmlkRWxlbWVudDtcbiAgICAgICAgdGhpcy50YWJsZS5maWx0ZXJJbmZvID0ge307XG4gICAgICAgIGlmICh0aGlzLnRhYmxlLmZpbHRlcm1vZGUgPT09ICdtdWx0aWNvbHVtbicpIHtcbiAgICAgICAgICAgIHRoaXMudGFibGUuZmllbGREZWZzLmZvckVhY2goY29sID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY29sLnJlc2V0RmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbC5yZXNldEZpbHRlcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFza2lwRmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZS5vblJvd0ZpbHRlckNoYW5nZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMudGFibGUuZmlsdGVybW9kZSA9PT0gJ3NlYXJjaCcpIHtcbiAgICAgICAgICAgICRncmlkRWxlbWVudCA9IHRoaXMudGFibGUuZGF0YWdyaWRFbGVtZW50O1xuICAgICAgICAgICAgJGdyaWRFbGVtZW50LmZpbmQoJ1tkYXRhLWVsZW1lbnQ9XCJkZ1NlYXJjaFRleHRcIl0nKS52YWwoJycpO1xuICAgICAgICAgICAgJGdyaWRFbGVtZW50LmZpbmQoJ1tkYXRhLWVsZW1lbnQ9XCJkZ0ZpbHRlclZhbHVlXCJdJykudmFsKCcnKTtcbiAgICAgICAgICAgIGlmICghc2tpcEZpbHRlcikge1xuICAgICAgICAgICAgICAgICRncmlkRWxlbWVudC5maW5kKCcuYXBwLXNlYXJjaC1idXR0b24nKS50cmlnZ2VyKCdjbGljaycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgdGhlIGZpbHRlcnMgYXBwbGllZCBhbmQgcmVtb3ZlIGlmIGRhdCBkb2VzIG5vdCBjb250YWluIGFueSBmaWx0ZXJzXG4gICAgY2hlY2tGaWx0ZXJzQXBwbGllZCh2YXJpYWJsZVNvcnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLnRhYmxlLmRhdGFzb3VyY2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy50YWJsZS5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uU1VQUE9SVFNfU0VSVkVSX0ZJTFRFUikpIHtcbiAgICAgICAgICAgIGlmIChpc0VtcHR5KHRoaXMudGFibGUuZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkdFVF9PUFRJT05TKS5maWx0ZXJGaWVsZHMpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhckZpbHRlcih0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucmVzZXRTb3J0U3RhdHVzKHZhcmlhYmxlU29ydCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudGFibGUuZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLklTX1BBR0VBQkxFKSkge1xuICAgICAgICAgICAgdGhpcy5yZXNldFNvcnRTdGF0dXModmFyaWFibGVTb3J0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJldHVybnMgZGF0YSBmaWx0ZXJlZCB1c2luZyBzZWFyY2hPYmpcbiAgICBnZXRTZWFyY2hSZXN1bHQoZGF0YSwgc2VhcmNoT2JqKSB7XG4gICAgICAgIGNvbnN0IHZpc2libGVDb2xzID0gdGhpcy5nZXRUYWJsZVZpc2libGVDb2xzKCk7XG4gICAgICAgIGlmICghc2VhcmNoT2JqKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBcnJheShzZWFyY2hPYmopKSB7XG4gICAgICAgICAgICBzZWFyY2hPYmouZm9yRWFjaCgob2JqKSA9PiB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGdldEZpbHRlcmVkRGF0YShkYXRhLCBvYmosIHZpc2libGVDb2xzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0YSA9IGdldEZpbHRlcmVkRGF0YShkYXRhLCBzZWFyY2hPYmosIHZpc2libGVDb2xzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgLy8gRnVuY3Rpb24gdGhhdCBjaGVja3MgaWYgYSBnaXZlbiBzdHJpbmcgaXMgYSB2YWxpZCBkYXRlIGFuZCByZXR1cm5zIHRoZSB0aW1lc3RhbXAgaWYgaXQgaXMsIG9yIE5hTiBpZiBpdCdzIG5vdC5cbiAgICBwYXJzZURhdGVTdHJpbmcoZGF0ZVN0cmluZykge1xuICAgICAgICBjb25zdCB0aW1lc3RhbXAgPSBEYXRlLnBhcnNlKGRhdGVTdHJpbmcpO1xuICAgICAgICBpZiAoIWlzTmFOKHRpbWVzdGFtcCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aW1lc3RhbXA7XG4gICAgICAgIH0gZWxzZSB7IC8vIFNpbmNlIERhdGUucGFyc2UoKSBkb2Vzbid0IHN1cHBvcnQgYWxsIGRhdGUgZm9ybWF0cywgbWFudWFsbHkgdmFsaWRhdGluZyB0aGUgZGF0ZS5cbiAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gZGF0ZVN0cmluZz8uc3BsaXQoL1stL1xcc10rLyk/Lm1hcChOdW1iZXIpIHx8IFtdO1xuICAgICAgICAgICAgcmV0dXJuICBuZXcgRGF0ZShwYXJ0c1syXSwgcGFydHNbMV0gLSAxLCBwYXJ0c1swXSkuZ2V0VGltZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBOYU47XG4gICAgfVxuXG4gICAgLy8gUmV0dXJucyBkYXRhIHNvcnRlZCB1c2luZyBzb3J0T2JqXG4gICAgZ2V0U29ydFJlc3VsdChkYXRhLCBzb3J0T2JqKSB7XG4gICAgICAgIGlmIChzb3J0T2JqICYmIHNvcnRPYmouZGlyZWN0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBmaWVsZFZhbHVlID0gZ2V0KGZpbmQoZGF0YSwgc29ydE9iai5maWVsZCksIHNvcnRPYmouZmllbGQpXG4gICAgICAgICAgICBjb25zdCBpc1ZhbGlkRGF0ZVN0cmluZyA9IHR5cGVvZiBmaWVsZFZhbHVlID09PSAnc3RyaW5nJyA/ICB0aGlzLnBhcnNlRGF0ZVN0cmluZyhmaWVsZFZhbHVlKSA6IE5hTjtcbiAgICAgICAgICAgIGlmICghaXNOYU4oaXNWYWxpZERhdGVTdHJpbmcpKSB7IC8vIGlmIHRoZSBmaWVsZCBpcyBhIGRhdGUgc3RyaW5nXG4gICAgICAgICAgICAgICAgZGF0YSA9IG9yZGVyQnkoZGF0YSwgWyhpdGVtKSA9PiB0aGlzLnBhcnNlRGF0ZVN0cmluZyhpdGVtW3NvcnRPYmouZmllbGRdKV0sIFtzb3J0T2JqLmRpcmVjdGlvbl0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnRhYmxlLmNvbHVtbnNbc29ydE9iai5maWVsZF0/LmNhc2VpbnNlbnNpdGl2ZSkge1xuICAgICAgICAgICAgICAgIC8vRml4IGZvciBbV01TLTI3NTA1XTogQWRkZWQgY2FzZS1pbnNlbnNpdGl2ZSBzb3J0aW5nIHNvIHRoYXQgdXBwZXJjYXNlIGFuZCBsb3dlcmNhc2UgbGV0dGVycyBhcmUgdHJlYXRlZCB0aGUgc2FtZSB3aGVuIHNvcnRpbmcuXG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBvcmRlckJ5KGRhdGEsIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWwgPSBnZXQoaXRlbSwgc29ydE9iai5maWVsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnID8gdmFsLnRvTG93ZXJDYXNlKCkgOiB2YWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChpdGVtKSA9PiBnZXQoaXRlbSwgc29ydE9iai5maWVsZCkgLy8gZmFsbGJhY2sgdG8gb3JpZ2luYWwgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBbc29ydE9iai5kaXJlY3Rpb24sIHNvcnRPYmouZGlyZWN0aW9uXVxuICAgICAgICAgICAgICAgICAgICAgICk7ICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gb3JkZXJCeShkYXRhLCBzb3J0T2JqLmZpZWxkLCBzb3J0T2JqLmRpcmVjdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBtZXRob2QgaGFuZGxlcyB0aGUgY2xpZW50IHNpZGUgc29ydCBhbmQgc2VhcmNoXG4gICAgcHJpdmF0ZSBoYW5kbGVDbGllbnRTaWRlU29ydFNlYXJjaChzZWFyY2hTb3J0T2JqLCBlLCB0eXBlKSB7XG4gICAgICAgIHRoaXMudGFibGUuX2lzQ2xpZW50U2VhcmNoID0gdHJ1ZTtcblxuICAgICAgICBsZXQgZGF0YTtcbiAgICAgICAgZGF0YSA9IHRoaXMudGFibGUuaXNOYXZpZ2F0aW9uRW5hYmxlZCgpID8gZ2V0Q2xvbmVkT2JqZWN0KHRoaXMudGFibGUuX19mdWxsRGF0YSkgOiBnZXRDbG9uZWRPYmplY3QodGhpcy50YWJsZS5kYXRhc2V0KTtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdzZWFyY2gnKSB7XG4gICAgICAgICAgICB0aGlzLnRhYmxlLmZpbHRlckluZm8gPSBzZWFyY2hTb3J0T2JqO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50YWJsZS5zb3J0SW5mbyA9IHNlYXJjaFNvcnRPYmo7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzT2JqZWN0KGRhdGEpICYmICFpc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICBkYXRhID0gW2RhdGFdO1xuICAgICAgICB9XG4gICAgICAgIC8qQm90aCB0aGUgZnVuY3Rpb25zIHJldHVybiBzYW1lICdkYXRhJyBpZiBhcmd1bWVudHMgYXJlIHVuZGVmaW5lZCovXG4gICAgICAgIGRhdGEgPSB0aGlzLmdldFNlYXJjaFJlc3VsdChkYXRhLCB0aGlzLnRhYmxlLmZpbHRlckluZm8pO1xuICAgICAgICBkYXRhID0gdGhpcy5nZXRTb3J0UmVzdWx0KGRhdGEsIHRoaXMudGFibGUuc29ydEluZm8pO1xuICAgICAgICB0aGlzLnRhYmxlLnNlcnZlckRhdGEgPSBkYXRhO1xuXG4gICAgICAgIGlmICh0eXBlID09PSAnc29ydCcpIHtcbiAgICAgICAgICAgIC8vIENhbGxpbmcgJ29uU29ydCcgZXZlbnRcbiAgICAgICAgICAgIHRoaXMudGFibGUuaW52b2tlRXZlbnRDYWxsYmFjaygnc29ydCcsIHskZXZlbnQ6IGUsICRkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMudGFibGUuc2VydmVyRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgc29ydERpcmVjdGlvbjogdGhpcy50YWJsZS5zb3J0SW5mby5kaXJlY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIGNvbERlZjogdGhpcy50YWJsZS5jb2x1bW5zW3RoaXMudGFibGUuc29ydEluZm8uZmllbGRdXG4gICAgICAgICAgICAgICAgfX0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudGFibGUuaXNOYXZpZ2F0aW9uRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAvLyBSZXNldCB0aGUgcGFnZSBudW1iZXIgdG8gMVxuICAgICAgICAgICAgdGhpcy50YWJsZS5kYXRhTmF2aWdhdG9yLmRuLmN1cnJlbnRQYWdlID0gMTtcbiAgICAgICAgICAgIHRoaXMudGFibGUuZGF0YU5hdmlnYXRvci5zZXRQYWdpbmdWYWx1ZXMoZGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRhYmxlLnNldEdyaWREYXRhKHRoaXMudGFibGUuc2VydmVyRGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaGlzIG1ldGhvZCBoYW5kbGVzIHRoZSBzZWFyY2ggZm9yIHBhZ2VhYmxlIGRhdGFzb3VyY2VcbiAgICBwcml2YXRlIGhhbmRsZVNpbmdsZVBhZ2VTZWFyY2goc2VhcmNoT2JqKSB7XG4gICAgICAgIHRoaXMudGFibGUuX2lzUGFnZVNlYXJjaCA9IHRydWU7XG5cbiAgICAgICAgbGV0IGRhdGEgID0gZ2V0Q2xvbmVkT2JqZWN0KHRoaXMudGFibGUuZ3JpZERhdGEpO1xuICAgICAgICBjb25zdCAkcm93cyA9IHRoaXMudGFibGUuZGF0YWdyaWRFbGVtZW50LmZpbmQoJ3Rib2R5IHRyLmFwcC1kYXRhZ3JpZC1yb3cnKTtcbiAgICAgICAgdGhpcy50YWJsZS5maWx0ZXJJbmZvID0gc2VhcmNoT2JqO1xuICAgICAgICBkYXRhID0gdGhpcy5nZXRTZWFyY2hSZXN1bHQoZGF0YSwgc2VhcmNoT2JqKTtcbiAgICAgICAgLy8gQ29tcGFyZWQgdGhlIGZpbHRlcmVkIGRhdGEgYW5kIG9yaWdpbmFsIGRhdGEsIHRvIHNob3cgb3IgaGlkZSB0aGUgcm93c1xuICAgICAgICBmb3JFYWNoKHRoaXMudGFibGUuZ3JpZERhdGEsICh2YWx1ZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0ICRyb3cgPSAkKCRyb3dzW2luZGV4XSk7XG4gICAgICAgICAgICBpZiAoZmluZChkYXRhLCBvYmogPT4gaXNFcXVhbChvYmosIHZhbHVlKSkpIHtcbiAgICAgICAgICAgICAgICAkcm93LnNob3coKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgJHJvdy5oaWRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy50YWJsZS5jYWxsRGF0YUdyaWRNZXRob2QoJ3NldFN0YXR1cycsICdyZWFkeScpO1xuICAgICAgICAgICAgLy8gU2VsZWN0IHRoZSBmaXJzdCByb3cgYWZ0ZXIgdGhlIHNlYXJjaCBmb3Igc2luZ2xlIHNlbGVjdFxuICAgICAgICAgICAgaWYgKHRoaXMudGFibGUuZ3JpZGZpcnN0cm93c2VsZWN0ICYmICF0aGlzLnRhYmxlLm11bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZS5jYWxsRGF0YUdyaWRNZXRob2QoJ3NlbGVjdEZpcnN0Um93JywgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRhYmxlLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0U3RhdHVzJywgJ25vZGF0YScsIHRoaXMudGFibGUubm9kYXRhbWVzc2FnZSk7XG4gICAgICAgICAgICB0aGlzLnRhYmxlLnNlbGVjdGVkaXRlbSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRhYmxlLmNhbGxEYXRhR3JpZE1ldGhvZCgndXBkYXRlU2VsZWN0QWxsQ2hlY2tib3hTdGF0ZScpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgbWV0aG9kIGhhbmRsZXMgdGhlIHNlYXJjaCBmb3Igc2VydmVyIHNpZGUgdmFyaWFibGVzXG4gICAgcHJpdmF0ZSBoYW5kbGVTZXJ2ZXJTaWRlU2VhcmNoKHNlYXJjaE9iaikge1xuICAgICAgICB0aGlzLnRhYmxlLmZpbHRlckluZm8gPSBzZWFyY2hPYmo7XG5cbiAgICAgICAgaWYgKCF0aGlzLnRhYmxlLmRhdGFzb3VyY2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNvcnRJbmZvICAgICA9IHRoaXMudGFibGUuc29ydEluZm87XG4gICAgICAgIGNvbnN0IHNvcnRPcHRpb25zICA9IHNvcnRJbmZvICYmIHNvcnRJbmZvLmRpcmVjdGlvbiA/IChzb3J0SW5mby5maWVsZCArICcgJyArIHNvcnRJbmZvLmRpcmVjdGlvbikgOiAnJztcbiAgICAgICAgY29uc3QgZmlsdGVyRmllbGRzID0gdGhpcy5nZXRGaWx0ZXJGaWVsZHMoc2VhcmNoT2JqKTtcbiAgICAgICAgY29uc3QgbG9naWNhbE9wID0gdGhpcy5nZXRMb2dpY2FsT3BlcmF0b3IoZmlsdGVyRmllbGRzKTtcbiAgICAgICAgcmVmcmVzaERhdGFTb3VyY2UodGhpcy50YWJsZS5kYXRhc291cmNlLCB7XG4gICAgICAgICAgICBwYWdlOiAxLFxuICAgICAgICAgICAgZmlsdGVyRmllbGRzIDogZmlsdGVyRmllbGRzLFxuICAgICAgICAgICAgb3JkZXJCeSA6IHNvcnRPcHRpb25zLFxuICAgICAgICAgICAgY29uZGl0aW9uIDogbG9naWNhbE9wXG4gICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgJGFwcERpZ2VzdCgpO1xuICAgICAgICB9LCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRhYmxlLnRvZ2dsZU1lc3NhZ2UodHJ1ZSwgJ2Vycm9yJywgdGhpcy50YWJsZS5ub2RhdGFtZXNzYWdlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBtZXRob2QgaGFuZGxlcyB0aGUgc29ydCBmb3Igc2VydmVyIHNpZGUgdmFyaWFibGVzXG4gICAgcHJpdmF0ZSBoYW5kbGVTZXZlclNpZGVTb3J0KHNvcnRPYmosIGUsIHN0YXRlUGVyc2lzdGVuY2VUcmlnZ2VyZWQ/KSB7XG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgc29ydCBpbmZvIGZvciBwYXNzaW5nIHRvIGRhdGFncmlkXG4gICAgICAgIHRoaXMudGFibGUuZ3JpZE9wdGlvbnMuc29ydEluZm8uZmllbGQgPSBzb3J0T2JqLmZpZWxkO1xuICAgICAgICB0aGlzLnRhYmxlLmdyaWRPcHRpb25zLnNvcnRJbmZvLmRpcmVjdGlvbiA9IHNvcnRPYmouZGlyZWN0aW9uO1xuICAgICAgICB0aGlzLnRhYmxlLnNvcnRJbmZvID0gZ2V0Q2xvbmVkT2JqZWN0KHNvcnRPYmopO1xuXG4gICAgICAgIGNvbnN0IHNvcnRPcHRpb25zICA9IHNvcnRPYmogJiYgc29ydE9iai5kaXJlY3Rpb24gPyAoc29ydE9iai5maWVsZCArICcgJyArIHNvcnRPYmouZGlyZWN0aW9uKSA6ICcnO1xuICAgICAgICBjb25zdCBmaWx0ZXJGaWVsZHMgPSB0aGlzLmdldEZpbHRlckZpZWxkcyh0aGlzLnRhYmxlLmZpbHRlckluZm8pO1xuICAgICAgICBjb25zdCBjb25kaXRpb24gPSB0aGlzLmdldExvZ2ljYWxPcGVyYXRvcihmaWx0ZXJGaWVsZHMpO1xuICAgICAgICBpZiAoIXN0YXRlUGVyc2lzdGVuY2VUcmlnZ2VyZWQgJiYgdGhpcy50YWJsZS5nZXRDb25maWd1cmVkU3RhdGUoKSAhPT0gJ25vbmUnKSB7XG4gICAgICAgICAgICB0aGlzLnRhYmxlLnN0YXRlUGVyc2lzdGVuY2UucmVtb3ZlV2lkZ2V0U3RhdGUodGhpcy50YWJsZSwgJ3BhZ2luYXRpb24nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlZnJlc2hEYXRhU291cmNlKHRoaXMudGFibGUuZGF0YXNvdXJjZSwge1xuICAgICAgICAgICAgcGFnZSA6IDEsXG4gICAgICAgICAgICBmaWx0ZXJGaWVsZHMgOiBmaWx0ZXJGaWVsZHMsXG4gICAgICAgICAgICBvcmRlckJ5IDogc29ydE9wdGlvbnMsXG4gICAgICAgICAgICBjb25kaXRpb24gOiBjb25kaXRpb25cbiAgICAgICAgfSkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICRhcHBEaWdlc3QoKTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSAocmVzcG9uc2UgJiYgcmVzcG9uc2UuZGF0YSkgPyByZXNwb25zZS5kYXRhIDogcmVzcG9uc2U7XG4gICAgICAgICAgICB0aGlzLnRhYmxlLmludm9rZUV2ZW50Q2FsbGJhY2soJ3NvcnQnLCB7JGV2ZW50OiBlLCAkZGF0YToge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgICAgICBzb3J0RGlyZWN0aW9uOiBzb3J0T2JqLmRpcmVjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgY29sRGVmOiB0aGlzLnRhYmxlLmNvbHVtbnNbc29ydE9iai5maWVsZF1cblxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZWFyY2hIYW5kbGVyKHNlYXJjaFNvcnRPYmosIGUsIHR5cGUsIHN0YXRlUGVyc2lzdGVuY2VUcmlnZ2VyZWQ/KSB7XG4gICAgICAgIGxldCBvYmo7XG4gICAgICAgIGlmIChpc0FycmF5KHNlYXJjaFNvcnRPYmopKSB7XG4gICAgICAgICAgICBvYmogPSBzZWFyY2hTb3J0T2JqLmZpbHRlcihmdW5jdGlvbihzZWFyY2hPYmplY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHNlYXJjaE9iamVjdC5tYXRjaE1vZGUgIT09IHVuZGVmaW5lZCAmJiBzZWFyY2hPYmplY3QudmFsdWUgIT09IHVuZGVmaW5lZCkgfHwgKHNlYXJjaE9iamVjdC52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHNlYXJjaE9iamVjdC5maWVsZCA9PT0gJycpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvYmogPSB7ZmllbGQ6IHNlYXJjaFNvcnRPYmouZmllbGQsIHZhbHVlOiBzZWFyY2hTb3J0T2JqLnZhbHVlLCB0eXBlOiBzZWFyY2hTb3J0T2JqLnR5cGV9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnRhYmxlLmdldENvbmZpZ3VyZWRTdGF0ZSgpICE9PSAnbm9uZScgJiYgdW5zdXBwb3J0ZWRTdGF0ZVBlcnNpc3RlbmNlVHlwZXMuaW5kZXhPZih0aGlzLnRhYmxlLm5hdmlnYXRpb24pIDwgMCkge1xuICAgICAgICAgICAgaWYgKChpc0FycmF5KHNlYXJjaFNvcnRPYmopICYmIG9iai5sZW5ndGgpIHx8IChzZWFyY2hTb3J0T2JqLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMudGFibGUuc3RhdGVQZXJzaXN0ZW5jZS5yZW1vdmVXaWRnZXRTdGF0ZSh0aGlzLnRhYmxlLCAnc2VhcmNoJyk7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZS5zdGF0ZVBlcnNpc3RlbmNlLnNldFdpZGdldFN0YXRlKHRoaXMudGFibGUsIHtzZWFyY2g6IG9ian0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlLnN0YXRlUGVyc2lzdGVuY2UucmVtb3ZlV2lkZ2V0U3RhdGUodGhpcy50YWJsZSwgJ3NlYXJjaCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdGF0ZVBlcnNpc3RlbmNlVHJpZ2dlcmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZS5zdGF0ZVBlcnNpc3RlbmNlLnJlbW92ZVdpZGdldFN0YXRlKHRoaXMudGFibGUsICdwYWdpbmF0aW9uJyk7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZS5zdGF0ZVBlcnNpc3RlbmNlLnJlbW92ZVdpZGdldFN0YXRlKHRoaXMudGFibGUsICdzZWxlY3RlZEl0ZW0nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUmV0YWluIFN0YXRlIGhhbmRsaW5nIG9uIFdpZGdldCAnICsgdGhpcy50YWJsZS5uYW1lICsgJyBpcyBub3Qgc3VwcG9ydGVkIGZvciBjdXJyZW50IHBhZ2luYXRpb24gdHlwZS4nKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZmlsdGVyRmllbGRzID0gZ2V0Q2xvbmVkT2JqZWN0KHNlYXJjaFNvcnRPYmopO1xuICAgICAgICBjb25zdCBkYXRhU291cmNlID0gdGhpcy50YWJsZS5kYXRhc291cmNlO1xuICAgICAgICBpZiAoIWRhdGFTb3VyY2UgJiYgIXRoaXMudGFibGUuZGF0YXNldCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBvdXRwdXQ7XG4gICAgICAgIGNvbnN0IHVzZXJGaWx0ZXJzID0ge307XG4gICAgICAgIC8vIFRyYW5zZm9ybSBmaWx0ZXIgZmllbGRzIGZyb20gYXJyYXkgdG8gb2JqZWN0IGhhdmluZyBmaWVsZCBuYW1lcyBhcyBrZXlzXG4gICAgICAgIGlmIChpc0FycmF5KGZpbHRlckZpZWxkcykpIHtcbiAgICAgICAgICAgIGZpbHRlckZpZWxkcy5mb3JFYWNoKGZpbHRlckZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1GaWx0ZXJGaWVsZCh1c2VyRmlsdGVycywgZmlsdGVyRmllbGQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0cmFuc2Zvcm1GaWx0ZXJGaWVsZCh1c2VyRmlsdGVycywgZmlsdGVyRmllbGRzKTtcbiAgICAgICAgfVxuICAgICAgICBvdXRwdXQgPSB0aGlzLnRhYmxlLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZWZpbHRlcicsIHskZXZlbnQ6IGUsICRkYXRhOiB1c2VyRmlsdGVycywgY29sdW1uczogdXNlckZpbHRlcnN9KTtcbiAgICAgICAgLy8gSWYgY2FsbGJhY2sgcmV0dXJucyBmYWxzZSwgZG9uJ3QgdHJpZ2dlciB0aGUgZmlsdGVyIGNhbGxcbiAgICAgICAgaWYgKG91dHB1dCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBmaWx0ZXJGaWVsZHMgPSBbXTtcbiAgICAgICAgLy8gaWYgdGhlIGZpZWxkIGlzIG5vdCBzZWxlY3RlZCBpbiBzZWFyY2ggZmlsdGVyIGRyb3Bkb3duLCBidWlsZGluZyB0aGUgZmlsdGVyIGZpZWxkcyBvYmplY3RcbiAgICAgICAgaWYgKGlzRW1wdHkodXNlckZpbHRlcnMpICYmICFpc0VtcHR5KG9iaikpIHtcbiAgICAgICAgICAgIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAgICAgICAgICAgICBmb3JFYWNoKG9iaiwgc2VhcmNoT2JqID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYWRkVG9GaWx0ZXJGaWVsZHMoZmlsdGVyRmllbGRzLCBzZWFyY2hPYmopO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhZGRUb0ZpbHRlckZpZWxkcyhmaWx0ZXJGaWVsZHMsIG9iaik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBUcmFuc2Zvcm0gYmFjayB0aGUgZmlsdGVyIGZpZWxkcyBmcm9tIG9iamVjdCB0byBhcnJheVxuICAgICAgICAgICAgZm9yRWFjaCh1c2VyRmlsdGVycywgKHZhbCwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgIGZpbHRlckZpZWxkcy5wdXNoKHtmaWVsZDoga2V5LCBtYXRjaE1vZGU6IHZhbC5tYXRjaE1vZGUsIHR5cGU6IHZhbC50eXBlLCB2YWx1ZTogdmFsLnZhbHVlfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YVNvdXJjZSAmJiBkYXRhU291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uU1VQUE9SVFNfU0VSVkVSX0ZJTFRFUikpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlU2VydmVyU2lkZVNlYXJjaChmaWx0ZXJGaWVsZHMpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhU291cmNlICYmIGRhdGFTb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5JU19BUElfQVdBUkUpICYmIGRhdGFTb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5JU19QQUdFQUJMRSkpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlU2luZ2xlUGFnZVNlYXJjaChmaWx0ZXJGaWVsZHMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVDbGllbnRTaWRlU29ydFNlYXJjaChmaWx0ZXJGaWVsZHMsIGUsIHR5cGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzb3J0SGFuZGxlcihzZWFyY2hTb3J0T2JqLCBlLCB0eXBlLCBzdGF0ZVBlcnNpc3RlbmNlVHJpZ2dlcmVkPykge1xuICAgICAgICBjb25zdCBkYXRhU291cmNlID0gdGhpcy50YWJsZS5kYXRhc291cmNlO1xuICAgICAgICBpZiAoIWRhdGFTb3VyY2UgJiYgIXRoaXMudGFibGUuZGF0YXNldCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc3RhdGVQZXJzaXN0ZW5jZVRyaWdnZXJlZCAmJiB0aGlzLnRhYmxlLmdldENvbmZpZ3VyZWRTdGF0ZSgpICE9PSAnbm9uZScgJiYgdW5zdXBwb3J0ZWRTdGF0ZVBlcnNpc3RlbmNlVHlwZXMuaW5kZXhPZih0aGlzLnRhYmxlLm5hdmlnYXRpb24pIDwgMCkge1xuICAgICAgICAgICAgY29uc3Qgb2JqID0ge2RpcmVjdGlvbjogc2VhcmNoU29ydE9iai5kaXJlY3Rpb24sIGZpZWxkOiBzZWFyY2hTb3J0T2JqLmZpZWxkfTtcbiAgICAgICAgICAgIGlmIChzZWFyY2hTb3J0T2JqLmRpcmVjdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMudGFibGUuc3RhdGVQZXJzaXN0ZW5jZS5zZXRXaWRnZXRTdGF0ZSh0aGlzLnRhYmxlLCB7c29ydDogb2JqfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudGFibGUuc3RhdGVQZXJzaXN0ZW5jZS5yZW1vdmVXaWRnZXRTdGF0ZSh0aGlzLnRhYmxlLCAnc29ydCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy50YWJsZS5zdGF0ZVBlcnNpc3RlbmNlLnJlbW92ZVdpZGdldFN0YXRlKHRoaXMudGFibGUsICdzZWxlY3RlZEl0ZW0nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUmV0YWluIFN0YXRlIGhhbmRsaW5nIG9uIFdpZGdldCAnICsgdGhpcy50YWJsZS5uYW1lICsgJyBpcyBub3Qgc3VwcG9ydGVkIGZvciBjdXJyZW50IHBhZ2luYXRpb24gdHlwZS4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFdNUy0yMjM4NzogRm9yIHNlcnZlciBzaWRlIHBhZ2luYXRpb24sIGV4ZWN1dGUgY2xpZW50IHNpZGUgc29ydGluZ1xuICAgICAgICBpZiAoZGF0YVNvdXJjZSAmJiBkYXRhU291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uSVNfU09SVEFCTEUpKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVNldmVyU2lkZVNvcnQoc2VhcmNoU29ydE9iaiwgZSwgc3RhdGVQZXJzaXN0ZW5jZVRyaWdnZXJlZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUNsaWVudFNpZGVTb3J0U2VhcmNoKHNlYXJjaFNvcnRPYmosIGUsIHR5cGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIHNldCB0aGUgJ2xhc3RBY3Rpb24nIHBlcmZvcm1lZCBvbiB0aGUgdGFibGUgdG8gJ3NlYXJjaF9vcl9zb3J0J1xuICAgIHNldExhc3RBY3Rpb25QZXJmb3JtZWRUb1NlYXJjaFNvcnQoKSB7XG4gICAgICAgIHRoaXMudGFibGUuZ3JpZE9wdGlvbnMuc2V0TGFzdEFjdGlvblBlcmZvcm1lZCh0aGlzLnRhYmxlLmdyaWRPcHRpb25zLkFDVElPTlMuU0VBUkNIX09SX1NPUlQpO1xuICAgICAgICB0aGlzLnRhYmxlLmdyaWRPcHRpb25zLnNldElzU2VhcmNoVHJpZ2VycmVkKHRydWUpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgbWV0aG9kIGlzIHRyaWdnZXJlZCBieSBqcXVlcnkgdGFibGVcbiAgICBzZWFyY2hTb3J0SGFuZGxlcihzZWFyY2hTb3J0T2JqLCBlLCB0eXBlLCBzdGF0ZVBlcnNpc3RlbmNlVHJpZ2dlcmVkPykge1xuICAgICAgICBjb25zdCBldmVudF90eXBlID0gZSA/IGUudHlwZSA6ICcnO1xuICAgICAgICBpZiAoZXZlbnRfdHlwZSA9PT0gJ2NoYW5nZScgJiYgdGhpcy50YWJsZS5maWx0ZXJtb2RlICE9PSAnbXVsdGljb2x1bW4nKSB7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRMYXN0QWN0aW9uUGVyZm9ybWVkVG9TZWFyY2hTb3J0KCk7XG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gJ3NlYXJjaCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaEhhbmRsZXIoc2VhcmNoU29ydE9iaiwgZSwgdHlwZSwgc3RhdGVQZXJzaXN0ZW5jZVRyaWdnZXJlZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc29ydEhhbmRsZXIoc2VhcmNoU29ydE9iaiwgZSwgdHlwZSwgc3RhdGVQZXJzaXN0ZW5jZVRyaWdnZXJlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNZXRob2QgdG8gc2hvdy9oaWRlIGNsZWFyIGljb24gaW4gbXVsdGkgY29sdW1uIGZpbHRlclxuICAgIHNob3dDbGVhckljb24oZmllbGROYW1lKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy50YWJsZS5yb3dGaWx0ZXJbZmllbGROYW1lXSAmJiB0aGlzLnRhYmxlLnJvd0ZpbHRlcltmaWVsZE5hbWVdLnZhbHVlO1xuICAgICAgICByZXR1cm4gaXNEZWZpbmVkKHZhbHVlKSAmJiB2YWx1ZSAhPT0gJycgJiYgdmFsdWUgIT09IG51bGw7XG4gICAgfVxuXG4gICAgLy8gTWV0aG9kIGNsZWFyIHRoZSBmaWx0ZXIgdmFsdWUgaW4gbXVsdGkgY29sdW1uIGZpbHRlclxuICAgIGNsZWFyUm93RmlsdGVyKGZpZWxkTmFtZSkge1xuICAgICAgICBpZiAodGhpcy50YWJsZS5yb3dGaWx0ZXIgJiYgdGhpcy50YWJsZS5yb3dGaWx0ZXJbZmllbGROYW1lXSkge1xuICAgICAgICAgICAgdGhpcy50YWJsZS5jb2x1bW5zW2ZpZWxkTmFtZV0ucmVzZXRGaWx0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMub25Sb3dGaWx0ZXJDaGFuZ2UoZmllbGROYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRoaXMgbWV0aG9kIGlzIHRyaWdnZXJlZCBvbiBzZWxlY3Qgb2YgY29uZGl0aW9uIGluIG11bHRpIGNvbHVtbiBmaWx0ZXJcbiAgICBvbkZpbHRlckNvbmRpdGlvblNlbGVjdChmaWVsZE5hbWUsIGNvbmRpdGlvbikge1xuICAgICAgICB0aGlzLnRhYmxlLnJvd0ZpbHRlcltmaWVsZE5hbWVdID0gdGhpcy50YWJsZS5yb3dGaWx0ZXJbZmllbGROYW1lXSB8fCB7fTtcbiAgICAgICAgdGhpcy50YWJsZS5yb3dGaWx0ZXJbZmllbGROYW1lXS5tYXRjaE1vZGUgPSBjb25kaXRpb247XG4gICAgICAgIC8vIEZvciBlbXB0eSBtYXRjaCBtb2RlcywgY2xlYXIgb2ZmIHRoZSB2YWx1ZSBhbmQgY2FsbCBmaWx0ZXJcbiAgICAgICAgaWYgKGluY2x1ZGVzKHRoaXMudGFibGUuZW1wdHlNYXRjaE1vZGVzLCBjb25kaXRpb24pKSB7XG4gICAgICAgICAgICB0aGlzLnRhYmxlLmNvbHVtbnNbZmllbGROYW1lXS5yZXNldEZpbHRlcigpO1xuICAgICAgICAgICAgdGhpcy50YWJsZS5vblJvd0ZpbHRlckNoYW5nZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSWYgdmFsdWUgaXMgcHJlc2VudCwgY2FsbCB0aGUgZmlsdGVyLiBFbHNlLCBmb2N1cyBvbiB0aGUgZmllbGRcbiAgICAgICAgICAgIGlmIChpc0RlZmluZWQodGhpcy50YWJsZS5yb3dGaWx0ZXJbZmllbGROYW1lXS52YWx1ZSkgJiYgdGhpcy50YWJsZS5yb3dGaWx0ZXJbZmllbGROYW1lXS52YWx1ZSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlLm9uUm93RmlsdGVyQ2hhbmdlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlLmNvbHVtbnNbZmllbGROYW1lXS5maWx0ZXJJbnN0YW5jZS5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTWV0aG9kIHRvIGdldCB0aGUgdXBkYXRlZCB2YWx1ZXMgd2hlbiBmaWx0ZXIgb24gZmllbGQgaXMgY2hhbmdlZCBmb3IgbXVsdGljb2x1bW4gZmlsdGVyXG4gICAgcHJpdmF0ZSBnZXRGaWx0ZXJPbkZpZWxkVmFsdWVzKGZpbHRlckRlZikge1xuICAgICAgICBpZiAoIXRoaXMudGFibGUuZGF0YXNvdXJjZSB8fCAhdGhpcy50YWJsZS5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uU1VQUE9SVFNfRElTVElOQ1RfQVBJKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmllbGROYW1lID0gZmlsdGVyRGVmLmZpZWxkO1xuICAgICAgICBjb25zdCBmb3JtRmllbGRzID0gdGhpcy50YWJsZS5mdWxsRmllbGREZWZzO1xuICAgICAgICBjb25zdCBmaWx0ZXJPbkZpZWxkcyA9IGZpbHRlcihmb3JtRmllbGRzLCB7J2ZpbHRlcm9uZmlsdGVyJzogZmllbGROYW1lfSk7XG4gICAgICAgIGNvbnN0IG5ld1ZhbCA9IGdldCh0aGlzLnRhYmxlLnJvd0ZpbHRlciwgW2ZpZWxkTmFtZSwgJ3ZhbHVlJ10pO1xuXG4gICAgICAgIC8vIExvb3Agb3ZlciB0aGUgZmllbGRzIGZvciB3aGljaCB0aGUgY3VycmVudCBmaWVsZCBpcyBmaWx0ZXIgb24gZmllbGRcbiAgICAgICAgZm9yRWFjaChmaWx0ZXJPbkZpZWxkcywgZmlsdGVyRmllbGQgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyT24gPSBmaWx0ZXJGaWVsZC5maWx0ZXJvbmZpbHRlcjtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcktleSA9IGZpbHRlckZpZWxkLmZpZWxkO1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyRmllbGRzID0ge307XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJXaWRnZXQgPSBmaWx0ZXJGaWVsZC5maWx0ZXJ3aWRnZXQ7XG5cbiAgICAgICAgICAgIGlmICghaXNEYXRhU2V0V2lkZ2V0KGZpbHRlcldpZGdldCkgfHwgZmlsdGVyT24gPT09IGZpbHRlcktleSB8fCBmaWx0ZXJGaWVsZC5pc0ZpbHRlckRhdGFTZXRCb3VuZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZmlsdGVyRmllbGRzW2ZpbHRlck9uXSA9IChpc0RlZmluZWQobmV3VmFsKSAmJiBuZXdWYWwgIT09ICcnICYmIG5ld1ZhbCAhPT0gbnVsbCkgPyB7J3ZhbHVlJyA6IG5ld1ZhbH0gOiB7fTtcblxuICAgICAgICAgICAgaWYgKGZpbHRlcldpZGdldCA9PT0gRm9ybVdpZGdldFR5cGUuQVVUT0NPTVBMRVRFICYmIGZpbHRlckZpZWxkLmZpbHRlckluc3RhbmNlLmRhdGFvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgZmlsdGVyRmllbGQuZmlsdGVySW5zdGFuY2UuZGF0YW9wdGlvbnMuZmlsdGVyRmllbGRzID0gZmlsdGVyRmllbGRzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5HRVRfRElTVElOQ1RfREFUQV9CWV9GSUVMRFMsIHtcbiAgICAgICAgICAgICAgICAgICAgJ2ZpZWxkcycgICAgICAgICA6IGZpbHRlcktleSxcbiAgICAgICAgICAgICAgICAgICAgJ2ZpbHRlckZpZWxkcycgICA6IGZpbHRlckZpZWxkc1xuICAgICAgICAgICAgICAgIH0pLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckZpZWxkLmZpbHRlcmRhdGFzZXQgPSBkYXRhLmRhdGE7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFRoaXMgbWV0aG9kIGlzIHRyaWdnZXJlZCBvbiB2YWx1ZSBjaGFuZ2UgaW4gbXVsdGkgY29sdW1uIGZpbHRlclxuICAgIG9uUm93RmlsdGVyQ2hhbmdlKGZpZWxkTmFtZSkge1xuICAgICAgICBjb25zdCBzZWFyY2hPYmogPSBbXTtcbiAgICAgICAgY29uc3QgZmllbGQgPSBmaW5kKHRoaXMudGFibGUuZnVsbEZpZWxkRGVmcywgeydmaWVsZCc6IGZpZWxkTmFtZX0pO1xuICAgICAgICAvLyBDb252ZXJ0IHJvdyBmaWx0ZXJzIHRvIGEgc2VhcmNoIG9iamVjdCBhbmQgY2FsbCBzZWFyY2ggaGFuZGxlclxuICAgICAgICBmb3JFYWNoKHRoaXMudGFibGUucm93RmlsdGVyLCAodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKChpc0RlZmluZWQodmFsdWUudmFsdWUpICYmIHZhbHVlLnZhbHVlICE9PSAnJykgfHwgaW5jbHVkZXModGhpcy50YWJsZS5lbXB0eU1hdGNoTW9kZXMsIHZhbHVlLm1hdGNoTW9kZSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQgJiYga2V5ID09PSBmaWVsZC5maWVsZCkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS50eXBlICAgICAgPSB2YWx1ZS50eXBlIHx8IGZpZWxkLnR5cGU7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLm1hdGNoTW9kZSA9IHZhbHVlLm1hdGNoTW9kZSB8fCBnZXQodGhpcy50YWJsZS5tYXRjaE1vZGVUeXBlc01hcFt2YWx1ZS50eXBlXSwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNlYXJjaE9iai5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGtleSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBtYXRjaE1vZGU6IHZhbHVlLm1hdGNoTW9kZSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogdmFsdWUudHlwZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy50YWJsZS5ncmlkT3B0aW9ucy5zZWFyY2hIYW5kbGVyKHNlYXJjaE9iaiwgdW5kZWZpbmVkLCAnc2VhcmNoJyk7XG5cbiAgICAgICAgLy8gSWYgZmllbGQgaXMgcGFzc2VkLCB1cGRhdGUgYW55IGZpbHRlciBvbiBmaWVsZCB2YWx1ZXMgaWYgcHJlc2VudFxuICAgICAgICBpZiAoZmllbGQpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0RmlsdGVyT25GaWVsZFZhbHVlcyhmaWVsZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZWZyZXNoRGF0YShpc1NhbWVQYWdlKSB7XG4gICAgICAgIGlmICghdGhpcy50YWJsZS5kYXRhc291cmNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFnZSA9IGlzU2FtZVBhZ2UgPyB0aGlzLnRhYmxlLmRhdGFOYXZpZ2F0b3IuZG4uY3VycmVudFBhZ2UgOiAxO1xuICAgICAgICBjb25zdCBzb3J0SW5mbyAgICAgPSB0aGlzLnRhYmxlLnNvcnRJbmZvO1xuICAgICAgICBjb25zdCBzb3J0T3B0aW9ucyAgPSBzb3J0SW5mbyAmJiBzb3J0SW5mby5kaXJlY3Rpb24gPyAoc29ydEluZm8uZmllbGQgKyAnICcgKyBzb3J0SW5mby5kaXJlY3Rpb24pIDogJyc7XG4gICAgICAgIGNvbnN0IGZpbHRlckZpZWxkcyA9IHRoaXMuZ2V0RmlsdGVyRmllbGRzKHRoaXMudGFibGUuZmlsdGVySW5mbyk7XG4gICAgICAgIGNvbnN0IGxvZ2ljYWxPcCA9IHRoaXMuZ2V0TG9naWNhbE9wZXJhdG9yKGZpbHRlckZpZWxkcyk7XG4gICAgICAgIHJlZnJlc2hEYXRhU291cmNlKHRoaXMudGFibGUuZGF0YXNvdXJjZSwge1xuICAgICAgICAgICAgcGFnZTogcGFnZSxcbiAgICAgICAgICAgIGZpbHRlckZpZWxkcyA6IGZpbHRlckZpZWxkcyxcbiAgICAgICAgICAgIG9yZGVyQnkgOiBzb3J0T3B0aW9ucyxcbiAgICAgICAgICAgIGNvbmRpdGlvbiA6IGxvZ2ljYWxPcFxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -3081,18 +3081,20 @@ class TableFilterSortDirective {
|
|
|
3081
3081
|
// Returns data sorted using sortObj
|
|
3082
3082
|
getSortResult(data, sortObj) {
|
|
3083
3083
|
if (sortObj && sortObj.direction) {
|
|
3084
|
-
const
|
|
3084
|
+
const fieldValue = get(find(data, sortObj.field), sortObj.field);
|
|
3085
|
+
const isValidDateString = typeof fieldValue === 'string' ? this.parseDateString(fieldValue) : NaN;
|
|
3085
3086
|
if (!isNaN(isValidDateString)) { // if the field is a date string
|
|
3086
3087
|
data = orderBy(data, [(item) => this.parseDateString(item[sortObj.field])], [sortObj.direction]);
|
|
3087
3088
|
}
|
|
3088
3089
|
else if (this.table.columns[sortObj.field]?.caseinsensitive) {
|
|
3089
3090
|
//Fix for [WMS-27505]: Added case-insensitive sorting so that uppercase and lowercase letters are treated the same when sorting.
|
|
3090
|
-
|
|
3091
|
-
|
|
3092
|
-
|
|
3093
|
-
|
|
3094
|
-
|
|
3095
|
-
|
|
3091
|
+
data = orderBy(data, [
|
|
3092
|
+
(item) => {
|
|
3093
|
+
const val = get(item, sortObj.field);
|
|
3094
|
+
return typeof val === 'string' ? val.toLowerCase() : val;
|
|
3095
|
+
},
|
|
3096
|
+
(item) => get(item, sortObj.field) // fallback to original value
|
|
3097
|
+
], [sortObj.direction, sortObj.direction]);
|
|
3096
3098
|
}
|
|
3097
3099
|
else {
|
|
3098
3100
|
data = orderBy(data, sortObj.field, sortObj.direction);
|