clientnode 4.0.1437 → 4.0.1439
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/dist/module.js +34 -13
- package/dist/object.js +5 -2
- package/dist/process.js +1 -2
- package/package.json +8 -9
package/dist/module.js
CHANGED
|
@@ -30,8 +30,40 @@ export const determineGlobalContext = () => {
|
|
|
30
30
|
};
|
|
31
31
|
const globalContext = determineGlobalContext();
|
|
32
32
|
|
|
33
|
+
// Make preprocessed import function available at runtime.
|
|
34
|
+
export const isImportSyntaxSupported = () => {
|
|
35
|
+
try {
|
|
36
|
+
// eslint-disable-next-line @typescript-eslint/no-implied-eval
|
|
37
|
+
new Function('import("data:text/javascript,")');
|
|
38
|
+
return true;
|
|
39
|
+
} catch {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
|
|
33
44
|
// Make preprocessed require function available at runtime.
|
|
34
|
-
|
|
45
|
+
let customRequire = typeof globalContext.require === 'undefined' ? null : globalContext.require;
|
|
46
|
+
if (!customRequire && isImportSyntaxSupported()) try {
|
|
47
|
+
const {
|
|
48
|
+
createRequire
|
|
49
|
+
} =
|
|
50
|
+
/*
|
|
51
|
+
eslint-disable
|
|
52
|
+
@typescript-eslint/no-implied-eval,
|
|
53
|
+
@typescript-eslint/no-unsafe-call
|
|
54
|
+
*/
|
|
55
|
+
await new Function('return import("node:module")')();
|
|
56
|
+
/*
|
|
57
|
+
eslint-enable
|
|
58
|
+
@typescript-eslint/no-implied-eval,
|
|
59
|
+
@typescript-eslint/no-unsafe-call
|
|
60
|
+
*/
|
|
61
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
|
62
|
+
customRequire = createRequire(import.meta.url);
|
|
63
|
+
} catch {
|
|
64
|
+
// Ignore error.
|
|
65
|
+
}
|
|
66
|
+
export const currentRequire = customRequire;
|
|
35
67
|
export const optionalRequire = id => {
|
|
36
68
|
try {
|
|
37
69
|
return currentRequire ? currentRequire(id) : null;
|
|
@@ -62,17 +94,6 @@ export const isolatedRequire = (path, requireFunction = currentRequire || requir
|
|
|
62
94
|
restoreRequireCache(requireFunction.cache, backup);
|
|
63
95
|
}
|
|
64
96
|
};
|
|
65
|
-
|
|
66
|
-
// Make preprocessed import function available at runtime.
|
|
67
|
-
export const isImportSyntaxSupported = () => {
|
|
68
|
-
try {
|
|
69
|
-
// eslint-disable-next-line @typescript-eslint/no-implied-eval
|
|
70
|
-
new Function('import("data:text/javascript,")');
|
|
71
|
-
return true;
|
|
72
|
-
} catch {
|
|
73
|
-
return false;
|
|
74
|
-
}
|
|
75
|
-
};
|
|
76
97
|
export const optionalImport = async (id, options = {}) => {
|
|
77
98
|
try {
|
|
78
99
|
return isImportSyntaxSupported() ?
|
|
@@ -91,4 +112,4 @@ export const optionalImport = async (id, options = {}) => {
|
|
|
91
112
|
return await Promise.resolve(null);
|
|
92
113
|
}
|
|
93
114
|
};
|
|
94
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
115
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL21vZHVsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAjIS91c3IvYmluL2VudiBiYWJlbC1ub2RlXG4vLyAtKi0gY29kaW5nOiB1dGYtOCAtKi1cbi8qKiBAbW9kdWxlIG1vZHVsZSAqL1xuJ3VzZSBzdHJpY3QnXG4vKiAhXG4gICAgcmVnaW9uIGhlYWRlclxuICAgIFtQcm9qZWN0IHBhZ2VdKGh0dHBzOi8vdG9yYmVuLndlYnNpdGUvY2xpZW50bm9kZSlcblxuICAgIENvcHlyaWdodCBUb3JiZW4gU2lja2VydCAoaW5mb1tcIn5hdH5cIl10b3JiZW4ud2Vic2l0ZSkgMTYuMTIuMjAxMlxuXG4gICAgTGljZW5zZVxuICAgIC0tLS0tLS1cblxuICAgIFRoaXMgbGlicmFyeSB3cml0dGVuIGJ5IFRvcmJlbiBTaWNrZXJ0IHN0YW5kcyB1bmRlciBhIGNyZWF0aXZlIGNvbW1vbnNcbiAgICBuYW1pbmcgMy4wIHVucG9ydGVkIGxpY2Vuc2UuXG4gICAgU2VlIGh0dHBzOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS8zLjAvZGVlZC5kZVxuICAgIGVuZHJlZ2lvblxuKi9cbmltcG9ydCB0eXBlIHtGaXJzdFBhcmFtZXRlcn0gZnJvbSAnLi90eXBlJ1xuXG5leHBvcnQgY29uc3QgZGV0ZXJtaW5lR2xvYmFsQ29udGV4dCA9ICgpOiBQYXJ0aWFsPHR5cGVvZiBnbG9iYWxUaGlzPiA9PiB7XG4gICAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZ2xvYmFsID09PSAndW5kZWZpbmVkJylcbiAgICAgICAgICAgICAgICByZXR1cm4gKCh0eXBlb2YgbW9kdWxlID09PSAndW5kZWZpbmVkJykgPyB7fSA6IG1vZHVsZSkgYXNcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGdsb2JhbFRoaXNcblxuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChnbG9iYWwsICd3aW5kb3cnKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2xvYmFsLndpbmRvd1xuXG4gICAgICAgICAgICByZXR1cm4gZ2xvYmFsXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gd2luZG93XG4gICAgfVxuXG4gICAgcmV0dXJuIGdsb2JhbFRoaXNcbn1cbmNvbnN0IGdsb2JhbENvbnRleHQgPSBkZXRlcm1pbmVHbG9iYWxDb250ZXh0KClcblxuLy8gTWFrZSBwcmVwcm9jZXNzZWQgaW1wb3J0IGZ1bmN0aW9uIGF2YWlsYWJsZSBhdCBydW50aW1lLlxuZXhwb3J0IGNvbnN0IGlzSW1wb3J0U3ludGF4U3VwcG9ydGVkID0gKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8taW1wbGllZC1ldmFsXG4gICAgICAgIG5ldyBGdW5jdGlvbignaW1wb3J0KFwiZGF0YTp0ZXh0L2phdmFzY3JpcHQsXCIpJylcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxufVxuXG4vLyBNYWtlIHByZXByb2Nlc3NlZCByZXF1aXJlIGZ1bmN0aW9uIGF2YWlsYWJsZSBhdCBydW50aW1lLlxubGV0IGN1c3RvbVJlcXVpcmU6IG51bGwgfCB0eXBlb2YgcmVxdWlyZSA9XG4gICAgdHlwZW9mIGdsb2JhbENvbnRleHQucmVxdWlyZSA9PT0gJ3VuZGVmaW5lZCcgP1xuICAgICAgICBudWxsIDpcbiAgICAgICAgZ2xvYmFsQ29udGV4dC5yZXF1aXJlIGFzIG51bGwgfCB0eXBlb2YgcmVxdWlyZVxuaWYgKCFjdXN0b21SZXF1aXJlICYmIGlzSW1wb3J0U3ludGF4U3VwcG9ydGVkKCkpXG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3Qge2NyZWF0ZVJlcXVpcmV9ID1cbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgZXNsaW50LWRpc2FibGVcbiAgICAgICAgICAgICAgICBAdHlwZXNjcmlwdC1lc2xpbnQvbm8taW1wbGllZC1ldmFsLFxuICAgICAgICAgICAgICAgIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtY2FsbFxuICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGF3YWl0IG5ldyBGdW5jdGlvbigncmV0dXJuIGltcG9ydChcIm5vZGU6bW9kdWxlXCIpJykoKVxuICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICBlc2xpbnQtZW5hYmxlXG4gICAgICAgICAgICAgICAgQHR5cGVzY3JpcHQtZXNsaW50L25vLWltcGxpZWQtZXZhbCxcbiAgICAgICAgICAgICAgICBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWNhbGxcbiAgICAgICAgICAgICovXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWNhbGxcbiAgICAgICAgY3VzdG9tUmVxdWlyZSA9IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKVxuICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBJZ25vcmUgZXJyb3IuXG4gICAgfVxuZXhwb3J0IGNvbnN0IGN1cnJlbnRSZXF1aXJlID0gY3VzdG9tUmVxdWlyZVxuZXhwb3J0IGNvbnN0IG9wdGlvbmFsUmVxdWlyZSA9IDxUID0gdW5rbm93bj4oaWQ6IHN0cmluZyk6IG51bGwgfCBUID0+IHtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gY3VycmVudFJlcXVpcmUgPyBjdXJyZW50UmVxdWlyZShpZCkgYXMgVCA6IG51bGxcbiAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG59XG5leHBvcnQgY29uc3QgY2xlYXJSZXF1aXJlQ2FjaGUgPSAoXG4gICAgY2FjaGU6IHR5cGVvZiByZXF1aXJlLmNhY2hlID0gY3VycmVudFJlcXVpcmU/LmNhY2hlIHx8IHJlcXVpcmUuY2FjaGVcbik6IHR5cGVvZiByZXF1aXJlLmNhY2hlID0+IHtcbiAgICBjb25zdCBiYWNrdXA6IHR5cGVvZiByZXF1aXJlLmNhY2hlID0ge31cbiAgICBmb3IgKGNvbnN0IFtrZXksIG1vZHVsZV0gb2YgT2JqZWN0LmVudHJpZXMoY2FjaGUpKSB7XG4gICAgICAgIGJhY2t1cFtrZXldID0gbW9kdWxlXG4gICAgICAgIGRlbGV0ZSBjYWNoZVtrZXldXG4gICAgfVxuXG4gICAgcmV0dXJuIGJhY2t1cFxufVxuY29uc3QgcmVzdG9yZVJlcXVpcmVDYWNoZSA9IChcbiAgICBjYWNoZTogdHlwZW9mIHJlcXVpcmUuY2FjaGUgPSBjdXJyZW50UmVxdWlyZT8uY2FjaGUgfHwgcmVxdWlyZS5jYWNoZSxcbiAgICBiYWNrdXA6IHR5cGVvZiByZXF1aXJlLmNhY2hlXG4pID0+IHtcbiAgICBjbGVhclJlcXVpcmVDYWNoZSgpXG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIG1vZHVsZV0gb2YgT2JqZWN0LmVudHJpZXMoYmFja3VwKSlcbiAgICAgICAgY2FjaGVba2V5XSA9IG1vZHVsZVxufVxuZXhwb3J0IGNvbnN0IGlzb2xhdGVkUmVxdWlyZSA9IChcbiAgICBwYXRoOiBGaXJzdFBhcmFtZXRlcjx0eXBlb2YgcmVxdWlyZT4sXG4gICAgcmVxdWlyZUZ1bmN0aW9uOiB0eXBlb2YgcmVxdWlyZSA9IGN1cnJlbnRSZXF1aXJlIHx8IHJlcXVpcmVcbik6IFJldHVyblR5cGU8dHlwZW9mIHJlcXVpcmU+ID0+IHtcbiAgICBjb25zdCBiYWNrdXAgPSBjbGVhclJlcXVpcmVDYWNoZShyZXF1aXJlRnVuY3Rpb24uY2FjaGUpXG5cbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gcmVxdWlyZUZ1bmN0aW9uKHBhdGggYXMgdW5rbm93biBhcyBzdHJpbmcpIGFzXG4gICAgICAgICAgICBSZXR1cm5UeXBlPHR5cGVvZiByZXF1aXJlPlxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jYXRjaFxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRocm93IGVycm9yXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgcmVzdG9yZVJlcXVpcmVDYWNoZShyZXF1aXJlRnVuY3Rpb24uY2FjaGUsIGJhY2t1cClcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBvcHRpb25hbEltcG9ydCA9IGFzeW5jIDxUID0gdW5rbm93bj4oXG4gICAgaWQ6IHN0cmluZywgb3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPG51bGwgfCBUPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGlzSW1wb3J0U3ludGF4U3VwcG9ydGVkKCkgP1xuICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICBlc2xpbnQtZGlzYWJsZVxuICAgICAgICAgICAgICAgIEB0eXBlc2NyaXB0LWVzbGludC9uby1pbXBsaWVkLWV2YWwsXG4gICAgICAgICAgICAgICAgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1jYWxsXG4gICAgICAgICAgICAqL1xuICAgICAgICAgICAgYXdhaXQgKChuZXcgRnVuY3Rpb24oXG4gICAgICAgICAgICAgICAgJ29wdGlvbnMnLCBgcmV0dXJuIGltcG9ydCgnJHtpZH0nLCBvcHRpb25zKWBcbiAgICAgICAgICAgICkpKG9wdGlvbnMpIGFzIFByb21pc2U8VD4pIDpcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZShudWxsKVxuICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICBlc2xpbnQtZW5hYmxlXG4gICAgICAgICAgICAgICAgQHR5cGVzY3JpcHQtZXNsaW50L25vLWltcGxpZWQtZXZhbCxcbiAgICAgICAgICAgICAgICBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWNhbGxcbiAgICAgICAgICAgICovXG4gICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBhd2FpdCBQcm9taXNlLnJl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
|
package/dist/object.js
CHANGED
|
@@ -567,7 +567,10 @@ export const evaluateAsyncDynamicData = async (data, givenOptions = {}) => {
|
|
|
567
567
|
if (typeof data !== 'object' || data === null) return data;
|
|
568
568
|
if (!(options.selfReferenceName in options.scope)) options.scope[options.selfReferenceName] = data;
|
|
569
569
|
const result = data;
|
|
570
|
-
for (const [key, value] of Object.entries(data))
|
|
570
|
+
for (const [key, value] of Object.entries(data)) {
|
|
571
|
+
if ([options.expressionIndicatorKey, options.executionIndicatorKey].includes(key)) return await evaluateAndThrowError(value, options.scope, key === options.executionIndicatorKey);
|
|
572
|
+
if (isPlainObject(value)) result[key] = await evaluateAsyncDynamicData(value, options);
|
|
573
|
+
}
|
|
571
574
|
return result;
|
|
572
575
|
};
|
|
573
576
|
/**
|
|
@@ -956,4 +959,4 @@ export const unwrapProxy = (object, seenObjects = new Set()) => {
|
|
|
956
959
|
}
|
|
957
960
|
return object;
|
|
958
961
|
};
|
|
959
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL29iamVjdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAjIS91c3IvYmluL2VudiBiYWJlbC1ub2RlXG4vLyAtKi0gY29kaW5nOiB1dGYtOCAtKi1cbi8qKiBAbW9kdWxlIG9iamVjdCAqL1xuJ3VzZSBzdHJpY3QnXG4vKiAhXG4gICAgcmVnaW9uIGhlYWRlclxuICAgIFtQcm9qZWN0IHBhZ2VdKGh0dHBzOi8vdG9yYmVuLndlYnNpdGUvY2xpZW50bm9kZSlcblxuICAgIENvcHlyaWdodCBUb3JiZW4gU2lja2VydCAoaW5mb1tcIn5hdH5cIl10b3JiZW4ud2Vic2l0ZSkgMTYuMTIuMjAxMlxuXG4gICAgTGljZW5zZVxuICAgIC0tLS0tLS1cblxuICAgIFRoaXMgbGlicmFyeSB3cml0dGVuIGJ5IFRvcmJlbiBTaWNrZXJ0IHN0YW5kcyB1bmRlciBhIGNyZWF0aXZlIGNvbW1vbnNcbiAgICBuYW1pbmcgMy4wIHVucG9ydGVkIGxpY2Vuc2UuXG4gICAgU2VlIGh0dHBzOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS8zLjAvZGVlZC5kZVxuICAgIGVuZHJlZ2lvblxuKi9cbmltcG9ydCB0eXBlIHtcbiAgICBBbnlGdW5jdGlvbixcbiAgICBDb21wYXJlT3B0aW9ucyxcbiAgICBFdmFsdWF0ZUR5bmFtaWNEYXRhT3B0aW9ucyxcbiAgICBHZXR0ZXJGdW5jdGlvbixcbiAgICBNYXBwaW5nLFxuICAgIE5vcm1hbGl6ZWRPYmplY3RNYXNrLFxuICAgIE9iamVjdE1hc2tDb25maWd1cmF0aW9uLFxuICAgIFBsYWluT2JqZWN0LFxuICAgIFByb3h5SGFuZGxlcixcbiAgICBQcm94eVR5cGUsXG4gICAgUmVjdXJzaXZlQXN5bmNFdmFsdWF0ZWFibGUsXG4gICAgUmVjdXJzaXZlRXZhbHVhdGVhYmxlLFxuICAgIFJlY3Vyc2l2ZVBhcnRpYWwsXG4gICAgU2V0dGVyRnVuY3Rpb24sXG4gICAgVW5rbm93bkZ1bmN0aW9uLFxuICAgIFZhbHVlT2Zcbn0gZnJvbSAnLi90eXBlJ1xuXG5pbXBvcnQge1xuICAgIENMQVNTX1RPX1RZUEVfTUFQUElORywgSUdOT1JFX05VTExfQU5EX1VOREVGSU5FRF9TWU1CT0wsIFZBTFVFX0NPUFlfU1lNQk9MXG59IGZyb20gJy4vY29uc3RhbnRzJ1xuaW1wb3J0IHtcbiAgICBpc0Z1bmN0aW9uLCBpc09iamVjdCwgaXNQbGFpbk9iamVjdCwgaXNNYXAsIGlzUHJveHksIGlzU2V0LCBpc051bWVyaWNcbn0gZnJvbSAnLi9pbmRpY2F0b3JzJ1xuaW1wb3J0IHtpc05vdEFOdW1iZXJ9IGZyb20gJy4vbnVtYmVyJ1xuaW1wb3J0IHtlc2NhcGVSZWd1bGFyRXhwcmVzc2lvbnMsIGV2YWx1YXRlQW5kVGhyb3dFcnJvcn0gZnJvbSAnLi9zdHJpbmcnXG5cbi8qKlxuICogQWRkcyBkeW5hbWljIGdldHRlciBhbmQgc2V0dGVyIHRvIGFueSBnaXZlbiBkYXRhIHN0cnVjdHVyZSBzdWNoIGFzIG1hcHMuXG4gKiBAcGFyYW0gb2JqZWN0IC0gT2JqZWN0IHRvIHByb3h5LlxuICogQHBhcmFtIGdldHRlcldyYXBwZXIgLSBGdW5jdGlvbiB0byB3cmFwIGVhY2ggcHJvcGVydHkgZ2V0LlxuICogQHBhcmFtIHNldHRlcldyYXBwZXIgLSBGdW5jdGlvbiB0byB3cmFwIGVhY2ggcHJvcGVydHkgc2V0LlxuICogQHBhcmFtIG1ldGhvZE5hbWVzIC0gTWV0aG9kIG5hbWVzIHRvIHBlcmZvcm0gYWN0aW9ucyBvbiB0aGUgZ2l2ZW5cbiAqIG9iamVjdC5cbiAqIEBwYXJhbSBkZWVwIC0gSW5kaWNhdGVzIHRvIHBlcmZvcm0gYSBkZWVwIHdyYXBwaW5nIG9mIHNwZWNpZmllZCB0eXBlcy5cbiAqIEBwYXJhbSB0eXBlc1RvRXh0ZW5kIC0gVHlwZXMgd2hpY2ggc2hvdWxkIGJlIGV4dGVuZGVkIChDaGVja3MgYXJlXG4gKiBwZXJmb3JtZWQgdmlhIFwidmFsdWUgaW5zdGFuY2VvZiB0eXBlXCIuKS5cbiAqIEByZXR1cm5zIFJldHVybnMgZ2l2ZW4gb2JqZWN0IHdyYXBwZWQgd2l0aCBhIGR5bmFtaWMgZ2V0dGVyIHByb3h5LlxuICovXG5leHBvcnQgY29uc3QgYWRkRHluYW1pY0dldHRlckFuZFNldHRlciA9IDxUID0gdW5rbm93bj4oXG4gICAgb2JqZWN0OiBULFxuICAgIGdldHRlcldyYXBwZXI6IEdldHRlckZ1bmN0aW9uIHwgbnVsbCA9IG51bGwsXG4gICAgc2V0dGVyV3JhcHBlcjogbnVsbCB8IFNldHRlckZ1bmN0aW9uID0gbnVsbCxcbiAgICBtZXRob2ROYW1lczogTWFwcGluZyA9IHt9LFxuICAgIGRlZXAgPSB0cnVlLFxuICAgIHR5cGVzVG9FeHRlbmQ6IEFycmF5PHVua25vd24+ID0gW09iamVjdF1cbik6IFByb3h5VHlwZTxUPiB8IFQgPT4ge1xuICAgIGlmIChkZWVwICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnKVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgICAgICAgICBsZXQgaW5kZXggPSAwXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIG9iamVjdCkge1xuICAgICAgICAgICAgICAgIG9iamVjdFtpbmRleF0gPSBhZGREeW5hbWljR2V0dGVyQW5kU2V0dGVyKFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSwgZ2V0dGVyV3JhcHBlciwgc2V0dGVyV3JhcHBlciwgbWV0aG9kTmFtZXMsIGRlZXBcbiAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgICBpbmRleCArPSAxXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoaXNNYXAob2JqZWN0KSlcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIG9iamVjdClcbiAgICAgICAgICAgICAgICBvYmplY3Quc2V0KGtleSwgYWRkRHluYW1pY0dldHRlckFuZFNldHRlcihcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsIGdldHRlcldyYXBwZXIsIHNldHRlcldyYXBwZXIsIG1ldGhvZE5hbWVzLCBkZWVwKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgZWxzZSBpZiAoaXNTZXQob2JqZWN0KSkge1xuICAgICAgICAgICAgY29uc3QgY2FjaGU6IEFycmF5PHVua25vd24+ID0gW11cbiAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2Ygb2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgb2JqZWN0LmRlbGV0ZSh2YWx1ZSlcbiAgICAgICAgICAgICAgICBjYWNoZS5wdXNoKGFkZER5bmFtaWNHZXR0ZXJBbmRTZXR0ZXIoXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLCBnZXR0ZXJXcmFwcGVyLCBzZXR0ZXJXcmFwcGVyLCBtZXRob2ROYW1lcywgZGVlcClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgY2FjaGUpXG4gICAgICAgICAgICAgICAgb2JqZWN0LmFkZCh2YWx1ZSlcbiAgICAgICAgfSBlbHNlIGlmIChvYmplY3QgIT09IG51bGwpXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhvYmplY3QpKVxuICAgICAgICAgICAgICAgIChvYmplY3QgYXMgdW5rbm93biBhcyBNYXBwaW5nPHVua25vd24+KVtrZXldID1cbiAgICAgICAgICAgICAgICAgICAgYWRkRHluYW1pY0dldHRlckFuZFNldHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGFzIFRbRXh0cmFjdDxrZXlvZiBULCBzdHJpbmc+XSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldHRlcldyYXBwZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXR0ZXJXcmFwcGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kTmFtZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWVwXG4gICAgICAgICAgICAgICAgICAgIClcblxuICAgIGlmIChnZXR0ZXJXcmFwcGVyIHx8IHNldHRlcldyYXBwZXIpXG4gICAgICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlc1RvRXh0ZW5kKVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGlzT2JqZWN0KG9iamVjdCkgJiYgb2JqZWN0IGluc3RhbmNlb2YgKHR5cGUgYXMgQW55RnVuY3Rpb24pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWZhdWx0SGFuZGxlcjogUHJveHlIYW5kbGVyPFQ+ID1cbiAgICAgICAgICAgICAgICAgICAgZ2V0UHJveHlIYW5kbGVyPFQ+KG9iamVjdCwgbWV0aG9kTmFtZXMpXG4gICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlcjogUHJveHlIYW5kbGVyPFQ+ID1cbiAgICAgICAgICAgICAgICAgICAgZ2V0UHJveHlIYW5kbGVyPFQ+KG9iamVjdCwgbWV0aG9kTmFtZXMpXG5cbiAgICAgICAgICAgICAgICBpZiAoZ2V0dGVyV3JhcHBlcilcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5nZXQgPSAoXG4gICAgICAgICAgICAgICAgICAgICAgICBfdGFyZ2V0OiBULCBuYW1lOiBzdHJpbmcgfCBzeW1ib2xcbiAgICAgICAgICAgICAgICAgICAgKTogdW5rbm93biA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ19fdGFyZ2V0X18nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3RcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdfX3Jldm9rZV9fJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCk6IHVua25vd24gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXZva2UoKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0W25hbWUgYXMga2V5b2YgVF0gPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdFtuYW1lIGFzIGtleW9mIFRdXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXR0ZXJXcmFwcGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRIYW5kbGVyLmdldChwcm94eSBhcyBULCBuYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoc2V0dGVyV3JhcHBlcilcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5zZXQgPSAoXG4gICAgICAgICAgICAgICAgICAgICAgICBfdGFyZ2V0OiBULCBuYW1lOiBzdHJpbmcgfCBzeW1ib2wsIHZhbHVlOiB1bmtub3duXG4gICAgICAgICAgICAgICAgICAgICk6IGJvb2xlYW4gPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRIYW5kbGVyLnNldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm94eSBhcyBULFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGVyV3JhcHBlcihuYW1lLCB2YWx1ZSwgb2JqZWN0KVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGNvbnN0IHtwcm94eSwgcmV2b2tlfSA9XG4gICAgICAgICAgICAgICAgICAgIFByb3h5LnJldm9jYWJsZSh7fSwgaGFuZGxlciBhcyBQcm94eUhhbmRsZXI8b2JqZWN0PilcblxuICAgICAgICAgICAgICAgIHJldHVybiBwcm94eSBhcyBQcm94eVR5cGU8VD5cbiAgICAgICAgICAgIH1cblxuICAgIHJldHVybiBvYmplY3Rcbn1cbi8qKlxuICogQ29udmVydHMgZ2l2ZW4gb2JqZWN0IGludG8gaXRzIHNlcmlhbGl6ZWQgSlNPTiByZXByZXNlbnRhdGlvbiBieVxuICogcmVwbGFjaW5nIGNpcmN1bGFyIHJlZmVyZW5jZXMgd2l0aCBhIGdpdmVuIHByb3ZpZGVkIHZhbHVlLlxuICpcbiAqIFRoaXMgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBvYmplY3QgcmVjdXJzaXZlbHkgYW5kIHRyYWNrcyBvZiBzZWVuIGFuZFxuICogYWxyZWFkeSBzZXJpYWxpemVkIHN0cnVjdHVyZXMgdG8gcmV1c2UgZ2VuZXJhdGVkIHN0cmluZ3Mgb3IgbWFyayBhXG4gKiBjaXJjdWxhciByZWZlcmVuY2UuXG4gKiBAcGFyYW0gb2JqZWN0IC0gT2JqZWN0IHRvIHNlcmlhbGl6ZS5cbiAqIEBwYXJhbSBkZXRlcm1pbmVDaXJjdWxhclJlZmVyZW5jZVZhbHVlIC0gQ2FsbGJhY2sgdG8gY3JlYXRlIGEgZmFsbGJhY2tcbiAqIHZhbHVlIGRlcGVuZGluZyBvbiBnaXZlbiByZWR1bmRhbnQgdmFsdWUuXG4gKiBAcGFyYW0gbnVtYmVyT2ZTcGFjZXMgLSBOdW1iZXIgb2Ygc3BhY2VzIHRvIHVzZSBmb3Igc3RyaW5nIGZvcm1hdHRpbmcuXG4gKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIEpTT04gc3RyaW5nLlxuICovXG5leHBvcnQgY29uc3QgY29udmVydENpcmN1bGFyT2JqZWN0VG9KU09OID0gKFxuICAgIG9iamVjdDogdW5rbm93bixcbiAgICBkZXRlcm1pbmVDaXJjdWxhclJlZmVyZW5jZVZhbHVlOiAoKFxuICAgICAgICBzZXJpYWxpemVkVmFsdWU6IHVua25vd24sXG4gICAgICAgIGtleTogbnVsbCB8IHN0cmluZyxcbiAgICAgICAgdmFsdWU6IHVua25vd24sXG4gICAgICAgIHNlZW5PYmplY3RzOiBNYXA8dW5rbm93biwgdW5rbm93bj5cbiAgICApID0+IHVua25vd24pID0gKHNlcmlhbGl6ZWRWYWx1ZTogdW5rbm93bik6IHVua25vd24gPT5cbiAgICAgICAgc2VyaWFsaXplZFZhbHVlID8/ICdfX2NpcmN1bGFyUmVmZXJlbmNlX18nLFxuICAgIG51bWJlck9mU3BhY2VzID0gMFxuKTogUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5zdHJpbmdpZnk+IHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCBzZWVuT2JqZWN0czogTWFwPHVua25vd24sIHVua25vd24+ID0gbmV3IE1hcDx1bmtub3duLCB1bmtub3duPigpXG5cbiAgICBjb25zdCBzdHJpbmdpZmllciA9IChvYmplY3Q6IHVua25vd24pOiBzdHJpbmcgPT4ge1xuICAgICAgICBjb25zdCByZXBsYWNlciA9IChrZXk6IG51bGwgfCBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdW5rbm93biA9PiB7XG4gICAgICAgICAgICBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlZW5PYmplY3RzLmhhcyh2YWx1ZSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkZXRlcm1pbmVDaXJjdWxhclJlZmVyZW5jZVZhbHVlKFxuICAgICAgICAgICAgICAgICAgICAgICAgc2Vlbk9iamVjdHMuZ2V0KHZhbHVlKSA/PyBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWVuT2JqZWN0c1xuICAgICAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgICAvLyBOT1RFOiBTZXQgYmVmb3JlIHRyYXZlcnNpbmcgZGVlcGVyIHRvIGRldGVjdCBjeWNsZXMuXG4gICAgICAgICAgICAgICAgc2Vlbk9iamVjdHMuc2V0KHZhbHVlLCBudWxsKVxuXG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdDogQXJyYXk8dW5rbm93bj4gfCBNYXBwaW5nPHVua25vd24+XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFtdXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHJlcGxhY2VyKG51bGwsIGl0ZW0pKVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHt9XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW25hbWUsIHN1YlZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbbmFtZV0gPSByZXBsYWNlcihuYW1lLCBzdWJWYWx1ZSlcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzZWVuT2JqZWN0cy5zZXQodmFsdWUsIHJlc3VsdClcblxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqZWN0LCByZXBsYWNlciwgbnVtYmVyT2ZTcGFjZXMpXG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmluZ2lmaWVyKG9iamVjdClcbn1cbi8qKlxuICogQ29udmVydHMgZ2l2ZW4gbWFwIGFuZCBhbGwgbmVzdGVkIGZvdW5kIG1hcHMgb2JqZWN0cyB0byBjb3JyZXNwb25kaW5nXG4gKiBvYmplY3QuXG4gKiBAcGFyYW0gb2JqZWN0IC0gTWFwIHRvIGNvbnZlcnQgdG8uXG4gKiBAcGFyYW0gZGVlcCAtIEluZGljYXRlcyB3aGV0aGVyIHRvIHBlcmZvcm0gYSByZWN1cnNpdmUgY29udmVyc2lvbi5cbiAqIEByZXR1cm5zIEdpdmVuIG1hcCBhcyBvYmplY3QuXG4gKi9cbmV4cG9ydCBjb25zdCBjb252ZXJ0TWFwVG9QbGFpbk9iamVjdCA9IChcbiAgICBvYmplY3Q6IHVua25vd24sIGRlZXAgPSB0cnVlXG4pOiB1bmtub3duID0+IHtcbiAgICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKGlzTWFwKG9iamVjdCkpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld09iamVjdDogTWFwcGluZzx1bmtub3duPiA9IHt9XG4gICAgICAgICAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2Ygb2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKGRlZXApXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gY29udmVydE1hcFRvUGxhaW5PYmplY3QodmFsdWUsIGRlZXApXG5cbiAgICAgICAgICAgICAgICBpZiAoWydudW1iZXInLCAnc3RyaW5nJ10uaW5jbHVkZXModHlwZW9mIGtleSkpXG4gICAgICAgICAgICAgICAgICAgIG5ld09iamVjdFtTdHJpbmcoa2V5KV0gPSB2YWx1ZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbmV3T2JqZWN0XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVlcClcbiAgICAgICAgICAgIGlmIChpc1BsYWluT2JqZWN0KG9iamVjdCkpXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMob2JqZWN0KSlcbiAgICAgICAgICAgICAgICAgICAgKG9iamVjdCBhcyBNYXBwaW5nPHVua25vd24+KVtrZXldID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRNYXBUb1BsYWluT2JqZWN0KHZhbHVlLCBkZWVwKVxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gMFxuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBvYmplY3QgYXMgQXJyYXk8dW5rbm93bj4pIHtcbiAgICAgICAgICAgICAgICAgICAgKG9iamVjdCBhcyBBcnJheTx1bmtub3duPilbaW5kZXhdID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRNYXBUb1BsYWluT2JqZWN0KHZhbHVlLCBkZWVwKVxuXG4gICAgICAgICAgICAgICAgICAgIGluZGV4ICs9IDFcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzU2V0KG9iamVjdCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjYWNoZTogQXJyYXk8dW5rbm93bj4gPSBbXVxuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmRlbGV0ZSh2YWx1ZSlcblxuICAgICAgICAgICAgICAgICAgICBjYWNoZS5wdXNoKGNvbnZlcnRNYXBUb1BsYWluT2JqZWN0KHZhbHVlLCBkZWVwKSlcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGNhY2hlKVxuICAgICAgICAgICAgICAgICAgICBvYmplY3QuYWRkKHZhbHVlKVxuICAgICAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvYmplY3Rcbn1cbi8qKlxuICogQ29udmVydHMgZ2l2ZW4gcGxhaW4gb2JqZWN0IGFuZCBhbGwgbmVzdGVkIGZvdW5kIG9iamVjdHMgdG9cbiAqIGNvcnJlc3BvbmRpbmcgbWFwLlxuICogQHBhcmFtIG9iamVjdCAtIE9iamVjdCB0byBjb252ZXJ0IHRvLlxuICogQHBhcmFtIGRlZXAgLSBJbmRpY2F0ZXMgd2hldGhlciB0byBwZXJmb3JtIGEgcmVjdXJzaXZlIGNvbnZlcnNpb24uXG4gKiBAcmV0dXJucyBHaXZlbiBvYmplY3QgYXMgbWFwLlxuICovXG5leHBvcnQgY29uc3QgY29udmVydFBsYWluT2JqZWN0VG9NYXAgPSAoXG4gICAgb2JqZWN0OiB1bmtub3duLCBkZWVwID0gdHJ1ZVxuKTogdW5rbm93biA9PiB7XG4gICAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChpc1BsYWluT2JqZWN0KG9iamVjdCkpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld09iamVjdCA9IG5ldyBNYXA8bnVtYmVyIHwgc3RyaW5nLCB1bmtub3duPigpXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhvYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRlZXApXG4gICAgICAgICAgICAgICAgICAgIChvYmplY3QgYXMgTWFwcGluZzx1bmtub3duPilba2V5XSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0UGxhaW5PYmplY3RUb01hcCh2YWx1ZSwgZGVlcClcblxuICAgICAgICAgICAgICAgIG5ld09iamVjdC5zZXQoa2V5LCAob2JqZWN0IGFzIE1hcHBpbmc8dW5rbm93bj4pW2tleV0pXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBuZXdPYmplY3RcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZWVwKVxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xuICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IDBcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIG9iamVjdCBhcyBBcnJheTx1bmtub3duPikge1xuICAgICAgICAgICAgICAgICAgICAob2JqZWN0IGFzIEFycmF5PHVua25vd24+KVtpbmRleF0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydFBsYWluT2JqZWN0VG9NYXAodmFsdWUsIGRlZXApXG5cbiAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0gMVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNNYXAob2JqZWN0KSlcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBvYmplY3QpXG4gICAgICAgICAgICAgICAgICAgIG9iamVjdC5zZXQoa2V5LCBjb252ZXJ0UGxhaW5PYmplY3RUb01hcCh2YWx1ZSwgZGVlcCkpXG4gICAgICAgICAgICBlbHNlIGlmIChpc1NldChvYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2FjaGU6IEFycmF5PHVua25vd24+ID0gW11cblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2Ygb2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIG9iamVjdC5kZWxldGUodmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIGNhY2hlLnB1c2goY29udmVydFBsYWluT2JqZWN0VG9NYXAodmFsdWUsIGRlZXApKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgY2FjaGUpXG4gICAgICAgICAgICAgICAgICAgIG9iamVjdC5hZGQodmFsdWUpXG4gICAgICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iamVjdFxufVxuLyoqXG4gKiBSZXBsYWNlcyBnaXZlbiBwYXR0ZXJuIGluIGVhY2ggdmFsdWUgaW4gZ2l2ZW4gb2JqZWN0IHJlY3Vyc2l2ZWx5IHdpdGhcbiAqIGdpdmVuIHN0cmluZyByZXBsYWNlbWVudC5cbiAqIEBwYXJhbSBvYmplY3QgLSBPYmplY3QgdG8gY29udmVydCBzdWJzdHJpbmdzIGluLlxuICogQHBhcmFtIHBhdHRlcm4gLSBSZWd1bGFyIGV4cHJlc3Npb24gdG8gcmVwbGFjZS5cbiAqIEBwYXJhbSByZXBsYWNlbWVudCAtIFN0cmluZyB0byB1c2UgYXMgcmVwbGFjZW1lbnQgZm9yIGZvdW5kIHBhdHRlcm5zLlxuICogQHJldHVybnMgQ29udmVydGVkIG9iamVjdCB3aXRoIHJlcGxhY2VkIHBhdHRlcm5zLlxuICovXG5leHBvcnQgY29uc3QgY29udmVydFN1YnN0cmluZ0luUGxhaW5PYmplY3QgPSA8XG4gICAgVHlwZSBleHRlbmRzIE1hcHBpbmc8dW5rbm93bj4gPSBQbGFpbk9iamVjdFxuPihvYmplY3Q6IFR5cGUsIHBhdHRlcm46IFJlZ0V4cCB8IHN0cmluZywgcmVwbGFjZW1lbnQ6IHN0cmluZyk6IFR5cGUgPT4ge1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG9iamVjdCkpXG4gICAgICAgIGlmIChpc1BsYWluT2JqZWN0KHZhbHVlKSlcbiAgICAgICAgICAgIG9iamVjdFtrZXkgYXMga2V5b2YgVHlwZV0gPVxuICAgICAgICAgICAgICAgIGNvbnZlcnRTdWJzdHJpbmdJblBsYWluT2JqZWN0KHZhbHVlLCBwYXR0ZXJuLCByZXBsYWNlbWVudCkgYXNcbiAgICAgICAgICAgICAgICAgICAgdW5rbm93biBhcyBWYWx1ZU9mPFR5cGU+XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpXG4gICAgICAgICAgICAob2JqZWN0IGFzIHVua25vd24gYXMgTWFwcGluZylba2V5XSA9XG4gICAgICAgICAgICAgICAgdmFsdWUucmVwbGFjZShwYXR0ZXJuLCByZXBsYWNlbWVudClcblxuICAgIHJldHVybiBvYmplY3Rcbn1cbi8qIGVzbGludC1kaXNhYmxlIGpzZG9jL3JlcXVpcmUtZGVzY3JpcHRpb24tY29tcGxldGUtc2VudGVuY2UgKi9cbi8qKlxuICogQ29waWVzIGdpdmVuIG9iamVjdCAob2YgYW55IHR5cGUpIGludG8gb3B0aW9uYWxseSBnaXZlbiBkZXN0aW5hdGlvbi5cbiAqIEBwYXJhbSBzb3VyY2UgLSBPYmplY3QgdG8gY29weS5cbiAqIEBwYXJhbSBjb3B5QmxvYnMgLSBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gY29weSBibG9icyBhcyB3ZWxsLlxuICogQHBhcmFtIHJlY3Vyc2lvbkxpbWl0IC0gU3BlY2lmaWVzIGhvdyBkZWVwIHdlIHNob3VsZCB0cmF2ZXJzZSBpbnRvIGdpdmVuXG4gKiBvYmplY3QgcmVjdXJzaXZlbHkuXG4gKiBAcGFyYW0gcmVjdXJzaW9uRW5kVmFsdWUgLSBJbmRpY2F0ZXMgd2hpY2ggdmFsdWUgdG8gdXNlIGZvciByZWN1cnNpb24gZW5kcy5cbiAqIFVzdWFsbHkgYSByZWZlcmVuY2UgdG8gY29ycmVzcG9uZGluZyBzb3VyY2UgdmFsdWUgd2lsbCBiZSB1c2VkLlxuICogQHBhcmFtIGRlc3RpbmF0aW9uIC0gVGFyZ2V0IHRvIGNvcHkgc291cmNlIHRvLlxuICogQHBhcmFtIGN5Y2xpYyAtIEluZGljYXRlcyB3aGV0aGVyIGtub3duIHN1YiBzdHJ1Y3R1cmVzIHNob3VsZCBiZSBjb3BpZWQgb3JcbiAqIHJlZmVyZW5jZWQgKGlmIFwidHJ1ZVwiIGVuZGxlc3MgbG9vcHMgY2FuIG9jY3VyIGlmIHNvdXJjZSBoYXMgY3ljbGljXG4gKiBzdHJ1Y3R1cmVzKS5cbiAqIEBwYXJhbSBrbm93blJlZmVyZW5jZXMgLSBVc2VkIHRvIGF2b2lkIHRyYXZlcnNpbmcgbG9vcHMgYW5kIG5vdCB0byBjb3B5XG4gKiByZWZlcmVuY2VzIGUuZy4gdG8gb2JqZWN0cyBub3QgdG8gY29weSAoZS5nLiBzeW1ib2wgcG9seWZpbGxzKS5cbiAqIEBwYXJhbSByZWN1cnNpb25MZXZlbCAtIEludGVybmFsbHkgdXNlZCB0byB0cmFjayBjdXJyZW50IHJlY3Vyc2lvbiBsZXZlbCBpblxuICogZ2l2ZW4gc291cmNlIGRhdGEgc3RydWN0dXJlLlxuICogQHJldHVybnMgVmFsdWUgXCJ0cnVlXCIgaWYgYm90aCBvYmplY3RzIGFyZSBlcXVhbCBhbmQgXCJmYWxzZVwiIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGNvcHkgPSA8VHlwZSA9IHVua25vd24+KFxuICAgIHNvdXJjZTogVHlwZSxcbiAgICBjb3B5QmxvYnMgPSBmYWxzZSxcbiAgICByZWN1cnNpb25MaW1pdCA9IC0xLFxuICAgIHJlY3Vyc2lvbkVuZFZhbHVlOiB1bmtub3duID0gVkFMVUVfQ09QWV9TWU1CT0wsXG4gICAgZGVzdGluYXRpb246IG51bGwgfCBUeXBlID0gbnVsbCxcbiAgICBjeWNsaWMgPSBmYWxzZSxcbiAgICBrbm93blJlZmVyZW5jZXM6IEFycmF5PHVua25vd24+ID0gW10sXG4gICAgcmVjdXJzaW9uTGV2ZWwgPSAwXG4pOiBUeXBlID0+IHtcbiAgICAvKiBlc2xpbnQtZW5hYmxlIGpzZG9jL3JlcXVpcmUtZGVzY3JpcHRpb24tY29tcGxldGUtc2VudGVuY2UgKi9cbiAgICBpZiAoaXNPYmplY3Qoc291cmNlKSlcbiAgICAgICAgaWYgKGRlc3RpbmF0aW9uKSB7XG4gICAgICAgICAgICBpZiAoc291cmNlID09PSBkZXN0aW5hdGlvbilcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBDYW4ndCBjb3B5IGJlY2F1c2Ugc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmUgYCArXG4gICAgICAgICAgICAgICAgICAgICdpZGVudGljYWwuJ1xuICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICFjeWNsaWMgJiZcbiAgICAgICAgICAgICAgICAhW3VuZGVmaW5lZCwgbnVsbF0uaW5jbHVkZXMoc291cmNlIGFzIHVua25vd24gYXMgbnVsbClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4OiBudW1iZXIgPSBrbm93blJlZmVyZW5jZXMuaW5kZXhPZihzb3VyY2UpXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtub3duUmVmZXJlbmNlc1tpbmRleF0gYXMgVHlwZVxuXG4gICAgICAgICAgICAgICAga25vd25SZWZlcmVuY2VzLnB1c2goc291cmNlKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjb3B5VmFsdWUgPSA8Vj4odmFsdWU6IFYpOiBudWxsIHwgViA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICByZWN1cnNpb25MaW1pdCAhPT0gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgcmVjdXJzaW9uTGltaXQgPCByZWN1cnNpb25MZXZlbCArIDFcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWN1cnNpb25FbmRWYWx1ZSA9PT0gVkFMVUVfQ09QWV9TWU1CT0wgP1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVjdXJzaW9uRW5kVmFsdWUgYXMgbnVsbCB8IFZcblxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogbnVsbCB8IFYgPSBjb3B5KFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgY29weUJsb2JzLFxuICAgICAgICAgICAgICAgICAgICByZWN1cnNpb25MaW1pdCxcbiAgICAgICAgICAgICAgICAgICAgcmVjdXJzaW9uRW5kVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGN5Y2xpYyxcbiAgICAgICAgICAgICAgICAgICAga25vd25SZWZlcmVuY2VzLFxuICAgICAgICAgICAgICAgICAgICByZWN1cnNpb25MZXZlbCArIDFcbiAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICFjeWNsaWMgJiZcbiAgICAgICAgICAgICAgICAgICAgIVt1bmRlZmluZWQsIG51bGxdLmluY2x1ZGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgYXMgdW5rbm93biBhcyBudWxsXG4gICAgICAgICAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAga25vd25SZWZlcmVuY2VzLnB1c2godmFsdWUpXG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNvdXJjZSkpXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHNvdXJjZSlcbiAgICAgICAgICAgICAgICAgICAgKGRlc3RpbmF0aW9uIGFzIHVua25vd24gYXMgQXJyYXk8dW5rbm93bj4pXG4gICAgICAgICAgICAgICAgICAgICAgICAucHVzaChjb3B5VmFsdWUoaXRlbSkpXG4gICAgICAgICAgICBlbHNlIGlmIChzb3VyY2UgaW5zdGFuY2VvZiBNYXApXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2Ygc291cmNlKVxuICAgICAgICAgICAgICAgICAgICAoZGVzdGluYXRpb24gYXMgdW5rbm93biBhcyBNYXA8dW5rbm93biwgdW5rbm93bj4pXG4gICAgICAgICAgICAgICAgICAgICAgICAuc2V0KGtleSwgY29weVZhbHVlKHZhbHVlKSlcbiAgICAgICAgICAgIGVsc2UgaWYgKHNvdXJjZSBpbnN0YW5jZW9mIFNldClcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHNvdXJjZSlcbiAgICAgICAgICAgICAgICAgICAgKGRlc3RpbmF0aW9uIGFzIHVua25vd24gYXMgU2V0PHVua25vd24+KVxuICAgICAgICAgICAgICAgICAgICAgICAgLmFkZChjb3B5VmFsdWUodmFsdWUpKVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHNvdXJjZSkpXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAoZGVzdGluYXRpb24gYXMgTWFwcGluZzxWYWx1ZU9mPFR5cGU+Pilba2V5XSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29weVZhbHVlKHZhbHVlIGFzIFZhbHVlT2Y8VHlwZT4pIGFzIFZhbHVlT2Y8VHlwZT5cbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRmFpbGVkIHRvIGNvcHkgcHJvcGVydHkgdmFsdWUgb2JqZWN0IFwiJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7a2V5fVwiOiAke3JlcHJlc2VudChlcnJvcil9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2F1c2U6IGVycm9yfVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzb3VyY2UpKVxuICAgICAgICAgICAgICAgIHJldHVybiBjb3B5KFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgIGNvcHlCbG9icyxcbiAgICAgICAgICAgICAgICAgICAgcmVjdXJzaW9uTGltaXQsXG4gICAgICAgICAgICAgICAgICAgIHJlY3Vyc2lvbkVuZFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAoW10gYXMgdW5rbm93biBhcyBUeXBlKSxcbiAgICAgICAgICAgICAgICAgICAgY3ljbGljLFxuICAgICAgICAgICAgICAgICAgICBrbm93blJlZmVyZW5jZXMsXG4gICAgICAgICAgICAgICAgICAgIHJlY3Vyc2lvbkxldmVsXG4gICAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICBpZiAoc291cmNlIGluc3RhbmNlb2YgTWFwKVxuICAgICAgICAgICAgICAgIHJldHVybiBjb3B5KFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgIGNvcHlCbG9icyxcbiAgICAgICAgICAgICAgICAgICAgcmVjdXJzaW9uTGltaXQsXG4gICAgICAgICAgICAgICAgICAgIHJlY3Vyc2lvbkVuZFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAobmV3IE1hcCgpIGFzIHVua25vd24gYXMgVHlwZSksXG4gICAgICAgICAgICAgICAgICAgIGN5Y2xpYyxcbiAgICAgICAgICAgICAgICAgICAga25vd25SZWZlcmVuY2VzLFxuICAgICAgICAgICAgICAgICAgICByZWN1cnNpb25MZXZlbFxuICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgaWYgKHNvdXJjZSBpbnN0YW5jZW9mIFNldClcbiAgICAgICAgICAgICAgICByZXR1cm4gY29weShcbiAgICAgICAgICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgICAgICAgICBjb3B5QmxvYnMsXG4gICAgICAgICAgICAgICAgICAgIHJlY3Vyc2lvbkxpbWl0LFxuICAgICAgICAgICAgICAgICAgICByZWN1cnNpb25FbmRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgKG5ldyBTZXQoKSBhcyB1bmtub3duIGFzIFR5cGUpLFxuICAgICAgICAgICAgICAgICAgICBjeWNsaWMsXG4gICAgICAgICAgICAgICAgICAgIGtub3duUmVmZXJlbmNlcyxcbiAgICAgICAgICAgICAgICAgICAgcmVjdXJzaW9uTGV2ZWxcbiAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgIGlmIChzb3VyY2UgaW5zdGFuY2VvZiBEYXRlKVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShzb3VyY2UuZ2V0VGltZSgpKSBhcyB1bmtub3duIGFzIFR5cGVcblxuICAgICAgICAgICAgaWYgKHNvdXJjZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1vZGlmaWVyID0gL1teL10qJC8uZXhlYyhzb3VyY2UudG9TdHJpbmcoKSlcbiAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbiA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZS5zb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyID8gbW9kaWZpZXJbMF0gOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICApIGFzIHVua25vd24gYXMgVHlwZVxuICAgICAgICAgICAgICAgIChkZXN0aW5hdGlvbiBhcyB1bmtub3duIGFzIFJlZ0V4cCkubGFzdEluZGV4ID1cbiAgICAgICAgICAgICAgICAgICAgc291cmNlLmxhc3RJbmRleFxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgJiYgc291cmNlIGluc3RhbmNlb2YgQmxvYilcbiAgICAgICAgICAgICAgICByZXR1cm4gY29weUJsb2JzID9cbiAgICAgICAgICAgICAgICAgICAgc291cmNlLnNsaWNlKDAsIHNvdXJjZS5zaXplLCBzb3VyY2UudHlwZSkgYXNcbiAgICAgICAgICAgICAgICAgICAgICAgIHVua25vd24gYXNcbiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgOlxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VcblxuICAgICAgICAgICAgcmV0dXJuIGNvcHkoXG4gICAgICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgICAgIGNvcHlCbG9icyxcbiAgICAgICAgICAgICAgICByZWN1cnNpb25MaW1pdCxcbiAgICAgICAgICAgICAgICByZWN1cnNpb25FbmRWYWx1ZSxcbiAgICAgICAgICAgICAgICAoe30gYXMgdW5rbm93biBhcyBUeXBlKSxcbiAgICAgICAgICAgICAgICBjeWNsaWMsXG4gICAgICAgICAgICAgICAga25vd25SZWZlcmVuY2VzLFxuICAgICAgICAgICAgICAgIHJlY3Vyc2lvbkxldmVsXG4gICAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgIHJldHVybiBkZXN0aW5hdGlvbiB8fCBzb3VyY2Vcbn1cbi8qKlxuICogRGV0ZXJtaW5lIHRoZSBpbnRlcm5hbCBKYXZhU2NyaXB0IFtbQ2xhc3NdXSBvZiBhbiBvYmplY3QuXG4gKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBhbmFseXplLlxuICogQHJldHVybnMgTmFtZSBvZiBkZXRlcm1pbmVkIHR5cGUuXG4gKi9cbmV4cG9ydCBjb25zdCBkZXRlcm1pbmVUeXBlID0gKHZhbHVlPzogdW5rbm93bik6IHN0cmluZyA9PiB7XG4gICAgaWYgKFtudWxsLCB1bmRlZmluZWRdLmluY2x1ZGVzKHZhbHVlIGFzIG51bGwpKVxuICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKVxuXG4gICAgY29uc3QgdHlwZTogc3RyaW5nID0gdHlwZW9mIHZhbHVlXG5cbiAgICBpZiAoXG4gICAgICAgIFsnZnVuY3Rpb24nLCAnb2JqZWN0J10uaW5jbHVkZXModHlwZSkgJiZcbiAgICAgICAgJ3RvU3RyaW5nJyBpbiAodmFsdWUgYXMgb2JqZWN0KVxuICAgICkge1xuICAgICAgICBjb25zdCBzdHJpbmdSZXByZXNlbnRhdGlvbiA9XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpXG5cbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChcbiAgICAgICAgICAgIENMQVNTX1RPX1RZUEVfTUFQUElORywgc3RyaW5nUmVwcmVzZW50YXRpb25cbiAgICAgICAgKSlcbiAgICAgICAgICAgIHJldHVybiBDTEFTU19UT19UWVBFX01BUFBJTkdbXG4gICAgICAgICAgICAgICAgc3RyaW5nUmVwcmVzZW50YXRpb24gYXNcbiAgICAgICAgICAgICAgICAgICAga2V5b2YgdHlwZW9mIENMQVNTX1RPX1RZUEVfTUFQUElOR1xuICAgICAgICAgICAgXVxuICAgIH1cblxuICAgIHJldHVybiB0eXBlXG59XG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiBnaXZlbiBpdGVtcyBhcmUgZXF1YWwgZm9yIGdpdmVuIHByb3BlcnR5IGxpc3QuIElmXG4gKiBwcm9wZXJ0eSBsaXN0IGlzbid0IHNldCBhbGwgcHJvcGVydGllcyB3aWxsIGJlIGNoZWNrZWQuIEFsbCBrZXlzIHdoaWNoXG4gKiBzdGFydHMgd2l0aCBvbmUgb2YgdGhlIGV4Y2VwdGlvbiBwcmVmaXhlcyB3aWxsIGJlIG9taXR0ZWQuXG4gKiBAcGFyYW0gZmlyc3RWYWx1ZSAtIEZpcnN0IG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHNlY29uZFZhbHVlIC0gU2Vjb25kIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIGdpdmVuT3B0aW9ucyAtIE9wdGlvbnMgdG8gZGVmaW5lIGhvdyB0byBjb21wYXJlLlxuICogQHBhcmFtIGdpdmVuT3B0aW9ucy5wcm9wZXJ0aWVzIC0gUHJvcGVydHkgbmFtZXMgdG8gY2hlY2suIENoZWNrIGFsbCBpZlxuICogXCJudWxsXCIgaXMgc2VsZWN0ZWQgKGRlZmF1bHQpLlxuICogQHBhcmFtIGdpdmVuT3B0aW9ucy5kZWVwIC0gUmVjdXJzaW9uIGRlcHRoIG5lZ2F0aXZlIHZhbHVlcyBtZWFuc1xuICogaW5maW5pdGVseSBkZWVwIChkZWZhdWx0KS5cbiAqIEBwYXJhbSBnaXZlbk9wdGlvbnMuZXhjZXB0aW9uUHJlZml4ZXMgLSBQcm9wZXJ0eSBwcmVmaXhlcyB3aGljaFxuICogaW5kaWNhdGVzIHByb3BlcnRpZXMgdG8gaWdub3JlLlxuICogQHBhcmFtIGdpdmVuT3B0aW9ucy5pZ25vcmVGdW5jdGlvbnMgLSBJbmRpY2F0ZXMgd2hldGhlciBmdW5jdGlvbnMgaGF2ZVxuICogdG8gYmUgaWRlbnRpY2FsIHRvIGludGVycHJldCBpcyBhcyBlcXVhbC4gSWYgc2V0IHRvIFwidHJ1ZVwiIHR3byBmdW5jdGlvbnNcbiAqIHdpbGwgYmUgYXNzdW1lZCB0byBiZSBlcXVhbCAoZGVmYXVsdCkuXG4gKiBAcGFyYW0gZ2l2ZW5PcHRpb25zLmNvbXBhcmVCbG9icyAtIEluZGljYXRlcyB3aGV0aGVyIGJpbmFyeSBkYXRhIHNob3VsZFxuICogYmUgY29udmVydGVkIHRvIGEgYmFzZTY0IHN0cmluZyB0byBjb21wYXJlIHRoZWlyIGNvbnRlbnQuIE1ha2VzIHRoaXNcbiAqIGZ1bmN0aW9uIGFzeW5jaHJvbm91cyBpbiBicm93c2VycyBhbmQgcG90ZW50aWFsbHkgdGFrZXMgYSBsb3Qgb2ZcbiAqIHJlc291cmNlcy5cbiAqIEByZXR1cm5zIFZhbHVlIFwidHJ1ZVwiIGlmIGJvdGggb2JqZWN0cyBhcmUgZXF1YWwgYW5kIFwiZmFsc2VcIiBvdGhlcndpc2UuXG4gKiBJZiBcImNvbXBhcmVCbG9ic1wiIGlzIGFjdGl2YXRlZCwgYW5kIHdlJ3JlIHJ1bm5pbmcgaW4gYSBicm93c2VyIGxpa2VcbiAqIGVudmlyb25tZW50IGFuZCBiaW5hcnkgZGF0YSBpcyBnaXZlbiwgdGhlbiBhIHByb21pc2Ugd3JhcHBpbmcgdGhlXG4gKiBkZXRlcm1pbmVkIGJvb2xlYW4gdmFsdWVzIGlzIHJldHVybmVkLlxuICovXG5leHBvcnQgY29uc3QgZXF1YWxzID0gKFxuICAgIGZpcnN0VmFsdWU6IHVua25vd24sXG4gICAgc2Vjb25kVmFsdWU6IHVua25vd24sXG4gICAgZ2l2ZW5PcHRpb25zOiBQYXJ0aWFsPENvbXBhcmVPcHRpb25zPiA9IHt9XG4pOiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuIHwgc3RyaW5nPiB8IHN0cmluZyA9PiB7XG4gICAgY29uc3Qgb3B0aW9uczogQ29tcGFyZU9wdGlvbnMgPSB7XG4gICAgICAgIGNvbXBhcmVCbG9iczogZmFsc2UsXG4gICAgICAgIGRlZXA6IC0xLFxuICAgICAgICBleGNlcHRpb25QcmVmaXhlczogW10sXG4gICAgICAgIGlnbm9yZUZ1bmN0aW9uczogdHJ1ZSxcbiAgICAgICAgcHJvcGVydGllczogbnVsbCxcbiAgICAgICAgcmV0dXJuUmVhc29uSWZOb3RFcXVhbDogZmFsc2UsXG4gICAgICAgIC4uLmdpdmVuT3B0aW9uc1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgICAgb3B0aW9ucy5pZ25vcmVGdW5jdGlvbnMgJiZcbiAgICAgICAgaXNGdW5jdGlvbihmaXJzdFZhbHVlKSAmJiBpc0Z1bmN0aW9uKHNlY29uZFZhbHVlKSB8fFxuICAgICAgICBmaXJzdFZhbHVlID09PSBzZWNvbmRWYWx1ZSB8fFxuICAgICAgICBpc05vdEFOdW1iZXIoZmlyc3RWYWx1ZSkgJiYgaXNOb3RBTnVtYmVyKHNlY29uZFZhbHVlKSB8fFxuICAgICAgICBmaXJzdFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwICYmIHNlY29uZFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwICYmXG4gICAgICAgIGZpcnN0VmFsdWUudG9TdHJpbmcoKSA9PT0gc2Vjb25kVmFsdWUudG9TdHJpbmcoKSAmJlxuICAgICAgICBmaXJzdFZhbHVlLmZsYWdzLnNwbGl0KCcnKS5zb3J0KCkuam9pbignJykgPT09XG4gICAgICAgIHNlY29uZFZhbHVlLmZsYWdzLnNwbGl0KCcnKS5zb3J0KCkuam9pbignJykgfHxcbiAgICAgICAgZmlyc3RWYWx1ZSBpbnN0YW5jZW9mIERhdGUgJiYgc2Vjb25kVmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmXG4gICAgICAgIChcbiAgICAgICAgICAgIGlzTmFOKGZpcnN0VmFsdWUuZ2V0VGltZSgpKSAmJlxuICAgICAgICAgICAgaXNOYU4oc2Vjb25kVmFsdWUuZ2V0VGltZSgpKSB8fFxuICAgICAgICAgICAgIWlzTmFOKGZpcnN0VmFsdWUuZ2V0VGltZSgpKSAmJlxuICAgICAgICAgICAgIWlzTmFOKHNlY29uZFZhbHVlLmdldFRpbWUoKSkgJiZcbiAgICAgICAgICAgIGZpcnN0VmFsdWUuZ2V0VGltZSgpID09PSBzZWNvbmRWYWx1ZS5nZXRUaW1lKClcbiAgICAgICAgKSB8fFxuICAgICAgICBvcHRpb25zLmNvbXBhcmVCbG9icyAmJlxuICAgICAgICBldmFsKCd0eXBlb2YgQnVmZmVyJykgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChcbiAgICAgICAgICAgIChldmFsKCdCdWZmZXInKSBhcyB0eXBlb2YgQnVmZmVyKSwgJ2lzQnVmZmVyJ1xuICAgICAgICApICYmXG4gICAgICAgIGZpcnN0VmFsdWUgaW5zdGFuY2VvZiBldmFsKCdCdWZmZXInKSAmJlxuICAgICAgICBzZWNvbmRWYWx1ZSBpbnN0YW5jZW9mIGV2YWwoJ0J1ZmZlcicpICYmXG4gICAgICAgIChmaXJzdFZhbHVlIGFzIEJ1ZmZlcikudG9TdHJpbmcoJ2Jhc2U2NCcpID09PVxuICAgICAgICAoc2Vjb25kVmFsdWUgYXMgQnVmZmVyKS50b1N0cmluZygnYmFzZTY0JylcbiAgICApXG4gICAgICAgIHJldHVybiB0cnVlXG5cbiAgICBpZiAoXG4gICAgICAgIG9wdGlvbnMuY29tcGFyZUJsb2JzICYmXG4gICAgICAgIHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICBmaXJzdFZhbHVlIGluc3RhbmNlb2YgQmxvYiAmJlxuICAgICAgICBzZWNvbmRWYWx1ZSBpbnN0YW5jZW9mIEJsb2JcbiAgICApXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxib29sZWFuIHwgc3RyaW5nPigoXG4gICAgICAgICAgICByZXNvbHZlOiAodmFsdWU6IGJvb2xlYW4gfCBzdHJpbmcpID0+IHZvaWRcbiAgICAgICAgKTogdm9pZCA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXM6IEFycmF5PEFycmF5QnVmZmVyIHwgbnVsbCB8IHN0cmluZz4gPSBbXVxuICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBbZmlyc3RWYWx1ZSwgc2Vjb25kVmFsdWVdKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZVJlYWRlcjogRmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgICAgICAgICAgICAgICBmaWxlUmVhZGVyLm9ubG9hZCA9IChldmVudDogRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LnRhcmdldCA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKG51bGwpXG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKChldmVudC50YXJnZXQgYXMgRmlsZVJlYWRlcikucmVzdWx0KVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID09PSAyKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlc1swXSA9PT0gdmFsdWVzWzFdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG9wdGlvbnMucmV0dXJuUmVhc29uSWZOb3RFcXVhbCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGA+Pj4gQmxvYigke3JlcHJlc2VudCh2YWx1ZXNbMF0pfSkgICE9PSBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYEJsb2IoJHtyZXByZXNlbnQodmFsdWVzWzFdKX0pYCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZpbGVSZWFkZXIucmVhZEFzRGF0YVVSTCh2YWx1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgIGlmIChcbiAgICAgICAgaXNQbGFpbk9iamVjdChmaXJzdFZhbHVlKSAmJlxuICAgICAgICBpc1BsYWluT2JqZWN0KHNlY29uZFZhbHVlKSAmJlxuICAgICAgICAhKGZpcnN0VmFsdWUgaW5zdGFuY2VvZiBSZWdFeHAgfHwgc2Vjb25kVmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHx8XG4gICAgICAgIEFycmF5LmlzQXJyYXkoZmlyc3RWYWx1ZSkgJiZcbiAgICAgICAgQXJyYXkuaXNBcnJheShzZWNvbmRWYWx1ZSkgJiZcbiAgICAgICAgZmlyc3RWYWx1ZS5sZW5ndGggPT09IHNlY29uZFZhbHVlLmxlbmd0aCB8fFxuICAgICAgICAoXG4gICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgZGV0ZXJtaW5lVHlwZShmaXJzdFZhbHVlKSA9PT0gZGV0ZXJtaW5lVHlwZShzZWNvbmRWYWx1ZSkgJiZcbiAgICAgICAgICAgICAgICBbJ21hcCcsICdzZXQnXS5pbmNsdWRlcyhkZXRlcm1pbmVUeXBlKGZpcnN0VmFsdWUpKVxuICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgKGZpcnN0VmFsdWUgYXMgU2V0PHVua25vd24+KS5zaXplID09PVxuICAgICAgICAgICAgKHNlY29uZFZhbHVlIGFzIFNldDx1bmtub3duPikuc2l6ZVxuICAgICAgICApXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IHByb21pc2VzOiBBcnJheTxQcm9taXNlPGJvb2xlYW4gfCBzdHJpbmc+PiA9IFtdXG4gICAgICAgIGZvciAoY29uc3QgW2ZpcnN0LCBzZWNvbmRdIG9mIFtcbiAgICAgICAgICAgIFtmaXJzdFZhbHVlLCBzZWNvbmRWYWx1ZV0sXG4gICAgICAgICAgICBbc2Vjb25kVmFsdWUsIGZpcnN0VmFsdWVdXG4gICAgICAgIF0pIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0SXNBcnJheTogYm9vbGVhbiA9IEFycmF5LmlzQXJyYXkoZmlyc3QpXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZmlyc3RJc0FycmF5ICYmXG4gICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAhQXJyYXkuaXNBcnJheShzZWNvbmQpIHx8XG4gICAgICAgICAgICAgICAgICAgIChmaXJzdCBhcyBBcnJheTx1bmtub3duPikubGVuZ3RoICE9PVxuICAgICAgICAgICAgICAgICAgICAoc2Vjb25kIGFzIEFycmF5PHVua25vd24+KS5sZW5ndGhcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMucmV0dXJuUmVhc29uSWZOb3RFcXVhbCA/ICcubGVuZ3RoJyA6IGZhbHNlXG5cbiAgICAgICAgICAgIGNvbnN0IGZpcnN0SXNNYXAgPSBpc01hcChmaXJzdClcbiAgICAgICAgICAgIGlmIChmaXJzdElzTWFwICYmICghaXNNYXAoc2Vjb25kKSB8fCBmaXJzdC5zaXplICE9PSBzZWNvbmQuc2l6ZSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMucmV0dXJuUmVhc29uSWZOb3RFcXVhbCA/ICcuc2l6ZScgOiBmYWxzZVxuXG4gICAgICAgICAgICBjb25zdCBmaXJzdElzU2V0ID0gaXNTZXQoZmlyc3QpXG4gICAgICAgICAgICBpZiAoZmlyc3RJc1NldCAmJiAoIWlzU2V0KHNlY29uZCkgfHwgZmlyc3Quc2l6ZSAhPT0gc2Vjb25kLnNpemUpKVxuICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb25zLnJldHVyblJlYXNvbklmTm90RXF1YWwgPyAnLnNpemUnIDogZmFsc2VcblxuICAgICAgICAgICAgaWYgKGZpcnN0SXNBcnJheSkge1xuICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IDBcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGZpcnN0IGFzIEFycmF5PHVua25vd24+KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmRlZXAgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4gfCBzdHJpbmc+IHwgc3RyaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICApID0gZXF1YWxzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWNvbmQgYXMgQXJyYXk8dW5rbm93bj4pW2luZGV4XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Li4ub3B0aW9ucywgZGVlcDogb3B0aW9ucy5kZWVwIC0gMX1cbiAgICAgICAgICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleDogbnVtYmVyID0gaW5kZXhcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGV0ZXJtaW5lUmVzdWx0ID0gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdDogYm9vbGVhbiB8IHN0cmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgKTogYm9vbGVhbiB8IHN0cmluZyA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFske1N0cmluZyhjdXJyZW50SW5kZXgpfV1gICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHsnWyc6ICcnLCAnPic6ICcgJ31bcmVzdWx0WzBdXSA/PyAnLicpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LCAndGhlbidcbiAgICAgICAgICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaCgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCBhcyBQcm9taXNlPGJvb2xlYW4gfCBzdHJpbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKS50aGVuKGRldGVybWluZVJlc3VsdCkpXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGV0ZXJtaW5lUmVzdWx0KHJlc3VsdClcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGluZGV4ICs9IDFcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZpcnN0SXNNYXApIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBmaXJzdClcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGVlcCAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0OiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbiB8IHN0cmluZz4gfCBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICkgPSBlcXVhbHMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlY29uZCBhcyBNYXA8dW5rbm93biwgdW5rbm93bj4pLmdldChrZXkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsuLi5vcHRpb25zLCBkZWVwOiBvcHRpb25zLmRlZXAgLSAxfVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGV0ZXJtaW5lUmVzdWx0ID0gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdDogYm9vbGVhbiB8IHN0cmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgKTogYm9vbGVhbiB8IHN0cmluZyA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGdldCgke3JlcHJlc2VudChrZXkpfSlgICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHsnWyc6ICcnLCAnPic6ICcgJ31bcmVzdWx0WzBdXSA/PyAnLicpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LCAndGhlbidcbiAgICAgICAgICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaCgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCBhcyBQcm9taXNlPGJvb2xlYW4gfCBzdHJpbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKS50aGVuKGRldGVybWluZVJlc3VsdCkpXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGV0ZXJtaW5lUmVzdWx0KHJlc3VsdClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChmaXJzdElzU2V0KSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBmaXJzdClcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGVlcCAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGVxdWFsID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1YlByb21pc2VzOiBBcnJheTxQcm9taXNlPGJvb2xlYW4gfCBzdHJpbmc+PiA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW11cbiAgICAgICAgICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTk9URTogQ2hlY2sgaWYgdGhlaXIgZXhpc3RzIGF0IGxlYXN0IG9uZSBiZWluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVxdWFsbHkuXG4gICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBzZWNvbmRWYWx1ZSBvZiBzZWNvbmQgYXMgU2V0PHVua25vd24+KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0OiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4gfCBzdHJpbmc+IHwgc3RyaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA9IGVxdWFscyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Li4ub3B0aW9ucywgZGVlcDogb3B0aW9ucy5kZWVwIC0gMX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVxdWFsID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJQcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IGFzIFByb21pc2U8Ym9vbGVhbiB8IHN0cmluZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZXRlcm1pbmVSZXN1bHQgPSAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXF1YWw6IGJvb2xlYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICk6IGJvb2xlYW4gfCBzdHJpbmcgPT4gZXF1YWwgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucmV0dXJuUmVhc29uSWZOb3RFcXVhbCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGA+Pj4gey0+ICR7cmVwcmVzZW50KHZhbHVlKX0gbm90IGZvdW5kfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXF1YWwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTk9URTogV2UgZG8gbm90IGhhdmUgdG8gd2FpdCBmb3IgcHJvbWlzZXMgdG8gYmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWQgd2hlbiBvbmUgbWF0Y2ggY291bGQgYmUgZm91bmQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ViUHJvbWlzZXMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2gobmV3IFByb21pc2U8Ym9vbGVhbiB8IHN0cmluZz4oKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlOiAodmFsdWU6IGJvb2xlYW4gfCBzdHJpbmcpID0+IHZvaWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvbWlzZS5hbGw8Ym9vbGVhbiB8IHN0cmluZz4oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJQcm9taXNlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLnRoZW4oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVzdWx0czogQXJyYXk8Ym9vbGVhbiB8IHN0cmluZz4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRldGVybWluZVJlc3VsdChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5zb21lKChyZXN1bHQpID0+IHJlc3VsdClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEbyBub3RoaW5nLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZXRlcm1pbmVSZXN1bHQoZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKFxuICAgICAgICAgICAgICAgICAgICBmaXJzdCBhcyBNYXBwaW5nPHVua25vd24+XG4gICAgICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnByb3BlcnRpZXMgJiYgIW9wdGlvbnMucHJvcGVydGllcy5pbmNsdWRlcyhrZXkpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGRvQnJlYWsgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGV4Y2VwdGlvblByZWZpeCBvZiBvcHRpb25zLmV4Y2VwdGlvblByZWZpeGVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtleS5zdGFydHNXaXRoKGV4Y2VwdGlvblByZWZpeCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb0JyZWFrID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGRvQnJlYWspXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmRlZXAgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4gfCBzdHJpbmc+IHwgc3RyaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICApID0gZXF1YWxzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWNvbmQgYXMgTWFwcGluZzx1bmtub3duPilba2V5XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Li4ub3B0aW9ucywgZGVlcDogb3B0aW9ucy5kZWVwIC0gMX1cbiAgICAgICAgICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRldGVybWluZVJlc3VsdCA9IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IGJvb2xlYW4gfCBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICk6IGJvb2xlYW4gfCBzdHJpbmcgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJyA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeydbJzogJycsICc+JzogJyAnfVtyZXN1bHRbMF1dID8/ICcuJykgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQsICd0aGVuJ1xuICAgICAgICAgICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IGFzIFByb21pc2U8Ym9vbGVhbiB8IHN0cmluZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLnRoZW4oZGV0ZXJtaW5lUmVzdWx0KSlcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZXRlcm1pbmVSZXN1bHQocmVzdWx0KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb21pc2VzLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxib29sZWFuIHwgc3RyaW5nPigoXG4gICAgICAgICAgICAgICAgcmVzb2x2ZTogKHZhbHVlOiBib29sZWFuIHwgc3RyaW5nKSA9PiB2b2lkXG4gICAgICAgICAgICApOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdHM6IEFycmF5PGJvb2xlYW4gfCBzdHJpbmc+KTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0IHx8IHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvIG5vdGhpbmcuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgcmV0dXJuIG9wdGlvbnMucmV0dXJuUmVhc29uSWZOb3RFcXVhbCA/XG4gICAgICAgIGA+Pj4gJHtyZXByZXNlbnQoZmlyc3RWYWx1ZSl9ICE9PSAke3JlcHJlc2VudChzZWNvbmRWYWx1ZSl9YCA6XG4gICAgICAgIGZhbHNlXG59XG4vKipcbiAqIFdyYXBzIGdpdmVuIGRhdGEgc3RydWN0dXJlIGludG8gcHJveGllcyByZWN1cnNpdmVseSB0byBldmFsdWF0ZSBhbmQgcmVzb2x2ZVxuICogZWFjaCBnZXQgcmVxdWVzdCB0byBkYXRhIGhhdmluZyBhbiBvYmplY3Qgd2l0aCBpbmRpY2F0aW5nIGtleXMgYW5kIHJlcGxhY2VzXG4gKiB0aGF0IG9iamVjdCB3aXRoIGNvcnJlc3BvbmRpbmcgZXZhbHVhdGVkIHZhbHVlcy4gQWxsIG5lc3RlZCBvYmplY3RzIGFyZVxuICogd3JhcHBlZCB3aXRoIGEgcHJveHkgdG8gcmVzb2x2ZSBjaGFpbnMgb2YgcmVmZXJlbmNpbmcgZXhwcmVzc2lvbnMgYXMgd2VsbC5cbiAqIEBwYXJhbSBvYmplY3QgLSBHaXZlbiBtYXBwaW5nIHRvIHJlc29sdmUuXG4gKiBAcGFyYW0gZ2l2ZW5PcHRpb25zIC0gT3B0aW9ucyB0byBjb25maWd1cmUgZXZhbHVhdGlvbi5cbiAqIEBwYXJhbSBnaXZlbk9wdGlvbnMuc2NvcGUgLSBTY29wZSB0byB1c2UgZXZhbHVhdGUgYWdhaW4uXG4gKiBAcGFyYW0gZ2l2ZW5PcHRpb25zLnNlbGZSZWZlcmVuY2VOYW1lIC0gTmFtZSB0byB1c2UgZm9yIHJlZmVyZW5jZSB0byBnaXZlblxuICogb2JqZWN0LlxuICogQHBhcmFtIGdpdmVuT3B0aW9ucy5leHByZXNzaW9uSW5kaWNhdG9yS2V5IC0gSW5kaWNhdG9yIHByb3BlcnR5IG5hbWUgdG8gbWFya1xuICogYSB2YWx1ZSB0byBldmFsdWF0ZS5cbiAqIEBwYXJhbSBnaXZlbk9wdGlvbnMuZXhlY3V0aW9uSW5kaWNhdG9yS2V5IC0gSW5kaWNhdG9yIHByb3BlcnR5IG5hbWUgdG8gbWFya1xuICogYSB2YWx1ZSB0byBldmFsdWF0ZS5cbiAqIEByZXR1cm5zIEV2YWx1YXRlZCBnaXZlbiBtYXBwaW5nLlxuICovXG5leHBvcnQgY29uc3QgZXZhbHVhdGVEeW5hbWljRGF0YSA9IDxUeXBlID0gdW5rbm93bj4oXG4gICAgb2JqZWN0OiBudWxsIHwgUmVjdXJzaXZlRXZhbHVhdGVhYmxlPFR5cGU+LFxuICAgIGdpdmVuT3B0aW9uczogUGFydGlhbDxFdmFsdWF0ZUR5bmFtaWNEYXRhT3B0aW9ucz4gPSB7fVxuKTogVHlwZSA9PiB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgc2NvcGU6IHt9LFxuICAgICAgICBzZWxmUmVmZXJlbmNlTmFtZTogJ3NlbGYnLFxuICAgICAgICBleHByZXNzaW9uSW5kaWNhdG9yS2V5OiAnX19ldmFsdWF0ZV9fJyxcbiAgICAgICAgZXhlY3V0aW9uSW5kaWNhdG9yS2V5OiAnX19leGVjdXRlX18nLFxuICAgICAgICAuLi5naXZlbk9wdGlvbnNcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iamVjdCAhPT0gJ29iamVjdCcgfHwgb2JqZWN0ID09PSBudWxsKVxuICAgICAgICByZXR1cm4gb2JqZWN0IGFzIHVua25vd24gYXMgVHlwZVxuXG4gICAgaWYgKCEob3B0aW9ucy5zZWxmUmVmZXJlbmNlTmFtZSBpbiBvcHRpb25zLnNjb3BlKSlcbiAgICAgICAgb3B0aW9ucy5zY29wZVtvcHRpb25zLnNlbGZSZWZlcmVuY2VOYW1lXSA9IG9iamVjdFxuXG4gICAgY29uc3QgaW50ZXJuYWxFdmFsdWF0ZUFuZFRocm93RXJyb3IgPSAoXG4gICAgICAgIGNvZGU6IHN0cmluZywgdHlwZTogc3RyaW5nID0gb3B0aW9ucy5leHByZXNzaW9uSW5kaWNhdG9yS2V5XG4gICAgKTogVHlwZSA9PlxuICAgICAgICBldmFsdWF0ZUFuZFRocm93RXJyb3I8VHlwZT4oXG4gICAgICAgICAgICBjb2RlLCBvcHRpb25zLnNjb3BlLCB0eXBlID09PSBvcHRpb25zLmV4ZWN1dGlvbkluZGljYXRvcktleVxuICAgICAgICApXG5cbiAgICBjb25zdCBhZGRQcm94eVJlY3Vyc2l2ZWx5ID0gKGRhdGE6IHVua25vd24pOiB1bmtub3duID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnIHx8XG4gICAgICAgICAgICBkYXRhID09PSBudWxsIHx8XG4gICAgICAgICAgICB0eXBlb2YgUHJveHkgPT09ICd1bmRlZmluZWQnXG4gICAgICAgIClcbiAgICAgICAgICAgIHJldHVybiBkYXRhXG5cbiAgICAgICAgZm9yIChjb25zdCBba2V5LCBnaXZlblZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkYXRhKSlcbiAgICAgICAgICAgIGlmIChrZXkgIT09ICdfX3RhcmdldF9fJyAmJiBpc09iamVjdChnaXZlblZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlOiB1bmtub3duID0gZ2l2ZW5WYWx1ZVxuXG4gICAgICAgICAgICAgICAgYWRkUHJveHlSZWN1cnNpdmVseSh2YWx1ZSlcbiAgICAgICAgICAgICAgICAvLyBOT1RFOiBXZSBvbmx5IHdyYXAgbmVlZGVkIG9iamVjdHMgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuXG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSwgb3B0aW9ucy5leHByZXNzaW9uSW5kaWNhdG9yS2V5XG4gICAgICAgICAgICAgICAgICAgICkgfHxcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsIG9wdGlvbnMuZXhlY3V0aW9uSW5kaWNhdG9yS2V5XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFja3VwOiBNYXBwaW5nPHVua25vd24+ID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGFzIE1hcHBpbmc8dW5rbm93bj5cbiAgICAgICAgICAgICAgICAgICAgKGRhdGEgYXMgTWFwcGluZzxQcm94eVR5cGU+KVtrZXldID0gbmV3IFByb3h5KFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgYXMgUmVjb3JkPHN0cmluZyB8IHN5bWJvbCwgdW5rbm93bj4sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogUmVjb3JkPHN0cmluZyB8IHN5bWJvbCwgdW5rbm93bj4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogc3RyaW5nIHwgc3ltYm9sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTogdW5rbm93biA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09ICdfX3RhcmdldF9fJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXRcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSAnaGFzT3duUHJvcGVydHknKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldFtrZXldXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PVEU6IFZlcnkgY29tcGxpY2F0ZWQgc2VjdGlvbiwgZG8gb25seVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlcyB3aGlsZSBoYXZpbmcgZ29vZCB0ZXN0cy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB0eXBlIG9mIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZXhwcmVzc2lvbkluZGljYXRvcktleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZXhlY3V0aW9uSW5kaWNhdG9yS2V5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ID09PSB0eXBlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHRhcmdldFtrZXldID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbEV2YWx1YXRlQW5kVGhyb3dFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFtrZXldLCB0eXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRUYXJnZXQ6IHVua25vd24gPSByZXNvbHZlKHRhcmdldClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gJ3RvU3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBNYXBwaW5nPFVua25vd25GdW5jdGlvbj4gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsRXZhbHVhdGVBbmRUaHJvd0Vycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlZFRhcmdldCBhcyBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIGFzIE1hcHBpbmc8VW5rbm93bkZ1bmN0aW9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0W2tleV0uYmluZChyZXN1bHQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxFdmFsdWF0ZUFuZFRocm93RXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVkVGFyZ2V0IGFzIHN0cmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgYXMgUmVjb3JkPHN5bWJvbCwgdW5rbm93bj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRba2V5XSBhcyBudWxsIHwgVW5rbm93bkZ1bmN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApPy5iaW5kKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldIGFzIFVua25vd25GdW5jdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkuYmluZChyZXN1bHQpXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRba2V5XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB0eXBlIG9mIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZXhwcmVzc2lvbkluZGljYXRvcktleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZXhlY3V0aW9uSW5kaWNhdG9yS2V5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jYWxsKHRhcmdldCwgdHlwZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGludGVybmFsRXZhbHVhdGVBbmRUaHJvd0Vycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlZFRhcmdldCBhcyBzdHJpbmcsIHR5cGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIGFzIE1hcHBpbmc8dW5rbm93bj4pW2tleV1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRUYXJnZXQgYXMgTWFwcGluZzx1bmtub3duPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApW2tleV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW5kIG9mIGNvbXBsaWNhdGVkIHN0dWZmLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duS2V5czogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IE1hcHBpbmc8dW5rbm93bj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOiBBcnJheTxzdHJpbmc+ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB0eXBlIG9mIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZXhwcmVzc2lvbkluZGljYXRvcktleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZXhlY3V0aW9uSW5kaWNhdG9yS2V5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jYWxsKHRhcmdldCwgdHlwZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbEV2YWx1YXRlQW5kVGhyb3dFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRbdHlwZV0gYXMgc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGFyZ2V0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKSBhcyBQcm94eVR5cGVcblxuICAgICAgICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgICAgICAgICAgTk9URTogS25vd24gcHJveHkgcG9seWZpbGxzIGRvZXMgbm90IHByb3ZpZGUgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICBcIl9fdGFyZ2V0X19cIiBhcGkuXG4gICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIGlmICghKGRhdGEgYXMgTWFwcGluZzxQcm94eVR5cGU+KVtrZXldLl9fdGFyZ2V0X18pXG4gICAgICAgICAgICAgICAgICAgICAgICAoZGF0YSBhcyBNYXBwaW5nPFByb3h5VHlwZT4pW2tleV0uX190YXJnZXRfXyA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja3VwXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRhXG4gICAgfVxuXG4gICAgY29uc3QgcmVzb2x2ZSA9IChkYXRhOiB1bmtub3duKTogdW5rbm93biA9PiB7XG4gICAgICAgIGlmIChpc09iamVjdChkYXRhKSkge1xuICAgICAgICAgICAgaWYgKGlzUHJveHkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAvLyBOT1RFOiBXZSBoYXZlIHRvIHNraXAgXCJvd25LZXlzXCIgcHJveHkgdHJhcCBoZXJlLlxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdHlwZSBvZiBbXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZXhwcmVzc2lvbkluZGljYXRvcktleSxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5leGVjdXRpb25JbmRpY2F0b3JLZXlcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIHR5cGUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChkYXRhIGFzIE1hcHBpbmc8dW5rbm93bj4pW3R5cGVdXG5cbiAgICAgICAgICAgICAgICBkYXRhID0gZGF0YS5fX3RhcmdldF9fXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKFxuICAgICAgICAgICAgICAgIGRhdGEgYXMgTWFwcGluZzx1bmtub3duPlxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICAgIGlmIChbXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZXhwcmVzc2lvbkluZGljYXRvcktleSxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5leGVjdXRpb25JbmRpY2F0b3JLZXlcbiAgICAgICAgICAgICAgICBdLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBQcm94eSA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbEV2YWx1YXRlQW5kVGhyb3dFcnJvcih2YWx1ZSBhcyBzdHJpbmcpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgKGRhdGEgYXMgTWFwcGluZzx1bmtub3duPilba2V5XSA9IHJlc29sdmUodmFsdWUpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0YVxuICAgIH1cblxuICAgIG9wdGlvbnMuc2NvcGUucmVzb2x2ZSA9IHJlc29sdmVcbiAgICBjb25zdCByZW1vdmVQcm94eVJlY3Vyc2l2ZWx5ID0gKGRhdGE6IHVua25vd24pOiB1bmtub3duID0+IHtcbiAgICAgICAgaWYgKGlzT2JqZWN0KGRhdGEpKVxuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGF0YSkpXG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBrZXkgIT09ICdfX3RhcmdldF9fJyAmJlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgICAgICBbJ2Z1bmN0aW9uJywgJ3VuZGVmaW5lZCddLmluY2x1ZGVzKHR5cGVvZiB2YWx1ZSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0OiB1bmtub3duID1cbiAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZSBhcyB7X190YXJnZXRfXzogdW5rbm93bn0pLl9fdGFyZ2V0X19cbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0YXJnZXQgIT09ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtrZXldID0gdGFyZ2V0XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVByb3h5UmVjdXJzaXZlbHkodmFsdWUpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRhXG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChcbiAgICAgICAgb2JqZWN0LCBvcHRpb25zLmV4cHJlc3Npb25JbmRpY2F0b3JLZXlcbiAgICApKVxuICAgICAgICByZXR1cm4gaW50ZXJuYWxFdmFsdWF0ZUFuZFRocm93RXJyb3Iob2JqZWN0W1xuICAgICAgICAgICAgb3B0aW9ucy5leHByZXNzaW9uSW5kaWNhdG9yS2V5IGFzIGtleW9mIFJlY3Vyc2l2ZUV2YWx1YXRlYWJsZTxUeXBlPlxuICAgICAgICBdKVxuICAgIGVsc2UgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChcbiAgICAgICAgb2JqZWN0LCBvcHRpb25zLmV4ZWN1dGlvbkluZGljYXRvcktleVxuICAgICkpXG4gICAgICAgIHJldHVybiBpbnRlcm5hbEV2YWx1YXRlQW5kVGhyb3dFcnJvcihcbiAgICAgICAgICAgIG9iamVjdFtvcHRpb25zLmV4ZWN1dGlvbkluZGljYXRvcktleSBhc1xuICAgICAgICAgICAgICAgIGtleW9mIFJlY3Vyc2l2ZUV2YWx1YXRlYWJsZTxUeXBlPl0sXG4gICAgICAgICAgICBvcHRpb25zLmV4ZWN1dGlvbkluZGljYXRvcktleVxuICAgICAgICApXG5cbiAgICByZXR1cm4gcmVtb3ZlUHJveHlSZWN1cnNpdmVseShyZXNvbHZlKGFkZFByb3h5UmVjdXJzaXZlbHkob2JqZWN0KSkpIGFzIFR5cGVcbn1cbi8qKlxuICogU2VhcmNoZXMgZm9yIGluZGljYXRpbmcga2V5cyBhbmQgcmVwbGFjZXMgdGhhdCBkYXRhIHdpdGggY29ycmVzcG9uZGluZ1xuICogZXZhbHVhdGVkIGFuZCBwcm9taXNlIHJlc29sdmVkIHZhbHVlLlxuICogQHBhcmFtIGRhdGEgLSBHaXZlbiBtYXBwaW5nIHRvIHJlc29sdmUuXG4gKiBAcGFyYW0gZ2l2ZW5PcHRpb25zIC0gT3B0aW9ucyB0byBjb25maWd1cmUgZXZhbHVhdGlvbi5cbiAqIEBwYXJhbSBnaXZlbk9wdGlvbnMuc2NvcGUgLSBTY29wZSB0byB1c2UgZXZhbHVhdGUgYWdhaW4uXG4gKiBAcGFyYW0gZ2l2ZW5PcHRpb25zLnNlbGZSZWZlcmVuY2VOYW1lIC0gTmFtZSB0byB1c2UgZm9yIHJlZmVyZW5jZSB0byBnaXZlblxuICogb2JqZWN0LlxuICogQHBhcmFtIGdpdmVuT3B0aW9ucy5leHByZXNzaW9uSW5kaWNhdG9yS2V5IC0gSW5kaWNhdG9yIHByb3BlcnR5IG5hbWUgdG8gbWFya1xuICogYSB2YWx1ZSB0byBldmFsdWF0ZS5cbiAqIEBwYXJhbSBnaXZlbk9wdGlvbnMuZXhlY3V0aW9uSW5kaWNhdG9yS2V5IC0gSW5kaWNhdG9yIHByb3BlcnR5IG5hbWUgdG8gbWFya1xuICogYSB2YWx1ZSB0byBldmFsdWF0ZS5cbiAqIEByZXR1cm5zIEV2YWx1YXRlZCBnaXZlbiBtYXBwaW5nLlxuICovXG5leHBvcnQgY29uc3QgZXZhbHVhdGVBc3luY0R5bmFtaWNEYXRhID0gYXN5bmMgPFR5cGUgPSB1bmtub3duPihcbiAgICBkYXRhOiBudWxsIHwgUmVjdXJzaXZlQXN5bmNFdmFsdWF0ZWFibGU8VHlwZT4sXG4gICAgZ2l2ZW5PcHRpb25zOiBQYXJ0aWFsPEV2YWx1YXRlRHluYW1pY0RhdGFPcHRpb25zPiA9IHt9XG4pOiBQcm9taXNlPFR5cGU+ID0+IHtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICBzY29wZToge30sXG4gICAgICAgIHNlbGZSZWZlcmVuY2VOYW1lOiAnc2VsZicsXG4gICAgICAgIGV4cHJlc3Npb25JbmRpY2F0b3JLZXk6ICdfX2F3YWl0X2V2YWx1YXRlX18nLFxuICAgICAgICBleGVjdXRpb25JbmRpY2F0b3JLZXk6ICdfX2F3YWl0X2V4ZWN1dGVfXycsXG4gICAgICAgIC4uLmdpdmVuT3B0aW9uc1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcgfHwgZGF0YSA9PT0gbnVsbClcbiAgICAgICAgcmV0dXJuIGRhdGEgYXMgdW5rbm93biBhcyBUeXBlXG5cbiAgICBpZiAoIShvcHRpb25zLnNlbGZSZWZlcmVuY2VOYW1lIGluIG9wdGlvbnMuc2NvcGUpKVxuICAgICAgICBvcHRpb25zLnNjb3BlW29wdGlvbnMuc2VsZlJlZmVyZW5jZU5hbWVdID0gZGF0YVxuXG4gICAgY29uc3QgcmVzdWx0OiBUeXBlID0gZGF0YSBhcyBUeXBlXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGF0YSkpXG4gICAgICAgIGlmIChbXG4gICAgICAgICAgICBvcHRpb25zLmV4cHJlc3Npb25JbmRpY2F0b3JLZXksIG9wdGlvbnMuZXhlY3V0aW9uSW5kaWNhdG9yS2V5XG4gICAgICAgIF0uaW5jbHVkZXMoa2V5KSlcbiAgICAgICAgICAgIChyZXN1bHQgYXMgTWFwcGluZzx1bmtub3duPilba2V5XSA9IGF3YWl0IGV2YWx1YXRlQW5kVGhyb3dFcnJvcihcbiAgICAgICAgICAgICAgICB2YWx1ZSBhcyBzdHJpbmcsXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5zY29wZSwga2V5ID09PSBvcHRpb25zLmV4ZWN1dGlvbkluZGljYXRvcktleVxuICAgICAgICAgICAgKVxuICAgICAgICBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHZhbHVlKSlcbiAgICAgICAgICAgIGF3YWl0IGV2YWx1YXRlQXN5bmNEeW5hbWljRGF0YSh2YWx1ZSwgb3B0aW9ucylcblxuICAgIHJldHVybiByZXN1bHRcbn1cbi8qKlxuICogUmVtb3ZlcyBwcm9wZXJ0aWVzIGluIG9iamVjdHMgd2hlcmUgYSBkeW5hbWljIGluZGljYXRvciBsaXZlcy5cbiAqIEBwYXJhbSBkYXRhIC0gT2JqZWN0IHRvIHRyYXZlcnNlIHJlY3Vyc2l2ZWx5LlxuICogQHBhcmFtIGV4cHJlc3Npb25JbmRpY2F0b3JzIC0gUHJvcGVydHkga2V5IHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIEdpdmVuIG9iamVjdCB3aXRoIHJlbW92ZWQgcHJvcGVydGllcy5cbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUtleXNJbkV2YWx1YXRpb24gPSA8XG4gICAgVCBleHRlbmRzIE1hcHBpbmc8dW5rbm93bj4gPSBNYXBwaW5nPHVua25vd24+XG4+KFxuICAgICAgICBkYXRhOiBULFxuICAgICAgICBleHByZXNzaW9uSW5kaWNhdG9yczogQXJyYXk8c3RyaW5nPiA9IFsnX19ldmFsdWF0ZV9fJywgJ19fZXhlY3V0ZV9fJ11cbiAgICApOiBUID0+IHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkYXRhKSlcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIWV4cHJlc3Npb25JbmRpY2F0b3JzLmluY2x1ZGVzKGtleSkgJiZcbiAgICAgICAgICAgIGV4cHJlc3Npb25JbmRpY2F0b3JzLnNvbWUoKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4gPT5cbiAgICAgICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGF0YSwgbmFtZSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAgICAgZGVsZXRlIChkYXRhIGFzIHVua25vd24gYXMgTWFwcGluZzx1bmtub3duPilba2V5XVxuICAgICAgICBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHZhbHVlKSlcbiAgICAgICAgICAgIHJlbW92ZUtleXNJbkV2YWx1YXRpb24odmFsdWUsIGV4cHJlc3Npb25JbmRpY2F0b3JzKVxuXG4gICAgcmV0dXJuIGRhdGFcbn1cbi8qKlxuICogRXh0ZW5kcyBnaXZlbiB0YXJnZXQgb2JqZWN0IHdpdGggZ2l2ZW4gc291cmNlcyBvYmplY3QuIEFzIHRhcmdldCBhbmRcbiAqIHNvdXJjZXMgbWFueSBleHBhbmRhYmxlIHR5cGVzIGFyZSBhbGxvd2VkIGJ1dCB0YXJnZXQgYW5kIHNvdXJjZXMgaGF2ZSB0b1xuICogY29tZSBmcm9tIHRoZSBzYW1lIHR5cGUuXG4gKiBAcGFyYW0gdGFyZ2V0T3JEZWVwSW5kaWNhdG9yIC0gTWF5YmUgdGhlIHRhcmdldCBvciBkZWVwIGluZGljYXRvci5cbiAqIEBwYXJhbSB0YXJnZXRPclNvdXJjZSAtIFRhcmdldCBvciBzb3VyY2Ugb2JqZWN0OyBkZXBlbmRpbmcgb24gZmlyc3RcbiAqIGFyZ3VtZW50LlxuICogQHBhcmFtIGFkZGl0aW9uYWxTb3VyY2VzIC0gU291cmNlIG9iamVjdHMgdG8gZXh0ZW5kIGludG8gdGFyZ2V0LlxuICogQHJldHVybnMgUmV0dXJucyBnaXZlbiB0YXJnZXQgZXh0ZW5kZWQgd2l0aCBhbGwgZ2l2ZW4gc291cmNlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IGV4dGVuZCA9IDxUID0gTWFwcGluZzx1bmtub3duPj4oXG4gICAgdGFyZ2V0T3JEZWVwSW5kaWNhdG9yOiAoXG4gICAgICAgIGJvb2xlYW4gfCB0eXBlb2YgSUdOT1JFX05VTExfQU5EX1VOREVGSU5FRF9TWU1CT0wgfCBSZWN1cnNpdmVQYXJ0aWFsPFQ+XG4gICAgKSxcbiAgICB0YXJnZXRPclNvdXJjZT86IG51bGwgfCBSZWN1cnNpdmVQYXJ0aWFsPFQ+LFxuICAgIC4uLmFkZGl0aW9uYWxTb3VyY2VzOiBBcnJheTxSZWN1cnNpdmVQYXJ0aWFsPFQ+PlxuKTogVCA9PiB7XG4gICAgbGV0IGRlZXA6IGJvb2xlYW4gfCB0eXBlb2YgSUdOT1JFX05VTExfQU5EX1VOREVGSU5FRF9TWU1CT0wgPSBmYWxzZVxuICAgIGxldCBzb3VyY2VzOiBBcnJheTxSZWN1cnNpdmVQYXJ0aWFsPFQ+IHwgbnVsbD4gPSBhZGRpdGlvbmFsU291cmNlc1xuICAgIGxldCB0YXJnZXQ6IG51bGwgfCBSZWN1cnNpdmVQYXJ0aWFsPFQ+IHwgdW5kZWZpbmVkXG5cbiAgICBpZiAoXG4gICAgICAgIHRhcmdldE9yRGVlcEluZGljYXRvciA9PT0gSUdOT1JFX05VTExfQU5EX1VOREVGSU5FRF9TWU1CT0wgfHxcbiAgICAgICAgdHlwZW9mIHRhcmdldE9yRGVlcEluZGljYXRvciA9PT0gJ2Jvb2xlYW4nXG4gICAgKSB7XG4gICAgICAgIC8vIEhhbmRsZSBhIGRlZXAgY29weSBzaXR1YXRpb24gYW5kIHNraXAgZGVlcCBpbmRpY2F0b3IgYW5kIHRhcmdldC5cbiAgICAgICAgZGVlcCA9IHRhcmdldE9yRGVlcEluZGljYXRvciBhc1xuICAgICAgICAgICAgYm9vbGVhbiB8IHR5cGVvZiBJR05PUkVfTlVMTF9BTkRfVU5ERUZJTkVEX1NZTUJPTFxuICAgICAgICB0YXJnZXQgPSB0YXJnZXRPclNvdXJjZVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHRhcmdldCA9IHRhcmdldE9yRGVlcEluZGljYXRvclxuICAgICAgICBpZiAoaXNPYmplY3QodGFyZ2V0T3JTb3VyY2UpKVxuICAgICAgICAgICAgc291cmNlcyA9IFt0YXJnZXRPclNvdXJjZSwgLi4uc291cmNlc11cbiAgICAgICAgZWxzZSBpZiAodGFyZ2V0T3JTb3VyY2UgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldE9yU291cmNlXG4gICAgfVxuXG4gICAgY29uc3QgbWVyZ2VWYWx1ZSA9IChcbiAgICAgICAgdGFyZ2V0VmFsdWU6IFZhbHVlT2Y8VD4sIHZhbHVlOiBWYWx1ZU9mPFQ+XG4gICAgKTogVmFsdWVPZjxUPiA9PiB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdGFyZ2V0VmFsdWUpXG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0VmFsdWVcblxuICAgICAgICAvLyBUcmF2ZXJzZSByZWN1cnNpdmVseSBpZiB3ZSdyZSBtZXJnaW5nIHBsYWluIG9iamVjdHMgb3IgbWFwcy5cbiAgICAgICAgaWYgKGRlZXAgJiYgdmFsdWUgJiYgKGlzUGxhaW5PYmplY3QodmFsdWUpIHx8IGlzTWFwKHZhbHVlKSkpIHtcbiAgICAgICAgICAgIGxldCBjbG9uZTogVmFsdWVPZjxUPlxuICAgICAgICAgICAgaWYgKGlzTWFwKHZhbHVlKSlcbiAgICAgICAgICAgICAgICBjbG9uZSA9ICh0YXJnZXRWYWx1ZSAmJiBpc01hcCh0YXJnZXRWYWx1ZSkpID9cbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0VmFsdWUgOlxuICAgICAgICAgICAgICAgICAgICBuZXcgTWFwKCkgYXMgdW5rbm93biBhcyBWYWx1ZU9mPFQ+XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgY2xvbmUgPSAodGFyZ2V0VmFsdWUgJiYgaXNQbGFpbk9iamVjdCh0YXJnZXRWYWx1ZSkpID9cbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0VmFsdWUgOlxuICAgICAgICAgICAgICAgICAgICB7fSBhcyB1bmtub3duIGFzIFZhbHVlT2Y8VD5cblxuICAgICAgICAgICAgcmV0dXJuIGV4dGVuZChkZWVwLCBjbG9uZSBhcyBSZWN1cnNpdmVQYXJ0aWFsPFQ+LCB2YWx1ZSkgYXNcbiAgICAgICAgICAgICAgICBWYWx1ZU9mPFQ+XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWVcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHNvdXJjZSBvZiBzb3VyY2VzKSB7XG4gICAgICAgIGxldCB0YXJnZXRUeXBlOiBzdHJpbmcgPSB0eXBlb2YgdGFyZ2V0XG4gICAgICAgIGxldCBzb3VyY2VUeXBlOiBzdHJpbmcgPSB0eXBlb2Ygc291cmNlXG5cbiAgICAgICAgaWYgKGlzTWFwKHRhcmdldCkpXG4gICAgICAgICAgICB0YXJnZXRUeXBlICs9ICcgTWFwJ1xuICAgICAgICBpZiAoaXNNYXAoc291cmNlKSlcbiAgICAgICAgICAgIHNvdXJjZVR5cGUgKz0gJyBNYXAnXG5cbiAgICAgICAgaWYgKHRhcmdldFR5cGUgPT09IHNvdXJjZVR5cGUgJiYgdGFyZ2V0ICE9PSBzb3VyY2UpXG4gICAgICAgICAgICBpZiAoaXNNYXAodGFyZ2V0KSAmJiBpc01hcChzb3VyY2UpKVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHNvdXJjZSlcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnNldChcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlVmFsdWUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmdldChrZXkpIGFzIFZhbHVlT2Y8VD4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgYXMgVmFsdWVPZjxUPlxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBpc09iamVjdCh0YXJnZXQpICYmICFBcnJheS5pc0FycmF5KHRhcmdldCkgJiZcbiAgICAgICAgICAgICAgICAhKHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyAmJiB0YXJnZXQgaW5zdGFuY2VvZiBCbG9iKSAmJlxuICAgICAgICAgICAgICAgIGlzT2JqZWN0KHNvdXJjZSkgJiYgIUFycmF5LmlzQXJyYXkoc291cmNlKSAmJlxuICAgICAgICAgICAgICAgICEodHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnICYmIHNvdXJjZSBpbnN0YW5jZW9mIEJsb2IpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhzb3VyY2UpKVxuICAgICAgICAgICAgICAgICAgICBpZiAoIShcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZXAgPT09IElHTk9SRV9OVUxMX0FORF9VTkRFRklORURfU1lNQk9MICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBbbnVsbCwgdW5kZWZpbmVkXS5pbmNsdWRlcyh2YWx1ZSBhcyBudWxsKVxuICAgICAgICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W2tleSBhcyBrZXlvZiBUXSA9IG1lcmdlVmFsdWUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W2tleSBhcyBrZXlvZiBUXSBhcyBWYWx1ZU9mPFQ+LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGFzIFZhbHVlT2Y8VD5cbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIHRhcmdldCA9IHNvdXJjZVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0YXJnZXQgPSBzb3VyY2VcbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0IGFzIFRcbn1cbi8qKlxuICogR2VuZXJhdGVzIGEgcHJveHkgaGFuZGxlciB3aGljaCBmb3J3YXJkcyBhbGwgb3BlcmF0aW9ucyB0byBnaXZlbiBvYmplY3RcbiAqIGFzIHRoZXJlIHdvdWxkbid0IGJlIGEgcHJveHkuXG4gKiBAcGFyYW0gdGFyZ2V0IC0gT2JqZWN0IHRvIHByb3h5LlxuICogQHBhcmFtIG1ldGhvZE5hbWVzIC0gTWFwcGluZyBvZiBvcGVyYW5kIG5hbWUgdG8gb2JqZWN0IHNwZWNpZmljIG1ldGhvZFxuICogbmFtZS5cbiAqIEByZXR1cm5zIERldGVybWluZWQgcHJveHkgaGFuZGxlci5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFByb3h5SGFuZGxlciA9IDxUID0gdW5rbm93bj4oXG4gICAgdGFyZ2V0OiBULCBtZXRob2ROYW1lczogTWFwcGluZyA9IHt9XG4pOiBQcm94eUhhbmRsZXI8VD4gPT4ge1xuICAgIG1ldGhvZE5hbWVzID0ge1xuICAgICAgICBkZWxldGU6ICdbXScsXG4gICAgICAgIGdldDogJ1tdJyxcbiAgICAgICAgaGFzOiAnW10nLFxuICAgICAgICBzZXQ6ICdbXScsXG4gICAgICAgIC4uLm1ldGhvZE5hbWVzXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgZGVsZXRlUHJvcGVydHk6IChfdGFyZ2V0T2JqZWN0OiBULCBrZXk6IHN0cmluZyB8IHN5bWJvbCk6IGJvb2xlYW4gPT4ge1xuICAgICAgICAgICAgaWYgKG1ldGhvZE5hbWVzLmRlbGV0ZSA9PT0gJ1tdJyAmJiB0eXBlb2Yga2V5ID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgICAgICBkZWxldGUgdGFyZ2V0W2tleSBhcyBrZXlvZiBUXVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFttZXRob2ROYW1lcy5kZWxldGUgYXMga2V5b2YgVF0gYXNcbiAgICAgICAgICAgICAgICAgICAgICAgIHVua25vd24gYXNcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXk6IHN0cmluZyB8IHN5bWJvbCkgPT4gYm9vbGVhblxuICAgICAgICAgICAgICAgICkoa2V5KVxuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBnZXQ6IChfdGFyZ2V0T2JqZWN0OiBULCBrZXk6IHN0cmluZyB8IHN5bWJvbCk6IHVua25vd24gPT4ge1xuICAgICAgICAgICAgaWYgKG1ldGhvZE5hbWVzLmdldCA9PT0gJ1tdJyAmJiB0eXBlb2Yga2V5ID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0W2tleSBhcyBrZXlvZiBUXVxuXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHRhcmdldFttZXRob2ROYW1lcy5nZXQgYXMga2V5b2YgVF0gYXNcbiAgICAgICAgICAgICAgICAgICAgdW5rbm93biBhc1xuICAgICAgICAgICAgICAgICAgICAoa2V5OiBzdHJpbmcgfCBzeW1ib2wpID0+IHVua25vd25cbiAgICAgICAgICAgICkoa2V5KVxuICAgICAgICB9LFxuICAgICAgICBoYXM6IChfdGFyZ2V0T2JqZWN0OiBULCBrZXk6IHN0cmluZyB8IHN5bWJvbCk6IGJvb2xlYW4gPT4ge1xuICAgICAgICAgICAgaWYgKG1ldGhvZE5hbWVzLmhhcyA9PT0gJ1tdJylcbiAgICAgICAgICAgICAgICByZXR1cm4ga2V5IGluICh0YXJnZXQgYXMgb2JqZWN0KVxuXG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHRhcmdldFttZXRob2ROYW1lcy5oYXMgYXMga2V5b2YgVF0gYXNcbiAgICAgICAgICAgICAgICAgICAgdW5rbm93biBhc1xuICAgICAgICAgICAgICAgICAgICAoa2V5OiBzdHJpbmcgfCBzeW1ib2wpID0+IGJvb2xlYW5cbiAgICAgICAgICAgICkoa2V5KVxuICAgICAgICB9LFxuICAgICAgICBzZXQ6IChcbiAgICAgICAgICAgIF90YXJnZXRPYmplY3Q6IFQsIGtleTogc3RyaW5nIHwgc3ltYm9sLCB2YWx1ZTogdW5rbm93blxuICAgICAgICApOiBib29sZWFuID0+IHtcbiAgICAgICAgICAgIGlmIChtZXRob2ROYW1lcy5zZXQgPT09ICdbXScgJiYgdHlwZW9mIGtleSA9PT0gJ3N0cmluZycpXG4gICAgICAgICAgICAgICAgdGFyZ2V0W2tleSBhcyBrZXlvZiBUXSA9IHZhbHVlIGFzIFRba2V5b2YgVF1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gKHRhcmdldFttZXRob2ROYW1lcy5zZXQgYXMga2V5b2YgVF0gYXNcbiAgICAgICAgICAgICAgICAgICAgICAgIHVua25vd24gYXNcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXk6IHN0cmluZyB8IHN5bWJvbCwgdmFsdWU6IHVua25vd24pID0+IGJvb2xlYW5cbiAgICAgICAgICAgICAgICApKGtleSwgdmFsdWUpXG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICB9XG59XG4vKipcbiAqIFNsaWNlcyBhbGwgcHJvcGVydGllcyBmcm9tIGdpdmVuIG9iamVjdCB3aGljaCBkb2VzIG5vdCBtYXRjaCBwcm92aWRlZFxuICogb2JqZWN0IG1hc2suIEl0ZW1zIGNhbiBiZSBleHBsaWNpdGx5IHdoaXRlbGlzdGVkIHZpYSBcImluY2x1ZGVcIiBtYXNrXG4gKiBjb25maWd1cmF0aW9uIG9yIGJsYWNrIGxpc3RlZCB2aWEgXCJleGNsdWRlXCIgbWFzayBjb25maWd1cmF0aW9uLlxuICogQHBhcmFtIG9iamVjdCAtIE9iamVjdCB0byBzbGljZS5cbiAqIEBwYXJhbSBtYXNrQ29uZmlndXJhdGlvbiAtIE1hc2sgY29uZmlndXJhdGlvbi5cbiAqIEByZXR1cm5zIEdpdmVuIGJ1dCBzbGljZWQgb2JqZWN0LiBJZiAobmVzdGVkKSBvYmplY3Qgd2lsbCBiZSBtb2RpZmllZCBhXG4gKiBmbGF0IGNvcHkgb2YgdGhhdCBvYmplY3Qgd2lsbCBiZSByZXR1cm5lZC5cbiAqL1xuZXhwb3J0IGNvbnN0IG1hc2sgPSA8VHlwZSBleHRlbmRzIE1hcHBpbmc8dW5rbm93bj4gPSBNYXBwaW5nPHVua25vd24+PihcbiAgICBvYmplY3Q6IFR5cGUsIG1hc2tDb25maWd1cmF0aW9uOiBPYmplY3RNYXNrQ29uZmlndXJhdGlvblxuKTogUmVjdXJzaXZlUGFydGlhbDxUeXBlPiA9PiB7XG4gICAgbWFza0NvbmZpZ3VyYXRpb24gPSB7ZXhjbHVkZTogZmFsc2UsIGluY2x1ZGU6IHRydWUsIC4uLm1hc2tDb25maWd1cmF0aW9ufVxuXG4gICAgaWYgKFxuICAgICAgICBtYXNrQ29uZmlndXJhdGlvbi5leGNsdWRlID09PSB0cnVlIHx8XG4gICAgICAgIEFycmF5LmlzQXJyYXkobWFza0NvbmZpZ3VyYXRpb24uZXhjbHVkZSkgJiZcbiAgICAgICAgbWFza0NvbmZpZ3VyYXRpb24uZXhjbHVkZS5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgbWFza0NvbmZpZ3VyYXRpb24uaW5jbHVkZSA9PT0gZmFsc2UgfHxcbiAgICAgICAgdHlwZW9mIG9iamVjdCAhPT0gJ29iamVjdCdcbiAgICApXG4gICAgICAgIHJldHVybiB7fVxuXG4gICAgY29uc3QgZXhjbHVkZTogTm9ybWFsaXplZE9iamVjdE1hc2sgPVxuICAgICAgICBBcnJheS5pc0FycmF5KG1hc2tDb25maWd1cmF0aW9uLmV4Y2x1ZGUpID9cbiAgICAgICAgICAgIG1hc2tDb25maWd1cmF0aW9uLmV4Y2x1ZGUucmVkdWNlKFxuICAgICAgICAgICAgICAgIChtYXNrLCBrZXkpID0+ICh7Li4ubWFzaywgW2tleV06IHRydWV9KSxcbiAgICAgICAgICAgICAgICB7fVxuICAgICAgICAgICAgKSA6XG4gICAgICAgICAgICBtYXNrQ29uZmlndXJhdGlvbi5leGNsdWRlIGFzIE5vcm1hbGl6ZWRPYmplY3RNYXNrXG4gICAgY29uc3QgaW5jbHVkZTogTm9ybWFsaXplZE9iamVjdE1hc2sgPVxuICAgICAgICBBcnJheS5pc0FycmF5KG1hc2tDb25maWd1cmF0aW9uLmluY2x1ZGUpID9cbiAgICAgICAgICAgIG1hc2tDb25maWd1cmF0aW9uLmluY2x1ZGUucmVkdWNlKFxuICAgICAgICAgICAgICAgIChtYXNrLCBrZXkpID0+ICh7Li4ubWFzaywgW2tleV06IHRydWV9KSxcbiAgICAgICAgICAgICAgICB7fVxuICAgICAgICAgICAgKSA6XG4gICAgICAgICAgICBtYXNrQ29uZmlndXJhdGlvbi5pbmNsdWRlIGFzIE5vcm1hbGl6ZWRPYmplY3RNYXNrXG5cbiAgICBsZXQgcmVzdWx0OiBQYXJ0aWFsPFR5cGU+ID0ge31cbiAgICBpZiAoaXNQbGFpbk9iamVjdChpbmNsdWRlKSkge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhpbmNsdWRlKSlcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpKVxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2tleSBhcyBrZXlvZiBUeXBlXSA9IG9iamVjdFtrZXkgYXMga2V5b2YgVHlwZV1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNQbGFpbk9iamVjdCh2YWx1ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICApICYmXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBvYmplY3Rba2V5IGFzIGtleW9mIFR5cGVdID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdCBhcyBNYXBwaW5nPE1hcHBpbmc8dW5rbm93bj4+KVtrZXldID0gbWFzayhcbiAgICAgICAgICAgICAgICAgICAgICAgIChvYmplY3QgYXMgTWFwcGluZzxNYXBwaW5nPHVua25vd24+Pilba2V5XSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtpbmNsdWRlOiB2YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgIH0gZWxzZVxuICAgICAgICAvLyBJbiB0aGlzIGJyYW5jaCBcIm1hc2suaW5jbHVkZSA9PT0gdHJ1ZVwiIGhvbGRzLlxuICAgICAgICByZXN1bHQgPSBvYmplY3RcblxuICAgIGlmIChpc1BsYWluT2JqZWN0KGV4Y2x1ZGUpKSB7XG4gICAgICAgIGxldCB1c2VDb3B5ID0gZmFsc2VcbiAgICAgICAgY29uc3QgY29weTogUmVjdXJzaXZlUGFydGlhbDxUeXBlPiA9IHsuLi5yZXN1bHR9XG5cbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZXhjbHVkZSkpXG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNvcHksIGtleSkpXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHVzZUNvcHkgPSB0cnVlXG5cbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGNvcHlba2V5IGFzIGtleW9mIFR5cGVdXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNQbGFpbk9iamVjdCh2YWx1ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICApICYmXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiBjb3B5W2tleSBhcyBrZXlvZiBUeXBlXSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudDogVmFsdWVPZjxUeXBlPiA9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb3B5W2tleSBhcyBrZXlvZiBUeXBlXSBhcyBWYWx1ZU9mPFR5cGU+XG5cbiAgICAgICAgICAgICAgICAgICAgOyhjb3B5IGFzIE1hcHBpbmc8TWFwcGluZzx1bmtub3duPj4pW2tleV0gPSBtYXNrKFxuICAgICAgICAgICAgICAgICAgICAgICAgKGNvcHkgYXMgTWFwcGluZzxNYXBwaW5nPHVua25vd24+Pilba2V5XSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtleGNsdWRlOiB2YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlba2V5IGFzIGtleW9mIFR5cGVdIGFzIFZhbHVlT2Y8VHlwZT4gIT09XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUNvcHkgPSB0cnVlXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgIGlmICh1c2VDb3B5KVxuICAgICAgICAgICAgcmVzdWx0ID0gY29weVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRcbn1cbi8qKlxuICogTW9kaWZpZXMgZ2l2ZW4gdGFyZ2V0IGNvcnJlc3BvbmRpbmcgdG8gZ2l2ZW4gc291cmNlIGFuZCByZW1vdmVzIHNvdXJjZVxuICogbW9kaWZpY2F0aW9uIGluZm9zLlxuICogQHBhcmFtIHRhcmdldCAtIE9iamVjdCB0byBtb2RpZnkuXG4gKiBAcGFyYW0gc291cmNlIC0gU291cmNlIG9iamVjdCB0byBsb2FkIG1vZGlmaWNhdGlvbnMgZnJvbS5cbiAqIEBwYXJhbSByZW1vdmVJbmRpY2F0b3JLZXkgLSBJbmRpY2F0b3IgcHJvcGVydHkgbmFtZSBvciB2YWx1ZSB0byBtYXJrIGFcbiAqIHZhbHVlIHRvIHJlbW92ZSBmcm9tIG9iamVjdCBvciBsaXN0LlxuICogQHBhcmFtIHByZXBlbmRJbmRpY2F0b3JLZXkgLSBJbmRpY2F0b3IgcHJvcGVydHkgbmFtZSB0byBtYXJrIGEgdmFsdWUgdG9cbiAqIHByZXBlbmQgdG8gdGFyZ2V0IGxpc3QuXG4gKiBAcGFyYW0gYXBwZW5kSW5kaWNhdG9yS2V5IC0gSW5kaWNhdG9yIHByb3BlcnR5IG5hbWUgdG8gbWFyayBhIHZhbHVlIHRvXG4gKiBhcHBlbmQgdG8gdGFyZ2V0IGxpc3QuXG4gKiBAcGFyYW0gcG9zaXRpb25QcmVmaXggLSBJbmRpY2F0ZXMgYSBwcmVmaXggdG8gdXNlIGEgdmFsdWUgb24gZ2l2ZW5cbiAqIHBvc2l0aW9uIHRvIGFkZCBvciByZW1vdmUuXG4gKiBAcGFyYW0gcG9zaXRpb25TdWZmaXggLSBJbmRpY2F0ZXMgYSBzdWZmaXggdG8gdXNlIGEgdmFsdWUgb24gZ2l2ZW5cbiAqIHBvc2l0aW9uIHRvIGFkZCBvciByZW1vdmUuXG4gKiBAcGFyYW0gcGFyZW50U291cmNlIC0gU291cmNlIGNvbnRleHQgdG8gcmVtb3ZlIG1vZGlmaWNhdGlvbiBpbmZvIGZyb21cbiAqICh1c3VhbGx5IG9ubHkgbmVlZGVkIGludGVybmFsbHkpLlxuICogQHBhcmFtIHBhcmVudEtleSAtIFNvdXJjZSBrZXkgaW4gZ2l2ZW4gc291cmNlIGNvbnRleHQgdG8gcmVtb3ZlXG4gKiBtb2RpZmljYXRpb24gaW5mbyBmcm9tICh1c3VhbGx5IG9ubHkgbmVlZGVkIGludGVybmFsbHkpLlxuICogQHJldHVybnMgR2l2ZW4gdGFyZ2V0IG1vZGlmaWVkIHdpdGggZ2l2ZW4gc291cmNlLlxuICovXG5leHBvcnQgY29uc3QgbW9kaWZ5T2JqZWN0ID0gPFQgPSB1bmtub3duPihcbiAgICB0YXJnZXQ6IFQsXG4gICAgc291cmNlOiB1bmtub3duLFxuICAgIHJlbW92ZUluZGljYXRvcktleSA9ICdfX3JlbW92ZV9fJyxcbiAgICBwcmVwZW5kSW5kaWNhdG9yS2V5ID0gJ19fcHJlcGVuZF9fJyxcbiAgICBhcHBlbmRJbmRpY2F0b3JLZXkgPSAnX19hcHBlbmRfXycsXG4gICAgcG9zaXRpb25QcmVmaXggPSAnX18nLFxuICAgIHBvc2l0aW9uU3VmZml4ID0gJ19fJyxcbiAgICBwYXJlbnRTb3VyY2U6IHVua25vd24gPSBudWxsLFxuICAgIHBhcmVudEtleTogdW5rbm93biA9IG51bGxcbik6IFQgPT4ge1xuICAgIGlmIChpc01hcChzb3VyY2UpICYmIGlzTWFwKHRhcmdldCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2Ygc291cmNlKVxuICAgICAgICAgICAgaWYgKHRhcmdldC5oYXMoa2V5KSlcbiAgICAgICAgICAgICAgICBtb2RpZnlPYmplY3QoXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5nZXQoa2V5KSBhcyBWYWx1ZU9mPFQ+LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSBhcyBNYXA8dW5rbm93biwgdW5rbm93bj4gfCBNYXBwaW5nPHVua25vd24+IHwgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlSW5kaWNhdG9yS2V5LFxuICAgICAgICAgICAgICAgICAgICBwcmVwZW5kSW5kaWNhdG9yS2V5LFxuICAgICAgICAgICAgICAgICAgICBhcHBlbmRJbmRpY2F0b3JLZXksXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uUHJlZml4LFxuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvblN1ZmZpeCxcbiAgICAgICAgICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgICAgICAgICBrZXlcbiAgICAgICAgICAgICAgICApXG4gICAgfSBlbHNlIGlmIChpc09iamVjdChzb3VyY2UpICYmIGlzT2JqZWN0KHRhcmdldCkpXG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgc291cmNlVmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHNvdXJjZSkpIHtcbiAgICAgICAgICAgIGxldCBpbmRleCA9IE5hTlxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkodGFyZ2V0KSAmJlxuICAgICAgICAgICAgICAgIGtleS5zdGFydHNXaXRoKHBvc2l0aW9uUHJlZml4KSAmJlxuICAgICAgICAgICAgICAgIGtleS5lbmRzV2l0aChwb3NpdGlvblN1ZmZpeClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gcGFyc2VJbnQoXG4gICAgICAgICAgICAgICAgICAgIGtleS5zdWJzdHJpbmcoXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvblByZWZpeC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXkubGVuZ3RoIC1cbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uU3VmZml4Lmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAxMFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRhcmdldC5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgIGluZGV4ID0gTmFOXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBbcmVtb3ZlSW5kaWNhdG9yS2V5LCBwcmVwZW5kSW5kaWNhdG9yS2V5LCBhcHBlbmRJbmRpY2F0b3JLZXldXG4gICAgICAgICAgICAgICAgICAgIC5pbmNsdWRlcyhrZXkpIHx8XG4gICAgICAgICAgICAgICAgIWlzTmFOKGluZGV4KVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0KSlcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gcmVtb3ZlSW5kaWNhdG9yS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZXM6IEFycmF5PHVua25vd24+ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoW10gYXMgQXJyYXk8dW5rbm93bj4pLmNvbmNhdChzb3VyY2VWYWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5zdGFydHNXaXRoKHBvc2l0aW9uUHJlZml4KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5lbmRzV2l0aChwb3NpdGlvblN1ZmZpeClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5zcGxpY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUludChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5zdWJzdHJpbmcoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uUHJlZml4Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUubGVuZ3RoIC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25TdWZmaXgubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRhcmdldC5pbmNsdWRlcyh2YWx1ZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5zcGxpY2UodGFyZ2V0LmluZGV4T2YodmFsdWUpLCAxKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIDwgdGFyZ2V0Lmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnNwbGljZSh2YWx1ZSwgMSlcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09IGFwcGVuZEluZGljYXRvcktleSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldC5jb25jYXQoc291cmNlVmFsdWUpIGFzIHVua25vd24gYXMgVFxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChrZXkgPT09IHByZXBlbmRJbmRpY2F0b3JLZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSAoW10gYXMgQXJyYXk8dW5rbm93bj4pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChzb3VyY2VWYWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KHRhcmdldCkgYXMgdW5rbm93biBhcyBUXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzT2JqZWN0KHRhcmdldFtpbmRleF0pICYmIGlzT2JqZWN0KHNvdXJjZVZhbHVlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmeU9iamVjdChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W2luZGV4XSBhcyBSZWN1cnNpdmVQYXJ0aWFsPFZhbHVlT2Y8VD4+LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VWYWx1ZSBhcyBSZWN1cnNpdmVQYXJ0aWFsPFZhbHVlT2Y8VD4+LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVJbmRpY2F0b3JLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXBlbmRJbmRpY2F0b3JLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZEluZGljYXRvcktleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25QcmVmaXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uU3VmZml4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRbaW5kZXhdIGFzIFJlY3Vyc2l2ZVBhcnRpYWw8VmFsdWVPZjxUPj4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlVmFsdWUgYXMgUmVjdXJzaXZlUGFydGlhbDxWYWx1ZU9mPFQ+PlxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRbaW5kZXhdID0gc291cmNlVmFsdWUgYXMgVmFsdWVPZjxUPlxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gcmVtb3ZlSW5kaWNhdG9yS2V5KVxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIChbXSBhcyBBcnJheTx1bmtub3duPikuY29uY2F0KFxuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlVmFsdWVcbiAgICAgICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQsIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCBhcyB1bmtub3duIGFzIE1hcHBpbmc8dW5rbm93bj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApW3ZhbHVlXVxuICAgICAgICAgICAgICAgIGRlbGV0ZSBzb3VyY2Vba2V5XVxuXG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudFNvdXJjZSAmJiB0eXBlb2YgcGFyZW50S2V5ID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIChcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFNvdXJjZSBhcyBNYXBwaW5nPHVua25vd24+XG4gICAgICAgICAgICAgICAgICAgIClbcGFyZW50S2V5XVxuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICB0YXJnZXQgIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGFyZ2V0LCBrZXkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKHRhcmdldCBhcyB1bmtub3duIGFzIE1hcHBpbmc8dW5rbm93bj4pW2tleV0gPVxuICAgICAgICAgICAgICAgICAgICBtb2RpZnlPYmplY3QoXG4gICAgICAgICAgICAgICAgICAgICAgICAodGFyZ2V0IGFzIHVua25vd24gYXMgTWFwcGluZzxWYWx1ZU9mPFQ+Pilba2V5XSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlSW5kaWNhdG9yS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlcGVuZEluZGljYXRvcktleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZEluZGljYXRvcktleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uUHJlZml4LFxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25TdWZmaXgsXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0XG59XG4vKipcbiAqIFJlbW92ZXMgZ2l2ZW4ga2V5IGZyb20gZ2l2ZW4gb2JqZWN0IHJlY3Vyc2l2ZWx5LlxuICogQHBhcmFtIG9iamVjdCAtIE9iamVjdCB0byBwcm9jZXNzLlxuICogQHBhcmFtIGtleXMgLSBMaXN0IG9mIGtleXMgdG8gcmVtb3ZlLlxuICogQHJldHVybnMgUHJvY2Vzc2VkIGdpdmVuIG9iamVjdC5cbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUtleVByZWZpeGVzID0gPFQ+KFxuICAgIG9iamVjdDogVCwga2V5czogQXJyYXk8c3RyaW5nPiB8IHN0cmluZyA9ICcjJ1xuKTogVCA9PiB7XG4gICAgY29uc3QgcmVzb2x2ZWRLZXlzOiBBcnJheTxzdHJpbmc+ID0gKFtdIGFzIEFycmF5PHN0cmluZz4pLmNvbmNhdChrZXlzKVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xuICAgICAgICBsZXQgaW5kZXggPSAwXG4gICAgICAgIGZvciAoY29uc3Qgc3ViT2JqZWN0IG9mIG9iamVjdC5zbGljZSgpKSB7XG4gICAgICAgICAgICBsZXQgc2tpcCA9IGZhbHNlXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN1Yk9iamVjdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiByZXNvbHZlZEtleXMpXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdWJPYmplY3Quc3RhcnRzV2l0aChgJHtrZXl9OmApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAob2JqZWN0IGFzIEFycmF5PHN0cmluZz4pLnNwbGljZShpbmRleCwgMSlcblxuICAgICAgICAgICAgICAgICAgICAgICAgc2tpcCA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChza2lwKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAob2JqZWN0IGFzIEFycmF5PHVua25vd24+KVtpbmRleF0gPVxuICAgICAgICAgICAgICAgIHJlbW92ZUtleVByZWZpeGVzKHN1Yk9iamVjdCwgcmVzb2x2ZWRLZXlzKVxuXG4gICAgICAgICAgICBpbmRleCArPSAxXG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzU2V0KG9iamVjdCkpXG4gICAgICAgIGZvciAoY29uc3Qgc3ViT2JqZWN0IG9mIG5ldyBTZXQob2JqZWN0KSkge1xuICAgICAgICAgICAgbGV0IHNraXAgPSBmYWxzZVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN1Yk9iamVjdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiByZXNvbHZlZEtleXMpXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdWJPYmplY3Quc3RhcnRzV2l0aChgJHtrZXl9OmApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuZGVsZXRlKHN1Yk9iamVjdClcbiAgICAgICAgICAgICAgICAgICAgICAgIHNraXAgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoc2tpcClcbiAgICAgICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVtb3ZlS2V5UHJlZml4ZXMoc3ViT2JqZWN0LCByZXNvbHZlZEtleXMpXG4gICAgICAgIH1cbiAgICBlbHNlIGlmIChpc01hcChvYmplY3QpKVxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHN1Yk9iamVjdF0gb2YgbmV3IE1hcChvYmplY3QpKSB7XG4gICAgICAgICAgICBsZXQgc2tpcCA9IGZhbHNlXG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Yga2V5ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcmVzb2x2ZWRLZXkgb2YgcmVzb2x2ZWRLZXlzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVzY2FwZWRLZXkgPSBlc2NhcGVSZWd1bGFyRXhwcmVzc2lvbnMocmVzb2x2ZWRLZXkpXG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXcgUmVnRXhwKGBeJHtlc2NhcGVkS2V5fVswLTldKiRgKS50ZXN0KGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5kZWxldGUoa2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgc2tpcCA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoc2tpcClcbiAgICAgICAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgb2JqZWN0LnNldChrZXksIHJlbW92ZUtleVByZWZpeGVzKHN1Yk9iamVjdCwgcmVzb2x2ZWRLZXlzKSlcbiAgICAgICAgfVxuICAgIGVsc2UgaWYgKGlzT2JqZWN0KG9iamVjdCkpXG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICB7fSwgb2JqZWN0XG4gICAgICAgICkpKSB7XG4gICAgICAgICAgICBsZXQgc2tpcCA9IGZhbHNlXG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgcmVzb2x2ZWRLZXkgb2YgcmVzb2x2ZWRLZXlzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXNjYXBlZEtleTogc3RyaW5nID0gZXNjYXBlUmVndWxhckV4cHJlc3Npb25zKHJlc29sdmVkS2V5KVxuXG4gICAgICAgICAgICAgICAgaWYgKG5ldyBSZWdFeHAoYF4ke2VzY2FwZWRLZXl9WzAtOV0qJGApLnRlc3Qoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgKG9iamVjdCBhcyB1bmtub3duIGFzIE1hcHBpbmc8dW5rbm93bj4pW2tleV1cbiAgICAgICAgICAgICAgICAgICAgc2tpcCA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChza2lwKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlXG5cbiAgICAgICAgICAgIDsob2JqZWN0IGFzIHVua25vd24gYXMgTWFwcGluZzx1bmtub3duPilba2V5XSA9XG4gICAgICAgICAgICAgICAgcmVtb3ZlS2V5UHJlZml4ZXModmFsdWUsIHJlc29sdmVkS2V5cylcbiAgICAgICAgfVxuXG4gICAgcmV0dXJuIG9iamVjdFxufVxuLyoqXG4gKiBSZXByZXNlbnRzIGdpdmVuIG9iamVjdCBhcyBmb3JtYXR0ZWQgc3RyaW5nLlxuICogQHBhcmFtIG9iamVjdCAtIE9iamVjdCB0byByZXByZXNlbnQuXG4gKiBAcGFyYW0gbWF4aW11bUxlbmd0aE9mTGlzdHMgLSBNYXhpbXVtIG51bWJlciBvZiBhcnJheSBpdGVtIHRvIHJlbmRlci5cbiAqIEBwYXJhbSBpbmRlbnRpb24gLSBTdHJpbmcgKHVzdWFsbHkgd2hpdGVzcGFjZXMpIHRvIHVzZSBhcyBpbmRlbnRpb24uXG4gKiBAcGFyYW0gaW5pdGlhbEluZGVudGlvbiAtIFN0cmluZyAodXN1YWxseSB3aGl0ZXNwYWNlcykgdG8gdXNlIGFzXG4gKiBhZGRpdGlvbmFsIGluZGVudGlvbiBmb3IgdGhlIGZpcnN0IG9iamVjdCB0cmF2ZXJzaW5nIGxldmVsLlxuICogQHBhcmFtIG1heGltdW1OdW1iZXJPZkxldmVsc1JlYWNoZWRJZGVudGlmaWVyIC0gUmVwbGFjZW1lbnQgZm9yIG9iamVjdHNcbiAqIHdoaWNoIGFyZSBvdXQgb2Ygc3BlY2lmaWVkIGJvdW5kcyB0byB0cmF2ZXJzZS5cbiAqIEBwYXJhbSBudW1iZXJPZkxldmVscyAtIFNwZWNpZmllcyBudW1iZXIgb2YgbGV2ZWxzIHRvIHRyYXZlcnNlIGdpdmVuXG4gKiBkYXRhIHN0cnVjdHVyZS5cbiAqIEByZXR1cm5zIFJlcHJlc2VudGF0aW9uIHN0cmluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IHJlcHJlc2VudCA9IChcbiAgICBvYmplY3Q6IHVua25vd24sXG4gICAgbWF4aW11bUxlbmd0aE9mTGlzdHMgPSAzMCxcbiAgICBpbmRlbnRpb24gPSAnICAgICcsXG4gICAgaW5pdGlhbEluZGVudGlvbiA9ICcnLFxuICAgIG1heGltdW1OdW1iZXJPZkxldmVsc1JlYWNoZWRJZGVudGlmaWVyOiBudW1iZXIgfCBzdHJpbmcgPVxuICAgICdfX21heGltdW1fbnVtYmVyX29mX2xldmVsc19yZWFjaGVkX18nLFxuICAgIG51bWJlck9mTGV2ZWxzID0gOFxuKTogc3RyaW5nID0+IHtcbiAgICBpZiAobnVtYmVyT2ZMZXZlbHMgPT09IDApXG4gICAgICAgIHJldHVybiBTdHJpbmcobWF4aW11bU51bWJlck9mTGV2ZWxzUmVhY2hlZElkZW50aWZpZXIpXG5cbiAgICBpZiAob2JqZWN0ID09PSBudWxsKVxuICAgICAgICByZXR1cm4gJ251bGwnXG5cbiAgICBpZiAob2JqZWN0ID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiAndW5kZWZpbmVkJ1xuXG4gICAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdzdHJpbmcnKVxuICAgICAgICByZXR1cm4gYFwiJHtvYmplY3QucmVwbGFjZSgvXFxuL2csIGBcXG4ke2luaXRpYWxJbmRlbnRpb259YCl9XCJgXG5cbiAgICBpZiAoaXNOdW1lcmljKG9iamVjdCkgfHwgdHlwZW9mIG9iamVjdCA9PT0gJ2Jvb2xlYW4nKVxuICAgICAgICByZXR1cm4gU3RyaW5nKG9iamVjdClcblxuICAgIGlmIChvYmplY3QgaW5zdGFuY2VvZiBEYXRlKVxuICAgICAgICByZXR1cm4gb2JqZWN0LnRvSVNPU3RyaW5nKClcblxuICAgIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9ICdbJ1xuXG4gICAgICAgIGxldCBmaXJzdFNlZW4gPSBmYWxzZVxuICAgICAgICBsZXQgY291bnRlciA9IDFcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIG9iamVjdCkge1xuICAgICAgICAgICAgaWYgKGNvdW50ZXIgPiBtYXhpbXVtTGVuZ3RoT2ZMaXN0cykge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBgXFxuJHtpbml0aWFsSW5kZW50aW9ufS4uLmBcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZmlyc3RTZWVuKVxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnLCdcblxuICAgICAgICAgICAgcmVzdWx0ICs9XG4gICAgICAgICAgICAgICAgYFxcbiR7aW5pdGlhbEluZGVudGlvbn0ke2luZGVudGlvbn1gICtcbiAgICAgICAgICAgICAgICByZXByZXNlbnQoXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIG1heGltdW1MZW5ndGhPZkxpc3RzLFxuICAgICAgICAgICAgICAgICAgICBpbmRlbnRpb24sXG4gICAgICAgICAgICAgICAgICAgIGAke2luaXRpYWxJbmRlbnRpb259JHtpbmRlbnRpb259YCxcbiAgICAgICAgICAgICAgICAgICAgbWF4aW11bU51bWJlck9mTGV2ZWxzUmVhY2hlZElkZW50aWZpZXIsXG4gICAgICAgICAgICAgICAgICAgIG51bWJlck9mTGV2ZWxzIC0gMVxuICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgZmlyc3RTZWVuID0gdHJ1ZVxuXG4gICAgICAgICAgICBjb3VudGVyICs9IDFcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaXJzdFNlZW4pXG4gICAgICAgICAgICByZXN1bHQgKz0gYFxcbiR7aW5pdGlhbEluZGVudGlvbn1gXG5cbiAgICAgICAgcmVzdWx0ICs9ICddJ1xuXG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICB9XG5cbiAgICBpZiAoaXNNYXAob2JqZWN0KSkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gJydcblxuICAgICAgICBsZXQgZmlyc3RTZWVuID0gZmFsc2VcbiAgICAgICAgbGV0IGNvdW50ZXIgPSAxXG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgaXRlbV0gb2Ygb2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAoY291bnRlciA+IG1heGltdW1MZW5ndGhPZkxpc3RzKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IGAsXFxuJHtpbml0aWFsSW5kZW50aW9ufS4uLmBcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZmlyc3RTZWVuKVxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBgLFxcbiR7aW5pdGlhbEluZGVudGlvbn0ke2luZGVudGlvbn1gXG5cbiAgICAgICAgICAgIHJlc3VsdCArPVxuICAgICAgICAgICAgICAgIHJlcHJlc2VudChcbiAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICBtYXhpbXVtTGVuZ3RoT2ZMaXN0cyxcbiAgICAgICAgICAgICAgICAgICAgaW5kZW50aW9uLFxuICAgICAgICAgICAgICAgICAgICBgJHtpbml0aWFsSW5kZW50aW9ufSR7aW5kZW50aW9ufWAsXG4gICAgICAgICAgICAgICAgICAgIG1heGltdW1OdW1iZXJPZkxldmVsc1JlYWNoZWRJZGVudGlmaWVyLFxuICAgICAgICAgICAgICAgICAgICBudW1iZXJPZkxldmVscyAtIDFcbiAgICAgICAgICAgICAgICApICtcbiAgICAgICAgICAgICAgICAnIC0+ICcgK1xuICAgICAgICAgICAgICAgIHJlcHJlc2VudChcbiAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgbWF4aW11bUxlbmd0aE9mTGlzdHMsXG4gICAgICAgICAgICAgICAgICAgIGluZGVudGlvbixcbiAgICAgICAgICAgICAgICAgICAgYCR7aW5pdGlhbEluZGVudGlvbn0ke2luZGVudGlvbn1gLFxuICAgICAgICAgICAgICAgICAgICBtYXhpbXVtTnVtYmVyT2ZMZXZlbHNSZWFjaGVkSWRlbnRpZmllcixcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZMZXZlbHMgLSAxXG4gICAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICBmaXJzdFNlZW4gPSB0cnVlXG5cbiAgICAgICAgICAgIGNvdW50ZXIgKz0gMVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFmaXJzdFNlZW4pXG4gICAgICAgICAgICByZXN1bHQgPSAnRW1wdHlNYXAnXG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cblxuICAgIGlmIChpc1NldChvYmplY3QpKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSAneydcblxuICAgICAgICBsZXQgZmlyc3RTZWVuID0gZmFsc2VcbiAgICAgICAgbGV0IGNvdW50ZXIgPSAxXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBvYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChjb3VudGVyID4gbWF4aW11bUxlbmd0aE9mTGlzdHMpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gYCxcXG4ke2luaXRpYWxJbmRlbnRpb259Li4uYFxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmaXJzdFNlZW4pXG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9ICcsJ1xuXG4gICAgICAgICAgICByZXN1bHQgKz1cbiAgICAgICAgICAgICAgICBgXFxuJHtpbml0aWFsSW5kZW50aW9ufSR7aW5kZW50aW9ufWAgK1xuICAgICAgICAgICAgICAgIHJlcHJlc2VudChcbiAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgbWF4aW11bUxlbmd0aE9mTGlzdHMsXG4gICAgICAgICAgICAgICAgICAgIGluZGVudGlvbixcbiAgICAgICAgICAgICAgICAgICAgYCR7aW5pdGlhbEluZGVudGlvbn0ke2luZGVudGlvbn1gLFxuICAgICAgICAgICAgICAgICAgICBtYXhpbXVtTnVtYmVyT2ZMZXZlbHNSZWFjaGVkSWRlbnRpZmllcixcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZMZXZlbHMgLSAxXG4gICAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICBmaXJzdFNlZW4gPSB0cnVlXG5cbiAgICAgICAgICAgIGNvdW50ZXIgKz0gMVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpcnN0U2VlbilcbiAgICAgICAgICAgIHJlc3VsdCArPSBgXFxuJHtpbml0aWFsSW5kZW50aW9ufX1gXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJlc3VsdCA9ICdFbXB0eVNldCdcblxuICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuXG4gICAgaWYgKGlzRnVuY3Rpb24ob2JqZWN0KSlcbiAgICAgICAgcmV0dXJuICdfX2Z1bmN0aW9uX18nXG5cbiAgICBsZXQgcmVzdWx0ID0gJ3snXG4gICAgY29uc3Qga2V5czogQXJyYXk8c3RyaW5nPiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdCkuc29ydCgpXG4gICAgbGV0IGZpcnN0U2VlbiA9IGZhbHNlXG4gICAgbGV0IGNvdW50ZXIgPSAxXG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgICBpZiAoY291bnRlciA+IG1heGltdW1MZW5ndGhPZkxpc3RzKSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gYCxcXG4ke2luaXRpYWxJbmRlbnRpb259Li4uYFxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaXJzdFNlZW4pXG4gICAgICAgICAgICByZXN1bHQgKz0gJywnXG5cbiAgICAgICAgcmVzdWx0ICs9XG4gICAgICAgICAgICBgXFxuJHtpbml0aWFsSW5kZW50aW9ufSR7aW5kZW50aW9ufSR7a2V5fTogYCArXG4gICAgICAgICAgICByZXByZXNlbnQoXG4gICAgICAgICAgICAgICAgKG9iamVjdCBhcyBNYXBwaW5nPHVua25vd24+KVtrZXldLFxuICAgICAgICAgICAgICAgIG1heGltdW1MZW5ndGhPZkxpc3RzLFxuICAgICAgICAgICAgICAgIGluZGVudGlvbixcbiAgICAgICAgICAgICAgICBgJHtpbml0aWFsSW5kZW50aW9ufSR7aW5kZW50aW9ufWAsXG4gICAgICAgICAgICAgICAgbWF4aW11bU51bWJlck9mTGV2ZWxzUmVhY2hlZElkZW50aWZpZXIsXG4gICAgICAgICAgICAgICAgbnVtYmVyT2ZMZXZlbHMgLSAxXG4gICAgICAgICAgICApXG5cbiAgICAgICAgZmlyc3RTZWVuID0gdHJ1ZVxuXG4gICAgICAgIGNvdW50ZXIgKz0gMVxuICAgIH1cblxuICAgIGlmIChmaXJzdFNlZW4pXG4gICAgICAgIHJlc3VsdCArPSBgXFxuJHtpbml0aWFsSW5kZW50aW9ufWBcblxuICAgIHJlc3VsdCArPSAnfSdcblxuICAgIHJldHVybiByZXN1bHRcbn1cbi8qKlxuICogU29ydCBnaXZlbiBvYmplY3RzIGtleXMuXG4gKiBAcGFyYW0gb2JqZWN0IC0gT2JqZWN0IHdoaWNoIGtleXMgc2hvdWxkIGJlIHNvcnRlZC5cbiAqIEByZXR1cm5zIFNvcnRlZCBsaXN0IG9mIGdpdmVuIGtleXMuXG4gKi9cbmV4cG9ydCBjb25zdCBzb3J0ID0gKG9iamVjdDogdW5rbm93bik6IEFycmF5PHVua25vd24+ID0+IHtcbiAgICBjb25zdCBrZXlzOiBBcnJheTx1bmtub3duPiA9IFtdXG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKVxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgb2JqZWN0Lmxlbmd0aDsgaW5kZXgrKylcbiAgICAgICAgICAgIGtleXMucHVzaChpbmRleClcbiAgICBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JylcbiAgICAgICAgaWYgKGlzTWFwKG9iamVjdCkpXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleVZhbHVlUGFpciBvZiBvYmplY3QpXG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGtleVZhbHVlUGFpclswXSlcbiAgICAgICAgZWxzZSBpZiAob2JqZWN0ICE9PSBudWxsKVxuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqZWN0KSlcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goa2V5KVxuXG4gICAgcmV0dXJuIGtleXMuc29ydCgpXG59XG4vKipcbiAqIFJlbW92ZXMgYSBwcm94eSBmcm9tIGdpdmVuIGRhdGEgc3RydWN0dXJlIHJlY3Vyc2l2ZWx5LlxuICogQHBhcmFtIG9iamVjdCAtIE9iamVjdCB0byBwcm94eS5cbiAqIEBwYXJhbSBzZWVuT2JqZWN0cyAtIFRyYWNrcyBhbGwgYWxyZWFkeSBwcm9jZXNzZWQgb2JqZWN0cyB0byBhdm9pZFxuICogZW5kbGVzcyBsb29wcyAodXN1YWxseSBvbmx5IG5lZWRlZCBmb3IgaW50ZXJuYWwgcHVycG9zZSkuXG4gKiBAcmV0dXJucyBSZXR1cm5zIGdpdmVuIG9iamVjdCB1bndyYXBwZWQgZnJvbSBhIGR5bmFtaWMgcHJveHkuXG4gKi9cbmV4cG9ydCBjb25zdCB1bndyYXBQcm94eSA9IDxUID0gdW5rbm93bj4oXG4gICAgb2JqZWN0OiBQcm94eVR5cGU8VD4gfCBULCBzZWVuT2JqZWN0czogU2V0PHVua25vd24+ID0gbmV3IFNldDx1bmtub3duPigpXG4pOiBUID0+IHtcbiAgICBpZiAoaXNPYmplY3Qob2JqZWN0KSkge1xuICAgICAgICBpZiAoc2Vlbk9iamVjdHMuaGFzKG9iamVjdCkpXG4gICAgICAgICAgICByZXR1cm4gb2JqZWN0XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKG9iamVjdC5fX3Jldm9rZV9fKSkge1xuICAgICAgICAgICAgICAgIGlmIChpc1Byb3h5KG9iamVjdCkpXG4gICAgICAgICAgICAgICAgICAgIG9iamVjdCA9IG9iamVjdC5fX3RhcmdldF9fXG5cbiAgICAgICAgICAgICAgICA7KG9iamVjdCBhcyB1bmtub3duIGFzIHtfX3Jldm9rZV9fOiAoKSA9PiB2b2lkfSkuX19yZXZva2VfXygpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuIG9iamVjdFxuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgc2Vlbk9iamVjdHMuYWRkKG9iamVjdClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcbiAgICAgICAgICAgIGxldCBpbmRleCA9IDBcbiAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2Ygb2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgb2JqZWN0W2luZGV4XSA9IHVud3JhcFByb3h5KHZhbHVlLCBzZWVuT2JqZWN0cylcblxuICAgICAgICAgICAgICAgIGluZGV4ICs9IDFcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChpc01hcChvYmplY3QpKVxuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2Ygb2JqZWN0KVxuICAgICAgICAgICAgICAgIG9iamVjdC5zZXQoa2V5LCB1bndyYXBQcm94eSh2YWx1ZSwgc2Vlbk9iamVjdHMpKVxuICAgICAgICBlbHNlIGlmIChpc1NldChvYmplY3QpKSB7XG4gICAgICAgICAgICBjb25zdCBjYWNoZTogQXJyYXk8dW5rbm93bj4gPSBbXVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIG9iamVjdCkge1xuICAgICAgICAgICAgICAgIG9iamVjdC5kZWxldGUodmFsdWUpXG4gICAgICAgICAgICAgICAgY2FjaGUucHVzaCh1bndyYXBQcm94eSh2YWx1ZSwgc2Vlbk9iamVjdHMpKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGNhY2hlKVxuICAgICAgICAgICAgICAgIG9iamVjdC5hZGQodmFsdWUpXG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoXG4gICAgICAgICAgICAgICAgb2JqZWN0IGFzIHVua25vd24gYXMgb2JqZWN0XG4gICAgICAgICAgICApKVxuICAgICAgICAgICAgICAgIG9iamVjdFtrZXkgYXMga2V5b2YgVF0gPVxuICAgICAgICAgICAgICAgICAgICB1bndyYXBQcm94eSh2YWx1ZSwgc2Vlbk9iamVjdHMpIGFzIFZhbHVlT2Y8VD5cbiAgICB9XG5cbiAgICByZXR1cm4gb2JqZWN0XG59XG4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7O0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWJBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBaUNBLFNBQ0kscUJBQXFCLEVBQUUsZ0NBQWdDLEVBQUUsaUJBQWlCO0FBRTlFLFNBQ0ksVUFBVSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxL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
|
|
962
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL29iamVjdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyAjIS91c3IvYmluL2VudiBiYWJlbC1ub2RlXG4vLyAtKi0gY29kaW5nOiB1dGYtOCAtKi1cbi8qKiBAbW9kdWxlIG9iamVjdCAqL1xuJ3VzZSBzdHJpY3QnXG4vKiAhXG4gICAgcmVnaW9uIGhlYWRlclxuICAgIFtQcm9qZWN0IHBhZ2VdKGh0dHBzOi8vdG9yYmVuLndlYnNpdGUvY2xpZW50bm9kZSlcblxuICAgIENvcHlyaWdodCBUb3JiZW4gU2lja2VydCAoaW5mb1tcIn5hdH5cIl10b3JiZW4ud2Vic2l0ZSkgMTYuMTIuMjAxMlxuXG4gICAgTGljZW5zZVxuICAgIC0tLS0tLS1cblxuICAgIFRoaXMgbGlicmFyeSB3cml0dGVuIGJ5IFRvcmJlbiBTaWNrZXJ0IHN0YW5kcyB1bmRlciBhIGNyZWF0aXZlIGNvbW1vbnNcbiAgICBuYW1pbmcgMy4wIHVucG9ydGVkIGxpY2Vuc2UuXG4gICAgU2VlIGh0dHBzOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS8zLjAvZGVlZC5kZVxuICAgIGVuZHJlZ2lvblxuKi9cbmltcG9ydCB0eXBlIHtcbiAgICBBbnlGdW5jdGlvbixcbiAgICBDb21wYXJlT3B0aW9ucyxcbiAgICBFdmFsdWF0ZUR5bmFtaWNEYXRhT3B0aW9ucyxcbiAgICBHZXR0ZXJGdW5jdGlvbixcbiAgICBNYXBwaW5nLFxuICAgIE5vcm1hbGl6ZWRPYmplY3RNYXNrLFxuICAgIE9iamVjdE1hc2tDb25maWd1cmF0aW9uLFxuICAgIFBsYWluT2JqZWN0LFxuICAgIFByb3h5SGFuZGxlcixcbiAgICBQcm94eVR5cGUsXG4gICAgUmVjdXJzaXZlQXN5bmNFdmFsdWF0ZWFibGUsXG4gICAgUmVjdXJzaXZlRXZhbHVhdGVhYmxlLFxuICAgIFJlY3Vyc2l2ZVBhcnRpYWwsXG4gICAgU2V0dGVyRnVuY3Rpb24sXG4gICAgVW5rbm93bkZ1bmN0aW9uLFxuICAgIFZhbHVlT2Zcbn0gZnJvbSAnLi90eXBlJ1xuXG5pbXBvcnQge1xuICAgIENMQVNTX1RPX1RZUEVfTUFQUElORywgSUdOT1JFX05VTExfQU5EX1VOREVGSU5FRF9TWU1CT0wsIFZBTFVFX0NPUFlfU1lNQk9MXG59IGZyb20gJy4vY29uc3RhbnRzJ1xuaW1wb3J0IHtcbiAgICBpc0Z1bmN0aW9uLCBpc09iamVjdCwgaXNQbGFpbk9iamVjdCwgaXNNYXAsIGlzUHJveHksIGlzU2V0LCBpc051bWVyaWNcbn0gZnJvbSAnLi9pbmRpY2F0b3JzJ1xuaW1wb3J0IHtpc05vdEFOdW1iZXJ9IGZyb20gJy4vbnVtYmVyJ1xuaW1wb3J0IHtlc2NhcGVSZWd1bGFyRXhwcmVzc2lvbnMsIGV2YWx1YXRlQW5kVGhyb3dFcnJvcn0gZnJvbSAnLi9zdHJpbmcnXG5cbi8qKlxuICogQWRkcyBkeW5hbWljIGdldHRlciBhbmQgc2V0dGVyIHRvIGFueSBnaXZlbiBkYXRhIHN0cnVjdHVyZSBzdWNoIGFzIG1hcHMuXG4gKiBAcGFyYW0gb2JqZWN0IC0gT2JqZWN0IHRvIHByb3h5LlxuICogQHBhcmFtIGdldHRlcldyYXBwZXIgLSBGdW5jdGlvbiB0byB3cmFwIGVhY2ggcHJvcGVydHkgZ2V0LlxuICogQHBhcmFtIHNldHRlcldyYXBwZXIgLSBGdW5jdGlvbiB0byB3cmFwIGVhY2ggcHJvcGVydHkgc2V0LlxuICogQHBhcmFtIG1ldGhvZE5hbWVzIC0gTWV0aG9kIG5hbWVzIHRvIHBlcmZvcm0gYWN0aW9ucyBvbiB0aGUgZ2l2ZW5cbiAqIG9iamVjdC5cbiAqIEBwYXJhbSBkZWVwIC0gSW5kaWNhdGVzIHRvIHBlcmZvcm0gYSBkZWVwIHdyYXBwaW5nIG9mIHNwZWNpZmllZCB0eXBlcy5cbiAqIEBwYXJhbSB0eXBlc1RvRXh0ZW5kIC0gVHlwZXMgd2hpY2ggc2hvdWxkIGJlIGV4dGVuZGVkIChDaGVja3MgYXJlXG4gKiBwZXJmb3JtZWQgdmlhIFwidmFsdWUgaW5zdGFuY2VvZiB0eXBlXCIuKS5cbiAqIEByZXR1cm5zIFJldHVybnMgZ2l2ZW4gb2JqZWN0IHdyYXBwZWQgd2l0aCBhIGR5bmFtaWMgZ2V0dGVyIHByb3h5LlxuICovXG5leHBvcnQgY29uc3QgYWRkRHluYW1pY0dldHRlckFuZFNldHRlciA9IDxUID0gdW5rbm93bj4oXG4gICAgb2JqZWN0OiBULFxuICAgIGdldHRlcldyYXBwZXI6IEdldHRlckZ1bmN0aW9uIHwgbnVsbCA9IG51bGwsXG4gICAgc2V0dGVyV3JhcHBlcjogbnVsbCB8IFNldHRlckZ1bmN0aW9uID0gbnVsbCxcbiAgICBtZXRob2ROYW1lczogTWFwcGluZyA9IHt9LFxuICAgIGRlZXAgPSB0cnVlLFxuICAgIHR5cGVzVG9FeHRlbmQ6IEFycmF5PHVua25vd24+ID0gW09iamVjdF1cbik6IFByb3h5VHlwZTxUPiB8IFQgPT4ge1xuICAgIGlmIChkZWVwICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnKVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgICAgICAgICBsZXQgaW5kZXggPSAwXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIG9iamVjdCkge1xuICAgICAgICAgICAgICAgIG9iamVjdFtpbmRleF0gPSBhZGREeW5hbWljR2V0dGVyQW5kU2V0dGVyKFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSwgZ2V0dGVyV3JhcHBlciwgc2V0dGVyV3JhcHBlciwgbWV0aG9kTmFtZXMsIGRlZXBcbiAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgICBpbmRleCArPSAxXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoaXNNYXAob2JqZWN0KSlcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIG9iamVjdClcbiAgICAgICAgICAgICAgICBvYmplY3Quc2V0KGtleSwgYWRkRHluYW1pY0dldHRlckFuZFNldHRlcihcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsIGdldHRlcldyYXBwZXIsIHNldHRlcldyYXBwZXIsIG1ldGhvZE5hbWVzLCBkZWVwKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgZWxzZSBpZiAoaXNTZXQob2JqZWN0KSkge1xuICAgICAgICAgICAgY29uc3QgY2FjaGU6IEFycmF5PHVua25vd24+ID0gW11cbiAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2Ygb2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgb2JqZWN0LmRlbGV0ZSh2YWx1ZSlcbiAgICAgICAgICAgICAgICBjYWNoZS5wdXNoKGFkZER5bmFtaWNHZXR0ZXJBbmRTZXR0ZXIoXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLCBnZXR0ZXJXcmFwcGVyLCBzZXR0ZXJXcmFwcGVyLCBtZXRob2ROYW1lcywgZGVlcClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgY2FjaGUpXG4gICAgICAgICAgICAgICAgb2JqZWN0LmFkZCh2YWx1ZSlcbiAgICAgICAgfSBlbHNlIGlmIChvYmplY3QgIT09IG51bGwpXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhvYmplY3QpKVxuICAgICAgICAgICAgICAgIChvYmplY3QgYXMgdW5rbm93biBhcyBNYXBwaW5nPHVua25vd24+KVtrZXldID1cbiAgICAgICAgICAgICAgICAgICAgYWRkRHluYW1pY0dldHRlckFuZFNldHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGFzIFRbRXh0cmFjdDxrZXlvZiBULCBzdHJpbmc+XSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldHRlcldyYXBwZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXR0ZXJXcmFwcGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kTmFtZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWVwXG4gICAgICAgICAgICAgICAgICAgIClcblxuICAgIGlmIChnZXR0ZXJXcmFwcGVyIHx8IHNldHRlcldyYXBwZXIpXG4gICAgICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlc1RvRXh0ZW5kKVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGlzT2JqZWN0KG9iamVjdCkgJiYgb2JqZWN0IGluc3RhbmNlb2YgKHR5cGUgYXMgQW55RnVuY3Rpb24pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWZhdWx0SGFuZGxlcjogUHJveHlIYW5kbGVyPFQ+ID1cbiAgICAgICAgICAgICAgICAgICAgZ2V0UHJveHlIYW5kbGVyPFQ+KG9iamVjdCwgbWV0aG9kTmFtZXMpXG4gICAgICAgICAgICAgICAgY29uc3QgaGFuZGxlcjogUHJveHlIYW5kbGVyPFQ+ID1cbiAgICAgICAgICAgICAgICAgICAgZ2V0UHJveHlIYW5kbGVyPFQ+KG9iamVjdCwgbWV0aG9kTmFtZXMpXG5cbiAgICAgICAgICAgICAgICBpZiAoZ2V0dGVyV3JhcHBlcilcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5nZXQgPSAoXG4gICAgICAgICAgICAgICAgICAgICAgICBfdGFyZ2V0OiBULCBuYW1lOiBzdHJpbmcgfCBzeW1ib2xcbiAgICAgICAgICAgICAgICAgICAgKTogdW5rbm93biA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ19fdGFyZ2V0X18nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3RcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdfX3Jldm9rZV9fJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCk6IHVua25vd24gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXZva2UoKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqZWN0W25hbWUgYXMga2V5b2YgVF0gPT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdFtuYW1lIGFzIGtleW9mIFRdXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXR0ZXJXcmFwcGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRIYW5kbGVyLmdldChwcm94eSBhcyBULCBuYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoc2V0dGVyV3JhcHBlcilcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5zZXQgPSAoXG4gICAgICAgICAgICAgICAgICAgICAgICBfdGFyZ2V0OiBULCBuYW1lOiBzdHJpbmcgfCBzeW1ib2wsIHZhbHVlOiB1bmtub3duXG4gICAgICAgICAgICAgICAgICAgICk6IGJvb2xlYW4gPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRIYW5kbGVyLnNldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm94eSBhcyBULFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGVyV3JhcHBlcihuYW1lLCB2YWx1ZSwgb2JqZWN0KVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGNvbnN0IHtwcm94eSwgcmV2b2tlfSA9XG4gICAgICAgICAgICAgICAgICAgIFByb3h5LnJldm9jYWJsZSh7fSwgaGFuZGxlciBhcyBQcm94eUhhbmRsZXI8b2JqZWN0PilcblxuICAgICAgICAgICAgICAgIHJldHVybiBwcm94eSBhcyBQcm94eVR5cGU8VD5cbiAgICAgICAgICAgIH1cblxuICAgIHJldHVybiBvYmplY3Rcbn1cbi8qKlxuICogQ29udmVydHMgZ2l2ZW4gb2JqZWN0IGludG8gaXRzIHNlcmlhbGl6ZWQgSlNPTiByZXByZXNlbnRhdGlvbiBieVxuICogcmVwbGFjaW5nIGNpcmN1bGFyIHJlZmVyZW5jZXMgd2l0aCBhIGdpdmVuIHByb3ZpZGVkIHZhbHVlLlxuICpcbiAqIFRoaXMgbWV0aG9kIHRyYXZlcnNlcyBnaXZlbiBvYmplY3QgcmVjdXJzaXZlbHkgYW5kIHRyYWNrcyBvZiBzZWVuIGFuZFxuICogYWxyZWFkeSBzZXJpYWxpemVkIHN0cnVjdHVyZXMgdG8gcmV1c2UgZ2VuZXJhdGVkIHN0cmluZ3Mgb3IgbWFyayBhXG4gKiBjaXJjdWxhciByZWZlcmVuY2UuXG4gKiBAcGFyYW0gb2JqZWN0IC0gT2JqZWN0IHRvIHNlcmlhbGl6ZS5cbiAqIEBwYXJhbSBkZXRlcm1pbmVDaXJjdWxhclJlZmVyZW5jZVZhbHVlIC0gQ2FsbGJhY2sgdG8gY3JlYXRlIGEgZmFsbGJhY2tcbiAqIHZhbHVlIGRlcGVuZGluZyBvbiBnaXZlbiByZWR1bmRhbnQgdmFsdWUuXG4gKiBAcGFyYW0gbnVtYmVyT2ZTcGFjZXMgLSBOdW1iZXIgb2Ygc3BhY2VzIHRvIHVzZSBmb3Igc3RyaW5nIGZvcm1hdHRpbmcuXG4gKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIEpTT04gc3RyaW5nLlxuICovXG5leHBvcnQgY29uc3QgY29udmVydENpcmN1bGFyT2JqZWN0VG9KU09OID0gKFxuICAgIG9iamVjdDogdW5rbm93bixcbiAgICBkZXRlcm1pbmVDaXJjdWxhclJlZmVyZW5jZVZhbHVlOiAoKFxuICAgICAgICBzZXJpYWxpemVkVmFsdWU6IHVua25vd24sXG4gICAgICAgIGtleTogbnVsbCB8IHN0cmluZyxcbiAgICAgICAgdmFsdWU6IHVua25vd24sXG4gICAgICAgIHNlZW5PYmplY3RzOiBNYXA8dW5rbm93biwgdW5rbm93bj5cbiAgICApID0+IHVua25vd24pID0gKHNlcmlhbGl6ZWRWYWx1ZTogdW5rbm93bik6IHVua25vd24gPT5cbiAgICAgICAgc2VyaWFsaXplZFZhbHVlID8/ICdfX2NpcmN1bGFyUmVmZXJlbmNlX18nLFxuICAgIG51bWJlck9mU3BhY2VzID0gMFxuKTogUmV0dXJuVHlwZTx0eXBlb2YgSlNPTi5zdHJpbmdpZnk+IHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCBzZWVuT2JqZWN0czogTWFwPHVua25vd24sIHVua25vd24+ID0gbmV3IE1hcDx1bmtub3duLCB1bmtub3duPigpXG5cbiAgICBjb25zdCBzdHJpbmdpZmllciA9IChvYmplY3Q6IHVua25vd24pOiBzdHJpbmcgPT4ge1xuICAgICAgICBjb25zdCByZXBsYWNlciA9IChrZXk6IG51bGwgfCBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdW5rbm93biA9PiB7XG4gICAgICAgICAgICBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlZW5PYmplY3RzLmhhcyh2YWx1ZSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkZXRlcm1pbmVDaXJjdWxhclJlZmVyZW5jZVZhbHVlKFxuICAgICAgICAgICAgICAgICAgICAgICAgc2Vlbk9iamVjdHMuZ2V0KHZhbHVlKSA/PyBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWVuT2JqZWN0c1xuICAgICAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgICAvLyBOT1RFOiBTZXQgYmVmb3JlIHRyYXZlcnNpbmcgZGVlcGVyIHRvIGRldGVjdCBjeWNsZXMuXG4gICAgICAgICAgICAgICAgc2Vlbk9iamVjdHMuc2V0KHZhbHVlLCBudWxsKVxuXG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdDogQXJyYXk8dW5rbm93bj4gfCBNYXBwaW5nPHVua25vd24+XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFtdXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHJlcGxhY2VyKG51bGwsIGl0ZW0pKVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHt9XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW25hbWUsIHN1YlZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YWx1ZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbbmFtZV0gPSByZXBsYWNlcihuYW1lLCBzdWJWYWx1ZSlcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzZWVuT2JqZWN0cy5zZXQodmFsdWUsIHJlc3VsdClcblxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqZWN0LCByZXBsYWNlciwgbnVtYmVyT2ZTcGFjZXMpXG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmluZ2lmaWVyKG9iamVjdClcbn1cbi8qKlxuICogQ29udmVydHMgZ2l2ZW4gbWFwIGFuZCBhbGwgbmVzdGVkIGZvdW5kIG1hcHMgb2JqZWN0cyB0byBjb3JyZXNwb25kaW5nXG4gKiBvYmplY3QuXG4gKiBAcGFyYW0gb2JqZWN0IC0gTWFwIHRvIGNvbnZlcnQgdG8uXG4gKiBAcGFyYW0gZGVlcCAtIEluZGljYXRlcyB3aGV0aGVyIHRvIHBlcmZvcm0gYSByZWN1cnNpdmUgY29udmVyc2lvbi5cbiAqIEByZXR1cm5zIEdpdmVuIG1hcCBhcyBvYmplY3QuXG4gKi9cbmV4cG9ydCBjb25zdCBjb252ZXJ0TWFwVG9QbGFpbk9iamVjdCA9IChcbiAgICBvYmplY3Q6IHVua25vd24sIGRlZXAgPSB0cnVlXG4pOiB1bmtub3duID0+IHtcbiAgICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKGlzTWFwKG9iamVjdCkpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld09iamVjdDogTWFwcGluZzx1bmtub3duPiA9IHt9XG4gICAgICAgICAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2Ygb2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKGRlZXApXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gY29udmVydE1hcFRvUGxhaW5PYmplY3QodmFsdWUsIGRlZXApXG5cbiAgICAgICAgICAgICAgICBpZiAoWydudW1iZXInLCAnc3RyaW5nJ10uaW5jbHVkZXModHlwZW9mIGtleSkpXG4gICAgICAgICAgICAgICAgICAgIG5ld09iamVjdFtTdHJpbmcoa2V5KV0gPSB2YWx1ZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbmV3T2JqZWN0XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVlcClcbiAgICAgICAgICAgIGlmIChpc1BsYWluT2JqZWN0KG9iamVjdCkpXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMob2JqZWN0KSlcbiAgICAgICAgICAgICAgICAgICAgKG9iamVjdCBhcyBNYXBwaW5nPHVua25vd24+KVtrZXldID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRNYXBUb1BsYWluT2JqZWN0KHZhbHVlLCBkZWVwKVxuICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gMFxuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBvYmplY3QgYXMgQXJyYXk8dW5rbm93bj4pIHtcbiAgICAgICAgICAgICAgICAgICAgKG9iamVjdCBhcyBBcnJheTx1bmtub3duPilbaW5kZXhdID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRNYXBUb1BsYWluT2JqZWN0KHZhbHVlLCBkZWVwKVxuXG4gICAgICAgICAgICAgICAgICAgIGluZGV4ICs9IDFcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzU2V0KG9iamVjdCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjYWNoZTogQXJyYXk8dW5rbm93bj4gPSBbXVxuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmRlbGV0ZSh2YWx1ZSlcblxuICAgICAgICAgICAgICAgICAgICBjYWNoZS5wdXNoKGNvbnZlcnRNYXBUb1BsYWluT2JqZWN0KHZhbHVlLCBkZWVwKSlcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGNhY2hlKVxuICAgICAgICAgICAgICAgICAgICBvYmplY3QuYWRkKHZhbHVlKVxuICAgICAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvYmplY3Rcbn1cbi8qKlxuICogQ29udmVydHMgZ2l2ZW4gcGxhaW4gb2JqZWN0IGFuZCBhbGwgbmVzdGVkIGZvdW5kIG9iamVjdHMgdG9cbiAqIGNvcnJlc3BvbmRpbmcgbWFwLlxuICogQHBhcmFtIG9iamVjdCAtIE9iamVjdCB0byBjb252ZXJ0IHRvLlxuICogQHBhcmFtIGRlZXAgLSBJbmRpY2F0ZXMgd2hldGhlciB0byBwZXJmb3JtIGEgcmVjdXJzaXZlIGNvbnZlcnNpb24uXG4gKiBAcmV0dXJucyBHaXZlbiBvYmplY3QgYXMgbWFwLlxuICovXG5leHBvcnQgY29uc3QgY29udmVydFBsYWluT2JqZWN0VG9NYXAgPSAoXG4gICAgb2JqZWN0OiB1bmtub3duLCBkZWVwID0gdHJ1ZVxuKTogdW5rbm93biA9PiB7XG4gICAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChpc1BsYWluT2JqZWN0KG9iamVjdCkpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld09iamVjdCA9IG5ldyBNYXA8bnVtYmVyIHwgc3RyaW5nLCB1bmtub3duPigpXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhvYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRlZXApXG4gICAgICAgICAgICAgICAgICAgIChvYmplY3QgYXMgTWFwcGluZzx1bmtub3duPilba2V5XSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0UGxhaW5PYmplY3RUb01hcCh2YWx1ZSwgZGVlcClcblxuICAgICAgICAgICAgICAgIG5ld09iamVjdC5zZXQoa2V5LCAob2JqZWN0IGFzIE1hcHBpbmc8dW5rbm93bj4pW2tleV0pXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBuZXdPYmplY3RcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZWVwKVxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xuICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IDBcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIG9iamVjdCBhcyBBcnJheTx1bmtub3duPikge1xuICAgICAgICAgICAgICAgICAgICAob2JqZWN0IGFzIEFycmF5PHVua25vd24+KVtpbmRleF0gPVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydFBsYWluT2JqZWN0VG9NYXAodmFsdWUsIGRlZXApXG5cbiAgICAgICAgICAgICAgICAgICAgaW5kZXggKz0gMVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNNYXAob2JqZWN0KSlcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBvYmplY3QpXG4gICAgICAgICAgICAgICAgICAgIG9iamVjdC5zZXQoa2V5LCBjb252ZXJ0UGxhaW5PYmplY3RUb01hcCh2YWx1ZSwgZGVlcCkpXG4gICAgICAgICAgICBlbHNlIGlmIChpc1NldChvYmplY3QpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2FjaGU6IEFycmF5PHVua25vd24+ID0gW11cblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2Ygb2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIG9iamVjdC5kZWxldGUodmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIGNhY2hlLnB1c2goY29udmVydFBsYWluT2JqZWN0VG9NYXAodmFsdWUsIGRlZXApKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgY2FjaGUpXG4gICAgICAgICAgICAgICAgICAgIG9iamVjdC5hZGQodmFsdWUpXG4gICAgICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iamVjdFxufVxuLyoqXG4gKiBSZXBsYWNlcyBnaXZlbiBwYXR0ZXJuIGluIGVhY2ggdmFsdWUgaW4gZ2l2ZW4gb2JqZWN0IHJlY3Vyc2l2ZWx5IHdpdGhcbiAqIGdpdmVuIHN0cmluZyByZXBsYWNlbWVudC5cbiAqIEBwYXJhbSBvYmplY3QgLSBPYmplY3QgdG8gY29udmVydCBzdWJzdHJpbmdzIGluLlxuICogQHBhcmFtIHBhdHRlcm4gLSBSZWd1bGFyIGV4cHJlc3Npb24gdG8gcmVwbGFjZS5cbiAqIEBwYXJhbSByZXBsYWNlbWVudCAtIFN0cmluZyB0byB1c2UgYXMgcmVwbGFjZW1lbnQgZm9yIGZvdW5kIHBhdHRlcm5zLlxuICogQHJldHVybnMgQ29udmVydGVkIG9iamVjdCB3aXRoIHJlcGxhY2VkIHBhdHRlcm5zLlxuICovXG5leHBvcnQgY29uc3QgY29udmVydFN1YnN0cmluZ0luUGxhaW5PYmplY3QgPSA8XG4gICAgVHlwZSBleHRlbmRzIE1hcHBpbmc8dW5rbm93bj4gPSBQbGFpbk9iamVjdFxuPihvYmplY3Q6IFR5cGUsIHBhdHRlcm46IFJlZ0V4cCB8IHN0cmluZywgcmVwbGFjZW1lbnQ6IHN0cmluZyk6IFR5cGUgPT4ge1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG9iamVjdCkpXG4gICAgICAgIGlmIChpc1BsYWluT2JqZWN0KHZhbHVlKSlcbiAgICAgICAgICAgIG9iamVjdFtrZXkgYXMga2V5b2YgVHlwZV0gPVxuICAgICAgICAgICAgICAgIGNvbnZlcnRTdWJzdHJpbmdJblBsYWluT2JqZWN0KHZhbHVlLCBwYXR0ZXJuLCByZXBsYWNlbWVudCkgYXNcbiAgICAgICAgICAgICAgICAgICAgdW5rbm93biBhcyBWYWx1ZU9mPFR5cGU+XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpXG4gICAgICAgICAgICAob2JqZWN0IGFzIHVua25vd24gYXMgTWFwcGluZylba2V5XSA9XG4gICAgICAgICAgICAgICAgdmFsdWUucmVwbGFjZShwYXR0ZXJuLCByZXBsYWNlbWVudClcblxuICAgIHJldHVybiBvYmplY3Rcbn1cbi8qIGVzbGludC1kaXNhYmxlIGpzZG9jL3JlcXVpcmUtZGVzY3JpcHRpb24tY29tcGxldGUtc2VudGVuY2UgKi9cbi8qKlxuICogQ29waWVzIGdpdmVuIG9iamVjdCAob2YgYW55IHR5cGUpIGludG8gb3B0aW9uYWxseSBnaXZlbiBkZXN0aW5hdGlvbi5cbiAqIEBwYXJhbSBzb3VyY2UgLSBPYmplY3QgdG8gY29weS5cbiAqIEBwYXJhbSBjb3B5QmxvYnMgLSBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gY29weSBibG9icyBhcyB3ZWxsLlxuICogQHBhcmFtIHJlY3Vyc2lvbkxpbWl0IC0gU3BlY2lmaWVzIGhvdyBkZWVwIHdlIHNob3VsZCB0cmF2ZXJzZSBpbnRvIGdpdmVuXG4gKiBvYmplY3QgcmVjdXJzaXZlbHkuXG4gKiBAcGFyYW0gcmVjdXJzaW9uRW5kVmFsdWUgLSBJbmRpY2F0ZXMgd2hpY2ggdmFsdWUgdG8gdXNlIGZvciByZWN1cnNpb24gZW5kcy5cbiAqIFVzdWFsbHkgYSByZWZlcmVuY2UgdG8gY29ycmVzcG9uZGluZyBzb3VyY2UgdmFsdWUgd2lsbCBiZSB1c2VkLlxuICogQHBhcmFtIGRlc3RpbmF0aW9uIC0gVGFyZ2V0IHRvIGNvcHkgc291cmNlIHRvLlxuICogQHBhcmFtIGN5Y2xpYyAtIEluZGljYXRlcyB3aGV0aGVyIGtub3duIHN1YiBzdHJ1Y3R1cmVzIHNob3VsZCBiZSBjb3BpZWQgb3JcbiAqIHJlZmVyZW5jZWQgKGlmIFwidHJ1ZVwiIGVuZGxlc3MgbG9vcHMgY2FuIG9jY3VyIGlmIHNvdXJjZSBoYXMgY3ljbGljXG4gKiBzdHJ1Y3R1cmVzKS5cbiAqIEBwYXJhbSBrbm93blJlZmVyZW5jZXMgLSBVc2VkIHRvIGF2b2lkIHRyYXZlcnNpbmcgbG9vcHMgYW5kIG5vdCB0byBjb3B5XG4gKiByZWZlcmVuY2VzIGUuZy4gdG8gb2JqZWN0cyBub3QgdG8gY29weSAoZS5nLiBzeW1ib2wgcG9seWZpbGxzKS5cbiAqIEBwYXJhbSByZWN1cnNpb25MZXZlbCAtIEludGVybmFsbHkgdXNlZCB0byB0cmFjayBjdXJyZW50IHJlY3Vyc2lvbiBsZXZlbCBpblxuICogZ2l2ZW4gc291cmNlIGRhdGEgc3RydWN0dXJlLlxuICogQHJldHVybnMgVmFsdWUgXCJ0cnVlXCIgaWYgYm90aCBvYmplY3RzIGFyZSBlcXVhbCBhbmQgXCJmYWxzZVwiIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGNvcHkgPSA8VHlwZSA9IHVua25vd24+KFxuICAgIHNvdXJjZTogVHlwZSxcbiAgICBjb3B5QmxvYnMgPSBmYWxzZSxcbiAgICByZWN1cnNpb25MaW1pdCA9IC0xLFxuICAgIHJlY3Vyc2lvbkVuZFZhbHVlOiB1bmtub3duID0gVkFMVUVfQ09QWV9TWU1CT0wsXG4gICAgZGVzdGluYXRpb246IG51bGwgfCBUeXBlID0gbnVsbCxcbiAgICBjeWNsaWMgPSBmYWxzZSxcbiAgICBrbm93blJlZmVyZW5jZXM6IEFycmF5PHVua25vd24+ID0gW10sXG4gICAgcmVjdXJzaW9uTGV2ZWwgPSAwXG4pOiBUeXBlID0+IHtcbiAgICAvKiBlc2xpbnQtZW5hYmxlIGpzZG9jL3JlcXVpcmUtZGVzY3JpcHRpb24tY29tcGxldGUtc2VudGVuY2UgKi9cbiAgICBpZiAoaXNPYmplY3Qoc291cmNlKSlcbiAgICAgICAgaWYgKGRlc3RpbmF0aW9uKSB7XG4gICAgICAgICAgICBpZiAoc291cmNlID09PSBkZXN0aW5hdGlvbilcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBDYW4ndCBjb3B5IGJlY2F1c2Ugc291cmNlIGFuZCBkZXN0aW5hdGlvbiBhcmUgYCArXG4gICAgICAgICAgICAgICAgICAgICdpZGVudGljYWwuJ1xuICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICFjeWNsaWMgJiZcbiAgICAgICAgICAgICAgICAhW3VuZGVmaW5lZCwgbnVsbF0uaW5jbHVkZXMoc291cmNlIGFzIHVua25vd24gYXMgbnVsbClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4OiBudW1iZXIgPSBrbm93blJlZmVyZW5jZXMuaW5kZXhPZihzb3VyY2UpXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtub3duUmVmZXJlbmNlc1tpbmRleF0gYXMgVHlwZVxuXG4gICAgICAgICAgICAgICAga25vd25SZWZlcmVuY2VzLnB1c2goc291cmNlKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBjb3B5VmFsdWUgPSA8Vj4odmFsdWU6IFYpOiBudWxsIHwgViA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICByZWN1cnNpb25MaW1pdCAhPT0gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgcmVjdXJzaW9uTGltaXQgPCByZWN1cnNpb25MZXZlbCArIDFcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWN1cnNpb25FbmRWYWx1ZSA9PT0gVkFMVUVfQ09QWV9TWU1CT0wgP1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVjdXJzaW9uRW5kVmFsdWUgYXMgbnVsbCB8IFZcblxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogbnVsbCB8IFYgPSBjb3B5KFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgY29weUJsb2JzLFxuICAgICAgICAgICAgICAgICAgICByZWN1cnNpb25MaW1pdCxcbiAgICAgICAgICAgICAgICAgICAgcmVjdXJzaW9uRW5kVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGN5Y2xpYyxcbiAgICAgICAgICAgICAgICAgICAga25vd25SZWZlcmVuY2VzLFxuICAgICAgICAgICAgICAgICAgICByZWN1cnNpb25MZXZlbCArIDFcbiAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICFjeWNsaWMgJiZcbiAgICAgICAgICAgICAgICAgICAgIVt1bmRlZmluZWQsIG51bGxdLmluY2x1ZGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgYXMgdW5rbm93biBhcyBudWxsXG4gICAgICAgICAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAga25vd25SZWZlcmVuY2VzLnB1c2godmFsdWUpXG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNvdXJjZSkpXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHNvdXJjZSlcbiAgICAgICAgICAgICAgICAgICAgKGRlc3RpbmF0aW9uIGFzIHVua25vd24gYXMgQXJyYXk8dW5rbm93bj4pXG4gICAgICAgICAgICAgICAgICAgICAgICAucHVzaChjb3B5VmFsdWUoaXRlbSkpXG4gICAgICAgICAgICBlbHNlIGlmIChzb3VyY2UgaW5zdGFuY2VvZiBNYXApXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2Ygc291cmNlKVxuICAgICAgICAgICAgICAgICAgICAoZGVzdGluYXRpb24gYXMgdW5rbm93biBhcyBNYXA8dW5rbm93biwgdW5rbm93bj4pXG4gICAgICAgICAgICAgICAgICAgICAgICAuc2V0KGtleSwgY29weVZhbHVlKHZhbHVlKSlcbiAgICAgICAgICAgIGVsc2UgaWYgKHNvdXJjZSBpbnN0YW5jZW9mIFNldClcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHNvdXJjZSlcbiAgICAgICAgICAgICAgICAgICAgKGRlc3RpbmF0aW9uIGFzIHVua25vd24gYXMgU2V0PHVua25vd24+KVxuICAgICAgICAgICAgICAgICAgICAgICAgLmFkZChjb3B5VmFsdWUodmFsdWUpKVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHNvdXJjZSkpXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAoZGVzdGluYXRpb24gYXMgTWFwcGluZzxWYWx1ZU9mPFR5cGU+Pilba2V5XSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29weVZhbHVlKHZhbHVlIGFzIFZhbHVlT2Y8VHlwZT4pIGFzIFZhbHVlT2Y8VHlwZT5cbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRmFpbGVkIHRvIGNvcHkgcHJvcGVydHkgdmFsdWUgb2JqZWN0IFwiJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7a2V5fVwiOiAke3JlcHJlc2VudChlcnJvcil9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2F1c2U6IGVycm9yfVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzb3VyY2UpKVxuICAgICAgICAgICAgICAgIHJldHVybiBjb3B5KFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgIGNvcHlCbG9icyxcbiAgICAgICAgICAgICAgICAgICAgcmVjdXJzaW9uTGltaXQsXG4gICAgICAgICAgICAgICAgICAgIHJlY3Vyc2lvbkVuZFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAoW10gYXMgdW5rbm93biBhcyBUeXBlKSxcbiAgICAgICAgICAgICAgICAgICAgY3ljbGljLFxuICAgICAgICAgICAgICAgICAgICBrbm93blJlZmVyZW5jZXMsXG4gICAgICAgICAgICAgICAgICAgIHJlY3Vyc2lvbkxldmVsXG4gICAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICBpZiAoc291cmNlIGluc3RhbmNlb2YgTWFwKVxuICAgICAgICAgICAgICAgIHJldHVybiBjb3B5KFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgIGNvcHlCbG9icyxcbiAgICAgICAgICAgICAgICAgICAgcmVjdXJzaW9uTGltaXQsXG4gICAgICAgICAgICAgICAgICAgIHJlY3Vyc2lvbkVuZFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAobmV3IE1hcCgpIGFzIHVua25vd24gYXMgVHlwZSksXG4gICAgICAgICAgICAgICAgICAgIGN5Y2xpYyxcbiAgICAgICAgICAgICAgICAgICAga25vd25SZWZlcmVuY2VzLFxuICAgICAgICAgICAgICAgICAgICByZWN1cnNpb25MZXZlbFxuICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgaWYgKHNvdXJjZSBpbnN0YW5jZW9mIFNldClcbiAgICAgICAgICAgICAgICByZXR1cm4gY29weShcbiAgICAgICAgICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgICAgICAgICBjb3B5QmxvYnMsXG4gICAgICAgICAgICAgICAgICAgIHJlY3Vyc2lvbkxpbWl0LFxuICAgICAgICAgICAgICAgICAgICByZWN1cnNpb25FbmRWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgKG5ldyBTZXQoKSBhcyB1bmtub3duIGFzIFR5cGUpLFxuICAgICAgICAgICAgICAgICAgICBjeWNsaWMsXG4gICAgICAgICAgICAgICAgICAgIGtub3duUmVmZXJlbmNlcyxcbiAgICAgICAgICAgICAgICAgICAgcmVjdXJzaW9uTGV2ZWxcbiAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgIGlmIChzb3VyY2UgaW5zdGFuY2VvZiBEYXRlKVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShzb3VyY2UuZ2V0VGltZSgpKSBhcyB1bmtub3duIGFzIFR5cGVcblxuICAgICAgICAgICAgaWYgKHNvdXJjZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1vZGlmaWVyID0gL1teL10qJC8uZXhlYyhzb3VyY2UudG9TdHJpbmcoKSlcbiAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbiA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZS5zb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyID8gbW9kaWZpZXJbMF0gOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICApIGFzIHVua25vd24gYXMgVHlwZVxuICAgICAgICAgICAgICAgIChkZXN0aW5hdGlvbiBhcyB1bmtub3duIGFzIFJlZ0V4cCkubGFzdEluZGV4ID1cbiAgICAgICAgICAgICAgICAgICAgc291cmNlLmxhc3RJbmRleFxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgJiYgc291cmNlIGluc3RhbmNlb2YgQmxvYilcbiAgICAgICAgICAgICAgICByZXR1cm4gY29weUJsb2JzID9cbiAgICAgICAgICAgICAgICAgICAgc291cmNlLnNsaWNlKDAsIHNvdXJjZS5zaXplLCBzb3VyY2UudHlwZSkgYXNcbiAgICAgICAgICAgICAgICAgICAgICAgIHVua25vd24gYXNcbiAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgOlxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VcblxuICAgICAgICAgICAgcmV0dXJuIGNvcHkoXG4gICAgICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgICAgIGNvcHlCbG9icyxcbiAgICAgICAgICAgICAgICByZWN1cnNpb25MaW1pdCxcbiAgICAgICAgICAgICAgICByZWN1cnNpb25FbmRWYWx1ZSxcbiAgICAgICAgICAgICAgICAoe30gYXMgdW5rbm93biBhcyBUeXBlKSxcbiAgICAgICAgICAgICAgICBjeWNsaWMsXG4gICAgICAgICAgICAgICAga25vd25SZWZlcmVuY2VzLFxuICAgICAgICAgICAgICAgIHJlY3Vyc2lvbkxldmVsXG4gICAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgIHJldHVybiBkZXN0aW5hdGlvbiB8fCBzb3VyY2Vcbn1cbi8qKlxuICogRGV0ZXJtaW5lIHRoZSBpbnRlcm5hbCBKYXZhU2NyaXB0IFtbQ2xhc3NdXSBvZiBhbiBvYmplY3QuXG4gKiBAcGFyYW0gdmFsdWUgLSBWYWx1ZSB0byBhbmFseXplLlxuICogQHJldHVybnMgTmFtZSBvZiBkZXRlcm1pbmVkIHR5cGUuXG4gKi9cbmV4cG9ydCBjb25zdCBkZXRlcm1pbmVUeXBlID0gKHZhbHVlPzogdW5rbm93bik6IHN0cmluZyA9PiB7XG4gICAgaWYgKFtudWxsLCB1bmRlZmluZWRdLmluY2x1ZGVzKHZhbHVlIGFzIG51bGwpKVxuICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKVxuXG4gICAgY29uc3QgdHlwZTogc3RyaW5nID0gdHlwZW9mIHZhbHVlXG5cbiAgICBpZiAoXG4gICAgICAgIFsnZnVuY3Rpb24nLCAnb2JqZWN0J10uaW5jbHVkZXModHlwZSkgJiZcbiAgICAgICAgJ3RvU3RyaW5nJyBpbiAodmFsdWUgYXMgb2JqZWN0KVxuICAgICkge1xuICAgICAgICBjb25zdCBzdHJpbmdSZXByZXNlbnRhdGlvbiA9XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpXG5cbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChcbiAgICAgICAgICAgIENMQVNTX1RPX1RZUEVfTUFQUElORywgc3RyaW5nUmVwcmVzZW50YXRpb25cbiAgICAgICAgKSlcbiAgICAgICAgICAgIHJldHVybiBDTEFTU19UT19UWVBFX01BUFBJTkdbXG4gICAgICAgICAgICAgICAgc3RyaW5nUmVwcmVzZW50YXRpb24gYXNcbiAgICAgICAgICAgICAgICAgICAga2V5b2YgdHlwZW9mIENMQVNTX1RPX1RZUEVfTUFQUElOR1xuICAgICAgICAgICAgXVxuICAgIH1cblxuICAgIHJldHVybiB0eXBlXG59XG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiBnaXZlbiBpdGVtcyBhcmUgZXF1YWwgZm9yIGdpdmVuIHByb3BlcnR5IGxpc3QuIElmXG4gKiBwcm9wZXJ0eSBsaXN0IGlzbid0IHNldCBhbGwgcHJvcGVydGllcyB3aWxsIGJlIGNoZWNrZWQuIEFsbCBrZXlzIHdoaWNoXG4gKiBzdGFydHMgd2l0aCBvbmUgb2YgdGhlIGV4Y2VwdGlvbiBwcmVmaXhlcyB3aWxsIGJlIG9taXR0ZWQuXG4gKiBAcGFyYW0gZmlyc3RWYWx1ZSAtIEZpcnN0IG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHNlY29uZFZhbHVlIC0gU2Vjb25kIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIGdpdmVuT3B0aW9ucyAtIE9wdGlvbnMgdG8gZGVmaW5lIGhvdyB0byBjb21wYXJlLlxuICogQHBhcmFtIGdpdmVuT3B0aW9ucy5wcm9wZXJ0aWVzIC0gUHJvcGVydHkgbmFtZXMgdG8gY2hlY2suIENoZWNrIGFsbCBpZlxuICogXCJudWxsXCIgaXMgc2VsZWN0ZWQgKGRlZmF1bHQpLlxuICogQHBhcmFtIGdpdmVuT3B0aW9ucy5kZWVwIC0gUmVjdXJzaW9uIGRlcHRoIG5lZ2F0aXZlIHZhbHVlcyBtZWFuc1xuICogaW5maW5pdGVseSBkZWVwIChkZWZhdWx0KS5cbiAqIEBwYXJhbSBnaXZlbk9wdGlvbnMuZXhjZXB0aW9uUHJlZml4ZXMgLSBQcm9wZXJ0eSBwcmVmaXhlcyB3aGljaFxuICogaW5kaWNhdGVzIHByb3BlcnRpZXMgdG8gaWdub3JlLlxuICogQHBhcmFtIGdpdmVuT3B0aW9ucy5pZ25vcmVGdW5jdGlvbnMgLSBJbmRpY2F0ZXMgd2hldGhlciBmdW5jdGlvbnMgaGF2ZVxuICogdG8gYmUgaWRlbnRpY2FsIHRvIGludGVycHJldCBpcyBhcyBlcXVhbC4gSWYgc2V0IHRvIFwidHJ1ZVwiIHR3byBmdW5jdGlvbnNcbiAqIHdpbGwgYmUgYXNzdW1lZCB0byBiZSBlcXVhbCAoZGVmYXVsdCkuXG4gKiBAcGFyYW0gZ2l2ZW5PcHRpb25zLmNvbXBhcmVCbG9icyAtIEluZGljYXRlcyB3aGV0aGVyIGJpbmFyeSBkYXRhIHNob3VsZFxuICogYmUgY29udmVydGVkIHRvIGEgYmFzZTY0IHN0cmluZyB0byBjb21wYXJlIHRoZWlyIGNvbnRlbnQuIE1ha2VzIHRoaXNcbiAqIGZ1bmN0aW9uIGFzeW5jaHJvbm91cyBpbiBicm93c2VycyBhbmQgcG90ZW50aWFsbHkgdGFrZXMgYSBsb3Qgb2ZcbiAqIHJlc291cmNlcy5cbiAqIEByZXR1cm5zIFZhbHVlIFwidHJ1ZVwiIGlmIGJvdGggb2JqZWN0cyBhcmUgZXF1YWwgYW5kIFwiZmFsc2VcIiBvdGhlcndpc2UuXG4gKiBJZiBcImNvbXBhcmVCbG9ic1wiIGlzIGFjdGl2YXRlZCwgYW5kIHdlJ3JlIHJ1bm5pbmcgaW4gYSBicm93c2VyIGxpa2VcbiAqIGVudmlyb25tZW50IGFuZCBiaW5hcnkgZGF0YSBpcyBnaXZlbiwgdGhlbiBhIHByb21pc2Ugd3JhcHBpbmcgdGhlXG4gKiBkZXRlcm1pbmVkIGJvb2xlYW4gdmFsdWVzIGlzIHJldHVybmVkLlxuICovXG5leHBvcnQgY29uc3QgZXF1YWxzID0gKFxuICAgIGZpcnN0VmFsdWU6IHVua25vd24sXG4gICAgc2Vjb25kVmFsdWU6IHVua25vd24sXG4gICAgZ2l2ZW5PcHRpb25zOiBQYXJ0aWFsPENvbXBhcmVPcHRpb25zPiA9IHt9XG4pOiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuIHwgc3RyaW5nPiB8IHN0cmluZyA9PiB7XG4gICAgY29uc3Qgb3B0aW9uczogQ29tcGFyZU9wdGlvbnMgPSB7XG4gICAgICAgIGNvbXBhcmVCbG9iczogZmFsc2UsXG4gICAgICAgIGRlZXA6IC0xLFxuICAgICAgICBleGNlcHRpb25QcmVmaXhlczogW10sXG4gICAgICAgIGlnbm9yZUZ1bmN0aW9uczogdHJ1ZSxcbiAgICAgICAgcHJvcGVydGllczogbnVsbCxcbiAgICAgICAgcmV0dXJuUmVhc29uSWZOb3RFcXVhbDogZmFsc2UsXG4gICAgICAgIC4uLmdpdmVuT3B0aW9uc1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgICAgb3B0aW9ucy5pZ25vcmVGdW5jdGlvbnMgJiZcbiAgICAgICAgaXNGdW5jdGlvbihmaXJzdFZhbHVlKSAmJiBpc0Z1bmN0aW9uKHNlY29uZFZhbHVlKSB8fFxuICAgICAgICBmaXJzdFZhbHVlID09PSBzZWNvbmRWYWx1ZSB8fFxuICAgICAgICBpc05vdEFOdW1iZXIoZmlyc3RWYWx1ZSkgJiYgaXNOb3RBTnVtYmVyKHNlY29uZFZhbHVlKSB8fFxuICAgICAgICBmaXJzdFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwICYmIHNlY29uZFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwICYmXG4gICAgICAgIGZpcnN0VmFsdWUudG9TdHJpbmcoKSA9PT0gc2Vjb25kVmFsdWUudG9TdHJpbmcoKSAmJlxuICAgICAgICBmaXJzdFZhbHVlLmZsYWdzLnNwbGl0KCcnKS5zb3J0KCkuam9pbignJykgPT09XG4gICAgICAgIHNlY29uZFZhbHVlLmZsYWdzLnNwbGl0KCcnKS5zb3J0KCkuam9pbignJykgfHxcbiAgICAgICAgZmlyc3RWYWx1ZSBpbnN0YW5jZW9mIERhdGUgJiYgc2Vjb25kVmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmXG4gICAgICAgIChcbiAgICAgICAgICAgIGlzTmFOKGZpcnN0VmFsdWUuZ2V0VGltZSgpKSAmJlxuICAgICAgICAgICAgaXNOYU4oc2Vjb25kVmFsdWUuZ2V0VGltZSgpKSB8fFxuICAgICAgICAgICAgIWlzTmFOKGZpcnN0VmFsdWUuZ2V0VGltZSgpKSAmJlxuICAgICAgICAgICAgIWlzTmFOKHNlY29uZFZhbHVlLmdldFRpbWUoKSkgJiZcbiAgICAgICAgICAgIGZpcnN0VmFsdWUuZ2V0VGltZSgpID09PSBzZWNvbmRWYWx1ZS5nZXRUaW1lKClcbiAgICAgICAgKSB8fFxuICAgICAgICBvcHRpb25zLmNvbXBhcmVCbG9icyAmJlxuICAgICAgICBldmFsKCd0eXBlb2YgQnVmZmVyJykgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChcbiAgICAgICAgICAgIChldmFsKCdCdWZmZXInKSBhcyB0eXBlb2YgQnVmZmVyKSwgJ2lzQnVmZmVyJ1xuICAgICAgICApICYmXG4gICAgICAgIGZpcnN0VmFsdWUgaW5zdGFuY2VvZiBldmFsKCdCdWZmZXInKSAmJlxuICAgICAgICBzZWNvbmRWYWx1ZSBpbnN0YW5jZW9mIGV2YWwoJ0J1ZmZlcicpICYmXG4gICAgICAgIChmaXJzdFZhbHVlIGFzIEJ1ZmZlcikudG9TdHJpbmcoJ2Jhc2U2NCcpID09PVxuICAgICAgICAoc2Vjb25kVmFsdWUgYXMgQnVmZmVyKS50b1N0cmluZygnYmFzZTY0JylcbiAgICApXG4gICAgICAgIHJldHVybiB0cnVlXG5cbiAgICBpZiAoXG4gICAgICAgIG9wdGlvbnMuY29tcGFyZUJsb2JzICYmXG4gICAgICAgIHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICBmaXJzdFZhbHVlIGluc3RhbmNlb2YgQmxvYiAmJlxuICAgICAgICBzZWNvbmRWYWx1ZSBpbnN0YW5jZW9mIEJsb2JcbiAgICApXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxib29sZWFuIHwgc3RyaW5nPigoXG4gICAgICAgICAgICByZXNvbHZlOiAodmFsdWU6IGJvb2xlYW4gfCBzdHJpbmcpID0+IHZvaWRcbiAgICAgICAgKTogdm9pZCA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXM6IEFycmF5PEFycmF5QnVmZmVyIHwgbnVsbCB8IHN0cmluZz4gPSBbXVxuICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBbZmlyc3RWYWx1ZSwgc2Vjb25kVmFsdWVdKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZVJlYWRlcjogRmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgICAgICAgICAgICAgICBmaWxlUmVhZGVyLm9ubG9hZCA9IChldmVudDogRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LnRhcmdldCA9PT0gbnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKG51bGwpXG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKChldmVudC50YXJnZXQgYXMgRmlsZVJlYWRlcikucmVzdWx0KVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID09PSAyKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlc1swXSA9PT0gdmFsdWVzWzFdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG9wdGlvbnMucmV0dXJuUmVhc29uSWZOb3RFcXVhbCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGA+Pj4gQmxvYigke3JlcHJlc2VudCh2YWx1ZXNbMF0pfSkgICE9PSBgICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYEJsb2IoJHtyZXByZXNlbnQodmFsdWVzWzFdKX0pYCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZpbGVSZWFkZXIucmVhZEFzRGF0YVVSTCh2YWx1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgIGlmIChcbiAgICAgICAgaXNQbGFpbk9iamVjdChmaXJzdFZhbHVlKSAmJlxuICAgICAgICBpc1BsYWluT2JqZWN0KHNlY29uZFZhbHVlKSAmJlxuICAgICAgICAhKGZpcnN0VmFsdWUgaW5zdGFuY2VvZiBSZWdFeHAgfHwgc2Vjb25kVmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHx8XG4gICAgICAgIEFycmF5LmlzQXJyYXkoZmlyc3RWYWx1ZSkgJiZcbiAgICAgICAgQXJyYXkuaXNBcnJheShzZWNvbmRWYWx1ZSkgJiZcbiAgICAgICAgZmlyc3RWYWx1ZS5sZW5ndGggPT09IHNlY29uZFZhbHVlLmxlbmd0aCB8fFxuICAgICAgICAoXG4gICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgZGV0ZXJtaW5lVHlwZShmaXJzdFZhbHVlKSA9PT0gZGV0ZXJtaW5lVHlwZShzZWNvbmRWYWx1ZSkgJiZcbiAgICAgICAgICAgICAgICBbJ21hcCcsICdzZXQnXS5pbmNsdWRlcyhkZXRlcm1pbmVUeXBlKGZpcnN0VmFsdWUpKVxuICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgKGZpcnN0VmFsdWUgYXMgU2V0PHVua25vd24+KS5zaXplID09PVxuICAgICAgICAgICAgKHNlY29uZFZhbHVlIGFzIFNldDx1bmtub3duPikuc2l6ZVxuICAgICAgICApXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IHByb21pc2VzOiBBcnJheTxQcm9taXNlPGJvb2xlYW4gfCBzdHJpbmc+PiA9IFtdXG4gICAgICAgIGZvciAoY29uc3QgW2ZpcnN0LCBzZWNvbmRdIG9mIFtcbiAgICAgICAgICAgIFtmaXJzdFZhbHVlLCBzZWNvbmRWYWx1ZV0sXG4gICAgICAgICAgICBbc2Vjb25kVmFsdWUsIGZpcnN0VmFsdWVdXG4gICAgICAgIF0pIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0SXNBcnJheTogYm9vbGVhbiA9IEFycmF5LmlzQXJyYXkoZmlyc3QpXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZmlyc3RJc0FycmF5ICYmXG4gICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAhQXJyYXkuaXNBcnJheShzZWNvbmQpIHx8XG4gICAgICAgICAgICAgICAgICAgIChmaXJzdCBhcyBBcnJheTx1bmtub3duPikubGVuZ3RoICE9PVxuICAgICAgICAgICAgICAgICAgICAoc2Vjb25kIGFzIEFycmF5PHVua25vd24+KS5sZW5ndGhcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMucmV0dXJuUmVhc29uSWZOb3RFcXVhbCA/ICcubGVuZ3RoJyA6IGZhbHNlXG5cbiAgICAgICAgICAgIGNvbnN0IGZpcnN0SXNNYXAgPSBpc01hcChmaXJzdClcbiAgICAgICAgICAgIGlmIChmaXJzdElzTWFwICYmICghaXNNYXAoc2Vjb25kKSB8fCBmaXJzdC5zaXplICE9PSBzZWNvbmQuc2l6ZSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMucmV0dXJuUmVhc29uSWZOb3RFcXVhbCA/ICcuc2l6ZScgOiBmYWxzZVxuXG4gICAgICAgICAgICBjb25zdCBmaXJzdElzU2V0ID0gaXNTZXQoZmlyc3QpXG4gICAgICAgICAgICBpZiAoZmlyc3RJc1NldCAmJiAoIWlzU2V0KHNlY29uZCkgfHwgZmlyc3Quc2l6ZSAhPT0gc2Vjb25kLnNpemUpKVxuICAgICAgICAgICAgICAgIHJldHVybiBvcHRpb25zLnJldHVyblJlYXNvbklmTm90RXF1YWwgPyAnLnNpemUnIDogZmFsc2VcblxuICAgICAgICAgICAgaWYgKGZpcnN0SXNBcnJheSkge1xuICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IDBcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGZpcnN0IGFzIEFycmF5PHVua25vd24+KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmRlZXAgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4gfCBzdHJpbmc+IHwgc3RyaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICApID0gZXF1YWxzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWNvbmQgYXMgQXJyYXk8dW5rbm93bj4pW2luZGV4XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Li4ub3B0aW9ucywgZGVlcDogb3B0aW9ucy5kZWVwIC0gMX1cbiAgICAgICAgICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleDogbnVtYmVyID0gaW5kZXhcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGV0ZXJtaW5lUmVzdWx0ID0gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdDogYm9vbGVhbiB8IHN0cmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgKTogYm9vbGVhbiB8IHN0cmluZyA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFske1N0cmluZyhjdXJyZW50SW5kZXgpfV1gICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHsnWyc6ICcnLCAnPic6ICcgJ31bcmVzdWx0WzBdXSA/PyAnLicpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LCAndGhlbidcbiAgICAgICAgICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaCgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCBhcyBQcm9taXNlPGJvb2xlYW4gfCBzdHJpbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKS50aGVuKGRldGVybWluZVJlc3VsdCkpXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGV0ZXJtaW5lUmVzdWx0KHJlc3VsdClcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGluZGV4ICs9IDFcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZpcnN0SXNNYXApIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBmaXJzdClcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGVlcCAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0OiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbiB8IHN0cmluZz4gfCBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICkgPSBlcXVhbHMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlY29uZCBhcyBNYXA8dW5rbm93biwgdW5rbm93bj4pLmdldChrZXkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsuLi5vcHRpb25zLCBkZWVwOiBvcHRpb25zLmRlZXAgLSAxfVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2VcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGV0ZXJtaW5lUmVzdWx0ID0gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdDogYm9vbGVhbiB8IHN0cmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgKTogYm9vbGVhbiB8IHN0cmluZyA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGdldCgke3JlcHJlc2VudChrZXkpfSlgICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHsnWyc6ICcnLCAnPic6ICcgJ31bcmVzdWx0WzBdXSA/PyAnLicpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LCAndGhlbidcbiAgICAgICAgICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaCgoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCBhcyBQcm9taXNlPGJvb2xlYW4gfCBzdHJpbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKS50aGVuKGRldGVybWluZVJlc3VsdCkpXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGV0ZXJtaW5lUmVzdWx0KHJlc3VsdClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChmaXJzdElzU2V0KSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBmaXJzdClcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZGVlcCAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGVxdWFsID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1YlByb21pc2VzOiBBcnJheTxQcm9taXNlPGJvb2xlYW4gfCBzdHJpbmc+PiA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW11cbiAgICAgICAgICAgICAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTk9URTogQ2hlY2sgaWYgdGhlaXIgZXhpc3RzIGF0IGxlYXN0IG9uZSBiZWluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVxdWFsbHkuXG4gICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBzZWNvbmRWYWx1ZSBvZiBzZWNvbmQgYXMgU2V0PHVua25vd24+KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0OiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4gfCBzdHJpbmc+IHwgc3RyaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSA9IGVxdWFscyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Li4ub3B0aW9ucywgZGVlcDogb3B0aW9ucy5kZWVwIC0gMX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVxdWFsID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJQcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IGFzIFByb21pc2U8Ym9vbGVhbiB8IHN0cmluZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZXRlcm1pbmVSZXN1bHQgPSAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXF1YWw6IGJvb2xlYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICk6IGJvb2xlYW4gfCBzdHJpbmcgPT4gZXF1YWwgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucmV0dXJuUmVhc29uSWZOb3RFcXVhbCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGA+Pj4gey0+ICR7cmVwcmVzZW50KHZhbHVlKX0gbm90IGZvdW5kfWAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXF1YWwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTk9URTogV2UgZG8gbm90IGhhdmUgdG8gd2FpdCBmb3IgcHJvbWlzZXMgdG8gYmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWQgd2hlbiBvbmUgbWF0Y2ggY291bGQgYmUgZm91bmQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ViUHJvbWlzZXMubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2gobmV3IFByb21pc2U8Ym9vbGVhbiB8IHN0cmluZz4oKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlOiAodmFsdWU6IGJvb2xlYW4gfCBzdHJpbmcpID0+IHZvaWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvbWlzZS5hbGw8Ym9vbGVhbiB8IHN0cmluZz4oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJQcm9taXNlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLnRoZW4oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVzdWx0czogQXJyYXk8Ym9vbGVhbiB8IHN0cmluZz4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRldGVybWluZVJlc3VsdChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5zb21lKChyZXN1bHQpID0+IHJlc3VsdClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEbyBub3RoaW5nLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZXRlcm1pbmVSZXN1bHQoZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKFxuICAgICAgICAgICAgICAgICAgICBmaXJzdCBhcyBNYXBwaW5nPHVua25vd24+XG4gICAgICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnByb3BlcnRpZXMgJiYgIW9wdGlvbnMucHJvcGVydGllcy5pbmNsdWRlcyhrZXkpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGRvQnJlYWsgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGV4Y2VwdGlvblByZWZpeCBvZiBvcHRpb25zLmV4Y2VwdGlvblByZWZpeGVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtleS5zdGFydHNXaXRoKGV4Y2VwdGlvblByZWZpeCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb0JyZWFrID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGRvQnJlYWspXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmRlZXAgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4gfCBzdHJpbmc+IHwgc3RyaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICApID0gZXF1YWxzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWNvbmQgYXMgTWFwcGluZzx1bmtub3duPilba2V5XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Li4ub3B0aW9ucywgZGVlcDogb3B0aW9ucy5kZWVwIC0gMX1cbiAgICAgICAgICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRldGVybWluZVJlc3VsdCA9IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ6IGJvb2xlYW4gfCBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICk6IGJvb2xlYW4gfCBzdHJpbmcgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJyA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeydbJzogJycsICc+JzogJyAnfVtyZXN1bHRbMF1dID8/ICcuJykgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQsICd0aGVuJ1xuICAgICAgICAgICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IGFzIFByb21pc2U8Ym9vbGVhbiB8IHN0cmluZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLnRoZW4oZGV0ZXJtaW5lUmVzdWx0KSlcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZXRlcm1pbmVSZXN1bHQocmVzdWx0KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb21pc2VzLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxib29sZWFuIHwgc3RyaW5nPigoXG4gICAgICAgICAgICAgICAgcmVzb2x2ZTogKHZhbHVlOiBib29sZWFuIHwgc3RyaW5nKSA9PiB2b2lkXG4gICAgICAgICAgICApOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdHM6IEFycmF5PGJvb2xlYW4gfCBzdHJpbmc+KTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0IHx8IHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvIG5vdGhpbmcuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgcmV0dXJuIG9wdGlvbnMucmV0dXJuUmVhc29uSWZOb3RFcXVhbCA/XG4gICAgICAgIGA+Pj4gJHtyZXByZXNlbnQoZmlyc3RWYWx1ZSl9ICE9PSAke3JlcHJlc2VudChzZWNvbmRWYWx1ZSl9YCA6XG4gICAgICAgIGZhbHNlXG59XG4vKipcbiAqIFdyYXBzIGdpdmVuIGRhdGEgc3RydWN0dXJlIGludG8gcHJveGllcyByZWN1cnNpdmVseSB0byBldmFsdWF0ZSBhbmQgcmVzb2x2ZVxuICogZWFjaCBnZXQgcmVxdWVzdCB0byBkYXRhIGhhdmluZyBhbiBvYmplY3Qgd2l0aCBpbmRpY2F0aW5nIGtleXMgYW5kIHJlcGxhY2VzXG4gKiB0aGF0IG9iamVjdCB3aXRoIGNvcnJlc3BvbmRpbmcgZXZhbHVhdGVkIHZhbHVlcy4gQWxsIG5lc3RlZCBvYmplY3RzIGFyZVxuICogd3JhcHBlZCB3aXRoIGEgcHJveHkgdG8gcmVzb2x2ZSBjaGFpbnMgb2YgcmVmZXJlbmNpbmcgZXhwcmVzc2lvbnMgYXMgd2VsbC5cbiAqIEBwYXJhbSBvYmplY3QgLSBHaXZlbiBtYXBwaW5nIHRvIHJlc29sdmUuXG4gKiBAcGFyYW0gZ2l2ZW5PcHRpb25zIC0gT3B0aW9ucyB0byBjb25maWd1cmUgZXZhbHVhdGlvbi5cbiAqIEBwYXJhbSBnaXZlbk9wdGlvbnMuc2NvcGUgLSBTY29wZSB0byB1c2UgZXZhbHVhdGUgYWdhaW4uXG4gKiBAcGFyYW0gZ2l2ZW5PcHRpb25zLnNlbGZSZWZlcmVuY2VOYW1lIC0gTmFtZSB0byB1c2UgZm9yIHJlZmVyZW5jZSB0byBnaXZlblxuICogb2JqZWN0LlxuICogQHBhcmFtIGdpdmVuT3B0aW9ucy5leHByZXNzaW9uSW5kaWNhdG9yS2V5IC0gSW5kaWNhdG9yIHByb3BlcnR5IG5hbWUgdG8gbWFya1xuICogYSB2YWx1ZSB0byBldmFsdWF0ZS5cbiAqIEBwYXJhbSBnaXZlbk9wdGlvbnMuZXhlY3V0aW9uSW5kaWNhdG9yS2V5IC0gSW5kaWNhdG9yIHByb3BlcnR5IG5hbWUgdG8gbWFya1xuICogYSB2YWx1ZSB0byBldmFsdWF0ZS5cbiAqIEByZXR1cm5zIEV2YWx1YXRlZCBnaXZlbiBtYXBwaW5nLlxuICovXG5leHBvcnQgY29uc3QgZXZhbHVhdGVEeW5hbWljRGF0YSA9IDxUeXBlID0gdW5rbm93bj4oXG4gICAgb2JqZWN0OiBudWxsIHwgUmVjdXJzaXZlRXZhbHVhdGVhYmxlPFR5cGU+LFxuICAgIGdpdmVuT3B0aW9uczogUGFydGlhbDxFdmFsdWF0ZUR5bmFtaWNEYXRhT3B0aW9ucz4gPSB7fVxuKTogVHlwZSA9PiB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgc2NvcGU6IHt9LFxuICAgICAgICBzZWxmUmVmZXJlbmNlTmFtZTogJ3NlbGYnLFxuICAgICAgICBleHByZXNzaW9uSW5kaWNhdG9yS2V5OiAnX19ldmFsdWF0ZV9fJyxcbiAgICAgICAgZXhlY3V0aW9uSW5kaWNhdG9yS2V5OiAnX19leGVjdXRlX18nLFxuICAgICAgICAuLi5naXZlbk9wdGlvbnNcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iamVjdCAhPT0gJ29iamVjdCcgfHwgb2JqZWN0ID09PSBudWxsKVxuICAgICAgICByZXR1cm4gb2JqZWN0IGFzIHVua25vd24gYXMgVHlwZVxuXG4gICAgaWYgKCEob3B0aW9ucy5zZWxmUmVmZXJlbmNlTmFtZSBpbiBvcHRpb25zLnNjb3BlKSlcbiAgICAgICAgb3B0aW9ucy5zY29wZVtvcHRpb25zLnNlbGZSZWZlcmVuY2VOYW1lXSA9IG9iamVjdFxuXG4gICAgY29uc3QgaW50ZXJuYWxFdmFsdWF0ZUFuZFRocm93RXJyb3IgPSAoXG4gICAgICAgIGNvZGU6IHN0cmluZywgdHlwZTogc3RyaW5nID0gb3B0aW9ucy5leHByZXNzaW9uSW5kaWNhdG9yS2V5XG4gICAgKTogVHlwZSA9PlxuICAgICAgICBldmFsdWF0ZUFuZFRocm93RXJyb3I8VHlwZT4oXG4gICAgICAgICAgICBjb2RlLCBvcHRpb25zLnNjb3BlLCB0eXBlID09PSBvcHRpb25zLmV4ZWN1dGlvbkluZGljYXRvcktleVxuICAgICAgICApXG5cbiAgICBjb25zdCBhZGRQcm94eVJlY3Vyc2l2ZWx5ID0gKGRhdGE6IHVua25vd24pOiB1bmtub3duID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnIHx8XG4gICAgICAgICAgICBkYXRhID09PSBudWxsIHx8XG4gICAgICAgICAgICB0eXBlb2YgUHJveHkgPT09ICd1bmRlZmluZWQnXG4gICAgICAgIClcbiAgICAgICAgICAgIHJldHVybiBkYXRhXG5cbiAgICAgICAgZm9yIChjb25zdCBba2V5LCBnaXZlblZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhkYXRhKSlcbiAgICAgICAgICAgIGlmIChrZXkgIT09ICdfX3RhcmdldF9fJyAmJiBpc09iamVjdChnaXZlblZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlOiB1bmtub3duID0gZ2l2ZW5WYWx1ZVxuXG4gICAgICAgICAgICAgICAgYWRkUHJveHlSZWN1cnNpdmVseSh2YWx1ZSlcbiAgICAgICAgICAgICAgICAvLyBOT1RFOiBXZSBvbmx5IHdyYXAgbmVlZGVkIG9iamVjdHMgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuXG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSwgb3B0aW9ucy5leHByZXNzaW9uSW5kaWNhdG9yS2V5XG4gICAgICAgICAgICAgICAgICAgICkgfHxcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsIG9wdGlvbnMuZXhlY3V0aW9uSW5kaWNhdG9yS2V5XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFja3VwOiBNYXBwaW5nPHVua25vd24+ID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGFzIE1hcHBpbmc8dW5rbm93bj5cbiAgICAgICAgICAgICAgICAgICAgKGRhdGEgYXMgTWFwcGluZzxQcm94eVR5cGU+KVtrZXldID0gbmV3IFByb3h5KFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgYXMgUmVjb3JkPHN0cmluZyB8IHN5bWJvbCwgdW5rbm93bj4sXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogUmVjb3JkPHN0cmluZyB8IHN5bWJvbCwgdW5rbm93bj4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogc3RyaW5nIHwgc3ltYm9sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTogdW5rbm93biA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09ICdfX3RhcmdldF9fJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXRcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSAnaGFzT3duUHJvcGVydHknKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldFtrZXldXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PVEU6IFZlcnkgY29tcGxpY2F0ZWQgc2VjdGlvbiwgZG8gb25seVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlcyB3aGlsZSBoYXZpbmcgZ29vZCB0ZXN0cy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB0eXBlIG9mIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZXhwcmVzc2lvbkluZGljYXRvcktleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZXhlY3V0aW9uSW5kaWNhdG9yS2V5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ID09PSB0eXBlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHRhcmdldFtrZXldID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbEV2YWx1YXRlQW5kVGhyb3dFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFtrZXldLCB0eXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRUYXJnZXQ6IHVua25vd24gPSByZXNvbHZlKHRhcmdldClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gJ3RvU3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBNYXBwaW5nPFVua25vd25GdW5jdGlvbj4gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsRXZhbHVhdGVBbmRUaHJvd0Vycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlZFRhcmdldCBhcyBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIGFzIE1hcHBpbmc8VW5rbm93bkZ1bmN0aW9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0W2tleV0uYmluZChyZXN1bHQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxFdmFsdWF0ZUFuZFRocm93RXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVkVGFyZ2V0IGFzIHN0cmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgYXMgUmVjb3JkPHN5bWJvbCwgdW5rbm93bj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRba2V5XSBhcyBudWxsIHwgVW5rbm93bkZ1bmN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApPy5iaW5kKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldIGFzIFVua25vd25GdW5jdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkuYmluZChyZXN1bHQpXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRba2V5XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB0eXBlIG9mIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZXhwcmVzc2lvbkluZGljYXRvcktleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZXhlY3V0aW9uSW5kaWNhdG9yS2V5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jYWxsKHRhcmdldCwgdHlwZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGludGVybmFsRXZhbHVhdGVBbmRUaHJvd0Vycm9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlZFRhcmdldCBhcyBzdHJpbmcsIHR5cGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIGFzIE1hcHBpbmc8dW5rbm93bj4pW2tleV1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRUYXJnZXQgYXMgTWFwcGluZzx1bmtub3duPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApW2tleV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW5kIG9mIGNvbXBsaWNhdGVkIHN0dWZmLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duS2V5czogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IE1hcHBpbmc8dW5rbm93bj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOiBBcnJheTxzdHJpbmc+ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB0eXBlIG9mIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZXhwcmVzc2lvbkluZGljYXRvcktleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZXhlY3V0aW9uSW5kaWNhdG9yS2V5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jYWxsKHRhcmdldCwgdHlwZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbEV2YWx1YXRlQW5kVGhyb3dFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRbdHlwZV0gYXMgc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGFyZ2V0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgKSBhcyBQcm94eVR5cGVcblxuICAgICAgICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgICAgICAgICAgTk9URTogS25vd24gcHJveHkgcG9seWZpbGxzIGRvZXMgbm90IHByb3ZpZGUgdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICBcIl9fdGFyZ2V0X19cIiBhcGkuXG4gICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIGlmICghKGRhdGEgYXMgTWFwcGluZzxQcm94eVR5cGU+KVtrZXldLl9fdGFyZ2V0X18pXG4gICAgICAgICAgICAgICAgICAgICAgICAoZGF0YSBhcyBNYXBwaW5nPFByb3h5VHlwZT4pW2tleV0uX190YXJnZXRfXyA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja3VwXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRhXG4gICAgfVxuXG4gICAgY29uc3QgcmVzb2x2ZSA9IChkYXRhOiB1bmtub3duKTogdW5rbm93biA9PiB7XG4gICAgICAgIGlmIChpc09iamVjdChkYXRhKSkge1xuICAgICAgICAgICAgaWYgKGlzUHJveHkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAvLyBOT1RFOiBXZSBoYXZlIHRvIHNraXAgXCJvd25LZXlzXCIgcHJveHkgdHJhcCBoZXJlLlxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdHlwZSBvZiBbXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZXhwcmVzc2lvbkluZGljYXRvcktleSxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5leGVjdXRpb25JbmRpY2F0b3JLZXlcbiAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIHR5cGUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChkYXRhIGFzIE1hcHBpbmc8dW5rbm93bj4pW3R5cGVdXG5cbiAgICAgICAgICAgICAgICBkYXRhID0gZGF0YS5fX3RhcmdldF9fXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKFxuICAgICAgICAgICAgICAgIGRhdGEgYXMgTWFwcGluZzx1bmtub3duPlxuICAgICAgICAgICAgKSkge1xuICAgICAgICAgICAgICAgIGlmIChbXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZXhwcmVzc2lvbkluZGljYXRvcktleSxcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5leGVjdXRpb25JbmRpY2F0b3JLZXlcbiAgICAgICAgICAgICAgICBdLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBQcm94eSA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbEV2YWx1YXRlQW5kVGhyb3dFcnJvcih2YWx1ZSBhcyBzdHJpbmcpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgKGRhdGEgYXMgTWFwcGluZzx1bmtub3duPilba2V5XSA9IHJlc29sdmUodmFsdWUpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0YVxuICAgIH1cblxuICAgIG9wdGlvbnMuc2NvcGUucmVzb2x2ZSA9IHJlc29sdmVcbiAgICBjb25zdCByZW1vdmVQcm94eVJlY3Vyc2l2ZWx5ID0gKGRhdGE6IHVua25vd24pOiB1bmtub3duID0+IHtcbiAgICAgICAgaWYgKGlzT2JqZWN0KGRhdGEpKVxuICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGF0YSkpXG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBrZXkgIT09ICdfX3RhcmdldF9fJyAmJlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgICAgICBbJ2Z1bmN0aW9uJywgJ3VuZGVmaW5lZCddLmluY2x1ZGVzKHR5cGVvZiB2YWx1ZSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0OiB1bmtub3duID1cbiAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZSBhcyB7X190YXJnZXRfXzogdW5rbm93bn0pLl9fdGFyZ2V0X19cbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0YXJnZXQgIT09ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtrZXldID0gdGFyZ2V0XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVByb3h5UmVjdXJzaXZlbHkodmFsdWUpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRhXG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChcbiAgICAgICAgb2JqZWN0LCBvcHRpb25zLmV4cHJlc3Npb25JbmRpY2F0b3JLZXlcbiAgICApKVxuICAgICAgICByZXR1cm4gaW50ZXJuYWxFdmFsdWF0ZUFuZFRocm93RXJyb3Iob2JqZWN0W1xuICAgICAgICAgICAgb3B0aW9ucy5leHByZXNzaW9uSW5kaWNhdG9yS2V5IGFzIGtleW9mIFJlY3Vyc2l2ZUV2YWx1YXRlYWJsZTxUeXBlPlxuICAgICAgICBdKVxuICAgIGVsc2UgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChcbiAgICAgICAgb2JqZWN0LCBvcHRpb25zLmV4ZWN1dGlvbkluZGljYXRvcktleVxuICAgICkpXG4gICAgICAgIHJldHVybiBpbnRlcm5hbEV2YWx1YXRlQW5kVGhyb3dFcnJvcihcbiAgICAgICAgICAgIG9iamVjdFtvcHRpb25zLmV4ZWN1dGlvbkluZGljYXRvcktleSBhc1xuICAgICAgICAgICAgICAgIGtleW9mIFJlY3Vyc2l2ZUV2YWx1YXRlYWJsZTxUeXBlPl0sXG4gICAgICAgICAgICBvcHRpb25zLmV4ZWN1dGlvbkluZGljYXRvcktleVxuICAgICAgICApXG5cbiAgICByZXR1cm4gcmVtb3ZlUHJveHlSZWN1cnNpdmVseShyZXNvbHZlKGFkZFByb3h5UmVjdXJzaXZlbHkob2JqZWN0KSkpIGFzIFR5cGVcbn1cbi8qKlxuICogU2VhcmNoZXMgZm9yIGluZGljYXRpbmcga2V5cyBhbmQgcmVwbGFjZXMgdGhhdCBkYXRhIHdpdGggY29ycmVzcG9uZGluZ1xuICogZXZhbHVhdGVkIGFuZCBwcm9taXNlIHJlc29sdmVkIHZhbHVlLlxuICogQHBhcmFtIGRhdGEgLSBHaXZlbiBtYXBwaW5nIHRvIHJlc29sdmUuXG4gKiBAcGFyYW0gZ2l2ZW5PcHRpb25zIC0gT3B0aW9ucyB0byBjb25maWd1cmUgZXZhbHVhdGlvbi5cbiAqIEBwYXJhbSBnaXZlbk9wdGlvbnMuc2NvcGUgLSBTY29wZSB0byB1c2UgZXZhbHVhdGUgYWdhaW4uXG4gKiBAcGFyYW0gZ2l2ZW5PcHRpb25zLnNlbGZSZWZlcmVuY2VOYW1lIC0gTmFtZSB0byB1c2UgZm9yIHJlZmVyZW5jZSB0byBnaXZlblxuICogb2JqZWN0LlxuICogQHBhcmFtIGdpdmVuT3B0aW9ucy5leHByZXNzaW9uSW5kaWNhdG9yS2V5IC0gSW5kaWNhdG9yIHByb3BlcnR5IG5hbWUgdG8gbWFya1xuICogYSB2YWx1ZSB0byBldmFsdWF0ZS5cbiAqIEBwYXJhbSBnaXZlbk9wdGlvbnMuZXhlY3V0aW9uSW5kaWNhdG9yS2V5IC0gSW5kaWNhdG9yIHByb3BlcnR5IG5hbWUgdG8gbWFya1xuICogYSB2YWx1ZSB0byBldmFsdWF0ZS5cbiAqIEByZXR1cm5zIEV2YWx1YXRlZCBnaXZlbiBtYXBwaW5nLlxuICovXG5leHBvcnQgY29uc3QgZXZhbHVhdGVBc3luY0R5bmFtaWNEYXRhID0gYXN5bmMgPFR5cGUgPSB1bmtub3duPihcbiAgICBkYXRhOiBudWxsIHwgUmVjdXJzaXZlQXN5bmNFdmFsdWF0ZWFibGU8VHlwZT4sXG4gICAgZ2l2ZW5PcHRpb25zOiBQYXJ0aWFsPEV2YWx1YXRlRHluYW1pY0RhdGFPcHRpb25zPiA9IHt9XG4pOiBQcm9taXNlPFR5cGU+ID0+IHtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICBzY29wZToge30sXG4gICAgICAgIHNlbGZSZWZlcmVuY2VOYW1lOiAnc2VsZicsXG4gICAgICAgIGV4cHJlc3Npb25JbmRpY2F0b3JLZXk6ICdfX2F3YWl0X2V2YWx1YXRlX18nLFxuICAgICAgICBleGVjdXRpb25JbmRpY2F0b3JLZXk6ICdfX2F3YWl0X2V4ZWN1dGVfXycsXG4gICAgICAgIC4uLmdpdmVuT3B0aW9uc1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcgfHwgZGF0YSA9PT0gbnVsbClcbiAgICAgICAgcmV0dXJuIGRhdGEgYXMgdW5rbm93biBhcyBUeXBlXG5cbiAgICBpZiAoIShvcHRpb25zLnNlbGZSZWZlcmVuY2VOYW1lIGluIG9wdGlvbnMuc2NvcGUpKVxuICAgICAgICBvcHRpb25zLnNjb3BlW29wdGlvbnMuc2VsZlJlZmVyZW5jZU5hbWVdID0gZGF0YVxuXG4gICAgY29uc3QgcmVzdWx0OiBUeXBlID0gZGF0YSBhcyBUeXBlXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGF0YSkpIHtcbiAgICAgICAgaWYgKFtcbiAgICAgICAgICAgIG9wdGlvbnMuZXhwcmVzc2lvbkluZGljYXRvcktleSwgb3B0aW9ucy5leGVjdXRpb25JbmRpY2F0b3JLZXlcbiAgICAgICAgXS5pbmNsdWRlcyhrZXkpKVxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGV2YWx1YXRlQW5kVGhyb3dFcnJvcihcbiAgICAgICAgICAgICAgICB2YWx1ZSBhcyBzdHJpbmcsXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5zY29wZSxcbiAgICAgICAgICAgICAgICBrZXkgPT09IG9wdGlvbnMuZXhlY3V0aW9uSW5kaWNhdG9yS2V5XG4gICAgICAgICAgICApXG5cbiAgICAgICAgaWYgKGlzUGxhaW5PYmplY3QodmFsdWUpKVxuICAgICAgICAgICAgKHJlc3VsdCBhcyBNYXBwaW5nPHVua25vd24+KVtrZXldID1cbiAgICAgICAgICAgICAgICBhd2FpdCBldmFsdWF0ZUFzeW5jRHluYW1pY0RhdGEodmFsdWUsIG9wdGlvbnMpXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdFxufVxuLyoqXG4gKiBSZW1vdmVzIHByb3BlcnRpZXMgaW4gb2JqZWN0cyB3aGVyZSBhIGR5bmFtaWMgaW5kaWNhdG9yIGxpdmVzLlxuICogQHBhcmFtIGRhdGEgLSBPYmplY3QgdG8gdHJhdmVyc2UgcmVjdXJzaXZlbHkuXG4gKiBAcGFyYW0gZXhwcmVzc2lvbkluZGljYXRvcnMgLSBQcm9wZXJ0eSBrZXkgdG8gcmVtb3ZlLlxuICogQHJldHVybnMgR2l2ZW4gb2JqZWN0IHdpdGggcmVtb3ZlZCBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlS2V5c0luRXZhbHVhdGlvbiA9IDxcbiAgICBUIGV4dGVuZHMgTWFwcGluZzx1bmtub3duPiA9IE1hcHBpbmc8dW5rbm93bj5cbj4oXG4gICAgICAgIGRhdGE6IFQsXG4gICAgICAgIGV4cHJlc3Npb25JbmRpY2F0b3JzOiBBcnJheTxzdHJpbmc+ID0gWydfX2V2YWx1YXRlX18nLCAnX19leGVjdXRlX18nXVxuICAgICk6IFQgPT4ge1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhZXhwcmVzc2lvbkluZGljYXRvcnMuaW5jbHVkZXMoa2V5KSAmJlxuICAgICAgICAgICAgZXhwcmVzc2lvbkluZGljYXRvcnMuc29tZSgobmFtZTogc3RyaW5nKTogYm9vbGVhbiA9PlxuICAgICAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBuYW1lKVxuICAgICAgICAgICAgKVxuICAgICAgICApXG4gICAgICAgICAgICBkZWxldGUgKGRhdGEgYXMgdW5rbm93biBhcyBNYXBwaW5nPHVua25vd24+KVtrZXldXG4gICAgICAgIGVsc2UgaWYgKGlzUGxhaW5PYmplY3QodmFsdWUpKVxuICAgICAgICAgICAgcmVtb3ZlS2V5c0luRXZhbHVhdGlvbih2YWx1ZSwgZXhwcmVzc2lvbkluZGljYXRvcnMpXG5cbiAgICByZXR1cm4gZGF0YVxufVxuLyoqXG4gKiBFeHRlbmRzIGdpdmVuIHRhcmdldCBvYmplY3Qgd2l0aCBnaXZlbiBzb3VyY2VzIG9iamVjdC4gQXMgdGFyZ2V0IGFuZFxuICogc291cmNlcyBtYW55IGV4cGFuZGFibGUgdHlwZXMgYXJlIGFsbG93ZWQgYnV0IHRhcmdldCBhbmQgc291cmNlcyBoYXZlIHRvXG4gKiBjb21lIGZyb20gdGhlIHNhbWUgdHlwZS5cbiAqIEBwYXJhbSB0YXJnZXRPckRlZXBJbmRpY2F0b3IgLSBNYXliZSB0aGUgdGFyZ2V0IG9yIGRlZXAgaW5kaWNhdG9yLlxuICogQHBhcmFtIHRhcmdldE9yU291cmNlIC0gVGFyZ2V0IG9yIHNvdXJjZSBvYmplY3Q7IGRlcGVuZGluZyBvbiBmaXJzdFxuICogYXJndW1lbnQuXG4gKiBAcGFyYW0gYWRkaXRpb25hbFNvdXJjZXMgLSBTb3VyY2Ugb2JqZWN0cyB0byBleHRlbmQgaW50byB0YXJnZXQuXG4gKiBAcmV0dXJucyBSZXR1cm5zIGdpdmVuIHRhcmdldCBleHRlbmRlZCB3aXRoIGFsbCBnaXZlbiBzb3VyY2VzLlxuICovXG5leHBvcnQgY29uc3QgZXh0ZW5kID0gPFQgPSBNYXBwaW5nPHVua25vd24+PihcbiAgICB0YXJnZXRPckRlZXBJbmRpY2F0b3I6IChcbiAgICAgICAgYm9vbGVhbiB8IHR5cGVvZiBJR05PUkVfTlVMTF9BTkRfVU5ERUZJTkVEX1NZTUJPTCB8IFJlY3Vyc2l2ZVBhcnRpYWw8VD5cbiAgICApLFxuICAgIHRhcmdldE9yU291cmNlPzogbnVsbCB8IFJlY3Vyc2l2ZVBhcnRpYWw8VD4sXG4gICAgLi4uYWRkaXRpb25hbFNvdXJjZXM6IEFycmF5PFJlY3Vyc2l2ZVBhcnRpYWw8VD4+XG4pOiBUID0+IHtcbiAgICBsZXQgZGVlcDogYm9vbGVhbiB8IHR5cGVvZiBJR05PUkVfTlVMTF9BTkRfVU5ERUZJTkVEX1NZTUJPTCA9IGZhbHNlXG4gICAgbGV0IHNvdXJjZXM6IEFycmF5PFJlY3Vyc2l2ZVBhcnRpYWw8VD4gfCBudWxsPiA9IGFkZGl0aW9uYWxTb3VyY2VzXG4gICAgbGV0IHRhcmdldDogbnVsbCB8IFJlY3Vyc2l2ZVBhcnRpYWw8VD4gfCB1bmRlZmluZWRcblxuICAgIGlmIChcbiAgICAgICAgdGFyZ2V0T3JEZWVwSW5kaWNhdG9yID09PSBJR05PUkVfTlVMTF9BTkRfVU5ERUZJTkVEX1NZTUJPTCB8fFxuICAgICAgICB0eXBlb2YgdGFyZ2V0T3JEZWVwSW5kaWNhdG9yID09PSAnYm9vbGVhbidcbiAgICApIHtcbiAgICAgICAgLy8gSGFuZGxlIGEgZGVlcCBjb3B5IHNpdHVhdGlvbiBhbmQgc2tpcCBkZWVwIGluZGljYXRvciBhbmQgdGFyZ2V0LlxuICAgICAgICBkZWVwID0gdGFyZ2V0T3JEZWVwSW5kaWNhdG9yIGFzXG4gICAgICAgICAgICBib29sZWFuIHwgdHlwZW9mIElHTk9SRV9OVUxMX0FORF9VTkRFRklORURfU1lNQk9MXG4gICAgICAgIHRhcmdldCA9IHRhcmdldE9yU291cmNlXG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0T3JEZWVwSW5kaWNhdG9yXG4gICAgICAgIGlmIChpc09iamVjdCh0YXJnZXRPclNvdXJjZSkpXG4gICAgICAgICAgICBzb3VyY2VzID0gW3RhcmdldE9yU291cmNlLCAuLi5zb3VyY2VzXVxuICAgICAgICBlbHNlIGlmICh0YXJnZXRPclNvdXJjZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0T3JTb3VyY2VcbiAgICB9XG5cbiAgICBjb25zdCBtZXJnZVZhbHVlID0gKFxuICAgICAgICB0YXJnZXRWYWx1ZTogVmFsdWVPZjxUPiwgdmFsdWU6IFZhbHVlT2Y8VD5cbiAgICApOiBWYWx1ZU9mPFQ+ID0+IHtcbiAgICAgICAgaWYgKHZhbHVlID09PSB0YXJnZXRWYWx1ZSlcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXRWYWx1ZVxuXG4gICAgICAgIC8vIFRyYXZlcnNlIHJlY3Vyc2l2ZWx5IGlmIHdlJ3JlIG1lcmdpbmcgcGxhaW4gb2JqZWN0cyBvciBtYXBzLlxuICAgICAgICBpZiAoZGVlcCAmJiB2YWx1ZSAmJiAoaXNQbGFpbk9iamVjdCh2YWx1ZSkgfHwgaXNNYXAodmFsdWUpKSkge1xuICAgICAgICAgICAgbGV0IGNsb25lOiBWYWx1ZU9mPFQ+XG4gICAgICAgICAgICBpZiAoaXNNYXAodmFsdWUpKVxuICAgICAgICAgICAgICAgIGNsb25lID0gKHRhcmdldFZhbHVlICYmIGlzTWFwKHRhcmdldFZhbHVlKSkgP1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRWYWx1ZSA6XG4gICAgICAgICAgICAgICAgICAgIG5ldyBNYXAoKSBhcyB1bmtub3duIGFzIFZhbHVlT2Y8VD5cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBjbG9uZSA9ICh0YXJnZXRWYWx1ZSAmJiBpc1BsYWluT2JqZWN0KHRhcmdldFZhbHVlKSkgP1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRWYWx1ZSA6XG4gICAgICAgICAgICAgICAgICAgIHt9IGFzIHVua25vd24gYXMgVmFsdWVPZjxUPlxuXG4gICAgICAgICAgICByZXR1cm4gZXh0ZW5kKGRlZXAsIGNsb25lIGFzIFJlY3Vyc2l2ZVBhcnRpYWw8VD4sIHZhbHVlKSBhc1xuICAgICAgICAgICAgICAgIFZhbHVlT2Y8VD5cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZVxuICAgIH1cblxuICAgIGZvciAoY29uc3Qgc291cmNlIG9mIHNvdXJjZXMpIHtcbiAgICAgICAgbGV0IHRhcmdldFR5cGU6IHN0cmluZyA9IHR5cGVvZiB0YXJnZXRcbiAgICAgICAgbGV0IHNvdXJjZVR5cGU6IHN0cmluZyA9IHR5cGVvZiBzb3VyY2VcblxuICAgICAgICBpZiAoaXNNYXAodGFyZ2V0KSlcbiAgICAgICAgICAgIHRhcmdldFR5cGUgKz0gJyBNYXAnXG4gICAgICAgIGlmIChpc01hcChzb3VyY2UpKVxuICAgICAgICAgICAgc291cmNlVHlwZSArPSAnIE1hcCdcblxuICAgICAgICBpZiAodGFyZ2V0VHlwZSA9PT0gc291cmNlVHlwZSAmJiB0YXJnZXQgIT09IHNvdXJjZSlcbiAgICAgICAgICAgIGlmIChpc01hcCh0YXJnZXQpICYmIGlzTWFwKHNvdXJjZSkpXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2Ygc291cmNlKVxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQuc2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2VWYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQuZ2V0KGtleSkgYXMgVmFsdWVPZjxUPixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBhcyBWYWx1ZU9mPFQ+XG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIGlzT2JqZWN0KHRhcmdldCkgJiYgIUFycmF5LmlzQXJyYXkodGFyZ2V0KSAmJlxuICAgICAgICAgICAgICAgICEodHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnICYmIHRhcmdldCBpbnN0YW5jZW9mIEJsb2IpICYmXG4gICAgICAgICAgICAgICAgaXNPYmplY3Qoc291cmNlKSAmJiAhQXJyYXkuaXNBcnJheShzb3VyY2UpICYmXG4gICAgICAgICAgICAgICAgISh0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgJiYgc291cmNlIGluc3RhbmNlb2YgQmxvYilcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHNvdXJjZSkpXG4gICAgICAgICAgICAgICAgICAgIGlmICghKFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVlcCA9PT0gSUdOT1JFX05VTExfQU5EX1VOREVGSU5FRF9TWU1CT0wgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIFtudWxsLCB1bmRlZmluZWRdLmluY2x1ZGVzKHZhbHVlIGFzIG51bGwpXG4gICAgICAgICAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRba2V5IGFzIGtleW9mIFRdID0gbWVyZ2VWYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRba2V5IGFzIGtleW9mIFRdIGFzIFZhbHVlT2Y8VD4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgYXMgVmFsdWVPZjxUPlxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gc291cmNlXG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRhcmdldCA9IHNvdXJjZVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQgYXMgVFxufVxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBwcm94eSBoYW5kbGVyIHdoaWNoIGZvcndhcmRzIGFsbCBvcGVyYXRpb25zIHRvIGdpdmVuIG9iamVjdFxuICogYXMgdGhlcmUgd291bGRuJ3QgYmUgYSBwcm94eS5cbiAqIEBwYXJhbSB0YXJnZXQgLSBPYmplY3QgdG8gcHJveHkuXG4gKiBAcGFyYW0gbWV0aG9kTmFtZXMgLSBNYXBwaW5nIG9mIG9wZXJhbmQgbmFtZSB0byBvYmplY3Qgc3BlY2lmaWMgbWV0aG9kXG4gKiBuYW1lLlxuICogQHJldHVybnMgRGV0ZXJtaW5lZCBwcm94eSBoYW5kbGVyLlxuICovXG5leHBvcnQgY29uc3QgZ2V0UHJveHlIYW5kbGVyID0gPFQgPSB1bmtub3duPihcbiAgICB0YXJnZXQ6IFQsIG1ldGhvZE5hbWVzOiBNYXBwaW5nID0ge31cbik6IFByb3h5SGFuZGxlcjxUPiA9PiB7XG4gICAgbWV0aG9kTmFtZXMgPSB7XG4gICAgICAgIGRlbGV0ZTogJ1tdJyxcbiAgICAgICAgZ2V0OiAnW10nLFxuICAgICAgICBoYXM6ICdbXScsXG4gICAgICAgIHNldDogJ1tdJyxcbiAgICAgICAgLi4ubWV0aG9kTmFtZXNcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBkZWxldGVQcm9wZXJ0eTogKF90YXJnZXRPYmplY3Q6IFQsIGtleTogc3RyaW5nIHwgc3ltYm9sKTogYm9vbGVhbiA9PiB7XG4gICAgICAgICAgICBpZiAobWV0aG9kTmFtZXMuZGVsZXRlID09PSAnW10nICYmIHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0YXJnZXRba2V5IGFzIGtleW9mIFRdXG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W21ldGhvZE5hbWVzLmRlbGV0ZSBhcyBrZXlvZiBUXSBhc1xuICAgICAgICAgICAgICAgICAgICAgICAgdW5rbm93biBhc1xuICAgICAgICAgICAgICAgICAgICAgICAgKGtleTogc3RyaW5nIHwgc3ltYm9sKSA9PiBib29sZWFuXG4gICAgICAgICAgICAgICAgKShrZXkpXG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIGdldDogKF90YXJnZXRPYmplY3Q6IFQsIGtleTogc3RyaW5nIHwgc3ltYm9sKTogdW5rbm93biA9PiB7XG4gICAgICAgICAgICBpZiAobWV0aG9kTmFtZXMuZ2V0ID09PSAnW10nICYmIHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXRba2V5IGFzIGtleW9mIFRdXG5cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgdGFyZ2V0W21ldGhvZE5hbWVzLmdldCBhcyBrZXlvZiBUXSBhc1xuICAgICAgICAgICAgICAgICAgICB1bmtub3duIGFzXG4gICAgICAgICAgICAgICAgICAgIChrZXk6IHN0cmluZyB8IHN5bWJvbCkgPT4gdW5rbm93blxuICAgICAgICAgICAgKShrZXkpXG4gICAgICAgIH0sXG4gICAgICAgIGhhczogKF90YXJnZXRPYmplY3Q6IFQsIGtleTogc3RyaW5nIHwgc3ltYm9sKTogYm9vbGVhbiA9PiB7XG4gICAgICAgICAgICBpZiAobWV0aG9kTmFtZXMuaGFzID09PSAnW10nKVxuICAgICAgICAgICAgICAgIHJldHVybiBrZXkgaW4gKHRhcmdldCBhcyBvYmplY3QpXG5cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgdGFyZ2V0W21ldGhvZE5hbWVzLmhhcyBhcyBrZXlvZiBUXSBhc1xuICAgICAgICAgICAgICAgICAgICB1bmtub3duIGFzXG4gICAgICAgICAgICAgICAgICAgIChrZXk6IHN0cmluZyB8IHN5bWJvbCkgPT4gYm9vbGVhblxuICAgICAgICAgICAgKShrZXkpXG4gICAgICAgIH0sXG4gICAgICAgIHNldDogKFxuICAgICAgICAgICAgX3RhcmdldE9iamVjdDogVCwga2V5OiBzdHJpbmcgfCBzeW1ib2wsIHZhbHVlOiB1bmtub3duXG4gICAgICAgICk6IGJvb2xlYW4gPT4ge1xuICAgICAgICAgICAgaWYgKG1ldGhvZE5hbWVzLnNldCA9PT0gJ1tdJyAmJiB0eXBlb2Yga2V5ID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgICAgICB0YXJnZXRba2V5IGFzIGtleW9mIFRdID0gdmFsdWUgYXMgVFtrZXlvZiBUXVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiAodGFyZ2V0W21ldGhvZE5hbWVzLnNldCBhcyBrZXlvZiBUXSBhc1xuICAgICAgICAgICAgICAgICAgICAgICAgdW5rbm93biBhc1xuICAgICAgICAgICAgICAgICAgICAgICAgKGtleTogc3RyaW5nIHwgc3ltYm9sLCB2YWx1ZTogdW5rbm93bikgPT4gYm9vbGVhblxuICAgICAgICAgICAgICAgICkoa2V5LCB2YWx1ZSlcblxuICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuICAgIH1cbn1cbi8qKlxuICogU2xpY2VzIGFsbCBwcm9wZXJ0aWVzIGZyb20gZ2l2ZW4gb2JqZWN0IHdoaWNoIGRvZXMgbm90IG1hdGNoIHByb3ZpZGVkXG4gKiBvYmplY3QgbWFzay4gSXRlbXMgY2FuIGJlIGV4cGxpY2l0bHkgd2hpdGVsaXN0ZWQgdmlhIFwiaW5jbHVkZVwiIG1hc2tcbiAqIGNvbmZpZ3VyYXRpb24gb3IgYmxhY2sgbGlzdGVkIHZpYSBcImV4Y2x1ZGVcIiBtYXNrIGNvbmZpZ3VyYXRpb24uXG4gKiBAcGFyYW0gb2JqZWN0IC0gT2JqZWN0IHRvIHNsaWNlLlxuICogQHBhcmFtIG1hc2tDb25maWd1cmF0aW9uIC0gTWFzayBjb25maWd1cmF0aW9uLlxuICogQHJldHVybnMgR2l2ZW4gYnV0IHNsaWNlZCBvYmplY3QuIElmIChuZXN0ZWQpIG9iamVjdCB3aWxsIGJlIG1vZGlmaWVkIGFcbiAqIGZsYXQgY29weSBvZiB0aGF0IG9iamVjdCB3aWxsIGJlIHJldHVybmVkLlxuICovXG5leHBvcnQgY29uc3QgbWFzayA9IDxUeXBlIGV4dGVuZHMgTWFwcGluZzx1bmtub3duPiA9IE1hcHBpbmc8dW5rbm93bj4+KFxuICAgIG9iamVjdDogVHlwZSwgbWFza0NvbmZpZ3VyYXRpb246IE9iamVjdE1hc2tDb25maWd1cmF0aW9uXG4pOiBSZWN1cnNpdmVQYXJ0aWFsPFR5cGU+ID0+IHtcbiAgICBtYXNrQ29uZmlndXJhdGlvbiA9IHtleGNsdWRlOiBmYWxzZSwgaW5jbHVkZTogdHJ1ZSwgLi4ubWFza0NvbmZpZ3VyYXRpb259XG5cbiAgICBpZiAoXG4gICAgICAgIG1hc2tDb25maWd1cmF0aW9uLmV4Y2x1ZGUgPT09IHRydWUgfHxcbiAgICAgICAgQXJyYXkuaXNBcnJheShtYXNrQ29uZmlndXJhdGlvbi5leGNsdWRlKSAmJlxuICAgICAgICBtYXNrQ29uZmlndXJhdGlvbi5leGNsdWRlLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICBtYXNrQ29uZmlndXJhdGlvbi5pbmNsdWRlID09PSBmYWxzZSB8fFxuICAgICAgICB0eXBlb2Ygb2JqZWN0ICE9PSAnb2JqZWN0J1xuICAgIClcbiAgICAgICAgcmV0dXJuIHt9XG5cbiAgICBjb25zdCBleGNsdWRlOiBOb3JtYWxpemVkT2JqZWN0TWFzayA9XG4gICAgICAgIEFycmF5LmlzQXJyYXkobWFza0NvbmZpZ3VyYXRpb24uZXhjbHVkZSkgP1xuICAgICAgICAgICAgbWFza0NvbmZpZ3VyYXRpb24uZXhjbHVkZS5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgKG1hc2ssIGtleSkgPT4gKHsuLi5tYXNrLCBba2V5XTogdHJ1ZX0pLFxuICAgICAgICAgICAgICAgIHt9XG4gICAgICAgICAgICApIDpcbiAgICAgICAgICAgIG1hc2tDb25maWd1cmF0aW9uLmV4Y2x1ZGUgYXMgTm9ybWFsaXplZE9iamVjdE1hc2tcbiAgICBjb25zdCBpbmNsdWRlOiBOb3JtYWxpemVkT2JqZWN0TWFzayA9XG4gICAgICAgIEFycmF5LmlzQXJyYXkobWFza0NvbmZpZ3VyYXRpb24uaW5jbHVkZSkgP1xuICAgICAgICAgICAgbWFza0NvbmZpZ3VyYXRpb24uaW5jbHVkZS5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgKG1hc2ssIGtleSkgPT4gKHsuLi5tYXNrLCBba2V5XTogdHJ1ZX0pLFxuICAgICAgICAgICAgICAgIHt9XG4gICAgICAgICAgICApIDpcbiAgICAgICAgICAgIG1hc2tDb25maWd1cmF0aW9uLmluY2x1ZGUgYXMgTm9ybWFsaXplZE9iamVjdE1hc2tcblxuICAgIGxldCByZXN1bHQ6IFBhcnRpYWw8VHlwZT4gPSB7fVxuICAgIGlmIChpc1BsYWluT2JqZWN0KGluY2x1ZGUpKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGluY2x1ZGUpKVxuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkpXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSB0cnVlKVxuICAgICAgICAgICAgICAgICAgICByZXN1bHRba2V5IGFzIGtleW9mIFR5cGVdID0gb2JqZWN0W2tleSBhcyBrZXlvZiBUeXBlXVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1BsYWluT2JqZWN0KHZhbHVlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIG9iamVjdFtrZXkgYXMga2V5b2YgVHlwZV0gPT09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAocmVzdWx0IGFzIE1hcHBpbmc8TWFwcGluZzx1bmtub3duPj4pW2tleV0gPSBtYXNrKFxuICAgICAgICAgICAgICAgICAgICAgICAgKG9iamVjdCBhcyBNYXBwaW5nPE1hcHBpbmc8dW5rbm93bj4+KVtrZXldLFxuICAgICAgICAgICAgICAgICAgICAgICAge2luY2x1ZGU6IHZhbHVlfVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgfSBlbHNlXG4gICAgICAgIC8vIEluIHRoaXMgYnJhbmNoIFwibWFzay5pbmNsdWRlID09PSB0cnVlXCIgaG9sZHMuXG4gICAgICAgIHJlc3VsdCA9IG9iamVjdFxuXG4gICAgaWYgKGlzUGxhaW5PYmplY3QoZXhjbHVkZSkpIHtcbiAgICAgICAgbGV0IHVzZUNvcHkgPSBmYWxzZVxuICAgICAgICBjb25zdCBjb3B5OiBSZWN1cnNpdmVQYXJ0aWFsPFR5cGU+ID0gey4uLnJlc3VsdH1cblxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhleGNsdWRlKSlcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29weSwga2V5KSlcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdXNlQ29weSA9IHRydWVcblxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgY29weVtrZXkgYXMga2V5b2YgVHlwZV1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgICAoXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1BsYWluT2JqZWN0KHZhbHVlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGNvcHlba2V5IGFzIGtleW9mIFR5cGVdID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50OiBWYWx1ZU9mPFR5cGU+ID1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlba2V5IGFzIGtleW9mIFR5cGVdIGFzIFZhbHVlT2Y8VHlwZT5cblxuICAgICAgICAgICAgICAgICAgICA7KGNvcHkgYXMgTWFwcGluZzxNYXBwaW5nPHVua25vd24+Pilba2V5XSA9IG1hc2soXG4gICAgICAgICAgICAgICAgICAgICAgICAoY29weSBhcyBNYXBwaW5nPE1hcHBpbmc8dW5rbm93bj4+KVtrZXldLFxuICAgICAgICAgICAgICAgICAgICAgICAge2V4Y2x1ZGU6IHZhbHVlfVxuICAgICAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgY29weVtrZXkgYXMga2V5b2YgVHlwZV0gYXMgVmFsdWVPZjxUeXBlPiAhPT1cbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlQ29weSA9IHRydWVcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgaWYgKHVzZUNvcHkpXG4gICAgICAgICAgICByZXN1bHQgPSBjb3B5XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdFxufVxuLyoqXG4gKiBNb2RpZmllcyBnaXZlbiB0YXJnZXQgY29ycmVzcG9uZGluZyB0byBnaXZlbiBzb3VyY2UgYW5kIHJlbW92ZXMgc291cmNlXG4gKiBtb2RpZmljYXRpb24gaW5mb3MuXG4gKiBAcGFyYW0gdGFyZ2V0IC0gT2JqZWN0IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSBzb3VyY2UgLSBTb3VyY2Ugb2JqZWN0IHRvIGxvYWQgbW9kaWZpY2F0aW9ucyBmcm9tLlxuICogQHBhcmFtIHJlbW92ZUluZGljYXRvcktleSAtIEluZGljYXRvciBwcm9wZXJ0eSBuYW1lIG9yIHZhbHVlIHRvIG1hcmsgYVxuICogdmFsdWUgdG8gcmVtb3ZlIGZyb20gb2JqZWN0IG9yIGxpc3QuXG4gKiBAcGFyYW0gcHJlcGVuZEluZGljYXRvcktleSAtIEluZGljYXRvciBwcm9wZXJ0eSBuYW1lIHRvIG1hcmsgYSB2YWx1ZSB0b1xuICogcHJlcGVuZCB0byB0YXJnZXQgbGlzdC5cbiAqIEBwYXJhbSBhcHBlbmRJbmRpY2F0b3JLZXkgLSBJbmRpY2F0b3IgcHJvcGVydHkgbmFtZSB0byBtYXJrIGEgdmFsdWUgdG9cbiAqIGFwcGVuZCB0byB0YXJnZXQgbGlzdC5cbiAqIEBwYXJhbSBwb3NpdGlvblByZWZpeCAtIEluZGljYXRlcyBhIHByZWZpeCB0byB1c2UgYSB2YWx1ZSBvbiBnaXZlblxuICogcG9zaXRpb24gdG8gYWRkIG9yIHJlbW92ZS5cbiAqIEBwYXJhbSBwb3NpdGlvblN1ZmZpeCAtIEluZGljYXRlcyBhIHN1ZmZpeCB0byB1c2UgYSB2YWx1ZSBvbiBnaXZlblxuICogcG9zaXRpb24gdG8gYWRkIG9yIHJlbW92ZS5cbiAqIEBwYXJhbSBwYXJlbnRTb3VyY2UgLSBTb3VyY2UgY29udGV4dCB0byByZW1vdmUgbW9kaWZpY2F0aW9uIGluZm8gZnJvbVxuICogKHVzdWFsbHkgb25seSBuZWVkZWQgaW50ZXJuYWxseSkuXG4gKiBAcGFyYW0gcGFyZW50S2V5IC0gU291cmNlIGtleSBpbiBnaXZlbiBzb3VyY2UgY29udGV4dCB0byByZW1vdmVcbiAqIG1vZGlmaWNhdGlvbiBpbmZvIGZyb20gKHVzdWFsbHkgb25seSBuZWVkZWQgaW50ZXJuYWxseSkuXG4gKiBAcmV0dXJucyBHaXZlbiB0YXJnZXQgbW9kaWZpZWQgd2l0aCBnaXZlbiBzb3VyY2UuXG4gKi9cbmV4cG9ydCBjb25zdCBtb2RpZnlPYmplY3QgPSA8VCA9IHVua25vd24+KFxuICAgIHRhcmdldDogVCxcbiAgICBzb3VyY2U6IHVua25vd24sXG4gICAgcmVtb3ZlSW5kaWNhdG9yS2V5ID0gJ19fcmVtb3ZlX18nLFxuICAgIHByZXBlbmRJbmRpY2F0b3JLZXkgPSAnX19wcmVwZW5kX18nLFxuICAgIGFwcGVuZEluZGljYXRvcktleSA9ICdfX2FwcGVuZF9fJyxcbiAgICBwb3NpdGlvblByZWZpeCA9ICdfXycsXG4gICAgcG9zaXRpb25TdWZmaXggPSAnX18nLFxuICAgIHBhcmVudFNvdXJjZTogdW5rbm93biA9IG51bGwsXG4gICAgcGFyZW50S2V5OiB1bmtub3duID0gbnVsbFxuKTogVCA9PiB7XG4gICAgaWYgKGlzTWFwKHNvdXJjZSkgJiYgaXNNYXAodGFyZ2V0KSkge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBzb3VyY2UpXG4gICAgICAgICAgICBpZiAodGFyZ2V0LmhhcyhrZXkpKVxuICAgICAgICAgICAgICAgIG1vZGlmeU9iamVjdChcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmdldChrZXkpIGFzIFZhbHVlT2Y8VD4sXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlIGFzIE1hcDx1bmtub3duLCB1bmtub3duPiB8IE1hcHBpbmc8dW5rbm93bj4gfCBudWxsLFxuICAgICAgICAgICAgICAgICAgICByZW1vdmVJbmRpY2F0b3JLZXksXG4gICAgICAgICAgICAgICAgICAgIHByZXBlbmRJbmRpY2F0b3JLZXksXG4gICAgICAgICAgICAgICAgICAgIGFwcGVuZEluZGljYXRvcktleSxcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25QcmVmaXgsXG4gICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uU3VmZml4LFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgIGtleVxuICAgICAgICAgICAgICAgIClcbiAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KHNvdXJjZSkgJiYgaXNPYmplY3QodGFyZ2V0KSlcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCBzb3VyY2VWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoc291cmNlKSkge1xuICAgICAgICAgICAgbGV0IGluZGV4ID0gTmFOXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheSh0YXJnZXQpICYmXG4gICAgICAgICAgICAgICAga2V5LnN0YXJ0c1dpdGgocG9zaXRpb25QcmVmaXgpICYmXG4gICAgICAgICAgICAgICAga2V5LmVuZHNXaXRoKHBvc2l0aW9uU3VmZml4KVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBwYXJzZUludChcbiAgICAgICAgICAgICAgICAgICAga2V5LnN1YnN0cmluZyhcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uUHJlZml4Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleS5sZW5ndGggLVxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25TdWZmaXgubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIDEwXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGFyZ2V0Lmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBOYU5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIFtyZW1vdmVJbmRpY2F0b3JLZXksIHByZXBlbmRJbmRpY2F0b3JLZXksIGFwcGVuZEluZGljYXRvcktleV1cbiAgICAgICAgICAgICAgICAgICAgLmluY2x1ZGVzKGtleSkgfHxcbiAgICAgICAgICAgICAgICAhaXNOYU4oaW5kZXgpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0YXJnZXQpKVxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSByZW1vdmVJbmRpY2F0b3JLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlczogQXJyYXk8dW5rbm93bj4gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChbXSBhcyBBcnJheTx1bmtub3duPikuY29uY2F0KHNvdXJjZVZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnN0YXJ0c1dpdGgocG9zaXRpb25QcmVmaXgpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLmVuZHNXaXRoKHBvc2l0aW9uU3VmZml4KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnNwbGljZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnN1YnN0cmluZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25QcmVmaXgubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5sZW5ndGggLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvblN1ZmZpeC5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGFyZ2V0LmluY2x1ZGVzKHZhbHVlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LnNwbGljZSh0YXJnZXQuaW5kZXhPZih2YWx1ZSksIDEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPCB0YXJnZXQubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQuc3BsaWNlKHZhbHVlLCAxKVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gYXBwZW5kSW5kaWNhdG9yS2V5KVxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LmNvbmNhdChzb3VyY2VWYWx1ZSkgYXMgdW5rbm93biBhcyBUXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gcHJlcGVuZEluZGljYXRvcktleSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IChbXSBhcyBBcnJheTx1bmtub3duPilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KHNvdXJjZVZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQodGFyZ2V0KSBhcyB1bmtub3duIGFzIFRcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNPYmplY3QodGFyZ2V0W2luZGV4XSkgJiYgaXNPYmplY3Qoc291cmNlVmFsdWUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kaWZ5T2JqZWN0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRbaW5kZXhdIGFzIFJlY3Vyc2l2ZVBhcnRpYWw8VmFsdWVPZjxUPj4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZVZhbHVlIGFzIFJlY3Vyc2l2ZVBhcnRpYWw8VmFsdWVPZjxUPj4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUluZGljYXRvcktleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlcGVuZEluZGljYXRvcktleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kSW5kaWNhdG9yS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvblByZWZpeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25TdWZmaXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFtpbmRleF0gYXMgUmVjdXJzaXZlUGFydGlhbDxWYWx1ZU9mPFQ+PixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VWYWx1ZSBhcyBSZWN1cnNpdmVQYXJ0aWFsPFZhbHVlT2Y8VD4+XG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFtpbmRleF0gPSBzb3VyY2VWYWx1ZSBhcyBWYWx1ZU9mPFQ+XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSByZW1vdmVJbmRpY2F0b3JLZXkpXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgKFtdIGFzIEFycmF5PHVua25vd24+KS5jb25jYXQoXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VWYWx1ZVxuICAgICAgICAgICAgICAgICAgICApKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCwgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IGFzIHVua25vd24gYXMgTWFwcGluZzx1bmtub3duPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClbdmFsdWVdXG4gICAgICAgICAgICAgICAgZGVsZXRlIHNvdXJjZVtrZXldXG5cbiAgICAgICAgICAgICAgICBpZiAocGFyZW50U291cmNlICYmIHR5cGVvZiBwYXJlbnRLZXkgPT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgKFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50U291cmNlIGFzIE1hcHBpbmc8dW5rbm93bj5cbiAgICAgICAgICAgICAgICAgICAgKVtwYXJlbnRLZXldXG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHRhcmdldCAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0YXJnZXQsIGtleSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAodGFyZ2V0IGFzIHVua25vd24gYXMgTWFwcGluZzx1bmtub3duPilba2V5XSA9XG4gICAgICAgICAgICAgICAgICAgIG1vZGlmeU9iamVjdChcbiAgICAgICAgICAgICAgICAgICAgICAgICh0YXJnZXQgYXMgdW5rbm93biBhcyBNYXBwaW5nPFZhbHVlT2Y8VD4+KVtrZXldLFxuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVJbmRpY2F0b3JLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmVwZW5kSW5kaWNhdG9yS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kSW5kaWNhdG9yS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25QcmVmaXgsXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvblN1ZmZpeCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgIHJldHVybiB0YXJnZXRcbn1cbi8qKlxuICogUmVtb3ZlcyBnaXZlbiBrZXkgZnJvbSBnaXZlbiBvYmplY3QgcmVjdXJzaXZlbHkuXG4gKiBAcGFyYW0gb2JqZWN0IC0gT2JqZWN0IHRvIHByb2Nlc3MuXG4gKiBAcGFyYW0ga2V5cyAtIExpc3Qgb2Yga2V5cyB0byByZW1vdmUuXG4gKiBAcmV0dXJucyBQcm9jZXNzZWQgZ2l2ZW4gb2JqZWN0LlxuICovXG5leHBvcnQgY29uc3QgcmVtb3ZlS2V5UHJlZml4ZXMgPSA8VD4oXG4gICAgb2JqZWN0OiBULCBrZXlzOiBBcnJheTxzdHJpbmc+IHwgc3RyaW5nID0gJyMnXG4pOiBUID0+IHtcbiAgICBjb25zdCByZXNvbHZlZEtleXM6IEFycmF5PHN0cmluZz4gPSAoW10gYXMgQXJyYXk8c3RyaW5nPikuY29uY2F0KGtleXMpXG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgICAgIGxldCBpbmRleCA9IDBcbiAgICAgICAgZm9yIChjb25zdCBzdWJPYmplY3Qgb2Ygb2JqZWN0LnNsaWNlKCkpIHtcbiAgICAgICAgICAgIGxldCBza2lwID0gZmFsc2VcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3ViT2JqZWN0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHJlc29sdmVkS2V5cylcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN1Yk9iamVjdC5zdGFydHNXaXRoKGAke2tleX06YCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIChvYmplY3QgYXMgQXJyYXk8c3RyaW5nPikuc3BsaWNlKGluZGV4LCAxKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBza2lwID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHNraXApXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIChvYmplY3QgYXMgQXJyYXk8dW5rbm93bj4pW2luZGV4XSA9XG4gICAgICAgICAgICAgICAgcmVtb3ZlS2V5UHJlZml4ZXMoc3ViT2JqZWN0LCByZXNvbHZlZEtleXMpXG5cbiAgICAgICAgICAgIGluZGV4ICs9IDFcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNTZXQob2JqZWN0KSlcbiAgICAgICAgZm9yIChjb25zdCBzdWJPYmplY3Qgb2YgbmV3IFNldChvYmplY3QpKSB7XG4gICAgICAgICAgICBsZXQgc2tpcCA9IGZhbHNlXG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3ViT2JqZWN0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHJlc29sdmVkS2V5cylcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN1Yk9iamVjdC5zdGFydHNXaXRoKGAke2tleX06YCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdC5kZWxldGUoc3ViT2JqZWN0KVxuICAgICAgICAgICAgICAgICAgICAgICAgc2tpcCA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChza2lwKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZW1vdmVLZXlQcmVmaXhlcyhzdWJPYmplY3QsIHJlc29sdmVkS2V5cylcbiAgICAgICAgfVxuICAgIGVsc2UgaWYgKGlzTWFwKG9iamVjdCkpXG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgc3ViT2JqZWN0XSBvZiBuZXcgTWFwKG9iamVjdCkpIHtcbiAgICAgICAgICAgIGxldCBza2lwID0gZmFsc2VcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCByZXNvbHZlZEtleSBvZiByZXNvbHZlZEtleXMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXNjYXBlZEtleSA9IGVzY2FwZVJlZ3VsYXJFeHByZXNzaW9ucyhyZXNvbHZlZEtleSlcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5ldyBSZWdFeHAoYF4ke2VzY2FwZWRLZXl9WzAtOV0qJGApLnRlc3Qoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LmRlbGV0ZShrZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICBza2lwID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChza2lwKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvYmplY3Quc2V0KGtleSwgcmVtb3ZlS2V5UHJlZml4ZXMoc3ViT2JqZWN0LCByZXNvbHZlZEtleXMpKVxuICAgICAgICB9XG4gICAgZWxzZSBpZiAoaXNPYmplY3Qob2JqZWN0KSlcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAgIHt9LCBvYmplY3RcbiAgICAgICAgKSkpIHtcbiAgICAgICAgICAgIGxldCBza2lwID0gZmFsc2VcblxuICAgICAgICAgICAgZm9yIChjb25zdCByZXNvbHZlZEtleSBvZiByZXNvbHZlZEtleXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlc2NhcGVkS2V5OiBzdHJpbmcgPSBlc2NhcGVSZWd1bGFyRXhwcmVzc2lvbnMocmVzb2x2ZWRLZXkpXG5cbiAgICAgICAgICAgICAgICBpZiAobmV3IFJlZ0V4cChgXiR7ZXNjYXBlZEtleX1bMC05XSokYCkudGVzdChrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSAob2JqZWN0IGFzIHVua25vd24gYXMgTWFwcGluZzx1bmtub3duPilba2V5XVxuICAgICAgICAgICAgICAgICAgICBza2lwID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHNraXApXG4gICAgICAgICAgICAgICAgY29udGludWVcblxuICAgICAgICAgICAgOyhvYmplY3QgYXMgdW5rbm93biBhcyBNYXBwaW5nPHVua25vd24+KVtrZXldID1cbiAgICAgICAgICAgICAgICByZW1vdmVLZXlQcmVmaXhlcyh2YWx1ZSwgcmVzb2x2ZWRLZXlzKVxuICAgICAgICB9XG5cbiAgICByZXR1cm4gb2JqZWN0XG59XG4vKipcbiAqIFJlcHJlc2VudHMgZ2l2ZW4gb2JqZWN0IGFzIGZvcm1hdHRlZCBzdHJpbmcuXG4gKiBAcGFyYW0gb2JqZWN0IC0gT2JqZWN0IHRvIHJlcHJlc2VudC5cbiAqIEBwYXJhbSBtYXhpbXVtTGVuZ3RoT2ZMaXN0cyAtIE1heGltdW0gbnVtYmVyIG9mIGFycmF5IGl0ZW0gdG8gcmVuZGVyLlxuICogQHBhcmFtIGluZGVudGlvbiAtIFN0cmluZyAodXN1YWxseSB3aGl0ZXNwYWNlcykgdG8gdXNlIGFzIGluZGVudGlvbi5cbiAqIEBwYXJhbSBpbml0aWFsSW5kZW50aW9uIC0gU3RyaW5nICh1c3VhbGx5IHdoaXRlc3BhY2VzKSB0byB1c2UgYXNcbiAqIGFkZGl0aW9uYWwgaW5kZW50aW9uIGZvciB0aGUgZmlyc3Qgb2JqZWN0IHRyYXZlcnNpbmcgbGV2ZWwuXG4gKiBAcGFyYW0gbWF4aW11bU51bWJlck9mTGV2ZWxzUmVhY2hlZElkZW50aWZpZXIgLSBSZXBsYWNlbWVudCBmb3Igb2JqZWN0c1xuICogd2hpY2ggYXJlIG91dCBvZiBzcGVjaWZpZWQgYm91bmRzIHRvIHRyYXZlcnNlLlxuICogQHBhcmFtIG51bWJlck9mTGV2ZWxzIC0gU3BlY2lmaWVzIG51bWJlciBvZiBsZXZlbHMgdG8gdHJhdmVyc2UgZ2l2ZW5cbiAqIGRhdGEgc3RydWN0dXJlLlxuICogQHJldHVybnMgUmVwcmVzZW50YXRpb24gc3RyaW5nLlxuICovXG5leHBvcnQgY29uc3QgcmVwcmVzZW50ID0gKFxuICAgIG9iamVjdDogdW5rbm93bixcbiAgICBtYXhpbXVtTGVuZ3RoT2ZMaXN0cyA9IDMwLFxuICAgIGluZGVudGlvbiA9ICcgICAgJyxcbiAgICBpbml0aWFsSW5kZW50aW9uID0gJycsXG4gICAgbWF4aW11bU51bWJlck9mTGV2ZWxzUmVhY2hlZElkZW50aWZpZXI6IG51bWJlciB8IHN0cmluZyA9XG4gICAgJ19fbWF4aW11bV9udW1iZXJfb2ZfbGV2ZWxzX3JlYWNoZWRfXycsXG4gICAgbnVtYmVyT2ZMZXZlbHMgPSA4XG4pOiBzdHJpbmcgPT4ge1xuICAgIGlmIChudW1iZXJPZkxldmVscyA9PT0gMClcbiAgICAgICAgcmV0dXJuIFN0cmluZyhtYXhpbXVtTnVtYmVyT2ZMZXZlbHNSZWFjaGVkSWRlbnRpZmllcilcblxuICAgIGlmIChvYmplY3QgPT09IG51bGwpXG4gICAgICAgIHJldHVybiAnbnVsbCdcblxuICAgIGlmIChvYmplY3QgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuICd1bmRlZmluZWQnXG5cbiAgICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ3N0cmluZycpXG4gICAgICAgIHJldHVybiBgXCIke29iamVjdC5yZXBsYWNlKC9cXG4vZywgYFxcbiR7aW5pdGlhbEluZGVudGlvbn1gKX1cImBcblxuICAgIGlmIChpc051bWVyaWMob2JqZWN0KSB8fCB0eXBlb2Ygb2JqZWN0ID09PSAnYm9vbGVhbicpXG4gICAgICAgIHJldHVybiBTdHJpbmcob2JqZWN0KVxuXG4gICAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIERhdGUpXG4gICAgICAgIHJldHVybiBvYmplY3QudG9JU09TdHJpbmcoKVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gJ1snXG5cbiAgICAgICAgbGV0IGZpcnN0U2VlbiA9IGZhbHNlXG4gICAgICAgIGxldCBjb3VudGVyID0gMVxuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygb2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAoY291bnRlciA+IG1heGltdW1MZW5ndGhPZkxpc3RzKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IGBcXG4ke2luaXRpYWxJbmRlbnRpb259Li4uYFxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmaXJzdFNlZW4pXG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9ICcsJ1xuXG4gICAgICAgICAgICByZXN1bHQgKz1cbiAgICAgICAgICAgICAgICBgXFxuJHtpbml0aWFsSW5kZW50aW9ufSR7aW5kZW50aW9ufWAgK1xuICAgICAgICAgICAgICAgIHJlcHJlc2VudChcbiAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgbWF4aW11bUxlbmd0aE9mTGlzdHMsXG4gICAgICAgICAgICAgICAgICAgIGluZGVudGlvbixcbiAgICAgICAgICAgICAgICAgICAgYCR7aW5pdGlhbEluZGVudGlvbn0ke2luZGVudGlvbn1gLFxuICAgICAgICAgICAgICAgICAgICBtYXhpbXVtTnVtYmVyT2ZMZXZlbHNSZWFjaGVkSWRlbnRpZmllcixcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyT2ZMZXZlbHMgLSAxXG4gICAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICBmaXJzdFNlZW4gPSB0cnVlXG5cbiAgICAgICAgICAgIGNvdW50ZXIgKz0gMVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpcnN0U2VlbilcbiAgICAgICAgICAgIHJlc3VsdCArPSBgXFxuJHtpbml0aWFsSW5kZW50aW9ufWBcblxuICAgICAgICByZXN1bHQgKz0gJ10nXG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cblxuICAgIGlmIChpc01hcChvYmplY3QpKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSAnJ1xuXG4gICAgICAgIGxldCBmaXJzdFNlZW4gPSBmYWxzZVxuICAgICAgICBsZXQgY291bnRlciA9IDFcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCBpdGVtXSBvZiBvYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChjb3VudGVyID4gbWF4aW11bUxlbmd0aE9mTGlzdHMpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gYCxcXG4ke2luaXRpYWxJbmRlbnRpb259Li4uYFxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChmaXJzdFNlZW4pXG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IGAsXFxuJHtpbml0aWFsSW5kZW50aW9ufSR7aW5kZW50aW9ufWBcblxuICAgICAgICAgICAgcmVzdWx0ICs9XG4gICAgICAgICAgICAgICAgcmVwcmVzZW50KFxuICAgICAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgICAgIG1heGltdW1MZW5ndGhPZkxpc3RzLFxuICAgICAgICAgICAgICAgICAgICBpbmRlbnRpb24sXG4gICAgICAgICAgICAgICAgICAgIGAke2luaXRpYWxJbmRlbnRpb259JHtpbmRlbnRpb259YCxcbiAgICAgICAgICAgICAgICAgICAgbWF4aW11bU51bWJlck9mTGV2ZWxzUmVhY2hlZElkZW50aWZpZXIsXG4gICAgICAgICAgICAgICAgICAgIG51bWJlck9mTGV2ZWxzIC0gMVxuICAgICAgICAgICAgICAgICkgK1xuICAgICAgICAgICAgICAgICcgLT4gJyArXG4gICAgICAgICAgICAgICAgcmVwcmVzZW50KFxuICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICBtYXhpbXVtTGVuZ3RoT2ZMaXN0cyxcbiAgICAgICAgICAgICAgICAgICAgaW5kZW50aW9uLFxuICAgICAgICAgICAgICAgICAgICBgJHtpbml0aWFsSW5kZW50aW9ufSR7aW5kZW50aW9ufWAsXG4gICAgICAgICAgICAgICAgICAgIG1heGltdW1OdW1iZXJPZkxldmVsc1JlYWNoZWRJZGVudGlmaWVyLFxuICAgICAgICAgICAgICAgICAgICBudW1iZXJPZkxldmVscyAtIDFcbiAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgIGZpcnN0U2VlbiA9IHRydWVcblxuICAgICAgICAgICAgY291bnRlciArPSAxXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWZpcnN0U2VlbilcbiAgICAgICAgICAgIHJlc3VsdCA9ICdFbXB0eU1hcCdcblxuICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuXG4gICAgaWYgKGlzU2V0KG9iamVjdCkpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9ICd7J1xuXG4gICAgICAgIGxldCBmaXJzdFNlZW4gPSBmYWxzZVxuICAgICAgICBsZXQgY291bnRlciA9IDFcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIG9iamVjdCkge1xuICAgICAgICAgICAgaWYgKGNvdW50ZXIgPiBtYXhpbXVtTGVuZ3RoT2ZMaXN0cykge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBgLFxcbiR7aW5pdGlhbEluZGVudGlvbn0uLi5gXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGZpcnN0U2VlbilcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gJywnXG5cbiAgICAgICAgICAgIHJlc3VsdCArPVxuICAgICAgICAgICAgICAgIGBcXG4ke2luaXRpYWxJbmRlbnRpb259JHtpbmRlbnRpb259YCArXG4gICAgICAgICAgICAgICAgcmVwcmVzZW50KFxuICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICBtYXhpbXVtTGVuZ3RoT2ZMaXN0cyxcbiAgICAgICAgICAgICAgICAgICAgaW5kZW50aW9uLFxuICAgICAgICAgICAgICAgICAgICBgJHtpbml0aWFsSW5kZW50aW9ufSR7aW5kZW50aW9ufWAsXG4gICAgICAgICAgICAgICAgICAgIG1heGltdW1OdW1iZXJPZkxldmVsc1JlYWNoZWRJZGVudGlmaWVyLFxuICAgICAgICAgICAgICAgICAgICBudW1iZXJPZkxldmVscyAtIDFcbiAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgIGZpcnN0U2VlbiA9IHRydWVcblxuICAgICAgICAgICAgY291bnRlciArPSAxXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlyc3RTZWVuKVxuICAgICAgICAgICAgcmVzdWx0ICs9IGBcXG4ke2luaXRpYWxJbmRlbnRpb259fWBcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmVzdWx0ID0gJ0VtcHR5U2V0J1xuXG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICB9XG5cbiAgICBpZiAoaXNGdW5jdGlvbihvYmplY3QpKVxuICAgICAgICByZXR1cm4gJ19fZnVuY3Rpb25fXydcblxuICAgIGxldCByZXN1bHQgPSAneydcbiAgICBjb25zdCBrZXlzOiBBcnJheTxzdHJpbmc+ID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0KS5zb3J0KClcbiAgICBsZXQgZmlyc3RTZWVuID0gZmFsc2VcbiAgICBsZXQgY291bnRlciA9IDFcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgIGlmIChjb3VudGVyID4gbWF4aW11bUxlbmd0aE9mTGlzdHMpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSBgLFxcbiR7aW5pdGlhbEluZGVudGlvbn0uLi5gXG4gICAgICAgICAgICBicmVha1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpcnN0U2VlbilcbiAgICAgICAgICAgIHJlc3VsdCArPSAnLCdcblxuICAgICAgICByZXN1bHQgKz1cbiAgICAgICAgICAgIGBcXG4ke2luaXRpYWxJbmRlbnRpb259JHtpbmRlbnRpb259JHtrZXl9OiBgICtcbiAgICAgICAgICAgIHJlcHJlc2VudChcbiAgICAgICAgICAgICAgICAob2JqZWN0IGFzIE1hcHBpbmc8dW5rbm93bj4pW2tleV0sXG4gICAgICAgICAgICAgICAgbWF4aW11bUxlbmd0aE9mTGlzdHMsXG4gICAgICAgICAgICAgICAgaW5kZW50aW9uLFxuICAgICAgICAgICAgICAgIGAke2luaXRpYWxJbmRlbnRpb259JHtpbmRlbnRpb259YCxcbiAgICAgICAgICAgICAgICBtYXhpbXVtTnVtYmVyT2ZMZXZlbHNSZWFjaGVkSWRlbnRpZmllcixcbiAgICAgICAgICAgICAgICBudW1iZXJPZkxldmVscyAtIDFcbiAgICAgICAgICAgIClcblxuICAgICAgICBmaXJzdFNlZW4gPSB0cnVlXG5cbiAgICAgICAgY291bnRlciArPSAxXG4gICAgfVxuXG4gICAgaWYgKGZpcnN0U2VlbilcbiAgICAgICAgcmVzdWx0ICs9IGBcXG4ke2luaXRpYWxJbmRlbnRpb259YFxuXG4gICAgcmVzdWx0ICs9ICd9J1xuXG4gICAgcmV0dXJuIHJlc3VsdFxufVxuLyoqXG4gKiBTb3J0IGdpdmVuIG9iamVjdHMga2V5cy5cbiAqIEBwYXJhbSBvYmplY3QgLSBPYmplY3Qgd2hpY2gga2V5cyBzaG91bGQgYmUgc29ydGVkLlxuICogQHJldHVybnMgU29ydGVkIGxpc3Qgb2YgZ2l2ZW4ga2V5cy5cbiAqL1xuZXhwb3J0IGNvbnN0IHNvcnQgPSAob2JqZWN0OiB1bmtub3duKTogQXJyYXk8dW5rbm93bj4gPT4ge1xuICAgIGNvbnN0IGtleXM6IEFycmF5PHVua25vd24+ID0gW11cblxuICAgIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBvYmplY3QubGVuZ3RoOyBpbmRleCsrKVxuICAgICAgICAgICAga2V5cy5wdXNoKGluZGV4KVxuICAgIGVsc2UgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnKVxuICAgICAgICBpZiAoaXNNYXAob2JqZWN0KSlcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5VmFsdWVQYWlyIG9mIG9iamVjdClcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goa2V5VmFsdWVQYWlyWzBdKVxuICAgICAgICBlbHNlIGlmIChvYmplY3QgIT09IG51bGwpXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvYmplY3QpKVxuICAgICAgICAgICAgICAgIGtleXMucHVzaChrZXkpXG5cbiAgICByZXR1cm4ga2V5cy5zb3J0KClcbn1cbi8qKlxuICogUmVtb3ZlcyBhIHByb3h5IGZyb20gZ2l2ZW4gZGF0YSBzdHJ1Y3R1cmUgcmVjdXJzaXZlbHkuXG4gKiBAcGFyYW0gb2JqZWN0IC0gT2JqZWN0IHRvIHByb3h5LlxuICogQHBhcmFtIHNlZW5PYmplY3RzIC0gVHJhY2tzIGFsbCBhbHJlYWR5IHByb2Nlc3NlZCBvYmplY3RzIHRvIGF2b2lkXG4gKiBlbmRsZXNzIGxvb3BzICh1c3VhbGx5IG9ubHkgbmVlZGVkIGZvciBpbnRlcm5hbCBwdXJwb3NlKS5cbiAqIEByZXR1cm5zIFJldHVybnMgZ2l2ZW4gb2JqZWN0IHVud3JhcHBlZCBmcm9tIGEgZHluYW1pYyBwcm94eS5cbiAqL1xuZXhwb3J0IGNvbnN0IHVud3JhcFByb3h5ID0gPFQgPSB1bmtub3duPihcbiAgICBvYmplY3Q6IFByb3h5VHlwZTxUPiB8IFQsIHNlZW5PYmplY3RzOiBTZXQ8dW5rbm93bj4gPSBuZXcgU2V0PHVua25vd24+KClcbik6IFQgPT4ge1xuICAgIGlmIChpc09iamVjdChvYmplY3QpKSB7XG4gICAgICAgIGlmIChzZWVuT2JqZWN0cy5oYXMob2JqZWN0KSlcbiAgICAgICAgICAgIHJldHVybiBvYmplY3RcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24ob2JqZWN0Ll9fcmV2b2tlX18pKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzUHJveHkob2JqZWN0KSlcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0ID0gb2JqZWN0Ll9fdGFyZ2V0X19cblxuICAgICAgICAgICAgICAgIDsob2JqZWN0IGFzIHVua25vd24gYXMge19fcmV2b2tlX186ICgpID0+IHZvaWR9KS5fX3Jldm9rZV9fKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4gb2JqZWN0XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBzZWVuT2JqZWN0cy5hZGQob2JqZWN0KVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xuICAgICAgICAgICAgbGV0IGluZGV4ID0gMFxuICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBvYmplY3QpIHtcbiAgICAgICAgICAgICAgICBvYmplY3RbaW5kZXhdID0gdW53cmFwUHJveHkodmFsdWUsIHNlZW5PYmplY3RzKVxuXG4gICAgICAgICAgICAgICAgaW5kZXggKz0gMVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGlzTWFwKG9iamVjdCkpXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBvYmplY3QpXG4gICAgICAgICAgICAgICAgb2JqZWN0LnNldChrZXksIHVud3JhcFByb3h5KHZhbHVlLCBzZWVuT2JqZWN0cykpXG4gICAgICAgIGVsc2UgaWYgKGlzU2V0KG9iamVjdCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhY2hlOiBBcnJheTx1bmtub3duPiA9IFtdXG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2Ygb2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgb2JqZWN0LmRlbGV0ZSh2YWx1ZSlcbiAgICAgICAgICAgICAgICBjYWNoZS5wdXNoKHVud3JhcFByb3h5KHZhbHVlLCBzZWVuT2JqZWN0cykpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgY2FjaGUpXG4gICAgICAgICAgICAgICAgb2JqZWN0LmFkZCh2YWx1ZSlcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhcbiAgICAgICAgICAgICAgICBvYmplY3QgYXMgdW5rbm93biBhcyBvYmplY3RcbiAgICAgICAgICAgICkpXG4gICAgICAgICAgICAgICAgb2JqZWN0W2tleSBhcyBrZXlvZiBUXSA9XG4gICAgICAgICAgICAgICAgICAgIHVud3JhcFByb3h5KHZhbHVlLCBzZWVuT2JqZWN0cykgYXMgVmFsdWVPZjxUPlxuICAgIH1cblxuICAgIHJldHVybiBvYmplY3Rcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0EsWUFBWTs7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBYkE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFpQ0EsU0FDSSxxQkFBcUIsRUFBRSxnQ0FBZ0MsRUFBRSxpQkFBaUI7QUFFOUUsU0FDSSxVQUFV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
|
package/dist/process.js
CHANGED
|
@@ -17,7 +17,6 @@
|
|
|
17
17
|
See https://creativecommons.org/licenses/by/3.0/deed.de
|
|
18
18
|
endregion
|
|
19
19
|
*/
|
|
20
|
-
import { ChildProcess } from 'child_process';
|
|
21
20
|
import { NOOP } from "./context.js";
|
|
22
21
|
|
|
23
22
|
/**
|
|
@@ -66,4 +65,4 @@ export const handleChildProcess = childProcess => {
|
|
|
66
65
|
});
|
|
67
66
|
return childProcess;
|
|
68
67
|
};
|
|
69
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
68
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL3Byb2Nlc3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gIyEvdXNyL2Jpbi9lbnYgYmFiZWwtbm9kZVxuLy8gLSotIGNvZGluZzogdXRmLTggLSotXG4vKiogQG1vZHVsZSBwcm9jZXNzICovXG4ndXNlIHN0cmljdCdcbi8qICFcbiAgICByZWdpb24gaGVhZGVyXG4gICAgW1Byb2plY3QgcGFnZV0oaHR0cHM6Ly90b3JiZW4ud2Vic2l0ZS9jbGllbnRub2RlKVxuXG4gICAgQ29weXJpZ2h0IFRvcmJlbiBTaWNrZXJ0IChpbmZvW1wifmF0flwiXXRvcmJlbi53ZWJzaXRlKSAxNi4xMi4yMDEyXG5cbiAgICBMaWNlbnNlXG4gICAgLS0tLS0tLVxuXG4gICAgVGhpcyBsaWJyYXJ5IHdyaXR0ZW4gYnkgVG9yYmVuIFNpY2tlcnQgc3RhbmRzIHVuZGVyIGEgY3JlYXRpdmUgY29tbW9uc1xuICAgIG5hbWluZyAzLjAgdW5wb3J0ZWQgbGljZW5zZS5cbiAgICBTZWUgaHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LzMuMC9kZWVkLmRlXG4gICAgZW5kcmVnaW9uXG4qL1xuaW1wb3J0IHR5cGUge0NoaWxkUHJvY2Vzc30gZnJvbSAnY2hpbGRfcHJvY2VzcydcbmltcG9ydCB0eXBlIHtcbiAgICBBbnlGdW5jdGlvbixcbiAgICBQcm9jZXNzQ2xvc2VDYWxsYmFjayxcbiAgICBQcm9jZXNzRXJyb3IsXG4gICAgUHJvY2Vzc0Vycm9yQ2FsbGJhY2ssXG4gICAgUHJvY2Vzc0hhbmRsZXJcbn0gZnJvbSAnLi90eXBlJ1xuXG5pbXBvcnQge05PT1B9IGZyb20gJy4vY29udGV4dCdcblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBvbmUgc2hvdCBjbG9zZSBoYW5kbGVyIHdoaWNoIHRyaWdnZXJzIGdpdmVuIHByb21pc2UgbWV0aG9kcy5cbiAqIElmIGEgcmVhc29uIGlzIHByb3ZpZGVkIGl0IHdpbGwgYmUgZ2l2ZW4gYXMgcmVzb2x2ZSB0YXJnZXQuIEFuIEVycm9yIHdpbGwgYmVcbiAqIGdlbmVyYXRlZCBpZiByZXR1cm4gY29kZSBpcyBub3QgemVyby4gVGhlIGdlbmVyYXRlZCBFcnJvciBoYXMgYSBwcm9wZXJ0eVxuICogXCJyZXR1cm5Db2RlXCIgd2hpY2ggcHJvdmlkZXMgY29ycmVzcG9uZGluZyBwcm9jZXNzIHJldHVybiBjb2RlLlxuICogQHBhcmFtIHJlc29sdmUgLSBQcm9taXNlJ3MgcmVzb2x2ZSBmdW5jdGlvbi5cbiAqIEBwYXJhbSByZWplY3QgLSBQcm9taXNlJ3MgcmVqZWN0IGZ1bmN0aW9uLlxuICogQHBhcmFtIHJlYXNvbiAtIFByb21pc2UgdGFyZ2V0IGlmIHByb2Nlc3MgaGFzIGEgemVybyByZXR1cm4gY29kZS5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIE9wdGlvbmFsIGZ1bmN0aW9uIHRvIGNhbGwgb2YgcHJvY2VzcyBoYXMgc3VjY2Vzc2Z1bGx5XG4gKiBmaW5pc2hlZC5cbiAqIEByZXR1cm5zIFByb2Nlc3MgY2xvc2UgaGFuZGxlciBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldFByb2Nlc3NDbG9zZUhhbmRsZXIgPSAoXG4gICAgcmVzb2x2ZTogUHJvY2Vzc0Nsb3NlQ2FsbGJhY2ssXG4gICAgcmVqZWN0OiBQcm9jZXNzRXJyb3JDYWxsYmFjayxcbiAgICByZWFzb246IHVua25vd24gPSBudWxsLFxuICAgIGNhbGxiYWNrOiBBbnlGdW5jdGlvbiA9IE5PT1Bcbik6IFByb2Nlc3NIYW5kbGVyID0+IHtcbiAgICBsZXQgZmluaXNoZWQgPSBmYWxzZVxuXG4gICAgcmV0dXJuIChyZXR1cm5Db2RlOiB1bmtub3duLCAuLi5wYXJhbWV0ZXJzOiBBcnJheTx1bmtub3duPik6IHZvaWQgPT4ge1xuICAgICAgICBpZiAoZmluaXNoZWQpXG4gICAgICAgICAgICBmaW5pc2hlZCA9IHRydWVcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmaW5pc2hlZCA9IHRydWVcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmV0dXJuQ29kZSAhPT0gJ251bWJlcicgfHwgcmV0dXJuQ29kZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgICAgICAgICByZXNvbHZlKHtyZWFzb24sIHBhcmFtZXRlcnN9KVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgYFRhc2sgZXhpdGVkIHdpdGggZXJyb3IgY29kZSAke1N0cmluZyhyZXR1cm5Db2RlKX1gXG4gICAgICAgICAgICAgICAgKSBhcyBQcm9jZXNzRXJyb3JcblxuICAgICAgICAgICAgICAgIGVycm9yLnJldHVybkNvZGUgPSByZXR1cm5Db2RlXG4gICAgICAgICAgICAgICAgZXJyb3IucGFyYW1ldGVycyA9IHBhcmFtZXRlcnNcblxuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbi8qKlxuICogRm9yd2FyZHMgZ2l2ZW4gY2hpbGQgcHJvY2VzcyBjb21tdW5pY2F0aW9uIGNoYW5uZWxzIHRvIGNvcnJlc3BvbmRpbmcgY3VycmVudFxuICogcHJvY2VzcyBjb21tdW5pY2F0aW9uIGNoYW5uZWxzLlxuICogQHBhcmFtIGNoaWxkUHJvY2VzcyAtIENoaWxkIHByb2Nlc3MgbWV0YSBkYXRhLlxuICogQHJldHVybnMgR2l2ZW4gY2hpbGQgcHJvY2VzcyBtZXRhIGRhdGEuXG4gKi9cbmV4cG9ydCBjb25zdCBoYW5kbGVDaGlsZFByb2Nlc3MgPSAoXG4gICAgY2hpbGRQcm9jZXNzOiBDaGlsZFByb2Nlc3Ncbik6IENoaWxkUHJvY2VzcyA9PiB7XG4gICAgaWYgKGNoaWxkUHJvY2Vzcy5zdGRvdXQpXG4gICAgICAgIGNoaWxkUHJvY2Vzcy5zdGRvdXQucGlwZShwcm9jZXNzLnN0ZG91dClcbiAgICBpZiAoY2hpbGRQcm9jZXNzLnN0ZGVycilcbiAgICAgICAgY2hpbGRQcm9jZXNzLnN0ZGVyci5waXBlKHByb2Nlc3Muc3RkZXJyKVxuXG4gICAgY2hpbGRQcm9jZXNzLm9uKCdjbG9zZScsIChyZXR1cm5Db2RlOiBudW1iZXIpOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKHJldHVybkNvZGUgIT09IDApXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBUYXNrIGV4aXRlZCB3aXRoIGVycm9yIGNvZGUgJHtTdHJpbmcocmV0dXJuQ29kZSl9YClcbiAgICB9KVxuXG4gICAgcmV0dXJuIGNoaWxkUHJvY2Vzc1xufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQSxZQUFZOztBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFVQSxTQUFRLElBQUk7O0FBRVo7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxNQUFNLHNCQUFzQixHQUFHLENBQ2xDLE9BQTZCLEVBQzdCLE1BQTRCLEVBQzVCLE1BQWUsR0FBRyxJQUFJLEVBQ3RCLFFBQXFCLEdBQUcsSUFBSSxLQUNYO0VBQ2pCLElBQUksUUFBUSxHQUFHLEtBQUs7RUFFcEIsT0FBTyxDQUFDLFVBQW1CLEVBQUUsR0FBRyxVQUEwQixLQUFXO0lBQ2pFLElBQUksUUFBUSxFQUNSLFFBQVEsR0FBRyxJQUFJLE1BQ2Q7TUFDRCxRQUFRLEdBQUcsSUFBSTtNQUNmLElBQUksT0FBTyxVQUFVLEtBQUssUUFBUSxJQUFJLFVBQVUsS0FBSyxDQUFDLEVBQUU7UUFDcEQsUUFBUSxDQUFDLENBQUM7UUFDVixPQUFPLENBQUM7VUFBQyxNQUFNO1VBQUU7UUFBVSxDQUFDLENBQUM7TUFDakMsQ0FBQyxNQUFNO1FBQ0gsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQ25CLCtCQUErQixNQUFNLENBQUMsVUFBVSxDQUFDLEVBQ3JELENBQWlCO1FBRWpCLEtBQUssQ0FBQyxVQUFVLEdBQUcsVUFBVTtRQUM3QixLQUFLLENBQUMsVUFBVSxHQUFHLFVBQVU7UUFFN0IsTUFBTSxDQUFDLEtBQUssQ0FBQztNQUNqQjtJQUNKO0VBQ0osQ0FBQztBQUNMLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLE1BQU0sa0JBQWtCLEdBQzNCLFlBQTBCLElBQ1g7RUFDZixJQUFJLFlBQVksQ0FBQyxNQUFNLEVBQ25CLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7RUFDNUMsSUFBSSxZQUFZLENBQUMsTUFBTSxFQUNuQixZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0VBRTVDLFlBQVksQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFHLFVBQWtCLElBQVc7SUFDbkQsSUFBSSxVQUFVLEtBQUssQ0FBQyxFQUNoQixPQUFPLENBQUMsS0FBSyxDQUFDLCtCQUErQixNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztFQUMxRSxDQUFDLENBQUM7RUFFRixPQUFPLFlBQVk7QUFDdkIsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "clientnode",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.1439",
|
|
4
4
|
"description": "Handy utilities for any JavaScript environments.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"client",
|
|
@@ -82,17 +82,17 @@
|
|
|
82
82
|
"@types/ejs": "^3.1.5",
|
|
83
83
|
"@types/html-minifier": "^4.0.6",
|
|
84
84
|
"@types/imagemin": "^9.0.1",
|
|
85
|
-
"@types/node": "^26.1.
|
|
85
|
+
"@types/node": "^26.1.1",
|
|
86
86
|
"@types/prop-types": "^15.7.15",
|
|
87
87
|
"@types/webpack-env": "^1.18.8",
|
|
88
|
-
"@typescript-eslint/eslint-plugin": "^8.
|
|
89
|
-
"@typescript-eslint/parser": "^8.
|
|
88
|
+
"@typescript-eslint/eslint-plugin": "^8.63.0",
|
|
89
|
+
"@typescript-eslint/parser": "^8.63.0",
|
|
90
90
|
"babel-plugin-polyfill-corejs3": "^1.0.0",
|
|
91
91
|
"babel-plugin-transform-rewrite-imports": "^1.5.4",
|
|
92
92
|
"clientnode": "workspace:.",
|
|
93
93
|
"eslint": "^10.6.0",
|
|
94
94
|
"eslint-config-google": "^0.14.0",
|
|
95
|
-
"eslint-plugin-jsdoc": "^63.0.
|
|
95
|
+
"eslint-plugin-jsdoc": "^63.0.12",
|
|
96
96
|
"favicons-webpack-plugin": "^6.0.1",
|
|
97
97
|
"image-minimizer-webpack-plugin": "^5.0.0",
|
|
98
98
|
"jest": "30.4.2",
|
|
@@ -100,10 +100,10 @@
|
|
|
100
100
|
"node-fetch": "^3.3.2",
|
|
101
101
|
"prop-types": "^15.8.1",
|
|
102
102
|
"rimraf": "^6.1.3",
|
|
103
|
-
"typescript-eslint": "^8.
|
|
103
|
+
"typescript-eslint": "^8.63.0",
|
|
104
104
|
"web-documentation": "^1.0.42",
|
|
105
|
-
"weboptimizer": "^4.0.
|
|
106
|
-
"webpack-dev-server": "^
|
|
105
|
+
"weboptimizer": "^4.0.15",
|
|
106
|
+
"webpack-dev-server": "^6.0.0"
|
|
107
107
|
},
|
|
108
108
|
"peerDependencies": {
|
|
109
109
|
"@types/prop-types": "*",
|
|
@@ -222,7 +222,6 @@
|
|
|
222
222
|
}
|
|
223
223
|
},
|
|
224
224
|
"target:bundle": {
|
|
225
|
-
"libraryName": "clientnode",
|
|
226
225
|
"module": {
|
|
227
226
|
"preprocessor": {
|
|
228
227
|
"javaScript": {
|