dcdx 1.3.0-next.67 → 1.3.0-next.68
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/assets/versions.json +1 -1
- package/lib/commands/apt.js +8 -3
- package/lib/index.js +1 -1
- package/package.json +1 -1
package/lib/commands/apt.js
CHANGED
|
@@ -2181,7 +2181,7 @@ const persistTestConfiguration = async (cwd, product, baseUrl, duration, useJMet
|
|
|
2181
2181
|
test_duration = ${duration}
|
|
2182
2182
|
load_executor = ${useLocust ? 'locust' : 'jmeter'}
|
|
2183
2183
|
standalone_extension = ${useLocust || useJMeter ? '1' : '0'}
|
|
2184
|
-
custom_dataset_query = ${query}
|
|
2184
|
+
custom_dataset_query = "${query}"
|
|
2185
2185
|
|
|
2186
2186
|
The configuration will be written to disk and overwrite existing configuration:
|
|
2187
2187
|
${join(cwd, 'app', `${product}.yml`)}
|
|
@@ -2207,7 +2207,7 @@ const persistTestConfiguration = async (cwd, product, baseUrl, duration, useJMet
|
|
|
2207
2207
|
return ` test_duration: ${duration}`;
|
|
2208
2208
|
}
|
|
2209
2209
|
else if (line.startsWith(` custom_dataset_query:`)) {
|
|
2210
|
-
return ` custom_dataset_query: ${query}`;
|
|
2210
|
+
return ` custom_dataset_query: "${query}"`;
|
|
2211
2211
|
}
|
|
2212
2212
|
return line;
|
|
2213
2213
|
});
|
|
@@ -3382,6 +3382,11 @@ const Run3Command = () => ({
|
|
|
3382
3382
|
}
|
|
3383
3383
|
}
|
|
3384
3384
|
}
|
|
3385
|
+
console.log('Starting scalability tests (run 3) with the following arguments:', APTScalabilityTestOptions.parse({
|
|
3386
|
+
...options,
|
|
3387
|
+
outputDir: getOutputDirectory(options.outputDir, options.timestamp),
|
|
3388
|
+
license: await getHostLicense(options.product, options.license, options.force)
|
|
3389
|
+
}));
|
|
3385
3390
|
await runScalabilityTest('one-node', APTScalabilityTestOptions.parse({
|
|
3386
3391
|
...options,
|
|
3387
3392
|
outputDir: getOutputDirectory(options.outputDir, options.timestamp),
|
|
@@ -3738,4 +3743,4 @@ process.on('SIGINT', () => {
|
|
|
3738
3743
|
console.log(`Received term signal, trying to stop gracefully 💪`);
|
|
3739
3744
|
gracefulExit();
|
|
3740
3745
|
});
|
|
3741
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXB0LmpzIiwic291cmNlcyI6WyIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9kb3dubG9hZEZpbGUuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9nZXRQcm9wZXJ0eUZyb21Qb21GaWxlLmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0VXJsQnlBcHBLZXkuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9nZW5lcmF0ZURlcGVuZGVuY3lUcmVlLmpzIiwiLi4vLi4vZGlzdC9zcmMvaGVscGVycy9jYXBpdGFsaXplLmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0UnVuRm9yU3RhZ2UuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvbWVzc2FnZXMuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9kY2FwdC5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2dldEFwdERpcmVjdG9yeS5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2dldFJlcG9ydC5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2dldFJlcG9ydERpcmVjdG9yeS5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL3dhaXRGb3JVc2VySW5wdXQuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9nZW5lcmF0ZVBlcmZvcm1hbmNlUmVwb3J0LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2VuZXJhdGVTY2FsYWJpbGl0eVJlcG9ydC5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2dlbmVyYXRlU0NBUmVwb3J0LmpzIiwiLi4vLi4vZGlzdC9zcmMvaGVscGVycy9saWNlbmNlcy5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2dldEhvc3RMaWNlbnNlLmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0T3V0cHV0RGlyZWN0b3J5LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0UHJvZHVjdC5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2dldEFXU0NyZWRlbnRpYWxzLmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0RW52aXJvbm1lbnROYW1lLmpzIiwiLi4vLi4vZGlzdC9zcmMvaGVscGVycy9yZXBsYWNlTGluZXNJbkZpbGUuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9wZXJzaXN0Q2x1c3RlckNvbmZpZ3VyYXRpb24uanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9wZXJzaXN0c0FXU0NyZWRlbnRpYWxzLmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0Q2x1c3RlclVSTC5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL3Byb3Zpc2lvbkNsdXN0ZXIuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9yZXN0YXJ0Q2x1c3Rlci5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2hlbHBlcnMvUEFULmpzIiwiLi4vLi4vZGlzdC9zcmMvaGVscGVycy91cG0uanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9nZXRBcHBMaWNlbnNlLmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvaW5zdGFsbEFwcEluQ2x1c3Rlci5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2dldFJlaW5kZXhQcm9ncmVzcy5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL3JlaW5kZXguanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9ydW5MdWNlbmVUaW1pbmdUZXN0LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0RHVyYXRpb24uanMiLCIuLi8uLi9kaXN0L3NyYy9oZWxwZXJzL3JlYWRMaW5lc0luRmlsZS5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2dldFJlc3VsdHMuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9nZXRSZXN1bHRzRGlyZWN0b3J5LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvcGVyc2lzdFRlc3RDb25maWd1cmF0aW9uLmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvcnVuUGVyZm9ybWFuY2VUZXN0LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0Tm9kZU51bWJlckZvclN0YWdlLmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvcnVuU2NhbGFiaWxpdHlUZXN0LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvdGVhcmRvd25DbHVzdGVyLmpzIiwiLi4vLi4vZGlzdC9zcmMvaGVscGVycy90b0Fic29sdXRlUGF0aC5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2hlbHBlcnMvZ2V0VmVyc2lvbnMuanMiLCIuLi8uLi9kaXN0L3NyYy90eXBlcy9EYXRhYmFzZS5qcyIsIi4uLy4uL2Rpc3Qvc3JjL3R5cGVzL0FwcGxpY2F0aW9uLmpzIiwiLi4vLi4vZGlzdC9zcmMvdHlwZXMvRENBUFQuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvcGVyZm9ybWFuY2UuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvc2NhbGFiaWxpdHkuanMiLCIuLi8uLi9kaXN0L3NyYy9oZWxwZXJzL0FjdGlvbkhhbmRsZXIuanMiLCIuLi8uLi9kaXN0L3NyYy9oZWxwZXJzL2dlbmVyYXRlVmVyc2lvbkxpc3QuanMiLCIuLi8uLi9kaXN0L3NyYy9jb21tYW5kcy9hcHQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IHBhcnNlIH0gZnJvbSAnY29udGVudC1kaXNwb3NpdGlvbic7XG5pbXBvcnQgeyBjcmVhdGVXcml0ZVN0cmVhbSwgbWtkaXJTeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ29zJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IGZpbmlzaGVkIH0gZnJvbSAnc3RyZWFtL3Byb21pc2VzJztcbmV4cG9ydCBjb25zdCBkb3dubG9hZEZpbGUgPSBhc3luYyAodXJsLCBuYW1lKSA9PiB7XG4gICAgLy8gUGxhY2Vob2xkZXIgZm9yIHRlbXBvcmFyeSBsb2NhdGlvbiB0byB3aGVyZSB0aGUgZmlsZSBpcyBkb3dubG9hZGVkXG4gICAgY29uc3QgdG1wRGlyID0gam9pbihob21lZGlyKCksICcuZGNkeCcsICd0bXAnKTtcbiAgICAvLyBNYWtlIHN1cmUgdGhlIHRlbXBvcmFyeSBmb2xkZXIgZXhpc3RzXG4gICAgbWtkaXJTeW5jKHRtcERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgLy8gSW5pdGlhdGUgdGhlIGRvd25sb2FkXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcyh7XG4gICAgICAgIHVybCxcbiAgICAgICAgbWV0aG9kOiAnZ2V0JyxcbiAgICAgICAgcmVzcG9uc2VUeXBlOiAnc3RyZWFtJ1xuICAgIH0pO1xuICAgIGNvbnN0IFVSSSA9IG5ldyBVUkwodXJsKTtcbiAgICBjb25zdCBsYXN0UGF0aFNlZ21lbnQgPSBVUkkucGF0aG5hbWUuc3BsaXQoJy8nKS5wb3AoKTtcbiAgICBuYW1lID0gbmFtZSB8fCAobGFzdFBhdGhTZWdtZW50Py50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCcuamFyJykgfHwgbGFzdFBhdGhTZWdtZW50Py50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCcub2JyJykpXG4gICAgICAgID8gbGFzdFBhdGhTZWdtZW50XG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIC8vIFRyeSB0byBmaW5kIHRoZSBmaWxlbmFtZSBmcm9tIHRoZSBoZWFkZXJzIG9yIHRoZSBhbHRlcm5hdGl2ZSBuYW1lIChpZiBwcm92aWRlZClcbiAgICBjb25zdCBkaXNwb3NpdGlvbiA9IHJlc3BvbnNlLmhlYWRlcnNbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXSA/IHBhcnNlKHJlc3BvbnNlLmhlYWRlcnNbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXSkgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgZmlsZW5hbWUgPSBkaXNwb3NpdGlvbj8ucGFyYW1ldGVycz8uZmlsZW5hbWUgfHwgbmFtZTtcbiAgICBpZiAoIWZpbGVuYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGRldGVybWluZSB0aGUgZmlsZW5hbWUgYmFzZWQgb24gdGhlIFVSTCwgYW5kIG5vIGFsdGVybmF0aXZlIG5hbWUgd2FzIHByb3ZpZGVkJyk7XG4gICAgfVxuICAgIC8vIFBsYWNlaG9sZGVyIGZvciB0ZW1wb3JhcnkgZmlsZSBkb3dubG9hZCBsb2NhdGlvblxuICAgIGNvbnN0IHRtcEZpbGUgPSBqb2luKHRtcERpciwgZmlsZW5hbWUpO1xuICAgIC8vIENyZWF0ZSB0aGUgd3JpdGUgc3RyZWFtIHRvIHRoZSB0ZW1wb3JhcnkgZmlsZSBsb2NhdGlvblxuICAgIGNvbnN0IHdyaXRlciA9IGNyZWF0ZVdyaXRlU3RyZWFtKHRtcEZpbGUpO1xuICAgIC8vIEdldCB0aGUgZGF0YSBmcm9tIHRoZSBkb3dubG9hZCBhbmQgd3JpdGUgaXQgdG8gdGhlIHRlbXBvcmFyeSBmaWxlXG4gICAgcmVzcG9uc2UuZGF0YS5waXBlKHdyaXRlcik7XG4gICAgLy8gV2FpdCBmb3IgdGhlIGRvd25sb2FkIHRvIGZpbmlzaCBjb21wbGV0ZWx5XG4gICAgYXdhaXQgZmluaXNoZWQod3JpdGVyKTtcbiAgICAvLyBSZXR1cm4gdGhlIGxvY2F0aW9uIHRvIHRoZSBkb3dubG9hZGVkIGZpbGVcbiAgICByZXR1cm4gdG1wRmlsZTtcbn07XG4iLCJpbXBvcnQgeyBleGVjIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5leHBvcnQgY29uc3QgZ2V0UHJvcGVydHlGcm9tUG9tRmlsZSA9IGFzeW5jIChwYXRoLCBleHByZXNzaW9uLCBhY3RpdmF0ZVByb2ZpbGVzKSA9PiB7XG4gICAgY29uc3QgZXh0cmFBcmdzID0gW107XG4gICAgaWYgKGFjdGl2YXRlUHJvZmlsZXMpIHtcbiAgICAgICAgZXh0cmFBcmdzLnB1c2goYC1QICR7YWN0aXZhdGVQcm9maWxlc31gKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gZXhlYyhgbXZuIC1mICR7cGF0aH0gJHtleHRyYUFyZ3Muam9pbignICcpfSBoZWxwOmV2YWx1YXRlIC1EZXhwcmVzc2lvbj0ke2V4cHJlc3Npb259IC1xIC1EZm9yY2VTdGRvdXRgLCAoZXJyLCBzdGRvdXQpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgcmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbGluZXMgPSBzdGRvdXQuc3BsaXQoJ1xcbicpO1xuICAgICAgICAgICAgcmVzb2x2ZShsaW5lcy5wb3AoKSk7XG4gICAgICAgIH1cbiAgICB9KSk7XG59O1xuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmV4cG9ydCBjb25zdCBnZXRVcmxCeUFwcEtleSA9IGFzeW5jIChhcHBLZXkpID0+IHtcbiAgICBsZXQgcmVzdWx0ID0gYGh0dHBzOi8vbWFya2V0cGxhY2UuYXRsYXNzaWFuLmNvbS9kb3dubG9hZC9wbHVnaW5zLyR7YXBwS2V5fWA7XG4gICAgY29uc3QgeyBkYXRhOiBsaXN0aW5nIH0gPSBhd2FpdCBheGlvcy5nZXQoYGh0dHBzOi8vbWFya2V0cGxhY2UuYXRsYXNzaWFuLmNvbS9yZXN0LzIvYWRkb25zLyR7YXBwS2V5fT9ob3N0aW5nPWRhdGFjZW50ZXImd2l0aFZlcnNpb249dHJ1ZWApLmNhdGNoKCgpID0+ICh7IGRhdGE6IG51bGwgfSkpO1xuICAgIGlmIChsaXN0aW5nKSB7XG4gICAgICAgIHJlc3VsdCA9IGxpc3RpbmcuX2VtYmVkZGVkPy52ZXJzaW9uPy5fZW1iZWRkZWQ/LmFydGlmYWN0Py5fbGlua3M/LmJpbmFyeT8uaHJlZiB8fCByZXN1bHQ7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuIiwiaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IGV4aXN0c1N5bmMsIHJtU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IGdsb2IgfSBmcm9tICdnbG9iJztcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tICdvcyc7XG5pbXBvcnQgeyBiYXNlbmFtZSwgam9pbiwgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgT3BlbiB9IGZyb20gJ3VuemlwcGVyJztcbmltcG9ydCB7IGRvd25sb2FkRmlsZSB9IGZyb20gJy4vZG93bmxvYWRGaWxlJztcbmltcG9ydCB7IGdldFByb3BlcnR5RnJvbVBvbUZpbGUgfSBmcm9tICcuL2dldFByb3BlcnR5RnJvbVBvbUZpbGUnO1xuaW1wb3J0IHsgZ2V0VXJsQnlBcHBLZXkgfSBmcm9tICcuL2dldFVybEJ5QXBwS2V5JztcbmV4cG9ydCBjb25zdCBnZW5lcmF0ZURlcGVuZGVuY3lUcmVlID0gYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAvLyBQbGFjZWhvbGRlciBmb3IgdGVtcG9yYXJ5IGRpcmVjdG9yeVxuICAgIGNvbnN0IHRtcERpciA9IGpvaW4oaG9tZWRpcigpLCAnLmRjZHgnLCAndG1wJyk7XG4gICAgLy8gUGxhY2Vob2xkZXIgZm9yIHRoZSBwYXRoIHRvIHRoZSBKQVIgZmlsZVxuICAgIGxldCBmaWxlID0gb3B0aW9ucy5hcmNoaXZlO1xuICAgIC8vIENoZWNrIGlmIHdlIG5lZWQgdG8gZG93bmxvYWQgdGhlIGZpbGUgYmFzZWQgb24gdGhlIGFwcEtleVxuICAgIC8vIElmIGJvdGggYXJjaGl2ZSBhbmQgYXBwS2V5IHdlcmUgcHJvdmlkZWQsIHdlIHdpbGwgdXNlIHRoZSBhcmNoaXZlXG4gICAgaWYgKCFvcHRpb25zLmFyY2hpdmUgJiYgb3B0aW9ucy5hcHBLZXkpIHtcbiAgICAgICAgLy8gR2V0IHRoZSBkb3dubG9hZCBVUkwgYmFzZWQgb24gdGhlIGFwcEtleVxuICAgICAgICBjb25zdCB1cmwgPSBhd2FpdCBnZXRVcmxCeUFwcEtleShvcHRpb25zLmFwcEtleSk7XG4gICAgICAgIC8vIERvd25sb2FkIHRoZSBmaWxlIGZyb20gTVBBQ1xuICAgICAgICBjb25zb2xlLmxvZygnRG93bmxvYWRpbmcgYXJjaGl2ZSBmcm9tIHRoZSBBdGxhc3NpYW4gTWFya2V0cGxhY2UnKTtcbiAgICAgICAgZmlsZSA9IGF3YWl0IGRvd25sb2FkRmlsZSh1cmwpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyBQbGFjZWhvbGRlciBmb3IgYXJjaGl2ZSBkaXJlY3RvcnlcbiAgICAgICAgY29uc3QgYXJjaGl2ZURpciA9IGpvaW4odG1wRGlyLCBgLiR7b3B0aW9ucy5ncm91cElkfS4ke29wdGlvbnMuYXJ0aWZhY3RJZH1gKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgYSB2YWxpZCBwYXRoIHRvIHRoZSBKQVIgZmlsZVxuICAgICAgICAgICAgaWYgKCFmaWxlIHx8ICFleGlzdHNTeW5jKHJlc29sdmUoZmlsZSkpKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFVuYWJsZSB0byBsb2NhdGUgdGhlIGFyY2hpdmUgaW4gcGF0aCAke2ZpbGV9YCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gRXh0cmFjdCB0aGUgZmlsZSB0byBhIHRlbXBvcmFyeSBkaXJlY3RvcnlcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBFeHRyYWN0aW5nIGFyY2hpdmUgdG8gYSB0ZW1wb3JhcnkgbG9jYXRpb24gKCR7YXJjaGl2ZURpcn0pYCk7XG4gICAgICAgICAgICBjb25zdCBhcmNoaXZlID0gYXdhaXQgT3Blbi5maWxlKGZpbGUpO1xuICAgICAgICAgICAgYXdhaXQgYXJjaGl2ZS5leHRyYWN0KHsgcGF0aDogYXJjaGl2ZURpciB9KTtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlIGFyZSBkZWFsaW5nIHdpdGggYW4gT0JSIGZpbGVcbiAgICAgICAgICAgIGlmIChleGlzdHNTeW5jKGpvaW4oYXJjaGl2ZURpciwgJ29ici54bWwnKSkpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnVGhlIGFyY2hpdmUgaXMgYW4gT1NHaSBCdW5kbGUgUmVwb3NpdG9yeSAoT0JSKScpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTZWFyY2hpbmcgZm9yIHRoZSBtYWluIGFydGlmYWN0Jyk7XG4gICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBtYWluIEpBUiBmaWxlICh3aGljaCBpcyBsb2NhdGVkIGluIHRoZSByb290IGRpcmVjdG9yeSlcbiAgICAgICAgICAgICAgICBjb25zdCBbcmVsYXRpdmVQYXRoVG9KYXJdID0gYXdhaXQgZ2xvYihgKi5qYXJgLCB7IGN3ZDogYXJjaGl2ZURpciB9KTtcbiAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgd2UgYWN0dWFsbHkgZm91bmQgdGhlIG1haW4gamFyXG4gICAgICAgICAgICAgICAgaWYgKCFyZWxhdGl2ZVBhdGhUb0phcikge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRmFpbGVkIHRvIGxvY2F0ZSB0aGUgbWFpbiBKQVIgZmlsZSBpbiB0aGUgYXJjaGl2ZScpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgRm91bmQgdGhlIG1haW4gYXJ0aWZhY3QgKCR7cmVsYXRpdmVQYXRoVG9KYXJ9KWApO1xuICAgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGZ1bGwgcGF0aCB0byB0aGUgSkFSIGZpbGVcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgamFyRmlsZSA9IGpvaW4oYXJjaGl2ZURpciwgcmVsYXRpdmVQYXRoVG9KYXIpO1xuICAgICAgICAgICAgICAgICAgICAvLyBQbGFjZWhvbGRlciBkaXJlY3Ryb3kgaW4gd2hpY2ggd2Ugd2lsbCBiZSBleHRyYWN0aW5nIHRoZSBtYWluIEpBUlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBqYXJEaXIgPSBqb2luKGFyY2hpdmVEaXIsIGJhc2VuYW1lKGphckZpbGUsICcuamFyJykpO1xuICAgICAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IHRoZSBtYWluIEpBUiBmaWxlIGludG8gdGhlIHBsYWNlaG9sZGVyIGRpcmVjdG9yeVxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgRXh0cmFjdGluZyB0aGUgbWFpbiBhcnRpZmFjdCB0byBhIHRlbXBvcmFyeSBsb2NhdGlvbiAoJHtqYXJEaXJ9KWApO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhcmNoaXZlID0gYXdhaXQgT3Blbi5maWxlKGphckZpbGUpO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBhcmNoaXZlLmV4dHJhY3QoeyBwYXRoOiBqYXJEaXIgfSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIE5vdyB0cnkgdG8gZmluZCB0aGUgUE9NIGZpbGUgZm9yIHRoZSBtYWluIEpBUlxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgU2VhcmNoaW5nIGZvciBQT00gZmlsZSBpbiB0aGUgbWFpbiBhcnRpZmFjdGApO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwb21GaWxlcyA9IGF3YWl0IGdsb2IoYE1FVEEtSU5GL21hdmVuLyoqL3BvbS54bWxgLCB7IGN3ZDogamFyRGlyIH0pO1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVsYXRpdmVQYXRoVG9QT00gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IHBhdGggb2YgcG9tRmlsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWxhdGl2ZVBhdGhUb1BPTSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9tRmlsZSA9IGpvaW4oamFyRGlyLCBwYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwSWQgPSBhd2FpdCBnZXRQcm9wZXJ0eUZyb21Qb21GaWxlKHBvbUZpbGUsICdwcm9qZWN0Lmdyb3VwSWQnLCBvcHRpb25zLmFjdGl2YXRlUHJvZmlsZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJ0aWZhY3RJZCA9IGF3YWl0IGdldFByb3BlcnR5RnJvbVBvbUZpbGUocG9tRmlsZSwgJ3Byb2plY3QuYXJ0aWZhY3RJZCcsIG9wdGlvbnMuYWN0aXZhdGVQcm9maWxlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5ncm91cElkID09PSBncm91cElkICYmIG9wdGlvbnMuYXJ0aWZhY3RJZCA9PT0gYXJ0aWZhY3RJZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aFRvUE9NID0gcGF0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBmb3VuZCB0aGUgUE9NIGZpbGVcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWxhdGl2ZVBhdGhUb1BPTSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0ZhaWxlZCB0byBsb2NhdGUgdGhlIFBPTSBmaWxlIGluIHRoZSBtYWluIGFydGlmYWN0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgRm91bmQgdGhlIFBPTSBmaWxlYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGZ1bGwgcGF0aCB0byB0aGUgUE9NIGZpbGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvbUZpbGUgPSBqb2luKGphckRpciwgcmVsYXRpdmVQYXRoVG9QT00pO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXNrIE1hdmVuIHRvIGdlbmVyYXRlIHRoZSBkZXBkZW5jeSB0cmVlIGdyYXBoIVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0Fza2luZyBBcGFjaGUgTWF2ZW4gdG8gZ2VuZXJhdGUgdGhlIGRlcGVuZGVuY3kgZ3JhcGgnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXZlbiA9IHNwYXduKCdtdm4nLCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMuYWN0aXZhdGVQcm9maWxlcyA/IFsnLVAnLCBvcHRpb25zLmFjdGl2YXRlUHJvZmlsZXNdIDogW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXBlbmRlbmN5OnRyZWUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWYnLCBwb21GaWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLURvdXRwdXRUeXBlPWRvdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAtRG91dHB1dEZpbGU9JHtvcHRpb25zLm91dHB1dEZpbGV9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLCB7IHN0ZGlvOiAnaW5oZXJpdCcgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF2ZW4ub24oJ2V4aXQnLCAoY29kZSkgPT4gKGNvZGUgPT09IDApID8gcmVzb2x2ZSgpIDogcmVqZWN0KG5ldyBFcnJvcihgQXBhY2hlIE1hdmVuIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfWApKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdGaW5pc2hlZCBnZW5lcmF0aW5nIHRoZSBkZXBlbmRlbmN5IGdyYXBoJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhY3R1YWxseSBhbHJlYWR5IHRoZSBtYWluIEpBUiBmaWxlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBOb3cgdHJ5IHRvIGZpbmQgdGhlIFBPTSBmaWxlIGZvciB0aGUgbWFpbiBKQVJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgU2VhcmNoaW5nIGZvciBQT00gZmlsZSBpbiB0aGUgbWFpbiBhcnRpZmFjdGApO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvbUZpbGVzID0gYXdhaXQgZ2xvYihgTUVUQS1JTkYvbWF2ZW4vKiovcG9tLnhtbGAsIHsgY3dkOiBhcmNoaXZlRGlyIH0pO1xuICAgICAgICAgICAgICAgIGxldCByZWxhdGl2ZVBhdGhUb1BPTSA9IG51bGw7XG4gICAgICAgICAgICAgICAgZm9yIGF3YWl0IChjb25zdCBwYXRoIG9mIHBvbUZpbGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWxhdGl2ZVBhdGhUb1BPTSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9tRmlsZSA9IGpvaW4oYXJjaGl2ZURpciwgcGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwSWQgPSBhd2FpdCBnZXRQcm9wZXJ0eUZyb21Qb21GaWxlKHBvbUZpbGUsICdwcm9qZWN0Lmdyb3VwSWQnKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJ0aWZhY3RJZCA9IGF3YWl0IGdldFByb3BlcnR5RnJvbVBvbUZpbGUocG9tRmlsZSwgJ3Byb2plY3QuYXJ0aWZhY3RJZCcpO1xuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5ncm91cElkID09PSBncm91cElkICYmIG9wdGlvbnMuYXJ0aWZhY3RJZCA9PT0gYXJ0aWZhY3RJZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoVG9QT00gPSBwYXRoO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGZvdW5kIHRoZSBQT00gZmlsZVxuICAgICAgICAgICAgICAgIGlmICghcmVsYXRpdmVQYXRoVG9QT00pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0ZhaWxlZCB0byBsb2NhdGUgdGhlIFBPTSBmaWxlIGluIHRoZSBhcnRpZmFjdCcpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgRm91bmQgdGhlIFBPTSBmaWxlYCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgZnVsbCBwYXRoIHRvIHRoZSBQT00gZmlsZVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwb21GaWxlID0gam9pbihhcmNoaXZlRGlyLCByZWxhdGl2ZVBhdGhUb1BPTSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIEFzayBNYXZlbiB0byBnZW5lcmF0ZSB0aGUgZGVwZGVuY3kgdHJlZSBncmFwaCFcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0Fza2luZyBBcGFjaGUgTWF2ZW4gdG8gZ2VuZXJhdGUgdGhlIGRlcGVuZGVuY3kgZ3JhcGgnKTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF2ZW4gPSBzcGF3bignbXZuJywgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMuYWN0aXZhdGVQcm9maWxlcyA/IFsnLVAnLCBvcHRpb25zLmFjdGl2YXRlUHJvZmlsZXNdIDogW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlcGVuZGVuY3k6dHJlZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1mJywgcG9tRmlsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLURvdXRwdXRUeXBlPWRvdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYC1Eb3V0cHV0RmlsZT0ke29wdGlvbnMub3V0cHV0RmlsZX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgXSwgeyBzdGRpbzogJ2luaGVyaXQnIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF2ZW4ub24oJ2V4aXQnLCAoY29kZSkgPT4gKGNvZGUgPT09IDApID8gcmVzb2x2ZSgpIDogcmVqZWN0KG5ldyBFcnJvcihgQXBhY2hlIE1hdmVuIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfWApKSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRmluaXNoZWQgZ2VuZXJhdGluZyB0aGUgZGVwZW5kZW5jeSBncmFwaCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHJtU3luYyhhcmNoaXZlRGlyLCB7IGZvcmNlOiB0cnVlLCByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIC8vIE9ubHkgcmVtb3ZlIHRoZSBmaWxlIGlmIHdlIGRvd25sb2FkZWQgaXQgZnJvbSBNUEFDXG4gICAgICAgIGlmICghb3B0aW9ucy5hcmNoaXZlICYmIGZpbGUpIHtcbiAgICAgICAgICAgIHJtU3luYyhmaWxlLCB7IGZvcmNlOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgfVxufTtcbiIsImV4cG9ydCBjb25zdCBjYXBpdGFsaXplID0gKHZhbHVlKSA9PiB2YWx1ZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHZhbHVlLnNsaWNlKDEpO1xuIiwiZXhwb3J0IGNvbnN0IGdldFJ1bkZvclN0YWdlID0gKHN0YWdlKSA9PiB7XG4gICAgc3dpdGNoIChzdGFnZSkge1xuICAgICAgICBjYXNlICdiYXNlbGluZSc6IHJldHVybiAxO1xuICAgICAgICBjYXNlICdyZWdyZXNzaW9uJzogcmV0dXJuIDI7XG4gICAgICAgIGNhc2UgJ29uZS1ub2RlJzogcmV0dXJuIDM7XG4gICAgICAgIGNhc2UgJ3R3by1ub2RlJzogcmV0dXJuIDQ7XG4gICAgICAgIGNhc2UgJ2ZvdXItbm9kZSc6IHJldHVybiA1O1xuICAgIH1cbn07XG4iLCJpbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBjYXBpdGFsaXplIH0gZnJvbSAnLi4vaGVscGVycy9jYXBpdGFsaXplJztcbmltcG9ydCB7IGdldFJ1bkZvclN0YWdlIH0gZnJvbSAnLi9oZWxwZXJzL2dldFJ1bkZvclN0YWdlJztcbmNvbnN0IHRvTnVtYmVyID0gKHN0YWdlKSA9PiB7XG4gICAgc3dpdGNoIChzdGFnZSkge1xuICAgICAgICBjYXNlICdvbmUtbm9kZSc6IHJldHVybiAndGhpcmQnO1xuICAgICAgICBjYXNlICd0d28tbm9kZSc6IHJldHVybiAnZm91cnRoJztcbiAgICAgICAgY2FzZSAnZm91ci1ub2RlJzogcmV0dXJuICdmaWZ0aCc7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBlbXB0eUxpbmUgPSAoKSA9PiBjb25zb2xlLmxvZygn4oCLJyk7XG5leHBvcnQgY29uc3QgZ2VuZXJpYyA9IHtcbiAgICBoZWFkZXI6IGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX19fXyAgICAgIF8gICAgICAgICAgX19fX18gICAgICAgICBfICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIFxcXFwgX19ffCB8XyBfX18gICB8ICAgICB8X19fIF9fX3wgfF8gX19fIF9fXyAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB8ICB8IC4nfCAgX3wgLid8ICB8ICAgLS18IC1ffCAgIHwgIF98IC1ffCAgX3wgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICB8X19fXy98X18sfF98IHxfXyx8ICB8X19fX198X19ffF98X3xffCB8X19ffF98ICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgX19fX18gICAgICAgICAgICBfX19fXyAgICAgICAgIF9fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX19fXyAgICAgICAgIF8gXyAgIF8gXyAgIFxuICB8ICBfICB8X19fIF9fXyAgIHwgIF8gIHxfX18gX19ffCAgX3xfX18gX19fIF9fX19fIF9fXyBfX18gX19fIF9fXyAgIHxfICAgX3xfX18gX19ffCB8IHxffF98IHxfIFxuICB8ICAgICB8IC4gfCAuIHwgIHwgICBfX3wgLV98ICBffCAgX3wgLiB8ICBffCAgICAgfCAuJ3wgICB8ICBffCAtX3wgICAgfCB8IHwgLiB8IC4gfCB8ICdffCB8ICBffFxuICB8X198X198ICBffCAgX3wgIHxfX3wgIHxfX198X3wgfF98IHxfX198X3wgfF98X3xffF9fLHxffF98X19ffF9fX3wgICAgfF98IHxfX198X19ffF98XyxffF98X3wgIFxuICAgICAgICB8X3wgfF98ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXG4gIFdlbGNvbWUgdG8gdGhlIGF1dG9tYXRlZCBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCAoRENBUFQpLlxuICBUaGlzIHdpbGwgZ3VpZGUgeW91IHRocm91Z2ggYWxsIHRoZSBzdGVwcyB0byBwcm9kdWNlIHRoZSByZXF1aXJlZCBwZXJmb3JtYW5jZSB0ZXN0aW5nIHJlc3VsdHNcbiAgZm9yIHlvdXIgKGFubnVhbCkgRGF0YSBDZW50ZXIgYXBwcm92YWwuXG5gXG59O1xuZXhwb3J0IGNvbnN0IGluaXQgPSB7XG4gICAgaGVhZGVyOiAocHJvZHVjdCkgPT4gYFxuICBXZSB3aWxsIG5vdyBmb2xsb3cgYWxsIHRoZSBzdGVwcyBhcyBkb2N1bWVudGVkIGluIHRoZSBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCBVc2VyIEd1aWRlIEZvciAke2NhcGl0YWxpemUocHJvZHVjdCl9LlxuICBQbGVhc2UgY29uc3VsdCB0aGUgZG9jdW1lbnRhdGlvbiBwcmlvciB0byBzdGFydGluZyB0aGUgdGVzdCBydW46XG5cbiAgaHR0cHM6Ly9kZXZlbG9wZXIuYXRsYXNzaWFuLmNvbS9wbGF0Zm9ybS9tYXJrZXRwbGFjZS9kYy1hcHBzLXBlcmZvcm1hbmNlLXRvb2xraXQtdXNlci1ndWlkZS0ke3Byb2R1Y3R9L1xuXG4gIE9uY2UgeW91IHN0YXJ0IHRoZSB0ZXN0IHJ1biB3ZSB3aWxsIHByb3Zpc2lvbiB0aGUgZW52aXJvbm1lbnQgb24gQVdTLiBcbiAgSU1QT1JUQU5UOiBUaGlzIGNhbiBpbmN1ciBjb3N0cy5cbiAgXG4gIFlvdSBjYW4gc3RvcCB0aGlzIHByb2Nlc3MgYXQgYW55IHRpbWUgYnkgZXhpdGluZyB0aGlzIHByb2dyYW0uIEJlIHN1cmUgdG8gcnVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB0byByZXNldCBcbiAgdGhlIEFXUyBlbnZpcm9ubWVudCBhbmQgcHJldmVudCB1bmV4cGVjdGVkIGNvc3RzLlxuXG4gICQgZGNkeCBhcHQgdGVhcmRvd25cblxuICBZb3UgY2FuIGFsc28gcmVzdW1lL3Jlc3RhcnQgZXZlcnkgcGFydCBvZiB0aGUgdGVzdCBydW4gdXNpbmcgb25lIG9mIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6XG5cbiAgJCBkY2R4IGFwdCBpbml0IC0tcHJvZHVjdCAke3Byb2R1Y3R9XG4gICQgZGNkeCBhcHQgcHJvdmlzaW9uIC0tcHJvZHVjdCAke3Byb2R1Y3R9XG4gICQgZGNkeCBhcHQgcnVuMSAtLXByb2R1Y3QgJHtwcm9kdWN0fVxuICAkIGRjZHggYXB0IHJ1bjIgLS1wcm9kdWN0ICR7cHJvZHVjdH1cbiAgJCBkY2R4IGFwdCBydW4zIC0tcHJvZHVjdCAke3Byb2R1Y3R9XG4gICQgZGNkeCBhcHQgcnVuNCAtLXByb2R1Y3QgJHtwcm9kdWN0fVxuICAkIGRjZHggYXB0IHJ1bjUgLS1wcm9kdWN0ICR7cHJvZHVjdH1cblxuICBXZSB3aWxsIGNvbnRpbnVlIHdpdGggdGhlIGZvbGxvd2luZyBzdGVwczpcbiR7cHJvZHVjdCA9PT0gJ2ppcmEnID8gYFxuICAxLiAgUHJvdmlzaW9uIHRoZSBlbnZpcm9ubWVudFxuICAyLiAgUGVyZm9ybWFuY2UgcmVncmVzc2lvbiB3aXRob3V0IGFwcCBpbnN0YWxsZWQgKHJ1biAxKVxuICAzLiAgTHVjZW5lIEluZGV4IHRpbWluZyB0ZXN0IHdpdGggYXBwIGluc3RhbGxlZCAocnVuIDIpXG4gIDQuICBQZXJmb3JtYW5jZSByZWdyZXNzaW9uIHdpdGggYXBwIGluc3RhbGxlZCAocnVuIDIpXG4gIDUuICBTY2FsYWJpbGl0eSB0ZXN0aW5nIG9uIG9uZS1ub2RlIGNsdXN0ZXIgd2l0aCBhcHAtc3BlY2lmaWMgYWN0aW9ucyAocnVuIDMpXG4gIDYuICBTY2FsYWJpbGl0eSB0ZXN0aW5nIG9uIHR3by1ub2RlIGNsdXN0ZXIgd2l0aCBhcHAtc3BlY2lmaWMgYWN0aW9ucyAocnVuIDQpXG4gIDcuICBTY2FsYWJpbGl0eSB0ZXN0aW5nIG9uIGZvdXItbm9kZSBjbHVzdGVyIHdpdGggYXBwLXNwZWNpZmljIGFjdGlvbnMgKHJ1biA1KVxuICA4LiAgR2VuZXJhdGUgcmVwb3J0c1xuICA5LiAgVGVhcmRvd24gb2YgZW52aXJvbm1lbnRcbiAgMTAuIFNlY3VyaXR5IFNjYW5uZXIgZm9yIERhdGEgQ2VudGVyIGFwcHNcbmAgOiBgXG4gIDEuIFByb3Zpc2lvbiB0aGUgZW52aXJvbm1lbnRcbiAgMi4gUGVyZm9ybWFuY2UgcmVncmVzc2lvbiB3aXRob3V0IGFwcCBpbnN0YWxsZWQgKHJ1biAxKVxuICAzLiBQZXJmb3JtYW5jZSByZWdyZXNzaW9uIHdpdGggYXBwIGluc3RhbGxlZCAocnVuIDIpXG4gIDQuIFNjYWxhYmlsaXR5IHRlc3Rpbmcgb24gb25lLW5vZGUgY2x1c3RlciB3aXRoIGFwcC1zcGVjaWZpYyBhY3Rpb25zIChydW4gMylcbiAgNS4gU2NhbGFiaWxpdHkgdGVzdGluZyBvbiB0d28tbm9kZSBjbHVzdGVyIHdpdGggYXBwLXNwZWNpZmljIGFjdGlvbnMgKHJ1biA0KVxuICA2LiBTY2FsYWJpbGl0eSB0ZXN0aW5nIG9uIGZvdXItbm9kZSBjbHVzdGVyIHdpdGggYXBwLXNwZWNpZmljIGFjdGlvbnMgKHJ1biA1KVxuICA3LiBHZW5lcmF0ZSByZXBvcnRzXG4gIDguIFRlYXJkb3duIG9mIGVudmlyb25tZW50XG4gIDkuIFNlY3VyaXR5IFNjYW5uZXIgZm9yIERhdGEgQ2VudGVyIGFwcHNcbmB9YCxcbn07XG5leHBvcnQgY29uc3QgcHJvdmlzaW9uaW5nID0ge1xuICAgIGhlYWRlcjogYFxuICBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBcbiAgfCAgXyAgfCBfXyAgfCAgICAgfCAgfCAgfCAgICAgfCAgIF9ffCAgICAgfCAgICAgfCAgIHwgfCAgICAgfCAgIHwgfCAgIF9ffFxuICB8ICAgX198ICAgIC18ICB8ICB8ICB8ICB8LSAgIC18X18gICB8LSAgIC18ICB8ICB8IHwgfCB8LSAgIC18IHwgfCB8ICB8ICB8XG4gIHxfX3wgIHxfX3xfX3xfX19fX3xcXFxcX19fL3xfX19fX3xfX19fX3xfX19fX3xfX19fX3xffF9fX3xfX19fX3xffF9fX3xfX19fX3xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgV2Ugd2lsbCBub3cgc3RhcnQgcHJvdmlzaW9uaW5nIEFXUyB1c2luZyB0aGUgQXRsYXNzaWFuIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYWNlIFRvb2xraXQgKERDQVBUKSBUZXJyYWZvcm0gY29uZmlndXJhdGlvbi5cblxuICBJbiBvcmRlciB0byBkbyB0aGlzLCB3ZSBuZWVkIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246XG5cbiAgMS4gVGhlIGxvY2F0aW9uIG9mIHRoZSBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCBvbiB5b3VyIGRpc2tcbiAgMi4gQVdTIGNyZWRlbnRpYWxzXG4gIDMuIFByb2R1Y3QgbGljZW5zZVxuYCxcbiAgICBhc2tGb3JBV1NDcmVkZW50aWFsczogKHByb2R1Y3QpID0+IGBcbiAgSW4gb3JkZXIgdG8gcHJvdmlzaW9uIHRoZSAke2NhcGl0YWxpemUocHJvZHVjdCl9IGNsdXN0ZXIsIHdlIG5lZWQgQWRtaW5pc3RyYXRvciBjcmVkZW50aWFscyBmb3IgQVdTLlxuICBQbGVhc2UgcmVmZXIgdG8gdGhlIERDQVBUIGRvY3VtZW50YXRpb24gdG8gZmluZCBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjcmVhdGUgdGhlIEFXUyBhY2Nlc3Mga2V5czpcblxuICBodHRwczovL2RldmVsb3Blci5hdGxhc3NpYW4uY29tL3BsYXRmb3JtL21hcmtldHBsYWNlL2RjLWFwcHMtcGVyZm9ybWFuY2UtdG9vbGtpdC11c2VyLWd1aWRlLSR7cHJvZHVjdH0vI3NldHVwLSR7cHJvZHVjdH0tZGF0YS1jZW50ZXItZGV2ZWxvcG1lbnQtZW52aXJvbm1lbnQtb24tazhzLVxuYCxcbiAgICBhc2tGb3JFbnZpcm9ubWVudDogYFxuICBXaGVuIHByb3Zpc2lvbmluZyB0aGUgY2x1c3Rlciwgd2UgbmVlZCBhIHVuaXF1ZSBlbnZpcm9ubWVudCBuYW1lLlxuICBUaGlzIHdpbGwgYWxsb3cgeW91IHRvIGNyZWF0ZSBtdWx0aXBsZSBjbHVzdGVycyAoaS5lLiBmb3IgZGlmZmVyZW50IGhvc3QgcHJvZHVjdHMpIGFuZCB0byBpZGVudGlmeSB3aGljaCBjbHVzdGVyIHRvIHVzZSBkdXJpbmcgdGVzdGluZyAmIHRlYXJkb3duLlxuYCxcbiAgICBhc2tGb3JIb3N0TGljZW5zZTogYFxuICBUaGUgaG9zdCBwcm9kdWN0IHJlcXVpcmVzIGEgdmFsaWQgbGljZW5zZS5cblxuICBCeSBkZWZhdWx0IHdlIHVzZSB0aGUgNzJoIGRldmVsb3BlciBsaWNlbnNlIHByb3ZpZGVkIGJ5IEF0bGFzc2lhbi4gSWYgeW91IG5lZWQgYSBtb3JlIGV4dGVuc2l2ZSBsaWNlbnNlLFxuICB5b3UgY2FuIGdlbmVyYXRlIGFuIGV2YWx1YXRpb24gbGljZW5zZSBmcm9tIG15LmF0bGFzc2lhbi5jb20gb3IgYXNrIEF0bGFzc2lhbiBNYXJrZXRwbGFjZSBEZXZlbG9wZXIgU3VwcG9ydCBmb3IgYSB0ZXN0IGxpY2Vuc2UuXG5gLFxuICAgIGFza0ZvckFwcExpY2Vuc2U6IGBcblRoZSBhcHAgcmVxdWlyZXMgYSB2YWxpZCBsaWNlbnNlLlxuXG5CeSBkZWZhdWx0IHdlIHVzZSB0aGUgMyBob3VyIHRpbWVib21iIGxpY2Vuc2UgcHJvdmlkZWQgYnkgQXRsYXNzaWFuLiBJZiB5b3UgbmVlZCBhIG1vcmUgZXh0ZW5zaXZlIGxpY2Vuc2UsXG55b3UgY2FuIGdlbmVyYXRlIGFuIGV2YWx1YXRpb24gbGljZW5zZSBmcm9tIG15LmF0bGFzc2lhbi5jb20gb3IgYXNrIEF0bGFzc2lhbiBNYXJrZXRwbGFjZSBEZXZlbG9wZXIgU3VwcG9ydCBmb3IgYSB0ZXN0IGxpY2Vuc2UuXG5gLFxuICAgIHJlYWR5OiBgXG4gIFdlIGhhdmUgbm93IGdhdGhlcmVkIGFsbCB0aGUgaW5mb3JtYXRpb24gcmVxdWlyZWQgdG8gcHJvdmlzaW9uIHRoZSBjbHVzdGVyLlxuXG4gICEhIElNUE9SVEFOVCAhIVxuICBcbiAgV2Ugd2lsbCBiZSB3cml0aW5nIHRoZSBjb25maWd1cmF0aW9uIHRvIGRpc2suIFRoaXMgd2lsbCBvdmVyd3JpdGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbi5cbiAgUGxlYXNlIG5vdGUgdGhhdCBwcm92aXNpb25pbmcgdGhlIGVudmlyb25tZW50IHdpbGwgaW5jdXIgQVdTIHVzYWdlIGNvc3RzLlxuYCxcbiAgICBhd3NDcmVkZW50aWFsc1BlcnNpc3RlZDogJ+KclCBBV1MgY3JlZGVudGlhbHMgd3JpdHRlbiB0byBhcHAvdXRpbC9rOHMvYXdzX2VudnMnLFxuICAgIHRlcnJhZm9ybUNvbmZpZ3VyYXRpb25QZXJzaXN0ZWQ6IGDinJQgVGVycmFmb3JtIGNvbmZpZ3VyYXRpb24gd3JpdHRlbiB0byBhcHAvdXRpbC9rOHMvZGNhcHQudGZ2YXJzYFxufTtcbmV4cG9ydCBjb25zdCBSdW4xID0ge1xuICAgIGhlYWRlcjogKCkgPT4gYFxuICBfX19fXyBfX19fXyBfX19fXyAgICBfX18gICBcbiAgfCBfXyAgfCAgfCAgfCAgIHwgfCAgfF8gIHwgIFxuICB8ICAgIC18ICB8ICB8IHwgfCB8ICAgX3wgfF8gXG4gIHxfX3xfX3xfX19fX3xffF9fX3wgIHxfX19fX3xcblxuICBXZSB3aWxsIG5vdyBzdGFydCB0aGUgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiB0ZXN0aW5nIHdpdGhvdXQgYXBwIGluc3RhbGxlZCAocnVuIDEpXG4gIFRoaXMgd2lsbCBwcm9kdWNlIHRoZSBwZXJmb3JtYW5jZSBiYXNlbGluZSByZXN1bHRzLlxuXG4gIEl0IGlzIGltcG9ydGFudCB0aGF0IHlvdSBhcmUgcnVubmluZyB0aGUgYmFzZWxpbmUgdGVzdCBvbiB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLlxuICBZb3UgY2FuIGdldCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZyb20gdGhlIEFQVCBzb3VyY2VzOlxuXG4gIGh0dHBzOi8vZ2l0aHViLmNvbS9hdGxhc3NpYW4vZGMtYXBwLXBlcmZvcm1hbmNlLXRvb2xraXRcbmAsXG4gICAgcmVhZHlGb3JQcm92aXNpb25pbmc6IGBcbkluIG9yZGVyIHRvIGJlIGFibGUgdG8gc3RhcnQgdGhlIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gdGVzdCwgd2Ugd2lsbCBub3cgY29uZmlndXJlIHRoZSBEQyBjbHVzdGVyIG9uIEFXU1xuXG4hISBJTVBPUlRBTlQgISFcblxuV2Ugd2lsbCBiZSB3cml0aW5nIHRoZSBjb25maWd1cmF0aW9uIHRvIGRpc2suIFRoaXMgd2lsbCBvdmVyd3JpdGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbi5cblBsZWFzZSBub3RlIHRoYXQgcHJvdmlzaW9uaW5nIHRoZSBlbnZpcm9ubWVudCB3aWxsIGluY3VyIEFXUyB1c2FnZSBjb3N0cy5cbmAsXG4gICAgc3RhcnRUZXN0OiBgXG5XZSB3aWxsIG5vdyBzdGFydCB0aGUgUGVyZm9ybWFuY2UgUmVncmVzc2lvbiB0ZXN0XG5gLFxuICAgIHN1Y2Nlc3M6IGBcbuKclCBGaW5pc2hlZCB0aGUgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiB0ZXN0aW5nIHdpdGhvdXQgYXBwIGluc3RhbGxlZCAocnVuIDEpXG5gLFxuICAgIGZhaWx1cmU6IChzdGFnZSwgY3dkLCBwcm9kdWN0LCBlbnZpcm9ubWVudCwgcmVzdWx0c0Jhc2VEaXIsIHJlc3VsdHMpID0+IHtcbiAgICAgICAgbGV0IG91dHB1dCA9IGBcbiAg4pyUIEZpbmlzaGVkIHRoZSBwZXJmb3JtYW5jZSAke3N0YWdlfSB0ZXN0aW5nIHdpdGhvdXQgYXBwIGluc3RhbGxlZCAocnVuIDEpXG5cbiAgVW5mb3J0dW5hdGVseSwgdGhlIHRlc3QgcnVuIHdhcyBmaW5pc2hlZCB1bnN1Y2Nlc2Z1bC4gXG4gIFBsZWFzZSByZXZpZXcgdGhlIHRlc3QgcmVzdWx0cyBhbmQgYWRqdXN0IHRoZSBjb25maWd1cmF0aW9uIGlmIHJlcXVpcmVkLlxuYDtcbiAgICAgICAgT2JqZWN0LmVudHJpZXMocmVzdWx0cykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiBvdXRwdXQgKz0gYCAgJHtrZXl9OiAke3ZhbHVlfVxcbmApO1xuICAgICAgICBvdXRwdXQgKz0gYFxuICBGdWxsIHJlcG9ydCBjYW4gYmUgZm91bmQgaGVyZTpcbiAgJHtqb2luKHJlc3VsdHNCYXNlRGlyLCAncmVzdWx0c19zdW1tYXJ5LmxvZycpfVxuXG4gIFlvdSBjYW4gcmVzdGFydCB0aGUgcGVyZm9ybWFuY2UgdGVzdGluZyB1c2luZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6XG4gIFxuICAkIGRjZHggYXB0IHJ1bjEgLS1wcm9kdWN0ICR7cHJvZHVjdH0gLS1jd2QgJHtjd2R9IC0tZW52aXJvbm1lbnQgJHtlbnZpcm9ubWVudH1cbmA7XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBSdW4yID0ge1xuICAgIGhlYWRlcjogKHByb2R1Y3QpID0+IGBcbiAgX19fX18gX19fX18gX19fX18gICAgX19fIFxuICB8IF9fICB8ICB8ICB8ICAgfCB8ICB8XyAgfFxuICB8ICAgIC18ICB8ICB8IHwgfCB8ICB8ICBffFxuICB8X198X198X19fX198X3xfX198ICB8X19ffFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgV2Ugd2lsbCBub3cgc3RhcnQgdGhlIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gdGVzdGluZyB3aXRoIGFwcCBpbnN0YWxsZWQgKHJ1biAyKVxuICBUaGlzIHdpbGwgYWxsb3cgdGhlIGdlbmVyYXRpb24gb2YgYSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHJlcG9ydC5cbiR7cHJvZHVjdCA9PT0gJ2ppcmEnID8gYFxuICBJbiBhZGRpdGlvbiwgYSBMdWNlbmUgSW5kZXggVGltaW5nIFRlc3QgaXMgYWxzbyBwYXJ0IG9mIHRoZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHRlc3RzLmAgOiAnJ31cbiAgVGhlIHNlY29uZCBydW4gY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBzdGVwczpcbiR7cHJvZHVjdCA9PT0gJ2ppcmEnID8gYFxuICAxLiBJbnN0YWxsIHRoZSBhcHAgaW50byB0aGUgY2x1c3RlclxuICAyLiBCZW5jaG1hcmsgdGhlIHJlLWluZGV4IHRpbWUgd2l0aCB5b3VyIGFwcCBpbnN0YWxsZWRcbiAgMy4gUGVyZm9ybWFuY2UgcmVzdWx0cyBnZW5lcmF0aW9uIHdpdGggdGhlIGFwcCBpbnN0YWxsZWRcbmAgOiBgXG4gIDEuIEluc3RhbGwgdGhlIGFwcCBpbnRvIHRoZSBjbHVzdGVyXG4gIDIuIFBlcmZvcm1hbmNlIHJlc3VsdHMgZ2VuZXJhdGlvbiB3aXRoIHRoZSBhcHAgaW5zdGFsbGVkXG5gfVxuICBJdCBpcyBpbXBvcnRhbnQgdGhhdCB5b3UgYXJlIHJ1bm5pbmcgdGhlIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gdGVzdCBvbiB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLlxuICBZb3UgY2FuIGdldCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZyb20gdGhlIEFQVCBzb3VyY2VzOlxuXG4gIGh0dHBzOi8vZ2l0aHViLmNvbS9hdGxhc3NpYW4vZGMtYXBwLXBlcmZvcm1hbmNlLXRvb2xraXRcbmAsXG4gICAgcmVhZHlGb3JQcm92aXNpb25pbmc6IGBcbkluIG9yZGVyIHRvIGJlIGFibGUgdG8gc3RhcnQgdGhlIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gdGVzdCwgd2Ugd2lsbCBub3cgY29uZmlndXJlIHRoZSBEQyBjbHVzdGVyIG9uIEFXU1xuXG4hISBJTVBPUlRBTlQgISFcblxuV2Ugd2lsbCBiZSB3cml0aW5nIHRoZSBjb25maWd1cmF0aW9uIHRvIGRpc2suIFRoaXMgd2lsbCBvdmVyd3JpdGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbi5cblBsZWFzZSBub3RlIHRoYXQgcHJvdmlzaW9uaW5nIHRoZSBlbnZpcm9ubWVudCB3aWxsIGluY3VyIEFXUyB1c2FnZSBjb3N0cy5cbmAsXG4gICAgc3RhcnRUZXN0OiBgXG4gIFdlIHdpbGwgbm93IHN0YXJ0IHRoZSBQZXJmb3JtYW5jZSBSZWdyZXNzaW9uIHRlc3RcbmAsXG4gICAgc3VjY2VzczogYFxu4pyUIEZpbmlzaGVkIHRoZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHRlc3Rpbmcgd2l0aCBhcHAgaW5zdGFsbGVkIChydW4gMilcbmAsXG4gICAgZmFpbHVyZTogKHN0YWdlLCBjd2QsIHByb2R1Y3QsIGVudmlyb25tZW50LCByZXN1bHRzQmFzZURpciwgcmVzdWx0cykgPT4ge1xuICAgICAgICBsZXQgb3V0cHV0ID0gYFxuICDinJQgRmluaXNoZWQgdGhlIHBlcmZvcm1hbmNlICR7c3RhZ2V9IHRlc3Rpbmcgd2l0aCBhcHAgaW5zdGFsbGVkIChydW4gMilcblxuICBVbmZvcnR1bmF0ZWx5LCB0aGUgdGVzdCBydW4gd2FzIGZpbmlzaGVkIHVuc3VjY2VzZnVsLiBcbiAgUGxlYXNlIHJldmlldyB0aGUgdGVzdCByZXN1bHRzIGFuZCBhZGp1c3QgdGhlIGNvbmZpZ3VyYXRpb24gaWYgcmVxdWlyZWQuXG5gO1xuICAgICAgICBPYmplY3QuZW50cmllcyhyZXN1bHRzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IG91dHB1dCArPSBgICAke2tleX06ICR7dmFsdWV9XFxuYCk7XG4gICAgICAgIG91dHB1dCArPSBgXG4gIEZ1bGwgcmVwb3J0IGNhbiBiZSBmb3VuZCBoZXJlOlxuICAke2pvaW4ocmVzdWx0c0Jhc2VEaXIsICdyZXN1bHRzX3N1bW1hcnkubG9nJyl9XG5cbiAgWW91IGNhbiByZXN0YXJ0IHRoZSBwZXJmb3JtYW5jZSB0ZXN0aW5nIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZDpcbiAgXG4gICQgZGNkeCBhcHQgcnVuMiAtLXByb2R1Y3QgJHtwcm9kdWN0fSAtLWN3ZCAke2N3ZH0gLS1lbnZpcm9ubWVudCAke2Vudmlyb25tZW50fVxuYDtcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IEx1Y2VuZVRpbWluZ1Rlc3QgPSB7XG4gICAgaGVhZGVyOiAoX3Byb2R1Y3QsIHN0YWdlKSA9PiBgXG4gIF9fICAgIF9fX19fIF9fX19fIF9fX19fIF9fX19fIF9fX19fIFxuICB8ICB8ICB8ICB8ICB8ICAgICB8ICAgX198ICAgfCB8ICAgX198XG4gIHwgIHxfX3wgIHwgIHwgICAtLXwgICBfX3wgfCB8IHwgICBfX3xcbiAgfF9fX19ffF9fX19ffF9fX19ffF9fX19ffF98X19ffF9fX19ffFxuICBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBcbiAgfF8gICBffCAgICAgfCAgICAgfCAgICAgfCAgIHwgfCAgIF9ffFxuICAgIHwgfCB8LSAgIC18IHwgfCB8LSAgIC18IHwgfCB8ICB8ICB8XG4gICAgfF98IHxfX19fX3xffF98X3xfX19fX3xffF9fX3xfX19fX3xcbiAgICAgIF9fX19fIF9fX19fIF9fX19fIF9fX19fICAgICAgICAgXG4gICAgICB8XyAgIF98ICAgX198ICAgX198XyAgIF98ICAgICAgICBcbiAgICAgICAgfCB8IHwgICBfX3xfXyAgIHwgfCB8ICAgICAgICAgIFxuICAgICAgICB8X3wgfF9fX19ffF9fX19ffCB8X3wgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgV2Ugd2lsbCBub3cgc3RhcnQgdGhlIEx1Y2VuZSBJbmRleCBUaW1pbmcgdGVzdCB3aXRoIGFwcCBpbnN0YWxsZWRcbiAgVGhpcyBpcyBwYXJ0IG9mIHRoZSBQZXJmb3JtYW5jZSAke3N0YWdlfSB0ZXN0IChydW4gMilcblxuICBBZnRlciB0aGUgcmUtaW5kZXggaXMgY29tcGxldGVkIGEgc2NyZWVuc2hvdCBpcyBjcmVhdGVkIHdoaWNoIGlzIHBhcnQgb2YgdGhlIHJlcXVpcmVkIHRlc3QgcmVzdWx0c1xuXG4gIEl0IGlzIGltcG9ydGFudCB0aGF0IHlvdSBhcmUgcnVubmluZyB0aGUgTHVjZW5lIGluZGV4IHRpbWluZyB0ZXN0IG9uIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uXG4gIFlvdSBjYW4gZ2V0IHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgQVBUIHNvdXJjZXM6XG5cbiAgaHR0cHM6Ly9naXRodWIuY29tL2F0bGFzc2lhbi9kYy1hcHAtcGVyZm9ybWFuY2UtdG9vbGtpdFxuYCxcbiAgICByZWFkeUZvclByb3Zpc2lvbmluZzogYFxuSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBzdGFydCB0aGUgTHVjZW5lIGluZGV4IHRpbWluZyB0ZXN0LCB3ZSB3aWxsIG5vdyBjb25maWd1cmUgdGhlIERDIGNsdXN0ZXIgb24gQVdTXG5cbiEhIElNUE9SVEFOVCAhIVxuXG5XZSB3aWxsIGJlIHdyaXRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gdG8gZGlzay4gVGhpcyB3aWxsIG92ZXJ3cml0ZSBleGlzdGluZyBjb25maWd1cmF0aW9uLlxuUGxlYXNlIG5vdGUgdGhhdCBwcm92aXNpb25pbmcgdGhlIGVudmlyb25tZW50IHdpbGwgaW5jdXIgQVdTIHVzYWdlIGNvc3RzLlxuYCxcbiAgICBzdGFydFRlc3Q6IGBcbiAgV2UgYXJlIHJlYWR5IHRvIHN0YXJ0IHRoZSBMdWNlbmUgSW5kZXggdGltaW5nIHRlc3RcbiAgT25jZSB0aGUgdGVzdCBpcyBmaW5pc2hlZCwgYSBicm93c2VyIHdpbmRvdyBpcyBvcGVuZWQgdG8gY2FwdHVyZSB0aGUgdGVzdCByZXN1bHRzLlxuXG4gICEhIElNUE9SVEFOVCAhIVxuXG4gIFRoaXMgbWF5IHRha2UgfjUwIG1pbnV0ZXMuIFBsZWFzZSBkbyBub3QgdGVybWluYXRlIHRoZSBwcm9ncmFtXG4gIERvIG5vdCBjbG9zZSB0aGUgYnJvd3NlciB3aW5kb3csIG9yIGVsc2UgdGhlIHRlc3Qgd2lsbCBmYWlsXG5gLFxuICAgIHN1Y2Nlc3M6IGBcbuKclCBGaW5pc2hlZCB0aGUgTHVjZW5lIEluZGV4IFRpbWluaWcgdGVzdCB3aXRoIGFwcCBpbnN0YWxsZWQgKHJ1biAyKVxuYCxcbiAgICBmYWlsdXJlOiAoX3N0YWdlLCBjd2QsIHByb2R1Y3QsIGVudmlyb25tZW50KSA9PiBgXG4gIOKclCBGaW5pc2hlZCB0aGUgTHVjZW5lIEluZGV4IFRpbWluZyB0ZXN0IHdpdGggYXBwIGluc3RhbGxlZCAocnVuIDIpXG5cbiAgVW5mb3J0dW5hdGVseSwgdGhlIHRlc3QgcnVuIHdhcyBmaW5pc2hlZCB1bnN1Y2Nlc2Z1bC4gXG4gIFBsZWFzZSByZXZpZXcgdGhlIHRlc3QgcmVzdWx0cyBhbmQgYWRqdXN0IHRoZSBjb25maWd1cmF0aW9uIGlmIHJlcXVpcmVkLlxuXG4gIFlvdSBjYW4gcmVzdGFydCB0aGUgTHVjZW5lIEluZGV4IFRpbWluZyB0ZXN0IHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZDpcbiAgXG4gICQgZGNkeCBhcHQgcmVpbmRleCAtLXByb2R1Y3QgJHtwcm9kdWN0fSAtLWN3ZCAke2N3ZH0gLS1lbnZpcm9ubWVudCAke2Vudmlyb25tZW50fVxuYFxufTtcbmV4cG9ydCBjb25zdCBQZXJmb3JtYW5jZVJlcG9ydE1lc3NhZ2VzID0ge1xuICAgIGhlYWRlcjogYFxuICBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyAgIFxuICB8ICBfICB8ICAgX198IF9fICB8ICAgX198ICAgICB8IF9fICB8ICAgICB8ICBfICB8ICAgfCB8ICAgICB8ICAgX198ICBcbiAgfCAgIF9ffCAgIF9ffCAgICAtfCAgIF9ffCAgfCAgfCAgICAtfCB8IHwgfCAgICAgfCB8IHwgfCAgIC0tfCAgIF9ffCAgXG4gIHxfX3wgIHxfX19fX3xfX3xfX3xfX3wgIHxfX19fX3xfX3xfX3xffF98X3xfX3xfX3xffF9fX3xfX19fX3xfX19fX3wgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gICAgIFxuICAgICAgfCBfXyAgfCAgIF9ffCAgIF9ffCBfXyAgfCAgIF9ffCAgIF9ffCAgIF9ffCAgICAgfCAgICAgfCAgIHwgfCAgICBcbiAgICAgIHwgICAgLXwgICBfX3wgIHwgIHwgICAgLXwgICBfX3xfXyAgIHxfXyAgIHwtICAgLXwgIHwgIHwgfCB8IHwgICAgXG4gICAgICB8X198X198X19fX198X19fX198X198X198X19fX198X19fX198X19fX198X19fX198X19fX198X3xfX198ICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICB8IF9fICB8ICAgX198ICBfICB8ICAgICB8IF9fICB8XyAgIF98ICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgfCAgICAtfCAgIF9ffCAgIF9ffCAgfCAgfCAgICAtfCB8IHwgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIHxfX3xfX3xfX19fX3xfX3wgIHxfX19fX3xfX3xfX3wgfF98ICAgICAgICAgICAgICAgICAgICAgIFxuXG5cbiAgV2UgYXJlIGdvaW5nIHRvIGdlbmVyYXRlIHRoZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHJlcG9ydFxuICBUaGUgcmVwb3J0IGNvbnN0aXN0cyBvZiBhIENTViBhbmQgUE5HIGZpbGUgdGhhdCBhcmUgcmVxdWlyZWQgZm9yIFxuICB0aGUgKGFubnVhbCkgRGF0YSBDZW50ZXIgYXBwIHJldmlld1xuYFxufTtcbmV4cG9ydCBjb25zdCBTY2FsYWJpbGl0eVRlc3RNZXNzYWdlcyA9IHtcbiAgICBoZWFkZXI6IChwcm9kdWN0LCBzdGFnZSkgPT4gYFxuJHtzdGFnZSA9PT0gJ29uZS1ub2RlJyA/IGBcbiAgX19fX18gX19fX18gX19fX18gICAgX19fIFxuICB8IF9fICB8ICB8ICB8ICAgfCB8ICB8XyAgfFxuICB8ICAgIC18ICB8ICB8IHwgfCB8ICB8XyAgfFxuICB8X198X198X19fX198X3xfX198ICB8X19ffFxuYCA6IHN0YWdlID09PSAndHdvLW5vZGUnID8gYFxuICBfX19fXyBfX19fXyBfX19fXyAgICBfX18gXG4gIHwgX18gIHwgIHwgIHwgICB8IHwgIHwgfCB8XG4gIHwgICAgLXwgIHwgIHwgfCB8IHwgIHxfICB8XG4gIHxfX3xfX3xfX19fX3xffF9fX3wgICAgfF98ICAgICAgICAgICAgICAgICAgICAgICAgICBcbmAgOiBgXG4gIF9fX19fIF9fX19fIF9fX19fICAgIF9fXyBcbiAgfCBfXyAgfCAgfCAgfCAgIHwgfCAgfCAgX3xcbiAgfCAgICAtfCAgfCAgfCB8IHwgfCAgfF8gIHxcbiAgfF9ffF9ffF9fX19ffF98X19ffCAgfF9fX3wgICAgICAgICAgICAgICAgICAgICAgICAgIFxuYH1cblxuICBXZSB3aWxsIG5vdyBzdGFydCB0aGUgc2NhbGFiaWxpdHkgYmVuY2htYXJrIGZvciAke3N0YWdlfSAke2NhcGl0YWxpemUocHJvZHVjdCl9IERDIGNsdXN0ZXIgd2l0aCBhcHAtc3BlY2lmaWMgYWN0aW9uczogKHJ1biAke2dldFJ1bkZvclN0YWdlKHN0YWdlKX0pXG5cbiAgVGhlICR7dG9OdW1iZXIoc3RhZ2UpfSBydW4gY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBzdGVwczpcbiAgMS4gQWRqdXN0IHRoZSBlbnZpcm9ubWVudCB0byBhICR7c3RhZ2V9IGNsdXN0ZXJcbiAgMS4gSW5zdGFsbCB0aGUgYXBwIGludG8gdGhlIGNsdXN0ZXJcbiAgMy4gU2NhbGFiaWxpdHkgYmVuY2htYXJrIHRlc3Rpbmcgd2l0aCB0aGUgYXBwIGluc3RhbGxlZFxuXG4gIEl0IGlzIGltcG9ydGFudCB0aGF0IHlvdSBhcmUgcnVubmluZyB0aGUgc2NhbGFiaWxpdHkgYmVuY2htYXJrIHRlc3Qgb24gYSBEQ0FQVCB2ZXJzaW9uIHRoYXQgaGFzIGFwcC1zcGVjaWZpYyBhY3Rpb25zXG4gIE1vcmUgaW5mb3JtYXRpb24gb24gZGV2ZWxvcGluZyBhcHAtc3BlY2lmaWMgYWN0aW9ucyBjYW4gYmUgZm91bmQgaGVyZTpcblxuJHtwcm9kdWN0ID09PSAnamlyYScgP1xuICAgICAgICBgICBodHRwczovL2RldmVsb3Blci5hdGxhc3NpYW4uY29tL3BsYXRmb3JtL21hcmtldHBsYWNlL2RjLWFwcHMtcGVyZm9ybWFuY2UtdG9vbGtpdC11c2VyLWd1aWRlLWppcmEvIzMtLWRldmVsb3AtYW5kLXRlc3QtYXBwLXNwZWNpZmljLWFjdGlvbi1sb2NhbGx5YFxuICAgICAgICA6IHByb2R1Y3QgPT09ICdjb25mbHVlbmNlJyA/XG4gICAgICAgICAgICBgICBodHRwczovL2RldmVsb3Blci5hdGxhc3NpYW4uY29tL3BsYXRmb3JtL21hcmtldHBsYWNlL2RjLWFwcHMtcGVyZm9ybWFuY2UtdG9vbGtpdC11c2VyLWd1aWRlLWNvbmZsdWVuY2UvIzMtLWRldmVsb3AtYW5kLXRlc3QtYXBwLXNwZWNpZmljLWFjdGlvbnMtbG9jYWxseWBcbiAgICAgICAgICAgIDogcHJvZHVjdCA9PT0gJ2JhbWJvbycgP1xuICAgICAgICAgICAgICAgICcgIGh0dHBzOi8vZGV2ZWxvcGVyLmF0bGFzc2lhbi5jb20vcGxhdGZvcm0vbWFya2V0cGxhY2UvZGMtYXBwcy1wZXJmb3JtYW5jZS10b29sa2l0LXVzZXItZ3VpZGUtYmFtYm9vLyMyLS1hcHAtc3BlY2lmaWMtYWN0aW9ucy1kZXZlbG9wbWVudCdcbiAgICAgICAgICAgICAgICAvLyBwcm9kdWN0ID09PSAnYml0YnVja2V0J1xuICAgICAgICAgICAgICAgIDogJyAgaHR0cHM6Ly9kZXZlbG9wZXIuYXRsYXNzaWFuLmNvbS9wbGF0Zm9ybS9tYXJrZXRwbGFjZS9kYy1hcHBzLXBlcmZvcm1hbmNlLXRvb2xraXQtdXNlci1ndWlkZS1iaXRidWNrZXQvIzMtLWRldmVsb3AtYW5kLXRlc3QtYXBwLXNwZWNpZmljLWFjdGlvbi1sb2NhbGx5J31cbmAsXG4gICAgcmVhZHlGb3JQcm92aXNpb25pbmc6IGBcbiAgSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBzdGFydCB0aGUgc2NhbGFiaWxpdHkgYmVuY2htYXJrLCB3ZSB3aWxsIG5vdyByZWNvbmZpZ3VyZSB0aGUgREMgY2x1c3RlciBvbiBBV1NcblxuICAhISBJTVBPUlRBTlQgISFcbiAgXG4gIFdlIHdpbGwgYmUgd3JpdGluZyB0aGUgY29uZmlndXJhdGlvbiB0byBkaXNrLiBUaGlzIHdpbGwgb3ZlcndyaXRlIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb24uXG4gIFBsZWFzZSBub3RlIHRoYXQgcHJvdmlzaW9uaW5nIHRoZSBlbnZpcm9ubWVudCB3aWxsIGluY3VyIEFXUyB1c2FnZSBjb3N0cy5cbmAsXG4gICAgc3RhcnRUZXN0OiBgXG4gIFJlYWR5IHRvIHN0YXJ0IHRoZSBzY2FsYWJpbGl0eSBiZW5jaG1hcmsgdGVzdCB3aXRoIGFwcC1zcGVjaWZpYyBhY3Rpb25zXG5gLFxuICAgIHN1Y2Nlc3M6IGBcbuKclCBGaW5pc2hlZCB0aGUgc2NhbGFiaWxpdHkgYmVuY2htYXJrIHRlc3Qgd2l0aCBhcHAtc3BlY2lmaWMgYWN0aW9uc1xuYCxcbiAgICBmYWlsdXJlOiAoc3RhZ2UsIGN3ZCwgcHJvZHVjdCwgZW52aXJvbm1lbnQsIHJlc3VsdHNCYXNlRGlyLCByZXN1bHRzKSA9PiB7XG4gICAgICAgIGxldCBvdXRwdXQgPSBgXG7inJQgRmluaXNoZWQgdGhlIHNjYWxhYmlsaXR5IGJlbmNobWFyayB0ZXN0IHdpdGggYXBwLXNwZWNpZmljIGFjdGlvbnNcblxuICBVbmZvcnR1bmF0ZWx5LCB0aGUgdGVzdCBydW4gd2FzIGZpbmlzaGVkIHVuc3VjY2VzZnVsLiBcbiAgUGxlYXNlIHJldmlldyB0aGUgdGVzdCByZXN1bHRzIGFuZCBhZGp1c3QgdGhlIGNvbmZpZ3VyYXRpb24gaWYgcmVxdWlyZWQuXG5gO1xuICAgICAgICBPYmplY3QuZW50cmllcyhyZXN1bHRzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IG91dHB1dCArPSBgICAke2tleX06ICR7dmFsdWV9XFxuYCk7XG4gICAgICAgIG91dHB1dCArPSBgXG4gIEZ1bGwgcmVwb3J0IGNhbiBiZSBmb3VuZCBoZXJlOlxuICAke2pvaW4ocmVzdWx0c0Jhc2VEaXIsICdyZXN1bHRzX3N1bW1hcnkubG9nJyl9XG5cbiAgWW91IGNhbiByZXN0YXJ0IHRoZSBzY2FsYWJpbGl0eSBiZW5jaG1hcmsgdGVzdCB1c2luZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6XG4gIFxuICAkIGRjZHggYXB0IHJ1biR7Z2V0UnVuRm9yU3RhZ2Uoc3RhZ2UpfSAtLXByb2R1Y3QgJHtwcm9kdWN0fSAtLWN3ZCAke2N3ZH0gLS1lbnZpcm9ubWVudCAke2Vudmlyb25tZW50fVxuYDtcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IFNjYWxhYmlsaXR5UmVwb3J0TWVzc2FnZXMgPSB7XG4gICAgaGVhZGVyOiBgXG4gIF9fX19fIF9fX19fIF9fX19fIF9fICAgIF9fX19fIF9fX19fIF9fX19fIF9fICAgIF9fX19fIF9fX19fIF9fIF9fIFxuICB8ICAgX198ICAgICB8ICBfICB8ICB8ICB8ICBfICB8IF9fICB8ICAgICB8ICB8ICB8ICAgICB8XyAgIF98ICB8ICB8XG4gIHxfXyAgIHwgICAtLXwgICAgIHwgIHxfX3wgICAgIHwgX18gLXwtICAgLXwgIHxfX3wtICAgLXwgfCB8IHxfICAgX3xcbiAgfF9fX19ffF9fX19ffF9ffF9ffF9fX19ffF9ffF9ffF9fX19ffF9fX19ffF9fX19ffF9fX19ffCB8X3wgICB8X3wgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIHwgX18gIHwgICBfX3wgIF8gIHwgICAgIHwgX18gIHxfICAgX3wgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgfCAgICAtfCAgIF9ffCAgIF9ffCAgfCAgfCAgICAtfCB8IHwgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICB8X198X198X19fX198X198ICB8X19fX198X198X198IHxffCAgICAgICAgICAgICAgICAgICAgXG5gXG59O1xuZXhwb3J0IGNvbnN0IFJlc3RhcnQgPSB7XG4gICAgaGVhZGVyOiBgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBcbiAgfCBfXyAgfCAgIF9ffCAgIF9ffF8gICBffCAgXyAgfCBfXyAgfF8gICBffFxuICB8ICAgIC18ICAgX198X18gICB8IHwgfCB8ICAgICB8ICAgIC18IHwgfCAgXG4gIHxfX3xfX3xfX19fX3xfX19fX3wgfF98IHxfX3xfX3xfX3xfX3wgfF98ICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgV2Ugd2lsbCBub3cgcmVzdGFydCB0aGUgY2x1c3RlciB1c2VkIGluIHRoZSBEYXRhIENlbnRlciBBcHBsaWNhdGlvbiBQZXJmb3JtYW5jZSB0ZXN0aW5nLlxuYFxufTtcbmV4cG9ydCBjb25zdCBUZWFyZG93biA9IHtcbiAgICBoZWFkZXI6IGBcbiAgX19fX18gX19fX18gX19fX18gX19fX18gX19fXyAgX19fX18gXyBfIF8gX19fX18gXG4gIHxfICAgX3wgICBfX3wgIF8gIHwgX18gIHwgICAgXFxcXHwgICAgIHwgfCB8IHwgICB8IHxcbiAgICB8IHwgfCAgIF9ffCAgICAgfCAgICAtfCAgfCAgfCAgfCAgfCB8IHwgfCB8IHwgfFxuICAgIHxffCB8X19fX198X198X198X198X198X19fXy98X19fX198X19fX198X3xfX198XG5cbiAgV2Ugd2lsbCBub3cgdGVybWluYXRlIHRoZSBjbHVzdGVyIHVzZWQgaW4gdGhlIERhdGEgQ2VudGVyIEFwcGxpY2F0aW9uIFBlcmZvcm1hbmNlIHRlc3RpbmcuXG5gXG59O1xuIiwiaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IHdyaXRlRmlsZVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBqb2luLCByZXNvbHZlIH0gZnJvbSAncGF0aCc7XG5leHBvcnQgY29uc3QgaW5zdGFsbCA9IGFzeW5jIChjd2QpID0+IHtcbiAgICBjb25zb2xlLmxvZyhgXG4gIFN0YXJ0IHByb3Zpc2lvbmluZyBBV1MgdXNpbmcgdGhlIEF0bGFzc2lhbiBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFjZSBUb29sa2l0IChEQ0FQVCkgVGVycmFmb3JtIGNvbmZpZ3VyYXRpb25cbiAgVXNpbmcgRENBUFQgY29uZmlndXJhdGlvbiBmcm9tICR7Y3dkfVxuYCk7XG4gICAgY29uc3QgYmFzZURpciA9IGpvaW4oY3dkLCAnYXBwL3V0aWwvazhzJyk7XG4gICAgd3JpdGVGaWxlU3luYyhqb2luKGJhc2VEaXIsICdvdXRwdXRzLmpzb24nKSwgJyMgdGVycmFmb3JtIG91dHB1dCcsICd1dGYtOCcpO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgZG9ja2VyID0gc3Bhd24oJ2RvY2tlcicsIFtcbiAgICAgICAgICAgICdydW4nLFxuICAgICAgICAgICAgJy1pdCcsXG4gICAgICAgICAgICBgLS1wdWxsPWFsd2F5c2AsXG4gICAgICAgICAgICAnLS1lbnYtZmlsZScsICdhd3NfZW52cycsXG4gICAgICAgICAgICAnLXYnLCBgJHtiYXNlRGlyfS9kY2FwdC50ZnZhcnM6L2RhdGEtY2VudGVyLXRlcnJhZm9ybS9jb25mLnRmdmFyc2AsXG4gICAgICAgICAgICAnLXYnLCBgJHtiYXNlRGlyfS9kY2FwdC1zbmFwc2hvdHMuanNvbjovZGF0YS1jZW50ZXItdGVycmFmb3JtL2RjYXB0LXNuYXBzaG90cy5qc29uYCxcbiAgICAgICAgICAgICctdicsIGAke2Jhc2VEaXJ9L2xvZ3M6L2RhdGEtY2VudGVyLXRlcnJhZm9ybS9sb2dzYCxcbiAgICAgICAgICAgICctdicsIGAke2Jhc2VEaXJ9L291dHB1dHMuanNvbjovZGF0YS1jZW50ZXItdGVycmFmb3JtL291dHB1dHMuanNvbmAsXG4gICAgICAgICAgICAnYXRsYXNzaWFubGFicy90ZXJyYWZvcm06bGF0ZXN0JyxcbiAgICAgICAgICAgICcuL2luc3RhbGwuc2gnLCAnLWMnLCAnY29uZi50ZnZhcnMnXG4gICAgICAgIF0sIHsgY3dkOiBiYXNlRGlyLCBzdGRpbzogJ2luaGVyaXQnIH0pO1xuICAgICAgICBkb2NrZXIub24oJ2V4aXQnLCAoY29kZSkgPT4gKGNvZGUgPT09IDApID8gcmVzb2x2ZSgpIDogcmVqZWN0KG5ldyBFcnJvcihgRG9ja2VyIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfWApKSk7XG4gICAgfSk7XG4gICAgY29uc29sZS5sb2coYFxu4pyUIEZpbmlzaGVkIHByb3Zpc2lvbmluZyBBV1MgdXNpbmcgdGhlIEF0bGFzc2lhbiBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFjZSBUb29sa2l0IChEQ0FQVCkgVGVycmFmb3JtIGNvbmZpZ3VyYXRpb25cbiAgQ2x1c3RlciBkZXRhaWxzIGNhbiBiZSBmb3VuZCBpbiAke2Jhc2VEaXJ9L291dHB1dHMuanNvblxuYCk7XG59O1xuZXhwb3J0IGNvbnN0IHJ1blRlc3QgPSBhc3luYyAoY3dkLCBlbnZpcm9ubWVudCwgcHJvZHVjdCkgPT4ge1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgZG9ja2VyID0gc3Bhd24oJ2RvY2tlcicsIFtcbiAgICAgICAgICAgICdydW4nLFxuICAgICAgICAgICAgJy1pdCcsXG4gICAgICAgICAgICBgLS1wdWxsPWFsd2F5c2AsXG4gICAgICAgICAgICAnLS1lbnYtZmlsZScsICcuL2FwcC91dGlsL2s4cy9hd3NfZW52cycsXG4gICAgICAgICAgICAnLWUnLCBgUkVHSU9OPXVzLWVhc3QtMmAsXG4gICAgICAgICAgICAnLWUnLCBgRU5WSVJPTk1FTlRfTkFNRT0ke2Vudmlyb25tZW50fWAsXG4gICAgICAgICAgICAnLXYnLCBgJHtjd2R9Oi9kYXRhLWNlbnRlci10ZXJyYWZvcm0vZGMtYXBwLXBlcmZvcm1hbmNlLXRvb2xraXRgLFxuICAgICAgICAgICAgJy12JywgYCR7Y3dkfS9hcHAvdXRpbC9rOHMvYnp0X29uX3BvZC5zaDovZGF0YS1jZW50ZXItdGVycmFmb3JtL2J6dF9vbl9wb2Quc2hgLFxuICAgICAgICAgICAgJ2F0bGFzc2lhbmxhYnMvdGVycmFmb3JtOmxhdGVzdCcsXG4gICAgICAgICAgICAnYmFzaCcsICdienRfb25fcG9kLnNoJywgYCR7cHJvZHVjdH0ueW1sYCwgJy0tY2knXG4gICAgICAgIF0sIHsgY3dkLCBzdGRpbzogJ2luaGVyaXQnIH0pO1xuICAgICAgICBkb2NrZXIub24oJ2V4aXQnLCAoY29kZSkgPT4gKGNvZGUgPT09IDApID8gcmVzb2x2ZSgpIDogcmVqZWN0KG5ldyBFcnJvcihgRG9ja2VyIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfWApKSk7XG4gICAgfSk7XG59O1xuZXhwb3J0IGNvbnN0IHJlZ3Jlc3Npb25SZXBvcnQgPSBhc3luYyAoY3dkLCBydW4xRGlyLCBydW4yRGlyKSA9PiB7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBkb2NrZXIgPSBzcGF3bignZG9ja2VyJywgW1xuICAgICAgICAgICAgJ3J1bicsXG4gICAgICAgICAgICAnLWl0JyxcbiAgICAgICAgICAgIGAtLXB1bGw9YWx3YXlzYCxcbiAgICAgICAgICAgICctLXdvcmtkaXInLCAnLy9kYy1hcHAtcGVyZm9ybWFuY2UtdG9vbGtpdC9hcHAvcmVwb3J0c19nZW5lcmF0aW9uJyxcbiAgICAgICAgICAgICctLWVudHJ5cG9pbnQnLCAncHl0aG9uJyxcbiAgICAgICAgICAgICctdicsIGAke2N3ZH06L2RjLWFwcC1wZXJmb3JtYW5jZS10b29sa2l0YCxcbiAgICAgICAgICAgICctdicsIGAke3J1bjFEaXJ9Oi9yZXN1bHRzL3J1bjFgLFxuICAgICAgICAgICAgJy12JywgYCR7cnVuMkRpcn06L3Jlc3VsdHMvcnVuMmAsXG4gICAgICAgICAgICAnYXRsYXNzaWFuL2RjYXB0JyxcbiAgICAgICAgICAgICdjc3ZfY2hhcnRfZ2VuZXJhdG9yLnB5JywgJ3BlcmZvcm1hbmNlX3Byb2ZpbGUueW1sJ1xuICAgICAgICBdLCB7IGN3ZCwgc3RkaW86ICdpbmhlcml0JyB9KTtcbiAgICAgICAgZG9ja2VyLm9uKCdleGl0JywgKGNvZGUpID0+IChjb2RlID09PSAwKSA/IHJlc29sdmUoKSA6IHJlamVjdChuZXcgRXJyb3IoYERvY2tlciBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX1gKSkpO1xuICAgIH0pO1xuICAgIGNvbnNvbGUubG9nKGDinJQgRmluaXNoZWQgZ2VuZXJhdGluZyB0aGUgUGVyZm9ybWFuY2UgUmVncmVzc2lvbiBSZXBvcnRgKTtcbn07XG5leHBvcnQgY29uc3Qgc2NhbGFiaWxpdHlSZXBvcnQgPSBhc3luYyAoY3dkLCByZXN1bHRzRGlyMSwgcmVzdWx0c0RpcjIsIHJlc3VsdHNEaXIzKSA9PiB7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBkb2NrZXIgPSBzcGF3bignZG9ja2VyJywgW1xuICAgICAgICAgICAgJ3J1bicsXG4gICAgICAgICAgICAnLWl0JyxcbiAgICAgICAgICAgIGAtLXB1bGw9YWx3YXlzYCxcbiAgICAgICAgICAgICctLXdvcmtkaXInLCAnLy9kYy1hcHAtcGVyZm9ybWFuY2UtdG9vbGtpdC9hcHAvcmVwb3J0c19nZW5lcmF0aW9uJyxcbiAgICAgICAgICAgICctLWVudHJ5cG9pbnQnLCAncHl0aG9uJyxcbiAgICAgICAgICAgICctdicsIGAke2N3ZH06L2RjLWFwcC1wZXJmb3JtYW5jZS10b29sa2l0YCxcbiAgICAgICAgICAgICctdicsIGAke3Jlc3VsdHNEaXIxfTovZGNhcHQvc2NhbGVfcmVzdWx0c18xYCxcbiAgICAgICAgICAgICctdicsIGAke3Jlc3VsdHNEaXIyfTovZGNhcHQvc2NhbGVfcmVzdWx0c18yYCxcbiAgICAgICAgICAgICctdicsIGAke3Jlc3VsdHNEaXIzfTovZGNhcHQvc2NhbGVfcmVzdWx0c18zYCxcbiAgICAgICAgICAgICdhdGxhc3NpYW4vZGNhcHQnLFxuICAgICAgICAgICAgJ2Nzdl9jaGFydF9nZW5lcmF0b3IucHknLCAnc2NhbGVfcHJvZmlsZS55bWwnXG4gICAgICAgIF0sIHsgY3dkLCBzdGRpbzogJ2luaGVyaXQnIH0pO1xuICAgICAgICBkb2NrZXIub24oJ2V4aXQnLCAoY29kZSkgPT4gKGNvZGUgPT09IDApID8gcmVzb2x2ZSgpIDogcmVqZWN0KG5ldyBFcnJvcihgRG9ja2VyIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfWApKSk7XG4gICAgfSk7XG4gICAgY29uc29sZS5sb2coYOKclCBGaW5pc2hlZCBnZW5lcmF0aW5nIHRoZSBTY2FsYWJpbGl0eSBCZW5jaG1hcmsgUmVwb3J0YCk7XG59O1xuZXhwb3J0IGNvbnN0IHJlc3RhcnQgPSBhc3luYyAoY3dkLCBlbnZpcm9ubWVudCwgcHJvZHVjdCkgPT4ge1xuICAgIHdyaXRlRmlsZVN5bmMoam9pbihjd2QsICcuL2FwcC91dGlsL2s4cy9kZWxldGVfcG9kLnNoJyksIGBcbmF3cyBla3MgdXBkYXRlLWt1YmVjb25maWcgLS1uYW1lIGF0bGFzLSRFTlZJUk9OTUVOVF9OQU1FLWNsdXN0ZXIgLS1yZWdpb24gJFJFR0lPTlxua3ViZWN0bCByb2xsb3V0IHJlc3RhcnQgc3RzLyRQUk9EVUNUIC1uIGF0bGFzc2lhblxua3ViZWN0bCByb2xsb3V0IHN0YXR1cyBzdHMgJFBST0RVQ1QgLW4gYXRsYXNzaWFuYCwgJ3V0ZjgnKTtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGRvY2tlciA9IHNwYXduKCdkb2NrZXInLCBbXG4gICAgICAgICAgICAncnVuJyxcbiAgICAgICAgICAgICctaXQnLFxuICAgICAgICAgICAgYC0tcHVsbD1hbHdheXNgLFxuICAgICAgICAgICAgJy0tZW52LWZpbGUnLCAnLi9hcHAvdXRpbC9rOHMvYXdzX2VudnMnLFxuICAgICAgICAgICAgJy1lJywgYFJFR0lPTj11cy1lYXN0LTJgLFxuICAgICAgICAgICAgJy1lJywgYEVOVklST05NRU5UX05BTUU9JHtlbnZpcm9ubWVudH1gLFxuICAgICAgICAgICAgJy1lJywgYFBST0RVQ1Q9JHtwcm9kdWN0fWAsXG4gICAgICAgICAgICAnLXYnLCBgJHtjd2R9Oi9kYXRhLWNlbnRlci10ZXJyYWZvcm0vZGMtYXBwLXBlcmZvcm1hbmNlLXRvb2xraXRgLFxuICAgICAgICAgICAgJy12JywgYCR7Y3dkfS9hcHAvdXRpbC9rOHMvZGVsZXRlX3BvZC5zaDovZGF0YS1jZW50ZXItdGVycmFmb3JtL2RlbGV0ZV9wb2Quc2hgLFxuICAgICAgICAgICAgJ2F0bGFzc2lhbmxhYnMvdGVycmFmb3JtOmxhdGVzdCcsXG4gICAgICAgICAgICAnYmFzaCcsICdkZWxldGVfcG9kLnNoJ1xuICAgICAgICBdLCB7IGN3ZCwgc3RkaW86ICdpbmhlcml0JyB9KTtcbiAgICAgICAgZG9ja2VyLm9uKCdleGl0JywgKGNvZGUpID0+IChjb2RlID09PSAwKSA/IHJlc29sdmUoKSA6IHJlamVjdChuZXcgRXJyb3IoYERvY2tlciBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX1gKSkpO1xuICAgIH0pO1xufTtcbmV4cG9ydCBjb25zdCB0ZXJtaW5hdGUgPSBhc3luYyAoY3dkLCBlbnZpcm9ubWVudCkgPT4ge1xuICAgIGNvbnN0IGJhc2VEaXIgPSByZXNvbHZlKGpvaW4oY3dkLCAnYXBwL3V0aWwvazhzJykpO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgZG9ja2VyID0gc3Bhd24oJ2RvY2tlcicsIFtcbiAgICAgICAgICAgICdydW4nLFxuICAgICAgICAgICAgYC0tcHVsbD1hbHdheXNgLFxuICAgICAgICAgICAgJy0tZW52LWZpbGUnLCAnYXdzX2VudnMnLFxuICAgICAgICAgICAgJy0td29ya2RpcicsICcvL2RhdGEtY2VudGVyLXRlcnJhZm9ybScsXG4gICAgICAgICAgICAnLS1lbnRyeXBvaW50JywgJ3B5dGhvbicsXG4gICAgICAgICAgICAnLXYnLCBgJHtiYXNlRGlyfS90ZXJtaW5hdGVfY2x1c3Rlci5weTovZGF0YS1jZW50ZXItdGVycmFmb3JtL3Rlcm1pbmF0ZV9jbHVzdGVyLnB5YCxcbiAgICAgICAgICAgICdhdGxhc3NpYW4vZGNhcHQnLFxuICAgICAgICAgICAgJ3Rlcm1pbmF0ZV9jbHVzdGVyLnB5JywgJy0tY2x1c3Rlcl9uYW1lJywgYGF0bGFzLSR7ZW52aXJvbm1lbnR9LWNsdXN0ZXJgLCAnLS1hd3NfcmVnaW9uJywgJ3VzLWVhc3QtMidcbiAgICAgICAgXSwgeyBjd2Q6IGpvaW4oY3dkLCAnYXBwL3V0aWwvazhzJyksIHN0ZGlvOiAnaW5oZXJpdCcgfSk7XG4gICAgICAgIGRvY2tlci5vbignZXhpdCcsIChjb2RlKSA9PiAoY29kZSA9PT0gMCkgPyByZXNvbHZlKCkgOiByZWplY3QobmV3IEVycm9yKGBEb2NrZXIgZXhpdGVkIHdpdGggY29kZSAke2NvZGV9YCkpKTtcbiAgICB9KTtcbiAgICBjb25zb2xlLmxvZyhg4pyUIEZpbmlzaGVkIHRlcm1pbmF0aW5nIHRoZSBEQyBjbHVzdGVyIG9uIEFXUyB1c2luZyB0aGUgQXRsYXNzaWFuIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYWNlIFRvb2xraXQgKERDQVBUKSBUZXJyYWZvcm0gY29uZmlndXJhdGlvbmApO1xufTtcbiIsImltcG9ydCB7IGNvbmZpcm0sIGlucHV0IH0gZnJvbSAnQGlucXVpcmVyL3Byb21wdHMnO1xuaW1wb3J0IHsgZXhpc3RzU3luYywgcm1TeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ29zJztcbmltcG9ydCB7IGpvaW4sIHJlc29sdmUgfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IGN3ZCBhcyBwd2QgfSBmcm9tICdwcm9jZXNzJztcbmltcG9ydCBzaW1wbGVHaXQgZnJvbSAnc2ltcGxlLWdpdCc7XG5pbXBvcnQgeyBlbXB0eUxpbmUgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5leHBvcnQgY29uc3QgZ2V0QXB0RGljdG9yeSA9IGFzeW5jIChjd2QsIG11c3RVc2VEZWZhdWx0Q29uZmlndXJhdGlvbiwgZm9yY2UpID0+IHtcbiAgICAvLyBUcmFuc2xhdGUgY29tbW9uIHJlbGF0aXZlIHBhdGhzIHRvIGFic29sdXRlIHBhdGhzXG4gICAgbGV0IHJlc3VsdCA9IGN3ZCA/XG4gICAgICAgIGN3ZC5zdGFydHNXaXRoKCd+LycpXG4gICAgICAgICAgICA/IGN3ZC5yZXBsYWNlKCd+LycsIGhvbWVkaXIoKSlcbiAgICAgICAgICAgIDogY3dkLnN0YXJ0c1dpdGgoJy4vJylcbiAgICAgICAgICAgICAgICA/IGN3ZC5yZXBsYWNlKCcuLycsIHB3ZCgpICsgJy8nKVxuICAgICAgICAgICAgICAgIDogY3dkID09PSAnLidcbiAgICAgICAgICAgICAgICAgICAgPyBwd2QoKVxuICAgICAgICAgICAgICAgICAgICA6IGN3ZFxuICAgICAgICA6IHB3ZCgpO1xuICAgIC8vIElmIHdlIGFyZSBpbiBpbnRlcmFjdGl2ZSBtb2RlLCB3ZSBzaG91bGQgYXNrIHF1ZXN0aW9ucyBmaXJzdFxuICAgIGlmICghZm9yY2UpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYXJlIGN1cnJlbnRseSBpbiB0aGUgQVBUIGRpcmVjdG9yeVxuICAgICAgICBjb25zdCBpc0N1cnJlbnREaXJlY3RvcnlFbGlnYWJsZSA9IGV4aXN0c1N5bmMoam9pbihyZXN1bHQsICdhcHAvdXRpbC9rOHMvZGNhcHQudGZ2YXJzJykpO1xuICAgICAgICAvLyBJZiB0aGlzIGlzIHRoZSBBUFQgZGlyZWN0b3J5LCB3ZSB3aWxsIGJlIHVzaW5nIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4uLlxuICAgICAgICBsZXQgdXNlQ3VycmVudERpcmVjdG9yeSA9IGlzQ3VycmVudERpcmVjdG9yeUVsaWdhYmxlO1xuICAgICAgICAvLyAuLi51bmxlc3MgdG9sZCBvdGhlcndpc2VcbiAgICAgICAgaWYgKGlzQ3VycmVudERpcmVjdG9yeUVsaWdhYmxlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgICBXZSd2ZSBmb3VuZCB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQgaW4gdGhlIHNwZWNpZmllZCBkaXJlY3Rvcnk6XG4gICR7cmVzdWx0fVxuYCk7XG4gICAgICAgICAgICB1c2VDdXJyZW50RGlyZWN0b3J5ID0gYXdhaXQgY29uZmlybSh7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYERvIHlvdSB3aXNoIHRvIHVzZSB0aGlzIGRpcmVjdG9yeT9gLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiB3ZSBhcmUgbm90IGdvaW5nIHRvIHVzZSB0aGUgY3VycmVudCBkaXJlY3RvcnksIGFzayBmb3IgdGhlIGFsdGVybmF0aXZlXG4gICAgICAgIGxldCBkaXJlY3RvcnkgPSByZXN1bHQ7XG4gICAgICAgIGlmICghdXNlQ3VycmVudERpcmVjdG9yeSkge1xuICAgICAgICAgICAgZGlyZWN0b3J5ID0gYXdhaXQgaW5wdXQoe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2Ugc3BlY2lmeSB0aGUgbG9jYXRpb24gd2hlcmUgdGhlIEFwcCBQZWZvcm1hbmNlIFRvb2xraXQgaXMgbG9jYXRlZCcsXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogcmVzdWx0LFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUcmFuc2xhdGUgY29tbW9uIHJlbGF0aXZlIHBhdGhzIHRvIGFic29sdXRlIHBhdGhzXG4gICAgICAgIGRpcmVjdG9yeSA9IGRpcmVjdG9yeS5zdGFydHNXaXRoKCd+LycpXG4gICAgICAgICAgICA/IGRpcmVjdG9yeS5yZXBsYWNlKCd+LycsIGhvbWVkaXIoKSArICcvJylcbiAgICAgICAgICAgIDogZGlyZWN0b3J5LnN0YXJ0c1dpdGgoJy4vJylcbiAgICAgICAgICAgICAgICA/IGRpcmVjdG9yeS5yZXBsYWNlKCcuLycsIHB3ZCgpICsgJy8nKVxuICAgICAgICAgICAgICAgIDogZGlyZWN0b3J5ID09PSAnLidcbiAgICAgICAgICAgICAgICAgICAgPyBwd2QoKVxuICAgICAgICAgICAgICAgICAgICA6IGRpcmVjdG9yeTtcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHByb3ZpZGVkIGFsdGVybmF0aXZlIGlzIGEgRENBUFQgZGlyZWN0b3J5XG4gICAgICAgIGNvbnN0IGlzRGlyZWN0b3J5RWxpZ2FibGUgPSBleGlzdHNTeW5jKHJlc29sdmUoam9pbihkaXJlY3RvcnksICdhcHAvdXRpbC9rOHMvZGNhcHQudGZ2YXJzJykpKTtcbiAgICAgICAgaWYgKCFpc0RpcmVjdG9yeUVsaWdhYmxlKSB7XG4gICAgICAgICAgICAvLyBJZiBpdCBpcyBub3QgYSBEQ0FQVCBkaXJlY3RvcnksIGFzayBpZiB3ZSBuZWVkIHRvIGNsb25lIGl0IGZyb20gR2l0aHViXG4gICAgICAgICAgICBjb25zdCBtdXN0Q2xvbmVBUFQgPSBhd2FpdCBjb25maXJtKHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgVGhlIGRpcmVjdG9yeSBlaXRoZXIgZG9lc24ndCBleGlzdCwgb3IgaXQgZG9lc24ndCBjb250YWluIHRoZSBBcHAgUGVmb3JtYW5jZSBUb29sa2l0LiBEbyB5b3Ugd2FudCB0byBjbG9uZSBEQ0FQVCBmcm9tIHNvdXJjZT9gLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBJZiB3ZSBtdXN0IGNsb25lIGl0IGZyb20gR2l0aHViLCB3ZSBzaG91bGQgY2xvbmUgaXQgZnJvbSBHaXRodWJcbiAgICAgICAgICAgIGlmIChtdXN0Q2xvbmVBUFQpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBzaW1wbGVHaXQoKS5jbG9uZSgnaHR0cHM6Ly9naXRodWIuY29tL2F0bGFzc2lhbi9kYy1hcHAtcGVyZm9ybWFuY2UtdG9vbGtpdC5naXQnLCBkaXJlY3RvcnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENoZWNrIGlmIHRoaXMgbmVlZHMgdG8gYmUgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKGZvciBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHRlc3RpbmcpXG4gICAgICAgIGlmIChtdXN0VXNlRGVmYXVsdENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgIC8vIEFzayBuaWNlbHkuLi5cbiAgICAgICAgICAgIGNvbnN0IGlzRGVmYXVsdENvbmZpZ3VyYXRpb24gPSBhd2FpdCBjb25maXJtKHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIGNvbmZpcm0gdGhhdCB0aGUgY2hvc2VuIGRpcmVjdG9yeSBpcyB1c2luZyB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciBEQ0FQVCAobWFzdGVyIGJyYW5jaCknXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIC4uLmJ1dCBhbHNvLCBObyBpcyBub3QgYW4gb3B0aW9uXG4gICAgICAgICAgICBpZiAoIWlzRGVmYXVsdENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0l0IGlzIHJlcXVpcmVkIHRvIHVzZSB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZyb20gbWFzdGVyIHRvIGNvbnRpbnVlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBBc2sgbmljZWx5Li4uXG4gICAgICAgICAgICBjb25zdCBpc0FwcFNwZWNpZmljQ29uZmlndXJhdGlvbiA9IGF3YWl0IGNvbmZpcm0oe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2UgY29uZmlybSB0aGF0IHRoZSBjaG9zZW4gZGlyZWN0b3J5IGhhcyBhIERDQVBUIGluc3RhbGxhdGlvbiB3aXRoIGFwcC1zcGVjaWZpYyBhY3Rpb25zJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyAuLi5idXQgYWxzbywgTm8gaXMgbm90IGFuIG9wdGlvblxuICAgICAgICAgICAgaWYgKCFpc0FwcFNwZWNpZmljQ29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSXQgaXMgcmVxdWlyZWQgdG8gaGF2ZSBhcHAtc3BlY2lmaWMgYWN0aW9ucyBpbiBvcmRlciB0byBjb250aW51ZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFNldCB0aGUgcmVzdWx0IHRvIHRoZSBwcm92aWRlZCBkaXJlY3RvcnlcbiAgICAgICAgcmVzdWx0ID0gZGlyZWN0b3J5O1xuICAgICAgICAvLyBJZiB3ZSBhcmUgaW4gbm9uLWludGVyYWN0aXZlIG1vZGUgYW5kIHdlIG5lZWQgdG8gdXNlIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24sIHdlIHdpbGwgY2xvbmUgaXQgZnJvbSBHaXRodWJcbiAgICB9XG4gICAgZWxzZSBpZiAobXVzdFVzZURlZmF1bHRDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIC8vIElmIHRoZSBwcm92aWRlZCBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3RzIHdlIGNhbiB1c2UgaXRcbiAgICAgICAgLy8gT3RoZXJ3aXNlIHVzZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgdG8gZW5zdXJlIGEgZnJlc2ggbm9uLXBlcnNpc3RlbnQgY2hlY2tvdXRcbiAgICAgICAgcmVzdWx0ID0gIWV4aXN0c1N5bmMocmVzdWx0KVxuICAgICAgICAgICAgPyByZXN1bHRcbiAgICAgICAgICAgIDogam9pbihob21lZGlyKCksICcuZGNkeCcsICdkY2FwdCcpO1xuICAgICAgICAvLyBJbmZvcm0gdGhlIHVzZXIgb2YgdGhlIGNob3NlbiBkaXJlY3RvcnlcbiAgICAgICAgY29uc29sZS5sb2coJyAgSW5zdGFsbGluZyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gb2YgRENBUFQgZnJvbSBzb3VyY2UgKG5vbi1pbnRlcmFjdGl2ZSBtb2RlKScpO1xuICAgICAgICBjb25zb2xlLmxvZyhgICAke3Jlc3VsdH1gKTtcbiAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBkaXJlY3RvcnkgaXMgZW1wdHlcbiAgICAgICAgcm1TeW5jKHJlc3VsdCwgeyBmb3JjZTogdHJ1ZSwgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICAvLyBSZXRyaWV2ZSBEQ0FQVCBmcm9tIGdpdGh1YlxuICAgICAgICBhd2FpdCBzaW1wbGVHaXQoKS5jbG9uZSgnaHR0cHM6Ly9naXRodWIuY29tL2F0bGFzc2lhbi9kYy1hcHAtcGVyZm9ybWFuY2UtdG9vbGtpdC5naXQnLCByZXN1bHQpO1xuICAgICAgICBjb25zb2xlLmxvZygn4pyUIEZpbmlzaGVkIGluc3RhbGxpbmcgZGVmYXVsdCBjb25maWd1cmF0aW9uIG9mIERDQVBUIGZyb20gc291cmNlIChub24taW50ZXJhY3RpdmUgbW9kZSknKTtcbiAgICAgICAgLy8gSWYgd2UgYXJlIGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlIGFuZCB3ZSBuZWVkIHRvIHVzZSBhcHAgc3BlY2lmaWMgY29uZmlndXJhdGlvbiwgbWFrZSBzdXJlIHRoYXQgaXQgZXhpc3RzXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAvLyBDaGVjayBpZiB3ZSBhcmUgY3VycmVudGx5IGluIHRoZSBBUFQgZGlyZWN0b3J5XG4gICAgICAgIGNvbnN0IGlzQ3VycmVudERpcmVjdG9yeUVsaWdhYmxlID0gZXhpc3RzU3luYyhqb2luKHJlc3VsdCwgJ2FwcC91dGlsL2s4cy9kY2FwdC50ZnZhcnMnKSk7XG4gICAgICAgIC8vIElmIHRoaXMgaXMgbm90IGEgRENBUFQgZGlyZWN0b3J5LCB3ZSBjYW5ub3QgY29udGludWVcbiAgICAgICAgaWYgKCFpc0N1cnJlbnREaXJlY3RvcnlFbGlnYWJsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkgJHtyZXN1bHR9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2coJyAgVXNpbmcgRENBUFQgZnJvbSBjdXJyZW50IGRpcmVjdG9yeSAobm9uLWludGVyYWN0aXZlIG1vZGUpJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGAgICR7cmVzdWx0fWApO1xuICAgICAgICBlbXB0eUxpbmUoKTtcbiAgICB9XG4gICAgLy8gVGhpcyBzaG91bGQgbm90IG9jY3VyLCBiZWNhdXNlIGVpdGhlciB3ZSBoYXZlIGVzdGFibGlzaGVkIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBoYXMgRENBUFRcbiAgICAvLyBvciB3ZSBoYXZlIGNsb25lZCBpdCBpbnRvIGEgKG5ldykgZGlyZWN0b3J5LiBUaGlzIGlzIG1lcmVseSBhIGNoZWNrIGZvciBpZiB0aGUgbGF0dGVyIGZhaWxlZC5cbiAgICBpZiAoIWV4aXN0c1N5bmMoam9pbihyZXN1bHQsICdhcHAvdXRpbC9rOHMvZGNhcHQudGZ2YXJzJykpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0IGluIHRoZSBwcm92aWRlZCBkaXJlY3RvcnkgJHtyZXN1bHR9YCk7XG4gICAgfVxuICAgIC8vIFNvbWUgYWRkaXRpb25hbCBjaGVja3MgdG8gZW5zdXJlIHRoYXQgd2UgYXJlIGluIGEgdmFsaWQgRENBUFQgZGlyZWN0b3J5XG4gICAgY29uc3QgaGFzRW52RmlsZSA9IGV4aXN0c1N5bmMoam9pbihyZXN1bHQsICdhcHAvdXRpbC9rOHMvYXdzX2VudnMnKSk7XG4gICAgY29uc3QgaGFzU25hcHNob3RKU09OID0gZXhpc3RzU3luYyhqb2luKHJlc3VsdCwgJ2FwcC91dGlsL2s4cy9kY2FwdC1zbmFwc2hvdHMuanNvbicpKTtcbiAgICBjb25zdCBoYXNUZXJyYWZvcm1WYXJpYWJsZXMgPSBleGlzdHNTeW5jKGpvaW4ocmVzdWx0LCAnYXBwL3V0aWwvazhzL2RjYXB0LnRmdmFycycpKTtcbiAgICBpZiAoIWhhc0VudkZpbGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCB0aGUgcmVxdWlyZWQgJ2F3c19lbnMnIGZpbGUuIEV4cGVjdGVkIHRvIGZpbmQgaXQgaW4gJHtqb2luKHJlc3VsdCwgJ2FwcC91dGlsL2s4cy9hd3NfZW52cycpfWApO1xuICAgIH1cbiAgICBlbHNlIGlmICghaGFzU25hcHNob3RKU09OKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgdGhlIHJlcXVpcmVkICdkY2FwdC1zbmFwc2hvdHMuanNvbicgZmlsZS4gRXhwZWN0ZWQgdG8gZmluZCBpdCBpbiAke2pvaW4ocmVzdWx0LCAnYXBwL3V0aWwvazhzL2RjYXB0LXNuYXBzaG90cy5qc29uJyl9YCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFoYXNUZXJyYWZvcm1WYXJpYWJsZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCB0aGUgcmVxdWlyZWQgJ2RjYXB0LnRmdmFycycgZmlsZS4gRXhwZWN0ZWQgdG8gZmluZCBpdCBpbiAke2pvaW4ocmVzdWx0LCAnYXBwL3V0aWwvazhzL2RjYXB0LnRmdmFycycpfWApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbiIsImltcG9ydCB7IGV4aXN0c1N5bmMsIGxzdGF0U3luYywgcmVhZGRpclN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5leHBvcnQgY29uc3QgZ2V0UmVwb3J0ID0gKGJhc2VEaXIsIHR5cGUpID0+IHtcbiAgICAvLyBHZXQgdGhlIGZpbGUgbmFtZSBvZiB0aGUgcmVwb3J0IHN1bW1hcnkgdG8gY2hlY2sgaWYgdGhlIHByb3ZpZGVkIGJhc2VEaXIgYWxyZWFkeSBjb250YWlucyB0aGUgcmVwb3J0XG4gICAgY29uc3Qgc3VtbWFyeUZpbGVOYW1lID0gdHlwZSA9PT0gJ3BlcmZvcm1hbmNlJyA/ICdwZXJmb3JtYW5jZV9wcm9maWxlX3N1bW1hcnkubG9nJyA6ICdzY2FsZV9wcm9maWxlX3N1bW1hcnkubG9nJztcbiAgICAvLyBQbGFjZWhvbGRlciBmb3IgdGhlIHJlcG9ydCBkaXJlY3RvcnlcbiAgICBsZXQgcmVzdWx0c0RpciA9IGV4aXN0c1N5bmMoam9pbihiYXNlRGlyLCBzdW1tYXJ5RmlsZU5hbWUpKSA/IGJhc2VEaXIgOiBudWxsO1xuICAgIGlmICghcmVzdWx0c0Rpcikge1xuICAgICAgICAvLyBMZXQncyBnbyBmaW5kIG91ciByZXBvcnQgZGlyZWN0b3J5XG4gICAgICAgIHJlYWRkaXJTeW5jKGJhc2VEaXIpLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IGZvdW5kIGFyZSBkaXJlY3RvcnksIG5vIG5lZWQgdG8gY29udGludWUgbG9va2luZ1xuICAgICAgICAgICAgaWYgKHJlc3VsdHNEaXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBHZXQgdGhlIHN0YXRpc3RpY3MgZm9yIHRoaXMgZW50cnlcbiAgICAgICAgICAgIGNvbnN0IHN0YXQgPSBsc3RhdFN5bmMoam9pbihiYXNlRGlyLCBpdGVtKSk7XG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGlzIGlzIGEgcmVwb3J0IGRpcmVjdG9yeVxuICAgICAgICAgICAgaWYgKHN0YXQuaXNEaXJlY3RvcnkoKSAmJiBleGlzdHNTeW5jKGpvaW4oYmFzZURpciwgaXRlbSwgc3VtbWFyeUZpbGVOYW1lKSkpIHtcbiAgICAgICAgICAgICAgICAvLyBXZSd2ZSBmb3VuZCBpdCFcbiAgICAgICAgICAgICAgICByZXN1bHRzRGlyID0gam9pbihiYXNlRGlyLCBpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgZm91bmQgYSByZXBvcnQgZGlyZWN0b3J5LCBhbmQgaWYgbm90IHdlIHNob3VsZCB0aHJvdyBhIGhpc3N5IGZpdFxuICAgIGlmIChyZXN1bHRzRGlyID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCB0aGUgcmVwb3J0cyBpbiB0aGUgcHJvdmlkZWQgZGlyZWN0b3J5ICgke2Jhc2VEaXJ9KWApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0c0Rpcjtcbn07XG4iLCJpbXBvcnQgeyBjb25maXJtIH0gZnJvbSAnQGlucXVpcmVyL3Byb21wdHMnO1xuaW1wb3J0IHsgZXhpc3RzU3luYywgbWtkaXJTeW5jLCByZWFkZGlyU3luYywgcm1TeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuZXhwb3J0IGNvbnN0IGdldFJlcG9ydERpcmVjdG9yeSA9IGFzeW5jIChjd2QsIGZvcmNlKSA9PiB7XG4gICAgLy8gR2V0IHRoZSBwYXRoIHRvIHRoZSByZXBvcnRzIGRpcmVjdG9yeVxuICAgIGNvbnN0IHBhdGggPSBqb2luKGN3ZCwgJ2FwcCcsICdyZXN1bHRzJywgJ3JlcG9ydHMnKTtcbiAgICAvLyBDaGVjayBpZiB0aGUgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzXG4gICAgaWYgKGV4aXN0c1N5bmMocGF0aCkpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGRpcmVjdG9yeSBpcyBlbXB0eVxuICAgICAgICBjb25zdCBpc0VtcHR5ID0gcmVhZGRpclN5bmMocGF0aCkubGVuZ3RoIDw9IDA7XG4gICAgICAgIGlmICghaXNFbXB0eSkge1xuICAgICAgICAgICAgLy8gSWYgd2UgYXJlIGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlLCBtYWtlIHN1cmUgdG8gYXNrIG5pY2VseSBpZiB3ZSBjYW4gcmVtb3ZlIHRoZSByZXBvcnRzXG4gICAgICAgICAgICBpZiAoIWZvcmNlKSB7XG4gICAgICAgICAgICAgICAgLy8gVGVsbCB0aGUgdXNlciB0aGVyZSBhcmUgc3RpbGwgcHJldmlvdXMgcmVwb3J0cyBpbiB0aGUgZGlyZWN0b3J5XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFxuICBUaGVyZSBhcmUgc3RpbGwgcmVwb3J0cyBmcm9tIHByZXZpb3VzIHRlc3QgcnVucyBpbiB0aGUgY3VycmVudCBkaXJlY3Rvcnk6XG4gICR7cGF0aH1cbmApO1xuICAgICAgICAgICAgICAgIC8vIEFzayBmb3IgY29uZmlybWF0aW9uIHRoYXQgdGhleSB3aWxsIGJlIHJlbW92ZWRcbiAgICAgICAgICAgICAgICBjb25zdCBjYW5SZW1vdmUgPSBhd2FpdCBjb25maXJtKHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ0lzIGl0IE9LIGlmIHdlIHJlbW92ZSBhbGwgcHJldmlvdXMgcmVwb3J0cz8nLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgLy8gSWYgd2UgYXJlIG5vdCBhbGxvd2VkIHRvIHJlbW92ZSB0aGVtLCB0aHJvdyBhIGhpc3N5IGZpdFxuICAgICAgICAgICAgICAgIGlmICghY2FuUmVtb3ZlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHJlcG9ydCBjYW4gb25seSBiZSBnZW5lcmF0ZWQgaWYgYWxsIHByZXZpb3VzIHJlcG9ydHMgaGF2ZSBiZWVuIHJlbW92ZWQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIHByZXZpb3VzIHJlcG9ydHNcbiAgICAgICAgICAgIHJtU3luYyhwYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgZGlyZWN0b3J5IGV4aXN0c1xuICAgIG1rZGlyU3luYyhwYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAvLyBSZXR1cm4gdGhlIHBhdGggdG8gdGhlIHJlcG9ydHMgZGlyZWN0b3J5XG4gICAgcmV0dXJuIHBhdGg7XG59O1xuIiwiaW1wb3J0IGlucXVpcmVyIGZyb20gJ2lucXVpcmVyJztcbmltcG9ydCBQcmVzc1RvQ29udGludWVQcm9tcHQgZnJvbSAnaW5xdWlyZXItcHJlc3MtdG8tY29udGludWUnO1xuaW5xdWlyZXIucmVnaXN0ZXJQcm9tcHQoJ3ByZXNzLXRvLWNvbnRpbnVlJywgUHJlc3NUb0NvbnRpbnVlUHJvbXB0KTtcbmV4cG9ydCBjb25zdCB3YWl0Rm9yVXNlcklucHV0ID0gYXN5bmMgKG1lc3NhZ2UsIGZvcmNlKSA9PiB7XG4gICAgY29uc3QgeyBrZXkgfSA9IGF3YWl0IGlucXVpcmVyLnByb21wdCh7XG4gICAgICAgIG5hbWU6ICdrZXknLFxuICAgICAgICB0eXBlOiAncHJlc3MtdG8tY29udGludWUnLFxuICAgICAgICBhbnlLZXk6IHRydWUsXG4gICAgICAgIHByZXNzVG9Db250aW51ZU1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICAgIHdoZW46ICFmb3JjZVxuICAgIH0pO1xuICAgIHJldHVybiBrZXkgfHwgeyB2YWx1ZTogdW5kZWZpbmVkIH07XG59O1xuIiwiaW1wb3J0IHsgcmVhZEZpbGVTeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgbW92ZSB9IGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IHBhcnNlLCBzdHJpbmdpZnkgfSBmcm9tICd5YW1sJztcbmltcG9ydCB7IGVtcHR5TGluZSwgUGVyZm9ybWFuY2VSZXBvcnRNZXNzYWdlcyB9IGZyb20gJy4uL21lc3NhZ2VzJztcbmltcG9ydCB7IHJlZ3Jlc3Npb25SZXBvcnQgfSBmcm9tICcuL2RjYXB0JztcbmltcG9ydCB7IGdldEFwdERpY3RvcnkgfSBmcm9tICcuL2dldEFwdERpcmVjdG9yeSc7XG5pbXBvcnQgeyBnZXRSZXBvcnQgfSBmcm9tICcuL2dldFJlcG9ydCc7XG5pbXBvcnQgeyBnZXRSZXBvcnREaXJlY3RvcnkgfSBmcm9tICcuL2dldFJlcG9ydERpcmVjdG9yeSc7XG5pbXBvcnQgeyB3YWl0Rm9yVXNlcklucHV0IH0gZnJvbSAnLi93YWl0Rm9yVXNlcklucHV0JztcbmV4cG9ydCBjb25zdCBnZW5lcmF0ZVBlcmZvcm1hbmNlUmVwb3J0ID0gYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAvLyBTaG93IHRoZSB3ZWxjb21lIG1lc3NhZ2VcbiAgICBjb25zb2xlLmxvZyhQZXJmb3JtYW5jZVJlcG9ydE1lc3NhZ2VzLmhlYWRlcik7XG4gICAgLy8gV2UgYXJlIGdvaW5nIHRvIHJlY29uZmlybSB0aGF0IHdlIGFyZSBydW5uaW5nIG9uIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKGFuZCBmZXRjaCBpdCBpZiByZXF1aXJlZClcbiAgICBjb25zdCBjd2QgPSBhd2FpdCBnZXRBcHREaWN0b3J5KG9wdGlvbnMuY3dkLCB0cnVlLCBvcHRpb25zLmZvcmNlKTtcbiAgICB0cnkge1xuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgcGVyZm9ybWFuY2UgcHJvZmlsZSByZXBvcnQgY29uZmlndXJhdGlvbiBZQU1MXG4gICAgICAgIGNvbnN0IHltbEZpbGVQYXRoID0gam9pbihjd2QsICdhcHAnLCAncmVwb3J0c19nZW5lcmF0aW9uJywgJ3BlcmZvcm1hbmNlX3Byb2ZpbGUueW1sJyk7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRzID0gcmVhZEZpbGVTeW5jKHltbEZpbGVQYXRoLCAndXRmOCcpO1xuICAgICAgICAvLyBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiwgc28gbGV0J3MgdHVybiBpdCBpbnRvIEpTT05cbiAgICAgICAgY29uc3QgY29uZmlndXJhdGlvbiA9IHBhcnNlKGNvbnRlbnRzKTtcbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgbWFuYWdlZCB0byBjcmVhdGUgYSB2YWxpZCBKU09OIG91dHB1dFxuICAgICAgICBpZiAoY29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgLy8gQWRkIHRoZSBwZXJmb3JtYW5jZSBiYXNlbGluZSBhbmQgcmVncmVzc2lvbiB0ZXN0IG91dHB1dCBkaXJlY3Rvcmllc1xuICAgICAgICAgICAgLy8gdG8gdGhlIHBlcmZvcm1hbmNlIHJlcG9ydCBnZW5lcmF0b3IgY29uZmlndXJhdGlvblxuICAgICAgICAgICAgY29uZmlndXJhdGlvbi5ydW5zID0gW3tcbiAgICAgICAgICAgICAgICAgICAgcnVuTmFtZTogJ3dpdGhvdXQgYXBwJyxcbiAgICAgICAgICAgICAgICAgICAgcnVuVHlwZTogJ2Jhc2VsaW5lJyxcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiAnL3Jlc3VsdHMvcnVuMSdcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bk5hbWU6ICd3aXRoIGFwcCcsXG4gICAgICAgICAgICAgICAgICAgIHJ1blR5cGU6ICdleHBlcmltZW50JyxcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiAnL3Jlc3VsdHMvcnVuMidcbiAgICAgICAgICAgICAgICB9XTtcbiAgICAgICAgICAgIC8vIFR1cm4gdGhlIGNvbmZpZ3VyYXRpb24gYmFjayBpbnRvIFlBTUxcbiAgICAgICAgICAgIGNvbnN0IG91dHB1dCA9IHN0cmluZ2lmeShjb25maWd1cmF0aW9uKTtcbiAgICAgICAgICAgIC8vIFJlcGxhY2UgdGhlIGRvY2tlciBwbGFjZWhvbGRlcnMgd2l0aCB0aGUgYWN0dWFsIGRpcmVjdG9yaWVzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyXG4gICAgICAgICAgICAvLyBUaGlzIHdpbGwgZ2l2ZSB0aGUgdXNlciBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgd2lsbCBoYXBwZW5cbiAgICAgICAgICAgIGNvbnN0IGh1bWFuUmVhZGFibGVPdXRwdXQgPSBvdXRwdXRcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgnL3Jlc3VsdHMvcnVuMScsIG9wdGlvbnMucmVzdWx0c0RpcjEpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoJy9yZXN1bHRzL3J1bjInLCBvcHRpb25zLnJlc3VsdHNEaXIyKTtcbiAgICAgICAgICAgIC8vIFRlbGwgdGhlIHVzZXIgdGhhdCB3ZSBhcmUgZ29pbmcgdG8gb3ZlcndyaXRlIHRoZSBleGlzdGluZyBjb25maWd1cmF0aW9uXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgXG4gIFRoZSBwZXJmb3JtYW5jZV9wcm9maWxlLnltbCBmaWxlIHdpbGwgYmUgdXBkYXRlZCB3aXRoIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbjpcblxuJHtodW1hblJlYWRhYmxlT3V0cHV0fVxuXG4gIFRoZSBjb25maWd1cmF0aW9uIHdpbGwgYmUgd3JpdHRlbiB0byBkaXNrIGFuZCBvdmVyd3JpdGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbjpcbiAgJHt5bWxGaWxlUGF0aH1cbmApO1xuICAgICAgICAgICAgLy8gR2l2ZSB0aGUgdXNlciBhIG1vbWVudCB0byBwcm9jZXNzIHRoaXMgaW5mb3JtYXRpb25cbiAgICAgICAgICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIGNvbnRpbnVlLi4uJywgb3B0aW9ucy5mb3JjZSk7XG4gICAgICAgICAgICBlbXB0eUxpbmUoKTtcbiAgICAgICAgICAgIC8vIFdyaXRlIHRoZSBhZGp1c3RlZCBwZXJmb3JtYW5jZSByZXBvcnQgZ2VuZXJhdG9yIGNvbmZpZ3VyYXRpb24gdG8gZGlza1xuICAgICAgICAgICAgd3JpdGVGaWxlU3luYyh5bWxGaWxlUGF0aCwgb3V0cHV0LCB7IGVuY29kaW5nOiAndXRmOCcgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICAvLyBPaCBubywgc29tZXRoaW5nIHdlbnQgd3JvbmcuIEFib3J0IGFib3J0IGFib3J0IVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcGVyZm9ybWFuY2UgdGVzdGluZyByZXBvcnQgZ2VuZXJhdGlvbiBjb25maWd1cmF0aW9uJyk7XG4gICAgfVxuICAgIC8vIEdldCB0aGUgcmVzdWx0cyBkaXJlY3RvcnkgKGFuZCBtYWtlIHN1cmUgaXQgaXMgZW1wdHkpXG4gICAgY29uc3QgcmVwb3J0QmFzZURpciA9IGF3YWl0IGdldFJlcG9ydERpcmVjdG9yeShjd2QsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIEdlbmVyYXRlIHRoZSBhY3R1YWwgcmVwb3J0XG4gICAgYXdhaXQgcmVncmVzc2lvblJlcG9ydChjd2QsIG9wdGlvbnMucmVzdWx0c0RpcjEsIG9wdGlvbnMucmVzdWx0c0RpcjIpO1xuICAgIC8vIEdldCB0aGUgcmVwb3J0IGRpcmVjdG9yeVxuICAgIGNvbnN0IHJlcG9ydERpciA9IGdldFJlcG9ydChyZXBvcnRCYXNlRGlyLCAncGVyZm9ybWFuY2UnKTtcbiAgICAvLyBXZSBoYXZlIGEgc3VjY2Vzc2Z1bCB0ZXN0LCBzbyB3ZSBzaG91bGQgc3RvcmUgdGhlIHJlc3VsdHMgaW4gYSAncHJpdmF0ZScgc3ViZGlyZWN0b3J5IG9mIEFQVFxuICAgIGF3YWl0IG1vdmUocmVwb3J0RGlyLCBqb2luKG9wdGlvbnMub3V0cHV0RGlyLCAncGVyZm9ybWFuY2VfcHJvZmlsZScpLCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbn07XG4iLCJpbXBvcnQgeyByZWFkRmlsZVN5bmMsIHdyaXRlRmlsZVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBtb3ZlIH0gZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgcGFyc2UsIHN0cmluZ2lmeSB9IGZyb20gJ3lhbWwnO1xuaW1wb3J0IHsgZW1wdHlMaW5lLCBTY2FsYWJpbGl0eVJlcG9ydE1lc3NhZ2VzIH0gZnJvbSAnLi4vbWVzc2FnZXMnO1xuaW1wb3J0IHsgc2NhbGFiaWxpdHlSZXBvcnQgfSBmcm9tICcuL2RjYXB0JztcbmltcG9ydCB7IGdldEFwdERpY3RvcnkgfSBmcm9tICcuL2dldEFwdERpcmVjdG9yeSc7XG5pbXBvcnQgeyBnZXRSZXBvcnQgfSBmcm9tICcuL2dldFJlcG9ydCc7XG5pbXBvcnQgeyBnZXRSZXBvcnREaXJlY3RvcnkgfSBmcm9tICcuL2dldFJlcG9ydERpcmVjdG9yeSc7XG5pbXBvcnQgeyB3YWl0Rm9yVXNlcklucHV0IH0gZnJvbSAnLi93YWl0Rm9yVXNlcklucHV0JztcbmV4cG9ydCBjb25zdCBnZW5lcmF0ZVNjYWxhYmlsaXR5UmVwb3J0ID0gYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAvLyBTaG93IHRoZSB3ZWxjb21lIG1lc3NhZ2VcbiAgICBjb25zb2xlLmxvZyhTY2FsYWJpbGl0eVJlcG9ydE1lc3NhZ2VzLmhlYWRlcik7XG4gICAgLy8gV2UgYXJlIGdvaW5nIHRvIHJlY29uZmlybSB0aGF0IHdlIGFyZSBydW5uaW5nIG9uIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKGFuZCBmZXRjaCBpdCBpZiByZXF1aXJlZClcbiAgICBjb25zdCBjd2QgPSBhd2FpdCBnZXRBcHREaWN0b3J5KG9wdGlvbnMuY3dkLCB0cnVlLCBvcHRpb25zLmZvcmNlKTtcbiAgICB0cnkge1xuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgc2NhbGFiaWxpdHkgcmVwb3J0IGNvbmZpZ3VyYXRpb24gWUFNTFxuICAgICAgICBjb25zdCB5bWxGaWxlUGF0aCA9IGpvaW4oY3dkLCAnYXBwJywgJ3JlcG9ydHNfZ2VuZXJhdGlvbicsICdzY2FsZV9wcm9maWxlLnltbCcpO1xuICAgICAgICBjb25zdCBjb250ZW50cyA9IHJlYWRGaWxlU3luYyh5bWxGaWxlUGF0aCwgJ3V0ZjgnKTtcbiAgICAgICAgLy8gV2UgbmVlZCB0byB1cGRhdGUgdGhlIGNvbmZpZ3VyYXRpb24sIHNvIGxldCdzIHR1cm4gaXQgaW50byBKU09OXG4gICAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBwYXJzZShjb250ZW50cyk7XG4gICAgICAgIC8vIENoZWNrIGlmIHdlIG1hbmFnZWQgdG8gY3JlYXRlIGEgdmFsaWQgSlNPTiBvdXRwdXRcbiAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgIC8vIEFkZCB0aGUgc2NhbGFiaWxpdHkgdGVzdCBvdXRwdXQgZGlyZWN0b3JpZXMgdG8gdGhlIHJlcG9ydCBnZW5lcmF0b3IgY29uZmlndXJhdGlvblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMucHJvZHVjdCA9PT0gJ2JhbWJvbycpIHtcbiAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLnRpdGxlID0gJ0RDQVBUIFBlcmZvcm1hbmNlIFRlc3RpbmcgZm9yIEJhbWJvbyc7XG4gICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbi5jaGVja19hY3Rpb25zX2NvdW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbi5ydW5zID0gW3tcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bk5hbWU6ICd3aXRob3V0IGFwcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBydW5UeXBlOiAnYmFzZWxpbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiAnL2RjYXB0L3NjYWxlX3Jlc3VsdHNfMSdcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgcnVuTmFtZTogJ3dpdGggYXBwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1blR5cGU6ICdleHBlcmltZW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogJy9kY2FwdC9zY2FsZV9yZXN1bHRzXzInXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bk5hbWU6ICd3aXRoIGFwcCBhbmQgYXBwLXNwZWNpZmljIGFjdGlvbnMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcnVuVHlwZTogJ2V4cGVyaW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiAnL2RjYXB0L3NjYWxlX3Jlc3VsdHNfMydcbiAgICAgICAgICAgICAgICAgICAgfV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLnJ1bnMgPSBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgcnVuTmFtZTogJzEgTm9kZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBydW5UeXBlOiAnYmFzZWxpbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiAnL2RjYXB0L3NjYWxlX3Jlc3VsdHNfMSdcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgcnVuTmFtZTogJzIgTm9kZXMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcnVuVHlwZTogJ2V4cGVyaW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiAnL2RjYXB0L3NjYWxlX3Jlc3VsdHNfMidcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgcnVuTmFtZTogJzQgTm9kZXMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcnVuVHlwZTogJ2V4cGVyaW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiAnL2RjYXB0L3NjYWxlX3Jlc3VsdHNfMydcbiAgICAgICAgICAgICAgICAgICAgfV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBUdXJuIHRoZSBjb25maWd1cmF0aW9uIGJhY2sgaW50byBZQU1MXG4gICAgICAgICAgICBjb25zdCBvdXRwdXQgPSBzdHJpbmdpZnkoY29uZmlndXJhdGlvbik7XG4gICAgICAgICAgICAvLyBSZXBsYWNlIHRoZSBkb2NrZXIgcGxhY2Vob2xkZXJzIHdpdGggdGhlIGFjdHVhbCBkaXJlY3RvcmllcyBwcm92aWRlZCBieSB0aGUgdXNlclxuICAgICAgICAgICAgLy8gVGhpcyB3aWxsIGdpdmUgdGhlIHVzZXIgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0IHdpbGwgaGFwcGVuXG4gICAgICAgICAgICBjb25zdCBodW1hblJlYWRhYmxlT3V0cHV0ID0gb3V0cHV0XG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoJy9kY2FwdC9zY2FsZV9yZXN1bHRzXzEnLCBvcHRpb25zLnJlc3VsdHNEaXIxKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCcvZGNhcHQvc2NhbGVfcmVzdWx0c18yJywgb3B0aW9ucy5yZXN1bHRzRGlyMilcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgnL2RjYXB0L3NjYWxlX3Jlc3VsdHNfMycsIG9wdGlvbnMucmVzdWx0c0RpcjMpO1xuICAgICAgICAgICAgLy8gVGVsbCB0aGUgdXNlciB0aGF0IHdlIGFyZSBnb2luZyB0byBvdmVyd3JpdGUgdGhlIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb25cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBcbiAgVGhlIHNjYWxlX3Byb2ZpbGUueW1sIGZpbGUgd2lsbCBiZSB1cGRhdGVkIHdpdGggdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uOlxuXG4ke2h1bWFuUmVhZGFibGVPdXRwdXR9XG5cbiAgVGhlIGNvbmZpZ3VyYXRpb24gd2lsbCBiZSB3cml0dGVuIHRvIGRpc2sgYW5kIG92ZXJ3cml0ZSBleGlzdGluZyBjb25maWd1cmF0aW9uOlxuICAke3ltbEZpbGVQYXRofVxuYCk7XG4gICAgICAgICAgICAvLyBHaXZlIHRoZSB1c2VyIGEgbW9tZW50IHRvIHByb2Nlc3MgdGhpcyBpbmZvcm1hdGlvblxuICAgICAgICAgICAgYXdhaXQgd2FpdEZvclVzZXJJbnB1dCgnUHJlc3MgYSBrZXkgdG8gY29udGludWUuLi4nLCBvcHRpb25zLmZvcmNlKTtcbiAgICAgICAgICAgIGVtcHR5TGluZSgpO1xuICAgICAgICAgICAgLy8gV3JpdGUgdGhlIGFkanVzdGVkIHNjYWxhYmlsaXR5IHJlcG9ydCBnZW5lcmF0b3IgY29uZmlndXJhdGlvbiB0byBkaXNrXG4gICAgICAgICAgICB3cml0ZUZpbGVTeW5jKHltbEZpbGVQYXRoLCBvdXRwdXQsIHsgZW5jb2Rpbmc6ICd1dGY4JyB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIC8vIE9oIG5vLCBzb21ldGhpbmcgd2VudCB3cm9uZy4gQWJvcnQgYWJvcnQgYWJvcnQhXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHJldHJpZXZlIHRoZSBzY2FsYWJpbGl0eSByZXBvcnQgZ2VuZXJhdGlvbiBjb25maWd1cmF0aW9uJyk7XG4gICAgfVxuICAgIC8vIEdldCB0aGUgcmVzdWx0cyBkaXJlY3RvcnkgKGFuZCBtYWtlIHN1cmUgaXQgaXMgZW1wdHkpXG4gICAgY29uc3QgcmVwb3J0QmFzZURpciA9IGF3YWl0IGdldFJlcG9ydERpcmVjdG9yeShjd2QsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIEdlbmVyYXRlIHRoZSBhY3R1YWwgcmVwb3J0XG4gICAgYXdhaXQgc2NhbGFiaWxpdHlSZXBvcnQoY3dkLCBvcHRpb25zLnJlc3VsdHNEaXIxLCBvcHRpb25zLnJlc3VsdHNEaXIyLCBvcHRpb25zLnJlc3VsdHNEaXIzKTtcbiAgICAvLyBHZXQgdGhlIHJlcG9ydCBkaXJlY3RvcnlcbiAgICBjb25zdCByZXBvcnREaXIgPSBnZXRSZXBvcnQocmVwb3J0QmFzZURpciwgJ3NjYWxhYmlsaXR5Jyk7XG4gICAgLy8gV2UgaGF2ZSBhIHN1Y2Nlc3NmdWwgdGVzdCwgc28gd2Ugc2hvdWxkIHN0b3JlIHRoZSByZXN1bHRzIGluIGEgJ3ByaXZhdGUnIHN1YmRpcmVjdG9yeSBvZiBBUFRcbiAgICBhd2FpdCBtb3ZlKHJlcG9ydERpciwgam9pbihvcHRpb25zLm91dHB1dERpciwgJ3NjYWxlX3Byb2ZpbGUnKSwgeyBvdmVyd3JpdGU6IHRydWUgfSk7XG59O1xuIiwiaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IGV4aXN0c1N5bmMsIG1rZGlyU3luYywgcm1TeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgZ2xvYiB9IGZyb20gJ2dsb2InO1xuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ29zJztcbmltcG9ydCB7IGJhc2VuYW1lLCBqb2luLCByZXNvbHZlIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBPcGVuIH0gZnJvbSAndW56aXBwZXInO1xuaW1wb3J0IHsgZG93bmxvYWRGaWxlIH0gZnJvbSAnLi9kb3dubG9hZEZpbGUnO1xuaW1wb3J0IHsgZ2V0VXJsQnlBcHBLZXkgfSBmcm9tICcuL2dldFVybEJ5QXBwS2V5JztcbmV4cG9ydCBjb25zdCBnZW5lcmF0ZVNDQVJlcG9ydCA9IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgLy8gUGxhY2Vob2xkZXIgZm9yIHRlbXBvcmFyeSBkaXJlY3RvcnlcbiAgICBjb25zdCB0bXBEaXIgPSBqb2luKGhvbWVkaXIoKSwgJy5kY2R4JywgJ3RtcCcpO1xuICAgIC8vIFBsYWNlaG9sZGVyIGZvciBhcmNoaXZlIGRpcmVjdG9yeVxuICAgIGNvbnN0IGFyY2hpdmVEaXIgPSBqb2luKHRtcERpciwgYC4ke29wdGlvbnMuYXBwS2V5fWApO1xuICAgIC8vIFBsYWNlaG9sZGVyIGZvciB0aGUgcGF0aCB0byB0aGUgSkFSIGZpbGVcbiAgICBsZXQgZmlsZSA9IG9wdGlvbnMuYXJjaGl2ZTtcbiAgICAvLyBDaGVjayBpZiB3ZSBuZWVkIHRvIGRvd25sb2FkIHRoZSBmaWxlIGJhc2VkIG9uIHRoZSBhcHBLZXlcbiAgICAvLyBJZiBib3RoIGFyY2hpdmUgYW5kIGFwcEtleSB3ZXJlIHByb3ZpZGVkLCB3ZSB3aWxsIHVzZSB0aGUgYXJjaGl2ZVxuICAgIGlmICghb3B0aW9ucy5hcmNoaXZlICYmIG9wdGlvbnMuYXBwS2V5KSB7XG4gICAgICAgIC8vIEdldCB0aGUgZG93bmxvYWQgVVJMIGJhc2VkIG9uIHRoZSBhcHBLZXlcbiAgICAgICAgY29uc3QgdXJsID0gYXdhaXQgZ2V0VXJsQnlBcHBLZXkob3B0aW9ucy5hcHBLZXkpO1xuICAgICAgICAvLyBEb3dubG9hZCB0aGUgZmlsZSBmcm9tIE1QQUNcbiAgICAgICAgY29uc29sZS5sb2coJ0Rvd25sb2FkaW5nIGFyY2hpdmUgZnJvbSB0aGUgQXRsYXNzaWFuIE1hcmtldHBsYWNlJyk7XG4gICAgICAgIGZpbGUgPSBhd2FpdCBkb3dubG9hZEZpbGUodXJsKTtcbiAgICB9XG4gICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBhIHZhbGlkIHBhdGggdG8gdGhlIEpBUiBmaWxlXG4gICAgaWYgKCFmaWxlIHx8ICFleGlzdHNTeW5jKHJlc29sdmUoZmlsZSkpKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBVbmFibGUgdG8gbG9jYXRlIHRoZSBhcmNoaXZlIGluIHBhdGggJHtmaWxlfWApO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChmaWxlLmVuZHNXaXRoKCcub2JyJykpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1RoZSBhcmNoaXZlIGlzIGFuIE9TR2kgQnVuZGxlIFJlcG9zaXRvcnkgKE9CUiknKTtcbiAgICAgICAgY29uc29sZS5sb2coYEV4dHJhY3RpbmcgYXJjaGl2ZSB0byBhIHRlbXBvcmFyeSBsb2NhdGlvbiAoJHthcmNoaXZlRGlyfSlgKTtcbiAgICAgICAgY29uc3QgYXJjaGl2ZSA9IGF3YWl0IE9wZW4uZmlsZShmaWxlKTtcbiAgICAgICAgYXdhaXQgYXJjaGl2ZS5leHRyYWN0KHsgcGF0aDogYXJjaGl2ZURpciB9KTtcbiAgICAgICAgLy8gR2V0IHRoZSBtYWluIEpBUiBmaWxlICh3aGljaCBpcyBsb2NhdGVkIGluIHRoZSByb290IGRpcmVjdG9yeSlcbiAgICAgICAgY29uc3QgW3JlbGF0aXZlUGF0aFRvSmFyXSA9IGF3YWl0IGdsb2IoYCouamFyYCwgeyBjd2Q6IGFyY2hpdmVEaXIgfSk7XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBhY3R1YWxseSBmb3VuZCB0aGUgbWFpbiBqYXJcbiAgICAgICAgaWYgKCFyZWxhdGl2ZVBhdGhUb0phcikge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ0ZhaWxlZCB0byBsb2NhdGUgdGhlIG1haW4gSkFSIGZpbGUgaW4gdGhlIGFyY2hpdmUnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBGb3VuZCB0aGUgbWFpbiBhcnRpZmFjdCAoJHtyZWxhdGl2ZVBhdGhUb0phcn0pYCk7XG4gICAgICAgICAgICAvLyBHZXQgdGhlIGZ1bGwgcGF0aCB0byB0aGUgSkFSIGZpbGVcbiAgICAgICAgICAgIGZpbGUgPSBqb2luKGFyY2hpdmVEaXIsIHJlbGF0aXZlUGF0aFRvSmFyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBDcmVhdGUgdGhlIG91dHB1dCBkaXJlY3RvcnlcbiAgICBta2RpclN5bmMob3B0aW9ucy5vdXRwdXREaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdSdW5uaW5nIE9XQVNQIGRlcGVuZGVuY3ktY2hlY2sgd2l0aCB0aGUgZm9sbG93aW5nIGFyZ3VtZW50czonKTtcbiAgICAgICAgY29uc29sZS5sb2coYG93YXNwL2RlcGVuZGVuY3ktY2hlY2sgLS1udmRBcGlLZXkgJHtvcHRpb25zLm52ZEFwaUtleX0gLS1mYWlsT25DVlNTIDAgLS1zY2FuICR7ZmlsZX0gLS1zdXBwcmVzc2lvbiBodHRwczovL2RjYXB0LWRvd25sb2Fkcy5zMy5hbWF6b25hd3MuY29tL2F0bGFzc2lhbi1zZWN1cml0eS1zY2FubmVyLWRjLWFwcHMtc3VwcHJlc3Npb25zLnhtbCAtLW91dCAke29wdGlvbnMub3V0cHV0RGlyfWApO1xuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkb2NrZXIgPSBzcGF3bignZG9ja2VyJywgW1xuICAgICAgICAgICAgICAgICdydW4nLFxuICAgICAgICAgICAgICAgIGAtLXB1bGw9YWx3YXlzYCxcbiAgICAgICAgICAgICAgICAnLXUnLCAnMDowJyxcbiAgICAgICAgICAgICAgICAnLWUnLCAndXNlcj1yb290JyxcbiAgICAgICAgICAgICAgICAnLXYnLCBgJHtmaWxlfTovc3JjLyR7YmFzZW5hbWUoZmlsZSl9YCxcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zLmRhdGFEaXIgPyBbJy12JywgYCR7b3B0aW9ucy5kYXRhRGlyfTovdXNyL3NoYXJlL2RlcGVuZGVuY3ktY2hlY2svZGF0YWBdIDogW10sXG4gICAgICAgICAgICAgICAgJy12JywgYCR7b3B0aW9ucy5vdXRwdXREaXJ9Oi9yZXBvcnRgLFxuICAgICAgICAgICAgICAgICdvd2FzcC9kZXBlbmRlbmN5LWNoZWNrJyxcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zLmZhaWxPbkVycm9yID8gWyctLWZhaWxPbkNWU1MnLCAnMCddIDogW10sXG4gICAgICAgICAgICAgICAgJy0tbnZkQXBpS2V5JywgYCR7b3B0aW9ucy5udmRBcGlLZXl9YCxcbiAgICAgICAgICAgICAgICAnLS1zY2FuJywgYC9zcmNgLFxuICAgICAgICAgICAgICAgICctLXN1cHByZXNzaW9uJywgJ2h0dHBzOi8vZGNhcHQtZG93bmxvYWRzLnMzLmFtYXpvbmF3cy5jb20vYXRsYXNzaWFuLXNlY3VyaXR5LXNjYW5uZXItZGMtYXBwcy1zdXBwcmVzc2lvbnMueG1sJyxcbiAgICAgICAgICAgICAgICAnLS1vdXQnLCAnL3JlcG9ydCdcbiAgICAgICAgICAgIF0sIHsgc3RkaW86ICdpbmhlcml0JyB9KTtcbiAgICAgICAgICAgIGRvY2tlci5vbignZXhpdCcsIChjb2RlKSA9PiAoY29kZSA9PT0gMCkgPyByZXNvbHZlKCkgOiByZWplY3QobmV3IEVycm9yKGBEb2NrZXIgZXhpdGVkIHdpdGggY29kZSAke2NvZGV9YCkpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnNvbGUubG9nKGDinJQgRmluaXNoZWQgcnVubmluZyB0aGUgT1dBU1AgZGVwZW5kZW5jeSBjaGVjayBzb2Z0d2FyZSBjb21wb3NpdGlvbiBhbmFseXNpcyAoU0NBKSBzY2FubmVyYCk7XG4gICAgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICBybVN5bmMoYXJjaGl2ZURpciwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICAgICAgICAvLyBPbmx5IHJlbW92ZSB0aGUgZmlsZSBpZiB3ZSBkb3dubG9hZGVkIGl0IGZyb20gTVBBQ1xuICAgICAgICBpZiAoIW9wdGlvbnMuYXJjaGl2ZSAmJiBmaWxlKSB7XG4gICAgICAgICAgICBybVN5bmMoZmlsZSwgeyBmb3JjZTogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCJleHBvcnQgY29uc3QgdGltZWJvbWIgPSB7XG4gICAgJ2ppcmEnOiAnQUFBQ0JBME9EQW9QZU5wOWtsMXYyakFVaHUveks0NjBPeVFIU0x1VklrVWFUYndOVkJLVWhFbmJ1Z3NURHVBMnNTUGJnYkZmUHhPQzFpKzR5RVhPNSt2blBSK3lHaUdTVy9DdW9YYzd2Qm9NdlQ0RU5BT3Y1L1djdFVJVUcxbFZxTng3bnFQUVNKZmNjQ2w4R21VMG1TWGpsRHBSWFM1UXhhdTVScVY5MG5jQ0tRekxUY1JLOUV1OTQ0SXAvY1EvTTFNd3JUa1RiaTVMWjFhcmZNTTBoc3lnNy9YNkE5THZFODl6MmozWnZzSm1RQkJQcHpRSnhxUDdVNHIrcWJqYU4zMnpHKy9iYVIyZE1sNmMzNWVpMnFJYWgvNGR2YUhrT3Z6cGtVL3g1SVo4dmJvZE9JOWNNYmRTY2xubnhqMzhFQzFYWnNjVXVuWXkzNkp2VkkzT3hHWm1iWlhkendJVTVsVkpXaTkwcm5qVlFHb2k3MEI4NzNHTmhQT1FPNTFPRkdma1M1eVFXUktIOHlBYnh4R1pwOVFtL0VDaHBiR0V4UjdNQnFHZEFsVGtjb2tLN01NZU1UZndhMk5NOVREc2R0ZlNmUUduV3h3N0NCNDdmcnNRU2hEU3dKSnJvL2lpTm1nbmN3MUdRbDVySTB0cnRldFk0c0tnWUNKL1k0cVZGU1IwbE5HUTNQMDRhRHhyVEt2V09qTVhUMEx1eENVMzN0eGFTaVBmZnVSanIzZnNPL21DNm9nL1Ztc211R1lOMElqOTNURlljVlh1blFhYURiNCt3SmJGZDd2ZzBPSTVJZjUzTkVOdG9LMkFsVlF3R1NjalNGdDVscmpkV3ltdThXRUlnU3d0cHB5ekFzTGd4Ums4UDVoRzlQTUEzYktpUHNwZHNVTGpKUndYN3VrZjUvTlg3VEF0QWhVQWhRU0h6OURneWNPWDd3Y3dFUk1KYjNUTEdiNENGR2tCL3hVV1NSSzNCWkxyUEY5Um42Wm1yVXFKWDAyb2MnLFxuICAgICdjb25mbHVlbmNlJzogJ0FBQUN6ZzBPREFvUGVOcDlWTzl2MmpBUS9aNi93dEsrSVlXR3NFS0hGR21RbUphdS9HZ0ltOWlZSmhNT1lwcllrZTFBNGErZlNjaEdLdHFQUHZ2ZXZYdjN6cC82Z3FMSExFYjJIYktzVHZOenA5bEM5OE1BMlpiZE5LWWdkaUFHbnRQRFEyejY4OEhjZEgvYU03UDVvMmtaVHpRRUppRTRwREFpQ1RnQm5nYUQwYjBSQ3I1ZjFTOXVIZmNVV1hTUUJ6dUllUXJDQ0RsYjEwbW82QTRjSlRMUVNWbElsekZVZ2dwSThpY2tNYkFWRWJJK3lwSWxpUEc2UjVJbDV6NGtYRUYzQTB4SnAxR3l3YThwRlFlUEtIQW1EZHQ2K0E5Y0pWUUVLNXlXbWhNVjhIR1pMUldrd3JGOFBaTWdwR1BmR2g3SVVOQlVVYzZjQUtSQ2NWRVlyYmxBYVp4dEtFT3JzcWo4Vi9VUzg1enhYZCtmVUd3RDcwaWNrUnd5ZjdBUkFDemlxVVlvKzhJcm10L2pVWUQ5aVQrWVltTklLRlBBQ0F1dnlISWFRRVVTSFlnejBHOHJvcmdDOHJwNXF2YUVaVnAzcHQwdThzdmUzVGlUQ3NTSXIwQTZsbEdyMVZ3ZmR3UHNtYjI1UGpqYlZ3cTJFY1pjbTZuUzZES1grSTNpVDF5UC9DeTQyVEJlNEZBSzBXaFpWdHU2YXpZYlplWmxCMFUyd3JwbmtRb3FxNDBVeXN0NjdScUI5elU4azY0b2xZZXFLbkdtTkN6V2lzZU9Vb0t3aExMb0sxRXhrWklTVmc5NWNyM1pOL1lxZHVlU1lXNjQ5L21kcmZKQVpPUU0zYjNiOTZEUnVoVmszMjYxa2tGdmV4d2U0MVVRdEpOMTJ1NUd6NkdjUFQ3UG43MUg3MHQ2OUNQY2J4L2E5cmNqM3JEdXdsazR4cHJLQ0E1Vk4rb0pqc2FCMlIvNzVzUWZlek0zR0l4SDVteUtUNlBOL1FFcnREd2dGUUU2RTlWRENMVVp0TjhGMzBLbzBLOUlxWFRSdWJuWjhIcEZsWnR6QXlZVUdiL3J5T09JY1lWV1ZDcEJsNWtDalV3bFVoeUYybVk4MFdhb1h4ZHpFaE9XZTJZc05vUlJXV3hNdDZ4WC9oSDZQNXV4RjhiM3JMSklsejFMcFFXOTVwUVB2cWZMcTBrbXdvaEllTHMybDlQTXpmUTQ4THZ2V1RiZk1ZMUFYRGc5S0pETENWMkM5SFVNSCtDYUpmT2Z1ZGkvdjBrSUdWc3dMQUlVRU1ROVg3N2dxR0JkZkgwSEl6QmFWOE5hZFBVQ0ZCbitSaVVBNEQrSXFWUXBUVG91TFZZNjZhQ0dYMDIxMjEnLFxuICAgICdiaXRidWNrZXQnOiAnQUFBQm1nME9EQW9QZU5wOVVsMXYwekFVZmMrdnNNUmJKYWRKdGpHcFVpUzJKSlJPTk9sYUI0U0FCOWU5VzB4VHU3SnZDdjMzZUltRE9vUjR2ZWZlNC9QaE41OWhSNWJja1BpV1JOZXpLSjVGQ1prdkdVbWlKQTR5clpBTExQa0JVckhYb3RFbnU1ZUJSVzZiOEtNVW9DeXc4eEg2QlZaczJLS2NlM1RKcFVKUVhBa29maDJsT2VjY0lWMWRmUmhKQzdmUlhySnV3SnpBTFBMMC9xRitwSTlYR2FQeit1R0dzcHZia2RSeDhBd2NyMG5SZE9DbmxYbm1TbHFPVXF2MERsdHVyZVRLZzZ2T2lJWmI2SjlQb3ZpYVJtOXBISHMwTTlDZi9SdjFEdi9TUDVsTXlvclI5OVdhcnRaVlhtZHNVWlcwM2hRT1NIdENGK24yVExBQjRobElvWVRlZ1NGSG8zK0FRUEsxUVR4K20wMm56enJrbytKUTZNTzBIUzRvREJmZlE1SnJvalNTbmJSbzVMWkRjTXpTRXRSRWRCYjFBWXdOUnpzWGZmMEpnakN3TGpHLzRtQjVnaUUrSnpoYkYzZXN5T245bHhmMUYyMTQ1YTZPV3UyVi9xbUMvMmRWZG9jdG1PcXB0azVQR2lkK1hKeDQydzNOUFBIV1F1RDlmWEpiTDhQa3RmTGhVMkF2K04ycllNWTZ1VUVGcG5jWS9BWUNnZkZBTUN3Q0ZIemtCbGtHSC92UmRUZWVCU2ZVTXpVRGI0VzJBaFF5TTg5M1dQZzJROG9RQVlSZEJTeUtlVlVkb2c9PVgwMmpyJyxcbiAgICAnYmFtYm9vJzogJ0FBQUIzdzBPREFvUGVOcDlVbHRyMnpBWWZmZXZFT3d0b01SMTBxWUxHSmJZV3NubzdHQTdnOTBlWlBscm90V1dqQ1Nuelg3OUZGOElZV2tmRFBKM09lZHd6dmNoMnpkb1dTdmt6cEY3djVqZExyd3BDa2lhSWMvMVBPZVJNeEFhc21NTkVhM0F6MnhuSFQwNGdRSnF1QlFoTmVCNzd2UUd1elBzM2prNXJYSXB4NVFaZmdEZnFBYUdVdFJVT2FqNGFkWCtQa3BHeStVT2hORSt2bkdHNWxhRGFnczlMM210dVRvT0pGNVBramE1Wm9yWEp3RVhIRytwSlFkYU52Uy9jWXRMQXlzQlZGZnUxOWVodnhYUFFyNElKd1YxQUdVTEt6SW5lQmIrOFBCZC9HV09INllmNzUxTm85aWVhdWpsZVlNSEtZbDgrK0ZiMTNWR28xRVVaL2h6bk9CTkVvZmJJRnZIRWQ2bXhEYjgxa1FvVUg1RVpnK29wMGRFTUZtQVFyV1NmNEFaOUhOdlRQMXJNWm5zckxHbXBGcHpLc1pNVnBPeTI4RFFiZndlbzFBaUlRMHF1RGFLNTQwQmk4dzFNaEt4Umh0WldYdkhUZ2huK3pMUUJ2VTQ2RWxhMXJMWmNZRUtPRUFwYXp2dmZLWGNlaVNvWUcva2NUWGhUVWxGRytYVmJnS1ZOSEErZ0Y3Qk44dDNVdVU1c2RwUndYVVhHbm1sVlYwQ0NtUlZVM0c4RXZmNU1LVXc5dnFJRlYzNnRYN21vTmpmbzdDUFR4ZmVuWklKRXJMTVNJaFgzMDlwdkRkOFNVZ0szc21LTXBKc2tuVktCdHIyNnQ0RCtnZDNBQzVxTUN3Q0ZIT2FUV2ZGdkxDTEpQZnQzcWt0Vm8zRmFmbVpBaFJvamI5SUF4ajhLRXFQRFF5MHN0b3MzOTRTUVE9PVgwMm1xJ1xufTtcbmV4cG9ydCBjb25zdCBhcHAzaG91ciA9ICdBQUFCQ0EwT0RBb1BlTnBkajAxUHdrQVVSZmZ6S3laeFoxSXlVekFSa2xsUTI0Z1JhUU10R25hUDhWRW10alBOZkZUNTl5SlZGeXpmdWJrbjc5NlV4MEJ6NlNtYlVNNW5iRHpqOTdSSVN4b3pIcE1VbmJTcTg4cG9VYUx6dEZFU3RVTjZNSloyVGFpVnB1L1lZMk02dEk2c1FydEhteDhxZDc0RVorVEJJdnlVVS9Bb1lzN2ppRTBqemtuV1F4TXVpZkEySUJsVWJuUTdBdWxWandOOUFhVTlhdEFTczY5TzJkTkZVNHdYSkxjMWFPVUd3OXczNEp3Q1RUWm9lN1JQcVVnZXAyWDBWbTBuMGZOdXQ0Z1N4bC9KY25qOW5GYjZRNXRQL1VldTNMKzBQSFc0Z2haRm1tMnpaVjVrNi85NUNiUjdZOWJZR28vekdyVjNJcjRqUmJEeUNBNnZ0MzRETzhwM1NEQXNBaFFuSmpMRDVrOUZyM3VhSXprWEtmODNvNXZEZFFJVWU0WGVxdU5DQzNEKzlodDlaWWhOWkZLbW5oYz1YMDJkaCc7XG4iLCJpbXBvcnQgeyBpbnB1dCB9IGZyb20gJ0BpbnF1aXJlci9wcm9tcHRzJztcbmltcG9ydCB7IGV4aXN0c1N5bmMsIHJlYWRGaWxlU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IHRpbWVib21iIH0gZnJvbSAnLi4vLi4vaGVscGVycy9saWNlbmNlcyc7XG5pbXBvcnQgeyBwcm92aXNpb25pbmcgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5leHBvcnQgY29uc3QgZ2V0SG9zdExpY2Vuc2UgPSAocHJvZHVjdCwgbGljZW5zZSwgZm9yY2UpID0+IHtcbiAgICBjb25zdCBwcm9kdWN0TGljZW5zZSA9IGxpY2Vuc2UgJiYgZXhpc3RzU3luYyhsaWNlbnNlKSA/IHJlYWRGaWxlU3luYyhsaWNlbnNlLCAndXRmOCcpIDogbGljZW5zZTtcbiAgICBpZiAoZm9yY2UpIHtcbiAgICAgICAgcmV0dXJuIHByb2R1Y3RMaWNlbnNlIHx8IHRpbWVib21iW3Byb2R1Y3RdO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZyhwcm92aXNpb25pbmcuYXNrRm9ySG9zdExpY2Vuc2UpO1xuICAgIHJldHVybiBpbnB1dCh7XG4gICAgICAgIG1lc3NhZ2U6IGBMaWNlbnNlYCxcbiAgICAgICAgZGVmYXVsdDogcHJvZHVjdExpY2Vuc2UgfHwgdGltZWJvbWJbcHJvZHVjdF0sXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSk7XG59O1xuIiwiaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAnZGF0ZS1mbnMnO1xuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ29zJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmV4cG9ydCBjb25zdCBnZXRPdXRwdXREaXJlY3RvcnkgPSAoY3dkLCB0aW1lc3RhbXApID0+IHtcbiAgICAvLyBDcmVhdGUgdGhlIHRlc3QgcnVuIElEICh1c2VkIGluIHRoZSBvdXRwdXQgZGlyZWN0b3J5KVxuICAgIGNvbnN0IHJ1bklkID0gdGltZXN0YW1wIHx8IGZvcm1hdChuZXcgRGF0ZSgpLCAneXl5eS1NTS1kZC1ISC1tbScpO1xuICAgIC8vIEVpdGhlciB1c2UgdGhlIHByb3ZpZGVkIG91dHB1dCBkaXJlY3RvcnksIG9yIGRlZmF1bHQgdG8gdGhlIGhvbWUgZGlyZWN0b3J5XG4gICAgY29uc3QgYmFzZURpciA9IGN3ZCB8fCBqb2luKGhvbWVkaXIoKSwgJy5kY2R4JywgJ2FwdCcpO1xuICAgIC8vIFJldHVybiB0aGUgb3V0cHV0IGRpcmVjdG9yeSBmb3IgdGhlIHRlc3QgcmVzdWx0c1xuICAgIHJldHVybiBqb2luKGJhc2VEaXIsIHJ1bklkKTtcbn07XG4iLCJpbXBvcnQgeyBzZWxlY3QgfSBmcm9tICdAaW5xdWlyZXIvcHJvbXB0cyc7XG5leHBvcnQgY29uc3QgZ2V0UHJvZHVjdCA9IGFzeW5jICgpID0+IHtcbiAgICByZXR1cm4gc2VsZWN0KHtcbiAgICAgICAgbWVzc2FnZTogYFBsZWFzZSBjaG9vc2UgdGhlIHByb2R1Y3QgZm9yIHdoaWNoIHlvdSB3aXNoIHRvIHJ1biBEQ0FQVGAsXG4gICAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgICAgIHsgbmFtZTogJ0ppcmEnLCB2YWx1ZTogJ2ppcmEnIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdDb25mbHVlbmNlJywgdmFsdWU6ICdjb25mbHVlbmNlJyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnQmFtYm9vJywgdmFsdWU6ICdiYW1ib28nIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdCaXRidWNrZXQnLCB2YWx1ZTogJ2JpdGJ1Y2tldCcgfVxuICAgICAgICBdXG4gICAgfSk7XG59O1xuIiwiaW1wb3J0IHsgcGFzc3dvcmQgfSBmcm9tICdAaW5xdWlyZXIvcHJvbXB0cyc7XG5pbXBvcnQgeyBwcm92aXNpb25pbmcgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5leHBvcnQgY29uc3QgZ2V0QVdTQ3JlZGVudGlhbHMgPSBhc3luYyAocHJvZHVjdCwgZm9yY2UpID0+IHtcbiAgICAvLyBUcnkgZ2V0dGluZyB0aGUgQVdTIGNyZWRlbnRpYWxzIGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAgY29uc3QgeyBBV1NfQUNDRVNTX0tFWV9JRCwgQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZIH0gPSBwcm9jZXNzLmVudjtcbiAgICAvLyBJZiB0aGV5IGV4aXN0cyBhcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIHJldHVybiB0aGVtIGltbWVkaWF0ZWx5XG4gICAgaWYgKEFXU19BQ0NFU1NfS0VZX0lEICYmIEFXU19TRUNSRVRfQUNDRVNTX0tFWSkge1xuICAgICAgICByZXR1cm4gW0FXU19BQ0NFU1NfS0VZX0lELCBBV1NfU0VDUkVUX0FDQ0VTU19LRVldO1xuICAgIH1cbiAgICAvLyBJZiB3ZSBhcmUgbm90IGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlLCB3ZSBzaG91bGQgYXNrIGZvciB0aGVtXG4gICAgaWYgKCFmb3JjZSkge1xuICAgICAgICAvLyBTaG93IGEgbWVzc2FnZSBhc2tpbmcgbmljZWx5XG4gICAgICAgIGNvbnNvbGUubG9nKHByb3Zpc2lvbmluZy5hc2tGb3JBV1NDcmVkZW50aWFscyhwcm9kdWN0KSk7XG4gICAgICAgIGNvbnN0IGF3c19hY2Nlc3Nfa2V5X2lkID0gYXdhaXQgcGFzc3dvcmQoe1xuICAgICAgICAgICAgbWVzc2FnZTogYEFXUyBBY2Nlc3MgS2V5IElEYCxcbiAgICAgICAgICAgIHZhbGlkYXRlOiAoaW5wdXQpID0+IHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycgJiYgaW5wdXQubGVuZ3RoID4gMFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgYXdzX3NlY3JldF9hY2Nlc3Nfa2V5ID0gYXdhaXQgcGFzc3dvcmQoe1xuICAgICAgICAgICAgbWVzc2FnZTogYEFXUyBTZWNyZXQgQWNjZXNzIEtleWAsXG4gICAgICAgICAgICB2YWxpZGF0ZTogKGlucHV0KSA9PiB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnICYmIGlucHV0Lmxlbmd0aCA+IDBcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBbYXdzX2FjY2Vzc19rZXlfaWQsIGF3c19zZWNyZXRfYWNjZXNzX2tleV07XG4gICAgfVxuICAgIC8vIElmIHdlIGFyZSBpbiBub24taW50ZXJhY3RpdmUgbW9kZSwgYW5kIHRoZSBjcmVkZW50aWFscyBoYXZlIG5vdCBiZWVuIGZvdW5kLCB3ZSBzaG91bGQgdGhyb3cgYW4gZXJyb3JcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBBV1MgY3JlZGVudGlhbHMgY291bGQgbm90IGJlIGZvdW5kLiBQbGVhc2UgcHJvdmlkZSB0aGUgJ0FXU19BQ0NFU1NfS0VZX0lEJyBhbmQgJ0FXU19TRUNSRVRfQUNDRVNTX0tFWScgZW52aXJvbm1lbnQgdmFyaWFibGVzYCk7XG59O1xuIiwiaW1wb3J0IHsgaW5wdXQgfSBmcm9tICdAaW5xdWlyZXIvcHJvbXB0cyc7XG5pbXBvcnQgeyBwcm92aXNpb25pbmcgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5leHBvcnQgY29uc3QgZ2V0RW52aXJvbm1lbnROYW1lID0gYXN5bmMgKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKHByb3Zpc2lvbmluZy5hc2tGb3JFbnZpcm9ubWVudCk7XG4gICAgcmV0dXJuIGlucHV0KHtcbiAgICAgICAgbWVzc2FnZTogYEVudmlyb25tZW50IG5hbWVgLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0pO1xufTtcbiIsImltcG9ydCB7IHJlYWRGaWxlU3luYywgd3JpdGVGaWxlU3luYyB9IGZyb20gJ2ZzJztcbmV4cG9ydCBjb25zdCByZXBsYWNlTGluZXNJbkZpbGUgPSAocGF0aCwgcmVwbGFjZXIpID0+IHtcbiAgICBjb25zdCBjb250ZW50cyA9IHJlYWRGaWxlU3luYyhwYXRoLCAndXRmLTgnKTtcbiAgICBjb25zdCBsaW5lcyA9IGNvbnRlbnRzLnNwbGl0KCdcXG4nKTtcbiAgICBjb25zdCByZXN1bHQgPSBsaW5lcy5tYXAocmVwbGFjZXIpO1xuICAgIHdyaXRlRmlsZVN5bmMocGF0aCwgcmVzdWx0LmpvaW4oJ1xcbicpLCAndXRmLTgnKTtcbn07XG4iLCJpbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBjd2QgfSBmcm9tICdwcm9jZXNzJztcbmltcG9ydCB7IHJlcGxhY2VMaW5lc0luRmlsZSB9IGZyb20gJy4uLy4uL2hlbHBlcnMvcmVwbGFjZUxpbmVzSW5GaWxlJztcbmltcG9ydCB7IHByb3Zpc2lvbmluZyB9IGZyb20gJy4uL21lc3NhZ2VzJztcbmV4cG9ydCBjb25zdCBwZXJzaXN0Q2x1c3RlckNvbmZpZ3VyYXRpb24gPSAob3B0aW9ucykgPT4ge1xuICAgIHJlcGxhY2VMaW5lc0luRmlsZShqb2luKG9wdGlvbnMuY3dkIHx8IGN3ZCgpLCAnYXBwL3V0aWwvazhzL2RjYXB0LnRmdmFycycpLCAobGluZSkgPT4ge1xuICAgICAgICBpZiAob3B0aW9ucy5lbnZpcm9ubWVudCAmJiBsaW5lLnN0YXJ0c1dpdGgoJ2Vudmlyb25tZW50X25hbWUgPScpKSB7XG4gICAgICAgICAgICByZXR1cm4gYGVudmlyb25tZW50X25hbWUgPSBcIiR7b3B0aW9ucy5lbnZpcm9ubWVudH1cImA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAob3B0aW9ucy5tb25pdG9yaW5nICYmIGxpbmUuc3RhcnRzV2l0aCgnIyBtb25pdG9yaW5nX2VuYWJsZWQnKSkge1xuICAgICAgICAgICAgcmV0dXJuIGBtb25pdG9yaW5nX2VuYWJsZWQgPSB0cnVlYDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChvcHRpb25zLm1vbml0b3JpbmcgJiYgbGluZS5zdGFydHNXaXRoKCcjIG1vbml0b3JpbmdfZ3JhZmFuYV9leHBvc2VfbGInKSkge1xuICAgICAgICAgICAgcmV0dXJuIGBtb25pdG9yaW5nX2dyYWZhbmFfZXhwb3NlX2xiID0gdHJ1ZWA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAob3B0aW9ucy5wcm9kdWN0ICYmIGxpbmUuc3RhcnRzV2l0aCgncHJvZHVjdHMgPSAnKSkge1xuICAgICAgICAgICAgcmV0dXJuIGBwcm9kdWN0cyA9IFtcIiR7b3B0aW9ucy5wcm9kdWN0fVwiXWA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAob3B0aW9ucy5wcm9kdWN0ICYmIG9wdGlvbnMubGljZW5zZSAmJiBsaW5lLnN0YXJ0c1dpdGgoYCR7b3B0aW9ucy5wcm9kdWN0fV9saWNlbnNlID1gKSkge1xuICAgICAgICAgICAgcmV0dXJuIGAke29wdGlvbnMucHJvZHVjdH1fbGljZW5zZSA9IFwiJHtvcHRpb25zLmxpY2Vuc2V9XCJgO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG9wdGlvbnMucHJvZHVjdCAmJiBvcHRpb25zLnRhZyAmJiBsaW5lLnN0YXJ0c1dpdGgoYCR7b3B0aW9ucy5wcm9kdWN0fV92ZXJzaW9uX3RhZyA9YCkpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHtvcHRpb25zLnByb2R1Y3R9X3ZlcnNpb25fdGFnID0gXCIke29wdGlvbnMudGFnfVwiYDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChvcHRpb25zLnByb2R1Y3QgJiYgbGluZS5zdGFydHNXaXRoKGAke29wdGlvbnMucHJvZHVjdH1fcmVwbGljYV9jb3VudCA9YCkpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHtvcHRpb25zLnByb2R1Y3R9X3JlcGxpY2FfY291bnQgPSAke29wdGlvbnMubm9kZXMgfHwgJzEnfWA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAob3B0aW9ucy5wcm9kdWN0ICYmIGxpbmUuc3RhcnRzV2l0aChgJHtvcHRpb25zLnByb2R1Y3R9X2FkZGl0aW9uYWxfanZtX2FyZ3MgPSBgKSkge1xuICAgICAgICAgICAgcmV0dXJuIGAke29wdGlvbnMucHJvZHVjdH1fYWRkaXRpb25hbF9qdm1fYXJncyA9IFtcIi1EdXBtLnBsdWdpbi51cGxvYWQuZW5hYmxlZD10cnVlXCIsXCItRHBhc3N3b3JkLmNvbmZpcm1hdGlvbi5kaXNhYmxlZD10cnVlXCJdYDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGluZTtcbiAgICB9KTtcbiAgICBjb25zb2xlLmxvZyhwcm92aXNpb25pbmcudGVycmFmb3JtQ29uZmlndXJhdGlvblBlcnNpc3RlZCk7XG59O1xuIiwiaW1wb3J0IHsgd3JpdGVGaWxlU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IHByb3Zpc2lvbmluZyB9IGZyb20gJy4uL21lc3NhZ2VzJztcbmV4cG9ydCBjb25zdCBwZXJzaXN0QVdTQ3JlZGVudGlhbHMgPSAoY3dkLCBhd3NfYWNjZXNzX2tleV9pZCwgYXdzX3NlY3JldF9hY2Nlc3Nfa2V5KSA9PiB7XG4gICAgd3JpdGVGaWxlU3luYyhqb2luKGN3ZCwgJ2FwcC91dGlsL2s4cy9hd3NfZW52cycpLCBgXG4jIGF3c19lbnZzIGZpbGUgc2hvdWxkIGNvbnRhaW4gQVdTIHZhcmlhYmxlcyBuZWVkZWQgZm9yIGF1dGhvcml6YXRpb24gKHdpdGhvdXQgcXVvdGVzKVxuQVdTX0FDQ0VTU19LRVlfSUQ9JHthd3NfYWNjZXNzX2tleV9pZH1cbkFXU19TRUNSRVRfQUNDRVNTX0tFWT0ke2F3c19zZWNyZXRfYWNjZXNzX2tleX1cbmAudHJpbSgpLCAndXRmLTgnKTtcbiAgICBjb25zb2xlLmxvZyhwcm92aXNpb25pbmcuYXdzQ3JlZGVudGlhbHNQZXJzaXN0ZWQpO1xufTtcbiIsImltcG9ydCB7IGV4aXN0c1N5bmMsIHJlYWRGaWxlU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmV4cG9ydCBjb25zdCBnZXRDbHVzdGVyVVJMID0gYXN5bmMgKGN3ZCwgcHJvZHVjdCkgPT4ge1xuICAgIC8vIENoYW5nZSB0aGUgd29ya2luZyBkaXJlY3RvcnkgdG8gdGhlIEt1YmVybmV0ZXMgdXRpbHMgZGlyZWN0b3J5XG4gICAgY29uc3QgYmFzZURpciA9IGpvaW4oY3dkLCAnYXBwL3V0aWwvazhzJyk7XG4gICAgLy8gQ2hlY2sgaWYgd2UgY2FuIGZpbmQgdGhlIG91dHB1dHMuanNvbiBmaWxlIHRoYXQgd2FzIGNyZWF0ZWQgZHVyaW5nIHByb3Zpc2lvbmluZ1xuICAgIGNvbnN0IGhhc091dHB1dHNKU09OID0gZXhpc3RzU3luYyhqb2luKGJhc2VEaXIsICdvdXRwdXRzLmpzb24nKSk7XG4gICAgaWYgKCFoYXNPdXRwdXRzSlNPTikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIHRoZSByZXF1aXJlZCAnb3V0cHV0cy5qc29uJyBmaWxlLCB3aGljaCBpcyB1c3VhbGx5IGdlbmVyYXRlZCBhZnRlciBwcm92aXNpb25pbmcgdGhlIGVudmlyb25tZW50LmApO1xuICAgIH1cbiAgICAvLyBHZXQgdGhlIGNsdXN0ZXIgY3JlYXRpb24gb3V0cHV0IGRhdGFcbiAgICBjb25zdCBjb250ZW50cyA9IHJlYWRGaWxlU3luYyhqb2luKGJhc2VEaXIsICdvdXRwdXRzLmpzb24nKSwgJ3V0Zi04Jyk7XG4gICAgY29uc3Qgb3V0cHV0cyA9IEpTT04ucGFyc2UoY29udGVudHMpO1xuICAgIC8vIFRyeSB0byBmaW5kIHRoZSBwcm9kdWN0IGxvYWRiYWxhbmNlciBVUkwgZnJvbSB0aGUgb3V0cHV0IGRhdGFcbiAgICBjb25zdCBsb2FkYmFsYW5jZXJVcmxzID0gb3V0cHV0cz8ucHJvZHVjdF91cmxzPy52YWx1ZTtcbiAgICBpZiAobG9hZGJhbGFuY2VyVXJscykge1xuICAgICAgICBjb25zdCBsb2FkYmFsYW5jZXJVcmwgPSBsb2FkYmFsYW5jZXJVcmxzW3Byb2R1Y3RdO1xuICAgICAgICBpZiAobG9hZGJhbGFuY2VyVXJsKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9hZGJhbGFuY2VyVXJsO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIElmIHdlIGhhdmVuJ3QgZm91bmQgaXQgeWV0LCB3ZSBzaG91bGQgdGhyb3cgYSBoaXNzeSBmaXRcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIHRoZSAke3Byb2R1Y3R9IGxvYWQgYmFsYW5jZXIgVVJMLCBhcmUgeW91IHN1cmUgdGhlIHByb2R1Y3Qgd2FzIGNvcnJlY3RseSBwcm92aXNpb25lZD9gKTtcbn07XG4iLCJpbXBvcnQgeyBpbnN0YWxsIH0gZnJvbSAnLi4vaGVscGVycy9kY2FwdCc7XG5pbXBvcnQgeyBnZXRBcHREaWN0b3J5IH0gZnJvbSAnLi4vaGVscGVycy9nZXRBcHREaXJlY3RvcnknO1xuaW1wb3J0IHsgZ2V0QVdTQ3JlZGVudGlhbHMgfSBmcm9tICcuLi9oZWxwZXJzL2dldEFXU0NyZWRlbnRpYWxzJztcbmltcG9ydCB7IGdldEVudmlyb25tZW50TmFtZSB9IGZyb20gJy4uL2hlbHBlcnMvZ2V0RW52aXJvbm1lbnROYW1lJztcbmltcG9ydCB7IGdldEhvc3RMaWNlbnNlIH0gZnJvbSAnLi4vaGVscGVycy9nZXRIb3N0TGljZW5zZSc7XG5pbXBvcnQgeyBwZXJzaXN0Q2x1c3RlckNvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9oZWxwZXJzL3BlcnNpc3RDbHVzdGVyQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBwZXJzaXN0QVdTQ3JlZGVudGlhbHMgfSBmcm9tICcuLi9oZWxwZXJzL3BlcnNpc3RzQVdTQ3JlZGVudGlhbHMnO1xuaW1wb3J0IHsgd2FpdEZvclVzZXJJbnB1dCB9IGZyb20gJy4uL2hlbHBlcnMvd2FpdEZvclVzZXJJbnB1dCc7XG5pbXBvcnQgeyBlbXB0eUxpbmUsIHByb3Zpc2lvbmluZyB9IGZyb20gJy4uL21lc3NhZ2VzJztcbmltcG9ydCB7IGdldENsdXN0ZXJVUkwgfSBmcm9tICcuL2dldENsdXN0ZXJVUkwnO1xuZXhwb3J0IGNvbnN0IHByb3Zpc2lvbkNsdXN0ZXIgPSBhc3luYyAob3B0aW9ucywgbXVzdFVzZURlZmF1bHRDb25maWd1cmF0aW9uKSA9PiB7XG4gICAgLy8gU2hvdyB0aGUgcHJvdmlzaW9uaW5nIHdlbGNvbWUgbWVzc2FnZVxuICAgIGNvbnNvbGUubG9nKHByb3Zpc2lvbmluZy5oZWFkZXIpO1xuICAgIC8vIEFzayBmb3IgdGhlIHByb3BlciBkaXJlY3Rvcnkgb2YgQVBUXG4gICAgY29uc3QgZGlyZWN0b3J5ID0gYXdhaXQgZ2V0QXB0RGljdG9yeShvcHRpb25zLmN3ZCwgbXVzdFVzZURlZmF1bHRDb25maWd1cmF0aW9uLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBBc2sgZm9yIHRoZSBBV1MgY3JlZGVudGlhbHNcbiAgICBjb25zdCBbYXdzX2FjY2Vzc19rZXlfaWQsIGF3c19zZWNyZXRfYWNjZXNzX2tleV0gPSBhd2FpdCBnZXRBV1NDcmVkZW50aWFscyhvcHRpb25zLnByb2R1Y3QsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIEFzayBmb3IgdGhlIGVudmlyb25tZW50IG5hbWVcbiAgICBjb25zdCBlbnZpcm9ubWVudCA9IG9wdGlvbnMuZW52aXJvbm1lbnQgfHwgYXdhaXQgZ2V0RW52aXJvbm1lbnROYW1lKCk7XG4gICAgLy8gQXNrIGZvciB0aGUgbGljZW5zZVxuICAgIGNvbnN0IGxpY2Vuc2UgPSBhd2FpdCBnZXRIb3N0TGljZW5zZShvcHRpb25zLnByb2R1Y3QsIG9wdGlvbnMubGljZW5zZSwgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gR2V0IHRoZSBudW1iZXIgb2Ygbm9kZXMgKG9yIGRlZmF1bHQgdG8gb25lKVxuICAgIGNvbnN0IG5vZGVzID0gb3B0aW9ucy5ub2RlcyB8fCAxO1xuICAgIC8vIExldCdzIGRvIHRoaXNcbiAgICBjb25zb2xlLmxvZyhwcm92aXNpb25pbmcucmVhZHkpO1xuICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIHN0YXJ0IHByb3Zpc2lvbmcgdGhlIEFXUyBlbnZpcm9ubWVudC4uLicsIG9wdGlvbnMuZm9yY2UpO1xuICAgIGVtcHR5TGluZSgpO1xuICAgIC8vIFdyaXRlIEFXUyBjcmVkZW50aWFscyB0byBkaXNrXG4gICAgcGVyc2lzdEFXU0NyZWRlbnRpYWxzKGRpcmVjdG9yeSwgYXdzX2FjY2Vzc19rZXlfaWQsIGF3c19zZWNyZXRfYWNjZXNzX2tleSk7XG4gICAgLy8gV3JpdGUgVGVycmFmb3JtIHZhcmlhYmxlcyB0byBkaXNrXG4gICAgcGVyc2lzdENsdXN0ZXJDb25maWd1cmF0aW9uKHtcbiAgICAgICAgcHJvZHVjdDogb3B0aW9ucy5wcm9kdWN0LFxuICAgICAgICB0YWc6IG9wdGlvbnMudGFnLFxuICAgICAgICBjd2Q6IGRpcmVjdG9yeSxcbiAgICAgICAgZW52aXJvbm1lbnQsXG4gICAgICAgIG1vbml0b3Jpbmc6IG9wdGlvbnMubW9uaXRvcmluZyxcbiAgICAgICAgbGljZW5zZSxcbiAgICAgICAgbm9kZXNcbiAgICB9KTtcbiAgICAvLyBSdW4gdGhlIERDQVBUIGluc3RhbGwgc2NyaXB0XG4gICAgYXdhaXQgaW5zdGFsbChkaXJlY3RvcnkpO1xuICAgIC8vIEdldCB0aGUgY2x1c3RlciBVUkwgZnJvbSB0aGUgb3V0cHV0cy5qc29uXG4gICAgY29uc3QgYmFzZVVybCA9IGF3YWl0IGdldENsdXN0ZXJVUkwoZGlyZWN0b3J5LCBvcHRpb25zLnByb2R1Y3QpO1xuICAgIC8vIFJldHVybiBhbGwgdGhlIHF1ZXN0aW9ucyB3ZSBhc2tlZCB0aGUgdXNlciBmb3IgdXNlIGluIG90aGVyIHN0ZXBzXG4gICAgcmV0dXJuIHtcbiAgICAgICAgY3dkOiBkaXJlY3RvcnksXG4gICAgICAgIGVudmlyb25tZW50LFxuICAgICAgICBhd3NfYWNjZXNzX2tleV9pZCxcbiAgICAgICAgYXdzX3NlY3JldF9hY2Nlc3Nfa2V5LFxuICAgICAgICBiYXNlVXJsLFxuICAgICAgICBsaWNlbnNlXG4gICAgfTtcbn07XG4iLCJpbXBvcnQgeyBlbXB0eUxpbmUsIFJlc3RhcnQgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5pbXBvcnQgeyByZXN0YXJ0IH0gZnJvbSAnLi9kY2FwdCc7XG5pbXBvcnQgeyBnZXRBcHREaWN0b3J5IH0gZnJvbSAnLi9nZXRBcHREaXJlY3RvcnknO1xuaW1wb3J0IHsgZ2V0QVdTQ3JlZGVudGlhbHMgfSBmcm9tICcuL2dldEFXU0NyZWRlbnRpYWxzJztcbmltcG9ydCB7IHBlcnNpc3RBV1NDcmVkZW50aWFscyB9IGZyb20gJy4vcGVyc2lzdHNBV1NDcmVkZW50aWFscyc7XG5pbXBvcnQgeyB3YWl0Rm9yVXNlcklucHV0IH0gZnJvbSAnLi93YWl0Rm9yVXNlcklucHV0JztcbmV4cG9ydCBjb25zdCByZXN0YXJ0Q2x1c3RlciA9IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgLy8gU2hvdyBuaWNlIGxpdHRsZSB3ZWxjb21lIG1lc3NhZ2VcbiAgICBjb25zb2xlLmxvZyhSZXN0YXJ0LmhlYWRlcik7XG4gICAgLy8gQXNrIGZvciB0aGUgcHJvcGVyIGRpcmVjdG9yeSBvZiBBUFRcbiAgICBjb25zdCBkaXJlY3RvcnkgPSBhd2FpdCBnZXRBcHREaWN0b3J5KG9wdGlvbnMuY3dkLCB0cnVlLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBBc2sgZm9yIHRoZSBBV1MgY3JlZGVudGlhbHNcbiAgICBjb25zdCBbYXdzX2FjY2Vzc19rZXlfaWQsIGF3c19zZWNyZXRfYWNjZXNzX2tleV0gPSBhd2FpdCBnZXRBV1NDcmVkZW50aWFscyhvcHRpb25zLnByb2R1Y3QsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIFdyaXRlIEFXUyBjcmVkZW50aWFscyB0byBkaXNrXG4gICAgcGVyc2lzdEFXU0NyZWRlbnRpYWxzKGRpcmVjdG9yeSwgYXdzX2FjY2Vzc19rZXlfaWQsIGF3c19zZWNyZXRfYWNjZXNzX2tleSk7XG4gICAgLy8gQXNrIHRoZSB1c2VyIGlmIHRoZXkgYXJlIHJlYWR5IHRvIHNheSBnb29kYnllIHRvIHRoZWlyIGNsdXN0ZXJcbiAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBjb250aW51ZS4uLicsIG9wdGlvbnMuZm9yY2UpO1xuICAgIGVtcHR5TGluZSgpO1xuICAgIC8vIFRlcm1pbmF0ZSBpdCFcbiAgICBhd2FpdCByZXN0YXJ0KGRpcmVjdG9yeSwgb3B0aW9ucy5lbnZpcm9ubWVudCwgb3B0aW9ucy5wcm9kdWN0KTtcbiAgICAvLyBBc2sgdGhlIHVzZXIgdG8gcXVpdCB0aGUgcHJvZ3JhbVxuICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIGV4aXQuLi4nLCBvcHRpb25zLmZvcmNlKTtcbn07XG4iLCJleHBvcnQgY29uc3QgUEFUID0ge1xuICAgIGlkOiAxLFxuICAgIG5hbWU6ICdEQ0RYJyxcbiAgICBjcmVhdGVkQXQ6ICcxOTcwLTAxLTAxIDAwOjAwOjAwJyxcbiAgICBleHBpcmVzOiAnOTk5OS0xMi0zMSAwMDowMDowMCcsXG4gICAgdG9rZW46ICdOemMzTkRjeU16ZzBOams1T3Z1WXV4eHJFaWI3MTQ3TEtaazFDK0FySTN6OCcsXG4gICAgaGFzaGVkVG9rZW46ICd7UEtDUzVTMn14RHJIa1Z6SFUvOCthenRRL0N3bmdaS3NlRisrNEs3dWdzMmpvSTZSeGMvK3FpK2kzdnloOXdLNWswTE9aM1lwJyxcbiAgICBub3RpZmljYXRpb25TdGF0ZTogJ05PVF9TRU5UJyxcbiAgICB0b2tlbklkOiA3Nzc0NzIzODQ2OTlcbn07XG4iLCJpbXBvcnQgYXhpb3MsIHsgaXNBeGlvc0Vycm9yIH0gZnJvbSAnYXhpb3MnO1xuaW1wb3J0IEZvcm1EYXRhIGZyb20gJ2Zvcm0tZGF0YSc7XG5pbXBvcnQgeyBjcmVhdGVSZWFkU3RyZWFtIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgUEFUIH0gZnJvbSAnLi9QQVQnO1xuZXhwb3J0IGNvbnN0IHVwbG9hZFRvVVBNID0gYXN5bmMgKGJhc2VVcmwsIHBhdGgsIHVzZXJuYW1lLCBwYXNzd29yZCwgcGF0ID0gUEFULnRva2VuLCB2ZXJib3NlID0gdHJ1ZSkgPT4ge1xuICAgIC8vIEdldCB0aGUgVVBNIHRva2VuLCB3aGljaCBpcyByZXF1aXJlZCBmb3IgdXBsb2FkaW5nIGEgZmlsZVxuICAgIGNvbnN0IHRva2VuID0gYXdhaXQgZ2V0VVBNVG9rZW4oYmFzZVVybCwgdXNlcm5hbWUsIHBhc3N3b3JkLCBwYXQpO1xuICAgIC8vIElmIHRoZSB0b2tlbiBpcyBudWxsLCB0aGVyZSBpcyBubyBwb2ludCBpbiBjb250aW51aW5nIGRvd24gdGhpcyByb2FkXG4gICAgaWYgKHRva2VuID09PSBudWxsKSB7XG4gICAgICAgIHZlcmJvc2UgJiYgY29uc29sZS5sb2coJ0ZhaWxlZCB0byB1cGxvYWQgcGx1Z2luIGFyY2hpdmUgZmlsZSB0byBVUE0sIHVuYWJsZSB0byByZXRyaWV2ZSBVUE0gdG9rZW4nKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBGaXJzdCB1cGxvYWQgdGhlIGZpbGUgdXNpbmcgQmFzaWMgQXV0aGVudGljYXRpb24sIGFzIHRoaXMgaXMgdGhlIG1vc3QgY29tbW9uIHdheVxuICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gdXNlcm5hbWUgJiYgcGFzc3dvcmQgPyBCdWZmZXIuZnJvbShgJHt1c2VybmFtZX06JHtwYXNzd29yZH1gKS50b1N0cmluZygnYmFzZTY0JykgOiBudWxsO1xuICAgIHJldHVybiB1cGxvYWRGaWxlKGJhc2VVcmwsIHRva2VuLCBwYXRoLCB7XG4gICAgICAgIC4uLmNyZWRlbnRpYWxzID8geyAnQXV0aG9yaXphdGlvbic6IGBCYXNpYyAke2NyZWRlbnRpYWxzfWAgfSA6IHVuZGVmaW5lZFxuICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICB2ZXJib3NlICYmIGNvbnNvbGUubG9nKCdGaW5pc2hlZCB1cGxvYWRpbmcgcGx1Z2luIGFyY2hpdmUgdG8gVVBNJyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAvLyBJZiBCYXNpYyBBdXRoZW50aWNhdGlvbiBkb2VzIG5vdCB3b3JrLCBpdCB3aWxsIHRocm93IGFuIGVycm9yICh1bmF1dGhlbnRpY2F0ZWQgb3IgYmFkIHJlcXVlc3QpXG4gICAgfSkuY2F0Y2goYXN5bmMgKGVycikgPT4ge1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUgdXBsb2FkIGZhaWxlZCBiZWNhdXNlIG9mIGF1dGhlbnRpY2F0aW9uIGlzc3Vlc1xuICAgICAgICBpZiAoaXNBeGlvc0Vycm9yKGVycikgJiYgKGVyci5yZXNwb25zZT8uc3RhdHVzID09PSA0MDEgfHwgZXJyLnJlc3BvbnNlPy5zdGF0dXMgPT09IDQwMykpIHtcbiAgICAgICAgICAgIC8vIElmIHdlIGNhYW5vdCB1cGxvYWQgdXNpbmcgQmFzaWMgQXV0aGVudGljYXRpb24sIHVzZSB0aGUgXCJrbm93blwiIFBBVCB0b2tlbiwgd2hpY2ggc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBkYXRhYmFzZSBwb3N0LWluc3RhbGxhdGlvblxuICAgICAgICAgICAgcmV0dXJuIHVwbG9hZEZpbGUoYmFzZVVybCwgdG9rZW4sIHBhdGgsIHtcbiAgICAgICAgICAgICAgICAnQXV0aG9yaXphdGlvbic6IGBCZWFyZXIgJHtwYXR9YFxuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdmVyYm9zZSAmJiBjb25zb2xlLmxvZygnRmluaXNoZWQgdXBsb2FkaW5nIHBsdWdpbiBhcmNoaXZlIHRvIFVQTScpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBJZiB0aGlzIGlzIG5vdCBhbiBhdXRoZW50aWNhdGlvbiBpc3N1ZSwgYnViYmxlIHRoZSBlcnJvciB0byB0aGUgY2FsbGluZyBmdW5jdGlvblxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgfSk7XG59O1xuZXhwb3J0IGNvbnN0IHdhaXRGb3JQbHVnaW5Ub0JlRW5hYmxlZCA9IGFzeW5jIChhcHBLZXksIGJhc2VVcmwsIHVzZXJuYW1lLCBwYXNzd29yZCwgdmVyYm9zZSA9IHRydWUpID0+IHtcbiAgICBjb25zdCBjcmVkZW50aWFscyA9IHVzZXJuYW1lICYmIHBhc3N3b3JkID8gQnVmZmVyLmZyb20oYCR7dXNlcm5hbWV9OiR7cGFzc3dvcmR9YCkudG9TdHJpbmcoJ2Jhc2U2NCcpIDogbnVsbDtcbiAgICB2ZXJib3NlICYmIGNvbnNvbGUubG9nKCdXYWl0aW5nIGZvciBwbHVnaW4gdG8gYmVjb21lIGVuYWJsZWQnKTtcbiAgICBsZXQgaXNFbmFibGVkID0gZmFsc2U7XG4gICAgbGV0IGNvdW50ID0gMDtcbiAgICB3aGlsZSAoIWlzRW5hYmxlZCAmJiBjb3VudCA8IDEyMCkge1xuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTAwMCkpO1xuICAgICAgICB2ZXJib3NlICYmIGNvbnNvbGUubG9nKGBXYWl0aW5nIGZvciBwbHVnaW4gdG8gYmVjb21lIGVuYWJsZWQuLi4gJHtjb3VudH1zYCk7XG4gICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgYXhpb3MuZ2V0KGAke2Jhc2VVcmx9L3Jlc3QvcGx1Z2lucy8xLjAvJHthcHBLZXl9LWtleWAsIGNyZWRlbnRpYWxzID8ge1xuICAgICAgICAgICAgaGVhZGVyczogeyAnQXV0aG9yaXphdGlvbic6IGBCYXNpYyAke2NyZWRlbnRpYWxzfWAgfVxuICAgICAgICB9IDogdW5kZWZpbmVkKS5jYXRjaCgoKSA9PiAoeyBkYXRhOiB7IGVuYWJsZWQ6IGZhbHNlIH0gfSkpO1xuICAgICAgICBpc0VuYWJsZWQgPSBkYXRhPy5lbmFibGVkO1xuICAgICAgICBjb3VudCsrO1xuICAgIH1cbiAgICByZXR1cm4gaXNFbmFibGVkO1xufTtcbmV4cG9ydCBjb25zdCByZWdpc3RlckxpY2Vuc2UgPSBhc3luYyAoYXBwS2V5LCBsaWNlbnNlLCBiYXNlVXJsLCB1c2VybmFtZSwgcGFzc3dvcmQsIHZlcmJvc2UgPSB0cnVlKSA9PiB7XG4gICAgY29uc3QgY3JlZGVudGlhbHMgPSB1c2VybmFtZSAmJiBwYXNzd29yZCA/IEJ1ZmZlci5mcm9tKGAke3VzZXJuYW1lfToke3Bhc3N3b3JkfWApLnRvU3RyaW5nKCdiYXNlNjQnKSA6IG51bGw7XG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBheGlvcy5nZXQoYCR7YmFzZVVybH0vcmVzdC9wbHVnaW5zLzEuMC8ke2FwcEtleX0ta2V5L2xpY2Vuc2VgLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICdYLUF0bGFzc2lhbi1Ub2tlbic6ICduby1jaGVjaycsXG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3ZuZC5hdGwucGx1Z2lucytqc29uJyxcbiAgICAgICAgICAgIC4uLmNyZWRlbnRpYWxzID8geyAnQXV0aG9yaXphdGlvbic6IGBCYXNpYyAke2NyZWRlbnRpYWxzfWAgfSA6IHt9XG4gICAgICAgIH1cbiAgICB9KS5jYXRjaCgoKSA9PiAoeyBkYXRhOiB7fSB9KSk7XG4gICAgY29uc3QgeyByYXdMaWNlbnNlIH0gPSBkYXRhO1xuICAgIGlmICghcmF3TGljZW5zZSB8fCByYXdMaWNlbnNlICE9PSBsaWNlbnNlKSB7XG4gICAgICAgIHJldHVybiBheGlvcy5wdXQoYCR7YmFzZVVybH0vcmVzdC9wbHVnaW5zLzEuMC8ke2FwcEtleX0ta2V5L2xpY2Vuc2VgLCBgeyBcInJhd0xpY2Vuc2VcIjogXCIke2xpY2Vuc2V9XCIgfWAsIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAnWC1BdGxhc3NpYW4tVG9rZW4nOiAnbm8tY2hlY2snLFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vdm5kLmF0bC5wbHVnaW5zK2pzb24nLFxuICAgICAgICAgICAgICAgIC4uLmNyZWRlbnRpYWxzID8geyAnQXV0aG9yaXphdGlvbic6IGBCYXNpYyAke2NyZWRlbnRpYWxzfWAgfSA6IHt9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgdmVyYm9zZSAmJiBjb25zb2xlLmxvZygnRmluaXNoZWQgdXBsb2FkaW5nIGxpY2Vuc2UgdG8gVVBNJyk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgIGlmIChpc0F4aW9zRXJyb3IoZXJyKSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIucmVzcG9uc2U/LmRhdGE/LnN1YkNvZGUgPT09ICd1cG0ucGx1Z2luLmVycm9yLnBsdWdpbi5ub3QudXNpbmcubGljZW5zaW5nJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2ZXJib3NlICYmIGNvbnNvbGUubG9nKCdGYWlsZWQgdG8gdXBsb2FkIGxpY2Vuc2UgdG8gVVBNJywgZXJyKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufTtcbmNvbnN0IGdldFVQTVRva2VuID0gYXN5bmMgKGJhc2VVcmwsIHVzZXJuYW1lLCBwYXNzd29yZCwgcGF0LCB2ZXJib3NlKSA9PiB7XG4gICAgY29uc3QgY3JlZGVudGlhbHMgPSB1c2VybmFtZSAmJiBwYXNzd29yZCA/IEJ1ZmZlci5mcm9tKGAke3VzZXJuYW1lfToke3Bhc3N3b3JkfWApLnRvU3RyaW5nKCdiYXNlNjQnKSA6IG51bGw7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5nZXQoYCR7YmFzZVVybH0vcmVzdC9wbHVnaW5zLzEuMC8/b3NfYXV0aFR5cGU9YmFzaWNgLCBjcmVkZW50aWFscyA/IHtcbiAgICAgICAgaGVhZGVyczogeyAnQXV0aG9yaXphdGlvbic6IGBCYXNpYyAke2NyZWRlbnRpYWxzfWAgfVxuICAgIH0gOiB1bmRlZmluZWQpLmNhdGNoKGFzeW5jIChlcnIpID0+IHtcbiAgICAgICAgaWYgKGlzQXhpb3NFcnJvcihlcnIpICYmIGVyci5yZXNwb25zZT8uc3RhdHVzID09PSA0MDMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MuZ2V0KGAke2Jhc2VVcmx9L3Jlc3QvcGx1Z2lucy8xLjAvYCwge1xuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgJ0F1dGhvcml6YXRpb24nOiBgQmVhcmVyICR7cGF0fWAgfVxuICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICB2ZXJib3NlICYmIGNvbnNvbGUubG9nKCdGYWlsZWQgdG8gdXBsb2FkIHBsdWdpbiBhcmNoaXZlIGZpbGUgdG8gVVBNLCB1bmFibGUgdG8gcmV0cmlldmUgdG9rZW4nLCBlcnIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIH1cbiAgICAgICAgdmVyYm9zZSAmJiBjb25zb2xlLmxvZygnRmFpbGVkIHRvIHVwbG9hZCBwbHVnaW4gYXJjaGl2ZSBmaWxlIHRvIFVQTSwgdW5hYmxlIHRvIHJldHJpZXZlIHRva2VuJywgZXJyKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3BvbnNlID8gcmVzcG9uc2UuaGVhZGVyc1sndXBtLXRva2VuJ10gOiBudWxsO1xufTtcbmNvbnN0IHVwbG9hZEZpbGUgPSAoYmFzZVVybCwgdG9rZW4sIGZpbGVQYXRoLCBoZWFkZXJzKSA9PiB7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ3BsdWdpbicsIGNyZWF0ZVJlYWRTdHJlYW0oZmlsZVBhdGgpKTtcbiAgICByZXR1cm4gYXhpb3MucG9zdChgJHtiYXNlVXJsfS9yZXN0L3BsdWdpbnMvMS4wLz90b2tlbj0ke3Rva2VufWAsIGZvcm1EYXRhLCB7IGhlYWRlcnM6IHtcbiAgICAgICAgICAgIC4uLmZvcm1EYXRhLmdldEhlYWRlcnMoKSxcbiAgICAgICAgICAgIC4uLmhlYWRlcnMsXG4gICAgICAgIH0gfSk7XG59O1xuIiwiaW1wb3J0IHsgaW5wdXQgfSBmcm9tICdAaW5xdWlyZXIvcHJvbXB0cyc7XG5pbXBvcnQgeyBleGlzdHNTeW5jLCByZWFkRmlsZVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBhcHAzaG91ciB9IGZyb20gJy4uLy4uL2hlbHBlcnMvbGljZW5jZXMnO1xuaW1wb3J0IHsgcHJvdmlzaW9uaW5nIH0gZnJvbSAnLi4vbWVzc2FnZXMnO1xuZXhwb3J0IGNvbnN0IGdldEFwcExpY2Vuc2UgPSAobGljZW5zZSwgZm9yY2UpID0+IHtcbiAgICBjb25zdCBhcHBMaWNlbnNlID0gbGljZW5zZSAmJiBleGlzdHNTeW5jKGxpY2Vuc2UpID8gcmVhZEZpbGVTeW5jKGxpY2Vuc2UsICd1dGY4JykgOiBsaWNlbnNlO1xuICAgIGlmIChmb3JjZSkge1xuICAgICAgICByZXR1cm4gYXBwTGljZW5zZSB8fCBhcHAzaG91cjtcbiAgICB9XG4gICAgY29uc29sZS5sb2cocHJvdmlzaW9uaW5nLmFza0ZvckFwcExpY2Vuc2UpO1xuICAgIHJldHVybiBpbnB1dCh7XG4gICAgICAgIG1lc3NhZ2U6IGBMaWNlbnNlYCxcbiAgICAgICAgZGVmYXVsdDogYXBwTGljZW5zZSB8fCBhcHAzaG91cixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9KTtcbn07XG4iLCJpbXBvcnQgeyBjb25maXJtLCBpbnB1dCwgcGFzc3dvcmQgYXMgcGFzc3dvcmRQcm9tcHQsIHNlbGVjdCB9IGZyb20gJ0BpbnF1aXJlci9wcm9tcHRzJztcbmltcG9ydCB7IFByZXNldHMsIFNpbmdsZUJhciB9IGZyb20gJ2NsaS1wcm9ncmVzcyc7XG5pbXBvcnQgeyBleGlzdHNTeW5jLCBybVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBQQVQgfSBmcm9tICcuLi8uLi9oZWxwZXJzL1BBVCc7XG5pbXBvcnQgeyByZWdpc3RlckxpY2Vuc2UsIHVwbG9hZFRvVVBNLCB3YWl0Rm9yUGx1Z2luVG9CZUVuYWJsZWQgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3VwbSc7XG5pbXBvcnQgeyBkb3dubG9hZEZpbGUgfSBmcm9tICcuL2Rvd25sb2FkRmlsZSc7XG5pbXBvcnQgeyBnZXRBcHBMaWNlbnNlIH0gZnJvbSAnLi9nZXRBcHBMaWNlbnNlJztcbmltcG9ydCB7IGdldEFwdERpY3RvcnkgfSBmcm9tICcuL2dldEFwdERpcmVjdG9yeSc7XG5pbXBvcnQgeyBnZXRBV1NDcmVkZW50aWFscyB9IGZyb20gJy4vZ2V0QVdTQ3JlZGVudGlhbHMnO1xuaW1wb3J0IHsgZ2V0RW52aXJvbm1lbnROYW1lIH0gZnJvbSAnLi9nZXRFbnZpcm9ubWVudE5hbWUnO1xuaW1wb3J0IHsgZ2V0UHJvZHVjdCB9IGZyb20gJy4vZ2V0UHJvZHVjdCc7XG5pbXBvcnQgeyBnZXRVcmxCeUFwcEtleSB9IGZyb20gJy4vZ2V0VXJsQnlBcHBLZXknO1xuaW1wb3J0IHsgcmVzdGFydENsdXN0ZXIgfSBmcm9tICcuL3Jlc3RhcnRDbHVzdGVyJztcbmNvbnN0IHByb2dyZXNzQmFyID0gbmV3IFNpbmdsZUJhcih7XG4gICAgZm9ybWF0OiAnICBbe2Jhcn1dIHtwZXJjZW50YWdlfSUgfCBFVEE6IHtldGFfZm9ybWF0dGVkfW0nLFxuICAgIGZvcm1hdFRpbWU6ICh2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCB0b3RhbCA9IHByb2dyZXNzQmFyLmdldFRvdGFsKCkgLyA2MDtcbiAgICAgICAgY29uc3QgdGltZVBhc3NlZCA9IHJvdW5kKChwcm9ncmVzc0Jhci5nZXRUb3RhbCgpIC0gdmFsdWUpIC8gNjAsIDAuNSk7XG4gICAgICAgIHJldHVybiB0aW1lUGFzc2VkID09PSB0b3RhbCA/IGAke3RvdGFsfWAgOiBgJHt0b3RhbCAtIHRpbWVQYXNzZWR9YDtcbiAgICB9LFxuICAgIGhpZGVDdXJzb3I6IHRydWVcbn0sIFByZXNldHMubGVnYWN5KTtcbmNvbnN0IHJvdW5kID0gKHZhbHVlLCBzdGVwID0gMS4wKSA9PiB7XG4gICAgY29uc3QgaW52ID0gMS4wIC8gc3RlcDtcbiAgICByZXR1cm4gTWF0aC5mbG9vcih2YWx1ZSAqIGludikgLyBpbnY7XG59O1xuZXhwb3J0IGNvbnN0IGluc3RhbGxBcHBJbkNsdXN0ZXIgPSBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgIC8vIFNldCBkZWZhdWx0IHZhbHVlIGZvciB1c2VybmFtZS9wYXNzd29yZFxuICAgIGNvbnN0IHVzZXJuYW1lID0gb3B0aW9ucy51c2VybmFtZSB8fCAnYWRtaW4nO1xuICAgIGNvbnN0IHBhc3N3b3JkID0gb3B0aW9ucy5wYXNzd29yZCB8fCAnYWRtaW4nO1xuICAgIGNvbnN0IHBhdCA9IG9wdGlvbnMucGF0IHx8IFBBVC50b2tlbjtcbiAgICAvLyBJZiB3ZSBhcmUgaW4gbm9uLWludGVyYWN0aXZlIG1vZGUsIHdlIHdpbGwgZWl0aGVyIGRvd25sb2FkIGl0IGZyb20gTVBBQyBvciBpbnN0YWxsIGl0IGRpcmVjdGx5IGlmIGEgZmlsZSBwYXRoIHdhcyBwcm92aWRlZFxuICAgIGlmIChvcHRpb25zLmZvcmNlKSB7XG4gICAgICAgIC8vIEluIG9yZGVyIHRvIGluc3RhbGwgdGhlIGFwcCAsIHdlIG5lZWQgYW4gYXBwa2V5LiBJZiB0aGlzIGlzIG5vdCBwcm92aWRlZCwgdGhyb3cgYSBoaXNzeSBmaXRcbiAgICAgICAgLy8gVE9ETzogaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGV4dHJhY3QgdGhlIGtleSBmcm9tIHRoZSBhcmNoaXZlXG4gICAgICAgIGlmICghb3B0aW9ucy5hcHBLZXkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGF1dG9tYXRpY2FsbHkgaW5zdGFsbCBhcHAgaW50byBjbHVzdGVyLCBgYXBwS2V5YCBuZWVkcyB0byBiZSBwcm92aWRlZCcpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEdldCB0aGUgYXBwIGxpY2Vuc2VcbiAgICAgICAgY29uc3QgYXBwTGljZW5zZSA9IGF3YWl0IGdldEFwcExpY2Vuc2Uob3B0aW9ucy5saWNlbnNlLCBvcHRpb25zLmZvcmNlKTtcbiAgICAgICAgLy8gUGxhY2Vob2xkZXIgZm9yIHRoZSBwYXRoIHRvIHRoZSBKQVIgZmlsZVxuICAgICAgICBsZXQgZmlsZSA9IG9wdGlvbnMuYXJjaGl2ZTtcbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgbmVlZCB0byBkb3dubG9hZCB0aGUgZmlsZSBiYXNlZCBvbiB0aGUgYXBwS2V5XG4gICAgICAgIC8vIElmIGJvdGggYXJjaGl2ZSBhbmQgYXBwS2V5IHdlcmUgcHJvdmlkZWQsIHdlIHdpbGwgdXNlIHRoZSBhcmNoaXZlXG4gICAgICAgIGlmICghb3B0aW9ucy5hcmNoaXZlICYmIG9wdGlvbnMuYXBwS2V5KSB7XG4gICAgICAgICAgICAvLyBHZXQgdGhlIGRvd25sb2FkIFVSTCBmcm9tIHRoZSBhcHBLZXlcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IGF3YWl0IGdldFVybEJ5QXBwS2V5KG9wdGlvbnMuYXBwS2V5KTtcbiAgICAgICAgICAgIC8vIERvd25sb2FkIHRoZSBmaWxlIGZyb20gTVBBQ1xuICAgICAgICAgICAgZmlsZSA9IGF3YWl0IGRvd25sb2FkRmlsZSh1cmwpO1xuICAgICAgICB9XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgYSB2YWxpZCBwYXRoIHRvIHRoZSBKQVIgZmlsZVxuICAgICAgICBpZiAoIWZpbGUgfHwgIWV4aXN0c1N5bmMocmVzb2x2ZShmaWxlKSkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBVbmFibGUgdG8gbG9jYXRlIHRoZSBhcmNoaXZlIGluIHBhdGggJHtmaWxlfWApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgIGxldCB0aW1lcklkID0gbnVsbDtcbiAgICAgICAgbGV0IGlzSW5zdGFsbGVkU3VjY2VzZnVsbHkgPSBmYWxzZTtcbiAgICAgICAgd2hpbGUgKCFpc0luc3RhbGxlZFN1Y2Nlc2Z1bGx5ICYmIGNvdW50IDw9IDQpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBcbiAgSW5zdGFsbGluZyB0aGUgYXBwICgke29wdGlvbnMuYXBwS2V5fSkgaW50byB0aGUgY2x1c3RlciB1c2luZyB0aGUgVW5pdmVyc2FsIFBsdWdpbiBNYW5hZ2VyIFJFU1QgQVBJYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgXG4gIFJldHJ5aW5nIGluc3RhbGxhdGlvbiBvZiB0aGUgYXBwICgke29wdGlvbnMuYXBwS2V5fSkgaW50byB0aGUgY2x1c3RlciB1c2luZyB0aGUgVW5pdmVyc2FsIFBsdWdpbiBNYW5hZ2VyIFJFU1QgQVBJIChhdHRlbXB0ICR7Y291bnQgKyAxfSlgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gU2hvdyBhIHByb2dyZXNzIGJhclxuICAgICAgICAgICAgICAgIHByb2dyZXNzQmFyLnN0YXJ0KDE4MCwgMCk7XG4gICAgICAgICAgICAgICAgdGltZXJJZCA9IHNldEludGVydmFsKCgpID0+IHByb2dyZXNzQmFyLmluY3JlbWVudCgpLCAxMDAwKTtcbiAgICAgICAgICAgICAgICAvLyBVcGxvYWQgaXQgaW50byB0aGUgY2x1c3RlciB1c2luZyB0aGUgVVBNIFJFU1QgQVBJXG4gICAgICAgICAgICAgICAgY29uc3QgaXNJbnN0YWxsZWQgPSBhd2FpdCB1cGxvYWRUb1VQTShvcHRpb25zLmJhc2VVcmwsIGZpbGUsIHVzZXJuYW1lLCBwYXNzd29yZCwgcGF0LCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFpc0luc3RhbGxlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBpbnN0YWxsIGFwcCBpbnRvIHRoZSBjbHVzdGVyIHVzaW5nIHRoZSBVbml2ZXJzYWwgUGx1Z2luIE1hbmFnZXIgUkVTVCBBUEknKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgbmVlZCB0byByZXN0YXJ0IHRoZSBhcHBsaWNhdGlvbiBjb250YWluZXJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5yZXN0YXJ0QWZ0ZXJJbnN0YWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEZvciByZXN0YXJ0cywgdGhlIHByb2R1Y3Qgb3B0aW9uIGlzIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucy5wcm9kdWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnICBGYWlsZWQgdG8gcmVzdGFydCBhcHBsaWNhdGlvbiwgcmVxdWlyZWQgb3B0aW9uIGBwcm9kdWN0YCBpcyBtaXNzaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3IgcmVzdGFydHMsIHRoZSBlbnZpcm9ubWVudCBvcHRpb24gaXMgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghb3B0aW9ucy5lbnZpcm9ubWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJyAgRmFpbGVkIHRvIHJlc3RhcnQgYXBwbGljYXRpb24sIHJlcXVpcmVkIG9wdGlvbiBgcHJvZHVjdGAgaXMgbWlzc2luZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gT2ssIGdvb2QgdG8gZ28hXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBPaCByaWdodCwgd2UgYWxzbyBuZWVkIERDQVBUIGluIG9yZGVyIHRvIGJlIGFibGUgdG8gcmVzdGFydCB0aGUgY2x1c3RlclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3dkID0gYXdhaXQgZ2V0QXB0RGljdG9yeShvcHRpb25zLmN3ZCwgZmFsc2UsIG9wdGlvbnMuZm9yY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgYXJlIG5vdyBnb2luZyB0byByZXN0YXJ0IHRoZSBjbHVzdGVyIGFuZCBob3BlIGZvciB0aGUgYmVzdFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYCAgUmVzdGFydGluZyAke29wdGlvbnMucHJvZHVjdH0gdG8gZW5zdXJlIGFwcCBpbnN0YWxsYXRpb25gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHJlc3RhcnRDbHVzdGVyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjd2QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdDogb3B0aW9ucy5wcm9kdWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50OiBvcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3c19hY2Nlc3Nfa2V5X2lkOiBvcHRpb25zLmF3c19hY2Nlc3Nfa2V5X2lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3c19zZWNyZXRfYWNjZXNzX2tleTogb3B0aW9ucy5hd3Nfc2VjcmV0X2FjY2Vzc19rZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFdhaXQgZm9yIHRoZSBwbHVnaW4gdG8gYmUgZW5hYmxlZFxuICAgICAgICAgICAgICAgIGNvbnN0IGlzRW5hYmxlZCA9IGF3YWl0IHdhaXRGb3JQbHVnaW5Ub0JlRW5hYmxlZChvcHRpb25zLmFwcEtleSwgb3B0aW9ucy5iYXNlVXJsLCB1c2VybmFtZSwgcGFzc3dvcmQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBhcHAgY291bGQgbm90IGJlIGVuYWJsZWQgb24gdGhlIGNsdXN0ZXIsIHBsZWFzZSByZWZlciB0byB0aGUgYXBwbGljYXRpb24gbG9nIGZpbGVzIGZvciBtb3JlIGluZm9ybWF0aW9uJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFJlZ2lzdGVyIHRoZSBsaWNlbnNlICh1c2UgdGhlIDMgaG91ciB0aW1lYm9tYiBpbiBub24taW50ZXJhY3RpdmUgbW9kZSlcbiAgICAgICAgICAgICAgICBjb25zdCBpc0xpY2Vuc2VkID0gYXdhaXQgcmVnaXN0ZXJMaWNlbnNlKG9wdGlvbnMuYXBwS2V5LCBhcHBMaWNlbnNlLCBvcHRpb25zLmJhc2VVcmwsIHVzZXJuYW1lLCBwYXNzd29yZCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIGlmICghaXNMaWNlbnNlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBsaWNlbnNlIGNvdWxkIG5vdCBiZSBhcHBsaWVkIGZvciB0aGUgYXBwIG9uIHRoZSBjbHVzdGVyLCBwbGVhc2UgcmVmZXIgdG8gdGhlIGFwcGxpY2F0aW9uIGxvZyBmaWxlcyBmb3IgbW9yZSBpbmZvcm1hdGlvbicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpc0luc3RhbGxlZFN1Y2Nlc2Z1bGx5ID0gaXNJbnN0YWxsZWQgJiYgaXNFbmFibGVkICYmIGlzTGljZW5zZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvdW50IDw9IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gV2FpdCBhIG1pbnV0ZSAoY29vbGRvd24gcGVyaW9kKSBiZWZvcmUgcmV0cnlpbmdcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwMDApKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgICAgICAgIC8vIFN0b3AgdGhlIHByb2dyZXNzIGJhclxuICAgICAgICAgICAgICAgIHByb2dyZXNzQmFyLnN0b3AoKTtcbiAgICAgICAgICAgICAgICBpZiAodGltZXJJZCkge1xuICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKHRpbWVySWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBSZW1vdmUgdGhlIHRlbXBvcmFyeSBmaWxlIChvbmx5IHdoZW4gZG93bmxvYWRlZCBmcm9tIE1QQUMgdXNpbmcgYXBwS2V5KVxuICAgICAgICBpZiAoIW9wdGlvbnMuYXJjaGl2ZSkge1xuICAgICAgICAgICAgcm1TeW5jKGZpbGUsIHsgZm9yY2U6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVGVsbCB0aGVtIHdlIHN1Y2NlZWRlZFxuICAgICAgICBjb25zb2xlLmxvZyhg4pyUIEZpbmlzaGVkIGluc3RhbGxpbmcgdGhlIGFwcCAoJHtvcHRpb25zLmFwcEtleX0pYCk7XG4gICAgICAgIC8vIElmIHdlJ3JlIGluIGludGVyYWN0aXZlIG1vZGUsIGxldCdzIGJlIG5pY2VcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIFRlbGwgdGhlIHVzZXIgdGhleSBoYXZlIG9wdGlvbnNcbiAgICAgICAgY29uc29sZS5sb2coYFxuICBJdCBpcyBub3cgcmVxdWlyZWQgdG8gaW5zdGFsbCB0aGUgYXBwIGludG8gdGhlIEppcmEgY2x1c3Rlci5cbiAgV2UgY2FuIGluc3RhbGwgaXQgZnJvbSB0aGUgQXRsYXNzaWFuIE1hcmtldHBsYWNlIG9yIHlvdSBjYW4gaW5zdGFsbCBpdCBtYW51YWxseS5cbmApO1xuICAgICAgICAvLyBBc2sgdGhlbSBpZiB0aGV5IHByZWZlciBhdXRvbWF0aW9uIG9yIHRlZGlvdXMgbWFudWFsIHRhc2tzXG4gICAgICAgIGNvbnN0IG1ldGhvZCA9IGF3YWl0IHNlbGVjdCh7XG4gICAgICAgICAgICBtZXNzYWdlOiBgSG93IGRvIHlvdSB3YW50IHRvIGluc3RhbGwgdGhlIGFwcD9gLFxuICAgICAgICAgICAgZGVmYXVsdDogJ21wYWMnLFxuICAgICAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgICAgICAgIHsgbmFtZTogJ01hcmtldHBsYWNlJywgdmFsdWU6ICdtcGFjJyB9LFxuICAgICAgICAgICAgICAgIHsgbmFtZTogJ01hbnVhbCcsIHZhbHVlOiAnbWFudWFsJyB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBJZiB0aGV5IGNob3NlIGF1dG9tYXRpb24sIGxldCdzIGF1dG9tYXRlIVxuICAgICAgICBpZiAobWV0aG9kID09PSAnbXBhYycpIHtcbiAgICAgICAgICAgIC8vIEFzayB0aGVtIG5pY2VseSBmb3IgdGhlIGFwcCBrZXlcbiAgICAgICAgICAgIGNvbnN0IGFkZG9uS2V5ID0gYXdhaXQgaW5wdXQoe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2UgcHJvdmlkZSB0aGUga2V5IG9mIHRoZSBhcHAgdG8gYmUgaW5zdGFsbGVkJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBvcHRpb25zLmFwcEtleSxcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBBc2sgdGhlbSBuaWNlbHkgZm9yIHRoZSBhcHAgbGljZW5zZSB0byBiZSB1c2VkXG4gICAgICAgICAgICBjb25zdCBhcHBMaWNlbnNlID0gYXdhaXQgZ2V0QXBwTGljZW5zZShvcHRpb25zLmxpY2Vuc2UsIG9wdGlvbnMuZm9yY2UpO1xuICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gdXNlcm5hbWUgb3IgUEFULCBhc2sgdGhlbSBuaWNlbHkgaG93IHRoZXkgd2FudCB0byBhdXRoZW50aWNhdGVcbiAgICAgICAgICAgIGNvbnN0IGF1dGhUeXBlID0gb3B0aW9ucy51c2VybmFtZSA/ICdiYXNpYycgOiBvcHRpb25zLnBhdCA/ICdwYXQnIDogYXdhaXQgc2VsZWN0KHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgSG93IGRvIHlvdSB3aXNoIHRvIGF1dGhlbnRpY2F0ZT9gLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICdiYXNpYycsXG4gICAgICAgICAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdVc2VybmFtZS9wYXNzd29yZCcsIHZhbHVlOiAnYmFzaWMnIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ1BlcnNvbmFsIEFjY2VzcyBUb2tlbicsIHZhbHVlOiAncGF0JyB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBBc2sgdGhlbSBuaWNlbHkgZm9yIHRoZSB1c2VybmFtZVxuICAgICAgICAgICAgY29uc3QgYWRtaW5Vc2VybmFtZSA9IGF1dGhUeXBlID09PSAnYmFzaWMnICYmICFvcHRpb25zLnVzZXJuYW1lID8gYXdhaXQgaW5wdXQoe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2UgcHJvdmlkZSB0aGUgdXNlcm5hbWUgb2YgYSBzeXN0ZW0gYWRtaW5pc3RyYXRvcicsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgICAgIH0pIDogb3B0aW9ucy51c2VybmFtZTtcbiAgICAgICAgICAgIC8vIEFzayB0aGVtIG5pY2VseSBmb3IgdGhlIHVzZXJuYW1lXG4gICAgICAgICAgICBjb25zdCBhZG1pblBhc3N3b3JkID0gYXV0aFR5cGUgPT09ICdiYXNpYycgJiYgIW9wdGlvbnMucGFzc3dvcmQgPyBhd2FpdCBwYXNzd29yZFByb21wdCh7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBwcm92aWRlIHRoZSB1c2VybmFtZSBvZiBhIHN5c3RlbSBhZG1pbmlzdHJhdG9yJyxcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZTogaXRlbSA9PiB0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycgJiYgaXRlbS5sZW5ndGggPiAwXG4gICAgICAgICAgICB9KSA6IG9wdGlvbnMucGFzc3dvcmQ7XG4gICAgICAgICAgICAvLyBBc2sgdGhlbSBuaWNlbHkgZm9yIHRoZSBQQVRcbiAgICAgICAgICAgIGNvbnN0IGFkbWluUEFUID0gYXV0aFR5cGUgPT09ICdwYXQnICYmICFvcHRpb25zLnBhdCA/IGF3YWl0IHBhc3N3b3JkUHJvbXB0KHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIHByb3ZpZGUgdGhlIFBlcnNvbmFsIEFjY2VzcyBUb2tlbiBvZiBhIHN5c3RlbSBhZG1pbmlzdHJhdG9yJyxcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZTogaXRlbSA9PiB0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycgJiYgaXRlbS5sZW5ndGggPiAwXG4gICAgICAgICAgICB9KSA6IG9wdGlvbnMucGF0O1xuICAgICAgICAgICAgLy8gQXNrIHRoZW0gbmljZWx5IGlmIHdlIG5lZWQgdG8gcmVzdGFydCB0aGUgYXBwbGljYXRpb25cbiAgICAgICAgICAgIGNvbnN0IHJlc3RhcnRBZnRlckluc3RhbGwgPSBhd2FpdCBjb25maXJtKHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnUmVzdGFydCB0aGUgaG9zdCBhcHBsaWNhdGlvbiBhZnRlciBpbnN0YWxsYXRpb24/JyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gVGVsbCB0aGVtIHdlIGFyZSBzdGFydGluZ1xuICAgICAgICAgICAgY29uc29sZS5sb2coYFxuICBJbnN0YWxsaW5nIHRoZSBhcHAgKCR7YWRkb25LZXl9KSBpbnRvIHRoZSBjbHVzdGVyIHVzaW5nIHRoZSBVbml2ZXJzYWwgUGx1Z2luIE1hbmFnZXIgUkVTVCBBUElgKTtcbiAgICAgICAgICAgIC8vIFNob3cgYSBwcm9ncmVzcyBiYXJcbiAgICAgICAgICAgIHByb2dyZXNzQmFyLnN0YXJ0KDE4MCwgMCk7XG4gICAgICAgICAgICBjb25zdCB0aW1lcklkID0gc2V0SW50ZXJ2YWwoKCkgPT4gcHJvZ3Jlc3NCYXIuaW5jcmVtZW50KCksIDEwMDApO1xuICAgICAgICAgICAgLy8gR2V0IHRoZSBkb3dubG9hZCBVUkwgZnJvbSB0aGUgYXBwS2V5XG4gICAgICAgICAgICBjb25zdCB1cmwgPSBhd2FpdCBnZXRVcmxCeUFwcEtleShhZGRvbktleSk7XG4gICAgICAgICAgICAvLyBEb3dubG9hZCB0aGUgZmlsZSBmcm9tIE1QQUNcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBkb3dubG9hZEZpbGUodXJsKTtcbiAgICAgICAgICAgIC8vIFVwbG9hZCBpdCBpbnRvIHRoZSBjbHVzdGVyIHVzaW5nIHRoZSBVUE0gUkVTVCBBUElcbiAgICAgICAgICAgIGNvbnN0IGlzSW5zdGFsbGVkID0gYXdhaXQgdXBsb2FkVG9VUE0ob3B0aW9ucy5iYXNlVXJsLCBmaWxlLCBhZG1pblVzZXJuYW1lLCBhZG1pblBhc3N3b3JkLCBhZG1pblBBVCwgZmFsc2UpO1xuICAgICAgICAgICAgaWYgKCFpc0luc3RhbGxlZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGluc3RhbGwgYXBwIGludG8gdGhlIGNsdXN0ZXIgdXNpbmcgdGhlIFVuaXZlcnNhbCBQbHVnaW4gTWFuYWdlciBSRVNUIEFQSScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgbmVlZCB0byByZXN0YXJ0IHRoZSBhcHBsaWNhdGlvbiBjb250YWluZXJcbiAgICAgICAgICAgIGlmIChyZXN0YXJ0QWZ0ZXJJbnN0YWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gQXNrIHRoZW0gbmljZWx5IGZvciB0aGUgaG9zdCBwcm9kdWN0XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvZHVjdCA9IG9wdGlvbnMucHJvZHVjdCB8fCBhd2FpdCBnZXRQcm9kdWN0KCk7XG4gICAgICAgICAgICAgICAgLy8gQXNrIGZvciB0aGUgQVdTIGNyZWRlbnRpYWxzXG4gICAgICAgICAgICAgICAgY29uc3QgW2F3c19hY2Nlc3Nfa2V5X2lkLCBhd3Nfc2VjcmV0X2FjY2Vzc19rZXldID0gYXdhaXQgZ2V0QVdTQ3JlZGVudGlhbHMocHJvZHVjdCwgb3B0aW9ucy5mb3JjZSk7XG4gICAgICAgICAgICAgICAgLy8gQXNrIGZvciB0aGUgZW52aXJvbm1lbnQgbmFtZVxuICAgICAgICAgICAgICAgIGNvbnN0IGVudmlyb25tZW50ID0gb3B0aW9ucy5lbnZpcm9ubWVudCB8fCBhd2FpdCBnZXRFbnZpcm9ubWVudE5hbWUoKTtcbiAgICAgICAgICAgICAgICAvLyBPaCByaWdodCwgd2UgYWxzbyBuZWVkIERDQVBUIGluIG9yZGVyIHRvIGJlIGFibGUgdG8gcmVzdGFydCB0aGUgY2x1c3RlclxuICAgICAgICAgICAgICAgIGNvbnN0IGN3ZCA9IGF3YWl0IGdldEFwdERpY3Rvcnkob3B0aW9ucy5jd2QsIGZhbHNlLCBvcHRpb25zLmZvcmNlKTtcbiAgICAgICAgICAgICAgICAvLyBXZSBhcmUgbm93IGdvaW5nIHRvIHJlc3RhcnQgdGhlIGNsdXN0ZXIgYW5kIGhvcGUgZm9yIHRoZSBiZXN0XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYCAgUmVzdGFydGluZyAke29wdGlvbnMucHJvZHVjdH0gdG8gZW5zdXJlIGFwcCBpbnN0YWxsYXRpb25gKTtcbiAgICAgICAgICAgICAgICBhd2FpdCByZXN0YXJ0Q2x1c3Rlcih7XG4gICAgICAgICAgICAgICAgICAgIGN3ZCxcbiAgICAgICAgICAgICAgICAgICAgcHJvZHVjdDogcHJvZHVjdCxcbiAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQ6IGVudmlyb25tZW50LFxuICAgICAgICAgICAgICAgICAgICBhd3NfYWNjZXNzX2tleV9pZDogYXdzX2FjY2Vzc19rZXlfaWQsXG4gICAgICAgICAgICAgICAgICAgIGF3c19zZWNyZXRfYWNjZXNzX2tleTogYXdzX3NlY3JldF9hY2Nlc3Nfa2V5LFxuICAgICAgICAgICAgICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gV2FpdCBmb3IgdGhlIHBsdWdpbiB0byBiZSBlbmFibGVkXG4gICAgICAgICAgICBjb25zdCBpc0VuYWJsZWQgPSBhd2FpdCB3YWl0Rm9yUGx1Z2luVG9CZUVuYWJsZWQoYWRkb25LZXksIG9wdGlvbnMuYmFzZVVybCwgYWRtaW5Vc2VybmFtZSwgYWRtaW5QYXNzd29yZCwgZmFsc2UpO1xuICAgICAgICAgICAgaWYgKCFpc0VuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBhcHAgY291bGQgbm90IGJlIGVuYWJsZWQgb24gdGhlIGNsdXN0ZXIsIHBsZWFzZSByZWZlciB0byB0aGUgYXBwbGljYXRpb24gbG9nIGZpbGVzIGZvciBtb3JlIGluZm9ybWF0aW9uJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBSZWdpc3RlciB0aGUgcHJvdmlkZWQgbGljZW5zZVxuICAgICAgICAgICAgY29uc3QgaXNMaWNlbnNlZCA9IGF3YWl0IHJlZ2lzdGVyTGljZW5zZShhZGRvbktleSwgYXBwTGljZW5zZSwgb3B0aW9ucy5iYXNlVXJsLCBhZG1pblVzZXJuYW1lLCBhZG1pblBhc3N3b3JkLCBmYWxzZSk7XG4gICAgICAgICAgICBpZiAoIWlzTGljZW5zZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBsaWNlbnNlIGNvdWxkIG5vdCBiZSBhcHBsaWVkIGZvciB0aGUgYXBwIG9uIHRoZSBjbHVzdGVyLCBwbGVhc2UgcmVmZXIgdG8gdGhlIGFwcGxpY2F0aW9uIGxvZyBmaWxlcyBmb3IgbW9yZSBpbmZvcm1hdGlvbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSB0ZW1wb3JhcnkgZmlsZVxuICAgICAgICAgICAgcm1TeW5jKGZpbGUsIHsgZm9yY2U6IHRydWUgfSk7XG4gICAgICAgICAgICAvLyBTdG9wIHRoZSBwcm9ncmVzcyBiYXJcbiAgICAgICAgICAgIHByb2dyZXNzQmFyLnN0b3AoKTtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXJJZCk7XG4gICAgICAgICAgICAvLyBUZWxsIHRoZW0gd2Ugc3VjY2VlZGVkXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhg4pyUIEZpbmlzaGVkIGluc3RhbGxpbmcgdGhlIGFwcCAoJHthZGRvbktleX0pYCk7XG4gICAgICAgICAgICAvLyBUaGV5IGNob3NlIHZpb2xlbmNlXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBSdWIgaXQgaW4gdGhlaXIgZmFjZVxuICAgICAgICAgICAgY29uc29sZS5sb2coYFxuICBZb3UgY2FuIG5vdyBpbnN0YWxsIHRoZSBhcHAgbWFudWFsbHkgaW50byB0aGUgY2x1c3Rlci5cbiAgUGxlYXNlIGdvIHRvIHRoZSBmb2xsb3dpbmcgcGFnZTpcbiAgICBcbiAgJHtvcHRpb25zLmJhc2VVcmx9L3BsdWdpbnMvc2VydmxldC91cG0/c291cmNlPXNpZGVfbmF2X21hbmFnZV9hZGRvbnNcbmApO1xuICAgICAgICAgICAgLy8gTWFrZSB0aGVtIGdyb3ZlbFxuICAgICAgICAgICAgY29uc3QgaXNJbnN0YWxsZWRNYW51YWxseSA9IGF3YWl0IGNvbmZpcm0oe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBQbGVhc2UgY29uZmlybSB0aGF0IHlvdSBoYXZlIGluc3RhbGxlZCB0aGUgYXBwIG1hbnVhbGx5YFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBJZiB0aGUgYXBwIGFpbid0IGluc3RhbGxlZCwgd2UgYWluJ3QgZG9pbmcgbm90aGluJy4gU28gd2UgYmV0dGVyIHRocm93IGEgaGlzc3kgZml0XG4gICAgICAgICAgICBpZiAoIWlzSW5zdGFsbGVkTWFudWFsbHkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0l0IGlzIHJlcXVpcmVkIHRvIGluc3RhbGwgdGhlIGFwcCB0byBydW4gdGhlIHNlY29uZCBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHRlc3QnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuZXhwb3J0IGNvbnN0IGdldFJlaW5kZXhQcm9ncmVzcyA9IGFzeW5jIChiYXNlVXJsKSA9PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5nZXQoYCR7YmFzZVVybH0vcmVzdC9hcGkvMi9yZWluZGV4YCwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBgQmFzaWMgJHtCdWZmZXIuZnJvbShgYWRtaW46YWRtaW5gKS50b1N0cmluZygnYmFzZTY0Jyl9YFxuICAgICAgICB9XG4gICAgfSkuY2F0Y2goKCkgPT4gbnVsbCk7XG4gICAgY29uc3QgY3VycmVudFRhc2sgPSAocmVzcG9uc2UgJiYgcmVzcG9uc2Uuc3RhdHVzID09PSAyMDApID8gcmVzcG9uc2UuZGF0YSA6IHt9O1xuICAgIGNvbnN0IHsgcHJvZ3Jlc3NVcmwsIGN1cnJlbnRQcm9ncmVzcywgc3VjY2VzcywgZmluaXNoVGltZSB9ID0gY3VycmVudFRhc2s7XG4gICAgY29uc3QgaXNGaW5pc2hlZCA9IGN1cnJlbnRQcm9ncmVzcyA9PT0gMTAwIHx8IHN1Y2Nlc3MgfHwgZmluaXNoVGltZSAhPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIFtwcm9ncmVzc1VybCwgc3VjY2VzcywgaXNGaW5pc2hlZF07XG59O1xuIiwiaW1wb3J0IHsgY29uZmlybSB9IGZyb20gJ0BpbnF1aXJlci9wcm9tcHRzJztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBQcmVzZXRzLCBTaW5nbGVCYXIgfSBmcm9tICdjbGktcHJvZ3Jlc3MnO1xuaW1wb3J0IGZraWxsIGZyb20gJ2ZraWxsJztcbmltcG9ydCB7IGV4aXN0c1N5bmMsIHJtU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCBwdXBwZXRlZXIgZnJvbSAncHVwcGV0ZWVyJztcbmltcG9ydCB7IGdldFJlaW5kZXhQcm9ncmVzcyB9IGZyb20gJy4vZ2V0UmVpbmRleFByb2dyZXNzJztcbmltcG9ydCB7IHdhaXRGb3JVc2VySW5wdXQgfSBmcm9tICcuL3dhaXRGb3JVc2VySW5wdXQnO1xuY29uc3QgcHJvZ3Jlc3NCYXIgPSBuZXcgU2luZ2xlQmFyKHtcbiAgICBmb3JtYXQ6ICcgIEx1Y2VuZSByZS1pbmRleCBbe2Jhcn1dIHtwZXJjZW50YWdlfSUgfCBFVEE6IHtyZW1haW5pbmd9bScsXG4gICAgaGlkZUN1cnNvcjogdHJ1ZVxufSwgUHJlc2V0cy5sZWdhY3kpO1xuZXhwb3J0IGNvbnN0IHJlaW5kZXggPSBhc3luYyAoYmFzZVVybCwgb3V0cHV0RGlyLCBmb3JjZSkgPT4ge1xuICAgIC8vIENoZWNrIGlmIHRoZSByZWluZGV4IHNjcmVlbnNob3QgYWxyZWFkeSBleGlzdHNcbiAgICBpZiAoZXhpc3RzU3luYyhqb2luKG91dHB1dERpciwgJ2x1Y2VuZS1yZWluZGV4LnBuZycpKSkge1xuICAgICAgICAvLyBBc2sgbmljZWx5IGlmIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBleGlzdGluZyB0ZXN0IHJlc3VsdHNcbiAgICAgICAgY29uc3Qgb3ZlcndyaXRlRXhpc3RpbmdSZXN1bHRzID0gZm9yY2UgfHwgYXdhaXQgY29uZmlybSh7XG4gICAgICAgICAgICBtZXNzYWdlOiAnVGhlcmUgYXJlIGV4aXN0aW5nIHJlaW5kZXggcmVzdWx0cywgZG8geW91IHdhbnQgdG8gb3ZlcndyaXRlIHRoZXNlIHJlc3VsdHM/J1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gSWYgd2UgbmVlZCB0byBvdmVyd3JpdGUgdGhlIHRlc3QgcmVzdWx0cywgd2Ugc2hvdWxkIGRvIHNvXG4gICAgICAgIGlmIChvdmVyd3JpdGVFeGlzdGluZ1Jlc3VsdHMpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdSZW1vdmluZyBleGlzdGluZyByZWluZGV4IHJlc3VsdHMnKTtcbiAgICAgICAgICAgIHJtU3luYyhqb2luKG91dHB1dERpciwgJ2x1Y2VuZS1yZWluZGV4LnBuZycpLCB7IGZvcmNlOiB0cnVlIH0pO1xuICAgICAgICAgICAgLy8gSWYgd2UgYXJlIG5vdCBhbGxvd2VkIHRvIG92ZXJ3cml0ZSB0aGUgdGVzdCByZXN1bHRzLCB0aGVyZSBpcyBubyBwb2ludCBpbiBydW5uaW5nIHRoaXMgdGVzdFxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYFNraXBwaW5nIEx1Y2VuZSBJbmRleCBUaW1pbmcgdGVzdCBleGVjdXRpb24sIGEgc3VjY2Vzc2Z1bCB0ZXN0IHJ1biB3YXMgYWxyZWFkeSBjb21wbGV0ZWRgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBBc2sgbmljZWx5IGlmIHdlIGNhbiBzdGFydFxuICAgIGNvbnN0IHsgdmFsdWUgfSA9IGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoYFByZXNzIGFueSBrZXkgdG8gc3RhcnQgdGhlIEx1Y2Vuc2UgSW5kZXggVGltaW5nIHRlc3QuLi5cbiAgKG9yICdzJyB0byBza2lwIGlmIHRoZSB0ZXN0IGlzIGFscmVhZHkgcnVubmluZylcbmAsIGZvcmNlKTtcbiAgICAvLyBDaGVjayBpZiB0aGV5IGFncmVlZCB0byBzdGFydGluZyB0aGUgcmVpbmRleFxuICAgIGlmICh2YWx1ZSAhPT0gJ3MnKSB7XG4gICAgICAgIC8vIFRoZXkgZGlkISBTbyBsZXQncyBzdGFydCBpdCB1c2luZyB0aGUgSmlyYSBSRVNUIEFQSVxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLnBvc3QoYCR7YmFzZVVybH0vcmVzdC9hcGkvMi9yZWluZGV4P3R5cGU9Rk9SRUdST1VORGAsIHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBgQmFzaWMgJHtCdWZmZXIuZnJvbShgYWRtaW46YWRtaW5gKS50b1N0cmluZygnYmFzZTY0Jyl9YFxuICAgICAgICAgICAgfVxuICAgICAgICB9KS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICAgICAgLy8gTGV0J3MgbWFrZSBzdXJlIHRoYXQgd2UgZ290IGEgcHJvcGVyIHJlc3BvbnNlXG4gICAgICAgIGlmIChyZXNwb25zZSA9PT0gbnVsbCB8fCByZXNwb25zZS5zdGF0dXMgIT09IDIwMikge1xuICAgICAgICAgICAgLy8gT2ggbm8sIHNvbWV0aGluZyB3ZW50IHdyb25nXG4gICAgICAgICAgICAvLyBObyByZWluZGV4IGlzIG5vIHN1Y2Nlc3NmdWwgdGVzdCwgc28gd2Ugc2hvdWxkIHRocm93IGEgaGlzc3kgZml0XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBzdGFydCBMdWNlbnNlIEluZGV4IFRpbWluZyB0ZXN0LCBjb3VsZCBub3QgcGVyZm9ybSByZWluZGV4Jyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gU3RhcnQgdGhlIGNsb2NrIVxuICAgIGNvbnN0IHN0YXJ0VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIC8vIFN0YXJ0IHRoZSBwcm9ncmVzcyBiYXIgdG8gY291bnQgZm9yIDYwIG1pbnV0ZXNcbiAgICBwcm9ncmVzc0Jhci5zdGFydCgzNjAwLCAwLCB7IHJlbWFpbmluZzogNjAgfSk7XG4gICAgLy8gUGxhY2Vob2xkZXIgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSByZWluZGV4IGlzIGZpbmlzaGVkXG4gICAgbGV0IGlzRmluaXNoZWQgPSBmYWxzZTtcbiAgICAvLyBXZSBhcmUgZ29pbmcgdG8gdHJ5IHRvIGdldCBhbiB1cGRhdGUgZnJvbSBKaXJhXG4gICAgd2hpbGUgKCFpc0ZpbmlzaGVkKSB7XG4gICAgICAgIC8vIEdldCBhbiB1cGRhdGUgZnJvbSB0aGUgc2VydmVyXG4gICAgICAgIGNvbnN0IFtwcm9ncmVzc1VybCwgc3VjY2VzcywgZmluaXNoZWRdID0gYXdhaXQgZ2V0UmVpbmRleFByb2dyZXNzKGJhc2VVcmwpO1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUgcmVpbmRleCBoYXMgZmluaXNoZWRcbiAgICAgICAgaWYgKCFmaW5pc2hlZCkge1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYXJlIHN0aWxsIHdpdGhpbiB0aGUgNjAgbWludXRlIHdpbmRvd1xuICAgICAgICAgICAgaWYgKHByb2dyZXNzQmFyLmdldFByb2dyZXNzKCkgPCBwcm9ncmVzc0Jhci5nZXRUb3RhbCgpKSB7XG4gICAgICAgICAgICAgICAgLy8gV2UgYXJlLCBzbyBsZXQncyBqdXN0IGluY3JlbWVudCB0aGUgcHJvZ3Jlc3MgYmFyIGFuZCB0cnkgYWdhaW5cbiAgICAgICAgICAgICAgICBwcm9ncmVzc0Jhci5pbmNyZW1lbnQoNjAsIHtcbiAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nOiA2MCAtIE1hdGguZmxvb3IoKCgobmV3IERhdGUoKS5nZXRUaW1lKCkgLSBzdGFydFRpbWUpIC8gMTAwMCkgLyA2MCkpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgMSBtaW51dGUgdW50aWwgd2UgcmV0cnlcbiAgICAgICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMSAqIDYwICogMTAwMCkpO1xuICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBubyBsb25nZXIgaW4gdGhlIDYwIG1pbnV0ZSB3aW5kb3csIG1hbnVhbCBhY3Rpb24gaXMgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAvLyB3aGVuIG9wZXJhdGluZyBpbiBub24taW50ZXJhY3RpdmUgbW9kZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIWZvcmNlKSB7XG4gICAgICAgICAgICAgICAgLy8gU3RvcCB0aGUgcHJvZ3Jlc3MgYmFyXG4gICAgICAgICAgICAgICAgcHJvZ3Jlc3NCYXIuc3RvcCgpO1xuICAgICAgICAgICAgICAgIC8vIFRlbGwgdGhlIHVzZXIgdGhhdCB0aGV5IG5lZWQgdG8gZG8gc29tZXRoaW5nXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFxuICBMdWNlbnNlIHJlLWluZGV4IGlzIHRha2luZyBhIGxvbmcgdGltZSB0byBmaW5pc2guIFBsZWFzZSBnbyB0byB0aGUgZm9sbG93aW5nIFVSTFxuICAke2Jhc2VVcmx9JHtwcm9ncmVzc1VybCB8fCAnL3NlY3VyZS9hZG1pbi9qaXJhL0luZGV4UHJvZ3Jlc3MuanNwYSd9XG5cbiAgYW5kIG1hbnVhbGx5IGNvbmZpcm0gdGhhdCB0aGUgcmUtaW5kZXggaGFzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcbmApO1xuICAgICAgICAgICAgICAgIC8vIEFzayB0aGUgdXNlciB0byBjb25maXJtIHRoZSByZWluZGV4IGhhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XG4gICAgICAgICAgICAgICAgaXNGaW5pc2hlZCA9IGF3YWl0IGNvbmZpcm0oeyBtZXNzYWdlOiAnSGFzIHRoZSByZWluZGV4IGNvbXBsZXRlZCBzdWNjZXNmdWxseT8nIH0pO1xuICAgICAgICAgICAgICAgIC8vIElmIHdlIGFyZSBpbiBub24taW50ZXJhY3RpdmUgbW9kZSwgd2UgaGF2ZSBubyBjaG9pY2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBvbmx5IG9wdGlvbiBsZWZ0IGlzIHRvIHRocm93IGEgaGlzc3kgZml0XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZS1pbmRleCBoYXMgbm90IGNvbXBsZXRlZCB3aXRoaW4gNjAgbWludXRlcywgdGVzdCBoYXMgZmFpbGVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGZpbmlzaGVkIHN1Y2Nlc3NmdWxseVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFzdWNjZXNzKSB7XG4gICAgICAgICAgICAvLyBTdG9wIHRoZSBwcm9ncmVzcyBiYXJcbiAgICAgICAgICAgIHByb2dyZXNzQmFyLnN0b3AoKTtcbiAgICAgICAgICAgIC8vIFRlbGwgdGhlIHVzZXIgdGhhdCBzb21ldGhpbmcgaGFzIGdvbmUgY29tcGxldGVseSB3cm9uZ1xuICAgICAgICAgICAgY29uc29sZS5sb2coYFxuICBMdWNlbnNlIHJlLWluZGV4IGZpbmlzaGVkIHVuc3VjY2VzZnVsbHkuIFBsZWFzZSBnbyB0byB0aGUgZm9sbG93aW5nIFVSTCBmb3IgbW9yZSBpbmZvcm1hdGlvbjpcbiAgJHtiYXNlVXJsfSR7cHJvZ3Jlc3NVcmwgfHwgJy9zZWN1cmUvYWRtaW4vamlyYS9JbmRleFByb2dyZXNzLmpzcGEnfVxuYCk7XG4gICAgICAgICAgICAvLyBOb3cgdGhyb3cgYSBoaXNzeSBmaXQgYW55d2F5XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0x1Y2VuY2UgSW5kZXggVGltaW5nIHRlc3QgZmFpbGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVXBkYXRlIHRoZSBsb29wIHZhcmlhYmxlXG4gICAgICAgIGlzRmluaXNoZWQgPSBmaW5pc2hlZDtcbiAgICB9XG4gICAgLy8gR2V0IHRoZSBsYXRlc3QgdXBkYXRlIG9uIHRoZSByZWluZGV4IHByb2dyZXNzXG4gICAgY29uc3QgW3Byb2dyZXNzVXJsXSA9IGF3YWl0IGdldFJlaW5kZXhQcm9ncmVzcyhiYXNlVXJsKTtcbiAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEgcHJvZ3Jlc3MgVVJMXG4gICAgaWYgKCFwcm9ncmVzc1VybCkge1xuICAgICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgcHJvZ3Jlc3MgVVJMLCBzb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgd2Ugc2hvdWxkIHRocm93IGEgaGlzc3kgZml0XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgdGhlIGxhdGVzdCBMdWNlbmNlIEluZGV4IFRpbWluZyB0ZXN0IHJlc3VsdHMnKTtcbiAgICB9XG4gICAgLy8gUmV0cnkgY291bnRlclxuICAgIGxldCByZXRyeUNvdW50ID0gMDtcbiAgICAvLyBQbGFjZWhvbGRlciBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHNjcmVlbnNob3Qgd2FzIHN1Y2Nlc3NmdWxseSBjcmVhdGVkXG4gICAgbGV0IHNjcmVlbnNob3RDcmVhdGVkID0gZmFsc2U7XG4gICAgY29uc29sZS5sb2coYFxuXG4gIE5hdmlnYXRpbmcgdG8gJHtiYXNlVXJsfSR7cHJvZ3Jlc3NVcmx9IHRvIGNyZWF0ZSBhIHNjcmVlbnNob3Qgb2YgdGhlIGNvbXBsZXRlZCByZWluZGV4IG9wZXJhdGlvblxuYCk7XG4gICAgLy8gTG9vcCB1bnRpbCB3ZSd2ZSBtYWRlIGEgc2NyZWVuIHNob3Qgb3IgdHJpZWQgaXQgNSB0aW1lcyAoaW5jbC4gb25lIHRpbWUgbWFudWFsbHkpXG4gICAgd2hpbGUgKCFzY3JlZW5zaG90Q3JlYXRlZCAmJiByZXRyeUNvdW50IDwgNSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gSWYgdGhlIHJldHJ5IGNvdW50IGlzIDQsIHRoaXMgbWVhbnMgdGhpcyBpcyBvdXIgbGFzdCByb2Rlb1xuICAgICAgICAgICAgaWYgKHJldHJ5Q291bnQgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBhcmUgaW4gbm9uLWludGVyYWN0aXZlIG1vZGVcbiAgICAgICAgICAgICAgICBpZiAoZm9yY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGxhc3Qgc3RlcCBpcyBtYW51YWwsIHdoaWNoIHdlIGNhbid0IGRvIGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlXG4gICAgICAgICAgICAgICAgICAgIC8vIHNvIG91ciBvbmx5IG9wdGlvbiBsZWZ0IGlzIHRvIHRocm93IGEgaGlzc3kgZml0XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGF1dG9tYXRpY2FsbHkgY2FwdHVyZSBhIHNjcmVlbiBzaG90IG9mIHRoZSBMdWNlbmUgUmVpbmRleCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBUZWxsIHRoZSB1c2VyIHRoZXkgaGF2ZSB0byBkbyBzb21ldGhpbmdcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgXG4gIFdlJ3ZlIHRyaWVkIHRvIGF1dG9tYXRpY2FsbHkgY3JlYXRlIGEgc2NyZWVuc2hvdCwgYnV0IHRoZSBwcm9jZXNzIHNlZW1zIHRvIGJlIHN0dWNrXG5cbiAgV2Ugd2lsbCBub3cgb3BlbiBhIGJyb3dzZXIgd2luZG93IGZvciB5b3UgdG8gZm9sbG93IHRoZSBhdXRvbWF0ZWQgc3RlcHMgYW5kIGludGVydmVuZVxuICB3aGVyZSBwb3NzaWJsZSAoZm9yIGluc3RhbmNlLCBieSBwcmVzc2luZyBhIGJ1dHRvbiBvciByZWxvYWRpbmcgYSBzY3JlZW4pXG5gKTtcbiAgICAgICAgICAgICAgICAvLyBOb3cgYXNrIHRoZW0gbmljZWx5IGlmIHRoZXkgYXJlIHJlYWR5XG4gICAgICAgICAgICAgICAgYXdhaXQgd2FpdEZvclVzZXJJbnB1dCgnUHJlc3MgYSBrZXkgdG8gb3BlbiB0aGUgYnJvd3NlciB3aW5kb3cuLi4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFN0YXJ0IHRoZSBicm93c2VyIHNlc3Npb25cbiAgICAgICAgICAgIGNvbnN0IGJyb3dzZXIgPSBhd2FpdCBwdXBwZXRlZXIubGF1bmNoKHtcbiAgICAgICAgICAgICAgICBoZWFkbGVzczogKCFmb3JjZSAmJiByZXRyeUNvdW50IDwgNCksXG4gICAgICAgICAgICAgICAgYXJnczogWyctLWRpc2FibGUtZmVhdHVyZXM9SHR0cHNGaXJzdEJhbGFuY2VkTW9kZUF1dG9FbmFibGUnXSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IHBhZ2Ugc2Vzc2lvblxuICAgICAgICAgICAgY29uc3QgcGFnZSA9IGF3YWl0IGJyb3dzZXIubmV3UGFnZSgpO1xuICAgICAgICAgICAgYXdhaXQgcGFnZS5zZXRWaWV3cG9ydCh7IHdpZHRoOiAxMDgwLCBoZWlnaHQ6IDEwMjQgfSk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIC8vIE9wZW4gdGhlIHJlaW5kZXggcHJvZ3Jlc3MgcGFnZVxuICAgICAgICAgICAgICAgIGF3YWl0IHBhZ2UuZ290byhgJHtiYXNlVXJsfSR7cHJvZ3Jlc3NVcmx9YCk7XG4gICAgICAgICAgICAgICAgLy8gTG9nIGluXG4gICAgICAgICAgICAgICAgY29uc3QgaGFzTGVnYWN5TG9naW5TY3JlZW4gPSBhd2FpdCBwYWdlLiQoJyNsb2dpbi1mb3JtLXVzZXJuYW1lJyk7XG4gICAgICAgICAgICAgICAgaWYgKGhhc0xlZ2FjeUxvZ2luU2NyZWVuKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHBhZ2UubG9jYXRvcignI2xvZ2luLWZvcm0tdXNlcm5hbWUnKS5maWxsKCdhZG1pbicpO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBwYWdlLmxvY2F0b3IoJyNsb2dpbi1mb3JtLXBhc3N3b3JkJykuZmlsbCgnYWRtaW4nKTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgcGFnZS5sb2NhdG9yKCcjbG9naW4tZm9ybS1zdWJtaXQnKS5jbGljaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgcGFnZS5sb2NhdG9yKCcjdXNlcm5hbWUtZmllbGQnKS5maWxsKCdhZG1pbicpO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBwYWdlLmxvY2F0b3IoJyNwYXNzd29yZC1maWVsZCcpLmZpbGwoJ2FkbWluJyk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHBhZ2UubG9jYXRvcignI2xvZ2luLWJ1dHRvbicpLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGF3YWl0IHBhZ2Uud2FpdEZvck5hdmlnYXRpb24oeyB3YWl0VW50aWw6IFsnZG9tY29udGVudGxvYWRlZCcsICdsb2FkJywgJ25ldHdvcmtpZGxlMCddLCB0aW1lb3V0OiA1ICogNjAgKiAxMDAwIH0pO1xuICAgICAgICAgICAgICAgIC8vIFdlYnN1ZG9cbiAgICAgICAgICAgICAgICBhd2FpdCBwYWdlLmxvY2F0b3IoJyNsb2dpbi1mb3JtLWF1dGhlbnRpY2F0ZVBhc3N3b3JkJykuZmlsbCgnYWRtaW4nKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBwYWdlLmxvY2F0b3IoJyNsb2dpbi1mb3JtLXN1Ym1pdCcpLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgLy8gWFNSRiB0b2tlbiBleHBpcmF0aW9uIHNuYWZ1XG4gICAgICAgICAgICAgICAgYXdhaXQgcGFnZS5sb2NhdG9yKCcjYXRsX3Rva2VuX3JldHJ5X2J1dHRvbicpLmNsaWNrKCkuY2F0Y2goKCkgPT4gbnVsbCk7XG4gICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UgYXJlIG9uIHRoZSByZWluZGV4IHBhZ2UgYW5kIHRoYXQgaXQgaXMgbG9hZGVkXG4gICAgICAgICAgICAgICAgYXdhaXQgcGFnZS53YWl0Rm9yU2VsZWN0b3IoJyNhY2tub3dsZWRnZV9zdWJtaXQnKTtcbiAgICAgICAgICAgICAgICAvLyBNYWtlIHRoZSBzY3JlZW4gc2hvdFxuICAgICAgICAgICAgICAgIGF3YWl0IHBhZ2Uuc2NyZWVuc2hvdCh7XG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGpvaW4ob3V0cHV0RGlyLCAnbHVjZW5lLXJlaW5kZXgucG5nJylcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSBoYXZlIGNhcHR1cmVkIHRoZSBzY3JlZW4gc2hvdCBpbiB0aGUgb3V0cHV0IGRpcmVjdG9yeVxuICAgICAgICAgICAgICAgIHNjcmVlbnNob3RDcmVhdGVkID0gZXhpc3RzU3luYyhqb2luKG91dHB1dERpciwgJ2x1Y2VuZS1yZWluZGV4LnBuZycpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBzY3JlZW5zaG90IG9mIHRoZSBjdXJyZW50IHBhZ2UgdG8gYXNzaXN0IHdpdGggZGVidWdnaW5nXG4gICAgICAgICAgICAgICAgLy8gSWdub3JlIHRoZSBlcnJvciBpZiB3ZSBmYWlsIHRvIGNyZWF0ZSBhIHNjcmVlbnNob3RcbiAgICAgICAgICAgICAgICBhd2FpdCBwYWdlLnNjcmVlbnNob3Qoe1xuICAgICAgICAgICAgICAgICAgICBwYXRoOiBqb2luKG91dHB1dERpciwgYGx1Y2VuZS1yZWluZGV4LWVycm9yLSR7cmV0cnlDb3VudH0ucG5nYClcbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoKSA9PiB7IH0pO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYCAgQ291bGQgbm90IGdldCBhIHNjcmVlbiBzaG90IG9mIHRoZSBsdWNlbmUgaW5kZXhpbmcgcmVzdWx0LCByZXRyeWluZy4uLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgLy8gQ2xvc2UgdGhlIGJyb3dzZXIgd2luZG93XG4gICAgICAgICAgICAgICAgYXdhaXQgYnJvd3Nlci5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIC8vIE5vIEkgbWVhbiwgcmVhbGx5IGNsb3NlIGl0XG4gICAgICAgICAgICAgICAgYXdhaXQgZmtpbGwoJ0Nocm9tZScpLmNhdGNoKCgpID0+IG51bGwpO1xuICAgICAgICAgICAgICAgIGF3YWl0IGZraWxsKCdjaHJvbWUnKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBma2lsbCgnQ2hyb21pdW0nKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBma2lsbCgnY2hyb21pdW0nKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coYCAgQ291bGQgbm90IGdldCBhIHNjcmVlbiBzaG90IG9mIHRoZSBsdWNlbmUgaW5kZXhpbmcgcmVzdWx0LCByZXRyeWluZy4uLmApO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgcmV0cnlDb3VudCsrO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIElmIHdlIGNvdWxkIG5vdCBjcmVhdGUgdGhlIHNjcmVlbnNob3QsIHRocm93IGEgaGlzc3kgZml0IVxuICAgIGlmICghc2NyZWVuc2hvdENyZWF0ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gY2FwdHVyZSB0aGUgbHVjZW5lIGluZGV4aW5nIHJlc3VsdHMnKTtcbiAgICB9XG4gICAgLy8gT3RoZXJ3aXNlIHdlIHNob3VsZCBzaG93IGEgaGFwcHkgbWVzc2FnZVxuICAgIGNvbnNvbGUubG9nKGBcbiAg4pyUIEx1Y2VuY2UgSW5kZXggVGltaW5nIHRlc3QgZm9yZWdyb3VuZCBpbmRleGluZyBvZiBKaXJhIGhhcyBjb21wbGV0ZWRcbiAgU2NyZWVuc2hvdCBsb2NhdGlvbjogJHtqb2luKG91dHB1dERpciwgJ2x1Y2VuZS1yZWluZGV4LnBuZycpfWApO1xufTtcbiIsImltcG9ydCB7IG1rZGlyU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IGVtcHR5TGluZSB9IGZyb20gJy4uL21lc3NhZ2VzJztcbmltcG9ydCB7IGluc3RhbGwgfSBmcm9tICcuL2RjYXB0JztcbmltcG9ydCB7IGdldEFwdERpY3RvcnkgfSBmcm9tICcuL2dldEFwdERpcmVjdG9yeSc7XG5pbXBvcnQgeyBnZXRBV1NDcmVkZW50aWFscyB9IGZyb20gJy4vZ2V0QVdTQ3JlZGVudGlhbHMnO1xuaW1wb3J0IHsgZ2V0Q2x1c3RlclVSTCB9IGZyb20gJy4vZ2V0Q2x1c3RlclVSTCc7XG5pbXBvcnQgeyBpbnN0YWxsQXBwSW5DbHVzdGVyIH0gZnJvbSAnLi9pbnN0YWxsQXBwSW5DbHVzdGVyJztcbmltcG9ydCB7IHBlcnNpc3RDbHVzdGVyQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vcGVyc2lzdENsdXN0ZXJDb25maWd1cmF0aW9uJztcbmltcG9ydCB7IHBlcnNpc3RBV1NDcmVkZW50aWFscyB9IGZyb20gJy4vcGVyc2lzdHNBV1NDcmVkZW50aWFscyc7XG5pbXBvcnQgeyByZWluZGV4IH0gZnJvbSAnLi9yZWluZGV4JztcbmltcG9ydCB7IHdhaXRGb3JVc2VySW5wdXQgfSBmcm9tICcuL3dhaXRGb3JVc2VySW5wdXQnO1xuZXhwb3J0IGNvbnN0IHJ1bkx1Y2VuZVRpbWluZ1Rlc3QgPSBhc3luYyAob3B0aW9ucywgbWVzc2FnZXMpID0+IHtcbiAgICAvLyBTaG93IHRoZSB3ZWxjb21lIG1lc3NhZ2VcbiAgICBjb25zb2xlLmxvZyhtZXNzYWdlcy5oZWFkZXIob3B0aW9ucy5wcm9kdWN0LCBvcHRpb25zLnN0YWdlKSk7XG4gICAgLy8gV2UgYXJlIGdvaW5nIHRvIHJlY29uZmlybSB0aGF0IHdlIGFyZSBydW5uaW5nIG9uIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKGFuZCBmZXRjaCBpdCBpZiByZXF1aXJlZClcbiAgICBjb25zdCBjd2QgPSBhd2FpdCBnZXRBcHREaWN0b3J5KG9wdGlvbnMuY3dkLCB0cnVlLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBHZXQgdGhlIHBhdGggdG8gdGhlICdwcml2YXRlJyBzdWJkaXJlY3Rvcnkgb2YgQVBUIGluIHdoaWNoIHdlIHN0b3JlIHRoZSB0ZXN0IHJlc3VsdHNcbiAgICBjb25zdCBydW5PdXRwdXREaXIgPSBqb2luKG9wdGlvbnMub3V0cHV0RGlyLCBgcmVpbmRleGApO1xuICAgIC8vIE1ha2Ugc3VyZSB0aGUgb3V0cHV0IGRpcmVjdG9yeSBleGlzdHNcbiAgICBta2RpclN5bmMocnVuT3V0cHV0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAvLyBBc2sgZm9yIHRoZSBBV1MgY3JlZGVudGlhbHNcbiAgICBjb25zdCBbYXdzX2FjY2Vzc19rZXlfaWQsIGF3c19zZWNyZXRfYWNjZXNzX2tleV0gPSAob3B0aW9ucy5hd3NfYWNjZXNzX2tleV9pZCAmJiBvcHRpb25zLmF3c19zZWNyZXRfYWNjZXNzX2tleSlcbiAgICAgICAgPyBbb3B0aW9ucy5hd3NfYWNjZXNzX2tleV9pZCwgb3B0aW9ucy5hd3Nfc2VjcmV0X2FjY2Vzc19rZXldXG4gICAgICAgIDogYXdhaXQgZ2V0QVdTQ3JlZGVudGlhbHMob3B0aW9ucy5wcm9kdWN0LCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBXcml0ZSBBV1MgY3JlZGVudGlhbHMgdG8gZGlza1xuICAgIHBlcnNpc3RBV1NDcmVkZW50aWFscyhjd2QsIGF3c19hY2Nlc3Nfa2V5X2lkLCBhd3Nfc2VjcmV0X2FjY2Vzc19rZXkpO1xuICAgIC8vIENoZWNrIGlmIHdlIGFscmVhZHkgaGF2ZSBhIHByb3Zpc2lvbmVkIGNsdXN0ZXIgYXZhaWxhYmxlXG4gICAgLy8gSWYgbm90LCB3ZSBzaG91bGQgcHJvdmlzaW9uIGl0IGFzIHBhcnQgb2YgdGhlIHRlc3QgcnVuXG4gICAgaWYgKCFvcHRpb25zLmJhc2VVcmwpIHtcbiAgICAgICAgLy8gSW5mb3JtIHRoZSB1c2VyIHRoYXQgd2Ugd2lsbCBub3cgc3RhcnQgdGhlIHNjYWxhYmlsaXR5IGJlbmNobWFya1xuICAgICAgICBjb25zb2xlLmxvZyhtZXNzYWdlcy5yZWFkeUZvclByb3Zpc2lvbmluZyk7XG4gICAgICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIHByZXBhcmUgdGhlIEFXUyBlbnZpcm9ubWVudCBmb3IgcGVyZm9ybWFuY2UgYmVuY2htYXJrIHRlc3RpbmcuLi4nLCBvcHRpb25zLmZvcmNlKTtcbiAgICAgICAgZW1wdHlMaW5lKCk7XG4gICAgICAgIC8vIFdyaXRlIFRlcnJhZm9ybSB2YXJpYWJsZXMgdG8gZGlzayAob25lLW5vZGUgY2x1c3RlcilcbiAgICAgICAgcGVyc2lzdENsdXN0ZXJDb25maWd1cmF0aW9uKHtcbiAgICAgICAgICAgIHByb2R1Y3Q6IG9wdGlvbnMucHJvZHVjdCxcbiAgICAgICAgICAgIHRhZzogb3B0aW9ucy50YWcsXG4gICAgICAgICAgICBjd2QsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCxcbiAgICAgICAgICAgIG1vbml0b3Jpbmc6IG9wdGlvbnMubW9uaXRvcmluZyxcbiAgICAgICAgICAgIGxpY2Vuc2U6IG9wdGlvbnMubGljZW5zZSxcbiAgICAgICAgICAgIG5vZGVzOiAxXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBSdW4gdGhlIERDQVBUIGluc3RhbGwgc2NyaXB0XG4gICAgICAgIGF3YWl0IGluc3RhbGwoY3dkKTtcbiAgICB9XG4gICAgLy8gR2V0IHRoZSBsb2FkIGJhbGFuY2VyIFVSTCBmb3IgdGhlIGNsdXN0ZXJcbiAgICBjb25zdCBiYXNlVXJsID0gb3B0aW9ucy5iYXNlVXJsIHx8IGF3YWl0IGdldENsdXN0ZXJVUkwoY3dkLCBvcHRpb25zLnByb2R1Y3QpO1xuICAgIC8vIEluc3RhbGwgdGhlIGFwcCBpbnRvIHRoZSBjbHVzdGVyXG4gICAgYXdhaXQgaW5zdGFsbEFwcEluQ2x1c3Rlcih7XG4gICAgICAgIGJhc2VVcmwsXG4gICAgICAgIGFwcEtleTogb3B0aW9ucy5hcHBLZXksXG4gICAgICAgIGFyY2hpdmU6IG9wdGlvbnMuYXJjaGl2ZSxcbiAgICAgICAgbGljZW5zZTogb3B0aW9ucy5hcHBMaWNlbnNlLFxuICAgICAgICB1c2VybmFtZTogJ2FkbWluJyxcbiAgICAgICAgcGFzc3dvcmQ6ICdhZG1pbicsXG4gICAgICAgIHJlc3RhcnRBZnRlckluc3RhbGw6IG9wdGlvbnMucmVzdGFydEFmdGVySW5zdGFsbCxcbiAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICB9KTtcbiAgICAvLyBJbmZvcm0gdGhlIHVzZXIgdGhhdCB3ZSB3aWxsIG5vdyBzdGFydCB0aGUgTHVjZW5lIGluZGV4IHRlc3RcbiAgICBjb25zb2xlLmxvZyhtZXNzYWdlcy5zdGFydFRlc3QpO1xuICAgIC8vIE9rLCB3ZSdyZSByZWFkeSB0byBydW4gdGhlIEx1Y2VuZSBJbmRleCBUaW1pbmcgdGVzdFxuICAgIGF3YWl0IHJlaW5kZXgoYmFzZVVybCwgcnVuT3V0cHV0RGlyLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBDZWxlYnJhdGUgb3VyIHN1Y2Nlc3MhXG4gICAgY29uc29sZS5sb2cobWVzc2FnZXMuc3VjY2Vzcyk7XG59O1xuIiwiaW1wb3J0IHsgaW5wdXQgfSBmcm9tICdAaW5xdWlyZXIvcHJvbXB0cyc7XG5leHBvcnQgY29uc3QgZ2V0RHVyYXRpb24gPSAoZm9yY2UpID0+IHtcbiAgICBpZiAoZm9yY2UpIHtcbiAgICAgICAgcmV0dXJuICc0NW0nO1xuICAgIH1cbiAgICByZXR1cm4gaW5wdXQoe1xuICAgICAgICBtZXNzYWdlOiBgSG93IGxvbmcgc2hvdWxkIHRoZSB0ZXN0IHJ1bj9gLFxuICAgICAgICBkZWZhdWx0OiAnNDVtJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9KTtcbn07XG4iLCJpbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tICdmcyc7XG5leHBvcnQgY29uc3QgcmVhZExpbmVzSW5GaWxlID0gKHBhdGgsIGNhbGxiYWNrKSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSByZWFkRmlsZVN5bmMocGF0aCwgJ3V0Zi04Jyk7XG4gICAgY29uc3QgbGluZXMgPSBjb250ZW50cy5zcGxpdCgnXFxuJyk7XG4gICAgbGluZXMuZm9yRWFjaChjYWxsYmFjayk7XG59O1xuIiwiaW1wb3J0IHsgZXhpc3RzU3luYywgbHN0YXRTeW5jLCByZWFkZGlyU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IHJlYWRMaW5lc0luRmlsZSB9IGZyb20gJy4uLy4uL2hlbHBlcnMvcmVhZExpbmVzSW5GaWxlJztcbmV4cG9ydCBjb25zdCBnZXRSZXN1bHRzID0gKGJhc2VEaXIpID0+IHtcbiAgICAvLyBQbGFjZWhvbGRlciBmb3IgdGhlIHRlc3QgcmVzdWx0IGRpcmVjdG9yeVxuICAgIGxldCByZXN1bHRzRGlyID0gZXhpc3RzU3luYyhqb2luKGJhc2VEaXIsICdyZXN1bHRzX3N1bW1hcnkubG9nJykpID8gYmFzZURpciA6IG51bGw7XG4gICAgaWYgKCFyZXN1bHRzRGlyKSB7XG4gICAgICAgIC8vIExldCdzIGdvIGZpbmQgb3VyIHRlc3QgcmVzdWx0IGRpcmVjdG9yeVxuICAgICAgICByZWFkZGlyU3luYyhiYXNlRGlyKS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBmb3VuZCBhcmUgZGlyZWN0b3J5LCBubyBuZWVkIHRvIGNvbnRpbnVlIGxvb2tpbmdcbiAgICAgICAgICAgIGlmIChyZXN1bHRzRGlyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gR2V0IHRoZSBzdGF0aXN0aWNzIGZvciB0aGlzIGVudHJ5XG4gICAgICAgICAgICBjb25zdCBzdGF0ID0gbHN0YXRTeW5jKGpvaW4oYmFzZURpciwgaXRlbSkpO1xuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhpcyBpcyBhIHRlc3QgcmVzdWx0IGRpcmVjdG9yeVxuICAgICAgICAgICAgaWYgKHN0YXQuaXNEaXJlY3RvcnkoKSAmJiBleGlzdHNTeW5jKGpvaW4oYmFzZURpciwgaXRlbSwgJ3Jlc3VsdHNfc3VtbWFyeS5sb2cnKSkpIHtcbiAgICAgICAgICAgICAgICAvLyBXZSd2ZSBmb3VuZCBpdCFcbiAgICAgICAgICAgICAgICByZXN1bHRzRGlyID0gam9pbihiYXNlRGlyLCBpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgZm91bmQgYSB0ZXN0IGRpcmVjdG9yeSwgYW5kIGlmIG5vdCB3ZSBzaG91bGQgdGhyb3cgYSBoaXNzeSBmaXRcbiAgICBpZiAocmVzdWx0c0RpciA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgdGhlIHRlc3QgcmVzdWx0cyBpbiB0aGUgcHJvdmlkZWQgZGlyZWN0b3J5ICgke2Jhc2VEaXJ9KWApO1xuICAgIH1cbiAgICAvLyBQbGFjZWhvbGRlciBmb3IgdGhlIHRlc3QgcmVzdWx0c1xuICAgIGNvbnN0IHJlc3VsdHMgPSB7XG4gICAgICAgICdwYXRoJzogcmVzdWx0c0RpcixcbiAgICAgICAgJ1N1bW1hcnkgcnVuIHN0YXR1cyc6IHVuZGVmaW5lZCxcbiAgICAgICAgJ0FwcGxpY2F0aW9uIG5vZGVzIGNvdW50JzogdW5kZWZpbmVkLFxuICAgICAgICAnRmluaXNoZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICdDb21wbGlhbnQnOiB1bmRlZmluZWQsXG4gICAgICAgICdTdWNjZXNzJzogdW5kZWZpbmVkLFxuICAgICAgICAnSGFzIGFwcC1zcGVjaWZpYyBhY3Rpb25zJzogdW5kZWZpbmVkXG4gICAgfTtcbiAgICAvLyBMb29wIG92ZXIgdGhlIHJlc3VsdCBzdW1tYXJ5IGFuZCBnZXQgdGhvc2UgZGFtbiB0ZXN0IHJlc3VsdHNcbiAgICByZWFkTGluZXNJbkZpbGUoam9pbihyZXN1bHRzRGlyLCAncmVzdWx0c19zdW1tYXJ5LmxvZycpLCAobGluZSkgPT4ge1xuICAgICAgICBPYmplY3Qua2V5cyhyZXN1bHRzKS5mb3JFYWNoKGhlYWRlciA9PiB7XG4gICAgICAgICAgICBpZiAobGluZS5zdGFydHNXaXRoKGhlYWRlcikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBsaW5lLnN1YnN0cmluZyhoZWFkZXIubGVuZ3RoKS50cmltKCk7XG4gICAgICAgICAgICAgICAgcmVzdWx0c1toZWFkZXJdID0gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0cztcbn07XG4iLCJpbXBvcnQgeyBjb25maXJtIH0gZnJvbSAnQGlucXVpcmVyL3Byb21wdHMnO1xuaW1wb3J0IHsgZXhpc3RzU3luYywgbWtkaXJTeW5jLCByZWFkZGlyU3luYywgcm1TeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuZXhwb3J0IGNvbnN0IGdldFJlc3VsdHNEaXJlY3RvcnkgPSBhc3luYyAoY3dkLCBwcm9kdWN0LCBmb3JjZSkgPT4ge1xuICAgIC8vIEdldCB0aGUgcGF0aCB0byB0aGUgcmVzdWx0cyBkaXJlY3RvcnlcbiAgICBjb25zdCBwYXRoID0gam9pbihjd2QsICdhcHAnLCAncmVzdWx0cycsIHByb2R1Y3QpO1xuICAgIC8vIENoZWNrIGlmIHRoZSBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHNcbiAgICBpZiAoZXhpc3RzU3luYyhwYXRoKSkge1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUgZGlyZWN0b3J5IGlzIGVtcHR5XG4gICAgICAgIGNvbnN0IGlzRW1wdHkgPSByZWFkZGlyU3luYyhwYXRoKS5sZW5ndGggPD0gMDtcbiAgICAgICAgaWYgKCFpc0VtcHR5KSB7XG4gICAgICAgICAgICAvLyBJZiB3ZSBhcmUgaW4gbm9uLWludGVyYWN0aXZlIG1vZGUsIG1ha2Ugc3VyZSB0byBhc2sgbmljZWx5IGlmIHdlIGNhbiByZW1vdmUgdGhlIHJlc3VsdHNcbiAgICAgICAgICAgIGlmICghZm9yY2UpIHtcbiAgICAgICAgICAgICAgICAvLyBUZWxsIHRoZSB1c2VyIHRoZXJlIGFyZSBzdGlsbCBwcmV2aW91cyByZXN1bHRzIGluIHRoZSBkaXJlY3RvcnlcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgXG4gIFRoZXJlIGFyZSBzdGlsbCByZXN1bHRzIGZyb20gcHJldmlvdXMgdGVzdCBydW5zIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeTpcbiAgJHtwYXRofVxuYCk7XG4gICAgICAgICAgICAgICAgLy8gQXNrIGZvciBjb25maXJtYXRpb24gdGhhdCB0aGV5IHdpbGwgYmUgcmVtb3ZlZFxuICAgICAgICAgICAgICAgIGNvbnN0IGNhblJlbW92ZSA9IGF3YWl0IGNvbmZpcm0oe1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnSXMgaXQgT0sgaWYgd2UgcmVtb3ZlIGFsbCBwcmV2aW91cyByZXN1bHRzPycsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgbm90IGFsbG93ZWQgdG8gcmVtb3ZlIHRoZW0sIHRocm93IGEgaGlzc3kgZml0XG4gICAgICAgICAgICAgICAgaWYgKCFjYW5SZW1vdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgdGVzdCBjYW4gb25seSBiZSBleGVjdXRlZCBpZiBhbGwgcHJldmlvdXMgcmVzdWx0cyBoYXZlIGJlZW4gcmVtb3ZlZCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgcHJldmlvdXMgcmVzdWx0c1xuICAgICAgICAgICAgcm1TeW5jKHBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBkaXJlY3RvcnkgZXhpc3RzXG4gICAgbWtkaXJTeW5jKHBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIC8vIFJldHVybiB0aGUgcGF0aCB0byB0aGUgcmVzdWx0cyBkaXJlY3RvcnlcbiAgICByZXR1cm4gcGF0aDtcbn07XG4iLCJpbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyByZXBsYWNlTGluZXNJbkZpbGUgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3JlcGxhY2VMaW5lc0luRmlsZSc7XG5pbXBvcnQgeyB3YWl0Rm9yVXNlcklucHV0IH0gZnJvbSAnLi93YWl0Rm9yVXNlcklucHV0JztcbmV4cG9ydCBjb25zdCBwZXJzaXN0VGVzdENvbmZpZ3VyYXRpb24gPSBhc3luYyAoY3dkLCBwcm9kdWN0LCBiYXNlVXJsLCBkdXJhdGlvbiwgdXNlSk1ldGVyLCB1c2VMb2N1c3QsIHF1ZXJ5ID0gJycsIGZvcmNlKSA9PiB7XG4gICAgY29uc3QgcHJvZHVjdFVSSSA9IG5ldyBVUkwoYmFzZVVybCk7XG4gICAgY29uc3QgcHJvdG9jb2wgPSBwcm9kdWN0VVJJLnByb3RvY29sLnN0YXJ0c1dpdGgoJ2h0dHBzJykgPyAnaHR0cHMnIDogJ2h0dHAnO1xuICAgIGNvbnN0IHBvcnQgPSBwcm90b2NvbCA9PT0gJ2h0dHAnID8gJzgwJyA6ICc0NDMnO1xuICAgIGNvbnNvbGUubG9nKGBcbiAgVGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiB3aWxsIGJlIHVwZGF0ZWQgaW4gdGhlICR7cHJvZHVjdH0ueW1sIGZpbGU6XG5cbiAgYXBwbGljYXRpb25faG9zdG5hbWUgPSAke3Byb2R1Y3RVUkkuaG9zdH1cbiAgYXBwbGljYXRpb25fcHJvdG9jb2wgPSAke3Byb3RvY29sfVxuICBhcHBsaWNhdGlvbl9wb3J0ID0gJHtwb3J0fVxuICBhcHBsaWNhdGlvbl9wb3N0Zml4ID0gJHtwcm9kdWN0VVJJLnBhdGhuYW1lfVxuICB0ZXN0X2R1cmF0aW9uID0gJHtkdXJhdGlvbn1cbiAgbG9hZF9leGVjdXRvciA9ICR7dXNlTG9jdXN0ID8gJ2xvY3VzdCcgOiAnam1ldGVyJ31cbiAgc3RhbmRhbG9uZV9leHRlbnNpb24gPSAke3VzZUxvY3VzdCB8fCB1c2VKTWV0ZXIgPyAnMScgOiAnMCd9XG4gIGN1c3RvbV9kYXRhc2V0X3F1ZXJ5ID0gJHtxdWVyeX1cblxuICBUaGUgY29uZmlndXJhdGlvbiB3aWxsIGJlIHdyaXR0ZW4gdG8gZGlzayBhbmQgb3ZlcndyaXRlIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb246XG4gICR7am9pbihjd2QsICdhcHAnLCBgJHtwcm9kdWN0fS55bWxgKX1cbmApO1xuICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIGNvbnRpbnVlLi4uJywgZm9yY2UpO1xuICAgIHJlcGxhY2VMaW5lc0luRmlsZShqb2luKGN3ZCwgJ2FwcCcsIGAke3Byb2R1Y3R9LnltbGApLCAobGluZSkgPT4ge1xuICAgICAgICBpZiAobGluZS5zdGFydHNXaXRoKCcgICAgYXBwbGljYXRpb25faG9zdG5hbWU6JykpIHtcbiAgICAgICAgICAgIHJldHVybiBgICAgIGFwcGxpY2F0aW9uX2hvc3RuYW1lOiAke3Byb2R1Y3RVUkkuaG9zdH1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aCgnICAgIGFwcGxpY2F0aW9uX3Byb3RvY29sOicpKSB7XG4gICAgICAgICAgICByZXR1cm4gYCAgICBhcHBsaWNhdGlvbl9wcm90b2NvbDogJHtwcm90b2NvbH1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aChgICAgIGFwcGxpY2F0aW9uX3BvcnQ6YCkpIHtcbiAgICAgICAgICAgIHJldHVybiBgICAgIGFwcGxpY2F0aW9uX3BvcnQ6ICR7cG9ydH1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aChgICAgIGxvYWRfZXhlY3V0b3I6YCkpIHtcbiAgICAgICAgICAgIHJldHVybiBgICAgIGxvYWRfZXhlY3V0b3I6ICR7dXNlTG9jdXN0ID8gJ2xvY3VzdCcgOiAnam1ldGVyJ31gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aChgICAgIHN0YW5kYWxvbmVfZXh0ZW5zaW9uOmApKSB7XG4gICAgICAgICAgICByZXR1cm4gYCAgICBzdGFuZGFsb25lX2V4dGVuc2lvbjogJHt1c2VMb2N1c3QgfHwgdXNlSk1ldGVyID8gJzEnIDogJzAnfWA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobGluZS5zdGFydHNXaXRoKGAgICAgdGVzdF9kdXJhdGlvbjpgKSkge1xuICAgICAgICAgICAgcmV0dXJuIGAgICAgdGVzdF9kdXJhdGlvbjogJHtkdXJhdGlvbn1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aChgICAgIGN1c3RvbV9kYXRhc2V0X3F1ZXJ5OmApKSB7XG4gICAgICAgICAgICByZXR1cm4gYCAgICBjdXN0b21fZGF0YXNldF9xdWVyeTogJHtxdWVyeX1gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsaW5lO1xuICAgIH0pO1xuICAgIGNvbnNvbGUubG9nKGBcbuKclCBDb25maWd1cmF0aW9uIHdyaXR0ZW4gdG8gJHtwcm9kdWN0fS55bWxgKTtcbn07XG4iLCJpbXBvcnQgeyBjb25maXJtIH0gZnJvbSAnQGlucXVpcmVyL3Byb21wdHMnO1xuaW1wb3J0IHsgZXhpc3RzU3luYywgbWtkaXJTeW5jLCBybVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBtb3ZlIH0gZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgZW1wdHlMaW5lIH0gZnJvbSAnLi4vbWVzc2FnZXMnO1xuaW1wb3J0IHsgaW5zdGFsbCwgcnVuVGVzdCB9IGZyb20gJy4vZGNhcHQnO1xuaW1wb3J0IHsgZ2V0QXB0RGljdG9yeSB9IGZyb20gJy4vZ2V0QXB0RGlyZWN0b3J5JztcbmltcG9ydCB7IGdldEFXU0NyZWRlbnRpYWxzIH0gZnJvbSAnLi9nZXRBV1NDcmVkZW50aWFscyc7XG5pbXBvcnQgeyBnZXRDbHVzdGVyVVJMIH0gZnJvbSAnLi9nZXRDbHVzdGVyVVJMJztcbmltcG9ydCB7IGdldER1cmF0aW9uIH0gZnJvbSAnLi9nZXREdXJhdGlvbic7XG5pbXBvcnQgeyBnZXRSZXN1bHRzIH0gZnJvbSAnLi9nZXRSZXN1bHRzJztcbmltcG9ydCB7IGdldFJlc3VsdHNEaXJlY3RvcnkgfSBmcm9tICcuL2dldFJlc3VsdHNEaXJlY3RvcnknO1xuaW1wb3J0IHsgZ2V0UnVuRm9yU3RhZ2UgfSBmcm9tICcuL2dldFJ1bkZvclN0YWdlJztcbmltcG9ydCB7IGluc3RhbGxBcHBJbkNsdXN0ZXIgfSBmcm9tICcuL2luc3RhbGxBcHBJbkNsdXN0ZXInO1xuaW1wb3J0IHsgcGVyc2lzdENsdXN0ZXJDb25maWd1cmF0aW9uIH0gZnJvbSAnLi9wZXJzaXN0Q2x1c3RlckNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHsgcGVyc2lzdEFXU0NyZWRlbnRpYWxzIH0gZnJvbSAnLi9wZXJzaXN0c0FXU0NyZWRlbnRpYWxzJztcbmltcG9ydCB7IHBlcnNpc3RUZXN0Q29uZmlndXJhdGlvbiB9IGZyb20gJy4vcGVyc2lzdFRlc3RDb25maWd1cmF0aW9uJztcbmltcG9ydCB7IHdhaXRGb3JVc2VySW5wdXQgfSBmcm9tICcuL3dhaXRGb3JVc2VySW5wdXQnO1xuZXhwb3J0IGNvbnN0IHJ1blBlcmZvcm1hbmNlVGVzdCA9IGFzeW5jIChvcHRpb25zLCBtZXNzYWdlcykgPT4ge1xuICAgIC8vIFNob3cgdGhlIHdlbGNvbWUgbWVzc2FnZVxuICAgIGNvbnNvbGUubG9nKG1lc3NhZ2VzLmhlYWRlcihvcHRpb25zLnByb2R1Y3QsIG9wdGlvbnMuc3RhZ2UpKTtcbiAgICAvLyBXZSBhcmUgZ29pbmcgdG8gcmVjb25maXJtIHRoYXQgd2UgYXJlIHJ1bm5pbmcgb24gdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiAoYW5kIGZldGNoIGl0IGlmIHJlcXVpcmVkKVxuICAgIGNvbnN0IGN3ZCA9IGF3YWl0IGdldEFwdERpY3Rvcnkob3B0aW9ucy5jd2QsIHRydWUsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIEdldCB0aGUgcGF0aCB0byB0aGUgJ3ByaXZhdGUnIHN1YmRpcmVjdG9yeSBvZiBBUFQgaW4gd2hpY2ggd2Ugc3RvcmUgdGhlIHRlc3QgcmVzdWx0c1xuICAgIGNvbnN0IHJ1bk91dHB1dERpciA9IGpvaW4ob3B0aW9ucy5vdXRwdXREaXIsIGBydW4ke2dldFJ1bkZvclN0YWdlKG9wdGlvbnMuc3RhZ2UpfWApO1xuICAgIC8vIENoZWNrIGlmIHRoZXJlIGFyZSBleGlzdGluZyB0ZXN0IHJlc3VsdHMgZm9yIHRoZSBjdXJyZW50IHJ1blxuICAgIGlmIChleGlzdHNTeW5jKHJ1bk91dHB1dERpcikpIHtcbiAgICAgICAgLy8gSWYgdGhlcmUgYXJlIGV4aXN0aW5nIHRlc3QgcmVzdWx0cywgY2hlY2sgaWYgdGhleSB3ZXJlIHN1Y2Nlc3NmdWxcbiAgICAgICAgY29uc3QgZXhpc3RpbmdSZXN1bHRzID0gZ2V0UmVzdWx0cyhydW5PdXRwdXREaXIpO1xuICAgICAgICBpZiAoZXhpc3RpbmdSZXN1bHRzWydTdW1tYXJ5IHJ1biBzdGF0dXMnXSA9PT0gJ09LJykge1xuICAgICAgICAgICAgLy8gQXNrIG5pY2VseSBpZiB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgZXhpc3RpbmcgdGVzdCByZXN1bHRzXG4gICAgICAgICAgICBjb25zdCBvdmVyd3JpdGVFeGlzdGluZ1Jlc3VsdHMgPSBvcHRpb25zLmZvcmNlIHx8IGF3YWl0IGNvbmZpcm0oe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdUaGVyZSBhcmUgZXhpc3Rpbmcgc3VjY2Vzc2Z1bCB0ZXN0IHJlc3VsdHMsIGRvIHlvdSB3YW50IHRvIG92ZXJ3cml0ZSB0aGVzZSByZXN1bHRzPydcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gSWYgd2UgbmVlZCB0byBvdmVyd3JpdGUgdGhlIHRlc3QgcmVzdWx0cywgd2Ugc2hvdWxkIGRvIHNvXG4gICAgICAgICAgICBpZiAob3ZlcndyaXRlRXhpc3RpbmdSZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1JlbW92aW5nIGV4aXN0aW5nIHRlc3QgcmVzdWx0cycpO1xuICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgZGlyZWN0b3J5XG4gICAgICAgICAgICAgICAgcm1TeW5jKHJ1bk91dHB1dERpciwgeyBmb3JjZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgbm90IGFsbG93ZWQgdG8gb3ZlcndyaXRlIHRoZSB0ZXN0IHJlc3VsdHMsIHRoZXJlIGlzIG5vIHBvaW50IGluIHJ1bm5pbmcgdGhpcyB0ZXN0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgU2tpcHBpbmcgcGVyZm9ybWFuY2UgJHtvcHRpb25zLnN0YWdlfSB0ZXN0IGV4ZWN1dGlvbiwgYSBzdWNjZXNzZnVsIHRlc3QgcnVuIHdhcyBhbHJlYWR5IGNvbXBsZXRlZGApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIElmIHRoZSB0ZXN0IHJ1biB3YXMgbm90IHN1Y2Nlc3NmdWwsIHdlIGFyZSBnb2luZyB0byBvdmVyd3JpdGUgaXQgd2l0aG91dCBhc2tpbmdcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgZGlyZWN0b3J5XG4gICAgICAgICAgICBybVN5bmMocnVuT3V0cHV0RGlyLCB7IGZvcmNlOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgb3V0cHV0IGRpcmVjdG9yeSBleGlzdHNcbiAgICBta2RpclN5bmMob3B0aW9ucy5vdXRwdXREaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIC8vIEFzayBmb3IgdGhlIEFXUyBjcmVkZW50aWFsc1xuICAgIGNvbnN0IFthd3NfYWNjZXNzX2tleV9pZCwgYXdzX3NlY3JldF9hY2Nlc3Nfa2V5XSA9IChvcHRpb25zLmF3c19hY2Nlc3Nfa2V5X2lkICYmIG9wdGlvbnMuYXdzX3NlY3JldF9hY2Nlc3Nfa2V5KVxuICAgICAgICA/IFtvcHRpb25zLmF3c19hY2Nlc3Nfa2V5X2lkLCBvcHRpb25zLmF3c19zZWNyZXRfYWNjZXNzX2tleV1cbiAgICAgICAgOiBhd2FpdCBnZXRBV1NDcmVkZW50aWFscyhvcHRpb25zLnByb2R1Y3QsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIFdyaXRlIEFXUyBjcmVkZW50aWFscyB0byBkaXNrXG4gICAgcGVyc2lzdEFXU0NyZWRlbnRpYWxzKGN3ZCwgYXdzX2FjY2Vzc19rZXlfaWQsIGF3c19zZWNyZXRfYWNjZXNzX2tleSk7XG4gICAgLy8gQ2hlY2sgaWYgd2UgYWxyZWFkeSBoYXZlIGEgcHJvdmlzaW9uZWQgY2x1c3RlciBhdmFpbGFibGVcbiAgICAvLyBJZiBub3QsIHdlIHNob3VsZCBwcm92aXNpb24gaXQgYXMgcGFydCBvZiB0aGUgdGVzdCBydW5cbiAgICBpZiAoIW9wdGlvbnMuYmFzZVVybCkge1xuICAgICAgICAvLyBJbmZvcm0gdGhlIHVzZXIgdGhhdCB3ZSB3aWxsIG5vdyBzdGFydCB0aGUgcGVyZm9ybWFuY2UgdGVzdFxuICAgICAgICBjb25zb2xlLmxvZyhtZXNzYWdlcy5yZWFkeUZvclByb3Zpc2lvbmluZyk7XG4gICAgICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIHByZXBhcmUgdGhlIEFXUyBlbnZpcm9ubWVudCBmb3IgcGVyZm9ybWFuY2UgYmVuY2htYXJrIHRlc3RpbmcuLi4nLCBvcHRpb25zLmZvcmNlKTtcbiAgICAgICAgZW1wdHlMaW5lKCk7XG4gICAgICAgIC8vIFdyaXRlIFRlcnJhZm9ybSB2YXJpYWJsZXMgdG8gZGlzayAob25lLW5vZGUgY2x1c3RlcilcbiAgICAgICAgcGVyc2lzdENsdXN0ZXJDb25maWd1cmF0aW9uKHtcbiAgICAgICAgICAgIHByb2R1Y3Q6IG9wdGlvbnMucHJvZHVjdCxcbiAgICAgICAgICAgIHRhZzogb3B0aW9ucy50YWcsXG4gICAgICAgICAgICBjd2QsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCxcbiAgICAgICAgICAgIG1vbml0b3Jpbmc6IG9wdGlvbnMubW9uaXRvcmluZyxcbiAgICAgICAgICAgIGxpY2Vuc2U6IG9wdGlvbnMubGljZW5zZSxcbiAgICAgICAgICAgIG5vZGVzOiAxXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBSdW4gdGhlIERDQVBUIGluc3RhbGwgc2NyaXB0XG4gICAgICAgIGF3YWl0IGluc3RhbGwoY3dkKTtcbiAgICB9XG4gICAgLy8gSW5mb3JtIHRoZSB1c2VyIHRoYXQgd2Ugd2lsbCBub3cgc3RhcnQgdGhlIHBlcmZvcm1hbmNlIGJlbmNobWFya1xuICAgIGNvbnNvbGUubG9nKG1lc3NhZ2VzLnN0YXJ0VGVzdCk7XG4gICAgLy8gR2V0IHRoZSBsb2FkIGJhbGFuY2VyIFVSTCBmb3IgdGhlIGNsdXN0ZXJcbiAgICBjb25zdCBiYXNlVXJsID0gb3B0aW9ucy5iYXNlVXJsIHx8IGF3YWl0IGdldENsdXN0ZXJVUkwoY3dkLCBvcHRpb25zLnByb2R1Y3QpO1xuICAgIC8vIEFsbG93IHVzZXJzIHRvIHNldCBhIGRpZmZlcmVudCB0ZXN0IGR1cmF0aW9uIChmb3IgdmFsaWRhdGlvbiBwdXJwb3NlcylcbiAgICBjb25zdCBkdXJhdGlvbiA9IGF3YWl0IGdldER1cmF0aW9uKG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIFdyaXRlIHRlc3QgY29uZmlndXJhdGlvbiB0byBkaXNrXG4gICAgYXdhaXQgcGVyc2lzdFRlc3RDb25maWd1cmF0aW9uKGN3ZCwgb3B0aW9ucy5wcm9kdWN0LCBiYXNlVXJsLCBkdXJhdGlvbiwgZmFsc2UsIGZhbHNlLCB1bmRlZmluZWQsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIEdldCB0aGUgcmVzdWx0cyBkaXJlY3RvcnkgKGFuZCBtYWtlIHN1cmUgaXQgaXMgZW1wdHkpXG4gICAgY29uc3QgcmVzdWx0c0Jhc2VEaXIgPSBhd2FpdCBnZXRSZXN1bHRzRGlyZWN0b3J5KGN3ZCwgb3B0aW9ucy5wcm9kdWN0LCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBSZWdyZXNzaW9uIHRlc3RzIHJlcXVpcmUgdGhlIGFwcCB0byBiZSBpbnN0YWxsZWRcbiAgICBpZiAob3B0aW9ucy5zdGFnZSA9PT0gJ3JlZ3Jlc3Npb24nKSB7XG4gICAgICAgIC8vIEluc3RhbGwgdGhlIGFwcCBpbnRvIHRoZSBjbHVzdGVyXG4gICAgICAgIGF3YWl0IGluc3RhbGxBcHBJbkNsdXN0ZXIoe1xuICAgICAgICAgICAgYmFzZVVybCxcbiAgICAgICAgICAgIGFwcEtleTogb3B0aW9ucy5hcHBLZXksXG4gICAgICAgICAgICBhcmNoaXZlOiBvcHRpb25zLmFyY2hpdmUsXG4gICAgICAgICAgICBsaWNlbnNlOiBvcHRpb25zLmFwcExpY2Vuc2UsXG4gICAgICAgICAgICB1c2VybmFtZTogJ2FkbWluJyxcbiAgICAgICAgICAgIHBhc3N3b3JkOiAnYWRtaW4nLFxuICAgICAgICAgICAgcmVzdGFydEFmdGVySW5zdGFsbDogb3B0aW9ucy5yZXN0YXJ0QWZ0ZXJJbnN0YWxsLFxuICAgICAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIFJ1biB0aGUgZGFtbiB0ZXN0XG4gICAgYXdhaXQgcnVuVGVzdChjd2QsIG9wdGlvbnMuZW52aXJvbm1lbnQsIG9wdGlvbnMucHJvZHVjdCk7XG4gICAgLy8gR2V0IHRoZSB0ZXN0IHJlc3VsdHNcbiAgICBjb25zdCByZXN1bHRzID0gZ2V0UmVzdWx0cyhyZXN1bHRzQmFzZURpcik7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRlc3Qgd2FzIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseVxuICAgIGlmIChyZXN1bHRzWydTdW1tYXJ5IHJ1biBzdGF0dXMnXSAhPT0gJ09LJykge1xuICAgICAgICAvLyBJZiBub3QsIGxldCB0aGUgcGVvcGxlIGtub3cgYW5kIHRlcm1pbmF0ZVxuICAgICAgICBjb25zb2xlLmxvZyhtZXNzYWdlcy5mYWlsdXJlKG9wdGlvbnMuc3RhZ2UsIGN3ZCwgb3B0aW9ucy5wcm9kdWN0LCBvcHRpb25zLmVudmlyb25tZW50LCByZXN1bHRzQmFzZURpciwgcmVzdWx0cykpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gdGVzdCBmYWlsZWQnKTtcbiAgICB9XG4gICAgLy8gV2UgaGF2ZSBhIHN1Y2Nlc3NmdWwgdGVzdCwgc28gd2Ugc2hvdWxkIHN0b3JlIHRoZSByZXN1bHRzIGluIGEgJ3ByaXZhdGUnIHN1YmRpcmVjdG9yeSBvZiBBUFRcbiAgICBjb25zb2xlLmxvZyhgICBDb3B5aW5nIHRlc3QgcmVzdWx0cyB0byAke3J1bk91dHB1dERpcn1gKTtcbiAgICBhd2FpdCBtb3ZlKHJlc3VsdHMucGF0aCwgcnVuT3V0cHV0RGlyLCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbiAgICAvLyBDZWxlYnJhdGUgb3VyIHN1Y2Nlc3MhXG4gICAgY29uc29sZS5sb2cobWVzc2FnZXMuc3VjY2Vzcyk7XG59O1xuIiwiZXhwb3J0IGNvbnN0IGdldE5vZGVOdW1iZXJGb3JTdGFnZSA9IChzdGFnZSkgPT4ge1xuICAgIHN3aXRjaCAoc3RhZ2UpIHtcbiAgICAgICAgY2FzZSAnb25lLW5vZGUnOiByZXR1cm4gMTtcbiAgICAgICAgY2FzZSAndHdvLW5vZGUnOiByZXR1cm4gMjtcbiAgICAgICAgY2FzZSAnZm91ci1ub2RlJzogcmV0dXJuIDQ7XG4gICAgfVxufTtcbiIsImltcG9ydCB7IGNvbmZpcm0gfSBmcm9tICdAaW5xdWlyZXIvcHJvbXB0cyc7XG5pbXBvcnQgeyBleGlzdHNTeW5jLCBta2RpclN5bmMsIHJtU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IG1vdmUgfSBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBlbXB0eUxpbmUgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5pbXBvcnQgeyBpbnN0YWxsLCBydW5UZXN0IH0gZnJvbSAnLi9kY2FwdCc7XG5pbXBvcnQgeyBnZXRBcHREaWN0b3J5IH0gZnJvbSAnLi9nZXRBcHREaXJlY3RvcnknO1xuaW1wb3J0IHsgZ2V0QVdTQ3JlZGVudGlhbHMgfSBmcm9tICcuL2dldEFXU0NyZWRlbnRpYWxzJztcbmltcG9ydCB7IGdldENsdXN0ZXJVUkwgfSBmcm9tICcuL2dldENsdXN0ZXJVUkwnO1xuaW1wb3J0IHsgZ2V0RHVyYXRpb24gfSBmcm9tICcuL2dldER1cmF0aW9uJztcbmltcG9ydCB7IGdldE5vZGVOdW1iZXJGb3JTdGFnZSB9IGZyb20gJy4vZ2V0Tm9kZU51bWJlckZvclN0YWdlJztcbmltcG9ydCB7IGdldFJlc3VsdHMgfSBmcm9tICcuL2dldFJlc3VsdHMnO1xuaW1wb3J0IHsgZ2V0UmVzdWx0c0RpcmVjdG9yeSB9IGZyb20gJy4vZ2V0UmVzdWx0c0RpcmVjdG9yeSc7XG5pbXBvcnQgeyBnZXRSdW5Gb3JTdGFnZSB9IGZyb20gJy4vZ2V0UnVuRm9yU3RhZ2UnO1xuaW1wb3J0IHsgaW5zdGFsbEFwcEluQ2x1c3RlciB9IGZyb20gJy4vaW5zdGFsbEFwcEluQ2x1c3Rlcic7XG5pbXBvcnQgeyBwZXJzaXN0Q2x1c3RlckNvbmZpZ3VyYXRpb24gfSBmcm9tICcuL3BlcnNpc3RDbHVzdGVyQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBwZXJzaXN0QVdTQ3JlZGVudGlhbHMgfSBmcm9tICcuL3BlcnNpc3RzQVdTQ3JlZGVudGlhbHMnO1xuaW1wb3J0IHsgcGVyc2lzdFRlc3RDb25maWd1cmF0aW9uIH0gZnJvbSAnLi9wZXJzaXN0VGVzdENvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHsgd2FpdEZvclVzZXJJbnB1dCB9IGZyb20gJy4vd2FpdEZvclVzZXJJbnB1dCc7XG5leHBvcnQgY29uc3QgcnVuU2NhbGFiaWxpdHlUZXN0ID0gYXN5bmMgKHN0YWdlLCBvcHRpb25zLCBtZXNzYWdlcykgPT4ge1xuICAgIC8vIEdldCB0aGUgY29ycmVjdCBhbW91bnQgb2Ygbm9kZXMgZm9yIHRoZSBzcGVjaWZpZWQgc3RhZ2VcbiAgICBjb25zdCBub2RlcyA9IGdldE5vZGVOdW1iZXJGb3JTdGFnZShzdGFnZSk7XG4gICAgLy8gU2hvdyB0aGUgd2VsY29tZSBtZXNzYWdlXG4gICAgY29uc29sZS5sb2cobWVzc2FnZXMuaGVhZGVyKG9wdGlvbnMucHJvZHVjdCwgc3RhZ2UpKTtcbiAgICAvLyBXZSBhcmUgZ29pbmcgdG8gcmVjb25maXJtIHRoYXQgd2UgYXJlIHJ1bm5pbmcgb24gdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiAoYW5kIGZldGNoIGl0IGlmIHJlcXVpcmVkKVxuICAgIGNvbnN0IGN3ZCA9IGF3YWl0IGdldEFwdERpY3Rvcnkob3B0aW9ucy5jd2QsIGZhbHNlLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBHZXQgdGhlIHBhdGggdG8gdGhlICdwcml2YXRlJyBzdWJkaXJlY3Rvcnkgb2YgQVBUIGluIHdoaWNoIHdlIHN0b3JlIHRoZSB0ZXN0IHJlc3VsdHNcbiAgICBjb25zdCBydW5PdXRwdXREaXIgPSBqb2luKG9wdGlvbnMub3V0cHV0RGlyLCBgcnVuJHtnZXRSdW5Gb3JTdGFnZShzdGFnZSl9YCk7XG4gICAgLy8gQ2hlY2sgaWYgdGhlcmUgYXJlIGV4aXN0aW5nIHRlc3QgcmVzdWx0cyBmb3IgdGhlIGN1cnJlbnQgcnVuXG4gICAgaWYgKGV4aXN0c1N5bmMocnVuT3V0cHV0RGlyKSkge1xuICAgICAgICAvLyBJZiB0aGVyZSBhcmUgZXhpc3RpbmcgdGVzdCByZXN1bHRzLCBjaGVjayBpZiB0aGV5IHdlcmUgc3VjY2Vzc2Z1bFxuICAgICAgICBjb25zdCBleGlzdGluZ1Jlc3VsdHMgPSBnZXRSZXN1bHRzKHJ1bk91dHB1dERpcik7XG4gICAgICAgIGlmIChleGlzdGluZ1Jlc3VsdHNbJ1N1bW1hcnkgcnVuIHN0YXR1cyddID09PSAnT0snKSB7XG4gICAgICAgICAgICAvLyBBc2sgbmljZWx5IGlmIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBleGlzdGluZyB0ZXN0IHJlc3VsdHNcbiAgICAgICAgICAgIGNvbnN0IG92ZXJ3cml0ZUV4aXN0aW5nUmVzdWx0cyA9IG9wdGlvbnMuZm9yY2UgfHwgYXdhaXQgY29uZmlybSh7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1RoZXJlIGFyZSBleGlzdGluZyBzdWNjZXNzZnVsIHRlc3QgcmVzdWx0cywgZG8geW91IHdhbnQgdG8gb3ZlcndyaXRlIHRoZXNlIHJlc3VsdHM/J1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBJZiB3ZSBuZWVkIHRvIG92ZXJ3cml0ZSB0aGUgdGVzdCByZXN1bHRzLCB3ZSBzaG91bGQgZG8gc29cbiAgICAgICAgICAgIGlmIChvdmVyd3JpdGVFeGlzdGluZ1Jlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnUmVtb3ZpbmcgZXhpc3RpbmcgdGVzdCByZXN1bHRzJyk7XG4gICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBkaXJlY3RvcnlcbiAgICAgICAgICAgICAgICBybVN5bmMocnVuT3V0cHV0RGlyLCB7IGZvcmNlOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIC8vIElmIHdlIGFyZSBub3QgYWxsb3dlZCB0byBvdmVyd3JpdGUgdGhlIHRlc3QgcmVzdWx0cywgdGhlcmUgaXMgbm8gcG9pbnQgaW4gcnVubmluZyB0aGlzIHRlc3RcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBTa2lwcGluZyBzY2FsYWJpbGl0eSAke3N0YWdlfSBjbHVzdGVyIHRlc3QgZXhlY3V0aW9uLCBhIHN1Y2Nlc3NmdWwgdGVzdCBydW4gd2FzIGFscmVhZHkgY29tcGxldGVkYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgdGhlIHRlc3QgcnVuIHdhcyBub3Qgc3VjY2Vzc2Z1bCwgd2UgYXJlIGdvaW5nIHRvIG92ZXJ3cml0ZSBpdCB3aXRob3V0IGFza2luZ1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBkaXJlY3RvcnlcbiAgICAgICAgICAgIHJtU3luYyhydW5PdXRwdXREaXIsIHsgZm9yY2U6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gTWFrZSBzdXJlIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGV4aXN0c1xuICAgIG1rZGlyU3luYyhvcHRpb25zLm91dHB1dERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgLy8gQXNrIGZvciB0aGUgQVdTIGNyZWRlbnRpYWxzXG4gICAgY29uc3QgW2F3c19hY2Nlc3Nfa2V5X2lkLCBhd3Nfc2VjcmV0X2FjY2Vzc19rZXldID0gYXdhaXQgZ2V0QVdTQ3JlZGVudGlhbHMob3B0aW9ucy5wcm9kdWN0LCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBJbmZvcm0gdGhlIHVzZXIgdGhhdCB3ZSB3aWxsIG5vdyBzdGFydCB0aGUgc2NhbGFiaWxpdHkgYmVuY2htYXJrXG4gICAgY29uc29sZS5sb2cobWVzc2FnZXMucmVhZHlGb3JQcm92aXNpb25pbmcpO1xuICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIHByZXBhcmUgdGhlIEFXUyBlbnZpcm9ubWVudCBmb3Igc2NhbGFiaWxpdHkgYmVuY2htYXJrIHRlc3RpbmcuLi4nLCBvcHRpb25zLmZvcmNlKTtcbiAgICBlbXB0eUxpbmUoKTtcbiAgICAvLyBXcml0ZSBBV1MgY3JlZGVudGlhbHMgdG8gZGlza1xuICAgIHBlcnNpc3RBV1NDcmVkZW50aWFscyhjd2QsIGF3c19hY2Nlc3Nfa2V5X2lkLCBhd3Nfc2VjcmV0X2FjY2Vzc19rZXkpO1xuICAgIC8vIFdyaXRlIFRlcnJhZm9ybSB2YXJpYWJsZXMgdG8gZGlzayAob25lLW5vZGUgY2x1c3RlcilcbiAgICBwZXJzaXN0Q2x1c3RlckNvbmZpZ3VyYXRpb24oe1xuICAgICAgICBwcm9kdWN0OiBvcHRpb25zLnByb2R1Y3QsXG4gICAgICAgIHRhZzogb3B0aW9ucy50YWcsXG4gICAgICAgIGN3ZCxcbiAgICAgICAgZW52aXJvbm1lbnQ6IG9wdGlvbnMuZW52aXJvbm1lbnQsXG4gICAgICAgIG1vbml0b3Jpbmc6IG9wdGlvbnMubW9uaXRvcmluZyxcbiAgICAgICAgbGljZW5zZTogb3B0aW9ucy5saWNlbnNlLFxuICAgICAgICBub2Rlc1xuICAgIH0pO1xuICAgIC8vIFJ1biB0aGUgRENBUFQgaW5zdGFsbCBzY3JpcHRcbiAgICBhd2FpdCBpbnN0YWxsKGN3ZCk7XG4gICAgLy8gSW5mb3JtIHRoZSB1c2VyIHRoYXQgd2Ugd2lsbCBub3cgc3RhcnQgdGhlIHNjYWxhYmlsaXR5IGJlbmNobWFya1xuICAgIGNvbnNvbGUubG9nKG1lc3NhZ2VzLnN0YXJ0VGVzdCk7XG4gICAgLy8gR2V0IHRoZSBsb2FkIGJhbGFuY2VyIFVSTCBmb3IgdGhlIGNsdXN0ZXJcbiAgICBjb25zdCBiYXNlVXJsID0gYXdhaXQgZ2V0Q2x1c3RlclVSTChjd2QsIG9wdGlvbnMucHJvZHVjdCk7XG4gICAgLy8gSW5zdGFsbCB0aGUgYXBwIGludG8gdGhlIGNsdXN0ZXJcbiAgICBhd2FpdCBpbnN0YWxsQXBwSW5DbHVzdGVyKHtcbiAgICAgICAgYmFzZVVybCxcbiAgICAgICAgYXBwS2V5OiBvcHRpb25zLmFwcEtleSxcbiAgICAgICAgYXJjaGl2ZTogb3B0aW9ucy5hcmNoaXZlLFxuICAgICAgICBsaWNlbnNlOiBvcHRpb25zLmFwcExpY2Vuc2UsXG4gICAgICAgIHVzZXJuYW1lOiAnYWRtaW4nLFxuICAgICAgICBwYXNzd29yZDogJ2FkbWluJyxcbiAgICAgICAgcmVzdGFydEFmdGVySW5zdGFsbDogb3B0aW9ucy5yZXN0YXJ0QWZ0ZXJJbnN0YWxsLFxuICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgIH0pO1xuICAgIC8vIEFsbG93IHVzZXJzIHRvIHNldCBhIGRpZmZlcmVudCB0ZXN0IGR1cmF0aW9uIChmb3IgdmFsaWRhdGlvbiBwdXJwb3NlcylcbiAgICBjb25zdCBkdXJhdGlvbiA9IGF3YWl0IGdldER1cmF0aW9uKG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIFdyaXRlIHRlc3QgY29uZmlndXJhdGlvbiB0byBkaXNrXG4gICAgYXdhaXQgcGVyc2lzdFRlc3RDb25maWd1cmF0aW9uKGN3ZCwgb3B0aW9ucy5wcm9kdWN0LCBiYXNlVXJsLCBkdXJhdGlvbiwgb3B0aW9ucy5qbWV0ZXIsIG9wdGlvbnMubG9jdXN0LCBvcHRpb25zLnF1ZXJ5LCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBHZXQgdGhlIHJlc3VsdHMgZGlyZWN0b3J5IChhbmQgbWFrZSBzdXJlIGl0IGlzIGVtcHR5KVxuICAgIGNvbnN0IHJlc3VsdHNCYXNlRGlyID0gYXdhaXQgZ2V0UmVzdWx0c0RpcmVjdG9yeShjd2QsIG9wdGlvbnMucHJvZHVjdCwgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gUnVuIHRoZSBkYW1uIHRlc3RcbiAgICBhd2FpdCBydW5UZXN0KGN3ZCwgb3B0aW9ucy5lbnZpcm9ubWVudCwgb3B0aW9ucy5wcm9kdWN0KTtcbiAgICAvLyBHZXQgdGhlIHRlc3QgcmVzdWx0c1xuICAgIGNvbnN0IHJlc3VsdHMgPSBnZXRSZXN1bHRzKHJlc3VsdHNCYXNlRGlyKTtcbiAgICAvLyBDaGVjayBpZiB0aGUgdGVzdCB3YXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5XG4gICAgaWYgKHJlc3VsdHNbJ1N1bW1hcnkgcnVuIHN0YXR1cyddICE9PSAnT0snKSB7XG4gICAgICAgIC8vIElmIG5vdCwgbGV0IHRoZSBwZW9wbGUga25vdyBhbmQgdGVybWluYXRlXG4gICAgICAgIGNvbnNvbGUubG9nKG1lc3NhZ2VzLmZhaWx1cmUoc3RhZ2UsIGN3ZCwgb3B0aW9ucy5wcm9kdWN0LCBvcHRpb25zLmVudmlyb25tZW50LCByZXN1bHRzQmFzZURpciwgcmVzdWx0cykpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NjYWxhYmlsaXR5IGJlbmNobWFyayB0ZXN0IGZhaWxlZCcpO1xuICAgIH1cbiAgICAvLyBXZSBoYXZlIGEgc3VjY2Vzc2Z1bCB0ZXN0LCBzbyB3ZSBzaG91bGQgc3RvcmUgdGhlIHJlc3VsdHMgaW4gYSAncHJpdmF0ZScgc3ViZGlyZWN0b3J5IG9mIEFQVFxuICAgIGNvbnNvbGUubG9nKGAgIENvcHlpbmcgdGVzdCByZXN1bHRzIHRvICR7cnVuT3V0cHV0RGlyfWApO1xuICAgIGF3YWl0IG1vdmUocmVzdWx0cy5wYXRoLCBydW5PdXRwdXREaXIsIHsgb3ZlcndyaXRlOiB0cnVlIH0pO1xuICAgIC8vIENlbGVicmF0ZSBvdXIgc3VjY2VzcyFcbiAgICBjb25zb2xlLmxvZyhtZXNzYWdlcy5zdWNjZXNzKTtcbn07XG4iLCJpbXBvcnQgeyBlbXB0eUxpbmUsIFRlYXJkb3duIH0gZnJvbSAnLi4vbWVzc2FnZXMnO1xuaW1wb3J0IHsgdGVybWluYXRlIH0gZnJvbSAnLi9kY2FwdCc7XG5pbXBvcnQgeyBnZXRBcHREaWN0b3J5IH0gZnJvbSAnLi9nZXRBcHREaXJlY3RvcnknO1xuaW1wb3J0IHsgZ2V0QVdTQ3JlZGVudGlhbHMgfSBmcm9tICcuL2dldEFXU0NyZWRlbnRpYWxzJztcbmltcG9ydCB7IHBlcnNpc3RBV1NDcmVkZW50aWFscyB9IGZyb20gJy4vcGVyc2lzdHNBV1NDcmVkZW50aWFscyc7XG5pbXBvcnQgeyB3YWl0Rm9yVXNlcklucHV0IH0gZnJvbSAnLi93YWl0Rm9yVXNlcklucHV0JztcbmV4cG9ydCBjb25zdCB0ZWFyZG93bkNsdXN0ZXIgPSBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgIC8vIFNob3cgbmljZSBsaXR0bGUgd2VsY29tZSBtZXNzYWdlXG4gICAgY29uc29sZS5sb2coVGVhcmRvd24uaGVhZGVyKTtcbiAgICAvLyBBc2sgZm9yIHRoZSBwcm9wZXIgZGlyZWN0b3J5IG9mIEFQVFxuICAgIGNvbnN0IGRpcmVjdG9yeSA9IGF3YWl0IGdldEFwdERpY3Rvcnkob3B0aW9ucy5jd2QsIHRydWUsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIEFzayBmb3IgdGhlIEFXUyBjcmVkZW50aWFsc1xuICAgIGNvbnN0IFthd3NfYWNjZXNzX2tleV9pZCwgYXdzX3NlY3JldF9hY2Nlc3Nfa2V5XSA9IGF3YWl0IGdldEFXU0NyZWRlbnRpYWxzKG9wdGlvbnMucHJvZHVjdCwgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gV3JpdGUgQVdTIGNyZWRlbnRpYWxzIHRvIGRpc2tcbiAgICBwZXJzaXN0QVdTQ3JlZGVudGlhbHMoZGlyZWN0b3J5LCBhd3NfYWNjZXNzX2tleV9pZCwgYXdzX3NlY3JldF9hY2Nlc3Nfa2V5KTtcbiAgICAvLyBBc2sgdGhlIHVzZXIgaWYgdGhleSBhcmUgcmVhZHkgdG8gc2F5IGdvb2RieWUgdG8gdGhlaXIgY2x1c3RlclxuICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIGNvbnRpbnVlLi4uJywgb3B0aW9ucy5mb3JjZSk7XG4gICAgZW1wdHlMaW5lKCk7XG4gICAgLy8gVGVybWluYXRlIGl0IVxuICAgIGF3YWl0IHRlcm1pbmF0ZShkaXJlY3RvcnksIG9wdGlvbnMuZW52aXJvbm1lbnQpO1xuICAgIC8vIEFzayB0aGUgdXNlciB0byBxdWl0IHRoZSBwcm9ncmFtXG4gICAgYXdhaXQgd2FpdEZvclVzZXJJbnB1dCgnUHJlc3MgYSBrZXkgdG8gZXhpdC4uLicsIG9wdGlvbnMuZm9yY2UpO1xufTtcbiIsImltcG9ydCB7IHJlYWxwYXRoU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4gfSBmcm9tICdwYXRoJztcbmV4cG9ydCBjb25zdCB0b0Fic29sdXRlUGF0aCA9IChyZWxhdGl2ZVBhdGgpID0+IHtcbiAgICBjb25zdCBbLCBmaWxlUGF0aF0gPSBwcm9jZXNzLmFyZ3Y7XG4gICAgY29uc3QgZXhlY3V0YWJsZUZpbGVEaXIgPSBkaXJuYW1lKHJlYWxwYXRoU3luYyhmaWxlUGF0aCkpO1xuICAgIGNvbnN0IGJhc2VkaXIgPSBleGVjdXRhYmxlRmlsZURpci5zdWJzdHJpbmcoMCwgZXhlY3V0YWJsZUZpbGVEaXIuaW5kZXhPZignZGNkeCcpICsgNCk7XG4gICAgcmV0dXJuIGpvaW4oYmFzZWRpciwgcmVsYXRpdmVQYXRoLnJlcGxhY2VBbGwoJy4uLycsICcnKSk7XG59O1xuIiwiaW1wb3J0IHsgcmVhZEZpbGVTeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgdG9BYnNvbHV0ZVBhdGggfSBmcm9tICcuL3RvQWJzb2x1dGVQYXRoJztcbmV4cG9ydCBjb25zdCBnZXRWZXJzaW9ucyA9ICgpID0+IHtcbiAgICBjb25zdCBjb250ZW50ID0gcmVhZEZpbGVTeW5jKHRvQWJzb2x1dGVQYXRoKCcuLi8uLi9hc3NldHMvdmVyc2lvbnMuanNvbicpLCAndXRmLTgnKTtcbiAgICBjb25zdCB2ZXJzaW9ucyA9IEpTT04ucGFyc2UoY29udGVudCk7XG4gICAgcmV0dXJuIHZlcnNpb25zO1xufTtcbiIsImltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgZ2V0VmVyc2lvbnMgfSBmcm9tICcuLi9oZWxwZXJzL2dldFZlcnNpb25zJztcbmNvbnN0IHZlcnNpb25zID0gZ2V0VmVyc2lvbnMoKTtcbmV4cG9ydCBjb25zdCBTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMgPSB6LmVudW0oW1xuICAgICdwb3N0Z3Jlc3FsJyxcbiAgICAnbXlzcWwnLFxuICAgICdtc3NxbCdcbl0pO1xuZXhwb3J0IGNvbnN0IFN1cHBvcnRlZE1TU1FMRWRpdGlvbnMgPSB6LmVudW0oW1xuICAgICdEZXZlbG9wZXInLFxuICAgICdFeHByZXNzJyxcbiAgICAnU3RhbmRhcmQnLFxuICAgICdFbnRlcnByaXNlJyxcbiAgICAnRW50ZXJwcmlzZUNvcmUnXG5dKTtcbmV4cG9ydCBjb25zdCBEYXRhYmFzZU9wdGlvbnMgPSB6Lm9iamVjdCh7XG4gICAgbmFtZTogU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLFxuICAgIHBvcnQ6IHoubnVtYmVyKCkub3Ioei5zdHJpbmcoKS50cmFuc2Zvcm0oTnVtYmVyKS5yZWZpbmUoaXRlbSA9PiAhaXNOYU4oaXRlbSkpKSxcbiAgICBkYXRhYmFzZTogei5zdHJpbmcoKS5kZWZhdWx0KCdkY2R4JyksXG4gICAgdXNlcm5hbWU6IHouc3RyaW5nKCkuZGVmYXVsdCgnZGNkeCcpLFxuICAgIHBhc3N3b3JkOiB6LnN0cmluZygpLmRlZmF1bHQoJ2RjZHgnKSxcbiAgICBjbGVhbjogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gICAgcHJ1bmU6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICAgIHZlcmJvc2U6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICAgIGRyaXZlcjogei5zdHJpbmcoKVxufSk7XG5leHBvcnQgY29uc3QgUG9zdGdyZVNRTE9wdGlvbnMgPSBEYXRhYmFzZU9wdGlvbnMuZXh0ZW5kKHtcbiAgICBuYW1lOiBTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMucmVmaW5lKGl0ZW0gPT4gaXRlbSA9PT0gU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLlZhbHVlcy5wb3N0Z3Jlc3FsKS5kZWZhdWx0KFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5WYWx1ZXMucG9zdGdyZXNxbCksXG4gICAgdGFnOiB6LnN0cmluZygpLnJlZmluZShpdGVtID0+IHZlcnNpb25zW1N1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5WYWx1ZXMucG9zdGdyZXNxbF0uaW5jbHVkZXMoaXRlbSkpLmRlZmF1bHQoJ2xhdGVzdCcpLFxuICAgIHBvcnQ6IHoubnVtYmVyKCkub3Ioei5zdHJpbmcoKS50cmFuc2Zvcm0oTnVtYmVyKS5yZWZpbmUoaXRlbSA9PiAhaXNOYU4oaXRlbSkpKS5kZWZhdWx0KDU0MzIpLFxuICAgIGRyaXZlcjogei5zdHJpbmcoKS5yZWZpbmUoaXRlbSA9PiBpdGVtID09PSAnb3JnLnBvc3RncmVzcWwuRHJpdmVyJykuZGVmYXVsdCgnb3JnLnBvc3RncmVzcWwuRHJpdmVyJylcbn0pO1xuZXhwb3J0IGNvbnN0IE15U1FMT3B0aW9ucyA9IERhdGFiYXNlT3B0aW9ucy5leHRlbmQoe1xuICAgIG5hbWU6IFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5yZWZpbmUoaXRlbSA9PiBpdGVtID09PSBTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMuVmFsdWVzLm15c3FsKS5kZWZhdWx0KFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5WYWx1ZXMubXlzcWwpLFxuICAgIHRhZzogei5zdHJpbmcoKS5yZWZpbmUoaXRlbSA9PiB2ZXJzaW9uc1tTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMuVmFsdWVzLm15c3FsXS5pbmNsdWRlcyhpdGVtKSkuZGVmYXVsdCgnbGF0ZXN0JyksXG4gICAgcG9ydDogei5udW1iZXIoKS5vcih6LnN0cmluZygpLnRyYW5zZm9ybShOdW1iZXIpLnJlZmluZShpdGVtID0+ICFpc05hTihpdGVtKSkpLmRlZmF1bHQoMzMwNiksXG4gICAgZHJpdmVyOiB6LnN0cmluZygpLnJlZmluZShpdGVtID0+IGl0ZW0gPT09ICdjb20ubXlzcWwuamRiYy5Ecml2ZXInKS5kZWZhdWx0KCdjb20ubXlzcWwuamRiYy5Ecml2ZXInKVxufSk7XG5leHBvcnQgY29uc3QgTVNTUUxPcHRpb25zID0gRGF0YWJhc2VPcHRpb25zLmV4dGVuZCh7XG4gICAgbmFtZTogU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLnJlZmluZShpdGVtID0+IGl0ZW0gPT09IFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5WYWx1ZXMubXNzcWwpLmRlZmF1bHQoU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLlZhbHVlcy5tc3NxbCksXG4gICAgdGFnOiB6LnN0cmluZygpLnJlZmluZShpdGVtID0+IHZlcnNpb25zW1N1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5WYWx1ZXMubXNzcWxdLmluY2x1ZGVzKGl0ZW0pKS5kZWZhdWx0KCdsYXRlc3QnKSxcbiAgICBlZGl0aW9uOiBTdXBwb3J0ZWRNU1NRTEVkaXRpb25zLmRlZmF1bHQoJ0RldmVsb3BlcicpLFxuICAgIHBvcnQ6IHoubnVtYmVyKCkub3Ioei5zdHJpbmcoKS50cmFuc2Zvcm0oTnVtYmVyKS5yZWZpbmUoaXRlbSA9PiAhaXNOYU4oaXRlbSkpKS5kZWZhdWx0KDE0MzMpLFxuICAgIHVzZXJuYW1lOiB6LnN0cmluZygpLnJlZmluZShpdGVtID0+IGl0ZW0gPT09ICdzYScpLmRlZmF1bHQoJ3NhJyksXG4gICAgcGFzc3dvcmQ6IHouc3RyaW5nKCkuZGVmYXVsdCgnRGF0YUNlbnRlckRYIScpLFxuICAgIGRyaXZlcjogei5zdHJpbmcoKS5yZWZpbmUoaXRlbSA9PiBpdGVtID09PSAnY29tLm1pY3Jvc29mdC5zcWxzZXJ2ZXIuamRiYy5TUUxTZXJ2ZXJEcml2ZXInKS5kZWZhdWx0KCdjb20ubWljcm9zb2Z0LnNxbHNlcnZlci5qZGJjLlNRTFNlcnZlckRyaXZlcicpXG59KTtcbiIsImltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzIH0gZnJvbSAnLi9EYXRhYmFzZSc7XG5leHBvcnQgY29uc3QgU3VwcG9ydGVkQXBwbGljYXRpb25zID0gei5lbnVtKFtcbiAgICAnamlyYScsXG4gICAgJ2NvbmZsdWVuY2UnLFxuICAgICdiaXRidWNrZXQnLFxuICAgICdiYW1ib28nXG5dKTtcbmV4cG9ydCBjb25zdCBBcHBsaWNhdGlvbk9wdGlvbnMgPSB6Lm9iamVjdCh7XG4gICAgbmFtZTogU3VwcG9ydGVkQXBwbGljYXRpb25zLFxuICAgIHRhZzogei5zdHJpbmcoKS5kZWZhdWx0KCdsYXRlc3QnKSxcbiAgICBkYXRhYmFzZTogU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLmRlZmF1bHQoJ3Bvc3RncmVzcWwnKSxcbiAgICBkYXRhYmFzZVRhZzogei5zdHJpbmcoKS5kZWZhdWx0KCdsYXRlc3QnKSxcbiAgICBwb3J0OiB6LnN0cmluZygpLnRyYW5zZm9ybShOdW1iZXIpLnJlZmluZShpdGVtID0+ICFpc05hTihpdGVtKSkuZGVmYXVsdCgnODAnKSxcbiAgICBjb250ZXh0UGF0aDogei5zdHJpbmcoKSxcbiAgICB4bXM6IHouc3RyaW5nKCkuZGVmYXVsdCgnMTAyNG0nKSxcbiAgICB4bXg6IHouc3RyaW5nKCkuZGVmYXVsdCgnMTAyNG0nKSxcbiAgICB3YXRjaDogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gICAgZXh0OiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICAgIGluc3RhbGw6IHouYm9vbGVhbigpLFxuICAgIG91dHB1dERpcmVjdG9yeTogei5zdHJpbmcoKSxcbiAgICBhY3RpdmF0ZVByb2ZpbGVzOiB6LnN0cmluZygpLFxuICAgIGNvbmZpZ3VyZTogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gICAgY2xlYW46IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICAgIHBydW5lOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgICBkZWJ1Zzogei5ib29sZWFuKCkuZGVmYXVsdCh0cnVlKSxcbiAgICBqdm06IHouc3RyaW5nKCksXG4gICAgY3dkOiB6LnN0cmluZygpXG59KS5wYXJ0aWFsKHtcbiAgICBjb250ZXh0UGF0aDogdHJ1ZSxcbiAgICBleHQ6IHRydWUsXG4gICAgaW5zdGFsbDogdHJ1ZSxcbiAgICBvdXRwdXREaXJlY3Rvcnk6IHRydWUsXG4gICAgYWN0aXZhdGVQcm9maWxlczogdHJ1ZSxcbiAgICBqdm06IHRydWUsXG4gICAgY3dkOiB0cnVlXG59KTtcbiIsImltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgU3VwcG9ydGVkQXBwbGljYXRpb25zIH0gZnJvbSAnLi9BcHBsaWNhdGlvbic7XG5leHBvcnQgY29uc3QgUGVyZm9ybWFuY2VUZXN0VHlwZXMgPSB6LmVudW0oW1xuICAgICdiYXNlbGluZScsXG4gICAgJ3JlZ3Jlc3Npb24nXG5dKTtcbmV4cG9ydCBjb25zdCBTY2FsYWJpbGl0eVRlc3RUeXBlcyA9IHouZW51bShbXG4gICAgJ29uZS1ub2RlJyxcbiAgICAndHdvLW5vZGUnLFxuICAgICdmb3VyLW5vZGUnXG5dKTtcbmV4cG9ydCBjb25zdCBUZXN0UmVzdWx0cyA9IHouZW51bShbXG4gICAgJ3BhdGgnLFxuICAgICdTdW1tYXJ5IHJ1biBzdGF0dXMnLFxuICAgICdBcHBsaWNhdGlvbiBub2RlcyBjb3VudCcsXG4gICAgJ0ZpbmlzaGVkJyxcbiAgICAnQ29tcGxpYW50JyxcbiAgICAnU3VjY2VzcycsXG4gICAgJ0hhcyBhcHAtc3BlY2lmaWMgYWN0aW9ucydcbl0pO1xuZXhwb3J0IGNvbnN0IFJlcG9ydFR5cGVzID0gei5lbnVtKFtcbiAgICAncGVyZm9ybWFuY2UnLFxuICAgICdzY2FsYWJpbGl0eSdcbl0pO1xuZXhwb3J0IGNvbnN0IEFQVFRlc3RNZXNzYWdlcyA9IHoub2JqZWN0KHtcbiAgICBoZWFkZXI6IHouZnVuY3Rpb24oKS5hcmdzKFN1cHBvcnRlZEFwcGxpY2F0aW9ucywgUGVyZm9ybWFuY2VUZXN0VHlwZXMub3IoU2NhbGFiaWxpdHlUZXN0VHlwZXMpKS5yZXR1cm5zKHouc3RyaW5nKCkpLFxuICAgIHJlYWR5Rm9yUHJvdmlzaW9uaW5nOiB6LnN0cmluZygpLFxuICAgIHN0YXJ0VGVzdDogei5zdHJpbmcoKSxcbiAgICBzdWNjZXNzOiB6LnN0cmluZygpLFxuICAgIGZhaWx1cmU6IHouZnVuY3Rpb24oKS5hcmdzKFBlcmZvcm1hbmNlVGVzdFR5cGVzLm9yKFNjYWxhYmlsaXR5VGVzdFR5cGVzKSwgei5zdHJpbmcoKSwgU3VwcG9ydGVkQXBwbGljYXRpb25zLCB6LnN0cmluZygpLCB6LnN0cmluZygpLCB6LnJlY29yZChUZXN0UmVzdWx0cywgei5zdHJpbmcoKS5vcih6LnVuZGVmaW5lZCgpKSkpXG59KTtcbmV4cG9ydCBjb25zdCBBUFRQcm92aXNpb25BcmdzID0gei5vYmplY3Qoe1xuICAgIHByb2R1Y3Q6IFN1cHBvcnRlZEFwcGxpY2F0aW9ucyxcbiAgICB0YWc6IHouc3RyaW5nKCksXG4gICAgY3dkOiB6LnN0cmluZygpLFxuICAgIGVudmlyb25tZW50OiB6LnN0cmluZygpLFxuICAgIG1vbml0b3Jpbmc6IHouYm9vbGVhbigpLFxuICAgIGxpY2Vuc2U6IHouc3RyaW5nKCksXG4gICAgbm9kZXM6IHoubnVtYmVyKCksXG4gICAgZm9yY2U6IHouYm9vbGVhbigpXG59KS5wYXJ0aWFsKHtcbiAgICB0YWc6IHRydWUsXG4gICAgbW9uaXRvcmluZzogdHJ1ZSxcbiAgICBsaWNlbnNlOiB0cnVlLFxuICAgIGZvcmNlOiB0cnVlXG59KTtcbmV4cG9ydCBjb25zdCBBUFRQcm92aXNpb25PcHRpb25zID0gei5vYmplY3Qoe1xuICAgIHByb2R1Y3Q6IFN1cHBvcnRlZEFwcGxpY2F0aW9ucyxcbiAgICB0YWc6IHouc3RyaW5nKCksXG4gICAgY3dkOiB6LnN0cmluZygpLFxuICAgIGVudmlyb25tZW50OiB6LnN0cmluZygpLFxuICAgIG1vbml0b3Jpbmc6IHouYm9vbGVhbigpLFxuICAgIGxpY2Vuc2U6IHouc3RyaW5nKCksXG4gICAgbm9kZXM6IHoubnVtYmVyKCksXG4gICAgZm9yY2U6IHouYm9vbGVhbigpXG59KS5wYXJ0aWFsKHtcbiAgICB0YWc6IHRydWUsXG4gICAgZW52aXJvbm1lbnQ6IHRydWUsXG4gICAgbW9uaXRvcmluZzogdHJ1ZSxcbiAgICBsaWNlbnNlOiB0cnVlLFxuICAgIG5vZGVzOiB0cnVlLFxuICAgIGZvcmNlOiB0cnVlXG59KTtcbmV4cG9ydCBjb25zdCBBUFRQZXJmb3JtYW5jZVRlc3RBcmdzID0gei5vYmplY3Qoe1xuICAgIHByb2R1Y3Q6IFN1cHBvcnRlZEFwcGxpY2F0aW9ucyxcbiAgICB0YWc6IHouc3RyaW5nKCksXG4gICAgY3dkOiB6LnN0cmluZygpLFxuICAgIG91dHB1dERpcjogei5zdHJpbmcoKSxcbiAgICBlbnZpcm9ubWVudDogei5zdHJpbmcoKSxcbiAgICBtb25pdG9yaW5nOiB6LmJvb2xlYW4oKSxcbiAgICBsaWNlbnNlOiB6LnN0cmluZygpLFxuICAgIGFwcEtleTogei5zdHJpbmcoKSxcbiAgICBhcmNoaXZlOiB6LnN0cmluZygpLFxuICAgIGFwcExpY2Vuc2U6IHouc3RyaW5nKCksXG4gICAgcmVzdGFydEFmdGVySW5zdGFsbDogei5ib29sZWFuKCksXG4gICAgdGltZXN0YW1wOiB6LnN0cmluZygpLFxuICAgIGZvcmNlOiB6LmJvb2xlYW4oKVxufSkucGFydGlhbCh7XG4gICAgdGFnOiB0cnVlLFxuICAgIG91dHB1dERpcjogdHJ1ZSxcbiAgICBtb25pdG9yaW5nOiB0cnVlLFxuICAgIGxpY2Vuc2U6IHRydWUsXG4gICAgYXBwS2V5OiB0cnVlLFxuICAgIGFyY2hpdmU6IHRydWUsXG4gICAgdGltZXN0YW1wOiB0cnVlLFxuICAgIHJlc3RhcnRBZnRlckluc3RhbGw6IHRydWUsXG4gICAgZm9yY2U6IHRydWVcbn0pO1xuZXhwb3J0IGNvbnN0IEFQVFBlcmZvcm1hbmNlVGVzdE9wdGlvbnMgPSB6Lm9iamVjdCh7XG4gICAgc3RhZ2U6IFBlcmZvcm1hbmNlVGVzdFR5cGVzLFxuICAgIHByb2R1Y3Q6IFN1cHBvcnRlZEFwcGxpY2F0aW9ucyxcbiAgICB0YWc6IHouc3RyaW5nKCksXG4gICAgY3dkOiB6LnN0cmluZygpLFxuICAgIG91dHB1dERpcjogei5zdHJpbmcoKSxcbiAgICBlbnZpcm9ubWVudDogei5zdHJpbmcoKSxcbiAgICBtb25pdG9yaW5nOiB6LmJvb2xlYW4oKSxcbiAgICBiYXNlVXJsOiB6LnN0cmluZygpLFxuICAgIGF3c19hY2Nlc3Nfa2V5X2lkOiB6LnN0cmluZygpLFxuICAgIGF3c19zZWNyZXRfYWNjZXNzX2tleTogei5zdHJpbmcoKSxcbiAgICBsaWNlbnNlOiB6LnN0cmluZygpLFxuICAgIGFwcEtleTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGFyY2hpdmU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBhcHBMaWNlbnNlOiB6LnN0cmluZygpLFxuICAgIHJlc3RhcnRBZnRlckluc3RhbGw6IHouYm9vbGVhbigpLFxuICAgIGZvcmNlOiB6LmJvb2xlYW4oKVxufSkucGFydGlhbCh7XG4gICAgdGFnOiB0cnVlLFxuICAgIG1vbml0b3Jpbmc6IHRydWUsXG4gICAgYmFzZVVybDogdHJ1ZSxcbiAgICBhd3NfYWNjZXNzX2tleV9pZDogdHJ1ZSxcbiAgICBhd3Nfc2VjcmV0X2FjY2Vzc19rZXk6IHRydWUsXG4gICAgYXBwTGljZW5zZTogdHJ1ZSxcbiAgICByZXN0YXJ0QWZ0ZXJJbnN0YWxsOiB0cnVlLFxuICAgIGZvcmNlOiB0cnVlXG59KS5zdXBlclJlZmluZSgoaW5wdXQsIGN0eCkgPT4ge1xuICAgIGlmIChpbnB1dC5zdGFnZSA9PT0gJ3JlZ3Jlc3Npb24nICYmICh0eXBlb2YgaW5wdXQuYXBwS2V5ID09PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgaW5wdXQuYXJjaGl2ZSA9PT0gJ3VuZGVmaW5lZCcpKSB7XG4gICAgICAgIGN0eC5hZGRJc3N1ZSh7XG4gICAgICAgICAgICBjb2RlOiB6LlpvZElzc3VlQ29kZS5jdXN0b20sXG4gICAgICAgICAgICBtZXNzYWdlOiAnRWl0aGVyIGBhcHBLZXlgIG9yIGBhcmNoaXZlYCBhcmd1bWVudCBuZWVkcyB0byBiZSBwcm92aWRlZCdcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59KTtcbmV4cG9ydCBjb25zdCBBUFRQZXJmb3JtYW5jZVJlcG9ydEFyZ3MgPSB6Lm9iamVjdCh7XG4gICAgdHlwZTogUmVwb3J0VHlwZXMucmVmaW5lKGl0ZW0gPT4gaXRlbSA9PT0gJ3BlcmZvcm1hbmNlJyksXG4gICAgdGltZXN0YW1wOiB6LnN0cmluZygpLFxuICAgIHJlc3VsdHNEaXIxOiB6LnN0cmluZygpLFxuICAgIHJlc3VsdHNEaXIyOiB6LnN0cmluZygpLFxuICAgIG91dHB1dERpcjogei5zdHJpbmcoKSxcbiAgICBjd2Q6IHouc3RyaW5nKClcbn0pLnBhcnRpYWwoe1xuICAgIG91dHB1dERpcjogdHJ1ZVxufSk7XG5leHBvcnQgY29uc3QgQVBUUGVyZm9ybWFuY2VSZXBvcnRPcHRpb25zID0gei5vYmplY3Qoe1xuICAgIGN3ZDogei5zdHJpbmcoKSxcbiAgICByZXN1bHRzRGlyMTogei5zdHJpbmcoKSxcbiAgICByZXN1bHRzRGlyMjogei5zdHJpbmcoKSxcbiAgICBvdXRwdXREaXI6IHouc3RyaW5nKCksXG4gICAgZm9yY2U6IHouYm9vbGVhbigpLFxufSkucGFydGlhbCh7XG4gICAgZm9yY2U6IHRydWVcbn0pO1xuZXhwb3J0IGNvbnN0IEFQVFNjYWxhYmlsaXR5VGVzdEFyZ3MgPSB6Lm9iamVjdCh7XG4gICAgcHJvZHVjdDogU3VwcG9ydGVkQXBwbGljYXRpb25zLFxuICAgIHRhZzogei5zdHJpbmcoKSxcbiAgICBjd2Q6IHouc3RyaW5nKCksXG4gICAgb3V0cHV0RGlyOiB6LnN0cmluZygpLFxuICAgIGVudmlyb25tZW50OiB6LnN0cmluZygpLFxuICAgIG1vbml0b3Jpbmc6IHouYm9vbGVhbigpLFxuICAgIGxpY2Vuc2U6IHouc3RyaW5nKCksXG4gICAgYXBwS2V5OiB6LnN0cmluZygpLFxuICAgIGFyY2hpdmU6IHouc3RyaW5nKCksXG4gICAgYXBwTGljZW5zZTogei5zdHJpbmcoKSxcbiAgICByZXN0YXJ0QWZ0ZXJJbnN0YWxsOiB6LmJvb2xlYW4oKSxcbiAgICBqbWV0ZXI6IHouYm9vbGVhbigpLFxuICAgIGxvY3VzdDogei5ib29sZWFuKCksXG4gICAgcXVlcnk6IHouc3RyaW5nKCksXG4gICAgdGltZXN0YW1wOiB6LnN0cmluZygpLFxuICAgIGZvcmNlOiB6LmJvb2xlYW4oKVxufSkucGFydGlhbCh7XG4gICAgdGFnOiB0cnVlLFxuICAgIG91dHB1dERpcjogdHJ1ZSxcbiAgICBtb25pdG9yaW5nOiB0cnVlLFxuICAgIGxpY2Vuc2U6IHRydWUsXG4gICAgYXBwS2V5OiB0cnVlLFxuICAgIGFyY2hpdmU6IHRydWUsXG4gICAgYXBwTGljZW5zZTogdHJ1ZSxcbiAgICByZXN0YXJ0QWZ0ZXJJbnN0YWxsOiB0cnVlLFxuICAgIGptZXRlcjogdHJ1ZSxcbiAgICBsb2N1c3Q6IHRydWUsXG4gICAgcXVlcnk6IHRydWUsXG4gICAgdGltZXN0YW1wOiB0cnVlLFxuICAgIGZvcmNlOiB0cnVlXG59KTtcbmV4cG9ydCBjb25zdCBBUFRTY2FsYWJpbGl0eVRlc3RPcHRpb25zID0gei5vYmplY3Qoe1xuICAgIHByb2R1Y3Q6IFN1cHBvcnRlZEFwcGxpY2F0aW9ucyxcbiAgICB0YWc6IHouc3RyaW5nKCksXG4gICAgY3dkOiB6LnN0cmluZygpLFxuICAgIG91dHB1dERpcjogei5zdHJpbmcoKSxcbiAgICBlbnZpcm9ubWVudDogei5zdHJpbmcoKSxcbiAgICBtb25pdG9yaW5nOiB6LmJvb2xlYW4oKSxcbiAgICBsaWNlbnNlOiB6LnN0cmluZygpLFxuICAgIGFwcEtleTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGFyY2hpdmU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBhcHBMaWNlbnNlOiB6LnN0cmluZygpLFxuICAgIHJlc3RhcnRBZnRlckluc3RhbGw6IHouYm9vbGVhbigpLFxuICAgIGptZXRlcjogei5ib29sZWFuKCksXG4gICAgbG9jdXN0OiB6LmJvb2xlYW4oKSxcbiAgICBxdWVyeTogei5zdHJpbmcoKSxcbiAgICBmb3JjZTogei5ib29sZWFuKClcbn0pLnBhcnRpYWwoe1xuICAgIHRhZzogdHJ1ZSxcbiAgICBtb25pdG9yaW5nOiB0cnVlLFxuICAgIGFwcExpY2Vuc2U6IHRydWUsXG4gICAgcmVzdGFydEFmdGVySW5zdGFsbDogdHJ1ZSxcbiAgICBqbWV0ZXI6IHRydWUsXG4gICAgbG9jdXN0OiB0cnVlLFxuICAgIHF1ZXJ5OiB0cnVlLFxuICAgIGZvcmNlOiB0cnVlXG59KS5zdXBlclJlZmluZSgoaW5wdXQsIGN0eCkgPT4ge1xuICAgIGlmICh0eXBlb2YgaW5wdXQuYXBwS2V5ID09PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgaW5wdXQuYXJjaGl2ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgY3R4LmFkZElzc3VlKHtcbiAgICAgICAgICAgIGNvZGU6IHouWm9kSXNzdWVDb2RlLmN1c3RvbSxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdFaXRoZXIgYGFwcEtleWAgb3IgYGFyY2hpdmVgIGFyZ3VtZW50IG5lZWRzIHRvIGJlIHByb3ZpZGVkJ1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn0pO1xuZXhwb3J0IGNvbnN0IEFQVFNjYWxhYmlsaXR5UmVwb3J0QXJncyA9IEFQVFBlcmZvcm1hbmNlUmVwb3J0QXJncy5leHRlbmQoe1xuICAgIHR5cGU6IFJlcG9ydFR5cGVzLnJlZmluZShpdGVtID0+IGl0ZW0gPT09ICdzY2FsYWJpbGl0eScpLFxuICAgIHJlc3VsdHNEaXIzOiB6LnN0cmluZygpLFxuICAgIHByb2R1Y3Q6IFN1cHBvcnRlZEFwcGxpY2F0aW9uc1xufSk7XG5leHBvcnQgY29uc3QgQVBUU2NhbGFiaWxpdHlSZXBvcnRPcHRpb25zID0gQVBUUGVyZm9ybWFuY2VSZXBvcnRPcHRpb25zLmV4dGVuZCh7XG4gICAgcHJvZHVjdDogU3VwcG9ydGVkQXBwbGljYXRpb25zLFxuICAgIHJlc3VsdHNEaXIzOiB6LnN0cmluZygpLFxufSk7XG5leHBvcnQgY29uc3QgQVBUVGVhcmRvd25BcmdzID0gei5vYmplY3Qoe1xuICAgIHByb2R1Y3Q6IFN1cHBvcnRlZEFwcGxpY2F0aW9ucyxcbiAgICBjd2Q6IHouc3RyaW5nKCksXG4gICAgZW52aXJvbm1lbnQ6IHouc3RyaW5nKCksXG4gICAgZm9yY2U6IHouYm9vbGVhbigpXG59KS5wYXJ0aWFsKHtcbiAgICBmb3JjZTogdHJ1ZVxufSk7XG5leHBvcnQgY29uc3QgQVBUVGVhcmRvd25PcHRpb25zID0gei5vYmplY3Qoe1xuICAgIHByb2R1Y3Q6IFN1cHBvcnRlZEFwcGxpY2F0aW9ucyxcbiAgICBjd2Q6IHouc3RyaW5nKCksXG4gICAgZW52aXJvbm1lbnQ6IHouc3RyaW5nKCksXG4gICAgYXdzX2FjY2Vzc19rZXlfaWQ6IHouc3RyaW5nKCksXG4gICAgYXdzX3NlY3JldF9hY2Nlc3Nfa2V5OiB6LnN0cmluZygpLFxuICAgIGZvcmNlOiB6LmJvb2xlYW4oKVxufSkucGFydGlhbCh7XG4gICAgYXdzX2FjY2Vzc19rZXlfaWQ6IHRydWUsXG4gICAgYXdzX3NlY3JldF9hY2Nlc3Nfa2V5OiB0cnVlLFxuICAgIGZvcmNlOiB0cnVlXG59KTtcbmV4cG9ydCBjb25zdCBBUFRSZXN0YXJ0QXJncyA9IEFQVFRlYXJkb3duQXJncy5leHRlbmQoe30pO1xuZXhwb3J0IGNvbnN0IEFQVFJlc3RhcnRPcHRpb25zID0gQVBUVGVhcmRvd25PcHRpb25zLmV4dGVuZCh7fSk7XG5leHBvcnQgY29uc3QgQVBURGVwZW5kZW5jeVRyZWVBcmdzID0gei5vYmplY3Qoe1xuICAgIGdyb3VwSWQ6IHouc3RyaW5nKCksXG4gICAgYXJ0aWZhY3RJZDogei5zdHJpbmcoKSxcbiAgICBhcHBLZXk6IHouc3RyaW5nKCksXG4gICAgYXJjaGl2ZTogei5zdHJpbmcoKSxcbiAgICBhY3RpdmF0ZVByb2ZpbGVzOiB6LnN0cmluZygpLFxuICAgIG91dHB1dEZpbGU6IHouc3RyaW5nKClcbn0pLnBhcnRpYWwoe1xuICAgIGFwcEtleTogdHJ1ZSxcbiAgICBhcmNoaXZlOiB0cnVlLFxuICAgIGFjdGl2YXRlUHJvZmlsZXM6IHRydWUsXG4gICAgb3V0cHV0RmlsZTogdHJ1ZVxufSk7XG5leHBvcnQgY29uc3QgQVBURGVwZW5kZW5jeVRyZWVPcHRpb25zID0gei5vYmplY3Qoe1xuICAgIGdyb3VwSWQ6IHouc3RyaW5nKCksXG4gICAgYXJ0aWZhY3RJZDogei5zdHJpbmcoKSxcbiAgICBhcHBLZXk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBhcmNoaXZlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgYWN0aXZhdGVQcm9maWxlczogei5zdHJpbmcoKSxcbiAgICBvdXRwdXRGaWxlOiB6LnN0cmluZygpXG59KS5wYXJ0aWFsKHtcbiAgICBhY3RpdmF0ZVByb2ZpbGVzOiB0cnVlXG59KS5zdXBlclJlZmluZSgoaW5wdXQsIGN0eCkgPT4ge1xuICAgIGlmICh0eXBlb2YgaW5wdXQuYXBwS2V5ID09PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgaW5wdXQuYXJjaGl2ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgY3R4LmFkZElzc3VlKHtcbiAgICAgICAgICAgIGNvZGU6IHouWm9kSXNzdWVDb2RlLmN1c3RvbSxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdFaXRoZXIgYGFwcEtleWAgb3IgYGFyY2hpdmVgIGFyZ3VtZW50IG5lZWRzIHRvIGJlIHByb3ZpZGVkJ1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn0pO1xuZXhwb3J0IGNvbnN0IEFQVFNDQUFyZ3MgPSB6Lm9iamVjdCh7XG4gICAgbnZkQXBpS2V5OiB6LnN0cmluZygpLFxuICAgIGFwcEtleTogei5zdHJpbmcoKSxcbiAgICBhcmNoaXZlOiB6LnN0cmluZygpLFxuICAgIGRhdGFEaXI6IHouc3RyaW5nKCksXG4gICAgZmFpbE9uRXJyb3I6IHouYm9vbGVhbigpLFxuICAgIG91dHB1dERpcjogei5zdHJpbmcoKVxufSkucGFydGlhbCh7XG4gICAgYXBwS2V5OiB0cnVlLFxuICAgIGFyY2hpdmU6IHRydWUsXG4gICAgZGF0YURpcjogdHJ1ZSxcbiAgICBmYWlsT25FcnJvcjogdHJ1ZSxcbiAgICBvdXRwdXREaXI6IHRydWVcbn0pO1xuZXhwb3J0IGNvbnN0IEFQVFNDQU9wdGlvbnMgPSB6Lm9iamVjdCh7XG4gICAgbnZkQXBpS2V5OiB6LnN0cmluZygpLFxuICAgIGFwcEtleTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGFyY2hpdmU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBkYXRhRGlyOiB6LnN0cmluZygpLFxuICAgIGZhaWxPbkVycm9yOiB6LmJvb2xlYW4oKSxcbiAgICBvdXRwdXREaXI6IHouc3RyaW5nKClcbn0pLnBhcnRpYWwoe1xuICAgIGRhdGFEaXI6IHRydWVcbn0pLnN1cGVyUmVmaW5lKChpbnB1dCwgY3R4KSA9PiB7XG4gICAgaWYgKHR5cGVvZiBpbnB1dC5hcHBLZXkgPT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBpbnB1dC5hcmNoaXZlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjdHguYWRkSXNzdWUoe1xuICAgICAgICAgICAgY29kZTogei5ab2RJc3N1ZUNvZGUuY3VzdG9tLFxuICAgICAgICAgICAgbWVzc2FnZTogJ0VpdGhlciBgYXBwS2V5YCBvciBgYXJjaGl2ZWAgYXJndW1lbnQgbmVlZHMgdG8gYmUgcHJvdmlkZWQnXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufSk7XG5leHBvcnQgY29uc3QgQVBUQXJncyA9IHouaW50ZXJzZWN0aW9uKEFQVFByb3Zpc2lvbk9wdGlvbnMsIHouaW50ZXJzZWN0aW9uKEFQVFBlcmZvcm1hbmNlVGVzdEFyZ3MsIEFQVFNjYWxhYmlsaXR5VGVzdEFyZ3MpKTtcbiIsImltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IEFQVFBlcmZvcm1hbmNlUmVwb3J0T3B0aW9ucywgQVBUUGVyZm9ybWFuY2VUZXN0T3B0aW9ucywgQVBUUHJvdmlzaW9uT3B0aW9ucywgUGVyZm9ybWFuY2VUZXN0VHlwZXMgfSBmcm9tICcuLi90eXBlcy9EQ0FQVCc7XG5pbXBvcnQgeyBnZW5lcmF0ZVBlcmZvcm1hbmNlUmVwb3J0IH0gZnJvbSAnLi9oZWxwZXJzL2dlbmVyYXRlUGVyZm9ybWFuY2VSZXBvcnQnO1xuaW1wb3J0IHsgZ2V0T3V0cHV0RGlyZWN0b3J5IH0gZnJvbSAnLi9oZWxwZXJzL2dldE91dHB1dERpcmVjdG9yeSc7XG5pbXBvcnQgeyBnZXRSdW5Gb3JTdGFnZSB9IGZyb20gJy4vaGVscGVycy9nZXRSdW5Gb3JTdGFnZSc7XG5pbXBvcnQgeyBwcm92aXNpb25DbHVzdGVyIH0gZnJvbSAnLi9oZWxwZXJzL3Byb3Zpc2lvbkNsdXN0ZXInO1xuaW1wb3J0IHsgcnVuTHVjZW5lVGltaW5nVGVzdCB9IGZyb20gJy4vaGVscGVycy9ydW5MdWNlbmVUaW1pbmdUZXN0JztcbmltcG9ydCB7IHJ1blBlcmZvcm1hbmNlVGVzdCB9IGZyb20gJy4vaGVscGVycy9ydW5QZXJmb3JtYW5jZVRlc3QnO1xuaW1wb3J0IHsgd2FpdEZvclVzZXJJbnB1dCB9IGZyb20gJy4vaGVscGVycy93YWl0Rm9yVXNlcklucHV0JztcbmltcG9ydCB7IEx1Y2VuZVRpbWluZ1Rlc3QsIFJ1bjEsIFJ1bjIgfSBmcm9tICcuL21lc3NhZ2VzJztcbmV4cG9ydCBjb25zdCBQZXJmb3JtYW5jZSA9IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgLy8gR2V0IHRoZSBvdXRwdXQgZGlyZWN0b3J5IGZvciB0aGUgdGVzdCByZXN1bHRzXG4gICAgY29uc3Qgb3V0cHV0RGlyID0gZ2V0T3V0cHV0RGlyZWN0b3J5KG9wdGlvbnMub3V0cHV0RGlyLCBvcHRpb25zLnRpbWVzdGFtcCk7XG4gICAgLy8gUHJvdmlzaW9uIHRoZSBjbHVzdGVyXG4gICAgY29uc3QgeyBjd2QsIGVudmlyb25tZW50LCBiYXNlVXJsLCBhd3NfYWNjZXNzX2tleV9pZCwgYXdzX3NlY3JldF9hY2Nlc3Nfa2V5LCBsaWNlbnNlIH0gPSBhd2FpdCBwcm92aXNpb25DbHVzdGVyKEFQVFByb3Zpc2lvbk9wdGlvbnMucGFyc2Uoe1xuICAgICAgICBwcm9kdWN0OiBvcHRpb25zLnByb2R1Y3QsXG4gICAgICAgIGN3ZDogb3B0aW9ucy5jd2QsXG4gICAgICAgIGVudmlyb25tZW50OiBvcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICBtb25pdG9yaW5nOiBvcHRpb25zLm1vbml0b3JpbmcsXG4gICAgICAgIGxpY2Vuc2U6IG9wdGlvbnMubGljZW5zZSxcbiAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICB9KSwgdHJ1ZSk7XG4gICAgLy8gQXNrIHBlcm1pc3Npb24gdG8gY29udGludWUgd2l0aCB0aGUgbmV4dCBzdGVwXG4gICAgYXdhaXQgd2FpdEZvclVzZXJJbnB1dCgnUHJlc3MgYSBrZXkgdG8gY29udGludWUgd2l0aCB0aGUgbmV4dCBzdGVwLi4uJywgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gUnVuIHRoZSBiYXNlbGluZSBwZXJmb3JtYW5jZSB0ZXN0IChydW4gMSlcbiAgICBhd2FpdCBydW5QZXJmb3JtYW5jZVRlc3QoQVBUUGVyZm9ybWFuY2VUZXN0T3B0aW9ucy5wYXJzZSh7XG4gICAgICAgIHN0YWdlOiBQZXJmb3JtYW5jZVRlc3RUeXBlcy5WYWx1ZXMuYmFzZWxpbmUsXG4gICAgICAgIHByb2R1Y3Q6IG9wdGlvbnMucHJvZHVjdCxcbiAgICAgICAgY3dkLFxuICAgICAgICBvdXRwdXREaXIsXG4gICAgICAgIGVudmlyb25tZW50LFxuICAgICAgICBiYXNlVXJsLFxuICAgICAgICBhd3NfYWNjZXNzX2tleV9pZCxcbiAgICAgICAgYXdzX3NlY3JldF9hY2Nlc3Nfa2V5LFxuICAgICAgICBsaWNlbnNlLFxuICAgICAgICBhcHBLZXk6IG9wdGlvbnMuYXBwS2V5LFxuICAgICAgICBhcmNoaXZlOiBvcHRpb25zLmFyY2hpdmUsXG4gICAgICAgIHJlc3RhcnRBZnRlckluc3RhbGw6IG9wdGlvbnMucmVzdGFydEFmdGVySW5zdGFsbCxcbiAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICB9KSwgUnVuMSk7XG4gICAgLy8gQXNrIHBlcm1pc3Npb24gdG8gY29udGludWUgd2l0aCB0aGUgbmV4dCBzdGVwXG4gICAgYXdhaXQgd2FpdEZvclVzZXJJbnB1dCgnUHJlc3MgYSBrZXkgdG8gY29udGludWUgd2l0aCB0aGUgbmV4dCBzdGVwLi4uJywgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gUnVuIHRoZSBsdWNlbmUgdGltaW5nIHRlc3QgKHBhcnQgb2YgcnVuIDIpXG4gICAgYXdhaXQgcnVuTHVjZW5lVGltaW5nVGVzdChBUFRQZXJmb3JtYW5jZVRlc3RPcHRpb25zLnBhcnNlKHtcbiAgICAgICAgc3RhZ2U6IFBlcmZvcm1hbmNlVGVzdFR5cGVzLlZhbHVlcy5yZWdyZXNzaW9uLFxuICAgICAgICBwcm9kdWN0OiBvcHRpb25zLnByb2R1Y3QsXG4gICAgICAgIGN3ZCxcbiAgICAgICAgb3V0cHV0RGlyLFxuICAgICAgICBlbnZpcm9ubWVudCxcbiAgICAgICAgYmFzZVVybCxcbiAgICAgICAgYXdzX2FjY2Vzc19rZXlfaWQsXG4gICAgICAgIGF3c19zZWNyZXRfYWNjZXNzX2tleSxcbiAgICAgICAgbGljZW5zZSxcbiAgICAgICAgYXBwS2V5OiBvcHRpb25zLmFwcEtleSxcbiAgICAgICAgYXJjaGl2ZTogb3B0aW9ucy5hcmNoaXZlLFxuICAgICAgICByZXN0YXJ0QWZ0ZXJJbnN0YWxsOiBvcHRpb25zLnJlc3RhcnRBZnRlckluc3RhbGwsXG4gICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgfSksIEx1Y2VuZVRpbWluZ1Rlc3QpO1xuICAgIC8vIEFzayBwZXJtaXNzaW9uIHRvIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgc3RlcFxuICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgc3RlcC4uLicsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIFJ1biB0aGUgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiB0ZXN0IChydW4gMilcbiAgICBhd2FpdCBydW5QZXJmb3JtYW5jZVRlc3QoQVBUUGVyZm9ybWFuY2VUZXN0T3B0aW9ucy5wYXJzZSh7XG4gICAgICAgIHN0YWdlOiBQZXJmb3JtYW5jZVRlc3RUeXBlcy5WYWx1ZXMucmVncmVzc2lvbixcbiAgICAgICAgcHJvZHVjdDogb3B0aW9ucy5wcm9kdWN0LFxuICAgICAgICBjd2QsXG4gICAgICAgIG91dHB1dERpcixcbiAgICAgICAgZW52aXJvbm1lbnQsXG4gICAgICAgIGJhc2VVcmwsXG4gICAgICAgIGF3c19hY2Nlc3Nfa2V5X2lkLFxuICAgICAgICBhd3Nfc2VjcmV0X2FjY2Vzc19rZXksXG4gICAgICAgIGxpY2Vuc2UsXG4gICAgICAgIGFwcEtleTogb3B0aW9ucy5hcHBLZXksXG4gICAgICAgIGFyY2hpdmU6IG9wdGlvbnMuYXJjaGl2ZSxcbiAgICAgICAgcmVzdGFydEFmdGVySW5zdGFsbDogb3B0aW9ucy5yZXN0YXJ0QWZ0ZXJJbnN0YWxsLFxuICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgIH0pLCBSdW4yKTtcbiAgICAvLyBBc2sgcGVybWlzc2lvbiB0byBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHN0ZXBcbiAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHN0ZXAuLi4nLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBHZW5lcmF0ZSB0aGUgcGVyZm9ybWFuY2UgcmVwb3J0XG4gICAgYXdhaXQgZ2VuZXJhdGVQZXJmb3JtYW5jZVJlcG9ydChBUFRQZXJmb3JtYW5jZVJlcG9ydE9wdGlvbnMucGFyc2Uoe1xuICAgICAgICBjd2QsXG4gICAgICAgIG91dHB1dERpcixcbiAgICAgICAgcmVzdWx0c0RpcjE6IGpvaW4ob3V0cHV0RGlyLCBgcnVuJHtnZXRSdW5Gb3JTdGFnZSgnYmFzZWxpbmUnKX1gKSxcbiAgICAgICAgcmVzdWx0c0RpcjI6IGpvaW4ob3V0cHV0RGlyLCBgcnVuJHtnZXRSdW5Gb3JTdGFnZSgncmVncmVzc2lvbicpfWApLFxuICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgIH0pKTtcbn07XG4iLCJpbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBBUFRTY2FsYWJpbGl0eVJlcG9ydE9wdGlvbnMsIEFQVFNjYWxhYmlsaXR5VGVzdE9wdGlvbnMgfSBmcm9tICcuLi90eXBlcy9EQ0FQVCc7XG5pbXBvcnQgeyBnZW5lcmF0ZVNjYWxhYmlsaXR5UmVwb3J0IH0gZnJvbSAnLi9oZWxwZXJzL2dlbmVyYXRlU2NhbGFiaWxpdHlSZXBvcnQnO1xuaW1wb3J0IHsgZ2V0T3V0cHV0RGlyZWN0b3J5IH0gZnJvbSAnLi9oZWxwZXJzL2dldE91dHB1dERpcmVjdG9yeSc7XG5pbXBvcnQgeyBnZXRSdW5Gb3JTdGFnZSB9IGZyb20gJy4vaGVscGVycy9nZXRSdW5Gb3JTdGFnZSc7XG5pbXBvcnQgeyBwcm92aXNpb25DbHVzdGVyIH0gZnJvbSAnLi9oZWxwZXJzL3Byb3Zpc2lvbkNsdXN0ZXInO1xuaW1wb3J0IHsgcnVuU2NhbGFiaWxpdHlUZXN0IH0gZnJvbSAnLi9oZWxwZXJzL3J1blNjYWxhYmlsaXR5VGVzdCc7XG5pbXBvcnQgeyB3YWl0Rm9yVXNlcklucHV0IH0gZnJvbSAnLi9oZWxwZXJzL3dhaXRGb3JVc2VySW5wdXQnO1xuaW1wb3J0IHsgU2NhbGFiaWxpdHlUZXN0TWVzc2FnZXMgfSBmcm9tICcuL21lc3NhZ2VzJztcbmV4cG9ydCBjb25zdCBTY2FsYWJpbGl0eSA9IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgLy8gR2V0IHRoZSBvdXRwdXQgZGlyZWN0b3J5IGZvciB0aGUgdGVzdCByZXN1bHRzXG4gICAgY29uc3Qgb3V0cHV0RGlyID0gZ2V0T3V0cHV0RGlyZWN0b3J5KG9wdGlvbnMub3V0cHV0RGlyLCBvcHRpb25zLnRpbWVzdGFtcCk7XG4gICAgLy8gUHJvdmlzaW9uIHRoZSBjbHVzdGVyXG4gICAgY29uc3QgeyBjd2QsIGVudmlyb25tZW50LCBsaWNlbnNlIH0gPSBhd2FpdCBwcm92aXNpb25DbHVzdGVyKHtcbiAgICAgICAgcHJvZHVjdDogb3B0aW9ucy5wcm9kdWN0LFxuICAgICAgICBjd2Q6IG9wdGlvbnMuY3dkLFxuICAgICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCxcbiAgICAgICAgbW9uaXRvcmluZzogb3B0aW9ucy5tb25pdG9yaW5nLFxuICAgICAgICBsaWNlbnNlOiBvcHRpb25zLmxpY2Vuc2UsXG4gICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgfSwgZmFsc2UpO1xuICAgIC8vIEFzayBwZXJtaXNzaW9uIHRvIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgc3RlcFxuICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgc3RlcC4uLicsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIFJ1biB0aGUgc2NhbGFiaWxpdHkgdGVzdCB3aXRoIGEgb25lLW5vZGUgY2x1c3RlclxuICAgIGF3YWl0IHJ1blNjYWxhYmlsaXR5VGVzdCgnb25lLW5vZGUnLCBBUFRTY2FsYWJpbGl0eVRlc3RPcHRpb25zLnBhcnNlKHtcbiAgICAgICAgcHJvZHVjdDogb3B0aW9ucy5wcm9kdWN0LFxuICAgICAgICBjd2QsXG4gICAgICAgIG91dHB1dERpcixcbiAgICAgICAgZW52aXJvbm1lbnQsXG4gICAgICAgIGxpY2Vuc2UsXG4gICAgICAgIGFwcEtleTogb3B0aW9ucy5hcHBLZXksXG4gICAgICAgIGFyY2hpdmU6IG9wdGlvbnMuYXJjaGl2ZSxcbiAgICAgICAgYXBwTGljZW5zZTogb3B0aW9ucy5hcHBMaWNlbnNlLFxuICAgICAgICByZXN0YXJ0QWZ0ZXJJbnN0YWxsOiBvcHRpb25zLnJlc3RhcnRBZnRlckluc3RhbGwsXG4gICAgICAgIGptZXRlcjogb3B0aW9ucy5qbWV0ZXIsXG4gICAgICAgIGxvY3VzdDogb3B0aW9ucy5sb2N1c3QsXG4gICAgICAgIHF1ZXJ5OiBvcHRpb25zLnF1ZXJ5LFxuICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgIH0pLCBTY2FsYWJpbGl0eVRlc3RNZXNzYWdlcyk7XG4gICAgLy8gQXNrIHBlcm1pc3Npb24gdG8gY29udGludWUgd2l0aCB0aGUgbmV4dCBzdGVwXG4gICAgYXdhaXQgd2FpdEZvclVzZXJJbnB1dCgnUHJlc3MgYSBrZXkgdG8gY29udGludWUgd2l0aCB0aGUgbmV4dCBzdGVwLi4uJywgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gUnVuIHRoZSBzY2FsYWJpbGl0eSB0ZXN0IHdpdGggYSB0d28tbm9kZSBjbHVzdGVyXG4gICAgYXdhaXQgcnVuU2NhbGFiaWxpdHlUZXN0KCd0d28tbm9kZScsIEFQVFNjYWxhYmlsaXR5VGVzdE9wdGlvbnMucGFyc2Uoe1xuICAgICAgICBwcm9kdWN0OiBvcHRpb25zLnByb2R1Y3QsXG4gICAgICAgIGN3ZCxcbiAgICAgICAgb3V0cHV0RGlyLFxuICAgICAgICBlbnZpcm9ubWVudCxcbiAgICAgICAgbGljZW5zZSxcbiAgICAgICAgYXBwS2V5OiBvcHRpb25zLmFwcEtleSxcbiAgICAgICAgYXJjaGl2ZTogb3B0aW9ucy5hcmNoaXZlLFxuICAgICAgICBhcHBMaWNlbnNlOiBvcHRpb25zLmFwcExpY2Vuc2UsXG4gICAgICAgIHJlc3RhcnRBZnRlckluc3RhbGw6IG9wdGlvbnMucmVzdGFydEFmdGVySW5zdGFsbCxcbiAgICAgICAgam1ldGVyOiBvcHRpb25zLmptZXRlcixcbiAgICAgICAgbG9jdXN0OiBvcHRpb25zLmxvY3VzdCxcbiAgICAgICAgcXVlcnk6IG9wdGlvbnMucXVlcnksXG4gICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgfSksIFNjYWxhYmlsaXR5VGVzdE1lc3NhZ2VzKTtcbiAgICAvLyBBc2sgcGVybWlzc2lvbiB0byBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHN0ZXBcbiAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHN0ZXAuLi4nLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBSdW4gdGhlIHNjYWxhYmlsaXR5IHRlc3Qgd2l0aCBhIG9uZS1ub2RlIGNsdXN0ZXJcbiAgICBhd2FpdCBydW5TY2FsYWJpbGl0eVRlc3QoJ2ZvdXItbm9kZScsIEFQVFNjYWxhYmlsaXR5VGVzdE9wdGlvbnMucGFyc2Uoe1xuICAgICAgICBwcm9kdWN0OiBvcHRpb25zLnByb2R1Y3QsXG4gICAgICAgIGN3ZCxcbiAgICAgICAgb3V0cHV0RGlyLFxuICAgICAgICBlbnZpcm9ubWVudCxcbiAgICAgICAgbGljZW5zZSxcbiAgICAgICAgYXBwS2V5OiBvcHRpb25zLmFwcEtleSxcbiAgICAgICAgYXJjaGl2ZTogb3B0aW9ucy5hcmNoaXZlLFxuICAgICAgICBhcHBMaWNlbnNlOiBvcHRpb25zLmFwcExpY2Vuc2UsXG4gICAgICAgIHJlc3RhcnRBZnRlckluc3RhbGw6IG9wdGlvbnMucmVzdGFydEFmdGVySW5zdGFsbCxcbiAgICAgICAgam1ldGVyOiBvcHRpb25zLmptZXRlcixcbiAgICAgICAgbG9jdXN0OiBvcHRpb25zLmxvY3VzdCxcbiAgICAgICAgcXVlcnk6IG9wdGlvbnMucXVlcnksXG4gICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgfSksIFNjYWxhYmlsaXR5VGVzdE1lc3NhZ2VzKTtcbiAgICAvLyBBc2sgcGVybWlzc2lvbiB0byBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHN0ZXBcbiAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHN0ZXAuLi4nLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBHZW5lcmF0ZSB0aGUgc2NhbGFiaWxpdHkgcmVwb3J0XG4gICAgYXdhaXQgZ2VuZXJhdGVTY2FsYWJpbGl0eVJlcG9ydChBUFRTY2FsYWJpbGl0eVJlcG9ydE9wdGlvbnMucGFyc2Uoe1xuICAgICAgICBjd2QsXG4gICAgICAgIHByb2R1Y3Q6IG9wdGlvbnMucHJvZHVjdCxcbiAgICAgICAgcmVzdWx0c0RpcjE6IGpvaW4ob3V0cHV0RGlyLCBgcnVuJHtnZXRSdW5Gb3JTdGFnZSgnb25lLW5vZGUnKX1gKSxcbiAgICAgICAgcmVzdWx0c0RpcjI6IGpvaW4ob3V0cHV0RGlyLCBgcnVuJHtnZXRSdW5Gb3JTdGFnZSgndHdvLW5vZGUnKX1gKSxcbiAgICAgICAgcmVzdWx0c0RpcjM6IGpvaW4ob3V0cHV0RGlyLCBgcnVuJHtnZXRSdW5Gb3JTdGFnZSgnZm91ci1ub2RlJyl9YCksXG4gICAgICAgIG91dHB1dERpcixcbiAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICB9KSk7XG59O1xuIiwiaW1wb3J0IHsgYXN5bmNFeGl0SG9vaywgZ3JhY2VmdWxFeGl0IH0gZnJvbSAnZXhpdC1ob29rJztcbmltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuZXhwb3J0IGNvbnN0IEFjdGlvbkhhbmRsZXIgPSBhc3luYyAocHJvZ3JhbSwgeyBhY3Rpb24sIGVycm9ySGFuZGxlciB9LCBvcHRpb25zKSA9PiB7XG4gICAgY29uc3Qgb3BzID0gb3B0aW9ucyB8fCBwcm9ncmFtLm9wdHMoKTtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZSgoXywgcmVqZWN0KSA9PiB7XG4gICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSAnJztcbiAgICAgICAgYXN5bmNFeGl0SG9vayhhc3luYyAoY29kZSkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoY29kZSAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBlcnJvckhhbmRsZXIob3BzKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yTWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlLnRyaW0oKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBXZSBhcmUgcmVqZWN0aW5nIHRoZSBwcm9taXNlIHRvIGF2b2lkIHRoZVxuICAgICAgICAgICAgICAgICAgICAvLyBcIkNhbGxpbmcgcHJvY2Vzcy5leGl0XCIgbG9nIG1lc3NhZ2UgZnJvbSBleGl0LWhvb2tcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6IGVycjtcbiAgICAgICAgICAgICAgICByZWplY3QobWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHdhaXQ6IDYwICogMSAqIDEwMDBcbiAgICAgICAgfSk7XG4gICAgICAgIGFjdGlvbihvcHMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZ3JhY2VmdWxFeGl0KDApO1xuICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIHouWm9kRXJyb3IpIHtcbiAgICAgICAgICAgICAgICBlcnIuaXNzdWVzLmZvckVhY2goaXNzdWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgKz0gYFVuYWJsZSB0byBwYXJzZSBvcHRpb24gJHtpc3N1ZS5wYXRoLmpvaW4oJywnKX06ICR7aXNzdWUubWVzc2FnZX1cXG5gO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IgfHwgdHlwZW9mIGVyciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBlcnIudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGdyYWNlZnVsRXhpdCgxKTtcbiAgICAgICAgfSk7XG4gICAgfSkuY2F0Y2gobWVzc2FnZSA9PiB7XG4gICAgICAgIGlmIChtZXNzYWdlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBwcm9ncmFtLmVycm9yKG1lc3NhZ2UpO1xuICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gZXJyb3IgbWVzc2FnZSxcbiAgICAgICAgICAgIC8vIHdlIGNhbiBhc3N1bWUgYSBjbGVhbiBleGl0XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwcm9jZXNzLmV4aXQoMCk7XG4gICAgICAgIH1cbiAgICB9KTtcbn07XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IGNvbnNvbGUgZnJvbSAnY29uc29sZSc7XG5pbXBvcnQgeyB3cml0ZUZpbGVTeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHNlbXZlciBmcm9tICdzZW12ZXInO1xuaW1wb3J0IHsgZ2V0VmVyc2lvbnMgfSBmcm9tICcuL2dldFZlcnNpb25zJztcbmltcG9ydCB7IHRvQWJzb2x1dGVQYXRoIH0gZnJvbSAnLi90b0Fic29sdXRlUGF0aCc7XG5jb25zdCByZXBvc2l0b3JpZXMgPSBbXG4gICAgeyBuYW1lOiAnamlyYScsIHJlcG9zaXRvcnk6ICdhdGxhc3NpYW4vamlyYS1zb2Z0d2FyZScgfSxcbiAgICB7IG5hbWU6ICdjb25mbHVlbmNlJywgcmVwb3NpdG9yeTogJ2F0bGFzc2lhbi9jb25mbHVlbmNlJyB9LFxuICAgIHsgbmFtZTogJ2JhbWJvbycsIHJlcG9zaXRvcnk6ICdhdGxhc3NpYW4vYmFtYm9vJyB9LFxuICAgIHsgbmFtZTogJ2JpdGJ1Y2tldCcsIHJlcG9zaXRvcnk6ICdhdGxhc3NpYW4vYml0YnVja2V0JyB9LFxuICAgIHsgbmFtZTogJ215c3FsJywgcmVwb3NpdG9yeTogJ2xpYnJhcnkvbXlzcWwnIH0sXG4gICAgeyBuYW1lOiAncG9zdGdyZXNxbCcsIHJlcG9zaXRvcnk6ICdsaWJyYXJ5L3Bvc3RncmVzJyB9LFxuXTtcbmNvbnN0IGdldExpc3RPZlRhZ3NQYWdpbmF0ZWQgPSBhc3luYyAodXJsKSA9PiB7XG4gICAgY29uc3QgdGFncyA9IFtdO1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgYXhpb3MuZ2V0KHVybCk7XG4gICAgaWYgKGRhdGEpIHtcbiAgICAgICAgdGFncy5wdXNoKC4uLmRhdGEucmVzdWx0cy5tYXAoKGl0ZW0pID0+IGl0ZW0ubmFtZSkpO1xuICAgICAgICBpZiAoZGF0YS5uZXh0KSB7XG4gICAgICAgICAgICAvLyBBZGQgYSBiYWNrb2ZmIHBlcmlvZCB0byBhdm9pZCByYXRlIGxpbWl0aW5nXG4gICAgICAgICAgICAvLyBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTAwKSk7XG4gICAgICAgICAgICB0YWdzLnB1c2goLi4uYXdhaXQgZ2V0TGlzdE9mVGFnc1BhZ2luYXRlZChkYXRhLm5leHQpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGFncztcbn07XG5jb25zdCBzb3J0QnlWZXJzaW9uID0gKGEsIGIpID0+IHtcbiAgICBhID0gYS5zcGxpdCgnLScpWzBdO1xuICAgIGIgPSBiLnNwbGl0KCctJylbMF07XG4gICAgaWYgKGlzTmFOKE51bWJlcihhLmNoYXJBdCgwKSkpKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gICAgaWYgKGlzTmFOKE51bWJlcihiLmNoYXJBdCgwKSkpKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICBpZiAoYS5zcGxpdCgnLicpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBhID0gYCR7YX0uMC4wYDtcbiAgICB9XG4gICAgZWxzZSBpZiAoYS5zcGxpdCgnLicpLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBhID0gYCR7YX0uMGA7XG4gICAgfVxuICAgIGlmIChiLnNwbGl0KCcuJykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGIgPSBgJHthfS4wLjBgO1xuICAgIH1cbiAgICBlbHNlIGlmIChhLnNwbGl0KCcuJykubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGIgPSBgJHthfS4wYDtcbiAgICB9XG4gICAgY29uc3QgbGVmdFZlcnNpb24gPSBzZW12ZXIuY29lcmNlKGEpO1xuICAgIGNvbnN0IHJpZ2h0VmVyc2lvbiA9IHNlbXZlci5jb2VyY2UoYik7XG4gICAgaWYgKCFsZWZ0VmVyc2lvbilcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgaWYgKCFyaWdodFZlcnNpb24pXG4gICAgICAgIHJldHVybiAwO1xuICAgIHJldHVybiBzZW12ZXIubHQobGVmdFZlcnNpb24sIHJpZ2h0VmVyc2lvbikgPyAtMSA6IHNlbXZlci5ndChsZWZ0VmVyc2lvbiwgcmlnaHRWZXJzaW9uKSA/IDEgOiAwO1xufTtcbmV4cG9ydCBjb25zdCBnZW5lcmF0ZVZlcnNpb25MaXN0ID0gYXN5bmMgKHJlcG9zaXRvcnkpID0+IHtcbiAgICBjb25zdCB2ZXJzaW9ucyA9IGdldFZlcnNpb25zKCk7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgZm9yIGF3YWl0IChjb25zdCBpdGVtIG9mIHJlcG9zaXRvcmllcykge1xuICAgICAgICBpZiAocmVwb3NpdG9yeSAmJiBpdGVtLm5hbWUgIT09IHJlcG9zaXRvcnkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZXRyaWV2aW5nIGxpc3Qgb2YgdGFncyBmb3IgJHtpdGVtLm5hbWV9Li4uYCk7XG4gICAgICAgIGNvbnN0IHRhZ3MgPSBhd2FpdCBnZXRMaXN0T2ZUYWdzUGFnaW5hdGVkKGBodHRwczovL2h1Yi5kb2NrZXIuY29tL3YyL3JlcG9zaXRvcmllcy8ke2l0ZW0ucmVwb3NpdG9yeX0vdGFncy8/cGFnZV9zaXplPTEwMGApO1xuICAgICAgICByZXN1bHRbaXRlbS5uYW1lXSA9IHRhZ3Muc29ydChzb3J0QnlWZXJzaW9uKTtcbiAgICB9XG4gICAgLy8gTWljcm9zZnQgU1FMIFNlcnZlciBoYXMgaXQncyBvd24gcmVnaXN0cnkgd2l0aCBhIGRpZmZlcmVudCBBUElcbiAgICBpZiAoIXJlcG9zaXRvcnkgfHwgcmVwb3NpdG9yeSA9PT0gJ21zc3FsJykge1xuICAgICAgICBjb25zb2xlLmxvZyhgUmV0cmlldmluZyBsaXN0IG9mIHRhZ3MgZm9yIG1zc3FsLi4uYCk7XG4gICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgYXhpb3MuZ2V0KCdodHRwczovL21jci5taWNyb3NvZnQuY29tL3YyL21zc3FsL3NlcnZlci90YWdzL2xpc3QnKTtcbiAgICAgICAgcmVzdWx0Wydtc3NxbCddID0gZGF0YS50YWdzLnNvcnQoc29ydEJ5VmVyc2lvbik7XG4gICAgfVxuICAgIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB2ZXJzaW9uc1trZXldID0gdmFsdWUpO1xuICAgIHdyaXRlRmlsZVN5bmModG9BYnNvbHV0ZVBhdGgoJy4uLy4uL2Fzc2V0cy92ZXJzaW9ucy5qc29uJyksIEpTT04uc3RyaW5naWZ5KHZlcnNpb25zLCBudWxsLCAyKSk7XG4gICAgcmV0dXJuIHZlcnNpb25zO1xufTtcbiIsIiMhL3Vzci9iaW4vZW52IG5vZGVcbmltcG9ydCB7IENvbW1hbmQgYXMgQ29tbWFuZGVyLCBPcHRpb24gfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHsgZ3JhY2VmdWxFeGl0IH0gZnJvbSAnZXhpdC1ob29rJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IGN3ZCB9IGZyb20gJ3Byb2Nlc3MnO1xuaW1wb3J0IHsgZ2VuZXJhdGVEZXBlbmRlbmN5VHJlZSB9IGZyb20gJy4uL2FwdC9oZWxwZXJzL2dlbmVyYXRlRGVwZW5kZW5jeVRyZWUnO1xuaW1wb3J0IHsgZ2VuZXJhdGVQZXJmb3JtYW5jZVJlcG9ydCB9IGZyb20gJy4uL2FwdC9oZWxwZXJzL2dlbmVyYXRlUGVyZm9ybWFuY2VSZXBvcnQnO1xuaW1wb3J0IHsgZ2VuZXJhdGVTY2FsYWJpbGl0eVJlcG9ydCB9IGZyb20gJy4uL2FwdC9oZWxwZXJzL2dlbmVyYXRlU2NhbGFiaWxpdHlSZXBvcnQnO1xuaW1wb3J0IHsgZ2VuZXJhdGVTQ0FSZXBvcnQgfSBmcm9tICcuLi9hcHQvaGVscGVycy9nZW5lcmF0ZVNDQVJlcG9ydCc7XG5pbXBvcnQgeyBnZXRIb3N0TGljZW5zZSB9IGZyb20gJy4uL2FwdC9oZWxwZXJzL2dldEhvc3RMaWNlbnNlJztcbmltcG9ydCB7IGdldE91dHB1dERpcmVjdG9yeSB9IGZyb20gJy4uL2FwdC9oZWxwZXJzL2dldE91dHB1dERpcmVjdG9yeSc7XG5pbXBvcnQgeyBnZXRQcm9kdWN0IH0gZnJvbSAnLi4vYXB0L2hlbHBlcnMvZ2V0UHJvZHVjdCc7XG5pbXBvcnQgeyBwcm92aXNpb25DbHVzdGVyIH0gZnJvbSAnLi4vYXB0L2hlbHBlcnMvcHJvdmlzaW9uQ2x1c3Rlcic7XG5pbXBvcnQgeyByZXN0YXJ0Q2x1c3RlciB9IGZyb20gJy4uL2FwdC9oZWxwZXJzL3Jlc3RhcnRDbHVzdGVyJztcbmltcG9ydCB7IHJ1bkx1Y2VuZVRpbWluZ1Rlc3QgfSBmcm9tICcuLi9hcHQvaGVscGVycy9ydW5MdWNlbmVUaW1pbmdUZXN0JztcbmltcG9ydCB7IHJ1blBlcmZvcm1hbmNlVGVzdCB9IGZyb20gJy4uL2FwdC9oZWxwZXJzL3J1blBlcmZvcm1hbmNlVGVzdCc7XG5pbXBvcnQgeyBydW5TY2FsYWJpbGl0eVRlc3QgfSBmcm9tICcuLi9hcHQvaGVscGVycy9ydW5TY2FsYWJpbGl0eVRlc3QnO1xuaW1wb3J0IHsgdGVhcmRvd25DbHVzdGVyIH0gZnJvbSAnLi4vYXB0L2hlbHBlcnMvdGVhcmRvd25DbHVzdGVyJztcbmltcG9ydCB7IHdhaXRGb3JVc2VySW5wdXQgfSBmcm9tICcuLi9hcHQvaGVscGVycy93YWl0Rm9yVXNlcklucHV0JztcbmltcG9ydCB7IGVtcHR5TGluZSwgZ2VuZXJpYywgaW5pdCwgTHVjZW5lVGltaW5nVGVzdCwgUnVuMSwgUnVuMiwgU2NhbGFiaWxpdHlUZXN0TWVzc2FnZXMgfSBmcm9tICcuLi9hcHQvbWVzc2FnZXMnO1xuaW1wb3J0IHsgUGVyZm9ybWFuY2UgfSBmcm9tICcuLi9hcHQvcGVyZm9ybWFuY2UnO1xuaW1wb3J0IHsgU2NhbGFiaWxpdHkgfSBmcm9tICcuLi9hcHQvc2NhbGFiaWxpdHknO1xuaW1wb3J0IHsgQWN0aW9uSGFuZGxlciB9IGZyb20gJy4uL2hlbHBlcnMvQWN0aW9uSGFuZGxlcic7XG5pbXBvcnQgeyBnZW5lcmF0ZVZlcnNpb25MaXN0IH0gZnJvbSAnLi4vaGVscGVycy9nZW5lcmF0ZVZlcnNpb25MaXN0JztcbmltcG9ydCB7IGdldFZlcnNpb25zIH0gZnJvbSAnLi4vaGVscGVycy9nZXRWZXJzaW9ucyc7XG5pbXBvcnQgeyBTdXBwb3J0ZWRBcHBsaWNhdGlvbnMgfSBmcm9tICcuLi90eXBlcy9BcHBsaWNhdGlvbic7XG5pbXBvcnQgeyBBUFREZXBlbmRlbmN5VHJlZU9wdGlvbnMsIEFQVFBlcmZvcm1hbmNlUmVwb3J0T3B0aW9ucywgQVBUUGVyZm9ybWFuY2VUZXN0T3B0aW9ucywgQVBUUHJvdmlzaW9uT3B0aW9ucywgQVBUUmVzdGFydE9wdGlvbnMsIEFQVFNjYWxhYmlsaXR5UmVwb3J0T3B0aW9ucywgQVBUU2NhbGFiaWxpdHlUZXN0T3B0aW9ucywgQVBUU0NBT3B0aW9ucywgQVBUVGVhcmRvd25PcHRpb25zLCBQZXJmb3JtYW5jZVRlc3RUeXBlcywgUmVwb3J0VHlwZXMgfSBmcm9tICcuLi90eXBlcy9EQ0FQVCc7XG5jb25zdCBwcm9ncmFtID0gbmV3IENvbW1hbmRlcigpO1xuY29uc3QgdmVyc2lvbnMgPSBnZXRWZXJzaW9ucygpO1xuY29uc3QgRGVmYXVsdENvbW1hbmQgPSAoKSA9PiAoe1xuICAgIGFjdGlvbjogYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgLy8gQ2xlYXIgdGhlIGNvbnNvbGUgYW5kIHNob3cgYSB3ZWxjb21lIG1lc3NhZ2VcbiAgICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJ1xceDFCYycpO1xuICAgICAgICBjb25zb2xlLmxvZyhnZW5lcmljLmhlYWRlcik7XG4gICAgICAgIGNvbnN0IHZlcnNpb24gPSBvcHRpb25zLnRhZztcbiAgICAgICAgaWYgKHZlcnNpb24pIHtcbiAgICAgICAgICAgIGlmICghdmVyc2lvbnNbb3B0aW9ucy5wcm9kdWN0XS5pbmNsdWRlcyh2ZXJzaW9uKSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBDb3VsZCBub3QgZmluZCBzcGVjaWZpZWQgdmVyc2lvbiAke3ZlcnNpb259LCB1cGRhdGluZyAke29wdGlvbnMucHJvZHVjdH0gdmVyc2lvbiBsaXN0YCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZFZlcnNpb25zID0gYXdhaXQgZ2VuZXJhdGVWZXJzaW9uTGlzdChvcHRpb25zLnByb2R1Y3QpO1xuICAgICAgICAgICAgICAgIGlmICghdXBkYXRlZFZlcnNpb25zW29wdGlvbnMucHJvZHVjdF0uaW5jbHVkZXModmVyc2lvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm9kdWN0IHZlcnNpb24gJyR7dmVyc2lvbn0nIGlzIGludmFsaWQuIEFsbG93ZWQgY2hvaWNlcyBhcmUgJHt2ZXJzaW9uc1tvcHRpb25zLnByb2R1Y3RdLmpvaW4oJywgJyl9LmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5qbWV0ZXIgJiYgb3B0aW9ucy5sb2N1c3QpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRWl0aGVyIEpNZXRlciBvciBMb2N1c3QgbXVzdCBiZSB1c2VkLiBZb3UgY2Fubm90IHVzZSBib3RoYCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gR2V0IHRoZSBwcm9kdWN0IGZyb20gdGhlIGFyZ3Mgb3IgYXNrIGZvciBpdCBuaWNlbHlcbiAgICAgICAgY29uc3QgcHJvZHVjdCA9IG9wdGlvbnMucHJvZHVjdCB8fCBhd2FpdCBnZXRQcm9kdWN0KCk7XG4gICAgICAgIC8vIFNob3cgdGhlIGluaXQgbWVzc2FnZVxuICAgICAgICBjb25zb2xlLmxvZyhpbml0LmhlYWRlcihwcm9kdWN0KSk7XG4gICAgICAgIC8vIEFzayBmb3IgdGhlIHVzZXIgdG8gY29uZmlybSB0aGV5IGFyZSByZWFkeVxuICAgICAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBzdGFydCB3aXRoIHRoZSBmaXJzdCBzdGVwLi4uJywgb3B0aW9ucy5mb3JjZSk7XG4gICAgICAgIGVtcHR5TGluZSgpO1xuICAgICAgICAvLyBTdGFydCB0aGUgcGVyZm9ybWFuY2UgdGVzdGluZ1xuICAgICAgICBhd2FpdCBQZXJmb3JtYW5jZSh7XG4gICAgICAgICAgICBwcm9kdWN0OiBwcm9kdWN0LFxuICAgICAgICAgICAgdGFnOiBvcHRpb25zLnRhZyxcbiAgICAgICAgICAgIGN3ZDogb3B0aW9ucy5jd2QsXG4gICAgICAgICAgICBvdXRwdXREaXI6IG9wdGlvbnMub3V0cHV0RGlyLFxuICAgICAgICAgICAgZW52aXJvbm1lbnQ6IG9wdGlvbnMuZW52aXJvbm1lbnQsXG4gICAgICAgICAgICBtb25pdG9yaW5nOiBvcHRpb25zLm1vbml0b3JpbmcsXG4gICAgICAgICAgICBhcHBLZXk6IG9wdGlvbnMuYXBwS2V5LFxuICAgICAgICAgICAgYXJjaGl2ZTogb3B0aW9ucy5hcmNoaXZlLFxuICAgICAgICAgICAgYXBwTGljZW5zZTogb3B0aW9ucy5hcHBMaWNlbnNlLFxuICAgICAgICAgICAgcmVzdGFydEFmdGVySW5zdGFsbDogb3B0aW9ucy5yZXN0YXJ0QWZ0ZXJJbnN0YWxsLFxuICAgICAgICAgICAgdGltZXN0YW1wOiBvcHRpb25zLnRpbWVzdGFtcCxcbiAgICAgICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBBc2sgcGVybWlzc2lvbiB0byBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHN0ZXBcbiAgICAgICAgYXdhaXQgd2FpdEZvclVzZXJJbnB1dCgnUHJlc3MgYSBrZXkgdG8gY29udGludWUgd2l0aCB0aGUgbmV4dCBzdGVwLi4uJywgb3B0aW9ucy5mb3JjZSk7XG4gICAgICAgIC8vIFN0YXJ0IHRoZSBzY2FsYWJpbGl0eSB0ZXN0aW5nXG4gICAgICAgIGF3YWl0IFNjYWxhYmlsaXR5KHtcbiAgICAgICAgICAgIHByb2R1Y3QsXG4gICAgICAgICAgICB0YWc6IG9wdGlvbnMudGFnLFxuICAgICAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgICAgICAgICAgIG91dHB1dERpcjogb3B0aW9ucy5vdXRwdXREaXIsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCxcbiAgICAgICAgICAgIGFwcEtleTogb3B0aW9ucy5hcHBLZXksXG4gICAgICAgICAgICBhcmNoaXZlOiBvcHRpb25zLmFyY2hpdmUsXG4gICAgICAgICAgICBhcHBMaWNlbnNlOiBvcHRpb25zLmFwcExpY2Vuc2UsXG4gICAgICAgICAgICByZXN0YXJ0QWZ0ZXJJbnN0YWxsOiBvcHRpb25zLnJlc3RhcnRBZnRlckluc3RhbGwsXG4gICAgICAgICAgICBqbWV0ZXI6IG9wdGlvbnMuam1ldGVyLFxuICAgICAgICAgICAgbG9jdXN0OiBvcHRpb25zLmxvY3VzdCxcbiAgICAgICAgICAgIHRpbWVzdGFtcDogb3B0aW9ucy50aW1lc3RhbXAsXG4gICAgICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gQXNrIHBlcm1pc3Npb24gdG8gY29udGludWUgd2l0aCB0aGUgbmV4dCBzdGVwXG4gICAgICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgc3RlcC4uLicsIG9wdGlvbnMuZm9yY2UpO1xuICAgICAgICAvLyBUZWFyZG93biB0aGUgY2x1c3RlclxuICAgICAgICBhd2FpdCB0ZWFyZG93bkNsdXN0ZXIoQVBUVGVhcmRvd25PcHRpb25zLnBhcnNlKHtcbiAgICAgICAgICAgIHByb2R1Y3Q6IG9wdGlvbnMucHJvZHVjdCxcbiAgICAgICAgICAgIGN3ZDogb3B0aW9ucy5jd2QsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCxcbiAgICAgICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgICAgIH0pKTtcbiAgICB9LFxuICAgIGVycm9ySGFuZGxlcjogYXN5bmMgKCkgPT4ge1xuICAgIH1cbn0pO1xuY29uc3QgUmVwb3J0Q29tbWFuZCA9ICgpID0+ICh7XG4gICAgYWN0aW9uOiBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgICBpZiAob3B0aW9ucy50eXBlID09PSAncGVyZm9ybWFuY2UnKSB7XG4gICAgICAgICAgICBjb25zdCBvcHMgPSBvcHRpb25zO1xuICAgICAgICAgICAgaWYgKCFvcHMucmVzdWx0c0RpcjEpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBvcHRpb24gYC0tcmVzdWx0c0RpcjFgIGlzIHJlcXVpcmVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICghb3BzLnJlc3VsdHNEaXIyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgb3B0aW9uIGAtLXJlc3VsdHNEaXIyYCBpcyByZXF1aXJlZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgZ2VuZXJhdGVQZXJmb3JtYW5jZVJlcG9ydChBUFRQZXJmb3JtYW5jZVJlcG9ydE9wdGlvbnMucGFyc2Uoe1xuICAgICAgICAgICAgICAgIC4uLm9wcyxcbiAgICAgICAgICAgICAgICBvdXRwdXREaXI6IGdldE91dHB1dERpcmVjdG9yeShvcHMub3V0cHV0RGlyLCBvcHMudGltZXN0YW1wKVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgb3BzID0gb3B0aW9ucztcbiAgICAgICAgICAgIGF3YWl0IGdlbmVyYXRlU2NhbGFiaWxpdHlSZXBvcnQoQVBUU2NhbGFiaWxpdHlSZXBvcnRPcHRpb25zLnBhcnNlKHtcbiAgICAgICAgICAgICAgICAuLi5vcHMsXG4gICAgICAgICAgICAgICAgcHJvZHVjdDogb3BzLnByb2R1Y3QsXG4gICAgICAgICAgICAgICAgb3V0cHV0RGlyOiBnZXRPdXRwdXREaXJlY3Rvcnkob3BzLm91dHB1dERpciwgb3BzLnRpbWVzdGFtcClcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgZXJyb3JIYW5kbGVyOiBhc3luYyAoKSA9PiB7XG4gICAgfVxufSk7XG5jb25zdCBQZXJmb3JtYW5jZVRlc3RDb21tYW5kID0gKCkgPT4gKHtcbiAgICBhY3Rpb246IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgIGNvbnN0IHZlcnNpb24gPSBvcHRpb25zLnRhZztcbiAgICAgICAgaWYgKHZlcnNpb24pIHtcbiAgICAgICAgICAgIGlmICghdmVyc2lvbnNbb3B0aW9ucy5wcm9kdWN0XS5pbmNsdWRlcyh2ZXJzaW9uKSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBDb3VsZCBub3QgZmluZCBzcGVjaWZpZWQgdmVyc2lvbiAke3ZlcnNpb259LCB1cGRhdGluZyAke29wdGlvbnMucHJvZHVjdH0gdmVyc2lvbiBsaXN0YCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZFZlcnNpb25zID0gYXdhaXQgZ2VuZXJhdGVWZXJzaW9uTGlzdChvcHRpb25zLnByb2R1Y3QpO1xuICAgICAgICAgICAgICAgIGlmICghdXBkYXRlZFZlcnNpb25zW29wdGlvbnMucHJvZHVjdF0uaW5jbHVkZXModmVyc2lvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm9kdWN0IHZlcnNpb24gJyR7dmVyc2lvbn0nIGlzIGludmFsaWQuIEFsbG93ZWQgY2hvaWNlcyBhcmUgJHt2ZXJzaW9uc1tvcHRpb25zLnByb2R1Y3RdLmpvaW4oJywgJyl9LmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBTdGFydCB0aGUgcGVyZm9ybWFuY2UgdGVzdGluZ1xuICAgICAgICBhd2FpdCBQZXJmb3JtYW5jZSh7XG4gICAgICAgICAgICBwcm9kdWN0OiBvcHRpb25zLnByb2R1Y3QsXG4gICAgICAgICAgICB0YWc6IG9wdGlvbnMudGFnLFxuICAgICAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgICAgICAgICAgIG91dHB1dERpcjogb3B0aW9ucy5vdXRwdXREaXIsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCxcbiAgICAgICAgICAgIGFwcEtleTogb3B0aW9ucy5hcHBLZXksXG4gICAgICAgICAgICBhcmNoaXZlOiBvcHRpb25zLmFyY2hpdmUsXG4gICAgICAgICAgICBhcHBMaWNlbnNlOiBvcHRpb25zLmFwcExpY2Vuc2UsXG4gICAgICAgICAgICByZXN0YXJ0QWZ0ZXJJbnN0YWxsOiBvcHRpb25zLnJlc3RhcnRBZnRlckluc3RhbGwsXG4gICAgICAgICAgICB0aW1lc3RhbXA6IG9wdGlvbnMudGltZXN0YW1wLFxuICAgICAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEFzayBwZXJtaXNzaW9uIHRvIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgc3RlcFxuICAgICAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHN0ZXAuLi4nLCBvcHRpb25zLmZvcmNlKTtcbiAgICAgICAgLy8gVGVhcmRvd24gdGhlIGNsdXN0ZXJcbiAgICAgICAgYXdhaXQgdGVhcmRvd25DbHVzdGVyKEFQVFRlYXJkb3duT3B0aW9ucy5wYXJzZSh7XG4gICAgICAgICAgICBwcm9kdWN0OiBvcHRpb25zLnByb2R1Y3QsXG4gICAgICAgICAgICBjd2Q6IG9wdGlvbnMuY3dkLFxuICAgICAgICAgICAgZW52aXJvbm1lbnQ6IG9wdGlvbnMuZW52aXJvbm1lbnQsXG4gICAgICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgICAgICB9KSk7XG4gICAgfSxcbiAgICBlcnJvckhhbmRsZXI6IGFzeW5jICgpID0+IHtcbiAgICB9XG59KTtcbmNvbnN0IFJ1bjFDb21tYW5kID0gKCkgPT4gKHtcbiAgICBhY3Rpb246IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgIGNvbnN0IHZlcnNpb24gPSBvcHRpb25zLnRhZztcbiAgICAgICAgaWYgKHZlcnNpb24pIHtcbiAgICAgICAgICAgIGlmICghdmVyc2lvbnNbb3B0aW9ucy5wcm9kdWN0XS5pbmNsdWRlcyh2ZXJzaW9uKSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBDb3VsZCBub3QgZmluZCBzcGVjaWZpZWQgdmVyc2lvbiAke3ZlcnNpb259LCB1cGRhdGluZyAke29wdGlvbnMucHJvZHVjdH0gdmVyc2lvbiBsaXN0YCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZFZlcnNpb25zID0gYXdhaXQgZ2VuZXJhdGVWZXJzaW9uTGlzdChvcHRpb25zLnByb2R1Y3QpO1xuICAgICAgICAgICAgICAgIGlmICghdXBkYXRlZFZlcnNpb25zW29wdGlvbnMucHJvZHVjdF0uaW5jbHVkZXModmVyc2lvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm9kdWN0IHZlcnNpb24gJyR7dmVyc2lvbn0nIGlzIGludmFsaWQuIEFsbG93ZWQgY2hvaWNlcyBhcmUgJHt2ZXJzaW9uc1tvcHRpb25zLnByb2R1Y3RdLmpvaW4oJywgJyl9LmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBydW5QZXJmb3JtYW5jZVRlc3QoQVBUUGVyZm9ybWFuY2VUZXN0T3B0aW9ucy5wYXJzZSh7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgc3RhZ2U6IFBlcmZvcm1hbmNlVGVzdFR5cGVzLlZhbHVlcy5iYXNlbGluZSxcbiAgICAgICAgICAgIG91dHB1dERpcjogZ2V0T3V0cHV0RGlyZWN0b3J5KG9wdGlvbnMub3V0cHV0RGlyLCBvcHRpb25zLnRpbWVzdGFtcCksXG4gICAgICAgICAgICBsaWNlbnNlOiBhd2FpdCBnZXRIb3N0TGljZW5zZShvcHRpb25zLnByb2R1Y3QsIG9wdGlvbnMubGljZW5zZSwgb3B0aW9ucy5mb3JjZSlcbiAgICAgICAgfSksIFJ1bjEpO1xuICAgIH0sXG4gICAgZXJyb3JIYW5kbGVyOiBhc3luYyAoKSA9PiB7XG4gICAgfVxufSk7XG5jb25zdCBSdW4yQ29tbWFuZCA9ICgpID0+ICh7XG4gICAgYWN0aW9uOiBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgICBjb25zdCB2ZXJzaW9uID0gb3B0aW9ucy50YWc7XG4gICAgICAgIGlmICh2ZXJzaW9uKSB7XG4gICAgICAgICAgICBpZiAoIXZlcnNpb25zW29wdGlvbnMucHJvZHVjdF0uaW5jbHVkZXModmVyc2lvbikpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgQ291bGQgbm90IGZpbmQgc3BlY2lmaWVkIHZlcnNpb24gJHt2ZXJzaW9ufSwgdXBkYXRpbmcgJHtvcHRpb25zLnByb2R1Y3R9IHZlcnNpb24gbGlzdGApO1xuICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRWZXJzaW9ucyA9IGF3YWl0IGdlbmVyYXRlVmVyc2lvbkxpc3Qob3B0aW9ucy5wcm9kdWN0KTtcbiAgICAgICAgICAgICAgICBpZiAoIXVwZGF0ZWRWZXJzaW9uc1tvcHRpb25zLnByb2R1Y3RdLmluY2x1ZGVzKHZlcnNpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvZHVjdCB2ZXJzaW9uICcke3ZlcnNpb259JyBpcyBpbnZhbGlkLiBBbGxvd2VkIGNob2ljZXMgYXJlICR7dmVyc2lvbnNbb3B0aW9ucy5wcm9kdWN0XS5qb2luKCcsICcpfS5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgcnVuUGVyZm9ybWFuY2VUZXN0KEFQVFBlcmZvcm1hbmNlVGVzdE9wdGlvbnMucGFyc2Uoe1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIHN0YWdlOiBQZXJmb3JtYW5jZVRlc3RUeXBlcy5WYWx1ZXMucmVncmVzc2lvbixcbiAgICAgICAgICAgIG91dHB1dERpcjogZ2V0T3V0cHV0RGlyZWN0b3J5KG9wdGlvbnMub3V0cHV0RGlyLCBvcHRpb25zLnRpbWVzdGFtcCksXG4gICAgICAgICAgICBsaWNlbnNlOiBhd2FpdCBnZXRIb3N0TGljZW5zZShvcHRpb25zLnByb2R1Y3QsIG9wdGlvbnMubGljZW5zZSwgb3B0aW9ucy5mb3JjZSlcbiAgICAgICAgfSksIFJ1bjIpO1xuICAgIH0sXG4gICAgZXJyb3JIYW5kbGVyOiBhc3luYyAoKSA9PiB7XG4gICAgfVxufSk7XG5jb25zdCBSZWluZGV4Q29tbWFuZCA9ICgpID0+ICh7XG4gICAgYWN0aW9uOiBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgICBjb25zdCB2ZXJzaW9uID0gb3B0aW9ucy50YWc7XG4gICAgICAgIGlmICh2ZXJzaW9uKSB7XG4gICAgICAgICAgICBpZiAoIXZlcnNpb25zW29wdGlvbnMucHJvZHVjdF0uaW5jbHVkZXModmVyc2lvbikpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgQ291bGQgbm90IGZpbmQgc3BlY2lmaWVkIHZlcnNpb24gJHt2ZXJzaW9ufSwgdXBkYXRpbmcgJHtvcHRpb25zLnByb2R1Y3R9IHZlcnNpb24gbGlzdGApO1xuICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRWZXJzaW9ucyA9IGF3YWl0IGdlbmVyYXRlVmVyc2lvbkxpc3Qob3B0aW9ucy5wcm9kdWN0KTtcbiAgICAgICAgICAgICAgICBpZiAoIXVwZGF0ZWRWZXJzaW9uc1tvcHRpb25zLnByb2R1Y3RdLmluY2x1ZGVzKHZlcnNpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvZHVjdCB2ZXJzaW9uICcke3ZlcnNpb259JyBpcyBpbnZhbGlkLiBBbGxvd2VkIGNob2ljZXMgYXJlICR7dmVyc2lvbnNbb3B0aW9ucy5wcm9kdWN0XS5qb2luKCcsICcpfS5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgcnVuTHVjZW5lVGltaW5nVGVzdChBUFRQZXJmb3JtYW5jZVRlc3RPcHRpb25zLnBhcnNlKHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBzdGFnZTogUGVyZm9ybWFuY2VUZXN0VHlwZXMuVmFsdWVzLnJlZ3Jlc3Npb24sXG4gICAgICAgICAgICBvdXRwdXREaXI6IGdldE91dHB1dERpcmVjdG9yeShvcHRpb25zLm91dHB1dERpciwgb3B0aW9ucy50aW1lc3RhbXApLFxuICAgICAgICAgICAgbGljZW5zZTogYXdhaXQgZ2V0SG9zdExpY2Vuc2Uob3B0aW9ucy5wcm9kdWN0LCBvcHRpb25zLmxpY2Vuc2UsIG9wdGlvbnMuZm9yY2UpXG4gICAgICAgIH0pLCBMdWNlbmVUaW1pbmdUZXN0KTtcbiAgICB9LFxuICAgIGVycm9ySGFuZGxlcjogYXN5bmMgKCkgPT4ge1xuICAgIH1cbn0pO1xuY29uc3QgU2NhbGFiaWxpdHlUZXN0Q29tbWFuZCA9ICgpID0+ICh7XG4gICAgYWN0aW9uOiBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgICBjb25zdCB2ZXJzaW9uID0gb3B0aW9ucy50YWc7XG4gICAgICAgIGlmICh2ZXJzaW9uKSB7XG4gICAgICAgICAgICBpZiAoIXZlcnNpb25zW29wdGlvbnMucHJvZHVjdF0uaW5jbHVkZXModmVyc2lvbikpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgQ291bGQgbm90IGZpbmQgc3BlY2lmaWVkIHZlcnNpb24gJHt2ZXJzaW9ufSwgdXBkYXRpbmcgJHtvcHRpb25zLnByb2R1Y3R9IHZlcnNpb24gbGlzdGApO1xuICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRWZXJzaW9ucyA9IGF3YWl0IGdlbmVyYXRlVmVyc2lvbkxpc3Qob3B0aW9ucy5wcm9kdWN0KTtcbiAgICAgICAgICAgICAgICBpZiAoIXVwZGF0ZWRWZXJzaW9uc1tvcHRpb25zLnByb2R1Y3RdLmluY2x1ZGVzKHZlcnNpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvZHVjdCB2ZXJzaW9uICcke3ZlcnNpb259JyBpcyBpbnZhbGlkLiBBbGxvd2VkIGNob2ljZXMgYXJlICR7dmVyc2lvbnNbb3B0aW9ucy5wcm9kdWN0XS5qb2luKCcsICcpfS5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuam1ldGVyICYmIG9wdGlvbnMubG9jdXN0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVpdGhlciBKTWV0ZXIgb3IgTG9jdXN0IG11c3QgYmUgdXNlZC4gWW91IGNhbm5vdCB1c2UgYm90aGApO1xuICAgICAgICB9XG4gICAgICAgIC8vIFN0YXJ0IHRoZSBzY2FsYWJpbGl0eSB0ZXN0aW5nXG4gICAgICAgIGF3YWl0IFNjYWxhYmlsaXR5KHtcbiAgICAgICAgICAgIHByb2R1Y3Q6IG9wdGlvbnMucHJvZHVjdCxcbiAgICAgICAgICAgIHRhZzogb3B0aW9ucy50YWcsXG4gICAgICAgICAgICBjd2Q6IG9wdGlvbnMuY3dkLFxuICAgICAgICAgICAgb3V0cHV0RGlyOiBvcHRpb25zLm91dHB1dERpcixcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBvcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICAgICAgYXBwS2V5OiBvcHRpb25zLmFwcEtleSxcbiAgICAgICAgICAgIGFyY2hpdmU6IG9wdGlvbnMuYXJjaGl2ZSxcbiAgICAgICAgICAgIGFwcExpY2Vuc2U6IG9wdGlvbnMuYXBwTGljZW5zZSxcbiAgICAgICAgICAgIHJlc3RhcnRBZnRlckluc3RhbGw6IG9wdGlvbnMucmVzdGFydEFmdGVySW5zdGFsbCxcbiAgICAgICAgICAgIGptZXRlcjogb3B0aW9ucy5qbWV0ZXIsXG4gICAgICAgICAgICBsb2N1c3Q6IG9wdGlvbnMubG9jdXN0LFxuICAgICAgICAgICAgdGltZXN0YW1wOiBvcHRpb25zLnRpbWVzdGFtcCxcbiAgICAgICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBBc2sgcGVybWlzc2lvbiB0byBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHN0ZXBcbiAgICAgICAgYXdhaXQgd2FpdEZvclVzZXJJbnB1dCgnUHJlc3MgYSBrZXkgdG8gY29udGludWUgd2l0aCB0aGUgbmV4dCBzdGVwLi4uJywgb3B0aW9ucy5mb3JjZSk7XG4gICAgICAgIC8vIFRlYXJkb3duIHRoZSBjbHVzdGVyXG4gICAgICAgIGF3YWl0IHRlYXJkb3duQ2x1c3RlcihBUFRUZWFyZG93bk9wdGlvbnMucGFyc2Uoe1xuICAgICAgICAgICAgcHJvZHVjdDogb3B0aW9ucy5wcm9kdWN0LFxuICAgICAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBvcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICAgICAgfSkpO1xuICAgIH0sXG4gICAgZXJyb3JIYW5kbGVyOiBhc3luYyAoKSA9PiB7XG4gICAgfVxufSk7XG5jb25zdCBSdW4zQ29tbWFuZCA9ICgpID0+ICh7XG4gICAgYWN0aW9uOiBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgICBjb25zdCB2ZXJzaW9uID0gb3B0aW9ucy50YWc7XG4gICAgICAgIGlmICh2ZXJzaW9uKSB7XG4gICAgICAgICAgICBpZiAoIXZlcnNpb25zW29wdGlvbnMucHJvZHVjdF0uaW5jbHVkZXModmVyc2lvbikpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgQ291bGQgbm90IGZpbmQgc3BlY2lmaWVkIHZlcnNpb24gJHt2ZXJzaW9ufSwgdXBkYXRpbmcgJHtvcHRpb25zLnByb2R1Y3R9IHZlcnNpb24gbGlzdGApO1xuICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRWZXJzaW9ucyA9IGF3YWl0IGdlbmVyYXRlVmVyc2lvbkxpc3Qob3B0aW9ucy5wcm9kdWN0KTtcbiAgICAgICAgICAgICAgICBpZiAoIXVwZGF0ZWRWZXJzaW9uc1tvcHRpb25zLnByb2R1Y3RdLmluY2x1ZGVzKHZlcnNpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvZHVjdCB2ZXJzaW9uICcke3ZlcnNpb259JyBpcyBpbnZhbGlkLiBBbGxvd2VkIGNob2ljZXMgYXJlICR7dmVyc2lvbnNbb3B0aW9ucy5wcm9kdWN0XS5qb2luKCcsICcpfS5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgcnVuU2NhbGFiaWxpdHlUZXN0KCdvbmUtbm9kZScsIEFQVFNjYWxhYmlsaXR5VGVzdE9wdGlvbnMucGFyc2Uoe1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG91dHB1dERpcjogZ2V0T3V0cHV0RGlyZWN0b3J5KG9wdGlvbnMub3V0cHV0RGlyLCBvcHRpb25zLnRpbWVzdGFtcCksXG4gICAgICAgICAgICBsaWNlbnNlOiBhd2FpdCBnZXRIb3N0TGljZW5zZShvcHRpb25zLnByb2R1Y3QsIG9wdGlvbnMubGljZW5zZSwgb3B0aW9ucy5mb3JjZSlcbiAgICAgICAgfSksIFNjYWxhYmlsaXR5VGVzdE1lc3NhZ2VzKTtcbiAgICB9LFxuICAgIGVycm9ySGFuZGxlcjogYXN5bmMgKCkgPT4ge1xuICAgIH1cbn0pO1xuY29uc3QgUnVuNENvbW1hbmQgPSAoKSA9PiAoe1xuICAgIGFjdGlvbjogYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgY29uc3QgdmVyc2lvbiA9IG9wdGlvbnMudGFnO1xuICAgICAgICBpZiAodmVyc2lvbikge1xuICAgICAgICAgICAgaWYgKCF2ZXJzaW9uc1tvcHRpb25zLnByb2R1Y3RdLmluY2x1ZGVzKHZlcnNpb24pKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYENvdWxkIG5vdCBmaW5kIHNwZWNpZmllZCB2ZXJzaW9uICR7dmVyc2lvbn0sIHVwZGF0aW5nICR7b3B0aW9ucy5wcm9kdWN0fSB2ZXJzaW9uIGxpc3RgKTtcbiAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkVmVyc2lvbnMgPSBhd2FpdCBnZW5lcmF0ZVZlcnNpb25MaXN0KG9wdGlvbnMucHJvZHVjdCk7XG4gICAgICAgICAgICAgICAgaWYgKCF1cGRhdGVkVmVyc2lvbnNbb3B0aW9ucy5wcm9kdWN0XS5pbmNsdWRlcyh2ZXJzaW9uKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb2R1Y3QgdmVyc2lvbiAnJHt2ZXJzaW9ufScgaXMgaW52YWxpZC4gQWxsb3dlZCBjaG9pY2VzIGFyZSAke3ZlcnNpb25zW29wdGlvbnMucHJvZHVjdF0uam9pbignLCAnKX0uYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHJ1blNjYWxhYmlsaXR5VGVzdCgndHdvLW5vZGUnLCBBUFRTY2FsYWJpbGl0eVRlc3RPcHRpb25zLnBhcnNlKHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBvdXRwdXREaXI6IGdldE91dHB1dERpcmVjdG9yeShvcHRpb25zLm91dHB1dERpciwgb3B0aW9ucy50aW1lc3RhbXApLFxuICAgICAgICAgICAgbGljZW5zZTogYXdhaXQgZ2V0SG9zdExpY2Vuc2Uob3B0aW9ucy5wcm9kdWN0LCBvcHRpb25zLmxpY2Vuc2UsIG9wdGlvbnMuZm9yY2UpXG4gICAgICAgIH0pLCBTY2FsYWJpbGl0eVRlc3RNZXNzYWdlcyk7XG4gICAgfSxcbiAgICBlcnJvckhhbmRsZXI6IGFzeW5jICgpID0+IHtcbiAgICB9XG59KTtcbmNvbnN0IFJ1bjVDb21tYW5kID0gKCkgPT4gKHtcbiAgICBhY3Rpb246IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgIGNvbnN0IHZlcnNpb24gPSBvcHRpb25zLnRhZztcbiAgICAgICAgaWYgKHZlcnNpb24pIHtcbiAgICAgICAgICAgIGlmICghdmVyc2lvbnNbb3B0aW9ucy5wcm9kdWN0XS5pbmNsdWRlcyh2ZXJzaW9uKSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBDb3VsZCBub3QgZmluZCBzcGVjaWZpZWQgdmVyc2lvbiAke3ZlcnNpb259LCB1cGRhdGluZyAke29wdGlvbnMucHJvZHVjdH0gdmVyc2lvbiBsaXN0YCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZFZlcnNpb25zID0gYXdhaXQgZ2VuZXJhdGVWZXJzaW9uTGlzdChvcHRpb25zLnByb2R1Y3QpO1xuICAgICAgICAgICAgICAgIGlmICghdXBkYXRlZFZlcnNpb25zW29wdGlvbnMucHJvZHVjdF0uaW5jbHVkZXModmVyc2lvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm9kdWN0IHZlcnNpb24gJyR7dmVyc2lvbn0nIGlzIGludmFsaWQuIEFsbG93ZWQgY2hvaWNlcyBhcmUgJHt2ZXJzaW9uc1tvcHRpb25zLnByb2R1Y3RdLmpvaW4oJywgJyl9LmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBydW5TY2FsYWJpbGl0eVRlc3QoJ2ZvdXItbm9kZScsIEFQVFNjYWxhYmlsaXR5VGVzdE9wdGlvbnMucGFyc2Uoe1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG91dHB1dERpcjogZ2V0T3V0cHV0RGlyZWN0b3J5KG9wdGlvbnMub3V0cHV0RGlyLCBvcHRpb25zLnRpbWVzdGFtcCksXG4gICAgICAgICAgICBsaWNlbnNlOiBhd2FpdCBnZXRIb3N0TGljZW5zZShvcHRpb25zLnByb2R1Y3QsIG9wdGlvbnMubGljZW5zZSwgb3B0aW9ucy5mb3JjZSlcbiAgICAgICAgfSksIFNjYWxhYmlsaXR5VGVzdE1lc3NhZ2VzKTtcbiAgICB9LFxuICAgIGVycm9ySGFuZGxlcjogYXN5bmMgKCkgPT4ge1xuICAgIH1cbn0pO1xuY29uc3QgUHJvdmlzaW9uQ29tbWFuZCA9ICgpID0+ICh7XG4gICAgYWN0aW9uOiBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgICBjb25zdCB2ZXJzaW9uID0gb3B0aW9ucy50YWc7XG4gICAgICAgIGlmICh2ZXJzaW9uKSB7XG4gICAgICAgICAgICBpZiAoIXZlcnNpb25zW29wdGlvbnMucHJvZHVjdF0uaW5jbHVkZXModmVyc2lvbikpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgQ291bGQgbm90IGZpbmQgc3BlY2lmaWVkIHZlcnNpb24gJHt2ZXJzaW9ufSwgdXBkYXRpbmcgJHtvcHRpb25zLnByb2R1Y3R9IHZlcnNpb24gbGlzdGApO1xuICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRWZXJzaW9ucyA9IGF3YWl0IGdlbmVyYXRlVmVyc2lvbkxpc3Qob3B0aW9ucy5wcm9kdWN0KTtcbiAgICAgICAgICAgICAgICBpZiAoIXVwZGF0ZWRWZXJzaW9uc1tvcHRpb25zLnByb2R1Y3RdLmluY2x1ZGVzKHZlcnNpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvZHVjdCB2ZXJzaW9uICcke3ZlcnNpb259JyBpcyBpbnZhbGlkLiBBbGxvd2VkIGNob2ljZXMgYXJlICR7dmVyc2lvbnNbb3B0aW9ucy5wcm9kdWN0XS5qb2luKCcsICcpfS5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgcHJvdmlzaW9uQ2x1c3RlcihBUFRQcm92aXNpb25PcHRpb25zLnBhcnNlKHtcbiAgICAgICAgICAgIHByb2R1Y3Q6IG9wdGlvbnMucHJvZHVjdCxcbiAgICAgICAgICAgIHRhZzogb3B0aW9ucy50YWcsXG4gICAgICAgICAgICBjd2Q6IG9wdGlvbnMuY3dkIHx8IGN3ZCgpLFxuICAgICAgICAgICAgZW52aXJvbm1lbnQ6IG9wdGlvbnMuZW52aXJvbm1lbnQsXG4gICAgICAgICAgICBtb25pdG9yaW5nOiBvcHRpb25zLm1vbml0b3JpbmcsXG4gICAgICAgICAgICBsaWNlbnNlOiBvcHRpb25zLmxpY2Vuc2UsXG4gICAgICAgICAgICBub2RlczogTnVtYmVyKG9wdGlvbnMubm9kZXMpLFxuICAgICAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICAgICAgfSksIG9wdGlvbnMuY3dkID09PSB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZXJyb3JIYW5kbGVyOiBhc3luYyAoKSA9PiB7XG4gICAgfVxufSk7XG5jb25zdCBSZXN0YXJ0Q29tbWFuZCA9ICgpID0+ICh7XG4gICAgYWN0aW9uOiBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgICBhd2FpdCByZXN0YXJ0Q2x1c3RlcihBUFRSZXN0YXJ0T3B0aW9ucy5wYXJzZSh7XG4gICAgICAgICAgICBwcm9kdWN0OiBvcHRpb25zLnByb2R1Y3QsXG4gICAgICAgICAgICBjd2Q6IG9wdGlvbnMuY3dkLFxuICAgICAgICAgICAgZW52aXJvbm1lbnQ6IG9wdGlvbnMuZW52aXJvbm1lbnQsXG4gICAgICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgICAgICB9KSk7XG4gICAgfSxcbiAgICBlcnJvckhhbmRsZXI6IGFzeW5jICgpID0+IHtcbiAgICB9XG59KTtcbmNvbnN0IFRlYXJkb3duQ29tbWFuZCA9ICgpID0+ICh7XG4gICAgYWN0aW9uOiBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgICBhd2FpdCB0ZWFyZG93bkNsdXN0ZXIoQVBUVGVhcmRvd25PcHRpb25zLnBhcnNlKHtcbiAgICAgICAgICAgIHByb2R1Y3Q6IG9wdGlvbnMucHJvZHVjdCxcbiAgICAgICAgICAgIGN3ZDogb3B0aW9ucy5jd2QsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCxcbiAgICAgICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgICAgIH0pKTtcbiAgICB9LFxuICAgIGVycm9ySGFuZGxlcjogYXN5bmMgKCkgPT4ge1xuICAgIH1cbn0pO1xuY29uc3QgRGVwZW5kZW5jeVRyZWVDb21tYW5kID0gKCkgPT4gKHtcbiAgICBhY3Rpb246IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgIGF3YWl0IGdlbmVyYXRlRGVwZW5kZW5jeVRyZWUoQVBURGVwZW5kZW5jeVRyZWVPcHRpb25zLnBhcnNlKHtcbiAgICAgICAgICAgIGdyb3VwSWQ6IG9wdGlvbnMuZ3JvdXBJZCxcbiAgICAgICAgICAgIGFydGlmYWN0SWQ6IG9wdGlvbnMuYXJ0aWZhY3RJZCxcbiAgICAgICAgICAgIGFwcEtleTogb3B0aW9ucy5hcHBLZXksXG4gICAgICAgICAgICBhcmNoaXZlOiBvcHRpb25zLmFyY2hpdmUsXG4gICAgICAgICAgICBhY3RpdmF0ZVByb2ZpbGVzOiBvcHRpb25zLmFjdGl2YXRlUHJvZmlsZXMsXG4gICAgICAgICAgICBvdXRwdXRGaWxlOiBvcHRpb25zLm91dHB1dEZpbGUgfHwgam9pbihjd2QoKSwgJ21hdmVuX2RlcGVuZGVuY3lfdHJlZS5ndicpXG4gICAgICAgIH0pKTtcbiAgICB9LFxuICAgIGVycm9ySGFuZGxlcjogYXN5bmMgKCkgPT4ge1xuICAgIH1cbn0pO1xuY29uc3QgU0NBQ29tbWFuZCA9ICgpID0+ICh7XG4gICAgYWN0aW9uOiBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgICBhd2FpdCBnZW5lcmF0ZVNDQVJlcG9ydChBUFRTQ0FPcHRpb25zLnBhcnNlKHtcbiAgICAgICAgICAgIG52ZEFwaUtleTogb3B0aW9ucy5udmRBcGlLZXksXG4gICAgICAgICAgICBhcHBLZXk6IG9wdGlvbnMuYXBwS2V5LFxuICAgICAgICAgICAgYXJjaGl2ZTogb3B0aW9ucy5hcmNoaXZlLFxuICAgICAgICAgICAgZGF0YURpcjogb3B0aW9ucy5kYXRhRGlyLFxuICAgICAgICAgICAgZmFpbE9uRXJyb3I6IG9wdGlvbnMuZmFpbE9uRXJyb3IgfHwgZmFsc2UsXG4gICAgICAgICAgICBvdXRwdXREaXI6IG9wdGlvbnMub3V0cHV0RGlyIHx8IGpvaW4oY3dkKCksICdzY2FfcmVwb3J0JylcbiAgICAgICAgfSkpO1xuICAgIH0sXG4gICAgZXJyb3JIYW5kbGVyOiBhc3luYyAoKSA9PiB7XG4gICAgfVxufSk7XG5wcm9ncmFtXG4gICAgLm5hbWUoJ2RjZHggYXB0JylcbiAgICAuc2hvd0hlbHBBZnRlckVycm9yKHRydWUpO1xucHJvZ3JhbVxuICAgIC5jb21tYW5kKCdkZWZhdWx0JywgeyBpc0RlZmF1bHQ6IHRydWUsIGhpZGRlbjogdHJ1ZSB9KVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1wcm9kdWN0IDxuYW1lPicsICdUaGUgaG9zdCBwcm9kdWN0JykuY2hvaWNlcyhPYmplY3QudmFsdWVzKFN1cHBvcnRlZEFwcGxpY2F0aW9ucy5WYWx1ZXMpKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tdGFnIDxuYW1lPicsICdUaGUgaG9zdCBwcm9kdWN0IHZlcnNpb24gdGFnJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWVudmlyb25tZW50IDxuYW1lPicsICdUaGUgZW52aXJvbm1lbnQgbmFtZScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1tb25pdG9yaW5nJywgJ0VuYWJsZSBkZXRhaWxlZCBDUFUvTWVtb3J5IG1vbml0b3JpbmcgYW5kIEdyYWZhbmEgZGFzaGJvYXJkcyBmb3IgdmlzdWFsaXNhdGlvbicpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1saWNlbnNlIDxwYXRoX29yX2xpY2Vuc2U+JywgJ1RoZSBob3N0IHByb2R1Y3QgbGljZW5zZSwgZWl0aGVyIGFzIGEgcGF0aCB0byBhIGZpbGUgb3IgdGhlIGxpY2Vuc2UgaXRzZWxmJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWFwcEtleSA8YXBwS2V5PicsICdUaGUga2V5IG9mIHRoZSBhcHAgKGZvciBhdXRvbWF0ZWQgaW5zdGFsbGF0aW9uKScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1hcmNoaXZlIDxwYXRoPicsICdUaGUgcGF0aCB0byB0aGUgSkFSL09CUiBhcmNoaXZlIChmb3IgYXV0b21hdGVkIGluc3RhbGxhdGlvbiknKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcmVzdGFydEFmdGVySW5zdGFsbCcsICdSZXN0YXJ0IHRoZSBjb250YWluZXIgYWZ0ZXIgaW5zdGFsbGluZyB0aGUgYXBwJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWptZXRlcicsICdJbmNsdWRlIGFwcCBzcGVjaWZpYyBKTWV0ZXIgdGVzdHMnKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tbG9jdXN0JywgJ0luY2x1ZGUgYXBwIHNwZWNpZmljIExvY3VzdCB0ZXN0cycpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1xdWVyeSA8cXVlcnk+JywgJ0N1c3RvbSBkYXRhc2V0IHF1ZXJ5IHRvIHBvcHVwbGF0ZSB0aGUgY3VzdG9tX2lzc3Vlcy9jdXN0b21fcGFnZXMgcGFyYW1ldGVycycpLmRlZmF1bHQoJycpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS10cywgLS10aW1lc3RhbXAgPHRpbWVzdGFtcD4nLCAnVGhlIHRpbWVzdGFtcCBvZiB0aGUgdGVzdCBydW4sIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGNvbnRpbnVlIGFuIGV4aXN0aW5nIHRlc3QgZXhlY3V0aW9uJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctTywgLS1vdXRwdXREaXIgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgZGlyZWN0b3J5IHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHRzIG9mIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1jd2QgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlcmUgdG8gZmluZCB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKS5kZWZhdWx0KGN3ZCgpKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy15LCAtLWZvcmNlJywgJ1VzZSBkZWZhdWx0IHZhbHVlcyBmb3IgaW5wdXQgcXVlc3Rpb25zIHdoZW4gYXZhaWxhYmxlJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFjdGlvbihvcHRpb25zID0+IEFjdGlvbkhhbmRsZXIocHJvZ3JhbSwgRGVmYXVsdENvbW1hbmQoKSwgb3B0aW9ucykpO1xucHJvZ3JhbVxuICAgIC5jb21tYW5kKCdwcm92aXNpb24nKVxuICAgIC5kZXNjcmlwdGlvbignUHJvdmlzaW9uIHRoZSBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVGVzdGluZyBjbHVzdGVyIG9uIEFXUycpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXByb2R1Y3QgPG5hbWU+JywgJ1RoZSBob3N0IHByb2R1Y3QnKS5jaG9pY2VzKE9iamVjdC52YWx1ZXMoU3VwcG9ydGVkQXBwbGljYXRpb25zLlZhbHVlcykpLm1ha2VPcHRpb25NYW5kYXRvcnkodHJ1ZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXRhZyA8bmFtZT4nLCAnVGhlIGhvc3QgcHJvZHVjdCB2ZXJzaW9uIHRhZycpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1lbnZpcm9ubWVudCA8bmFtZT4nLCAnVGhlIGVudmlyb25tZW50IG5hbWUnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tbW9uaXRvcmluZycsICdFbmFibGUgZGV0YWlsZWQgQ1BVL01lbW9yeSBtb25pdG9yaW5nIGFuZCBHcmFmYW5hIGRhc2hib2FyZHMgZm9yIHZpc3VhbGlzYXRpb24nKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tbGljZW5zZSA8cGF0aF9vcl9saWNlbnNlPicsICdUaGUgaG9zdCBwcm9kdWN0IGxpY2Vuc2UsIGVpdGhlciBhcyBhIHBhdGggdG8gYSBmaWxlIG9yIHRoZSBsaWNlbnNlIGl0c2VsZicpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1ub2RlcyA8bnVtYmVyPicsICdUaGUgbnVtYmVyIG9mIG5vZGVzIGZvciB0aGUgY2x1c3RlcicpLmRlZmF1bHQoMSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWN3ZCA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aGVyZSB0byBmaW5kIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLXksIC0tZm9yY2UnLCAnVXNlIGRlZmF1bHQgdmFsdWVzIGZvciBpbnB1dCBxdWVzdGlvbnMgd2hlbiBhdmFpbGFibGUnKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWN0aW9uKG9wdGlvbnMgPT4gQWN0aW9uSGFuZGxlcihwcm9ncmFtLCBQcm92aXNpb25Db21tYW5kKCksIG9wdGlvbnMpKTtcbnByb2dyYW1cbiAgICAuY29tbWFuZCgncGVyZm9ybWFuY2UnKVxuICAgIC5kZXNjcmlwdGlvbignUnVuIHRoZSBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHRlc3QnKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1wcm9kdWN0IDxuYW1lPicsICdUaGUgaG9zdCBwcm9kdWN0JykuY2hvaWNlcyhPYmplY3QudmFsdWVzKFN1cHBvcnRlZEFwcGxpY2F0aW9ucy5WYWx1ZXMpKS5tYWtlT3B0aW9uTWFuZGF0b3J5KHRydWUpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS10YWcgPG5hbWU+JywgJ1RoZSBob3N0IHByb2R1Y3QgdmVyc2lvbiB0YWcnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZW52aXJvbm1lbnQgPG5hbWU+JywgJ1RoZSBlbnZpcm9ubWVudCBuYW1lJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLW1vbml0b3JpbmcnLCAnRW5hYmxlIGRldGFpbGVkIENQVS9NZW1vcnkgbW9uaXRvcmluZyBhbmQgR3JhZmFuYSBkYXNoYm9hcmRzIGZvciB2aXN1YWxpc2F0aW9uJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWxpY2Vuc2UgPHBhdGhfb3JfbGljZW5zZT4nLCAnVGhlIGhvc3QgcHJvZHVjdCBsaWNlbnNlLCBlaXRoZXIgYXMgYSBwYXRoIHRvIGEgZmlsZSBvciB0aGUgbGljZW5zZSBpdHNlbGYnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tYXBwS2V5IDxhcHBLZXk+JywgJ1RoZSBrZXkgb2YgdGhlIGFwcCAoZm9yIGF1dG9tYXRlZCBpbnN0YWxsYXRpb24pJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWFyY2hpdmUgPHBhdGg+JywgJ1RoZSBwYXRoIHRvIHRoZSBKQVIvT0JSIGFyY2hpdmUgKGZvciBhdXRvbWF0ZWQgaW5zdGFsbGF0aW9uKScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1yZXN0YXJ0QWZ0ZXJJbnN0YWxsJywgJ1Jlc3RhcnQgdGhlIGNvbnRhaW5lciBhZnRlciBpbnN0YWxsaW5nIHRoZSBhcHAnKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tdHMsIC0tdGltZXN0YW1wIDx0aW1lc3RhbXA+JywgJ1RoZSB0aW1lc3RhbXAgb2YgdGhlIHRlc3QgcnVuLCB3aGljaCBjYW4gYmUgdXNlZCB0byBjb250aW51ZSBhbiBleGlzdGluZyB0ZXN0IGV4ZWN1dGlvbicpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLU8sIC0tb3V0cHV0RGlyIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIGRpcmVjdG9yeSB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0cyBvZiB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tY3dkIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZXJlIHRvIGZpbmQgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykuZGVmYXVsdChjd2QoKSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCcteSwgLS1mb3JjZScsICdVc2UgZGVmYXVsdCB2YWx1ZXMgZm9yIGlucHV0IHF1ZXN0aW9ucyB3aGVuIGF2YWlsYWJsZScpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hY3Rpb24ob3B0aW9ucyA9PiBBY3Rpb25IYW5kbGVyKHByb2dyYW0sIFBlcmZvcm1hbmNlVGVzdENvbW1hbmQoKSwgb3B0aW9ucykpO1xucHJvZ3JhbVxuICAgIC5jb21tYW5kKCdzY2FsYWJpbGl0eScpXG4gICAgLmRlc2NyaXB0aW9uKCdSdW4gdGhlIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0IHNjYWxhYmlsaXR5IHRlc3QnKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1wcm9kdWN0IDxuYW1lPicsICdUaGUgaG9zdCBwcm9kdWN0JykuY2hvaWNlcyhPYmplY3QudmFsdWVzKFN1cHBvcnRlZEFwcGxpY2F0aW9ucy5WYWx1ZXMpKS5tYWtlT3B0aW9uTWFuZGF0b3J5KHRydWUpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS10YWcgPG5hbWU+JywgJ1RoZSBob3N0IHByb2R1Y3QgdmVyc2lvbiB0YWcnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZW52aXJvbm1lbnQgPG5hbWU+JywgJ1RoZSBlbnZpcm9ubWVudCBuYW1lJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLW1vbml0b3JpbmcnLCAnRW5hYmxlIGRldGFpbGVkIENQVS9NZW1vcnkgbW9uaXRvcmluZyBhbmQgR3JhZmFuYSBkYXNoYm9hcmRzIGZvciB2aXN1YWxpc2F0aW9uJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWxpY2Vuc2UgPHBhdGhfb3JfbGljZW5zZT4nLCAnVGhlIGhvc3QgcHJvZHVjdCBsaWNlbnNlLCBlaXRoZXIgYXMgYSBwYXRoIHRvIGEgZmlsZSBvciB0aGUgbGljZW5zZSBpdHNlbGYnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tYXBwS2V5IDxhcHBLZXk+JywgJ1RoZSBrZXkgb2YgdGhlIGFwcCAoZm9yIGF1dG9tYXRlZCBpbnN0YWxsYXRpb24pJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWFyY2hpdmUgPHBhdGg+JywgJ1RoZSBwYXRoIHRvIHRoZSBKQVIvT0JSIGFyY2hpdmUgKGZvciBhdXRvbWF0ZWQgaW5zdGFsbGF0aW9uKScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1yZXN0YXJ0QWZ0ZXJJbnN0YWxsJywgJ1Jlc3RhcnQgdGhlIGNvbnRhaW5lciBhZnRlciBpbnN0YWxsaW5nIHRoZSBhcHAnKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tam1ldGVyJywgJ0luY2x1ZGUgYXBwIHNwZWNpZmljIEpNZXRlciB0ZXN0cycpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1sb2N1c3QnLCAnSW5jbHVkZSBhcHAgc3BlY2lmaWMgTG9jdXN0IHRlc3RzJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXF1ZXJ5IDxxdWVyeT4nLCAnQ3VzdG9tIGRhdGFzZXQgcXVlcnkgdG8gcG9wdXBsYXRlIHRoZSBjdXN0b21faXNzdWVzL2N1c3RvbV9wYWdlcyBwYXJhbWV0ZXJzJykuZGVmYXVsdCgnJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXRzLCAtLXRpbWVzdGFtcCA8dGltZXN0YW1wPicsICdUaGUgdGltZXN0YW1wIG9mIHRoZSB0ZXN0IHJ1biwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gY29udGludWUgYW4gZXhpc3RpbmcgdGVzdCBleGVjdXRpb24nKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy1PLCAtLW91dHB1dERpciA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSBkaXJlY3Rvcnkgd2hlcmUgdG8gc3RvcmUgdGhlIHJlc3VsdHMgb2YgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWN3ZCA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aGVyZSB0byBmaW5kIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpLmRlZmF1bHQoY3dkKCkpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLXksIC0tZm9yY2UnLCAnVXNlIGRlZmF1bHQgdmFsdWVzIGZvciBpbnB1dCBxdWVzdGlvbnMgd2hlbiBhdmFpbGFibGUnKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWN0aW9uKG9wdGlvbnMgPT4gQWN0aW9uSGFuZGxlcihwcm9ncmFtLCBTY2FsYWJpbGl0eVRlc3RDb21tYW5kKCksIG9wdGlvbnMpKTtcbnByb2dyYW1cbiAgICAuY29tbWFuZCgncmVpbmRleCcpXG4gICAgLmRlc2NyaXB0aW9uKCdSdW4gdGhlIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0IEx1Y2VuZSBJbmRleCBUaW1pbmcgdGVzdCcpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXRhZyA8bmFtZT4nLCAnVGhlIGhvc3QgcHJvZHVjdCB2ZXJzaW9uIHRhZycpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1lbnZpcm9ubWVudCA8bmFtZT4nLCAnVGhlIGVudmlyb25tZW50IG5hbWUnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tbW9uaXRvcmluZycsICdFbmFibGUgZGV0YWlsZWQgQ1BVL01lbW9yeSBtb25pdG9yaW5nIGFuZCBHcmFmYW5hIGRhc2hib2FyZHMgZm9yIHZpc3VhbGlzYXRpb24nKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tbGljZW5zZSA8cGF0aF9vcl9saWNlbnNlPicsICdUaGUgaG9zdCBwcm9kdWN0IGxpY2Vuc2UsIGVpdGhlciBhcyBhIHBhdGggdG8gYSBmaWxlIG9yIHRoZSBsaWNlbnNlIGl0c2VsZicpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1hcHBLZXkgPGFwcEtleT4nLCAnVGhlIGtleSBvZiB0aGUgYXBwIChmb3IgYXV0b21hdGVkIGluc3RhbGxhdGlvbiknKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tYXJjaGl2ZSA8cGF0aD4nLCAnVGhlIHBhdGggdG8gdGhlIEpBUi9PQlIgYXJjaGl2ZSAoZm9yIGF1dG9tYXRlZCBpbnN0YWxsYXRpb24pJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXJlc3RhcnRBZnRlckluc3RhbGwnLCAnUmVzdGFydCB0aGUgY29udGFpbmVyIGFmdGVyIGluc3RhbGxpbmcgdGhlIGFwcCcpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS10cywgLS10aW1lc3RhbXAgPHRpbWVzdGFtcD4nLCAnVGhlIHRpbWVzdGFtcCBvZiB0aGUgdGVzdCBydW4sIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGNvbnRpbnVlIGFuIGV4aXN0aW5nIHRlc3QgZXhlY3V0aW9uJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctTywgLS1vdXRwdXREaXIgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgZGlyZWN0b3J5IHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHRzIG9mIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1jd2QgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlcmUgdG8gZmluZCB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKS5kZWZhdWx0KGN3ZCgpKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy15LCAtLWZvcmNlJywgJ1VzZSBkZWZhdWx0IHZhbHVlcyBmb3IgaW5wdXQgcXVlc3Rpb25zIHdoZW4gYXZhaWxhYmxlJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFjdGlvbihvcHRpb25zID0+IEFjdGlvbkhhbmRsZXIocHJvZ3JhbSwgUmVpbmRleENvbW1hbmQoKSwgeyAuLi5vcHRpb25zLCBwcm9kdWN0OiBTdXBwb3J0ZWRBcHBsaWNhdGlvbnMuVmFsdWVzLmppcmEgfSkpO1xucHJvZ3JhbVxuICAgIC5jb21tYW5kKCdyZXBvcnQnKVxuICAgIC5kZXNjcmlwdGlvbignR2VuZXJhdGUgYSBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVGVzdGluZyByZXBvcnQnKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS10eXBlIDx0eXBlPicsICdUaGUgdHlwZSBvZiByZXBvcnQgdG8gZ2VuZXJhdGUnKS5jaG9pY2VzKE9iamVjdC52YWx1ZXMoUmVwb3J0VHlwZXMuVmFsdWVzKSkubWFrZU9wdGlvbk1hbmRhdG9yeSh0cnVlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcHJvZHVjdCA8bmFtZT4nLCAnVGhlIGhvc3QgcHJvZHVjdCcpLmNob2ljZXMoT2JqZWN0LnZhbHVlcyhTdXBwb3J0ZWRBcHBsaWNhdGlvbnMuVmFsdWVzKSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXRhZyA8bmFtZT4nLCAnVGhlIGhvc3QgcHJvZHVjdCB2ZXJzaW9uIHRhZycpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1yZXN1bHRzRGlyMSA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSBkaXJlY3Rvcnkgd2hlcmUgdG8gZmluZCB0aGUgcmVzdWx0cyBvZiB0aGUgMXN0IHJ1biB1c2VkIHRvIGdlbmVyYXRlIHRoZSByZXBvcnQnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcmVzdWx0c0RpcjIgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgZGlyZWN0b3J5IHdoZXJlIHRvIGZpbmQgdGhlIHJlc3VsdHMgb2YgcnVuIDJuZCBydW4gdXNlZCB0byBnZW5lcmF0ZSB0aGUgcmVwb3J0JykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXJlc3VsdHNEaXIzIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIGRpcmVjdG9yeSB3aGVyZSB0byBmaW5kIHRoZSByZXN1bHRzIG9mIHJ1biAzcmQgcnVuIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHJlcG9ydCAob25seSBmb3IgU2NhbGFiaWxpdHkgcmVwb3J0KScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS10cywgLS10aW1lc3RhbXAgPHRpbWVzdGFtcD4nLCAnVGhlIHRpbWVzdGFtcCBvZiB0aGUgdGVzdCBydW4sIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGNvbnRpbnVlIGFuIGV4aXN0aW5nIHRlc3QgZXhlY3V0aW9uJykubWFrZU9wdGlvbk1hbmRhdG9yeSh0cnVlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy1PLCAtLW91dHB1dERpciA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSBkaXJlY3Rvcnkgd2hlcmUgdG8gc3RvcmUgdGhlIHJlc3VsdHMgb2YgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWN3ZCA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aGVyZSB0byBmaW5kIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpLmRlZmF1bHQoY3dkKCkpLm1ha2VPcHRpb25NYW5kYXRvcnkodHJ1ZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCcteSwgLS1mb3JjZScsICdVc2UgZGVmYXVsdCB2YWx1ZXMgZm9yIGlucHV0IHF1ZXN0aW9ucyB3aGVuIGF2YWlsYWJsZScpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hY3Rpb24ob3B0aW9ucyA9PiBBY3Rpb25IYW5kbGVyKHByb2dyYW0sIFJlcG9ydENvbW1hbmQoKSwgb3B0aW9ucykpO1xucHJvZ3JhbVxuICAgIC5jb21tYW5kKCdydW4xJylcbiAgICAuZGVzY3JpcHRpb24oJ1N0YXJ0IHRoZSBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVGVzdGluZyBQZXJmb3JtYW5jZSBiYXNlbGluZSB0ZXN0IChydW4gMSknKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1wcm9kdWN0IDxuYW1lPicsICdUaGUgaG9zdCBwcm9kdWN0JykuY2hvaWNlcyhPYmplY3QudmFsdWVzKFN1cHBvcnRlZEFwcGxpY2F0aW9ucy5WYWx1ZXMpKS5tYWtlT3B0aW9uTWFuZGF0b3J5KHRydWUpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS10YWcgPG5hbWU+JywgJ1RoZSBob3N0IHByb2R1Y3QgdmVyc2lvbiB0YWcnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZW52aXJvbm1lbnQgPG5hbWU+JywgJ1RoZSBlbnZpcm9ubWVudCBuYW1lJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLW1vbml0b3JpbmcnLCAnRW5hYmxlIGRldGFpbGVkIENQVS9NZW1vcnkgbW9uaXRvcmluZyBhbmQgR3JhZmFuYSBkYXNoYm9hcmRzIGZvciB2aXN1YWxpc2F0aW9uJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWxpY2Vuc2UgPHBhdGhfb3JfbGljZW5zZT4nLCAnVGhlIGhvc3QgcHJvZHVjdCBsaWNlbnNlLCBlaXRoZXIgYXMgYSBwYXRoIHRvIGEgZmlsZSBvciB0aGUgbGljZW5zZSBpdHNlbGYnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tdHMsIC0tdGltZXN0YW1wIDx0aW1lc3RhbXA+JywgJ1RoZSB0aW1lc3RhbXAgb2YgdGhlIHRlc3QgcnVuLCB3aGljaCBjYW4gYmUgdXNlZCB0byBjb250aW51ZSBhbiBleGlzdGluZyB0ZXN0IGV4ZWN1dGlvbicpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLU8sIC0tb3V0cHV0RGlyIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIGRpcmVjdG9yeSB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0cyBvZiB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tY3dkIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZXJlIHRvIGZpbmQgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykuZGVmYXVsdChjd2QoKSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCcteSwgLS1mb3JjZScsICdVc2UgZGVmYXVsdCB2YWx1ZXMgZm9yIGlucHV0IHF1ZXN0aW9ucyB3aGVuIGF2YWlsYWJsZScpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hY3Rpb24ob3B0aW9ucyA9PiBBY3Rpb25IYW5kbGVyKHByb2dyYW0sIFJ1bjFDb21tYW5kKCksIG9wdGlvbnMpKTtcbnByb2dyYW1cbiAgICAuY29tbWFuZCgncnVuMicpXG4gICAgLmRlc2NyaXB0aW9uKCdTdGFydCB0aGUgRGF0YSBDZW50ZXIgQXBwIFBlcmZvcm1hbmNlIFRlc3RpbmcgUGVyZm9ybWFuY2UgcmVncmVzc2lvbiB0ZXN0IChydW4gMiknKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1wcm9kdWN0IDxuYW1lPicsICdUaGUgaG9zdCBwcm9kdWN0JykuY2hvaWNlcyhPYmplY3QudmFsdWVzKFN1cHBvcnRlZEFwcGxpY2F0aW9ucy5WYWx1ZXMpKS5tYWtlT3B0aW9uTWFuZGF0b3J5KHRydWUpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS10YWcgPG5hbWU+JywgJ1RoZSBob3N0IHByb2R1Y3QgdmVyc2lvbiB0YWcnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZW52aXJvbm1lbnQgPG5hbWU+JywgJ1RoZSBlbnZpcm9ubWVudCBuYW1lJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLW1vbml0b3JpbmcnLCAnRW5hYmxlIGRldGFpbGVkIENQVS9NZW1vcnkgbW9uaXRvcmluZyBhbmQgR3JhZmFuYSBkYXNoYm9hcmRzIGZvciB2aXN1YWxpc2F0aW9uJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWxpY2Vuc2UgPHBhdGhfb3JfbGljZW5zZT4nLCAnVGhlIGhvc3QgcHJvZHVjdCBsaWNlbnNlLCBlaXRoZXIgYXMgYSBwYXRoIHRvIGEgZmlsZSBvciB0aGUgbGljZW5zZSBpdHNlbGYnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tdHMsIC0tdGltZXN0YW1wIDx0aW1lc3RhbXA+JywgJ1RoZSB0aW1lc3RhbXAgb2YgdGhlIHRlc3QgcnVuLCB3aGljaCBjYW4gYmUgdXNlZCB0byBjb250aW51ZSBhbiBleGlzdGluZyB0ZXN0IGV4ZWN1dGlvbicpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1hcHBLZXkgPGFwcEtleT4nLCAnVGhlIGtleSBvZiB0aGUgYXBwIChmb3IgYXV0b21hdGVkIGluc3RhbGxhdGlvbiknKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tYXJjaGl2ZSA8cGF0aD4nLCAnVGhlIHBhdGggdG8gdGhlIEpBUi9PQlIgYXJjaGl2ZSAoZm9yIGF1dG9tYXRlZCBpbnN0YWxsYXRpb24pJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXJlc3RhcnRBZnRlckluc3RhbGwnLCAnUmVzdGFydCB0aGUgY29udGFpbmVyIGFmdGVyIGluc3RhbGxpbmcgdGhlIGFwcCcpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLU8sIC0tb3V0cHV0RGlyIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIGRpcmVjdG9yeSB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0cyBvZiB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tY3dkIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZXJlIHRvIGZpbmQgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykuZGVmYXVsdChjd2QoKSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCcteSwgLS1mb3JjZScsICdVc2UgZGVmYXVsdCB2YWx1ZXMgZm9yIGlucHV0IHF1ZXN0aW9ucyB3aGVuIGF2YWlsYWJsZScpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hY3Rpb24ob3B0aW9ucyA9PiBBY3Rpb25IYW5kbGVyKHByb2dyYW0sIFJ1bjJDb21tYW5kKCksIG9wdGlvbnMpKTtcbnByb2dyYW1cbiAgICAuY29tbWFuZCgncnVuMycpXG4gICAgLmRlc2NyaXB0aW9uKCdTdGFydCB0aGUgRGF0YSBDZW50ZXIgQXBwIFBlcmZvcm1hbmNlIFRlc3RpbmcgU2NhbGFiaWxpdHkgdGVzdCBvbiBhIG9uZS1ub2RlIERDIGNsdXN0ZXIgKHJ1biAzKScpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXByb2R1Y3QgPG5hbWU+JywgJ1RoZSBob3N0IHByb2R1Y3QnKS5jaG9pY2VzKE9iamVjdC52YWx1ZXMoU3VwcG9ydGVkQXBwbGljYXRpb25zLlZhbHVlcykpLm1ha2VPcHRpb25NYW5kYXRvcnkodHJ1ZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXRhZyA8bmFtZT4nLCAnVGhlIGhvc3QgcHJvZHVjdCB2ZXJzaW9uIHRhZycpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1lbnZpcm9ubWVudCA8bmFtZT4nLCAnVGhlIGVudmlyb25tZW50IG5hbWUnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tbW9uaXRvcmluZycsICdFbmFibGUgZGV0YWlsZWQgQ1BVL01lbW9yeSBtb25pdG9yaW5nIGFuZCBHcmFmYW5hIGRhc2hib2FyZHMgZm9yIHZpc3VhbGlzYXRpb24nKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tbGljZW5zZSA8cGF0aF9vcl9saWNlbnNlPicsICdUaGUgaG9zdCBwcm9kdWN0IGxpY2Vuc2UsIGVpdGhlciBhcyBhIHBhdGggdG8gYSBmaWxlIG9yIHRoZSBsaWNlbnNlIGl0c2VsZicpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS10cywgLS10aW1lc3RhbXAgPHRpbWVzdGFtcD4nLCAnVGhlIHRpbWVzdGFtcCBvZiB0aGUgdGVzdCBydW4sIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGNvbnRpbnVlIGFuIGV4aXN0aW5nIHRlc3QgZXhlY3V0aW9uJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWFwcEtleSA8YXBwS2V5PicsICdUaGUga2V5IG9mIHRoZSBhcHAgKGZvciBhdXRvbWF0ZWQgaW5zdGFsbGF0aW9uKScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1hcmNoaXZlIDxwYXRoPicsICdUaGUgcGF0aCB0byB0aGUgSkFSL09CUiBhcmNoaXZlIChmb3IgYXV0b21hdGVkIGluc3RhbGxhdGlvbiknKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcmVzdGFydEFmdGVySW5zdGFsbCcsICdSZXN0YXJ0IHRoZSBjb250YWluZXIgYWZ0ZXIgaW5zdGFsbGluZyB0aGUgYXBwJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWptZXRlcicsICdJbmNsdWRlIGFwcCBzcGVjaWZpYyBKTWV0ZXIgdGVzdHMnKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tbG9jdXN0JywgJ0luY2x1ZGUgYXBwIHNwZWNpZmljIExvY3VzdCB0ZXN0cycpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1xdWVyeSA8cXVlcnk+JywgJ0N1c3RvbSBkYXRhc2V0IHF1ZXJ5IHRvIHBvcHVwbGF0ZSB0aGUgY3VzdG9tX2lzc3Vlcy9jdXN0b21fcGFnZXMgcGFyYW1ldGVycycpLmRlZmF1bHQoJycpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLU8sIC0tb3V0cHV0RGlyIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIGRpcmVjdG9yeSB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0cyBvZiB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tY3dkIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZXJlIHRvIGZpbmQgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykuZGVmYXVsdChjd2QoKSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCcteSwgLS1mb3JjZScsICdVc2UgZGVmYXVsdCB2YWx1ZXMgZm9yIGlucHV0IHF1ZXN0aW9ucyB3aGVuIGF2YWlsYWJsZScpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hY3Rpb24ob3B0aW9ucyA9PiBBY3Rpb25IYW5kbGVyKHByb2dyYW0sIFJ1bjNDb21tYW5kKCksIG9wdGlvbnMpKTtcbnByb2dyYW1cbiAgICAuY29tbWFuZCgncnVuNCcpXG4gICAgLmRlc2NyaXB0aW9uKCdTdGFydCB0aGUgRGF0YSBDZW50ZXIgQXBwIFBlcmZvcm1hbmNlIFRlc3RpbmcgU2NhbGFiaWxpdHkgdGVzdCBvbiBhIHR3by1ub2RlIERDIGNsdXN0ZXIgKHJ1biA0KScpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXByb2R1Y3QgPG5hbWU+JywgJ1RoZSBob3N0IHByb2R1Y3QnKS5jaG9pY2VzKE9iamVjdC52YWx1ZXMoU3VwcG9ydGVkQXBwbGljYXRpb25zLlZhbHVlcykpLm1ha2VPcHRpb25NYW5kYXRvcnkodHJ1ZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXRhZyA8bmFtZT4nLCAnVGhlIGhvc3QgcHJvZHVjdCB2ZXJzaW9uIHRhZycpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1lbnZpcm9ubWVudCA8bmFtZT4nLCAnVGhlIGVudmlyb25tZW50IG5hbWUnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tbW9uaXRvcmluZycsICdFbmFibGUgZGV0YWlsZWQgQ1BVL01lbW9yeSBtb25pdG9yaW5nIGFuZCBHcmFmYW5hIGRhc2hib2FyZHMgZm9yIHZpc3VhbGlzYXRpb24nKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tbGljZW5zZSA8cGF0aF9vcl9saWNlbnNlPicsICdUaGUgaG9zdCBwcm9kdWN0IGxpY2Vuc2UsIGVpdGhlciBhcyBhIHBhdGggdG8gYSBmaWxlIG9yIHRoZSBsaWNlbnNlIGl0c2VsZicpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS10cywgLS10aW1lc3RhbXAgPHRpbWVzdGFtcD4nLCAnVGhlIHRpbWVzdGFtcCBvZiB0aGUgdGVzdCBydW4sIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGNvbnRpbnVlIGFuIGV4aXN0aW5nIHRlc3QgZXhlY3V0aW9uJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWFwcEtleSA8YXBwS2V5PicsICdUaGUga2V5IG9mIHRoZSBhcHAgKGZvciBhdXRvbWF0ZWQgaW5zdGFsbGF0aW9uKScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1hcmNoaXZlIDxwYXRoPicsICdUaGUgcGF0aCB0byB0aGUgSkFSL09CUiBhcmNoaXZlIChmb3IgYXV0b21hdGVkIGluc3RhbGxhdGlvbiknKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcmVzdGFydEFmdGVySW5zdGFsbCcsICdSZXN0YXJ0IHRoZSBjb250YWluZXIgYWZ0ZXIgaW5zdGFsbGluZyB0aGUgYXBwJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWptZXRlcicsICdJbmNsdWRlIGFwcCBzcGVjaWZpYyBKTWV0ZXIgdGVzdHMnKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tbG9jdXN0JywgJ0luY2x1ZGUgYXBwIHNwZWNpZmljIExvY3VzdCB0ZXN0cycpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1xdWVyeSA8cXVlcnk+JywgJ0N1c3RvbSBkYXRhc2V0IHF1ZXJ5IHRvIHBvcHVwbGF0ZSB0aGUgY3VzdG9tX2lzc3Vlcy9jdXN0b21fcGFnZXMgcGFyYW1ldGVycycpLmRlZmF1bHQoJycpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLU8sIC0tb3V0cHV0RGlyIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIGRpcmVjdG9yeSB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0cyBvZiB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tY3dkIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZXJlIHRvIGZpbmQgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykuZGVmYXVsdChjd2QoKSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCcteSwgLS1mb3JjZScsICdVc2UgZGVmYXVsdCB2YWx1ZXMgZm9yIGlucHV0IHF1ZXN0aW9ucyB3aGVuIGF2YWlsYWJsZScpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hY3Rpb24ob3B0aW9ucyA9PiBBY3Rpb25IYW5kbGVyKHByb2dyYW0sIFJ1bjRDb21tYW5kKCksIG9wdGlvbnMpKTtcbnByb2dyYW1cbiAgICAuY29tbWFuZCgncnVuNScpXG4gICAgLmRlc2NyaXB0aW9uKCdTdGFydCB0aGUgRGF0YSBDZW50ZXIgQXBwIFBlcmZvcm1hbmNlIFRlc3RpbmcgU2NhbGFiaWxpdHkgdGVzdCBvbiBhIGZvdXItbm9kZSBEQyBjbHVzdGVyIChydW4gNSknKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1wcm9kdWN0IDxuYW1lPicsICdUaGUgaG9zdCBwcm9kdWN0JykuY2hvaWNlcyhPYmplY3QudmFsdWVzKFN1cHBvcnRlZEFwcGxpY2F0aW9ucy5WYWx1ZXMpKS5tYWtlT3B0aW9uTWFuZGF0b3J5KHRydWUpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS10YWcgPG5hbWU+JywgJ1RoZSBob3N0IHByb2R1Y3QgdmVyc2lvbiB0YWcnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZW52aXJvbm1lbnQgPG5hbWU+JywgJ1RoZSBlbnZpcm9ubWVudCBuYW1lJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLW1vbml0b3JpbmcnLCAnRW5hYmxlIGRldGFpbGVkIENQVS9NZW1vcnkgbW9uaXRvcmluZyBhbmQgR3JhZmFuYSBkYXNoYm9hcmRzIGZvciB2aXN1YWxpc2F0aW9uJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWxpY2Vuc2UgPHBhdGhfb3JfbGljZW5zZT4nLCAnVGhlIGhvc3QgcHJvZHVjdCBsaWNlbnNlLCBlaXRoZXIgYXMgYSBwYXRoIHRvIGEgZmlsZSBvciB0aGUgbGljZW5zZSBpdHNlbGYnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tdHMsIC0tdGltZXN0YW1wIDx0aW1lc3RhbXA+JywgJ1RoZSB0aW1lc3RhbXAgb2YgdGhlIHRlc3QgcnVuLCB3aGljaCBjYW4gYmUgdXNlZCB0byBjb250aW51ZSBhbiBleGlzdGluZyB0ZXN0IGV4ZWN1dGlvbicpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1hcHBLZXkgPGFwcEtleT4nLCAnVGhlIGtleSBvZiB0aGUgYXBwIChmb3IgYXV0b21hdGVkIGluc3RhbGxhdGlvbiknKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tYXJjaGl2ZSA8cGF0aD4nLCAnVGhlIHBhdGggdG8gdGhlIEpBUi9PQlIgYXJjaGl2ZSAoZm9yIGF1dG9tYXRlZCBpbnN0YWxsYXRpb24pJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXJlc3RhcnRBZnRlckluc3RhbGwnLCAnUmVzdGFydCB0aGUgY29udGFpbmVyIGFmdGVyIGluc3RhbGxpbmcgdGhlIGFwcCcpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1qbWV0ZXInLCAnSW5jbHVkZSBhcHAgc3BlY2lmaWMgSk1ldGVyIHRlc3RzJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWxvY3VzdCcsICdJbmNsdWRlIGFwcCBzcGVjaWZpYyBMb2N1c3QgdGVzdHMnKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcXVlcnkgPHF1ZXJ5PicsICdDdXN0b20gZGF0YXNldCBxdWVyeSB0byBwb3B1cGxhdGUgdGhlIGN1c3RvbV9pc3N1ZXMvY3VzdG9tX3BhZ2VzIHBhcmFtZXRlcnMnKS5kZWZhdWx0KCcnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy1PLCAtLW91dHB1dERpciA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSBkaXJlY3Rvcnkgd2hlcmUgdG8gc3RvcmUgdGhlIHJlc3VsdHMgb2YgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWN3ZCA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aGVyZSB0byBmaW5kIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpLmRlZmF1bHQoY3dkKCkpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLXksIC0tZm9yY2UnLCAnVXNlIGRlZmF1bHQgdmFsdWVzIGZvciBpbnB1dCBxdWVzdGlvbnMgd2hlbiBhdmFpbGFibGUnKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWN0aW9uKG9wdGlvbnMgPT4gQWN0aW9uSGFuZGxlcihwcm9ncmFtLCBSdW41Q29tbWFuZCgpLCBvcHRpb25zKSk7XG5wcm9ncmFtXG4gICAgLmNvbW1hbmQoJ3Jlc3RhcnQnKVxuICAgIC5kZXNjcmlwdGlvbignUmVzdGFydCB0aGUgRGF0YSBDZW50ZXIgQXBwIFBlcmZvcm1hbmNlIFRlc3RpbmcgY2x1c3RlciBvbiBBV1MnKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1wcm9kdWN0IDxuYW1lPicsICdUaGUgaG9zdCBwcm9kdWN0JykuY2hvaWNlcyhPYmplY3QudmFsdWVzKFN1cHBvcnRlZEFwcGxpY2F0aW9ucy5WYWx1ZXMpKS5tYWtlT3B0aW9uTWFuZGF0b3J5KHRydWUpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1lbnZpcm9ubWVudCA8bmFtZT4nLCAnVGhlIGVudmlyb25tZW50IG5hbWUnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tY3dkIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZXJlIHRvIGZpbmQgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykuZGVmYXVsdChjd2QoKSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCcteSwgLS1mb3JjZScsICdVc2UgZGVmYXVsdCB2YWx1ZXMgZm9yIGlucHV0IHF1ZXN0aW9ucyB3aGVuIGF2YWlsYWJsZScpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hY3Rpb24ob3B0aW9ucyA9PiBBY3Rpb25IYW5kbGVyKHByb2dyYW0sIFJlc3RhcnRDb21tYW5kKCksIG9wdGlvbnMpKTtcbnByb2dyYW1cbiAgICAuY29tbWFuZCgndGVhcmRvd24nKVxuICAgIC5kZXNjcmlwdGlvbignVGVybWluYXRlIHRoZSBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVGVzdGluZyBjbHVzdGVyIG9uIEFXUycpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXByb2R1Y3QgPG5hbWU+JywgJ1RoZSBob3N0IHByb2R1Y3QnKS5jaG9pY2VzKE9iamVjdC52YWx1ZXMoU3VwcG9ydGVkQXBwbGljYXRpb25zLlZhbHVlcykpLm1ha2VPcHRpb25NYW5kYXRvcnkodHJ1ZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWVudmlyb25tZW50IDxuYW1lPicsICdUaGUgZW52aXJvbm1lbnQgbmFtZScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1jd2QgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlcmUgdG8gZmluZCB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKS5kZWZhdWx0KGN3ZCgpKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy15LCAtLWZvcmNlJywgJ1VzZSBkZWZhdWx0IHZhbHVlcyBmb3IgaW5wdXQgcXVlc3Rpb25zIHdoZW4gYXZhaWxhYmxlJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFjdGlvbihvcHRpb25zID0+IEFjdGlvbkhhbmRsZXIocHJvZ3JhbSwgVGVhcmRvd25Db21tYW5kKCksIG9wdGlvbnMpKTtcbnByb2dyYW1cbiAgICAuY29tbWFuZCgnZGVwZW5kZW5jaWVzJylcbiAgICAuZGVzY3JpcHRpb24oJ0dlbmVyYXRlIHRoZSBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVGVzdGluZyBkZXBlbmRlbmN5IHRyZWUnKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1ncm91cElkIDxncm91cElkPicsICdUaGUgZ3JvdXBJZCBvZiB0aGUgYXJ0aWZhY3QgdG8gZ3JhcGggZGVwZW5kZW5jaWVzIGZvcicpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1hcnRpZmFjdElkIDxhcnRpZmFjdElkPicsICdUaGUgYXJ0aWZhY3RJZCBvZiB0aGUgYXJ0aWZhY3QgdG8gZ3JhcGggZGVwZW5kZW5jaWVzIGZvcicpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1hcHBLZXkgPGFwcEtleT4nLCAnVGhlIGtleSBvZiB0aGUgYXBwIHRvIGdyYXBoIGRlcGVuZGVuY2llcyBmb3InKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tYXJjaGl2ZSA8cGF0aD4nLCAnVGhlIHBhdGggdG8gdGhlIEpBUi9PQlIgYXJjaGl2ZSB0byBncmFwaCBkZXBlbmRlbmNpZXMgZm9yJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctUCwgLS1hY3RpdmF0ZS1wcm9maWxlcyA8YXJnPicsICdDb21tYS1kZWxpbWl0ZWQgbGlzdCBvZiBwcm9maWxlcyB0byBhY3RpdmF0ZScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLU8sIC0tb3V0cHV0RmlsZSA8cGF0aD4nLCAnU3BlY2lmeSB0aGUgb3V0cHV0IGZpbGUgd2hlcmUgdG8gc3RvcmUgdGhlIGdlbmVyYXRlZCBkZXBlbmRlbmN5IHRyZWUgKGRlZmF1bHRzIHRvIGAuL21hdmVuX2RlcGVuZGVuY3lfdHJlZS5ndmApJykpXG4gICAgLmFjdGlvbihvcHRpb25zID0+IEFjdGlvbkhhbmRsZXIocHJvZ3JhbSwgRGVwZW5kZW5jeVRyZWVDb21tYW5kKCksIG9wdGlvbnMpKTtcbnByb2dyYW1cbiAgICAuY29tbWFuZCgnc2NhJylcbiAgICAuZGVzY3JpcHRpb24oYFJ1biB0aGUgRGF0YSBDZW50ZXIgQXBwIFBlcmZvcm1hbmNlIFRlc3Rpbmcgc29mdHdhcmUgY29tcG9zaXRpb24gYW5hbHlzaXMgKFNDQSkgdG9vbFxuXG5UbyBhdm9pZCByYXRlIGxpbWl0aW5nIGlzc3VlcywgcHJvdmlkaW5nIGFuIE5WRCBBUEkgS2V5IGlzIHJlcXVpcmVkIChzZWUgaHR0cHM6Ly9udmQubmlzdC5nb3YvZGV2ZWxvcGVycy9yZXF1ZXN0LWFuLWFwaS1rZXkpXG5gKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1udmRBcGlLZXkgPGtleT4nLCAnVGhlIE5WRCBBUEkga2V5IChkZWZhdWx0cyB0byBOVkRfQVBJX0tFWSBlbnZpcm9ubWVudCB2YXJpYWJsZSknKS5kZWZhdWx0KHByb2Nlc3MuZW52Lk5WRF9BUElfS0VZKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tYXBwS2V5IDxhcHBLZXk+JywgJ1RoZSBrZXkgb2YgdGhlIGFwcCB0byBzY2FuJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWFyY2hpdmUgPHBhdGg+JywgJ1RoZSBwYXRoIHRvIHRoZSBKQVIvT0JSIGFyY2hpdmUgdG8gc2NhbicpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1mYWlsT25FcnJvcicsICdUaGUgcHJvY2VzcyB3aWxsIGV4aXQgd2l0aCBhbiBlcnJvciBjb2RlIGlmIGEgdnVsbmVyYWJpbGl0eSBpcyBmb3VuZCcpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLUQsIC0tZGF0YURpciA8cGF0aD4nLCAnVGhlIHBhdGggdG8gdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRoZSBOVkQgZGF0YWJhc2UnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy1PLCAtLW91dHB1dERpciA8cGF0aD4nLCAnU3BlY2lmeSB0aGUgb3V0cHV0IGRpcmVjdG9yeSB3aGVyZSB0byBzdG9yZSB0aGUgZ2VuZXJhdGVkIHJlcG9ydCAoZGVmYXVsdHMgdG8gYC4vc2NhX3JlcG9ydGApJykpXG4gICAgLmFjdGlvbihvcHRpb25zID0+IEFjdGlvbkhhbmRsZXIocHJvZ3JhbSwgU0NBQ29tbWFuZCgpLCBvcHRpb25zKSk7XG5wcm9ncmFtLnBhcnNlQXN5bmMocHJvY2Vzcy5hcmd2KS5jYXRjaCgoKSA9PiBncmFjZWZ1bEV4aXQoMSkpO1xucHJvY2Vzcy5vbignU0lHSU5UJywgKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKGBSZWNlaXZlZCB0ZXJtIHNpZ25hbCwgdHJ5aW5nIHRvIHN0b3AgZ3JhY2VmdWxseSDwn5KqYCk7XG4gICAgZ3JhY2VmdWxFeGl0KCk7XG59KTtcbiJdLCJuYW1lcyI6WyJjd2QiLCJwd2QiLCJwYXJzZSIsInByb2dyZXNzQmFyIiwi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
|
|
3746
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXB0LmpzIiwic291cmNlcyI6WyIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9kb3dubG9hZEZpbGUuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9nZXRQcm9wZXJ0eUZyb21Qb21GaWxlLmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0VXJsQnlBcHBLZXkuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9nZW5lcmF0ZURlcGVuZGVuY3lUcmVlLmpzIiwiLi4vLi4vZGlzdC9zcmMvaGVscGVycy9jYXBpdGFsaXplLmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0UnVuRm9yU3RhZ2UuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvbWVzc2FnZXMuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9kY2FwdC5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2dldEFwdERpcmVjdG9yeS5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2dldFJlcG9ydC5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2dldFJlcG9ydERpcmVjdG9yeS5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL3dhaXRGb3JVc2VySW5wdXQuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9nZW5lcmF0ZVBlcmZvcm1hbmNlUmVwb3J0LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2VuZXJhdGVTY2FsYWJpbGl0eVJlcG9ydC5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2dlbmVyYXRlU0NBUmVwb3J0LmpzIiwiLi4vLi4vZGlzdC9zcmMvaGVscGVycy9saWNlbmNlcy5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2dldEhvc3RMaWNlbnNlLmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0T3V0cHV0RGlyZWN0b3J5LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0UHJvZHVjdC5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2dldEFXU0NyZWRlbnRpYWxzLmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0RW52aXJvbm1lbnROYW1lLmpzIiwiLi4vLi4vZGlzdC9zcmMvaGVscGVycy9yZXBsYWNlTGluZXNJbkZpbGUuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9wZXJzaXN0Q2x1c3RlckNvbmZpZ3VyYXRpb24uanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9wZXJzaXN0c0FXU0NyZWRlbnRpYWxzLmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0Q2x1c3RlclVSTC5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL3Byb3Zpc2lvbkNsdXN0ZXIuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9yZXN0YXJ0Q2x1c3Rlci5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2hlbHBlcnMvUEFULmpzIiwiLi4vLi4vZGlzdC9zcmMvaGVscGVycy91cG0uanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9nZXRBcHBMaWNlbnNlLmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvaW5zdGFsbEFwcEluQ2x1c3Rlci5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2dldFJlaW5kZXhQcm9ncmVzcy5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL3JlaW5kZXguanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9ydW5MdWNlbmVUaW1pbmdUZXN0LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0RHVyYXRpb24uanMiLCIuLi8uLi9kaXN0L3NyYy9oZWxwZXJzL3JlYWRMaW5lc0luRmlsZS5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2FwdC9oZWxwZXJzL2dldFJlc3VsdHMuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvaGVscGVycy9nZXRSZXN1bHRzRGlyZWN0b3J5LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvcGVyc2lzdFRlc3RDb25maWd1cmF0aW9uLmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvcnVuUGVyZm9ybWFuY2VUZXN0LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvZ2V0Tm9kZU51bWJlckZvclN0YWdlLmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvcnVuU2NhbGFiaWxpdHlUZXN0LmpzIiwiLi4vLi4vZGlzdC9zcmMvYXB0L2hlbHBlcnMvdGVhcmRvd25DbHVzdGVyLmpzIiwiLi4vLi4vZGlzdC9zcmMvaGVscGVycy90b0Fic29sdXRlUGF0aC5qcyIsIi4uLy4uL2Rpc3Qvc3JjL2hlbHBlcnMvZ2V0VmVyc2lvbnMuanMiLCIuLi8uLi9kaXN0L3NyYy90eXBlcy9EYXRhYmFzZS5qcyIsIi4uLy4uL2Rpc3Qvc3JjL3R5cGVzL0FwcGxpY2F0aW9uLmpzIiwiLi4vLi4vZGlzdC9zcmMvdHlwZXMvRENBUFQuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvcGVyZm9ybWFuY2UuanMiLCIuLi8uLi9kaXN0L3NyYy9hcHQvc2NhbGFiaWxpdHkuanMiLCIuLi8uLi9kaXN0L3NyYy9oZWxwZXJzL0FjdGlvbkhhbmRsZXIuanMiLCIuLi8uLi9kaXN0L3NyYy9oZWxwZXJzL2dlbmVyYXRlVmVyc2lvbkxpc3QuanMiLCIuLi8uLi9kaXN0L3NyYy9jb21tYW5kcy9hcHQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IHBhcnNlIH0gZnJvbSAnY29udGVudC1kaXNwb3NpdGlvbic7XG5pbXBvcnQgeyBjcmVhdGVXcml0ZVN0cmVhbSwgbWtkaXJTeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ29zJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IGZpbmlzaGVkIH0gZnJvbSAnc3RyZWFtL3Byb21pc2VzJztcbmV4cG9ydCBjb25zdCBkb3dubG9hZEZpbGUgPSBhc3luYyAodXJsLCBuYW1lKSA9PiB7XG4gICAgLy8gUGxhY2Vob2xkZXIgZm9yIHRlbXBvcmFyeSBsb2NhdGlvbiB0byB3aGVyZSB0aGUgZmlsZSBpcyBkb3dubG9hZGVkXG4gICAgY29uc3QgdG1wRGlyID0gam9pbihob21lZGlyKCksICcuZGNkeCcsICd0bXAnKTtcbiAgICAvLyBNYWtlIHN1cmUgdGhlIHRlbXBvcmFyeSBmb2xkZXIgZXhpc3RzXG4gICAgbWtkaXJTeW5jKHRtcERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgLy8gSW5pdGlhdGUgdGhlIGRvd25sb2FkXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcyh7XG4gICAgICAgIHVybCxcbiAgICAgICAgbWV0aG9kOiAnZ2V0JyxcbiAgICAgICAgcmVzcG9uc2VUeXBlOiAnc3RyZWFtJ1xuICAgIH0pO1xuICAgIGNvbnN0IFVSSSA9IG5ldyBVUkwodXJsKTtcbiAgICBjb25zdCBsYXN0UGF0aFNlZ21lbnQgPSBVUkkucGF0aG5hbWUuc3BsaXQoJy8nKS5wb3AoKTtcbiAgICBuYW1lID0gbmFtZSB8fCAobGFzdFBhdGhTZWdtZW50Py50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCcuamFyJykgfHwgbGFzdFBhdGhTZWdtZW50Py50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCcub2JyJykpXG4gICAgICAgID8gbGFzdFBhdGhTZWdtZW50XG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIC8vIFRyeSB0byBmaW5kIHRoZSBmaWxlbmFtZSBmcm9tIHRoZSBoZWFkZXJzIG9yIHRoZSBhbHRlcm5hdGl2ZSBuYW1lIChpZiBwcm92aWRlZClcbiAgICBjb25zdCBkaXNwb3NpdGlvbiA9IHJlc3BvbnNlLmhlYWRlcnNbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXSA/IHBhcnNlKHJlc3BvbnNlLmhlYWRlcnNbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXSkgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgZmlsZW5hbWUgPSBkaXNwb3NpdGlvbj8ucGFyYW1ldGVycz8uZmlsZW5hbWUgfHwgbmFtZTtcbiAgICBpZiAoIWZpbGVuYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGRldGVybWluZSB0aGUgZmlsZW5hbWUgYmFzZWQgb24gdGhlIFVSTCwgYW5kIG5vIGFsdGVybmF0aXZlIG5hbWUgd2FzIHByb3ZpZGVkJyk7XG4gICAgfVxuICAgIC8vIFBsYWNlaG9sZGVyIGZvciB0ZW1wb3JhcnkgZmlsZSBkb3dubG9hZCBsb2NhdGlvblxuICAgIGNvbnN0IHRtcEZpbGUgPSBqb2luKHRtcERpciwgZmlsZW5hbWUpO1xuICAgIC8vIENyZWF0ZSB0aGUgd3JpdGUgc3RyZWFtIHRvIHRoZSB0ZW1wb3JhcnkgZmlsZSBsb2NhdGlvblxuICAgIGNvbnN0IHdyaXRlciA9IGNyZWF0ZVdyaXRlU3RyZWFtKHRtcEZpbGUpO1xuICAgIC8vIEdldCB0aGUgZGF0YSBmcm9tIHRoZSBkb3dubG9hZCBhbmQgd3JpdGUgaXQgdG8gdGhlIHRlbXBvcmFyeSBmaWxlXG4gICAgcmVzcG9uc2UuZGF0YS5waXBlKHdyaXRlcik7XG4gICAgLy8gV2FpdCBmb3IgdGhlIGRvd25sb2FkIHRvIGZpbmlzaCBjb21wbGV0ZWx5XG4gICAgYXdhaXQgZmluaXNoZWQod3JpdGVyKTtcbiAgICAvLyBSZXR1cm4gdGhlIGxvY2F0aW9uIHRvIHRoZSBkb3dubG9hZGVkIGZpbGVcbiAgICByZXR1cm4gdG1wRmlsZTtcbn07XG4iLCJpbXBvcnQgeyBleGVjIH0gZnJvbSAnY2hpbGRfcHJvY2Vzcyc7XG5leHBvcnQgY29uc3QgZ2V0UHJvcGVydHlGcm9tUG9tRmlsZSA9IGFzeW5jIChwYXRoLCBleHByZXNzaW9uLCBhY3RpdmF0ZVByb2ZpbGVzKSA9PiB7XG4gICAgY29uc3QgZXh0cmFBcmdzID0gW107XG4gICAgaWYgKGFjdGl2YXRlUHJvZmlsZXMpIHtcbiAgICAgICAgZXh0cmFBcmdzLnB1c2goYC1QICR7YWN0aXZhdGVQcm9maWxlc31gKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4gZXhlYyhgbXZuIC1mICR7cGF0aH0gJHtleHRyYUFyZ3Muam9pbignICcpfSBoZWxwOmV2YWx1YXRlIC1EZXhwcmVzc2lvbj0ke2V4cHJlc3Npb259IC1xIC1EZm9yY2VTdGRvdXRgLCAoZXJyLCBzdGRvdXQpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgcmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbGluZXMgPSBzdGRvdXQuc3BsaXQoJ1xcbicpO1xuICAgICAgICAgICAgcmVzb2x2ZShsaW5lcy5wb3AoKSk7XG4gICAgICAgIH1cbiAgICB9KSk7XG59O1xuIiwiaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmV4cG9ydCBjb25zdCBnZXRVcmxCeUFwcEtleSA9IGFzeW5jIChhcHBLZXkpID0+IHtcbiAgICBsZXQgcmVzdWx0ID0gYGh0dHBzOi8vbWFya2V0cGxhY2UuYXRsYXNzaWFuLmNvbS9kb3dubG9hZC9wbHVnaW5zLyR7YXBwS2V5fWA7XG4gICAgY29uc3QgeyBkYXRhOiBsaXN0aW5nIH0gPSBhd2FpdCBheGlvcy5nZXQoYGh0dHBzOi8vbWFya2V0cGxhY2UuYXRsYXNzaWFuLmNvbS9yZXN0LzIvYWRkb25zLyR7YXBwS2V5fT9ob3N0aW5nPWRhdGFjZW50ZXImd2l0aFZlcnNpb249dHJ1ZWApLmNhdGNoKCgpID0+ICh7IGRhdGE6IG51bGwgfSkpO1xuICAgIGlmIChsaXN0aW5nKSB7XG4gICAgICAgIHJlc3VsdCA9IGxpc3RpbmcuX2VtYmVkZGVkPy52ZXJzaW9uPy5fZW1iZWRkZWQ/LmFydGlmYWN0Py5fbGlua3M/LmJpbmFyeT8uaHJlZiB8fCByZXN1bHQ7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuIiwiaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IGV4aXN0c1N5bmMsIHJtU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IGdsb2IgfSBmcm9tICdnbG9iJztcbmltcG9ydCB7IGhvbWVkaXIgfSBmcm9tICdvcyc7XG5pbXBvcnQgeyBiYXNlbmFtZSwgam9pbiwgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgT3BlbiB9IGZyb20gJ3VuemlwcGVyJztcbmltcG9ydCB7IGRvd25sb2FkRmlsZSB9IGZyb20gJy4vZG93bmxvYWRGaWxlJztcbmltcG9ydCB7IGdldFByb3BlcnR5RnJvbVBvbUZpbGUgfSBmcm9tICcuL2dldFByb3BlcnR5RnJvbVBvbUZpbGUnO1xuaW1wb3J0IHsgZ2V0VXJsQnlBcHBLZXkgfSBmcm9tICcuL2dldFVybEJ5QXBwS2V5JztcbmV4cG9ydCBjb25zdCBnZW5lcmF0ZURlcGVuZGVuY3lUcmVlID0gYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAvLyBQbGFjZWhvbGRlciBmb3IgdGVtcG9yYXJ5IGRpcmVjdG9yeVxuICAgIGNvbnN0IHRtcERpciA9IGpvaW4oaG9tZWRpcigpLCAnLmRjZHgnLCAndG1wJyk7XG4gICAgLy8gUGxhY2Vob2xkZXIgZm9yIHRoZSBwYXRoIHRvIHRoZSBKQVIgZmlsZVxuICAgIGxldCBmaWxlID0gb3B0aW9ucy5hcmNoaXZlO1xuICAgIC8vIENoZWNrIGlmIHdlIG5lZWQgdG8gZG93bmxvYWQgdGhlIGZpbGUgYmFzZWQgb24gdGhlIGFwcEtleVxuICAgIC8vIElmIGJvdGggYXJjaGl2ZSBhbmQgYXBwS2V5IHdlcmUgcHJvdmlkZWQsIHdlIHdpbGwgdXNlIHRoZSBhcmNoaXZlXG4gICAgaWYgKCFvcHRpb25zLmFyY2hpdmUgJiYgb3B0aW9ucy5hcHBLZXkpIHtcbiAgICAgICAgLy8gR2V0IHRoZSBkb3dubG9hZCBVUkwgYmFzZWQgb24gdGhlIGFwcEtleVxuICAgICAgICBjb25zdCB1cmwgPSBhd2FpdCBnZXRVcmxCeUFwcEtleShvcHRpb25zLmFwcEtleSk7XG4gICAgICAgIC8vIERvd25sb2FkIHRoZSBmaWxlIGZyb20gTVBBQ1xuICAgICAgICBjb25zb2xlLmxvZygnRG93bmxvYWRpbmcgYXJjaGl2ZSBmcm9tIHRoZSBBdGxhc3NpYW4gTWFya2V0cGxhY2UnKTtcbiAgICAgICAgZmlsZSA9IGF3YWl0IGRvd25sb2FkRmlsZSh1cmwpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyBQbGFjZWhvbGRlciBmb3IgYXJjaGl2ZSBkaXJlY3RvcnlcbiAgICAgICAgY29uc3QgYXJjaGl2ZURpciA9IGpvaW4odG1wRGlyLCBgLiR7b3B0aW9ucy5ncm91cElkfS4ke29wdGlvbnMuYXJ0aWZhY3RJZH1gKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgYSB2YWxpZCBwYXRoIHRvIHRoZSBKQVIgZmlsZVxuICAgICAgICAgICAgaWYgKCFmaWxlIHx8ICFleGlzdHNTeW5jKHJlc29sdmUoZmlsZSkpKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFVuYWJsZSB0byBsb2NhdGUgdGhlIGFyY2hpdmUgaW4gcGF0aCAke2ZpbGV9YCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gRXh0cmFjdCB0aGUgZmlsZSB0byBhIHRlbXBvcmFyeSBkaXJlY3RvcnlcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBFeHRyYWN0aW5nIGFyY2hpdmUgdG8gYSB0ZW1wb3JhcnkgbG9jYXRpb24gKCR7YXJjaGl2ZURpcn0pYCk7XG4gICAgICAgICAgICBjb25zdCBhcmNoaXZlID0gYXdhaXQgT3Blbi5maWxlKGZpbGUpO1xuICAgICAgICAgICAgYXdhaXQgYXJjaGl2ZS5leHRyYWN0KHsgcGF0aDogYXJjaGl2ZURpciB9KTtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlIGFyZSBkZWFsaW5nIHdpdGggYW4gT0JSIGZpbGVcbiAgICAgICAgICAgIGlmIChleGlzdHNTeW5jKGpvaW4oYXJjaGl2ZURpciwgJ29ici54bWwnKSkpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnVGhlIGFyY2hpdmUgaXMgYW4gT1NHaSBCdW5kbGUgUmVwb3NpdG9yeSAoT0JSKScpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdTZWFyY2hpbmcgZm9yIHRoZSBtYWluIGFydGlmYWN0Jyk7XG4gICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBtYWluIEpBUiBmaWxlICh3aGljaCBpcyBsb2NhdGVkIGluIHRoZSByb290IGRpcmVjdG9yeSlcbiAgICAgICAgICAgICAgICBjb25zdCBbcmVsYXRpdmVQYXRoVG9KYXJdID0gYXdhaXQgZ2xvYihgKi5qYXJgLCB7IGN3ZDogYXJjaGl2ZURpciB9KTtcbiAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgd2UgYWN0dWFsbHkgZm91bmQgdGhlIG1haW4gamFyXG4gICAgICAgICAgICAgICAgaWYgKCFyZWxhdGl2ZVBhdGhUb0phcikge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRmFpbGVkIHRvIGxvY2F0ZSB0aGUgbWFpbiBKQVIgZmlsZSBpbiB0aGUgYXJjaGl2ZScpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgRm91bmQgdGhlIG1haW4gYXJ0aWZhY3QgKCR7cmVsYXRpdmVQYXRoVG9KYXJ9KWApO1xuICAgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGZ1bGwgcGF0aCB0byB0aGUgSkFSIGZpbGVcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgamFyRmlsZSA9IGpvaW4oYXJjaGl2ZURpciwgcmVsYXRpdmVQYXRoVG9KYXIpO1xuICAgICAgICAgICAgICAgICAgICAvLyBQbGFjZWhvbGRlciBkaXJlY3Ryb3kgaW4gd2hpY2ggd2Ugd2lsbCBiZSBleHRyYWN0aW5nIHRoZSBtYWluIEpBUlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBqYXJEaXIgPSBqb2luKGFyY2hpdmVEaXIsIGJhc2VuYW1lKGphckZpbGUsICcuamFyJykpO1xuICAgICAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IHRoZSBtYWluIEpBUiBmaWxlIGludG8gdGhlIHBsYWNlaG9sZGVyIGRpcmVjdG9yeVxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgRXh0cmFjdGluZyB0aGUgbWFpbiBhcnRpZmFjdCB0byBhIHRlbXBvcmFyeSBsb2NhdGlvbiAoJHtqYXJEaXJ9KWApO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhcmNoaXZlID0gYXdhaXQgT3Blbi5maWxlKGphckZpbGUpO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBhcmNoaXZlLmV4dHJhY3QoeyBwYXRoOiBqYXJEaXIgfSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIE5vdyB0cnkgdG8gZmluZCB0aGUgUE9NIGZpbGUgZm9yIHRoZSBtYWluIEpBUlxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgU2VhcmNoaW5nIGZvciBQT00gZmlsZSBpbiB0aGUgbWFpbiBhcnRpZmFjdGApO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwb21GaWxlcyA9IGF3YWl0IGdsb2IoYE1FVEEtSU5GL21hdmVuLyoqL3BvbS54bWxgLCB7IGN3ZDogamFyRGlyIH0pO1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVsYXRpdmVQYXRoVG9QT00gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IHBhdGggb2YgcG9tRmlsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWxhdGl2ZVBhdGhUb1BPTSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9tRmlsZSA9IGpvaW4oamFyRGlyLCBwYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwSWQgPSBhd2FpdCBnZXRQcm9wZXJ0eUZyb21Qb21GaWxlKHBvbUZpbGUsICdwcm9qZWN0Lmdyb3VwSWQnLCBvcHRpb25zLmFjdGl2YXRlUHJvZmlsZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJ0aWZhY3RJZCA9IGF3YWl0IGdldFByb3BlcnR5RnJvbVBvbUZpbGUocG9tRmlsZSwgJ3Byb2plY3QuYXJ0aWZhY3RJZCcsIG9wdGlvbnMuYWN0aXZhdGVQcm9maWxlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5ncm91cElkID09PSBncm91cElkICYmIG9wdGlvbnMuYXJ0aWZhY3RJZCA9PT0gYXJ0aWZhY3RJZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aFRvUE9NID0gcGF0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBmb3VuZCB0aGUgUE9NIGZpbGVcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWxhdGl2ZVBhdGhUb1BPTSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0ZhaWxlZCB0byBsb2NhdGUgdGhlIFBPTSBmaWxlIGluIHRoZSBtYWluIGFydGlmYWN0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgRm91bmQgdGhlIFBPTSBmaWxlYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGZ1bGwgcGF0aCB0byB0aGUgUE9NIGZpbGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvbUZpbGUgPSBqb2luKGphckRpciwgcmVsYXRpdmVQYXRoVG9QT00pO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXNrIE1hdmVuIHRvIGdlbmVyYXRlIHRoZSBkZXBkZW5jeSB0cmVlIGdyYXBoIVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0Fza2luZyBBcGFjaGUgTWF2ZW4gdG8gZ2VuZXJhdGUgdGhlIGRlcGVuZGVuY3kgZ3JhcGgnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXZlbiA9IHNwYXduKCdtdm4nLCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMuYWN0aXZhdGVQcm9maWxlcyA/IFsnLVAnLCBvcHRpb25zLmFjdGl2YXRlUHJvZmlsZXNdIDogW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXBlbmRlbmN5OnRyZWUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWYnLCBwb21GaWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLURvdXRwdXRUeXBlPWRvdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAtRG91dHB1dEZpbGU9JHtvcHRpb25zLm91dHB1dEZpbGV9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLCB7IHN0ZGlvOiAnaW5oZXJpdCcgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF2ZW4ub24oJ2V4aXQnLCAoY29kZSkgPT4gKGNvZGUgPT09IDApID8gcmVzb2x2ZSgpIDogcmVqZWN0KG5ldyBFcnJvcihgQXBhY2hlIE1hdmVuIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfWApKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdGaW5pc2hlZCBnZW5lcmF0aW5nIHRoZSBkZXBlbmRlbmN5IGdyYXBoJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhY3R1YWxseSBhbHJlYWR5IHRoZSBtYWluIEpBUiBmaWxlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBOb3cgdHJ5IHRvIGZpbmQgdGhlIFBPTSBmaWxlIGZvciB0aGUgbWFpbiBKQVJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgU2VhcmNoaW5nIGZvciBQT00gZmlsZSBpbiB0aGUgbWFpbiBhcnRpZmFjdGApO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvbUZpbGVzID0gYXdhaXQgZ2xvYihgTUVUQS1JTkYvbWF2ZW4vKiovcG9tLnhtbGAsIHsgY3dkOiBhcmNoaXZlRGlyIH0pO1xuICAgICAgICAgICAgICAgIGxldCByZWxhdGl2ZVBhdGhUb1BPTSA9IG51bGw7XG4gICAgICAgICAgICAgICAgZm9yIGF3YWl0IChjb25zdCBwYXRoIG9mIHBvbUZpbGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWxhdGl2ZVBhdGhUb1BPTSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9tRmlsZSA9IGpvaW4oYXJjaGl2ZURpciwgcGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwSWQgPSBhd2FpdCBnZXRQcm9wZXJ0eUZyb21Qb21GaWxlKHBvbUZpbGUsICdwcm9qZWN0Lmdyb3VwSWQnKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJ0aWZhY3RJZCA9IGF3YWl0IGdldFByb3BlcnR5RnJvbVBvbUZpbGUocG9tRmlsZSwgJ3Byb2plY3QuYXJ0aWZhY3RJZCcpO1xuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5ncm91cElkID09PSBncm91cElkICYmIG9wdGlvbnMuYXJ0aWZhY3RJZCA9PT0gYXJ0aWZhY3RJZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoVG9QT00gPSBwYXRoO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGZvdW5kIHRoZSBQT00gZmlsZVxuICAgICAgICAgICAgICAgIGlmICghcmVsYXRpdmVQYXRoVG9QT00pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0ZhaWxlZCB0byBsb2NhdGUgdGhlIFBPTSBmaWxlIGluIHRoZSBhcnRpZmFjdCcpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgRm91bmQgdGhlIFBPTSBmaWxlYCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgZnVsbCBwYXRoIHRvIHRoZSBQT00gZmlsZVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwb21GaWxlID0gam9pbihhcmNoaXZlRGlyLCByZWxhdGl2ZVBhdGhUb1BPTSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIEFzayBNYXZlbiB0byBnZW5lcmF0ZSB0aGUgZGVwZGVuY3kgdHJlZSBncmFwaCFcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0Fza2luZyBBcGFjaGUgTWF2ZW4gdG8gZ2VuZXJhdGUgdGhlIGRlcGVuZGVuY3kgZ3JhcGgnKTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF2ZW4gPSBzcGF3bignbXZuJywgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMuYWN0aXZhdGVQcm9maWxlcyA/IFsnLVAnLCBvcHRpb25zLmFjdGl2YXRlUHJvZmlsZXNdIDogW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlcGVuZGVuY3k6dHJlZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1mJywgcG9tRmlsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLURvdXRwdXRUeXBlPWRvdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYC1Eb3V0cHV0RmlsZT0ke29wdGlvbnMub3V0cHV0RmlsZX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgXSwgeyBzdGRpbzogJ2luaGVyaXQnIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF2ZW4ub24oJ2V4aXQnLCAoY29kZSkgPT4gKGNvZGUgPT09IDApID8gcmVzb2x2ZSgpIDogcmVqZWN0KG5ldyBFcnJvcihgQXBhY2hlIE1hdmVuIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfWApKSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRmluaXNoZWQgZ2VuZXJhdGluZyB0aGUgZGVwZW5kZW5jeSBncmFwaCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHJtU3luYyhhcmNoaXZlRGlyLCB7IGZvcmNlOiB0cnVlLCByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIC8vIE9ubHkgcmVtb3ZlIHRoZSBmaWxlIGlmIHdlIGRvd25sb2FkZWQgaXQgZnJvbSBNUEFDXG4gICAgICAgIGlmICghb3B0aW9ucy5hcmNoaXZlICYmIGZpbGUpIHtcbiAgICAgICAgICAgIHJtU3luYyhmaWxlLCB7IGZvcmNlOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgfVxufTtcbiIsImV4cG9ydCBjb25zdCBjYXBpdGFsaXplID0gKHZhbHVlKSA9PiB2YWx1ZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHZhbHVlLnNsaWNlKDEpO1xuIiwiZXhwb3J0IGNvbnN0IGdldFJ1bkZvclN0YWdlID0gKHN0YWdlKSA9PiB7XG4gICAgc3dpdGNoIChzdGFnZSkge1xuICAgICAgICBjYXNlICdiYXNlbGluZSc6IHJldHVybiAxO1xuICAgICAgICBjYXNlICdyZWdyZXNzaW9uJzogcmV0dXJuIDI7XG4gICAgICAgIGNhc2UgJ29uZS1ub2RlJzogcmV0dXJuIDM7XG4gICAgICAgIGNhc2UgJ3R3by1ub2RlJzogcmV0dXJuIDQ7XG4gICAgICAgIGNhc2UgJ2ZvdXItbm9kZSc6IHJldHVybiA1O1xuICAgIH1cbn07XG4iLCJpbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBjYXBpdGFsaXplIH0gZnJvbSAnLi4vaGVscGVycy9jYXBpdGFsaXplJztcbmltcG9ydCB7IGdldFJ1bkZvclN0YWdlIH0gZnJvbSAnLi9oZWxwZXJzL2dldFJ1bkZvclN0YWdlJztcbmNvbnN0IHRvTnVtYmVyID0gKHN0YWdlKSA9PiB7XG4gICAgc3dpdGNoIChzdGFnZSkge1xuICAgICAgICBjYXNlICdvbmUtbm9kZSc6IHJldHVybiAndGhpcmQnO1xuICAgICAgICBjYXNlICd0d28tbm9kZSc6IHJldHVybiAnZm91cnRoJztcbiAgICAgICAgY2FzZSAnZm91ci1ub2RlJzogcmV0dXJuICdmaWZ0aCc7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBlbXB0eUxpbmUgPSAoKSA9PiBjb25zb2xlLmxvZygn4oCLJyk7XG5leHBvcnQgY29uc3QgZ2VuZXJpYyA9IHtcbiAgICBoZWFkZXI6IGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgX19fXyAgICAgIF8gICAgICAgICAgX19fX18gICAgICAgICBfICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIFxcXFwgX19ffCB8XyBfX18gICB8ICAgICB8X19fIF9fX3wgfF8gX19fIF9fXyAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB8ICB8IC4nfCAgX3wgLid8ICB8ICAgLS18IC1ffCAgIHwgIF98IC1ffCAgX3wgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICB8X19fXy98X18sfF98IHxfXyx8ICB8X19fX198X19ffF98X3xffCB8X19ffF98ICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgX19fX18gICAgICAgICAgICBfX19fXyAgICAgICAgIF9fXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX19fXyAgICAgICAgIF8gXyAgIF8gXyAgIFxuICB8ICBfICB8X19fIF9fXyAgIHwgIF8gIHxfX18gX19ffCAgX3xfX18gX19fIF9fX19fIF9fXyBfX18gX19fIF9fXyAgIHxfICAgX3xfX18gX19ffCB8IHxffF98IHxfIFxuICB8ICAgICB8IC4gfCAuIHwgIHwgICBfX3wgLV98ICBffCAgX3wgLiB8ICBffCAgICAgfCAuJ3wgICB8ICBffCAtX3wgICAgfCB8IHwgLiB8IC4gfCB8ICdffCB8ICBffFxuICB8X198X198ICBffCAgX3wgIHxfX3wgIHxfX198X3wgfF98IHxfX198X3wgfF98X3xffF9fLHxffF98X19ffF9fX3wgICAgfF98IHxfX198X19ffF98XyxffF98X3wgIFxuICAgICAgICB8X3wgfF98ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuXG4gIFdlbGNvbWUgdG8gdGhlIGF1dG9tYXRlZCBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCAoRENBUFQpLlxuICBUaGlzIHdpbGwgZ3VpZGUgeW91IHRocm91Z2ggYWxsIHRoZSBzdGVwcyB0byBwcm9kdWNlIHRoZSByZXF1aXJlZCBwZXJmb3JtYW5jZSB0ZXN0aW5nIHJlc3VsdHNcbiAgZm9yIHlvdXIgKGFubnVhbCkgRGF0YSBDZW50ZXIgYXBwcm92YWwuXG5gXG59O1xuZXhwb3J0IGNvbnN0IGluaXQgPSB7XG4gICAgaGVhZGVyOiAocHJvZHVjdCkgPT4gYFxuICBXZSB3aWxsIG5vdyBmb2xsb3cgYWxsIHRoZSBzdGVwcyBhcyBkb2N1bWVudGVkIGluIHRoZSBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCBVc2VyIEd1aWRlIEZvciAke2NhcGl0YWxpemUocHJvZHVjdCl9LlxuICBQbGVhc2UgY29uc3VsdCB0aGUgZG9jdW1lbnRhdGlvbiBwcmlvciB0byBzdGFydGluZyB0aGUgdGVzdCBydW46XG5cbiAgaHR0cHM6Ly9kZXZlbG9wZXIuYXRsYXNzaWFuLmNvbS9wbGF0Zm9ybS9tYXJrZXRwbGFjZS9kYy1hcHBzLXBlcmZvcm1hbmNlLXRvb2xraXQtdXNlci1ndWlkZS0ke3Byb2R1Y3R9L1xuXG4gIE9uY2UgeW91IHN0YXJ0IHRoZSB0ZXN0IHJ1biB3ZSB3aWxsIHByb3Zpc2lvbiB0aGUgZW52aXJvbm1lbnQgb24gQVdTLiBcbiAgSU1QT1JUQU5UOiBUaGlzIGNhbiBpbmN1ciBjb3N0cy5cbiAgXG4gIFlvdSBjYW4gc3RvcCB0aGlzIHByb2Nlc3MgYXQgYW55IHRpbWUgYnkgZXhpdGluZyB0aGlzIHByb2dyYW0uIEJlIHN1cmUgdG8gcnVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB0byByZXNldCBcbiAgdGhlIEFXUyBlbnZpcm9ubWVudCBhbmQgcHJldmVudCB1bmV4cGVjdGVkIGNvc3RzLlxuXG4gICQgZGNkeCBhcHQgdGVhcmRvd25cblxuICBZb3UgY2FuIGFsc28gcmVzdW1lL3Jlc3RhcnQgZXZlcnkgcGFydCBvZiB0aGUgdGVzdCBydW4gdXNpbmcgb25lIG9mIHRoZSBmb2xsb3dpbmcgY29tbWFuZHM6XG5cbiAgJCBkY2R4IGFwdCBpbml0IC0tcHJvZHVjdCAke3Byb2R1Y3R9XG4gICQgZGNkeCBhcHQgcHJvdmlzaW9uIC0tcHJvZHVjdCAke3Byb2R1Y3R9XG4gICQgZGNkeCBhcHQgcnVuMSAtLXByb2R1Y3QgJHtwcm9kdWN0fVxuICAkIGRjZHggYXB0IHJ1bjIgLS1wcm9kdWN0ICR7cHJvZHVjdH1cbiAgJCBkY2R4IGFwdCBydW4zIC0tcHJvZHVjdCAke3Byb2R1Y3R9XG4gICQgZGNkeCBhcHQgcnVuNCAtLXByb2R1Y3QgJHtwcm9kdWN0fVxuICAkIGRjZHggYXB0IHJ1bjUgLS1wcm9kdWN0ICR7cHJvZHVjdH1cblxuICBXZSB3aWxsIGNvbnRpbnVlIHdpdGggdGhlIGZvbGxvd2luZyBzdGVwczpcbiR7cHJvZHVjdCA9PT0gJ2ppcmEnID8gYFxuICAxLiAgUHJvdmlzaW9uIHRoZSBlbnZpcm9ubWVudFxuICAyLiAgUGVyZm9ybWFuY2UgcmVncmVzc2lvbiB3aXRob3V0IGFwcCBpbnN0YWxsZWQgKHJ1biAxKVxuICAzLiAgTHVjZW5lIEluZGV4IHRpbWluZyB0ZXN0IHdpdGggYXBwIGluc3RhbGxlZCAocnVuIDIpXG4gIDQuICBQZXJmb3JtYW5jZSByZWdyZXNzaW9uIHdpdGggYXBwIGluc3RhbGxlZCAocnVuIDIpXG4gIDUuICBTY2FsYWJpbGl0eSB0ZXN0aW5nIG9uIG9uZS1ub2RlIGNsdXN0ZXIgd2l0aCBhcHAtc3BlY2lmaWMgYWN0aW9ucyAocnVuIDMpXG4gIDYuICBTY2FsYWJpbGl0eSB0ZXN0aW5nIG9uIHR3by1ub2RlIGNsdXN0ZXIgd2l0aCBhcHAtc3BlY2lmaWMgYWN0aW9ucyAocnVuIDQpXG4gIDcuICBTY2FsYWJpbGl0eSB0ZXN0aW5nIG9uIGZvdXItbm9kZSBjbHVzdGVyIHdpdGggYXBwLXNwZWNpZmljIGFjdGlvbnMgKHJ1biA1KVxuICA4LiAgR2VuZXJhdGUgcmVwb3J0c1xuICA5LiAgVGVhcmRvd24gb2YgZW52aXJvbm1lbnRcbiAgMTAuIFNlY3VyaXR5IFNjYW5uZXIgZm9yIERhdGEgQ2VudGVyIGFwcHNcbmAgOiBgXG4gIDEuIFByb3Zpc2lvbiB0aGUgZW52aXJvbm1lbnRcbiAgMi4gUGVyZm9ybWFuY2UgcmVncmVzc2lvbiB3aXRob3V0IGFwcCBpbnN0YWxsZWQgKHJ1biAxKVxuICAzLiBQZXJmb3JtYW5jZSByZWdyZXNzaW9uIHdpdGggYXBwIGluc3RhbGxlZCAocnVuIDIpXG4gIDQuIFNjYWxhYmlsaXR5IHRlc3Rpbmcgb24gb25lLW5vZGUgY2x1c3RlciB3aXRoIGFwcC1zcGVjaWZpYyBhY3Rpb25zIChydW4gMylcbiAgNS4gU2NhbGFiaWxpdHkgdGVzdGluZyBvbiB0d28tbm9kZSBjbHVzdGVyIHdpdGggYXBwLXNwZWNpZmljIGFjdGlvbnMgKHJ1biA0KVxuICA2LiBTY2FsYWJpbGl0eSB0ZXN0aW5nIG9uIGZvdXItbm9kZSBjbHVzdGVyIHdpdGggYXBwLXNwZWNpZmljIGFjdGlvbnMgKHJ1biA1KVxuICA3LiBHZW5lcmF0ZSByZXBvcnRzXG4gIDguIFRlYXJkb3duIG9mIGVudmlyb25tZW50XG4gIDkuIFNlY3VyaXR5IFNjYW5uZXIgZm9yIERhdGEgQ2VudGVyIGFwcHNcbmB9YCxcbn07XG5leHBvcnQgY29uc3QgcHJvdmlzaW9uaW5nID0ge1xuICAgIGhlYWRlcjogYFxuICBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBcbiAgfCAgXyAgfCBfXyAgfCAgICAgfCAgfCAgfCAgICAgfCAgIF9ffCAgICAgfCAgICAgfCAgIHwgfCAgICAgfCAgIHwgfCAgIF9ffFxuICB8ICAgX198ICAgIC18ICB8ICB8ICB8ICB8LSAgIC18X18gICB8LSAgIC18ICB8ICB8IHwgfCB8LSAgIC18IHwgfCB8ICB8ICB8XG4gIHxfX3wgIHxfX3xfX3xfX19fX3xcXFxcX19fL3xfX19fX3xfX19fX3xfX19fX3xfX19fX3xffF9fX3xfX19fX3xffF9fX3xfX19fX3xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgV2Ugd2lsbCBub3cgc3RhcnQgcHJvdmlzaW9uaW5nIEFXUyB1c2luZyB0aGUgQXRsYXNzaWFuIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYWNlIFRvb2xraXQgKERDQVBUKSBUZXJyYWZvcm0gY29uZmlndXJhdGlvbi5cblxuICBJbiBvcmRlciB0byBkbyB0aGlzLCB3ZSBuZWVkIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246XG5cbiAgMS4gVGhlIGxvY2F0aW9uIG9mIHRoZSBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCBvbiB5b3VyIGRpc2tcbiAgMi4gQVdTIGNyZWRlbnRpYWxzXG4gIDMuIFByb2R1Y3QgbGljZW5zZVxuYCxcbiAgICBhc2tGb3JBV1NDcmVkZW50aWFsczogKHByb2R1Y3QpID0+IGBcbiAgSW4gb3JkZXIgdG8gcHJvdmlzaW9uIHRoZSAke2NhcGl0YWxpemUocHJvZHVjdCl9IGNsdXN0ZXIsIHdlIG5lZWQgQWRtaW5pc3RyYXRvciBjcmVkZW50aWFscyBmb3IgQVdTLlxuICBQbGVhc2UgcmVmZXIgdG8gdGhlIERDQVBUIGRvY3VtZW50YXRpb24gdG8gZmluZCBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjcmVhdGUgdGhlIEFXUyBhY2Nlc3Mga2V5czpcblxuICBodHRwczovL2RldmVsb3Blci5hdGxhc3NpYW4uY29tL3BsYXRmb3JtL21hcmtldHBsYWNlL2RjLWFwcHMtcGVyZm9ybWFuY2UtdG9vbGtpdC11c2VyLWd1aWRlLSR7cHJvZHVjdH0vI3NldHVwLSR7cHJvZHVjdH0tZGF0YS1jZW50ZXItZGV2ZWxvcG1lbnQtZW52aXJvbm1lbnQtb24tazhzLVxuYCxcbiAgICBhc2tGb3JFbnZpcm9ubWVudDogYFxuICBXaGVuIHByb3Zpc2lvbmluZyB0aGUgY2x1c3Rlciwgd2UgbmVlZCBhIHVuaXF1ZSBlbnZpcm9ubWVudCBuYW1lLlxuICBUaGlzIHdpbGwgYWxsb3cgeW91IHRvIGNyZWF0ZSBtdWx0aXBsZSBjbHVzdGVycyAoaS5lLiBmb3IgZGlmZmVyZW50IGhvc3QgcHJvZHVjdHMpIGFuZCB0byBpZGVudGlmeSB3aGljaCBjbHVzdGVyIHRvIHVzZSBkdXJpbmcgdGVzdGluZyAmIHRlYXJkb3duLlxuYCxcbiAgICBhc2tGb3JIb3N0TGljZW5zZTogYFxuICBUaGUgaG9zdCBwcm9kdWN0IHJlcXVpcmVzIGEgdmFsaWQgbGljZW5zZS5cblxuICBCeSBkZWZhdWx0IHdlIHVzZSB0aGUgNzJoIGRldmVsb3BlciBsaWNlbnNlIHByb3ZpZGVkIGJ5IEF0bGFzc2lhbi4gSWYgeW91IG5lZWQgYSBtb3JlIGV4dGVuc2l2ZSBsaWNlbnNlLFxuICB5b3UgY2FuIGdlbmVyYXRlIGFuIGV2YWx1YXRpb24gbGljZW5zZSBmcm9tIG15LmF0bGFzc2lhbi5jb20gb3IgYXNrIEF0bGFzc2lhbiBNYXJrZXRwbGFjZSBEZXZlbG9wZXIgU3VwcG9ydCBmb3IgYSB0ZXN0IGxpY2Vuc2UuXG5gLFxuICAgIGFza0ZvckFwcExpY2Vuc2U6IGBcblRoZSBhcHAgcmVxdWlyZXMgYSB2YWxpZCBsaWNlbnNlLlxuXG5CeSBkZWZhdWx0IHdlIHVzZSB0aGUgMyBob3VyIHRpbWVib21iIGxpY2Vuc2UgcHJvdmlkZWQgYnkgQXRsYXNzaWFuLiBJZiB5b3UgbmVlZCBhIG1vcmUgZXh0ZW5zaXZlIGxpY2Vuc2UsXG55b3UgY2FuIGdlbmVyYXRlIGFuIGV2YWx1YXRpb24gbGljZW5zZSBmcm9tIG15LmF0bGFzc2lhbi5jb20gb3IgYXNrIEF0bGFzc2lhbiBNYXJrZXRwbGFjZSBEZXZlbG9wZXIgU3VwcG9ydCBmb3IgYSB0ZXN0IGxpY2Vuc2UuXG5gLFxuICAgIHJlYWR5OiBgXG4gIFdlIGhhdmUgbm93IGdhdGhlcmVkIGFsbCB0aGUgaW5mb3JtYXRpb24gcmVxdWlyZWQgdG8gcHJvdmlzaW9uIHRoZSBjbHVzdGVyLlxuXG4gICEhIElNUE9SVEFOVCAhIVxuICBcbiAgV2Ugd2lsbCBiZSB3cml0aW5nIHRoZSBjb25maWd1cmF0aW9uIHRvIGRpc2suIFRoaXMgd2lsbCBvdmVyd3JpdGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbi5cbiAgUGxlYXNlIG5vdGUgdGhhdCBwcm92aXNpb25pbmcgdGhlIGVudmlyb25tZW50IHdpbGwgaW5jdXIgQVdTIHVzYWdlIGNvc3RzLlxuYCxcbiAgICBhd3NDcmVkZW50aWFsc1BlcnNpc3RlZDogJ+KclCBBV1MgY3JlZGVudGlhbHMgd3JpdHRlbiB0byBhcHAvdXRpbC9rOHMvYXdzX2VudnMnLFxuICAgIHRlcnJhZm9ybUNvbmZpZ3VyYXRpb25QZXJzaXN0ZWQ6IGDinJQgVGVycmFmb3JtIGNvbmZpZ3VyYXRpb24gd3JpdHRlbiB0byBhcHAvdXRpbC9rOHMvZGNhcHQudGZ2YXJzYFxufTtcbmV4cG9ydCBjb25zdCBSdW4xID0ge1xuICAgIGhlYWRlcjogKCkgPT4gYFxuICBfX19fXyBfX19fXyBfX19fXyAgICBfX18gICBcbiAgfCBfXyAgfCAgfCAgfCAgIHwgfCAgfF8gIHwgIFxuICB8ICAgIC18ICB8ICB8IHwgfCB8ICAgX3wgfF8gXG4gIHxfX3xfX3xfX19fX3xffF9fX3wgIHxfX19fX3xcblxuICBXZSB3aWxsIG5vdyBzdGFydCB0aGUgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiB0ZXN0aW5nIHdpdGhvdXQgYXBwIGluc3RhbGxlZCAocnVuIDEpXG4gIFRoaXMgd2lsbCBwcm9kdWNlIHRoZSBwZXJmb3JtYW5jZSBiYXNlbGluZSByZXN1bHRzLlxuXG4gIEl0IGlzIGltcG9ydGFudCB0aGF0IHlvdSBhcmUgcnVubmluZyB0aGUgYmFzZWxpbmUgdGVzdCBvbiB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLlxuICBZb3UgY2FuIGdldCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZyb20gdGhlIEFQVCBzb3VyY2VzOlxuXG4gIGh0dHBzOi8vZ2l0aHViLmNvbS9hdGxhc3NpYW4vZGMtYXBwLXBlcmZvcm1hbmNlLXRvb2xraXRcbmAsXG4gICAgcmVhZHlGb3JQcm92aXNpb25pbmc6IGBcbkluIG9yZGVyIHRvIGJlIGFibGUgdG8gc3RhcnQgdGhlIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gdGVzdCwgd2Ugd2lsbCBub3cgY29uZmlndXJlIHRoZSBEQyBjbHVzdGVyIG9uIEFXU1xuXG4hISBJTVBPUlRBTlQgISFcblxuV2Ugd2lsbCBiZSB3cml0aW5nIHRoZSBjb25maWd1cmF0aW9uIHRvIGRpc2suIFRoaXMgd2lsbCBvdmVyd3JpdGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbi5cblBsZWFzZSBub3RlIHRoYXQgcHJvdmlzaW9uaW5nIHRoZSBlbnZpcm9ubWVudCB3aWxsIGluY3VyIEFXUyB1c2FnZSBjb3N0cy5cbmAsXG4gICAgc3RhcnRUZXN0OiBgXG5XZSB3aWxsIG5vdyBzdGFydCB0aGUgUGVyZm9ybWFuY2UgUmVncmVzc2lvbiB0ZXN0XG5gLFxuICAgIHN1Y2Nlc3M6IGBcbuKclCBGaW5pc2hlZCB0aGUgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiB0ZXN0aW5nIHdpdGhvdXQgYXBwIGluc3RhbGxlZCAocnVuIDEpXG5gLFxuICAgIGZhaWx1cmU6IChzdGFnZSwgY3dkLCBwcm9kdWN0LCBlbnZpcm9ubWVudCwgcmVzdWx0c0Jhc2VEaXIsIHJlc3VsdHMpID0+IHtcbiAgICAgICAgbGV0IG91dHB1dCA9IGBcbiAg4pyUIEZpbmlzaGVkIHRoZSBwZXJmb3JtYW5jZSAke3N0YWdlfSB0ZXN0aW5nIHdpdGhvdXQgYXBwIGluc3RhbGxlZCAocnVuIDEpXG5cbiAgVW5mb3J0dW5hdGVseSwgdGhlIHRlc3QgcnVuIHdhcyBmaW5pc2hlZCB1bnN1Y2Nlc2Z1bC4gXG4gIFBsZWFzZSByZXZpZXcgdGhlIHRlc3QgcmVzdWx0cyBhbmQgYWRqdXN0IHRoZSBjb25maWd1cmF0aW9uIGlmIHJlcXVpcmVkLlxuYDtcbiAgICAgICAgT2JqZWN0LmVudHJpZXMocmVzdWx0cykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiBvdXRwdXQgKz0gYCAgJHtrZXl9OiAke3ZhbHVlfVxcbmApO1xuICAgICAgICBvdXRwdXQgKz0gYFxuICBGdWxsIHJlcG9ydCBjYW4gYmUgZm91bmQgaGVyZTpcbiAgJHtqb2luKHJlc3VsdHNCYXNlRGlyLCAncmVzdWx0c19zdW1tYXJ5LmxvZycpfVxuXG4gIFlvdSBjYW4gcmVzdGFydCB0aGUgcGVyZm9ybWFuY2UgdGVzdGluZyB1c2luZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6XG4gIFxuICAkIGRjZHggYXB0IHJ1bjEgLS1wcm9kdWN0ICR7cHJvZHVjdH0gLS1jd2QgJHtjd2R9IC0tZW52aXJvbm1lbnQgJHtlbnZpcm9ubWVudH1cbmA7XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBSdW4yID0ge1xuICAgIGhlYWRlcjogKHByb2R1Y3QpID0+IGBcbiAgX19fX18gX19fX18gX19fX18gICAgX19fIFxuICB8IF9fICB8ICB8ICB8ICAgfCB8ICB8XyAgfFxuICB8ICAgIC18ICB8ICB8IHwgfCB8ICB8ICBffFxuICB8X198X198X19fX198X3xfX198ICB8X19ffFxuICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgV2Ugd2lsbCBub3cgc3RhcnQgdGhlIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gdGVzdGluZyB3aXRoIGFwcCBpbnN0YWxsZWQgKHJ1biAyKVxuICBUaGlzIHdpbGwgYWxsb3cgdGhlIGdlbmVyYXRpb24gb2YgYSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHJlcG9ydC5cbiR7cHJvZHVjdCA9PT0gJ2ppcmEnID8gYFxuICBJbiBhZGRpdGlvbiwgYSBMdWNlbmUgSW5kZXggVGltaW5nIFRlc3QgaXMgYWxzbyBwYXJ0IG9mIHRoZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHRlc3RzLmAgOiAnJ31cbiAgVGhlIHNlY29uZCBydW4gY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBzdGVwczpcbiR7cHJvZHVjdCA9PT0gJ2ppcmEnID8gYFxuICAxLiBJbnN0YWxsIHRoZSBhcHAgaW50byB0aGUgY2x1c3RlclxuICAyLiBCZW5jaG1hcmsgdGhlIHJlLWluZGV4IHRpbWUgd2l0aCB5b3VyIGFwcCBpbnN0YWxsZWRcbiAgMy4gUGVyZm9ybWFuY2UgcmVzdWx0cyBnZW5lcmF0aW9uIHdpdGggdGhlIGFwcCBpbnN0YWxsZWRcbmAgOiBgXG4gIDEuIEluc3RhbGwgdGhlIGFwcCBpbnRvIHRoZSBjbHVzdGVyXG4gIDIuIFBlcmZvcm1hbmNlIHJlc3VsdHMgZ2VuZXJhdGlvbiB3aXRoIHRoZSBhcHAgaW5zdGFsbGVkXG5gfVxuICBJdCBpcyBpbXBvcnRhbnQgdGhhdCB5b3UgYXJlIHJ1bm5pbmcgdGhlIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gdGVzdCBvbiB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLlxuICBZb3UgY2FuIGdldCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZyb20gdGhlIEFQVCBzb3VyY2VzOlxuXG4gIGh0dHBzOi8vZ2l0aHViLmNvbS9hdGxhc3NpYW4vZGMtYXBwLXBlcmZvcm1hbmNlLXRvb2xraXRcbmAsXG4gICAgcmVhZHlGb3JQcm92aXNpb25pbmc6IGBcbkluIG9yZGVyIHRvIGJlIGFibGUgdG8gc3RhcnQgdGhlIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gdGVzdCwgd2Ugd2lsbCBub3cgY29uZmlndXJlIHRoZSBEQyBjbHVzdGVyIG9uIEFXU1xuXG4hISBJTVBPUlRBTlQgISFcblxuV2Ugd2lsbCBiZSB3cml0aW5nIHRoZSBjb25maWd1cmF0aW9uIHRvIGRpc2suIFRoaXMgd2lsbCBvdmVyd3JpdGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbi5cblBsZWFzZSBub3RlIHRoYXQgcHJvdmlzaW9uaW5nIHRoZSBlbnZpcm9ubWVudCB3aWxsIGluY3VyIEFXUyB1c2FnZSBjb3N0cy5cbmAsXG4gICAgc3RhcnRUZXN0OiBgXG4gIFdlIHdpbGwgbm93IHN0YXJ0IHRoZSBQZXJmb3JtYW5jZSBSZWdyZXNzaW9uIHRlc3RcbmAsXG4gICAgc3VjY2VzczogYFxu4pyUIEZpbmlzaGVkIHRoZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHRlc3Rpbmcgd2l0aCBhcHAgaW5zdGFsbGVkIChydW4gMilcbmAsXG4gICAgZmFpbHVyZTogKHN0YWdlLCBjd2QsIHByb2R1Y3QsIGVudmlyb25tZW50LCByZXN1bHRzQmFzZURpciwgcmVzdWx0cykgPT4ge1xuICAgICAgICBsZXQgb3V0cHV0ID0gYFxuICDinJQgRmluaXNoZWQgdGhlIHBlcmZvcm1hbmNlICR7c3RhZ2V9IHRlc3Rpbmcgd2l0aCBhcHAgaW5zdGFsbGVkIChydW4gMilcblxuICBVbmZvcnR1bmF0ZWx5LCB0aGUgdGVzdCBydW4gd2FzIGZpbmlzaGVkIHVuc3VjY2VzZnVsLiBcbiAgUGxlYXNlIHJldmlldyB0aGUgdGVzdCByZXN1bHRzIGFuZCBhZGp1c3QgdGhlIGNvbmZpZ3VyYXRpb24gaWYgcmVxdWlyZWQuXG5gO1xuICAgICAgICBPYmplY3QuZW50cmllcyhyZXN1bHRzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IG91dHB1dCArPSBgICAke2tleX06ICR7dmFsdWV9XFxuYCk7XG4gICAgICAgIG91dHB1dCArPSBgXG4gIEZ1bGwgcmVwb3J0IGNhbiBiZSBmb3VuZCBoZXJlOlxuICAke2pvaW4ocmVzdWx0c0Jhc2VEaXIsICdyZXN1bHRzX3N1bW1hcnkubG9nJyl9XG5cbiAgWW91IGNhbiByZXN0YXJ0IHRoZSBwZXJmb3JtYW5jZSB0ZXN0aW5nIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZDpcbiAgXG4gICQgZGNkeCBhcHQgcnVuMiAtLXByb2R1Y3QgJHtwcm9kdWN0fSAtLWN3ZCAke2N3ZH0gLS1lbnZpcm9ubWVudCAke2Vudmlyb25tZW50fVxuYDtcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IEx1Y2VuZVRpbWluZ1Rlc3QgPSB7XG4gICAgaGVhZGVyOiAoX3Byb2R1Y3QsIHN0YWdlKSA9PiBgXG4gIF9fICAgIF9fX19fIF9fX19fIF9fX19fIF9fX19fIF9fX19fIFxuICB8ICB8ICB8ICB8ICB8ICAgICB8ICAgX198ICAgfCB8ICAgX198XG4gIHwgIHxfX3wgIHwgIHwgICAtLXwgICBfX3wgfCB8IHwgICBfX3xcbiAgfF9fX19ffF9fX19ffF9fX19ffF9fX19ffF98X19ffF9fX19ffFxuICBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBcbiAgfF8gICBffCAgICAgfCAgICAgfCAgICAgfCAgIHwgfCAgIF9ffFxuICAgIHwgfCB8LSAgIC18IHwgfCB8LSAgIC18IHwgfCB8ICB8ICB8XG4gICAgfF98IHxfX19fX3xffF98X3xfX19fX3xffF9fX3xfX19fX3xcbiAgICAgIF9fX19fIF9fX19fIF9fX19fIF9fX19fICAgICAgICAgXG4gICAgICB8XyAgIF98ICAgX198ICAgX198XyAgIF98ICAgICAgICBcbiAgICAgICAgfCB8IHwgICBfX3xfXyAgIHwgfCB8ICAgICAgICAgIFxuICAgICAgICB8X3wgfF9fX19ffF9fX19ffCB8X3wgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgV2Ugd2lsbCBub3cgc3RhcnQgdGhlIEx1Y2VuZSBJbmRleCBUaW1pbmcgdGVzdCB3aXRoIGFwcCBpbnN0YWxsZWRcbiAgVGhpcyBpcyBwYXJ0IG9mIHRoZSBQZXJmb3JtYW5jZSAke3N0YWdlfSB0ZXN0IChydW4gMilcblxuICBBZnRlciB0aGUgcmUtaW5kZXggaXMgY29tcGxldGVkIGEgc2NyZWVuc2hvdCBpcyBjcmVhdGVkIHdoaWNoIGlzIHBhcnQgb2YgdGhlIHJlcXVpcmVkIHRlc3QgcmVzdWx0c1xuXG4gIEl0IGlzIGltcG9ydGFudCB0aGF0IHlvdSBhcmUgcnVubmluZyB0aGUgTHVjZW5lIGluZGV4IHRpbWluZyB0ZXN0IG9uIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uXG4gIFlvdSBjYW4gZ2V0IHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgQVBUIHNvdXJjZXM6XG5cbiAgaHR0cHM6Ly9naXRodWIuY29tL2F0bGFzc2lhbi9kYy1hcHAtcGVyZm9ybWFuY2UtdG9vbGtpdFxuYCxcbiAgICByZWFkeUZvclByb3Zpc2lvbmluZzogYFxuSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBzdGFydCB0aGUgTHVjZW5lIGluZGV4IHRpbWluZyB0ZXN0LCB3ZSB3aWxsIG5vdyBjb25maWd1cmUgdGhlIERDIGNsdXN0ZXIgb24gQVdTXG5cbiEhIElNUE9SVEFOVCAhIVxuXG5XZSB3aWxsIGJlIHdyaXRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gdG8gZGlzay4gVGhpcyB3aWxsIG92ZXJ3cml0ZSBleGlzdGluZyBjb25maWd1cmF0aW9uLlxuUGxlYXNlIG5vdGUgdGhhdCBwcm92aXNpb25pbmcgdGhlIGVudmlyb25tZW50IHdpbGwgaW5jdXIgQVdTIHVzYWdlIGNvc3RzLlxuYCxcbiAgICBzdGFydFRlc3Q6IGBcbiAgV2UgYXJlIHJlYWR5IHRvIHN0YXJ0IHRoZSBMdWNlbmUgSW5kZXggdGltaW5nIHRlc3RcbiAgT25jZSB0aGUgdGVzdCBpcyBmaW5pc2hlZCwgYSBicm93c2VyIHdpbmRvdyBpcyBvcGVuZWQgdG8gY2FwdHVyZSB0aGUgdGVzdCByZXN1bHRzLlxuXG4gICEhIElNUE9SVEFOVCAhIVxuXG4gIFRoaXMgbWF5IHRha2UgfjUwIG1pbnV0ZXMuIFBsZWFzZSBkbyBub3QgdGVybWluYXRlIHRoZSBwcm9ncmFtXG4gIERvIG5vdCBjbG9zZSB0aGUgYnJvd3NlciB3aW5kb3csIG9yIGVsc2UgdGhlIHRlc3Qgd2lsbCBmYWlsXG5gLFxuICAgIHN1Y2Nlc3M6IGBcbuKclCBGaW5pc2hlZCB0aGUgTHVjZW5lIEluZGV4IFRpbWluaWcgdGVzdCB3aXRoIGFwcCBpbnN0YWxsZWQgKHJ1biAyKVxuYCxcbiAgICBmYWlsdXJlOiAoX3N0YWdlLCBjd2QsIHByb2R1Y3QsIGVudmlyb25tZW50KSA9PiBgXG4gIOKclCBGaW5pc2hlZCB0aGUgTHVjZW5lIEluZGV4IFRpbWluZyB0ZXN0IHdpdGggYXBwIGluc3RhbGxlZCAocnVuIDIpXG5cbiAgVW5mb3J0dW5hdGVseSwgdGhlIHRlc3QgcnVuIHdhcyBmaW5pc2hlZCB1bnN1Y2Nlc2Z1bC4gXG4gIFBsZWFzZSByZXZpZXcgdGhlIHRlc3QgcmVzdWx0cyBhbmQgYWRqdXN0IHRoZSBjb25maWd1cmF0aW9uIGlmIHJlcXVpcmVkLlxuXG4gIFlvdSBjYW4gcmVzdGFydCB0aGUgTHVjZW5lIEluZGV4IFRpbWluZyB0ZXN0IHVzaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZDpcbiAgXG4gICQgZGNkeCBhcHQgcmVpbmRleCAtLXByb2R1Y3QgJHtwcm9kdWN0fSAtLWN3ZCAke2N3ZH0gLS1lbnZpcm9ubWVudCAke2Vudmlyb25tZW50fVxuYFxufTtcbmV4cG9ydCBjb25zdCBQZXJmb3JtYW5jZVJlcG9ydE1lc3NhZ2VzID0ge1xuICAgIGhlYWRlcjogYFxuICBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyAgIFxuICB8ICBfICB8ICAgX198IF9fICB8ICAgX198ICAgICB8IF9fICB8ICAgICB8ICBfICB8ICAgfCB8ICAgICB8ICAgX198ICBcbiAgfCAgIF9ffCAgIF9ffCAgICAtfCAgIF9ffCAgfCAgfCAgICAtfCB8IHwgfCAgICAgfCB8IHwgfCAgIC0tfCAgIF9ffCAgXG4gIHxfX3wgIHxfX19fX3xfX3xfX3xfX3wgIHxfX19fX3xfX3xfX3xffF98X3xfX3xfX3xffF9fX3xfX19fX3xfX19fX3wgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gICAgIFxuICAgICAgfCBfXyAgfCAgIF9ffCAgIF9ffCBfXyAgfCAgIF9ffCAgIF9ffCAgIF9ffCAgICAgfCAgICAgfCAgIHwgfCAgICBcbiAgICAgIHwgICAgLXwgICBfX3wgIHwgIHwgICAgLXwgICBfX3xfXyAgIHxfXyAgIHwtICAgLXwgIHwgIHwgfCB8IHwgICAgXG4gICAgICB8X198X198X19fX198X19fX198X198X198X19fX198X19fX198X19fX198X19fX198X19fX198X3xfX198ICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICB8IF9fICB8ICAgX198ICBfICB8ICAgICB8IF9fICB8XyAgIF98ICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgfCAgICAtfCAgIF9ffCAgIF9ffCAgfCAgfCAgICAtfCB8IHwgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIHxfX3xfX3xfX19fX3xfX3wgIHxfX19fX3xfX3xfX3wgfF98ICAgICAgICAgICAgICAgICAgICAgIFxuXG5cbiAgV2UgYXJlIGdvaW5nIHRvIGdlbmVyYXRlIHRoZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHJlcG9ydFxuICBUaGUgcmVwb3J0IGNvbnN0aXN0cyBvZiBhIENTViBhbmQgUE5HIGZpbGUgdGhhdCBhcmUgcmVxdWlyZWQgZm9yIFxuICB0aGUgKGFubnVhbCkgRGF0YSBDZW50ZXIgYXBwIHJldmlld1xuYFxufTtcbmV4cG9ydCBjb25zdCBTY2FsYWJpbGl0eVRlc3RNZXNzYWdlcyA9IHtcbiAgICBoZWFkZXI6IChwcm9kdWN0LCBzdGFnZSkgPT4gYFxuJHtzdGFnZSA9PT0gJ29uZS1ub2RlJyA/IGBcbiAgX19fX18gX19fX18gX19fX18gICAgX19fIFxuICB8IF9fICB8ICB8ICB8ICAgfCB8ICB8XyAgfFxuICB8ICAgIC18ICB8ICB8IHwgfCB8ICB8XyAgfFxuICB8X198X198X19fX198X3xfX198ICB8X19ffFxuYCA6IHN0YWdlID09PSAndHdvLW5vZGUnID8gYFxuICBfX19fXyBfX19fXyBfX19fXyAgICBfX18gXG4gIHwgX18gIHwgIHwgIHwgICB8IHwgIHwgfCB8XG4gIHwgICAgLXwgIHwgIHwgfCB8IHwgIHxfICB8XG4gIHxfX3xfX3xfX19fX3xffF9fX3wgICAgfF98ICAgICAgICAgICAgICAgICAgICAgICAgICBcbmAgOiBgXG4gIF9fX19fIF9fX19fIF9fX19fICAgIF9fXyBcbiAgfCBfXyAgfCAgfCAgfCAgIHwgfCAgfCAgX3xcbiAgfCAgICAtfCAgfCAgfCB8IHwgfCAgfF8gIHxcbiAgfF9ffF9ffF9fX19ffF98X19ffCAgfF9fX3wgICAgICAgICAgICAgICAgICAgICAgICAgIFxuYH1cblxuICBXZSB3aWxsIG5vdyBzdGFydCB0aGUgc2NhbGFiaWxpdHkgYmVuY2htYXJrIGZvciAke3N0YWdlfSAke2NhcGl0YWxpemUocHJvZHVjdCl9IERDIGNsdXN0ZXIgd2l0aCBhcHAtc3BlY2lmaWMgYWN0aW9uczogKHJ1biAke2dldFJ1bkZvclN0YWdlKHN0YWdlKX0pXG5cbiAgVGhlICR7dG9OdW1iZXIoc3RhZ2UpfSBydW4gY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBzdGVwczpcbiAgMS4gQWRqdXN0IHRoZSBlbnZpcm9ubWVudCB0byBhICR7c3RhZ2V9IGNsdXN0ZXJcbiAgMS4gSW5zdGFsbCB0aGUgYXBwIGludG8gdGhlIGNsdXN0ZXJcbiAgMy4gU2NhbGFiaWxpdHkgYmVuY2htYXJrIHRlc3Rpbmcgd2l0aCB0aGUgYXBwIGluc3RhbGxlZFxuXG4gIEl0IGlzIGltcG9ydGFudCB0aGF0IHlvdSBhcmUgcnVubmluZyB0aGUgc2NhbGFiaWxpdHkgYmVuY2htYXJrIHRlc3Qgb24gYSBEQ0FQVCB2ZXJzaW9uIHRoYXQgaGFzIGFwcC1zcGVjaWZpYyBhY3Rpb25zXG4gIE1vcmUgaW5mb3JtYXRpb24gb24gZGV2ZWxvcGluZyBhcHAtc3BlY2lmaWMgYWN0aW9ucyBjYW4gYmUgZm91bmQgaGVyZTpcblxuJHtwcm9kdWN0ID09PSAnamlyYScgP1xuICAgICAgICBgICBodHRwczovL2RldmVsb3Blci5hdGxhc3NpYW4uY29tL3BsYXRmb3JtL21hcmtldHBsYWNlL2RjLWFwcHMtcGVyZm9ybWFuY2UtdG9vbGtpdC11c2VyLWd1aWRlLWppcmEvIzMtLWRldmVsb3AtYW5kLXRlc3QtYXBwLXNwZWNpZmljLWFjdGlvbi1sb2NhbGx5YFxuICAgICAgICA6IHByb2R1Y3QgPT09ICdjb25mbHVlbmNlJyA/XG4gICAgICAgICAgICBgICBodHRwczovL2RldmVsb3Blci5hdGxhc3NpYW4uY29tL3BsYXRmb3JtL21hcmtldHBsYWNlL2RjLWFwcHMtcGVyZm9ybWFuY2UtdG9vbGtpdC11c2VyLWd1aWRlLWNvbmZsdWVuY2UvIzMtLWRldmVsb3AtYW5kLXRlc3QtYXBwLXNwZWNpZmljLWFjdGlvbnMtbG9jYWxseWBcbiAgICAgICAgICAgIDogcHJvZHVjdCA9PT0gJ2JhbWJvbycgP1xuICAgICAgICAgICAgICAgICcgIGh0dHBzOi8vZGV2ZWxvcGVyLmF0bGFzc2lhbi5jb20vcGxhdGZvcm0vbWFya2V0cGxhY2UvZGMtYXBwcy1wZXJmb3JtYW5jZS10b29sa2l0LXVzZXItZ3VpZGUtYmFtYm9vLyMyLS1hcHAtc3BlY2lmaWMtYWN0aW9ucy1kZXZlbG9wbWVudCdcbiAgICAgICAgICAgICAgICAvLyBwcm9kdWN0ID09PSAnYml0YnVja2V0J1xuICAgICAgICAgICAgICAgIDogJyAgaHR0cHM6Ly9kZXZlbG9wZXIuYXRsYXNzaWFuLmNvbS9wbGF0Zm9ybS9tYXJrZXRwbGFjZS9kYy1hcHBzLXBlcmZvcm1hbmNlLXRvb2xraXQtdXNlci1ndWlkZS1iaXRidWNrZXQvIzMtLWRldmVsb3AtYW5kLXRlc3QtYXBwLXNwZWNpZmljLWFjdGlvbi1sb2NhbGx5J31cbmAsXG4gICAgcmVhZHlGb3JQcm92aXNpb25pbmc6IGBcbiAgSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBzdGFydCB0aGUgc2NhbGFiaWxpdHkgYmVuY2htYXJrLCB3ZSB3aWxsIG5vdyByZWNvbmZpZ3VyZSB0aGUgREMgY2x1c3RlciBvbiBBV1NcblxuICAhISBJTVBPUlRBTlQgISFcbiAgXG4gIFdlIHdpbGwgYmUgd3JpdGluZyB0aGUgY29uZmlndXJhdGlvbiB0byBkaXNrLiBUaGlzIHdpbGwgb3ZlcndyaXRlIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb24uXG4gIFBsZWFzZSBub3RlIHRoYXQgcHJvdmlzaW9uaW5nIHRoZSBlbnZpcm9ubWVudCB3aWxsIGluY3VyIEFXUyB1c2FnZSBjb3N0cy5cbmAsXG4gICAgc3RhcnRUZXN0OiBgXG4gIFJlYWR5IHRvIHN0YXJ0IHRoZSBzY2FsYWJpbGl0eSBiZW5jaG1hcmsgdGVzdCB3aXRoIGFwcC1zcGVjaWZpYyBhY3Rpb25zXG5gLFxuICAgIHN1Y2Nlc3M6IGBcbuKclCBGaW5pc2hlZCB0aGUgc2NhbGFiaWxpdHkgYmVuY2htYXJrIHRlc3Qgd2l0aCBhcHAtc3BlY2lmaWMgYWN0aW9uc1xuYCxcbiAgICBmYWlsdXJlOiAoc3RhZ2UsIGN3ZCwgcHJvZHVjdCwgZW52aXJvbm1lbnQsIHJlc3VsdHNCYXNlRGlyLCByZXN1bHRzKSA9PiB7XG4gICAgICAgIGxldCBvdXRwdXQgPSBgXG7inJQgRmluaXNoZWQgdGhlIHNjYWxhYmlsaXR5IGJlbmNobWFyayB0ZXN0IHdpdGggYXBwLXNwZWNpZmljIGFjdGlvbnNcblxuICBVbmZvcnR1bmF0ZWx5LCB0aGUgdGVzdCBydW4gd2FzIGZpbmlzaGVkIHVuc3VjY2VzZnVsLiBcbiAgUGxlYXNlIHJldmlldyB0aGUgdGVzdCByZXN1bHRzIGFuZCBhZGp1c3QgdGhlIGNvbmZpZ3VyYXRpb24gaWYgcmVxdWlyZWQuXG5gO1xuICAgICAgICBPYmplY3QuZW50cmllcyhyZXN1bHRzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IG91dHB1dCArPSBgICAke2tleX06ICR7dmFsdWV9XFxuYCk7XG4gICAgICAgIG91dHB1dCArPSBgXG4gIEZ1bGwgcmVwb3J0IGNhbiBiZSBmb3VuZCBoZXJlOlxuICAke2pvaW4ocmVzdWx0c0Jhc2VEaXIsICdyZXN1bHRzX3N1bW1hcnkubG9nJyl9XG5cbiAgWW91IGNhbiByZXN0YXJ0IHRoZSBzY2FsYWJpbGl0eSBiZW5jaG1hcmsgdGVzdCB1c2luZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6XG4gIFxuICAkIGRjZHggYXB0IHJ1biR7Z2V0UnVuRm9yU3RhZ2Uoc3RhZ2UpfSAtLXByb2R1Y3QgJHtwcm9kdWN0fSAtLWN3ZCAke2N3ZH0gLS1lbnZpcm9ubWVudCAke2Vudmlyb25tZW50fVxuYDtcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IFNjYWxhYmlsaXR5UmVwb3J0TWVzc2FnZXMgPSB7XG4gICAgaGVhZGVyOiBgXG4gIF9fX19fIF9fX19fIF9fX19fIF9fICAgIF9fX19fIF9fX19fIF9fX19fIF9fICAgIF9fX19fIF9fX19fIF9fIF9fIFxuICB8ICAgX198ICAgICB8ICBfICB8ICB8ICB8ICBfICB8IF9fICB8ICAgICB8ICB8ICB8ICAgICB8XyAgIF98ICB8ICB8XG4gIHxfXyAgIHwgICAtLXwgICAgIHwgIHxfX3wgICAgIHwgX18gLXwtICAgLXwgIHxfX3wtICAgLXwgfCB8IHxfICAgX3xcbiAgfF9fX19ffF9fX19ffF9ffF9ffF9fX19ffF9ffF9ffF9fX19ffF9fX19ffF9fX19ffF9fX19ffCB8X3wgICB8X3wgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gX19fX18gICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIHwgX18gIHwgICBfX3wgIF8gIHwgICAgIHwgX18gIHxfICAgX3wgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgfCAgICAtfCAgIF9ffCAgIF9ffCAgfCAgfCAgICAtfCB8IHwgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICB8X198X198X19fX198X198ICB8X19fX198X198X198IHxffCAgICAgICAgICAgICAgICAgICAgXG5gXG59O1xuZXhwb3J0IGNvbnN0IFJlc3RhcnQgPSB7XG4gICAgaGVhZGVyOiBgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBfX19fXyBcbiAgfCBfXyAgfCAgIF9ffCAgIF9ffF8gICBffCAgXyAgfCBfXyAgfF8gICBffFxuICB8ICAgIC18ICAgX198X18gICB8IHwgfCB8ICAgICB8ICAgIC18IHwgfCAgXG4gIHxfX3xfX3xfX19fX3xfX19fX3wgfF98IHxfX3xfX3xfX3xfX3wgfF98ICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgV2Ugd2lsbCBub3cgcmVzdGFydCB0aGUgY2x1c3RlciB1c2VkIGluIHRoZSBEYXRhIENlbnRlciBBcHBsaWNhdGlvbiBQZXJmb3JtYW5jZSB0ZXN0aW5nLlxuYFxufTtcbmV4cG9ydCBjb25zdCBUZWFyZG93biA9IHtcbiAgICBoZWFkZXI6IGBcbiAgX19fX18gX19fX18gX19fX18gX19fX18gX19fXyAgX19fX18gXyBfIF8gX19fX18gXG4gIHxfICAgX3wgICBfX3wgIF8gIHwgX18gIHwgICAgXFxcXHwgICAgIHwgfCB8IHwgICB8IHxcbiAgICB8IHwgfCAgIF9ffCAgICAgfCAgICAtfCAgfCAgfCAgfCAgfCB8IHwgfCB8IHwgfFxuICAgIHxffCB8X19fX198X198X198X198X198X19fXy98X19fX198X19fX198X3xfX198XG5cbiAgV2Ugd2lsbCBub3cgdGVybWluYXRlIHRoZSBjbHVzdGVyIHVzZWQgaW4gdGhlIERhdGEgQ2VudGVyIEFwcGxpY2F0aW9uIFBlcmZvcm1hbmNlIHRlc3RpbmcuXG5gXG59O1xuIiwiaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IHdyaXRlRmlsZVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBqb2luLCByZXNvbHZlIH0gZnJvbSAncGF0aCc7XG5leHBvcnQgY29uc3QgaW5zdGFsbCA9IGFzeW5jIChjd2QpID0+IHtcbiAgICBjb25zb2xlLmxvZyhgXG4gIFN0YXJ0IHByb3Zpc2lvbmluZyBBV1MgdXNpbmcgdGhlIEF0bGFzc2lhbiBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFjZSBUb29sa2l0IChEQ0FQVCkgVGVycmFmb3JtIGNvbmZpZ3VyYXRpb25cbiAgVXNpbmcgRENBUFQgY29uZmlndXJhdGlvbiBmcm9tICR7Y3dkfVxuYCk7XG4gICAgY29uc3QgYmFzZURpciA9IGpvaW4oY3dkLCAnYXBwL3V0aWwvazhzJyk7XG4gICAgd3JpdGVGaWxlU3luYyhqb2luKGJhc2VEaXIsICdvdXRwdXRzLmpzb24nKSwgJyMgdGVycmFmb3JtIG91dHB1dCcsICd1dGYtOCcpO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgZG9ja2VyID0gc3Bhd24oJ2RvY2tlcicsIFtcbiAgICAgICAgICAgICdydW4nLFxuICAgICAgICAgICAgJy1pdCcsXG4gICAgICAgICAgICBgLS1wdWxsPWFsd2F5c2AsXG4gICAgICAgICAgICAnLS1lbnYtZmlsZScsICdhd3NfZW52cycsXG4gICAgICAgICAgICAnLXYnLCBgJHtiYXNlRGlyfS9kY2FwdC50ZnZhcnM6L2RhdGEtY2VudGVyLXRlcnJhZm9ybS9jb25mLnRmdmFyc2AsXG4gICAgICAgICAgICAnLXYnLCBgJHtiYXNlRGlyfS9kY2FwdC1zbmFwc2hvdHMuanNvbjovZGF0YS1jZW50ZXItdGVycmFmb3JtL2RjYXB0LXNuYXBzaG90cy5qc29uYCxcbiAgICAgICAgICAgICctdicsIGAke2Jhc2VEaXJ9L2xvZ3M6L2RhdGEtY2VudGVyLXRlcnJhZm9ybS9sb2dzYCxcbiAgICAgICAgICAgICctdicsIGAke2Jhc2VEaXJ9L291dHB1dHMuanNvbjovZGF0YS1jZW50ZXItdGVycmFmb3JtL291dHB1dHMuanNvbmAsXG4gICAgICAgICAgICAnYXRsYXNzaWFubGFicy90ZXJyYWZvcm06bGF0ZXN0JyxcbiAgICAgICAgICAgICcuL2luc3RhbGwuc2gnLCAnLWMnLCAnY29uZi50ZnZhcnMnXG4gICAgICAgIF0sIHsgY3dkOiBiYXNlRGlyLCBzdGRpbzogJ2luaGVyaXQnIH0pO1xuICAgICAgICBkb2NrZXIub24oJ2V4aXQnLCAoY29kZSkgPT4gKGNvZGUgPT09IDApID8gcmVzb2x2ZSgpIDogcmVqZWN0KG5ldyBFcnJvcihgRG9ja2VyIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfWApKSk7XG4gICAgfSk7XG4gICAgY29uc29sZS5sb2coYFxu4pyUIEZpbmlzaGVkIHByb3Zpc2lvbmluZyBBV1MgdXNpbmcgdGhlIEF0bGFzc2lhbiBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFjZSBUb29sa2l0IChEQ0FQVCkgVGVycmFmb3JtIGNvbmZpZ3VyYXRpb25cbiAgQ2x1c3RlciBkZXRhaWxzIGNhbiBiZSBmb3VuZCBpbiAke2Jhc2VEaXJ9L291dHB1dHMuanNvblxuYCk7XG59O1xuZXhwb3J0IGNvbnN0IHJ1blRlc3QgPSBhc3luYyAoY3dkLCBlbnZpcm9ubWVudCwgcHJvZHVjdCkgPT4ge1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgZG9ja2VyID0gc3Bhd24oJ2RvY2tlcicsIFtcbiAgICAgICAgICAgICdydW4nLFxuICAgICAgICAgICAgJy1pdCcsXG4gICAgICAgICAgICBgLS1wdWxsPWFsd2F5c2AsXG4gICAgICAgICAgICAnLS1lbnYtZmlsZScsICcuL2FwcC91dGlsL2s4cy9hd3NfZW52cycsXG4gICAgICAgICAgICAnLWUnLCBgUkVHSU9OPXVzLWVhc3QtMmAsXG4gICAgICAgICAgICAnLWUnLCBgRU5WSVJPTk1FTlRfTkFNRT0ke2Vudmlyb25tZW50fWAsXG4gICAgICAgICAgICAnLXYnLCBgJHtjd2R9Oi9kYXRhLWNlbnRlci10ZXJyYWZvcm0vZGMtYXBwLXBlcmZvcm1hbmNlLXRvb2xraXRgLFxuICAgICAgICAgICAgJy12JywgYCR7Y3dkfS9hcHAvdXRpbC9rOHMvYnp0X29uX3BvZC5zaDovZGF0YS1jZW50ZXItdGVycmFmb3JtL2J6dF9vbl9wb2Quc2hgLFxuICAgICAgICAgICAgJ2F0bGFzc2lhbmxhYnMvdGVycmFmb3JtOmxhdGVzdCcsXG4gICAgICAgICAgICAnYmFzaCcsICdienRfb25fcG9kLnNoJywgYCR7cHJvZHVjdH0ueW1sYCwgJy0tY2knXG4gICAgICAgIF0sIHsgY3dkLCBzdGRpbzogJ2luaGVyaXQnIH0pO1xuICAgICAgICBkb2NrZXIub24oJ2V4aXQnLCAoY29kZSkgPT4gKGNvZGUgPT09IDApID8gcmVzb2x2ZSgpIDogcmVqZWN0KG5ldyBFcnJvcihgRG9ja2VyIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfWApKSk7XG4gICAgfSk7XG59O1xuZXhwb3J0IGNvbnN0IHJlZ3Jlc3Npb25SZXBvcnQgPSBhc3luYyAoY3dkLCBydW4xRGlyLCBydW4yRGlyKSA9PiB7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBkb2NrZXIgPSBzcGF3bignZG9ja2VyJywgW1xuICAgICAgICAgICAgJ3J1bicsXG4gICAgICAgICAgICAnLWl0JyxcbiAgICAgICAgICAgIGAtLXB1bGw9YWx3YXlzYCxcbiAgICAgICAgICAgICctLXdvcmtkaXInLCAnLy9kYy1hcHAtcGVyZm9ybWFuY2UtdG9vbGtpdC9hcHAvcmVwb3J0c19nZW5lcmF0aW9uJyxcbiAgICAgICAgICAgICctLWVudHJ5cG9pbnQnLCAncHl0aG9uJyxcbiAgICAgICAgICAgICctdicsIGAke2N3ZH06L2RjLWFwcC1wZXJmb3JtYW5jZS10b29sa2l0YCxcbiAgICAgICAgICAgICctdicsIGAke3J1bjFEaXJ9Oi9yZXN1bHRzL3J1bjFgLFxuICAgICAgICAgICAgJy12JywgYCR7cnVuMkRpcn06L3Jlc3VsdHMvcnVuMmAsXG4gICAgICAgICAgICAnYXRsYXNzaWFuL2RjYXB0JyxcbiAgICAgICAgICAgICdjc3ZfY2hhcnRfZ2VuZXJhdG9yLnB5JywgJ3BlcmZvcm1hbmNlX3Byb2ZpbGUueW1sJ1xuICAgICAgICBdLCB7IGN3ZCwgc3RkaW86ICdpbmhlcml0JyB9KTtcbiAgICAgICAgZG9ja2VyLm9uKCdleGl0JywgKGNvZGUpID0+IChjb2RlID09PSAwKSA/IHJlc29sdmUoKSA6IHJlamVjdChuZXcgRXJyb3IoYERvY2tlciBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX1gKSkpO1xuICAgIH0pO1xuICAgIGNvbnNvbGUubG9nKGDinJQgRmluaXNoZWQgZ2VuZXJhdGluZyB0aGUgUGVyZm9ybWFuY2UgUmVncmVzc2lvbiBSZXBvcnRgKTtcbn07XG5leHBvcnQgY29uc3Qgc2NhbGFiaWxpdHlSZXBvcnQgPSBhc3luYyAoY3dkLCByZXN1bHRzRGlyMSwgcmVzdWx0c0RpcjIsIHJlc3VsdHNEaXIzKSA9PiB7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBkb2NrZXIgPSBzcGF3bignZG9ja2VyJywgW1xuICAgICAgICAgICAgJ3J1bicsXG4gICAgICAgICAgICAnLWl0JyxcbiAgICAgICAgICAgIGAtLXB1bGw9YWx3YXlzYCxcbiAgICAgICAgICAgICctLXdvcmtkaXInLCAnLy9kYy1hcHAtcGVyZm9ybWFuY2UtdG9vbGtpdC9hcHAvcmVwb3J0c19nZW5lcmF0aW9uJyxcbiAgICAgICAgICAgICctLWVudHJ5cG9pbnQnLCAncHl0aG9uJyxcbiAgICAgICAgICAgICctdicsIGAke2N3ZH06L2RjLWFwcC1wZXJmb3JtYW5jZS10b29sa2l0YCxcbiAgICAgICAgICAgICctdicsIGAke3Jlc3VsdHNEaXIxfTovZGNhcHQvc2NhbGVfcmVzdWx0c18xYCxcbiAgICAgICAgICAgICctdicsIGAke3Jlc3VsdHNEaXIyfTovZGNhcHQvc2NhbGVfcmVzdWx0c18yYCxcbiAgICAgICAgICAgICctdicsIGAke3Jlc3VsdHNEaXIzfTovZGNhcHQvc2NhbGVfcmVzdWx0c18zYCxcbiAgICAgICAgICAgICdhdGxhc3NpYW4vZGNhcHQnLFxuICAgICAgICAgICAgJ2Nzdl9jaGFydF9nZW5lcmF0b3IucHknLCAnc2NhbGVfcHJvZmlsZS55bWwnXG4gICAgICAgIF0sIHsgY3dkLCBzdGRpbzogJ2luaGVyaXQnIH0pO1xuICAgICAgICBkb2NrZXIub24oJ2V4aXQnLCAoY29kZSkgPT4gKGNvZGUgPT09IDApID8gcmVzb2x2ZSgpIDogcmVqZWN0KG5ldyBFcnJvcihgRG9ja2VyIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfWApKSk7XG4gICAgfSk7XG4gICAgY29uc29sZS5sb2coYOKclCBGaW5pc2hlZCBnZW5lcmF0aW5nIHRoZSBTY2FsYWJpbGl0eSBCZW5jaG1hcmsgUmVwb3J0YCk7XG59O1xuZXhwb3J0IGNvbnN0IHJlc3RhcnQgPSBhc3luYyAoY3dkLCBlbnZpcm9ubWVudCwgcHJvZHVjdCkgPT4ge1xuICAgIHdyaXRlRmlsZVN5bmMoam9pbihjd2QsICcuL2FwcC91dGlsL2s4cy9kZWxldGVfcG9kLnNoJyksIGBcbmF3cyBla3MgdXBkYXRlLWt1YmVjb25maWcgLS1uYW1lIGF0bGFzLSRFTlZJUk9OTUVOVF9OQU1FLWNsdXN0ZXIgLS1yZWdpb24gJFJFR0lPTlxua3ViZWN0bCByb2xsb3V0IHJlc3RhcnQgc3RzLyRQUk9EVUNUIC1uIGF0bGFzc2lhblxua3ViZWN0bCByb2xsb3V0IHN0YXR1cyBzdHMgJFBST0RVQ1QgLW4gYXRsYXNzaWFuYCwgJ3V0ZjgnKTtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGRvY2tlciA9IHNwYXduKCdkb2NrZXInLCBbXG4gICAgICAgICAgICAncnVuJyxcbiAgICAgICAgICAgICctaXQnLFxuICAgICAgICAgICAgYC0tcHVsbD1hbHdheXNgLFxuICAgICAgICAgICAgJy0tZW52LWZpbGUnLCAnLi9hcHAvdXRpbC9rOHMvYXdzX2VudnMnLFxuICAgICAgICAgICAgJy1lJywgYFJFR0lPTj11cy1lYXN0LTJgLFxuICAgICAgICAgICAgJy1lJywgYEVOVklST05NRU5UX05BTUU9JHtlbnZpcm9ubWVudH1gLFxuICAgICAgICAgICAgJy1lJywgYFBST0RVQ1Q9JHtwcm9kdWN0fWAsXG4gICAgICAgICAgICAnLXYnLCBgJHtjd2R9Oi9kYXRhLWNlbnRlci10ZXJyYWZvcm0vZGMtYXBwLXBlcmZvcm1hbmNlLXRvb2xraXRgLFxuICAgICAgICAgICAgJy12JywgYCR7Y3dkfS9hcHAvdXRpbC9rOHMvZGVsZXRlX3BvZC5zaDovZGF0YS1jZW50ZXItdGVycmFmb3JtL2RlbGV0ZV9wb2Quc2hgLFxuICAgICAgICAgICAgJ2F0bGFzc2lhbmxhYnMvdGVycmFmb3JtOmxhdGVzdCcsXG4gICAgICAgICAgICAnYmFzaCcsICdkZWxldGVfcG9kLnNoJ1xuICAgICAgICBdLCB7IGN3ZCwgc3RkaW86ICdpbmhlcml0JyB9KTtcbiAgICAgICAgZG9ja2VyLm9uKCdleGl0JywgKGNvZGUpID0+IChjb2RlID09PSAwKSA/IHJlc29sdmUoKSA6IHJlamVjdChuZXcgRXJyb3IoYERvY2tlciBleGl0ZWQgd2l0aCBjb2RlICR7Y29kZX1gKSkpO1xuICAgIH0pO1xufTtcbmV4cG9ydCBjb25zdCB0ZXJtaW5hdGUgPSBhc3luYyAoY3dkLCBlbnZpcm9ubWVudCkgPT4ge1xuICAgIGNvbnN0IGJhc2VEaXIgPSByZXNvbHZlKGpvaW4oY3dkLCAnYXBwL3V0aWwvazhzJykpO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgZG9ja2VyID0gc3Bhd24oJ2RvY2tlcicsIFtcbiAgICAgICAgICAgICdydW4nLFxuICAgICAgICAgICAgYC0tcHVsbD1hbHdheXNgLFxuICAgICAgICAgICAgJy0tZW52LWZpbGUnLCAnYXdzX2VudnMnLFxuICAgICAgICAgICAgJy0td29ya2RpcicsICcvL2RhdGEtY2VudGVyLXRlcnJhZm9ybScsXG4gICAgICAgICAgICAnLS1lbnRyeXBvaW50JywgJ3B5dGhvbicsXG4gICAgICAgICAgICAnLXYnLCBgJHtiYXNlRGlyfS90ZXJtaW5hdGVfY2x1c3Rlci5weTovZGF0YS1jZW50ZXItdGVycmFmb3JtL3Rlcm1pbmF0ZV9jbHVzdGVyLnB5YCxcbiAgICAgICAgICAgICdhdGxhc3NpYW4vZGNhcHQnLFxuICAgICAgICAgICAgJ3Rlcm1pbmF0ZV9jbHVzdGVyLnB5JywgJy0tY2x1c3Rlcl9uYW1lJywgYGF0bGFzLSR7ZW52aXJvbm1lbnR9LWNsdXN0ZXJgLCAnLS1hd3NfcmVnaW9uJywgJ3VzLWVhc3QtMidcbiAgICAgICAgXSwgeyBjd2Q6IGpvaW4oY3dkLCAnYXBwL3V0aWwvazhzJyksIHN0ZGlvOiAnaW5oZXJpdCcgfSk7XG4gICAgICAgIGRvY2tlci5vbignZXhpdCcsIChjb2RlKSA9PiAoY29kZSA9PT0gMCkgPyByZXNvbHZlKCkgOiByZWplY3QobmV3IEVycm9yKGBEb2NrZXIgZXhpdGVkIHdpdGggY29kZSAke2NvZGV9YCkpKTtcbiAgICB9KTtcbiAgICBjb25zb2xlLmxvZyhg4pyUIEZpbmlzaGVkIHRlcm1pbmF0aW5nIHRoZSBEQyBjbHVzdGVyIG9uIEFXUyB1c2luZyB0aGUgQXRsYXNzaWFuIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYWNlIFRvb2xraXQgKERDQVBUKSBUZXJyYWZvcm0gY29uZmlndXJhdGlvbmApO1xufTtcbiIsImltcG9ydCB7IGNvbmZpcm0sIGlucHV0IH0gZnJvbSAnQGlucXVpcmVyL3Byb21wdHMnO1xuaW1wb3J0IHsgZXhpc3RzU3luYywgcm1TeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ29zJztcbmltcG9ydCB7IGpvaW4sIHJlc29sdmUgfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IGN3ZCBhcyBwd2QgfSBmcm9tICdwcm9jZXNzJztcbmltcG9ydCBzaW1wbGVHaXQgZnJvbSAnc2ltcGxlLWdpdCc7XG5pbXBvcnQgeyBlbXB0eUxpbmUgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5leHBvcnQgY29uc3QgZ2V0QXB0RGljdG9yeSA9IGFzeW5jIChjd2QsIG11c3RVc2VEZWZhdWx0Q29uZmlndXJhdGlvbiwgZm9yY2UpID0+IHtcbiAgICAvLyBUcmFuc2xhdGUgY29tbW9uIHJlbGF0aXZlIHBhdGhzIHRvIGFic29sdXRlIHBhdGhzXG4gICAgbGV0IHJlc3VsdCA9IGN3ZCA/XG4gICAgICAgIGN3ZC5zdGFydHNXaXRoKCd+LycpXG4gICAgICAgICAgICA/IGN3ZC5yZXBsYWNlKCd+LycsIGhvbWVkaXIoKSlcbiAgICAgICAgICAgIDogY3dkLnN0YXJ0c1dpdGgoJy4vJylcbiAgICAgICAgICAgICAgICA/IGN3ZC5yZXBsYWNlKCcuLycsIHB3ZCgpICsgJy8nKVxuICAgICAgICAgICAgICAgIDogY3dkID09PSAnLidcbiAgICAgICAgICAgICAgICAgICAgPyBwd2QoKVxuICAgICAgICAgICAgICAgICAgICA6IGN3ZFxuICAgICAgICA6IHB3ZCgpO1xuICAgIC8vIElmIHdlIGFyZSBpbiBpbnRlcmFjdGl2ZSBtb2RlLCB3ZSBzaG91bGQgYXNrIHF1ZXN0aW9ucyBmaXJzdFxuICAgIGlmICghZm9yY2UpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYXJlIGN1cnJlbnRseSBpbiB0aGUgQVBUIGRpcmVjdG9yeVxuICAgICAgICBjb25zdCBpc0N1cnJlbnREaXJlY3RvcnlFbGlnYWJsZSA9IGV4aXN0c1N5bmMoam9pbihyZXN1bHQsICdhcHAvdXRpbC9rOHMvZGNhcHQudGZ2YXJzJykpO1xuICAgICAgICAvLyBJZiB0aGlzIGlzIHRoZSBBUFQgZGlyZWN0b3J5LCB3ZSB3aWxsIGJlIHVzaW5nIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4uLlxuICAgICAgICBsZXQgdXNlQ3VycmVudERpcmVjdG9yeSA9IGlzQ3VycmVudERpcmVjdG9yeUVsaWdhYmxlO1xuICAgICAgICAvLyAuLi51bmxlc3MgdG9sZCBvdGhlcndpc2VcbiAgICAgICAgaWYgKGlzQ3VycmVudERpcmVjdG9yeUVsaWdhYmxlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgICBXZSd2ZSBmb3VuZCB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQgaW4gdGhlIHNwZWNpZmllZCBkaXJlY3Rvcnk6XG4gICR7cmVzdWx0fVxuYCk7XG4gICAgICAgICAgICB1c2VDdXJyZW50RGlyZWN0b3J5ID0gYXdhaXQgY29uZmlybSh7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYERvIHlvdSB3aXNoIHRvIHVzZSB0aGlzIGRpcmVjdG9yeT9gLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiB3ZSBhcmUgbm90IGdvaW5nIHRvIHVzZSB0aGUgY3VycmVudCBkaXJlY3RvcnksIGFzayBmb3IgdGhlIGFsdGVybmF0aXZlXG4gICAgICAgIGxldCBkaXJlY3RvcnkgPSByZXN1bHQ7XG4gICAgICAgIGlmICghdXNlQ3VycmVudERpcmVjdG9yeSkge1xuICAgICAgICAgICAgZGlyZWN0b3J5ID0gYXdhaXQgaW5wdXQoe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2Ugc3BlY2lmeSB0aGUgbG9jYXRpb24gd2hlcmUgdGhlIEFwcCBQZWZvcm1hbmNlIFRvb2xraXQgaXMgbG9jYXRlZCcsXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogcmVzdWx0LFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUcmFuc2xhdGUgY29tbW9uIHJlbGF0aXZlIHBhdGhzIHRvIGFic29sdXRlIHBhdGhzXG4gICAgICAgIGRpcmVjdG9yeSA9IGRpcmVjdG9yeS5zdGFydHNXaXRoKCd+LycpXG4gICAgICAgICAgICA/IGRpcmVjdG9yeS5yZXBsYWNlKCd+LycsIGhvbWVkaXIoKSArICcvJylcbiAgICAgICAgICAgIDogZGlyZWN0b3J5LnN0YXJ0c1dpdGgoJy4vJylcbiAgICAgICAgICAgICAgICA/IGRpcmVjdG9yeS5yZXBsYWNlKCcuLycsIHB3ZCgpICsgJy8nKVxuICAgICAgICAgICAgICAgIDogZGlyZWN0b3J5ID09PSAnLidcbiAgICAgICAgICAgICAgICAgICAgPyBwd2QoKVxuICAgICAgICAgICAgICAgICAgICA6IGRpcmVjdG9yeTtcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHByb3ZpZGVkIGFsdGVybmF0aXZlIGlzIGEgRENBUFQgZGlyZWN0b3J5XG4gICAgICAgIGNvbnN0IGlzRGlyZWN0b3J5RWxpZ2FibGUgPSBleGlzdHNTeW5jKHJlc29sdmUoam9pbihkaXJlY3RvcnksICdhcHAvdXRpbC9rOHMvZGNhcHQudGZ2YXJzJykpKTtcbiAgICAgICAgaWYgKCFpc0RpcmVjdG9yeUVsaWdhYmxlKSB7XG4gICAgICAgICAgICAvLyBJZiBpdCBpcyBub3QgYSBEQ0FQVCBkaXJlY3RvcnksIGFzayBpZiB3ZSBuZWVkIHRvIGNsb25lIGl0IGZyb20gR2l0aHViXG4gICAgICAgICAgICBjb25zdCBtdXN0Q2xvbmVBUFQgPSBhd2FpdCBjb25maXJtKHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgVGhlIGRpcmVjdG9yeSBlaXRoZXIgZG9lc24ndCBleGlzdCwgb3IgaXQgZG9lc24ndCBjb250YWluIHRoZSBBcHAgUGVmb3JtYW5jZSBUb29sa2l0LiBEbyB5b3Ugd2FudCB0byBjbG9uZSBEQ0FQVCBmcm9tIHNvdXJjZT9gLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBJZiB3ZSBtdXN0IGNsb25lIGl0IGZyb20gR2l0aHViLCB3ZSBzaG91bGQgY2xvbmUgaXQgZnJvbSBHaXRodWJcbiAgICAgICAgICAgIGlmIChtdXN0Q2xvbmVBUFQpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBzaW1wbGVHaXQoKS5jbG9uZSgnaHR0cHM6Ly9naXRodWIuY29tL2F0bGFzc2lhbi9kYy1hcHAtcGVyZm9ybWFuY2UtdG9vbGtpdC5naXQnLCBkaXJlY3RvcnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENoZWNrIGlmIHRoaXMgbmVlZHMgdG8gYmUgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKGZvciBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHRlc3RpbmcpXG4gICAgICAgIGlmIChtdXN0VXNlRGVmYXVsdENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgIC8vIEFzayBuaWNlbHkuLi5cbiAgICAgICAgICAgIGNvbnN0IGlzRGVmYXVsdENvbmZpZ3VyYXRpb24gPSBhd2FpdCBjb25maXJtKHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIGNvbmZpcm0gdGhhdCB0aGUgY2hvc2VuIGRpcmVjdG9yeSBpcyB1c2luZyB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZvciBEQ0FQVCAobWFzdGVyIGJyYW5jaCknXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIC4uLmJ1dCBhbHNvLCBObyBpcyBub3QgYW4gb3B0aW9uXG4gICAgICAgICAgICBpZiAoIWlzRGVmYXVsdENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0l0IGlzIHJlcXVpcmVkIHRvIHVzZSB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZyb20gbWFzdGVyIHRvIGNvbnRpbnVlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBBc2sgbmljZWx5Li4uXG4gICAgICAgICAgICBjb25zdCBpc0FwcFNwZWNpZmljQ29uZmlndXJhdGlvbiA9IGF3YWl0IGNvbmZpcm0oe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2UgY29uZmlybSB0aGF0IHRoZSBjaG9zZW4gZGlyZWN0b3J5IGhhcyBhIERDQVBUIGluc3RhbGxhdGlvbiB3aXRoIGFwcC1zcGVjaWZpYyBhY3Rpb25zJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyAuLi5idXQgYWxzbywgTm8gaXMgbm90IGFuIG9wdGlvblxuICAgICAgICAgICAgaWYgKCFpc0FwcFNwZWNpZmljQ29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSXQgaXMgcmVxdWlyZWQgdG8gaGF2ZSBhcHAtc3BlY2lmaWMgYWN0aW9ucyBpbiBvcmRlciB0byBjb250aW51ZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFNldCB0aGUgcmVzdWx0IHRvIHRoZSBwcm92aWRlZCBkaXJlY3RvcnlcbiAgICAgICAgcmVzdWx0ID0gZGlyZWN0b3J5O1xuICAgICAgICAvLyBJZiB3ZSBhcmUgaW4gbm9uLWludGVyYWN0aXZlIG1vZGUgYW5kIHdlIG5lZWQgdG8gdXNlIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24sIHdlIHdpbGwgY2xvbmUgaXQgZnJvbSBHaXRodWJcbiAgICB9XG4gICAgZWxzZSBpZiAobXVzdFVzZURlZmF1bHRDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIC8vIElmIHRoZSBwcm92aWRlZCBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3RzIHdlIGNhbiB1c2UgaXRcbiAgICAgICAgLy8gT3RoZXJ3aXNlIHVzZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgdG8gZW5zdXJlIGEgZnJlc2ggbm9uLXBlcnNpc3RlbnQgY2hlY2tvdXRcbiAgICAgICAgcmVzdWx0ID0gIWV4aXN0c1N5bmMocmVzdWx0KVxuICAgICAgICAgICAgPyByZXN1bHRcbiAgICAgICAgICAgIDogam9pbihob21lZGlyKCksICcuZGNkeCcsICdkY2FwdCcpO1xuICAgICAgICAvLyBJbmZvcm0gdGhlIHVzZXIgb2YgdGhlIGNob3NlbiBkaXJlY3RvcnlcbiAgICAgICAgY29uc29sZS5sb2coJyAgSW5zdGFsbGluZyBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gb2YgRENBUFQgZnJvbSBzb3VyY2UgKG5vbi1pbnRlcmFjdGl2ZSBtb2RlKScpO1xuICAgICAgICBjb25zb2xlLmxvZyhgICAke3Jlc3VsdH1gKTtcbiAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBkaXJlY3RvcnkgaXMgZW1wdHlcbiAgICAgICAgcm1TeW5jKHJlc3VsdCwgeyBmb3JjZTogdHJ1ZSwgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICAvLyBSZXRyaWV2ZSBEQ0FQVCBmcm9tIGdpdGh1YlxuICAgICAgICBhd2FpdCBzaW1wbGVHaXQoKS5jbG9uZSgnaHR0cHM6Ly9naXRodWIuY29tL2F0bGFzc2lhbi9kYy1hcHAtcGVyZm9ybWFuY2UtdG9vbGtpdC5naXQnLCByZXN1bHQpO1xuICAgICAgICBjb25zb2xlLmxvZygn4pyUIEZpbmlzaGVkIGluc3RhbGxpbmcgZGVmYXVsdCBjb25maWd1cmF0aW9uIG9mIERDQVBUIGZyb20gc291cmNlIChub24taW50ZXJhY3RpdmUgbW9kZSknKTtcbiAgICAgICAgLy8gSWYgd2UgYXJlIGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlIGFuZCB3ZSBuZWVkIHRvIHVzZSBhcHAgc3BlY2lmaWMgY29uZmlndXJhdGlvbiwgbWFrZSBzdXJlIHRoYXQgaXQgZXhpc3RzXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAvLyBDaGVjayBpZiB3ZSBhcmUgY3VycmVudGx5IGluIHRoZSBBUFQgZGlyZWN0b3J5XG4gICAgICAgIGNvbnN0IGlzQ3VycmVudERpcmVjdG9yeUVsaWdhYmxlID0gZXhpc3RzU3luYyhqb2luKHJlc3VsdCwgJ2FwcC91dGlsL2s4cy9kY2FwdC50ZnZhcnMnKSk7XG4gICAgICAgIC8vIElmIHRoaXMgaXMgbm90IGEgRENBUFQgZGlyZWN0b3J5LCB3ZSBjYW5ub3QgY29udGludWVcbiAgICAgICAgaWYgKCFpc0N1cnJlbnREaXJlY3RvcnlFbGlnYWJsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkgJHtyZXN1bHR9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2coJyAgVXNpbmcgRENBUFQgZnJvbSBjdXJyZW50IGRpcmVjdG9yeSAobm9uLWludGVyYWN0aXZlIG1vZGUpJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGAgICR7cmVzdWx0fWApO1xuICAgICAgICBlbXB0eUxpbmUoKTtcbiAgICB9XG4gICAgLy8gVGhpcyBzaG91bGQgbm90IG9jY3VyLCBiZWNhdXNlIGVpdGhlciB3ZSBoYXZlIGVzdGFibGlzaGVkIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBoYXMgRENBUFRcbiAgICAvLyBvciB3ZSBoYXZlIGNsb25lZCBpdCBpbnRvIGEgKG5ldykgZGlyZWN0b3J5LiBUaGlzIGlzIG1lcmVseSBhIGNoZWNrIGZvciBpZiB0aGUgbGF0dGVyIGZhaWxlZC5cbiAgICBpZiAoIWV4aXN0c1N5bmMoam9pbihyZXN1bHQsICdhcHAvdXRpbC9rOHMvZGNhcHQudGZ2YXJzJykpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0IGluIHRoZSBwcm92aWRlZCBkaXJlY3RvcnkgJHtyZXN1bHR9YCk7XG4gICAgfVxuICAgIC8vIFNvbWUgYWRkaXRpb25hbCBjaGVja3MgdG8gZW5zdXJlIHRoYXQgd2UgYXJlIGluIGEgdmFsaWQgRENBUFQgZGlyZWN0b3J5XG4gICAgY29uc3QgaGFzRW52RmlsZSA9IGV4aXN0c1N5bmMoam9pbihyZXN1bHQsICdhcHAvdXRpbC9rOHMvYXdzX2VudnMnKSk7XG4gICAgY29uc3QgaGFzU25hcHNob3RKU09OID0gZXhpc3RzU3luYyhqb2luKHJlc3VsdCwgJ2FwcC91dGlsL2s4cy9kY2FwdC1zbmFwc2hvdHMuanNvbicpKTtcbiAgICBjb25zdCBoYXNUZXJyYWZvcm1WYXJpYWJsZXMgPSBleGlzdHNTeW5jKGpvaW4ocmVzdWx0LCAnYXBwL3V0aWwvazhzL2RjYXB0LnRmdmFycycpKTtcbiAgICBpZiAoIWhhc0VudkZpbGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCB0aGUgcmVxdWlyZWQgJ2F3c19lbnMnIGZpbGUuIEV4cGVjdGVkIHRvIGZpbmQgaXQgaW4gJHtqb2luKHJlc3VsdCwgJ2FwcC91dGlsL2s4cy9hd3NfZW52cycpfWApO1xuICAgIH1cbiAgICBlbHNlIGlmICghaGFzU25hcHNob3RKU09OKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgdGhlIHJlcXVpcmVkICdkY2FwdC1zbmFwc2hvdHMuanNvbicgZmlsZS4gRXhwZWN0ZWQgdG8gZmluZCBpdCBpbiAke2pvaW4ocmVzdWx0LCAnYXBwL3V0aWwvazhzL2RjYXB0LXNuYXBzaG90cy5qc29uJyl9YCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFoYXNUZXJyYWZvcm1WYXJpYWJsZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCB0aGUgcmVxdWlyZWQgJ2RjYXB0LnRmdmFycycgZmlsZS4gRXhwZWN0ZWQgdG8gZmluZCBpdCBpbiAke2pvaW4ocmVzdWx0LCAnYXBwL3V0aWwvazhzL2RjYXB0LnRmdmFycycpfWApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbiIsImltcG9ydCB7IGV4aXN0c1N5bmMsIGxzdGF0U3luYywgcmVhZGRpclN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5leHBvcnQgY29uc3QgZ2V0UmVwb3J0ID0gKGJhc2VEaXIsIHR5cGUpID0+IHtcbiAgICAvLyBHZXQgdGhlIGZpbGUgbmFtZSBvZiB0aGUgcmVwb3J0IHN1bW1hcnkgdG8gY2hlY2sgaWYgdGhlIHByb3ZpZGVkIGJhc2VEaXIgYWxyZWFkeSBjb250YWlucyB0aGUgcmVwb3J0XG4gICAgY29uc3Qgc3VtbWFyeUZpbGVOYW1lID0gdHlwZSA9PT0gJ3BlcmZvcm1hbmNlJyA/ICdwZXJmb3JtYW5jZV9wcm9maWxlX3N1bW1hcnkubG9nJyA6ICdzY2FsZV9wcm9maWxlX3N1bW1hcnkubG9nJztcbiAgICAvLyBQbGFjZWhvbGRlciBmb3IgdGhlIHJlcG9ydCBkaXJlY3RvcnlcbiAgICBsZXQgcmVzdWx0c0RpciA9IGV4aXN0c1N5bmMoam9pbihiYXNlRGlyLCBzdW1tYXJ5RmlsZU5hbWUpKSA/IGJhc2VEaXIgOiBudWxsO1xuICAgIGlmICghcmVzdWx0c0Rpcikge1xuICAgICAgICAvLyBMZXQncyBnbyBmaW5kIG91ciByZXBvcnQgZGlyZWN0b3J5XG4gICAgICAgIHJlYWRkaXJTeW5jKGJhc2VEaXIpLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IGZvdW5kIGFyZSBkaXJlY3RvcnksIG5vIG5lZWQgdG8gY29udGludWUgbG9va2luZ1xuICAgICAgICAgICAgaWYgKHJlc3VsdHNEaXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBHZXQgdGhlIHN0YXRpc3RpY3MgZm9yIHRoaXMgZW50cnlcbiAgICAgICAgICAgIGNvbnN0IHN0YXQgPSBsc3RhdFN5bmMoam9pbihiYXNlRGlyLCBpdGVtKSk7XG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGlzIGlzIGEgcmVwb3J0IGRpcmVjdG9yeVxuICAgICAgICAgICAgaWYgKHN0YXQuaXNEaXJlY3RvcnkoKSAmJiBleGlzdHNTeW5jKGpvaW4oYmFzZURpciwgaXRlbSwgc3VtbWFyeUZpbGVOYW1lKSkpIHtcbiAgICAgICAgICAgICAgICAvLyBXZSd2ZSBmb3VuZCBpdCFcbiAgICAgICAgICAgICAgICByZXN1bHRzRGlyID0gam9pbihiYXNlRGlyLCBpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgZm91bmQgYSByZXBvcnQgZGlyZWN0b3J5LCBhbmQgaWYgbm90IHdlIHNob3VsZCB0aHJvdyBhIGhpc3N5IGZpdFxuICAgIGlmIChyZXN1bHRzRGlyID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgZmluZCB0aGUgcmVwb3J0cyBpbiB0aGUgcHJvdmlkZWQgZGlyZWN0b3J5ICgke2Jhc2VEaXJ9KWApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0c0Rpcjtcbn07XG4iLCJpbXBvcnQgeyBjb25maXJtIH0gZnJvbSAnQGlucXVpcmVyL3Byb21wdHMnO1xuaW1wb3J0IHsgZXhpc3RzU3luYywgbWtkaXJTeW5jLCByZWFkZGlyU3luYywgcm1TeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuZXhwb3J0IGNvbnN0IGdldFJlcG9ydERpcmVjdG9yeSA9IGFzeW5jIChjd2QsIGZvcmNlKSA9PiB7XG4gICAgLy8gR2V0IHRoZSBwYXRoIHRvIHRoZSByZXBvcnRzIGRpcmVjdG9yeVxuICAgIGNvbnN0IHBhdGggPSBqb2luKGN3ZCwgJ2FwcCcsICdyZXN1bHRzJywgJ3JlcG9ydHMnKTtcbiAgICAvLyBDaGVjayBpZiB0aGUgZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzXG4gICAgaWYgKGV4aXN0c1N5bmMocGF0aCkpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGRpcmVjdG9yeSBpcyBlbXB0eVxuICAgICAgICBjb25zdCBpc0VtcHR5ID0gcmVhZGRpclN5bmMocGF0aCkubGVuZ3RoIDw9IDA7XG4gICAgICAgIGlmICghaXNFbXB0eSkge1xuICAgICAgICAgICAgLy8gSWYgd2UgYXJlIGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlLCBtYWtlIHN1cmUgdG8gYXNrIG5pY2VseSBpZiB3ZSBjYW4gcmVtb3ZlIHRoZSByZXBvcnRzXG4gICAgICAgICAgICBpZiAoIWZvcmNlKSB7XG4gICAgICAgICAgICAgICAgLy8gVGVsbCB0aGUgdXNlciB0aGVyZSBhcmUgc3RpbGwgcHJldmlvdXMgcmVwb3J0cyBpbiB0aGUgZGlyZWN0b3J5XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFxuICBUaGVyZSBhcmUgc3RpbGwgcmVwb3J0cyBmcm9tIHByZXZpb3VzIHRlc3QgcnVucyBpbiB0aGUgY3VycmVudCBkaXJlY3Rvcnk6XG4gICR7cGF0aH1cbmApO1xuICAgICAgICAgICAgICAgIC8vIEFzayBmb3IgY29uZmlybWF0aW9uIHRoYXQgdGhleSB3aWxsIGJlIHJlbW92ZWRcbiAgICAgICAgICAgICAgICBjb25zdCBjYW5SZW1vdmUgPSBhd2FpdCBjb25maXJtKHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ0lzIGl0IE9LIGlmIHdlIHJlbW92ZSBhbGwgcHJldmlvdXMgcmVwb3J0cz8nLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgLy8gSWYgd2UgYXJlIG5vdCBhbGxvd2VkIHRvIHJlbW92ZSB0aGVtLCB0aHJvdyBhIGhpc3N5IGZpdFxuICAgICAgICAgICAgICAgIGlmICghY2FuUmVtb3ZlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHJlcG9ydCBjYW4gb25seSBiZSBnZW5lcmF0ZWQgaWYgYWxsIHByZXZpb3VzIHJlcG9ydHMgaGF2ZSBiZWVuIHJlbW92ZWQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIHByZXZpb3VzIHJlcG9ydHNcbiAgICAgICAgICAgIHJtU3luYyhwYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgZGlyZWN0b3J5IGV4aXN0c1xuICAgIG1rZGlyU3luYyhwYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAvLyBSZXR1cm4gdGhlIHBhdGggdG8gdGhlIHJlcG9ydHMgZGlyZWN0b3J5XG4gICAgcmV0dXJuIHBhdGg7XG59O1xuIiwiaW1wb3J0IGlucXVpcmVyIGZyb20gJ2lucXVpcmVyJztcbmltcG9ydCBQcmVzc1RvQ29udGludWVQcm9tcHQgZnJvbSAnaW5xdWlyZXItcHJlc3MtdG8tY29udGludWUnO1xuaW5xdWlyZXIucmVnaXN0ZXJQcm9tcHQoJ3ByZXNzLXRvLWNvbnRpbnVlJywgUHJlc3NUb0NvbnRpbnVlUHJvbXB0KTtcbmV4cG9ydCBjb25zdCB3YWl0Rm9yVXNlcklucHV0ID0gYXN5bmMgKG1lc3NhZ2UsIGZvcmNlKSA9PiB7XG4gICAgY29uc3QgeyBrZXkgfSA9IGF3YWl0IGlucXVpcmVyLnByb21wdCh7XG4gICAgICAgIG5hbWU6ICdrZXknLFxuICAgICAgICB0eXBlOiAncHJlc3MtdG8tY29udGludWUnLFxuICAgICAgICBhbnlLZXk6IHRydWUsXG4gICAgICAgIHByZXNzVG9Db250aW51ZU1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICAgIHdoZW46ICFmb3JjZVxuICAgIH0pO1xuICAgIHJldHVybiBrZXkgfHwgeyB2YWx1ZTogdW5kZWZpbmVkIH07XG59O1xuIiwiaW1wb3J0IHsgcmVhZEZpbGVTeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgbW92ZSB9IGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IHBhcnNlLCBzdHJpbmdpZnkgfSBmcm9tICd5YW1sJztcbmltcG9ydCB7IGVtcHR5TGluZSwgUGVyZm9ybWFuY2VSZXBvcnRNZXNzYWdlcyB9IGZyb20gJy4uL21lc3NhZ2VzJztcbmltcG9ydCB7IHJlZ3Jlc3Npb25SZXBvcnQgfSBmcm9tICcuL2RjYXB0JztcbmltcG9ydCB7IGdldEFwdERpY3RvcnkgfSBmcm9tICcuL2dldEFwdERpcmVjdG9yeSc7XG5pbXBvcnQgeyBnZXRSZXBvcnQgfSBmcm9tICcuL2dldFJlcG9ydCc7XG5pbXBvcnQgeyBnZXRSZXBvcnREaXJlY3RvcnkgfSBmcm9tICcuL2dldFJlcG9ydERpcmVjdG9yeSc7XG5pbXBvcnQgeyB3YWl0Rm9yVXNlcklucHV0IH0gZnJvbSAnLi93YWl0Rm9yVXNlcklucHV0JztcbmV4cG9ydCBjb25zdCBnZW5lcmF0ZVBlcmZvcm1hbmNlUmVwb3J0ID0gYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAvLyBTaG93IHRoZSB3ZWxjb21lIG1lc3NhZ2VcbiAgICBjb25zb2xlLmxvZyhQZXJmb3JtYW5jZVJlcG9ydE1lc3NhZ2VzLmhlYWRlcik7XG4gICAgLy8gV2UgYXJlIGdvaW5nIHRvIHJlY29uZmlybSB0aGF0IHdlIGFyZSBydW5uaW5nIG9uIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKGFuZCBmZXRjaCBpdCBpZiByZXF1aXJlZClcbiAgICBjb25zdCBjd2QgPSBhd2FpdCBnZXRBcHREaWN0b3J5KG9wdGlvbnMuY3dkLCB0cnVlLCBvcHRpb25zLmZvcmNlKTtcbiAgICB0cnkge1xuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgcGVyZm9ybWFuY2UgcHJvZmlsZSByZXBvcnQgY29uZmlndXJhdGlvbiBZQU1MXG4gICAgICAgIGNvbnN0IHltbEZpbGVQYXRoID0gam9pbihjd2QsICdhcHAnLCAncmVwb3J0c19nZW5lcmF0aW9uJywgJ3BlcmZvcm1hbmNlX3Byb2ZpbGUueW1sJyk7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRzID0gcmVhZEZpbGVTeW5jKHltbEZpbGVQYXRoLCAndXRmOCcpO1xuICAgICAgICAvLyBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiwgc28gbGV0J3MgdHVybiBpdCBpbnRvIEpTT05cbiAgICAgICAgY29uc3QgY29uZmlndXJhdGlvbiA9IHBhcnNlKGNvbnRlbnRzKTtcbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgbWFuYWdlZCB0byBjcmVhdGUgYSB2YWxpZCBKU09OIG91dHB1dFxuICAgICAgICBpZiAoY29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgLy8gQWRkIHRoZSBwZXJmb3JtYW5jZSBiYXNlbGluZSBhbmQgcmVncmVzc2lvbiB0ZXN0IG91dHB1dCBkaXJlY3Rvcmllc1xuICAgICAgICAgICAgLy8gdG8gdGhlIHBlcmZvcm1hbmNlIHJlcG9ydCBnZW5lcmF0b3IgY29uZmlndXJhdGlvblxuICAgICAgICAgICAgY29uZmlndXJhdGlvbi5ydW5zID0gW3tcbiAgICAgICAgICAgICAgICAgICAgcnVuTmFtZTogJ3dpdGhvdXQgYXBwJyxcbiAgICAgICAgICAgICAgICAgICAgcnVuVHlwZTogJ2Jhc2VsaW5lJyxcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiAnL3Jlc3VsdHMvcnVuMSdcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bk5hbWU6ICd3aXRoIGFwcCcsXG4gICAgICAgICAgICAgICAgICAgIHJ1blR5cGU6ICdleHBlcmltZW50JyxcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiAnL3Jlc3VsdHMvcnVuMidcbiAgICAgICAgICAgICAgICB9XTtcbiAgICAgICAgICAgIC8vIFR1cm4gdGhlIGNvbmZpZ3VyYXRpb24gYmFjayBpbnRvIFlBTUxcbiAgICAgICAgICAgIGNvbnN0IG91dHB1dCA9IHN0cmluZ2lmeShjb25maWd1cmF0aW9uKTtcbiAgICAgICAgICAgIC8vIFJlcGxhY2UgdGhlIGRvY2tlciBwbGFjZWhvbGRlcnMgd2l0aCB0aGUgYWN0dWFsIGRpcmVjdG9yaWVzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyXG4gICAgICAgICAgICAvLyBUaGlzIHdpbGwgZ2l2ZSB0aGUgdXNlciBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgd2lsbCBoYXBwZW5cbiAgICAgICAgICAgIGNvbnN0IGh1bWFuUmVhZGFibGVPdXRwdXQgPSBvdXRwdXRcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgnL3Jlc3VsdHMvcnVuMScsIG9wdGlvbnMucmVzdWx0c0RpcjEpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoJy9yZXN1bHRzL3J1bjInLCBvcHRpb25zLnJlc3VsdHNEaXIyKTtcbiAgICAgICAgICAgIC8vIFRlbGwgdGhlIHVzZXIgdGhhdCB3ZSBhcmUgZ29pbmcgdG8gb3ZlcndyaXRlIHRoZSBleGlzdGluZyBjb25maWd1cmF0aW9uXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgXG4gIFRoZSBwZXJmb3JtYW5jZV9wcm9maWxlLnltbCBmaWxlIHdpbGwgYmUgdXBkYXRlZCB3aXRoIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbjpcblxuJHtodW1hblJlYWRhYmxlT3V0cHV0fVxuXG4gIFRoZSBjb25maWd1cmF0aW9uIHdpbGwgYmUgd3JpdHRlbiB0byBkaXNrIGFuZCBvdmVyd3JpdGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbjpcbiAgJHt5bWxGaWxlUGF0aH1cbmApO1xuICAgICAgICAgICAgLy8gR2l2ZSB0aGUgdXNlciBhIG1vbWVudCB0byBwcm9jZXNzIHRoaXMgaW5mb3JtYXRpb25cbiAgICAgICAgICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIGNvbnRpbnVlLi4uJywgb3B0aW9ucy5mb3JjZSk7XG4gICAgICAgICAgICBlbXB0eUxpbmUoKTtcbiAgICAgICAgICAgIC8vIFdyaXRlIHRoZSBhZGp1c3RlZCBwZXJmb3JtYW5jZSByZXBvcnQgZ2VuZXJhdG9yIGNvbmZpZ3VyYXRpb24gdG8gZGlza1xuICAgICAgICAgICAgd3JpdGVGaWxlU3luYyh5bWxGaWxlUGF0aCwgb3V0cHV0LCB7IGVuY29kaW5nOiAndXRmOCcgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICAvLyBPaCBubywgc29tZXRoaW5nIHdlbnQgd3JvbmcuIEFib3J0IGFib3J0IGFib3J0IVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcGVyZm9ybWFuY2UgdGVzdGluZyByZXBvcnQgZ2VuZXJhdGlvbiBjb25maWd1cmF0aW9uJyk7XG4gICAgfVxuICAgIC8vIEdldCB0aGUgcmVzdWx0cyBkaXJlY3RvcnkgKGFuZCBtYWtlIHN1cmUgaXQgaXMgZW1wdHkpXG4gICAgY29uc3QgcmVwb3J0QmFzZURpciA9IGF3YWl0IGdldFJlcG9ydERpcmVjdG9yeShjd2QsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIEdlbmVyYXRlIHRoZSBhY3R1YWwgcmVwb3J0XG4gICAgYXdhaXQgcmVncmVzc2lvblJlcG9ydChjd2QsIG9wdGlvbnMucmVzdWx0c0RpcjEsIG9wdGlvbnMucmVzdWx0c0RpcjIpO1xuICAgIC8vIEdldCB0aGUgcmVwb3J0IGRpcmVjdG9yeVxuICAgIGNvbnN0IHJlcG9ydERpciA9IGdldFJlcG9ydChyZXBvcnRCYXNlRGlyLCAncGVyZm9ybWFuY2UnKTtcbiAgICAvLyBXZSBoYXZlIGEgc3VjY2Vzc2Z1bCB0ZXN0LCBzbyB3ZSBzaG91bGQgc3RvcmUgdGhlIHJlc3VsdHMgaW4gYSAncHJpdmF0ZScgc3ViZGlyZWN0b3J5IG9mIEFQVFxuICAgIGF3YWl0IG1vdmUocmVwb3J0RGlyLCBqb2luKG9wdGlvbnMub3V0cHV0RGlyLCAncGVyZm9ybWFuY2VfcHJvZmlsZScpLCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcbn07XG4iLCJpbXBvcnQgeyByZWFkRmlsZVN5bmMsIHdyaXRlRmlsZVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBtb3ZlIH0gZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgcGFyc2UsIHN0cmluZ2lmeSB9IGZyb20gJ3lhbWwnO1xuaW1wb3J0IHsgZW1wdHlMaW5lLCBTY2FsYWJpbGl0eVJlcG9ydE1lc3NhZ2VzIH0gZnJvbSAnLi4vbWVzc2FnZXMnO1xuaW1wb3J0IHsgc2NhbGFiaWxpdHlSZXBvcnQgfSBmcm9tICcuL2RjYXB0JztcbmltcG9ydCB7IGdldEFwdERpY3RvcnkgfSBmcm9tICcuL2dldEFwdERpcmVjdG9yeSc7XG5pbXBvcnQgeyBnZXRSZXBvcnQgfSBmcm9tICcuL2dldFJlcG9ydCc7XG5pbXBvcnQgeyBnZXRSZXBvcnREaXJlY3RvcnkgfSBmcm9tICcuL2dldFJlcG9ydERpcmVjdG9yeSc7XG5pbXBvcnQgeyB3YWl0Rm9yVXNlcklucHV0IH0gZnJvbSAnLi93YWl0Rm9yVXNlcklucHV0JztcbmV4cG9ydCBjb25zdCBnZW5lcmF0ZVNjYWxhYmlsaXR5UmVwb3J0ID0gYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAvLyBTaG93IHRoZSB3ZWxjb21lIG1lc3NhZ2VcbiAgICBjb25zb2xlLmxvZyhTY2FsYWJpbGl0eVJlcG9ydE1lc3NhZ2VzLmhlYWRlcik7XG4gICAgLy8gV2UgYXJlIGdvaW5nIHRvIHJlY29uZmlybSB0aGF0IHdlIGFyZSBydW5uaW5nIG9uIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKGFuZCBmZXRjaCBpdCBpZiByZXF1aXJlZClcbiAgICBjb25zdCBjd2QgPSBhd2FpdCBnZXRBcHREaWN0b3J5KG9wdGlvbnMuY3dkLCB0cnVlLCBvcHRpb25zLmZvcmNlKTtcbiAgICB0cnkge1xuICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgc2NhbGFiaWxpdHkgcmVwb3J0IGNvbmZpZ3VyYXRpb24gWUFNTFxuICAgICAgICBjb25zdCB5bWxGaWxlUGF0aCA9IGpvaW4oY3dkLCAnYXBwJywgJ3JlcG9ydHNfZ2VuZXJhdGlvbicsICdzY2FsZV9wcm9maWxlLnltbCcpO1xuICAgICAgICBjb25zdCBjb250ZW50cyA9IHJlYWRGaWxlU3luYyh5bWxGaWxlUGF0aCwgJ3V0ZjgnKTtcbiAgICAgICAgLy8gV2UgbmVlZCB0byB1cGRhdGUgdGhlIGNvbmZpZ3VyYXRpb24sIHNvIGxldCdzIHR1cm4gaXQgaW50byBKU09OXG4gICAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBwYXJzZShjb250ZW50cyk7XG4gICAgICAgIC8vIENoZWNrIGlmIHdlIG1hbmFnZWQgdG8gY3JlYXRlIGEgdmFsaWQgSlNPTiBvdXRwdXRcbiAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgIC8vIEFkZCB0aGUgc2NhbGFiaWxpdHkgdGVzdCBvdXRwdXQgZGlyZWN0b3JpZXMgdG8gdGhlIHJlcG9ydCBnZW5lcmF0b3IgY29uZmlndXJhdGlvblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMucHJvZHVjdCA9PT0gJ2JhbWJvbycpIHtcbiAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLnRpdGxlID0gJ0RDQVBUIFBlcmZvcm1hbmNlIFRlc3RpbmcgZm9yIEJhbWJvbyc7XG4gICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbi5jaGVja19hY3Rpb25zX2NvdW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbi5ydW5zID0gW3tcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bk5hbWU6ICd3aXRob3V0IGFwcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBydW5UeXBlOiAnYmFzZWxpbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiAnL2RjYXB0L3NjYWxlX3Jlc3VsdHNfMSdcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgcnVuTmFtZTogJ3dpdGggYXBwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1blR5cGU6ICdleHBlcmltZW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aDogJy9kY2FwdC9zY2FsZV9yZXN1bHRzXzInXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bk5hbWU6ICd3aXRoIGFwcCBhbmQgYXBwLXNwZWNpZmljIGFjdGlvbnMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcnVuVHlwZTogJ2V4cGVyaW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiAnL2RjYXB0L3NjYWxlX3Jlc3VsdHNfMydcbiAgICAgICAgICAgICAgICAgICAgfV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLnJ1bnMgPSBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgcnVuTmFtZTogJzEgTm9kZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBydW5UeXBlOiAnYmFzZWxpbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiAnL2RjYXB0L3NjYWxlX3Jlc3VsdHNfMSdcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgcnVuTmFtZTogJzIgTm9kZXMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcnVuVHlwZTogJ2V4cGVyaW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiAnL2RjYXB0L3NjYWxlX3Jlc3VsdHNfMidcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgcnVuTmFtZTogJzQgTm9kZXMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcnVuVHlwZTogJ2V4cGVyaW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoOiAnL2RjYXB0L3NjYWxlX3Jlc3VsdHNfMydcbiAgICAgICAgICAgICAgICAgICAgfV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBUdXJuIHRoZSBjb25maWd1cmF0aW9uIGJhY2sgaW50byBZQU1MXG4gICAgICAgICAgICBjb25zdCBvdXRwdXQgPSBzdHJpbmdpZnkoY29uZmlndXJhdGlvbik7XG4gICAgICAgICAgICAvLyBSZXBsYWNlIHRoZSBkb2NrZXIgcGxhY2Vob2xkZXJzIHdpdGggdGhlIGFjdHVhbCBkaXJlY3RvcmllcyBwcm92aWRlZCBieSB0aGUgdXNlclxuICAgICAgICAgICAgLy8gVGhpcyB3aWxsIGdpdmUgdGhlIHVzZXIgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0IHdpbGwgaGFwcGVuXG4gICAgICAgICAgICBjb25zdCBodW1hblJlYWRhYmxlT3V0cHV0ID0gb3V0cHV0XG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoJy9kY2FwdC9zY2FsZV9yZXN1bHRzXzEnLCBvcHRpb25zLnJlc3VsdHNEaXIxKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCcvZGNhcHQvc2NhbGVfcmVzdWx0c18yJywgb3B0aW9ucy5yZXN1bHRzRGlyMilcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgnL2RjYXB0L3NjYWxlX3Jlc3VsdHNfMycsIG9wdGlvbnMucmVzdWx0c0RpcjMpO1xuICAgICAgICAgICAgLy8gVGVsbCB0aGUgdXNlciB0aGF0IHdlIGFyZSBnb2luZyB0byBvdmVyd3JpdGUgdGhlIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb25cbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBcbiAgVGhlIHNjYWxlX3Byb2ZpbGUueW1sIGZpbGUgd2lsbCBiZSB1cGRhdGVkIHdpdGggdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uOlxuXG4ke2h1bWFuUmVhZGFibGVPdXRwdXR9XG5cbiAgVGhlIGNvbmZpZ3VyYXRpb24gd2lsbCBiZSB3cml0dGVuIHRvIGRpc2sgYW5kIG92ZXJ3cml0ZSBleGlzdGluZyBjb25maWd1cmF0aW9uOlxuICAke3ltbEZpbGVQYXRofVxuYCk7XG4gICAgICAgICAgICAvLyBHaXZlIHRoZSB1c2VyIGEgbW9tZW50IHRvIHByb2Nlc3MgdGhpcyBpbmZvcm1hdGlvblxuICAgICAgICAgICAgYXdhaXQgd2FpdEZvclVzZXJJbnB1dCgnUHJlc3MgYSBrZXkgdG8gY29udGludWUuLi4nLCBvcHRpb25zLmZvcmNlKTtcbiAgICAgICAgICAgIGVtcHR5TGluZSgpO1xuICAgICAgICAgICAgLy8gV3JpdGUgdGhlIGFkanVzdGVkIHNjYWxhYmlsaXR5IHJlcG9ydCBnZW5lcmF0b3IgY29uZmlndXJhdGlvbiB0byBkaXNrXG4gICAgICAgICAgICB3cml0ZUZpbGVTeW5jKHltbEZpbGVQYXRoLCBvdXRwdXQsIHsgZW5jb2Rpbmc6ICd1dGY4JyB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIC8vIE9oIG5vLCBzb21ldGhpbmcgd2VudCB3cm9uZy4gQWJvcnQgYWJvcnQgYWJvcnQhXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHJldHJpZXZlIHRoZSBzY2FsYWJpbGl0eSByZXBvcnQgZ2VuZXJhdGlvbiBjb25maWd1cmF0aW9uJyk7XG4gICAgfVxuICAgIC8vIEdldCB0aGUgcmVzdWx0cyBkaXJlY3RvcnkgKGFuZCBtYWtlIHN1cmUgaXQgaXMgZW1wdHkpXG4gICAgY29uc3QgcmVwb3J0QmFzZURpciA9IGF3YWl0IGdldFJlcG9ydERpcmVjdG9yeShjd2QsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIEdlbmVyYXRlIHRoZSBhY3R1YWwgcmVwb3J0XG4gICAgYXdhaXQgc2NhbGFiaWxpdHlSZXBvcnQoY3dkLCBvcHRpb25zLnJlc3VsdHNEaXIxLCBvcHRpb25zLnJlc3VsdHNEaXIyLCBvcHRpb25zLnJlc3VsdHNEaXIzKTtcbiAgICAvLyBHZXQgdGhlIHJlcG9ydCBkaXJlY3RvcnlcbiAgICBjb25zdCByZXBvcnREaXIgPSBnZXRSZXBvcnQocmVwb3J0QmFzZURpciwgJ3NjYWxhYmlsaXR5Jyk7XG4gICAgLy8gV2UgaGF2ZSBhIHN1Y2Nlc3NmdWwgdGVzdCwgc28gd2Ugc2hvdWxkIHN0b3JlIHRoZSByZXN1bHRzIGluIGEgJ3ByaXZhdGUnIHN1YmRpcmVjdG9yeSBvZiBBUFRcbiAgICBhd2FpdCBtb3ZlKHJlcG9ydERpciwgam9pbihvcHRpb25zLm91dHB1dERpciwgJ3NjYWxlX3Byb2ZpbGUnKSwgeyBvdmVyd3JpdGU6IHRydWUgfSk7XG59O1xuIiwiaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IGV4aXN0c1N5bmMsIG1rZGlyU3luYywgcm1TeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgZ2xvYiB9IGZyb20gJ2dsb2InO1xuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ29zJztcbmltcG9ydCB7IGJhc2VuYW1lLCBqb2luLCByZXNvbHZlIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBPcGVuIH0gZnJvbSAndW56aXBwZXInO1xuaW1wb3J0IHsgZG93bmxvYWRGaWxlIH0gZnJvbSAnLi9kb3dubG9hZEZpbGUnO1xuaW1wb3J0IHsgZ2V0VXJsQnlBcHBLZXkgfSBmcm9tICcuL2dldFVybEJ5QXBwS2V5JztcbmV4cG9ydCBjb25zdCBnZW5lcmF0ZVNDQVJlcG9ydCA9IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgLy8gUGxhY2Vob2xkZXIgZm9yIHRlbXBvcmFyeSBkaXJlY3RvcnlcbiAgICBjb25zdCB0bXBEaXIgPSBqb2luKGhvbWVkaXIoKSwgJy5kY2R4JywgJ3RtcCcpO1xuICAgIC8vIFBsYWNlaG9sZGVyIGZvciBhcmNoaXZlIGRpcmVjdG9yeVxuICAgIGNvbnN0IGFyY2hpdmVEaXIgPSBqb2luKHRtcERpciwgYC4ke29wdGlvbnMuYXBwS2V5fWApO1xuICAgIC8vIFBsYWNlaG9sZGVyIGZvciB0aGUgcGF0aCB0byB0aGUgSkFSIGZpbGVcbiAgICBsZXQgZmlsZSA9IG9wdGlvbnMuYXJjaGl2ZTtcbiAgICAvLyBDaGVjayBpZiB3ZSBuZWVkIHRvIGRvd25sb2FkIHRoZSBmaWxlIGJhc2VkIG9uIHRoZSBhcHBLZXlcbiAgICAvLyBJZiBib3RoIGFyY2hpdmUgYW5kIGFwcEtleSB3ZXJlIHByb3ZpZGVkLCB3ZSB3aWxsIHVzZSB0aGUgYXJjaGl2ZVxuICAgIGlmICghb3B0aW9ucy5hcmNoaXZlICYmIG9wdGlvbnMuYXBwS2V5KSB7XG4gICAgICAgIC8vIEdldCB0aGUgZG93bmxvYWQgVVJMIGJhc2VkIG9uIHRoZSBhcHBLZXlcbiAgICAgICAgY29uc3QgdXJsID0gYXdhaXQgZ2V0VXJsQnlBcHBLZXkob3B0aW9ucy5hcHBLZXkpO1xuICAgICAgICAvLyBEb3dubG9hZCB0aGUgZmlsZSBmcm9tIE1QQUNcbiAgICAgICAgY29uc29sZS5sb2coJ0Rvd25sb2FkaW5nIGFyY2hpdmUgZnJvbSB0aGUgQXRsYXNzaWFuIE1hcmtldHBsYWNlJyk7XG4gICAgICAgIGZpbGUgPSBhd2FpdCBkb3dubG9hZEZpbGUodXJsKTtcbiAgICB9XG4gICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBhIHZhbGlkIHBhdGggdG8gdGhlIEpBUiBmaWxlXG4gICAgaWYgKCFmaWxlIHx8ICFleGlzdHNTeW5jKHJlc29sdmUoZmlsZSkpKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBVbmFibGUgdG8gbG9jYXRlIHRoZSBhcmNoaXZlIGluIHBhdGggJHtmaWxlfWApO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChmaWxlLmVuZHNXaXRoKCcub2JyJykpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1RoZSBhcmNoaXZlIGlzIGFuIE9TR2kgQnVuZGxlIFJlcG9zaXRvcnkgKE9CUiknKTtcbiAgICAgICAgY29uc29sZS5sb2coYEV4dHJhY3RpbmcgYXJjaGl2ZSB0byBhIHRlbXBvcmFyeSBsb2NhdGlvbiAoJHthcmNoaXZlRGlyfSlgKTtcbiAgICAgICAgY29uc3QgYXJjaGl2ZSA9IGF3YWl0IE9wZW4uZmlsZShmaWxlKTtcbiAgICAgICAgYXdhaXQgYXJjaGl2ZS5leHRyYWN0KHsgcGF0aDogYXJjaGl2ZURpciB9KTtcbiAgICAgICAgLy8gR2V0IHRoZSBtYWluIEpBUiBmaWxlICh3aGljaCBpcyBsb2NhdGVkIGluIHRoZSByb290IGRpcmVjdG9yeSlcbiAgICAgICAgY29uc3QgW3JlbGF0aXZlUGF0aFRvSmFyXSA9IGF3YWl0IGdsb2IoYCouamFyYCwgeyBjd2Q6IGFyY2hpdmVEaXIgfSk7XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBhY3R1YWxseSBmb3VuZCB0aGUgbWFpbiBqYXJcbiAgICAgICAgaWYgKCFyZWxhdGl2ZVBhdGhUb0phcikge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ0ZhaWxlZCB0byBsb2NhdGUgdGhlIG1haW4gSkFSIGZpbGUgaW4gdGhlIGFyY2hpdmUnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBGb3VuZCB0aGUgbWFpbiBhcnRpZmFjdCAoJHtyZWxhdGl2ZVBhdGhUb0phcn0pYCk7XG4gICAgICAgICAgICAvLyBHZXQgdGhlIGZ1bGwgcGF0aCB0byB0aGUgSkFSIGZpbGVcbiAgICAgICAgICAgIGZpbGUgPSBqb2luKGFyY2hpdmVEaXIsIHJlbGF0aXZlUGF0aFRvSmFyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBDcmVhdGUgdGhlIG91dHB1dCBkaXJlY3RvcnlcbiAgICBta2RpclN5bmMob3B0aW9ucy5vdXRwdXREaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdSdW5uaW5nIE9XQVNQIGRlcGVuZGVuY3ktY2hlY2sgd2l0aCB0aGUgZm9sbG93aW5nIGFyZ3VtZW50czonKTtcbiAgICAgICAgY29uc29sZS5sb2coYG93YXNwL2RlcGVuZGVuY3ktY2hlY2sgLS1udmRBcGlLZXkgJHtvcHRpb25zLm52ZEFwaUtleX0gLS1mYWlsT25DVlNTIDAgLS1zY2FuICR7ZmlsZX0gLS1zdXBwcmVzc2lvbiBodHRwczovL2RjYXB0LWRvd25sb2Fkcy5zMy5hbWF6b25hd3MuY29tL2F0bGFzc2lhbi1zZWN1cml0eS1zY2FubmVyLWRjLWFwcHMtc3VwcHJlc3Npb25zLnhtbCAtLW91dCAke29wdGlvbnMub3V0cHV0RGlyfWApO1xuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkb2NrZXIgPSBzcGF3bignZG9ja2VyJywgW1xuICAgICAgICAgICAgICAgICdydW4nLFxuICAgICAgICAgICAgICAgIGAtLXB1bGw9YWx3YXlzYCxcbiAgICAgICAgICAgICAgICAnLXUnLCAnMDowJyxcbiAgICAgICAgICAgICAgICAnLWUnLCAndXNlcj1yb290JyxcbiAgICAgICAgICAgICAgICAnLXYnLCBgJHtmaWxlfTovc3JjLyR7YmFzZW5hbWUoZmlsZSl9YCxcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zLmRhdGFEaXIgPyBbJy12JywgYCR7b3B0aW9ucy5kYXRhRGlyfTovdXNyL3NoYXJlL2RlcGVuZGVuY3ktY2hlY2svZGF0YWBdIDogW10sXG4gICAgICAgICAgICAgICAgJy12JywgYCR7b3B0aW9ucy5vdXRwdXREaXJ9Oi9yZXBvcnRgLFxuICAgICAgICAgICAgICAgICdvd2FzcC9kZXBlbmRlbmN5LWNoZWNrJyxcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zLmZhaWxPbkVycm9yID8gWyctLWZhaWxPbkNWU1MnLCAnMCddIDogW10sXG4gICAgICAgICAgICAgICAgJy0tbnZkQXBpS2V5JywgYCR7b3B0aW9ucy5udmRBcGlLZXl9YCxcbiAgICAgICAgICAgICAgICAnLS1zY2FuJywgYC9zcmNgLFxuICAgICAgICAgICAgICAgICctLXN1cHByZXNzaW9uJywgJ2h0dHBzOi8vZGNhcHQtZG93bmxvYWRzLnMzLmFtYXpvbmF3cy5jb20vYXRsYXNzaWFuLXNlY3VyaXR5LXNjYW5uZXItZGMtYXBwcy1zdXBwcmVzc2lvbnMueG1sJyxcbiAgICAgICAgICAgICAgICAnLS1vdXQnLCAnL3JlcG9ydCdcbiAgICAgICAgICAgIF0sIHsgc3RkaW86ICdpbmhlcml0JyB9KTtcbiAgICAgICAgICAgIGRvY2tlci5vbignZXhpdCcsIChjb2RlKSA9PiAoY29kZSA9PT0gMCkgPyByZXNvbHZlKCkgOiByZWplY3QobmV3IEVycm9yKGBEb2NrZXIgZXhpdGVkIHdpdGggY29kZSAke2NvZGV9YCkpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnNvbGUubG9nKGDinJQgRmluaXNoZWQgcnVubmluZyB0aGUgT1dBU1AgZGVwZW5kZW5jeSBjaGVjayBzb2Z0d2FyZSBjb21wb3NpdGlvbiBhbmFseXNpcyAoU0NBKSBzY2FubmVyYCk7XG4gICAgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICBybVN5bmMoYXJjaGl2ZURpciwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICAgICAgICAvLyBPbmx5IHJlbW92ZSB0aGUgZmlsZSBpZiB3ZSBkb3dubG9hZGVkIGl0IGZyb20gTVBBQ1xuICAgICAgICBpZiAoIW9wdGlvbnMuYXJjaGl2ZSAmJiBmaWxlKSB7XG4gICAgICAgICAgICBybVN5bmMoZmlsZSwgeyBmb3JjZTogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCJleHBvcnQgY29uc3QgdGltZWJvbWIgPSB7XG4gICAgJ2ppcmEnOiAnQUFBQ0JBME9EQW9QZU5wOWtsMXYyakFVaHUveks0NjBPeVFIU0x1VklrVWFUYndOVkJLVWhFbmJ1Z3NURHVBMnNTUGJnYkZmUHhPQzFpKzR5RVhPNSt2blBSK3lHaUdTVy9DdW9YYzd2Qm9NdlQ0RU5BT3Y1L1djdFVJVUcxbFZxTng3bnFQUVNKZmNjQ2w4R21VMG1TWGpsRHBSWFM1UXhhdTVScVY5MG5jQ0tRekxUY1JLOUV1OTQ0SXAvY1EvTTFNd3JUa1RiaTVMWjFhcmZNTTBoc3lnNy9YNkE5THZFODl6MmozWnZzSm1RQkJQcHpRSnhxUDdVNHIrcWJqYU4zMnpHKy9iYVIyZE1sNmMzNWVpMnFJYWgvNGR2YUhrT3Z6cGtVL3g1SVo4dmJvZE9JOWNNYmRTY2xubnhqMzhFQzFYWnNjVXVuWXkzNkp2VkkzT3hHWm1iWlhkendJVTVsVkpXaTkwcm5qVlFHb2k3MEI4NzNHTmhQT1FPNTFPRkdma1M1eVFXUktIOHlBYnh4R1pwOVFtL0VDaHBiR0V4UjdNQnFHZEFsVGtjb2tLN01NZU1UZndhMk5NOVREc2R0ZlNmUUduV3h3N0NCNDdmcnNRU2hEU3dKSnJvL2lpTm1nbmN3MUdRbDVySTB0cnRldFk0c0tnWUNKL1k0cVZGU1IwbE5HUTNQMDRhRHhyVEt2V09qTVhUMEx1eENVMzN0eGFTaVBmZnVSanIzZnNPL21DNm9nL1Ztc211R1lOMElqOTNURlljVlh1blFhYURiNCt3SmJGZDd2ZzBPSTVJZjUzTkVOdG9LMkFsVlF3R1NjalNGdDVscmpkV3ltdThXRUlnU3d0cHB5ekFzTGd4Ums4UDVoRzlQTUEzYktpUHNwZHNVTGpKUndYN3VrZjUvTlg3VEF0QWhVQWhRU0h6OURneWNPWDd3Y3dFUk1KYjNUTEdiNENGR2tCL3hVV1NSSzNCWkxyUEY5Um42Wm1yVXFKWDAyb2MnLFxuICAgICdjb25mbHVlbmNlJzogJ0FBQUN6ZzBPREFvUGVOcDlWTzl2MmpBUS9aNi93dEsrSVlXR3NFS0hGR21RbUphdS9HZ0ltOWlZSmhNT1lwcllrZTFBNGErZlNjaEdLdHFQUHZ2ZXZYdjN6cC82Z3FMSExFYjJIYktzVHZOenA5bEM5OE1BMlpiZE5LWWdkaUFHbnRQRFEyejY4OEhjZEgvYU03UDVvMmtaVHpRRUppRTRwREFpQ1RnQm5nYUQwYjBSQ3I1ZjFTOXVIZmNVV1hTUUJ6dUllUXJDQ0RsYjEwbW82QTRjSlRMUVNWbElsekZVZ2dwSThpY2tNYkFWRWJJK3lwSWxpUEc2UjVJbDV6NGtYRUYzQTB4SnAxR3l3YThwRlFlUEtIQW1EZHQ2K0E5Y0pWUUVLNXlXbWhNVjhIR1pMUldrd3JGOFBaTWdwR1BmR2g3SVVOQlVVYzZjQUtSQ2NWRVlyYmxBYVp4dEtFT3JzcWo4Vi9VUzg1enhYZCtmVUd3RDcwaWNrUnd5ZjdBUkFDemlxVVlvKzhJcm10L2pVWUQ5aVQrWVltTklLRlBBQ0F1dnlISWFRRVVTSFlnejBHOHJvcmdDOHJwNXF2YUVaVnAzcHQwdThzdmUzVGlUQ3NTSXIwQTZsbEdyMVZ3ZmR3UHNtYjI1UGpqYlZ3cTJFY1pjbTZuUzZES1grSTNpVDF5UC9DeTQyVEJlNEZBSzBXaFpWdHU2YXpZYlplWmxCMFUyd3JwbmtRb3FxNDBVeXN0NjdScUI5elU4azY0b2xZZXFLbkdtTkN6V2lzZU9Vb0t3aExMb0sxRXhrWklTVmc5NWNyM1pOL1lxZHVlU1lXNjQ5L21kcmZKQVpPUU0zYjNiOTZEUnVoVmszMjYxa2tGdmV4d2U0MVVRdEpOMTJ1NUd6NkdjUFQ3UG43MUg3MHQ2OUNQY2J4L2E5cmNqM3JEdXdsazR4cHJLQ0E1Vk4rb0pqc2FCMlIvNzVzUWZlek0zR0l4SDVteUtUNlBOL1FFcnREd2dGUUU2RTlWRENMVVp0TjhGMzBLbzBLOUlxWFRSdWJuWjhIcEZsWnR6QXlZVUdiL3J5T09JY1lWV1ZDcEJsNWtDalV3bFVoeUYybVk4MFdhb1h4ZHpFaE9XZTJZc05vUlJXV3hNdDZ4WC9oSDZQNXV4RjhiM3JMSklsejFMcFFXOTVwUVB2cWZMcTBrbXdvaEllTHMybDlQTXpmUTQ4THZ2V1RiZk1ZMUFYRGc5S0pETENWMkM5SFVNSCtDYUpmT2Z1ZGkvdjBrSUdWc3dMQUlVRU1ROVg3N2dxR0JkZkgwSEl6QmFWOE5hZFBVQ0ZCbitSaVVBNEQrSXFWUXBUVG91TFZZNjZhQ0dYMDIxMjEnLFxuICAgICdiaXRidWNrZXQnOiAnQUFBQm1nME9EQW9QZU5wOVVsMXYwekFVZmMrdnNNUmJKYWRKdGpHcFVpUzJKSlJPTk9sYUI0U0FCOWU5VzB4VHU3SnZDdjMzZUltRE9vUjR2ZWZlNC9QaE41OWhSNWJja1BpV1JOZXpLSjVGQ1prdkdVbWlKQTR5clpBTExQa0JVckhYb3RFbnU1ZUJSVzZiOEtNVW9DeXc4eEg2QlZaczJLS2NlM1RKcFVKUVhBa29maDJsT2VjY0lWMWRmUmhKQzdmUlhySnV3SnpBTFBMMC9xRitwSTlYR2FQeit1R0dzcHZia2RSeDhBd2NyMG5SZE9DbmxYbm1TbHFPVXF2MERsdHVyZVRLZzZ2T2lJWmI2SjlQb3ZpYVJtOXBISHMwTTlDZi9SdjFEdi9TUDVsTXlvclI5OVdhcnRaVlhtZHNVWlcwM2hRT1NIdENGK24yVExBQjRobElvWVRlZ1NGSG8zK0FRUEsxUVR4K20wMm56enJrbytKUTZNTzBIUzRvREJmZlE1SnJvalNTbmJSbzVMWkRjTXpTRXRSRWRCYjFBWXdOUnpzWGZmMEpnakN3TGpHLzRtQjVnaUUrSnpoYkYzZXN5T245bHhmMUYyMTQ1YTZPV3UyVi9xbUMvMmRWZG9jdG1PcXB0azVQR2lkK1hKeDQydzNOUFBIV1F1RDlmWEpiTDhQa3RmTGhVMkF2K04ycllNWTZ1VUVGcG5jWS9BWUNnZkZBTUN3Q0ZIemtCbGtHSC92UmRUZWVCU2ZVTXpVRGI0VzJBaFF5TTg5M1dQZzJROG9RQVlSZEJTeUtlVlVkb2c9PVgwMmpyJyxcbiAgICAnYmFtYm9vJzogJ0FBQUIzdzBPREFvUGVOcDlVbHRyMnpBWWZmZXZFT3d0b01SMTBxWUxHSmJZV3NubzdHQTdnOTBlWlBscm90V1dqQ1Nuelg3OUZGOElZV2tmRFBKM09lZHd6dmNoMnpkb1dTdmt6cEY3djVqZExyd3BDa2lhSWMvMVBPZVJNeEFhc21NTkVhM0F6MnhuSFQwNGdRSnF1QlFoTmVCNzd2UUd1elBzM2prNXJYSXB4NVFaZmdEZnFBYUdVdFJVT2FqNGFkWCtQa3BHeStVT2hORSt2bkdHNWxhRGFnczlMM210dVRvT0pGNVBramE1Wm9yWEp3RVhIRytwSlFkYU52Uy9jWXRMQXlzQlZGZnUxOWVodnhYUFFyNElKd1YxQUdVTEt6SW5lQmIrOFBCZC9HV09INllmNzUxTm85aWVhdWpsZVlNSEtZbDgrK0ZiMTNWR28xRVVaL2h6bk9CTkVvZmJJRnZIRWQ2bXhEYjgxa1FvVUg1RVpnK29wMGRFTUZtQVFyV1NmNEFaOUhOdlRQMXJNWm5zckxHbXBGcHpLc1pNVnBPeTI4RFFiZndlbzFBaUlRMHF1RGFLNTQwQmk4dzFNaEt4Umh0WldYdkhUZ2huK3pMUUJ2VTQ2RWxhMXJMWmNZRUtPRUFwYXp2dmZLWGNlaVNvWUcva2NUWGhUVWxGRytYVmJnS1ZOSEErZ0Y3Qk44dDNVdVU1c2RwUndYVVhHbm1sVlYwQ0NtUlZVM0c4RXZmNU1LVXc5dnFJRlYzNnRYN21vTmpmbzdDUFR4ZmVuWklKRXJMTVNJaFgzMDlwdkRkOFNVZ0szc21LTXBKc2tuVktCdHIyNnQ0RCtnZDNBQzVxTUN3Q0ZIT2FUV2ZGdkxDTEpQZnQzcWt0Vm8zRmFmbVpBaFJvamI5SUF4ajhLRXFQRFF5MHN0b3MzOTRTUVE9PVgwMm1xJ1xufTtcbmV4cG9ydCBjb25zdCBhcHAzaG91ciA9ICdBQUFCQ0EwT0RBb1BlTnBkajAxUHdrQVVSZmZ6S3laeFoxSXlVekFSa2xsUTI0Z1JhUU10R25hUDhWRW10alBOZkZUNTl5SlZGeXpmdWJrbjc5NlV4MEJ6NlNtYlVNNW5iRHpqOTdSSVN4b3pIcE1VbmJTcTg4cG9VYUx6dEZFU3RVTjZNSloyVGFpVnB1L1lZMk02dEk2c1FydEhteDhxZDc0RVorVEJJdnlVVS9Bb1lzN2ppRTBqemtuV1F4TXVpZkEySUJsVWJuUTdBdWxWandOOUFhVTlhdEFTczY5TzJkTkZVNHdYSkxjMWFPVUd3OXczNEp3Q1RUWm9lN1JQcVVnZXAyWDBWbTBuMGZOdXQ0Z1N4bC9KY25qOW5GYjZRNXRQL1VldTNMKzBQSFc0Z2haRm1tMnpaVjVrNi85NUNiUjdZOWJZR28vekdyVjNJcjRqUmJEeUNBNnZ0MzRETzhwM1NEQXNBaFFuSmpMRDVrOUZyM3VhSXprWEtmODNvNXZEZFFJVWU0WGVxdU5DQzNEKzlodDlaWWhOWkZLbW5oYz1YMDJkaCc7XG4iLCJpbXBvcnQgeyBpbnB1dCB9IGZyb20gJ0BpbnF1aXJlci9wcm9tcHRzJztcbmltcG9ydCB7IGV4aXN0c1N5bmMsIHJlYWRGaWxlU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IHRpbWVib21iIH0gZnJvbSAnLi4vLi4vaGVscGVycy9saWNlbmNlcyc7XG5pbXBvcnQgeyBwcm92aXNpb25pbmcgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5leHBvcnQgY29uc3QgZ2V0SG9zdExpY2Vuc2UgPSAocHJvZHVjdCwgbGljZW5zZSwgZm9yY2UpID0+IHtcbiAgICBjb25zdCBwcm9kdWN0TGljZW5zZSA9IGxpY2Vuc2UgJiYgZXhpc3RzU3luYyhsaWNlbnNlKSA/IHJlYWRGaWxlU3luYyhsaWNlbnNlLCAndXRmOCcpIDogbGljZW5zZTtcbiAgICBpZiAoZm9yY2UpIHtcbiAgICAgICAgcmV0dXJuIHByb2R1Y3RMaWNlbnNlIHx8IHRpbWVib21iW3Byb2R1Y3RdO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZyhwcm92aXNpb25pbmcuYXNrRm9ySG9zdExpY2Vuc2UpO1xuICAgIHJldHVybiBpbnB1dCh7XG4gICAgICAgIG1lc3NhZ2U6IGBMaWNlbnNlYCxcbiAgICAgICAgZGVmYXVsdDogcHJvZHVjdExpY2Vuc2UgfHwgdGltZWJvbWJbcHJvZHVjdF0sXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSk7XG59O1xuIiwiaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAnZGF0ZS1mbnMnO1xuaW1wb3J0IHsgaG9tZWRpciB9IGZyb20gJ29zJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmV4cG9ydCBjb25zdCBnZXRPdXRwdXREaXJlY3RvcnkgPSAoY3dkLCB0aW1lc3RhbXApID0+IHtcbiAgICAvLyBDcmVhdGUgdGhlIHRlc3QgcnVuIElEICh1c2VkIGluIHRoZSBvdXRwdXQgZGlyZWN0b3J5KVxuICAgIGNvbnN0IHJ1bklkID0gdGltZXN0YW1wIHx8IGZvcm1hdChuZXcgRGF0ZSgpLCAneXl5eS1NTS1kZC1ISC1tbScpO1xuICAgIC8vIEVpdGhlciB1c2UgdGhlIHByb3ZpZGVkIG91dHB1dCBkaXJlY3RvcnksIG9yIGRlZmF1bHQgdG8gdGhlIGhvbWUgZGlyZWN0b3J5XG4gICAgY29uc3QgYmFzZURpciA9IGN3ZCB8fCBqb2luKGhvbWVkaXIoKSwgJy5kY2R4JywgJ2FwdCcpO1xuICAgIC8vIFJldHVybiB0aGUgb3V0cHV0IGRpcmVjdG9yeSBmb3IgdGhlIHRlc3QgcmVzdWx0c1xuICAgIHJldHVybiBqb2luKGJhc2VEaXIsIHJ1bklkKTtcbn07XG4iLCJpbXBvcnQgeyBzZWxlY3QgfSBmcm9tICdAaW5xdWlyZXIvcHJvbXB0cyc7XG5leHBvcnQgY29uc3QgZ2V0UHJvZHVjdCA9IGFzeW5jICgpID0+IHtcbiAgICByZXR1cm4gc2VsZWN0KHtcbiAgICAgICAgbWVzc2FnZTogYFBsZWFzZSBjaG9vc2UgdGhlIHByb2R1Y3QgZm9yIHdoaWNoIHlvdSB3aXNoIHRvIHJ1biBEQ0FQVGAsXG4gICAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgICAgIHsgbmFtZTogJ0ppcmEnLCB2YWx1ZTogJ2ppcmEnIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdDb25mbHVlbmNlJywgdmFsdWU6ICdjb25mbHVlbmNlJyB9LFxuICAgICAgICAgICAgeyBuYW1lOiAnQmFtYm9vJywgdmFsdWU6ICdiYW1ib28nIH0sXG4gICAgICAgICAgICB7IG5hbWU6ICdCaXRidWNrZXQnLCB2YWx1ZTogJ2JpdGJ1Y2tldCcgfVxuICAgICAgICBdXG4gICAgfSk7XG59O1xuIiwiaW1wb3J0IHsgcGFzc3dvcmQgfSBmcm9tICdAaW5xdWlyZXIvcHJvbXB0cyc7XG5pbXBvcnQgeyBwcm92aXNpb25pbmcgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5leHBvcnQgY29uc3QgZ2V0QVdTQ3JlZGVudGlhbHMgPSBhc3luYyAocHJvZHVjdCwgZm9yY2UpID0+IHtcbiAgICAvLyBUcnkgZ2V0dGluZyB0aGUgQVdTIGNyZWRlbnRpYWxzIGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAgY29uc3QgeyBBV1NfQUNDRVNTX0tFWV9JRCwgQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZIH0gPSBwcm9jZXNzLmVudjtcbiAgICAvLyBJZiB0aGV5IGV4aXN0cyBhcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIHJldHVybiB0aGVtIGltbWVkaWF0ZWx5XG4gICAgaWYgKEFXU19BQ0NFU1NfS0VZX0lEICYmIEFXU19TRUNSRVRfQUNDRVNTX0tFWSkge1xuICAgICAgICByZXR1cm4gW0FXU19BQ0NFU1NfS0VZX0lELCBBV1NfU0VDUkVUX0FDQ0VTU19LRVldO1xuICAgIH1cbiAgICAvLyBJZiB3ZSBhcmUgbm90IGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlLCB3ZSBzaG91bGQgYXNrIGZvciB0aGVtXG4gICAgaWYgKCFmb3JjZSkge1xuICAgICAgICAvLyBTaG93IGEgbWVzc2FnZSBhc2tpbmcgbmljZWx5XG4gICAgICAgIGNvbnNvbGUubG9nKHByb3Zpc2lvbmluZy5hc2tGb3JBV1NDcmVkZW50aWFscyhwcm9kdWN0KSk7XG4gICAgICAgIGNvbnN0IGF3c19hY2Nlc3Nfa2V5X2lkID0gYXdhaXQgcGFzc3dvcmQoe1xuICAgICAgICAgICAgbWVzc2FnZTogYEFXUyBBY2Nlc3MgS2V5IElEYCxcbiAgICAgICAgICAgIHZhbGlkYXRlOiAoaW5wdXQpID0+IHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycgJiYgaW5wdXQubGVuZ3RoID4gMFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgYXdzX3NlY3JldF9hY2Nlc3Nfa2V5ID0gYXdhaXQgcGFzc3dvcmQoe1xuICAgICAgICAgICAgbWVzc2FnZTogYEFXUyBTZWNyZXQgQWNjZXNzIEtleWAsXG4gICAgICAgICAgICB2YWxpZGF0ZTogKGlucHV0KSA9PiB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnICYmIGlucHV0Lmxlbmd0aCA+IDBcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBbYXdzX2FjY2Vzc19rZXlfaWQsIGF3c19zZWNyZXRfYWNjZXNzX2tleV07XG4gICAgfVxuICAgIC8vIElmIHdlIGFyZSBpbiBub24taW50ZXJhY3RpdmUgbW9kZSwgYW5kIHRoZSBjcmVkZW50aWFscyBoYXZlIG5vdCBiZWVuIGZvdW5kLCB3ZSBzaG91bGQgdGhyb3cgYW4gZXJyb3JcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBBV1MgY3JlZGVudGlhbHMgY291bGQgbm90IGJlIGZvdW5kLiBQbGVhc2UgcHJvdmlkZSB0aGUgJ0FXU19BQ0NFU1NfS0VZX0lEJyBhbmQgJ0FXU19TRUNSRVRfQUNDRVNTX0tFWScgZW52aXJvbm1lbnQgdmFyaWFibGVzYCk7XG59O1xuIiwiaW1wb3J0IHsgaW5wdXQgfSBmcm9tICdAaW5xdWlyZXIvcHJvbXB0cyc7XG5pbXBvcnQgeyBwcm92aXNpb25pbmcgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5leHBvcnQgY29uc3QgZ2V0RW52aXJvbm1lbnROYW1lID0gYXN5bmMgKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKHByb3Zpc2lvbmluZy5hc2tGb3JFbnZpcm9ubWVudCk7XG4gICAgcmV0dXJuIGlucHV0KHtcbiAgICAgICAgbWVzc2FnZTogYEVudmlyb25tZW50IG5hbWVgLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0pO1xufTtcbiIsImltcG9ydCB7IHJlYWRGaWxlU3luYywgd3JpdGVGaWxlU3luYyB9IGZyb20gJ2ZzJztcbmV4cG9ydCBjb25zdCByZXBsYWNlTGluZXNJbkZpbGUgPSAocGF0aCwgcmVwbGFjZXIpID0+IHtcbiAgICBjb25zdCBjb250ZW50cyA9IHJlYWRGaWxlU3luYyhwYXRoLCAndXRmLTgnKTtcbiAgICBjb25zdCBsaW5lcyA9IGNvbnRlbnRzLnNwbGl0KCdcXG4nKTtcbiAgICBjb25zdCByZXN1bHQgPSBsaW5lcy5tYXAocmVwbGFjZXIpO1xuICAgIHdyaXRlRmlsZVN5bmMocGF0aCwgcmVzdWx0LmpvaW4oJ1xcbicpLCAndXRmLTgnKTtcbn07XG4iLCJpbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBjd2QgfSBmcm9tICdwcm9jZXNzJztcbmltcG9ydCB7IHJlcGxhY2VMaW5lc0luRmlsZSB9IGZyb20gJy4uLy4uL2hlbHBlcnMvcmVwbGFjZUxpbmVzSW5GaWxlJztcbmltcG9ydCB7IHByb3Zpc2lvbmluZyB9IGZyb20gJy4uL21lc3NhZ2VzJztcbmV4cG9ydCBjb25zdCBwZXJzaXN0Q2x1c3RlckNvbmZpZ3VyYXRpb24gPSAob3B0aW9ucykgPT4ge1xuICAgIHJlcGxhY2VMaW5lc0luRmlsZShqb2luKG9wdGlvbnMuY3dkIHx8IGN3ZCgpLCAnYXBwL3V0aWwvazhzL2RjYXB0LnRmdmFycycpLCAobGluZSkgPT4ge1xuICAgICAgICBpZiAob3B0aW9ucy5lbnZpcm9ubWVudCAmJiBsaW5lLnN0YXJ0c1dpdGgoJ2Vudmlyb25tZW50X25hbWUgPScpKSB7XG4gICAgICAgICAgICByZXR1cm4gYGVudmlyb25tZW50X25hbWUgPSBcIiR7b3B0aW9ucy5lbnZpcm9ubWVudH1cImA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAob3B0aW9ucy5tb25pdG9yaW5nICYmIGxpbmUuc3RhcnRzV2l0aCgnIyBtb25pdG9yaW5nX2VuYWJsZWQnKSkge1xuICAgICAgICAgICAgcmV0dXJuIGBtb25pdG9yaW5nX2VuYWJsZWQgPSB0cnVlYDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChvcHRpb25zLm1vbml0b3JpbmcgJiYgbGluZS5zdGFydHNXaXRoKCcjIG1vbml0b3JpbmdfZ3JhZmFuYV9leHBvc2VfbGInKSkge1xuICAgICAgICAgICAgcmV0dXJuIGBtb25pdG9yaW5nX2dyYWZhbmFfZXhwb3NlX2xiID0gdHJ1ZWA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAob3B0aW9ucy5wcm9kdWN0ICYmIGxpbmUuc3RhcnRzV2l0aCgncHJvZHVjdHMgPSAnKSkge1xuICAgICAgICAgICAgcmV0dXJuIGBwcm9kdWN0cyA9IFtcIiR7b3B0aW9ucy5wcm9kdWN0fVwiXWA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAob3B0aW9ucy5wcm9kdWN0ICYmIG9wdGlvbnMubGljZW5zZSAmJiBsaW5lLnN0YXJ0c1dpdGgoYCR7b3B0aW9ucy5wcm9kdWN0fV9saWNlbnNlID1gKSkge1xuICAgICAgICAgICAgcmV0dXJuIGAke29wdGlvbnMucHJvZHVjdH1fbGljZW5zZSA9IFwiJHtvcHRpb25zLmxpY2Vuc2V9XCJgO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG9wdGlvbnMucHJvZHVjdCAmJiBvcHRpb25zLnRhZyAmJiBsaW5lLnN0YXJ0c1dpdGgoYCR7b3B0aW9ucy5wcm9kdWN0fV92ZXJzaW9uX3RhZyA9YCkpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHtvcHRpb25zLnByb2R1Y3R9X3ZlcnNpb25fdGFnID0gXCIke29wdGlvbnMudGFnfVwiYDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChvcHRpb25zLnByb2R1Y3QgJiYgbGluZS5zdGFydHNXaXRoKGAke29wdGlvbnMucHJvZHVjdH1fcmVwbGljYV9jb3VudCA9YCkpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHtvcHRpb25zLnByb2R1Y3R9X3JlcGxpY2FfY291bnQgPSAke29wdGlvbnMubm9kZXMgfHwgJzEnfWA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAob3B0aW9ucy5wcm9kdWN0ICYmIGxpbmUuc3RhcnRzV2l0aChgJHtvcHRpb25zLnByb2R1Y3R9X2FkZGl0aW9uYWxfanZtX2FyZ3MgPSBgKSkge1xuICAgICAgICAgICAgcmV0dXJuIGAke29wdGlvbnMucHJvZHVjdH1fYWRkaXRpb25hbF9qdm1fYXJncyA9IFtcIi1EdXBtLnBsdWdpbi51cGxvYWQuZW5hYmxlZD10cnVlXCIsXCItRHBhc3N3b3JkLmNvbmZpcm1hdGlvbi5kaXNhYmxlZD10cnVlXCJdYDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGluZTtcbiAgICB9KTtcbiAgICBjb25zb2xlLmxvZyhwcm92aXNpb25pbmcudGVycmFmb3JtQ29uZmlndXJhdGlvblBlcnNpc3RlZCk7XG59O1xuIiwiaW1wb3J0IHsgd3JpdGVGaWxlU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IHByb3Zpc2lvbmluZyB9IGZyb20gJy4uL21lc3NhZ2VzJztcbmV4cG9ydCBjb25zdCBwZXJzaXN0QVdTQ3JlZGVudGlhbHMgPSAoY3dkLCBhd3NfYWNjZXNzX2tleV9pZCwgYXdzX3NlY3JldF9hY2Nlc3Nfa2V5KSA9PiB7XG4gICAgd3JpdGVGaWxlU3luYyhqb2luKGN3ZCwgJ2FwcC91dGlsL2s4cy9hd3NfZW52cycpLCBgXG4jIGF3c19lbnZzIGZpbGUgc2hvdWxkIGNvbnRhaW4gQVdTIHZhcmlhYmxlcyBuZWVkZWQgZm9yIGF1dGhvcml6YXRpb24gKHdpdGhvdXQgcXVvdGVzKVxuQVdTX0FDQ0VTU19LRVlfSUQ9JHthd3NfYWNjZXNzX2tleV9pZH1cbkFXU19TRUNSRVRfQUNDRVNTX0tFWT0ke2F3c19zZWNyZXRfYWNjZXNzX2tleX1cbmAudHJpbSgpLCAndXRmLTgnKTtcbiAgICBjb25zb2xlLmxvZyhwcm92aXNpb25pbmcuYXdzQ3JlZGVudGlhbHNQZXJzaXN0ZWQpO1xufTtcbiIsImltcG9ydCB7IGV4aXN0c1N5bmMsIHJlYWRGaWxlU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmV4cG9ydCBjb25zdCBnZXRDbHVzdGVyVVJMID0gYXN5bmMgKGN3ZCwgcHJvZHVjdCkgPT4ge1xuICAgIC8vIENoYW5nZSB0aGUgd29ya2luZyBkaXJlY3RvcnkgdG8gdGhlIEt1YmVybmV0ZXMgdXRpbHMgZGlyZWN0b3J5XG4gICAgY29uc3QgYmFzZURpciA9IGpvaW4oY3dkLCAnYXBwL3V0aWwvazhzJyk7XG4gICAgLy8gQ2hlY2sgaWYgd2UgY2FuIGZpbmQgdGhlIG91dHB1dHMuanNvbiBmaWxlIHRoYXQgd2FzIGNyZWF0ZWQgZHVyaW5nIHByb3Zpc2lvbmluZ1xuICAgIGNvbnN0IGhhc091dHB1dHNKU09OID0gZXhpc3RzU3luYyhqb2luKGJhc2VEaXIsICdvdXRwdXRzLmpzb24nKSk7XG4gICAgaWYgKCFoYXNPdXRwdXRzSlNPTikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIHRoZSByZXF1aXJlZCAnb3V0cHV0cy5qc29uJyBmaWxlLCB3aGljaCBpcyB1c3VhbGx5IGdlbmVyYXRlZCBhZnRlciBwcm92aXNpb25pbmcgdGhlIGVudmlyb25tZW50LmApO1xuICAgIH1cbiAgICAvLyBHZXQgdGhlIGNsdXN0ZXIgY3JlYXRpb24gb3V0cHV0IGRhdGFcbiAgICBjb25zdCBjb250ZW50cyA9IHJlYWRGaWxlU3luYyhqb2luKGJhc2VEaXIsICdvdXRwdXRzLmpzb24nKSwgJ3V0Zi04Jyk7XG4gICAgY29uc3Qgb3V0cHV0cyA9IEpTT04ucGFyc2UoY29udGVudHMpO1xuICAgIC8vIFRyeSB0byBmaW5kIHRoZSBwcm9kdWN0IGxvYWRiYWxhbmNlciBVUkwgZnJvbSB0aGUgb3V0cHV0IGRhdGFcbiAgICBjb25zdCBsb2FkYmFsYW5jZXJVcmxzID0gb3V0cHV0cz8ucHJvZHVjdF91cmxzPy52YWx1ZTtcbiAgICBpZiAobG9hZGJhbGFuY2VyVXJscykge1xuICAgICAgICBjb25zdCBsb2FkYmFsYW5jZXJVcmwgPSBsb2FkYmFsYW5jZXJVcmxzW3Byb2R1Y3RdO1xuICAgICAgICBpZiAobG9hZGJhbGFuY2VyVXJsKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9hZGJhbGFuY2VyVXJsO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIElmIHdlIGhhdmVuJ3QgZm91bmQgaXQgeWV0LCB3ZSBzaG91bGQgdGhyb3cgYSBoaXNzeSBmaXRcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIHRoZSAke3Byb2R1Y3R9IGxvYWQgYmFsYW5jZXIgVVJMLCBhcmUgeW91IHN1cmUgdGhlIHByb2R1Y3Qgd2FzIGNvcnJlY3RseSBwcm92aXNpb25lZD9gKTtcbn07XG4iLCJpbXBvcnQgeyBpbnN0YWxsIH0gZnJvbSAnLi4vaGVscGVycy9kY2FwdCc7XG5pbXBvcnQgeyBnZXRBcHREaWN0b3J5IH0gZnJvbSAnLi4vaGVscGVycy9nZXRBcHREaXJlY3RvcnknO1xuaW1wb3J0IHsgZ2V0QVdTQ3JlZGVudGlhbHMgfSBmcm9tICcuLi9oZWxwZXJzL2dldEFXU0NyZWRlbnRpYWxzJztcbmltcG9ydCB7IGdldEVudmlyb25tZW50TmFtZSB9IGZyb20gJy4uL2hlbHBlcnMvZ2V0RW52aXJvbm1lbnROYW1lJztcbmltcG9ydCB7IGdldEhvc3RMaWNlbnNlIH0gZnJvbSAnLi4vaGVscGVycy9nZXRIb3N0TGljZW5zZSc7XG5pbXBvcnQgeyBwZXJzaXN0Q2x1c3RlckNvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9oZWxwZXJzL3BlcnNpc3RDbHVzdGVyQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBwZXJzaXN0QVdTQ3JlZGVudGlhbHMgfSBmcm9tICcuLi9oZWxwZXJzL3BlcnNpc3RzQVdTQ3JlZGVudGlhbHMnO1xuaW1wb3J0IHsgd2FpdEZvclVzZXJJbnB1dCB9IGZyb20gJy4uL2hlbHBlcnMvd2FpdEZvclVzZXJJbnB1dCc7XG5pbXBvcnQgeyBlbXB0eUxpbmUsIHByb3Zpc2lvbmluZyB9IGZyb20gJy4uL21lc3NhZ2VzJztcbmltcG9ydCB7IGdldENsdXN0ZXJVUkwgfSBmcm9tICcuL2dldENsdXN0ZXJVUkwnO1xuZXhwb3J0IGNvbnN0IHByb3Zpc2lvbkNsdXN0ZXIgPSBhc3luYyAob3B0aW9ucywgbXVzdFVzZURlZmF1bHRDb25maWd1cmF0aW9uKSA9PiB7XG4gICAgLy8gU2hvdyB0aGUgcHJvdmlzaW9uaW5nIHdlbGNvbWUgbWVzc2FnZVxuICAgIGNvbnNvbGUubG9nKHByb3Zpc2lvbmluZy5oZWFkZXIpO1xuICAgIC8vIEFzayBmb3IgdGhlIHByb3BlciBkaXJlY3Rvcnkgb2YgQVBUXG4gICAgY29uc3QgZGlyZWN0b3J5ID0gYXdhaXQgZ2V0QXB0RGljdG9yeShvcHRpb25zLmN3ZCwgbXVzdFVzZURlZmF1bHRDb25maWd1cmF0aW9uLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBBc2sgZm9yIHRoZSBBV1MgY3JlZGVudGlhbHNcbiAgICBjb25zdCBbYXdzX2FjY2Vzc19rZXlfaWQsIGF3c19zZWNyZXRfYWNjZXNzX2tleV0gPSBhd2FpdCBnZXRBV1NDcmVkZW50aWFscyhvcHRpb25zLnByb2R1Y3QsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIEFzayBmb3IgdGhlIGVudmlyb25tZW50IG5hbWVcbiAgICBjb25zdCBlbnZpcm9ubWVudCA9IG9wdGlvbnMuZW52aXJvbm1lbnQgfHwgYXdhaXQgZ2V0RW52aXJvbm1lbnROYW1lKCk7XG4gICAgLy8gQXNrIGZvciB0aGUgbGljZW5zZVxuICAgIGNvbnN0IGxpY2Vuc2UgPSBhd2FpdCBnZXRIb3N0TGljZW5zZShvcHRpb25zLnByb2R1Y3QsIG9wdGlvbnMubGljZW5zZSwgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gR2V0IHRoZSBudW1iZXIgb2Ygbm9kZXMgKG9yIGRlZmF1bHQgdG8gb25lKVxuICAgIGNvbnN0IG5vZGVzID0gb3B0aW9ucy5ub2RlcyB8fCAxO1xuICAgIC8vIExldCdzIGRvIHRoaXNcbiAgICBjb25zb2xlLmxvZyhwcm92aXNpb25pbmcucmVhZHkpO1xuICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIHN0YXJ0IHByb3Zpc2lvbmcgdGhlIEFXUyBlbnZpcm9ubWVudC4uLicsIG9wdGlvbnMuZm9yY2UpO1xuICAgIGVtcHR5TGluZSgpO1xuICAgIC8vIFdyaXRlIEFXUyBjcmVkZW50aWFscyB0byBkaXNrXG4gICAgcGVyc2lzdEFXU0NyZWRlbnRpYWxzKGRpcmVjdG9yeSwgYXdzX2FjY2Vzc19rZXlfaWQsIGF3c19zZWNyZXRfYWNjZXNzX2tleSk7XG4gICAgLy8gV3JpdGUgVGVycmFmb3JtIHZhcmlhYmxlcyB0byBkaXNrXG4gICAgcGVyc2lzdENsdXN0ZXJDb25maWd1cmF0aW9uKHtcbiAgICAgICAgcHJvZHVjdDogb3B0aW9ucy5wcm9kdWN0LFxuICAgICAgICB0YWc6IG9wdGlvbnMudGFnLFxuICAgICAgICBjd2Q6IGRpcmVjdG9yeSxcbiAgICAgICAgZW52aXJvbm1lbnQsXG4gICAgICAgIG1vbml0b3Jpbmc6IG9wdGlvbnMubW9uaXRvcmluZyxcbiAgICAgICAgbGljZW5zZSxcbiAgICAgICAgbm9kZXNcbiAgICB9KTtcbiAgICAvLyBSdW4gdGhlIERDQVBUIGluc3RhbGwgc2NyaXB0XG4gICAgYXdhaXQgaW5zdGFsbChkaXJlY3RvcnkpO1xuICAgIC8vIEdldCB0aGUgY2x1c3RlciBVUkwgZnJvbSB0aGUgb3V0cHV0cy5qc29uXG4gICAgY29uc3QgYmFzZVVybCA9IGF3YWl0IGdldENsdXN0ZXJVUkwoZGlyZWN0b3J5LCBvcHRpb25zLnByb2R1Y3QpO1xuICAgIC8vIFJldHVybiBhbGwgdGhlIHF1ZXN0aW9ucyB3ZSBhc2tlZCB0aGUgdXNlciBmb3IgdXNlIGluIG90aGVyIHN0ZXBzXG4gICAgcmV0dXJuIHtcbiAgICAgICAgY3dkOiBkaXJlY3RvcnksXG4gICAgICAgIGVudmlyb25tZW50LFxuICAgICAgICBhd3NfYWNjZXNzX2tleV9pZCxcbiAgICAgICAgYXdzX3NlY3JldF9hY2Nlc3Nfa2V5LFxuICAgICAgICBiYXNlVXJsLFxuICAgICAgICBsaWNlbnNlXG4gICAgfTtcbn07XG4iLCJpbXBvcnQgeyBlbXB0eUxpbmUsIFJlc3RhcnQgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5pbXBvcnQgeyByZXN0YXJ0IH0gZnJvbSAnLi9kY2FwdCc7XG5pbXBvcnQgeyBnZXRBcHREaWN0b3J5IH0gZnJvbSAnLi9nZXRBcHREaXJlY3RvcnknO1xuaW1wb3J0IHsgZ2V0QVdTQ3JlZGVudGlhbHMgfSBmcm9tICcuL2dldEFXU0NyZWRlbnRpYWxzJztcbmltcG9ydCB7IHBlcnNpc3RBV1NDcmVkZW50aWFscyB9IGZyb20gJy4vcGVyc2lzdHNBV1NDcmVkZW50aWFscyc7XG5pbXBvcnQgeyB3YWl0Rm9yVXNlcklucHV0IH0gZnJvbSAnLi93YWl0Rm9yVXNlcklucHV0JztcbmV4cG9ydCBjb25zdCByZXN0YXJ0Q2x1c3RlciA9IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgLy8gU2hvdyBuaWNlIGxpdHRsZSB3ZWxjb21lIG1lc3NhZ2VcbiAgICBjb25zb2xlLmxvZyhSZXN0YXJ0LmhlYWRlcik7XG4gICAgLy8gQXNrIGZvciB0aGUgcHJvcGVyIGRpcmVjdG9yeSBvZiBBUFRcbiAgICBjb25zdCBkaXJlY3RvcnkgPSBhd2FpdCBnZXRBcHREaWN0b3J5KG9wdGlvbnMuY3dkLCB0cnVlLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBBc2sgZm9yIHRoZSBBV1MgY3JlZGVudGlhbHNcbiAgICBjb25zdCBbYXdzX2FjY2Vzc19rZXlfaWQsIGF3c19zZWNyZXRfYWNjZXNzX2tleV0gPSBhd2FpdCBnZXRBV1NDcmVkZW50aWFscyhvcHRpb25zLnByb2R1Y3QsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIFdyaXRlIEFXUyBjcmVkZW50aWFscyB0byBkaXNrXG4gICAgcGVyc2lzdEFXU0NyZWRlbnRpYWxzKGRpcmVjdG9yeSwgYXdzX2FjY2Vzc19rZXlfaWQsIGF3c19zZWNyZXRfYWNjZXNzX2tleSk7XG4gICAgLy8gQXNrIHRoZSB1c2VyIGlmIHRoZXkgYXJlIHJlYWR5IHRvIHNheSBnb29kYnllIHRvIHRoZWlyIGNsdXN0ZXJcbiAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBjb250aW51ZS4uLicsIG9wdGlvbnMuZm9yY2UpO1xuICAgIGVtcHR5TGluZSgpO1xuICAgIC8vIFRlcm1pbmF0ZSBpdCFcbiAgICBhd2FpdCByZXN0YXJ0KGRpcmVjdG9yeSwgb3B0aW9ucy5lbnZpcm9ubWVudCwgb3B0aW9ucy5wcm9kdWN0KTtcbiAgICAvLyBBc2sgdGhlIHVzZXIgdG8gcXVpdCB0aGUgcHJvZ3JhbVxuICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIGV4aXQuLi4nLCBvcHRpb25zLmZvcmNlKTtcbn07XG4iLCJleHBvcnQgY29uc3QgUEFUID0ge1xuICAgIGlkOiAxLFxuICAgIG5hbWU6ICdEQ0RYJyxcbiAgICBjcmVhdGVkQXQ6ICcxOTcwLTAxLTAxIDAwOjAwOjAwJyxcbiAgICBleHBpcmVzOiAnOTk5OS0xMi0zMSAwMDowMDowMCcsXG4gICAgdG9rZW46ICdOemMzTkRjeU16ZzBOams1T3Z1WXV4eHJFaWI3MTQ3TEtaazFDK0FySTN6OCcsXG4gICAgaGFzaGVkVG9rZW46ICd7UEtDUzVTMn14RHJIa1Z6SFUvOCthenRRL0N3bmdaS3NlRisrNEs3dWdzMmpvSTZSeGMvK3FpK2kzdnloOXdLNWswTE9aM1lwJyxcbiAgICBub3RpZmljYXRpb25TdGF0ZTogJ05PVF9TRU5UJyxcbiAgICB0b2tlbklkOiA3Nzc0NzIzODQ2OTlcbn07XG4iLCJpbXBvcnQgYXhpb3MsIHsgaXNBeGlvc0Vycm9yIH0gZnJvbSAnYXhpb3MnO1xuaW1wb3J0IEZvcm1EYXRhIGZyb20gJ2Zvcm0tZGF0YSc7XG5pbXBvcnQgeyBjcmVhdGVSZWFkU3RyZWFtIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgUEFUIH0gZnJvbSAnLi9QQVQnO1xuZXhwb3J0IGNvbnN0IHVwbG9hZFRvVVBNID0gYXN5bmMgKGJhc2VVcmwsIHBhdGgsIHVzZXJuYW1lLCBwYXNzd29yZCwgcGF0ID0gUEFULnRva2VuLCB2ZXJib3NlID0gdHJ1ZSkgPT4ge1xuICAgIC8vIEdldCB0aGUgVVBNIHRva2VuLCB3aGljaCBpcyByZXF1aXJlZCBmb3IgdXBsb2FkaW5nIGEgZmlsZVxuICAgIGNvbnN0IHRva2VuID0gYXdhaXQgZ2V0VVBNVG9rZW4oYmFzZVVybCwgdXNlcm5hbWUsIHBhc3N3b3JkLCBwYXQpO1xuICAgIC8vIElmIHRoZSB0b2tlbiBpcyBudWxsLCB0aGVyZSBpcyBubyBwb2ludCBpbiBjb250aW51aW5nIGRvd24gdGhpcyByb2FkXG4gICAgaWYgKHRva2VuID09PSBudWxsKSB7XG4gICAgICAgIHZlcmJvc2UgJiYgY29uc29sZS5sb2coJ0ZhaWxlZCB0byB1cGxvYWQgcGx1Z2luIGFyY2hpdmUgZmlsZSB0byBVUE0sIHVuYWJsZSB0byByZXRyaWV2ZSBVUE0gdG9rZW4nKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBGaXJzdCB1cGxvYWQgdGhlIGZpbGUgdXNpbmcgQmFzaWMgQXV0aGVudGljYXRpb24sIGFzIHRoaXMgaXMgdGhlIG1vc3QgY29tbW9uIHdheVxuICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gdXNlcm5hbWUgJiYgcGFzc3dvcmQgPyBCdWZmZXIuZnJvbShgJHt1c2VybmFtZX06JHtwYXNzd29yZH1gKS50b1N0cmluZygnYmFzZTY0JykgOiBudWxsO1xuICAgIHJldHVybiB1cGxvYWRGaWxlKGJhc2VVcmwsIHRva2VuLCBwYXRoLCB7XG4gICAgICAgIC4uLmNyZWRlbnRpYWxzID8geyAnQXV0aG9yaXphdGlvbic6IGBCYXNpYyAke2NyZWRlbnRpYWxzfWAgfSA6IHVuZGVmaW5lZFxuICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICB2ZXJib3NlICYmIGNvbnNvbGUubG9nKCdGaW5pc2hlZCB1cGxvYWRpbmcgcGx1Z2luIGFyY2hpdmUgdG8gVVBNJyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAvLyBJZiBCYXNpYyBBdXRoZW50aWNhdGlvbiBkb2VzIG5vdCB3b3JrLCBpdCB3aWxsIHRocm93IGFuIGVycm9yICh1bmF1dGhlbnRpY2F0ZWQgb3IgYmFkIHJlcXVlc3QpXG4gICAgfSkuY2F0Y2goYXN5bmMgKGVycikgPT4ge1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUgdXBsb2FkIGZhaWxlZCBiZWNhdXNlIG9mIGF1dGhlbnRpY2F0aW9uIGlzc3Vlc1xuICAgICAgICBpZiAoaXNBeGlvc0Vycm9yKGVycikgJiYgKGVyci5yZXNwb25zZT8uc3RhdHVzID09PSA0MDEgfHwgZXJyLnJlc3BvbnNlPy5zdGF0dXMgPT09IDQwMykpIHtcbiAgICAgICAgICAgIC8vIElmIHdlIGNhYW5vdCB1cGxvYWQgdXNpbmcgQmFzaWMgQXV0aGVudGljYXRpb24sIHVzZSB0aGUgXCJrbm93blwiIFBBVCB0b2tlbiwgd2hpY2ggc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSBkYXRhYmFzZSBwb3N0LWluc3RhbGxhdGlvblxuICAgICAgICAgICAgcmV0dXJuIHVwbG9hZEZpbGUoYmFzZVVybCwgdG9rZW4sIHBhdGgsIHtcbiAgICAgICAgICAgICAgICAnQXV0aG9yaXphdGlvbic6IGBCZWFyZXIgJHtwYXR9YFxuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdmVyYm9zZSAmJiBjb25zb2xlLmxvZygnRmluaXNoZWQgdXBsb2FkaW5nIHBsdWdpbiBhcmNoaXZlIHRvIFVQTScpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBJZiB0aGlzIGlzIG5vdCBhbiBhdXRoZW50aWNhdGlvbiBpc3N1ZSwgYnViYmxlIHRoZSBlcnJvciB0byB0aGUgY2FsbGluZyBmdW5jdGlvblxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgfSk7XG59O1xuZXhwb3J0IGNvbnN0IHdhaXRGb3JQbHVnaW5Ub0JlRW5hYmxlZCA9IGFzeW5jIChhcHBLZXksIGJhc2VVcmwsIHVzZXJuYW1lLCBwYXNzd29yZCwgdmVyYm9zZSA9IHRydWUpID0+IHtcbiAgICBjb25zdCBjcmVkZW50aWFscyA9IHVzZXJuYW1lICYmIHBhc3N3b3JkID8gQnVmZmVyLmZyb20oYCR7dXNlcm5hbWV9OiR7cGFzc3dvcmR9YCkudG9TdHJpbmcoJ2Jhc2U2NCcpIDogbnVsbDtcbiAgICB2ZXJib3NlICYmIGNvbnNvbGUubG9nKCdXYWl0aW5nIGZvciBwbHVnaW4gdG8gYmVjb21lIGVuYWJsZWQnKTtcbiAgICBsZXQgaXNFbmFibGVkID0gZmFsc2U7XG4gICAgbGV0IGNvdW50ID0gMDtcbiAgICB3aGlsZSAoIWlzRW5hYmxlZCAmJiBjb3VudCA8IDEyMCkge1xuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTAwMCkpO1xuICAgICAgICB2ZXJib3NlICYmIGNvbnNvbGUubG9nKGBXYWl0aW5nIGZvciBwbHVnaW4gdG8gYmVjb21lIGVuYWJsZWQuLi4gJHtjb3VudH1zYCk7XG4gICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgYXhpb3MuZ2V0KGAke2Jhc2VVcmx9L3Jlc3QvcGx1Z2lucy8xLjAvJHthcHBLZXl9LWtleWAsIGNyZWRlbnRpYWxzID8ge1xuICAgICAgICAgICAgaGVhZGVyczogeyAnQXV0aG9yaXphdGlvbic6IGBCYXNpYyAke2NyZWRlbnRpYWxzfWAgfVxuICAgICAgICB9IDogdW5kZWZpbmVkKS5jYXRjaCgoKSA9PiAoeyBkYXRhOiB7IGVuYWJsZWQ6IGZhbHNlIH0gfSkpO1xuICAgICAgICBpc0VuYWJsZWQgPSBkYXRhPy5lbmFibGVkO1xuICAgICAgICBjb3VudCsrO1xuICAgIH1cbiAgICByZXR1cm4gaXNFbmFibGVkO1xufTtcbmV4cG9ydCBjb25zdCByZWdpc3RlckxpY2Vuc2UgPSBhc3luYyAoYXBwS2V5LCBsaWNlbnNlLCBiYXNlVXJsLCB1c2VybmFtZSwgcGFzc3dvcmQsIHZlcmJvc2UgPSB0cnVlKSA9PiB7XG4gICAgY29uc3QgY3JlZGVudGlhbHMgPSB1c2VybmFtZSAmJiBwYXNzd29yZCA/IEJ1ZmZlci5mcm9tKGAke3VzZXJuYW1lfToke3Bhc3N3b3JkfWApLnRvU3RyaW5nKCdiYXNlNjQnKSA6IG51bGw7XG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBheGlvcy5nZXQoYCR7YmFzZVVybH0vcmVzdC9wbHVnaW5zLzEuMC8ke2FwcEtleX0ta2V5L2xpY2Vuc2VgLCB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICdYLUF0bGFzc2lhbi1Ub2tlbic6ICduby1jaGVjaycsXG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL3ZuZC5hdGwucGx1Z2lucytqc29uJyxcbiAgICAgICAgICAgIC4uLmNyZWRlbnRpYWxzID8geyAnQXV0aG9yaXphdGlvbic6IGBCYXNpYyAke2NyZWRlbnRpYWxzfWAgfSA6IHt9XG4gICAgICAgIH1cbiAgICB9KS5jYXRjaCgoKSA9PiAoeyBkYXRhOiB7fSB9KSk7XG4gICAgY29uc3QgeyByYXdMaWNlbnNlIH0gPSBkYXRhO1xuICAgIGlmICghcmF3TGljZW5zZSB8fCByYXdMaWNlbnNlICE9PSBsaWNlbnNlKSB7XG4gICAgICAgIHJldHVybiBheGlvcy5wdXQoYCR7YmFzZVVybH0vcmVzdC9wbHVnaW5zLzEuMC8ke2FwcEtleX0ta2V5L2xpY2Vuc2VgLCBgeyBcInJhd0xpY2Vuc2VcIjogXCIke2xpY2Vuc2V9XCIgfWAsIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAnWC1BdGxhc3NpYW4tVG9rZW4nOiAnbm8tY2hlY2snLFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vdm5kLmF0bC5wbHVnaW5zK2pzb24nLFxuICAgICAgICAgICAgICAgIC4uLmNyZWRlbnRpYWxzID8geyAnQXV0aG9yaXphdGlvbic6IGBCYXNpYyAke2NyZWRlbnRpYWxzfWAgfSA6IHt9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgdmVyYm9zZSAmJiBjb25zb2xlLmxvZygnRmluaXNoZWQgdXBsb2FkaW5nIGxpY2Vuc2UgdG8gVVBNJyk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgIGlmIChpc0F4aW9zRXJyb3IoZXJyKSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnIucmVzcG9uc2U/LmRhdGE/LnN1YkNvZGUgPT09ICd1cG0ucGx1Z2luLmVycm9yLnBsdWdpbi5ub3QudXNpbmcubGljZW5zaW5nJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2ZXJib3NlICYmIGNvbnNvbGUubG9nKCdGYWlsZWQgdG8gdXBsb2FkIGxpY2Vuc2UgdG8gVVBNJywgZXJyKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufTtcbmNvbnN0IGdldFVQTVRva2VuID0gYXN5bmMgKGJhc2VVcmwsIHVzZXJuYW1lLCBwYXNzd29yZCwgcGF0LCB2ZXJib3NlKSA9PiB7XG4gICAgY29uc3QgY3JlZGVudGlhbHMgPSB1c2VybmFtZSAmJiBwYXNzd29yZCA/IEJ1ZmZlci5mcm9tKGAke3VzZXJuYW1lfToke3Bhc3N3b3JkfWApLnRvU3RyaW5nKCdiYXNlNjQnKSA6IG51bGw7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5nZXQoYCR7YmFzZVVybH0vcmVzdC9wbHVnaW5zLzEuMC8/b3NfYXV0aFR5cGU9YmFzaWNgLCBjcmVkZW50aWFscyA/IHtcbiAgICAgICAgaGVhZGVyczogeyAnQXV0aG9yaXphdGlvbic6IGBCYXNpYyAke2NyZWRlbnRpYWxzfWAgfVxuICAgIH0gOiB1bmRlZmluZWQpLmNhdGNoKGFzeW5jIChlcnIpID0+IHtcbiAgICAgICAgaWYgKGlzQXhpb3NFcnJvcihlcnIpICYmIGVyci5yZXNwb25zZT8uc3RhdHVzID09PSA0MDMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MuZ2V0KGAke2Jhc2VVcmx9L3Jlc3QvcGx1Z2lucy8xLjAvYCwge1xuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHsgJ0F1dGhvcml6YXRpb24nOiBgQmVhcmVyICR7cGF0fWAgfVxuICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICB2ZXJib3NlICYmIGNvbnNvbGUubG9nKCdGYWlsZWQgdG8gdXBsb2FkIHBsdWdpbiBhcmNoaXZlIGZpbGUgdG8gVVBNLCB1bmFibGUgdG8gcmV0cmlldmUgdG9rZW4nLCBlcnIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIH1cbiAgICAgICAgdmVyYm9zZSAmJiBjb25zb2xlLmxvZygnRmFpbGVkIHRvIHVwbG9hZCBwbHVnaW4gYXJjaGl2ZSBmaWxlIHRvIFVQTSwgdW5hYmxlIHRvIHJldHJpZXZlIHRva2VuJywgZXJyKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3BvbnNlID8gcmVzcG9uc2UuaGVhZGVyc1sndXBtLXRva2VuJ10gOiBudWxsO1xufTtcbmNvbnN0IHVwbG9hZEZpbGUgPSAoYmFzZVVybCwgdG9rZW4sIGZpbGVQYXRoLCBoZWFkZXJzKSA9PiB7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ3BsdWdpbicsIGNyZWF0ZVJlYWRTdHJlYW0oZmlsZVBhdGgpKTtcbiAgICByZXR1cm4gYXhpb3MucG9zdChgJHtiYXNlVXJsfS9yZXN0L3BsdWdpbnMvMS4wLz90b2tlbj0ke3Rva2VufWAsIGZvcm1EYXRhLCB7IGhlYWRlcnM6IHtcbiAgICAgICAgICAgIC4uLmZvcm1EYXRhLmdldEhlYWRlcnMoKSxcbiAgICAgICAgICAgIC4uLmhlYWRlcnMsXG4gICAgICAgIH0gfSk7XG59O1xuIiwiaW1wb3J0IHsgaW5wdXQgfSBmcm9tICdAaW5xdWlyZXIvcHJvbXB0cyc7XG5pbXBvcnQgeyBleGlzdHNTeW5jLCByZWFkRmlsZVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBhcHAzaG91ciB9IGZyb20gJy4uLy4uL2hlbHBlcnMvbGljZW5jZXMnO1xuaW1wb3J0IHsgcHJvdmlzaW9uaW5nIH0gZnJvbSAnLi4vbWVzc2FnZXMnO1xuZXhwb3J0IGNvbnN0IGdldEFwcExpY2Vuc2UgPSAobGljZW5zZSwgZm9yY2UpID0+IHtcbiAgICBjb25zdCBhcHBMaWNlbnNlID0gbGljZW5zZSAmJiBleGlzdHNTeW5jKGxpY2Vuc2UpID8gcmVhZEZpbGVTeW5jKGxpY2Vuc2UsICd1dGY4JykgOiBsaWNlbnNlO1xuICAgIGlmIChmb3JjZSkge1xuICAgICAgICByZXR1cm4gYXBwTGljZW5zZSB8fCBhcHAzaG91cjtcbiAgICB9XG4gICAgY29uc29sZS5sb2cocHJvdmlzaW9uaW5nLmFza0ZvckFwcExpY2Vuc2UpO1xuICAgIHJldHVybiBpbnB1dCh7XG4gICAgICAgIG1lc3NhZ2U6IGBMaWNlbnNlYCxcbiAgICAgICAgZGVmYXVsdDogYXBwTGljZW5zZSB8fCBhcHAzaG91cixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9KTtcbn07XG4iLCJpbXBvcnQgeyBjb25maXJtLCBpbnB1dCwgcGFzc3dvcmQgYXMgcGFzc3dvcmRQcm9tcHQsIHNlbGVjdCB9IGZyb20gJ0BpbnF1aXJlci9wcm9tcHRzJztcbmltcG9ydCB7IFByZXNldHMsIFNpbmdsZUJhciB9IGZyb20gJ2NsaS1wcm9ncmVzcyc7XG5pbXBvcnQgeyBleGlzdHNTeW5jLCBybVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBQQVQgfSBmcm9tICcuLi8uLi9oZWxwZXJzL1BBVCc7XG5pbXBvcnQgeyByZWdpc3RlckxpY2Vuc2UsIHVwbG9hZFRvVVBNLCB3YWl0Rm9yUGx1Z2luVG9CZUVuYWJsZWQgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3VwbSc7XG5pbXBvcnQgeyBkb3dubG9hZEZpbGUgfSBmcm9tICcuL2Rvd25sb2FkRmlsZSc7XG5pbXBvcnQgeyBnZXRBcHBMaWNlbnNlIH0gZnJvbSAnLi9nZXRBcHBMaWNlbnNlJztcbmltcG9ydCB7IGdldEFwdERpY3RvcnkgfSBmcm9tICcuL2dldEFwdERpcmVjdG9yeSc7XG5pbXBvcnQgeyBnZXRBV1NDcmVkZW50aWFscyB9IGZyb20gJy4vZ2V0QVdTQ3JlZGVudGlhbHMnO1xuaW1wb3J0IHsgZ2V0RW52aXJvbm1lbnROYW1lIH0gZnJvbSAnLi9nZXRFbnZpcm9ubWVudE5hbWUnO1xuaW1wb3J0IHsgZ2V0UHJvZHVjdCB9IGZyb20gJy4vZ2V0UHJvZHVjdCc7XG5pbXBvcnQgeyBnZXRVcmxCeUFwcEtleSB9IGZyb20gJy4vZ2V0VXJsQnlBcHBLZXknO1xuaW1wb3J0IHsgcmVzdGFydENsdXN0ZXIgfSBmcm9tICcuL3Jlc3RhcnRDbHVzdGVyJztcbmNvbnN0IHByb2dyZXNzQmFyID0gbmV3IFNpbmdsZUJhcih7XG4gICAgZm9ybWF0OiAnICBbe2Jhcn1dIHtwZXJjZW50YWdlfSUgfCBFVEE6IHtldGFfZm9ybWF0dGVkfW0nLFxuICAgIGZvcm1hdFRpbWU6ICh2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCB0b3RhbCA9IHByb2dyZXNzQmFyLmdldFRvdGFsKCkgLyA2MDtcbiAgICAgICAgY29uc3QgdGltZVBhc3NlZCA9IHJvdW5kKChwcm9ncmVzc0Jhci5nZXRUb3RhbCgpIC0gdmFsdWUpIC8gNjAsIDAuNSk7XG4gICAgICAgIHJldHVybiB0aW1lUGFzc2VkID09PSB0b3RhbCA/IGAke3RvdGFsfWAgOiBgJHt0b3RhbCAtIHRpbWVQYXNzZWR9YDtcbiAgICB9LFxuICAgIGhpZGVDdXJzb3I6IHRydWVcbn0sIFByZXNldHMubGVnYWN5KTtcbmNvbnN0IHJvdW5kID0gKHZhbHVlLCBzdGVwID0gMS4wKSA9PiB7XG4gICAgY29uc3QgaW52ID0gMS4wIC8gc3RlcDtcbiAgICByZXR1cm4gTWF0aC5mbG9vcih2YWx1ZSAqIGludikgLyBpbnY7XG59O1xuZXhwb3J0IGNvbnN0IGluc3RhbGxBcHBJbkNsdXN0ZXIgPSBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgIC8vIFNldCBkZWZhdWx0IHZhbHVlIGZvciB1c2VybmFtZS9wYXNzd29yZFxuICAgIGNvbnN0IHVzZXJuYW1lID0gb3B0aW9ucy51c2VybmFtZSB8fCAnYWRtaW4nO1xuICAgIGNvbnN0IHBhc3N3b3JkID0gb3B0aW9ucy5wYXNzd29yZCB8fCAnYWRtaW4nO1xuICAgIGNvbnN0IHBhdCA9IG9wdGlvbnMucGF0IHx8IFBBVC50b2tlbjtcbiAgICAvLyBJZiB3ZSBhcmUgaW4gbm9uLWludGVyYWN0aXZlIG1vZGUsIHdlIHdpbGwgZWl0aGVyIGRvd25sb2FkIGl0IGZyb20gTVBBQyBvciBpbnN0YWxsIGl0IGRpcmVjdGx5IGlmIGEgZmlsZSBwYXRoIHdhcyBwcm92aWRlZFxuICAgIGlmIChvcHRpb25zLmZvcmNlKSB7XG4gICAgICAgIC8vIEluIG9yZGVyIHRvIGluc3RhbGwgdGhlIGFwcCAsIHdlIG5lZWQgYW4gYXBwa2V5LiBJZiB0aGlzIGlzIG5vdCBwcm92aWRlZCwgdGhyb3cgYSBoaXNzeSBmaXRcbiAgICAgICAgLy8gVE9ETzogaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGV4dHJhY3QgdGhlIGtleSBmcm9tIHRoZSBhcmNoaXZlXG4gICAgICAgIGlmICghb3B0aW9ucy5hcHBLZXkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGF1dG9tYXRpY2FsbHkgaW5zdGFsbCBhcHAgaW50byBjbHVzdGVyLCBgYXBwS2V5YCBuZWVkcyB0byBiZSBwcm92aWRlZCcpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEdldCB0aGUgYXBwIGxpY2Vuc2VcbiAgICAgICAgY29uc3QgYXBwTGljZW5zZSA9IGF3YWl0IGdldEFwcExpY2Vuc2Uob3B0aW9ucy5saWNlbnNlLCBvcHRpb25zLmZvcmNlKTtcbiAgICAgICAgLy8gUGxhY2Vob2xkZXIgZm9yIHRoZSBwYXRoIHRvIHRoZSBKQVIgZmlsZVxuICAgICAgICBsZXQgZmlsZSA9IG9wdGlvbnMuYXJjaGl2ZTtcbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgbmVlZCB0byBkb3dubG9hZCB0aGUgZmlsZSBiYXNlZCBvbiB0aGUgYXBwS2V5XG4gICAgICAgIC8vIElmIGJvdGggYXJjaGl2ZSBhbmQgYXBwS2V5IHdlcmUgcHJvdmlkZWQsIHdlIHdpbGwgdXNlIHRoZSBhcmNoaXZlXG4gICAgICAgIGlmICghb3B0aW9ucy5hcmNoaXZlICYmIG9wdGlvbnMuYXBwS2V5KSB7XG4gICAgICAgICAgICAvLyBHZXQgdGhlIGRvd25sb2FkIFVSTCBmcm9tIHRoZSBhcHBLZXlcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IGF3YWl0IGdldFVybEJ5QXBwS2V5KG9wdGlvbnMuYXBwS2V5KTtcbiAgICAgICAgICAgIC8vIERvd25sb2FkIHRoZSBmaWxlIGZyb20gTVBBQ1xuICAgICAgICAgICAgZmlsZSA9IGF3YWl0IGRvd25sb2FkRmlsZSh1cmwpO1xuICAgICAgICB9XG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgYSB2YWxpZCBwYXRoIHRvIHRoZSBKQVIgZmlsZVxuICAgICAgICBpZiAoIWZpbGUgfHwgIWV4aXN0c1N5bmMocmVzb2x2ZShmaWxlKSkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBVbmFibGUgdG8gbG9jYXRlIHRoZSBhcmNoaXZlIGluIHBhdGggJHtmaWxlfWApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBjb3VudCA9IDA7XG4gICAgICAgIGxldCB0aW1lcklkID0gbnVsbDtcbiAgICAgICAgbGV0IGlzSW5zdGFsbGVkU3VjY2VzZnVsbHkgPSBmYWxzZTtcbiAgICAgICAgd2hpbGUgKCFpc0luc3RhbGxlZFN1Y2Nlc2Z1bGx5ICYmIGNvdW50IDw9IDQpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBcbiAgSW5zdGFsbGluZyB0aGUgYXBwICgke29wdGlvbnMuYXBwS2V5fSkgaW50byB0aGUgY2x1c3RlciB1c2luZyB0aGUgVW5pdmVyc2FsIFBsdWdpbiBNYW5hZ2VyIFJFU1QgQVBJYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgXG4gIFJldHJ5aW5nIGluc3RhbGxhdGlvbiBvZiB0aGUgYXBwICgke29wdGlvbnMuYXBwS2V5fSkgaW50byB0aGUgY2x1c3RlciB1c2luZyB0aGUgVW5pdmVyc2FsIFBsdWdpbiBNYW5hZ2VyIFJFU1QgQVBJIChhdHRlbXB0ICR7Y291bnQgKyAxfSlgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gU2hvdyBhIHByb2dyZXNzIGJhclxuICAgICAgICAgICAgICAgIHByb2dyZXNzQmFyLnN0YXJ0KDE4MCwgMCk7XG4gICAgICAgICAgICAgICAgdGltZXJJZCA9IHNldEludGVydmFsKCgpID0+IHByb2dyZXNzQmFyLmluY3JlbWVudCgpLCAxMDAwKTtcbiAgICAgICAgICAgICAgICAvLyBVcGxvYWQgaXQgaW50byB0aGUgY2x1c3RlciB1c2luZyB0aGUgVVBNIFJFU1QgQVBJXG4gICAgICAgICAgICAgICAgY29uc3QgaXNJbnN0YWxsZWQgPSBhd2FpdCB1cGxvYWRUb1VQTShvcHRpb25zLmJhc2VVcmwsIGZpbGUsIHVzZXJuYW1lLCBwYXNzd29yZCwgcGF0LCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFpc0luc3RhbGxlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBpbnN0YWxsIGFwcCBpbnRvIHRoZSBjbHVzdGVyIHVzaW5nIHRoZSBVbml2ZXJzYWwgUGx1Z2luIE1hbmFnZXIgUkVTVCBBUEknKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgbmVlZCB0byByZXN0YXJ0IHRoZSBhcHBsaWNhdGlvbiBjb250YWluZXJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5yZXN0YXJ0QWZ0ZXJJbnN0YWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEZvciByZXN0YXJ0cywgdGhlIHByb2R1Y3Qgb3B0aW9uIGlzIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAgIGlmICghb3B0aW9ucy5wcm9kdWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnICBGYWlsZWQgdG8gcmVzdGFydCBhcHBsaWNhdGlvbiwgcmVxdWlyZWQgb3B0aW9uIGBwcm9kdWN0YCBpcyBtaXNzaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3IgcmVzdGFydHMsIHRoZSBlbnZpcm9ubWVudCBvcHRpb24gaXMgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghb3B0aW9ucy5lbnZpcm9ubWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJyAgRmFpbGVkIHRvIHJlc3RhcnQgYXBwbGljYXRpb24sIHJlcXVpcmVkIG9wdGlvbiBgcHJvZHVjdGAgaXMgbWlzc2luZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gT2ssIGdvb2QgdG8gZ28hXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBPaCByaWdodCwgd2UgYWxzbyBuZWVkIERDQVBUIGluIG9yZGVyIHRvIGJlIGFibGUgdG8gcmVzdGFydCB0aGUgY2x1c3RlclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3dkID0gYXdhaXQgZ2V0QXB0RGljdG9yeShvcHRpb25zLmN3ZCwgZmFsc2UsIG9wdGlvbnMuZm9yY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgYXJlIG5vdyBnb2luZyB0byByZXN0YXJ0IHRoZSBjbHVzdGVyIGFuZCBob3BlIGZvciB0aGUgYmVzdFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYCAgUmVzdGFydGluZyAke29wdGlvbnMucHJvZHVjdH0gdG8gZW5zdXJlIGFwcCBpbnN0YWxsYXRpb25gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHJlc3RhcnRDbHVzdGVyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjd2QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdDogb3B0aW9ucy5wcm9kdWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50OiBvcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3c19hY2Nlc3Nfa2V5X2lkOiBvcHRpb25zLmF3c19hY2Nlc3Nfa2V5X2lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3c19zZWNyZXRfYWNjZXNzX2tleTogb3B0aW9ucy5hd3Nfc2VjcmV0X2FjY2Vzc19rZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFdhaXQgZm9yIHRoZSBwbHVnaW4gdG8gYmUgZW5hYmxlZFxuICAgICAgICAgICAgICAgIGNvbnN0IGlzRW5hYmxlZCA9IGF3YWl0IHdhaXRGb3JQbHVnaW5Ub0JlRW5hYmxlZChvcHRpb25zLmFwcEtleSwgb3B0aW9ucy5iYXNlVXJsLCB1c2VybmFtZSwgcGFzc3dvcmQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBhcHAgY291bGQgbm90IGJlIGVuYWJsZWQgb24gdGhlIGNsdXN0ZXIsIHBsZWFzZSByZWZlciB0byB0aGUgYXBwbGljYXRpb24gbG9nIGZpbGVzIGZvciBtb3JlIGluZm9ybWF0aW9uJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFJlZ2lzdGVyIHRoZSBsaWNlbnNlICh1c2UgdGhlIDMgaG91ciB0aW1lYm9tYiBpbiBub24taW50ZXJhY3RpdmUgbW9kZSlcbiAgICAgICAgICAgICAgICBjb25zdCBpc0xpY2Vuc2VkID0gYXdhaXQgcmVnaXN0ZXJMaWNlbnNlKG9wdGlvbnMuYXBwS2V5LCBhcHBMaWNlbnNlLCBvcHRpb25zLmJhc2VVcmwsIHVzZXJuYW1lLCBwYXNzd29yZCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIGlmICghaXNMaWNlbnNlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBsaWNlbnNlIGNvdWxkIG5vdCBiZSBhcHBsaWVkIGZvciB0aGUgYXBwIG9uIHRoZSBjbHVzdGVyLCBwbGVhc2UgcmVmZXIgdG8gdGhlIGFwcGxpY2F0aW9uIGxvZyBmaWxlcyBmb3IgbW9yZSBpbmZvcm1hdGlvbicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpc0luc3RhbGxlZFN1Y2Nlc2Z1bGx5ID0gaXNJbnN0YWxsZWQgJiYgaXNFbmFibGVkICYmIGlzTGljZW5zZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvdW50IDw9IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gV2FpdCBhIG1pbnV0ZSAoY29vbGRvd24gcGVyaW9kKSBiZWZvcmUgcmV0cnlpbmdcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwMDApKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgICAgICAgIC8vIFN0b3AgdGhlIHByb2dyZXNzIGJhclxuICAgICAgICAgICAgICAgIHByb2dyZXNzQmFyLnN0b3AoKTtcbiAgICAgICAgICAgICAgICBpZiAodGltZXJJZCkge1xuICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKHRpbWVySWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBSZW1vdmUgdGhlIHRlbXBvcmFyeSBmaWxlIChvbmx5IHdoZW4gZG93bmxvYWRlZCBmcm9tIE1QQUMgdXNpbmcgYXBwS2V5KVxuICAgICAgICBpZiAoIW9wdGlvbnMuYXJjaGl2ZSkge1xuICAgICAgICAgICAgcm1TeW5jKGZpbGUsIHsgZm9yY2U6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVGVsbCB0aGVtIHdlIHN1Y2NlZWRlZFxuICAgICAgICBjb25zb2xlLmxvZyhg4pyUIEZpbmlzaGVkIGluc3RhbGxpbmcgdGhlIGFwcCAoJHtvcHRpb25zLmFwcEtleX0pYCk7XG4gICAgICAgIC8vIElmIHdlJ3JlIGluIGludGVyYWN0aXZlIG1vZGUsIGxldCdzIGJlIG5pY2VcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIFRlbGwgdGhlIHVzZXIgdGhleSBoYXZlIG9wdGlvbnNcbiAgICAgICAgY29uc29sZS5sb2coYFxuICBJdCBpcyBub3cgcmVxdWlyZWQgdG8gaW5zdGFsbCB0aGUgYXBwIGludG8gdGhlIEppcmEgY2x1c3Rlci5cbiAgV2UgY2FuIGluc3RhbGwgaXQgZnJvbSB0aGUgQXRsYXNzaWFuIE1hcmtldHBsYWNlIG9yIHlvdSBjYW4gaW5zdGFsbCBpdCBtYW51YWxseS5cbmApO1xuICAgICAgICAvLyBBc2sgdGhlbSBpZiB0aGV5IHByZWZlciBhdXRvbWF0aW9uIG9yIHRlZGlvdXMgbWFudWFsIHRhc2tzXG4gICAgICAgIGNvbnN0IG1ldGhvZCA9IGF3YWl0IHNlbGVjdCh7XG4gICAgICAgICAgICBtZXNzYWdlOiBgSG93IGRvIHlvdSB3YW50IHRvIGluc3RhbGwgdGhlIGFwcD9gLFxuICAgICAgICAgICAgZGVmYXVsdDogJ21wYWMnLFxuICAgICAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgICAgICAgIHsgbmFtZTogJ01hcmtldHBsYWNlJywgdmFsdWU6ICdtcGFjJyB9LFxuICAgICAgICAgICAgICAgIHsgbmFtZTogJ01hbnVhbCcsIHZhbHVlOiAnbWFudWFsJyB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBJZiB0aGV5IGNob3NlIGF1dG9tYXRpb24sIGxldCdzIGF1dG9tYXRlIVxuICAgICAgICBpZiAobWV0aG9kID09PSAnbXBhYycpIHtcbiAgICAgICAgICAgIC8vIEFzayB0aGVtIG5pY2VseSBmb3IgdGhlIGFwcCBrZXlcbiAgICAgICAgICAgIGNvbnN0IGFkZG9uS2V5ID0gYXdhaXQgaW5wdXQoe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2UgcHJvdmlkZSB0aGUga2V5IG9mIHRoZSBhcHAgdG8gYmUgaW5zdGFsbGVkJyxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBvcHRpb25zLmFwcEtleSxcbiAgICAgICAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBBc2sgdGhlbSBuaWNlbHkgZm9yIHRoZSBhcHAgbGljZW5zZSB0byBiZSB1c2VkXG4gICAgICAgICAgICBjb25zdCBhcHBMaWNlbnNlID0gYXdhaXQgZ2V0QXBwTGljZW5zZShvcHRpb25zLmxpY2Vuc2UsIG9wdGlvbnMuZm9yY2UpO1xuICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gdXNlcm5hbWUgb3IgUEFULCBhc2sgdGhlbSBuaWNlbHkgaG93IHRoZXkgd2FudCB0byBhdXRoZW50aWNhdGVcbiAgICAgICAgICAgIGNvbnN0IGF1dGhUeXBlID0gb3B0aW9ucy51c2VybmFtZSA/ICdiYXNpYycgOiBvcHRpb25zLnBhdCA/ICdwYXQnIDogYXdhaXQgc2VsZWN0KHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgSG93IGRvIHlvdSB3aXNoIHRvIGF1dGhlbnRpY2F0ZT9gLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICdiYXNpYycsXG4gICAgICAgICAgICAgICAgY2hvaWNlczogW1xuICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdVc2VybmFtZS9wYXNzd29yZCcsIHZhbHVlOiAnYmFzaWMnIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ1BlcnNvbmFsIEFjY2VzcyBUb2tlbicsIHZhbHVlOiAncGF0JyB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBBc2sgdGhlbSBuaWNlbHkgZm9yIHRoZSB1c2VybmFtZVxuICAgICAgICAgICAgY29uc3QgYWRtaW5Vc2VybmFtZSA9IGF1dGhUeXBlID09PSAnYmFzaWMnICYmICFvcHRpb25zLnVzZXJuYW1lID8gYXdhaXQgaW5wdXQoe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdQbGVhc2UgcHJvdmlkZSB0aGUgdXNlcm5hbWUgb2YgYSBzeXN0ZW0gYWRtaW5pc3RyYXRvcicsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgICAgIH0pIDogb3B0aW9ucy51c2VybmFtZTtcbiAgICAgICAgICAgIC8vIEFzayB0aGVtIG5pY2VseSBmb3IgdGhlIHVzZXJuYW1lXG4gICAgICAgICAgICBjb25zdCBhZG1pblBhc3N3b3JkID0gYXV0aFR5cGUgPT09ICdiYXNpYycgJiYgIW9wdGlvbnMucGFzc3dvcmQgPyBhd2FpdCBwYXNzd29yZFByb21wdCh7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1BsZWFzZSBwcm92aWRlIHRoZSB1c2VybmFtZSBvZiBhIHN5c3RlbSBhZG1pbmlzdHJhdG9yJyxcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZTogaXRlbSA9PiB0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycgJiYgaXRlbS5sZW5ndGggPiAwXG4gICAgICAgICAgICB9KSA6IG9wdGlvbnMucGFzc3dvcmQ7XG4gICAgICAgICAgICAvLyBBc2sgdGhlbSBuaWNlbHkgZm9yIHRoZSBQQVRcbiAgICAgICAgICAgIGNvbnN0IGFkbWluUEFUID0gYXV0aFR5cGUgPT09ICdwYXQnICYmICFvcHRpb25zLnBhdCA/IGF3YWl0IHBhc3N3b3JkUHJvbXB0KHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnUGxlYXNlIHByb3ZpZGUgdGhlIFBlcnNvbmFsIEFjY2VzcyBUb2tlbiBvZiBhIHN5c3RlbSBhZG1pbmlzdHJhdG9yJyxcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZTogaXRlbSA9PiB0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycgJiYgaXRlbS5sZW5ndGggPiAwXG4gICAgICAgICAgICB9KSA6IG9wdGlvbnMucGF0O1xuICAgICAgICAgICAgLy8gQXNrIHRoZW0gbmljZWx5IGlmIHdlIG5lZWQgdG8gcmVzdGFydCB0aGUgYXBwbGljYXRpb25cbiAgICAgICAgICAgIGNvbnN0IHJlc3RhcnRBZnRlckluc3RhbGwgPSBhd2FpdCBjb25maXJtKHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnUmVzdGFydCB0aGUgaG9zdCBhcHBsaWNhdGlvbiBhZnRlciBpbnN0YWxsYXRpb24/JyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gVGVsbCB0aGVtIHdlIGFyZSBzdGFydGluZ1xuICAgICAgICAgICAgY29uc29sZS5sb2coYFxuICBJbnN0YWxsaW5nIHRoZSBhcHAgKCR7YWRkb25LZXl9KSBpbnRvIHRoZSBjbHVzdGVyIHVzaW5nIHRoZSBVbml2ZXJzYWwgUGx1Z2luIE1hbmFnZXIgUkVTVCBBUElgKTtcbiAgICAgICAgICAgIC8vIFNob3cgYSBwcm9ncmVzcyBiYXJcbiAgICAgICAgICAgIHByb2dyZXNzQmFyLnN0YXJ0KDE4MCwgMCk7XG4gICAgICAgICAgICBjb25zdCB0aW1lcklkID0gc2V0SW50ZXJ2YWwoKCkgPT4gcHJvZ3Jlc3NCYXIuaW5jcmVtZW50KCksIDEwMDApO1xuICAgICAgICAgICAgLy8gR2V0IHRoZSBkb3dubG9hZCBVUkwgZnJvbSB0aGUgYXBwS2V5XG4gICAgICAgICAgICBjb25zdCB1cmwgPSBhd2FpdCBnZXRVcmxCeUFwcEtleShhZGRvbktleSk7XG4gICAgICAgICAgICAvLyBEb3dubG9hZCB0aGUgZmlsZSBmcm9tIE1QQUNcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBkb3dubG9hZEZpbGUodXJsKTtcbiAgICAgICAgICAgIC8vIFVwbG9hZCBpdCBpbnRvIHRoZSBjbHVzdGVyIHVzaW5nIHRoZSBVUE0gUkVTVCBBUElcbiAgICAgICAgICAgIGNvbnN0IGlzSW5zdGFsbGVkID0gYXdhaXQgdXBsb2FkVG9VUE0ob3B0aW9ucy5iYXNlVXJsLCBmaWxlLCBhZG1pblVzZXJuYW1lLCBhZG1pblBhc3N3b3JkLCBhZG1pblBBVCwgZmFsc2UpO1xuICAgICAgICAgICAgaWYgKCFpc0luc3RhbGxlZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGluc3RhbGwgYXBwIGludG8gdGhlIGNsdXN0ZXIgdXNpbmcgdGhlIFVuaXZlcnNhbCBQbHVnaW4gTWFuYWdlciBSRVNUIEFQSScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgbmVlZCB0byByZXN0YXJ0IHRoZSBhcHBsaWNhdGlvbiBjb250YWluZXJcbiAgICAgICAgICAgIGlmIChyZXN0YXJ0QWZ0ZXJJbnN0YWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gQXNrIHRoZW0gbmljZWx5IGZvciB0aGUgaG9zdCBwcm9kdWN0XG4gICAgICAgICAgICAgICAgY29uc3QgcHJvZHVjdCA9IG9wdGlvbnMucHJvZHVjdCB8fCBhd2FpdCBnZXRQcm9kdWN0KCk7XG4gICAgICAgICAgICAgICAgLy8gQXNrIGZvciB0aGUgQVdTIGNyZWRlbnRpYWxzXG4gICAgICAgICAgICAgICAgY29uc3QgW2F3c19hY2Nlc3Nfa2V5X2lkLCBhd3Nfc2VjcmV0X2FjY2Vzc19rZXldID0gYXdhaXQgZ2V0QVdTQ3JlZGVudGlhbHMocHJvZHVjdCwgb3B0aW9ucy5mb3JjZSk7XG4gICAgICAgICAgICAgICAgLy8gQXNrIGZvciB0aGUgZW52aXJvbm1lbnQgbmFtZVxuICAgICAgICAgICAgICAgIGNvbnN0IGVudmlyb25tZW50ID0gb3B0aW9ucy5lbnZpcm9ubWVudCB8fCBhd2FpdCBnZXRFbnZpcm9ubWVudE5hbWUoKTtcbiAgICAgICAgICAgICAgICAvLyBPaCByaWdodCwgd2UgYWxzbyBuZWVkIERDQVBUIGluIG9yZGVyIHRvIGJlIGFibGUgdG8gcmVzdGFydCB0aGUgY2x1c3RlclxuICAgICAgICAgICAgICAgIGNvbnN0IGN3ZCA9IGF3YWl0IGdldEFwdERpY3Rvcnkob3B0aW9ucy5jd2QsIGZhbHNlLCBvcHRpb25zLmZvcmNlKTtcbiAgICAgICAgICAgICAgICAvLyBXZSBhcmUgbm93IGdvaW5nIHRvIHJlc3RhcnQgdGhlIGNsdXN0ZXIgYW5kIGhvcGUgZm9yIHRoZSBiZXN0XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYCAgUmVzdGFydGluZyAke29wdGlvbnMucHJvZHVjdH0gdG8gZW5zdXJlIGFwcCBpbnN0YWxsYXRpb25gKTtcbiAgICAgICAgICAgICAgICBhd2FpdCByZXN0YXJ0Q2x1c3Rlcih7XG4gICAgICAgICAgICAgICAgICAgIGN3ZCxcbiAgICAgICAgICAgICAgICAgICAgcHJvZHVjdDogcHJvZHVjdCxcbiAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQ6IGVudmlyb25tZW50LFxuICAgICAgICAgICAgICAgICAgICBhd3NfYWNjZXNzX2tleV9pZDogYXdzX2FjY2Vzc19rZXlfaWQsXG4gICAgICAgICAgICAgICAgICAgIGF3c19zZWNyZXRfYWNjZXNzX2tleTogYXdzX3NlY3JldF9hY2Nlc3Nfa2V5LFxuICAgICAgICAgICAgICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gV2FpdCBmb3IgdGhlIHBsdWdpbiB0byBiZSBlbmFibGVkXG4gICAgICAgICAgICBjb25zdCBpc0VuYWJsZWQgPSBhd2FpdCB3YWl0Rm9yUGx1Z2luVG9CZUVuYWJsZWQoYWRkb25LZXksIG9wdGlvbnMuYmFzZVVybCwgYWRtaW5Vc2VybmFtZSwgYWRtaW5QYXNzd29yZCwgZmFsc2UpO1xuICAgICAgICAgICAgaWYgKCFpc0VuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBhcHAgY291bGQgbm90IGJlIGVuYWJsZWQgb24gdGhlIGNsdXN0ZXIsIHBsZWFzZSByZWZlciB0byB0aGUgYXBwbGljYXRpb24gbG9nIGZpbGVzIGZvciBtb3JlIGluZm9ybWF0aW9uJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBSZWdpc3RlciB0aGUgcHJvdmlkZWQgbGljZW5zZVxuICAgICAgICAgICAgY29uc3QgaXNMaWNlbnNlZCA9IGF3YWl0IHJlZ2lzdGVyTGljZW5zZShhZGRvbktleSwgYXBwTGljZW5zZSwgb3B0aW9ucy5iYXNlVXJsLCBhZG1pblVzZXJuYW1lLCBhZG1pblBhc3N3b3JkLCBmYWxzZSk7XG4gICAgICAgICAgICBpZiAoIWlzTGljZW5zZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBsaWNlbnNlIGNvdWxkIG5vdCBiZSBhcHBsaWVkIGZvciB0aGUgYXBwIG9uIHRoZSBjbHVzdGVyLCBwbGVhc2UgcmVmZXIgdG8gdGhlIGFwcGxpY2F0aW9uIGxvZyBmaWxlcyBmb3IgbW9yZSBpbmZvcm1hdGlvbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSB0ZW1wb3JhcnkgZmlsZVxuICAgICAgICAgICAgcm1TeW5jKGZpbGUsIHsgZm9yY2U6IHRydWUgfSk7XG4gICAgICAgICAgICAvLyBTdG9wIHRoZSBwcm9ncmVzcyBiYXJcbiAgICAgICAgICAgIHByb2dyZXNzQmFyLnN0b3AoKTtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXJJZCk7XG4gICAgICAgICAgICAvLyBUZWxsIHRoZW0gd2Ugc3VjY2VlZGVkXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhg4pyUIEZpbmlzaGVkIGluc3RhbGxpbmcgdGhlIGFwcCAoJHthZGRvbktleX0pYCk7XG4gICAgICAgICAgICAvLyBUaGV5IGNob3NlIHZpb2xlbmNlXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBSdWIgaXQgaW4gdGhlaXIgZmFjZVxuICAgICAgICAgICAgY29uc29sZS5sb2coYFxuICBZb3UgY2FuIG5vdyBpbnN0YWxsIHRoZSBhcHAgbWFudWFsbHkgaW50byB0aGUgY2x1c3Rlci5cbiAgUGxlYXNlIGdvIHRvIHRoZSBmb2xsb3dpbmcgcGFnZTpcbiAgICBcbiAgJHtvcHRpb25zLmJhc2VVcmx9L3BsdWdpbnMvc2VydmxldC91cG0/c291cmNlPXNpZGVfbmF2X21hbmFnZV9hZGRvbnNcbmApO1xuICAgICAgICAgICAgLy8gTWFrZSB0aGVtIGdyb3ZlbFxuICAgICAgICAgICAgY29uc3QgaXNJbnN0YWxsZWRNYW51YWxseSA9IGF3YWl0IGNvbmZpcm0oe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBQbGVhc2UgY29uZmlybSB0aGF0IHlvdSBoYXZlIGluc3RhbGxlZCB0aGUgYXBwIG1hbnVhbGx5YFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBJZiB0aGUgYXBwIGFpbid0IGluc3RhbGxlZCwgd2UgYWluJ3QgZG9pbmcgbm90aGluJy4gU28gd2UgYmV0dGVyIHRocm93IGEgaGlzc3kgZml0XG4gICAgICAgICAgICBpZiAoIWlzSW5zdGFsbGVkTWFudWFsbHkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0l0IGlzIHJlcXVpcmVkIHRvIGluc3RhbGwgdGhlIGFwcCB0byBydW4gdGhlIHNlY29uZCBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHRlc3QnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG4iLCJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuZXhwb3J0IGNvbnN0IGdldFJlaW5kZXhQcm9ncmVzcyA9IGFzeW5jIChiYXNlVXJsKSA9PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5nZXQoYCR7YmFzZVVybH0vcmVzdC9hcGkvMi9yZWluZGV4YCwge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBgQmFzaWMgJHtCdWZmZXIuZnJvbShgYWRtaW46YWRtaW5gKS50b1N0cmluZygnYmFzZTY0Jyl9YFxuICAgICAgICB9XG4gICAgfSkuY2F0Y2goKCkgPT4gbnVsbCk7XG4gICAgY29uc3QgY3VycmVudFRhc2sgPSAocmVzcG9uc2UgJiYgcmVzcG9uc2Uuc3RhdHVzID09PSAyMDApID8gcmVzcG9uc2UuZGF0YSA6IHt9O1xuICAgIGNvbnN0IHsgcHJvZ3Jlc3NVcmwsIGN1cnJlbnRQcm9ncmVzcywgc3VjY2VzcywgZmluaXNoVGltZSB9ID0gY3VycmVudFRhc2s7XG4gICAgY29uc3QgaXNGaW5pc2hlZCA9IGN1cnJlbnRQcm9ncmVzcyA9PT0gMTAwIHx8IHN1Y2Nlc3MgfHwgZmluaXNoVGltZSAhPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIFtwcm9ncmVzc1VybCwgc3VjY2VzcywgaXNGaW5pc2hlZF07XG59O1xuIiwiaW1wb3J0IHsgY29uZmlybSB9IGZyb20gJ0BpbnF1aXJlci9wcm9tcHRzJztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBQcmVzZXRzLCBTaW5nbGVCYXIgfSBmcm9tICdjbGktcHJvZ3Jlc3MnO1xuaW1wb3J0IGZraWxsIGZyb20gJ2ZraWxsJztcbmltcG9ydCB7IGV4aXN0c1N5bmMsIHJtU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCBwdXBwZXRlZXIgZnJvbSAncHVwcGV0ZWVyJztcbmltcG9ydCB7IGdldFJlaW5kZXhQcm9ncmVzcyB9IGZyb20gJy4vZ2V0UmVpbmRleFByb2dyZXNzJztcbmltcG9ydCB7IHdhaXRGb3JVc2VySW5wdXQgfSBmcm9tICcuL3dhaXRGb3JVc2VySW5wdXQnO1xuY29uc3QgcHJvZ3Jlc3NCYXIgPSBuZXcgU2luZ2xlQmFyKHtcbiAgICBmb3JtYXQ6ICcgIEx1Y2VuZSByZS1pbmRleCBbe2Jhcn1dIHtwZXJjZW50YWdlfSUgfCBFVEE6IHtyZW1haW5pbmd9bScsXG4gICAgaGlkZUN1cnNvcjogdHJ1ZVxufSwgUHJlc2V0cy5sZWdhY3kpO1xuZXhwb3J0IGNvbnN0IHJlaW5kZXggPSBhc3luYyAoYmFzZVVybCwgb3V0cHV0RGlyLCBmb3JjZSkgPT4ge1xuICAgIC8vIENoZWNrIGlmIHRoZSByZWluZGV4IHNjcmVlbnNob3QgYWxyZWFkeSBleGlzdHNcbiAgICBpZiAoZXhpc3RzU3luYyhqb2luKG91dHB1dERpciwgJ2x1Y2VuZS1yZWluZGV4LnBuZycpKSkge1xuICAgICAgICAvLyBBc2sgbmljZWx5IGlmIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBleGlzdGluZyB0ZXN0IHJlc3VsdHNcbiAgICAgICAgY29uc3Qgb3ZlcndyaXRlRXhpc3RpbmdSZXN1bHRzID0gZm9yY2UgfHwgYXdhaXQgY29uZmlybSh7XG4gICAgICAgICAgICBtZXNzYWdlOiAnVGhlcmUgYXJlIGV4aXN0aW5nIHJlaW5kZXggcmVzdWx0cywgZG8geW91IHdhbnQgdG8gb3ZlcndyaXRlIHRoZXNlIHJlc3VsdHM/J1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gSWYgd2UgbmVlZCB0byBvdmVyd3JpdGUgdGhlIHRlc3QgcmVzdWx0cywgd2Ugc2hvdWxkIGRvIHNvXG4gICAgICAgIGlmIChvdmVyd3JpdGVFeGlzdGluZ1Jlc3VsdHMpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdSZW1vdmluZyBleGlzdGluZyByZWluZGV4IHJlc3VsdHMnKTtcbiAgICAgICAgICAgIHJtU3luYyhqb2luKG91dHB1dERpciwgJ2x1Y2VuZS1yZWluZGV4LnBuZycpLCB7IGZvcmNlOiB0cnVlIH0pO1xuICAgICAgICAgICAgLy8gSWYgd2UgYXJlIG5vdCBhbGxvd2VkIHRvIG92ZXJ3cml0ZSB0aGUgdGVzdCByZXN1bHRzLCB0aGVyZSBpcyBubyBwb2ludCBpbiBydW5uaW5nIHRoaXMgdGVzdFxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYFNraXBwaW5nIEx1Y2VuZSBJbmRleCBUaW1pbmcgdGVzdCBleGVjdXRpb24sIGEgc3VjY2Vzc2Z1bCB0ZXN0IHJ1biB3YXMgYWxyZWFkeSBjb21wbGV0ZWRgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBBc2sgbmljZWx5IGlmIHdlIGNhbiBzdGFydFxuICAgIGNvbnN0IHsgdmFsdWUgfSA9IGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoYFByZXNzIGFueSBrZXkgdG8gc3RhcnQgdGhlIEx1Y2Vuc2UgSW5kZXggVGltaW5nIHRlc3QuLi5cbiAgKG9yICdzJyB0byBza2lwIGlmIHRoZSB0ZXN0IGlzIGFscmVhZHkgcnVubmluZylcbmAsIGZvcmNlKTtcbiAgICAvLyBDaGVjayBpZiB0aGV5IGFncmVlZCB0byBzdGFydGluZyB0aGUgcmVpbmRleFxuICAgIGlmICh2YWx1ZSAhPT0gJ3MnKSB7XG4gICAgICAgIC8vIFRoZXkgZGlkISBTbyBsZXQncyBzdGFydCBpdCB1c2luZyB0aGUgSmlyYSBSRVNUIEFQSVxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLnBvc3QoYCR7YmFzZVVybH0vcmVzdC9hcGkvMi9yZWluZGV4P3R5cGU9Rk9SRUdST1VORGAsIHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiBgQmFzaWMgJHtCdWZmZXIuZnJvbShgYWRtaW46YWRtaW5gKS50b1N0cmluZygnYmFzZTY0Jyl9YFxuICAgICAgICAgICAgfVxuICAgICAgICB9KS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICAgICAgLy8gTGV0J3MgbWFrZSBzdXJlIHRoYXQgd2UgZ290IGEgcHJvcGVyIHJlc3BvbnNlXG4gICAgICAgIGlmIChyZXNwb25zZSA9PT0gbnVsbCB8fCByZXNwb25zZS5zdGF0dXMgIT09IDIwMikge1xuICAgICAgICAgICAgLy8gT2ggbm8sIHNvbWV0aGluZyB3ZW50IHdyb25nXG4gICAgICAgICAgICAvLyBObyByZWluZGV4IGlzIG5vIHN1Y2Nlc3NmdWwgdGVzdCwgc28gd2Ugc2hvdWxkIHRocm93IGEgaGlzc3kgZml0XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBzdGFydCBMdWNlbnNlIEluZGV4IFRpbWluZyB0ZXN0LCBjb3VsZCBub3QgcGVyZm9ybSByZWluZGV4Jyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gU3RhcnQgdGhlIGNsb2NrIVxuICAgIGNvbnN0IHN0YXJ0VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIC8vIFN0YXJ0IHRoZSBwcm9ncmVzcyBiYXIgdG8gY291bnQgZm9yIDYwIG1pbnV0ZXNcbiAgICBwcm9ncmVzc0Jhci5zdGFydCgzNjAwLCAwLCB7IHJlbWFpbmluZzogNjAgfSk7XG4gICAgLy8gUGxhY2Vob2xkZXIgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSByZWluZGV4IGlzIGZpbmlzaGVkXG4gICAgbGV0IGlzRmluaXNoZWQgPSBmYWxzZTtcbiAgICAvLyBXZSBhcmUgZ29pbmcgdG8gdHJ5IHRvIGdldCBhbiB1cGRhdGUgZnJvbSBKaXJhXG4gICAgd2hpbGUgKCFpc0ZpbmlzaGVkKSB7XG4gICAgICAgIC8vIEdldCBhbiB1cGRhdGUgZnJvbSB0aGUgc2VydmVyXG4gICAgICAgIGNvbnN0IFtwcm9ncmVzc1VybCwgc3VjY2VzcywgZmluaXNoZWRdID0gYXdhaXQgZ2V0UmVpbmRleFByb2dyZXNzKGJhc2VVcmwpO1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUgcmVpbmRleCBoYXMgZmluaXNoZWRcbiAgICAgICAgaWYgKCFmaW5pc2hlZCkge1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYXJlIHN0aWxsIHdpdGhpbiB0aGUgNjAgbWludXRlIHdpbmRvd1xuICAgICAgICAgICAgaWYgKHByb2dyZXNzQmFyLmdldFByb2dyZXNzKCkgPCBwcm9ncmVzc0Jhci5nZXRUb3RhbCgpKSB7XG4gICAgICAgICAgICAgICAgLy8gV2UgYXJlLCBzbyBsZXQncyBqdXN0IGluY3JlbWVudCB0aGUgcHJvZ3Jlc3MgYmFyIGFuZCB0cnkgYWdhaW5cbiAgICAgICAgICAgICAgICBwcm9ncmVzc0Jhci5pbmNyZW1lbnQoNjAsIHtcbiAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nOiA2MCAtIE1hdGguZmxvb3IoKCgobmV3IERhdGUoKS5nZXRUaW1lKCkgLSBzdGFydFRpbWUpIC8gMTAwMCkgLyA2MCkpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgMSBtaW51dGUgdW50aWwgd2UgcmV0cnlcbiAgICAgICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMSAqIDYwICogMTAwMCkpO1xuICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBubyBsb25nZXIgaW4gdGhlIDYwIG1pbnV0ZSB3aW5kb3csIG1hbnVhbCBhY3Rpb24gaXMgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAvLyB3aGVuIG9wZXJhdGluZyBpbiBub24taW50ZXJhY3RpdmUgbW9kZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIWZvcmNlKSB7XG4gICAgICAgICAgICAgICAgLy8gU3RvcCB0aGUgcHJvZ3Jlc3MgYmFyXG4gICAgICAgICAgICAgICAgcHJvZ3Jlc3NCYXIuc3RvcCgpO1xuICAgICAgICAgICAgICAgIC8vIFRlbGwgdGhlIHVzZXIgdGhhdCB0aGV5IG5lZWQgdG8gZG8gc29tZXRoaW5nXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFxuICBMdWNlbnNlIHJlLWluZGV4IGlzIHRha2luZyBhIGxvbmcgdGltZSB0byBmaW5pc2guIFBsZWFzZSBnbyB0byB0aGUgZm9sbG93aW5nIFVSTFxuICAke2Jhc2VVcmx9JHtwcm9ncmVzc1VybCB8fCAnL3NlY3VyZS9hZG1pbi9qaXJhL0luZGV4UHJvZ3Jlc3MuanNwYSd9XG5cbiAgYW5kIG1hbnVhbGx5IGNvbmZpcm0gdGhhdCB0aGUgcmUtaW5kZXggaGFzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcbmApO1xuICAgICAgICAgICAgICAgIC8vIEFzayB0aGUgdXNlciB0byBjb25maXJtIHRoZSByZWluZGV4IGhhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XG4gICAgICAgICAgICAgICAgaXNGaW5pc2hlZCA9IGF3YWl0IGNvbmZpcm0oeyBtZXNzYWdlOiAnSGFzIHRoZSByZWluZGV4IGNvbXBsZXRlZCBzdWNjZXNmdWxseT8nIH0pO1xuICAgICAgICAgICAgICAgIC8vIElmIHdlIGFyZSBpbiBub24taW50ZXJhY3RpdmUgbW9kZSwgd2UgaGF2ZSBubyBjaG9pY2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBvbmx5IG9wdGlvbiBsZWZ0IGlzIHRvIHRocm93IGEgaGlzc3kgZml0XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZS1pbmRleCBoYXMgbm90IGNvbXBsZXRlZCB3aXRoaW4gNjAgbWludXRlcywgdGVzdCBoYXMgZmFpbGVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGZpbmlzaGVkIHN1Y2Nlc3NmdWxseVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFzdWNjZXNzKSB7XG4gICAgICAgICAgICAvLyBTdG9wIHRoZSBwcm9ncmVzcyBiYXJcbiAgICAgICAgICAgIHByb2dyZXNzQmFyLnN0b3AoKTtcbiAgICAgICAgICAgIC8vIFRlbGwgdGhlIHVzZXIgdGhhdCBzb21ldGhpbmcgaGFzIGdvbmUgY29tcGxldGVseSB3cm9uZ1xuICAgICAgICAgICAgY29uc29sZS5sb2coYFxuICBMdWNlbnNlIHJlLWluZGV4IGZpbmlzaGVkIHVuc3VjY2VzZnVsbHkuIFBsZWFzZSBnbyB0byB0aGUgZm9sbG93aW5nIFVSTCBmb3IgbW9yZSBpbmZvcm1hdGlvbjpcbiAgJHtiYXNlVXJsfSR7cHJvZ3Jlc3NVcmwgfHwgJy9zZWN1cmUvYWRtaW4vamlyYS9JbmRleFByb2dyZXNzLmpzcGEnfVxuYCk7XG4gICAgICAgICAgICAvLyBOb3cgdGhyb3cgYSBoaXNzeSBmaXQgYW55d2F5XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0x1Y2VuY2UgSW5kZXggVGltaW5nIHRlc3QgZmFpbGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVXBkYXRlIHRoZSBsb29wIHZhcmlhYmxlXG4gICAgICAgIGlzRmluaXNoZWQgPSBmaW5pc2hlZDtcbiAgICB9XG4gICAgLy8gR2V0IHRoZSBsYXRlc3QgdXBkYXRlIG9uIHRoZSByZWluZGV4IHByb2dyZXNzXG4gICAgY29uc3QgW3Byb2dyZXNzVXJsXSA9IGF3YWl0IGdldFJlaW5kZXhQcm9ncmVzcyhiYXNlVXJsKTtcbiAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEgcHJvZ3Jlc3MgVVJMXG4gICAgaWYgKCFwcm9ncmVzc1VybCkge1xuICAgICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgcHJvZ3Jlc3MgVVJMLCBzb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgd2Ugc2hvdWxkIHRocm93IGEgaGlzc3kgZml0XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgdGhlIGxhdGVzdCBMdWNlbmNlIEluZGV4IFRpbWluZyB0ZXN0IHJlc3VsdHMnKTtcbiAgICB9XG4gICAgLy8gUmV0cnkgY291bnRlclxuICAgIGxldCByZXRyeUNvdW50ID0gMDtcbiAgICAvLyBQbGFjZWhvbGRlciBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHNjcmVlbnNob3Qgd2FzIHN1Y2Nlc3NmdWxseSBjcmVhdGVkXG4gICAgbGV0IHNjcmVlbnNob3RDcmVhdGVkID0gZmFsc2U7XG4gICAgY29uc29sZS5sb2coYFxuXG4gIE5hdmlnYXRpbmcgdG8gJHtiYXNlVXJsfSR7cHJvZ3Jlc3NVcmx9IHRvIGNyZWF0ZSBhIHNjcmVlbnNob3Qgb2YgdGhlIGNvbXBsZXRlZCByZWluZGV4IG9wZXJhdGlvblxuYCk7XG4gICAgLy8gTG9vcCB1bnRpbCB3ZSd2ZSBtYWRlIGEgc2NyZWVuIHNob3Qgb3IgdHJpZWQgaXQgNSB0aW1lcyAoaW5jbC4gb25lIHRpbWUgbWFudWFsbHkpXG4gICAgd2hpbGUgKCFzY3JlZW5zaG90Q3JlYXRlZCAmJiByZXRyeUNvdW50IDwgNSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gSWYgdGhlIHJldHJ5IGNvdW50IGlzIDQsIHRoaXMgbWVhbnMgdGhpcyBpcyBvdXIgbGFzdCByb2Rlb1xuICAgICAgICAgICAgaWYgKHJldHJ5Q291bnQgPT09IDQpIHtcbiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBhcmUgaW4gbm9uLWludGVyYWN0aXZlIG1vZGVcbiAgICAgICAgICAgICAgICBpZiAoZm9yY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGxhc3Qgc3RlcCBpcyBtYW51YWwsIHdoaWNoIHdlIGNhbid0IGRvIGluIG5vbi1pbnRlcmFjdGl2ZSBtb2RlXG4gICAgICAgICAgICAgICAgICAgIC8vIHNvIG91ciBvbmx5IG9wdGlvbiBsZWZ0IGlzIHRvIHRocm93IGEgaGlzc3kgZml0XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGF1dG9tYXRpY2FsbHkgY2FwdHVyZSBhIHNjcmVlbiBzaG90IG9mIHRoZSBMdWNlbmUgUmVpbmRleCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBUZWxsIHRoZSB1c2VyIHRoZXkgaGF2ZSB0byBkbyBzb21ldGhpbmdcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgXG4gIFdlJ3ZlIHRyaWVkIHRvIGF1dG9tYXRpY2FsbHkgY3JlYXRlIGEgc2NyZWVuc2hvdCwgYnV0IHRoZSBwcm9jZXNzIHNlZW1zIHRvIGJlIHN0dWNrXG5cbiAgV2Ugd2lsbCBub3cgb3BlbiBhIGJyb3dzZXIgd2luZG93IGZvciB5b3UgdG8gZm9sbG93IHRoZSBhdXRvbWF0ZWQgc3RlcHMgYW5kIGludGVydmVuZVxuICB3aGVyZSBwb3NzaWJsZSAoZm9yIGluc3RhbmNlLCBieSBwcmVzc2luZyBhIGJ1dHRvbiBvciByZWxvYWRpbmcgYSBzY3JlZW4pXG5gKTtcbiAgICAgICAgICAgICAgICAvLyBOb3cgYXNrIHRoZW0gbmljZWx5IGlmIHRoZXkgYXJlIHJlYWR5XG4gICAgICAgICAgICAgICAgYXdhaXQgd2FpdEZvclVzZXJJbnB1dCgnUHJlc3MgYSBrZXkgdG8gb3BlbiB0aGUgYnJvd3NlciB3aW5kb3cuLi4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFN0YXJ0IHRoZSBicm93c2VyIHNlc3Npb25cbiAgICAgICAgICAgIGNvbnN0IGJyb3dzZXIgPSBhd2FpdCBwdXBwZXRlZXIubGF1bmNoKHtcbiAgICAgICAgICAgICAgICBoZWFkbGVzczogKCFmb3JjZSAmJiByZXRyeUNvdW50IDwgNCksXG4gICAgICAgICAgICAgICAgYXJnczogWyctLWRpc2FibGUtZmVhdHVyZXM9SHR0cHNGaXJzdEJhbGFuY2VkTW9kZUF1dG9FbmFibGUnXSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IHBhZ2Ugc2Vzc2lvblxuICAgICAgICAgICAgY29uc3QgcGFnZSA9IGF3YWl0IGJyb3dzZXIubmV3UGFnZSgpO1xuICAgICAgICAgICAgYXdhaXQgcGFnZS5zZXRWaWV3cG9ydCh7IHdpZHRoOiAxMDgwLCBoZWlnaHQ6IDEwMjQgfSk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIC8vIE9wZW4gdGhlIHJlaW5kZXggcHJvZ3Jlc3MgcGFnZVxuICAgICAgICAgICAgICAgIGF3YWl0IHBhZ2UuZ290byhgJHtiYXNlVXJsfSR7cHJvZ3Jlc3NVcmx9YCk7XG4gICAgICAgICAgICAgICAgLy8gTG9nIGluXG4gICAgICAgICAgICAgICAgY29uc3QgaGFzTGVnYWN5TG9naW5TY3JlZW4gPSBhd2FpdCBwYWdlLiQoJyNsb2dpbi1mb3JtLXVzZXJuYW1lJyk7XG4gICAgICAgICAgICAgICAgaWYgKGhhc0xlZ2FjeUxvZ2luU2NyZWVuKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHBhZ2UubG9jYXRvcignI2xvZ2luLWZvcm0tdXNlcm5hbWUnKS5maWxsKCdhZG1pbicpO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBwYWdlLmxvY2F0b3IoJyNsb2dpbi1mb3JtLXBhc3N3b3JkJykuZmlsbCgnYWRtaW4nKTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgcGFnZS5sb2NhdG9yKCcjbG9naW4tZm9ybS1zdWJtaXQnKS5jbGljaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgcGFnZS5sb2NhdG9yKCcjdXNlcm5hbWUtZmllbGQnKS5maWxsKCdhZG1pbicpO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBwYWdlLmxvY2F0b3IoJyNwYXNzd29yZC1maWVsZCcpLmZpbGwoJ2FkbWluJyk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHBhZ2UubG9jYXRvcignI2xvZ2luLWJ1dHRvbicpLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGF3YWl0IHBhZ2Uud2FpdEZvck5hdmlnYXRpb24oeyB3YWl0VW50aWw6IFsnZG9tY29udGVudGxvYWRlZCcsICdsb2FkJywgJ25ldHdvcmtpZGxlMCddLCB0aW1lb3V0OiA1ICogNjAgKiAxMDAwIH0pO1xuICAgICAgICAgICAgICAgIC8vIFdlYnN1ZG9cbiAgICAgICAgICAgICAgICBhd2FpdCBwYWdlLmxvY2F0b3IoJyNsb2dpbi1mb3JtLWF1dGhlbnRpY2F0ZVBhc3N3b3JkJykuZmlsbCgnYWRtaW4nKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBwYWdlLmxvY2F0b3IoJyNsb2dpbi1mb3JtLXN1Ym1pdCcpLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgLy8gWFNSRiB0b2tlbiBleHBpcmF0aW9uIHNuYWZ1XG4gICAgICAgICAgICAgICAgYXdhaXQgcGFnZS5sb2NhdG9yKCcjYXRsX3Rva2VuX3JldHJ5X2J1dHRvbicpLmNsaWNrKCkuY2F0Y2goKCkgPT4gbnVsbCk7XG4gICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgd2UgYXJlIG9uIHRoZSByZWluZGV4IHBhZ2UgYW5kIHRoYXQgaXQgaXMgbG9hZGVkXG4gICAgICAgICAgICAgICAgYXdhaXQgcGFnZS53YWl0Rm9yU2VsZWN0b3IoJyNhY2tub3dsZWRnZV9zdWJtaXQnKTtcbiAgICAgICAgICAgICAgICAvLyBNYWtlIHRoZSBzY3JlZW4gc2hvdFxuICAgICAgICAgICAgICAgIGF3YWl0IHBhZ2Uuc2NyZWVuc2hvdCh7XG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGpvaW4ob3V0cHV0RGlyLCAnbHVjZW5lLXJlaW5kZXgucG5nJylcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSBoYXZlIGNhcHR1cmVkIHRoZSBzY3JlZW4gc2hvdCBpbiB0aGUgb3V0cHV0IGRpcmVjdG9yeVxuICAgICAgICAgICAgICAgIHNjcmVlbnNob3RDcmVhdGVkID0gZXhpc3RzU3luYyhqb2luKG91dHB1dERpciwgJ2x1Y2VuZS1yZWluZGV4LnBuZycpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBzY3JlZW5zaG90IG9mIHRoZSBjdXJyZW50IHBhZ2UgdG8gYXNzaXN0IHdpdGggZGVidWdnaW5nXG4gICAgICAgICAgICAgICAgLy8gSWdub3JlIHRoZSBlcnJvciBpZiB3ZSBmYWlsIHRvIGNyZWF0ZSBhIHNjcmVlbnNob3RcbiAgICAgICAgICAgICAgICBhd2FpdCBwYWdlLnNjcmVlbnNob3Qoe1xuICAgICAgICAgICAgICAgICAgICBwYXRoOiBqb2luKG91dHB1dERpciwgYGx1Y2VuZS1yZWluZGV4LWVycm9yLSR7cmV0cnlDb3VudH0ucG5nYClcbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoKSA9PiB7IH0pO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYCAgQ291bGQgbm90IGdldCBhIHNjcmVlbiBzaG90IG9mIHRoZSBsdWNlbmUgaW5kZXhpbmcgcmVzdWx0LCByZXRyeWluZy4uLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgLy8gQ2xvc2UgdGhlIGJyb3dzZXIgd2luZG93XG4gICAgICAgICAgICAgICAgYXdhaXQgYnJvd3Nlci5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIC8vIE5vIEkgbWVhbiwgcmVhbGx5IGNsb3NlIGl0XG4gICAgICAgICAgICAgICAgYXdhaXQgZmtpbGwoJ0Nocm9tZScpLmNhdGNoKCgpID0+IG51bGwpO1xuICAgICAgICAgICAgICAgIGF3YWl0IGZraWxsKCdjaHJvbWUnKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBma2lsbCgnQ2hyb21pdW0nKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBma2lsbCgnY2hyb21pdW0nKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coYCAgQ291bGQgbm90IGdldCBhIHNjcmVlbiBzaG90IG9mIHRoZSBsdWNlbmUgaW5kZXhpbmcgcmVzdWx0LCByZXRyeWluZy4uLmApO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgcmV0cnlDb3VudCsrO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIElmIHdlIGNvdWxkIG5vdCBjcmVhdGUgdGhlIHNjcmVlbnNob3QsIHRocm93IGEgaGlzc3kgZml0IVxuICAgIGlmICghc2NyZWVuc2hvdENyZWF0ZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gY2FwdHVyZSB0aGUgbHVjZW5lIGluZGV4aW5nIHJlc3VsdHMnKTtcbiAgICB9XG4gICAgLy8gT3RoZXJ3aXNlIHdlIHNob3VsZCBzaG93IGEgaGFwcHkgbWVzc2FnZVxuICAgIGNvbnNvbGUubG9nKGBcbiAg4pyUIEx1Y2VuY2UgSW5kZXggVGltaW5nIHRlc3QgZm9yZWdyb3VuZCBpbmRleGluZyBvZiBKaXJhIGhhcyBjb21wbGV0ZWRcbiAgU2NyZWVuc2hvdCBsb2NhdGlvbjogJHtqb2luKG91dHB1dERpciwgJ2x1Y2VuZS1yZWluZGV4LnBuZycpfWApO1xufTtcbiIsImltcG9ydCB7IG1rZGlyU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IGVtcHR5TGluZSB9IGZyb20gJy4uL21lc3NhZ2VzJztcbmltcG9ydCB7IGluc3RhbGwgfSBmcm9tICcuL2RjYXB0JztcbmltcG9ydCB7IGdldEFwdERpY3RvcnkgfSBmcm9tICcuL2dldEFwdERpcmVjdG9yeSc7XG5pbXBvcnQgeyBnZXRBV1NDcmVkZW50aWFscyB9IGZyb20gJy4vZ2V0QVdTQ3JlZGVudGlhbHMnO1xuaW1wb3J0IHsgZ2V0Q2x1c3RlclVSTCB9IGZyb20gJy4vZ2V0Q2x1c3RlclVSTCc7XG5pbXBvcnQgeyBpbnN0YWxsQXBwSW5DbHVzdGVyIH0gZnJvbSAnLi9pbnN0YWxsQXBwSW5DbHVzdGVyJztcbmltcG9ydCB7IHBlcnNpc3RDbHVzdGVyQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vcGVyc2lzdENsdXN0ZXJDb25maWd1cmF0aW9uJztcbmltcG9ydCB7IHBlcnNpc3RBV1NDcmVkZW50aWFscyB9IGZyb20gJy4vcGVyc2lzdHNBV1NDcmVkZW50aWFscyc7XG5pbXBvcnQgeyByZWluZGV4IH0gZnJvbSAnLi9yZWluZGV4JztcbmltcG9ydCB7IHdhaXRGb3JVc2VySW5wdXQgfSBmcm9tICcuL3dhaXRGb3JVc2VySW5wdXQnO1xuZXhwb3J0IGNvbnN0IHJ1bkx1Y2VuZVRpbWluZ1Rlc3QgPSBhc3luYyAob3B0aW9ucywgbWVzc2FnZXMpID0+IHtcbiAgICAvLyBTaG93IHRoZSB3ZWxjb21lIG1lc3NhZ2VcbiAgICBjb25zb2xlLmxvZyhtZXNzYWdlcy5oZWFkZXIob3B0aW9ucy5wcm9kdWN0LCBvcHRpb25zLnN0YWdlKSk7XG4gICAgLy8gV2UgYXJlIGdvaW5nIHRvIHJlY29uZmlybSB0aGF0IHdlIGFyZSBydW5uaW5nIG9uIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKGFuZCBmZXRjaCBpdCBpZiByZXF1aXJlZClcbiAgICBjb25zdCBjd2QgPSBhd2FpdCBnZXRBcHREaWN0b3J5KG9wdGlvbnMuY3dkLCB0cnVlLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBHZXQgdGhlIHBhdGggdG8gdGhlICdwcml2YXRlJyBzdWJkaXJlY3Rvcnkgb2YgQVBUIGluIHdoaWNoIHdlIHN0b3JlIHRoZSB0ZXN0IHJlc3VsdHNcbiAgICBjb25zdCBydW5PdXRwdXREaXIgPSBqb2luKG9wdGlvbnMub3V0cHV0RGlyLCBgcmVpbmRleGApO1xuICAgIC8vIE1ha2Ugc3VyZSB0aGUgb3V0cHV0IGRpcmVjdG9yeSBleGlzdHNcbiAgICBta2RpclN5bmMocnVuT3V0cHV0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAvLyBBc2sgZm9yIHRoZSBBV1MgY3JlZGVudGlhbHNcbiAgICBjb25zdCBbYXdzX2FjY2Vzc19rZXlfaWQsIGF3c19zZWNyZXRfYWNjZXNzX2tleV0gPSAob3B0aW9ucy5hd3NfYWNjZXNzX2tleV9pZCAmJiBvcHRpb25zLmF3c19zZWNyZXRfYWNjZXNzX2tleSlcbiAgICAgICAgPyBbb3B0aW9ucy5hd3NfYWNjZXNzX2tleV9pZCwgb3B0aW9ucy5hd3Nfc2VjcmV0X2FjY2Vzc19rZXldXG4gICAgICAgIDogYXdhaXQgZ2V0QVdTQ3JlZGVudGlhbHMob3B0aW9ucy5wcm9kdWN0LCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBXcml0ZSBBV1MgY3JlZGVudGlhbHMgdG8gZGlza1xuICAgIHBlcnNpc3RBV1NDcmVkZW50aWFscyhjd2QsIGF3c19hY2Nlc3Nfa2V5X2lkLCBhd3Nfc2VjcmV0X2FjY2Vzc19rZXkpO1xuICAgIC8vIENoZWNrIGlmIHdlIGFscmVhZHkgaGF2ZSBhIHByb3Zpc2lvbmVkIGNsdXN0ZXIgYXZhaWxhYmxlXG4gICAgLy8gSWYgbm90LCB3ZSBzaG91bGQgcHJvdmlzaW9uIGl0IGFzIHBhcnQgb2YgdGhlIHRlc3QgcnVuXG4gICAgaWYgKCFvcHRpb25zLmJhc2VVcmwpIHtcbiAgICAgICAgLy8gSW5mb3JtIHRoZSB1c2VyIHRoYXQgd2Ugd2lsbCBub3cgc3RhcnQgdGhlIHNjYWxhYmlsaXR5IGJlbmNobWFya1xuICAgICAgICBjb25zb2xlLmxvZyhtZXNzYWdlcy5yZWFkeUZvclByb3Zpc2lvbmluZyk7XG4gICAgICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIHByZXBhcmUgdGhlIEFXUyBlbnZpcm9ubWVudCBmb3IgcGVyZm9ybWFuY2UgYmVuY2htYXJrIHRlc3RpbmcuLi4nLCBvcHRpb25zLmZvcmNlKTtcbiAgICAgICAgZW1wdHlMaW5lKCk7XG4gICAgICAgIC8vIFdyaXRlIFRlcnJhZm9ybSB2YXJpYWJsZXMgdG8gZGlzayAob25lLW5vZGUgY2x1c3RlcilcbiAgICAgICAgcGVyc2lzdENsdXN0ZXJDb25maWd1cmF0aW9uKHtcbiAgICAgICAgICAgIHByb2R1Y3Q6IG9wdGlvbnMucHJvZHVjdCxcbiAgICAgICAgICAgIHRhZzogb3B0aW9ucy50YWcsXG4gICAgICAgICAgICBjd2QsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCxcbiAgICAgICAgICAgIG1vbml0b3Jpbmc6IG9wdGlvbnMubW9uaXRvcmluZyxcbiAgICAgICAgICAgIGxpY2Vuc2U6IG9wdGlvbnMubGljZW5zZSxcbiAgICAgICAgICAgIG5vZGVzOiAxXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBSdW4gdGhlIERDQVBUIGluc3RhbGwgc2NyaXB0XG4gICAgICAgIGF3YWl0IGluc3RhbGwoY3dkKTtcbiAgICB9XG4gICAgLy8gR2V0IHRoZSBsb2FkIGJhbGFuY2VyIFVSTCBmb3IgdGhlIGNsdXN0ZXJcbiAgICBjb25zdCBiYXNlVXJsID0gb3B0aW9ucy5iYXNlVXJsIHx8IGF3YWl0IGdldENsdXN0ZXJVUkwoY3dkLCBvcHRpb25zLnByb2R1Y3QpO1xuICAgIC8vIEluc3RhbGwgdGhlIGFwcCBpbnRvIHRoZSBjbHVzdGVyXG4gICAgYXdhaXQgaW5zdGFsbEFwcEluQ2x1c3Rlcih7XG4gICAgICAgIGJhc2VVcmwsXG4gICAgICAgIGFwcEtleTogb3B0aW9ucy5hcHBLZXksXG4gICAgICAgIGFyY2hpdmU6IG9wdGlvbnMuYXJjaGl2ZSxcbiAgICAgICAgbGljZW5zZTogb3B0aW9ucy5hcHBMaWNlbnNlLFxuICAgICAgICB1c2VybmFtZTogJ2FkbWluJyxcbiAgICAgICAgcGFzc3dvcmQ6ICdhZG1pbicsXG4gICAgICAgIHJlc3RhcnRBZnRlckluc3RhbGw6IG9wdGlvbnMucmVzdGFydEFmdGVySW5zdGFsbCxcbiAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICB9KTtcbiAgICAvLyBJbmZvcm0gdGhlIHVzZXIgdGhhdCB3ZSB3aWxsIG5vdyBzdGFydCB0aGUgTHVjZW5lIGluZGV4IHRlc3RcbiAgICBjb25zb2xlLmxvZyhtZXNzYWdlcy5zdGFydFRlc3QpO1xuICAgIC8vIE9rLCB3ZSdyZSByZWFkeSB0byBydW4gdGhlIEx1Y2VuZSBJbmRleCBUaW1pbmcgdGVzdFxuICAgIGF3YWl0IHJlaW5kZXgoYmFzZVVybCwgcnVuT3V0cHV0RGlyLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBDZWxlYnJhdGUgb3VyIHN1Y2Nlc3MhXG4gICAgY29uc29sZS5sb2cobWVzc2FnZXMuc3VjY2Vzcyk7XG59O1xuIiwiaW1wb3J0IHsgaW5wdXQgfSBmcm9tICdAaW5xdWlyZXIvcHJvbXB0cyc7XG5leHBvcnQgY29uc3QgZ2V0RHVyYXRpb24gPSAoZm9yY2UpID0+IHtcbiAgICBpZiAoZm9yY2UpIHtcbiAgICAgICAgcmV0dXJuICc0NW0nO1xuICAgIH1cbiAgICByZXR1cm4gaW5wdXQoe1xuICAgICAgICBtZXNzYWdlOiBgSG93IGxvbmcgc2hvdWxkIHRoZSB0ZXN0IHJ1bj9gLFxuICAgICAgICBkZWZhdWx0OiAnNDVtJyxcbiAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9KTtcbn07XG4iLCJpbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tICdmcyc7XG5leHBvcnQgY29uc3QgcmVhZExpbmVzSW5GaWxlID0gKHBhdGgsIGNhbGxiYWNrKSA9PiB7XG4gICAgY29uc3QgY29udGVudHMgPSByZWFkRmlsZVN5bmMocGF0aCwgJ3V0Zi04Jyk7XG4gICAgY29uc3QgbGluZXMgPSBjb250ZW50cy5zcGxpdCgnXFxuJyk7XG4gICAgbGluZXMuZm9yRWFjaChjYWxsYmFjayk7XG59O1xuIiwiaW1wb3J0IHsgZXhpc3RzU3luYywgbHN0YXRTeW5jLCByZWFkZGlyU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IHJlYWRMaW5lc0luRmlsZSB9IGZyb20gJy4uLy4uL2hlbHBlcnMvcmVhZExpbmVzSW5GaWxlJztcbmV4cG9ydCBjb25zdCBnZXRSZXN1bHRzID0gKGJhc2VEaXIpID0+IHtcbiAgICAvLyBQbGFjZWhvbGRlciBmb3IgdGhlIHRlc3QgcmVzdWx0IGRpcmVjdG9yeVxuICAgIGxldCByZXN1bHRzRGlyID0gZXhpc3RzU3luYyhqb2luKGJhc2VEaXIsICdyZXN1bHRzX3N1bW1hcnkubG9nJykpID8gYmFzZURpciA6IG51bGw7XG4gICAgaWYgKCFyZXN1bHRzRGlyKSB7XG4gICAgICAgIC8vIExldCdzIGdvIGZpbmQgb3VyIHRlc3QgcmVzdWx0IGRpcmVjdG9yeVxuICAgICAgICByZWFkZGlyU3luYyhiYXNlRGlyKS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBmb3VuZCBhcmUgZGlyZWN0b3J5LCBubyBuZWVkIHRvIGNvbnRpbnVlIGxvb2tpbmdcbiAgICAgICAgICAgIGlmIChyZXN1bHRzRGlyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gR2V0IHRoZSBzdGF0aXN0aWNzIGZvciB0aGlzIGVudHJ5XG4gICAgICAgICAgICBjb25zdCBzdGF0ID0gbHN0YXRTeW5jKGpvaW4oYmFzZURpciwgaXRlbSkpO1xuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhpcyBpcyBhIHRlc3QgcmVzdWx0IGRpcmVjdG9yeVxuICAgICAgICAgICAgaWYgKHN0YXQuaXNEaXJlY3RvcnkoKSAmJiBleGlzdHNTeW5jKGpvaW4oYmFzZURpciwgaXRlbSwgJ3Jlc3VsdHNfc3VtbWFyeS5sb2cnKSkpIHtcbiAgICAgICAgICAgICAgICAvLyBXZSd2ZSBmb3VuZCBpdCFcbiAgICAgICAgICAgICAgICByZXN1bHRzRGlyID0gam9pbihiYXNlRGlyLCBpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgZm91bmQgYSB0ZXN0IGRpcmVjdG9yeSwgYW5kIGlmIG5vdCB3ZSBzaG91bGQgdGhyb3cgYSBoaXNzeSBmaXRcbiAgICBpZiAocmVzdWx0c0RpciA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgdGhlIHRlc3QgcmVzdWx0cyBpbiB0aGUgcHJvdmlkZWQgZGlyZWN0b3J5ICgke2Jhc2VEaXJ9KWApO1xuICAgIH1cbiAgICAvLyBQbGFjZWhvbGRlciBmb3IgdGhlIHRlc3QgcmVzdWx0c1xuICAgIGNvbnN0IHJlc3VsdHMgPSB7XG4gICAgICAgICdwYXRoJzogcmVzdWx0c0RpcixcbiAgICAgICAgJ1N1bW1hcnkgcnVuIHN0YXR1cyc6IHVuZGVmaW5lZCxcbiAgICAgICAgJ0FwcGxpY2F0aW9uIG5vZGVzIGNvdW50JzogdW5kZWZpbmVkLFxuICAgICAgICAnRmluaXNoZWQnOiB1bmRlZmluZWQsXG4gICAgICAgICdDb21wbGlhbnQnOiB1bmRlZmluZWQsXG4gICAgICAgICdTdWNjZXNzJzogdW5kZWZpbmVkLFxuICAgICAgICAnSGFzIGFwcC1zcGVjaWZpYyBhY3Rpb25zJzogdW5kZWZpbmVkXG4gICAgfTtcbiAgICAvLyBMb29wIG92ZXIgdGhlIHJlc3VsdCBzdW1tYXJ5IGFuZCBnZXQgdGhvc2UgZGFtbiB0ZXN0IHJlc3VsdHNcbiAgICByZWFkTGluZXNJbkZpbGUoam9pbihyZXN1bHRzRGlyLCAncmVzdWx0c19zdW1tYXJ5LmxvZycpLCAobGluZSkgPT4ge1xuICAgICAgICBPYmplY3Qua2V5cyhyZXN1bHRzKS5mb3JFYWNoKGhlYWRlciA9PiB7XG4gICAgICAgICAgICBpZiAobGluZS5zdGFydHNXaXRoKGhlYWRlcikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBsaW5lLnN1YnN0cmluZyhoZWFkZXIubGVuZ3RoKS50cmltKCk7XG4gICAgICAgICAgICAgICAgcmVzdWx0c1toZWFkZXJdID0gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0cztcbn07XG4iLCJpbXBvcnQgeyBjb25maXJtIH0gZnJvbSAnQGlucXVpcmVyL3Byb21wdHMnO1xuaW1wb3J0IHsgZXhpc3RzU3luYywgbWtkaXJTeW5jLCByZWFkZGlyU3luYywgcm1TeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuZXhwb3J0IGNvbnN0IGdldFJlc3VsdHNEaXJlY3RvcnkgPSBhc3luYyAoY3dkLCBwcm9kdWN0LCBmb3JjZSkgPT4ge1xuICAgIC8vIEdldCB0aGUgcGF0aCB0byB0aGUgcmVzdWx0cyBkaXJlY3RvcnlcbiAgICBjb25zdCBwYXRoID0gam9pbihjd2QsICdhcHAnLCAncmVzdWx0cycsIHByb2R1Y3QpO1xuICAgIC8vIENoZWNrIGlmIHRoZSBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHNcbiAgICBpZiAoZXhpc3RzU3luYyhwYXRoKSkge1xuICAgICAgICAvLyBDaGVjayBpZiB0aGUgZGlyZWN0b3J5IGlzIGVtcHR5XG4gICAgICAgIGNvbnN0IGlzRW1wdHkgPSByZWFkZGlyU3luYyhwYXRoKS5sZW5ndGggPD0gMDtcbiAgICAgICAgaWYgKCFpc0VtcHR5KSB7XG4gICAgICAgICAgICAvLyBJZiB3ZSBhcmUgaW4gbm9uLWludGVyYWN0aXZlIG1vZGUsIG1ha2Ugc3VyZSB0byBhc2sgbmljZWx5IGlmIHdlIGNhbiByZW1vdmUgdGhlIHJlc3VsdHNcbiAgICAgICAgICAgIGlmICghZm9yY2UpIHtcbiAgICAgICAgICAgICAgICAvLyBUZWxsIHRoZSB1c2VyIHRoZXJlIGFyZSBzdGlsbCBwcmV2aW91cyByZXN1bHRzIGluIHRoZSBkaXJlY3RvcnlcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgXG4gIFRoZXJlIGFyZSBzdGlsbCByZXN1bHRzIGZyb20gcHJldmlvdXMgdGVzdCBydW5zIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeTpcbiAgJHtwYXRofVxuYCk7XG4gICAgICAgICAgICAgICAgLy8gQXNrIGZvciBjb25maXJtYXRpb24gdGhhdCB0aGV5IHdpbGwgYmUgcmVtb3ZlZFxuICAgICAgICAgICAgICAgIGNvbnN0IGNhblJlbW92ZSA9IGF3YWl0IGNvbmZpcm0oe1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnSXMgaXQgT0sgaWYgd2UgcmVtb3ZlIGFsbCBwcmV2aW91cyByZXN1bHRzPycsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBhcmUgbm90IGFsbG93ZWQgdG8gcmVtb3ZlIHRoZW0sIHRocm93IGEgaGlzc3kgZml0XG4gICAgICAgICAgICAgICAgaWYgKCFjYW5SZW1vdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgdGVzdCBjYW4gb25seSBiZSBleGVjdXRlZCBpZiBhbGwgcHJldmlvdXMgcmVzdWx0cyBoYXZlIGJlZW4gcmVtb3ZlZCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgcHJldmlvdXMgcmVzdWx0c1xuICAgICAgICAgICAgcm1TeW5jKHBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBkaXJlY3RvcnkgZXhpc3RzXG4gICAgbWtkaXJTeW5jKHBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIC8vIFJldHVybiB0aGUgcGF0aCB0byB0aGUgcmVzdWx0cyBkaXJlY3RvcnlcbiAgICByZXR1cm4gcGF0aDtcbn07XG4iLCJpbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyByZXBsYWNlTGluZXNJbkZpbGUgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3JlcGxhY2VMaW5lc0luRmlsZSc7XG5pbXBvcnQgeyB3YWl0Rm9yVXNlcklucHV0IH0gZnJvbSAnLi93YWl0Rm9yVXNlcklucHV0JztcbmV4cG9ydCBjb25zdCBwZXJzaXN0VGVzdENvbmZpZ3VyYXRpb24gPSBhc3luYyAoY3dkLCBwcm9kdWN0LCBiYXNlVXJsLCBkdXJhdGlvbiwgdXNlSk1ldGVyLCB1c2VMb2N1c3QsIHF1ZXJ5ID0gJycsIGZvcmNlKSA9PiB7XG4gICAgY29uc3QgcHJvZHVjdFVSSSA9IG5ldyBVUkwoYmFzZVVybCk7XG4gICAgY29uc3QgcHJvdG9jb2wgPSBwcm9kdWN0VVJJLnByb3RvY29sLnN0YXJ0c1dpdGgoJ2h0dHBzJykgPyAnaHR0cHMnIDogJ2h0dHAnO1xuICAgIGNvbnN0IHBvcnQgPSBwcm90b2NvbCA9PT0gJ2h0dHAnID8gJzgwJyA6ICc0NDMnO1xuICAgIGNvbnNvbGUubG9nKGBcbiAgVGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiB3aWxsIGJlIHVwZGF0ZWQgaW4gdGhlICR7cHJvZHVjdH0ueW1sIGZpbGU6XG5cbiAgYXBwbGljYXRpb25faG9zdG5hbWUgPSAke3Byb2R1Y3RVUkkuaG9zdH1cbiAgYXBwbGljYXRpb25fcHJvdG9jb2wgPSAke3Byb3RvY29sfVxuICBhcHBsaWNhdGlvbl9wb3J0ID0gJHtwb3J0fVxuICBhcHBsaWNhdGlvbl9wb3N0Zml4ID0gJHtwcm9kdWN0VVJJLnBhdGhuYW1lfVxuICB0ZXN0X2R1cmF0aW9uID0gJHtkdXJhdGlvbn1cbiAgbG9hZF9leGVjdXRvciA9ICR7dXNlTG9jdXN0ID8gJ2xvY3VzdCcgOiAnam1ldGVyJ31cbiAgc3RhbmRhbG9uZV9leHRlbnNpb24gPSAke3VzZUxvY3VzdCB8fCB1c2VKTWV0ZXIgPyAnMScgOiAnMCd9XG4gIGN1c3RvbV9kYXRhc2V0X3F1ZXJ5ID0gXCIke3F1ZXJ5fVwiXG5cbiAgVGhlIGNvbmZpZ3VyYXRpb24gd2lsbCBiZSB3cml0dGVuIHRvIGRpc2sgYW5kIG92ZXJ3cml0ZSBleGlzdGluZyBjb25maWd1cmF0aW9uOlxuICAke2pvaW4oY3dkLCAnYXBwJywgYCR7cHJvZHVjdH0ueW1sYCl9XG5gKTtcbiAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBjb250aW51ZS4uLicsIGZvcmNlKTtcbiAgICByZXBsYWNlTGluZXNJbkZpbGUoam9pbihjd2QsICdhcHAnLCBgJHtwcm9kdWN0fS55bWxgKSwgKGxpbmUpID0+IHtcbiAgICAgICAgaWYgKGxpbmUuc3RhcnRzV2l0aCgnICAgIGFwcGxpY2F0aW9uX2hvc3RuYW1lOicpKSB7XG4gICAgICAgICAgICByZXR1cm4gYCAgICBhcHBsaWNhdGlvbl9ob3N0bmFtZTogJHtwcm9kdWN0VVJJLmhvc3R9YDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChsaW5lLnN0YXJ0c1dpdGgoJyAgICBhcHBsaWNhdGlvbl9wcm90b2NvbDonKSkge1xuICAgICAgICAgICAgcmV0dXJuIGAgICAgYXBwbGljYXRpb25fcHJvdG9jb2w6ICR7cHJvdG9jb2x9YDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChsaW5lLnN0YXJ0c1dpdGgoYCAgICBhcHBsaWNhdGlvbl9wb3J0OmApKSB7XG4gICAgICAgICAgICByZXR1cm4gYCAgICBhcHBsaWNhdGlvbl9wb3J0OiAke3BvcnR9YDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChsaW5lLnN0YXJ0c1dpdGgoYCAgICBsb2FkX2V4ZWN1dG9yOmApKSB7XG4gICAgICAgICAgICByZXR1cm4gYCAgICBsb2FkX2V4ZWN1dG9yOiAke3VzZUxvY3VzdCA/ICdsb2N1c3QnIDogJ2ptZXRlcid9YDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChsaW5lLnN0YXJ0c1dpdGgoYCAgICBzdGFuZGFsb25lX2V4dGVuc2lvbjpgKSkge1xuICAgICAgICAgICAgcmV0dXJuIGAgICAgc3RhbmRhbG9uZV9leHRlbnNpb246ICR7dXNlTG9jdXN0IHx8IHVzZUpNZXRlciA/ICcxJyA6ICcwJ31gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aChgICAgIHRlc3RfZHVyYXRpb246YCkpIHtcbiAgICAgICAgICAgIHJldHVybiBgICAgIHRlc3RfZHVyYXRpb246ICR7ZHVyYXRpb259YDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChsaW5lLnN0YXJ0c1dpdGgoYCAgICBjdXN0b21fZGF0YXNldF9xdWVyeTpgKSkge1xuICAgICAgICAgICAgcmV0dXJuIGAgICAgY3VzdG9tX2RhdGFzZXRfcXVlcnk6IFwiJHtxdWVyeX1cImA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxpbmU7XG4gICAgfSk7XG4gICAgY29uc29sZS5sb2coYFxu4pyUIENvbmZpZ3VyYXRpb24gd3JpdHRlbiB0byAke3Byb2R1Y3R9LnltbGApO1xufTtcbiIsImltcG9ydCB7IGNvbmZpcm0gfSBmcm9tICdAaW5xdWlyZXIvcHJvbXB0cyc7XG5pbXBvcnQgeyBleGlzdHNTeW5jLCBta2RpclN5bmMsIHJtU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IG1vdmUgfSBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBlbXB0eUxpbmUgfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5pbXBvcnQgeyBpbnN0YWxsLCBydW5UZXN0IH0gZnJvbSAnLi9kY2FwdCc7XG5pbXBvcnQgeyBnZXRBcHREaWN0b3J5IH0gZnJvbSAnLi9nZXRBcHREaXJlY3RvcnknO1xuaW1wb3J0IHsgZ2V0QVdTQ3JlZGVudGlhbHMgfSBmcm9tICcuL2dldEFXU0NyZWRlbnRpYWxzJztcbmltcG9ydCB7IGdldENsdXN0ZXJVUkwgfSBmcm9tICcuL2dldENsdXN0ZXJVUkwnO1xuaW1wb3J0IHsgZ2V0RHVyYXRpb24gfSBmcm9tICcuL2dldER1cmF0aW9uJztcbmltcG9ydCB7IGdldFJlc3VsdHMgfSBmcm9tICcuL2dldFJlc3VsdHMnO1xuaW1wb3J0IHsgZ2V0UmVzdWx0c0RpcmVjdG9yeSB9IGZyb20gJy4vZ2V0UmVzdWx0c0RpcmVjdG9yeSc7XG5pbXBvcnQgeyBnZXRSdW5Gb3JTdGFnZSB9IGZyb20gJy4vZ2V0UnVuRm9yU3RhZ2UnO1xuaW1wb3J0IHsgaW5zdGFsbEFwcEluQ2x1c3RlciB9IGZyb20gJy4vaW5zdGFsbEFwcEluQ2x1c3Rlcic7XG5pbXBvcnQgeyBwZXJzaXN0Q2x1c3RlckNvbmZpZ3VyYXRpb24gfSBmcm9tICcuL3BlcnNpc3RDbHVzdGVyQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBwZXJzaXN0QVdTQ3JlZGVudGlhbHMgfSBmcm9tICcuL3BlcnNpc3RzQVdTQ3JlZGVudGlhbHMnO1xuaW1wb3J0IHsgcGVyc2lzdFRlc3RDb25maWd1cmF0aW9uIH0gZnJvbSAnLi9wZXJzaXN0VGVzdENvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHsgd2FpdEZvclVzZXJJbnB1dCB9IGZyb20gJy4vd2FpdEZvclVzZXJJbnB1dCc7XG5leHBvcnQgY29uc3QgcnVuUGVyZm9ybWFuY2VUZXN0ID0gYXN5bmMgKG9wdGlvbnMsIG1lc3NhZ2VzKSA9PiB7XG4gICAgLy8gU2hvdyB0aGUgd2VsY29tZSBtZXNzYWdlXG4gICAgY29uc29sZS5sb2cobWVzc2FnZXMuaGVhZGVyKG9wdGlvbnMucHJvZHVjdCwgb3B0aW9ucy5zdGFnZSkpO1xuICAgIC8vIFdlIGFyZSBnb2luZyB0byByZWNvbmZpcm0gdGhhdCB3ZSBhcmUgcnVubmluZyBvbiB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIChhbmQgZmV0Y2ggaXQgaWYgcmVxdWlyZWQpXG4gICAgY29uc3QgY3dkID0gYXdhaXQgZ2V0QXB0RGljdG9yeShvcHRpb25zLmN3ZCwgdHJ1ZSwgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gR2V0IHRoZSBwYXRoIHRvIHRoZSAncHJpdmF0ZScgc3ViZGlyZWN0b3J5IG9mIEFQVCBpbiB3aGljaCB3ZSBzdG9yZSB0aGUgdGVzdCByZXN1bHRzXG4gICAgY29uc3QgcnVuT3V0cHV0RGlyID0gam9pbihvcHRpb25zLm91dHB1dERpciwgYHJ1biR7Z2V0UnVuRm9yU3RhZ2Uob3B0aW9ucy5zdGFnZSl9YCk7XG4gICAgLy8gQ2hlY2sgaWYgdGhlcmUgYXJlIGV4aXN0aW5nIHRlc3QgcmVzdWx0cyBmb3IgdGhlIGN1cnJlbnQgcnVuXG4gICAgaWYgKGV4aXN0c1N5bmMocnVuT3V0cHV0RGlyKSkge1xuICAgICAgICAvLyBJZiB0aGVyZSBhcmUgZXhpc3RpbmcgdGVzdCByZXN1bHRzLCBjaGVjayBpZiB0aGV5IHdlcmUgc3VjY2Vzc2Z1bFxuICAgICAgICBjb25zdCBleGlzdGluZ1Jlc3VsdHMgPSBnZXRSZXN1bHRzKHJ1bk91dHB1dERpcik7XG4gICAgICAgIGlmIChleGlzdGluZ1Jlc3VsdHNbJ1N1bW1hcnkgcnVuIHN0YXR1cyddID09PSAnT0snKSB7XG4gICAgICAgICAgICAvLyBBc2sgbmljZWx5IGlmIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBleGlzdGluZyB0ZXN0IHJlc3VsdHNcbiAgICAgICAgICAgIGNvbnN0IG92ZXJ3cml0ZUV4aXN0aW5nUmVzdWx0cyA9IG9wdGlvbnMuZm9yY2UgfHwgYXdhaXQgY29uZmlybSh7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1RoZXJlIGFyZSBleGlzdGluZyBzdWNjZXNzZnVsIHRlc3QgcmVzdWx0cywgZG8geW91IHdhbnQgdG8gb3ZlcndyaXRlIHRoZXNlIHJlc3VsdHM/J1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBJZiB3ZSBuZWVkIHRvIG92ZXJ3cml0ZSB0aGUgdGVzdCByZXN1bHRzLCB3ZSBzaG91bGQgZG8gc29cbiAgICAgICAgICAgIGlmIChvdmVyd3JpdGVFeGlzdGluZ1Jlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnUmVtb3ZpbmcgZXhpc3RpbmcgdGVzdCByZXN1bHRzJyk7XG4gICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBkaXJlY3RvcnlcbiAgICAgICAgICAgICAgICBybVN5bmMocnVuT3V0cHV0RGlyLCB7IGZvcmNlOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIC8vIElmIHdlIGFyZSBub3QgYWxsb3dlZCB0byBvdmVyd3JpdGUgdGhlIHRlc3QgcmVzdWx0cywgdGhlcmUgaXMgbm8gcG9pbnQgaW4gcnVubmluZyB0aGlzIHRlc3RcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBTa2lwcGluZyBwZXJmb3JtYW5jZSAke29wdGlvbnMuc3RhZ2V9IHRlc3QgZXhlY3V0aW9uLCBhIHN1Y2Nlc3NmdWwgdGVzdCBydW4gd2FzIGFscmVhZHkgY29tcGxldGVkYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgdGhlIHRlc3QgcnVuIHdhcyBub3Qgc3VjY2Vzc2Z1bCwgd2UgYXJlIGdvaW5nIHRvIG92ZXJ3cml0ZSBpdCB3aXRob3V0IGFza2luZ1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBkaXJlY3RvcnlcbiAgICAgICAgICAgIHJtU3luYyhydW5PdXRwdXREaXIsIHsgZm9yY2U6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gTWFrZSBzdXJlIHRoZSBvdXRwdXQgZGlyZWN0b3J5IGV4aXN0c1xuICAgIG1rZGlyU3luYyhvcHRpb25zLm91dHB1dERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgLy8gQXNrIGZvciB0aGUgQVdTIGNyZWRlbnRpYWxzXG4gICAgY29uc3QgW2F3c19hY2Nlc3Nfa2V5X2lkLCBhd3Nfc2VjcmV0X2FjY2Vzc19rZXldID0gKG9wdGlvbnMuYXdzX2FjY2Vzc19rZXlfaWQgJiYgb3B0aW9ucy5hd3Nfc2VjcmV0X2FjY2Vzc19rZXkpXG4gICAgICAgID8gW29wdGlvbnMuYXdzX2FjY2Vzc19rZXlfaWQsIG9wdGlvbnMuYXdzX3NlY3JldF9hY2Nlc3Nfa2V5XVxuICAgICAgICA6IGF3YWl0IGdldEFXU0NyZWRlbnRpYWxzKG9wdGlvbnMucHJvZHVjdCwgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gV3JpdGUgQVdTIGNyZWRlbnRpYWxzIHRvIGRpc2tcbiAgICBwZXJzaXN0QVdTQ3JlZGVudGlhbHMoY3dkLCBhd3NfYWNjZXNzX2tleV9pZCwgYXdzX3NlY3JldF9hY2Nlc3Nfa2V5KTtcbiAgICAvLyBDaGVjayBpZiB3ZSBhbHJlYWR5IGhhdmUgYSBwcm92aXNpb25lZCBjbHVzdGVyIGF2YWlsYWJsZVxuICAgIC8vIElmIG5vdCwgd2Ugc2hvdWxkIHByb3Zpc2lvbiBpdCBhcyBwYXJ0IG9mIHRoZSB0ZXN0IHJ1blxuICAgIGlmICghb3B0aW9ucy5iYXNlVXJsKSB7XG4gICAgICAgIC8vIEluZm9ybSB0aGUgdXNlciB0aGF0IHdlIHdpbGwgbm93IHN0YXJ0IHRoZSBwZXJmb3JtYW5jZSB0ZXN0XG4gICAgICAgIGNvbnNvbGUubG9nKG1lc3NhZ2VzLnJlYWR5Rm9yUHJvdmlzaW9uaW5nKTtcbiAgICAgICAgYXdhaXQgd2FpdEZvclVzZXJJbnB1dCgnUHJlc3MgYSBrZXkgdG8gcHJlcGFyZSB0aGUgQVdTIGVudmlyb25tZW50IGZvciBwZXJmb3JtYW5jZSBiZW5jaG1hcmsgdGVzdGluZy4uLicsIG9wdGlvbnMuZm9yY2UpO1xuICAgICAgICBlbXB0eUxpbmUoKTtcbiAgICAgICAgLy8gV3JpdGUgVGVycmFmb3JtIHZhcmlhYmxlcyB0byBkaXNrIChvbmUtbm9kZSBjbHVzdGVyKVxuICAgICAgICBwZXJzaXN0Q2x1c3RlckNvbmZpZ3VyYXRpb24oe1xuICAgICAgICAgICAgcHJvZHVjdDogb3B0aW9ucy5wcm9kdWN0LFxuICAgICAgICAgICAgdGFnOiBvcHRpb25zLnRhZyxcbiAgICAgICAgICAgIGN3ZCxcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBvcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICAgICAgbW9uaXRvcmluZzogb3B0aW9ucy5tb25pdG9yaW5nLFxuICAgICAgICAgICAgbGljZW5zZTogb3B0aW9ucy5saWNlbnNlLFxuICAgICAgICAgICAgbm9kZXM6IDFcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFJ1biB0aGUgRENBUFQgaW5zdGFsbCBzY3JpcHRcbiAgICAgICAgYXdhaXQgaW5zdGFsbChjd2QpO1xuICAgIH1cbiAgICAvLyBJbmZvcm0gdGhlIHVzZXIgdGhhdCB3ZSB3aWxsIG5vdyBzdGFydCB0aGUgcGVyZm9ybWFuY2UgYmVuY2htYXJrXG4gICAgY29uc29sZS5sb2cobWVzc2FnZXMuc3RhcnRUZXN0KTtcbiAgICAvLyBHZXQgdGhlIGxvYWQgYmFsYW5jZXIgVVJMIGZvciB0aGUgY2x1c3RlclxuICAgIGNvbnN0IGJhc2VVcmwgPSBvcHRpb25zLmJhc2VVcmwgfHwgYXdhaXQgZ2V0Q2x1c3RlclVSTChjd2QsIG9wdGlvbnMucHJvZHVjdCk7XG4gICAgLy8gQWxsb3cgdXNlcnMgdG8gc2V0IGEgZGlmZmVyZW50IHRlc3QgZHVyYXRpb24gKGZvciB2YWxpZGF0aW9uIHB1cnBvc2VzKVxuICAgIGNvbnN0IGR1cmF0aW9uID0gYXdhaXQgZ2V0RHVyYXRpb24ob3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gV3JpdGUgdGVzdCBjb25maWd1cmF0aW9uIHRvIGRpc2tcbiAgICBhd2FpdCBwZXJzaXN0VGVzdENvbmZpZ3VyYXRpb24oY3dkLCBvcHRpb25zLnByb2R1Y3QsIGJhc2VVcmwsIGR1cmF0aW9uLCBmYWxzZSwgZmFsc2UsIHVuZGVmaW5lZCwgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gR2V0IHRoZSByZXN1bHRzIGRpcmVjdG9yeSAoYW5kIG1ha2Ugc3VyZSBpdCBpcyBlbXB0eSlcbiAgICBjb25zdCByZXN1bHRzQmFzZURpciA9IGF3YWl0IGdldFJlc3VsdHNEaXJlY3RvcnkoY3dkLCBvcHRpb25zLnByb2R1Y3QsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIFJlZ3Jlc3Npb24gdGVzdHMgcmVxdWlyZSB0aGUgYXBwIHRvIGJlIGluc3RhbGxlZFxuICAgIGlmIChvcHRpb25zLnN0YWdlID09PSAncmVncmVzc2lvbicpIHtcbiAgICAgICAgLy8gSW5zdGFsbCB0aGUgYXBwIGludG8gdGhlIGNsdXN0ZXJcbiAgICAgICAgYXdhaXQgaW5zdGFsbEFwcEluQ2x1c3Rlcih7XG4gICAgICAgICAgICBiYXNlVXJsLFxuICAgICAgICAgICAgYXBwS2V5OiBvcHRpb25zLmFwcEtleSxcbiAgICAgICAgICAgIGFyY2hpdmU6IG9wdGlvbnMuYXJjaGl2ZSxcbiAgICAgICAgICAgIGxpY2Vuc2U6IG9wdGlvbnMuYXBwTGljZW5zZSxcbiAgICAgICAgICAgIHVzZXJuYW1lOiAnYWRtaW4nLFxuICAgICAgICAgICAgcGFzc3dvcmQ6ICdhZG1pbicsXG4gICAgICAgICAgICByZXN0YXJ0QWZ0ZXJJbnN0YWxsOiBvcHRpb25zLnJlc3RhcnRBZnRlckluc3RhbGwsXG4gICAgICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLy8gUnVuIHRoZSBkYW1uIHRlc3RcbiAgICBhd2FpdCBydW5UZXN0KGN3ZCwgb3B0aW9ucy5lbnZpcm9ubWVudCwgb3B0aW9ucy5wcm9kdWN0KTtcbiAgICAvLyBHZXQgdGhlIHRlc3QgcmVzdWx0c1xuICAgIGNvbnN0IHJlc3VsdHMgPSBnZXRSZXN1bHRzKHJlc3VsdHNCYXNlRGlyKTtcbiAgICAvLyBDaGVjayBpZiB0aGUgdGVzdCB3YXMgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5XG4gICAgaWYgKHJlc3VsdHNbJ1N1bW1hcnkgcnVuIHN0YXR1cyddICE9PSAnT0snKSB7XG4gICAgICAgIC8vIElmIG5vdCwgbGV0IHRoZSBwZW9wbGUga25vdyBhbmQgdGVybWluYXRlXG4gICAgICAgIGNvbnNvbGUubG9nKG1lc3NhZ2VzLmZhaWx1cmUob3B0aW9ucy5zdGFnZSwgY3dkLCBvcHRpb25zLnByb2R1Y3QsIG9wdGlvbnMuZW52aXJvbm1lbnQsIHJlc3VsdHNCYXNlRGlyLCByZXN1bHRzKSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUGVyZm9ybWFuY2UgcmVncmVzc2lvbiB0ZXN0IGZhaWxlZCcpO1xuICAgIH1cbiAgICAvLyBXZSBoYXZlIGEgc3VjY2Vzc2Z1bCB0ZXN0LCBzbyB3ZSBzaG91bGQgc3RvcmUgdGhlIHJlc3VsdHMgaW4gYSAncHJpdmF0ZScgc3ViZGlyZWN0b3J5IG9mIEFQVFxuICAgIGNvbnNvbGUubG9nKGAgIENvcHlpbmcgdGVzdCByZXN1bHRzIHRvICR7cnVuT3V0cHV0RGlyfWApO1xuICAgIGF3YWl0IG1vdmUocmVzdWx0cy5wYXRoLCBydW5PdXRwdXREaXIsIHsgb3ZlcndyaXRlOiB0cnVlIH0pO1xuICAgIC8vIENlbGVicmF0ZSBvdXIgc3VjY2VzcyFcbiAgICBjb25zb2xlLmxvZyhtZXNzYWdlcy5zdWNjZXNzKTtcbn07XG4iLCJleHBvcnQgY29uc3QgZ2V0Tm9kZU51bWJlckZvclN0YWdlID0gKHN0YWdlKSA9PiB7XG4gICAgc3dpdGNoIChzdGFnZSkge1xuICAgICAgICBjYXNlICdvbmUtbm9kZSc6IHJldHVybiAxO1xuICAgICAgICBjYXNlICd0d28tbm9kZSc6IHJldHVybiAyO1xuICAgICAgICBjYXNlICdmb3VyLW5vZGUnOiByZXR1cm4gNDtcbiAgICB9XG59O1xuIiwiaW1wb3J0IHsgY29uZmlybSB9IGZyb20gJ0BpbnF1aXJlci9wcm9tcHRzJztcbmltcG9ydCB7IGV4aXN0c1N5bmMsIG1rZGlyU3luYywgcm1TeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgbW92ZSB9IGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IGVtcHR5TGluZSB9IGZyb20gJy4uL21lc3NhZ2VzJztcbmltcG9ydCB7IGluc3RhbGwsIHJ1blRlc3QgfSBmcm9tICcuL2RjYXB0JztcbmltcG9ydCB7IGdldEFwdERpY3RvcnkgfSBmcm9tICcuL2dldEFwdERpcmVjdG9yeSc7XG5pbXBvcnQgeyBnZXRBV1NDcmVkZW50aWFscyB9IGZyb20gJy4vZ2V0QVdTQ3JlZGVudGlhbHMnO1xuaW1wb3J0IHsgZ2V0Q2x1c3RlclVSTCB9IGZyb20gJy4vZ2V0Q2x1c3RlclVSTCc7XG5pbXBvcnQgeyBnZXREdXJhdGlvbiB9IGZyb20gJy4vZ2V0RHVyYXRpb24nO1xuaW1wb3J0IHsgZ2V0Tm9kZU51bWJlckZvclN0YWdlIH0gZnJvbSAnLi9nZXROb2RlTnVtYmVyRm9yU3RhZ2UnO1xuaW1wb3J0IHsgZ2V0UmVzdWx0cyB9IGZyb20gJy4vZ2V0UmVzdWx0cyc7XG5pbXBvcnQgeyBnZXRSZXN1bHRzRGlyZWN0b3J5IH0gZnJvbSAnLi9nZXRSZXN1bHRzRGlyZWN0b3J5JztcbmltcG9ydCB7IGdldFJ1bkZvclN0YWdlIH0gZnJvbSAnLi9nZXRSdW5Gb3JTdGFnZSc7XG5pbXBvcnQgeyBpbnN0YWxsQXBwSW5DbHVzdGVyIH0gZnJvbSAnLi9pbnN0YWxsQXBwSW5DbHVzdGVyJztcbmltcG9ydCB7IHBlcnNpc3RDbHVzdGVyQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vcGVyc2lzdENsdXN0ZXJDb25maWd1cmF0aW9uJztcbmltcG9ydCB7IHBlcnNpc3RBV1NDcmVkZW50aWFscyB9IGZyb20gJy4vcGVyc2lzdHNBV1NDcmVkZW50aWFscyc7XG5pbXBvcnQgeyBwZXJzaXN0VGVzdENvbmZpZ3VyYXRpb24gfSBmcm9tICcuL3BlcnNpc3RUZXN0Q29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyB3YWl0Rm9yVXNlcklucHV0IH0gZnJvbSAnLi93YWl0Rm9yVXNlcklucHV0JztcbmV4cG9ydCBjb25zdCBydW5TY2FsYWJpbGl0eVRlc3QgPSBhc3luYyAoc3RhZ2UsIG9wdGlvbnMsIG1lc3NhZ2VzKSA9PiB7XG4gICAgLy8gR2V0IHRoZSBjb3JyZWN0IGFtb3VudCBvZiBub2RlcyBmb3IgdGhlIHNwZWNpZmllZCBzdGFnZVxuICAgIGNvbnN0IG5vZGVzID0gZ2V0Tm9kZU51bWJlckZvclN0YWdlKHN0YWdlKTtcbiAgICAvLyBTaG93IHRoZSB3ZWxjb21lIG1lc3NhZ2VcbiAgICBjb25zb2xlLmxvZyhtZXNzYWdlcy5oZWFkZXIob3B0aW9ucy5wcm9kdWN0LCBzdGFnZSkpO1xuICAgIC8vIFdlIGFyZSBnb2luZyB0byByZWNvbmZpcm0gdGhhdCB3ZSBhcmUgcnVubmluZyBvbiB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIChhbmQgZmV0Y2ggaXQgaWYgcmVxdWlyZWQpXG4gICAgY29uc3QgY3dkID0gYXdhaXQgZ2V0QXB0RGljdG9yeShvcHRpb25zLmN3ZCwgZmFsc2UsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIEdldCB0aGUgcGF0aCB0byB0aGUgJ3ByaXZhdGUnIHN1YmRpcmVjdG9yeSBvZiBBUFQgaW4gd2hpY2ggd2Ugc3RvcmUgdGhlIHRlc3QgcmVzdWx0c1xuICAgIGNvbnN0IHJ1bk91dHB1dERpciA9IGpvaW4ob3B0aW9ucy5vdXRwdXREaXIsIGBydW4ke2dldFJ1bkZvclN0YWdlKHN0YWdlKX1gKTtcbiAgICAvLyBDaGVjayBpZiB0aGVyZSBhcmUgZXhpc3RpbmcgdGVzdCByZXN1bHRzIGZvciB0aGUgY3VycmVudCBydW5cbiAgICBpZiAoZXhpc3RzU3luYyhydW5PdXRwdXREaXIpKSB7XG4gICAgICAgIC8vIElmIHRoZXJlIGFyZSBleGlzdGluZyB0ZXN0IHJlc3VsdHMsIGNoZWNrIGlmIHRoZXkgd2VyZSBzdWNjZXNzZnVsXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nUmVzdWx0cyA9IGdldFJlc3VsdHMocnVuT3V0cHV0RGlyKTtcbiAgICAgICAgaWYgKGV4aXN0aW5nUmVzdWx0c1snU3VtbWFyeSBydW4gc3RhdHVzJ10gPT09ICdPSycpIHtcbiAgICAgICAgICAgIC8vIEFzayBuaWNlbHkgaWYgd2UgbmVlZCB0byByZW1vdmUgdGhlIGV4aXN0aW5nIHRlc3QgcmVzdWx0c1xuICAgICAgICAgICAgY29uc3Qgb3ZlcndyaXRlRXhpc3RpbmdSZXN1bHRzID0gb3B0aW9ucy5mb3JjZSB8fCBhd2FpdCBjb25maXJtKHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnVGhlcmUgYXJlIGV4aXN0aW5nIHN1Y2Nlc3NmdWwgdGVzdCByZXN1bHRzLCBkbyB5b3Ugd2FudCB0byBvdmVyd3JpdGUgdGhlc2UgcmVzdWx0cz8nXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIElmIHdlIG5lZWQgdG8gb3ZlcndyaXRlIHRoZSB0ZXN0IHJlc3VsdHMsIHdlIHNob3VsZCBkbyBzb1xuICAgICAgICAgICAgaWYgKG92ZXJ3cml0ZUV4aXN0aW5nUmVzdWx0cykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdSZW1vdmluZyBleGlzdGluZyB0ZXN0IHJlc3VsdHMnKTtcbiAgICAgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGRpcmVjdG9yeVxuICAgICAgICAgICAgICAgIHJtU3luYyhydW5PdXRwdXREaXIsIHsgZm9yY2U6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgLy8gSWYgd2UgYXJlIG5vdCBhbGxvd2VkIHRvIG92ZXJ3cml0ZSB0aGUgdGVzdCByZXN1bHRzLCB0aGVyZSBpcyBubyBwb2ludCBpbiBydW5uaW5nIHRoaXMgdGVzdFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFNraXBwaW5nIHNjYWxhYmlsaXR5ICR7c3RhZ2V9IGNsdXN0ZXIgdGVzdCBleGVjdXRpb24sIGEgc3VjY2Vzc2Z1bCB0ZXN0IHJ1biB3YXMgYWxyZWFkeSBjb21wbGV0ZWRgKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBJZiB0aGUgdGVzdCBydW4gd2FzIG5vdCBzdWNjZXNzZnVsLCB3ZSBhcmUgZ29pbmcgdG8gb3ZlcndyaXRlIGl0IHdpdGhvdXQgYXNraW5nXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGRpcmVjdG9yeVxuICAgICAgICAgICAgcm1TeW5jKHJ1bk91dHB1dERpciwgeyBmb3JjZTogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBNYWtlIHN1cmUgdGhlIG91dHB1dCBkaXJlY3RvcnkgZXhpc3RzXG4gICAgbWtkaXJTeW5jKG9wdGlvbnMub3V0cHV0RGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAvLyBBc2sgZm9yIHRoZSBBV1MgY3JlZGVudGlhbHNcbiAgICBjb25zdCBbYXdzX2FjY2Vzc19rZXlfaWQsIGF3c19zZWNyZXRfYWNjZXNzX2tleV0gPSBhd2FpdCBnZXRBV1NDcmVkZW50aWFscyhvcHRpb25zLnByb2R1Y3QsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIEluZm9ybSB0aGUgdXNlciB0aGF0IHdlIHdpbGwgbm93IHN0YXJ0IHRoZSBzY2FsYWJpbGl0eSBiZW5jaG1hcmtcbiAgICBjb25zb2xlLmxvZyhtZXNzYWdlcy5yZWFkeUZvclByb3Zpc2lvbmluZyk7XG4gICAgYXdhaXQgd2FpdEZvclVzZXJJbnB1dCgnUHJlc3MgYSBrZXkgdG8gcHJlcGFyZSB0aGUgQVdTIGVudmlyb25tZW50IGZvciBzY2FsYWJpbGl0eSBiZW5jaG1hcmsgdGVzdGluZy4uLicsIG9wdGlvbnMuZm9yY2UpO1xuICAgIGVtcHR5TGluZSgpO1xuICAgIC8vIFdyaXRlIEFXUyBjcmVkZW50aWFscyB0byBkaXNrXG4gICAgcGVyc2lzdEFXU0NyZWRlbnRpYWxzKGN3ZCwgYXdzX2FjY2Vzc19rZXlfaWQsIGF3c19zZWNyZXRfYWNjZXNzX2tleSk7XG4gICAgLy8gV3JpdGUgVGVycmFmb3JtIHZhcmlhYmxlcyB0byBkaXNrIChvbmUtbm9kZSBjbHVzdGVyKVxuICAgIHBlcnNpc3RDbHVzdGVyQ29uZmlndXJhdGlvbih7XG4gICAgICAgIHByb2R1Y3Q6IG9wdGlvbnMucHJvZHVjdCxcbiAgICAgICAgdGFnOiBvcHRpb25zLnRhZyxcbiAgICAgICAgY3dkLFxuICAgICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCxcbiAgICAgICAgbW9uaXRvcmluZzogb3B0aW9ucy5tb25pdG9yaW5nLFxuICAgICAgICBsaWNlbnNlOiBvcHRpb25zLmxpY2Vuc2UsXG4gICAgICAgIG5vZGVzXG4gICAgfSk7XG4gICAgLy8gUnVuIHRoZSBEQ0FQVCBpbnN0YWxsIHNjcmlwdFxuICAgIGF3YWl0IGluc3RhbGwoY3dkKTtcbiAgICAvLyBJbmZvcm0gdGhlIHVzZXIgdGhhdCB3ZSB3aWxsIG5vdyBzdGFydCB0aGUgc2NhbGFiaWxpdHkgYmVuY2htYXJrXG4gICAgY29uc29sZS5sb2cobWVzc2FnZXMuc3RhcnRUZXN0KTtcbiAgICAvLyBHZXQgdGhlIGxvYWQgYmFsYW5jZXIgVVJMIGZvciB0aGUgY2x1c3RlclxuICAgIGNvbnN0IGJhc2VVcmwgPSBhd2FpdCBnZXRDbHVzdGVyVVJMKGN3ZCwgb3B0aW9ucy5wcm9kdWN0KTtcbiAgICAvLyBJbnN0YWxsIHRoZSBhcHAgaW50byB0aGUgY2x1c3RlclxuICAgIGF3YWl0IGluc3RhbGxBcHBJbkNsdXN0ZXIoe1xuICAgICAgICBiYXNlVXJsLFxuICAgICAgICBhcHBLZXk6IG9wdGlvbnMuYXBwS2V5LFxuICAgICAgICBhcmNoaXZlOiBvcHRpb25zLmFyY2hpdmUsXG4gICAgICAgIGxpY2Vuc2U6IG9wdGlvbnMuYXBwTGljZW5zZSxcbiAgICAgICAgdXNlcm5hbWU6ICdhZG1pbicsXG4gICAgICAgIHBhc3N3b3JkOiAnYWRtaW4nLFxuICAgICAgICByZXN0YXJ0QWZ0ZXJJbnN0YWxsOiBvcHRpb25zLnJlc3RhcnRBZnRlckluc3RhbGwsXG4gICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgfSk7XG4gICAgLy8gQWxsb3cgdXNlcnMgdG8gc2V0IGEgZGlmZmVyZW50IHRlc3QgZHVyYXRpb24gKGZvciB2YWxpZGF0aW9uIHB1cnBvc2VzKVxuICAgIGNvbnN0IGR1cmF0aW9uID0gYXdhaXQgZ2V0RHVyYXRpb24ob3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gV3JpdGUgdGVzdCBjb25maWd1cmF0aW9uIHRvIGRpc2tcbiAgICBhd2FpdCBwZXJzaXN0VGVzdENvbmZpZ3VyYXRpb24oY3dkLCBvcHRpb25zLnByb2R1Y3QsIGJhc2VVcmwsIGR1cmF0aW9uLCBvcHRpb25zLmptZXRlciwgb3B0aW9ucy5sb2N1c3QsIG9wdGlvbnMucXVlcnksIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIEdldCB0aGUgcmVzdWx0cyBkaXJlY3RvcnkgKGFuZCBtYWtlIHN1cmUgaXQgaXMgZW1wdHkpXG4gICAgY29uc3QgcmVzdWx0c0Jhc2VEaXIgPSBhd2FpdCBnZXRSZXN1bHRzRGlyZWN0b3J5KGN3ZCwgb3B0aW9ucy5wcm9kdWN0LCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBSdW4gdGhlIGRhbW4gdGVzdFxuICAgIGF3YWl0IHJ1blRlc3QoY3dkLCBvcHRpb25zLmVudmlyb25tZW50LCBvcHRpb25zLnByb2R1Y3QpO1xuICAgIC8vIEdldCB0aGUgdGVzdCByZXN1bHRzXG4gICAgY29uc3QgcmVzdWx0cyA9IGdldFJlc3VsdHMocmVzdWx0c0Jhc2VEaXIpO1xuICAgIC8vIENoZWNrIGlmIHRoZSB0ZXN0IHdhcyBleGVjdXRlZCBzdWNjZXNzZnVsbHlcbiAgICBpZiAocmVzdWx0c1snU3VtbWFyeSBydW4gc3RhdHVzJ10gIT09ICdPSycpIHtcbiAgICAgICAgLy8gSWYgbm90LCBsZXQgdGhlIHBlb3BsZSBrbm93IGFuZCB0ZXJtaW5hdGVcbiAgICAgICAgY29uc29sZS5sb2cobWVzc2FnZXMuZmFpbHVyZShzdGFnZSwgY3dkLCBvcHRpb25zLnByb2R1Y3QsIG9wdGlvbnMuZW52aXJvbm1lbnQsIHJlc3VsdHNCYXNlRGlyLCByZXN1bHRzKSk7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignU2NhbGFiaWxpdHkgYmVuY2htYXJrIHRlc3QgZmFpbGVkJyk7XG4gICAgfVxuICAgIC8vIFdlIGhhdmUgYSBzdWNjZXNzZnVsIHRlc3QsIHNvIHdlIHNob3VsZCBzdG9yZSB0aGUgcmVzdWx0cyBpbiBhICdwcml2YXRlJyBzdWJkaXJlY3Rvcnkgb2YgQVBUXG4gICAgY29uc29sZS5sb2coYCAgQ29weWluZyB0ZXN0IHJlc3VsdHMgdG8gJHtydW5PdXRwdXREaXJ9YCk7XG4gICAgYXdhaXQgbW92ZShyZXN1bHRzLnBhdGgsIHJ1bk91dHB1dERpciwgeyBvdmVyd3JpdGU6IHRydWUgfSk7XG4gICAgLy8gQ2VsZWJyYXRlIG91ciBzdWNjZXNzIVxuICAgIGNvbnNvbGUubG9nKG1lc3NhZ2VzLnN1Y2Nlc3MpO1xufTtcbiIsImltcG9ydCB7IGVtcHR5TGluZSwgVGVhcmRvd24gfSBmcm9tICcuLi9tZXNzYWdlcyc7XG5pbXBvcnQgeyB0ZXJtaW5hdGUgfSBmcm9tICcuL2RjYXB0JztcbmltcG9ydCB7IGdldEFwdERpY3RvcnkgfSBmcm9tICcuL2dldEFwdERpcmVjdG9yeSc7XG5pbXBvcnQgeyBnZXRBV1NDcmVkZW50aWFscyB9IGZyb20gJy4vZ2V0QVdTQ3JlZGVudGlhbHMnO1xuaW1wb3J0IHsgcGVyc2lzdEFXU0NyZWRlbnRpYWxzIH0gZnJvbSAnLi9wZXJzaXN0c0FXU0NyZWRlbnRpYWxzJztcbmltcG9ydCB7IHdhaXRGb3JVc2VySW5wdXQgfSBmcm9tICcuL3dhaXRGb3JVc2VySW5wdXQnO1xuZXhwb3J0IGNvbnN0IHRlYXJkb3duQ2x1c3RlciA9IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgLy8gU2hvdyBuaWNlIGxpdHRsZSB3ZWxjb21lIG1lc3NhZ2VcbiAgICBjb25zb2xlLmxvZyhUZWFyZG93bi5oZWFkZXIpO1xuICAgIC8vIEFzayBmb3IgdGhlIHByb3BlciBkaXJlY3Rvcnkgb2YgQVBUXG4gICAgY29uc3QgZGlyZWN0b3J5ID0gYXdhaXQgZ2V0QXB0RGljdG9yeShvcHRpb25zLmN3ZCwgdHJ1ZSwgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gQXNrIGZvciB0aGUgQVdTIGNyZWRlbnRpYWxzXG4gICAgY29uc3QgW2F3c19hY2Nlc3Nfa2V5X2lkLCBhd3Nfc2VjcmV0X2FjY2Vzc19rZXldID0gYXdhaXQgZ2V0QVdTQ3JlZGVudGlhbHMob3B0aW9ucy5wcm9kdWN0LCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBXcml0ZSBBV1MgY3JlZGVudGlhbHMgdG8gZGlza1xuICAgIHBlcnNpc3RBV1NDcmVkZW50aWFscyhkaXJlY3RvcnksIGF3c19hY2Nlc3Nfa2V5X2lkLCBhd3Nfc2VjcmV0X2FjY2Vzc19rZXkpO1xuICAgIC8vIEFzayB0aGUgdXNlciBpZiB0aGV5IGFyZSByZWFkeSB0byBzYXkgZ29vZGJ5ZSB0byB0aGVpciBjbHVzdGVyXG4gICAgYXdhaXQgd2FpdEZvclVzZXJJbnB1dCgnUHJlc3MgYSBrZXkgdG8gY29udGludWUuLi4nLCBvcHRpb25zLmZvcmNlKTtcbiAgICBlbXB0eUxpbmUoKTtcbiAgICAvLyBUZXJtaW5hdGUgaXQhXG4gICAgYXdhaXQgdGVybWluYXRlKGRpcmVjdG9yeSwgb3B0aW9ucy5lbnZpcm9ubWVudCk7XG4gICAgLy8gQXNrIHRoZSB1c2VyIHRvIHF1aXQgdGhlIHByb2dyYW1cbiAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBleGl0Li4uJywgb3B0aW9ucy5mb3JjZSk7XG59O1xuIiwiaW1wb3J0IHsgcmVhbHBhdGhTeW5jIH0gZnJvbSAnZnMnO1xuaW1wb3J0IHsgZGlybmFtZSwgam9pbiB9IGZyb20gJ3BhdGgnO1xuZXhwb3J0IGNvbnN0IHRvQWJzb2x1dGVQYXRoID0gKHJlbGF0aXZlUGF0aCkgPT4ge1xuICAgIGNvbnN0IFssIGZpbGVQYXRoXSA9IHByb2Nlc3MuYXJndjtcbiAgICBjb25zdCBleGVjdXRhYmxlRmlsZURpciA9IGRpcm5hbWUocmVhbHBhdGhTeW5jKGZpbGVQYXRoKSk7XG4gICAgY29uc3QgYmFzZWRpciA9IGV4ZWN1dGFibGVGaWxlRGlyLnN1YnN0cmluZygwLCBleGVjdXRhYmxlRmlsZURpci5pbmRleE9mKCdkY2R4JykgKyA0KTtcbiAgICByZXR1cm4gam9pbihiYXNlZGlyLCByZWxhdGl2ZVBhdGgucmVwbGFjZUFsbCgnLi4vJywgJycpKTtcbn07XG4iLCJpbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyB0b0Fic29sdXRlUGF0aCB9IGZyb20gJy4vdG9BYnNvbHV0ZVBhdGgnO1xuZXhwb3J0IGNvbnN0IGdldFZlcnNpb25zID0gKCkgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnQgPSByZWFkRmlsZVN5bmModG9BYnNvbHV0ZVBhdGgoJy4uLy4uL2Fzc2V0cy92ZXJzaW9ucy5qc29uJyksICd1dGYtOCcpO1xuICAgIGNvbnN0IHZlcnNpb25zID0gSlNPTi5wYXJzZShjb250ZW50KTtcbiAgICByZXR1cm4gdmVyc2lvbnM7XG59O1xuIiwiaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5pbXBvcnQgeyBnZXRWZXJzaW9ucyB9IGZyb20gJy4uL2hlbHBlcnMvZ2V0VmVyc2lvbnMnO1xuY29uc3QgdmVyc2lvbnMgPSBnZXRWZXJzaW9ucygpO1xuZXhwb3J0IGNvbnN0IFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcyA9IHouZW51bShbXG4gICAgJ3Bvc3RncmVzcWwnLFxuICAgICdteXNxbCcsXG4gICAgJ21zc3FsJ1xuXSk7XG5leHBvcnQgY29uc3QgU3VwcG9ydGVkTVNTUUxFZGl0aW9ucyA9IHouZW51bShbXG4gICAgJ0RldmVsb3BlcicsXG4gICAgJ0V4cHJlc3MnLFxuICAgICdTdGFuZGFyZCcsXG4gICAgJ0VudGVycHJpc2UnLFxuICAgICdFbnRlcnByaXNlQ29yZSdcbl0pO1xuZXhwb3J0IGNvbnN0IERhdGFiYXNlT3B0aW9ucyA9IHoub2JqZWN0KHtcbiAgICBuYW1lOiBTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMsXG4gICAgcG9ydDogei5udW1iZXIoKS5vcih6LnN0cmluZygpLnRyYW5zZm9ybShOdW1iZXIpLnJlZmluZShpdGVtID0+ICFpc05hTihpdGVtKSkpLFxuICAgIGRhdGFiYXNlOiB6LnN0cmluZygpLmRlZmF1bHQoJ2RjZHgnKSxcbiAgICB1c2VybmFtZTogei5zdHJpbmcoKS5kZWZhdWx0KCdkY2R4JyksXG4gICAgcGFzc3dvcmQ6IHouc3RyaW5nKCkuZGVmYXVsdCgnZGNkeCcpLFxuICAgIGNsZWFuOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgICBwcnVuZTogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gICAgdmVyYm9zZTogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gICAgZHJpdmVyOiB6LnN0cmluZygpXG59KTtcbmV4cG9ydCBjb25zdCBQb3N0Z3JlU1FMT3B0aW9ucyA9IERhdGFiYXNlT3B0aW9ucy5leHRlbmQoe1xuICAgIG5hbWU6IFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5yZWZpbmUoaXRlbSA9PiBpdGVtID09PSBTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMuVmFsdWVzLnBvc3RncmVzcWwpLmRlZmF1bHQoU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLlZhbHVlcy5wb3N0Z3Jlc3FsKSxcbiAgICB0YWc6IHouc3RyaW5nKCkucmVmaW5lKGl0ZW0gPT4gdmVyc2lvbnNbU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLlZhbHVlcy5wb3N0Z3Jlc3FsXS5pbmNsdWRlcyhpdGVtKSkuZGVmYXVsdCgnbGF0ZXN0JyksXG4gICAgcG9ydDogei5udW1iZXIoKS5vcih6LnN0cmluZygpLnRyYW5zZm9ybShOdW1iZXIpLnJlZmluZShpdGVtID0+ICFpc05hTihpdGVtKSkpLmRlZmF1bHQoNTQzMiksXG4gICAgZHJpdmVyOiB6LnN0cmluZygpLnJlZmluZShpdGVtID0+IGl0ZW0gPT09ICdvcmcucG9zdGdyZXNxbC5Ecml2ZXInKS5kZWZhdWx0KCdvcmcucG9zdGdyZXNxbC5Ecml2ZXInKVxufSk7XG5leHBvcnQgY29uc3QgTXlTUUxPcHRpb25zID0gRGF0YWJhc2VPcHRpb25zLmV4dGVuZCh7XG4gICAgbmFtZTogU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLnJlZmluZShpdGVtID0+IGl0ZW0gPT09IFN1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5WYWx1ZXMubXlzcWwpLmRlZmF1bHQoU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLlZhbHVlcy5teXNxbCksXG4gICAgdGFnOiB6LnN0cmluZygpLnJlZmluZShpdGVtID0+IHZlcnNpb25zW1N1cHBvcnRlZERhdGFiYXNlRW5naW5lcy5WYWx1ZXMubXlzcWxdLmluY2x1ZGVzKGl0ZW0pKS5kZWZhdWx0KCdsYXRlc3QnKSxcbiAgICBwb3J0OiB6Lm51bWJlcigpLm9yKHouc3RyaW5nKCkudHJhbnNmb3JtKE51bWJlcikucmVmaW5lKGl0ZW0gPT4gIWlzTmFOKGl0ZW0pKSkuZGVmYXVsdCgzMzA2KSxcbiAgICBkcml2ZXI6IHouc3RyaW5nKCkucmVmaW5lKGl0ZW0gPT4gaXRlbSA9PT0gJ2NvbS5teXNxbC5qZGJjLkRyaXZlcicpLmRlZmF1bHQoJ2NvbS5teXNxbC5qZGJjLkRyaXZlcicpXG59KTtcbmV4cG9ydCBjb25zdCBNU1NRTE9wdGlvbnMgPSBEYXRhYmFzZU9wdGlvbnMuZXh0ZW5kKHtcbiAgICBuYW1lOiBTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMucmVmaW5lKGl0ZW0gPT4gaXRlbSA9PT0gU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLlZhbHVlcy5tc3NxbCkuZGVmYXVsdChTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMuVmFsdWVzLm1zc3FsKSxcbiAgICB0YWc6IHouc3RyaW5nKCkucmVmaW5lKGl0ZW0gPT4gdmVyc2lvbnNbU3VwcG9ydGVkRGF0YWJhc2VFbmdpbmVzLlZhbHVlcy5tc3NxbF0uaW5jbHVkZXMoaXRlbSkpLmRlZmF1bHQoJ2xhdGVzdCcpLFxuICAgIGVkaXRpb246IFN1cHBvcnRlZE1TU1FMRWRpdGlvbnMuZGVmYXVsdCgnRGV2ZWxvcGVyJyksXG4gICAgcG9ydDogei5udW1iZXIoKS5vcih6LnN0cmluZygpLnRyYW5zZm9ybShOdW1iZXIpLnJlZmluZShpdGVtID0+ICFpc05hTihpdGVtKSkpLmRlZmF1bHQoMTQzMyksXG4gICAgdXNlcm5hbWU6IHouc3RyaW5nKCkucmVmaW5lKGl0ZW0gPT4gaXRlbSA9PT0gJ3NhJykuZGVmYXVsdCgnc2EnKSxcbiAgICBwYXNzd29yZDogei5zdHJpbmcoKS5kZWZhdWx0KCdEYXRhQ2VudGVyRFghJyksXG4gICAgZHJpdmVyOiB6LnN0cmluZygpLnJlZmluZShpdGVtID0+IGl0ZW0gPT09ICdjb20ubWljcm9zb2Z0LnNxbHNlcnZlci5qZGJjLlNRTFNlcnZlckRyaXZlcicpLmRlZmF1bHQoJ2NvbS5taWNyb3NvZnQuc3Fsc2VydmVyLmpkYmMuU1FMU2VydmVyRHJpdmVyJylcbn0pO1xuIiwiaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5pbXBvcnQgeyBTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMgfSBmcm9tICcuL0RhdGFiYXNlJztcbmV4cG9ydCBjb25zdCBTdXBwb3J0ZWRBcHBsaWNhdGlvbnMgPSB6LmVudW0oW1xuICAgICdqaXJhJyxcbiAgICAnY29uZmx1ZW5jZScsXG4gICAgJ2JpdGJ1Y2tldCcsXG4gICAgJ2JhbWJvbydcbl0pO1xuZXhwb3J0IGNvbnN0IEFwcGxpY2F0aW9uT3B0aW9ucyA9IHoub2JqZWN0KHtcbiAgICBuYW1lOiBTdXBwb3J0ZWRBcHBsaWNhdGlvbnMsXG4gICAgdGFnOiB6LnN0cmluZygpLmRlZmF1bHQoJ2xhdGVzdCcpLFxuICAgIGRhdGFiYXNlOiBTdXBwb3J0ZWREYXRhYmFzZUVuZ2luZXMuZGVmYXVsdCgncG9zdGdyZXNxbCcpLFxuICAgIGRhdGFiYXNlVGFnOiB6LnN0cmluZygpLmRlZmF1bHQoJ2xhdGVzdCcpLFxuICAgIHBvcnQ6IHouc3RyaW5nKCkudHJhbnNmb3JtKE51bWJlcikucmVmaW5lKGl0ZW0gPT4gIWlzTmFOKGl0ZW0pKS5kZWZhdWx0KCc4MCcpLFxuICAgIGNvbnRleHRQYXRoOiB6LnN0cmluZygpLFxuICAgIHhtczogei5zdHJpbmcoKS5kZWZhdWx0KCcxMDI0bScpLFxuICAgIHhteDogei5zdHJpbmcoKS5kZWZhdWx0KCcxMDI0bScpLFxuICAgIHdhdGNoOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgICBleHQ6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gICAgaW5zdGFsbDogei5ib29sZWFuKCksXG4gICAgb3V0cHV0RGlyZWN0b3J5OiB6LnN0cmluZygpLFxuICAgIGFjdGl2YXRlUHJvZmlsZXM6IHouc3RyaW5nKCksXG4gICAgY29uZmlndXJlOiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcbiAgICBjbGVhbjogei5ib29sZWFuKCkuZGVmYXVsdChmYWxzZSksXG4gICAgcHJ1bmU6IHouYm9vbGVhbigpLmRlZmF1bHQoZmFsc2UpLFxuICAgIGRlYnVnOiB6LmJvb2xlYW4oKS5kZWZhdWx0KHRydWUpLFxuICAgIGp2bTogei5zdHJpbmcoKSxcbiAgICBjd2Q6IHouc3RyaW5nKClcbn0pLnBhcnRpYWwoe1xuICAgIGNvbnRleHRQYXRoOiB0cnVlLFxuICAgIGV4dDogdHJ1ZSxcbiAgICBpbnN0YWxsOiB0cnVlLFxuICAgIG91dHB1dERpcmVjdG9yeTogdHJ1ZSxcbiAgICBhY3RpdmF0ZVByb2ZpbGVzOiB0cnVlLFxuICAgIGp2bTogdHJ1ZSxcbiAgICBjd2Q6IHRydWVcbn0pO1xuIiwiaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5pbXBvcnQgeyBTdXBwb3J0ZWRBcHBsaWNhdGlvbnMgfSBmcm9tICcuL0FwcGxpY2F0aW9uJztcbmV4cG9ydCBjb25zdCBQZXJmb3JtYW5jZVRlc3RUeXBlcyA9IHouZW51bShbXG4gICAgJ2Jhc2VsaW5lJyxcbiAgICAncmVncmVzc2lvbidcbl0pO1xuZXhwb3J0IGNvbnN0IFNjYWxhYmlsaXR5VGVzdFR5cGVzID0gei5lbnVtKFtcbiAgICAnb25lLW5vZGUnLFxuICAgICd0d28tbm9kZScsXG4gICAgJ2ZvdXItbm9kZSdcbl0pO1xuZXhwb3J0IGNvbnN0IFRlc3RSZXN1bHRzID0gei5lbnVtKFtcbiAgICAncGF0aCcsXG4gICAgJ1N1bW1hcnkgcnVuIHN0YXR1cycsXG4gICAgJ0FwcGxpY2F0aW9uIG5vZGVzIGNvdW50JyxcbiAgICAnRmluaXNoZWQnLFxuICAgICdDb21wbGlhbnQnLFxuICAgICdTdWNjZXNzJyxcbiAgICAnSGFzIGFwcC1zcGVjaWZpYyBhY3Rpb25zJ1xuXSk7XG5leHBvcnQgY29uc3QgUmVwb3J0VHlwZXMgPSB6LmVudW0oW1xuICAgICdwZXJmb3JtYW5jZScsXG4gICAgJ3NjYWxhYmlsaXR5J1xuXSk7XG5leHBvcnQgY29uc3QgQVBUVGVzdE1lc3NhZ2VzID0gei5vYmplY3Qoe1xuICAgIGhlYWRlcjogei5mdW5jdGlvbigpLmFyZ3MoU3VwcG9ydGVkQXBwbGljYXRpb25zLCBQZXJmb3JtYW5jZVRlc3RUeXBlcy5vcihTY2FsYWJpbGl0eVRlc3RUeXBlcykpLnJldHVybnMoei5zdHJpbmcoKSksXG4gICAgcmVhZHlGb3JQcm92aXNpb25pbmc6IHouc3RyaW5nKCksXG4gICAgc3RhcnRUZXN0OiB6LnN0cmluZygpLFxuICAgIHN1Y2Nlc3M6IHouc3RyaW5nKCksXG4gICAgZmFpbHVyZTogei5mdW5jdGlvbigpLmFyZ3MoUGVyZm9ybWFuY2VUZXN0VHlwZXMub3IoU2NhbGFiaWxpdHlUZXN0VHlwZXMpLCB6LnN0cmluZygpLCBTdXBwb3J0ZWRBcHBsaWNhdGlvbnMsIHouc3RyaW5nKCksIHouc3RyaW5nKCksIHoucmVjb3JkKFRlc3RSZXN1bHRzLCB6LnN0cmluZygpLm9yKHoudW5kZWZpbmVkKCkpKSlcbn0pO1xuZXhwb3J0IGNvbnN0IEFQVFByb3Zpc2lvbkFyZ3MgPSB6Lm9iamVjdCh7XG4gICAgcHJvZHVjdDogU3VwcG9ydGVkQXBwbGljYXRpb25zLFxuICAgIHRhZzogei5zdHJpbmcoKSxcbiAgICBjd2Q6IHouc3RyaW5nKCksXG4gICAgZW52aXJvbm1lbnQ6IHouc3RyaW5nKCksXG4gICAgbW9uaXRvcmluZzogei5ib29sZWFuKCksXG4gICAgbGljZW5zZTogei5zdHJpbmcoKSxcbiAgICBub2Rlczogei5udW1iZXIoKSxcbiAgICBmb3JjZTogei5ib29sZWFuKClcbn0pLnBhcnRpYWwoe1xuICAgIHRhZzogdHJ1ZSxcbiAgICBtb25pdG9yaW5nOiB0cnVlLFxuICAgIGxpY2Vuc2U6IHRydWUsXG4gICAgZm9yY2U6IHRydWVcbn0pO1xuZXhwb3J0IGNvbnN0IEFQVFByb3Zpc2lvbk9wdGlvbnMgPSB6Lm9iamVjdCh7XG4gICAgcHJvZHVjdDogU3VwcG9ydGVkQXBwbGljYXRpb25zLFxuICAgIHRhZzogei5zdHJpbmcoKSxcbiAgICBjd2Q6IHouc3RyaW5nKCksXG4gICAgZW52aXJvbm1lbnQ6IHouc3RyaW5nKCksXG4gICAgbW9uaXRvcmluZzogei5ib29sZWFuKCksXG4gICAgbGljZW5zZTogei5zdHJpbmcoKSxcbiAgICBub2Rlczogei5udW1iZXIoKSxcbiAgICBmb3JjZTogei5ib29sZWFuKClcbn0pLnBhcnRpYWwoe1xuICAgIHRhZzogdHJ1ZSxcbiAgICBlbnZpcm9ubWVudDogdHJ1ZSxcbiAgICBtb25pdG9yaW5nOiB0cnVlLFxuICAgIGxpY2Vuc2U6IHRydWUsXG4gICAgbm9kZXM6IHRydWUsXG4gICAgZm9yY2U6IHRydWVcbn0pO1xuZXhwb3J0IGNvbnN0IEFQVFBlcmZvcm1hbmNlVGVzdEFyZ3MgPSB6Lm9iamVjdCh7XG4gICAgcHJvZHVjdDogU3VwcG9ydGVkQXBwbGljYXRpb25zLFxuICAgIHRhZzogei5zdHJpbmcoKSxcbiAgICBjd2Q6IHouc3RyaW5nKCksXG4gICAgb3V0cHV0RGlyOiB6LnN0cmluZygpLFxuICAgIGVudmlyb25tZW50OiB6LnN0cmluZygpLFxuICAgIG1vbml0b3Jpbmc6IHouYm9vbGVhbigpLFxuICAgIGxpY2Vuc2U6IHouc3RyaW5nKCksXG4gICAgYXBwS2V5OiB6LnN0cmluZygpLFxuICAgIGFyY2hpdmU6IHouc3RyaW5nKCksXG4gICAgYXBwTGljZW5zZTogei5zdHJpbmcoKSxcbiAgICByZXN0YXJ0QWZ0ZXJJbnN0YWxsOiB6LmJvb2xlYW4oKSxcbiAgICB0aW1lc3RhbXA6IHouc3RyaW5nKCksXG4gICAgZm9yY2U6IHouYm9vbGVhbigpXG59KS5wYXJ0aWFsKHtcbiAgICB0YWc6IHRydWUsXG4gICAgb3V0cHV0RGlyOiB0cnVlLFxuICAgIG1vbml0b3Jpbmc6IHRydWUsXG4gICAgbGljZW5zZTogdHJ1ZSxcbiAgICBhcHBLZXk6IHRydWUsXG4gICAgYXJjaGl2ZTogdHJ1ZSxcbiAgICB0aW1lc3RhbXA6IHRydWUsXG4gICAgcmVzdGFydEFmdGVySW5zdGFsbDogdHJ1ZSxcbiAgICBmb3JjZTogdHJ1ZVxufSk7XG5leHBvcnQgY29uc3QgQVBUUGVyZm9ybWFuY2VUZXN0T3B0aW9ucyA9IHoub2JqZWN0KHtcbiAgICBzdGFnZTogUGVyZm9ybWFuY2VUZXN0VHlwZXMsXG4gICAgcHJvZHVjdDogU3VwcG9ydGVkQXBwbGljYXRpb25zLFxuICAgIHRhZzogei5zdHJpbmcoKSxcbiAgICBjd2Q6IHouc3RyaW5nKCksXG4gICAgb3V0cHV0RGlyOiB6LnN0cmluZygpLFxuICAgIGVudmlyb25tZW50OiB6LnN0cmluZygpLFxuICAgIG1vbml0b3Jpbmc6IHouYm9vbGVhbigpLFxuICAgIGJhc2VVcmw6IHouc3RyaW5nKCksXG4gICAgYXdzX2FjY2Vzc19rZXlfaWQ6IHouc3RyaW5nKCksXG4gICAgYXdzX3NlY3JldF9hY2Nlc3Nfa2V5OiB6LnN0cmluZygpLFxuICAgIGxpY2Vuc2U6IHouc3RyaW5nKCksXG4gICAgYXBwS2V5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgYXJjaGl2ZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGFwcExpY2Vuc2U6IHouc3RyaW5nKCksXG4gICAgcmVzdGFydEFmdGVySW5zdGFsbDogei5ib29sZWFuKCksXG4gICAgZm9yY2U6IHouYm9vbGVhbigpXG59KS5wYXJ0aWFsKHtcbiAgICB0YWc6IHRydWUsXG4gICAgbW9uaXRvcmluZzogdHJ1ZSxcbiAgICBiYXNlVXJsOiB0cnVlLFxuICAgIGF3c19hY2Nlc3Nfa2V5X2lkOiB0cnVlLFxuICAgIGF3c19zZWNyZXRfYWNjZXNzX2tleTogdHJ1ZSxcbiAgICBhcHBMaWNlbnNlOiB0cnVlLFxuICAgIHJlc3RhcnRBZnRlckluc3RhbGw6IHRydWUsXG4gICAgZm9yY2U6IHRydWVcbn0pLnN1cGVyUmVmaW5lKChpbnB1dCwgY3R4KSA9PiB7XG4gICAgaWYgKGlucHV0LnN0YWdlID09PSAncmVncmVzc2lvbicgJiYgKHR5cGVvZiBpbnB1dC5hcHBLZXkgPT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBpbnB1dC5hcmNoaXZlID09PSAndW5kZWZpbmVkJykpIHtcbiAgICAgICAgY3R4LmFkZElzc3VlKHtcbiAgICAgICAgICAgIGNvZGU6IHouWm9kSXNzdWVDb2RlLmN1c3RvbSxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdFaXRoZXIgYGFwcEtleWAgb3IgYGFyY2hpdmVgIGFyZ3VtZW50IG5lZWRzIHRvIGJlIHByb3ZpZGVkJ1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn0pO1xuZXhwb3J0IGNvbnN0IEFQVFBlcmZvcm1hbmNlUmVwb3J0QXJncyA9IHoub2JqZWN0KHtcbiAgICB0eXBlOiBSZXBvcnRUeXBlcy5yZWZpbmUoaXRlbSA9PiBpdGVtID09PSAncGVyZm9ybWFuY2UnKSxcbiAgICB0aW1lc3RhbXA6IHouc3RyaW5nKCksXG4gICAgcmVzdWx0c0RpcjE6IHouc3RyaW5nKCksXG4gICAgcmVzdWx0c0RpcjI6IHouc3RyaW5nKCksXG4gICAgb3V0cHV0RGlyOiB6LnN0cmluZygpLFxuICAgIGN3ZDogei5zdHJpbmcoKVxufSkucGFydGlhbCh7XG4gICAgb3V0cHV0RGlyOiB0cnVlXG59KTtcbmV4cG9ydCBjb25zdCBBUFRQZXJmb3JtYW5jZVJlcG9ydE9wdGlvbnMgPSB6Lm9iamVjdCh7XG4gICAgY3dkOiB6LnN0cmluZygpLFxuICAgIHJlc3VsdHNEaXIxOiB6LnN0cmluZygpLFxuICAgIHJlc3VsdHNEaXIyOiB6LnN0cmluZygpLFxuICAgIG91dHB1dERpcjogei5zdHJpbmcoKSxcbiAgICBmb3JjZTogei5ib29sZWFuKCksXG59KS5wYXJ0aWFsKHtcbiAgICBmb3JjZTogdHJ1ZVxufSk7XG5leHBvcnQgY29uc3QgQVBUU2NhbGFiaWxpdHlUZXN0QXJncyA9IHoub2JqZWN0KHtcbiAgICBwcm9kdWN0OiBTdXBwb3J0ZWRBcHBsaWNhdGlvbnMsXG4gICAgdGFnOiB6LnN0cmluZygpLFxuICAgIGN3ZDogei5zdHJpbmcoKSxcbiAgICBvdXRwdXREaXI6IHouc3RyaW5nKCksXG4gICAgZW52aXJvbm1lbnQ6IHouc3RyaW5nKCksXG4gICAgbW9uaXRvcmluZzogei5ib29sZWFuKCksXG4gICAgbGljZW5zZTogei5zdHJpbmcoKSxcbiAgICBhcHBLZXk6IHouc3RyaW5nKCksXG4gICAgYXJjaGl2ZTogei5zdHJpbmcoKSxcbiAgICBhcHBMaWNlbnNlOiB6LnN0cmluZygpLFxuICAgIHJlc3RhcnRBZnRlckluc3RhbGw6IHouYm9vbGVhbigpLFxuICAgIGptZXRlcjogei5ib29sZWFuKCksXG4gICAgbG9jdXN0OiB6LmJvb2xlYW4oKSxcbiAgICBxdWVyeTogei5zdHJpbmcoKSxcbiAgICB0aW1lc3RhbXA6IHouc3RyaW5nKCksXG4gICAgZm9yY2U6IHouYm9vbGVhbigpXG59KS5wYXJ0aWFsKHtcbiAgICB0YWc6IHRydWUsXG4gICAgb3V0cHV0RGlyOiB0cnVlLFxuICAgIG1vbml0b3Jpbmc6IHRydWUsXG4gICAgbGljZW5zZTogdHJ1ZSxcbiAgICBhcHBLZXk6IHRydWUsXG4gICAgYXJjaGl2ZTogdHJ1ZSxcbiAgICBhcHBMaWNlbnNlOiB0cnVlLFxuICAgIHJlc3RhcnRBZnRlckluc3RhbGw6IHRydWUsXG4gICAgam1ldGVyOiB0cnVlLFxuICAgIGxvY3VzdDogdHJ1ZSxcbiAgICBxdWVyeTogdHJ1ZSxcbiAgICB0aW1lc3RhbXA6IHRydWUsXG4gICAgZm9yY2U6IHRydWVcbn0pO1xuZXhwb3J0IGNvbnN0IEFQVFNjYWxhYmlsaXR5VGVzdE9wdGlvbnMgPSB6Lm9iamVjdCh7XG4gICAgcHJvZHVjdDogU3VwcG9ydGVkQXBwbGljYXRpb25zLFxuICAgIHRhZzogei5zdHJpbmcoKSxcbiAgICBjd2Q6IHouc3RyaW5nKCksXG4gICAgb3V0cHV0RGlyOiB6LnN0cmluZygpLFxuICAgIGVudmlyb25tZW50OiB6LnN0cmluZygpLFxuICAgIG1vbml0b3Jpbmc6IHouYm9vbGVhbigpLFxuICAgIGxpY2Vuc2U6IHouc3RyaW5nKCksXG4gICAgYXBwS2V5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgYXJjaGl2ZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGFwcExpY2Vuc2U6IHouc3RyaW5nKCksXG4gICAgcmVzdGFydEFmdGVySW5zdGFsbDogei5ib29sZWFuKCksXG4gICAgam1ldGVyOiB6LmJvb2xlYW4oKSxcbiAgICBsb2N1c3Q6IHouYm9vbGVhbigpLFxuICAgIHF1ZXJ5OiB6LnN0cmluZygpLFxuICAgIGZvcmNlOiB6LmJvb2xlYW4oKVxufSkucGFydGlhbCh7XG4gICAgdGFnOiB0cnVlLFxuICAgIG1vbml0b3Jpbmc6IHRydWUsXG4gICAgYXBwTGljZW5zZTogdHJ1ZSxcbiAgICByZXN0YXJ0QWZ0ZXJJbnN0YWxsOiB0cnVlLFxuICAgIGptZXRlcjogdHJ1ZSxcbiAgICBsb2N1c3Q6IHRydWUsXG4gICAgcXVlcnk6IHRydWUsXG4gICAgZm9yY2U6IHRydWVcbn0pLnN1cGVyUmVmaW5lKChpbnB1dCwgY3R4KSA9PiB7XG4gICAgaWYgKHR5cGVvZiBpbnB1dC5hcHBLZXkgPT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBpbnB1dC5hcmNoaXZlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjdHguYWRkSXNzdWUoe1xuICAgICAgICAgICAgY29kZTogei5ab2RJc3N1ZUNvZGUuY3VzdG9tLFxuICAgICAgICAgICAgbWVzc2FnZTogJ0VpdGhlciBgYXBwS2V5YCBvciBgYXJjaGl2ZWAgYXJndW1lbnQgbmVlZHMgdG8gYmUgcHJvdmlkZWQnXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufSk7XG5leHBvcnQgY29uc3QgQVBUU2NhbGFiaWxpdHlSZXBvcnRBcmdzID0gQVBUUGVyZm9ybWFuY2VSZXBvcnRBcmdzLmV4dGVuZCh7XG4gICAgdHlwZTogUmVwb3J0VHlwZXMucmVmaW5lKGl0ZW0gPT4gaXRlbSA9PT0gJ3NjYWxhYmlsaXR5JyksXG4gICAgcmVzdWx0c0RpcjM6IHouc3RyaW5nKCksXG4gICAgcHJvZHVjdDogU3VwcG9ydGVkQXBwbGljYXRpb25zXG59KTtcbmV4cG9ydCBjb25zdCBBUFRTY2FsYWJpbGl0eVJlcG9ydE9wdGlvbnMgPSBBUFRQZXJmb3JtYW5jZVJlcG9ydE9wdGlvbnMuZXh0ZW5kKHtcbiAgICBwcm9kdWN0OiBTdXBwb3J0ZWRBcHBsaWNhdGlvbnMsXG4gICAgcmVzdWx0c0RpcjM6IHouc3RyaW5nKCksXG59KTtcbmV4cG9ydCBjb25zdCBBUFRUZWFyZG93bkFyZ3MgPSB6Lm9iamVjdCh7XG4gICAgcHJvZHVjdDogU3VwcG9ydGVkQXBwbGljYXRpb25zLFxuICAgIGN3ZDogei5zdHJpbmcoKSxcbiAgICBlbnZpcm9ubWVudDogei5zdHJpbmcoKSxcbiAgICBmb3JjZTogei5ib29sZWFuKClcbn0pLnBhcnRpYWwoe1xuICAgIGZvcmNlOiB0cnVlXG59KTtcbmV4cG9ydCBjb25zdCBBUFRUZWFyZG93bk9wdGlvbnMgPSB6Lm9iamVjdCh7XG4gICAgcHJvZHVjdDogU3VwcG9ydGVkQXBwbGljYXRpb25zLFxuICAgIGN3ZDogei5zdHJpbmcoKSxcbiAgICBlbnZpcm9ubWVudDogei5zdHJpbmcoKSxcbiAgICBhd3NfYWNjZXNzX2tleV9pZDogei5zdHJpbmcoKSxcbiAgICBhd3Nfc2VjcmV0X2FjY2Vzc19rZXk6IHouc3RyaW5nKCksXG4gICAgZm9yY2U6IHouYm9vbGVhbigpXG59KS5wYXJ0aWFsKHtcbiAgICBhd3NfYWNjZXNzX2tleV9pZDogdHJ1ZSxcbiAgICBhd3Nfc2VjcmV0X2FjY2Vzc19rZXk6IHRydWUsXG4gICAgZm9yY2U6IHRydWVcbn0pO1xuZXhwb3J0IGNvbnN0IEFQVFJlc3RhcnRBcmdzID0gQVBUVGVhcmRvd25BcmdzLmV4dGVuZCh7fSk7XG5leHBvcnQgY29uc3QgQVBUUmVzdGFydE9wdGlvbnMgPSBBUFRUZWFyZG93bk9wdGlvbnMuZXh0ZW5kKHt9KTtcbmV4cG9ydCBjb25zdCBBUFREZXBlbmRlbmN5VHJlZUFyZ3MgPSB6Lm9iamVjdCh7XG4gICAgZ3JvdXBJZDogei5zdHJpbmcoKSxcbiAgICBhcnRpZmFjdElkOiB6LnN0cmluZygpLFxuICAgIGFwcEtleTogei5zdHJpbmcoKSxcbiAgICBhcmNoaXZlOiB6LnN0cmluZygpLFxuICAgIGFjdGl2YXRlUHJvZmlsZXM6IHouc3RyaW5nKCksXG4gICAgb3V0cHV0RmlsZTogei5zdHJpbmcoKVxufSkucGFydGlhbCh7XG4gICAgYXBwS2V5OiB0cnVlLFxuICAgIGFyY2hpdmU6IHRydWUsXG4gICAgYWN0aXZhdGVQcm9maWxlczogdHJ1ZSxcbiAgICBvdXRwdXRGaWxlOiB0cnVlXG59KTtcbmV4cG9ydCBjb25zdCBBUFREZXBlbmRlbmN5VHJlZU9wdGlvbnMgPSB6Lm9iamVjdCh7XG4gICAgZ3JvdXBJZDogei5zdHJpbmcoKSxcbiAgICBhcnRpZmFjdElkOiB6LnN0cmluZygpLFxuICAgIGFwcEtleTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGFyY2hpdmU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBhY3RpdmF0ZVByb2ZpbGVzOiB6LnN0cmluZygpLFxuICAgIG91dHB1dEZpbGU6IHouc3RyaW5nKClcbn0pLnBhcnRpYWwoe1xuICAgIGFjdGl2YXRlUHJvZmlsZXM6IHRydWVcbn0pLnN1cGVyUmVmaW5lKChpbnB1dCwgY3R4KSA9PiB7XG4gICAgaWYgKHR5cGVvZiBpbnB1dC5hcHBLZXkgPT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBpbnB1dC5hcmNoaXZlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjdHguYWRkSXNzdWUoe1xuICAgICAgICAgICAgY29kZTogei5ab2RJc3N1ZUNvZGUuY3VzdG9tLFxuICAgICAgICAgICAgbWVzc2FnZTogJ0VpdGhlciBgYXBwS2V5YCBvciBgYXJjaGl2ZWAgYXJndW1lbnQgbmVlZHMgdG8gYmUgcHJvdmlkZWQnXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufSk7XG5leHBvcnQgY29uc3QgQVBUU0NBQXJncyA9IHoub2JqZWN0KHtcbiAgICBudmRBcGlLZXk6IHouc3RyaW5nKCksXG4gICAgYXBwS2V5OiB6LnN0cmluZygpLFxuICAgIGFyY2hpdmU6IHouc3RyaW5nKCksXG4gICAgZGF0YURpcjogei5zdHJpbmcoKSxcbiAgICBmYWlsT25FcnJvcjogei5ib29sZWFuKCksXG4gICAgb3V0cHV0RGlyOiB6LnN0cmluZygpXG59KS5wYXJ0aWFsKHtcbiAgICBhcHBLZXk6IHRydWUsXG4gICAgYXJjaGl2ZTogdHJ1ZSxcbiAgICBkYXRhRGlyOiB0cnVlLFxuICAgIGZhaWxPbkVycm9yOiB0cnVlLFxuICAgIG91dHB1dERpcjogdHJ1ZVxufSk7XG5leHBvcnQgY29uc3QgQVBUU0NBT3B0aW9ucyA9IHoub2JqZWN0KHtcbiAgICBudmRBcGlLZXk6IHouc3RyaW5nKCksXG4gICAgYXBwS2V5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgYXJjaGl2ZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGRhdGFEaXI6IHouc3RyaW5nKCksXG4gICAgZmFpbE9uRXJyb3I6IHouYm9vbGVhbigpLFxuICAgIG91dHB1dERpcjogei5zdHJpbmcoKVxufSkucGFydGlhbCh7XG4gICAgZGF0YURpcjogdHJ1ZVxufSkuc3VwZXJSZWZpbmUoKGlucHV0LCBjdHgpID0+IHtcbiAgICBpZiAodHlwZW9mIGlucHV0LmFwcEtleSA9PT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGlucHV0LmFyY2hpdmUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGN0eC5hZGRJc3N1ZSh7XG4gICAgICAgICAgICBjb2RlOiB6LlpvZElzc3VlQ29kZS5jdXN0b20sXG4gICAgICAgICAgICBtZXNzYWdlOiAnRWl0aGVyIGBhcHBLZXlgIG9yIGBhcmNoaXZlYCBhcmd1bWVudCBuZWVkcyB0byBiZSBwcm92aWRlZCdcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59KTtcbmV4cG9ydCBjb25zdCBBUFRBcmdzID0gei5pbnRlcnNlY3Rpb24oQVBUUHJvdmlzaW9uT3B0aW9ucywgei5pbnRlcnNlY3Rpb24oQVBUUGVyZm9ybWFuY2VUZXN0QXJncywgQVBUU2NhbGFiaWxpdHlUZXN0QXJncykpO1xuIiwiaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgQVBUUGVyZm9ybWFuY2VSZXBvcnRPcHRpb25zLCBBUFRQZXJmb3JtYW5jZVRlc3RPcHRpb25zLCBBUFRQcm92aXNpb25PcHRpb25zLCBQZXJmb3JtYW5jZVRlc3RUeXBlcyB9IGZyb20gJy4uL3R5cGVzL0RDQVBUJztcbmltcG9ydCB7IGdlbmVyYXRlUGVyZm9ybWFuY2VSZXBvcnQgfSBmcm9tICcuL2hlbHBlcnMvZ2VuZXJhdGVQZXJmb3JtYW5jZVJlcG9ydCc7XG5pbXBvcnQgeyBnZXRPdXRwdXREaXJlY3RvcnkgfSBmcm9tICcuL2hlbHBlcnMvZ2V0T3V0cHV0RGlyZWN0b3J5JztcbmltcG9ydCB7IGdldFJ1bkZvclN0YWdlIH0gZnJvbSAnLi9oZWxwZXJzL2dldFJ1bkZvclN0YWdlJztcbmltcG9ydCB7IHByb3Zpc2lvbkNsdXN0ZXIgfSBmcm9tICcuL2hlbHBlcnMvcHJvdmlzaW9uQ2x1c3Rlcic7XG5pbXBvcnQgeyBydW5MdWNlbmVUaW1pbmdUZXN0IH0gZnJvbSAnLi9oZWxwZXJzL3J1bkx1Y2VuZVRpbWluZ1Rlc3QnO1xuaW1wb3J0IHsgcnVuUGVyZm9ybWFuY2VUZXN0IH0gZnJvbSAnLi9oZWxwZXJzL3J1blBlcmZvcm1hbmNlVGVzdCc7XG5pbXBvcnQgeyB3YWl0Rm9yVXNlcklucHV0IH0gZnJvbSAnLi9oZWxwZXJzL3dhaXRGb3JVc2VySW5wdXQnO1xuaW1wb3J0IHsgTHVjZW5lVGltaW5nVGVzdCwgUnVuMSwgUnVuMiB9IGZyb20gJy4vbWVzc2FnZXMnO1xuZXhwb3J0IGNvbnN0IFBlcmZvcm1hbmNlID0gYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAvLyBHZXQgdGhlIG91dHB1dCBkaXJlY3RvcnkgZm9yIHRoZSB0ZXN0IHJlc3VsdHNcbiAgICBjb25zdCBvdXRwdXREaXIgPSBnZXRPdXRwdXREaXJlY3Rvcnkob3B0aW9ucy5vdXRwdXREaXIsIG9wdGlvbnMudGltZXN0YW1wKTtcbiAgICAvLyBQcm92aXNpb24gdGhlIGNsdXN0ZXJcbiAgICBjb25zdCB7IGN3ZCwgZW52aXJvbm1lbnQsIGJhc2VVcmwsIGF3c19hY2Nlc3Nfa2V5X2lkLCBhd3Nfc2VjcmV0X2FjY2Vzc19rZXksIGxpY2Vuc2UgfSA9IGF3YWl0IHByb3Zpc2lvbkNsdXN0ZXIoQVBUUHJvdmlzaW9uT3B0aW9ucy5wYXJzZSh7XG4gICAgICAgIHByb2R1Y3Q6IG9wdGlvbnMucHJvZHVjdCxcbiAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgICAgICAgZW52aXJvbm1lbnQ6IG9wdGlvbnMuZW52aXJvbm1lbnQsXG4gICAgICAgIG1vbml0b3Jpbmc6IG9wdGlvbnMubW9uaXRvcmluZyxcbiAgICAgICAgbGljZW5zZTogb3B0aW9ucy5saWNlbnNlLFxuICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgIH0pLCB0cnVlKTtcbiAgICAvLyBBc2sgcGVybWlzc2lvbiB0byBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHN0ZXBcbiAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHN0ZXAuLi4nLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBSdW4gdGhlIGJhc2VsaW5lIHBlcmZvcm1hbmNlIHRlc3QgKHJ1biAxKVxuICAgIGF3YWl0IHJ1blBlcmZvcm1hbmNlVGVzdChBUFRQZXJmb3JtYW5jZVRlc3RPcHRpb25zLnBhcnNlKHtcbiAgICAgICAgc3RhZ2U6IFBlcmZvcm1hbmNlVGVzdFR5cGVzLlZhbHVlcy5iYXNlbGluZSxcbiAgICAgICAgcHJvZHVjdDogb3B0aW9ucy5wcm9kdWN0LFxuICAgICAgICBjd2QsXG4gICAgICAgIG91dHB1dERpcixcbiAgICAgICAgZW52aXJvbm1lbnQsXG4gICAgICAgIGJhc2VVcmwsXG4gICAgICAgIGF3c19hY2Nlc3Nfa2V5X2lkLFxuICAgICAgICBhd3Nfc2VjcmV0X2FjY2Vzc19rZXksXG4gICAgICAgIGxpY2Vuc2UsXG4gICAgICAgIGFwcEtleTogb3B0aW9ucy5hcHBLZXksXG4gICAgICAgIGFyY2hpdmU6IG9wdGlvbnMuYXJjaGl2ZSxcbiAgICAgICAgcmVzdGFydEFmdGVySW5zdGFsbDogb3B0aW9ucy5yZXN0YXJ0QWZ0ZXJJbnN0YWxsLFxuICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgIH0pLCBSdW4xKTtcbiAgICAvLyBBc2sgcGVybWlzc2lvbiB0byBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHN0ZXBcbiAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHN0ZXAuLi4nLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBSdW4gdGhlIGx1Y2VuZSB0aW1pbmcgdGVzdCAocGFydCBvZiBydW4gMilcbiAgICBhd2FpdCBydW5MdWNlbmVUaW1pbmdUZXN0KEFQVFBlcmZvcm1hbmNlVGVzdE9wdGlvbnMucGFyc2Uoe1xuICAgICAgICBzdGFnZTogUGVyZm9ybWFuY2VUZXN0VHlwZXMuVmFsdWVzLnJlZ3Jlc3Npb24sXG4gICAgICAgIHByb2R1Y3Q6IG9wdGlvbnMucHJvZHVjdCxcbiAgICAgICAgY3dkLFxuICAgICAgICBvdXRwdXREaXIsXG4gICAgICAgIGVudmlyb25tZW50LFxuICAgICAgICBiYXNlVXJsLFxuICAgICAgICBhd3NfYWNjZXNzX2tleV9pZCxcbiAgICAgICAgYXdzX3NlY3JldF9hY2Nlc3Nfa2V5LFxuICAgICAgICBsaWNlbnNlLFxuICAgICAgICBhcHBLZXk6IG9wdGlvbnMuYXBwS2V5LFxuICAgICAgICBhcmNoaXZlOiBvcHRpb25zLmFyY2hpdmUsXG4gICAgICAgIHJlc3RhcnRBZnRlckluc3RhbGw6IG9wdGlvbnMucmVzdGFydEFmdGVySW5zdGFsbCxcbiAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICB9KSwgTHVjZW5lVGltaW5nVGVzdCk7XG4gICAgLy8gQXNrIHBlcm1pc3Npb24gdG8gY29udGludWUgd2l0aCB0aGUgbmV4dCBzdGVwXG4gICAgYXdhaXQgd2FpdEZvclVzZXJJbnB1dCgnUHJlc3MgYSBrZXkgdG8gY29udGludWUgd2l0aCB0aGUgbmV4dCBzdGVwLi4uJywgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gUnVuIHRoZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHRlc3QgKHJ1biAyKVxuICAgIGF3YWl0IHJ1blBlcmZvcm1hbmNlVGVzdChBUFRQZXJmb3JtYW5jZVRlc3RPcHRpb25zLnBhcnNlKHtcbiAgICAgICAgc3RhZ2U6IFBlcmZvcm1hbmNlVGVzdFR5cGVzLlZhbHVlcy5yZWdyZXNzaW9uLFxuICAgICAgICBwcm9kdWN0OiBvcHRpb25zLnByb2R1Y3QsXG4gICAgICAgIGN3ZCxcbiAgICAgICAgb3V0cHV0RGlyLFxuICAgICAgICBlbnZpcm9ubWVudCxcbiAgICAgICAgYmFzZVVybCxcbiAgICAgICAgYXdzX2FjY2Vzc19rZXlfaWQsXG4gICAgICAgIGF3c19zZWNyZXRfYWNjZXNzX2tleSxcbiAgICAgICAgbGljZW5zZSxcbiAgICAgICAgYXBwS2V5OiBvcHRpb25zLmFwcEtleSxcbiAgICAgICAgYXJjaGl2ZTogb3B0aW9ucy5hcmNoaXZlLFxuICAgICAgICByZXN0YXJ0QWZ0ZXJJbnN0YWxsOiBvcHRpb25zLnJlc3RhcnRBZnRlckluc3RhbGwsXG4gICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgfSksIFJ1bjIpO1xuICAgIC8vIEFzayBwZXJtaXNzaW9uIHRvIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgc3RlcFxuICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgc3RlcC4uLicsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIEdlbmVyYXRlIHRoZSBwZXJmb3JtYW5jZSByZXBvcnRcbiAgICBhd2FpdCBnZW5lcmF0ZVBlcmZvcm1hbmNlUmVwb3J0KEFQVFBlcmZvcm1hbmNlUmVwb3J0T3B0aW9ucy5wYXJzZSh7XG4gICAgICAgIGN3ZCxcbiAgICAgICAgb3V0cHV0RGlyLFxuICAgICAgICByZXN1bHRzRGlyMTogam9pbihvdXRwdXREaXIsIGBydW4ke2dldFJ1bkZvclN0YWdlKCdiYXNlbGluZScpfWApLFxuICAgICAgICByZXN1bHRzRGlyMjogam9pbihvdXRwdXREaXIsIGBydW4ke2dldFJ1bkZvclN0YWdlKCdyZWdyZXNzaW9uJyl9YCksXG4gICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgfSkpO1xufTtcbiIsImltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7IEFQVFNjYWxhYmlsaXR5UmVwb3J0T3B0aW9ucywgQVBUU2NhbGFiaWxpdHlUZXN0T3B0aW9ucyB9IGZyb20gJy4uL3R5cGVzL0RDQVBUJztcbmltcG9ydCB7IGdlbmVyYXRlU2NhbGFiaWxpdHlSZXBvcnQgfSBmcm9tICcuL2hlbHBlcnMvZ2VuZXJhdGVTY2FsYWJpbGl0eVJlcG9ydCc7XG5pbXBvcnQgeyBnZXRPdXRwdXREaXJlY3RvcnkgfSBmcm9tICcuL2hlbHBlcnMvZ2V0T3V0cHV0RGlyZWN0b3J5JztcbmltcG9ydCB7IGdldFJ1bkZvclN0YWdlIH0gZnJvbSAnLi9oZWxwZXJzL2dldFJ1bkZvclN0YWdlJztcbmltcG9ydCB7IHByb3Zpc2lvbkNsdXN0ZXIgfSBmcm9tICcuL2hlbHBlcnMvcHJvdmlzaW9uQ2x1c3Rlcic7XG5pbXBvcnQgeyBydW5TY2FsYWJpbGl0eVRlc3QgfSBmcm9tICcuL2hlbHBlcnMvcnVuU2NhbGFiaWxpdHlUZXN0JztcbmltcG9ydCB7IHdhaXRGb3JVc2VySW5wdXQgfSBmcm9tICcuL2hlbHBlcnMvd2FpdEZvclVzZXJJbnB1dCc7XG5pbXBvcnQgeyBTY2FsYWJpbGl0eVRlc3RNZXNzYWdlcyB9IGZyb20gJy4vbWVzc2FnZXMnO1xuZXhwb3J0IGNvbnN0IFNjYWxhYmlsaXR5ID0gYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAvLyBHZXQgdGhlIG91dHB1dCBkaXJlY3RvcnkgZm9yIHRoZSB0ZXN0IHJlc3VsdHNcbiAgICBjb25zdCBvdXRwdXREaXIgPSBnZXRPdXRwdXREaXJlY3Rvcnkob3B0aW9ucy5vdXRwdXREaXIsIG9wdGlvbnMudGltZXN0YW1wKTtcbiAgICAvLyBQcm92aXNpb24gdGhlIGNsdXN0ZXJcbiAgICBjb25zdCB7IGN3ZCwgZW52aXJvbm1lbnQsIGxpY2Vuc2UgfSA9IGF3YWl0IHByb3Zpc2lvbkNsdXN0ZXIoe1xuICAgICAgICBwcm9kdWN0OiBvcHRpb25zLnByb2R1Y3QsXG4gICAgICAgIGN3ZDogb3B0aW9ucy5jd2QsXG4gICAgICAgIGVudmlyb25tZW50OiBvcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICBtb25pdG9yaW5nOiBvcHRpb25zLm1vbml0b3JpbmcsXG4gICAgICAgIGxpY2Vuc2U6IG9wdGlvbnMubGljZW5zZSxcbiAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICB9LCBmYWxzZSk7XG4gICAgLy8gQXNrIHBlcm1pc3Npb24gdG8gY29udGludWUgd2l0aCB0aGUgbmV4dCBzdGVwXG4gICAgYXdhaXQgd2FpdEZvclVzZXJJbnB1dCgnUHJlc3MgYSBrZXkgdG8gY29udGludWUgd2l0aCB0aGUgbmV4dCBzdGVwLi4uJywgb3B0aW9ucy5mb3JjZSk7XG4gICAgLy8gUnVuIHRoZSBzY2FsYWJpbGl0eSB0ZXN0IHdpdGggYSBvbmUtbm9kZSBjbHVzdGVyXG4gICAgYXdhaXQgcnVuU2NhbGFiaWxpdHlUZXN0KCdvbmUtbm9kZScsIEFQVFNjYWxhYmlsaXR5VGVzdE9wdGlvbnMucGFyc2Uoe1xuICAgICAgICBwcm9kdWN0OiBvcHRpb25zLnByb2R1Y3QsXG4gICAgICAgIGN3ZCxcbiAgICAgICAgb3V0cHV0RGlyLFxuICAgICAgICBlbnZpcm9ubWVudCxcbiAgICAgICAgbGljZW5zZSxcbiAgICAgICAgYXBwS2V5OiBvcHRpb25zLmFwcEtleSxcbiAgICAgICAgYXJjaGl2ZTogb3B0aW9ucy5hcmNoaXZlLFxuICAgICAgICBhcHBMaWNlbnNlOiBvcHRpb25zLmFwcExpY2Vuc2UsXG4gICAgICAgIHJlc3RhcnRBZnRlckluc3RhbGw6IG9wdGlvbnMucmVzdGFydEFmdGVySW5zdGFsbCxcbiAgICAgICAgam1ldGVyOiBvcHRpb25zLmptZXRlcixcbiAgICAgICAgbG9jdXN0OiBvcHRpb25zLmxvY3VzdCxcbiAgICAgICAgcXVlcnk6IG9wdGlvbnMucXVlcnksXG4gICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgfSksIFNjYWxhYmlsaXR5VGVzdE1lc3NhZ2VzKTtcbiAgICAvLyBBc2sgcGVybWlzc2lvbiB0byBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHN0ZXBcbiAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHN0ZXAuLi4nLCBvcHRpb25zLmZvcmNlKTtcbiAgICAvLyBSdW4gdGhlIHNjYWxhYmlsaXR5IHRlc3Qgd2l0aCBhIHR3by1ub2RlIGNsdXN0ZXJcbiAgICBhd2FpdCBydW5TY2FsYWJpbGl0eVRlc3QoJ3R3by1ub2RlJywgQVBUU2NhbGFiaWxpdHlUZXN0T3B0aW9ucy5wYXJzZSh7XG4gICAgICAgIHByb2R1Y3Q6IG9wdGlvbnMucHJvZHVjdCxcbiAgICAgICAgY3dkLFxuICAgICAgICBvdXRwdXREaXIsXG4gICAgICAgIGVudmlyb25tZW50LFxuICAgICAgICBsaWNlbnNlLFxuICAgICAgICBhcHBLZXk6IG9wdGlvbnMuYXBwS2V5LFxuICAgICAgICBhcmNoaXZlOiBvcHRpb25zLmFyY2hpdmUsXG4gICAgICAgIGFwcExpY2Vuc2U6IG9wdGlvbnMuYXBwTGljZW5zZSxcbiAgICAgICAgcmVzdGFydEFmdGVySW5zdGFsbDogb3B0aW9ucy5yZXN0YXJ0QWZ0ZXJJbnN0YWxsLFxuICAgICAgICBqbWV0ZXI6IG9wdGlvbnMuam1ldGVyLFxuICAgICAgICBsb2N1c3Q6IG9wdGlvbnMubG9jdXN0LFxuICAgICAgICBxdWVyeTogb3B0aW9ucy5xdWVyeSxcbiAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICB9KSwgU2NhbGFiaWxpdHlUZXN0TWVzc2FnZXMpO1xuICAgIC8vIEFzayBwZXJtaXNzaW9uIHRvIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgc3RlcFxuICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgc3RlcC4uLicsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIFJ1biB0aGUgc2NhbGFiaWxpdHkgdGVzdCB3aXRoIGEgb25lLW5vZGUgY2x1c3RlclxuICAgIGF3YWl0IHJ1blNjYWxhYmlsaXR5VGVzdCgnZm91ci1ub2RlJywgQVBUU2NhbGFiaWxpdHlUZXN0T3B0aW9ucy5wYXJzZSh7XG4gICAgICAgIHByb2R1Y3Q6IG9wdGlvbnMucHJvZHVjdCxcbiAgICAgICAgY3dkLFxuICAgICAgICBvdXRwdXREaXIsXG4gICAgICAgIGVudmlyb25tZW50LFxuICAgICAgICBsaWNlbnNlLFxuICAgICAgICBhcHBLZXk6IG9wdGlvbnMuYXBwS2V5LFxuICAgICAgICBhcmNoaXZlOiBvcHRpb25zLmFyY2hpdmUsXG4gICAgICAgIGFwcExpY2Vuc2U6IG9wdGlvbnMuYXBwTGljZW5zZSxcbiAgICAgICAgcmVzdGFydEFmdGVySW5zdGFsbDogb3B0aW9ucy5yZXN0YXJ0QWZ0ZXJJbnN0YWxsLFxuICAgICAgICBqbWV0ZXI6IG9wdGlvbnMuam1ldGVyLFxuICAgICAgICBsb2N1c3Q6IG9wdGlvbnMubG9jdXN0LFxuICAgICAgICBxdWVyeTogb3B0aW9ucy5xdWVyeSxcbiAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICB9KSwgU2NhbGFiaWxpdHlUZXN0TWVzc2FnZXMpO1xuICAgIC8vIEFzayBwZXJtaXNzaW9uIHRvIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgc3RlcFxuICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgc3RlcC4uLicsIG9wdGlvbnMuZm9yY2UpO1xuICAgIC8vIEdlbmVyYXRlIHRoZSBzY2FsYWJpbGl0eSByZXBvcnRcbiAgICBhd2FpdCBnZW5lcmF0ZVNjYWxhYmlsaXR5UmVwb3J0KEFQVFNjYWxhYmlsaXR5UmVwb3J0T3B0aW9ucy5wYXJzZSh7XG4gICAgICAgIGN3ZCxcbiAgICAgICAgcHJvZHVjdDogb3B0aW9ucy5wcm9kdWN0LFxuICAgICAgICByZXN1bHRzRGlyMTogam9pbihvdXRwdXREaXIsIGBydW4ke2dldFJ1bkZvclN0YWdlKCdvbmUtbm9kZScpfWApLFxuICAgICAgICByZXN1bHRzRGlyMjogam9pbihvdXRwdXREaXIsIGBydW4ke2dldFJ1bkZvclN0YWdlKCd0d28tbm9kZScpfWApLFxuICAgICAgICByZXN1bHRzRGlyMzogam9pbihvdXRwdXREaXIsIGBydW4ke2dldFJ1bkZvclN0YWdlKCdmb3VyLW5vZGUnKX1gKSxcbiAgICAgICAgb3V0cHV0RGlyLFxuICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgIH0pKTtcbn07XG4iLCJpbXBvcnQgeyBhc3luY0V4aXRIb29rLCBncmFjZWZ1bEV4aXQgfSBmcm9tICdleGl0LWhvb2snO1xuaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7XG5leHBvcnQgY29uc3QgQWN0aW9uSGFuZGxlciA9IGFzeW5jIChwcm9ncmFtLCB7IGFjdGlvbiwgZXJyb3JIYW5kbGVyIH0sIG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBvcHMgPSBvcHRpb25zIHx8IHByb2dyYW0ub3B0cygpO1xuICAgIGF3YWl0IG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHtcbiAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9ICcnO1xuICAgICAgICBhc3luY0V4aXRIb29rKGFzeW5jIChjb2RlKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChjb2RlICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGVycm9ySGFuZGxlcihvcHMpLmNhdGNoKCgpID0+IG51bGwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXJyb3JNZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UudHJpbSgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFdlIGFyZSByZWplY3RpbmcgdGhlIHByb21pc2UgdG8gYXZvaWQgdGhlXG4gICAgICAgICAgICAgICAgICAgIC8vIFwiQ2FsbGluZyBwcm9jZXNzLmV4aXRcIiBsb2cgbWVzc2FnZSBmcm9tIGV4aXQtaG9va1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogZXJyO1xuICAgICAgICAgICAgICAgIHJlamVjdChtZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgd2FpdDogNjAgKiAxICogMTAwMFxuICAgICAgICB9KTtcbiAgICAgICAgYWN0aW9uKG9wcykudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBncmFjZWZ1bEV4aXQoMCk7XG4gICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2Ygei5ab2RFcnJvcikge1xuICAgICAgICAgICAgICAgIGVyci5pc3N1ZXMuZm9yRWFjaChpc3N1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSArPSBgVW5hYmxlIHRvIHBhcnNlIG9wdGlvbiAke2lzc3VlLnBhdGguam9pbignLCcpfTogJHtpc3N1ZS5tZXNzYWdlfVxcbmA7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvciB8fCB0eXBlb2YgZXJyID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGVyci50b1N0cmluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ3JhY2VmdWxFeGl0KDEpO1xuICAgICAgICB9KTtcbiAgICB9KS5jYXRjaChtZXNzYWdlID0+IHtcbiAgICAgICAgaWYgKG1lc3NhZ2UgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHByb2dyYW0uZXJyb3IobWVzc2FnZSk7XG4gICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBlcnJvciBtZXNzYWdlLFxuICAgICAgICAgICAgLy8gd2UgY2FuIGFzc3VtZSBhIGNsZWFuIGV4aXRcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICAgICAgfVxuICAgIH0pO1xufTtcbiIsImltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgY29uc29sZSBmcm9tICdjb25zb2xlJztcbmltcG9ydCB7IHdyaXRlRmlsZVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgc2VtdmVyIGZyb20gJ3NlbXZlcic7XG5pbXBvcnQgeyBnZXRWZXJzaW9ucyB9IGZyb20gJy4vZ2V0VmVyc2lvbnMnO1xuaW1wb3J0IHsgdG9BYnNvbHV0ZVBhdGggfSBmcm9tICcuL3RvQWJzb2x1dGVQYXRoJztcbmNvbnN0IHJlcG9zaXRvcmllcyA9IFtcbiAgICB7IG5hbWU6ICdqaXJhJywgcmVwb3NpdG9yeTogJ2F0bGFzc2lhbi9qaXJhLXNvZnR3YXJlJyB9LFxuICAgIHsgbmFtZTogJ2NvbmZsdWVuY2UnLCByZXBvc2l0b3J5OiAnYXRsYXNzaWFuL2NvbmZsdWVuY2UnIH0sXG4gICAgeyBuYW1lOiAnYmFtYm9vJywgcmVwb3NpdG9yeTogJ2F0bGFzc2lhbi9iYW1ib28nIH0sXG4gICAgeyBuYW1lOiAnYml0YnVja2V0JywgcmVwb3NpdG9yeTogJ2F0bGFzc2lhbi9iaXRidWNrZXQnIH0sXG4gICAgeyBuYW1lOiAnbXlzcWwnLCByZXBvc2l0b3J5OiAnbGlicmFyeS9teXNxbCcgfSxcbiAgICB7IG5hbWU6ICdwb3N0Z3Jlc3FsJywgcmVwb3NpdG9yeTogJ2xpYnJhcnkvcG9zdGdyZXMnIH0sXG5dO1xuY29uc3QgZ2V0TGlzdE9mVGFnc1BhZ2luYXRlZCA9IGFzeW5jICh1cmwpID0+IHtcbiAgICBjb25zdCB0YWdzID0gW107XG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBheGlvcy5nZXQodXJsKTtcbiAgICBpZiAoZGF0YSkge1xuICAgICAgICB0YWdzLnB1c2goLi4uZGF0YS5yZXN1bHRzLm1hcCgoaXRlbSkgPT4gaXRlbS5uYW1lKSk7XG4gICAgICAgIGlmIChkYXRhLm5leHQpIHtcbiAgICAgICAgICAgIC8vIEFkZCBhIGJhY2tvZmYgcGVyaW9kIHRvIGF2b2lkIHJhdGUgbGltaXRpbmdcbiAgICAgICAgICAgIC8vIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMDApKTtcbiAgICAgICAgICAgIHRhZ3MucHVzaCguLi5hd2FpdCBnZXRMaXN0T2ZUYWdzUGFnaW5hdGVkKGRhdGEubmV4dCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0YWdzO1xufTtcbmNvbnN0IHNvcnRCeVZlcnNpb24gPSAoYSwgYikgPT4ge1xuICAgIGEgPSBhLnNwbGl0KCctJylbMF07XG4gICAgYiA9IGIuc3BsaXQoJy0nKVswXTtcbiAgICBpZiAoaXNOYU4oTnVtYmVyKGEuY2hhckF0KDApKSkpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICBpZiAoaXNOYU4oTnVtYmVyKGIuY2hhckF0KDApKSkpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGlmIChhLnNwbGl0KCcuJykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGEgPSBgJHthfS4wLjBgO1xuICAgIH1cbiAgICBlbHNlIGlmIChhLnNwbGl0KCcuJykubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGEgPSBgJHthfS4wYDtcbiAgICB9XG4gICAgaWYgKGIuc3BsaXQoJy4nKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgYiA9IGAke2F9LjAuMGA7XG4gICAgfVxuICAgIGVsc2UgaWYgKGEuc3BsaXQoJy4nKS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgYiA9IGAke2F9LjBgO1xuICAgIH1cbiAgICBjb25zdCBsZWZ0VmVyc2lvbiA9IHNlbXZlci5jb2VyY2UoYSk7XG4gICAgY29uc3QgcmlnaHRWZXJzaW9uID0gc2VtdmVyLmNvZXJjZShiKTtcbiAgICBpZiAoIWxlZnRWZXJzaW9uKVxuICAgICAgICByZXR1cm4gMTtcbiAgICBpZiAoIXJpZ2h0VmVyc2lvbilcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgcmV0dXJuIHNlbXZlci5sdChsZWZ0VmVyc2lvbiwgcmlnaHRWZXJzaW9uKSA/IC0xIDogc2VtdmVyLmd0KGxlZnRWZXJzaW9uLCByaWdodFZlcnNpb24pID8gMSA6IDA7XG59O1xuZXhwb3J0IGNvbnN0IGdlbmVyYXRlVmVyc2lvbkxpc3QgPSBhc3luYyAocmVwb3NpdG9yeSkgPT4ge1xuICAgIGNvbnN0IHZlcnNpb25zID0gZ2V0VmVyc2lvbnMoKTtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBmb3IgYXdhaXQgKGNvbnN0IGl0ZW0gb2YgcmVwb3NpdG9yaWVzKSB7XG4gICAgICAgIGlmIChyZXBvc2l0b3J5ICYmIGl0ZW0ubmFtZSAhPT0gcmVwb3NpdG9yeSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5sb2coYFJldHJpZXZpbmcgbGlzdCBvZiB0YWdzIGZvciAke2l0ZW0ubmFtZX0uLi5gKTtcbiAgICAgICAgY29uc3QgdGFncyA9IGF3YWl0IGdldExpc3RPZlRhZ3NQYWdpbmF0ZWQoYGh0dHBzOi8vaHViLmRvY2tlci5jb20vdjIvcmVwb3NpdG9yaWVzLyR7aXRlbS5yZXBvc2l0b3J5fS90YWdzLz9wYWdlX3NpemU9MTAwYCk7XG4gICAgICAgIHJlc3VsdFtpdGVtLm5hbWVdID0gdGFncy5zb3J0KHNvcnRCeVZlcnNpb24pO1xuICAgIH1cbiAgICAvLyBNaWNyb3NmdCBTUUwgU2VydmVyIGhhcyBpdCdzIG93biByZWdpc3RyeSB3aXRoIGEgZGlmZmVyZW50IEFQSVxuICAgIGlmICghcmVwb3NpdG9yeSB8fCByZXBvc2l0b3J5ID09PSAnbXNzcWwnKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBSZXRyaWV2aW5nIGxpc3Qgb2YgdGFncyBmb3IgbXNzcWwuLi5gKTtcbiAgICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBheGlvcy5nZXQoJ2h0dHBzOi8vbWNyLm1pY3Jvc29mdC5jb20vdjIvbXNzcWwvc2VydmVyL3RhZ3MvbGlzdCcpO1xuICAgICAgICByZXN1bHRbJ21zc3FsJ10gPSBkYXRhLnRhZ3Muc29ydChzb3J0QnlWZXJzaW9uKTtcbiAgICB9XG4gICAgT2JqZWN0LmVudHJpZXMocmVzdWx0KS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHZlcnNpb25zW2tleV0gPSB2YWx1ZSk7XG4gICAgd3JpdGVGaWxlU3luYyh0b0Fic29sdXRlUGF0aCgnLi4vLi4vYXNzZXRzL3ZlcnNpb25zLmpzb24nKSwgSlNPTi5zdHJpbmdpZnkodmVyc2lvbnMsIG51bGwsIDIpKTtcbiAgICByZXR1cm4gdmVyc2lvbnM7XG59O1xuIiwiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuaW1wb3J0IHsgQ29tbWFuZCBhcyBDb21tYW5kZXIsIE9wdGlvbiB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgeyBncmFjZWZ1bEV4aXQgfSBmcm9tICdleGl0LWhvb2snO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgY3dkIH0gZnJvbSAncHJvY2Vzcyc7XG5pbXBvcnQgeyBnZW5lcmF0ZURlcGVuZGVuY3lUcmVlIH0gZnJvbSAnLi4vYXB0L2hlbHBlcnMvZ2VuZXJhdGVEZXBlbmRlbmN5VHJlZSc7XG5pbXBvcnQgeyBnZW5lcmF0ZVBlcmZvcm1hbmNlUmVwb3J0IH0gZnJvbSAnLi4vYXB0L2hlbHBlcnMvZ2VuZXJhdGVQZXJmb3JtYW5jZVJlcG9ydCc7XG5pbXBvcnQgeyBnZW5lcmF0ZVNjYWxhYmlsaXR5UmVwb3J0IH0gZnJvbSAnLi4vYXB0L2hlbHBlcnMvZ2VuZXJhdGVTY2FsYWJpbGl0eVJlcG9ydCc7XG5pbXBvcnQgeyBnZW5lcmF0ZVNDQVJlcG9ydCB9IGZyb20gJy4uL2FwdC9oZWxwZXJzL2dlbmVyYXRlU0NBUmVwb3J0JztcbmltcG9ydCB7IGdldEhvc3RMaWNlbnNlIH0gZnJvbSAnLi4vYXB0L2hlbHBlcnMvZ2V0SG9zdExpY2Vuc2UnO1xuaW1wb3J0IHsgZ2V0T3V0cHV0RGlyZWN0b3J5IH0gZnJvbSAnLi4vYXB0L2hlbHBlcnMvZ2V0T3V0cHV0RGlyZWN0b3J5JztcbmltcG9ydCB7IGdldFByb2R1Y3QgfSBmcm9tICcuLi9hcHQvaGVscGVycy9nZXRQcm9kdWN0JztcbmltcG9ydCB7IHByb3Zpc2lvbkNsdXN0ZXIgfSBmcm9tICcuLi9hcHQvaGVscGVycy9wcm92aXNpb25DbHVzdGVyJztcbmltcG9ydCB7IHJlc3RhcnRDbHVzdGVyIH0gZnJvbSAnLi4vYXB0L2hlbHBlcnMvcmVzdGFydENsdXN0ZXInO1xuaW1wb3J0IHsgcnVuTHVjZW5lVGltaW5nVGVzdCB9IGZyb20gJy4uL2FwdC9oZWxwZXJzL3J1bkx1Y2VuZVRpbWluZ1Rlc3QnO1xuaW1wb3J0IHsgcnVuUGVyZm9ybWFuY2VUZXN0IH0gZnJvbSAnLi4vYXB0L2hlbHBlcnMvcnVuUGVyZm9ybWFuY2VUZXN0JztcbmltcG9ydCB7IHJ1blNjYWxhYmlsaXR5VGVzdCB9IGZyb20gJy4uL2FwdC9oZWxwZXJzL3J1blNjYWxhYmlsaXR5VGVzdCc7XG5pbXBvcnQgeyB0ZWFyZG93bkNsdXN0ZXIgfSBmcm9tICcuLi9hcHQvaGVscGVycy90ZWFyZG93bkNsdXN0ZXInO1xuaW1wb3J0IHsgd2FpdEZvclVzZXJJbnB1dCB9IGZyb20gJy4uL2FwdC9oZWxwZXJzL3dhaXRGb3JVc2VySW5wdXQnO1xuaW1wb3J0IHsgZW1wdHlMaW5lLCBnZW5lcmljLCBpbml0LCBMdWNlbmVUaW1pbmdUZXN0LCBSdW4xLCBSdW4yLCBTY2FsYWJpbGl0eVRlc3RNZXNzYWdlcyB9IGZyb20gJy4uL2FwdC9tZXNzYWdlcyc7XG5pbXBvcnQgeyBQZXJmb3JtYW5jZSB9IGZyb20gJy4uL2FwdC9wZXJmb3JtYW5jZSc7XG5pbXBvcnQgeyBTY2FsYWJpbGl0eSB9IGZyb20gJy4uL2FwdC9zY2FsYWJpbGl0eSc7XG5pbXBvcnQgeyBBY3Rpb25IYW5kbGVyIH0gZnJvbSAnLi4vaGVscGVycy9BY3Rpb25IYW5kbGVyJztcbmltcG9ydCB7IGdlbmVyYXRlVmVyc2lvbkxpc3QgfSBmcm9tICcuLi9oZWxwZXJzL2dlbmVyYXRlVmVyc2lvbkxpc3QnO1xuaW1wb3J0IHsgZ2V0VmVyc2lvbnMgfSBmcm9tICcuLi9oZWxwZXJzL2dldFZlcnNpb25zJztcbmltcG9ydCB7IFN1cHBvcnRlZEFwcGxpY2F0aW9ucyB9IGZyb20gJy4uL3R5cGVzL0FwcGxpY2F0aW9uJztcbmltcG9ydCB7IEFQVERlcGVuZGVuY3lUcmVlT3B0aW9ucywgQVBUUGVyZm9ybWFuY2VSZXBvcnRPcHRpb25zLCBBUFRQZXJmb3JtYW5jZVRlc3RPcHRpb25zLCBBUFRQcm92aXNpb25PcHRpb25zLCBBUFRSZXN0YXJ0T3B0aW9ucywgQVBUU2NhbGFiaWxpdHlSZXBvcnRPcHRpb25zLCBBUFRTY2FsYWJpbGl0eVRlc3RPcHRpb25zLCBBUFRTQ0FPcHRpb25zLCBBUFRUZWFyZG93bk9wdGlvbnMsIFBlcmZvcm1hbmNlVGVzdFR5cGVzLCBSZXBvcnRUeXBlcyB9IGZyb20gJy4uL3R5cGVzL0RDQVBUJztcbmNvbnN0IHByb2dyYW0gPSBuZXcgQ29tbWFuZGVyKCk7XG5jb25zdCB2ZXJzaW9ucyA9IGdldFZlcnNpb25zKCk7XG5jb25zdCBEZWZhdWx0Q29tbWFuZCA9ICgpID0+ICh7XG4gICAgYWN0aW9uOiBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgICAvLyBDbGVhciB0aGUgY29uc29sZSBhbmQgc2hvdyBhIHdlbGNvbWUgbWVzc2FnZVxuICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnXFx4MUJjJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGdlbmVyaWMuaGVhZGVyKTtcbiAgICAgICAgY29uc3QgdmVyc2lvbiA9IG9wdGlvbnMudGFnO1xuICAgICAgICBpZiAodmVyc2lvbikge1xuICAgICAgICAgICAgaWYgKCF2ZXJzaW9uc1tvcHRpb25zLnByb2R1Y3RdLmluY2x1ZGVzKHZlcnNpb24pKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYENvdWxkIG5vdCBmaW5kIHNwZWNpZmllZCB2ZXJzaW9uICR7dmVyc2lvbn0sIHVwZGF0aW5nICR7b3B0aW9ucy5wcm9kdWN0fSB2ZXJzaW9uIGxpc3RgKTtcbiAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkVmVyc2lvbnMgPSBhd2FpdCBnZW5lcmF0ZVZlcnNpb25MaXN0KG9wdGlvbnMucHJvZHVjdCk7XG4gICAgICAgICAgICAgICAgaWYgKCF1cGRhdGVkVmVyc2lvbnNbb3B0aW9ucy5wcm9kdWN0XS5pbmNsdWRlcyh2ZXJzaW9uKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb2R1Y3QgdmVyc2lvbiAnJHt2ZXJzaW9ufScgaXMgaW52YWxpZC4gQWxsb3dlZCBjaG9pY2VzIGFyZSAke3ZlcnNpb25zW29wdGlvbnMucHJvZHVjdF0uam9pbignLCAnKX0uYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmptZXRlciAmJiBvcHRpb25zLmxvY3VzdCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFaXRoZXIgSk1ldGVyIG9yIExvY3VzdCBtdXN0IGJlIHVzZWQuIFlvdSBjYW5ub3QgdXNlIGJvdGhgKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBHZXQgdGhlIHByb2R1Y3QgZnJvbSB0aGUgYXJncyBvciBhc2sgZm9yIGl0IG5pY2VseVxuICAgICAgICBjb25zdCBwcm9kdWN0ID0gb3B0aW9ucy5wcm9kdWN0IHx8IGF3YWl0IGdldFByb2R1Y3QoKTtcbiAgICAgICAgLy8gU2hvdyB0aGUgaW5pdCBtZXNzYWdlXG4gICAgICAgIGNvbnNvbGUubG9nKGluaXQuaGVhZGVyKHByb2R1Y3QpKTtcbiAgICAgICAgLy8gQXNrIGZvciB0aGUgdXNlciB0byBjb25maXJtIHRoZXkgYXJlIHJlYWR5XG4gICAgICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIHN0YXJ0IHdpdGggdGhlIGZpcnN0IHN0ZXAuLi4nLCBvcHRpb25zLmZvcmNlKTtcbiAgICAgICAgZW1wdHlMaW5lKCk7XG4gICAgICAgIC8vIFN0YXJ0IHRoZSBwZXJmb3JtYW5jZSB0ZXN0aW5nXG4gICAgICAgIGF3YWl0IFBlcmZvcm1hbmNlKHtcbiAgICAgICAgICAgIHByb2R1Y3Q6IHByb2R1Y3QsXG4gICAgICAgICAgICB0YWc6IG9wdGlvbnMudGFnLFxuICAgICAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgICAgICAgICAgIG91dHB1dERpcjogb3B0aW9ucy5vdXRwdXREaXIsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCxcbiAgICAgICAgICAgIG1vbml0b3Jpbmc6IG9wdGlvbnMubW9uaXRvcmluZyxcbiAgICAgICAgICAgIGFwcEtleTogb3B0aW9ucy5hcHBLZXksXG4gICAgICAgICAgICBhcmNoaXZlOiBvcHRpb25zLmFyY2hpdmUsXG4gICAgICAgICAgICBhcHBMaWNlbnNlOiBvcHRpb25zLmFwcExpY2Vuc2UsXG4gICAgICAgICAgICByZXN0YXJ0QWZ0ZXJJbnN0YWxsOiBvcHRpb25zLnJlc3RhcnRBZnRlckluc3RhbGwsXG4gICAgICAgICAgICB0aW1lc3RhbXA6IG9wdGlvbnMudGltZXN0YW1wLFxuICAgICAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEFzayBwZXJtaXNzaW9uIHRvIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgc3RlcFxuICAgICAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHN0ZXAuLi4nLCBvcHRpb25zLmZvcmNlKTtcbiAgICAgICAgLy8gU3RhcnQgdGhlIHNjYWxhYmlsaXR5IHRlc3RpbmdcbiAgICAgICAgYXdhaXQgU2NhbGFiaWxpdHkoe1xuICAgICAgICAgICAgcHJvZHVjdCxcbiAgICAgICAgICAgIHRhZzogb3B0aW9ucy50YWcsXG4gICAgICAgICAgICBjd2Q6IG9wdGlvbnMuY3dkLFxuICAgICAgICAgICAgb3V0cHV0RGlyOiBvcHRpb25zLm91dHB1dERpcixcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBvcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICAgICAgYXBwS2V5OiBvcHRpb25zLmFwcEtleSxcbiAgICAgICAgICAgIGFyY2hpdmU6IG9wdGlvbnMuYXJjaGl2ZSxcbiAgICAgICAgICAgIGFwcExpY2Vuc2U6IG9wdGlvbnMuYXBwTGljZW5zZSxcbiAgICAgICAgICAgIHJlc3RhcnRBZnRlckluc3RhbGw6IG9wdGlvbnMucmVzdGFydEFmdGVySW5zdGFsbCxcbiAgICAgICAgICAgIGptZXRlcjogb3B0aW9ucy5qbWV0ZXIsXG4gICAgICAgICAgICBsb2N1c3Q6IG9wdGlvbnMubG9jdXN0LFxuICAgICAgICAgICAgdGltZXN0YW1wOiBvcHRpb25zLnRpbWVzdGFtcCxcbiAgICAgICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBBc2sgcGVybWlzc2lvbiB0byBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHN0ZXBcbiAgICAgICAgYXdhaXQgd2FpdEZvclVzZXJJbnB1dCgnUHJlc3MgYSBrZXkgdG8gY29udGludWUgd2l0aCB0aGUgbmV4dCBzdGVwLi4uJywgb3B0aW9ucy5mb3JjZSk7XG4gICAgICAgIC8vIFRlYXJkb3duIHRoZSBjbHVzdGVyXG4gICAgICAgIGF3YWl0IHRlYXJkb3duQ2x1c3RlcihBUFRUZWFyZG93bk9wdGlvbnMucGFyc2Uoe1xuICAgICAgICAgICAgcHJvZHVjdDogb3B0aW9ucy5wcm9kdWN0LFxuICAgICAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBvcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICAgICAgfSkpO1xuICAgIH0sXG4gICAgZXJyb3JIYW5kbGVyOiBhc3luYyAoKSA9PiB7XG4gICAgfVxufSk7XG5jb25zdCBSZXBvcnRDb21tYW5kID0gKCkgPT4gKHtcbiAgICBhY3Rpb246IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgIGlmIChvcHRpb25zLnR5cGUgPT09ICdwZXJmb3JtYW5jZScpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wcyA9IG9wdGlvbnM7XG4gICAgICAgICAgICBpZiAoIW9wcy5yZXN1bHRzRGlyMSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIG9wdGlvbiBgLS1yZXN1bHRzRGlyMWAgaXMgcmVxdWlyZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKCFvcHMucmVzdWx0c0RpcjIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBvcHRpb24gYC0tcmVzdWx0c0RpcjJgIGlzIHJlcXVpcmVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCBnZW5lcmF0ZVBlcmZvcm1hbmNlUmVwb3J0KEFQVFBlcmZvcm1hbmNlUmVwb3J0T3B0aW9ucy5wYXJzZSh7XG4gICAgICAgICAgICAgICAgLi4ub3BzLFxuICAgICAgICAgICAgICAgIG91dHB1dERpcjogZ2V0T3V0cHV0RGlyZWN0b3J5KG9wcy5vdXRwdXREaXIsIG9wcy50aW1lc3RhbXApXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBvcHMgPSBvcHRpb25zO1xuICAgICAgICAgICAgYXdhaXQgZ2VuZXJhdGVTY2FsYWJpbGl0eVJlcG9ydChBUFRTY2FsYWJpbGl0eVJlcG9ydE9wdGlvbnMucGFyc2Uoe1xuICAgICAgICAgICAgICAgIC4uLm9wcyxcbiAgICAgICAgICAgICAgICBwcm9kdWN0OiBvcHMucHJvZHVjdCxcbiAgICAgICAgICAgICAgICBvdXRwdXREaXI6IGdldE91dHB1dERpcmVjdG9yeShvcHMub3V0cHV0RGlyLCBvcHMudGltZXN0YW1wKVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBlcnJvckhhbmRsZXI6IGFzeW5jICgpID0+IHtcbiAgICB9XG59KTtcbmNvbnN0IFBlcmZvcm1hbmNlVGVzdENvbW1hbmQgPSAoKSA9PiAoe1xuICAgIGFjdGlvbjogYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgY29uc3QgdmVyc2lvbiA9IG9wdGlvbnMudGFnO1xuICAgICAgICBpZiAodmVyc2lvbikge1xuICAgICAgICAgICAgaWYgKCF2ZXJzaW9uc1tvcHRpb25zLnByb2R1Y3RdLmluY2x1ZGVzKHZlcnNpb24pKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYENvdWxkIG5vdCBmaW5kIHNwZWNpZmllZCB2ZXJzaW9uICR7dmVyc2lvbn0sIHVwZGF0aW5nICR7b3B0aW9ucy5wcm9kdWN0fSB2ZXJzaW9uIGxpc3RgKTtcbiAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkVmVyc2lvbnMgPSBhd2FpdCBnZW5lcmF0ZVZlcnNpb25MaXN0KG9wdGlvbnMucHJvZHVjdCk7XG4gICAgICAgICAgICAgICAgaWYgKCF1cGRhdGVkVmVyc2lvbnNbb3B0aW9ucy5wcm9kdWN0XS5pbmNsdWRlcyh2ZXJzaW9uKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb2R1Y3QgdmVyc2lvbiAnJHt2ZXJzaW9ufScgaXMgaW52YWxpZC4gQWxsb3dlZCBjaG9pY2VzIGFyZSAke3ZlcnNpb25zW29wdGlvbnMucHJvZHVjdF0uam9pbignLCAnKX0uYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFN0YXJ0IHRoZSBwZXJmb3JtYW5jZSB0ZXN0aW5nXG4gICAgICAgIGF3YWl0IFBlcmZvcm1hbmNlKHtcbiAgICAgICAgICAgIHByb2R1Y3Q6IG9wdGlvbnMucHJvZHVjdCxcbiAgICAgICAgICAgIHRhZzogb3B0aW9ucy50YWcsXG4gICAgICAgICAgICBjd2Q6IG9wdGlvbnMuY3dkLFxuICAgICAgICAgICAgb3V0cHV0RGlyOiBvcHRpb25zLm91dHB1dERpcixcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBvcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICAgICAgYXBwS2V5OiBvcHRpb25zLmFwcEtleSxcbiAgICAgICAgICAgIGFyY2hpdmU6IG9wdGlvbnMuYXJjaGl2ZSxcbiAgICAgICAgICAgIGFwcExpY2Vuc2U6IG9wdGlvbnMuYXBwTGljZW5zZSxcbiAgICAgICAgICAgIHJlc3RhcnRBZnRlckluc3RhbGw6IG9wdGlvbnMucmVzdGFydEFmdGVySW5zdGFsbCxcbiAgICAgICAgICAgIHRpbWVzdGFtcDogb3B0aW9ucy50aW1lc3RhbXAsXG4gICAgICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gQXNrIHBlcm1pc3Npb24gdG8gY29udGludWUgd2l0aCB0aGUgbmV4dCBzdGVwXG4gICAgICAgIGF3YWl0IHdhaXRGb3JVc2VySW5wdXQoJ1ByZXNzIGEga2V5IHRvIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgc3RlcC4uLicsIG9wdGlvbnMuZm9yY2UpO1xuICAgICAgICAvLyBUZWFyZG93biB0aGUgY2x1c3RlclxuICAgICAgICBhd2FpdCB0ZWFyZG93bkNsdXN0ZXIoQVBUVGVhcmRvd25PcHRpb25zLnBhcnNlKHtcbiAgICAgICAgICAgIHByb2R1Y3Q6IG9wdGlvbnMucHJvZHVjdCxcbiAgICAgICAgICAgIGN3ZDogb3B0aW9ucy5jd2QsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCxcbiAgICAgICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgICAgIH0pKTtcbiAgICB9LFxuICAgIGVycm9ySGFuZGxlcjogYXN5bmMgKCkgPT4ge1xuICAgIH1cbn0pO1xuY29uc3QgUnVuMUNvbW1hbmQgPSAoKSA9PiAoe1xuICAgIGFjdGlvbjogYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgY29uc3QgdmVyc2lvbiA9IG9wdGlvbnMudGFnO1xuICAgICAgICBpZiAodmVyc2lvbikge1xuICAgICAgICAgICAgaWYgKCF2ZXJzaW9uc1tvcHRpb25zLnByb2R1Y3RdLmluY2x1ZGVzKHZlcnNpb24pKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYENvdWxkIG5vdCBmaW5kIHNwZWNpZmllZCB2ZXJzaW9uICR7dmVyc2lvbn0sIHVwZGF0aW5nICR7b3B0aW9ucy5wcm9kdWN0fSB2ZXJzaW9uIGxpc3RgKTtcbiAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkVmVyc2lvbnMgPSBhd2FpdCBnZW5lcmF0ZVZlcnNpb25MaXN0KG9wdGlvbnMucHJvZHVjdCk7XG4gICAgICAgICAgICAgICAgaWYgKCF1cGRhdGVkVmVyc2lvbnNbb3B0aW9ucy5wcm9kdWN0XS5pbmNsdWRlcyh2ZXJzaW9uKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb2R1Y3QgdmVyc2lvbiAnJHt2ZXJzaW9ufScgaXMgaW52YWxpZC4gQWxsb3dlZCBjaG9pY2VzIGFyZSAke3ZlcnNpb25zW29wdGlvbnMucHJvZHVjdF0uam9pbignLCAnKX0uYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHJ1blBlcmZvcm1hbmNlVGVzdChBUFRQZXJmb3JtYW5jZVRlc3RPcHRpb25zLnBhcnNlKHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICBzdGFnZTogUGVyZm9ybWFuY2VUZXN0VHlwZXMuVmFsdWVzLmJhc2VsaW5lLFxuICAgICAgICAgICAgb3V0cHV0RGlyOiBnZXRPdXRwdXREaXJlY3Rvcnkob3B0aW9ucy5vdXRwdXREaXIsIG9wdGlvbnMudGltZXN0YW1wKSxcbiAgICAgICAgICAgIGxpY2Vuc2U6IGF3YWl0IGdldEhvc3RMaWNlbnNlKG9wdGlvbnMucHJvZHVjdCwgb3B0aW9ucy5saWNlbnNlLCBvcHRpb25zLmZvcmNlKVxuICAgICAgICB9KSwgUnVuMSk7XG4gICAgfSxcbiAgICBlcnJvckhhbmRsZXI6IGFzeW5jICgpID0+IHtcbiAgICB9XG59KTtcbmNvbnN0IFJ1bjJDb21tYW5kID0gKCkgPT4gKHtcbiAgICBhY3Rpb246IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgIGNvbnN0IHZlcnNpb24gPSBvcHRpb25zLnRhZztcbiAgICAgICAgaWYgKHZlcnNpb24pIHtcbiAgICAgICAgICAgIGlmICghdmVyc2lvbnNbb3B0aW9ucy5wcm9kdWN0XS5pbmNsdWRlcyh2ZXJzaW9uKSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBDb3VsZCBub3QgZmluZCBzcGVjaWZpZWQgdmVyc2lvbiAke3ZlcnNpb259LCB1cGRhdGluZyAke29wdGlvbnMucHJvZHVjdH0gdmVyc2lvbiBsaXN0YCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZFZlcnNpb25zID0gYXdhaXQgZ2VuZXJhdGVWZXJzaW9uTGlzdChvcHRpb25zLnByb2R1Y3QpO1xuICAgICAgICAgICAgICAgIGlmICghdXBkYXRlZFZlcnNpb25zW29wdGlvbnMucHJvZHVjdF0uaW5jbHVkZXModmVyc2lvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm9kdWN0IHZlcnNpb24gJyR7dmVyc2lvbn0nIGlzIGludmFsaWQuIEFsbG93ZWQgY2hvaWNlcyBhcmUgJHt2ZXJzaW9uc1tvcHRpb25zLnByb2R1Y3RdLmpvaW4oJywgJyl9LmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBydW5QZXJmb3JtYW5jZVRlc3QoQVBUUGVyZm9ybWFuY2VUZXN0T3B0aW9ucy5wYXJzZSh7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgc3RhZ2U6IFBlcmZvcm1hbmNlVGVzdFR5cGVzLlZhbHVlcy5yZWdyZXNzaW9uLFxuICAgICAgICAgICAgb3V0cHV0RGlyOiBnZXRPdXRwdXREaXJlY3Rvcnkob3B0aW9ucy5vdXRwdXREaXIsIG9wdGlvbnMudGltZXN0YW1wKSxcbiAgICAgICAgICAgIGxpY2Vuc2U6IGF3YWl0IGdldEhvc3RMaWNlbnNlKG9wdGlvbnMucHJvZHVjdCwgb3B0aW9ucy5saWNlbnNlLCBvcHRpb25zLmZvcmNlKVxuICAgICAgICB9KSwgUnVuMik7XG4gICAgfSxcbiAgICBlcnJvckhhbmRsZXI6IGFzeW5jICgpID0+IHtcbiAgICB9XG59KTtcbmNvbnN0IFJlaW5kZXhDb21tYW5kID0gKCkgPT4gKHtcbiAgICBhY3Rpb246IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgIGNvbnN0IHZlcnNpb24gPSBvcHRpb25zLnRhZztcbiAgICAgICAgaWYgKHZlcnNpb24pIHtcbiAgICAgICAgICAgIGlmICghdmVyc2lvbnNbb3B0aW9ucy5wcm9kdWN0XS5pbmNsdWRlcyh2ZXJzaW9uKSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBDb3VsZCBub3QgZmluZCBzcGVjaWZpZWQgdmVyc2lvbiAke3ZlcnNpb259LCB1cGRhdGluZyAke29wdGlvbnMucHJvZHVjdH0gdmVyc2lvbiBsaXN0YCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZFZlcnNpb25zID0gYXdhaXQgZ2VuZXJhdGVWZXJzaW9uTGlzdChvcHRpb25zLnByb2R1Y3QpO1xuICAgICAgICAgICAgICAgIGlmICghdXBkYXRlZFZlcnNpb25zW29wdGlvbnMucHJvZHVjdF0uaW5jbHVkZXModmVyc2lvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm9kdWN0IHZlcnNpb24gJyR7dmVyc2lvbn0nIGlzIGludmFsaWQuIEFsbG93ZWQgY2hvaWNlcyBhcmUgJHt2ZXJzaW9uc1tvcHRpb25zLnByb2R1Y3RdLmpvaW4oJywgJyl9LmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBydW5MdWNlbmVUaW1pbmdUZXN0KEFQVFBlcmZvcm1hbmNlVGVzdE9wdGlvbnMucGFyc2Uoe1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIHN0YWdlOiBQZXJmb3JtYW5jZVRlc3RUeXBlcy5WYWx1ZXMucmVncmVzc2lvbixcbiAgICAgICAgICAgIG91dHB1dERpcjogZ2V0T3V0cHV0RGlyZWN0b3J5KG9wdGlvbnMub3V0cHV0RGlyLCBvcHRpb25zLnRpbWVzdGFtcCksXG4gICAgICAgICAgICBsaWNlbnNlOiBhd2FpdCBnZXRIb3N0TGljZW5zZShvcHRpb25zLnByb2R1Y3QsIG9wdGlvbnMubGljZW5zZSwgb3B0aW9ucy5mb3JjZSlcbiAgICAgICAgfSksIEx1Y2VuZVRpbWluZ1Rlc3QpO1xuICAgIH0sXG4gICAgZXJyb3JIYW5kbGVyOiBhc3luYyAoKSA9PiB7XG4gICAgfVxufSk7XG5jb25zdCBTY2FsYWJpbGl0eVRlc3RDb21tYW5kID0gKCkgPT4gKHtcbiAgICBhY3Rpb246IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgIGNvbnN0IHZlcnNpb24gPSBvcHRpb25zLnRhZztcbiAgICAgICAgaWYgKHZlcnNpb24pIHtcbiAgICAgICAgICAgIGlmICghdmVyc2lvbnNbb3B0aW9ucy5wcm9kdWN0XS5pbmNsdWRlcyh2ZXJzaW9uKSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBDb3VsZCBub3QgZmluZCBzcGVjaWZpZWQgdmVyc2lvbiAke3ZlcnNpb259LCB1cGRhdGluZyAke29wdGlvbnMucHJvZHVjdH0gdmVyc2lvbiBsaXN0YCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZFZlcnNpb25zID0gYXdhaXQgZ2VuZXJhdGVWZXJzaW9uTGlzdChvcHRpb25zLnByb2R1Y3QpO1xuICAgICAgICAgICAgICAgIGlmICghdXBkYXRlZFZlcnNpb25zW29wdGlvbnMucHJvZHVjdF0uaW5jbHVkZXModmVyc2lvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm9kdWN0IHZlcnNpb24gJyR7dmVyc2lvbn0nIGlzIGludmFsaWQuIEFsbG93ZWQgY2hvaWNlcyBhcmUgJHt2ZXJzaW9uc1tvcHRpb25zLnByb2R1Y3RdLmpvaW4oJywgJyl9LmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5qbWV0ZXIgJiYgb3B0aW9ucy5sb2N1c3QpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRWl0aGVyIEpNZXRlciBvciBMb2N1c3QgbXVzdCBiZSB1c2VkLiBZb3UgY2Fubm90IHVzZSBib3RoYCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU3RhcnQgdGhlIHNjYWxhYmlsaXR5IHRlc3RpbmdcbiAgICAgICAgYXdhaXQgU2NhbGFiaWxpdHkoe1xuICAgICAgICAgICAgcHJvZHVjdDogb3B0aW9ucy5wcm9kdWN0LFxuICAgICAgICAgICAgdGFnOiBvcHRpb25zLnRhZyxcbiAgICAgICAgICAgIGN3ZDogb3B0aW9ucy5jd2QsXG4gICAgICAgICAgICBvdXRwdXREaXI6IG9wdGlvbnMub3V0cHV0RGlyLFxuICAgICAgICAgICAgZW52aXJvbm1lbnQ6IG9wdGlvbnMuZW52aXJvbm1lbnQsXG4gICAgICAgICAgICBhcHBLZXk6IG9wdGlvbnMuYXBwS2V5LFxuICAgICAgICAgICAgYXJjaGl2ZTogb3B0aW9ucy5hcmNoaXZlLFxuICAgICAgICAgICAgYXBwTGljZW5zZTogb3B0aW9ucy5hcHBMaWNlbnNlLFxuICAgICAgICAgICAgcmVzdGFydEFmdGVySW5zdGFsbDogb3B0aW9ucy5yZXN0YXJ0QWZ0ZXJJbnN0YWxsLFxuICAgICAgICAgICAgam1ldGVyOiBvcHRpb25zLmptZXRlcixcbiAgICAgICAgICAgIGxvY3VzdDogb3B0aW9ucy5sb2N1c3QsXG4gICAgICAgICAgICB0aW1lc3RhbXA6IG9wdGlvbnMudGltZXN0YW1wLFxuICAgICAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEFzayBwZXJtaXNzaW9uIHRvIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgc3RlcFxuICAgICAgICBhd2FpdCB3YWl0Rm9yVXNlcklucHV0KCdQcmVzcyBhIGtleSB0byBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHN0ZXAuLi4nLCBvcHRpb25zLmZvcmNlKTtcbiAgICAgICAgLy8gVGVhcmRvd24gdGhlIGNsdXN0ZXJcbiAgICAgICAgYXdhaXQgdGVhcmRvd25DbHVzdGVyKEFQVFRlYXJkb3duT3B0aW9ucy5wYXJzZSh7XG4gICAgICAgICAgICBwcm9kdWN0OiBvcHRpb25zLnByb2R1Y3QsXG4gICAgICAgICAgICBjd2Q6IG9wdGlvbnMuY3dkLFxuICAgICAgICAgICAgZW52aXJvbm1lbnQ6IG9wdGlvbnMuZW52aXJvbm1lbnQsXG4gICAgICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgICAgICB9KSk7XG4gICAgfSxcbiAgICBlcnJvckhhbmRsZXI6IGFzeW5jICgpID0+IHtcbiAgICB9XG59KTtcbmNvbnN0IFJ1bjNDb21tYW5kID0gKCkgPT4gKHtcbiAgICBhY3Rpb246IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgIGNvbnN0IHZlcnNpb24gPSBvcHRpb25zLnRhZztcbiAgICAgICAgaWYgKHZlcnNpb24pIHtcbiAgICAgICAgICAgIGlmICghdmVyc2lvbnNbb3B0aW9ucy5wcm9kdWN0XS5pbmNsdWRlcyh2ZXJzaW9uKSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBDb3VsZCBub3QgZmluZCBzcGVjaWZpZWQgdmVyc2lvbiAke3ZlcnNpb259LCB1cGRhdGluZyAke29wdGlvbnMucHJvZHVjdH0gdmVyc2lvbiBsaXN0YCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZFZlcnNpb25zID0gYXdhaXQgZ2VuZXJhdGVWZXJzaW9uTGlzdChvcHRpb25zLnByb2R1Y3QpO1xuICAgICAgICAgICAgICAgIGlmICghdXBkYXRlZFZlcnNpb25zW29wdGlvbnMucHJvZHVjdF0uaW5jbHVkZXModmVyc2lvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm9kdWN0IHZlcnNpb24gJyR7dmVyc2lvbn0nIGlzIGludmFsaWQuIEFsbG93ZWQgY2hvaWNlcyBhcmUgJHt2ZXJzaW9uc1tvcHRpb25zLnByb2R1Y3RdLmpvaW4oJywgJyl9LmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZygnU3RhcnRpbmcgc2NhbGFiaWxpdHkgdGVzdHMgKHJ1biAzKSB3aXRoIHRoZSBmb2xsb3dpbmcgYXJndW1lbnRzOicsIEFQVFNjYWxhYmlsaXR5VGVzdE9wdGlvbnMucGFyc2Uoe1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG91dHB1dERpcjogZ2V0T3V0cHV0RGlyZWN0b3J5KG9wdGlvbnMub3V0cHV0RGlyLCBvcHRpb25zLnRpbWVzdGFtcCksXG4gICAgICAgICAgICBsaWNlbnNlOiBhd2FpdCBnZXRIb3N0TGljZW5zZShvcHRpb25zLnByb2R1Y3QsIG9wdGlvbnMubGljZW5zZSwgb3B0aW9ucy5mb3JjZSlcbiAgICAgICAgfSkpO1xuICAgICAgICBhd2FpdCBydW5TY2FsYWJpbGl0eVRlc3QoJ29uZS1ub2RlJywgQVBUU2NhbGFiaWxpdHlUZXN0T3B0aW9ucy5wYXJzZSh7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgb3V0cHV0RGlyOiBnZXRPdXRwdXREaXJlY3Rvcnkob3B0aW9ucy5vdXRwdXREaXIsIG9wdGlvbnMudGltZXN0YW1wKSxcbiAgICAgICAgICAgIGxpY2Vuc2U6IGF3YWl0IGdldEhvc3RMaWNlbnNlKG9wdGlvbnMucHJvZHVjdCwgb3B0aW9ucy5saWNlbnNlLCBvcHRpb25zLmZvcmNlKVxuICAgICAgICB9KSwgU2NhbGFiaWxpdHlUZXN0TWVzc2FnZXMpO1xuICAgIH0sXG4gICAgZXJyb3JIYW5kbGVyOiBhc3luYyAoKSA9PiB7XG4gICAgfVxufSk7XG5jb25zdCBSdW40Q29tbWFuZCA9ICgpID0+ICh7XG4gICAgYWN0aW9uOiBhc3luYyAob3B0aW9ucykgPT4ge1xuICAgICAgICBjb25zdCB2ZXJzaW9uID0gb3B0aW9ucy50YWc7XG4gICAgICAgIGlmICh2ZXJzaW9uKSB7XG4gICAgICAgICAgICBpZiAoIXZlcnNpb25zW29wdGlvbnMucHJvZHVjdF0uaW5jbHVkZXModmVyc2lvbikpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgQ291bGQgbm90IGZpbmQgc3BlY2lmaWVkIHZlcnNpb24gJHt2ZXJzaW9ufSwgdXBkYXRpbmcgJHtvcHRpb25zLnByb2R1Y3R9IHZlcnNpb24gbGlzdGApO1xuICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRWZXJzaW9ucyA9IGF3YWl0IGdlbmVyYXRlVmVyc2lvbkxpc3Qob3B0aW9ucy5wcm9kdWN0KTtcbiAgICAgICAgICAgICAgICBpZiAoIXVwZGF0ZWRWZXJzaW9uc1tvcHRpb25zLnByb2R1Y3RdLmluY2x1ZGVzKHZlcnNpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvZHVjdCB2ZXJzaW9uICcke3ZlcnNpb259JyBpcyBpbnZhbGlkLiBBbGxvd2VkIGNob2ljZXMgYXJlICR7dmVyc2lvbnNbb3B0aW9ucy5wcm9kdWN0XS5qb2luKCcsICcpfS5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgcnVuU2NhbGFiaWxpdHlUZXN0KCd0d28tbm9kZScsIEFQVFNjYWxhYmlsaXR5VGVzdE9wdGlvbnMucGFyc2Uoe1xuICAgICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICAgIG91dHB1dERpcjogZ2V0T3V0cHV0RGlyZWN0b3J5KG9wdGlvbnMub3V0cHV0RGlyLCBvcHRpb25zLnRpbWVzdGFtcCksXG4gICAgICAgICAgICBsaWNlbnNlOiBhd2FpdCBnZXRIb3N0TGljZW5zZShvcHRpb25zLnByb2R1Y3QsIG9wdGlvbnMubGljZW5zZSwgb3B0aW9ucy5mb3JjZSlcbiAgICAgICAgfSksIFNjYWxhYmlsaXR5VGVzdE1lc3NhZ2VzKTtcbiAgICB9LFxuICAgIGVycm9ySGFuZGxlcjogYXN5bmMgKCkgPT4ge1xuICAgIH1cbn0pO1xuY29uc3QgUnVuNUNvbW1hbmQgPSAoKSA9PiAoe1xuICAgIGFjdGlvbjogYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgY29uc3QgdmVyc2lvbiA9IG9wdGlvbnMudGFnO1xuICAgICAgICBpZiAodmVyc2lvbikge1xuICAgICAgICAgICAgaWYgKCF2ZXJzaW9uc1tvcHRpb25zLnByb2R1Y3RdLmluY2x1ZGVzKHZlcnNpb24pKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYENvdWxkIG5vdCBmaW5kIHNwZWNpZmllZCB2ZXJzaW9uICR7dmVyc2lvbn0sIHVwZGF0aW5nICR7b3B0aW9ucy5wcm9kdWN0fSB2ZXJzaW9uIGxpc3RgKTtcbiAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkVmVyc2lvbnMgPSBhd2FpdCBnZW5lcmF0ZVZlcnNpb25MaXN0KG9wdGlvbnMucHJvZHVjdCk7XG4gICAgICAgICAgICAgICAgaWYgKCF1cGRhdGVkVmVyc2lvbnNbb3B0aW9ucy5wcm9kdWN0XS5pbmNsdWRlcyh2ZXJzaW9uKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb2R1Y3QgdmVyc2lvbiAnJHt2ZXJzaW9ufScgaXMgaW52YWxpZC4gQWxsb3dlZCBjaG9pY2VzIGFyZSAke3ZlcnNpb25zW29wdGlvbnMucHJvZHVjdF0uam9pbignLCAnKX0uYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHJ1blNjYWxhYmlsaXR5VGVzdCgnZm91ci1ub2RlJywgQVBUU2NhbGFiaWxpdHlUZXN0T3B0aW9ucy5wYXJzZSh7XG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgb3V0cHV0RGlyOiBnZXRPdXRwdXREaXJlY3Rvcnkob3B0aW9ucy5vdXRwdXREaXIsIG9wdGlvbnMudGltZXN0YW1wKSxcbiAgICAgICAgICAgIGxpY2Vuc2U6IGF3YWl0IGdldEhvc3RMaWNlbnNlKG9wdGlvbnMucHJvZHVjdCwgb3B0aW9ucy5saWNlbnNlLCBvcHRpb25zLmZvcmNlKVxuICAgICAgICB9KSwgU2NhbGFiaWxpdHlUZXN0TWVzc2FnZXMpO1xuICAgIH0sXG4gICAgZXJyb3JIYW5kbGVyOiBhc3luYyAoKSA9PiB7XG4gICAgfVxufSk7XG5jb25zdCBQcm92aXNpb25Db21tYW5kID0gKCkgPT4gKHtcbiAgICBhY3Rpb246IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgIGNvbnN0IHZlcnNpb24gPSBvcHRpb25zLnRhZztcbiAgICAgICAgaWYgKHZlcnNpb24pIHtcbiAgICAgICAgICAgIGlmICghdmVyc2lvbnNbb3B0aW9ucy5wcm9kdWN0XS5pbmNsdWRlcyh2ZXJzaW9uKSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBDb3VsZCBub3QgZmluZCBzcGVjaWZpZWQgdmVyc2lvbiAke3ZlcnNpb259LCB1cGRhdGluZyAke29wdGlvbnMucHJvZHVjdH0gdmVyc2lvbiBsaXN0YCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZFZlcnNpb25zID0gYXdhaXQgZ2VuZXJhdGVWZXJzaW9uTGlzdChvcHRpb25zLnByb2R1Y3QpO1xuICAgICAgICAgICAgICAgIGlmICghdXBkYXRlZFZlcnNpb25zW29wdGlvbnMucHJvZHVjdF0uaW5jbHVkZXModmVyc2lvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm9kdWN0IHZlcnNpb24gJyR7dmVyc2lvbn0nIGlzIGludmFsaWQuIEFsbG93ZWQgY2hvaWNlcyBhcmUgJHt2ZXJzaW9uc1tvcHRpb25zLnByb2R1Y3RdLmpvaW4oJywgJyl9LmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBwcm92aXNpb25DbHVzdGVyKEFQVFByb3Zpc2lvbk9wdGlvbnMucGFyc2Uoe1xuICAgICAgICAgICAgcHJvZHVjdDogb3B0aW9ucy5wcm9kdWN0LFxuICAgICAgICAgICAgdGFnOiBvcHRpb25zLnRhZyxcbiAgICAgICAgICAgIGN3ZDogb3B0aW9ucy5jd2QgfHwgY3dkKCksXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCxcbiAgICAgICAgICAgIG1vbml0b3Jpbmc6IG9wdGlvbnMubW9uaXRvcmluZyxcbiAgICAgICAgICAgIGxpY2Vuc2U6IG9wdGlvbnMubGljZW5zZSxcbiAgICAgICAgICAgIG5vZGVzOiBOdW1iZXIob3B0aW9ucy5ub2RlcyksXG4gICAgICAgICAgICBmb3JjZTogb3B0aW9ucy5mb3JjZVxuICAgICAgICB9KSwgb3B0aW9ucy5jd2QgPT09IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBlcnJvckhhbmRsZXI6IGFzeW5jICgpID0+IHtcbiAgICB9XG59KTtcbmNvbnN0IFJlc3RhcnRDb21tYW5kID0gKCkgPT4gKHtcbiAgICBhY3Rpb246IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgIGF3YWl0IHJlc3RhcnRDbHVzdGVyKEFQVFJlc3RhcnRPcHRpb25zLnBhcnNlKHtcbiAgICAgICAgICAgIHByb2R1Y3Q6IG9wdGlvbnMucHJvZHVjdCxcbiAgICAgICAgICAgIGN3ZDogb3B0aW9ucy5jd2QsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCxcbiAgICAgICAgICAgIGZvcmNlOiBvcHRpb25zLmZvcmNlXG4gICAgICAgIH0pKTtcbiAgICB9LFxuICAgIGVycm9ySGFuZGxlcjogYXN5bmMgKCkgPT4ge1xuICAgIH1cbn0pO1xuY29uc3QgVGVhcmRvd25Db21tYW5kID0gKCkgPT4gKHtcbiAgICBhY3Rpb246IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgIGF3YWl0IHRlYXJkb3duQ2x1c3RlcihBUFRUZWFyZG93bk9wdGlvbnMucGFyc2Uoe1xuICAgICAgICAgICAgcHJvZHVjdDogb3B0aW9ucy5wcm9kdWN0LFxuICAgICAgICAgICAgY3dkOiBvcHRpb25zLmN3ZCxcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBvcHRpb25zLmVudmlyb25tZW50LFxuICAgICAgICAgICAgZm9yY2U6IG9wdGlvbnMuZm9yY2VcbiAgICAgICAgfSkpO1xuICAgIH0sXG4gICAgZXJyb3JIYW5kbGVyOiBhc3luYyAoKSA9PiB7XG4gICAgfVxufSk7XG5jb25zdCBEZXBlbmRlbmN5VHJlZUNvbW1hbmQgPSAoKSA9PiAoe1xuICAgIGFjdGlvbjogYXN5bmMgKG9wdGlvbnMpID0+IHtcbiAgICAgICAgYXdhaXQgZ2VuZXJhdGVEZXBlbmRlbmN5VHJlZShBUFREZXBlbmRlbmN5VHJlZU9wdGlvbnMucGFyc2Uoe1xuICAgICAgICAgICAgZ3JvdXBJZDogb3B0aW9ucy5ncm91cElkLFxuICAgICAgICAgICAgYXJ0aWZhY3RJZDogb3B0aW9ucy5hcnRpZmFjdElkLFxuICAgICAgICAgICAgYXBwS2V5OiBvcHRpb25zLmFwcEtleSxcbiAgICAgICAgICAgIGFyY2hpdmU6IG9wdGlvbnMuYXJjaGl2ZSxcbiAgICAgICAgICAgIGFjdGl2YXRlUHJvZmlsZXM6IG9wdGlvbnMuYWN0aXZhdGVQcm9maWxlcyxcbiAgICAgICAgICAgIG91dHB1dEZpbGU6IG9wdGlvbnMub3V0cHV0RmlsZSB8fCBqb2luKGN3ZCgpLCAnbWF2ZW5fZGVwZW5kZW5jeV90cmVlLmd2JylcbiAgICAgICAgfSkpO1xuICAgIH0sXG4gICAgZXJyb3JIYW5kbGVyOiBhc3luYyAoKSA9PiB7XG4gICAgfVxufSk7XG5jb25zdCBTQ0FDb21tYW5kID0gKCkgPT4gKHtcbiAgICBhY3Rpb246IGFzeW5jIChvcHRpb25zKSA9PiB7XG4gICAgICAgIGF3YWl0IGdlbmVyYXRlU0NBUmVwb3J0KEFQVFNDQU9wdGlvbnMucGFyc2Uoe1xuICAgICAgICAgICAgbnZkQXBpS2V5OiBvcHRpb25zLm52ZEFwaUtleSxcbiAgICAgICAgICAgIGFwcEtleTogb3B0aW9ucy5hcHBLZXksXG4gICAgICAgICAgICBhcmNoaXZlOiBvcHRpb25zLmFyY2hpdmUsXG4gICAgICAgICAgICBkYXRhRGlyOiBvcHRpb25zLmRhdGFEaXIsXG4gICAgICAgICAgICBmYWlsT25FcnJvcjogb3B0aW9ucy5mYWlsT25FcnJvciB8fCBmYWxzZSxcbiAgICAgICAgICAgIG91dHB1dERpcjogb3B0aW9ucy5vdXRwdXREaXIgfHwgam9pbihjd2QoKSwgJ3NjYV9yZXBvcnQnKVxuICAgICAgICB9KSk7XG4gICAgfSxcbiAgICBlcnJvckhhbmRsZXI6IGFzeW5jICgpID0+IHtcbiAgICB9XG59KTtcbnByb2dyYW1cbiAgICAubmFtZSgnZGNkeCBhcHQnKVxuICAgIC5zaG93SGVscEFmdGVyRXJyb3IodHJ1ZSk7XG5wcm9ncmFtXG4gICAgLmNvbW1hbmQoJ2RlZmF1bHQnLCB7IGlzRGVmYXVsdDogdHJ1ZSwgaGlkZGVuOiB0cnVlIH0pXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXByb2R1Y3QgPG5hbWU+JywgJ1RoZSBob3N0IHByb2R1Y3QnKS5jaG9pY2VzKE9iamVjdC52YWx1ZXMoU3VwcG9ydGVkQXBwbGljYXRpb25zLlZhbHVlcykpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS10YWcgPG5hbWU+JywgJ1RoZSBob3N0IHByb2R1Y3QgdmVyc2lvbiB0YWcnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZW52aXJvbm1lbnQgPG5hbWU+JywgJ1RoZSBlbnZpcm9ubWVudCBuYW1lJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLW1vbml0b3JpbmcnLCAnRW5hYmxlIGRldGFpbGVkIENQVS9NZW1vcnkgbW9uaXRvcmluZyBhbmQgR3JhZmFuYSBkYXNoYm9hcmRzIGZvciB2aXN1YWxpc2F0aW9uJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWxpY2Vuc2UgPHBhdGhfb3JfbGljZW5zZT4nLCAnVGhlIGhvc3QgcHJvZHVjdCBsaWNlbnNlLCBlaXRoZXIgYXMgYSBwYXRoIHRvIGEgZmlsZSBvciB0aGUgbGljZW5zZSBpdHNlbGYnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tYXBwS2V5IDxhcHBLZXk+JywgJ1RoZSBrZXkgb2YgdGhlIGFwcCAoZm9yIGF1dG9tYXRlZCBpbnN0YWxsYXRpb24pJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWFyY2hpdmUgPHBhdGg+JywgJ1RoZSBwYXRoIHRvIHRoZSBKQVIvT0JSIGFyY2hpdmUgKGZvciBhdXRvbWF0ZWQgaW5zdGFsbGF0aW9uKScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1yZXN0YXJ0QWZ0ZXJJbnN0YWxsJywgJ1Jlc3RhcnQgdGhlIGNvbnRhaW5lciBhZnRlciBpbnN0YWxsaW5nIHRoZSBhcHAnKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tam1ldGVyJywgJ0luY2x1ZGUgYXBwIHNwZWNpZmljIEpNZXRlciB0ZXN0cycpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1sb2N1c3QnLCAnSW5jbHVkZSBhcHAgc3BlY2lmaWMgTG9jdXN0IHRlc3RzJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXF1ZXJ5IDxxdWVyeT4nLCAnQ3VzdG9tIGRhdGFzZXQgcXVlcnkgdG8gcG9wdXBsYXRlIHRoZSBjdXN0b21faXNzdWVzL2N1c3RvbV9wYWdlcyBwYXJhbWV0ZXJzJykuZGVmYXVsdCgnJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXRzLCAtLXRpbWVzdGFtcCA8dGltZXN0YW1wPicsICdUaGUgdGltZXN0YW1wIG9mIHRoZSB0ZXN0IHJ1biwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gY29udGludWUgYW4gZXhpc3RpbmcgdGVzdCBleGVjdXRpb24nKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy1PLCAtLW91dHB1dERpciA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSBkaXJlY3Rvcnkgd2hlcmUgdG8gc3RvcmUgdGhlIHJlc3VsdHMgb2YgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWN3ZCA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aGVyZSB0byBmaW5kIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpLmRlZmF1bHQoY3dkKCkpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLXksIC0tZm9yY2UnLCAnVXNlIGRlZmF1bHQgdmFsdWVzIGZvciBpbnB1dCBxdWVzdGlvbnMgd2hlbiBhdmFpbGFibGUnKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWN0aW9uKG9wdGlvbnMgPT4gQWN0aW9uSGFuZGxlcihwcm9ncmFtLCBEZWZhdWx0Q29tbWFuZCgpLCBvcHRpb25zKSk7XG5wcm9ncmFtXG4gICAgLmNvbW1hbmQoJ3Byb3Zpc2lvbicpXG4gICAgLmRlc2NyaXB0aW9uKCdQcm92aXNpb24gdGhlIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYW5jZSBUZXN0aW5nIGNsdXN0ZXIgb24gQVdTJylcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcHJvZHVjdCA8bmFtZT4nLCAnVGhlIGhvc3QgcHJvZHVjdCcpLmNob2ljZXMoT2JqZWN0LnZhbHVlcyhTdXBwb3J0ZWRBcHBsaWNhdGlvbnMuVmFsdWVzKSkubWFrZU9wdGlvbk1hbmRhdG9yeSh0cnVlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tdGFnIDxuYW1lPicsICdUaGUgaG9zdCBwcm9kdWN0IHZlcnNpb24gdGFnJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWVudmlyb25tZW50IDxuYW1lPicsICdUaGUgZW52aXJvbm1lbnQgbmFtZScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1tb25pdG9yaW5nJywgJ0VuYWJsZSBkZXRhaWxlZCBDUFUvTWVtb3J5IG1vbml0b3JpbmcgYW5kIEdyYWZhbmEgZGFzaGJvYXJkcyBmb3IgdmlzdWFsaXNhdGlvbicpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1saWNlbnNlIDxwYXRoX29yX2xpY2Vuc2U+JywgJ1RoZSBob3N0IHByb2R1Y3QgbGljZW5zZSwgZWl0aGVyIGFzIGEgcGF0aCB0byBhIGZpbGUgb3IgdGhlIGxpY2Vuc2UgaXRzZWxmJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLW5vZGVzIDxudW1iZXI+JywgJ1RoZSBudW1iZXIgb2Ygbm9kZXMgZm9yIHRoZSBjbHVzdGVyJykuZGVmYXVsdCgxKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tY3dkIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZXJlIHRvIGZpbmQgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCcteSwgLS1mb3JjZScsICdVc2UgZGVmYXVsdCB2YWx1ZXMgZm9yIGlucHV0IHF1ZXN0aW9ucyB3aGVuIGF2YWlsYWJsZScpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hY3Rpb24ob3B0aW9ucyA9PiBBY3Rpb25IYW5kbGVyKHByb2dyYW0sIFByb3Zpc2lvbkNvbW1hbmQoKSwgb3B0aW9ucykpO1xucHJvZ3JhbVxuICAgIC5jb21tYW5kKCdwZXJmb3JtYW5jZScpXG4gICAgLmRlc2NyaXB0aW9uKCdSdW4gdGhlIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0IHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gdGVzdCcpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXByb2R1Y3QgPG5hbWU+JywgJ1RoZSBob3N0IHByb2R1Y3QnKS5jaG9pY2VzKE9iamVjdC52YWx1ZXMoU3VwcG9ydGVkQXBwbGljYXRpb25zLlZhbHVlcykpLm1ha2VPcHRpb25NYW5kYXRvcnkodHJ1ZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXRhZyA8bmFtZT4nLCAnVGhlIGhvc3QgcHJvZHVjdCB2ZXJzaW9uIHRhZycpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1lbnZpcm9ubWVudCA8bmFtZT4nLCAnVGhlIGVudmlyb25tZW50IG5hbWUnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tbW9uaXRvcmluZycsICdFbmFibGUgZGV0YWlsZWQgQ1BVL01lbW9yeSBtb25pdG9yaW5nIGFuZCBHcmFmYW5hIGRhc2hib2FyZHMgZm9yIHZpc3VhbGlzYXRpb24nKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tbGljZW5zZSA8cGF0aF9vcl9saWNlbnNlPicsICdUaGUgaG9zdCBwcm9kdWN0IGxpY2Vuc2UsIGVpdGhlciBhcyBhIHBhdGggdG8gYSBmaWxlIG9yIHRoZSBsaWNlbnNlIGl0c2VsZicpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1hcHBLZXkgPGFwcEtleT4nLCAnVGhlIGtleSBvZiB0aGUgYXBwIChmb3IgYXV0b21hdGVkIGluc3RhbGxhdGlvbiknKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tYXJjaGl2ZSA8cGF0aD4nLCAnVGhlIHBhdGggdG8gdGhlIEpBUi9PQlIgYXJjaGl2ZSAoZm9yIGF1dG9tYXRlZCBpbnN0YWxsYXRpb24pJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXJlc3RhcnRBZnRlckluc3RhbGwnLCAnUmVzdGFydCB0aGUgY29udGFpbmVyIGFmdGVyIGluc3RhbGxpbmcgdGhlIGFwcCcpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS10cywgLS10aW1lc3RhbXAgPHRpbWVzdGFtcD4nLCAnVGhlIHRpbWVzdGFtcCBvZiB0aGUgdGVzdCBydW4sIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGNvbnRpbnVlIGFuIGV4aXN0aW5nIHRlc3QgZXhlY3V0aW9uJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctTywgLS1vdXRwdXREaXIgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgZGlyZWN0b3J5IHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHRzIG9mIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1jd2QgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlcmUgdG8gZmluZCB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKS5kZWZhdWx0KGN3ZCgpKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy15LCAtLWZvcmNlJywgJ1VzZSBkZWZhdWx0IHZhbHVlcyBmb3IgaW5wdXQgcXVlc3Rpb25zIHdoZW4gYXZhaWxhYmxlJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFjdGlvbihvcHRpb25zID0+IEFjdGlvbkhhbmRsZXIocHJvZ3JhbSwgUGVyZm9ybWFuY2VUZXN0Q29tbWFuZCgpLCBvcHRpb25zKSk7XG5wcm9ncmFtXG4gICAgLmNvbW1hbmQoJ3NjYWxhYmlsaXR5JylcbiAgICAuZGVzY3JpcHRpb24oJ1J1biB0aGUgRGF0YSBDZW50ZXIgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQgc2NhbGFiaWxpdHkgdGVzdCcpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXByb2R1Y3QgPG5hbWU+JywgJ1RoZSBob3N0IHByb2R1Y3QnKS5jaG9pY2VzKE9iamVjdC52YWx1ZXMoU3VwcG9ydGVkQXBwbGljYXRpb25zLlZhbHVlcykpLm1ha2VPcHRpb25NYW5kYXRvcnkodHJ1ZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXRhZyA8bmFtZT4nLCAnVGhlIGhvc3QgcHJvZHVjdCB2ZXJzaW9uIHRhZycpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1lbnZpcm9ubWVudCA8bmFtZT4nLCAnVGhlIGVudmlyb25tZW50IG5hbWUnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tbW9uaXRvcmluZycsICdFbmFibGUgZGV0YWlsZWQgQ1BVL01lbW9yeSBtb25pdG9yaW5nIGFuZCBHcmFmYW5hIGRhc2hib2FyZHMgZm9yIHZpc3VhbGlzYXRpb24nKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tbGljZW5zZSA8cGF0aF9vcl9saWNlbnNlPicsICdUaGUgaG9zdCBwcm9kdWN0IGxpY2Vuc2UsIGVpdGhlciBhcyBhIHBhdGggdG8gYSBmaWxlIG9yIHRoZSBsaWNlbnNlIGl0c2VsZicpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1hcHBLZXkgPGFwcEtleT4nLCAnVGhlIGtleSBvZiB0aGUgYXBwIChmb3IgYXV0b21hdGVkIGluc3RhbGxhdGlvbiknKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tYXJjaGl2ZSA8cGF0aD4nLCAnVGhlIHBhdGggdG8gdGhlIEpBUi9PQlIgYXJjaGl2ZSAoZm9yIGF1dG9tYXRlZCBpbnN0YWxsYXRpb24pJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXJlc3RhcnRBZnRlckluc3RhbGwnLCAnUmVzdGFydCB0aGUgY29udGFpbmVyIGFmdGVyIGluc3RhbGxpbmcgdGhlIGFwcCcpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1qbWV0ZXInLCAnSW5jbHVkZSBhcHAgc3BlY2lmaWMgSk1ldGVyIHRlc3RzJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWxvY3VzdCcsICdJbmNsdWRlIGFwcCBzcGVjaWZpYyBMb2N1c3QgdGVzdHMnKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcXVlcnkgPHF1ZXJ5PicsICdDdXN0b20gZGF0YXNldCBxdWVyeSB0byBwb3B1cGxhdGUgdGhlIGN1c3RvbV9pc3N1ZXMvY3VzdG9tX3BhZ2VzIHBhcmFtZXRlcnMnKS5kZWZhdWx0KCcnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tdHMsIC0tdGltZXN0YW1wIDx0aW1lc3RhbXA+JywgJ1RoZSB0aW1lc3RhbXAgb2YgdGhlIHRlc3QgcnVuLCB3aGljaCBjYW4gYmUgdXNlZCB0byBjb250aW51ZSBhbiBleGlzdGluZyB0ZXN0IGV4ZWN1dGlvbicpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLU8sIC0tb3V0cHV0RGlyIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIGRpcmVjdG9yeSB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0cyBvZiB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tY3dkIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZXJlIHRvIGZpbmQgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykuZGVmYXVsdChjd2QoKSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCcteSwgLS1mb3JjZScsICdVc2UgZGVmYXVsdCB2YWx1ZXMgZm9yIGlucHV0IHF1ZXN0aW9ucyB3aGVuIGF2YWlsYWJsZScpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hY3Rpb24ob3B0aW9ucyA9PiBBY3Rpb25IYW5kbGVyKHByb2dyYW0sIFNjYWxhYmlsaXR5VGVzdENvbW1hbmQoKSwgb3B0aW9ucykpO1xucHJvZ3JhbVxuICAgIC5jb21tYW5kKCdyZWluZGV4JylcbiAgICAuZGVzY3JpcHRpb24oJ1J1biB0aGUgRGF0YSBDZW50ZXIgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQgTHVjZW5lIEluZGV4IFRpbWluZyB0ZXN0JylcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tdGFnIDxuYW1lPicsICdUaGUgaG9zdCBwcm9kdWN0IHZlcnNpb24gdGFnJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWVudmlyb25tZW50IDxuYW1lPicsICdUaGUgZW52aXJvbm1lbnQgbmFtZScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1tb25pdG9yaW5nJywgJ0VuYWJsZSBkZXRhaWxlZCBDUFUvTWVtb3J5IG1vbml0b3JpbmcgYW5kIEdyYWZhbmEgZGFzaGJvYXJkcyBmb3IgdmlzdWFsaXNhdGlvbicpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1saWNlbnNlIDxwYXRoX29yX2xpY2Vuc2U+JywgJ1RoZSBob3N0IHByb2R1Y3QgbGljZW5zZSwgZWl0aGVyIGFzIGEgcGF0aCB0byBhIGZpbGUgb3IgdGhlIGxpY2Vuc2UgaXRzZWxmJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWFwcEtleSA8YXBwS2V5PicsICdUaGUga2V5IG9mIHRoZSBhcHAgKGZvciBhdXRvbWF0ZWQgaW5zdGFsbGF0aW9uKScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1hcmNoaXZlIDxwYXRoPicsICdUaGUgcGF0aCB0byB0aGUgSkFSL09CUiBhcmNoaXZlIChmb3IgYXV0b21hdGVkIGluc3RhbGxhdGlvbiknKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcmVzdGFydEFmdGVySW5zdGFsbCcsICdSZXN0YXJ0IHRoZSBjb250YWluZXIgYWZ0ZXIgaW5zdGFsbGluZyB0aGUgYXBwJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXRzLCAtLXRpbWVzdGFtcCA8dGltZXN0YW1wPicsICdUaGUgdGltZXN0YW1wIG9mIHRoZSB0ZXN0IHJ1biwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gY29udGludWUgYW4gZXhpc3RpbmcgdGVzdCBleGVjdXRpb24nKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy1PLCAtLW91dHB1dERpciA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSBkaXJlY3Rvcnkgd2hlcmUgdG8gc3RvcmUgdGhlIHJlc3VsdHMgb2YgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWN3ZCA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aGVyZSB0byBmaW5kIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpLmRlZmF1bHQoY3dkKCkpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLXksIC0tZm9yY2UnLCAnVXNlIGRlZmF1bHQgdmFsdWVzIGZvciBpbnB1dCBxdWVzdGlvbnMgd2hlbiBhdmFpbGFibGUnKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWN0aW9uKG9wdGlvbnMgPT4gQWN0aW9uSGFuZGxlcihwcm9ncmFtLCBSZWluZGV4Q29tbWFuZCgpLCB7IC4uLm9wdGlvbnMsIHByb2R1Y3Q6IFN1cHBvcnRlZEFwcGxpY2F0aW9ucy5WYWx1ZXMuamlyYSB9KSk7XG5wcm9ncmFtXG4gICAgLmNvbW1hbmQoJ3JlcG9ydCcpXG4gICAgLmRlc2NyaXB0aW9uKCdHZW5lcmF0ZSBhIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYW5jZSBUZXN0aW5nIHJlcG9ydCcpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXR5cGUgPHR5cGU+JywgJ1RoZSB0eXBlIG9mIHJlcG9ydCB0byBnZW5lcmF0ZScpLmNob2ljZXMoT2JqZWN0LnZhbHVlcyhSZXBvcnRUeXBlcy5WYWx1ZXMpKS5tYWtlT3B0aW9uTWFuZGF0b3J5KHRydWUpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1wcm9kdWN0IDxuYW1lPicsICdUaGUgaG9zdCBwcm9kdWN0JykuY2hvaWNlcyhPYmplY3QudmFsdWVzKFN1cHBvcnRlZEFwcGxpY2F0aW9ucy5WYWx1ZXMpKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tdGFnIDxuYW1lPicsICdUaGUgaG9zdCBwcm9kdWN0IHZlcnNpb24gdGFnJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXJlc3VsdHNEaXIxIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIGRpcmVjdG9yeSB3aGVyZSB0byBmaW5kIHRoZSByZXN1bHRzIG9mIHRoZSAxc3QgcnVuIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHJlcG9ydCcpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1yZXN1bHRzRGlyMiA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSBkaXJlY3Rvcnkgd2hlcmUgdG8gZmluZCB0aGUgcmVzdWx0cyBvZiBydW4gMm5kIHJ1biB1c2VkIHRvIGdlbmVyYXRlIHRoZSByZXBvcnQnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcmVzdWx0c0RpcjMgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgZGlyZWN0b3J5IHdoZXJlIHRvIGZpbmQgdGhlIHJlc3VsdHMgb2YgcnVuIDNyZCBydW4gdXNlZCB0byBnZW5lcmF0ZSB0aGUgcmVwb3J0IChvbmx5IGZvciBTY2FsYWJpbGl0eSByZXBvcnQpJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXRzLCAtLXRpbWVzdGFtcCA8dGltZXN0YW1wPicsICdUaGUgdGltZXN0YW1wIG9mIHRoZSB0ZXN0IHJ1biwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gY29udGludWUgYW4gZXhpc3RpbmcgdGVzdCBleGVjdXRpb24nKS5tYWtlT3B0aW9uTWFuZGF0b3J5KHRydWUpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLU8sIC0tb3V0cHV0RGlyIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIGRpcmVjdG9yeSB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0cyBvZiB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tY3dkIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZXJlIHRvIGZpbmQgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykuZGVmYXVsdChjd2QoKSkubWFrZU9wdGlvbk1hbmRhdG9yeSh0cnVlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy15LCAtLWZvcmNlJywgJ1VzZSBkZWZhdWx0IHZhbHVlcyBmb3IgaW5wdXQgcXVlc3Rpb25zIHdoZW4gYXZhaWxhYmxlJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFjdGlvbihvcHRpb25zID0+IEFjdGlvbkhhbmRsZXIocHJvZ3JhbSwgUmVwb3J0Q29tbWFuZCgpLCBvcHRpb25zKSk7XG5wcm9ncmFtXG4gICAgLmNvbW1hbmQoJ3J1bjEnKVxuICAgIC5kZXNjcmlwdGlvbignU3RhcnQgdGhlIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYW5jZSBUZXN0aW5nIFBlcmZvcm1hbmNlIGJhc2VsaW5lIHRlc3QgKHJ1biAxKScpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXByb2R1Y3QgPG5hbWU+JywgJ1RoZSBob3N0IHByb2R1Y3QnKS5jaG9pY2VzKE9iamVjdC52YWx1ZXMoU3VwcG9ydGVkQXBwbGljYXRpb25zLlZhbHVlcykpLm1ha2VPcHRpb25NYW5kYXRvcnkodHJ1ZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXRhZyA8bmFtZT4nLCAnVGhlIGhvc3QgcHJvZHVjdCB2ZXJzaW9uIHRhZycpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1lbnZpcm9ubWVudCA8bmFtZT4nLCAnVGhlIGVudmlyb25tZW50IG5hbWUnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tbW9uaXRvcmluZycsICdFbmFibGUgZGV0YWlsZWQgQ1BVL01lbW9yeSBtb25pdG9yaW5nIGFuZCBHcmFmYW5hIGRhc2hib2FyZHMgZm9yIHZpc3VhbGlzYXRpb24nKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tbGljZW5zZSA8cGF0aF9vcl9saWNlbnNlPicsICdUaGUgaG9zdCBwcm9kdWN0IGxpY2Vuc2UsIGVpdGhlciBhcyBhIHBhdGggdG8gYSBmaWxlIG9yIHRoZSBsaWNlbnNlIGl0c2VsZicpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS10cywgLS10aW1lc3RhbXAgPHRpbWVzdGFtcD4nLCAnVGhlIHRpbWVzdGFtcCBvZiB0aGUgdGVzdCBydW4sIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGNvbnRpbnVlIGFuIGV4aXN0aW5nIHRlc3QgZXhlY3V0aW9uJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctTywgLS1vdXRwdXREaXIgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgZGlyZWN0b3J5IHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHRzIG9mIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1jd2QgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlcmUgdG8gZmluZCB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKS5kZWZhdWx0KGN3ZCgpKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy15LCAtLWZvcmNlJywgJ1VzZSBkZWZhdWx0IHZhbHVlcyBmb3IgaW5wdXQgcXVlc3Rpb25zIHdoZW4gYXZhaWxhYmxlJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFjdGlvbihvcHRpb25zID0+IEFjdGlvbkhhbmRsZXIocHJvZ3JhbSwgUnVuMUNvbW1hbmQoKSwgb3B0aW9ucykpO1xucHJvZ3JhbVxuICAgIC5jb21tYW5kKCdydW4yJylcbiAgICAuZGVzY3JpcHRpb24oJ1N0YXJ0IHRoZSBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVGVzdGluZyBQZXJmb3JtYW5jZSByZWdyZXNzaW9uIHRlc3QgKHJ1biAyKScpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXByb2R1Y3QgPG5hbWU+JywgJ1RoZSBob3N0IHByb2R1Y3QnKS5jaG9pY2VzKE9iamVjdC52YWx1ZXMoU3VwcG9ydGVkQXBwbGljYXRpb25zLlZhbHVlcykpLm1ha2VPcHRpb25NYW5kYXRvcnkodHJ1ZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXRhZyA8bmFtZT4nLCAnVGhlIGhvc3QgcHJvZHVjdCB2ZXJzaW9uIHRhZycpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1lbnZpcm9ubWVudCA8bmFtZT4nLCAnVGhlIGVudmlyb25tZW50IG5hbWUnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tbW9uaXRvcmluZycsICdFbmFibGUgZGV0YWlsZWQgQ1BVL01lbW9yeSBtb25pdG9yaW5nIGFuZCBHcmFmYW5hIGRhc2hib2FyZHMgZm9yIHZpc3VhbGlzYXRpb24nKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tbGljZW5zZSA8cGF0aF9vcl9saWNlbnNlPicsICdUaGUgaG9zdCBwcm9kdWN0IGxpY2Vuc2UsIGVpdGhlciBhcyBhIHBhdGggdG8gYSBmaWxlIG9yIHRoZSBsaWNlbnNlIGl0c2VsZicpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS10cywgLS10aW1lc3RhbXAgPHRpbWVzdGFtcD4nLCAnVGhlIHRpbWVzdGFtcCBvZiB0aGUgdGVzdCBydW4sIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGNvbnRpbnVlIGFuIGV4aXN0aW5nIHRlc3QgZXhlY3V0aW9uJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWFwcEtleSA8YXBwS2V5PicsICdUaGUga2V5IG9mIHRoZSBhcHAgKGZvciBhdXRvbWF0ZWQgaW5zdGFsbGF0aW9uKScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1hcmNoaXZlIDxwYXRoPicsICdUaGUgcGF0aCB0byB0aGUgSkFSL09CUiBhcmNoaXZlIChmb3IgYXV0b21hdGVkIGluc3RhbGxhdGlvbiknKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcmVzdGFydEFmdGVySW5zdGFsbCcsICdSZXN0YXJ0IHRoZSBjb250YWluZXIgYWZ0ZXIgaW5zdGFsbGluZyB0aGUgYXBwJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctTywgLS1vdXRwdXREaXIgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgZGlyZWN0b3J5IHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHRzIG9mIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1jd2QgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlcmUgdG8gZmluZCB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKS5kZWZhdWx0KGN3ZCgpKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy15LCAtLWZvcmNlJywgJ1VzZSBkZWZhdWx0IHZhbHVlcyBmb3IgaW5wdXQgcXVlc3Rpb25zIHdoZW4gYXZhaWxhYmxlJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFjdGlvbihvcHRpb25zID0+IEFjdGlvbkhhbmRsZXIocHJvZ3JhbSwgUnVuMkNvbW1hbmQoKSwgb3B0aW9ucykpO1xucHJvZ3JhbVxuICAgIC5jb21tYW5kKCdydW4zJylcbiAgICAuZGVzY3JpcHRpb24oJ1N0YXJ0IHRoZSBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVGVzdGluZyBTY2FsYWJpbGl0eSB0ZXN0IG9uIGEgb25lLW5vZGUgREMgY2x1c3RlciAocnVuIDMpJylcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcHJvZHVjdCA8bmFtZT4nLCAnVGhlIGhvc3QgcHJvZHVjdCcpLmNob2ljZXMoT2JqZWN0LnZhbHVlcyhTdXBwb3J0ZWRBcHBsaWNhdGlvbnMuVmFsdWVzKSkubWFrZU9wdGlvbk1hbmRhdG9yeSh0cnVlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tdGFnIDxuYW1lPicsICdUaGUgaG9zdCBwcm9kdWN0IHZlcnNpb24gdGFnJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWVudmlyb25tZW50IDxuYW1lPicsICdUaGUgZW52aXJvbm1lbnQgbmFtZScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1tb25pdG9yaW5nJywgJ0VuYWJsZSBkZXRhaWxlZCBDUFUvTWVtb3J5IG1vbml0b3JpbmcgYW5kIEdyYWZhbmEgZGFzaGJvYXJkcyBmb3IgdmlzdWFsaXNhdGlvbicpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1saWNlbnNlIDxwYXRoX29yX2xpY2Vuc2U+JywgJ1RoZSBob3N0IHByb2R1Y3QgbGljZW5zZSwgZWl0aGVyIGFzIGEgcGF0aCB0byBhIGZpbGUgb3IgdGhlIGxpY2Vuc2UgaXRzZWxmJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXRzLCAtLXRpbWVzdGFtcCA8dGltZXN0YW1wPicsICdUaGUgdGltZXN0YW1wIG9mIHRoZSB0ZXN0IHJ1biwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gY29udGludWUgYW4gZXhpc3RpbmcgdGVzdCBleGVjdXRpb24nKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tYXBwS2V5IDxhcHBLZXk+JywgJ1RoZSBrZXkgb2YgdGhlIGFwcCAoZm9yIGF1dG9tYXRlZCBpbnN0YWxsYXRpb24pJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWFyY2hpdmUgPHBhdGg+JywgJ1RoZSBwYXRoIHRvIHRoZSBKQVIvT0JSIGFyY2hpdmUgKGZvciBhdXRvbWF0ZWQgaW5zdGFsbGF0aW9uKScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1yZXN0YXJ0QWZ0ZXJJbnN0YWxsJywgJ1Jlc3RhcnQgdGhlIGNvbnRhaW5lciBhZnRlciBpbnN0YWxsaW5nIHRoZSBhcHAnKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tam1ldGVyJywgJ0luY2x1ZGUgYXBwIHNwZWNpZmljIEpNZXRlciB0ZXN0cycpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1sb2N1c3QnLCAnSW5jbHVkZSBhcHAgc3BlY2lmaWMgTG9jdXN0IHRlc3RzJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXF1ZXJ5IDxxdWVyeT4nLCAnQ3VzdG9tIGRhdGFzZXQgcXVlcnkgdG8gcG9wdXBsYXRlIHRoZSBjdXN0b21faXNzdWVzL2N1c3RvbV9wYWdlcyBwYXJhbWV0ZXJzJykuZGVmYXVsdCgnJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctTywgLS1vdXRwdXREaXIgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgZGlyZWN0b3J5IHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHRzIG9mIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1jd2QgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlcmUgdG8gZmluZCB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKS5kZWZhdWx0KGN3ZCgpKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy15LCAtLWZvcmNlJywgJ1VzZSBkZWZhdWx0IHZhbHVlcyBmb3IgaW5wdXQgcXVlc3Rpb25zIHdoZW4gYXZhaWxhYmxlJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFjdGlvbihvcHRpb25zID0+IEFjdGlvbkhhbmRsZXIocHJvZ3JhbSwgUnVuM0NvbW1hbmQoKSwgb3B0aW9ucykpO1xucHJvZ3JhbVxuICAgIC5jb21tYW5kKCdydW40JylcbiAgICAuZGVzY3JpcHRpb24oJ1N0YXJ0IHRoZSBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVGVzdGluZyBTY2FsYWJpbGl0eSB0ZXN0IG9uIGEgdHdvLW5vZGUgREMgY2x1c3RlciAocnVuIDQpJylcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcHJvZHVjdCA8bmFtZT4nLCAnVGhlIGhvc3QgcHJvZHVjdCcpLmNob2ljZXMoT2JqZWN0LnZhbHVlcyhTdXBwb3J0ZWRBcHBsaWNhdGlvbnMuVmFsdWVzKSkubWFrZU9wdGlvbk1hbmRhdG9yeSh0cnVlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tdGFnIDxuYW1lPicsICdUaGUgaG9zdCBwcm9kdWN0IHZlcnNpb24gdGFnJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWVudmlyb25tZW50IDxuYW1lPicsICdUaGUgZW52aXJvbm1lbnQgbmFtZScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1tb25pdG9yaW5nJywgJ0VuYWJsZSBkZXRhaWxlZCBDUFUvTWVtb3J5IG1vbml0b3JpbmcgYW5kIEdyYWZhbmEgZGFzaGJvYXJkcyBmb3IgdmlzdWFsaXNhdGlvbicpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1saWNlbnNlIDxwYXRoX29yX2xpY2Vuc2U+JywgJ1RoZSBob3N0IHByb2R1Y3QgbGljZW5zZSwgZWl0aGVyIGFzIGEgcGF0aCB0byBhIGZpbGUgb3IgdGhlIGxpY2Vuc2UgaXRzZWxmJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXRzLCAtLXRpbWVzdGFtcCA8dGltZXN0YW1wPicsICdUaGUgdGltZXN0YW1wIG9mIHRoZSB0ZXN0IHJ1biwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gY29udGludWUgYW4gZXhpc3RpbmcgdGVzdCBleGVjdXRpb24nKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tYXBwS2V5IDxhcHBLZXk+JywgJ1RoZSBrZXkgb2YgdGhlIGFwcCAoZm9yIGF1dG9tYXRlZCBpbnN0YWxsYXRpb24pJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWFyY2hpdmUgPHBhdGg+JywgJ1RoZSBwYXRoIHRvIHRoZSBKQVIvT0JSIGFyY2hpdmUgKGZvciBhdXRvbWF0ZWQgaW5zdGFsbGF0aW9uKScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1yZXN0YXJ0QWZ0ZXJJbnN0YWxsJywgJ1Jlc3RhcnQgdGhlIGNvbnRhaW5lciBhZnRlciBpbnN0YWxsaW5nIHRoZSBhcHAnKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tam1ldGVyJywgJ0luY2x1ZGUgYXBwIHNwZWNpZmljIEpNZXRlciB0ZXN0cycpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1sb2N1c3QnLCAnSW5jbHVkZSBhcHAgc3BlY2lmaWMgTG9jdXN0IHRlc3RzJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXF1ZXJ5IDxxdWVyeT4nLCAnQ3VzdG9tIGRhdGFzZXQgcXVlcnkgdG8gcG9wdXBsYXRlIHRoZSBjdXN0b21faXNzdWVzL2N1c3RvbV9wYWdlcyBwYXJhbWV0ZXJzJykuZGVmYXVsdCgnJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctTywgLS1vdXRwdXREaXIgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgZGlyZWN0b3J5IHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHRzIG9mIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1jd2QgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlcmUgdG8gZmluZCB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKS5kZWZhdWx0KGN3ZCgpKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy15LCAtLWZvcmNlJywgJ1VzZSBkZWZhdWx0IHZhbHVlcyBmb3IgaW5wdXQgcXVlc3Rpb25zIHdoZW4gYXZhaWxhYmxlJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFjdGlvbihvcHRpb25zID0+IEFjdGlvbkhhbmRsZXIocHJvZ3JhbSwgUnVuNENvbW1hbmQoKSwgb3B0aW9ucykpO1xucHJvZ3JhbVxuICAgIC5jb21tYW5kKCdydW41JylcbiAgICAuZGVzY3JpcHRpb24oJ1N0YXJ0IHRoZSBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVGVzdGluZyBTY2FsYWJpbGl0eSB0ZXN0IG9uIGEgZm91ci1ub2RlIERDIGNsdXN0ZXIgKHJ1biA1KScpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXByb2R1Y3QgPG5hbWU+JywgJ1RoZSBob3N0IHByb2R1Y3QnKS5jaG9pY2VzKE9iamVjdC52YWx1ZXMoU3VwcG9ydGVkQXBwbGljYXRpb25zLlZhbHVlcykpLm1ha2VPcHRpb25NYW5kYXRvcnkodHJ1ZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXRhZyA8bmFtZT4nLCAnVGhlIGhvc3QgcHJvZHVjdCB2ZXJzaW9uIHRhZycpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1lbnZpcm9ubWVudCA8bmFtZT4nLCAnVGhlIGVudmlyb25tZW50IG5hbWUnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tbW9uaXRvcmluZycsICdFbmFibGUgZGV0YWlsZWQgQ1BVL01lbW9yeSBtb25pdG9yaW5nIGFuZCBHcmFmYW5hIGRhc2hib2FyZHMgZm9yIHZpc3VhbGlzYXRpb24nKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tbGljZW5zZSA8cGF0aF9vcl9saWNlbnNlPicsICdUaGUgaG9zdCBwcm9kdWN0IGxpY2Vuc2UsIGVpdGhlciBhcyBhIHBhdGggdG8gYSBmaWxlIG9yIHRoZSBsaWNlbnNlIGl0c2VsZicpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS10cywgLS10aW1lc3RhbXAgPHRpbWVzdGFtcD4nLCAnVGhlIHRpbWVzdGFtcCBvZiB0aGUgdGVzdCBydW4sIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGNvbnRpbnVlIGFuIGV4aXN0aW5nIHRlc3QgZXhlY3V0aW9uJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWFwcEtleSA8YXBwS2V5PicsICdUaGUga2V5IG9mIHRoZSBhcHAgKGZvciBhdXRvbWF0ZWQgaW5zdGFsbGF0aW9uKScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1hcmNoaXZlIDxwYXRoPicsICdUaGUgcGF0aCB0byB0aGUgSkFSL09CUiBhcmNoaXZlIChmb3IgYXV0b21hdGVkIGluc3RhbGxhdGlvbiknKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcmVzdGFydEFmdGVySW5zdGFsbCcsICdSZXN0YXJ0IHRoZSBjb250YWluZXIgYWZ0ZXIgaW5zdGFsbGluZyB0aGUgYXBwJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWptZXRlcicsICdJbmNsdWRlIGFwcCBzcGVjaWZpYyBKTWV0ZXIgdGVzdHMnKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tbG9jdXN0JywgJ0luY2x1ZGUgYXBwIHNwZWNpZmljIExvY3VzdCB0ZXN0cycpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1xdWVyeSA8cXVlcnk+JywgJ0N1c3RvbSBkYXRhc2V0IHF1ZXJ5IHRvIHBvcHVwbGF0ZSB0aGUgY3VzdG9tX2lzc3Vlcy9jdXN0b21fcGFnZXMgcGFyYW1ldGVycycpLmRlZmF1bHQoJycpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLU8sIC0tb3V0cHV0RGlyIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIGRpcmVjdG9yeSB3aGVyZSB0byBzdG9yZSB0aGUgcmVzdWx0cyBvZiB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tY3dkIDxkaXJlY3Rvcnk+JywgJ1NwZWNpZnkgdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdoZXJlIHRvIGZpbmQgdGhlIEFwcCBQZXJmb3JtYW5jZSBUb29sa2l0JykuZGVmYXVsdChjd2QoKSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCcteSwgLS1mb3JjZScsICdVc2UgZGVmYXVsdCB2YWx1ZXMgZm9yIGlucHV0IHF1ZXN0aW9ucyB3aGVuIGF2YWlsYWJsZScpLmRlZmF1bHQoZmFsc2UpKVxuICAgIC5hY3Rpb24ob3B0aW9ucyA9PiBBY3Rpb25IYW5kbGVyKHByb2dyYW0sIFJ1bjVDb21tYW5kKCksIG9wdGlvbnMpKTtcbnByb2dyYW1cbiAgICAuY29tbWFuZCgncmVzdGFydCcpXG4gICAgLmRlc2NyaXB0aW9uKCdSZXN0YXJ0IHRoZSBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVGVzdGluZyBjbHVzdGVyIG9uIEFXUycpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXByb2R1Y3QgPG5hbWU+JywgJ1RoZSBob3N0IHByb2R1Y3QnKS5jaG9pY2VzKE9iamVjdC52YWx1ZXMoU3VwcG9ydGVkQXBwbGljYXRpb25zLlZhbHVlcykpLm1ha2VPcHRpb25NYW5kYXRvcnkodHJ1ZSkpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWVudmlyb25tZW50IDxuYW1lPicsICdUaGUgZW52aXJvbm1lbnQgbmFtZScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1jd2QgPGRpcmVjdG9yeT4nLCAnU3BlY2lmeSB0aGUgd29ya2luZyBkaXJlY3Rvcnkgd2hlcmUgdG8gZmluZCB0aGUgQXBwIFBlcmZvcm1hbmNlIFRvb2xraXQnKS5kZWZhdWx0KGN3ZCgpKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy15LCAtLWZvcmNlJywgJ1VzZSBkZWZhdWx0IHZhbHVlcyBmb3IgaW5wdXQgcXVlc3Rpb25zIHdoZW4gYXZhaWxhYmxlJykuZGVmYXVsdChmYWxzZSkpXG4gICAgLmFjdGlvbihvcHRpb25zID0+IEFjdGlvbkhhbmRsZXIocHJvZ3JhbSwgUmVzdGFydENvbW1hbmQoKSwgb3B0aW9ucykpO1xucHJvZ3JhbVxuICAgIC5jb21tYW5kKCd0ZWFyZG93bicpXG4gICAgLmRlc2NyaXB0aW9uKCdUZXJtaW5hdGUgdGhlIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYW5jZSBUZXN0aW5nIGNsdXN0ZXIgb24gQVdTJylcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tcHJvZHVjdCA8bmFtZT4nLCAnVGhlIGhvc3QgcHJvZHVjdCcpLmNob2ljZXMoT2JqZWN0LnZhbHVlcyhTdXBwb3J0ZWRBcHBsaWNhdGlvbnMuVmFsdWVzKSkubWFrZU9wdGlvbk1hbmRhdG9yeSh0cnVlKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tZW52aXJvbm1lbnQgPG5hbWU+JywgJ1RoZSBlbnZpcm9ubWVudCBuYW1lJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWN3ZCA8ZGlyZWN0b3J5PicsICdTcGVjaWZ5IHRoZSB3b3JraW5nIGRpcmVjdG9yeSB3aGVyZSB0byBmaW5kIHRoZSBBcHAgUGVyZm9ybWFuY2UgVG9vbGtpdCcpLmRlZmF1bHQoY3dkKCkpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLXksIC0tZm9yY2UnLCAnVXNlIGRlZmF1bHQgdmFsdWVzIGZvciBpbnB1dCBxdWVzdGlvbnMgd2hlbiBhdmFpbGFibGUnKS5kZWZhdWx0KGZhbHNlKSlcbiAgICAuYWN0aW9uKG9wdGlvbnMgPT4gQWN0aW9uSGFuZGxlcihwcm9ncmFtLCBUZWFyZG93bkNvbW1hbmQoKSwgb3B0aW9ucykpO1xucHJvZ3JhbVxuICAgIC5jb21tYW5kKCdkZXBlbmRlbmNpZXMnKVxuICAgIC5kZXNjcmlwdGlvbignR2VuZXJhdGUgdGhlIERhdGEgQ2VudGVyIEFwcCBQZXJmb3JtYW5jZSBUZXN0aW5nIGRlcGVuZGVuY3kgdHJlZScpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWdyb3VwSWQgPGdyb3VwSWQ+JywgJ1RoZSBncm91cElkIG9mIHRoZSBhcnRpZmFjdCB0byBncmFwaCBkZXBlbmRlbmNpZXMgZm9yJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWFydGlmYWN0SWQgPGFydGlmYWN0SWQ+JywgJ1RoZSBhcnRpZmFjdElkIG9mIHRoZSBhcnRpZmFjdCB0byBncmFwaCBkZXBlbmRlbmNpZXMgZm9yJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWFwcEtleSA8YXBwS2V5PicsICdUaGUga2V5IG9mIHRoZSBhcHAgdG8gZ3JhcGggZGVwZW5kZW5jaWVzIGZvcicpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1hcmNoaXZlIDxwYXRoPicsICdUaGUgcGF0aCB0byB0aGUgSkFSL09CUiBhcmNoaXZlIHRvIGdyYXBoIGRlcGVuZGVuY2llcyBmb3InKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy1QLCAtLWFjdGl2YXRlLXByb2ZpbGVzIDxhcmc+JywgJ0NvbW1hLWRlbGltaXRlZCBsaXN0IG9mIHByb2ZpbGVzIHRvIGFjdGl2YXRlJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctTywgLS1vdXRwdXRGaWxlIDxwYXRoPicsICdTcGVjaWZ5IHRoZSBvdXRwdXQgZmlsZSB3aGVyZSB0byBzdG9yZSB0aGUgZ2VuZXJhdGVkIGRlcGVuZGVuY3kgdHJlZSAoZGVmYXVsdHMgdG8gYC4vbWF2ZW5fZGVwZW5kZW5jeV90cmVlLmd2YCknKSlcbiAgICAuYWN0aW9uKG9wdGlvbnMgPT4gQWN0aW9uSGFuZGxlcihwcm9ncmFtLCBEZXBlbmRlbmN5VHJlZUNvbW1hbmQoKSwgb3B0aW9ucykpO1xucHJvZ3JhbVxuICAgIC5jb21tYW5kKCdzY2EnKVxuICAgIC5kZXNjcmlwdGlvbihgUnVuIHRoZSBEYXRhIENlbnRlciBBcHAgUGVyZm9ybWFuY2UgVGVzdGluZyBzb2Z0d2FyZSBjb21wb3NpdGlvbiBhbmFseXNpcyAoU0NBKSB0b29sXG5cblRvIGF2b2lkIHJhdGUgbGltaXRpbmcgaXNzdWVzLCBwcm92aWRpbmcgYW4gTlZEIEFQSSBLZXkgaXMgcmVxdWlyZWQgKHNlZSBodHRwczovL252ZC5uaXN0Lmdvdi9kZXZlbG9wZXJzL3JlcXVlc3QtYW4tYXBpLWtleSlcbmApXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLW52ZEFwaUtleSA8a2V5PicsICdUaGUgTlZEIEFQSSBrZXkgKGRlZmF1bHRzIHRvIE5WRF9BUElfS0VZIGVudmlyb25tZW50IHZhcmlhYmxlKScpLmRlZmF1bHQocHJvY2Vzcy5lbnYuTlZEX0FQSV9LRVkpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1hcHBLZXkgPGFwcEtleT4nLCAnVGhlIGtleSBvZiB0aGUgYXBwIHRvIHNjYW4nKSlcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tYXJjaGl2ZSA8cGF0aD4nLCAnVGhlIHBhdGggdG8gdGhlIEpBUi9PQlIgYXJjaGl2ZSB0byBzY2FuJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWZhaWxPbkVycm9yJywgJ1RoZSBwcm9jZXNzIHdpbGwgZXhpdCB3aXRoIGFuIGVycm9yIGNvZGUgaWYgYSB2dWxuZXJhYmlsaXR5IGlzIGZvdW5kJykpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctRCwgLS1kYXRhRGlyIDxwYXRoPicsICdUaGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGhlIE5WRCBkYXRhYmFzZScpKVxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLU8sIC0tb3V0cHV0RGlyIDxwYXRoPicsICdTcGVjaWZ5IHRoZSBvdXRwdXQgZGlyZWN0b3J5IHdoZXJlIHRvIHN0b3JlIHRoZSBnZW5lcmF0ZWQgcmVwb3J0IChkZWZhdWx0cyB0byBgLi9zY2FfcmVwb3J0YCknKSlcbiAgICAuYWN0aW9uKG9wdGlvbnMgPT4gQWN0aW9uSGFuZGxlcihwcm9ncmFtLCBTQ0FDb21tYW5kKCksIG9wdGlvbnMpKTtcbnByb2dyYW0ucGFyc2VBc3luYyhwcm9jZXNzLmFyZ3YpLmNhdGNoKCgpID0+IGdyYWNlZnVsRXhpdCgxKSk7XG5wcm9jZXNzLm9uKCdTSUdJTlQnLCAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coYFJlY2VpdmVkIHRlcm0gc2lnbmFsLCB0cnlpbmcgdG8gc3RvcCBncmFjZWZ1bGx5IPCfkqpgKTtcbiAgICBncmFjZWZ1bEV4aXQoKTtcbn0pO1xuIl0sIm5hbWVzIjpbImN3ZCIsInB3ZCIsInBhcnNlIiwicHJvZ3Jlc3NCYXIiLCJwYXNzd29yZCIsInBhc3N3b3JkUHJvbXB0IiwidmVyc2lvbnMiLCJjb25zb2xlIiwiQ29tbWFuZGVyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTU8sTUFBTSxZQUFZLEdBQUcsT0FBTyxHQUFHLEVBQUUsSUFBSSxLQUFLO0FBQ2pEO0FBQ0EsSUFBSSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ25EO0FBQ0EsSUFBSSxTQUFTLENBQUMsTUFBTSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDM0M7QUFDQSxJQUFJLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDO0FBQ2pDLFFBQVEsR0FBRztBQUNYLFFBQVEsTUFBTSxFQUFFLEtBQUs7QUFDckIsUUFBUSxZQUFZLEVBQUUsUUFBUTtBQUM5QixLQUFLLENBQUMsQ0FBQztBQUNQLElBQUksTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0IsSUFBSSxNQUFNLGVBQWUsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMxRCxJQUFJLElBQUksR0FBRyxJQUFJLEtBQUssZUFBZSxFQUFFLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxlQUFlLEVBQUUsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZILFVBQVUsZUFBZTtBQUN6QixVQUFVLFNBQVMsQ0FBQztBQUNwQjtBQUNBLElBQUksTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLENBQUMsR0FBRyxTQUFTLENBQUM7QUFDN0gsSUFBSSxNQUFNLFFBQVEsR0FBRyxXQUFXLEVBQUUsVUFBVSxFQUFFLFFBQVEsSUFBSSxJQUFJLENBQUM7QUFDL0QsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQ25CLFFBQVEsTUFBTSxJQUFJLEtBQUssQ0FBQyx5RkFBeUYsQ0FBQyxDQUFDO0FBQ25ILEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztBQUMzQztBQUNBLElBQUksTUFBTSxNQUFNLEdBQUcsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDOUM7QUFDQSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQy9CO0FBQ0EsSUFBSSxNQUFNLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMzQjtBQUNBLElBQUksT0FBTyxPQUFPLENBQUM7QUFDbkIsQ0FBQzs7QUNyQ00sTUFBTSxzQkFBc0IsR0FBRyxPQUFPLElBQUksRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEtBQUs7QUFDcEYsSUFBSSxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFDekIsSUFBSSxJQUFJLGdCQUFnQixFQUFFO0FBQzFCLFFBQVEsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCxLQUFLO0FBQ0wsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLDRCQUE0QixFQUFFLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLE1BQU0sS0FBSztBQUMzSixRQUFRLElBQUksR0FBRyxFQUFFO0FBQ2pCLFlBQVksT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQy9CLFNBQVM7QUFDVCxhQUFhO0FBQ2IsWUFBWSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzdDLFlBQVksT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2pDLFNBQVM7QUFDVCxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ1IsQ0FBQzs7QUNkTSxNQUFNLGNBQWMsR0FBRyxPQUFPLE1BQU0sS0FBSztBQUNoRCxJQUFJLElBQUksTUFBTSxHQUFHLENBQUMsbURBQW1ELEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNoRixJQUFJLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsZ0RBQWdELEVBQUUsTUFBTSxDQUFDLG9DQUFvQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0ssSUFBSSxJQUFJLE9BQU8sRUFBRTtBQUNqQixRQUFRLE1BQU0sR0FBRyxPQUFPLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxJQUFJLE1BQU0sQ0FBQztBQUNqRyxLQUFLO0FBQ0wsSUFBSSxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDOztBQ0NNLE1BQU0sc0JBQXNCLEdBQUcsT0FBTyxPQUFPLEtBQUs7QUFDekQ7QUFDQSxJQUFJLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDbkQ7QUFDQSxJQUFJLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7QUFDL0I7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtBQUM1QztBQUNBLFFBQVEsTUFBTSxHQUFHLEdBQUcsTUFBTSxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3pEO0FBQ0EsUUFBUSxPQUFPLENBQUMsR0FBRyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7QUFDMUUsUUFBUSxJQUFJLEdBQUcsTUFBTSxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkMsS0FBSztBQUNMLElBQUksSUFBSTtBQUNSO0FBQ0EsUUFBUSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckYsUUFBUSxJQUFJO0FBQ1o7QUFDQSxZQUFZLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7QUFDckQsZ0JBQWdCLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxxQ0FBcUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUUsZ0JBQWdCLE9BQU87QUFDdkIsYUFBYTtBQUNiO0FBQ0EsWUFBWSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsNENBQTRDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEYsWUFBWSxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbEQsWUFBWSxNQUFNLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztBQUN4RDtBQUNBLFlBQVksSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFO0FBQ3pELGdCQUFnQixPQUFPLENBQUMsR0FBRyxDQUFDLGdEQUFnRCxDQUFDLENBQUM7QUFDOUUsZ0JBQWdCLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUNBQWlDLENBQUMsQ0FBQztBQUMvRDtBQUNBLGdCQUFnQixNQUFNLENBQUMsaUJBQWlCLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7QUFDckY7QUFDQSxnQkFBZ0IsSUFBSSxDQUFDLGlCQUFpQixFQUFFO0FBQ3hDLG9CQUFvQixPQUFPLENBQUMsR0FBRyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7QUFDckYsb0JBQW9CLE9BQU87QUFDM0IsaUJBQWlCO0FBQ2pCLHFCQUFxQjtBQUNyQixvQkFBb0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLHlCQUF5QixFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEY7QUFDQSxvQkFBb0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0FBQ3hFO0FBQ0Esb0JBQW9CLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQy9FO0FBQ0Esb0JBQW9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxzREFBc0QsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRyxvQkFBb0IsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzdELG9CQUFvQixNQUFNLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUM1RDtBQUNBLG9CQUFvQixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsMkNBQTJDLENBQUMsQ0FBQyxDQUFDO0FBQy9FLG9CQUFvQixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxDQUFDLHlCQUF5QixDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUM5RixvQkFBb0IsSUFBSSxpQkFBaUIsR0FBRyxJQUFJLENBQUM7QUFDakQsb0JBQW9CLFdBQVcsTUFBTSxJQUFJLElBQUksUUFBUSxFQUFFO0FBQ3ZELHdCQUF3QixJQUFJLGlCQUFpQixFQUFFO0FBQy9DLDRCQUE0QixTQUFTO0FBQ3JDLHlCQUF5QjtBQUN6Qix3QkFBd0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMzRCx3QkFBd0IsTUFBTSxPQUFPLEdBQUcsTUFBTSxzQkFBc0IsQ0FBQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDM0gsd0JBQXdCLE1BQU0sVUFBVSxHQUFHLE1BQU0sc0JBQXNCLENBQUMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ2pJLHdCQUF3QixJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFVLEtBQUssVUFBVSxFQUFFO0FBQzlGLDRCQUE0QixpQkFBaUIsR0FBRyxJQUFJLENBQUM7QUFDckQseUJBQXlCO0FBQ3pCLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixJQUFJLENBQUMsaUJBQWlCLEVBQUU7QUFDNUMsd0JBQXdCLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0RBQW9ELENBQUMsQ0FBQztBQUMxRix3QkFBd0IsT0FBTztBQUMvQixxQkFBcUI7QUFDckIseUJBQXlCO0FBQ3pCLHdCQUF3QixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0FBQ0Esd0JBQXdCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztBQUN4RTtBQUNBLHdCQUF3QixPQUFPLENBQUMsR0FBRyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7QUFDNUYsd0JBQXdCLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxLQUFLO0FBQy9ELDRCQUE0QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFO0FBQ3ZELGdDQUFnQyxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFO0FBQ25HLGdDQUFnQyxpQkFBaUI7QUFDakQsZ0NBQWdDLElBQUksRUFBRSxPQUFPO0FBQzdDLGdDQUFnQyxrQkFBa0I7QUFDbEQsZ0NBQWdDLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNwRSw2QkFBNkIsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0FBQ3JELDRCQUE0QixLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksT0FBTyxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsOEJBQThCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5SSx5QkFBeUIsQ0FBQyxDQUFDO0FBQzNCLHdCQUF3QixPQUFPLENBQUMsR0FBRyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7QUFDaEYscUJBQXFCO0FBQ3JCLGlCQUFpQjtBQUNqQjtBQUNBLGFBQWE7QUFDYixpQkFBaUI7QUFDakI7QUFDQSxnQkFBZ0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLDJDQUEyQyxDQUFDLENBQUMsQ0FBQztBQUMzRSxnQkFBZ0IsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7QUFDOUYsZ0JBQWdCLElBQUksaUJBQWlCLEdBQUcsSUFBSSxDQUFDO0FBQzdDLGdCQUFnQixXQUFXLE1BQU0sSUFBSSxJQUFJLFFBQVEsRUFBRTtBQUNuRCxvQkFBb0IsSUFBSSxpQkFBaUIsRUFBRTtBQUMzQyx3QkFBd0IsU0FBUztBQUNqQyxxQkFBcUI7QUFDckIsb0JBQW9CLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDM0Qsb0JBQW9CLE1BQU0sT0FBTyxHQUFHLE1BQU0sc0JBQXNCLENBQUMsT0FBTyxFQUFFLGlCQUFpQixDQUFDLENBQUM7QUFDN0Ysb0JBQW9CLE1BQU0sVUFBVSxHQUFHLE1BQU0sc0JBQXNCLENBQUMsT0FBTyxFQUFFLG9CQUFvQixDQUFDLENBQUM7QUFDbkcsb0JBQW9CLElBQUksT0FBTyxDQUFDLE9BQU8sS0FBSyxPQUFPLElBQUksT0FBTyxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7QUFDMUYsd0JBQXdCLGlCQUFpQixHQUFHLElBQUksQ0FBQztBQUNqRCxxQkFBcUI7QUFDckIsaUJBQWlCO0FBQ2pCO0FBQ0EsZ0JBQWdCLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtBQUN4QyxvQkFBb0IsT0FBTyxDQUFDLEdBQUcsQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO0FBQ2pGLG9CQUFvQixPQUFPO0FBQzNCLGlCQUFpQjtBQUNqQixxQkFBcUI7QUFDckIsb0JBQW9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7QUFDdEQ7QUFDQSxvQkFBb0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0FBQ3hFO0FBQ0Esb0JBQW9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0RBQXNELENBQUMsQ0FBQztBQUN4RixvQkFBb0IsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEtBQUs7QUFDM0Qsd0JBQXdCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUU7QUFDbkQsNEJBQTRCLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixHQUFHLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUU7QUFDL0YsNEJBQTRCLGlCQUFpQjtBQUM3Qyw0QkFBNEIsSUFBSSxFQUFFLE9BQU87QUFDekMsNEJBQTRCLGtCQUFrQjtBQUM5Qyw0QkFBNEIsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ2hFLHlCQUF5QixFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7QUFDakQsd0JBQXdCLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxPQUFPLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyw4QkFBOEIsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFJLHFCQUFxQixDQUFDLENBQUM7QUFDdkIsb0JBQW9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsMENBQTBDLENBQUMsQ0FBQztBQUM1RSxpQkFBaUI7QUFDakIsYUFBYTtBQUNiLFNBQVM7QUFDVCxnQkFBZ0I7QUFDaEIsWUFBWSxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNqRSxTQUFTO0FBQ1QsS0FBSztBQUNMLFlBQVk7QUFDWjtBQUNBLFFBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksSUFBSSxFQUFFO0FBQ3RDLFlBQVksTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzFDLFNBQVM7QUFDVCxLQUFLO0FBQ0wsQ0FBQzs7QUNySk0sTUFBTSxVQUFVLEdBQUcsQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQzs7QUNBNUUsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFLLEtBQUs7QUFDekMsSUFBSSxRQUFRLEtBQUs7QUFDakIsUUFBUSxLQUFLLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNsQyxRQUFRLEtBQUssWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3BDLFFBQVEsS0FBSyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDbEMsUUFBUSxLQUFLLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNsQyxRQUFRLEtBQUssV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ25DLEtBQUs7QUFDTCxDQUFDOztBQ0xELE1BQU0sUUFBUSxHQUFHLENBQUMsS0FBSyxLQUFLO0FBQzVCLElBQUksUUFBUSxLQUFLO0FBQ2pCLFFBQVEsS0FBSyxVQUFVLEVBQUUsT0FBTyxPQUFPLENBQUM7QUFDeEMsUUFBUSxLQUFLLFVBQVUsRUFBRSxPQUFPLFFBQVEsQ0FBQztBQUN6QyxRQUFRLEtBQUssV0FBVyxFQUFFLE9BQU8sT0FBTyxDQUFDO0FBQ3pDLEtBQUs7QUFDTCxDQUFDLENBQUM7QUFDSyxNQUFNLFNBQVMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekMsTUFBTSxPQUFPLEdBQUc7QUFDdkIsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxDQUFDLENBQUM7QUFDSyxNQUFNLElBQUksR0FBRztBQUNwQixJQUFJLE1BQU0sRUFBRSxDQUFDLE9BQU8sS0FBSyxDQUFDO0FBQzFCLDJHQUEyRyxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNqSTtBQUNBO0FBQ0EsOEZBQThGLEVBQUUsT0FBTyxDQUFDO0FBQ3hHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsRUFBRSxPQUFPLENBQUM7QUFDdEMsaUNBQWlDLEVBQUUsT0FBTyxDQUFDO0FBQzNDLDRCQUE0QixFQUFFLE9BQU8sQ0FBQztBQUN0Qyw0QkFBNEIsRUFBRSxPQUFPLENBQUM7QUFDdEMsNEJBQTRCLEVBQUUsT0FBTyxDQUFDO0FBQ3RDLDRCQUE0QixFQUFFLE9BQU8sQ0FBQztBQUN0Qyw0QkFBNEIsRUFBRSxPQUFPLENBQUM7QUFDdEM7QUFDQTtBQUNBLEVBQUUsT0FBTyxLQUFLLE1BQU0sR0FBRyxDQUFDO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxHQUFHLENBQUM7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLENBQUMsQ0FBQztBQUNILENBQUMsQ0FBQztBQUNLLE1BQU0sWUFBWSxHQUFHO0FBQzVCLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsSUFBSSxvQkFBb0IsRUFBRSxDQUFDLE9BQU8sS0FBSyxDQUFDO0FBQ3hDLDRCQUE0QixFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNsRDtBQUNBO0FBQ0EsOEZBQThGLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUM7QUFDMUgsQ0FBQztBQUNELElBQUksaUJBQWlCLEVBQUUsQ0FBQztBQUN4QjtBQUNBO0FBQ0EsQ0FBQztBQUNELElBQUksaUJBQWlCLEVBQUUsQ0FBQztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxJQUFJLGdCQUFnQixFQUFFLENBQUM7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxJQUFJLHVCQUF1QixFQUFFLG9EQUFvRDtBQUNqRixJQUFJLCtCQUErQixFQUFFLENBQUMsOERBQThELENBQUM7QUFDckcsQ0FBQyxDQUFDO0FBQ0ssTUFBTSxJQUFJLEdBQUc7QUFDcEIsSUFBSSxNQUFNLEVBQUUsTUFBTSxDQUFDO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxJQUFJLG9CQUFvQixFQUFFLENBQUM7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELElBQUksU0FBUyxFQUFFLENBQUM7QUFDaEI7QUFDQSxDQUFDO0FBQ0QsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkO0FBQ0EsQ0FBQztBQUNELElBQUksT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxPQUFPLEtBQUs7QUFDNUUsUUFBUSxJQUFJLE1BQU0sR0FBRyxDQUFDO0FBQ3RCLDZCQUE2QixFQUFFLEtBQUssQ0FBQztBQUNyQztBQUNBO0FBQ0E7QUFDQSxDQUFDLENBQUM7QUFDRixRQUFRLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEtBQUssTUFBTSxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUYsUUFBUSxNQUFNLElBQUksQ0FBQztBQUNuQjtBQUNBLEVBQUUsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLHFCQUFxQixDQUFDLENBQUM7QUFDaEQ7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsZUFBZSxFQUFFLFdBQVcsQ0FBQztBQUNoRixDQUFDLENBQUM7QUFDRixRQUFRLE9BQU8sTUFBTSxDQUFDO0FBQ3RCLEtBQUs7QUFDTCxDQUFDLENBQUM7QUFDSyxNQUFNLElBQUksR0FBRztBQUNwQixJQUFJLE1BQU0sRUFBRSxDQUFDLE9BQU8sS0FBSyxDQUFDO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxPQUFPLEtBQUssTUFBTSxHQUFHLENBQUM7QUFDeEIsMkZBQTJGLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbEc7QUFDQSxFQUFFLE9BQU8sS0FBSyxNQUFNLEdBQUcsQ0FBQztBQUN4QjtBQUNBO0FBQ0E7QUFDQSxDQUFDLEdBQUcsQ0FBQztBQUNMO0FBQ0E7QUFDQSxDQUFDLENBQUM7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxJQUFJLG9CQUFvQixFQUFFLENBQUM7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELElBQUksU0FBUyxFQUFFLENBQUM7QUFDaEI7QUFDQSxDQUFDO0FBQ0QsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkO0FBQ0EsQ0FBQztBQUNELElBQUksT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxPQUFPLEtBQUs7QUFDNUUsUUFBUSxJQUFJLE1BQU0sR0FBRyxDQUFDO0FBQ3RCLDZCQUE2QixFQUFFLEtBQUssQ0FBQztBQUNyQztBQUNBO0FBQ0E7QUFDQSxDQUFDLENBQUM7QUFDRixRQUFRLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEtBQUssTUFBTSxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUYsUUFBUSxNQUFNLElBQUksQ0FBQztBQUNuQjtBQUNBLEVBQUUsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLHFCQUFxQixDQUFDLENBQUM7QUFDaEQ7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsZUFBZSxFQUFFLFdBQVcsQ0FBQztBQUNoRixDQUFDLENBQUM7QUFDRixRQUFRLE9BQU8sTUFBTSxDQUFDO0FBQ3RCLEtBQUs7QUFDTCxDQUFDLENBQUM7QUFDSyxNQUFNLGdCQUFnQixHQUFHO0FBQ2hDLElBQUksTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLEtBQUssS0FBSyxDQUFDO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0MsRUFBRSxLQUFLLENBQUM7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsSUFBSSxvQkFBb0IsRUFBRSxDQUFDO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxJQUFJLFNBQVMsRUFBRSxDQUFDO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELElBQUksT0FBTyxFQUFFLENBQUM7QUFDZDtBQUNBLENBQUM7QUFDRCxJQUFJLE9BQU8sRUFBRSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLFdBQVcsS0FBSyxDQUFDO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsZUFBZSxFQUFFLFdBQVcsQ0FBQztBQUNuRixDQUFDO0FBQ0QsQ0FBQyxDQUFDO0FBQ0ssTUFBTSx5QkFBeUIsR0FBRztBQUN6QyxJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsQ0FBQyxDQUFDO0FBQ0ssTUFBTSx1QkFBdUIsR0FBRztBQUN2QyxJQUFJLE1BQU0sRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLEtBQUssQ0FBQztBQUNqQyxFQUFFLEtBQUssS0FBSyxVQUFVLEdBQUcsQ0FBQztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsR0FBRyxLQUFLLEtBQUssVUFBVSxHQUFHLENBQUM7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEdBQUcsQ0FBQztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxDQUFDO0FBQ0Y7QUFDQSxrREFBa0QsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyw0Q0FBNEMsRUFBRSxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcko7QUFDQSxNQUFNLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3hCLGlDQUFpQyxFQUFFLEtBQUssQ0FBQztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFLE9BQU8sS0FBSyxNQUFNO0FBQ3BCLFFBQVEsQ0FBQyxtSkFBbUosQ0FBQztBQUM3SixVQUFVLE9BQU8sS0FBSyxZQUFZO0FBQ2xDLFlBQVksQ0FBQywwSkFBMEosQ0FBQztBQUN4SyxjQUFjLE9BQU8sS0FBSyxRQUFRO0FBQ2xDLGdCQUFnQiwySUFBMkk7QUFDM0o7QUFDQSxrQkFBa0IsMEpBQTBKLENBQUM7QUFDN0ssQ0FBQztBQUNELElBQUksb0JBQW9CLEVBQUUsQ0FBQztBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsSUFBSSxTQUFTLEVBQUUsQ0FBQztBQUNoQjtBQUNBLENBQUM7QUFDRCxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ2Q7QUFDQSxDQUFDO0FBQ0QsSUFBSSxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLE9BQU8sS0FBSztBQUM1RSxRQUFRLElBQUksTUFBTSxHQUFHLENBQUM7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLENBQUM7QUFDRixRQUFRLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEtBQUssTUFBTSxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUYsUUFBUSxNQUFNLElBQUksQ0FBQztBQUNuQjtBQUNBLEVBQUUsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLHFCQUFxQixDQUFDLENBQUM7QUFDaEQ7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLEVBQUUsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxlQUFlLEVBQUUsV0FBVyxDQUFDO0FBQ3ZHLENBQUMsQ0FBQztBQUNGLFFBQVEsT0FBTyxNQUFNLENBQUM7QUFDdEIsS0FBSztBQUNMLENBQUMsQ0FBQztBQUNLLE1BQU0seUJBQXlCLEdBQUc7QUFDekMsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxDQUFDLENBQUM7QUFDSyxNQUFNLE9BQU8sR0FBRztBQUN2QixJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELENBQUMsQ0FBQztBQUNLLE1BQU0sUUFBUSxHQUFHO0FBQ3hCLElBQUksTUFBTSxFQUFFLENBQUM7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsQ0FBQzs7QUM1Wk0sTUFBTSxPQUFPLEdBQUcsT0FBTyxHQUFHLEtBQUs7QUFDdEMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakI7QUFDQSxpQ0FBaUMsRUFBRSxHQUFHLENBQUM7QUFDdkMsQ0FBQyxDQUFDLENBQUM7QUFDSCxJQUFJLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDOUMsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsRUFBRSxvQkFBb0IsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNoRixJQUFJLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxLQUFLO0FBQzNDLFFBQVEsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRTtBQUN2QyxZQUFZLEtBQUs7QUFDakIsWUFBWSxLQUFLO0FBQ2pCLFlBQVksQ0FBQyxhQUFhLENBQUM7QUFDM0IsWUFBWSxZQUFZLEVBQUUsVUFBVTtBQUNwQyxZQUFZLElBQUksRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLGdEQUFnRCxDQUFDO0FBQzlFLFlBQVksSUFBSSxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsaUVBQWlFLENBQUM7QUFDL0YsWUFBWSxJQUFJLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxpQ0FBaUMsQ0FBQztBQUMvRCxZQUFZLElBQUksRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLGlEQUFpRCxDQUFDO0FBQy9FLFlBQVksZ0NBQWdDO0FBQzVDLFlBQVksY0FBYyxFQUFFLElBQUksRUFBRSxhQUFhO0FBQy9DLFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7QUFDL0MsUUFBUSxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksT0FBTyxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsd0JBQXdCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNySCxLQUFLLENBQUMsQ0FBQztBQUNQLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCO0FBQ0Esa0NBQWtDLEVBQUUsT0FBTyxDQUFDO0FBQzVDLENBQUMsQ0FBQyxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBQ0ssTUFBTSxPQUFPLEdBQUcsT0FBTyxHQUFHLEVBQUUsV0FBVyxFQUFFLE9BQU8sS0FBSztBQUM1RCxJQUFJLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxLQUFLO0FBQzNDLFFBQVEsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRTtBQUN2QyxZQUFZLEtBQUs7QUFDakIsWUFBWSxLQUFLO0FBQ2pCLFlBQVksQ0FBQyxhQUFhLENBQUM7QUFDM0IsWUFBWSxZQUFZLEVBQUUseUJBQXlCO0FBQ25ELFlBQVksSUFBSSxFQUFFLENBQUMsZ0JBQWdCLENBQUM7QUFDcEMsWUFBWSxJQUFJLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUNuRCxZQUFZLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLGtEQUFrRCxDQUFDO0FBQzVFLFlBQVksSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsZ0VBQWdFLENBQUM7QUFDMUYsWUFBWSxnQ0FBZ0M7QUFDNUMsWUFBWSxNQUFNLEVBQUUsZUFBZSxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTTtBQUM3RCxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7QUFDdEMsUUFBUSxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksT0FBTyxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsd0JBQXdCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNySCxLQUFLLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQztBQUNLLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxHQUFHLEVBQUUsT0FBTyxFQUFFLE9BQU8sS0FBSztBQUNqRSxJQUFJLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxLQUFLO0FBQzNDLFFBQVEsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRTtBQUN2QyxZQUFZLEtBQUs7QUFDakIsWUFBWSxLQUFLO0FBQ2pCLFlBQVksQ0FBQyxhQUFhLENBQUM7QUFDM0IsWUFBWSxXQUFXLEVBQUUscURBQXFEO0FBQzlFLFlBQVksY0FBYyxFQUFFLFFBQVE7QUFDcEMsWUFBWSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQztBQUN0RCxZQUFZLElBQUksRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLGNBQWMsQ0FBQztBQUM1QyxZQUFZLElBQUksRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLGNBQWMsQ0FBQztBQUM1QyxZQUFZLGlCQUFpQjtBQUM3QixZQUFZLHdCQUF3QixFQUFFLHlCQUF5QjtBQUMvRCxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7QUFDdEMsUUFBUSxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksT0FBTyxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsd0JBQXdCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNySCxLQUFLLENBQUMsQ0FBQztBQUNQLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLHVEQUF1RCxDQUFDLENBQUMsQ0FBQztBQUMzRSxDQUFDLENBQUM7QUFDSyxNQUFNLGlCQUFpQixHQUFHLE9BQU8sR0FBRyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxLQUFLO0FBQ3ZGLElBQUksTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEtBQUs7QUFDM0MsUUFBUSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFO0FBQ3ZDLFlBQVksS0FBSztBQUNqQixZQUFZLEtBQUs7QUFDakIsWUFBWSxDQUFDLGFBQWEsQ0FBQztBQUMzQixZQUFZLFdBQVcsRUFBRSxxREFBcUQ7QUFDOUUsWUFBWSxjQUFjLEVBQUUsUUFBUTtBQUNwQyxZQUFZLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLDRCQUE0QixDQUFDO0FBQ3RELFlBQVksSUFBSSxFQUFFLENBQUMsRUFBRSxXQUFXLENBQUMsdUJBQXVCLENBQUM7QUFDekQsWUFBWSxJQUFJLEVBQUUsQ0FBQyxFQUFFLFdBQVcsQ0FBQyx1QkFBdUIsQ0FBQztBQUN6RCxZQUFZLElBQUksRUFBRSxDQUFDLEVBQUUsV0FBVyxDQUFDLHVCQUF1QixDQUFDO0FBQ3pELFlBQVksaUJBQWlCO0FBQzdCLFlBQVksd0JBQXdCLEVBQUUsbUJBQW1CO0FBQ3pELFNBQVMsRUFBRSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztBQUN0QyxRQUFRLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxPQUFPLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JILEtBQUssQ0FBQyxDQUFDO0FBQ1AsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsc0RBQXNELENBQUMsQ0FBQyxDQUFDO0FBQzFFLENBQUMsQ0FBQztBQUNLLE1BQU0sT0FBTyxHQUFHLE9BQU8sR0FBRyxFQUFFLFdBQVcsRUFBRSxPQUFPLEtBQUs7QUFDNUQsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSw4QkFBOEIsQ0FBQyxFQUFFLENBQUM7QUFDOUQ7QUFDQTtBQUNBLGdEQUFnRCxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDM0QsSUFBSSxNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sS0FBSztBQUMzQyxRQUFRLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUU7QUFDdkMsWUFBWSxLQUFLO0FBQ2pCLFlBQVksS0FBSztBQUNqQixZQUFZLENBQUMsYUFBYSxDQUFDO0FBQzNCLFlBQVksWUFBWSxFQUFFLHlCQUF5QjtBQUNuRCxZQUFZLElBQUksRUFBRSxDQUFDLGdCQUFnQixDQUFDO0FBQ3BDLFlBQVksSUFBSSxFQUFFLENBQUMsaUJBQWlCLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDbkQsWUFBWSxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDdEMsWUFBWSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxrREFBa0QsQ0FBQztBQUM1RSxZQUFZLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLGdFQUFnRSxDQUFDO0FBQzFGLFlBQVksZ0NBQWdDO0FBQzVDLFlBQVksTUFBTSxFQUFFLGVBQWU7QUFDbkMsU0FBUyxFQUFFLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0FBQ3RDLFFBQVEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLE9BQU8sRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLHdCQUF3QixFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckgsS0FBSyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUM7QUFDSyxNQUFNLFNBQVMsR0FBRyxPQUFPLEdBQUcsRUFBRSxXQUFXLEtBQUs7QUFDckQsSUFBSSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELElBQUksTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEtBQUs7QUFDM0MsUUFBUSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFO0FBQ3ZDLFlBQVksS0FBSztBQUNqQixZQUFZLENBQUMsYUFBYSxDQUFDO0FBQzNCLFlBQVksWUFBWSxFQUFFLFVBQVU7QUFDcEMsWUFBWSxXQUFXLEVBQUUseUJBQXlCO0FBQ2xELFlBQVksY0FBYyxFQUFFLFFBQVE7QUFDcEMsWUFBWSxJQUFJLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxpRUFBaUUsQ0FBQztBQUMvRixZQUFZLGlCQUFpQjtBQUM3QixZQUFZLHNCQUFzQixFQUFFLGdCQUFnQixFQUFFLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRSxjQUFjLEVBQUUsV0FBVztBQUNqSCxTQUFTLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztBQUNqRSxRQUFRLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxPQUFPLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyx3QkFBd0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JILEtBQUssQ0FBQyxDQUFDO0FBQ1AsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsbUlBQW1JLENBQUMsQ0FBQyxDQUFDO0FBQ3ZKLENBQUM7O0FDbkhNLE1BQU0sYUFBYSxHQUFHLE9BQU9BLEtBQUcsRUFBRSwyQkFBMkIsRUFBRSxLQUFLLEtBQUs7QUFDaEY7QUFDQSxJQUFJLElBQUksTUFBTSxHQUFHQSxLQUFHO0FBQ3BCLFFBQVFBLEtBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO0FBQzVCLGNBQWNBLEtBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO0FBQzFDLGNBQWNBLEtBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO0FBQ2xDLGtCQUFrQkEsS0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUVDLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUNoRCxrQkFBa0JELEtBQUcsS0FBSyxHQUFHO0FBQzdCLHNCQUFzQkMsR0FBRyxFQUFFO0FBQzNCLHNCQUFzQkQsS0FBRztBQUN6QixVQUFVQyxHQUFHLEVBQUUsQ0FBQztBQUNoQjtBQUNBLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNoQjtBQUNBLFFBQVEsTUFBTSwwQkFBMEIsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSwyQkFBMkIsQ0FBQyxDQUFDLENBQUM7QUFDakc7QUFDQSxRQUFRLElBQUksbUJBQW1CLEdBQUcsMEJBQTBCLENBQUM7QUFDN0Q7QUFDQSxRQUFRLElBQUksMEJBQTBCLEVBQUU7QUFDeEMsWUFBWSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekIsRUFBRSxFQUFFLE1BQU0sQ0FBQztBQUNYLENBQUMsQ0FBQyxDQUFDO0FBQ0gsWUFBWSxtQkFBbUIsR0FBRyxNQUFNLE9BQU8sQ0FBQztBQUNoRCxnQkFBZ0IsT0FBTyxFQUFFLENBQUMsa0NBQWtDLENBQUM7QUFDN0QsZ0JBQWdCLE9BQU8sRUFBRSxJQUFJO0FBQzdCLGFBQWEsQ0FBQyxDQUFDO0FBQ2YsU0FBUztBQUNUO0FBQ0EsUUFBUSxJQUFJLFNBQVMsR0FBRyxNQUFNLENBQUM7QUFDL0IsUUFBUSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7QUFDbEMsWUFBWSxTQUFTLEdBQUcsTUFBTSxLQUFLLENBQUM7QUFDcEMsZ0JBQWdCLE9BQU8sRUFBRSx5RUFBeUU7QUFDbEcsZ0JBQWdCLE9BQU8sRUFBRSxNQUFNO0FBQy9CLGdCQUFnQixRQUFRLEVBQUUsSUFBSTtBQUM5QixhQUFhLENBQUMsQ0FBQztBQUNmLFNBQVM7QUFDVDtBQUNBLFFBQVEsU0FBUyxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO0FBQzlDLGNBQWMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ3RELGNBQWMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7QUFDeEMsa0JBQWtCLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFQSxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDdEQsa0JBQWtCLFNBQVMsS0FBSyxHQUFHO0FBQ25DLHNCQUFzQkEsR0FBRyxFQUFFO0FBQzNCLHNCQUFzQixTQUFTLENBQUM7QUFDaEM7QUFDQSxRQUFRLE1BQU0sbUJBQW1CLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLDJCQUEyQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RHLFFBQVEsSUFBSSxDQUFDLG1CQUFtQixFQUFFO0FBQ2xDO0FBQ0EsWUFBWSxNQUFNLFlBQVksR0FBRyxNQUFNLE9BQU8sQ0FBQztBQUMvQyxnQkFBZ0IsT0FBTyxFQUFFLENBQUMsNkhBQTZILENBQUM7QUFDeEosYUFBYSxDQUFDLENBQUM7QUFDZjtBQUNBLFlBQVksSUFBSSxZQUFZLEVBQUU7QUFDOUIsZ0JBQWdCLE1BQU0sU0FBUyxFQUFFLENBQUMsS0FBSyxDQUFDLDZEQUE2RCxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ2xILGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksMkJBQTJCLEVBQUU7QUFDekM7QUFDQSxZQUFZLE1BQU0sc0JBQXNCLEdBQUcsTUFBTSxPQUFPLENBQUM7QUFDekQsZ0JBQWdCLE9BQU8sRUFBRSx1R0FBdUc7QUFDaEksYUFBYSxDQUFDLENBQUM7QUFDZjtBQUNBLFlBQVksSUFBSSxDQUFDLHNCQUFzQixFQUFFO0FBQ3pDLGdCQUFnQixNQUFNLElBQUksS0FBSyxDQUFDLHlFQUF5RSxDQUFDLENBQUM7QUFDM0csYUFBYTtBQUNiLFNBQVM7QUFDVCxhQUFhO0FBQ2I7QUFDQSxZQUFZLE1BQU0sMEJBQTBCLEdBQUcsTUFBTSxPQUFPLENBQUM7QUFDN0QsZ0JBQWdCLE9BQU8sRUFBRSw2RkFBNkY7QUFDdEgsYUFBYSxDQUFDLENBQUM7QUFDZjtBQUNBLFlBQVksSUFBSSxDQUFDLDBCQUEwQixFQUFFO0FBQzdDLGdCQUFnQixNQUFNLElBQUksS0FBSyxDQUFDLGtFQUFrRSxDQUFDLENBQUM7QUFDcEcsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBLFFBQVEsTUFBTSxHQUFHLFNBQVMsQ0FBQztBQUMzQjtBQUNBLEtBQUs7QUFDTCxTQUFTLElBQUksMkJBQTJCLEVBQUU7QUFDMUM7QUFDQTtBQUNBLFFBQVEsTUFBTSxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztBQUNwQyxjQUFjLE1BQU07QUFDcEIsY0FBYyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2hEO0FBQ0EsUUFBUSxPQUFPLENBQUMsR0FBRyxDQUFDLGdGQUFnRixDQUFDLENBQUM7QUFDdEcsUUFBUSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQztBQUNBLFFBQVEsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDekQ7QUFDQSxRQUFRLE1BQU0sU0FBUyxFQUFFLENBQUMsS0FBSyxDQUFDLDZEQUE2RCxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZHLFFBQVEsT0FBTyxDQUFDLEdBQUcsQ0FBQyx5RkFBeUYsQ0FBQyxDQUFDO0FBQy9HO0FBQ0EsS0FBSztBQUNMLFNBQVM7QUFDVDtBQUNBLFFBQVEsTUFBTSwwQkFBMEIsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSwyQkFBMkIsQ0FBQyxDQUFDLENBQUM7QUFDakc7QUFDQSxRQUFRLElBQUksQ0FBQywwQkFBMEIsRUFBRTtBQUN6QyxZQUFZLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQyxnRUFBZ0UsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekcsU0FBUztBQUNULFFBQVEsT0FBTyxDQUFDLEdBQUcsQ0FBQyw2REFBNkQsQ0FBQyxDQUFDO0FBQ25GLFFBQVEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkMsUUFBUSxTQUFTLEVBQUUsQ0FBQztBQUNwQixLQUFLO0FBQ0w7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLDJCQUEyQixDQUFDLENBQUMsRUFBRTtBQUNoRSxRQUFRLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQyxxRUFBcUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUcsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSx1QkFBdUIsQ0FBQyxDQUFDLENBQUM7QUFDekUsSUFBSSxNQUFNLGVBQWUsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxtQ0FBbUMsQ0FBQyxDQUFDLENBQUM7QUFDMUYsSUFBSSxNQUFNLHFCQUFxQixHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLDJCQUEyQixDQUFDLENBQUMsQ0FBQztBQUN4RixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7QUFDckIsUUFBUSxNQUFNLElBQUksS0FBSyxDQUFDLENBQUMsbUVBQW1FLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZJLEtBQUs7QUFDTCxTQUFTLElBQUksQ0FBQyxlQUFlLEVBQUU7QUFDL0IsUUFBUSxNQUFNLElBQUksS0FBSyxDQUFDLENBQUMsZ0ZBQWdGLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxtQ0FBbUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hLLEtBQUs7QUFDTCxTQUFTLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtBQUNyQyxRQUFRLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQyx3RUFBd0UsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLDJCQUEyQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEosS0FBSztBQUNMLElBQUksT0FBTyxNQUFNLENBQUM7QUFDbEIsQ0FBQzs7QUNwSU0sTUFBTSxTQUFTLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxLQUFLO0FBQzVDO0FBQ0EsSUFBSSxNQUFNLGVBQWUsR0FBRyxJQUFJLEtBQUssYUFBYSxHQUFHLGlDQUFpQyxHQUFHLDJCQUEyQixDQUFDO0FBQ3JIO0FBQ0EsSUFBSSxJQUFJLFVBQVUsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxlQUFlLENBQUMsQ0FBQyxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDakYsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQ3JCO0FBQ0EsUUFBUSxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSTtBQUM3QztBQUNBLFlBQVksSUFBSSxVQUFVLEVBQUU7QUFDNUIsZ0JBQWdCLE9BQU87QUFDdkIsYUFBYTtBQUNiO0FBQ0EsWUFBWSxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3hEO0FBQ0EsWUFBWSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUMsRUFBRTtBQUN4RjtBQUNBLGdCQUFnQixVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNqRCxhQUFhO0FBQ2IsU0FBUyxDQUFDLENBQUM7QUFDWCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksVUFBVSxJQUFJLElBQUksRUFBRTtBQUM1QixRQUFRLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQyxzREFBc0QsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3RixLQUFLO0FBQ0wsSUFBSSxPQUFPLFVBQVUsQ0FBQztBQUN0QixDQUFDOztBQ3pCTSxNQUFNLGtCQUFrQixHQUFHLE9BQU8sR0FBRyxFQUFFLEtBQUssS0FBSztBQUN4RDtBQUNBLElBQUksTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3hEO0FBQ0EsSUFBSSxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUMxQjtBQUNBLFFBQVEsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDdEQsUUFBUSxJQUFJLENBQUMsT0FBTyxFQUFFO0FBQ3RCO0FBQ0EsWUFBWSxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ3hCO0FBQ0EsZ0JBQWdCLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3QjtBQUNBLEVBQUUsRUFBRSxJQUFJLENBQUM7QUFDVCxDQUFDLENBQUMsQ0FBQztBQUNIO0FBQ0EsZ0JBQWdCLE1BQU0sU0FBUyxHQUFHLE1BQU0sT0FBTyxDQUFDO0FBQ2hELG9CQUFvQixPQUFPLEVBQUUsNkNBQTZDO0FBQzFFLG9CQUFvQixPQUFPLEVBQUUsSUFBSTtBQUNqQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQ25CO0FBQ0EsZ0JBQWdCLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDaEMsb0JBQW9CLE1BQU0sSUFBSSxLQUFLLENBQUMsNEVBQTRFLENBQUMsQ0FBQztBQUNsSCxpQkFBaUI7QUFDakIsYUFBYTtBQUNiO0FBQ0EsWUFBWSxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDOUMsU0FBUztBQUNULEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDO0FBQ0EsSUFBSSxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDOztBQ2xDRCxRQUFRLENBQUMsY0FBYyxDQUFDLG1CQUFtQixFQUFFLHFCQUFxQixDQUFDLENBQUM7QUFDN0QsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLE9BQU8sRUFBRSxLQUFLLEtBQUs7QUFDMUQsSUFBSSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsTUFBTSxRQUFRLENBQUMsTUFBTSxDQUFDO0FBQzFDLFFBQVEsSUFBSSxFQUFFLEtBQUs7QUFDbkIsUUFBUSxJQUFJLEVBQUUsbUJBQW1CO0FBQ2pDLFFBQVEsTUFBTSxFQUFFLElBQUk7QUFDcEIsUUFBUSxzQkFBc0IsRUFBRSxPQUFPO0FBQ3ZDLFFBQVEsSUFBSSxFQUFFLENBQUMsS0FBSztBQUNwQixLQUFLLENBQUMsQ0FBQztBQUNQLElBQUksT0FBTyxHQUFHLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUM7QUFDdkMsQ0FBQzs7QUNGTSxNQUFNLHlCQUF5QixHQUFHLE9BQU8sT0FBTyxLQUFLO0FBQzVEO0FBQ0EsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2xEO0FBQ0EsSUFBSSxNQUFNLEdBQUcsR0FBRyxNQUFNLGFBQWEsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEUsSUFBSSxJQUFJO0FBQ1I7QUFDQSxRQUFRLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFLHlCQUF5QixDQUFDLENBQUM7QUFDOUYsUUFBUSxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzNEO0FBQ0EsUUFBUSxNQUFNLGFBQWEsR0FBR0MsT0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzlDO0FBQ0EsUUFBUSxJQUFJLGFBQWEsRUFBRTtBQUMzQjtBQUNBO0FBQ0EsWUFBWSxhQUFhLENBQUMsSUFBSSxHQUFHLENBQUM7QUFDbEMsb0JBQW9CLE9BQU8sRUFBRSxhQUFhO0FBQzFDLG9CQUFvQixPQUFPLEVBQUUsVUFBVTtBQUN2QyxvQkFBb0IsWUFBWSxFQUFFLGVBQWU7QUFDakQsaUJBQWlCLEVBQUU7QUFDbkIsb0JBQW9CLE9BQU8sRUFBRSxVQUFVO0FBQ3ZDLG9CQUFvQixPQUFPLEVBQUUsWUFBWTtBQUN6QyxvQkFBb0IsWUFBWSxFQUFFLGVBQWU7QUFDakQsaUJBQWlCLENBQUMsQ0FBQztBQUNuQjtBQUNBLFlBQVksTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3BEO0FBQ0E7QUFDQSxZQUFZLE1BQU0sbUJBQW1CLEdBQUcsTUFBTTtBQUM5QyxpQkFBaUIsT0FBTyxDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDO0FBQzlELGlCQUFpQixPQUFPLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUMvRDtBQUNBLFlBQVksT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCO0FBQ0E7QUFDQSxFQUFFLG1CQUFtQixDQUFDO0FBQ3RCO0FBQ0E7QUFDQSxFQUFFLEVBQUUsV0FBVyxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDO0FBQ0g7QUFDQSxZQUFZLE1BQU0sZ0JBQWdCLENBQUMsNEJBQTRCLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2hGLFlBQVksU0FBUyxFQUFFLENBQUM7QUFDeEI7QUFDQSxZQUFZLGFBQWEsQ0FBQyxXQUFXLEVBQUUsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDckUsU0FBUztBQUNULEtBQUs7QUFDTCxJQUFJLE9BQU8sR0FBRyxFQUFFO0FBQ2hCO0FBQ0EsUUFBUSxNQUFNLElBQUksS0FBSyxDQUFDLDRFQUE0RSxDQUFDLENBQUM7QUFDdEcsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLGFBQWEsR0FBRyxNQUFNLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdkU7QUFDQSxJQUFJLE1BQU0sZ0JBQWdCLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQzFFO0FBQ0EsSUFBSSxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsYUFBYSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBQzlEO0FBQ0EsSUFBSSxNQUFNLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUscUJBQXFCLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQy9GLENBQUM7O0FDM0RNLE1BQU0seUJBQXlCLEdBQUcsT0FBTyxPQUFPLEtBQUs7QUFDNUQ7QUFDQSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbEQ7QUFDQSxJQUFJLE1BQU0sR0FBRyxHQUFHLE1BQU0sYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0RSxJQUFJLElBQUk7QUFDUjtBQUNBLFFBQVEsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztBQUN4RixRQUFRLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDM0Q7QUFDQSxRQUFRLE1BQU0sYUFBYSxHQUFHQSxPQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDOUM7QUFDQSxRQUFRLElBQUksYUFBYSxFQUFFO0FBQzNCO0FBQ0EsWUFBWSxJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssUUFBUSxFQUFFO0FBQzlDLGdCQUFnQixhQUFhLENBQUMsS0FBSyxHQUFHLHNDQUFzQyxDQUFDO0FBQzdFLGdCQUFnQixhQUFhLENBQUMsbUJBQW1CLEdBQUcsS0FBSyxDQUFDO0FBQzFELGdCQUFnQixhQUFhLENBQUMsSUFBSSxHQUFHLENBQUM7QUFDdEMsd0JBQXdCLE9BQU8sRUFBRSxhQUFhO0FBQzlDLHdCQUF3QixPQUFPLEVBQUUsVUFBVTtBQUMzQyx3QkFBd0IsWUFBWSxFQUFFLHdCQUF3QjtBQUM5RCxxQkFBcUIsRUFBRTtBQUN2Qix3QkFBd0IsT0FBTyxFQUFFLFVBQVU7QUFDM0Msd0JBQXdCLE9BQU8sRUFBRSxZQUFZO0FBQzdDLHdCQUF3QixZQUFZLEVBQUUsd0JBQXdCO0FBQzlELHFCQUFxQixFQUFFO0FBQ3ZCLHdCQUF3QixPQUFPLEVBQUUsbUNBQW1DO0FBQ3BFLHdCQUF3QixPQUFPLEVBQUUsWUFBWTtBQUM3Qyx3QkFBd0IsWUFBWSxFQUFFLHdCQUF3QjtBQUM5RCxxQkFBcUIsQ0FBQyxDQUFDO0FBQ3ZCLGFBQWE7QUFDYixpQkFBaUI7QUFDakIsZ0JBQWdCLGFBQWEsQ0FBQyxJQUFJLEdBQUcsQ0FBQztBQUN0Qyx3QkFBd0IsT0FBTyxFQUFFLFFBQVE7QUFDekMsd0JBQXdCLE9BQU8sRUFBRSxVQUFVO0FBQzNDLHdCQUF3QixZQUFZLEVBQUUsd0JBQXdCO0FBQzlELHFCQUFxQixFQUFFO0FBQ3ZCLHdCQUF3QixPQUFPLEVBQUUsU0FBUztBQUMxQyx3QkFBd0IsT0FBTyxFQUFFLFlBQVk7QUFDN0Msd0JBQXdCLFlBQVksRUFBRSx3QkFBd0I7QUFDOUQscUJBQXFCLEVBQUU7QUFDdkIsd0JBQXdCLE9BQU8sRUFBRSxTQUFTO0FBQzFDLHdCQUF3QixPQUFPLEVBQUUsWUFBWTtBQUM3Qyx3QkFBd0IsWUFBWSxFQUFFLHdCQUF3QjtBQUM5RCxxQkFBcUIsQ0FBQyxDQUFDO0FBQ3ZCLGFBQWE7QUFDYjtBQUNBLFlBQVksTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3BEO0FBQ0E7QUFDQSxZQUFZLE1BQU0sbUJBQW1CLEdBQUcsTUFBTTtBQUM5QyxpQkFBaUIsT0FBTyxDQUFDLHdCQUF3QixFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUM7QUFDdkUsaUJBQWlCLE9BQU8sQ0FBQyx3QkFBd0IsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDO0FBQ3ZFLGlCQUFpQixPQUFPLENBQUMsd0JBQXdCLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3hFO0FBQ0EsWUFBWSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekI7QUFDQTtBQUNBLEVBQUUsbUJBQW1CLENBQUM7QUFDdEI7QUFDQTtBQUNBLEVBQUUsRUFBRSxXQUFXLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUM7QUFDSDtBQUNBLFlBQVksTUFBTSxnQkFBZ0IsQ0FBQyw0QkFBNEIsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDaEYsWUFBWSxTQUFTLEVBQUUsQ0FBQztBQUN4QjtBQUNBLFlBQVksYUFBYSxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUNyRSxTQUFTO0FBQ1QsS0FBSztBQUNMLElBQUksT0FBTyxHQUFHLEVBQUU7QUFDaEI7QUFDQSxRQUFRLE1BQU0sSUFBSSxLQUFLLENBQUMsb0VBQW9FLENBQUMsQ0FBQztBQUM5RixLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sYUFBYSxHQUFHLE1BQU0sa0JBQWtCLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN2RTtBQUNBLElBQUksTUFBTSxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNoRztBQUNBLElBQUksTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUM5RDtBQUNBLElBQUksTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDekYsQ0FBQzs7QUNwRk0sTUFBTSxpQkFBaUIsR0FBRyxPQUFPLE9BQU8sS0FBSztBQUNwRDtBQUNBLElBQUksTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNuRDtBQUNBLElBQUksTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0FBQ0EsSUFBSSxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO0FBQy9CO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUU7QUFDNUM7QUFDQSxRQUFRLE1BQU0sR0FBRyxHQUFHLE1BQU0sY0FBYyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN6RDtBQUNBLFFBQVEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO0FBQzFFLFFBQVEsSUFBSSxHQUFHLE1BQU0sWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZDLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtBQUM3QyxRQUFRLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxxQ0FBcUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEUsUUFBUSxPQUFPO0FBQ2YsS0FBSztBQUNMLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQy9CLFFBQVEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO0FBQ3RFLFFBQVEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLDRDQUE0QyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xGLFFBQVEsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlDLFFBQVEsTUFBTSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7QUFDcEQ7QUFDQSxRQUFRLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztBQUM3RTtBQUNBLFFBQVEsSUFBSSxDQUFDLGlCQUFpQixFQUFFO0FBQ2hDLFlBQVksT0FBTyxDQUFDLEdBQUcsQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO0FBQzdFLFlBQVksT0FBTztBQUNuQixTQUFTO0FBQ1QsYUFBYTtBQUNiLFlBQVksT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLHlCQUF5QixFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUU7QUFDQSxZQUFZLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLGlCQUFpQixDQUFDLENBQUM7QUFDdkQsU0FBUztBQUNULEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUN0RCxJQUFJLElBQUk7QUFDUixRQUFRLE9BQU8sQ0FBQyxHQUFHLENBQUMsOERBQThELENBQUMsQ0FBQztBQUNwRixRQUFRLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxtQ0FBbUMsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLHVCQUF1QixFQUFFLElBQUksQ0FBQyxrSEFBa0gsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25QLFFBQVEsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEtBQUs7QUFDL0MsWUFBWSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFO0FBQzNDLGdCQUFnQixLQUFLO0FBQ3JCLGdCQUFnQixDQUFDLGFBQWEsQ0FBQztBQUMvQixnQkFBZ0IsSUFBSSxFQUFFLEtBQUs7QUFDM0IsZ0JBQWdCLElBQUksRUFBRSxXQUFXO0FBQ2pDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEQsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDLEdBQUcsRUFBRTtBQUN2RyxnQkFBZ0IsSUFBSSxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQztBQUNwRCxnQkFBZ0Isd0JBQXdCO0FBQ3hDLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxXQUFXLEdBQUcsQ0FBQyxjQUFjLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtBQUNuRSxnQkFBZ0IsYUFBYSxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDckQsZ0JBQWdCLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQztBQUNoQyxnQkFBZ0IsZUFBZSxFQUFFLDhGQUE4RjtBQUMvSCxnQkFBZ0IsT0FBTyxFQUFFLFNBQVM7QUFDbEMsYUFBYSxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7QUFDckMsWUFBWSxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksT0FBTyxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsd0JBQXdCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6SCxTQUFTLENBQUMsQ0FBQztBQUNYLFFBQVEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLHlGQUF5RixDQUFDLENBQUMsQ0FBQztBQUNqSCxLQUFLO0FBQ0wsWUFBWTtBQUNaLFFBQVEsTUFBTSxDQUFDLFVBQVUsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDN0Q7QUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLElBQUksRUFBRTtBQUN0QyxZQUFZLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUMxQyxTQUFTO0FBQ1QsS0FBSztBQUNMLENBQUM7O0FDL0VNLE1BQU0sUUFBUSxHQUFHO0FBQ3hCLElBQUksTUFBTSxFQUFFLDJ2QkFBMnZCO0FBQ3Z3QixJQUFJLFlBQVksRUFBRSx3Z0NBQXdnQztBQUMxaEMsSUFBSSxXQUFXLEVBQUUsK21CQUErbUI7QUFDaG9CLElBQUksUUFBUSxFQUFFLDJzQkFBMnNCO0FBQ3p0QixDQUFDLENBQUM7QUFDSyxNQUFNLFFBQVEsR0FBRywyYUFBMmE7O0FDRjViLE1BQU0sY0FBYyxHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEtBQUs7QUFDM0QsSUFBSSxNQUFNLGNBQWMsR0FBRyxPQUFPLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLFlBQVksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDO0FBQ3BHLElBQUksSUFBSSxLQUFLLEVBQUU7QUFDZixRQUFRLE9BQU8sY0FBYyxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNuRCxLQUFLO0FBQ0wsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQ2hELElBQUksT0FBTyxLQUFLLENBQUM7QUFDakIsUUFBUSxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUM7QUFDMUIsUUFBUSxPQUFPLEVBQUUsY0FBYyxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUM7QUFDcEQsUUFBUSxRQUFRLEVBQUUsSUFBSTtBQUN0QixLQUFLLENBQUMsQ0FBQztBQUNQLENBQUM7O0FDWk0sTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEdBQUcsRUFBRSxTQUFTLEtBQUs7QUFDdEQ7QUFDQSxJQUFJLE1BQU0sS0FBSyxHQUFHLFNBQVMsSUFBSSxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0FBQ3RFO0FBQ0EsSUFBSSxNQUFNLE9BQU8sR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMzRDtBQUNBLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2hDLENBQUM7O0FDVE0sTUFBTSxVQUFVLEdBQUcsWUFBWTtBQUN0QyxJQUFJLE9BQU8sTUFBTSxDQUFDO0FBQ2xCLFFBQVEsT0FBTyxFQUFFLENBQUMseURBQXlELENBQUM7QUFDNUUsUUFBUSxPQUFPLEVBQUU7QUFDakIsWUFBWSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTtBQUMzQyxZQUFZLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFO0FBQ3ZELFlBQVksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7QUFDL0MsWUFBWSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRTtBQUNyRCxTQUFTO0FBQ1QsS0FBSyxDQUFDLENBQUM7QUFDUCxDQUFDOztBQ1RNLE1BQU0saUJBQWlCLEdBQUcsT0FBTyxPQUFPLEVBQUUsS0FBSyxLQUFLO0FBQzNEO0FBQ0EsSUFBSSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUscUJBQXFCLEVBQUUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDO0FBQ3JFO0FBQ0EsSUFBSSxJQUFJLGlCQUFpQixJQUFJLHFCQUFxQixFQUFFO0FBQ3BELFFBQVEsT0FBTyxDQUFDLGlCQUFpQixFQUFFLHFCQUFxQixDQUFDLENBQUM7QUFDMUQsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ2hCO0FBQ0EsUUFBUSxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ2hFLFFBQVEsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLFFBQVEsQ0FBQztBQUNqRCxZQUFZLE9BQU8sRUFBRSxDQUFDLGlCQUFpQixDQUFDO0FBQ3hDLFlBQVksUUFBUSxFQUFFLENBQUMsS0FBSyxLQUFLLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUM7QUFDOUUsU0FBUyxDQUFDLENBQUM7QUFDWCxRQUFRLE1BQU0scUJBQXFCLEdBQUcsTUFBTSxRQUFRLENBQUM7QUFDckQsWUFBWSxPQUFPLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztBQUM1QyxZQUFZLFFBQVEsRUFBRSxDQUFDLEtBQUssS0FBSyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDO0FBQzlFLFNBQVMsQ0FBQyxDQUFDO0FBQ1gsUUFBUSxPQUFPLENBQUMsaUJBQWlCLEVBQUUscUJBQXFCLENBQUMsQ0FBQztBQUMxRCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQyxnSUFBZ0ksQ0FBQyxDQUFDLENBQUM7QUFDeEosQ0FBQzs7QUN2Qk0sTUFBTSxrQkFBa0IsR0FBRyxZQUFZO0FBQzlDLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUNoRCxJQUFJLE9BQU8sS0FBSyxDQUFDO0FBQ2pCLFFBQVEsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7QUFDbkMsUUFBUSxRQUFRLEVBQUUsSUFBSTtBQUN0QixLQUFLLENBQUMsQ0FBQztBQUNQLENBQUM7O0FDUE0sTUFBTSxrQkFBa0IsR0FBRyxDQUFDLElBQUksRUFBRSxRQUFRLEtBQUs7QUFDdEQsSUFBSSxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2pELElBQUksTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2QyxJQUFJLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDdkMsSUFBSSxhQUFhLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDcEQsQ0FBQzs7QUNGTSxNQUFNLDJCQUEyQixHQUFHLENBQUMsT0FBTyxLQUFLO0FBQ3hELElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLEVBQUUsMkJBQTJCLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSztBQUMxRixRQUFRLElBQUksT0FBTyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUFDLEVBQUU7QUFDMUUsWUFBWSxPQUFPLENBQUMsb0JBQW9CLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRSxTQUFTO0FBQ1QsYUFBYSxJQUFJLE9BQU8sQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFO0FBQ2hGLFlBQVksT0FBTyxDQUFDLHlCQUF5QixDQUFDLENBQUM7QUFDL0MsU0FBUztBQUNULGFBQWEsSUFBSSxPQUFPLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsZ0NBQWdDLENBQUMsRUFBRTtBQUMxRixZQUFZLE9BQU8sQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO0FBQ3pELFNBQVM7QUFDVCxhQUFhLElBQUksT0FBTyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxFQUFFO0FBQ3BFLFlBQVksT0FBTyxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZELFNBQVM7QUFDVCxhQUFhLElBQUksT0FBTyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRTtBQUN4RyxZQUFZLE9BQU8sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkUsU0FBUztBQUNULGFBQWEsSUFBSSxPQUFPLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFO0FBQ3hHLFlBQVksT0FBTyxDQUFDLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFLFNBQVM7QUFDVCxhQUFhLElBQUksT0FBTyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsRUFBRTtBQUMzRixZQUFZLE9BQU8sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2hGLFNBQVM7QUFDVCxhQUFhLElBQUksT0FBTyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUMsRUFBRTtBQUNsRyxZQUFZLE9BQU8sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsbUdBQW1HLENBQUMsQ0FBQztBQUMzSSxTQUFTO0FBQ1QsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQixLQUFLLENBQUMsQ0FBQztBQUNQLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsK0JBQStCLENBQUMsQ0FBQztBQUM5RCxDQUFDOztBQzlCTSxNQUFNLHFCQUFxQixHQUFHLENBQUMsR0FBRyxFQUFFLGlCQUFpQixFQUFFLHFCQUFxQixLQUFLO0FBQ3hGLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsdUJBQXVCLENBQUMsRUFBRSxDQUFDO0FBQ3ZEO0FBQ0Esa0JBQWtCLEVBQUUsaUJBQWlCLENBQUM7QUFDdEMsc0JBQXNCLEVBQUUscUJBQXFCLENBQUM7QUFDOUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ25CLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsdUJBQXVCLENBQUMsQ0FBQztBQUN0RCxDQUFDOztBQ1JNLE1BQU0sYUFBYSxHQUFHLE9BQU8sR0FBRyxFQUFFLE9BQU8sS0FBSztBQUNyRDtBQUNBLElBQUksTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsQ0FBQztBQUM5QztBQUNBLElBQUksTUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQztBQUNyRSxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7QUFDekIsUUFBUSxNQUFNLElBQUksS0FBSyxDQUFDLENBQUMsK0dBQStHLENBQUMsQ0FBQyxDQUFDO0FBQzNJLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDMUUsSUFBSSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3pDO0FBQ0EsSUFBSSxNQUFNLGdCQUFnQixHQUFHLE9BQU8sRUFBRSxZQUFZLEVBQUUsS0FBSyxDQUFDO0FBQzFELElBQUksSUFBSSxnQkFBZ0IsRUFBRTtBQUMxQixRQUFRLE1BQU0sZUFBZSxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzFELFFBQVEsSUFBSSxlQUFlLEVBQUU7QUFDN0IsWUFBWSxPQUFPLGVBQWUsQ0FBQztBQUNuQyxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLElBQUksS0FBSyxDQUFDLENBQUMsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLHVFQUF1RSxDQUFDLENBQUMsQ0FBQztBQUM1SCxDQUFDOztBQ2JNLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxPQUFPLEVBQUUsMkJBQTJCLEtBQUs7QUFDaEY7QUFDQSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3JDO0FBQ0EsSUFBSSxNQUFNLFNBQVMsR0FBRyxNQUFNLGFBQWEsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLDJCQUEyQixFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNuRztBQUNBLElBQUksTUFBTSxDQUFDLGlCQUFpQixFQUFFLHFCQUFxQixDQUFDLEdBQUcsTUFBTSxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvRztBQUNBLElBQUksTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsSUFBSSxNQUFNLGtCQUFrQixFQUFFLENBQUM7QUFDMUU7QUFDQSxJQUFJLE1BQU0sT0FBTyxHQUFHLE1BQU0sY0FBYyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDMUY7QUFDQSxJQUFJLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQ3JDO0FBQ0EsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNwQyxJQUFJLE1BQU0sZ0JBQWdCLENBQUMsd0RBQXdELEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BHLElBQUksU0FBUyxFQUFFLENBQUM7QUFDaEI7QUFDQSxJQUFJLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0FBQy9FO0FBQ0EsSUFBSSwyQkFBMkIsQ0FBQztBQUNoQyxRQUFRLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztBQUNoQyxRQUFRLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRztBQUN4QixRQUFRLEdBQUcsRUFBRSxTQUFTO0FBQ3RCLFFBQVEsV0FBVztBQUNuQixRQUFRLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVTtBQUN0QyxRQUFRLE9BQU87QUFDZixRQUFRLEtBQUs7QUFDYixLQUFLLENBQUMsQ0FBQztBQUNQO0FBQ0EsSUFBSSxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM3QjtBQUNBLElBQUksTUFBTSxPQUFPLEdBQUcsTUFBTSxhQUFhLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNwRTtBQUNBLElBQUksT0FBTztBQUNYLFFBQVEsR0FBRyxFQUFFLFNBQVM7QUFDdEIsUUFBUSxXQUFXO0FBQ25CLFFBQVEsaUJBQWlCO0FBQ3pCLFFBQVEscUJBQXFCO0FBQzdCLFFBQVEsT0FBTztBQUNmLFFBQVEsT0FBTztBQUNmLEtBQUssQ0FBQztBQUNOLENBQUM7O0FDOUNNLE1BQU0sY0FBYyxHQUFHLE9BQU8sT0FBTyxLQUFLO0FBQ2pEO0FBQ0EsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNoQztBQUNBLElBQUksTUFBTSxTQUFTLEdBQUcsTUFBTSxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzVFO0FBQ0EsSUFBSSxNQUFNLENBQUMsaUJBQWlCLEVBQUUscUJBQXFCLENBQUMsR0FBRyxNQUFNLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9HO0FBQ0EsSUFBSSxxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsaUJBQWlCLEVBQUUscUJBQXFCLENBQUMsQ0FBQztBQUMvRTtBQUNBLElBQUksTUFBTSxnQkFBZ0IsQ0FBQyw0QkFBNEIsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEUsSUFBSSxTQUFTLEVBQUUsQ0FBQztBQUNoQjtBQUNBLElBQUksTUFBTSxPQUFPLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ25FO0FBQ0EsSUFBSSxNQUFNLGdCQUFnQixDQUFDLHdCQUF3QixFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNwRSxDQUFDOztBQ3RCTSxNQUFNLEdBQUcsR0FBRztBQUNuQixJQUFJLEVBQUUsRUFBRSxDQUFDO0FBQ1QsSUFBSSxJQUFJLEVBQUUsTUFBTTtBQUNoQixJQUFJLFNBQVMsRUFBRSxxQkFBcUI7QUFDcEMsSUFBSSxPQUFPLEVBQUUscUJBQXFCO0FBQ2xDLElBQUksS0FBSyxFQUFFLDhDQUE4QztBQUN6RCxJQUFJLFdBQVcsRUFBRSwyRUFBMkU7QUFDNUYsSUFBSSxpQkFBaUIsRUFBRSxVQUFVO0FBQ2pDLElBQUksT0FBTyxFQUFFLFlBQVk7QUFDekIsQ0FBQzs7QUNMTSxNQUFNLFdBQVcsR0FBRyxPQUFPLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLEdBQUcsSUFBSSxLQUFLO0FBQ3pHO0FBQ0EsSUFBSSxNQUFNLEtBQUssR0FBRyxNQUFNLFdBQVcsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN0RTtBQUNBLElBQUksSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFO0FBQ3hCLFFBQVEsT0FBTyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkVBQTJFLENBQUMsQ0FBQztBQUM1RyxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxXQUFXLEdBQUcsUUFBUSxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hILElBQUksT0FBTyxVQUFVLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7QUFDNUMsUUFBUSxHQUFHLFdBQVcsR0FBRyxFQUFFLGVBQWUsRUFBRSxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQyxFQUFFLEdBQUcsU0FBUztBQUNoRixLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTTtBQUNsQixRQUFRLE9BQU8sSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7QUFDM0UsUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQjtBQUNBLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsS0FBSztBQUM1QjtBQUNBLFFBQVEsSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxLQUFLLEdBQUcsQ0FBQyxFQUFFO0FBQ2pHO0FBQ0EsWUFBWSxPQUFPLFVBQVUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtBQUNwRCxnQkFBZ0IsZUFBZSxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2hELGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNO0FBQzFCLGdCQUFnQixPQUFPLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO0FBQ25GLGdCQUFnQixPQUFPLElBQUksQ0FBQztBQUM1QixhQUFhLENBQUMsQ0FBQztBQUNmO0FBQ0EsU0FBUztBQUNULGFBQWE7QUFDYixZQUFZLE1BQU0sR0FBRyxDQUFDO0FBQ3RCLFNBQVM7QUFDVCxLQUFLLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQztBQUNLLE1BQU0sd0JBQXdCLEdBQUcsT0FBTyxNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxHQUFHLElBQUksS0FBSztBQUN2RyxJQUFJLE1BQU0sV0FBVyxHQUFHLFFBQVEsSUFBSSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoSCxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7QUFDbkUsSUFBSSxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFDMUIsSUFBSSxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDbEIsSUFBSSxPQUFPLENBQUMsU0FBUyxJQUFJLEtBQUssR0FBRyxHQUFHLEVBQUU7QUFDdEMsUUFBUSxNQUFNLElBQUksT0FBTyxDQUFDLE9BQU8sSUFBSSxVQUFVLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDaEUsUUFBUSxPQUFPLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLHdDQUF3QyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BGLFFBQVEsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxXQUFXLEdBQUc7QUFDcEcsWUFBWSxPQUFPLEVBQUUsRUFBRSxlQUFlLEVBQUUsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUMsRUFBRTtBQUNoRSxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbkUsUUFBUSxTQUFTLEdBQUcsSUFBSSxFQUFFLE9BQU8sQ0FBQztBQUNsQyxRQUFRLEtBQUssRUFBRSxDQUFDO0FBQ2hCLEtBQUs7QUFDTCxJQUFJLE9BQU8sU0FBUyxDQUFDO0FBQ3JCLENBQUMsQ0FBQztBQUNLLE1BQU0sZUFBZSxHQUFHLE9BQU8sTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEdBQUcsSUFBSSxLQUFLO0FBQ3ZHLElBQUksTUFBTSxXQUFXLEdBQUcsUUFBUSxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hILElBQUksTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUMsRUFBRTtBQUMxRixRQUFRLE9BQU8sRUFBRTtBQUNqQixZQUFZLG1CQUFtQixFQUFFLFVBQVU7QUFDM0MsWUFBWSxjQUFjLEVBQUUsa0NBQWtDO0FBQzlELFlBQVksR0FBRyxXQUFXLEdBQUcsRUFBRSxlQUFlLEVBQUUsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUU7QUFDN0UsU0FBUztBQUNULEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNuQyxJQUFJLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDaEMsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLFVBQVUsS0FBSyxPQUFPLEVBQUU7QUFDL0MsUUFBUSxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDaEgsWUFBWSxPQUFPLEVBQUU7QUFDckIsZ0JBQWdCLG1CQUFtQixFQUFFLFVBQVU7QUFDL0MsZ0JBQWdCLGNBQWMsRUFBRSxrQ0FBa0M7QUFDbEUsZ0JBQWdCLEdBQUcsV0FBVyxHQUFHLEVBQUUsZUFBZSxFQUFFLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFO0FBQ2pGLGFBQWE7QUFDYixTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTTtBQUN0QixZQUFZLE9BQU8sSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7QUFDeEUsWUFBWSxPQUFPLElBQUksQ0FBQztBQUN4QixTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJO0FBQ3hCLFlBQVksSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDbkMsZ0JBQWdCLElBQUksR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsT0FBTyxLQUFLLDZDQUE2QyxFQUFFO0FBQ25HLG9CQUFvQixPQUFPLElBQUksQ0FBQztBQUNoQyxpQkFBaUI7QUFDakIsYUFBYTtBQUNiLFlBQVksT0FBTyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUNBQWlDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDM0UsWUFBWSxPQUFPLEtBQUssQ0FBQztBQUN6QixTQUFTLENBQUMsQ0FBQztBQUNYLEtBQUs7QUFDTCxJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLENBQUMsQ0FBQztBQUNGLE1BQU0sV0FBVyxHQUFHLE9BQU8sT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE9BQU8sS0FBSztBQUN6RSxJQUFJLE1BQU0sV0FBVyxHQUFHLFFBQVEsSUFBSSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoSCxJQUFJLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLG9DQUFvQyxDQUFDLEVBQUUsV0FBVyxHQUFHO0FBQ3JHLFFBQVEsT0FBTyxFQUFFLEVBQUUsZUFBZSxFQUFFLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDLEVBQUU7QUFDNUQsS0FBSyxHQUFHLFNBQVMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsS0FBSztBQUN4QyxRQUFRLElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxLQUFLLEdBQUcsRUFBRTtBQUMvRCxZQUFZLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEVBQUU7QUFDN0UsZ0JBQWdCLE9BQU8sRUFBRSxFQUFFLGVBQWUsRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFO0FBQzdELGFBQWEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUk7QUFDNUIsZ0JBQWdCLE9BQU8sSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLHVFQUF1RSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3JILGdCQUFnQixPQUFPLElBQUksQ0FBQztBQUM1QixhQUFhLENBQUMsQ0FBQztBQUNmLFlBQVksT0FBTyxRQUFRLENBQUM7QUFDNUIsU0FBUztBQUNULFFBQVEsT0FBTyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUVBQXVFLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDN0csUUFBUSxPQUFPLElBQUksQ0FBQztBQUNwQixLQUFLLENBQUMsQ0FBQztBQUNQLElBQUksT0FBTyxRQUFRLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDM0QsQ0FBQyxDQUFDO0FBQ0YsTUFBTSxVQUFVLEdBQUcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLEtBQUs7QUFDMUQsSUFBSSxNQUFNLFFBQVEsR0FBRyxJQUFJLFFBQVEsRUFBRSxDQUFDO0FBQ3BDLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUMxRCxJQUFJLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLHlCQUF5QixFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsT0FBTyxFQUFFO0FBQzFGLFlBQVksR0FBRyxRQUFRLENBQUMsVUFBVSxFQUFFO0FBQ3BDLFlBQVksR0FBRyxPQUFPO0FBQ3RCLFNBQVMsRUFBRSxDQUFDLENBQUM7QUFDYixDQUFDOztBQzNHTSxNQUFNLGFBQWEsR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLLEtBQUs7QUFDakQsSUFBSSxNQUFNLFVBQVUsR0FBRyxPQUFPLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLFlBQVksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDO0FBQ2hHLElBQUksSUFBSSxLQUFLLEVBQUU7QUFDZixRQUFRLE9BQU8sVUFBVSxJQUFJLFFBQVEsQ0FBQztBQUN0QyxLQUFLO0FBQ0wsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQy9DLElBQUksT0FBTyxLQUFLLENBQUM7QUFDakIsUUFBUSxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUM7QUFDMUIsUUFBUSxPQUFPLEVBQUUsVUFBVSxJQUFJLFFBQVE7QUFDdkMsUUFBUSxRQUFRLEVBQUUsSUFBSTtBQUN0QixLQUFLLENBQUMsQ0FBQztBQUNQLENBQUM7O0FDREQsTUFBTUMsYUFBVyxHQUFHLElBQUksU0FBUyxDQUFDO0FBQ2xDLElBQUksTUFBTSxFQUFFLGlEQUFpRDtBQUM3RCxJQUFJLFVBQVUsRUFBRSxDQUFDLEtBQUssS0FBSztBQUMzQixRQUFRLE1BQU0sS0FBSyxHQUFHQSxhQUFXLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2xELFFBQVEsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUNBLGFBQVcsQ0FBQyxRQUFRLEVBQUUsR0FBRyxLQUFLLElBQUksRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzdFLFFBQVEsT0FBTyxVQUFVLEtBQUssS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztBQUMzRSxLQUFLO0FBQ0wsSUFBSSxVQUFVLEVBQUUsSUFBSTtBQUNwQixDQUFDLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ25CLE1BQU0sS0FBSyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksR0FBRyxHQUFHLEtBQUs7QUFDckMsSUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQzNCLElBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsQ0FBQyxDQUFDO0FBQ0ssTUFBTSxtQkFBbUIsR0FBRyxPQUFPLE9BQU8sS0FBSztBQUN0RDtBQUNBLElBQUksTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUM7QUFDakQsSUFBSSxNQUFNQyxVQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUM7QUFDakQsSUFBSSxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUM7QUFDekM7QUFDQSxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssRUFBRTtBQUN2QjtBQUNBO0FBQ0EsUUFBUSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTtBQUM3QixZQUFZLE1BQU0sSUFBSSxLQUFLLENBQUMsaUZBQWlGLENBQUMsQ0FBQztBQUMvRyxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE1BQU0sVUFBVSxHQUFHLE1BQU0sYUFBYSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9FO0FBQ0EsUUFBUSxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO0FBQ25DO0FBQ0E7QUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUU7QUFDaEQ7QUFDQSxZQUFZLE1BQU0sR0FBRyxHQUFHLE1BQU0sY0FBYyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM3RDtBQUNBLFlBQVksSUFBSSxHQUFHLE1BQU0sWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNDLFNBQVM7QUFDVDtBQUNBLFFBQVEsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtBQUNqRCxZQUFZLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxxQ0FBcUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEUsWUFBWSxPQUFPO0FBQ25CLFNBQVM7QUFDVCxRQUFRLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN0QixRQUFRLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQztBQUMzQixRQUFRLElBQUksc0JBQXNCLEdBQUcsS0FBSyxDQUFDO0FBQzNDLFFBQVEsT0FBTyxDQUFDLHNCQUFzQixJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUU7QUFDdEQsWUFBWSxJQUFJO0FBQ2hCLGdCQUFnQixJQUFJLEtBQUssS0FBSyxDQUFDLEVBQUU7QUFDakMsb0JBQW9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQyxzQkFBc0IsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLDhEQUE4RCxDQUFDLENBQUMsQ0FBQztBQUN4RyxpQkFBaUI7QUFDakIscUJBQXFCO0FBQ3JCLG9CQUFvQixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakMsb0NBQW9DLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyx3RUFBd0UsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0ksaUJBQWlCO0FBQ2pCO0FBQ0EsZ0JBQWdCRCxhQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxQyxnQkFBZ0IsT0FBTyxHQUFHLFdBQVcsQ0FBQyxNQUFNQSxhQUFXLENBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDM0U7QUFDQSxnQkFBZ0IsTUFBTSxXQUFXLEdBQUcsTUFBTSxXQUFXLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFQyxVQUFRLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzdHLGdCQUFnQixJQUFJLENBQUMsV0FBVyxFQUFFO0FBQ2xDLG9CQUFvQixNQUFNLElBQUksS0FBSyxDQUFDLG9GQUFvRixDQUFDLENBQUM7QUFDMUgsaUJBQWlCO0FBQ2pCO0FBQ0EsZ0JBQWdCLElBQUksT0FBTyxDQUFDLG1CQUFtQixFQUFFO0FBQ2pEO0FBQ0Esb0JBQW9CLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFO0FBQzFDLHdCQUF3QixPQUFPLENBQUMsR0FBRyxDQUFDLHVFQUF1RSxDQUFDLENBQUM7QUFDN0c7QUFDQSxxQkFBcUI7QUFDckIseUJBQXlCLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFO0FBQ25ELHdCQUF3QixPQUFPLENBQUMsR0FBRyxDQUFDLHVFQUF1RSxDQUFDLENBQUM7QUFDN0c7QUFDQSxxQkFBcUI7QUFDckIseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLE1BQU0sR0FBRyxHQUFHLE1BQU0sYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMzRjtBQUNBLHdCQUF3QixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxDQUFDO0FBQ2xHLHdCQUF3QixNQUFNLGNBQWMsQ0FBQztBQUM3Qyw0QkFBNEIsR0FBRztBQUMvQiw0QkFBNEIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO0FBQ3BELDRCQUE0QixXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7QUFDNUQsNEJBQTRCLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxpQkFBaUI7QUFDeEUsNEJBQTRCLHFCQUFxQixFQUFFLE9BQU8sQ0FBQyxxQkFBcUI7QUFDaEYsNEJBQTRCLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztBQUNoRCx5QkFBeUIsQ0FBQyxDQUFDO0FBQzNCLHFCQUFxQjtBQUNyQixpQkFBaUI7QUFDakI7QUFDQSxnQkFBZ0IsTUFBTSxTQUFTLEdBQUcsTUFBTSx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFQSxVQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDN0gsZ0JBQWdCLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDaEMsb0JBQW9CLE1BQU0sSUFBSSxLQUFLLENBQUMsNkdBQTZHLENBQUMsQ0FBQztBQUNuSixpQkFBaUI7QUFDakI7QUFDQSxnQkFBZ0IsTUFBTSxVQUFVLEdBQUcsTUFBTSxlQUFlLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUVBLFVBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNqSSxnQkFBZ0IsSUFBSSxDQUFDLFVBQVUsRUFBRTtBQUNqQyxvQkFBb0IsTUFBTSxJQUFJLEtBQUssQ0FBQyw2SEFBNkgsQ0FBQyxDQUFDO0FBQ25LLGlCQUFpQjtBQUNqQixnQkFBZ0Isc0JBQXNCLEdBQUcsV0FBVyxJQUFJLFNBQVMsSUFBSSxVQUFVLENBQUM7QUFDaEYsYUFBYTtBQUNiLFlBQVksT0FBTyxHQUFHLEVBQUU7QUFDeEIsZ0JBQWdCLElBQUksS0FBSyxJQUFJLENBQUMsRUFBRTtBQUNoQztBQUNBLG9CQUFvQixNQUFNLElBQUksT0FBTyxDQUFDLE9BQU8sSUFBSSxVQUFVLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDNUUsaUJBQWlCO0FBQ2pCLHFCQUFxQjtBQUNyQixvQkFBb0IsTUFBTSxHQUFHLENBQUM7QUFDOUIsaUJBQWlCO0FBQ2pCLGFBQWE7QUFDYixvQkFBb0I7QUFDcEIsZ0JBQWdCLEtBQUssRUFBRSxDQUFDO0FBQ3hCO0FBQ0EsZ0JBQWdCRCxhQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbkMsZ0JBQWdCLElBQUksT0FBTyxFQUFFO0FBQzdCLG9CQUFvQixhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDM0MsaUJBQWlCO0FBQ2pCLGFBQWE7QUFDYixTQUFTO0FBQ1Q7QUFDQSxRQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFO0FBQzlCLFlBQVksTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzFDLFNBQVM7QUFDVDtBQUNBLFFBQVEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLCtCQUErQixFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RTtBQUNBLEtBQUs7QUFDTCxTQUFTO0FBQ1Q7QUFDQSxRQUFRLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNyQjtBQUNBO0FBQ0EsQ0FBQyxDQUFDLENBQUM7QUFDSDtBQUNBLFFBQVEsTUFBTSxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUM7QUFDcEMsWUFBWSxPQUFPLEVBQUUsQ0FBQyxtQ0FBbUMsQ0FBQztBQUMxRCxZQUFZLE9BQU8sRUFBRSxNQUFNO0FBQzNCLFlBQVksT0FBTyxFQUFFO0FBQ3JCLGdCQUFnQixFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTtBQUN0RCxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7QUFDbkQsYUFBYTtBQUNiLFNBQVMsQ0FBQyxDQUFDO0FBQ1g7QUFDQSxRQUFRLElBQUksTUFBTSxLQUFLLE1BQU0sRUFBRTtBQUMvQjtBQUNBLFlBQVksTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUM7QUFDekMsZ0JBQWdCLE9BQU8sRUFBRSxtREFBbUQ7QUFDNUUsZ0JBQWdCLE9BQU8sRUFBRSxPQUFPLENBQUMsTUFBTTtBQUN2QyxnQkFBZ0IsUUFBUSxFQUFFLElBQUk7QUFDOUIsYUFBYSxDQUFDLENBQUM7QUFDZjtBQUNBLFlBQVksTUFBTSxVQUFVLEdBQUcsTUFBTSxhQUFhLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkY7QUFDQSxZQUFZLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLEdBQUcsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEdBQUcsS0FBSyxHQUFHLE1BQU0sTUFBTSxDQUFDO0FBQzdGLGdCQUFnQixPQUFPLEVBQUUsQ0FBQyxnQ0FBZ0MsQ0FBQztBQUMzRCxnQkFBZ0IsT0FBTyxFQUFFLE9BQU87QUFDaEMsZ0JBQWdCLE9BQU8sRUFBRTtBQUN6QixvQkFBb0IsRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtBQUNqRSxvQkFBb0IsRUFBRSxJQUFJLEVBQUUsdUJBQXVCLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRTtBQUNuRSxpQkFBaUI7QUFDakIsYUFBYSxDQUFDLENBQUM7QUFDZjtBQUNBLFlBQVksTUFBTSxhQUFhLEdBQUcsUUFBUSxLQUFLLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUM7QUFDMUYsZ0JBQWdCLE9BQU8sRUFBRSx1REFBdUQ7QUFDaEYsZ0JBQWdCLFFBQVEsRUFBRSxJQUFJO0FBQzlCLGFBQWEsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7QUFDbEM7QUFDQSxZQUFZLE1BQU0sYUFBYSxHQUFHLFFBQVEsS0FBSyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLE1BQU1FLFFBQWMsQ0FBQztBQUNuRyxnQkFBZ0IsT0FBTyxFQUFFLHVEQUF1RDtBQUNoRixnQkFBZ0IsUUFBUSxFQUFFLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDO0FBQzdFLGFBQWEsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7QUFDbEM7QUFDQSxZQUFZLE1BQU0sUUFBUSxHQUFHLFFBQVEsS0FBSyxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLE1BQU1BLFFBQWMsQ0FBQztBQUN2RixnQkFBZ0IsT0FBTyxFQUFFLG9FQUFvRTtBQUM3RixnQkFBZ0IsUUFBUSxFQUFFLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDO0FBQzdFLGFBQWEsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7QUFDN0I7QUFDQSxZQUFZLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxPQUFPLENBQUM7QUFDdEQsZ0JBQWdCLE9BQU8sRUFBRSxrREFBa0Q7QUFDM0UsYUFBYSxDQUFDLENBQUM7QUFDZjtBQUNBLFlBQVksT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLHNCQUFzQixFQUFFLFFBQVEsQ0FBQyw4REFBOEQsQ0FBQyxDQUFDLENBQUM7QUFDbEc7QUFDQSxZQUFZRixhQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN0QyxZQUFZLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxNQUFNQSxhQUFXLENBQUMsU0FBUyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0U7QUFDQSxZQUFZLE1BQU0sR0FBRyxHQUFHLE1BQU0sY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3ZEO0FBQ0EsWUFBWSxNQUFNLElBQUksR0FBRyxNQUFNLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqRDtBQUNBLFlBQVksTUFBTSxXQUFXLEdBQUcsTUFBTSxXQUFXLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDeEgsWUFBWSxJQUFJLENBQUMsV0FBVyxFQUFFO0FBQzlCLGdCQUFnQixNQUFNLElBQUksS0FBSyxDQUFDLG9GQUFvRixDQUFDLENBQUM7QUFDdEgsYUFBYTtBQUNiO0FBQ0EsWUFBWSxJQUFJLG1CQUFtQixFQUFFO0FBQ3JDO0FBQ0EsZ0JBQWdCLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLElBQUksTUFBTSxVQUFVLEVBQUUsQ0FBQztBQUN0RTtBQUNBLGdCQUFnQixNQUFNLENBQUMsaUJBQWlCLEVBQUUscUJBQXFCLENBQUMsR0FBRyxNQUFNLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkg7QUFDQSxnQkFBZ0IsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsSUFBSSxNQUFNLGtCQUFrQixFQUFFLENBQUM7QUFDdEY7QUFDQSxnQkFBZ0IsTUFBTSxHQUFHLEdBQUcsTUFBTSxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25GO0FBQ0EsZ0JBQWdCLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUM7QUFDMUYsZ0JBQWdCLE1BQU0sY0FBYyxDQUFDO0FBQ3JDLG9CQUFvQixHQUFHO0FBQ3ZCLG9CQUFvQixPQUFPLEVBQUUsT0FBTztBQUNwQyxvQkFBb0IsV0FBVyxFQUFFLFdBQVc7QUFDNUMsb0JBQW9CLGlCQUFpQixFQUFFLGlCQUFpQjtBQUN4RCxvQkFBb0IscUJBQXFCLEVBQUUscUJBQXFCO0FBQ2hFLG9CQUFvQixLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7QUFDeEMsaUJBQWlCLENBQUMsQ0FBQztBQUNuQixhQUFhO0FBQ2I7QUFDQSxZQUFZLE1BQU0sU0FBUyxHQUFHLE1BQU0sd0JBQXdCLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM3SCxZQUFZLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDNUIsZ0JBQWdCLE1BQU0sSUFBSSxLQUFLLENBQUMsNkdBQTZHLENBQUMsQ0FBQztBQUMvSSxhQUFhO0FBQ2I7QUFDQSxZQUFZLE1BQU0sVUFBVSxHQUFHLE1BQU0sZUFBZSxDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2pJLFlBQVksSUFBSSxDQUFDLFVBQVUsRUFBRTtBQUM3QixnQkFBZ0IsTUFBTSxJQUFJLEtBQUssQ0FBQyw2SEFBNkgsQ0FBQyxDQUFDO0FBQy9KLGFBQWE7QUFDYjtBQUNBLFlBQVksTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzFDO0FBQ0EsWUFBWUEsYUFBVyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQy9CLFlBQVksYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ25DO0FBQ0EsWUFBWSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsK0JBQStCLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkU7QUFDQSxTQUFTO0FBQ1QsYUFBYTtBQUNiO0FBQ0EsWUFBWSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekI7QUFDQTtBQUNBO0FBQ0EsRUFBRSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUM7QUFDcEIsQ0FBQyxDQUFDLENBQUM7QUFDSDtBQUNBLFlBQVksTUFBTSxtQkFBbUIsR0FBRyxNQUFNLE9BQU8sQ0FBQztBQUN0RCxnQkFBZ0IsT0FBTyxFQUFFLENBQUMsdURBQXVELENBQUM7QUFDbEYsYUFBYSxDQUFDLENBQUM7QUFDZjtBQUNBLFlBQVksSUFBSSxDQUFDLG1CQUFtQixFQUFFO0FBQ3RDLGdCQUFnQixNQUFNLElBQUksS0FBSyxDQUFDLGlGQUFpRixDQUFDLENBQUM7QUFDbkgsYUFBYTtBQUNiLFNBQVM7QUFDVCxLQUFLO0FBQ0wsQ0FBQzs7QUMxUU0sTUFBTSxrQkFBa0IsR0FBRyxPQUFPLE9BQU8sS0FBSztBQUNyRCxJQUFJLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEVBQUU7QUFDdEUsUUFBUSxPQUFPLEVBQUU7QUFDakIsWUFBWSxjQUFjLEVBQUUsa0JBQWtCO0FBQzlDLFlBQVksZUFBZSxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ3JGLFNBQVM7QUFDVCxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUN6QixJQUFJLE1BQU0sV0FBVyxHQUFHLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssR0FBRyxJQUFJLFFBQVEsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ25GLElBQUksTUFBTSxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLFdBQVcsQ0FBQztBQUM5RSxJQUFJLE1BQU0sVUFBVSxHQUFHLGVBQWUsS0FBSyxHQUFHLElBQUksT0FBTyxJQUFJLFVBQVUsSUFBSSxTQUFTLENBQUM7QUFDckYsSUFBSSxPQUFPLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM5QyxDQUFDOztBQ0hELE1BQU0sV0FBVyxHQUFHLElBQUksU0FBUyxDQUFDO0FBQ2xDLElBQUksTUFBTSxFQUFFLDZEQUE2RDtBQUN6RSxJQUFJLFVBQVUsRUFBRSxJQUFJO0FBQ3BCLENBQUMsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDWixNQUFNLE9BQU8sR0FBRyxPQUFPLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxLQUFLO0FBQzVEO0FBQ0EsSUFBSSxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLG9CQUFvQixDQUFDLENBQUMsRUFBRTtBQUMzRDtBQUNBLFFBQVEsTUFBTSx3QkFBd0IsR0FBRyxLQUFLLElBQUksTUFBTSxPQUFPLENBQUM7QUFDaEUsWUFBWSxPQUFPLEVBQUUsNkVBQTZFO0FBQ2xHLFNBQVMsQ0FBQyxDQUFDO0FBQ1g7QUFDQSxRQUFRLElBQUksd0JBQXdCLEVBQUU7QUFDdEMsWUFBWSxPQUFPLENBQUMsR0FBRyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7QUFDN0QsWUFBWSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxvQkFBb0IsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDM0U7QUFDQSxTQUFTO0FBQ1QsYUFBYTtBQUNiLFlBQVksT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLHdGQUF3RixDQUFDLENBQUMsQ0FBQztBQUNwSCxZQUFZLE9BQU87QUFDbkIsU0FBUztBQUNULEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsQ0FBQztBQUM5QztBQUNBLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNWO0FBQ0EsSUFBSSxJQUFJLEtBQUssS0FBSyxHQUFHLEVBQUU7QUFDdkI7QUFDQSxRQUFRLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLG1DQUFtQyxDQUFDLEVBQUUsU0FBUyxFQUFFO0FBQ3RHLFlBQVksT0FBTyxFQUFFO0FBQ3JCLGdCQUFnQixjQUFjLEVBQUUsa0JBQWtCO0FBQ2xELGdCQUFnQixlQUFlLEVBQUUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDekYsYUFBYTtBQUNiLFNBQVMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQzdCO0FBQ0EsUUFBUSxJQUFJLFFBQVEsS0FBSyxJQUFJLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUU7QUFDMUQ7QUFDQTtBQUNBLFlBQVksTUFBTSxJQUFJLEtBQUssQ0FBQyxzRUFBc0UsQ0FBQyxDQUFDO0FBQ3BHLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sU0FBUyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDM0M7QUFDQSxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ2xEO0FBQ0EsSUFBSSxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7QUFDM0I7QUFDQSxJQUFJLE9BQU8sQ0FBQyxVQUFVLEVBQUU7QUFDeEI7QUFDQSxRQUFRLE1BQU0sQ0FBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxHQUFHLE1BQU0sa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbkY7QUFDQSxRQUFRLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDdkI7QUFDQSxZQUFZLElBQUksV0FBVyxDQUFDLFdBQVcsRUFBRSxHQUFHLFdBQVcsQ0FBQyxRQUFRLEVBQUUsRUFBRTtBQUNwRTtBQUNBLGdCQUFnQixXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRTtBQUMxQyxvQkFBb0IsU0FBUyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLFNBQVMsSUFBSSxJQUFJLElBQUksRUFBRSxFQUFFO0FBQ2xHLGlCQUFpQixDQUFDLENBQUM7QUFDbkI7QUFDQSxnQkFBZ0IsTUFBTSxJQUFJLE9BQU8sQ0FBQyxPQUFPLElBQUksVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDakY7QUFDQTtBQUNBLGFBQWE7QUFDYixpQkFBaUIsSUFBSSxDQUFDLEtBQUssRUFBRTtBQUM3QjtBQUNBLGdCQUFnQixXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbkM7QUFDQSxnQkFBZ0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdCO0FBQ0EsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFLFdBQVcsSUFBSSx1Q0FBdUMsQ0FBQztBQUNyRTtBQUNBO0FBQ0EsQ0FBQyxDQUFDLENBQUM7QUFDSDtBQUNBLGdCQUFnQixVQUFVLEdBQUcsTUFBTSxPQUFPLENBQUMsRUFBRSxPQUFPLEVBQUUsd0NBQXdDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xHO0FBQ0EsYUFBYTtBQUNiLGlCQUFpQjtBQUNqQjtBQUNBLGdCQUFnQixNQUFNLElBQUksS0FBSyxDQUFDLCtEQUErRCxDQUFDLENBQUM7QUFDakcsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNULGFBQWEsSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUMzQjtBQUNBLFlBQVksV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQy9CO0FBQ0EsWUFBWSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekI7QUFDQSxFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUUsV0FBVyxJQUFJLHVDQUF1QyxDQUFDO0FBQ3JFLENBQUMsQ0FBQyxDQUFDO0FBQ0g7QUFDQSxZQUFZLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQztBQUNoRSxTQUFTO0FBQ1Q7QUFDQSxRQUFRLFVBQVUsR0FBRyxRQUFRLENBQUM7QUFDOUIsS0FBSztBQUNMO0FBQ0EsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM1RDtBQUNBLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtBQUN0QjtBQUNBLFFBQVEsTUFBTSxJQUFJLEtBQUssQ0FBQyw2REFBNkQsQ0FBQyxDQUFDO0FBQ3ZGLEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZCO0FBQ0EsSUFBSSxJQUFJLGlCQUFpQixHQUFHLEtBQUssQ0FBQztBQUNsQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQjtBQUNBLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxFQUFFLFdBQVcsQ0FBQztBQUN4QyxDQUFDLENBQUMsQ0FBQztBQUNIO0FBQ0EsSUFBSSxPQUFPLENBQUMsaUJBQWlCLElBQUksVUFBVSxHQUFHLENBQUMsRUFBRTtBQUNqRCxRQUFRLElBQUk7QUFDWjtBQUNBLFlBQVksSUFBSSxVQUFVLEtBQUssQ0FBQyxFQUFFO0FBQ2xDO0FBQ0EsZ0JBQWdCLElBQUksS0FBSyxFQUFFO0FBQzNCO0FBQ0E7QUFDQSxvQkFBb0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxxRUFBcUUsQ0FBQyxDQUFDO0FBQzNHLGlCQUFpQjtBQUNqQjtBQUNBLGdCQUFnQixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLENBQUMsQ0FBQztBQUNIO0FBQ0EsZ0JBQWdCLE1BQU0sZ0JBQWdCLENBQUMsMkNBQTJDLENBQUMsQ0FBQztBQUNwRixhQUFhO0FBQ2I7QUFDQSxZQUFZLE1BQU0sT0FBTyxHQUFHLE1BQU0sU0FBUyxDQUFDLE1BQU0sQ0FBQztBQUNuRCxnQkFBZ0IsUUFBUSxHQUFHLENBQUMsS0FBSyxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFDcEQsZ0JBQWdCLElBQUksRUFBRSxDQUFDLHFEQUFxRCxDQUFDO0FBQzdFLGFBQWEsQ0FBQyxDQUFDO0FBQ2Y7QUFDQSxZQUFZLE1BQU0sSUFBSSxHQUFHLE1BQU0sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ2pELFlBQVksTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNsRSxZQUFZLElBQUk7QUFDaEI7QUFDQSxnQkFBZ0IsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUQ7QUFDQSxnQkFBZ0IsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsc0JBQXNCLENBQUMsQ0FBQztBQUNsRixnQkFBZ0IsSUFBSSxvQkFBb0IsRUFBRTtBQUMxQyxvQkFBb0IsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzdFLG9CQUFvQixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDN0Usb0JBQW9CLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3JFLGlCQUFpQjtBQUNqQixxQkFBcUI7QUFDckIsb0JBQW9CLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN4RSxvQkFBb0IsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3hFLG9CQUFvQixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDaEUsaUJBQWlCO0FBQ2pCLGdCQUFnQixNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxjQUFjLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ2xJO0FBQ0EsZ0JBQWdCLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNyRixnQkFBZ0IsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDakU7QUFDQSxnQkFBZ0IsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLHlCQUF5QixDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDeEY7QUFDQSxnQkFBZ0IsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLHFCQUFxQixDQUFDLENBQUM7QUFDbEU7QUFDQSxnQkFBZ0IsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQ3RDLG9CQUFvQixJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxvQkFBb0IsQ0FBQztBQUMvRCxpQkFBaUIsQ0FBQyxDQUFDO0FBQ25CO0FBQ0EsZ0JBQWdCLGlCQUFpQixHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLG9CQUFvQixDQUFDLENBQUMsQ0FBQztBQUN0RixhQUFhO0FBQ2IsWUFBWSxPQUFPLEdBQUcsRUFBRTtBQUN4QjtBQUNBO0FBQ0EsZ0JBQWdCLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQztBQUN0QyxvQkFBb0IsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkYsaUJBQWlCLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNwQyxnQkFBZ0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQyxnQkFBZ0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLHdFQUF3RSxDQUFDLENBQUMsQ0FBQztBQUN4RyxhQUFhO0FBQ2Isb0JBQW9CO0FBQ3BCO0FBQ0EsZ0JBQWdCLE1BQU0sT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RDO0FBQ0EsZ0JBQWdCLE1BQU0sS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ3hELGdCQUFnQixNQUFNLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUN4RCxnQkFBZ0IsTUFBTSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDMUQsZ0JBQWdCLE1BQU0sS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQzFELGFBQWE7QUFDYixTQUFTO0FBQ1QsUUFBUSxPQUFPLEdBQUcsRUFBRTtBQUNwQixZQUFZLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0IsWUFBWSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsd0VBQXdFLENBQUMsQ0FBQyxDQUFDO0FBQ3BHLFNBQVM7QUFDVCxnQkFBZ0I7QUFDaEIsWUFBWSxVQUFVLEVBQUUsQ0FBQztBQUN6QixTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0EsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7QUFDNUIsUUFBUSxNQUFNLElBQUksS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUM7QUFDekUsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakI7QUFDQSx1QkFBdUIsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEUsQ0FBQzs7QUM3TU0sTUFBTSxtQkFBbUIsR0FBRyxPQUFPLE9BQU8sRUFBRSxRQUFRLEtBQUs7QUFDaEU7QUFDQSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2pFO0FBQ0EsSUFBSSxNQUFNLEdBQUcsR0FBRyxNQUFNLGFBQWEsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEU7QUFDQSxJQUFJLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUM1RDtBQUNBLElBQUksU0FBUyxDQUFDLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ2pEO0FBQ0EsSUFBSSxNQUFNLENBQUMsaUJBQWlCLEVBQUUscUJBQXFCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsSUFBSSxPQUFPLENBQUMscUJBQXFCO0FBQ2xILFVBQVUsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLHFCQUFxQixDQUFDO0FBQ3BFLFVBQVUsTUFBTSxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNsRTtBQUNBLElBQUkscUJBQXFCLENBQUMsR0FBRyxFQUFFLGlCQUFpQixFQUFFLHFCQUFxQixDQUFDLENBQUM7QUFDekU7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUU7QUFDMUI7QUFDQSxRQUFRLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFDbkQsUUFBUSxNQUFNLGdCQUFnQixDQUFDLGlGQUFpRixFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNqSSxRQUFRLFNBQVMsRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsUUFBUSwyQkFBMkIsQ0FBQztBQUNwQyxZQUFZLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztBQUNwQyxZQUFZLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRztBQUM1QixZQUFZLEdBQUc7QUFDZixZQUFZLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVztBQUM1QyxZQUFZLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVTtBQUMxQyxZQUFZLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztBQUNwQyxZQUFZLEtBQUssRUFBRSxDQUFDO0FBQ3BCLFNBQVMsQ0FBQyxDQUFDO0FBQ1g7QUFDQSxRQUFRLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLEtBQUs7QUFDTDtBQUNBLElBQUksTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSSxNQUFNLGFBQWEsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2pGO0FBQ0EsSUFBSSxNQUFNLG1CQUFtQixDQUFDO0FBQzlCLFFBQVEsT0FBTztBQUNmLFFBQVEsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO0FBQzlCLFFBQVEsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO0FBQ2hDLFFBQVEsT0FBTyxFQUFFLE9BQU8sQ0FBQyxVQUFVO0FBQ25DLFFBQVEsUUFBUSxFQUFFLE9BQU87QUFDekIsUUFBUSxRQUFRLEVBQUUsT0FBTztBQUN6QixRQUFRLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxtQkFBbUI7QUFDeEQsUUFBUSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7QUFDNUIsS0FBSyxDQUFDLENBQUM7QUFDUDtBQUNBLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDcEM7QUFDQSxJQUFJLE1BQU0sT0FBTyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3hEO0FBQ0EsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNsQyxDQUFDOztBQ2pFTSxNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQUssS0FBSztBQUN0QyxJQUFJLElBQUksS0FBSyxFQUFFO0FBQ2YsUUFBUSxPQUFPLEtBQUssQ0FBQztBQUNyQixLQUFLO0FBQ0wsSUFBSSxPQUFPLEtBQUssQ0FBQztBQUNqQixRQUFRLE9BQU8sRUFBRSxDQUFDLDZCQUE2QixDQUFDO0FBQ2hELFFBQVEsT0FBTyxFQUFFLEtBQUs7QUFDdEIsUUFBUSxRQUFRLEVBQUUsSUFBSTtBQUN0QixLQUFLLENBQUMsQ0FBQztBQUNQLENBQUM7O0FDVE0sTUFBTSxlQUFlLEdBQUcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxLQUFLO0FBQ25ELElBQUksTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNqRCxJQUFJLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzVCLENBQUM7O0FDRk0sTUFBTSxVQUFVLEdBQUcsQ0FBQyxPQUFPLEtBQUs7QUFDdkM7QUFDQSxJQUFJLElBQUksVUFBVSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLHFCQUFxQixDQUFDLENBQUMsR0FBRyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ3ZGLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtBQUNyQjtBQUNBLFFBQVEsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUk7QUFDN0M7QUFDQSxZQUFZLElBQUksVUFBVSxFQUFFO0FBQzVCLGdCQUFnQixPQUFPO0FBQ3ZCLGFBQWE7QUFDYjtBQUNBLFlBQVksTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN4RDtBQUNBLFlBQVksSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixDQUFDLENBQUMsRUFBRTtBQUM5RjtBQUNBLGdCQUFnQixVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNqRCxhQUFhO0FBQ2IsU0FBUyxDQUFDLENBQUM7QUFDWCxLQUFLO0FBQ0w7QUFDQSxJQUFJLElBQUksVUFBVSxJQUFJLElBQUksRUFBRTtBQUM1QixRQUFRLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQywyREFBMkQsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRyxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sT0FBTyxHQUFHO0FBQ3BCLFFBQVEsTUFBTSxFQUFFLFVBQVU7QUFDMUIsUUFBUSxvQkFBb0IsRUFBRSxTQUFTO0FBQ3ZDLFFBQVEseUJBQXlCLEVBQUUsU0FBUztBQUM1QyxRQUFRLFVBQVUsRUFBRSxTQUFTO0FBQzdCLFFBQVEsV0FBVyxFQUFFLFNBQVM7QUFDOUIsUUFBUSxTQUFTLEVBQUUsU0FBUztBQUM1QixRQUFRLDBCQUEwQixFQUFFLFNBQVM7QUFDN0MsS0FBSyxDQUFDO0FBQ047QUFDQSxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLHFCQUFxQixDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUs7QUFDdkUsUUFBUSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUk7QUFDL0MsWUFBWSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDekMsZ0JBQWdCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3BFLGdCQUFnQixPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLGFBQWE7QUFDYixTQUFTLENBQUMsQ0FBQztBQUNYLEtBQUssQ0FBQyxDQUFDO0FBQ1AsSUFBSSxPQUFPLE9BQU8sQ0FBQztBQUNuQixDQUFDOztBQzNDTSxNQUFNLG1CQUFtQixHQUFHLE9BQU8sR0FBRyxFQUFFLE9BQU8sRUFBRSxLQUFLLEtBQUs7QUFDbEU7QUFDQSxJQUFJLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN0RDtBQUNBLElBQUksSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDMUI7QUFDQSxRQUFRLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ3RELFFBQVEsSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUN0QjtBQUNBLFlBQVksSUFBSSxDQUFDLEtBQUssRUFBRTtBQUN4QjtBQUNBLGdCQUFnQixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0I7QUFDQSxFQUFFLEVBQUUsSUFBSSxDQUFDO0FBQ1QsQ0FBQyxDQUFDLENBQUM7QUFDSDtBQUNBLGdCQUFnQixNQUFNLFNBQVMsR0FBRyxNQUFNLE9BQU8sQ0FBQztBQUNoRCxvQkFBb0IsT0FBTyxFQUFFLDZDQUE2QztBQUMxRSxvQkFBb0IsT0FBTyxFQUFFLElBQUk7QUFDakMsaUJBQWlCLENBQUMsQ0FBQztBQUNuQjtBQUNBLGdCQUFnQixJQUFJLENBQUMsU0FBUyxFQUFFO0FBQ2hDLG9CQUFvQixNQUFNLElBQUksS0FBSyxDQUFDLHlFQUF5RSxDQUFDLENBQUM7QUFDL0csaUJBQWlCO0FBQ2pCLGFBQWE7QUFDYjtBQUNBLFlBQVksTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzlDLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUN6QztBQUNBLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQzs7QUNqQ00sTUFBTSx3QkFBd0IsR0FBRyxPQUFPLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEtBQUssR0FBRyxFQUFFLEVBQUUsS0FBSyxLQUFLO0FBQzVILElBQUksTUFBTSxVQUFVLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDeEMsSUFBSSxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQ2hGLElBQUksTUFBTSxJQUFJLEdBQUcsUUFBUSxLQUFLLE1BQU0sR0FBRyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQ3BELElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCLG1EQUFtRCxFQUFFLE9BQU8sQ0FBQztBQUM3RDtBQUNBLHlCQUF5QixFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUM7QUFDM0MseUJBQXlCLEVBQUUsUUFBUSxDQUFDO0FBQ3BDLHFCQUFxQixFQUFFLElBQUksQ0FBQztBQUM1Qix3QkFBd0IsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO0FBQzlDLGtCQUFrQixFQUFFLFFBQVEsQ0FBQztBQUM3QixrQkFBa0IsRUFBRSxTQUFTLEdBQUcsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUNwRCx5QkFBeUIsRUFBRSxTQUFTLElBQUksU0FBUyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDOUQsMEJBQTBCLEVBQUUsS0FBSyxDQUFDO0FBQ2xDO0FBQ0E7QUFDQSxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLENBQUMsQ0FBQyxDQUFDO0FBQ0gsSUFBSSxNQUFNLGdCQUFnQixDQUFDLDRCQUE0QixFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2hFLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLO0FBQ3JFLFFBQVEsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLDJCQUEyQixDQUFDLEVBQUU7QUFDMUQsWUFBWSxPQUFPLENBQUMsMEJBQTBCLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbEUsU0FBUztBQUNULGFBQWEsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLDJCQUEyQixDQUFDLEVBQUU7QUFDL0QsWUFBWSxPQUFPLENBQUMsMEJBQTBCLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUMzRCxTQUFTO0FBQ1QsYUFBYSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLEVBQUU7QUFDM0QsWUFBWSxPQUFPLENBQUMsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNuRCxTQUFTO0FBQ1QsYUFBYSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEVBQUU7QUFDeEQsWUFBWSxPQUFPLENBQUMsbUJBQW1CLEVBQUUsU0FBUyxHQUFHLFFBQVEsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQzNFLFNBQVM7QUFDVCxhQUFhLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLHlCQUF5QixDQUFDLENBQUMsRUFBRTtBQUMvRCxZQUFZLE9BQU8sQ0FBQywwQkFBMEIsRUFBRSxTQUFTLElBQUksU0FBUyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3JGLFNBQVM7QUFDVCxhQUFhLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsRUFBRTtBQUN4RCxZQUFZLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ3BELFNBQVM7QUFDVCxhQUFhLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLHlCQUF5QixDQUFDLENBQUMsRUFBRTtBQUMvRCxZQUFZLE9BQU8sQ0FBQywyQkFBMkIsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQsU0FBUztBQUNULFFBQVEsT0FBTyxJQUFJLENBQUM7QUFDcEIsS0FBSyxDQUFDLENBQUM7QUFDUCxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQiwyQkFBMkIsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM1QyxDQUFDOztBQy9CTSxNQUFNLGtCQUFrQixHQUFHLE9BQU8sT0FBTyxFQUFFLFFBQVEsS0FBSztBQUMvRDtBQUNBLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDakU7QUFDQSxJQUFJLE1BQU0sR0FBRyxHQUFHLE1BQU0sYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0RTtBQUNBLElBQUksTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RjtBQUNBLElBQUksSUFBSSxVQUFVLENBQUMsWUFBWSxDQUFDLEVBQUU7QUFDbEM7QUFDQSxRQUFRLE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUN6RCxRQUFRLElBQUksZUFBZSxDQUFDLG9CQUFvQixDQUFDLEtBQUssSUFBSSxFQUFFO0FBQzVEO0FBQ0EsWUFBWSxNQUFNLHdCQUF3QixHQUFHLE9BQU8sQ0FBQyxLQUFLLElBQUksTUFBTSxPQUFPLENBQUM7QUFDNUUsZ0JBQWdCLE9BQU8sRUFBRSxxRkFBcUY7QUFDOUcsYUFBYSxDQUFDLENBQUM7QUFDZjtBQUNBLFlBQVksSUFBSSx3QkFBd0IsRUFBRTtBQUMxQyxnQkFBZ0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO0FBQzlEO0FBQ0EsZ0JBQWdCLE1BQU0sQ0FBQyxZQUFZLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUN0RDtBQUNBLGFBQWE7QUFDYixpQkFBaUI7QUFDakIsZ0JBQWdCLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxxQkFBcUIsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLDREQUE0RCxDQUFDLENBQUMsQ0FBQztBQUNqSSxnQkFBZ0IsT0FBTztBQUN2QixhQUFhO0FBQ2I7QUFDQSxTQUFTO0FBQ1QsYUFBYTtBQUNiO0FBQ0EsWUFBWSxNQUFNLENBQUMsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDbEQsU0FBUztBQUNULEtBQUs7QUFDTDtBQUNBLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUN0RDtBQUNBLElBQUksTUFBTSxDQUFDLGlCQUFpQixFQUFFLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLElBQUksT0FBTyxDQUFDLHFCQUFxQjtBQUNsSCxVQUFVLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQztBQUNwRSxVQUFVLE1BQU0saUJBQWlCLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbEU7QUFDQSxJQUFJLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxpQkFBaUIsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0FBQ3pFO0FBQ0E7QUFDQSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFO0FBQzFCO0FBQ0EsUUFBUSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0FBQ25ELFFBQVEsTUFBTSxnQkFBZ0IsQ0FBQyxpRkFBaUYsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakksUUFBUSxTQUFTLEVBQUUsQ0FBQztBQUNwQjtBQUNBLFFBQVEsMkJBQTJCLENBQUM7QUFDcEMsWUFBWSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87QUFDcEMsWUFBWSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7QUFDNUIsWUFBWSxHQUFHO0FBQ2YsWUFBWSxXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7QUFDNUMsWUFBWSxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVU7QUFDMUMsWUFBWSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87QUFDcEMsWUFBWSxLQUFLLEVBQUUsQ0FBQztBQUNwQixTQUFTLENBQUMsQ0FBQztBQUNYO0FBQ0EsUUFBUSxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQixLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3BDO0FBQ0EsSUFBSSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxJQUFJLE1BQU0sYUFBYSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDakY7QUFDQSxJQUFJLE1BQU0sUUFBUSxHQUFHLE1BQU0sV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0RDtBQUNBLElBQUksTUFBTSx3QkFBd0IsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNwSDtBQUNBLElBQUksTUFBTSxjQUFjLEdBQUcsTUFBTSxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDMUY7QUFDQSxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssS0FBSyxZQUFZLEVBQUU7QUFDeEM7QUFDQSxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDbEMsWUFBWSxPQUFPO0FBQ25CLFlBQVksTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO0FBQ2xDLFlBQVksT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO0FBQ3BDLFlBQVksT0FBTyxFQUFFLE9BQU8sQ0FBQyxVQUFVO0FBQ3ZDLFlBQVksUUFBUSxFQUFFLE9BQU87QUFDN0IsWUFBWSxRQUFRLEVBQUUsT0FBTztBQUM3QixZQUFZLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxtQkFBbUI7QUFDNUQsWUFBWSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7QUFDaEMsU0FBUyxDQUFDLENBQUM7QUFDWCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE1BQU0sT0FBTyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM3RDtBQUNBLElBQUksTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQy9DO0FBQ0EsSUFBSSxJQUFJLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLElBQUksRUFBRTtBQUNoRDtBQUNBLFFBQVEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLFdBQVcsRUFBRSxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUN6SCxRQUFRLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQztBQUM5RCxLQUFLO0FBQ0w7QUFDQSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQywwQkFBMEIsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0QsSUFBSSxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ2hFO0FBQ0EsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNsQyxDQUFDOztBQ3ZITSxNQUFNLHFCQUFxQixHQUFHLENBQUMsS0FBSyxLQUFLO0FBQ2hELElBQUksUUFBUSxLQUFLO0FBQ2pCLFFBQVEsS0FBSyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDbEMsUUFBUSxLQUFLLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNsQyxRQUFRLEtBQUssV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ25DLEtBQUs7QUFDTCxDQUFDOztBQ2FNLE1BQU0sa0JBQWtCLEdBQUcsT0FBTyxLQUFLLEVBQUUsT0FBTyxFQUFFLFFBQVEsS0FBSztBQUN0RTtBQUNBLElBQUksTUFBTSxLQUFLLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0M7QUFDQSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDekQ7QUFDQSxJQUFJLE1BQU0sR0FBRyxHQUFHLE1BQU0sYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN2RTtBQUNBLElBQUksTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hGO0FBQ0EsSUFBSSxJQUFJLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRTtBQUNsQztBQUNBLFFBQVEsTUFBTSxlQUFlLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3pELFFBQVEsSUFBSSxlQUFlLENBQUMsb0JBQW9CLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFDNUQ7QUFDQSxZQUFZLE1BQU0sd0JBQXdCLEdBQUcsT0FBTyxDQUFDLEtBQUssSUFBSSxNQUFNLE9BQU8sQ0FBQztBQUM1RSxnQkFBZ0IsT0FBTyxFQUFFLHFGQUFxRjtBQUM5RyxhQUFhLENBQUMsQ0FBQztBQUNmO0FBQ0EsWUFBWSxJQUFJLHdCQUF3QixFQUFFO0FBQzFDLGdCQUFnQixPQUFPLENBQUMsR0FBRyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7QUFDOUQ7QUFDQSxnQkFBZ0IsTUFBTSxDQUFDLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ3REO0FBQ0EsYUFBYTtBQUNiLGlCQUFpQjtBQUNqQixnQkFBZ0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxvRUFBb0UsQ0FBQyxDQUFDLENBQUM7QUFDakksZ0JBQWdCLE9BQU87QUFDdkIsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNULGFBQWE7QUFDYjtBQUNBLFlBQVksTUFBTSxDQUFDLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ2xELFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQSxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDdEQ7QUFDQSxJQUFJLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxxQkFBcUIsQ0FBQyxHQUFHLE1BQU0saUJBQWlCLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0c7QUFDQSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFDL0MsSUFBSSxNQUFNLGdCQUFnQixDQUFDLGlGQUFpRixFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM3SCxJQUFJLFNBQVMsRUFBRSxDQUFDO0FBQ2hCO0FBQ0EsSUFBSSxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsaUJBQWlCLEVBQUUscUJBQXFCLENBQUMsQ0FBQztBQUN6RTtBQUNBLElBQUksMkJBQTJCLENBQUM7QUFDaEMsUUFBUSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87QUFDaEMsUUFBUSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7QUFDeEIsUUFBUSxHQUFHO0FBQ1gsUUFBUSxXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7QUFDeEMsUUFBUSxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVU7QUFDdEMsUUFBUSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87QUFDaEMsUUFBUSxLQUFLO0FBQ2IsS0FBSyxDQUFDLENBQUM7QUFDUDtBQUNBLElBQUksTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkI7QUFDQSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3BDO0FBQ0EsSUFBSSxNQUFNLE9BQU8sR0FBRyxNQUFNLGFBQWEsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzlEO0FBQ0EsSUFBSSxNQUFNLG1CQUFtQixDQUFDO0FBQzlCLFFBQVEsT0FBTztBQUNmLFFBQVEsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO0FBQzlCLFFBQVEsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO0FBQ2hDLFFBQVEsT0FBTyxFQUFFLE9BQU8sQ0FBQyxVQUFVO0FBQ25DLFFBQVEsUUFBUSxFQUFFLE9BQU87QUFDekIsUUFBUSxRQUFRLEVBQUUsT0FBTztBQUN6QixRQUFRLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxtQkFBbUI7QUFDeEQsUUFBUSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7QUFDNUIsS0FBSyxDQUFDLENBQUM7QUFDUDtBQUNBLElBQUksTUFBTSxRQUFRLEdBQUcsTUFBTSxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3REO0FBQ0EsSUFBSSxNQUFNLHdCQUF3QixDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzFJO0FBQ0EsSUFBSSxNQUFNLGNBQWMsR0FBRyxNQUFNLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMxRjtBQUNBLElBQUksTUFBTSxPQUFPLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzdEO0FBQ0EsSUFBSSxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDL0M7QUFDQSxJQUFJLElBQUksT0FBTyxDQUFDLG9CQUFvQixDQUFDLEtBQUssSUFBSSxFQUFFO0FBQ2hEO0FBQ0EsUUFBUSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxXQUFXLEVBQUUsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDakgsUUFBUSxNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7QUFDN0QsS0FBSztBQUNMO0FBQ0EsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsMEJBQTBCLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdELElBQUksTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNoRTtBQUNBLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbEMsQ0FBQzs7QUMzR00sTUFBTSxlQUFlLEdBQUcsT0FBTyxPQUFPLEtBQUs7QUFDbEQ7QUFDQSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2pDO0FBQ0EsSUFBSSxNQUFNLFNBQVMsR0FBRyxNQUFNLGFBQWEsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDNUU7QUFDQSxJQUFJLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxxQkFBcUIsQ0FBQyxHQUFHLE1BQU0saUJBQWlCLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0c7QUFDQSxJQUFJLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0FBQy9FO0FBQ0EsSUFBSSxNQUFNLGdCQUFnQixDQUFDLDRCQUE0QixFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4RSxJQUFJLFNBQVMsRUFBRSxDQUFDO0FBQ2hCO0FBQ0EsSUFBSSxNQUFNLFNBQVMsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3BEO0FBQ0EsSUFBSSxNQUFNLGdCQUFnQixDQUFDLHdCQUF3QixFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNwRSxDQUFDOztBQ3BCTSxNQUFNLGNBQWMsR0FBRyxDQUFDLFlBQVksS0FBSztBQUNoRCxJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO0FBQ3RDLElBQUksTUFBTSxpQkFBaUIsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDOUQsSUFBSSxNQUFNLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxRixJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdELENBQUM7O0FDTE0sTUFBTSxXQUFXLEdBQUcsTUFBTTtBQUNqQyxJQUFJLE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxjQUFjLENBQUMsNEJBQTRCLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN4RixJQUFJLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDekMsSUFBSSxPQUFPLFFBQVEsQ0FBQztBQUNwQixDQUFDOztBQ0pELE1BQU1HLFVBQVEsR0FBRyxXQUFXLEVBQUUsQ0FBQztBQUN4QixNQUFNLHdCQUF3QixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDL0MsSUFBSSxZQUFZO0FBQ2hCLElBQUksT0FBTztBQUNYLElBQUksT0FBTztBQUNYLENBQUMsQ0FBQyxDQUFDO0FBQ0ksTUFBTSxzQkFBc0IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQzdDLElBQUksV0FBVztBQUNmLElBQUksU0FBUztBQUNiLElBQUksVUFBVTtBQUNkLElBQUksWUFBWTtBQUNoQixJQUFJLGdCQUFnQjtBQUNwQixDQUFDLENBQUMsQ0FBQztBQUNJLE1BQU0sZUFBZSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDeEMsSUFBSSxJQUFJLEVBQUUsd0JBQXdCO0FBQ2xDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbEYsSUFBSSxRQUFRLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDeEMsSUFBSSxRQUFRLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDeEMsSUFBSSxRQUFRLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDeEMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFDckMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFDckMsSUFBSSxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFDdkMsSUFBSSxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUN0QixDQUFDLENBQUMsQ0FBQztBQUM4QixlQUFlLENBQUMsTUFBTSxDQUFDO0FBQ3hELElBQUksSUFBSSxFQUFFLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksSUFBSSxLQUFLLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztBQUMxSixJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSUEsVUFBUSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO0FBQ3pILElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0FBQ2hHLElBQUksTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLElBQUksS0FBSyx1QkFBdUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQztBQUN4RyxDQUFDLEVBQUU7QUFDeUIsZUFBZSxDQUFDLE1BQU0sQ0FBQztBQUNuRCxJQUFJLElBQUksRUFBRSx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLElBQUksS0FBSyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7QUFDaEosSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUlBLFVBQVEsQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztBQUNwSCxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztBQUNoRyxJQUFJLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxJQUFJLEtBQUssdUJBQXVCLENBQUMsQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUM7QUFDeEcsQ0FBQyxFQUFFO0FBQ3lCLGVBQWUsQ0FBQyxNQUFNLENBQUM7QUFDbkQsSUFBSSxJQUFJLEVBQUUsd0JBQXdCLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxJQUFJLEtBQUssd0JBQXdCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0FBQ2hKLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJQSxVQUFRLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7QUFDcEgsSUFBSSxPQUFPLEVBQUUsc0JBQXNCLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztBQUN4RCxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztBQUNoRyxJQUFJLFFBQVEsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztBQUNwRSxJQUFJLFFBQVEsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQztBQUNqRCxJQUFJLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxJQUFJLEtBQUssOENBQThDLENBQUMsQ0FBQyxPQUFPLENBQUMsOENBQThDLENBQUM7QUFDdEosQ0FBQzs7QUM1Q00sTUFBTSxxQkFBcUIsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQzVDLElBQUksTUFBTTtBQUNWLElBQUksWUFBWTtBQUNoQixJQUFJLFdBQVc7QUFDZixJQUFJLFFBQVE7QUFDWixDQUFDLENBQUMsQ0FBQztBQUMrQixDQUFDLENBQUMsTUFBTSxDQUFDO0FBQzNDLElBQUksSUFBSSxFQUFFLHFCQUFxQjtBQUMvQixJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztBQUNyQyxJQUFJLFFBQVEsRUFBRSx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDO0FBQzVELElBQUksV0FBVyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO0FBQzdDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7QUFDakYsSUFBSSxXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUMzQixJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztBQUNwQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztBQUNwQyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztBQUNyQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUM1QixJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFO0FBQ3hCLElBQUksZUFBZSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDL0IsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQ2hDLElBQUksU0FBUyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQ3pDLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQ3JDLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQ3JDLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0FBQ3BDLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDbkIsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUNuQixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDWCxJQUFJLFdBQVcsRUFBRSxJQUFJO0FBQ3JCLElBQUksR0FBRyxFQUFFLElBQUk7QUFDYixJQUFJLE9BQU8sRUFBRSxJQUFJO0FBQ2pCLElBQUksZUFBZSxFQUFFLElBQUk7QUFDekIsSUFBSSxnQkFBZ0IsRUFBRSxJQUFJO0FBQzFCLElBQUksR0FBRyxFQUFFLElBQUk7QUFDYixJQUFJLEdBQUcsRUFBRSxJQUFJO0FBQ2IsQ0FBQzs7QUNsQ00sTUFBTSxvQkFBb0IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQzNDLElBQUksVUFBVTtBQUNkLElBQUksWUFBWTtBQUNoQixDQUFDLENBQUMsQ0FBQztBQUNJLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUMzQyxJQUFJLFVBQVU7QUFDZCxJQUFJLFVBQVU7QUFDZCxJQUFJLFdBQVc7QUFDZixDQUFDLENBQUMsQ0FBQztBQUNJLE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDbEMsSUFBSSxNQUFNO0FBQ1YsSUFBSSxvQkFBb0I7QUFDeEIsSUFBSSx5QkFBeUI7QUFDN0IsSUFBSSxVQUFVO0FBQ2QsSUFBSSxXQUFXO0FBQ2YsSUFBSSxTQUFTO0FBQ2IsSUFBSSwwQkFBMEI7QUFDOUIsQ0FBQyxDQUFDLENBQUM7QUFDSSxNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ2xDLElBQUksYUFBYTtBQUNqQixJQUFJLGFBQWE7QUFDakIsQ0FBQyxDQUFDLENBQUM7QUFDNEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUN4QyxJQUFJLE1BQU0sRUFBRSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN2SCxJQUFJLG9CQUFvQixFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDcEMsSUFBSSxTQUFTLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUN6QixJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQ3ZCLElBQUksT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLHFCQUFxQixFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdMLENBQUMsRUFBRTtBQUM2QixDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ3pDLElBQUksT0FBTyxFQUFFLHFCQUFxQjtBQUNsQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQ25CLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDbkIsSUFBSSxXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUMzQixJQUFJLFVBQVUsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFO0FBQzNCLElBQUksT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDdkIsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUNyQixJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUNYLElBQUksR0FBRyxFQUFFLElBQUk7QUFDYixJQUFJLFVBQVUsRUFBRSxJQUFJO0FBQ3BCLElBQUksT0FBTyxFQUFFLElBQUk7QUFDakIsSUFBSSxLQUFLLEVBQUUsSUFBSTtBQUNmLENBQUMsRUFBRTtBQUNJLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUM1QyxJQUFJLE9BQU8sRUFBRSxxQkFBcUI7QUFDbEMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUNuQixJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQ25CLElBQUksV0FBVyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDM0IsSUFBSSxVQUFVLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRTtBQUMzQixJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQ3ZCLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDckIsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRTtBQUN0QixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDWCxJQUFJLEdBQUcsRUFBRSxJQUFJO0FBQ2IsSUFBSSxXQUFXLEVBQUUsSUFBSTtBQUNyQixJQUFJLFVBQVUsRUFBRSxJQUFJO0FBQ3BCLElBQUksT0FBTyxFQUFFLElBQUk7QUFDakIsSUFBSSxLQUFLLEVBQUUsSUFBSTtBQUNmLElBQUksS0FBSyxFQUFFLElBQUk7QUFDZixDQUFDLENBQUMsQ0FBQztBQUNJLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUMvQyxJQUFJLE9BQU8sRUFBRSxxQkFBcUI7QUFDbEMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUNuQixJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQ25CLElBQUksU0FBUyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDekIsSUFBSSxXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUMzQixJQUFJLFVBQVUsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFO0FBQzNCLElBQUksT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDdkIsSUFBSSxNQUFNLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUN0QixJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQ3ZCLElBQUksVUFBVSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDMUIsSUFBSSxtQkFBbUIsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFO0FBQ3BDLElBQUksU0FBUyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDekIsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRTtBQUN0QixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDWCxJQUFJLEdBQUcsRUFBRSxJQUFJO0FBQ2IsSUFBSSxTQUFTLEVBQUUsSUFBSTtBQUNuQixJQUFJLFVBQVUsRUFBRSxJQUFJO0FBQ3BCLElBQUksT0FBTyxFQUFFLElBQUk7QUFDakIsSUFBSSxNQUFNLEVBQUUsSUFBSTtBQUNoQixJQUFJLE9BQU8sRUFBRSxJQUFJO0FBQ2pCLElBQUksU0FBUyxFQUFFLElBQUk7QUFDbkIsSUFBSSxtQkFBbUIsRUFBRSxJQUFJO0FBQzdCLElBQUksS0FBSyxFQUFFLElBQUk7QUFDZixDQUFDLENBQUMsQ0FBQztBQUNJLE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUNsRCxJQUFJLEtBQUssRUFBRSxvQkFBb0I7QUFDL0IsSUFBSSxPQUFPLEVBQUUscUJBQXFCO0FBQ2xDLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDbkIsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUNuQixJQUFJLFNBQVMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQ3pCLElBQUksV0FBVyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDM0IsSUFBSSxVQUFVLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRTtBQUMzQixJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQ3ZCLElBQUksaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUNqQyxJQUFJLHFCQUFxQixFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDckMsSUFBSSxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUN2QixJQUFJLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0FBQ2pDLElBQUksT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7QUFDbEMsSUFBSSxVQUFVLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUMxQixJQUFJLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUU7QUFDcEMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRTtBQUN0QixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDWCxJQUFJLEdBQUcsRUFBRSxJQUFJO0FBQ2IsSUFBSSxVQUFVLEVBQUUsSUFBSTtBQUNwQixJQUFJLE9BQU8sRUFBRSxJQUFJO0FBQ2pCLElBQUksaUJBQWlCLEVBQUUsSUFBSTtBQUMzQixJQUFJLHFCQUFxQixFQUFFLElBQUk7QUFDL0IsSUFBSSxVQUFVLEVBQUUsSUFBSTtBQUNwQixJQUFJLG1CQUFtQixFQUFFLElBQUk7QUFDN0IsSUFBSSxLQUFLLEVBQUUsSUFBSTtBQUNmLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEtBQUs7QUFDL0IsSUFBSSxJQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUssWUFBWSxLQUFLLE9BQU8sS0FBSyxDQUFDLE1BQU0sS0FBSyxXQUFXLElBQUksT0FBTyxLQUFLLENBQUMsT0FBTyxLQUFLLFdBQVcsQ0FBQyxFQUFFO0FBQ3ZILFFBQVEsR0FBRyxDQUFDLFFBQVEsQ0FBQztBQUNyQixZQUFZLElBQUksRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU07QUFDdkMsWUFBWSxPQUFPLEVBQUUsNERBQTREO0FBQ2pGLFNBQVMsQ0FBQyxDQUFDO0FBQ1gsUUFBUSxPQUFPLEtBQUssQ0FBQztBQUNyQixLQUFLO0FBQ0wsSUFBSSxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDLENBQUMsQ0FBQztBQUNJLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUNqRCxJQUFJLElBQUksRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxJQUFJLEtBQUssYUFBYSxDQUFDO0FBQzVELElBQUksU0FBUyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDekIsSUFBSSxXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUMzQixJQUFJLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQzNCLElBQUksU0FBUyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDekIsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUNuQixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDWCxJQUFJLFNBQVMsRUFBRSxJQUFJO0FBQ25CLENBQUMsQ0FBQyxDQUFDO0FBQ0ksTUFBTSwyQkFBMkIsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ3BELElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDbkIsSUFBSSxXQUFXLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUMzQixJQUFJLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQzNCLElBQUksU0FBUyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDekIsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRTtBQUN0QixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDWCxJQUFJLEtBQUssRUFBRSxJQUFJO0FBQ2YsQ0FBQyxDQUFDLENBQUM7QUFDSSxNQUFNLHNCQUFzQixHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDL0MsSUFBSSxPQUFPLEVBQUUscUJBQXFCO0FBQ2xDLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDbkIsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUNuQixJQUFJLFNBQVMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQ3pCLElBQUksV0FBVyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDM0IsSUFBSSxVQUFVLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRTtBQUMzQixJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQ3ZCLElBQUksTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDdEIsSUFBSSxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUN2QixJQUFJLFVBQVUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQzFCLElBQUksbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRTtBQUNwQyxJQUFJLE1BQU0sRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFO0FBQ3ZCLElBQUksTUFBTSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUU7QUFDdkIsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUNyQixJQUFJLFNBQVMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQ3pCLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUU7QUFDdEIsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0FBQ1gsSUFBSSxHQUFHLEVBQUUsSUFBSTtBQUNiLElBQUksU0FBUyxFQUFFLElBQUk7QUFDbkIsSUFBSSxVQUFVLEVBQUUsSUFBSTtBQUNwQixJQUFJLE9BQU8sRUFBRSxJQUFJO0FBQ2pCLElBQUksTUFBTSxFQUFFLElBQUk7QUFDaEIsSUFBSSxPQUFPLEVBQUUsSUFBSTtBQUNqQixJQUFJLFVBQVUsRUFBRSxJQUFJO0FBQ3BCLElBQUksbUJBQW1CLEVBQUUsSUFBSTtBQUM3QixJQUFJLE1BQU0sRUFBRSxJQUFJO0FBQ2hCLElBQUksTUFBTSxFQUFFLElBQUk7QUFDaEIsSUFBSSxLQUFLLEVBQUUsSUFBSTtBQUNmLElBQUksU0FBUyxFQUFFLElBQUk7QUFDbkIsSUFBSSxLQUFLLEVBQUUsSUFBSTtBQUNmLENBQUMsQ0FBQyxDQUFDO0FBQ0ksTUFBTSx5QkFBeUIsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ2xELElBQUksT0FBTyxFQUFFLHFCQUFxQjtBQUNsQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQ25CLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDbkIsSUFBSSxTQUFTLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUN6QixJQUFJLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQzNCLElBQUksVUFBVSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUU7QUFDM0IsSUFBSSxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUN2QixJQUFJLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0FBQ2pDLElBQUksT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7QUFDbEMsSUFBSSxVQUFVLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUMxQixJQUFJLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUU7QUFDcEMsSUFBSSxNQUFNLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRTtBQUN2QixJQUFJLE1BQU0sRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFO0FBQ3ZCLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDckIsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRTtBQUN0QixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDWCxJQUFJLEdBQUcsRUFBRSxJQUFJO0FBQ2IsSUFBSSxVQUFVLEVBQUUsSUFBSTtBQUNwQixJQUFJLFVBQVUsRUFBRSxJQUFJO0FBQ3BCLElBQUksbUJBQW1CLEVBQUUsSUFBSTtBQUM3QixJQUFJLE1BQU0sRUFBRSxJQUFJO0FBQ2hCLElBQUksTUFBTSxFQUFFLElBQUk7QUFDaEIsSUFBSSxLQUFLLEVBQUUsSUFBSTtBQUNmLElBQUksS0FBSyxFQUFFLElBQUk7QUFDZixDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxLQUFLO0FBQy9CLElBQUksSUFBSSxPQUFPLEtBQUssQ0FBQyxNQUFNLEtBQUssV0FBVyxJQUFJLE9BQU8sS0FBSyxDQUFDLE9BQU8sS0FBSyxXQUFXLEVBQUU7QUFDckYsUUFBUSxHQUFHLENBQUMsUUFBUSxDQUFDO0FBQ3JCLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQyxZQUFZLENBQUMsTUFBTTtBQUN2QyxZQUFZLE9BQU8sRUFBRSw0REFBNEQ7QUFDakYsU0FBUyxDQUFDLENBQUM7QUFDWCxRQUFRLE9BQU8sS0FBSyxDQUFDO0FBQ3JCLEtBQUs7QUFDTCxJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyxDQUFDO0FBQ3FDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQztBQUN4RSxJQUFJLElBQUksRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxJQUFJLEtBQUssYUFBYSxDQUFDO0FBQzVELElBQUksV0FBVyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDM0IsSUFBSSxPQUFPLEVBQUUscUJBQXFCO0FBQ2xDLENBQUMsRUFBRTtBQUNJLE1BQU0sMkJBQTJCLEdBQUcsMkJBQTJCLENBQUMsTUFBTSxDQUFDO0FBQzlFLElBQUksT0FBTyxFQUFFLHFCQUFxQjtBQUNsQyxJQUFJLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQzNCLENBQUMsQ0FBQyxDQUFDO0FBQ0ksTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUN4QyxJQUFJLE9BQU8sRUFBRSxxQkFBcUI7QUFDbEMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUNuQixJQUFJLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQzNCLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUU7QUFDdEIsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0FBQ1gsSUFBSSxLQUFLLEVBQUUsSUFBSTtBQUNmLENBQUMsQ0FBQyxDQUFDO0FBQ0ksTUFBTSxrQkFBa0IsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQzNDLElBQUksT0FBTyxFQUFFLHFCQUFxQjtBQUNsQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQ25CLElBQUksV0FBVyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDM0IsSUFBSSxpQkFBaUIsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQ2pDLElBQUkscUJBQXFCLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUNyQyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFO0FBQ3RCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUNYLElBQUksaUJBQWlCLEVBQUUsSUFBSTtBQUMzQixJQUFJLHFCQUFxQixFQUFFLElBQUk7QUFDL0IsSUFBSSxLQUFLLEVBQUUsSUFBSTtBQUNmLENBQUMsQ0FBQyxDQUFDO0FBQzJCLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFO0FBQ2xELE1BQU0saUJBQWlCLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFCLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDOUMsSUFBSSxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUN2QixJQUFJLFVBQVUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQzFCLElBQUksTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDdEIsSUFBSSxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUN2QixJQUFJLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDaEMsSUFBSSxVQUFVLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUMxQixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDWCxJQUFJLE1BQU0sRUFBRSxJQUFJO0FBQ2hCLElBQUksT0FBTyxFQUFFLElBQUk7QUFDakIsSUFBSSxnQkFBZ0IsRUFBRSxJQUFJO0FBQzFCLElBQUksVUFBVSxFQUFFLElBQUk7QUFDcEIsQ0FBQyxFQUFFO0FBQ0ksTUFBTSx3QkFBd0IsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ2pELElBQUksT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDdkIsSUFBSSxVQUFVLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUMxQixJQUFJLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0FBQ2pDLElBQUksT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7QUFDbEMsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQ2hDLElBQUksVUFBVSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDMUIsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0FBQ1gsSUFBSSxnQkFBZ0IsRUFBRSxJQUFJO0FBQzFCLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEtBQUs7QUFDL0IsSUFBSSxJQUFJLE9BQU8sS0FBSyxDQUFDLE1BQU0sS0FBSyxXQUFXLElBQUksT0FBTyxLQUFLLENBQUMsT0FBTyxLQUFLLFdBQVcsRUFBRTtBQUNyRixRQUFRLEdBQUcsQ0FBQyxRQUFRLENBQUM7QUFDckIsWUFBWSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNO0FBQ3ZDLFlBQVksT0FBTyxFQUFFLDREQUE0RDtBQUNqRixTQUFTLENBQUMsQ0FBQztBQUNYLFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckIsS0FBSztBQUNMLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUM7QUFDdUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUNuQyxJQUFJLFNBQVMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQ3pCLElBQUksTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7QUFDdEIsSUFBSSxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUN2QixJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQ3ZCLElBQUksV0FBVyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUU7QUFDNUIsSUFBSSxTQUFTLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUN6QixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDWCxJQUFJLE1BQU0sRUFBRSxJQUFJO0FBQ2hCLElBQUksT0FBTyxFQUFFLElBQUk7QUFDakIsSUFBSSxPQUFPLEVBQUUsSUFBSTtBQUNqQixJQUFJLFdBQVcsRUFBRSxJQUFJO0FBQ3JCLElBQUksU0FBUyxFQUFFLElBQUk7QUFDbkIsQ0FBQyxFQUFFO0FBQ0ksTUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUN0QyxJQUFJLFNBQVMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQ3pCLElBQUksTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7QUFDakMsSUFBSSxPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsRUFBRTtBQUNsQyxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQ3ZCLElBQUksV0FBVyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUU7QUFDNUIsSUFBSSxTQUFTLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUN6QixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDWCxJQUFJLE9BQU8sRUFBRSxJQUFJO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEtBQUs7QUFDL0IsSUFBSSxJQUFJLE9BQU8sS0FBSyxDQUFDLE1BQU0sS0FBSyxXQUFXLElBQUksT0FBTyxLQUFLLENBQUMsT0FBTyxLQUFLLFdBQVcsRUFBRTtBQUNyRixRQUFRLEdBQUcsQ0FBQyxRQUFRLENBQUM7QUFDckIsWUFBWSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNO0FBQ3ZDLFlBQVksT0FBTyxFQUFFLDREQUE0RDtBQUNqRixTQUFTLENBQUMsQ0FBQztBQUNYLFFBQVEsT0FBTyxLQUFLLENBQUM7QUFDckIsS0FBSztBQUNMLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQyxDQUFDLENBQUM7QUFDb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLHNCQUFzQixFQUFFLHNCQUFzQixDQUFDOztBQ3hTbEgsTUFBTSxXQUFXLEdBQUcsT0FBTyxPQUFPLEtBQUs7QUFDOUM7QUFDQSxJQUFJLE1BQU0sU0FBUyxHQUFHLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQy9FO0FBQ0EsSUFBSSxNQUFNLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUscUJBQXFCLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUM7QUFDOUksUUFBUSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87QUFDaEMsUUFBUSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7QUFDeEIsUUFBUSxXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7QUFDeEMsUUFBUSxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVU7QUFDdEMsUUFBUSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87QUFDaEMsUUFBUSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7QUFDNUIsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDZDtBQUNBLElBQUksTUFBTSxnQkFBZ0IsQ0FBQywrQ0FBK0MsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDM0Y7QUFDQSxJQUFJLE1BQU0sa0JBQWtCLENBQUMseUJBQXlCLENBQUMsS0FBSyxDQUFDO0FBQzdELFFBQVEsS0FBSyxFQUFFLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxRQUFRO0FBQ25ELFFBQVEsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO0FBQ2hDLFFBQVEsR0FBRztBQUNYLFFBQVEsU0FBUztBQUNqQixRQUFRLFdBQVc7QUFDbkIsUUFBUSxPQUFPO0FBQ2YsUUFBUSxpQkFBaUI7QUFDekIsUUFBUSxxQkFBcUI7QUFDN0IsUUFBUSxPQUFPO0FBQ2YsUUFBUSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07QUFDOUIsUUFBUSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87QUFDaEMsUUFBUSxtQkFBbUIsRUFBRSxPQUFPLENBQUMsbUJBQW1CO0FBQ3hELFFBQVEsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO0FBQzVCLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2Q7QUFDQSxJQUFJLE1BQU0sZ0JBQWdCLENBQUMsK0NBQStDLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzNGO0FBQ0EsSUFBSSxNQUFNLG1CQUFtQixDQUFDLHlCQUF5QixDQUFDLEtBQUssQ0FBQztBQUM5RCxRQUFRLEtBQUssRUFBRSxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsVUFBVTtBQUNyRCxRQUFRLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztBQUNoQyxRQUFRLEdBQUc7QUFDWCxRQUFRLFNBQVM7QUFDakIsUUFBUSxXQUFXO0FBQ25CLFFBQVEsT0FBTztBQUNmLFFBQVEsaUJBQWlCO0FBQ3pCLFFBQVEscUJBQXFCO0FBQzdCLFFBQVEsT0FBTztBQUNmLFFBQVEsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO0FBQzlCLFFBQVEsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO0FBQ2hDLFFBQVEsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLG1CQUFtQjtBQUN4RCxRQUFRLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztBQUM1QixLQUFLLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQzFCO0FBQ0EsSUFBSSxNQUFNLGdCQUFnQixDQUFDLCtDQUErQyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMzRjtBQUNBLElBQUksTUFBTSxrQkFBa0IsQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLENBQUM7QUFDN0QsUUFBUSxLQUFLLEVBQUUsb0JBQW9CLENBQUMsTUFBTSxDQUFDLFVBQVU7QUFDckQsUUFBUSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87QUFDaEMsUUFBUSxHQUFHO0FBQ1gsUUFBUSxTQUFTO0FBQ2pCLFFBQVEsV0FBVztBQUNuQixRQUFRLE9BQU87QUFDZixRQUFRLGlCQUFpQjtBQUN6QixRQUFRLHFCQUFxQjtBQUM3QixRQUFRLE9BQU87QUFDZixRQUFRLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtBQUM5QixRQUFRLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztBQUNoQyxRQUFRLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxtQkFBbUI7QUFDeEQsUUFBUSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7QUFDNUIsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDZDtBQUNBLElBQUksTUFBTSxnQkFBZ0IsQ0FBQywrQ0FBK0MsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDM0Y7QUFDQSxJQUFJLE1BQU0seUJBQXlCLENBQUMsMkJBQTJCLENBQUMsS0FBSyxDQUFDO0FBQ3RFLFFBQVEsR0FBRztBQUNYLFFBQVEsU0FBUztBQUNqQixRQUFRLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEUsUUFBUSxXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFFLFFBQVEsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO0FBQzVCLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDUixDQUFDOztBQzdFTSxNQUFNLFdBQVcsR0FBRyxPQUFPLE9BQU8sS0FBSztBQUM5QztBQUNBLElBQUksTUFBTSxTQUFTLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDL0U7QUFDQSxJQUFJLE1BQU0sRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxHQUFHLE1BQU0sZ0JBQWdCLENBQUM7QUFDakUsUUFBUSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87QUFDaEMsUUFBUSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7QUFDeEIsUUFBUSxXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7QUFDeEMsUUFBUSxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVU7QUFDdEMsUUFBUSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87QUFDaEMsUUFBUSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7QUFDNUIsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2Q7QUFDQSxJQUFJLE1BQU0sZ0JBQWdCLENBQUMsK0NBQStDLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzNGO0FBQ0EsSUFBSSxNQUFNLGtCQUFrQixDQUFDLFVBQVUsRUFBRSx5QkFBeUIsQ0FBQyxLQUFLLENBQUM7QUFDekUsUUFBUSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87QUFDaEMsUUFBUSxHQUFHO0FBQ1gsUUFBUSxTQUFTO0FBQ2pCLFFBQVEsV0FBVztBQUNuQixRQUFRLE9BQU87QUFDZixRQUFRLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtBQUM5QixRQUFRLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztBQUNoQyxRQUFRLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVTtBQUN0QyxRQUFRLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxtQkFBbUI7QUFDeEQsUUFBUSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07QUFDOUIsUUFBUSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07QUFDOUIsUUFBUSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7QUFDNUIsUUFBUSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7QUFDNUIsS0FBSyxDQUFDLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztBQUNqQztBQUNBLElBQUksTUFBTSxnQkFBZ0IsQ0FBQywrQ0FBK0MsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDM0Y7QUFDQSxJQUFJLE1BQU0sa0JBQWtCLENBQUMsVUFBVSxFQUFFLHlCQUF5QixDQUFDLEtBQUssQ0FBQztBQUN6RSxRQUFRLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztBQUNoQyxRQUFRLEdBQUc7QUFDWCxRQUFRLFNBQVM7QUFDakIsUUFBUSxXQUFXO0FBQ25CLFFBQVEsT0FBTztBQUNmLFFBQVEsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO0FBQzlCLFFBQVEsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO0FBQ2hDLFFBQVEsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO0FBQ3RDLFFBQVEsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLG1CQUFtQjtBQUN4RCxRQUFRLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtBQUM5QixRQUFRLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtBQUM5QixRQUFRLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztBQUM1QixRQUFRLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztBQUM1QixLQUFLLENBQUMsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO0FBQ2pDO0FBQ0EsSUFBSSxNQUFNLGdCQUFnQixDQUFDLCtDQUErQyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMzRjtBQUNBLElBQUksTUFBTSxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUseUJBQXlCLENBQUMsS0FBSyxDQUFDO0FBQzFFLFFBQVEsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO0FBQ2hDLFFBQVEsR0FBRztBQUNYLFFBQVEsU0FBUztBQUNqQixRQUFRLFdBQVc7QUFDbkIsUUFBUSxPQUFPO0FBQ2YsUUFBUSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07QUFDOUIsUUFBUSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87QUFDaEMsUUFBUSxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVU7QUFDdEMsUUFBUSxtQkFBbUIsRUFBRSxPQUFPLENBQUMsbUJBQW1CO0FBQ3hELFFBQVEsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO0FBQzlCLFFBQVEsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO0FBQzlCLFFBQVEsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO0FBQzVCLFFBQVEsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO0FBQzVCLEtBQUssQ0FBQyxFQUFFLHVCQUF1QixDQUFDLENBQUM7QUFDakM7QUFDQSxJQUFJLE1BQU0sZ0JBQWdCLENBQUMsK0NBQStDLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzNGO0FBQ0EsSUFBSSxNQUFNLHlCQUF5QixDQUFDLDJCQUEyQixDQUFDLEtBQUssQ0FBQztBQUN0RSxRQUFRLEdBQUc7QUFDWCxRQUFRLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztBQUNoQyxRQUFRLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEUsUUFBUSxXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hFLFFBQVEsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RSxRQUFRLFNBQVM7QUFDakIsUUFBUSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7QUFDNUIsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNSLENBQUM7O0FDckZNLE1BQU0sYUFBYSxHQUFHLE9BQU8sT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxFQUFFLE9BQU8sS0FBSztBQUNuRixJQUFJLE1BQU0sR0FBRyxHQUFHLE9BQU8sSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDMUMsSUFBSSxNQUFNLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sS0FBSztBQUNyQyxRQUFRLElBQUksWUFBWSxHQUFHLEVBQUUsQ0FBQztBQUM5QixRQUFRLGFBQWEsQ0FBQyxPQUFPLElBQUksS0FBSztBQUN0QyxZQUFZLElBQUk7QUFDaEIsZ0JBQWdCLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRTtBQUNoQyxvQkFBb0IsTUFBTSxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDOUQsaUJBQWlCO0FBQ2pCLGdCQUFnQixJQUFJLFlBQVksRUFBRTtBQUNsQyxvQkFBb0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUN6RCxpQkFBaUI7QUFDakIscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQSxvQkFBb0IsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pDLGlCQUFpQjtBQUNqQixhQUFhO0FBQ2IsWUFBWSxPQUFPLEdBQUcsRUFBRTtBQUN4QixnQkFBZ0IsTUFBTSxPQUFPLEdBQUcsR0FBRyxZQUFZLEtBQUssR0FBRyxHQUFHLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztBQUN6RSxnQkFBZ0IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2hDLGFBQWE7QUFDYixTQUFTLEVBQUU7QUFDWCxZQUFZLElBQUksRUFBRSxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUk7QUFDL0IsU0FBUyxDQUFDLENBQUM7QUFDWCxRQUFRLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTTtBQUMvQixZQUFZLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QixTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJO0FBQ3hCLFlBQVksSUFBSSxHQUFHLFlBQVksQ0FBQyxDQUFDLFFBQVEsRUFBRTtBQUMzQyxnQkFBZ0IsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJO0FBQzVDLG9CQUFvQixZQUFZLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6RyxpQkFBaUIsQ0FBQyxDQUFDO0FBQ25CLGFBQWE7QUFDYixpQkFBaUIsSUFBSSxHQUFHLFlBQVksS0FBSyxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRTtBQUN0RSxnQkFBZ0IsWUFBWSxHQUFHLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUM5QyxhQUFhO0FBQ2IsWUFBWSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsU0FBUyxDQUFDLENBQUM7QUFDWCxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJO0FBQ3hCLFFBQVEsSUFBSSxPQUFPLEtBQUssSUFBSSxFQUFFO0FBQzlCLFlBQVksT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNuQztBQUNBO0FBQ0EsU0FBUztBQUNULGFBQWE7QUFDYixZQUFZLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsU0FBUztBQUNULEtBQUssQ0FBQyxDQUFDO0FBQ1AsQ0FBQzs7QUM1Q0QsTUFBTSxZQUFZLEdBQUc7QUFDckIsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLHlCQUF5QixFQUFFO0FBQzNELElBQUksRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxzQkFBc0IsRUFBRTtBQUM5RCxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsa0JBQWtCLEVBQUU7QUFDdEQsSUFBSSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLHFCQUFxQixFQUFFO0FBQzVELElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUU7QUFDbEQsSUFBSSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLGtCQUFrQixFQUFFO0FBQzFELENBQUMsQ0FBQztBQUNGLE1BQU0sc0JBQXNCLEdBQUcsT0FBTyxHQUFHLEtBQUs7QUFDOUMsSUFBSSxNQUFNLElBQUksR0FBRyxFQUFFLENBQUM7QUFDcEIsSUFBSSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFDLElBQUksSUFBSSxJQUFJLEVBQUU7QUFDZCxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM1RCxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtBQUN2QjtBQUNBO0FBQ0EsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNsRSxTQUFTO0FBQ1QsS0FBSztBQUNMLElBQUksT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQyxDQUFDO0FBQ0YsTUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLO0FBQ2hDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixJQUFJLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUNwQyxRQUFRLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDbEIsS0FBSztBQUNMLElBQUksSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ3BDLFFBQVEsT0FBTyxDQUFDLENBQUM7QUFDakIsS0FBSztBQUNMLElBQUksSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDbkMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2QixLQUFLO0FBQ0wsU0FBUyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUN4QyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JCLEtBQUs7QUFDTCxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQ25DLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkIsS0FBSztBQUNMLFNBQVMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDeEMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyQixLQUFLO0FBQ0wsSUFBSSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pDLElBQUksTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQyxJQUFJLElBQUksQ0FBQyxXQUFXO0FBQ3BCLFFBQVEsT0FBTyxDQUFDLENBQUM7QUFDakIsSUFBSSxJQUFJLENBQUMsWUFBWTtBQUNyQixRQUFRLE9BQU8sQ0FBQyxDQUFDO0FBQ2pCLElBQUksT0FBTyxNQUFNLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BHLENBQUMsQ0FBQztBQUNLLE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxVQUFVLEtBQUs7QUFDekQsSUFBSSxNQUFNLFFBQVEsR0FBRyxXQUFXLEVBQUUsQ0FBQztBQUNuQyxJQUFJLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUN0QixJQUFJLFdBQVcsTUFBTSxJQUFJLElBQUksWUFBWSxFQUFFO0FBQzNDLFFBQVEsSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUU7QUFDcEQsWUFBWSxTQUFTO0FBQ3JCLFNBQVM7QUFDVCxRQUFRQyxTQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsNEJBQTRCLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ25FLFFBQVEsTUFBTSxJQUFJLEdBQUcsTUFBTSxzQkFBc0IsQ0FBQyxDQUFDLHVDQUF1QyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO0FBQ25JLFFBQVEsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3JELEtBQUs7QUFDTDtBQUNBLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxVQUFVLEtBQUssT0FBTyxFQUFFO0FBQy9DLFFBQVFBLFNBQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDLENBQUM7QUFDNUQsUUFBUSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLHFEQUFxRCxDQUFDLENBQUM7QUFDaEcsUUFBUSxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDeEQsS0FBSztBQUNMLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsS0FBSyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDNUUsSUFBSSxhQUFhLENBQUMsY0FBYyxDQUFDLDRCQUE0QixDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkcsSUFBSSxPQUFPLFFBQVEsQ0FBQztBQUNwQixDQUFDOztBQ2pERCxNQUFNLE9BQU8sR0FBRyxJQUFJQyxPQUFTLEVBQUUsQ0FBQztBQUNoQyxNQUFNLFFBQVEsR0FBRyxXQUFXLEVBQUUsQ0FBQztBQUMvQixNQUFNLGNBQWMsR0FBRyxPQUFPO0FBQzlCLElBQUksTUFBTSxFQUFFLE9BQU8sT0FBTyxLQUFLO0FBQy9CO0FBQ0EsUUFBUSxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN0QyxRQUFRLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3BDLFFBQVEsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztBQUNwQyxRQUFRLElBQUksT0FBTyxFQUFFO0FBQ3JCLFlBQVksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQzlELGdCQUFnQixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsaUNBQWlDLEVBQUUsT0FBTyxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7QUFDckgsZ0JBQWdCLE1BQU0sZUFBZSxHQUFHLE1BQU0sbUJBQW1CLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ25GLGdCQUFnQixJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDekUsb0JBQW9CLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsa0NBQWtDLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3SSxpQkFBaUI7QUFDakIsYUFBYTtBQUNiLFNBQVM7QUFDVCxRQUFRLElBQUksT0FBTyxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFO0FBQzlDLFlBQVksTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDLHlEQUF5RCxDQUFDLENBQUMsQ0FBQztBQUN6RixTQUFTO0FBQ1Q7QUFDQSxRQUFRLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLElBQUksTUFBTSxVQUFVLEVBQUUsQ0FBQztBQUM5RDtBQUNBLFFBQVEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDMUM7QUFDQSxRQUFRLE1BQU0sZ0JBQWdCLENBQUMsNkNBQTZDLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzdGLFFBQVEsU0FBUyxFQUFFLENBQUM7QUFDcEI7QUFDQSxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBQzFCLFlBQVksT0FBTyxFQUFFLE9BQU87QUFDNUIsWUFBWSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7QUFDNUIsWUFBWSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7QUFDNUIsWUFBWSxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7QUFDeEMsWUFBWSxXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7QUFDNUMsWUFBWSxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVU7QUFDMUMsWUFBWSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07QUFDbEMsWUFBWSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87QUFDcEMsWUFBWSxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVU7QUFDMUMsWUFBWSxtQkFBbUIsRUFBRSxPQUFPLENBQUMsbUJBQW1CO0FBQzVELFlBQVksU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO0FBQ3hDLFlBQVksS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO0FBQ2hDLFNBQVMsQ0FBQyxDQUFDO0FBQ1g7QUFDQSxRQUFRLE1BQU0sZ0JBQWdCLENBQUMsK0NBQStDLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9GO0FBQ0EsUUFBUSxNQUFNLFdBQVcsQ0FBQztBQUMxQixZQUFZLE9BQU87QUFDbkIsWUFBWSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7QUFDNUIsWUFBWSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7QUFDNUIsWUFBWSxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7QUFDeEMsWUFBWSxXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7QUFDNUMsWUFBWSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07QUFDbEMsWUFBWSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87QUFDcEMsWUFBWSxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVU7QUFDMUMsWUFBWSxtQkFBbUIsRUFBRSxPQUFPLENBQUMsbUJBQW1CO0FBQzVELFlBQVksTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO0FBQ2xDLFlBQVksTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO0FBQ2xDLFlBQVksU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO0FBQ3hDLFlBQVksS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO0FBQ2hDLFNBQVMsQ0FBQyxDQUFDO0FBQ1g7QUFDQSxRQUFRLE1BQU0sZ0JBQWdCLENBQUMsK0NBQStDLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9GO0FBQ0EsUUFBUSxNQUFNLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUM7QUFDdkQsWUFBWSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87QUFDcEMsWUFBWSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7QUFDNUIsWUFBWSxXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7QUFDNUMsWUFBWSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7QUFDaEMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUNaLEtBQUs7QUFDTCxJQUFJLFlBQVksRUFBRSxZQUFZO0FBQzlCLEtBQUs7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUNILE1BQU0sYUFBYSxHQUFHLE9BQU87QUFDN0IsSUFBSSxNQUFNLEVBQUUsT0FBTyxPQUFPLEtBQUs7QUFDL0IsUUFBUSxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssYUFBYSxFQUFFO0FBQzVDLFlBQVksTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDO0FBQ2hDLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUU7QUFDbEMsZ0JBQWdCLE1BQU0sSUFBSSxLQUFLLENBQUMsd0NBQXdDLENBQUMsQ0FBQztBQUMxRSxhQUFhO0FBQ2IsaUJBQWlCLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFO0FBQ3ZDLGdCQUFnQixNQUFNLElBQUksS0FBSyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7QUFDMUUsYUFBYTtBQUNiLFlBQVksTUFBTSx5QkFBeUIsQ0FBQywyQkFBMkIsQ0FBQyxLQUFLLENBQUM7QUFDOUUsZ0JBQWdCLEdBQUcsR0FBRztBQUN0QixnQkFBZ0IsU0FBUyxFQUFFLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQztBQUMzRSxhQUFhLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLFNBQVM7QUFDVCxhQUFhO0FBQ2IsWUFBWSxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUM7QUFDaEMsWUFBWSxNQUFNLHlCQUF5QixDQUFDLDJCQUEyQixDQUFDLEtBQUssQ0FBQztBQUM5RSxnQkFBZ0IsR0FBRyxHQUFHO0FBQ3RCLGdCQUFnQixPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU87QUFDcEMsZ0JBQWdCLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUM7QUFDM0UsYUFBYSxDQUFDLENBQUMsQ0FBQztBQUNoQixTQUFTO0FBQ1QsS0FBSztBQUNMLElBQUksWUFBWSxFQUFFLFlBQVk7QUFDOUIsS0FBSztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0gsTUFBTSxzQkFBc0IsR0FBRyxPQUFPO0FBQ3RDLElBQUksTUFBTSxFQUFFLE9BQU8sT0FBTyxLQUFLO0FBQy9CLFFBQVEsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztBQUNwQyxRQUFRLElBQUksT0FBTyxFQUFFO0FBQ3JCLFlBQVksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQzlELGdCQUFnQixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsaUNBQWlDLEVBQUUsT0FBTyxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7QUFDckgsZ0JBQWdCLE1BQU0sZUFBZSxHQUFHLE1BQU0sbUJBQW1CLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ25GLGdCQUFnQixJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDekUsb0JBQW9CLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsa0NBQWtDLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3SSxpQkFBaUI7QUFDakIsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBLFFBQVEsTUFBTSxXQUFXLENBQUM7QUFDMUIsWUFBWSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87QUFDcEMsWUFBWSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7QUFDNUIsWUFBWSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7QUFDNUIsWUFBWSxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7QUFDeEMsWUFBWSxXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7QUFDNUMsWUFBWSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07QUFDbEMsWUFBWSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87QUFDcEMsWUFBWSxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVU7QUFDMUMsWUFBWSxtQkFBbUIsRUFBRSxPQUFPLENBQUMsbUJBQW1CO0FBQzVELFlBQVksU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO0FBQ3hDLFlBQVksS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO0FBQ2hDLFNBQVMsQ0FBQyxDQUFDO0FBQ1g7QUFDQSxRQUFRLE1BQU0sZ0JBQWdCLENBQUMsK0NBQStDLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9GO0FBQ0EsUUFBUSxNQUFNLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUM7QUFDdkQsWUFBWSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87QUFDcEMsWUFBWSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7QUFDNUIsWUFBWSxXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7QUFDNUMsWUFBWSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7QUFDaEMsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUNaLEtBQUs7QUFDTCxJQUFJLFlBQVksRUFBRSxZQUFZO0FBQzlCLEtBQUs7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUNILE1BQU0sV0FBVyxHQUFHLE9BQU87QUFDM0IsSUFBSSxNQUFNLEVBQUUsT0FBTyxPQUFPLEtBQUs7QUFDL0IsUUFBUSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDO0FBQ3BDLFFBQVEsSUFBSSxPQUFPLEVBQUU7QUFDckIsWUFBWSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDOUQsZ0JBQWdCLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxpQ0FBaUMsRUFBRSxPQUFPLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztBQUNySCxnQkFBZ0IsTUFBTSxlQUFlLEdBQUcsTUFBTSxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbkYsZ0JBQWdCLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUN6RSxvQkFBb0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxrQ0FBa0MsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdJLGlCQUFpQjtBQUNqQixhQUFhO0FBQ2IsU0FBUztBQUNULFFBQVEsTUFBTSxrQkFBa0IsQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLENBQUM7QUFDakUsWUFBWSxHQUFHLE9BQU87QUFDdEIsWUFBWSxLQUFLLEVBQUUsb0JBQW9CLENBQUMsTUFBTSxDQUFDLFFBQVE7QUFDdkQsWUFBWSxTQUFTLEVBQUUsa0JBQWtCLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDO0FBQy9FLFlBQVksT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQzFGLFNBQVMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2xCLEtBQUs7QUFDTCxJQUFJLFlBQVksRUFBRSxZQUFZO0FBQzlCLEtBQUs7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUNILE1BQU0sV0FBVyxHQUFHLE9BQU87QUFDM0IsSUFBSSxNQUFNLEVBQUUsT0FBTyxPQUFPLEtBQUs7QUFDL0IsUUFBUSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDO0FBQ3BDLFFBQVEsSUFBSSxPQUFPLEVBQUU7QUFDckIsWUFBWSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDOUQsZ0JBQWdCLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxpQ0FBaUMsRUFBRSxPQUFPLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztBQUNySCxnQkFBZ0IsTUFBTSxlQUFlLEdBQUcsTUFBTSxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbkYsZ0JBQWdCLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUN6RSxvQkFBb0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxrQ0FBa0MsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdJLGlCQUFpQjtBQUNqQixhQUFhO0FBQ2IsU0FBUztBQUNULFFBQVEsTUFBTSxrQkFBa0IsQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLENBQUM7QUFDakUsWUFBWSxHQUFHLE9BQU87QUFDdEIsWUFBWSxLQUFLLEVBQUUsb0JBQW9CLENBQUMsTUFBTSxDQUFDLFVBQVU7QUFDekQsWUFBWSxTQUFTLEVBQUUsa0JBQWtCLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDO0FBQy9FLFlBQVksT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQzFGLFNBQVMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2xCLEtBQUs7QUFDTCxJQUFJLFlBQVksRUFBRSxZQUFZO0FBQzlCLEtBQUs7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUNILE1BQU0sY0FBYyxHQUFHLE9BQU87QUFDOUIsSUFBSSxNQUFNLEVBQUUsT0FBTyxPQUFPLEtBQUs7QUFDL0IsUUFBUSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDO0FBQ3BDLFFBQVEsSUFBSSxPQUFPLEVBQUU7QUFDckIsWUFBWSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDOUQsZ0JBQWdCLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxpQ0FBaUMsRUFBRSxPQUFPLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztBQUNySCxnQkFBZ0IsTUFBTSxlQUFlLEdBQUcsTUFBTSxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbkYsZ0JBQWdCLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUN6RSxvQkFBb0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxrQ0FBa0MsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdJLGlCQUFpQjtBQUNqQixhQUFhO0FBQ2IsU0FBUztBQUNULFFBQVEsTUFBTSxtQkFBbUIsQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLENBQUM7QUFDbEUsWUFBWSxHQUFHLE9BQU87QUFDdEIsWUFBWSxLQUFLLEVBQUUsb0JBQW9CLENBQUMsTUFBTSxDQUFDLFVBQVU7QUFDekQsWUFBWSxTQUFTLEVBQUUsa0JBQWtCLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDO0FBQy9FLFlBQVksT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQzFGLFNBQVMsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDOUIsS0FBSztBQUNMLElBQUksWUFBWSxFQUFFLFlBQVk7QUFDOUIsS0FBSztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0gsTUFBTSxzQkFBc0IsR0FBRyxPQUFPO0FBQ3RDLElBQUksTUFBTSxFQUFFLE9BQU8sT0FBTyxLQUFLO0FBQy9CLFFBQVEsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztBQUNwQyxRQUFRLElBQUksT0FBTyxFQUFFO0FBQ3JCLFlBQVksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQzlELGdCQUFnQixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsaUNBQWlDLEVBQUUsT0FBTyxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7QUFDckgsZ0JBQWdCLE1BQU0sZUFBZSxHQUFHLE1BQU0sbUJBQW1CLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ25GLGdCQUFnQixJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDekUsb0JBQW9CLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsa0NBQWtDLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3SSxpQkFBaUI7QUFDakIsYUFBYTtBQUNiLFNBQVM7QUFDVCxRQUFRLElBQUksT0FBTyxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFO0FBQzlDLFlBQVksTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDLHlEQUF5RCxDQUFDLENBQUMsQ0FBQztBQUN6RixTQUFTO0FBQ1Q7QUFDQSxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBQzFCLFlBQVksT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO0FBQ3BDLFlBQVksR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHO0FBQzVCLFlBQVksR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHO0FBQzVCLFlBQVksU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO0FBQ3hDLFlBQVksV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO0FBQzVDLFlBQVksTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO0FBQ2xDLFlBQVksT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO0FBQ3BDLFlBQVksVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO0FBQzFDLFlBQVksbUJBQW1CLEVBQUUsT0FBTyxDQUFDLG1CQUFtQjtBQUM1RCxZQUFZLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtBQUNsQyxZQUFZLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtBQUNsQyxZQUFZLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztBQUN4QyxZQUFZLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztBQUNoQyxTQUFTLENBQUMsQ0FBQztBQUNYO0FBQ0EsUUFBUSxNQUFNLGdCQUFnQixDQUFDLCtDQUErQyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvRjtBQUNBLFFBQVEsTUFBTSxlQUFlLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDO0FBQ3ZELFlBQVksT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO0FBQ3BDLFlBQVksR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHO0FBQzVCLFlBQVksV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO0FBQzVDLFlBQVksS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO0FBQ2hDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDWixLQUFLO0FBQ0wsSUFBSSxZQUFZLEVBQUUsWUFBWTtBQUM5QixLQUFLO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDSCxNQUFNLFdBQVcsR0FBRyxPQUFPO0FBQzNCLElBQUksTUFBTSxFQUFFLE9BQU8sT0FBTyxLQUFLO0FBQy9CLFFBQVEsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztBQUNwQyxRQUFRLElBQUksT0FBTyxFQUFFO0FBQ3JCLFlBQVksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQzlELGdCQUFnQixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsaUNBQWlDLEVBQUUsT0FBTyxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7QUFDckgsZ0JBQWdCLE1BQU0sZUFBZSxHQUFHLE1BQU0sbUJBQW1CLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ25GLGdCQUFnQixJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDekUsb0JBQW9CLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsa0NBQWtDLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3SSxpQkFBaUI7QUFDakIsYUFBYTtBQUNiLFNBQVM7QUFDVCxRQUFRLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0VBQWtFLEVBQUUseUJBQXlCLENBQUMsS0FBSyxDQUFDO0FBQ3hILFlBQVksR0FBRyxPQUFPO0FBQ3RCLFlBQVksU0FBUyxFQUFFLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQztBQUMvRSxZQUFZLE9BQU8sRUFBRSxNQUFNLGNBQWMsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQztBQUMxRixTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ1osUUFBUSxNQUFNLGtCQUFrQixDQUFDLFVBQVUsRUFBRSx5QkFBeUIsQ0FBQyxLQUFLLENBQUM7QUFDN0UsWUFBWSxHQUFHLE9BQU87QUFDdEIsWUFBWSxTQUFTLEVBQUUsa0JBQWtCLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDO0FBQy9FLFlBQVksT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQzFGLFNBQVMsQ0FBQyxFQUFFLHVCQUF1QixDQUFDLENBQUM7QUFDckMsS0FBSztBQUNMLElBQUksWUFBWSxFQUFFLFlBQVk7QUFDOUIsS0FBSztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0gsTUFBTSxXQUFXLEdBQUcsT0FBTztBQUMzQixJQUFJLE1BQU0sRUFBRSxPQUFPLE9BQU8sS0FBSztBQUMvQixRQUFRLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7QUFDcEMsUUFBUSxJQUFJLE9BQU8sRUFBRTtBQUNyQixZQUFZLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUM5RCxnQkFBZ0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLGlDQUFpQyxFQUFFLE9BQU8sQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0FBQ3JILGdCQUFnQixNQUFNLGVBQWUsR0FBRyxNQUFNLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNuRixnQkFBZ0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQ3pFLG9CQUFvQixNQUFNLElBQUksS0FBSyxDQUFDLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLGtDQUFrQyxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0ksaUJBQWlCO0FBQ2pCLGFBQWE7QUFDYixTQUFTO0FBQ1QsUUFBUSxNQUFNLGtCQUFrQixDQUFDLFVBQVUsRUFBRSx5QkFBeUIsQ0FBQyxLQUFLLENBQUM7QUFDN0UsWUFBWSxHQUFHLE9BQU87QUFDdEIsWUFBWSxTQUFTLEVBQUUsa0JBQWtCLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDO0FBQy9FLFlBQVksT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQzFGLFNBQVMsQ0FBQyxFQUFFLHVCQUF1QixDQUFDLENBQUM7QUFDckMsS0FBSztBQUNMLElBQUksWUFBWSxFQUFFLFlBQVk7QUFDOUIsS0FBSztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0gsTUFBTSxXQUFXLEdBQUcsT0FBTztBQUMzQixJQUFJLE1BQU0sRUFBRSxPQUFPLE9BQU8sS0FBSztBQUMvQixRQUFRLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7QUFDcEMsUUFBUSxJQUFJLE9BQU8sRUFBRTtBQUNyQixZQUFZLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUM5RCxnQkFBZ0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLGlDQUFpQyxFQUFFLE9BQU8sQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0FBQ3JILGdCQUFnQixNQUFNLGVBQWUsR0FBRyxNQUFNLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNuRixnQkFBZ0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQ3pFLG9CQUFvQixNQUFNLElBQUksS0FBSyxDQUFDLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLGtDQUFrQyxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0ksaUJBQWlCO0FBQ2pCLGFBQWE7QUFDYixTQUFTO0FBQ1QsUUFBUSxNQUFNLGtCQUFrQixDQUFDLFdBQVcsRUFBRSx5QkFBeUIsQ0FBQyxLQUFLLENBQUM7QUFDOUUsWUFBWSxHQUFHLE9BQU87QUFDdEIsWUFBWSxTQUFTLEVBQUUsa0JBQWtCLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDO0FBQy9FLFlBQVksT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQzFGLFNBQVMsQ0FBQyxFQUFFLHVCQUF1QixDQUFDLENBQUM7QUFDckMsS0FBSztBQUNMLElBQUksWUFBWSxFQUFFLFlBQVk7QUFDOUIsS0FBSztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0gsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPO0FBQ2hDLElBQUksTUFBTSxFQUFFLE9BQU8sT0FBTyxLQUFLO0FBQy9CLFFBQVEsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztBQUNwQyxRQUFRLElBQUksT0FBTyxFQUFFO0FBQ3JCLFlBQVksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQzlELGdCQUFnQixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsaUNBQWlDLEVBQUUsT0FBTyxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7QUFDckgsZ0JBQWdCLE1BQU0sZUFBZSxHQUFHLE1BQU0sbUJBQW1CLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ25GLGdCQUFnQixJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDekUsb0JBQW9CLE1BQU0sSUFBSSxLQUFLLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsa0NBQWtDLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3SSxpQkFBaUI7QUFDakIsYUFBYTtBQUNiLFNBQVM7QUFDVCxRQUFRLE1BQU0sZ0JBQWdCLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDO0FBQ3pELFlBQVksT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO0FBQ3BDLFlBQVksR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHO0FBQzVCLFlBQVksR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFO0FBQ3JDLFlBQVksV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO0FBQzVDLFlBQVksVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO0FBQzFDLFlBQVksT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO0FBQ3BDLFlBQVksS0FBSyxFQUFFLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQ3hDLFlBQVksS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO0FBQ2hDLFNBQVMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxHQUFHLEtBQUssU0FBUyxDQUFDLENBQUM7QUFDdkMsS0FBSztBQUNMLElBQUksWUFBWSxFQUFFLFlBQVk7QUFDOUIsS0FBSztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0gsTUFBTSxjQUFjLEdBQUcsT0FBTztBQUM5QixJQUFJLE1BQU0sRUFBRSxPQUFPLE9BQU8sS0FBSztBQUMvQixRQUFRLE1BQU0sY0FBYyxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQztBQUNyRCxZQUFZLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztBQUNwQyxZQUFZLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRztBQUM1QixZQUFZLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVztBQUM1QyxZQUFZLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztBQUNoQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ1osS0FBSztBQUNMLElBQUksWUFBWSxFQUFFLFlBQVk7QUFDOUIsS0FBSztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0gsTUFBTSxlQUFlLEdBQUcsT0FBTztBQUMvQixJQUFJLE1BQU0sRUFBRSxPQUFPLE9BQU8sS0FBSztBQUMvQixRQUFRLE1BQU0sZUFBZSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQztBQUN2RCxZQUFZLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztBQUNwQyxZQUFZLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRztBQUM1QixZQUFZLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVztBQUM1QyxZQUFZLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztBQUNoQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ1osS0FBSztBQUNMLElBQUksWUFBWSxFQUFFLFlBQVk7QUFDOUIsS0FBSztBQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0gsTUFBTSxxQkFBcUIsR0FBRyxPQUFPO0FBQ3JDLElBQUksTUFBTSxFQUFFLE9BQU8sT0FBTyxLQUFLO0FBQy9CLFFBQVEsTUFBTSxzQkFBc0IsQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUM7QUFDcEUsWUFBWSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87QUFDcEMsWUFBWSxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVU7QUFDMUMsWUFBWSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07QUFDbEMsWUFBWSxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87QUFDcEMsWUFBWSxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsZ0JBQWdCO0FBQ3RELFlBQVksVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLDBCQUEwQixDQUFDO0FBQ3JGLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDWixLQUFLO0FBQ0wsSUFBSSxZQUFZLEVBQUUsWUFBWTtBQUM5QixLQUFLO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDSCxNQUFNLFVBQVUsR0FBRyxPQUFPO0FBQzFCLElBQUksTUFBTSxFQUFFLE9BQU8sT0FBTyxLQUFLO0FBQy9CLFFBQVEsTUFBTSxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO0FBQ3BELFlBQVksU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO0FBQ3hDLFlBQVksTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO0FBQ2xDLFlBQVksT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO0FBQ3BDLFlBQVksT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO0FBQ3BDLFlBQVksV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXLElBQUksS0FBSztBQUNyRCxZQUFZLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxZQUFZLENBQUM7QUFDckUsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUNaLEtBQUs7QUFDTCxJQUFJLFlBQVksRUFBRSxZQUFZO0FBQzlCLEtBQUs7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUNILE9BQU87QUFDUCxLQUFLLElBQUksQ0FBQyxVQUFVLENBQUM7QUFDckIsS0FBSyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM5QixPQUFPO0FBQ1AsS0FBSyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDMUQsS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3ZILEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLGNBQWMsRUFBRSw4QkFBOEIsQ0FBQyxDQUFDO0FBQzFFLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLHNCQUFzQixFQUFFLHNCQUFzQixDQUFDLENBQUM7QUFDMUUsS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsY0FBYyxFQUFFLGdGQUFnRixDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzNJLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLDZCQUE2QixFQUFFLDRFQUE0RSxDQUFDLENBQUM7QUFDdkksS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsbUJBQW1CLEVBQUUsaURBQWlELENBQUMsQ0FBQztBQUNsRyxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSw4REFBOEQsQ0FBQyxDQUFDO0FBQzlHLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLHVCQUF1QixFQUFFLGdEQUFnRCxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BILEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxtQ0FBbUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMxRixLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsbUNBQW1DLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDMUYsS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsaUJBQWlCLEVBQUUsNkVBQTZFLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEksS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsK0JBQStCLEVBQUUseUZBQXlGLENBQUMsQ0FBQztBQUN0SixLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyw2QkFBNkIsRUFBRSxpRkFBaUYsQ0FBQyxDQUFDO0FBQzVJLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLG1CQUFtQixFQUFFLHlFQUF5RSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDekksS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsYUFBYSxFQUFFLHVEQUF1RCxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2pILEtBQUssTUFBTSxDQUFDLE9BQU8sSUFBSSxhQUFhLENBQUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDMUUsT0FBTztBQUNQLEtBQUssT0FBTyxDQUFDLFdBQVcsQ0FBQztBQUN6QixLQUFLLFdBQVcsQ0FBQyxrRUFBa0UsQ0FBQztBQUNwRixLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakosS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsY0FBYyxFQUFFLDhCQUE4QixDQUFDLENBQUM7QUFDMUUsS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsc0JBQXNCLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztBQUMxRSxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxjQUFjLEVBQUUsZ0ZBQWdGLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDM0ksS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsNkJBQTZCLEVBQUUsNEVBQTRFLENBQUMsQ0FBQztBQUN2SSxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxxQ0FBcUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRyxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSx5RUFBeUUsQ0FBQyxDQUFDO0FBQzFILEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLGFBQWEsRUFBRSx1REFBdUQsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNqSCxLQUFLLE1BQU0sQ0FBQyxPQUFPLElBQUksYUFBYSxDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDNUUsT0FBTztBQUNQLEtBQUssT0FBTyxDQUFDLGFBQWEsQ0FBQztBQUMzQixLQUFLLFdBQVcsQ0FBQyx5RUFBeUUsQ0FBQztBQUMzRixLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakosS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsY0FBYyxFQUFFLDhCQUE4QixDQUFDLENBQUM7QUFDMUUsS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsc0JBQXNCLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztBQUMxRSxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxjQUFjLEVBQUUsZ0ZBQWdGLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDM0ksS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsNkJBQTZCLEVBQUUsNEVBQTRFLENBQUMsQ0FBQztBQUN2SSxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxpREFBaUQsQ0FBQyxDQUFDO0FBQ2xHLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLGtCQUFrQixFQUFFLDhEQUE4RCxDQUFDLENBQUM7QUFDOUcsS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsdUJBQXVCLEVBQUUsZ0RBQWdELENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEgsS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsK0JBQStCLEVBQUUseUZBQXlGLENBQUMsQ0FBQztBQUN0SixLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyw2QkFBNkIsRUFBRSxpRkFBaUYsQ0FBQyxDQUFDO0FBQzVJLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLG1CQUFtQixFQUFFLHlFQUF5RSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDekksS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsYUFBYSxFQUFFLHVEQUF1RCxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2pILEtBQUssTUFBTSxDQUFDLE9BQU8sSUFBSSxhQUFhLENBQUMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNsRixPQUFPO0FBQ1AsS0FBSyxPQUFPLENBQUMsYUFBYSxDQUFDO0FBQzNCLEtBQUssV0FBVyxDQUFDLDhEQUE4RCxDQUFDO0FBQ2hGLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqSixLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxjQUFjLEVBQUUsOEJBQThCLENBQUMsQ0FBQztBQUMxRSxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO0FBQzFFLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLGNBQWMsRUFBRSxnRkFBZ0YsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMzSSxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyw2QkFBNkIsRUFBRSw0RUFBNEUsQ0FBQyxDQUFDO0FBQ3ZJLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLG1CQUFtQixFQUFFLGlEQUFpRCxDQUFDLENBQUM7QUFDbEcsS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsa0JBQWtCLEVBQUUsOERBQThELENBQUMsQ0FBQztBQUM5RyxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSxnREFBZ0QsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNwSCxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsbUNBQW1DLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDMUYsS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLG1DQUFtQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzFGLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLGlCQUFpQixFQUFFLDZFQUE2RSxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hJLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLCtCQUErQixFQUFFLHlGQUF5RixDQUFDLENBQUM7QUFDdEosS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsNkJBQTZCLEVBQUUsaUZBQWlGLENBQUMsQ0FBQztBQUM1SSxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSx5RUFBeUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3pJLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLGFBQWEsRUFBRSx1REFBdUQsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNqSCxLQUFLLE1BQU0sQ0FBQyxPQUFPLElBQUksYUFBYSxDQUFDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDbEYsT0FBTztBQUNQLEtBQUssT0FBTyxDQUFDLFNBQVMsQ0FBQztBQUN2QixLQUFLLFdBQVcsQ0FBQyxzRUFBc0UsQ0FBQztBQUN4RixLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxjQUFjLEVBQUUsOEJBQThCLENBQUMsQ0FBQztBQUMxRSxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO0FBQzFFLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLGNBQWMsRUFBRSxnRkFBZ0YsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMzSSxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyw2QkFBNkIsRUFBRSw0RUFBNEUsQ0FBQyxDQUFDO0FBQ3ZJLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLG1CQUFtQixFQUFFLGlEQUFpRCxDQUFDLENBQUM7QUFDbEcsS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsa0JBQWtCLEVBQUUsOERBQThELENBQUMsQ0FBQztBQUM5RyxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSxnREFBZ0QsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNwSCxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQywrQkFBK0IsRUFBRSx5RkFBeUYsQ0FBQyxDQUFDO0FBQ3RKLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLDZCQUE2QixFQUFFLGlGQUFpRixDQUFDLENBQUM7QUFDNUksS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsbUJBQW1CLEVBQUUseUVBQXlFLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUN6SSxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxhQUFhLEVBQUUsdURBQXVELENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakgsS0FBSyxNQUFNLENBQUMsT0FBTyxJQUFJLGFBQWEsQ0FBQyxPQUFPLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sRUFBRSxPQUFPLEVBQUUscUJBQXFCLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3SCxPQUFPO0FBQ1AsS0FBSyxPQUFPLENBQUMsUUFBUSxDQUFDO0FBQ3RCLEtBQUssV0FBVyxDQUFDLHVEQUF1RCxDQUFDO0FBQ3pFLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLGVBQWUsRUFBRSxnQ0FBZ0MsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2xKLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN2SCxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxjQUFjLEVBQUUsOEJBQThCLENBQUMsQ0FBQztBQUMxRSxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQywyQkFBMkIsRUFBRSw0RkFBNEYsQ0FBQyxDQUFDO0FBQ3JKLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLDJCQUEyQixFQUFFLDRGQUE0RixDQUFDLENBQUM7QUFDckosS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsMkJBQTJCLEVBQUUsMEhBQTBILENBQUMsQ0FBQztBQUNuTCxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQywrQkFBK0IsRUFBRSx5RkFBeUYsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hMLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLDZCQUE2QixFQUFFLGlGQUFpRixDQUFDLENBQUM7QUFDNUksS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsbUJBQW1CLEVBQUUseUVBQXlFLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuSyxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxhQUFhLEVBQUUsdURBQXVELENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakgsS0FBSyxNQUFNLENBQUMsT0FBTyxJQUFJLGFBQWEsQ0FBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUN6RSxPQUFPO0FBQ1AsS0FBSyxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQ3BCLEtBQUssV0FBVyxDQUFDLGlGQUFpRixDQUFDO0FBQ25HLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqSixLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxjQUFjLEVBQUUsOEJBQThCLENBQUMsQ0FBQztBQUMxRSxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO0FBQzFFLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLGNBQWMsRUFBRSxnRkFBZ0YsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMzSSxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyw2QkFBNkIsRUFBRSw0RUFBNEUsQ0FBQyxDQUFDO0FBQ3ZJLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLCtCQUErQixFQUFFLHlGQUF5RixDQUFDLENBQUM7QUFDdEosS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsNkJBQTZCLEVBQUUsaUZBQWlGLENBQUMsQ0FBQztBQUM1SSxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSx5RUFBeUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3pJLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLGFBQWEsRUFBRSx1REFBdUQsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNqSCxLQUFLLE1BQU0sQ0FBQyxPQUFPLElBQUksYUFBYSxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFLE9BQU87QUFDUCxLQUFLLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDcEIsS0FBSyxXQUFXLENBQUMsbUZBQW1GLENBQUM7QUFDckcsS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pKLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLGNBQWMsRUFBRSw4QkFBOEIsQ0FBQyxDQUFDO0FBQzFFLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLHNCQUFzQixFQUFFLHNCQUFzQixDQUFDLENBQUM7QUFDMUUsS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsY0FBYyxFQUFFLGdGQUFnRixDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzNJLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLDZCQUE2QixFQUFFLDRFQUE0RSxDQUFDLENBQUM7QUFDdkksS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsK0JBQStCLEVBQUUseUZBQXlGLENBQUMsQ0FBQztBQUN0SixLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxpREFBaUQsQ0FBQyxDQUFDO0FBQ2xHLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLGtCQUFrQixFQUFFLDhEQUE4RCxDQUFDLENBQUM7QUFDOUcsS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsdUJBQXVCLEVBQUUsZ0RBQWdELENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEgsS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsNkJBQTZCLEVBQUUsaUZBQWlGLENBQUMsQ0FBQztBQUM1SSxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSx5RUFBeUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3pJLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLGFBQWEsRUFBRSx1REFBdUQsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNqSCxLQUFLLE1BQU0sQ0FBQyxPQUFPLElBQUksYUFBYSxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFLE9BQU87QUFDUCxLQUFLLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDcEIsS0FBSyxXQUFXLENBQUMsaUdBQWlHLENBQUM7QUFDbkgsS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pKLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLGNBQWMsRUFBRSw4QkFBOEIsQ0FBQyxDQUFDO0FBQzFFLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLHNCQUFzQixFQUFFLHNCQUFzQixDQUFDLENBQUM7QUFDMUUsS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsY0FBYyxFQUFFLGdGQUFnRixDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzNJLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLDZCQUE2QixFQUFFLDRFQUE0RSxDQUFDLENBQUM7QUFDdkksS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsK0JBQStCLEVBQUUseUZBQXlGLENBQUMsQ0FBQztBQUN0SixLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxpREFBaUQsQ0FBQyxDQUFDO0FBQ2xHLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLGtCQUFrQixFQUFFLDhEQUE4RCxDQUFDLENBQUM7QUFDOUcsS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsdUJBQXVCLEVBQUUsZ0RBQWdELENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEgsS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLG1DQUFtQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzFGLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxtQ0FBbUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMxRixLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSw2RUFBNkUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4SSxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyw2QkFBNkIsRUFBRSxpRkFBaUYsQ0FBQyxDQUFDO0FBQzVJLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLG1CQUFtQixFQUFFLHlFQUF5RSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDekksS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsYUFBYSxFQUFFLHVEQUF1RCxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2pILEtBQUssTUFBTSxDQUFDLE9BQU8sSUFBSSxhQUFhLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDdkUsT0FBTztBQUNQLEtBQUssT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUNwQixLQUFLLFdBQVcsQ0FBQyxpR0FBaUcsQ0FBQztBQUNuSCxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakosS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsY0FBYyxFQUFFLDhCQUE4QixDQUFDLENBQUM7QUFDMUUsS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsc0JBQXNCLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztBQUMxRSxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxjQUFjLEVBQUUsZ0ZBQWdGLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDM0ksS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsNkJBQTZCLEVBQUUsNEVBQTRFLENBQUMsQ0FBQztBQUN2SSxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQywrQkFBK0IsRUFBRSx5RkFBeUYsQ0FBQyxDQUFDO0FBQ3RKLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLG1CQUFtQixFQUFFLGlEQUFpRCxDQUFDLENBQUM7QUFDbEcsS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsa0JBQWtCLEVBQUUsOERBQThELENBQUMsQ0FBQztBQUM5RyxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRSxnREFBZ0QsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNwSCxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsbUNBQW1DLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDMUYsS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLG1DQUFtQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzFGLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLGlCQUFpQixFQUFFLDZFQUE2RSxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hJLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLDZCQUE2QixFQUFFLGlGQUFpRixDQUFDLENBQUM7QUFDNUksS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsbUJBQW1CLEVBQUUseUVBQXlFLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUN6SSxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxhQUFhLEVBQUUsdURBQXVELENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakgsS0FBSyxNQUFNLENBQUMsT0FBTyxJQUFJLGFBQWEsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUN2RSxPQUFPO0FBQ1AsS0FBSyxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQ3BCLEtBQUssV0FBVyxDQUFDLGtHQUFrRyxDQUFDO0FBQ3BILEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqSixLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxjQUFjLEVBQUUsOEJBQThCLENBQUMsQ0FBQztBQUMxRSxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO0FBQzFFLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLGNBQWMsRUFBRSxnRkFBZ0YsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMzSSxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyw2QkFBNkIsRUFBRSw0RUFBNEUsQ0FBQyxDQUFDO0FBQ3ZJLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLCtCQUErQixFQUFFLHlGQUF5RixDQUFDLENBQUM7QUFDdEosS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsbUJBQW1CLEVBQUUsaURBQWlELENBQUMsQ0FBQztBQUNsRyxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSw4REFBOEQsQ0FBQyxDQUFDO0FBQzlHLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLHVCQUF1QixFQUFFLGdEQUFnRCxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BILEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxtQ0FBbUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMxRixLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsbUNBQW1DLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDMUYsS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsaUJBQWlCLEVBQUUsNkVBQTZFLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEksS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsNkJBQTZCLEVBQUUsaUZBQWlGLENBQUMsQ0FBQztBQUM1SSxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSx5RUFBeUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3pJLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLGFBQWEsRUFBRSx1REFBdUQsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNqSCxLQUFLLE1BQU0sQ0FBQyxPQUFPLElBQUksYUFBYSxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFLE9BQU87QUFDUCxLQUFLLE9BQU8sQ0FBQyxTQUFTLENBQUM7QUFDdkIsS0FBSyxXQUFXLENBQUMsZ0VBQWdFLENBQUM7QUFDbEYsS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pKLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLHNCQUFzQixFQUFFLHNCQUFzQixDQUFDLENBQUM7QUFDMUUsS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsbUJBQW1CLEVBQUUseUVBQXlFLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUN6SSxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxhQUFhLEVBQUUsdURBQXVELENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakgsS0FBSyxNQUFNLENBQUMsT0FBTyxJQUFJLGFBQWEsQ0FBQyxPQUFPLEVBQUUsY0FBYyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUMxRSxPQUFPO0FBQ1AsS0FBSyxPQUFPLENBQUMsVUFBVSxDQUFDO0FBQ3hCLEtBQUssV0FBVyxDQUFDLGtFQUFrRSxDQUFDO0FBQ3BGLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqSixLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO0FBQzFFLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLG1CQUFtQixFQUFFLHlFQUF5RSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDekksS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsYUFBYSxFQUFFLHVEQUF1RCxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2pILEtBQUssTUFBTSxDQUFDLE9BQU8sSUFBSSxhQUFhLENBQUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDM0UsT0FBTztBQUNQLEtBQUssT0FBTyxDQUFDLGNBQWMsQ0FBQztBQUM1QixLQUFLLFdBQVcsQ0FBQyxrRUFBa0UsQ0FBQztBQUNwRixLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSx1REFBdUQsQ0FBQyxDQUFDO0FBQzFHLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLDJCQUEyQixFQUFFLDBEQUEwRCxDQUFDLENBQUM7QUFDbkgsS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsbUJBQW1CLEVBQUUsOENBQThDLENBQUMsQ0FBQztBQUMvRixLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSwyREFBMkQsQ0FBQyxDQUFDO0FBQzNHLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLCtCQUErQixFQUFFLDhDQUE4QyxDQUFDLENBQUM7QUFDM0csS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMseUJBQXlCLEVBQUUsaUhBQWlILENBQUMsQ0FBQztBQUN4SyxLQUFLLE1BQU0sQ0FBQyxPQUFPLElBQUksYUFBYSxDQUFDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDakYsT0FBTztBQUNQLEtBQUssT0FBTyxDQUFDLEtBQUssQ0FBQztBQUNuQixLQUFLLFdBQVcsQ0FBQyxDQUFDO0FBQ2xCO0FBQ0E7QUFDQSxDQUFDLENBQUM7QUFDRixLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxnRUFBZ0UsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ2xKLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLG1CQUFtQixFQUFFLDRCQUE0QixDQUFDLENBQUM7QUFDN0UsS0FBSyxTQUFTLENBQUMsSUFBSSxNQUFNLENBQUMsa0JBQWtCLEVBQUUseUNBQXlDLENBQUMsQ0FBQztBQUN6RixLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxlQUFlLEVBQUUsc0VBQXNFLENBQUMsQ0FBQztBQUNuSCxLQUFLLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRSwwREFBMEQsQ0FBQyxDQUFDO0FBQzlHLEtBQUssU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLHdCQUF3QixFQUFFLCtGQUErRixDQUFDLENBQUM7QUFDckosS0FBSyxNQUFNLENBQUMsT0FBTyxJQUFJLGFBQWEsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUN0RSxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5RCxPQUFPLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxNQUFNO0FBQzNCLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLGtEQUFrRCxDQUFDLENBQUMsQ0FBQztBQUN0RSxJQUFJLFlBQVksRUFBRSxDQUFDO0FBQ25CLENBQUMsQ0FBQyJ9
|