parse-server 9.10.2-alpha.7 → 9.10.2-alpha.8
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.
|
@@ -344,6 +344,11 @@ class ParseGraphQLServer {
|
|
|
344
344
|
(0, _requiredParameter.default)('You must provide an Express.js app instance!');
|
|
345
345
|
}
|
|
346
346
|
app.use(this.config.graphQLPath, (0, _middlewares.allowCrossDomain)(this.parseServer.config.appId));
|
|
347
|
+
app.use(this.config.graphQLPath, (req, _res, next) => {
|
|
348
|
+
// Rate limit path for any URL variant of the endpoint
|
|
349
|
+
req._graphQLPath = this.config.graphQLPath;
|
|
350
|
+
next();
|
|
351
|
+
});
|
|
347
352
|
app.use(this.config.graphQLPath, _middlewares.handleParseHeaders);
|
|
348
353
|
app.use(this.config.graphQLPath, _middlewares.handleParseSession);
|
|
349
354
|
this.applyRequestContextMiddleware(app, this.parseServer.config);
|
|
@@ -390,4 +395,4 @@ class ParseGraphQLServer {
|
|
|
390
395
|
}
|
|
391
396
|
}
|
|
392
397
|
exports.ParseGraphQLServer = ParseGraphQLServer;
|
|
393
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZ3JhcGhxbFVwbG9hZEV4cHJlc3MiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9zZXJ2ZXIiLCJfZXhwcmVzcyIsIl9kaXNhYmxlZCIsIl9leHByZXNzMiIsIl9ncmFwaHFsIiwiX21pZGRsZXdhcmVzIiwiX3JlcXVpcmVkUGFyYW1ldGVyIiwiX2xvZ2dlciIsIl9QYXJzZUdyYXBoUUxTY2hlbWEiLCJfZGVmYXVsdEdyYXBoUUxUeXBlcyIsIl9QYXJzZUdyYXBoUUxDb250cm9sbGVyIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfcXVlcnlDb21wbGV4aXR5IiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiZGVmYXVsdCIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiaGFzVHlwZUludHJvc3BlY3Rpb24iLCJxdWVyeSIsImFzdCIsInBhcnNlIiwiY2hlY2tTZWxlY3Rpb25zIiwic2VsZWN0aW9ucyIsInNlbGVjdGlvbiIsImtpbmQiLCJuYW1lIiwidmFsdWUiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJzZWxlY3Rpb25TZXQiLCJkZWZpbml0aW9uIiwiZGVmaW5pdGlvbnMiLCJ0aHJvd0ludHJvc3BlY3Rpb25FcnJvciIsIkdyYXBoUUxFcnJvciIsImV4dGVuc2lvbnMiLCJodHRwIiwic3RhdHVzIiwiSW50cm9zcGVjdGlvbkNvbnRyb2xQbHVnaW4iLCJwdWJsaWNJbnRyb3NwZWN0aW9uIiwicmVxdWVzdERpZFN0YXJ0IiwicmVxdWVzdENvbnRleHQiLCJkaWRSZXNvbHZlT3BlcmF0aW9uIiwiaXNNYXN0ZXJPck1haW50ZW5hbmNlIiwiY29udGV4dFZhbHVlIiwiYXV0aCIsImlzTWFzdGVyIiwiaXNNYWludGVuYW5jZSIsInNvdXJjZSIsInJlcXVlc3QiLCJpbmNsdWRlcyIsInN0cmlwU2NoZW1hU3VnZ2VzdGlvbiIsIm1lc3NhZ2UiLCJyZXBsYWNlIiwic3RyaXBTY2hlbWFDb2VyY2lvbklkZW50aWZpZXJzIiwiTk9OX0RJU0NMT1NJTkdfVFlQRV9OQU1FUyIsIlNldCIsIlJFU0VSVkVEX0dSQVBIUUxfVFlQRV9OQU1FUyIsIlJFQURfUFJFRkVSRU5DRSIsInN0cmlwU2NoZW1hVHlwZUlkZW50aWZpZXJzIiwib3BlcmF0aW9uVGV4dCIsInJlZmVyZW5jZWRUb2tlbnMiLCJzcGxpdCIsImZpbHRlciIsIkJvb2xlYW4iLCJzaG91bGRLZWVwVHlwZU5hbWUiLCJ0eXBlTmFtZSIsImJhcmVUeXBlTmFtZSIsIm1hdGNoIiwiZmllbGROYW1lIiwicGFyZW50VHlwZSIsImZyYWdUeXBlIiwicGFyZW50IiwiZnJhZyIsImFyZ05hbWUiLCJzdHJpcFNjaGVtYUlkZW50aWZpZXJzIiwiU2NoZW1hU3VnZ2VzdGlvbnNDb250cm9sUGx1Z2luIiwid2lsbFNlbmRSZXNwb25zZSIsImJvZHkiLCJyZXNwb25zZSIsImVycm9ycyIsInNpbmdsZVJlc3VsdCIsImluaXRpYWxSZXN1bHQiLCJ1bmRlZmluZWQiLCJmb3JFYWNoIiwiZXJyb3IiLCJBcnJheSIsImlzQXJyYXkiLCJzdGFja3RyYWNlIiwibWFwIiwiUGFyc2VHcmFwaFFMU2VydmVyIiwiY29uc3RydWN0b3IiLCJwYXJzZVNlcnZlciIsImNvbmZpZyIsInJlcXVpcmVkUGFyYW1ldGVyIiwiZ3JhcGhRTFBhdGgiLCJwYXJzZUdyYXBoUUxDb250cm9sbGVyIiwibG9nIiwibG9nZ2VyQ29udHJvbGxlciIsImRlZmF1bHRMb2dnZXIiLCJwYXJzZUdyYXBoUUxTY2hlbWEiLCJQYXJzZUdyYXBoUUxTY2hlbWEiLCJkYXRhYmFzZUNvbnRyb2xsZXIiLCJncmFwaFFMQ3VzdG9tVHlwZURlZnMiLCJhcHBJZCIsIl9nZXRHcmFwaFFMT3B0aW9ucyIsInNjaGVtYSIsImxvYWQiLCJjb250ZXh0IiwicmVxIiwiaW5mbyIsInN0YWNrIiwidG9TdHJpbmciLCJfZ2V0U2VydmVyIiwic2NoZW1hUmVmIiwiZ3JhcGhRTFNjaGVtYSIsIm5ld1NjaGVtYVJlZiIsIl9zY2hlbWFSZWZNdXRleCIsImNyZWF0ZVNlcnZlciIsImdyYXBoUUxQdWJsaWNJbnRyb3NwZWN0aW9uIiwiYXBvbGxvIiwiQXBvbGxvU2VydmVyIiwiY3NyZlByZXZlbnRpb24iLCJyZXF1ZXN0SGVhZGVycyIsImludHJvc3BlY3Rpb24iLCJwbHVnaW5zIiwiQXBvbGxvU2VydmVyUGx1Z2luQ2FjaGVDb250cm9sRGlzYWJsZWQiLCJjcmVhdGVDb21wbGV4aXR5VmFsaWRhdGlvblBsdWdpbiIsInJlcXVlc3RDb21wbGV4aXR5Iiwic3RhcnQiLCJleHByZXNzTWlkZGxld2FyZSIsIl90cmFuc2Zvcm1NYXhVcGxvYWRTaXplVG9CeXRlcyIsIm1heFVwbG9hZFNpemUiLCJ1bml0TWFwIiwia2IiLCJtYiIsImdiIiwiTnVtYmVyIiwic2xpY2UiLCJNYXRoIiwicG93IiwidG9Mb3dlckNhc2UiLCJhcHBseVJlcXVlc3RDb250ZXh0TWlkZGxld2FyZSIsImFwaSIsIm9wdGlvbnMiLCJyZXF1ZXN0Q29udGV4dE1pZGRsZXdhcmUiLCJFcnJvciIsInVzZSIsImFwcGx5R3JhcGhRTCIsImFwcCIsImFsbG93Q3Jvc3NEb21haW4iLCJoYW5kbGVQYXJzZUhlYWRlcnMiLCJoYW5kbGVQYXJzZVNlc3Npb24iLCJoYW5kbGVQYXJzZUVycm9ycyIsImdyYXBocWxVcGxvYWRFeHByZXNzIiwibWF4RmlsZVNpemUiLCJleHByZXNzIiwianNvbiIsInJlcyIsIm5leHQiLCJzZXJ2ZXIiLCJhcHBseVBsYXlncm91bmQiLCJwbGF5Z3JvdW5kUGF0aCIsIl9yZXEiLCJzZXRIZWFkZXIiLCJ3cml0ZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJtYXN0ZXJLZXkiLCJlbmQiLCJzZXRHcmFwaFFMQ29uZmlnIiwiZ3JhcGhRTENvbmZpZyIsInVwZGF0ZUdyYXBoUUxDb25maWciLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL0dyYXBoUUwvUGFyc2VHcmFwaFFMU2VydmVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBncmFwaHFsVXBsb2FkRXhwcmVzcyBmcm9tICdncmFwaHFsLXVwbG9hZC9ncmFwaHFsVXBsb2FkRXhwcmVzcy5qcyc7XG5pbXBvcnQgeyBBcG9sbG9TZXJ2ZXIgfSBmcm9tICdAYXBvbGxvL3NlcnZlcic7XG5pbXBvcnQgeyBleHByZXNzTWlkZGxld2FyZSB9IGZyb20gJ0Bhcy1pbnRlZ3JhdGlvbnMvZXhwcmVzczUnO1xuaW1wb3J0IHsgQXBvbGxvU2VydmVyUGx1Z2luQ2FjaGVDb250cm9sRGlzYWJsZWQgfSBmcm9tICdAYXBvbGxvL3NlcnZlci9wbHVnaW4vZGlzYWJsZWQnO1xuaW1wb3J0IGV4cHJlc3MgZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgeyBHcmFwaFFMRXJyb3IsIHBhcnNlIH0gZnJvbSAnZ3JhcGhxbCc7XG5pbXBvcnQgeyBhbGxvd0Nyb3NzRG9tYWluLCBoYW5kbGVQYXJzZUVycm9ycywgaGFuZGxlUGFyc2VIZWFkZXJzLCBoYW5kbGVQYXJzZVNlc3Npb24gfSBmcm9tICcuLi9taWRkbGV3YXJlcyc7XG5pbXBvcnQgcmVxdWlyZWRQYXJhbWV0ZXIgZnJvbSAnLi4vcmVxdWlyZWRQYXJhbWV0ZXInO1xuaW1wb3J0IGRlZmF1bHRMb2dnZXIgZnJvbSAnLi4vbG9nZ2VyJztcbmltcG9ydCB7IFBhcnNlR3JhcGhRTFNjaGVtYSwgUkVTRVJWRURfR1JBUEhRTF9UWVBFX05BTUVTIH0gZnJvbSAnLi9QYXJzZUdyYXBoUUxTY2hlbWEnO1xuaW1wb3J0IHsgUkVBRF9QUkVGRVJFTkNFIH0gZnJvbSAnLi9sb2FkZXJzL2RlZmF1bHRHcmFwaFFMVHlwZXMnO1xuaW1wb3J0IFBhcnNlR3JhcGhRTENvbnRyb2xsZXIsIHsgUGFyc2VHcmFwaFFMQ29uZmlnIH0gZnJvbSAnLi4vQ29udHJvbGxlcnMvUGFyc2VHcmFwaFFMQ29udHJvbGxlcic7XG5pbXBvcnQgeyBjcmVhdGVDb21wbGV4aXR5VmFsaWRhdGlvblBsdWdpbiB9IGZyb20gJy4vaGVscGVycy9xdWVyeUNvbXBsZXhpdHknO1xuXG5cbmNvbnN0IGhhc1R5cGVJbnRyb3NwZWN0aW9uID0gKHF1ZXJ5KSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgYXN0ID0gcGFyc2UocXVlcnkpO1xuICAgIGNvbnN0IGNoZWNrU2VsZWN0aW9ucyA9IChzZWxlY3Rpb25zKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHNlbGVjdGlvbiBvZiBzZWxlY3Rpb25zKSB7XG4gICAgICAgIGlmIChzZWxlY3Rpb24ua2luZCA9PT0gJ0ZpZWxkJyAmJiBzZWxlY3Rpb24ubmFtZS52YWx1ZSA9PT0gJ19fdHlwZScpIHtcbiAgICAgICAgICBpZiAoc2VsZWN0aW9uLmFyZ3VtZW50cyAmJiBzZWxlY3Rpb24uYXJndW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VsZWN0aW9uLnNlbGVjdGlvblNldCkge1xuICAgICAgICAgIGlmIChjaGVja1NlbGVjdGlvbnMoc2VsZWN0aW9uLnNlbGVjdGlvblNldC5zZWxlY3Rpb25zKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICBmb3IgKGNvbnN0IGRlZmluaXRpb24gb2YgYXN0LmRlZmluaXRpb25zKSB7XG4gICAgICBpZiAoZGVmaW5pdGlvbi5zZWxlY3Rpb25TZXQpIHtcbiAgICAgICAgaWYgKGNoZWNrU2VsZWN0aW9ucyhkZWZpbml0aW9uLnNlbGVjdGlvblNldC5zZWxlY3Rpb25zKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5jb25zdCB0aHJvd0ludHJvc3BlY3Rpb25FcnJvciA9ICgpID0+IHtcbiAgdGhyb3cgbmV3IEdyYXBoUUxFcnJvcignSW50cm9zcGVjdGlvbiBpcyBub3QgYWxsb3dlZCcsIHtcbiAgICBleHRlbnNpb25zOiB7XG4gICAgICBodHRwOiB7XG4gICAgICAgIHN0YXR1czogNDAzLFxuICAgICAgfSxcbiAgICB9XG4gIH0pO1xufTtcblxuY29uc3QgSW50cm9zcGVjdGlvbkNvbnRyb2xQbHVnaW4gPSAocHVibGljSW50cm9zcGVjdGlvbikgPT4gKHtcblxuXG4gIHJlcXVlc3REaWRTdGFydDogKHJlcXVlc3RDb250ZXh0KSA9PiAoe1xuXG4gICAgZGlkUmVzb2x2ZU9wZXJhdGlvbjogYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gSWYgcHVibGljIGludHJvc3BlY3Rpb24gaXMgZW5hYmxlZCwgd2UgYWxsb3cgYWxsIGludHJvc3BlY3Rpb24gcXVlcmllc1xuICAgICAgaWYgKHB1YmxpY0ludHJvc3BlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBpc01hc3Rlck9yTWFpbnRlbmFuY2UgPSByZXF1ZXN0Q29udGV4dC5jb250ZXh0VmFsdWUuYXV0aD8uaXNNYXN0ZXIgfHwgcmVxdWVzdENvbnRleHQuY29udGV4dFZhbHVlLmF1dGg/LmlzTWFpbnRlbmFuY2VcbiAgICAgIGlmIChpc01hc3Rlck9yTWFpbnRlbmFuY2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBBcG9sbG8gcmVzb2x2ZXMgdGhlIG9wZXJhdGlvbiB0ZXh0IGludG8gYHJlcXVlc3RDb250ZXh0LnNvdXJjZWAgYmVmb3JlIHRoaXMgaG9va1xuICAgICAgLy8gcnVucyBhbmQgZ3VhcmFudGVlcyBpdCBpcyBzZXQgaGVyZS4gSXQgaXMgTk9UIHRoZSBzYW1lIGFzIGByZXF1ZXN0LnF1ZXJ5YDogb24gYW5cbiAgICAgIC8vIGF1dG9tYXRpYyBwZXJzaXN0ZWQgcXVlcnkgY2FjaGUgaGl0IHRoZSB0ZXh0IGNvbWVzIGZyb20gdGhlIHBlcnNpc3RlZC1xdWVyeSBjYWNoZVxuICAgICAgLy8gYW5kIGByZXF1ZXN0LnF1ZXJ5YCBpcyBuZXZlciBwb3B1bGF0ZWQsIHNvIHJlYWRpbmcgYHJlcXVlc3QucXVlcnlgIHdvdWxkIGxlYXZlXG4gICAgICAvLyBub3RoaW5nIHRvIGluc3BlY3QgYW5kIHNpbGVudGx5IHNraXAgYm90aCBndWFyZHMgYmVsb3cuIEFwb2xsbyBlbmFibGVzIGF1dG9tYXRpY1xuICAgICAgLy8gcGVyc2lzdGVkIHF1ZXJpZXMgYnkgZGVmYXVsdCwgc28gdGhhdCBwYXRoIGlzIHJlYWNoYWJsZSBvbiBldmVyeSBkZXBsb3ltZW50LiBGYWxsXG4gICAgICAvLyBiYWNrIHRvIGByZXF1ZXN0LnF1ZXJ5YCBvbmx5IGZvciByb2J1c3RuZXNzLCBhbmQgZmFpbCBjbG9zZWQgd2hlbiBuZWl0aGVyIGlzIGFcbiAgICAgIC8vIHN0cmluZyBzbyB0aGF0IGFuIG9wZXJhdGlvbiB3aGljaCBjYW5ub3QgYmUgaW5zcGVjdGVkIGlzIG5ldmVyIGFsbG93ZWQgdGhyb3VnaC5cbiAgICAgIGNvbnN0IHF1ZXJ5ID0gcmVxdWVzdENvbnRleHQuc291cmNlID8/IHJlcXVlc3RDb250ZXh0LnJlcXVlc3QucXVlcnk7XG5cbiAgICAgIC8vIEZhc3QgcGF0aDogc2ltcGxlIHN0cmluZyBjaGVjayBmb3IgX19zY2hlbWFcbiAgICAgIC8vIFRoaXMgYXZvaWRzIHBhcnNpbmcgdGhlIHF1ZXJ5IGluIG1vc3QgY2FzZXNcbiAgICAgIC8vIEFuIG9wZXJhdGlvbiB0ZXh0IHRoYXQgaXMgbm90IGEgc3RyaW5nIGNhbm5vdCBiZSBpbnNwZWN0ZWQgYXQgYWxsLCBzbyBpdCBpcyBkZW5pZWRcbiAgICAgIC8vIGZvciB0aGUgc2FtZSByZWFzb246IHRoaXMgZ3VhcmQgbXVzdCBuZXZlciBsZXQgYW4gb3BlcmF0aW9uIHRocm91Z2ggdW5pbnNwZWN0ZWQuXG4gICAgICBpZiAodHlwZW9mIHF1ZXJ5ICE9PSAnc3RyaW5nJyB8fCBxdWVyeS5pbmNsdWRlcygnX19zY2hlbWEnKSkge1xuICAgICAgICByZXR1cm4gdGhyb3dJbnRyb3NwZWN0aW9uRXJyb3IoKTtcbiAgICAgIH1cblxuICAgICAgLy8gU21hcnQgY2hlY2sgZm9yIF9fdHlwZTogb25seSBwYXJzZSBpZiB0aGUgc3RyaW5nIGlzIHByZXNlbnRcbiAgICAgIC8vIFRoaXMgYXZvaWRzIGZhbHNlIHBvc2l0aXZlcyAoZS5nLiwgXCJfX3R5cGVcIiBpbiBzdHJpbmdzIG9yIGNvbW1lbnRzKVxuICAgICAgLy8gd2hpbGUgc3RpbGwgYmVpbmcgZWZmaWNpZW50IGZvciB0aGUgY29tbW9uIGNhc2VcbiAgICAgIGlmIChxdWVyeS5pbmNsdWRlcygnX190eXBlJykgJiYgaGFzVHlwZUludHJvc3BlY3Rpb24ocXVlcnkpKSB7XG4gICAgICAgIHJldHVybiB0aHJvd0ludHJvc3BlY3Rpb25FcnJvcigpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgfSlcblxufSk7XG5cbi8vIGdyYXBocWwtanMgZW1iZWRzIFwiRGlkIHlvdSBtZWFuIC4uLj9cIiBoaW50cyBzb3VyY2VkIGZyb20gdGhlIGxpdmUgc2NoZW1hIGluXG4vLyBpdHMgZXJyb3IgbWVzc2FnZXMuIFRoZXkgYXJlIHByb2R1Y2VkIGluIHR3byBkaXN0aW5jdCBwaGFzZXM6XG4vLyAgIC0gdmFsaWRhdGlvbiBydWxlcyAoRmllbGRzT25Db3JyZWN0VHlwZVJ1bGUsIEtub3duQXJndW1lbnROYW1lc1J1bGUsXG4vLyAgICAgS25vd25UeXBlTmFtZXNSdWxlLCAuLi4pLCBhbmRcbi8vICAgLSB2YXJpYWJsZSBjb2VyY2lvbiAodW5rbm93biBlbnVtIHZhbHVlcywgdW5rbm93biBpbnB1dC1vYmplY3QgZmllbGRzKSxcbi8vICAgICB3aGljaCBydW5zIGR1cmluZyBleGVjdXRpb24sIGFmdGVyIHZhbGlkYXRpb24uXG4vLyBBbGwgb2YgdGhlc2UgYXJlIHJldHVybmVkIHRvIHRoZSBjYWxsZXIgYW5kIGRpc2Nsb3NlIHNjaGVtYSBpZGVudGlmaWVycyAoQ2xvdWRcbi8vIENvZGUgZnVuY3Rpb24gbmFtZXMsIGNsYXNzIGFuZCBmaWVsZCBuYW1lcykgdGhhdCB0aGUgaW50cm9zcGVjdGlvbiBndWFyZCBpc1xuLy8gbWVhbnQgdG8gaGlkZS4gU3RyaXAgdGhlIGhpbnQgc3VmZml4IGZyb20gZXZlcnkgcmV0dXJuZWQgZXJyb3Ig4oCUIGluY2x1ZGluZyB0aGVcbi8vIGNvcHkgZ3JhcGhxbC1qcyBkdXBsaWNhdGVzIGludG8gZXh0ZW5zaW9ucy5zdGFja3RyYWNlIGluIG5vbi1wcm9kdWN0aW9uIOKAlCBmb3Jcbi8vIGNhbGxlcnMgdGhhdCBhcmUgbm90IGFsbG93ZWQgdG8gaW50cm9zcGVjdC5cbmNvbnN0IHN0cmlwU2NoZW1hU3VnZ2VzdGlvbiA9IG1lc3NhZ2UgPT5cbiAgdHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnID8gbWVzc2FnZS5yZXBsYWNlKC8gP0RpZCB5b3UgbWVhbiguKz8pXFw/JC8sICcnKSA6IG1lc3NhZ2U7XG5cbi8vIGdyYXBocWwtanMgYWxzbyBlbWl0cyBhIGJhc2UgaW5wdXQtY29lcmNpb24gbWVzc2FnZSB0aGF0IG5hbWVzIGEgc2NoZW1hXG4vLyBpZGVudGlmaWVyIFdJVEhPVVQgYSBcIkRpZCB5b3UgbWVhblwiIGNsYXVzZSwgc28gdGhlIHN1Z2dlc3Rpb24gc3RyaXAgYWJvdmVcbi8vIGNhbm5vdCByZWFjaCBpdDogd2hlbiBhIHJlcXVpcmVkIGN1c3RvbSBpbnB1dCBmaWVsZCBpcyBvbWl0dGVkLCBjb2VyY2VJbnB1dFZhbHVlXG4vLyByZXR1cm5zICdGaWVsZCBcIjxuYW1lPlwiIG9mIHJlcXVpcmVkIHR5cGUgXCI8dHlwZT5cIiB3YXMgbm90IHByb3ZpZGVkLicsIGRpc2Nsb3Npbmdcbi8vIGEgZmllbGQgbmFtZSB0aGUgY2FsbGVyIG5ldmVyIHN1cHBsaWVkLiBSZWRhY3QgdGhlIHF1b3RlZCBpZGVudGlmaWVycyBmcm9tIHRoaXNcbi8vIHRlbXBsYXRlIHdoaWxlIHByZXNlcnZpbmcgdGhlIGVycm9yIHNoYXBlLCBmb3IgY2FsbGVycyB0aGF0IGFyZSBub3QgYWxsb3dlZCB0b1xuLy8gaW50cm9zcGVjdC4gVGhlIHNpYmxpbmcgY29lcmNpb24gbWVzc2FnZXMgKCcuLi4gaXMgbm90IGRlZmluZWQgYnkgdHlwZSBcIjx0eXBlPlwiLicsXG4vLyAnRXhwZWN0ZWQgdHlwZSBcIjx0eXBlPlwiIHRvIGJlIGFuIG9iamVjdC4nKSBhcmUgaW50ZW50aW9uYWxseSBsZWZ0IGludGFjdDogdGhleVxuLy8gb25seSBlY2hvIGFuIGlucHV0IHR5cGUgbmFtZSB0aGUgY2FsbGVyIGFscmVhZHkgcmVmZXJlbmNlZCBpbiB0aGUgb3BlcmF0aW9uLCBzb1xuLy8gdGhleSBkaXNjbG9zZSBub3RoaW5nIHRoZSBjYWxsZXIgZGlkIG5vdCBhbHJlYWR5IHByb3ZpZGUuXG5jb25zdCBzdHJpcFNjaGVtYUNvZXJjaW9uSWRlbnRpZmllcnMgPSBtZXNzYWdlID0+XG4gIHR5cGVvZiBtZXNzYWdlID09PSAnc3RyaW5nJ1xuICAgID8gbWVzc2FnZS5yZXBsYWNlKFxuICAgICAgL0ZpZWxkIFwiW15cIl0qXCIgb2YgcmVxdWlyZWQgdHlwZSBcIlteXCJdKlwiIHdhcyBub3QgcHJvdmlkZWRcXC4vZyxcbiAgICAgICdGaWVsZCBvZiByZXF1aXJlZCB0eXBlIHdhcyBub3QgcHJvdmlkZWQuJ1xuICAgIClcbiAgICA6IG1lc3NhZ2U7XG5cbi8vIFR5cGUgbmFtZXMgdGhhdCByZXZlYWwgbm90aGluZyBhYm91dCBUSElTIGFwcGxpY2F0aW9uJ3Mgc2NoZW1hLCBzbyByZWRhY3RpbmcgdGhlbSB3b3VsZCBjb3N0XG4vLyBtZXNzYWdlIHF1YWxpdHkgZm9yIG5vIHNlY3VyaXR5IGdhaW4uIGBSRVNFUlZFRF9HUkFQSFFMX1RZUEVfTkFNRVNgIGNvdmVycyB0aGUgbmFtZXMgdGhlIHNjaGVtYVxuLy8gYnVpbGRlciByZWZ1c2VzIHRvIGxldCBhIGNsYXNzIGdlbmVyYXRlLCBidXQgUGFyc2UgcmVnaXN0ZXJzIGJ1aWx0LWluIHR5cGVzIG91dHNpZGUgdGhhdCBsaXN0XG4vLyB0b28uIE9mIHRob3NlLCBvbmx5IGFuIEVOVU0gY2FuIHJlYWNoIHRoZSBlbnVtIHRlbXBsYXRlcyBiZWxvdywgYW5kIHRoZSBHcmFwaFFMIGxheWVyIGRlZmluZXNcbi8vIGV4YWN0bHkgdGhyZWUgZW51bXM6IGBDbG91ZENvZGVGdW5jdGlvbmAgKHJlc2VydmVkKSwgdGhlIHBlci1jbGFzcyBgPENsYXNzPk9yZGVyYCAodGhlXG4vLyBkaXNjbG9zdXJlIHRoZXNlIHRlbXBsYXRlcyBleGlzdCB0byByZWRhY3QpIGFuZCBgUmVhZFByZWZlcmVuY2VgLiBJbmNsdWRlIHRoZSBsYXN0IG9uZSBzbyB0aGF0XG4vLyBhbiBpbnZhbGlkIGBvcHRpb25zLnJlYWRQcmVmZXJlbmNlYCB2YWx1ZSBzdGlsbCBuYW1lcyBpdHMgZW51bSwganVzdCBhcyBgQ2xvdWRDb2RlRnVuY3Rpb25gXG4vLyBkb2VzIOKAlCBpdCBpcyBpZGVudGljYWwgb24gZXZlcnkgZGVwbG95bWVudCBhbmQgcmVhY2hhYmxlIGZyb20gZXZlcnkgZ2VuZXJhdGVkIGZpbmQgcXVlcnkuXG5jb25zdCBOT05fRElTQ0xPU0lOR19UWVBFX05BTUVTID0gbmV3IFNldChbLi4uUkVTRVJWRURfR1JBUEhRTF9UWVBFX05BTUVTLCBSRUFEX1BSRUZFUkVOQ0UubmFtZV0pO1xuXG4vLyBncmFwaHFsLWpzIGFsc28gZW1pdHMgYmFzZSBjb2VyY2lvbiAvIHZhbGlkYXRpb24gbWVzc2FnZXMgdGhhdCBuYW1lIGEgbmVzdGVkIGlucHV0XG4vLyBUWVBFIHdpdGhvdXQgYSBcIkRpZCB5b3UgbWVhblwiIGNsYXVzZSwgc28gbmVpdGhlciBzdHJpcCBhYm92ZSByZWFjaGVzIHRoZW0uIEZvciBhXG4vLyBQb2ludGVyIG9yIFJlbGF0aW9uIGZpZWxkIHRoZSBnZW5lcmF0ZWQgaW5wdXQgdHlwZSBuYW1lIGVtYmVkcyB0aGUgcG9pbnRlcidzIFRBUkdFVFxuLy8gY2xhc3MgKGA8VGFyZ2V0PlBvaW50ZXJJbnB1dGAsIGA8VGFyZ2V0PlJlbGF0aW9uV2hlcmVJbnB1dGAsIGBDcmVhdGU8VGFyZ2V0PkZpZWxkc0lucHV0YClcbi8vIOKAlCBhIGNsYXNzIHRoZSBjYWxsZXIgbmV2ZXIgcmVmZXJlbmNlZCBhbmQgY2Fubm90IGRlcml2ZSBmcm9tIHRoZSBmaWVsZCBuYW1lIHRoZXlcbi8vIHN1cHBsaWVkIOKAlCBzbyB0aGVzZSB0ZW1wbGF0ZXMgZGlzY2xvc2UgYSBzY2hlbWEgY2xhc3MgbmFtZSB0byBhIGNhbGxlciB3aG8gaGFzIG9ubHkgdGhlXG4vLyBwdWJsaWMgYXBwbGljYXRpb24gaWQuIFJlZGFjdCB0aGUgcXVvdGVkIHR5cGUgaWRlbnRpZmllciBmcm9tIHRob3NlIHRlbXBsYXRlcyBVTkxFU1MgdGhlXG4vLyBjYWxsZXIgcmVmZXJlbmNlZCBpdCBpbiB0aGUgb3BlcmF0aW9uIHRleHQ6IGEgdHlwZSBuYW1lIHRoZSBjYWxsZXIgd3JvdGUgaW4gdGhlIG9wZXJhdGlvblxuLy8gKGUuZy4gYCR3aGVyZTogVXNlcldoZXJlSW5wdXRgKSBpcyBub3QgYSBkaXNjbG9zdXJlLCBhbmQgcHJlc2VydmluZyBpdCBrZWVwcyB0aGUgbWVzc2FnZVxuLy8gKCcuLi4gaXMgbm90IGRlZmluZWQgYnkgdHlwZSBcIlVzZXJXaGVyZUlucHV0XCIuJykgdXNlZnVsLiBXaGVuIHRoZSBvcGVyYXRpb24gdGV4dCBpc1xuLy8gdW5hdmFpbGFibGUgdGhlIGlkZW50aWZpZXIgaXMgcmVkYWN0ZWQgKGZhaWwgY2xvc2VkKS5cbmNvbnN0IHN0cmlwU2NoZW1hVHlwZUlkZW50aWZpZXJzID0gKG1lc3NhZ2UsIG9wZXJhdGlvblRleHQpID0+IHtcbiAgaWYgKHR5cGVvZiBtZXNzYWdlICE9PSAnc3RyaW5nJykgeyByZXR1cm4gbWVzc2FnZTsgfVxuICAvLyBBIGdlbmVyYXRlZCB0eXBlIGlkZW50aWZpZXIgaXMga2VwdCAoaXQgaXMgbm90IGEgZGlzY2xvc3VyZSkgaWYgdGhlIGNhbGxlciB3cm90ZSBpdCBhcyBhXG4gIC8vIHdob2xlIHRva2VuIGluIHRoZSBvcGVyYXRpb24gdGV4dCwgb3IgaWYgaXQgaXMgYSBub24tZGlzY2xvc2luZyBuYW1lIChhYm92ZSkuIFRva2VuaXplIHRoZVxuICAvLyBvcGVyYXRpb24gb24gbm9uLWlkZW50aWZpZXIgY2hhcmFjdGVycyBhbmQgY29tcGFyZSBleGFjdCB0b2tlbnMgcmF0aGVyIHRoYW4gYnVpbGRpbmcgYVxuICAvLyBSZWdFeHAgZnJvbSB0aGUgY2FwdHVyZWQgbmFtZTogdGhpcyBhdm9pZHMgc3Vic3RyaW5nIGZhbHNlLW1hdGNoZXMgKGUuZy4gcHJlc2VydmluZ1xuICAvLyBcIkF1dGhvclBvaW50ZXJJbnB1dFwiIGJlY2F1c2UgdGhlIG9wZXJhdGlvbiBjb250YWlucyBcIlNlY3JldEF1dGhvclBvaW50ZXJJbnB1dFwiKSBhbmQgYW55XG4gIC8vIHJlZ2V4IGluamVjdGlvbi9SZURvUyBmcm9tIGFuIHVudXN1YWwgY2FwdHVyZWQgbmFtZS4gR3JhcGhRTCBsaXN0L25vbi1udWxsIHdyYXBwZXJzIChcIltcIixcbiAgLy8gXCJdXCIsIFwiIVwiKSBhcmUgc3RyaXBwZWQgZnJvbSB0aGUgY2FwdHVyZWQgbmFtZSBzbyBlLmcuIFwiU2VjcmV0QXV0aG9yUG9pbnRlcklucHV0IVwiIHN0aWxsXG4gIC8vIG1hdGNoZXMgXCIkeDogU2VjcmV0QXV0aG9yUG9pbnRlcklucHV0IVwiLiBXaGVuIHRoZSBvcGVyYXRpb24gdGV4dCBpcyB1bmF2YWlsYWJsZSB0aGUgdHlwZSBpc1xuICAvLyB0cmVhdGVkIGFzIG5vdCByZWZlcmVuY2VkIChmYWlsIGNsb3NlZCkuXG4gIGNvbnN0IHJlZmVyZW5jZWRUb2tlbnMgPVxuICAgIHR5cGVvZiBvcGVyYXRpb25UZXh0ID09PSAnc3RyaW5nJ1xuICAgICAgPyBuZXcgU2V0KG9wZXJhdGlvblRleHQuc3BsaXQoL1teX0EtWmEtejAtOV0rLykuZmlsdGVyKEJvb2xlYW4pKVxuICAgICAgOiBuZXcgU2V0KCk7XG4gIC8vIEEgbm9uLWRpc2Nsb3NpbmcgdHlwZSBuYW1lIChgQ2xvdWRDb2RlRnVuY3Rpb25gLCBgUmVhZFByZWZlcmVuY2VgLCBgVmlld2VyYCwgYFBhZ2VJbmZvYCwgdGhlXG4gIC8vIGJ1aWx0LWluIHNjYWxhcnMsIC4uLikgaXMgaWRlbnRpY2FsIG9uIGV2ZXJ5IFBhcnNlIFNlcnZlciBkZXBsb3ltZW50IGFuZCBjYW5ub3QgY29sbGlkZSB3aXRoXG4gIC8vIGEgdXNlciBjbGFzcywgc2luY2UgYFBhcnNlR3JhcGhRTFNjaGVtYWAgcmVqZWN0cyBjbGFzcyBuYW1lcyB0aGF0IHdvdWxkIHByb2R1Y2Ugb25lLiBFY2hvaW5nXG4gIC8vIG9uZSB0aGVyZWZvcmUgZGlzY2xvc2VzIG5vdGhpbmcgYWJvdXQgVEhJUyBhcHBsaWNhdGlvbidzIHNjaGVtYSwgc28gaXQgaXMgcHJlc2VydmVkIGxpa2UgYVxuICAvLyBjYWxsZXItcmVmZXJlbmNlZCBuYW1lIGFuZCB0aGUgbWVzc2FnZSBzdGF5cyB1c2VmdWwuXG4gIGNvbnN0IHNob3VsZEtlZXBUeXBlTmFtZSA9IHR5cGVOYW1lID0+IHtcbiAgICBjb25zdCBiYXJlVHlwZU5hbWUgPSB0eXBlTmFtZS5yZXBsYWNlKC9bW1xcXSFdL2csICcnKTtcbiAgICByZXR1cm4gTk9OX0RJU0NMT1NJTkdfVFlQRV9OQU1FUy5oYXMoYmFyZVR5cGVOYW1lKSB8fCByZWZlcmVuY2VkVG9rZW5zLmhhcyhiYXJlVHlwZU5hbWUpO1xuICB9O1xuICByZXR1cm4gbWVzc2FnZVxuICAgIC8vIElucHV0IGNvZXJjaW9uIC8gVmFsdWVzT2ZDb3JyZWN0VHlwZVJ1bGUgKHZhcmlhYmxlcyBhbmQgaW5saW5lIGxpdGVyYWxzKS5cbiAgICAucmVwbGFjZSgvRXhwZWN0ZWQgdmFsdWUgb2YgdHlwZSBcIihbXlwiXSspXCIvZywgKG1hdGNoLCB0eXBlTmFtZSkgPT5cbiAgICAgIHNob3VsZEtlZXBUeXBlTmFtZSh0eXBlTmFtZSkgPyBtYXRjaCA6ICdFeHBlY3RlZCB2YWx1ZSBvZiB0aGUgY29ycmVjdCB0eXBlJ1xuICAgIClcbiAgICAucmVwbGFjZSgvRXhwZWN0ZWQgdHlwZSBcIihbXlwiXSspXCIgdG8gYmUgYW4gb2JqZWN0XFwuL2csIChtYXRjaCwgdHlwZU5hbWUpID0+XG4gICAgICBzaG91bGRLZWVwVHlwZU5hbWUodHlwZU5hbWUpID8gbWF0Y2ggOiAnRXhwZWN0ZWQgYW4gb2JqZWN0LidcbiAgICApXG4gICAgLnJlcGxhY2UoL0V4cGVjdGVkIG5vbi1udWxsYWJsZSB0eXBlIFwiKFteXCJdKylcIiBub3QgdG8gYmUgbnVsbFxcLi9nLCAobWF0Y2gsIHR5cGVOYW1lKSA9PlxuICAgICAgc2hvdWxkS2VlcFR5cGVOYW1lKHR5cGVOYW1lKSA/IG1hdGNoIDogJ0V4cGVjdGVkIGEgbm9uLW51bGwgdmFsdWUuJ1xuICAgIClcbiAgICAucmVwbGFjZSgvIGlzIG5vdCBkZWZpbmVkIGJ5IHR5cGUgXCIoW15cIl0rKVwiXFwuL2csIChtYXRjaCwgdHlwZU5hbWUpID0+XG4gICAgICBzaG91bGRLZWVwVHlwZU5hbWUodHlwZU5hbWUpID8gbWF0Y2ggOiAnIGlzIG5vdCBkZWZpbmVkLidcbiAgICApXG4gICAgLy8gVmFyaWFibGVzSW5BbGxvd2VkUG9zaXRpb25SdWxlOiB0aGUgcG9zaXRpb24gdHlwZSBpcyB0aGUgcG9pbnRlci9yZWxhdGlvbiB0YXJnZXRcbiAgICAvLyBpbnB1dCB0eXBlOyB0aGUgY2FsbGVyIG9ubHkgd3JvdGUgdGhlaXIgb3duIHZhcmlhYmxlJ3MgZGVjbGFyZWQgdHlwZS5cbiAgICAucmVwbGFjZSgvIHVzZWQgaW4gcG9zaXRpb24gZXhwZWN0aW5nIHR5cGUgXCIoW15cIl0rKVwiXFwuL2csIChtYXRjaCwgdHlwZU5hbWUpID0+XG4gICAgICBzaG91bGRLZWVwVHlwZU5hbWUodHlwZU5hbWUpID8gbWF0Y2ggOiAnIHVzZWQgaW4gcG9zaXRpb24gZXhwZWN0aW5nIGEgZGlmZmVyZW50IHR5cGUuJ1xuICAgIClcbiAgICAvLyBGaWVsZHNPbkNvcnJlY3RUeXBlUnVsZTogZGVzY2VuZGluZyBpbnRvIGEgUG9pbnRlci9SZWxhdGlvbiBvdXRwdXQgZmllbGQgbmFtZXMgaXRzXG4gICAgLy8gdGFyZ2V0IG91dHB1dCBvYmplY3QgdHlwZS5cbiAgICAucmVwbGFjZSgvQ2Fubm90IHF1ZXJ5IGZpZWxkIChcIlteXCJdKlwiKSBvbiB0eXBlIFwiKFteXCJdKylcIlxcLi9nLCAobWF0Y2gsIGZpZWxkTmFtZSwgdHlwZU5hbWUpID0+XG4gICAgICBzaG91bGRLZWVwVHlwZU5hbWUodHlwZU5hbWUpID8gbWF0Y2ggOiBgQ2Fubm90IHF1ZXJ5IGZpZWxkICR7ZmllbGROYW1lfS5gXG4gICAgKVxuICAgIC8vIFNjYWxhckxlYWZzUnVsZTogc2VsZWN0aW5nIGEgUG9pbnRlci9SZWxhdGlvbiBvdXRwdXQgZmllbGQgd2l0aCBubyBzdWItc2VsZWN0aW9uIG5hbWVzXG4gICAgLy8gaXRzIHRhcmdldCBvdXRwdXQgb2JqZWN0IHR5cGUuXG4gICAgLnJlcGxhY2UoXG4gICAgICAvRmllbGQgKFwiW15cIl0qXCIpIG9mIHR5cGUgXCIoW15cIl0rKVwiIG11c3QgaGF2ZSBhIHNlbGVjdGlvbiBvZiBzdWJmaWVsZHNcXC4vZyxcbiAgICAgIChtYXRjaCwgZmllbGROYW1lLCB0eXBlTmFtZSkgPT5cbiAgICAgICAgc2hvdWxkS2VlcFR5cGVOYW1lKHR5cGVOYW1lKVxuICAgICAgICAgID8gbWF0Y2hcbiAgICAgICAgICA6IGBGaWVsZCAke2ZpZWxkTmFtZX0gbXVzdCBoYXZlIGEgc2VsZWN0aW9uIG9mIHN1YmZpZWxkcy5gXG4gICAgKVxuICAgIC8vIFBvc3NpYmxlRnJhZ21lbnRTcHJlYWRzUnVsZTogYW4gaW5saW5lL25hbWVkIGZyYWdtZW50IG9uIGFuIGluY29tcGF0aWJsZSB0eXBlIGluc2lkZSBhXG4gICAgLy8gUG9pbnRlci9SZWxhdGlvbiBvdXRwdXQgZmllbGQgbmFtZXMgdGhlIHRhcmdldCBvdXRwdXQgb2JqZWN0IHR5cGUgKHRoZSBwYXJlbnQgdHlwZSkuXG4gICAgLy8gUmVkYWN0IGVhY2ggdHlwZSB0b2tlbiB0aGUgY2FsbGVyIGRpZCBub3QgcmVmZXJlbmNlOyB3aGVuIGJvdGggYXJlIHJlZmVyZW5jZWQgdGhlXG4gICAgLy8gcmVjb25zdHJ1Y3Rpb24gaXMgaWRlbnRpY2FsIHRvIHRoZSBvcmlnaW5hbCBtZXNzYWdlLlxuICAgIC5yZXBsYWNlKFxuICAgICAgL29iamVjdHMgb2YgdHlwZSBcIihbXlwiXSspXCIgY2FuIG5ldmVyIGJlIG9mIHR5cGUgXCIoW15cIl0rKVwiXFwuL2csXG4gICAgICAobWF0Y2gsIHBhcmVudFR5cGUsIGZyYWdUeXBlKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IHNob3VsZEtlZXBUeXBlTmFtZShwYXJlbnRUeXBlKSA/IGB0eXBlIFwiJHtwYXJlbnRUeXBlfVwiYCA6ICd0aGUgcGFyZW50IHR5cGUnO1xuICAgICAgICBjb25zdCBmcmFnID0gc2hvdWxkS2VlcFR5cGVOYW1lKGZyYWdUeXBlKSA/IGB0eXBlIFwiJHtmcmFnVHlwZX1cImAgOiAndGhlIGdpdmVuIHR5cGUnO1xuICAgICAgICByZXR1cm4gYG9iamVjdHMgb2YgJHtwYXJlbnR9IGNhbiBuZXZlciBiZSBvZiAke2ZyYWd9LmA7XG4gICAgICB9XG4gICAgKVxuICAgIC8vIEtub3duQXJndW1lbnROYW1lc1J1bGU6IHRoZSBhcmd1bWVudCdzIHBhcmVudCBPVVRQVVQgdHlwZS4gSW5zaWRlIGEgUG9pbnRlci9SZWxhdGlvblxuICAgIC8vIHN1Yi1zZWxlY3Rpb24gdGhhdCBwYXJlbnQgaXMgdGhlIFRBUkdFVCBjbGFzcywgd2hvc2Ugb3V0cHV0IHR5cGUgaXMgbmFtZWQgZXhhY3RseSB0aGVcbiAgICAvLyBjbGFzcyBuYW1lIChgcGFyc2VDbGFzc1R5cGVzLmpzYCksIHNvIGl0IGRpc2Nsb3NlcyBhIGNsYXNzIHRoZSBjYWxsZXIgbmV2ZXIgd3JvdGUg4oCUIHRoZXlcbiAgICAvLyBvbmx5IHN1cHBsaWVkIHRoZSBwb2ludGVyIGZpZWxkIG5hbWUuIFRoZSB0eXBlIGlzIGVtYmVkZGVkIGluIGEgZG90dGVkIFwiPFR5cGU+LjxmaWVsZD5cIlxuICAgIC8vIHRva2VuOyBrZWVwIHRoZSBmaWVsZCBuYW1lICh0aGUgY2FsbGVyIHdyb3RlIGl0KSBhbmQgcmVkYWN0IG9ubHkgdGhlIHR5cGUgaGFsZi4gTm90ZSB0aGVcbiAgICAvLyBkaXJlY3RpdmUgZm9ybSAoJy4uLiBvbiBkaXJlY3RpdmUgXCJAbmFtZVwiLicpIGNhcnJpZXMgbm8gdHlwZSBhbmQgaXMgbGVmdCBhbG9uZS5cbiAgICAucmVwbGFjZShcbiAgICAgIC9Vbmtub3duIGFyZ3VtZW50IChcIlteXCJdKlwiKSBvbiBmaWVsZCBcIihbXlwiLl0rKVxcLihbXlwiLl0rKVwiXFwuL2csXG4gICAgICAobWF0Y2gsIGFyZ05hbWUsIHR5cGVOYW1lLCBmaWVsZE5hbWUpID0+XG4gICAgICAgIHNob3VsZEtlZXBUeXBlTmFtZSh0eXBlTmFtZSlcbiAgICAgICAgICA/IG1hdGNoXG4gICAgICAgICAgOiBgVW5rbm93biBhcmd1bWVudCAke2FyZ05hbWV9IG9uIGZpZWxkIFwiJHtmaWVsZE5hbWV9XCIuYFxuICAgIClcbiAgICAvLyBHcmFwaFFMRW51bVR5cGUucGFyc2VWYWx1ZS9wYXJzZUxpdGVyYWw6IGEgUmVsYXRpb24gZmllbGQncyBgb3JkZXJgIGFyZ3VtZW50IGlzIHR5cGVkXG4gICAgLy8gYFs8VGFyZ2V0Pk9yZGVyIV1gIChgcGFyc2VDbGFzc1R5cGVzLmpzYCksIHNvIGFuIGludmFsaWQgZW51bSBsaXRlcmFsIG5hbWVzIHRoZSB0YXJnZXRcbiAgICAvLyBjbGFzcy4gVGhlc2UgbWVzc2FnZXMgY29tZSBmcm9tIHRoZSBlbnVtIHR5cGUgaXRzZWxmIHJhdGhlciB0aGFuIGZyb20gYSB2YWxpZGF0aW9uIHJ1bGUsXG4gICAgLy8gd2hpY2ggaXMgd2h5IHRoZSBWYWx1ZXNPZkNvcnJlY3RUeXBlUnVsZSB0ZW1wbGF0ZXMgYWJvdmUgZG8gbm90IHJlYWNoIHRoZW0uIFRoZSBvZmZlbmRpbmdcbiAgICAvLyB2YWx1ZSBpcyBjYWxsZXItc3VwcGxpZWQgYW5kIGlzIHByZXNlcnZlZDsgb25seSB0aGUgZW51bSB0eXBlIG5hbWUgaXMgcmVkYWN0ZWQuXG4gICAgLnJlcGxhY2UoL1ZhbHVlIChcIlteXCJdKlwiKSBkb2VzIG5vdCBleGlzdCBpbiBcIihbXlwiXSspXCIgZW51bVxcLi9nLCAobWF0Y2gsIHZhbHVlLCB0eXBlTmFtZSkgPT5cbiAgICAgIHNob3VsZEtlZXBUeXBlTmFtZSh0eXBlTmFtZSkgPyBtYXRjaCA6IGBWYWx1ZSAke3ZhbHVlfSBkb2VzIG5vdCBleGlzdCBpbiB0aGUgZW51bS5gXG4gICAgKVxuICAgIC8vIFNpYmxpbmcgYnJhbmNoZXMgb2YgdGhlIHNhbWUgZW51bSB0eXBlLCByZWFjaGVkIHdoZW4gdGhlIGxpdGVyYWwgaXMgbm90IGFuIGVudW0gdmFsdWUgYXRcbiAgICAvLyBhbGwgKCdjYW5ub3QgcmVwcmVzZW50IG5vbi1lbnVtIHZhbHVlOiAuLi4nLCAnY2Fubm90IHJlcHJlc2VudCBub24tc3RyaW5nIHZhbHVlOiAuLi4nLFxuICAgIC8vICdjYW5ub3QgcmVwcmVzZW50IHZhbHVlOiAuLi4nKS4gU2FtZSBkaXNjbG9zdXJlLCBzYW1lIHJlZGFjdGlvbi5cbiAgICAucmVwbGFjZSgvRW51bSBcIihbXlwiXSspXCIgY2Fubm90IHJlcHJlc2VudCAvZywgKG1hdGNoLCB0eXBlTmFtZSkgPT5cbiAgICAgIHNob3VsZEtlZXBUeXBlTmFtZSh0eXBlTmFtZSkgPyBtYXRjaCA6ICdFbnVtIGNhbm5vdCByZXByZXNlbnQgJ1xuICAgICk7XG59O1xuXG5jb25zdCBzdHJpcFNjaGVtYUlkZW50aWZpZXJzID0gKG1lc3NhZ2UsIG9wZXJhdGlvblRleHQpID0+XG4gIHN0cmlwU2NoZW1hVHlwZUlkZW50aWZpZXJzKFxuICAgIHN0cmlwU2NoZW1hQ29lcmNpb25JZGVudGlmaWVycyhzdHJpcFNjaGVtYVN1Z2dlc3Rpb24obWVzc2FnZSkpLFxuICAgIG9wZXJhdGlvblRleHRcbiAgKTtcblxuY29uc3QgU2NoZW1hU3VnZ2VzdGlvbnNDb250cm9sUGx1Z2luID0gKHB1YmxpY0ludHJvc3BlY3Rpb24pID0+ICh7XG4gIHJlcXVlc3REaWRTdGFydDogYXN5bmMgKHJlcXVlc3RDb250ZXh0KSA9PiAoe1xuICAgIHdpbGxTZW5kUmVzcG9uc2U6IGFzeW5jICgpID0+IHtcbiAgICAgIGlmIChwdWJsaWNJbnRyb3NwZWN0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlzTWFzdGVyT3JNYWludGVuYW5jZSA9XG4gICAgICAgIHJlcXVlc3RDb250ZXh0LmNvbnRleHRWYWx1ZS5hdXRoPy5pc01hc3RlciB8fFxuICAgICAgICByZXF1ZXN0Q29udGV4dC5jb250ZXh0VmFsdWUuYXV0aD8uaXNNYWludGVuYW5jZTtcbiAgICAgIGlmIChpc01hc3Rlck9yTWFpbnRlbmFuY2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgYm9keSA9IHJlcXVlc3RDb250ZXh0LnJlc3BvbnNlPy5ib2R5O1xuICAgICAgY29uc3QgZXJyb3JzID1cbiAgICAgICAgYm9keT8ua2luZCA9PT0gJ3NpbmdsZSdcbiAgICAgICAgICA/IGJvZHkuc2luZ2xlUmVzdWx0LmVycm9yc1xuICAgICAgICAgIDogYm9keT8ua2luZCA9PT0gJ2luY3JlbWVudGFsJ1xuICAgICAgICAgICAgPyBib2R5LmluaXRpYWxSZXN1bHQuZXJyb3JzXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIC8vIFNhbWUgYXMgaW4gYEludHJvc3BlY3Rpb25Db250cm9sUGx1Z2luYDogYHJlcXVlc3RDb250ZXh0LnNvdXJjZWAgY2FycmllcyB0aGVcbiAgICAgIC8vIG9wZXJhdGlvbiB0ZXh0IGZvciBldmVyeSByZXF1ZXN0LCBpbmNsdWRpbmcgYW4gYXV0b21hdGljIHBlcnNpc3RlZCBxdWVyeSBjYWNoZSBoaXRcbiAgICAgIC8vIHdoZXJlIGByZXF1ZXN0LnF1ZXJ5YCBpcyB1bmRlZmluZWQuIFJlYWRpbmcgYHJlcXVlc3QucXVlcnlgIGFsb25lIHdvdWxkIG1ha2UgdGhlXG4gICAgICAvLyBhbGxvd2xpc3QgYmVsb3cgZW1wdHkgb24gdGhvc2UgcmVxdWVzdHMgYW5kIHJlZGFjdCB0eXBlIG5hbWVzIHRoZSBjYWxsZXIgd3JvdGVcbiAgICAgIC8vIHRoZW1zZWx2ZXMuXG4gICAgICBjb25zdCBvcGVyYXRpb25UZXh0ID0gcmVxdWVzdENvbnRleHQuc291cmNlID8/IHJlcXVlc3RDb250ZXh0LnJlcXVlc3Q/LnF1ZXJ5O1xuICAgICAgZXJyb3JzPy5mb3JFYWNoKGVycm9yID0+IHtcbiAgICAgICAgZXJyb3IubWVzc2FnZSA9IHN0cmlwU2NoZW1hSWRlbnRpZmllcnMoZXJyb3IubWVzc2FnZSwgb3BlcmF0aW9uVGV4dCk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGVycm9yLmV4dGVuc2lvbnM/LnN0YWNrdHJhY2UpKSB7XG4gICAgICAgICAgZXJyb3IuZXh0ZW5zaW9ucy5zdGFja3RyYWNlID0gZXJyb3IuZXh0ZW5zaW9ucy5zdGFja3RyYWNlLm1hcChtZXNzYWdlID0+XG4gICAgICAgICAgICBzdHJpcFNjaGVtYUlkZW50aWZpZXJzKG1lc3NhZ2UsIG9wZXJhdGlvblRleHQpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgfSksXG59KTtcblxuY2xhc3MgUGFyc2VHcmFwaFFMU2VydmVyIHtcbiAgcGFyc2VHcmFwaFFMQ29udHJvbGxlcjogUGFyc2VHcmFwaFFMQ29udHJvbGxlcjtcblxuICBjb25zdHJ1Y3RvcihwYXJzZVNlcnZlciwgY29uZmlnKSB7XG4gICAgdGhpcy5wYXJzZVNlcnZlciA9IHBhcnNlU2VydmVyIHx8IHJlcXVpcmVkUGFyYW1ldGVyKCdZb3UgbXVzdCBwcm92aWRlIGEgcGFyc2VTZXJ2ZXIgaW5zdGFuY2UhJyk7XG4gICAgaWYgKCFjb25maWcgfHwgIWNvbmZpZy5ncmFwaFFMUGF0aCkge1xuICAgICAgcmVxdWlyZWRQYXJhbWV0ZXIoJ1lvdSBtdXN0IHByb3ZpZGUgYSBjb25maWcuZ3JhcGhRTFBhdGghJyk7XG4gICAgfVxuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgIHRoaXMucGFyc2VHcmFwaFFMQ29udHJvbGxlciA9IHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnLnBhcnNlR3JhcGhRTENvbnRyb2xsZXI7XG4gICAgdGhpcy5sb2cgPVxuICAgICAgKHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnICYmIHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnLmxvZ2dlckNvbnRyb2xsZXIpIHx8IGRlZmF1bHRMb2dnZXI7XG4gICAgdGhpcy5wYXJzZUdyYXBoUUxTY2hlbWEgPSBuZXcgUGFyc2VHcmFwaFFMU2NoZW1hKHtcbiAgICAgIHBhcnNlR3JhcGhRTENvbnRyb2xsZXI6IHRoaXMucGFyc2VHcmFwaFFMQ29udHJvbGxlcixcbiAgICAgIGRhdGFiYXNlQ29udHJvbGxlcjogdGhpcy5wYXJzZVNlcnZlci5jb25maWcuZGF0YWJhc2VDb250cm9sbGVyLFxuICAgICAgbG9nOiB0aGlzLmxvZyxcbiAgICAgIGdyYXBoUUxDdXN0b21UeXBlRGVmczogdGhpcy5jb25maWcuZ3JhcGhRTEN1c3RvbVR5cGVEZWZzLFxuICAgICAgYXBwSWQ6IHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnLmFwcElkLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgX2dldEdyYXBoUUxPcHRpb25zKCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzY2hlbWE6IGF3YWl0IHRoaXMucGFyc2VHcmFwaFFMU2NoZW1hLmxvYWQoKSxcbiAgICAgICAgY29udGV4dDogYXN5bmMgKHsgcmVxIH0pID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW5mbzogcmVxLmluZm8sXG4gICAgICAgICAgICBjb25maWc6IHJlcS5jb25maWcsXG4gICAgICAgICAgICBhdXRoOiByZXEuYXV0aCxcbiAgICAgICAgICB9O1xuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmxvZy5lcnJvcihlLnN0YWNrIHx8ICh0eXBlb2YgZS50b1N0cmluZyA9PT0gJ2Z1bmN0aW9uJyAmJiBlLnRvU3RyaW5nKCkpIHx8IGUpO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBfZ2V0U2VydmVyKCkge1xuICAgIGNvbnN0IHNjaGVtYVJlZiA9IHRoaXMucGFyc2VHcmFwaFFMU2NoZW1hLmdyYXBoUUxTY2hlbWE7XG4gICAgY29uc3QgbmV3U2NoZW1hUmVmID0gYXdhaXQgdGhpcy5wYXJzZUdyYXBoUUxTY2hlbWEubG9hZCgpO1xuICAgIGlmIChzY2hlbWFSZWYgPT09IG5ld1NjaGVtYVJlZiAmJiB0aGlzLl9zZXJ2ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zZXJ2ZXI7XG4gICAgfVxuICAgIC8vIEl0IG1lYW5zIGEgcGFyYWxsZWwgX2dldFNlcnZlciBjYWxsIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3NcbiAgICBpZiAodGhpcy5fc2NoZW1hUmVmTXV0ZXggPT09IG5ld1NjaGVtYVJlZikge1xuICAgICAgcmV0dXJuIHRoaXMuX3NlcnZlcjtcbiAgICB9XG4gICAgLy8gVXBkYXRlIHRoZSBzY2hlbWEgcmVmIG11dGV4IHRvIGF2b2lkIHBhcmFsbGVsIF9nZXRTZXJ2ZXIgY2FsbHNcbiAgICB0aGlzLl9zY2hlbWFSZWZNdXRleCA9IG5ld1NjaGVtYVJlZjtcbiAgICBjb25zdCBjcmVhdGVTZXJ2ZXIgPSBhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IHNjaGVtYSwgY29udGV4dCB9ID0gYXdhaXQgdGhpcy5fZ2V0R3JhcGhRTE9wdGlvbnMoKTtcbiAgICAgICAgLy8gQSB2YWx1ZSBwYXNzZWQgdG8gdGhpcyBHcmFwaFFMIHNlcnZlciB0YWtlcyBwcmVjZWRlbmNlOyBvdGhlcndpc2UgdXNlIHRoZSBQYXJzZSBTZXJ2ZXJcbiAgICAgICAgLy8gb3B0aW9uLCB3aGVyZSB0aGUgb3B0aW9uIGlzIGRvY3VtZW50ZWQgYW5kIHdoZXJlIHRoZSBzZWN1cml0eSBjaGVjayByZWFkcyBpdC5cbiAgICAgICAgY29uc3QgcHVibGljSW50cm9zcGVjdGlvbiA9XG4gICAgICAgICAgdGhpcy5jb25maWcuZ3JhcGhRTFB1YmxpY0ludHJvc3BlY3Rpb24gPz9cbiAgICAgICAgICB0aGlzLnBhcnNlU2VydmVyLmNvbmZpZy5ncmFwaFFMUHVibGljSW50cm9zcGVjdGlvbjtcbiAgICAgICAgY29uc3QgYXBvbGxvID0gbmV3IEFwb2xsb1NlcnZlcih7XG4gICAgICAgICAgY3NyZlByZXZlbnRpb246IHtcbiAgICAgICAgICAgIC8vIFNlZSBodHRwczovL3d3dy5hcG9sbG9ncmFwaHFsLmNvbS9kb2NzL3JvdXRlci9jb25maWd1cmF0aW9uL2NzcmYvXG4gICAgICAgICAgICAvLyBuZWVkZWQgc2luY2Ugd2UgdXNlIGdyYXBocWwgdXBsb2FkXG4gICAgICAgICAgICByZXF1ZXN0SGVhZGVyczogWydYLVBhcnNlLUFwcGxpY2F0aW9uLUlkJ10sXG4gICAgICAgICAgfSxcbiAgICAgICAgICAvLyBXZSBuZWVkIGFsd2F5cyB0cnVlIGludHJvc3BlY3Rpb24gYmVjYXVzZSBhcG9sbG8gc2VydmVyIGhhdmUgY2hhbmdpbmcgYmVoYXZpb3IgYmFzZWQgb24gdGhlIE5PREVfRU5WIHZhcmlhYmxlXG4gICAgICAgICAgLy8gd2UgZGVsZWdhdGUgdGhlIGludHJvc3BlY3Rpb24gY29udHJvbCB0byB0aGUgSW50cm9zcGVjdGlvbkNvbnRyb2xQbHVnaW5cbiAgICAgICAgICBpbnRyb3NwZWN0aW9uOiB0cnVlLFxuICAgICAgICAgIHBsdWdpbnM6IFtBcG9sbG9TZXJ2ZXJQbHVnaW5DYWNoZUNvbnRyb2xEaXNhYmxlZCgpLCBJbnRyb3NwZWN0aW9uQ29udHJvbFBsdWdpbihwdWJsaWNJbnRyb3NwZWN0aW9uKSwgU2NoZW1hU3VnZ2VzdGlvbnNDb250cm9sUGx1Z2luKHB1YmxpY0ludHJvc3BlY3Rpb24pLCBjcmVhdGVDb21wbGV4aXR5VmFsaWRhdGlvblBsdWdpbigoKSA9PiB0aGlzLnBhcnNlU2VydmVyLmNvbmZpZy5yZXF1ZXN0Q29tcGxleGl0eSldLFxuICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgfSk7XG4gICAgICAgIGF3YWl0IGFwb2xsby5zdGFydCgpO1xuICAgICAgICByZXR1cm4gZXhwcmVzc01pZGRsZXdhcmUoYXBvbGxvLCB7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIFJlc2V0IGFsbCBtdXRleGVzIGFuZCBmb3J3YXJkIHRoZSBlcnJvclxuICAgICAgICB0aGlzLl9zZXJ2ZXIgPSBudWxsO1xuICAgICAgICB0aGlzLl9zY2hlbWFSZWZNdXRleCA9IG51bGw7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIERvIG5vdCBhd2FpdCBzbyBwYXJhbGxlbCByZXF1ZXN0IHdpbGwgd2FpdCB0aGUgc2FtZSBwcm9taXNlIHJlZlxuICAgIHRoaXMuX3NlcnZlciA9IGNyZWF0ZVNlcnZlcigpO1xuICAgIHJldHVybiB0aGlzLl9zZXJ2ZXI7XG4gIH1cblxuICBfdHJhbnNmb3JtTWF4VXBsb2FkU2l6ZVRvQnl0ZXMobWF4VXBsb2FkU2l6ZSkge1xuICAgIGNvbnN0IHVuaXRNYXAgPSB7XG4gICAgICBrYjogMSxcbiAgICAgIG1iOiAyLFxuICAgICAgZ2I6IDMsXG4gICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICBOdW1iZXIobWF4VXBsb2FkU2l6ZS5zbGljZSgwLCAtMikpICpcbiAgICAgIE1hdGgucG93KDEwMjQsIHVuaXRNYXBbbWF4VXBsb2FkU2l6ZS5zbGljZSgtMikudG9Mb3dlckNhc2UoKV0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3RhdGljXG4gICAqIEFsbG93IGRldmVsb3BlcnMgdG8gY3VzdG9taXplIGVhY2ggcmVxdWVzdCB3aXRoIGludmVyc2lvbiBvZiBjb250cm9sL2RlcGVuZGVuY3kgaW5qZWN0aW9uXG4gICAqL1xuICBhcHBseVJlcXVlc3RDb250ZXh0TWlkZGxld2FyZShhcGksIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5yZXF1ZXN0Q29udGV4dE1pZGRsZXdhcmUpIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5yZXF1ZXN0Q29udGV4dE1pZGRsZXdhcmUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdyZXF1ZXN0Q29udGV4dE1pZGRsZXdhcmUgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gICAgICB9XG4gICAgICBhcGkudXNlKHRoaXMuY29uZmlnLmdyYXBoUUxQYXRoLCBvcHRpb25zLnJlcXVlc3RDb250ZXh0TWlkZGxld2FyZSk7XG4gICAgfVxuICB9XG5cbiAgYXBwbHlHcmFwaFFMKGFwcCkge1xuICAgIGlmICghYXBwIHx8ICFhcHAudXNlKSB7XG4gICAgICByZXF1aXJlZFBhcmFtZXRlcignWW91IG11c3QgcHJvdmlkZSBhbiBFeHByZXNzLmpzIGFwcCBpbnN0YW5jZSEnKTtcbiAgICB9XG4gICAgYXBwLnVzZSh0aGlzLmNvbmZpZy5ncmFwaFFMUGF0aCwgYWxsb3dDcm9zc0RvbWFpbih0aGlzLnBhcnNlU2VydmVyLmNvbmZpZy5hcHBJZCkpO1xuICAgIGFwcC51c2UodGhpcy5jb25maWcuZ3JhcGhRTFBhdGgsIGhhbmRsZVBhcnNlSGVhZGVycyk7XG4gICAgYXBwLnVzZSh0aGlzLmNvbmZpZy5ncmFwaFFMUGF0aCwgaGFuZGxlUGFyc2VTZXNzaW9uKTtcbiAgICB0aGlzLmFwcGx5UmVxdWVzdENvbnRleHRNaWRkbGV3YXJlKGFwcCwgdGhpcy5wYXJzZVNlcnZlci5jb25maWcpO1xuICAgIGFwcC51c2UodGhpcy5jb25maWcuZ3JhcGhRTFBhdGgsIGhhbmRsZVBhcnNlRXJyb3JzKTtcbiAgICBhcHAudXNlKFxuICAgICAgdGhpcy5jb25maWcuZ3JhcGhRTFBhdGgsXG4gICAgICBncmFwaHFsVXBsb2FkRXhwcmVzcyh7XG4gICAgICAgIG1heEZpbGVTaXplOiB0aGlzLl90cmFuc2Zvcm1NYXhVcGxvYWRTaXplVG9CeXRlcyhcbiAgICAgICAgICB0aGlzLnBhcnNlU2VydmVyLmNvbmZpZy5tYXhVcGxvYWRTaXplIHx8ICcyMG1iJ1xuICAgICAgICApLFxuICAgICAgfSlcbiAgICApO1xuICAgIGFwcC51c2UodGhpcy5jb25maWcuZ3JhcGhRTFBhdGgsIGV4cHJlc3MuanNvbigpLCBhc3luYyAocmVxLCByZXMsIG5leHQpID0+IHtcbiAgICAgIGNvbnN0IHNlcnZlciA9IGF3YWl0IHRoaXMuX2dldFNlcnZlcigpO1xuICAgICAgcmV0dXJuIHNlcnZlcihyZXEsIHJlcywgbmV4dCk7XG4gICAgfSk7XG4gIH1cblxuICBhcHBseVBsYXlncm91bmQoYXBwKSB7XG4gICAgaWYgKCFhcHAgfHwgIWFwcC5nZXQpIHtcbiAgICAgIHJlcXVpcmVkUGFyYW1ldGVyKCdZb3UgbXVzdCBwcm92aWRlIGFuIEV4cHJlc3MuanMgYXBwIGluc3RhbmNlIScpO1xuICAgIH1cblxuICAgIGFwcC5nZXQoXG4gICAgICB0aGlzLmNvbmZpZy5wbGF5Z3JvdW5kUGF0aCB8fFxuICAgICAgcmVxdWlyZWRQYXJhbWV0ZXIoJ1lvdSBtdXN0IHByb3ZpZGUgYSBjb25maWcucGxheWdyb3VuZFBhdGggdG8gYXBwbHlQbGF5Z3JvdW5kIScpLFxuICAgICAgKF9yZXEsIHJlcykgPT4ge1xuICAgICAgICByZXMuc2V0SGVhZGVyKCdDb250ZW50LVR5cGUnLCAndGV4dC9odG1sJyk7XG4gICAgICAgIHJlcy53cml0ZShcbiAgICAgICAgICBgPGRpdiBpZD1cInNhbmRib3hcIiBzdHlsZT1cInBvc2l0aW9uOmFic29sdXRlO3RvcDowO3JpZ2h0OjA7Ym90dG9tOjA7bGVmdDowXCI+PC9kaXY+XG4gICAgICAgICAgPHNjcmlwdCBzcmM9XCJodHRwczovL2VtYmVkZGFibGUtc2FuZGJveC5jZG4uYXBvbGxvZ3JhcGhxbC5jb20vX2xhdGVzdC9lbWJlZGRhYmxlLXNhbmRib3gudW1kLnByb2R1Y3Rpb24ubWluLmpzXCI+PC9zY3JpcHQ+XG4gICAgICAgICAgPHNjcmlwdD5cbiAgICAgICAgICAgbmV3IHdpbmRvdy5FbWJlZGRlZFNhbmRib3goe1xuICAgICAgICAgICAgIHRhcmdldDogXCIjc2FuZGJveFwiLFxuICAgICAgICAgICAgIGVuZHBvaW50SXNFZGl0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgaW5pdGlhbEVuZHBvaW50OiAke0pTT04uc3RyaW5naWZ5KHRoaXMuY29uZmlnLmdyYXBoUUxQYXRoKX0sXG4gICAgICAgICAgICAgaGFuZGxlUmVxdWVzdDogKGVuZHBvaW50VXJsLCBvcHRpb25zKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBmZXRjaChlbmRwb2ludFVybCwge1xuICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAuLi5vcHRpb25zLmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgICdYLVBhcnNlLUFwcGxpY2F0aW9uLUlkJzogJHtKU09OLnN0cmluZ2lmeSh0aGlzLnBhcnNlU2VydmVyLmNvbmZpZy5hcHBJZCl9LFxuICAgICAgICAgICAgICAgICAgICAnWC1QYXJzZS1NYXN0ZXItS2V5JzogJHtKU09OLnN0cmluZ2lmeSh0aGlzLnBhcnNlU2VydmVyLmNvbmZpZy5tYXN0ZXJLZXkpfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgfSk7XG4gICAgICAgICAgIC8vIGFkdmFuY2VkIG9wdGlvbnM6IGh0dHBzOi8vd3d3LmFwb2xsb2dyYXBocWwuY29tL2RvY3Mvc3R1ZGlvL2V4cGxvcmVyL3NhbmRib3gjZW1iZWRkaW5nLXNhbmRib3hcbiAgICAgICAgICA8L3NjcmlwdD5gXG4gICAgICAgICk7XG4gICAgICAgIHJlcy5lbmQoKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgc2V0R3JhcGhRTENvbmZpZyhncmFwaFFMQ29uZmlnOiBQYXJzZUdyYXBoUUxDb25maWcpOiBQcm9taXNlIHtcbiAgICByZXR1cm4gdGhpcy5wYXJzZUdyYXBoUUxDb250cm9sbGVyLnVwZGF0ZUdyYXBoUUxDb25maWcoZ3JhcGhRTENvbmZpZyk7XG4gIH1cbn1cblxuZXhwb3J0IHsgUGFyc2VHcmFwaFFMU2VydmVyIH07XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLHFCQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxRQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxTQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxTQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSyxRQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxZQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxrQkFBQSxHQUFBUixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVEsT0FBQSxHQUFBVCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVMsbUJBQUEsR0FBQVQsT0FBQTtBQUNBLElBQUFVLG9CQUFBLEdBQUFWLE9BQUE7QUFDQSxJQUFBVyx1QkFBQSxHQUFBQyx1QkFBQSxDQUFBWixPQUFBO0FBQ0EsSUFBQWEsZ0JBQUEsR0FBQWIsT0FBQTtBQUE2RSxTQUFBWSx3QkFBQUUsQ0FBQSxFQUFBQyxDQUFBLDZCQUFBQyxPQUFBLE1BQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUosdUJBQUEsWUFBQUEsQ0FBQUUsQ0FBQSxFQUFBQyxDQUFBLFNBQUFBLENBQUEsSUFBQUQsQ0FBQSxJQUFBQSxDQUFBLENBQUFLLFVBQUEsU0FBQUwsQ0FBQSxNQUFBTSxDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSxLQUFBQyxTQUFBLFFBQUFDLE9BQUEsRUFBQVYsQ0FBQSxpQkFBQUEsQ0FBQSx1QkFBQUEsQ0FBQSx5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Q0UsV0FBVyxFQUFFNkQsaUJBQU8sQ0FBQ0MsSUFBSSxDQUFDLENBQUMsRUFBRSxPQUFPaEQsR0FBRyxFQUFFaUQsR0FBRyxFQUFFQyxJQUFJLEtBQUs7TUFDekUsTUFBTUMsTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDL0MsVUFBVSxDQUFDLENBQUM7TUFDdEMsT0FBTytDLE1BQU0sQ0FBQ25ELEdBQUcsRUFBRWlELEdBQUcsRUFBRUMsSUFBSSxDQUFDO0lBQy9CLENBQUMsQ0FBQztFQUNKO0VBRUFFLGVBQWVBLENBQUNaLEdBQUcsRUFBRTtJQUNuQixJQUFJLENBQUNBLEdBQUcsSUFBSSxDQUFDQSxHQUFHLENBQUMxSSxHQUFHLEVBQUU7TUFDcEIsSUFBQW1GLDBCQUFpQixFQUFDLDhDQUE4QyxDQUFDO0lBQ25FO0lBRUF1RCxHQUFHLENBQUMxSSxHQUFHLENBQ0wsSUFBSSxDQUFDa0YsTUFBTSxDQUFDcUUsY0FBYyxJQUMxQixJQUFBcEUsMEJBQWlCLEVBQUMsOERBQThELENBQUMsRUFDakYsQ0FBQ3FFLElBQUksRUFBRUwsR0FBRyxLQUFLO01BQ2JBLEdBQUcsQ0FBQ00sU0FBUyxDQUFDLGNBQWMsRUFBRSxXQUFXLENBQUM7TUFDMUNOLEdBQUcsQ0FBQ08sS0FBSyxDQUNQO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQ0MsSUFBSSxDQUFDQyxTQUFTLENBQUMsSUFBSSxDQUFDMUUsTUFBTSxDQUFDRSxXQUFXLENBQUM7QUFDdkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRHVFLElBQUksQ0FBQ0MsU0FBUyxDQUFDLElBQUksQ0FBQzNFLFdBQVcsQ0FBQ0MsTUFBTSxDQUFDVyxLQUFLLENBQUM7QUFDN0YsNENBQTRDOEQsSUFBSSxDQUFDQyxTQUFTLENBQUMsSUFBSSxDQUFDM0UsV0FBVyxDQUFDQyxNQUFNLENBQUMyRSxTQUFTLENBQUM7QUFDN0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUNRLENBQUM7TUFDRFYsR0FBRyxDQUFDVyxHQUFHLENBQUMsQ0FBQztJQUNYLENBQ0YsQ0FBQztFQUNIO0VBRUFDLGdCQUFnQkEsQ0FBQ0MsYUFBaUMsRUFBVztJQUMzRCxPQUFPLElBQUksQ0FBQzNFLHNCQUFzQixDQUFDNEUsbUJBQW1CLENBQUNELGFBQWEsQ0FBQztFQUN2RTtBQUNGO0FBQUNFLE9BQUEsQ0FBQW5GLGtCQUFBLEdBQUFBLGtCQUFBIiwiaWdub3JlTGlzdCI6W119
|
|
398
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZ3JhcGhxbFVwbG9hZEV4cHJlc3MiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9zZXJ2ZXIiLCJfZXhwcmVzcyIsIl9kaXNhYmxlZCIsIl9leHByZXNzMiIsIl9ncmFwaHFsIiwiX21pZGRsZXdhcmVzIiwiX3JlcXVpcmVkUGFyYW1ldGVyIiwiX2xvZ2dlciIsIl9QYXJzZUdyYXBoUUxTY2hlbWEiLCJfZGVmYXVsdEdyYXBoUUxUeXBlcyIsIl9QYXJzZUdyYXBoUUxDb250cm9sbGVyIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfcXVlcnlDb21wbGV4aXR5IiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiZGVmYXVsdCIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiaGFzVHlwZUludHJvc3BlY3Rpb24iLCJxdWVyeSIsImFzdCIsInBhcnNlIiwiY2hlY2tTZWxlY3Rpb25zIiwic2VsZWN0aW9ucyIsInNlbGVjdGlvbiIsImtpbmQiLCJuYW1lIiwidmFsdWUiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJzZWxlY3Rpb25TZXQiLCJkZWZpbml0aW9uIiwiZGVmaW5pdGlvbnMiLCJ0aHJvd0ludHJvc3BlY3Rpb25FcnJvciIsIkdyYXBoUUxFcnJvciIsImV4dGVuc2lvbnMiLCJodHRwIiwic3RhdHVzIiwiSW50cm9zcGVjdGlvbkNvbnRyb2xQbHVnaW4iLCJwdWJsaWNJbnRyb3NwZWN0aW9uIiwicmVxdWVzdERpZFN0YXJ0IiwicmVxdWVzdENvbnRleHQiLCJkaWRSZXNvbHZlT3BlcmF0aW9uIiwiaXNNYXN0ZXJPck1haW50ZW5hbmNlIiwiY29udGV4dFZhbHVlIiwiYXV0aCIsImlzTWFzdGVyIiwiaXNNYWludGVuYW5jZSIsInNvdXJjZSIsInJlcXVlc3QiLCJpbmNsdWRlcyIsInN0cmlwU2NoZW1hU3VnZ2VzdGlvbiIsIm1lc3NhZ2UiLCJyZXBsYWNlIiwic3RyaXBTY2hlbWFDb2VyY2lvbklkZW50aWZpZXJzIiwiTk9OX0RJU0NMT1NJTkdfVFlQRV9OQU1FUyIsIlNldCIsIlJFU0VSVkVEX0dSQVBIUUxfVFlQRV9OQU1FUyIsIlJFQURfUFJFRkVSRU5DRSIsInN0cmlwU2NoZW1hVHlwZUlkZW50aWZpZXJzIiwib3BlcmF0aW9uVGV4dCIsInJlZmVyZW5jZWRUb2tlbnMiLCJzcGxpdCIsImZpbHRlciIsIkJvb2xlYW4iLCJzaG91bGRLZWVwVHlwZU5hbWUiLCJ0eXBlTmFtZSIsImJhcmVUeXBlTmFtZSIsIm1hdGNoIiwiZmllbGROYW1lIiwicGFyZW50VHlwZSIsImZyYWdUeXBlIiwicGFyZW50IiwiZnJhZyIsImFyZ05hbWUiLCJzdHJpcFNjaGVtYUlkZW50aWZpZXJzIiwiU2NoZW1hU3VnZ2VzdGlvbnNDb250cm9sUGx1Z2luIiwid2lsbFNlbmRSZXNwb25zZSIsImJvZHkiLCJyZXNwb25zZSIsImVycm9ycyIsInNpbmdsZVJlc3VsdCIsImluaXRpYWxSZXN1bHQiLCJ1bmRlZmluZWQiLCJmb3JFYWNoIiwiZXJyb3IiLCJBcnJheSIsImlzQXJyYXkiLCJzdGFja3RyYWNlIiwibWFwIiwiUGFyc2VHcmFwaFFMU2VydmVyIiwiY29uc3RydWN0b3IiLCJwYXJzZVNlcnZlciIsImNvbmZpZyIsInJlcXVpcmVkUGFyYW1ldGVyIiwiZ3JhcGhRTFBhdGgiLCJwYXJzZUdyYXBoUUxDb250cm9sbGVyIiwibG9nIiwibG9nZ2VyQ29udHJvbGxlciIsImRlZmF1bHRMb2dnZXIiLCJwYXJzZUdyYXBoUUxTY2hlbWEiLCJQYXJzZUdyYXBoUUxTY2hlbWEiLCJkYXRhYmFzZUNvbnRyb2xsZXIiLCJncmFwaFFMQ3VzdG9tVHlwZURlZnMiLCJhcHBJZCIsIl9nZXRHcmFwaFFMT3B0aW9ucyIsInNjaGVtYSIsImxvYWQiLCJjb250ZXh0IiwicmVxIiwiaW5mbyIsInN0YWNrIiwidG9TdHJpbmciLCJfZ2V0U2VydmVyIiwic2NoZW1hUmVmIiwiZ3JhcGhRTFNjaGVtYSIsIm5ld1NjaGVtYVJlZiIsIl9zY2hlbWFSZWZNdXRleCIsImNyZWF0ZVNlcnZlciIsImdyYXBoUUxQdWJsaWNJbnRyb3NwZWN0aW9uIiwiYXBvbGxvIiwiQXBvbGxvU2VydmVyIiwiY3NyZlByZXZlbnRpb24iLCJyZXF1ZXN0SGVhZGVycyIsImludHJvc3BlY3Rpb24iLCJwbHVnaW5zIiwiQXBvbGxvU2VydmVyUGx1Z2luQ2FjaGVDb250cm9sRGlzYWJsZWQiLCJjcmVhdGVDb21wbGV4aXR5VmFsaWRhdGlvblBsdWdpbiIsInJlcXVlc3RDb21wbGV4aXR5Iiwic3RhcnQiLCJleHByZXNzTWlkZGxld2FyZSIsIl90cmFuc2Zvcm1NYXhVcGxvYWRTaXplVG9CeXRlcyIsIm1heFVwbG9hZFNpemUiLCJ1bml0TWFwIiwia2IiLCJtYiIsImdiIiwiTnVtYmVyIiwic2xpY2UiLCJNYXRoIiwicG93IiwidG9Mb3dlckNhc2UiLCJhcHBseVJlcXVlc3RDb250ZXh0TWlkZGxld2FyZSIsImFwaSIsIm9wdGlvbnMiLCJyZXF1ZXN0Q29udGV4dE1pZGRsZXdhcmUiLCJFcnJvciIsInVzZSIsImFwcGx5R3JhcGhRTCIsImFwcCIsImFsbG93Q3Jvc3NEb21haW4iLCJfcmVzIiwibmV4dCIsIl9ncmFwaFFMUGF0aCIsImhhbmRsZVBhcnNlSGVhZGVycyIsImhhbmRsZVBhcnNlU2Vzc2lvbiIsImhhbmRsZVBhcnNlRXJyb3JzIiwiZ3JhcGhxbFVwbG9hZEV4cHJlc3MiLCJtYXhGaWxlU2l6ZSIsImV4cHJlc3MiLCJqc29uIiwicmVzIiwic2VydmVyIiwiYXBwbHlQbGF5Z3JvdW5kIiwicGxheWdyb3VuZFBhdGgiLCJfcmVxIiwic2V0SGVhZGVyIiwid3JpdGUiLCJKU09OIiwic3RyaW5naWZ5IiwibWFzdGVyS2V5IiwiZW5kIiwic2V0R3JhcGhRTENvbmZpZyIsImdyYXBoUUxDb25maWciLCJ1cGRhdGVHcmFwaFFMQ29uZmlnIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9HcmFwaFFML1BhcnNlR3JhcGhRTFNlcnZlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ3JhcGhxbFVwbG9hZEV4cHJlc3MgZnJvbSAnZ3JhcGhxbC11cGxvYWQvZ3JhcGhxbFVwbG9hZEV4cHJlc3MuanMnO1xuaW1wb3J0IHsgQXBvbGxvU2VydmVyIH0gZnJvbSAnQGFwb2xsby9zZXJ2ZXInO1xuaW1wb3J0IHsgZXhwcmVzc01pZGRsZXdhcmUgfSBmcm9tICdAYXMtaW50ZWdyYXRpb25zL2V4cHJlc3M1JztcbmltcG9ydCB7IEFwb2xsb1NlcnZlclBsdWdpbkNhY2hlQ29udHJvbERpc2FibGVkIH0gZnJvbSAnQGFwb2xsby9zZXJ2ZXIvcGx1Z2luL2Rpc2FibGVkJztcbmltcG9ydCBleHByZXNzIGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IHsgR3JhcGhRTEVycm9yLCBwYXJzZSB9IGZyb20gJ2dyYXBocWwnO1xuaW1wb3J0IHsgYWxsb3dDcm9zc0RvbWFpbiwgaGFuZGxlUGFyc2VFcnJvcnMsIGhhbmRsZVBhcnNlSGVhZGVycywgaGFuZGxlUGFyc2VTZXNzaW9uIH0gZnJvbSAnLi4vbWlkZGxld2FyZXMnO1xuaW1wb3J0IHJlcXVpcmVkUGFyYW1ldGVyIGZyb20gJy4uL3JlcXVpcmVkUGFyYW1ldGVyJztcbmltcG9ydCBkZWZhdWx0TG9nZ2VyIGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBQYXJzZUdyYXBoUUxTY2hlbWEsIFJFU0VSVkVEX0dSQVBIUUxfVFlQRV9OQU1FUyB9IGZyb20gJy4vUGFyc2VHcmFwaFFMU2NoZW1hJztcbmltcG9ydCB7IFJFQURfUFJFRkVSRU5DRSB9IGZyb20gJy4vbG9hZGVycy9kZWZhdWx0R3JhcGhRTFR5cGVzJztcbmltcG9ydCBQYXJzZUdyYXBoUUxDb250cm9sbGVyLCB7IFBhcnNlR3JhcGhRTENvbmZpZyB9IGZyb20gJy4uL0NvbnRyb2xsZXJzL1BhcnNlR3JhcGhRTENvbnRyb2xsZXInO1xuaW1wb3J0IHsgY3JlYXRlQ29tcGxleGl0eVZhbGlkYXRpb25QbHVnaW4gfSBmcm9tICcuL2hlbHBlcnMvcXVlcnlDb21wbGV4aXR5JztcblxuXG5jb25zdCBoYXNUeXBlSW50cm9zcGVjdGlvbiA9IChxdWVyeSkgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IGFzdCA9IHBhcnNlKHF1ZXJ5KTtcbiAgICBjb25zdCBjaGVja1NlbGVjdGlvbnMgPSAoc2VsZWN0aW9ucykgPT4ge1xuICAgICAgZm9yIChjb25zdCBzZWxlY3Rpb24gb2Ygc2VsZWN0aW9ucykge1xuICAgICAgICBpZiAoc2VsZWN0aW9uLmtpbmQgPT09ICdGaWVsZCcgJiYgc2VsZWN0aW9uLm5hbWUudmFsdWUgPT09ICdfX3R5cGUnKSB7XG4gICAgICAgICAgaWYgKHNlbGVjdGlvbi5hcmd1bWVudHMgJiYgc2VsZWN0aW9uLmFyZ3VtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlbGVjdGlvbi5zZWxlY3Rpb25TZXQpIHtcbiAgICAgICAgICBpZiAoY2hlY2tTZWxlY3Rpb25zKHNlbGVjdGlvbi5zZWxlY3Rpb25TZXQuc2VsZWN0aW9ucykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgZm9yIChjb25zdCBkZWZpbml0aW9uIG9mIGFzdC5kZWZpbml0aW9ucykge1xuICAgICAgaWYgKGRlZmluaXRpb24uc2VsZWN0aW9uU2V0KSB7XG4gICAgICAgIGlmIChjaGVja1NlbGVjdGlvbnMoZGVmaW5pdGlvbi5zZWxlY3Rpb25TZXQuc2VsZWN0aW9ucykpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuY29uc3QgdGhyb3dJbnRyb3NwZWN0aW9uRXJyb3IgPSAoKSA9PiB7XG4gIHRocm93IG5ldyBHcmFwaFFMRXJyb3IoJ0ludHJvc3BlY3Rpb24gaXMgbm90IGFsbG93ZWQnLCB7XG4gICAgZXh0ZW5zaW9uczoge1xuICAgICAgaHR0cDoge1xuICAgICAgICBzdGF0dXM6IDQwMyxcbiAgICAgIH0sXG4gICAgfVxuICB9KTtcbn07XG5cbmNvbnN0IEludHJvc3BlY3Rpb25Db250cm9sUGx1Z2luID0gKHB1YmxpY0ludHJvc3BlY3Rpb24pID0+ICh7XG5cblxuICByZXF1ZXN0RGlkU3RhcnQ6IChyZXF1ZXN0Q29udGV4dCkgPT4gKHtcblxuICAgIGRpZFJlc29sdmVPcGVyYXRpb246IGFzeW5jICgpID0+IHtcbiAgICAgIC8vIElmIHB1YmxpYyBpbnRyb3NwZWN0aW9uIGlzIGVuYWJsZWQsIHdlIGFsbG93IGFsbCBpbnRyb3NwZWN0aW9uIHF1ZXJpZXNcbiAgICAgIGlmIChwdWJsaWNJbnRyb3NwZWN0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaXNNYXN0ZXJPck1haW50ZW5hbmNlID0gcmVxdWVzdENvbnRleHQuY29udGV4dFZhbHVlLmF1dGg/LmlzTWFzdGVyIHx8IHJlcXVlc3RDb250ZXh0LmNvbnRleHRWYWx1ZS5hdXRoPy5pc01haW50ZW5hbmNlXG4gICAgICBpZiAoaXNNYXN0ZXJPck1haW50ZW5hbmNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gQXBvbGxvIHJlc29sdmVzIHRoZSBvcGVyYXRpb24gdGV4dCBpbnRvIGByZXF1ZXN0Q29udGV4dC5zb3VyY2VgIGJlZm9yZSB0aGlzIGhvb2tcbiAgICAgIC8vIHJ1bnMgYW5kIGd1YXJhbnRlZXMgaXQgaXMgc2V0IGhlcmUuIEl0IGlzIE5PVCB0aGUgc2FtZSBhcyBgcmVxdWVzdC5xdWVyeWA6IG9uIGFuXG4gICAgICAvLyBhdXRvbWF0aWMgcGVyc2lzdGVkIHF1ZXJ5IGNhY2hlIGhpdCB0aGUgdGV4dCBjb21lcyBmcm9tIHRoZSBwZXJzaXN0ZWQtcXVlcnkgY2FjaGVcbiAgICAgIC8vIGFuZCBgcmVxdWVzdC5xdWVyeWAgaXMgbmV2ZXIgcG9wdWxhdGVkLCBzbyByZWFkaW5nIGByZXF1ZXN0LnF1ZXJ5YCB3b3VsZCBsZWF2ZVxuICAgICAgLy8gbm90aGluZyB0byBpbnNwZWN0IGFuZCBzaWxlbnRseSBza2lwIGJvdGggZ3VhcmRzIGJlbG93LiBBcG9sbG8gZW5hYmxlcyBhdXRvbWF0aWNcbiAgICAgIC8vIHBlcnNpc3RlZCBxdWVyaWVzIGJ5IGRlZmF1bHQsIHNvIHRoYXQgcGF0aCBpcyByZWFjaGFibGUgb24gZXZlcnkgZGVwbG95bWVudC4gRmFsbFxuICAgICAgLy8gYmFjayB0byBgcmVxdWVzdC5xdWVyeWAgb25seSBmb3Igcm9idXN0bmVzcywgYW5kIGZhaWwgY2xvc2VkIHdoZW4gbmVpdGhlciBpcyBhXG4gICAgICAvLyBzdHJpbmcgc28gdGhhdCBhbiBvcGVyYXRpb24gd2hpY2ggY2Fubm90IGJlIGluc3BlY3RlZCBpcyBuZXZlciBhbGxvd2VkIHRocm91Z2guXG4gICAgICBjb25zdCBxdWVyeSA9IHJlcXVlc3RDb250ZXh0LnNvdXJjZSA/PyByZXF1ZXN0Q29udGV4dC5yZXF1ZXN0LnF1ZXJ5O1xuXG4gICAgICAvLyBGYXN0IHBhdGg6IHNpbXBsZSBzdHJpbmcgY2hlY2sgZm9yIF9fc2NoZW1hXG4gICAgICAvLyBUaGlzIGF2b2lkcyBwYXJzaW5nIHRoZSBxdWVyeSBpbiBtb3N0IGNhc2VzXG4gICAgICAvLyBBbiBvcGVyYXRpb24gdGV4dCB0aGF0IGlzIG5vdCBhIHN0cmluZyBjYW5ub3QgYmUgaW5zcGVjdGVkIGF0IGFsbCwgc28gaXQgaXMgZGVuaWVkXG4gICAgICAvLyBmb3IgdGhlIHNhbWUgcmVhc29uOiB0aGlzIGd1YXJkIG11c3QgbmV2ZXIgbGV0IGFuIG9wZXJhdGlvbiB0aHJvdWdoIHVuaW5zcGVjdGVkLlxuICAgICAgaWYgKHR5cGVvZiBxdWVyeSAhPT0gJ3N0cmluZycgfHwgcXVlcnkuaW5jbHVkZXMoJ19fc2NoZW1hJykpIHtcbiAgICAgICAgcmV0dXJuIHRocm93SW50cm9zcGVjdGlvbkVycm9yKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNtYXJ0IGNoZWNrIGZvciBfX3R5cGU6IG9ubHkgcGFyc2UgaWYgdGhlIHN0cmluZyBpcyBwcmVzZW50XG4gICAgICAvLyBUaGlzIGF2b2lkcyBmYWxzZSBwb3NpdGl2ZXMgKGUuZy4sIFwiX190eXBlXCIgaW4gc3RyaW5ncyBvciBjb21tZW50cylcbiAgICAgIC8vIHdoaWxlIHN0aWxsIGJlaW5nIGVmZmljaWVudCBmb3IgdGhlIGNvbW1vbiBjYXNlXG4gICAgICBpZiAocXVlcnkuaW5jbHVkZXMoJ19fdHlwZScpICYmIGhhc1R5cGVJbnRyb3NwZWN0aW9uKHF1ZXJ5KSkge1xuICAgICAgICByZXR1cm4gdGhyb3dJbnRyb3NwZWN0aW9uRXJyb3IoKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gIH0pXG5cbn0pO1xuXG4vLyBncmFwaHFsLWpzIGVtYmVkcyBcIkRpZCB5b3UgbWVhbiAuLi4/XCIgaGludHMgc291cmNlZCBmcm9tIHRoZSBsaXZlIHNjaGVtYSBpblxuLy8gaXRzIGVycm9yIG1lc3NhZ2VzLiBUaGV5IGFyZSBwcm9kdWNlZCBpbiB0d28gZGlzdGluY3QgcGhhc2VzOlxuLy8gICAtIHZhbGlkYXRpb24gcnVsZXMgKEZpZWxkc09uQ29ycmVjdFR5cGVSdWxlLCBLbm93bkFyZ3VtZW50TmFtZXNSdWxlLFxuLy8gICAgIEtub3duVHlwZU5hbWVzUnVsZSwgLi4uKSwgYW5kXG4vLyAgIC0gdmFyaWFibGUgY29lcmNpb24gKHVua25vd24gZW51bSB2YWx1ZXMsIHVua25vd24gaW5wdXQtb2JqZWN0IGZpZWxkcyksXG4vLyAgICAgd2hpY2ggcnVucyBkdXJpbmcgZXhlY3V0aW9uLCBhZnRlciB2YWxpZGF0aW9uLlxuLy8gQWxsIG9mIHRoZXNlIGFyZSByZXR1cm5lZCB0byB0aGUgY2FsbGVyIGFuZCBkaXNjbG9zZSBzY2hlbWEgaWRlbnRpZmllcnMgKENsb3VkXG4vLyBDb2RlIGZ1bmN0aW9uIG5hbWVzLCBjbGFzcyBhbmQgZmllbGQgbmFtZXMpIHRoYXQgdGhlIGludHJvc3BlY3Rpb24gZ3VhcmQgaXNcbi8vIG1lYW50IHRvIGhpZGUuIFN0cmlwIHRoZSBoaW50IHN1ZmZpeCBmcm9tIGV2ZXJ5IHJldHVybmVkIGVycm9yIOKAlCBpbmNsdWRpbmcgdGhlXG4vLyBjb3B5IGdyYXBocWwtanMgZHVwbGljYXRlcyBpbnRvIGV4dGVuc2lvbnMuc3RhY2t0cmFjZSBpbiBub24tcHJvZHVjdGlvbiDigJQgZm9yXG4vLyBjYWxsZXJzIHRoYXQgYXJlIG5vdCBhbGxvd2VkIHRvIGludHJvc3BlY3QuXG5jb25zdCBzdHJpcFNjaGVtYVN1Z2dlc3Rpb24gPSBtZXNzYWdlID0+XG4gIHR5cGVvZiBtZXNzYWdlID09PSAnc3RyaW5nJyA/IG1lc3NhZ2UucmVwbGFjZSgvID9EaWQgeW91IG1lYW4oLis/KVxcPyQvLCAnJykgOiBtZXNzYWdlO1xuXG4vLyBncmFwaHFsLWpzIGFsc28gZW1pdHMgYSBiYXNlIGlucHV0LWNvZXJjaW9uIG1lc3NhZ2UgdGhhdCBuYW1lcyBhIHNjaGVtYVxuLy8gaWRlbnRpZmllciBXSVRIT1VUIGEgXCJEaWQgeW91IG1lYW5cIiBjbGF1c2UsIHNvIHRoZSBzdWdnZXN0aW9uIHN0cmlwIGFib3ZlXG4vLyBjYW5ub3QgcmVhY2ggaXQ6IHdoZW4gYSByZXF1aXJlZCBjdXN0b20gaW5wdXQgZmllbGQgaXMgb21pdHRlZCwgY29lcmNlSW5wdXRWYWx1ZVxuLy8gcmV0dXJucyAnRmllbGQgXCI8bmFtZT5cIiBvZiByZXF1aXJlZCB0eXBlIFwiPHR5cGU+XCIgd2FzIG5vdCBwcm92aWRlZC4nLCBkaXNjbG9zaW5nXG4vLyBhIGZpZWxkIG5hbWUgdGhlIGNhbGxlciBuZXZlciBzdXBwbGllZC4gUmVkYWN0IHRoZSBxdW90ZWQgaWRlbnRpZmllcnMgZnJvbSB0aGlzXG4vLyB0ZW1wbGF0ZSB3aGlsZSBwcmVzZXJ2aW5nIHRoZSBlcnJvciBzaGFwZSwgZm9yIGNhbGxlcnMgdGhhdCBhcmUgbm90IGFsbG93ZWQgdG9cbi8vIGludHJvc3BlY3QuIFRoZSBzaWJsaW5nIGNvZXJjaW9uIG1lc3NhZ2VzICgnLi4uIGlzIG5vdCBkZWZpbmVkIGJ5IHR5cGUgXCI8dHlwZT5cIi4nLFxuLy8gJ0V4cGVjdGVkIHR5cGUgXCI8dHlwZT5cIiB0byBiZSBhbiBvYmplY3QuJykgYXJlIGludGVudGlvbmFsbHkgbGVmdCBpbnRhY3Q6IHRoZXlcbi8vIG9ubHkgZWNobyBhbiBpbnB1dCB0eXBlIG5hbWUgdGhlIGNhbGxlciBhbHJlYWR5IHJlZmVyZW5jZWQgaW4gdGhlIG9wZXJhdGlvbiwgc29cbi8vIHRoZXkgZGlzY2xvc2Ugbm90aGluZyB0aGUgY2FsbGVyIGRpZCBub3QgYWxyZWFkeSBwcm92aWRlLlxuY29uc3Qgc3RyaXBTY2hlbWFDb2VyY2lvbklkZW50aWZpZXJzID0gbWVzc2FnZSA9PlxuICB0eXBlb2YgbWVzc2FnZSA9PT0gJ3N0cmluZydcbiAgICA/IG1lc3NhZ2UucmVwbGFjZShcbiAgICAgIC9GaWVsZCBcIlteXCJdKlwiIG9mIHJlcXVpcmVkIHR5cGUgXCJbXlwiXSpcIiB3YXMgbm90IHByb3ZpZGVkXFwuL2csXG4gICAgICAnRmllbGQgb2YgcmVxdWlyZWQgdHlwZSB3YXMgbm90IHByb3ZpZGVkLidcbiAgICApXG4gICAgOiBtZXNzYWdlO1xuXG4vLyBUeXBlIG5hbWVzIHRoYXQgcmV2ZWFsIG5vdGhpbmcgYWJvdXQgVEhJUyBhcHBsaWNhdGlvbidzIHNjaGVtYSwgc28gcmVkYWN0aW5nIHRoZW0gd291bGQgY29zdFxuLy8gbWVzc2FnZSBxdWFsaXR5IGZvciBubyBzZWN1cml0eSBnYWluLiBgUkVTRVJWRURfR1JBUEhRTF9UWVBFX05BTUVTYCBjb3ZlcnMgdGhlIG5hbWVzIHRoZSBzY2hlbWFcbi8vIGJ1aWxkZXIgcmVmdXNlcyB0byBsZXQgYSBjbGFzcyBnZW5lcmF0ZSwgYnV0IFBhcnNlIHJlZ2lzdGVycyBidWlsdC1pbiB0eXBlcyBvdXRzaWRlIHRoYXQgbGlzdFxuLy8gdG9vLiBPZiB0aG9zZSwgb25seSBhbiBFTlVNIGNhbiByZWFjaCB0aGUgZW51bSB0ZW1wbGF0ZXMgYmVsb3csIGFuZCB0aGUgR3JhcGhRTCBsYXllciBkZWZpbmVzXG4vLyBleGFjdGx5IHRocmVlIGVudW1zOiBgQ2xvdWRDb2RlRnVuY3Rpb25gIChyZXNlcnZlZCksIHRoZSBwZXItY2xhc3MgYDxDbGFzcz5PcmRlcmAgKHRoZVxuLy8gZGlzY2xvc3VyZSB0aGVzZSB0ZW1wbGF0ZXMgZXhpc3QgdG8gcmVkYWN0KSBhbmQgYFJlYWRQcmVmZXJlbmNlYC4gSW5jbHVkZSB0aGUgbGFzdCBvbmUgc28gdGhhdFxuLy8gYW4gaW52YWxpZCBgb3B0aW9ucy5yZWFkUHJlZmVyZW5jZWAgdmFsdWUgc3RpbGwgbmFtZXMgaXRzIGVudW0sIGp1c3QgYXMgYENsb3VkQ29kZUZ1bmN0aW9uYFxuLy8gZG9lcyDigJQgaXQgaXMgaWRlbnRpY2FsIG9uIGV2ZXJ5IGRlcGxveW1lbnQgYW5kIHJlYWNoYWJsZSBmcm9tIGV2ZXJ5IGdlbmVyYXRlZCBmaW5kIHF1ZXJ5LlxuY29uc3QgTk9OX0RJU0NMT1NJTkdfVFlQRV9OQU1FUyA9IG5ldyBTZXQoWy4uLlJFU0VSVkVEX0dSQVBIUUxfVFlQRV9OQU1FUywgUkVBRF9QUkVGRVJFTkNFLm5hbWVdKTtcblxuLy8gZ3JhcGhxbC1qcyBhbHNvIGVtaXRzIGJhc2UgY29lcmNpb24gLyB2YWxpZGF0aW9uIG1lc3NhZ2VzIHRoYXQgbmFtZSBhIG5lc3RlZCBpbnB1dFxuLy8gVFlQRSB3aXRob3V0IGEgXCJEaWQgeW91IG1lYW5cIiBjbGF1c2UsIHNvIG5laXRoZXIgc3RyaXAgYWJvdmUgcmVhY2hlcyB0aGVtLiBGb3IgYVxuLy8gUG9pbnRlciBvciBSZWxhdGlvbiBmaWVsZCB0aGUgZ2VuZXJhdGVkIGlucHV0IHR5cGUgbmFtZSBlbWJlZHMgdGhlIHBvaW50ZXIncyBUQVJHRVRcbi8vIGNsYXNzIChgPFRhcmdldD5Qb2ludGVySW5wdXRgLCBgPFRhcmdldD5SZWxhdGlvbldoZXJlSW5wdXRgLCBgQ3JlYXRlPFRhcmdldD5GaWVsZHNJbnB1dGApXG4vLyDigJQgYSBjbGFzcyB0aGUgY2FsbGVyIG5ldmVyIHJlZmVyZW5jZWQgYW5kIGNhbm5vdCBkZXJpdmUgZnJvbSB0aGUgZmllbGQgbmFtZSB0aGV5XG4vLyBzdXBwbGllZCDigJQgc28gdGhlc2UgdGVtcGxhdGVzIGRpc2Nsb3NlIGEgc2NoZW1hIGNsYXNzIG5hbWUgdG8gYSBjYWxsZXIgd2hvIGhhcyBvbmx5IHRoZVxuLy8gcHVibGljIGFwcGxpY2F0aW9uIGlkLiBSZWRhY3QgdGhlIHF1b3RlZCB0eXBlIGlkZW50aWZpZXIgZnJvbSB0aG9zZSB0ZW1wbGF0ZXMgVU5MRVNTIHRoZVxuLy8gY2FsbGVyIHJlZmVyZW5jZWQgaXQgaW4gdGhlIG9wZXJhdGlvbiB0ZXh0OiBhIHR5cGUgbmFtZSB0aGUgY2FsbGVyIHdyb3RlIGluIHRoZSBvcGVyYXRpb25cbi8vIChlLmcuIGAkd2hlcmU6IFVzZXJXaGVyZUlucHV0YCkgaXMgbm90IGEgZGlzY2xvc3VyZSwgYW5kIHByZXNlcnZpbmcgaXQga2VlcHMgdGhlIG1lc3NhZ2Vcbi8vICgnLi4uIGlzIG5vdCBkZWZpbmVkIGJ5IHR5cGUgXCJVc2VyV2hlcmVJbnB1dFwiLicpIHVzZWZ1bC4gV2hlbiB0aGUgb3BlcmF0aW9uIHRleHQgaXNcbi8vIHVuYXZhaWxhYmxlIHRoZSBpZGVudGlmaWVyIGlzIHJlZGFjdGVkIChmYWlsIGNsb3NlZCkuXG5jb25zdCBzdHJpcFNjaGVtYVR5cGVJZGVudGlmaWVycyA9IChtZXNzYWdlLCBvcGVyYXRpb25UZXh0KSA9PiB7XG4gIGlmICh0eXBlb2YgbWVzc2FnZSAhPT0gJ3N0cmluZycpIHsgcmV0dXJuIG1lc3NhZ2U7IH1cbiAgLy8gQSBnZW5lcmF0ZWQgdHlwZSBpZGVudGlmaWVyIGlzIGtlcHQgKGl0IGlzIG5vdCBhIGRpc2Nsb3N1cmUpIGlmIHRoZSBjYWxsZXIgd3JvdGUgaXQgYXMgYVxuICAvLyB3aG9sZSB0b2tlbiBpbiB0aGUgb3BlcmF0aW9uIHRleHQsIG9yIGlmIGl0IGlzIGEgbm9uLWRpc2Nsb3NpbmcgbmFtZSAoYWJvdmUpLiBUb2tlbml6ZSB0aGVcbiAgLy8gb3BlcmF0aW9uIG9uIG5vbi1pZGVudGlmaWVyIGNoYXJhY3RlcnMgYW5kIGNvbXBhcmUgZXhhY3QgdG9rZW5zIHJhdGhlciB0aGFuIGJ1aWxkaW5nIGFcbiAgLy8gUmVnRXhwIGZyb20gdGhlIGNhcHR1cmVkIG5hbWU6IHRoaXMgYXZvaWRzIHN1YnN0cmluZyBmYWxzZS1tYXRjaGVzIChlLmcuIHByZXNlcnZpbmdcbiAgLy8gXCJBdXRob3JQb2ludGVySW5wdXRcIiBiZWNhdXNlIHRoZSBvcGVyYXRpb24gY29udGFpbnMgXCJTZWNyZXRBdXRob3JQb2ludGVySW5wdXRcIikgYW5kIGFueVxuICAvLyByZWdleCBpbmplY3Rpb24vUmVEb1MgZnJvbSBhbiB1bnVzdWFsIGNhcHR1cmVkIG5hbWUuIEdyYXBoUUwgbGlzdC9ub24tbnVsbCB3cmFwcGVycyAoXCJbXCIsXG4gIC8vIFwiXVwiLCBcIiFcIikgYXJlIHN0cmlwcGVkIGZyb20gdGhlIGNhcHR1cmVkIG5hbWUgc28gZS5nLiBcIlNlY3JldEF1dGhvclBvaW50ZXJJbnB1dCFcIiBzdGlsbFxuICAvLyBtYXRjaGVzIFwiJHg6IFNlY3JldEF1dGhvclBvaW50ZXJJbnB1dCFcIi4gV2hlbiB0aGUgb3BlcmF0aW9uIHRleHQgaXMgdW5hdmFpbGFibGUgdGhlIHR5cGUgaXNcbiAgLy8gdHJlYXRlZCBhcyBub3QgcmVmZXJlbmNlZCAoZmFpbCBjbG9zZWQpLlxuICBjb25zdCByZWZlcmVuY2VkVG9rZW5zID1cbiAgICB0eXBlb2Ygb3BlcmF0aW9uVGV4dCA9PT0gJ3N0cmluZydcbiAgICAgID8gbmV3IFNldChvcGVyYXRpb25UZXh0LnNwbGl0KC9bXl9BLVphLXowLTldKy8pLmZpbHRlcihCb29sZWFuKSlcbiAgICAgIDogbmV3IFNldCgpO1xuICAvLyBBIG5vbi1kaXNjbG9zaW5nIHR5cGUgbmFtZSAoYENsb3VkQ29kZUZ1bmN0aW9uYCwgYFJlYWRQcmVmZXJlbmNlYCwgYFZpZXdlcmAsIGBQYWdlSW5mb2AsIHRoZVxuICAvLyBidWlsdC1pbiBzY2FsYXJzLCAuLi4pIGlzIGlkZW50aWNhbCBvbiBldmVyeSBQYXJzZSBTZXJ2ZXIgZGVwbG95bWVudCBhbmQgY2Fubm90IGNvbGxpZGUgd2l0aFxuICAvLyBhIHVzZXIgY2xhc3MsIHNpbmNlIGBQYXJzZUdyYXBoUUxTY2hlbWFgIHJlamVjdHMgY2xhc3MgbmFtZXMgdGhhdCB3b3VsZCBwcm9kdWNlIG9uZS4gRWNob2luZ1xuICAvLyBvbmUgdGhlcmVmb3JlIGRpc2Nsb3NlcyBub3RoaW5nIGFib3V0IFRISVMgYXBwbGljYXRpb24ncyBzY2hlbWEsIHNvIGl0IGlzIHByZXNlcnZlZCBsaWtlIGFcbiAgLy8gY2FsbGVyLXJlZmVyZW5jZWQgbmFtZSBhbmQgdGhlIG1lc3NhZ2Ugc3RheXMgdXNlZnVsLlxuICBjb25zdCBzaG91bGRLZWVwVHlwZU5hbWUgPSB0eXBlTmFtZSA9PiB7XG4gICAgY29uc3QgYmFyZVR5cGVOYW1lID0gdHlwZU5hbWUucmVwbGFjZSgvW1tcXF0hXS9nLCAnJyk7XG4gICAgcmV0dXJuIE5PTl9ESVNDTE9TSU5HX1RZUEVfTkFNRVMuaGFzKGJhcmVUeXBlTmFtZSkgfHwgcmVmZXJlbmNlZFRva2Vucy5oYXMoYmFyZVR5cGVOYW1lKTtcbiAgfTtcbiAgcmV0dXJuIG1lc3NhZ2VcbiAgICAvLyBJbnB1dCBjb2VyY2lvbiAvIFZhbHVlc09mQ29ycmVjdFR5cGVSdWxlICh2YXJpYWJsZXMgYW5kIGlubGluZSBsaXRlcmFscykuXG4gICAgLnJlcGxhY2UoL0V4cGVjdGVkIHZhbHVlIG9mIHR5cGUgXCIoW15cIl0rKVwiL2csIChtYXRjaCwgdHlwZU5hbWUpID0+XG4gICAgICBzaG91bGRLZWVwVHlwZU5hbWUodHlwZU5hbWUpID8gbWF0Y2ggOiAnRXhwZWN0ZWQgdmFsdWUgb2YgdGhlIGNvcnJlY3QgdHlwZSdcbiAgICApXG4gICAgLnJlcGxhY2UoL0V4cGVjdGVkIHR5cGUgXCIoW15cIl0rKVwiIHRvIGJlIGFuIG9iamVjdFxcLi9nLCAobWF0Y2gsIHR5cGVOYW1lKSA9PlxuICAgICAgc2hvdWxkS2VlcFR5cGVOYW1lKHR5cGVOYW1lKSA/IG1hdGNoIDogJ0V4cGVjdGVkIGFuIG9iamVjdC4nXG4gICAgKVxuICAgIC5yZXBsYWNlKC9FeHBlY3RlZCBub24tbnVsbGFibGUgdHlwZSBcIihbXlwiXSspXCIgbm90IHRvIGJlIG51bGxcXC4vZywgKG1hdGNoLCB0eXBlTmFtZSkgPT5cbiAgICAgIHNob3VsZEtlZXBUeXBlTmFtZSh0eXBlTmFtZSkgPyBtYXRjaCA6ICdFeHBlY3RlZCBhIG5vbi1udWxsIHZhbHVlLidcbiAgICApXG4gICAgLnJlcGxhY2UoLyBpcyBub3QgZGVmaW5lZCBieSB0eXBlIFwiKFteXCJdKylcIlxcLi9nLCAobWF0Y2gsIHR5cGVOYW1lKSA9PlxuICAgICAgc2hvdWxkS2VlcFR5cGVOYW1lKHR5cGVOYW1lKSA/IG1hdGNoIDogJyBpcyBub3QgZGVmaW5lZC4nXG4gICAgKVxuICAgIC8vIFZhcmlhYmxlc0luQWxsb3dlZFBvc2l0aW9uUnVsZTogdGhlIHBvc2l0aW9uIHR5cGUgaXMgdGhlIHBvaW50ZXIvcmVsYXRpb24gdGFyZ2V0XG4gICAgLy8gaW5wdXQgdHlwZTsgdGhlIGNhbGxlciBvbmx5IHdyb3RlIHRoZWlyIG93biB2YXJpYWJsZSdzIGRlY2xhcmVkIHR5cGUuXG4gICAgLnJlcGxhY2UoLyB1c2VkIGluIHBvc2l0aW9uIGV4cGVjdGluZyB0eXBlIFwiKFteXCJdKylcIlxcLi9nLCAobWF0Y2gsIHR5cGVOYW1lKSA9PlxuICAgICAgc2hvdWxkS2VlcFR5cGVOYW1lKHR5cGVOYW1lKSA/IG1hdGNoIDogJyB1c2VkIGluIHBvc2l0aW9uIGV4cGVjdGluZyBhIGRpZmZlcmVudCB0eXBlLidcbiAgICApXG4gICAgLy8gRmllbGRzT25Db3JyZWN0VHlwZVJ1bGU6IGRlc2NlbmRpbmcgaW50byBhIFBvaW50ZXIvUmVsYXRpb24gb3V0cHV0IGZpZWxkIG5hbWVzIGl0c1xuICAgIC8vIHRhcmdldCBvdXRwdXQgb2JqZWN0IHR5cGUuXG4gICAgLnJlcGxhY2UoL0Nhbm5vdCBxdWVyeSBmaWVsZCAoXCJbXlwiXSpcIikgb24gdHlwZSBcIihbXlwiXSspXCJcXC4vZywgKG1hdGNoLCBmaWVsZE5hbWUsIHR5cGVOYW1lKSA9PlxuICAgICAgc2hvdWxkS2VlcFR5cGVOYW1lKHR5cGVOYW1lKSA/IG1hdGNoIDogYENhbm5vdCBxdWVyeSBmaWVsZCAke2ZpZWxkTmFtZX0uYFxuICAgIClcbiAgICAvLyBTY2FsYXJMZWFmc1J1bGU6IHNlbGVjdGluZyBhIFBvaW50ZXIvUmVsYXRpb24gb3V0cHV0IGZpZWxkIHdpdGggbm8gc3ViLXNlbGVjdGlvbiBuYW1lc1xuICAgIC8vIGl0cyB0YXJnZXQgb3V0cHV0IG9iamVjdCB0eXBlLlxuICAgIC5yZXBsYWNlKFxuICAgICAgL0ZpZWxkIChcIlteXCJdKlwiKSBvZiB0eXBlIFwiKFteXCJdKylcIiBtdXN0IGhhdmUgYSBzZWxlY3Rpb24gb2Ygc3ViZmllbGRzXFwuL2csXG4gICAgICAobWF0Y2gsIGZpZWxkTmFtZSwgdHlwZU5hbWUpID0+XG4gICAgICAgIHNob3VsZEtlZXBUeXBlTmFtZSh0eXBlTmFtZSlcbiAgICAgICAgICA/IG1hdGNoXG4gICAgICAgICAgOiBgRmllbGQgJHtmaWVsZE5hbWV9IG11c3QgaGF2ZSBhIHNlbGVjdGlvbiBvZiBzdWJmaWVsZHMuYFxuICAgIClcbiAgICAvLyBQb3NzaWJsZUZyYWdtZW50U3ByZWFkc1J1bGU6IGFuIGlubGluZS9uYW1lZCBmcmFnbWVudCBvbiBhbiBpbmNvbXBhdGlibGUgdHlwZSBpbnNpZGUgYVxuICAgIC8vIFBvaW50ZXIvUmVsYXRpb24gb3V0cHV0IGZpZWxkIG5hbWVzIHRoZSB0YXJnZXQgb3V0cHV0IG9iamVjdCB0eXBlICh0aGUgcGFyZW50IHR5cGUpLlxuICAgIC8vIFJlZGFjdCBlYWNoIHR5cGUgdG9rZW4gdGhlIGNhbGxlciBkaWQgbm90IHJlZmVyZW5jZTsgd2hlbiBib3RoIGFyZSByZWZlcmVuY2VkIHRoZVxuICAgIC8vIHJlY29uc3RydWN0aW9uIGlzIGlkZW50aWNhbCB0byB0aGUgb3JpZ2luYWwgbWVzc2FnZS5cbiAgICAucmVwbGFjZShcbiAgICAgIC9vYmplY3RzIG9mIHR5cGUgXCIoW15cIl0rKVwiIGNhbiBuZXZlciBiZSBvZiB0eXBlIFwiKFteXCJdKylcIlxcLi9nLFxuICAgICAgKG1hdGNoLCBwYXJlbnRUeXBlLCBmcmFnVHlwZSkgPT4ge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBzaG91bGRLZWVwVHlwZU5hbWUocGFyZW50VHlwZSkgPyBgdHlwZSBcIiR7cGFyZW50VHlwZX1cImAgOiAndGhlIHBhcmVudCB0eXBlJztcbiAgICAgICAgY29uc3QgZnJhZyA9IHNob3VsZEtlZXBUeXBlTmFtZShmcmFnVHlwZSkgPyBgdHlwZSBcIiR7ZnJhZ1R5cGV9XCJgIDogJ3RoZSBnaXZlbiB0eXBlJztcbiAgICAgICAgcmV0dXJuIGBvYmplY3RzIG9mICR7cGFyZW50fSBjYW4gbmV2ZXIgYmUgb2YgJHtmcmFnfS5gO1xuICAgICAgfVxuICAgIClcbiAgICAvLyBLbm93bkFyZ3VtZW50TmFtZXNSdWxlOiB0aGUgYXJndW1lbnQncyBwYXJlbnQgT1VUUFVUIHR5cGUuIEluc2lkZSBhIFBvaW50ZXIvUmVsYXRpb25cbiAgICAvLyBzdWItc2VsZWN0aW9uIHRoYXQgcGFyZW50IGlzIHRoZSBUQVJHRVQgY2xhc3MsIHdob3NlIG91dHB1dCB0eXBlIGlzIG5hbWVkIGV4YWN0bHkgdGhlXG4gICAgLy8gY2xhc3MgbmFtZSAoYHBhcnNlQ2xhc3NUeXBlcy5qc2ApLCBzbyBpdCBkaXNjbG9zZXMgYSBjbGFzcyB0aGUgY2FsbGVyIG5ldmVyIHdyb3RlIOKAlCB0aGV5XG4gICAgLy8gb25seSBzdXBwbGllZCB0aGUgcG9pbnRlciBmaWVsZCBuYW1lLiBUaGUgdHlwZSBpcyBlbWJlZGRlZCBpbiBhIGRvdHRlZCBcIjxUeXBlPi48ZmllbGQ+XCJcbiAgICAvLyB0b2tlbjsga2VlcCB0aGUgZmllbGQgbmFtZSAodGhlIGNhbGxlciB3cm90ZSBpdCkgYW5kIHJlZGFjdCBvbmx5IHRoZSB0eXBlIGhhbGYuIE5vdGUgdGhlXG4gICAgLy8gZGlyZWN0aXZlIGZvcm0gKCcuLi4gb24gZGlyZWN0aXZlIFwiQG5hbWVcIi4nKSBjYXJyaWVzIG5vIHR5cGUgYW5kIGlzIGxlZnQgYWxvbmUuXG4gICAgLnJlcGxhY2UoXG4gICAgICAvVW5rbm93biBhcmd1bWVudCAoXCJbXlwiXSpcIikgb24gZmllbGQgXCIoW15cIi5dKylcXC4oW15cIi5dKylcIlxcLi9nLFxuICAgICAgKG1hdGNoLCBhcmdOYW1lLCB0eXBlTmFtZSwgZmllbGROYW1lKSA9PlxuICAgICAgICBzaG91bGRLZWVwVHlwZU5hbWUodHlwZU5hbWUpXG4gICAgICAgICAgPyBtYXRjaFxuICAgICAgICAgIDogYFVua25vd24gYXJndW1lbnQgJHthcmdOYW1lfSBvbiBmaWVsZCBcIiR7ZmllbGROYW1lfVwiLmBcbiAgICApXG4gICAgLy8gR3JhcGhRTEVudW1UeXBlLnBhcnNlVmFsdWUvcGFyc2VMaXRlcmFsOiBhIFJlbGF0aW9uIGZpZWxkJ3MgYG9yZGVyYCBhcmd1bWVudCBpcyB0eXBlZFxuICAgIC8vIGBbPFRhcmdldD5PcmRlciFdYCAoYHBhcnNlQ2xhc3NUeXBlcy5qc2ApLCBzbyBhbiBpbnZhbGlkIGVudW0gbGl0ZXJhbCBuYW1lcyB0aGUgdGFyZ2V0XG4gICAgLy8gY2xhc3MuIFRoZXNlIG1lc3NhZ2VzIGNvbWUgZnJvbSB0aGUgZW51bSB0eXBlIGl0c2VsZiByYXRoZXIgdGhhbiBmcm9tIGEgdmFsaWRhdGlvbiBydWxlLFxuICAgIC8vIHdoaWNoIGlzIHdoeSB0aGUgVmFsdWVzT2ZDb3JyZWN0VHlwZVJ1bGUgdGVtcGxhdGVzIGFib3ZlIGRvIG5vdCByZWFjaCB0aGVtLiBUaGUgb2ZmZW5kaW5nXG4gICAgLy8gdmFsdWUgaXMgY2FsbGVyLXN1cHBsaWVkIGFuZCBpcyBwcmVzZXJ2ZWQ7IG9ubHkgdGhlIGVudW0gdHlwZSBuYW1lIGlzIHJlZGFjdGVkLlxuICAgIC5yZXBsYWNlKC9WYWx1ZSAoXCJbXlwiXSpcIikgZG9lcyBub3QgZXhpc3QgaW4gXCIoW15cIl0rKVwiIGVudW1cXC4vZywgKG1hdGNoLCB2YWx1ZSwgdHlwZU5hbWUpID0+XG4gICAgICBzaG91bGRLZWVwVHlwZU5hbWUodHlwZU5hbWUpID8gbWF0Y2ggOiBgVmFsdWUgJHt2YWx1ZX0gZG9lcyBub3QgZXhpc3QgaW4gdGhlIGVudW0uYFxuICAgIClcbiAgICAvLyBTaWJsaW5nIGJyYW5jaGVzIG9mIHRoZSBzYW1lIGVudW0gdHlwZSwgcmVhY2hlZCB3aGVuIHRoZSBsaXRlcmFsIGlzIG5vdCBhbiBlbnVtIHZhbHVlIGF0XG4gICAgLy8gYWxsICgnY2Fubm90IHJlcHJlc2VudCBub24tZW51bSB2YWx1ZTogLi4uJywgJ2Nhbm5vdCByZXByZXNlbnQgbm9uLXN0cmluZyB2YWx1ZTogLi4uJyxcbiAgICAvLyAnY2Fubm90IHJlcHJlc2VudCB2YWx1ZTogLi4uJykuIFNhbWUgZGlzY2xvc3VyZSwgc2FtZSByZWRhY3Rpb24uXG4gICAgLnJlcGxhY2UoL0VudW0gXCIoW15cIl0rKVwiIGNhbm5vdCByZXByZXNlbnQgL2csIChtYXRjaCwgdHlwZU5hbWUpID0+XG4gICAgICBzaG91bGRLZWVwVHlwZU5hbWUodHlwZU5hbWUpID8gbWF0Y2ggOiAnRW51bSBjYW5ub3QgcmVwcmVzZW50ICdcbiAgICApO1xufTtcblxuY29uc3Qgc3RyaXBTY2hlbWFJZGVudGlmaWVycyA9IChtZXNzYWdlLCBvcGVyYXRpb25UZXh0KSA9PlxuICBzdHJpcFNjaGVtYVR5cGVJZGVudGlmaWVycyhcbiAgICBzdHJpcFNjaGVtYUNvZXJjaW9uSWRlbnRpZmllcnMoc3RyaXBTY2hlbWFTdWdnZXN0aW9uKG1lc3NhZ2UpKSxcbiAgICBvcGVyYXRpb25UZXh0XG4gICk7XG5cbmNvbnN0IFNjaGVtYVN1Z2dlc3Rpb25zQ29udHJvbFBsdWdpbiA9IChwdWJsaWNJbnRyb3NwZWN0aW9uKSA9PiAoe1xuICByZXF1ZXN0RGlkU3RhcnQ6IGFzeW5jIChyZXF1ZXN0Q29udGV4dCkgPT4gKHtcbiAgICB3aWxsU2VuZFJlc3BvbnNlOiBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAocHVibGljSW50cm9zcGVjdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBpc01hc3Rlck9yTWFpbnRlbmFuY2UgPVxuICAgICAgICByZXF1ZXN0Q29udGV4dC5jb250ZXh0VmFsdWUuYXV0aD8uaXNNYXN0ZXIgfHxcbiAgICAgICAgcmVxdWVzdENvbnRleHQuY29udGV4dFZhbHVlLmF1dGg/LmlzTWFpbnRlbmFuY2U7XG4gICAgICBpZiAoaXNNYXN0ZXJPck1haW50ZW5hbmNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJvZHkgPSByZXF1ZXN0Q29udGV4dC5yZXNwb25zZT8uYm9keTtcbiAgICAgIGNvbnN0IGVycm9ycyA9XG4gICAgICAgIGJvZHk/LmtpbmQgPT09ICdzaW5nbGUnXG4gICAgICAgICAgPyBib2R5LnNpbmdsZVJlc3VsdC5lcnJvcnNcbiAgICAgICAgICA6IGJvZHk/LmtpbmQgPT09ICdpbmNyZW1lbnRhbCdcbiAgICAgICAgICAgID8gYm9keS5pbml0aWFsUmVzdWx0LmVycm9yc1xuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAvLyBTYW1lIGFzIGluIGBJbnRyb3NwZWN0aW9uQ29udHJvbFBsdWdpbmA6IGByZXF1ZXN0Q29udGV4dC5zb3VyY2VgIGNhcnJpZXMgdGhlXG4gICAgICAvLyBvcGVyYXRpb24gdGV4dCBmb3IgZXZlcnkgcmVxdWVzdCwgaW5jbHVkaW5nIGFuIGF1dG9tYXRpYyBwZXJzaXN0ZWQgcXVlcnkgY2FjaGUgaGl0XG4gICAgICAvLyB3aGVyZSBgcmVxdWVzdC5xdWVyeWAgaXMgdW5kZWZpbmVkLiBSZWFkaW5nIGByZXF1ZXN0LnF1ZXJ5YCBhbG9uZSB3b3VsZCBtYWtlIHRoZVxuICAgICAgLy8gYWxsb3dsaXN0IGJlbG93IGVtcHR5IG9uIHRob3NlIHJlcXVlc3RzIGFuZCByZWRhY3QgdHlwZSBuYW1lcyB0aGUgY2FsbGVyIHdyb3RlXG4gICAgICAvLyB0aGVtc2VsdmVzLlxuICAgICAgY29uc3Qgb3BlcmF0aW9uVGV4dCA9IHJlcXVlc3RDb250ZXh0LnNvdXJjZSA/PyByZXF1ZXN0Q29udGV4dC5yZXF1ZXN0Py5xdWVyeTtcbiAgICAgIGVycm9ycz8uZm9yRWFjaChlcnJvciA9PiB7XG4gICAgICAgIGVycm9yLm1lc3NhZ2UgPSBzdHJpcFNjaGVtYUlkZW50aWZpZXJzKGVycm9yLm1lc3NhZ2UsIG9wZXJhdGlvblRleHQpO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlcnJvci5leHRlbnNpb25zPy5zdGFja3RyYWNlKSkge1xuICAgICAgICAgIGVycm9yLmV4dGVuc2lvbnMuc3RhY2t0cmFjZSA9IGVycm9yLmV4dGVuc2lvbnMuc3RhY2t0cmFjZS5tYXAobWVzc2FnZSA9PlxuICAgICAgICAgICAgc3RyaXBTY2hlbWFJZGVudGlmaWVycyhtZXNzYWdlLCBvcGVyYXRpb25UZXh0KVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sXG4gIH0pLFxufSk7XG5cbmNsYXNzIFBhcnNlR3JhcGhRTFNlcnZlciB7XG4gIHBhcnNlR3JhcGhRTENvbnRyb2xsZXI6IFBhcnNlR3JhcGhRTENvbnRyb2xsZXI7XG5cbiAgY29uc3RydWN0b3IocGFyc2VTZXJ2ZXIsIGNvbmZpZykge1xuICAgIHRoaXMucGFyc2VTZXJ2ZXIgPSBwYXJzZVNlcnZlciB8fCByZXF1aXJlZFBhcmFtZXRlcignWW91IG11c3QgcHJvdmlkZSBhIHBhcnNlU2VydmVyIGluc3RhbmNlIScpO1xuICAgIGlmICghY29uZmlnIHx8ICFjb25maWcuZ3JhcGhRTFBhdGgpIHtcbiAgICAgIHJlcXVpcmVkUGFyYW1ldGVyKCdZb3UgbXVzdCBwcm92aWRlIGEgY29uZmlnLmdyYXBoUUxQYXRoIScpO1xuICAgIH1cbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLnBhcnNlR3JhcGhRTENvbnRyb2xsZXIgPSB0aGlzLnBhcnNlU2VydmVyLmNvbmZpZy5wYXJzZUdyYXBoUUxDb250cm9sbGVyO1xuICAgIHRoaXMubG9nID1cbiAgICAgICh0aGlzLnBhcnNlU2VydmVyLmNvbmZpZyAmJiB0aGlzLnBhcnNlU2VydmVyLmNvbmZpZy5sb2dnZXJDb250cm9sbGVyKSB8fCBkZWZhdWx0TG9nZ2VyO1xuICAgIHRoaXMucGFyc2VHcmFwaFFMU2NoZW1hID0gbmV3IFBhcnNlR3JhcGhRTFNjaGVtYSh7XG4gICAgICBwYXJzZUdyYXBoUUxDb250cm9sbGVyOiB0aGlzLnBhcnNlR3JhcGhRTENvbnRyb2xsZXIsXG4gICAgICBkYXRhYmFzZUNvbnRyb2xsZXI6IHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnLmRhdGFiYXNlQ29udHJvbGxlcixcbiAgICAgIGxvZzogdGhpcy5sb2csXG4gICAgICBncmFwaFFMQ3VzdG9tVHlwZURlZnM6IHRoaXMuY29uZmlnLmdyYXBoUUxDdXN0b21UeXBlRGVmcyxcbiAgICAgIGFwcElkOiB0aGlzLnBhcnNlU2VydmVyLmNvbmZpZy5hcHBJZCxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIF9nZXRHcmFwaFFMT3B0aW9ucygpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2NoZW1hOiBhd2FpdCB0aGlzLnBhcnNlR3JhcGhRTFNjaGVtYS5sb2FkKCksXG4gICAgICAgIGNvbnRleHQ6IGFzeW5jICh7IHJlcSB9KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGluZm86IHJlcS5pbmZvLFxuICAgICAgICAgICAgY29uZmlnOiByZXEuY29uZmlnLFxuICAgICAgICAgICAgYXV0aDogcmVxLmF1dGgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5sb2cuZXJyb3IoZS5zdGFjayB8fCAodHlwZW9mIGUudG9TdHJpbmcgPT09ICdmdW5jdGlvbicgJiYgZS50b1N0cmluZygpKSB8fCBlKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgX2dldFNlcnZlcigpIHtcbiAgICBjb25zdCBzY2hlbWFSZWYgPSB0aGlzLnBhcnNlR3JhcGhRTFNjaGVtYS5ncmFwaFFMU2NoZW1hO1xuICAgIGNvbnN0IG5ld1NjaGVtYVJlZiA9IGF3YWl0IHRoaXMucGFyc2VHcmFwaFFMU2NoZW1hLmxvYWQoKTtcbiAgICBpZiAoc2NoZW1hUmVmID09PSBuZXdTY2hlbWFSZWYgJiYgdGhpcy5fc2VydmVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2VydmVyO1xuICAgIH1cbiAgICAvLyBJdCBtZWFucyBhIHBhcmFsbGVsIF9nZXRTZXJ2ZXIgY2FsbCBpcyBhbHJlYWR5IGluIHByb2dyZXNzXG4gICAgaWYgKHRoaXMuX3NjaGVtYVJlZk11dGV4ID09PSBuZXdTY2hlbWFSZWYpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zZXJ2ZXI7XG4gICAgfVxuICAgIC8vIFVwZGF0ZSB0aGUgc2NoZW1hIHJlZiBtdXRleCB0byBhdm9pZCBwYXJhbGxlbCBfZ2V0U2VydmVyIGNhbGxzXG4gICAgdGhpcy5fc2NoZW1hUmVmTXV0ZXggPSBuZXdTY2hlbWFSZWY7XG4gICAgY29uc3QgY3JlYXRlU2VydmVyID0gYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyBzY2hlbWEsIGNvbnRleHQgfSA9IGF3YWl0IHRoaXMuX2dldEdyYXBoUUxPcHRpb25zKCk7XG4gICAgICAgIC8vIEEgdmFsdWUgcGFzc2VkIHRvIHRoaXMgR3JhcGhRTCBzZXJ2ZXIgdGFrZXMgcHJlY2VkZW5jZTsgb3RoZXJ3aXNlIHVzZSB0aGUgUGFyc2UgU2VydmVyXG4gICAgICAgIC8vIG9wdGlvbiwgd2hlcmUgdGhlIG9wdGlvbiBpcyBkb2N1bWVudGVkIGFuZCB3aGVyZSB0aGUgc2VjdXJpdHkgY2hlY2sgcmVhZHMgaXQuXG4gICAgICAgIGNvbnN0IHB1YmxpY0ludHJvc3BlY3Rpb24gPVxuICAgICAgICAgIHRoaXMuY29uZmlnLmdyYXBoUUxQdWJsaWNJbnRyb3NwZWN0aW9uID8/XG4gICAgICAgICAgdGhpcy5wYXJzZVNlcnZlci5jb25maWcuZ3JhcGhRTFB1YmxpY0ludHJvc3BlY3Rpb247XG4gICAgICAgIGNvbnN0IGFwb2xsbyA9IG5ldyBBcG9sbG9TZXJ2ZXIoe1xuICAgICAgICAgIGNzcmZQcmV2ZW50aW9uOiB7XG4gICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly93d3cuYXBvbGxvZ3JhcGhxbC5jb20vZG9jcy9yb3V0ZXIvY29uZmlndXJhdGlvbi9jc3JmL1xuICAgICAgICAgICAgLy8gbmVlZGVkIHNpbmNlIHdlIHVzZSBncmFwaHFsIHVwbG9hZFxuICAgICAgICAgICAgcmVxdWVzdEhlYWRlcnM6IFsnWC1QYXJzZS1BcHBsaWNhdGlvbi1JZCddLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgLy8gV2UgbmVlZCBhbHdheXMgdHJ1ZSBpbnRyb3NwZWN0aW9uIGJlY2F1c2UgYXBvbGxvIHNlcnZlciBoYXZlIGNoYW5naW5nIGJlaGF2aW9yIGJhc2VkIG9uIHRoZSBOT0RFX0VOViB2YXJpYWJsZVxuICAgICAgICAgIC8vIHdlIGRlbGVnYXRlIHRoZSBpbnRyb3NwZWN0aW9uIGNvbnRyb2wgdG8gdGhlIEludHJvc3BlY3Rpb25Db250cm9sUGx1Z2luXG4gICAgICAgICAgaW50cm9zcGVjdGlvbjogdHJ1ZSxcbiAgICAgICAgICBwbHVnaW5zOiBbQXBvbGxvU2VydmVyUGx1Z2luQ2FjaGVDb250cm9sRGlzYWJsZWQoKSwgSW50cm9zcGVjdGlvbkNvbnRyb2xQbHVnaW4ocHVibGljSW50cm9zcGVjdGlvbiksIFNjaGVtYVN1Z2dlc3Rpb25zQ29udHJvbFBsdWdpbihwdWJsaWNJbnRyb3NwZWN0aW9uKSwgY3JlYXRlQ29tcGxleGl0eVZhbGlkYXRpb25QbHVnaW4oKCkgPT4gdGhpcy5wYXJzZVNlcnZlci5jb25maWcucmVxdWVzdENvbXBsZXhpdHkpXSxcbiAgICAgICAgICBzY2hlbWEsXG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCBhcG9sbG8uc3RhcnQoKTtcbiAgICAgICAgcmV0dXJuIGV4cHJlc3NNaWRkbGV3YXJlKGFwb2xsbywge1xuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBSZXNldCBhbGwgbXV0ZXhlcyBhbmQgZm9yd2FyZCB0aGUgZXJyb3JcbiAgICAgICAgdGhpcy5fc2VydmVyID0gbnVsbDtcbiAgICAgICAgdGhpcy5fc2NoZW1hUmVmTXV0ZXggPSBudWxsO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBEbyBub3QgYXdhaXQgc28gcGFyYWxsZWwgcmVxdWVzdCB3aWxsIHdhaXQgdGhlIHNhbWUgcHJvbWlzZSByZWZcbiAgICB0aGlzLl9zZXJ2ZXIgPSBjcmVhdGVTZXJ2ZXIoKTtcbiAgICByZXR1cm4gdGhpcy5fc2VydmVyO1xuICB9XG5cbiAgX3RyYW5zZm9ybU1heFVwbG9hZFNpemVUb0J5dGVzKG1heFVwbG9hZFNpemUpIHtcbiAgICBjb25zdCB1bml0TWFwID0ge1xuICAgICAga2I6IDEsXG4gICAgICBtYjogMixcbiAgICAgIGdiOiAzLFxuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgTnVtYmVyKG1heFVwbG9hZFNpemUuc2xpY2UoMCwgLTIpKSAqXG4gICAgICBNYXRoLnBvdygxMDI0LCB1bml0TWFwW21heFVwbG9hZFNpemUuc2xpY2UoLTIpLnRvTG93ZXJDYXNlKCldKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQHN0YXRpY1xuICAgKiBBbGxvdyBkZXZlbG9wZXJzIHRvIGN1c3RvbWl6ZSBlYWNoIHJlcXVlc3Qgd2l0aCBpbnZlcnNpb24gb2YgY29udHJvbC9kZXBlbmRlbmN5IGluamVjdGlvblxuICAgKi9cbiAgYXBwbHlSZXF1ZXN0Q29udGV4dE1pZGRsZXdhcmUoYXBpLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMucmVxdWVzdENvbnRleHRNaWRkbGV3YXJlKSB7XG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMucmVxdWVzdENvbnRleHRNaWRkbGV3YXJlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigncmVxdWVzdENvbnRleHRNaWRkbGV3YXJlIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICAgICAgfVxuICAgICAgYXBpLnVzZSh0aGlzLmNvbmZpZy5ncmFwaFFMUGF0aCwgb3B0aW9ucy5yZXF1ZXN0Q29udGV4dE1pZGRsZXdhcmUpO1xuICAgIH1cbiAgfVxuXG4gIGFwcGx5R3JhcGhRTChhcHApIHtcbiAgICBpZiAoIWFwcCB8fCAhYXBwLnVzZSkge1xuICAgICAgcmVxdWlyZWRQYXJhbWV0ZXIoJ1lvdSBtdXN0IHByb3ZpZGUgYW4gRXhwcmVzcy5qcyBhcHAgaW5zdGFuY2UhJyk7XG4gICAgfVxuICAgIGFwcC51c2UodGhpcy5jb25maWcuZ3JhcGhRTFBhdGgsIGFsbG93Q3Jvc3NEb21haW4odGhpcy5wYXJzZVNlcnZlci5jb25maWcuYXBwSWQpKTtcbiAgICBhcHAudXNlKHRoaXMuY29uZmlnLmdyYXBoUUxQYXRoLCAocmVxLCBfcmVzLCBuZXh0KSA9PiB7XG4gICAgICAvLyBSYXRlIGxpbWl0IHBhdGggZm9yIGFueSBVUkwgdmFyaWFudCBvZiB0aGUgZW5kcG9pbnRcbiAgICAgIHJlcS5fZ3JhcGhRTFBhdGggPSB0aGlzLmNvbmZpZy5ncmFwaFFMUGF0aDtcbiAgICAgIG5leHQoKTtcbiAgICB9KTtcbiAgICBhcHAudXNlKHRoaXMuY29uZmlnLmdyYXBoUUxQYXRoLCBoYW5kbGVQYXJzZUhlYWRlcnMpO1xuICAgIGFwcC51c2UodGhpcy5jb25maWcuZ3JhcGhRTFBhdGgsIGhhbmRsZVBhcnNlU2Vzc2lvbik7XG4gICAgdGhpcy5hcHBseVJlcXVlc3RDb250ZXh0TWlkZGxld2FyZShhcHAsIHRoaXMucGFyc2VTZXJ2ZXIuY29uZmlnKTtcbiAgICBhcHAudXNlKHRoaXMuY29uZmlnLmdyYXBoUUxQYXRoLCBoYW5kbGVQYXJzZUVycm9ycyk7XG4gICAgYXBwLnVzZShcbiAgICAgIHRoaXMuY29uZmlnLmdyYXBoUUxQYXRoLFxuICAgICAgZ3JhcGhxbFVwbG9hZEV4cHJlc3Moe1xuICAgICAgICBtYXhGaWxlU2l6ZTogdGhpcy5fdHJhbnNmb3JtTWF4VXBsb2FkU2l6ZVRvQnl0ZXMoXG4gICAgICAgICAgdGhpcy5wYXJzZVNlcnZlci5jb25maWcubWF4VXBsb2FkU2l6ZSB8fCAnMjBtYidcbiAgICAgICAgKSxcbiAgICAgIH0pXG4gICAgKTtcbiAgICBhcHAudXNlKHRoaXMuY29uZmlnLmdyYXBoUUxQYXRoLCBleHByZXNzLmpzb24oKSwgYXN5bmMgKHJlcSwgcmVzLCBuZXh0KSA9PiB7XG4gICAgICBjb25zdCBzZXJ2ZXIgPSBhd2FpdCB0aGlzLl9nZXRTZXJ2ZXIoKTtcbiAgICAgIHJldHVybiBzZXJ2ZXIocmVxLCByZXMsIG5leHQpO1xuICAgIH0pO1xuICB9XG5cbiAgYXBwbHlQbGF5Z3JvdW5kKGFwcCkge1xuICAgIGlmICghYXBwIHx8ICFhcHAuZ2V0KSB7XG4gICAgICByZXF1aXJlZFBhcmFtZXRlcignWW91IG11c3QgcHJvdmlkZSBhbiBFeHByZXNzLmpzIGFwcCBpbnN0YW5jZSEnKTtcbiAgICB9XG5cbiAgICBhcHAuZ2V0KFxuICAgICAgdGhpcy5jb25maWcucGxheWdyb3VuZFBhdGggfHxcbiAgICAgIHJlcXVpcmVkUGFyYW1ldGVyKCdZb3UgbXVzdCBwcm92aWRlIGEgY29uZmlnLnBsYXlncm91bmRQYXRoIHRvIGFwcGx5UGxheWdyb3VuZCEnKSxcbiAgICAgIChfcmVxLCByZXMpID0+IHtcbiAgICAgICAgcmVzLnNldEhlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvaHRtbCcpO1xuICAgICAgICByZXMud3JpdGUoXG4gICAgICAgICAgYDxkaXYgaWQ9XCJzYW5kYm94XCIgc3R5bGU9XCJwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtyaWdodDowO2JvdHRvbTowO2xlZnQ6MFwiPjwvZGl2PlxuICAgICAgICAgIDxzY3JpcHQgc3JjPVwiaHR0cHM6Ly9lbWJlZGRhYmxlLXNhbmRib3guY2RuLmFwb2xsb2dyYXBocWwuY29tL19sYXRlc3QvZW1iZWRkYWJsZS1zYW5kYm94LnVtZC5wcm9kdWN0aW9uLm1pbi5qc1wiPjwvc2NyaXB0PlxuICAgICAgICAgIDxzY3JpcHQ+XG4gICAgICAgICAgIG5ldyB3aW5kb3cuRW1iZWRkZWRTYW5kYm94KHtcbiAgICAgICAgICAgICB0YXJnZXQ6IFwiI3NhbmRib3hcIixcbiAgICAgICAgICAgICBlbmRwb2ludElzRWRpdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgIGluaXRpYWxFbmRwb2ludDogJHtKU09OLnN0cmluZ2lmeSh0aGlzLmNvbmZpZy5ncmFwaFFMUGF0aCl9LFxuICAgICAgICAgICAgIGhhbmRsZVJlcXVlc3Q6IChlbmRwb2ludFVybCwgb3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gZmV0Y2goZW5kcG9pbnRVcmwsIHtcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgLi4ub3B0aW9ucy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICAnWC1QYXJzZS1BcHBsaWNhdGlvbi1JZCc6ICR7SlNPTi5zdHJpbmdpZnkodGhpcy5wYXJzZVNlcnZlci5jb25maWcuYXBwSWQpfSxcbiAgICAgICAgICAgICAgICAgICAgJ1gtUGFyc2UtTWFzdGVyLUtleSc6ICR7SlNPTi5zdHJpbmdpZnkodGhpcy5wYXJzZVNlcnZlci5jb25maWcubWFzdGVyS2V5KX0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgIH0pO1xuICAgICAgICAgICAvLyBhZHZhbmNlZCBvcHRpb25zOiBodHRwczovL3d3dy5hcG9sbG9ncmFwaHFsLmNvbS9kb2NzL3N0dWRpby9leHBsb3Jlci9zYW5kYm94I2VtYmVkZGluZy1zYW5kYm94XG4gICAgICAgICAgPC9zY3JpcHQ+YFxuICAgICAgICApO1xuICAgICAgICByZXMuZW5kKCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHNldEdyYXBoUUxDb25maWcoZ3JhcGhRTENvbmZpZzogUGFyc2VHcmFwaFFMQ29uZmlnKTogUHJvbWlzZSB7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VHcmFwaFFMQ29udHJvbGxlci51cGRhdGVHcmFwaFFMQ29uZmlnKGdyYXBoUUxDb25maWcpO1xuICB9XG59XG5cbmV4cG9ydCB7IFBhcnNlR3JhcGhRTFNlcnZlciB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxxQkFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsUUFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsU0FBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksU0FBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUssUUFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sWUFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sa0JBQUEsR0FBQVIsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFRLE9BQUEsR0FBQVQsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFTLG1CQUFBLEdBQUFULE9BQUE7QUFDQSxJQUFBVSxvQkFBQSxHQUFBVixPQUFBO0FBQ0EsSUFBQVcsdUJBQUEsR0FBQUMsdUJBQUEsQ0FBQVosT0FBQTtBQUNBLElBQUFhLGdCQUFBLEdBQUFiLE9BQUE7QUFBNkUsU0FBQVksd0JBQUFFLENBQUEsRUFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxNQUFBQyxDQUFB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
|
package/lib/middlewares.js
CHANGED
|
@@ -295,7 +295,7 @@ const handleRateLimit = async (req, res, next) => {
|
|
|
295
295
|
try {
|
|
296
296
|
await Promise.all(rateLimits.map(async limit => {
|
|
297
297
|
const pathExp = limit.path.regexp || limit.path;
|
|
298
|
-
if (pathExp.test(req.path)) {
|
|
298
|
+
if (pathExp.test(req.path) || req._graphQLPath && pathExp.test(req._graphQLPath)) {
|
|
299
299
|
await limit.handler(req, res, err => {
|
|
300
300
|
if (err) {
|
|
301
301
|
if (err.code === _node.default.Error.CONNECTION_FAILED) {
|
|
@@ -846,4 +846,4 @@ function allowDoubleForwardSlash(req, res, next) {
|
|
|
846
846
|
req.url = req.url.startsWith('//') ? req.url.substring(1) : req.url;
|
|
847
847
|
next();
|
|
848
848
|
}
|
|
849
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY2FjaGUiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9VdGlscyIsIl9ub2RlIiwiX0F1dGgiLCJfQ29uZmlnIiwiX2xvZ2dlciIsIl9yZXN0IiwiX01vbmdvU3RvcmFnZUFkYXB0ZXIiLCJfUG9zdGdyZXNTdG9yYWdlQWRhcHRlciIsIl9leHByZXNzUmF0ZUxpbWl0IiwiX0RlZmluaXRpb25zIiwiX3BhdGhUb1JlZ2V4cCIsIl9yYXRlTGltaXRSZWRpcyIsIl9yZWRpcyIsIl9uZXQiLCJfRXJyb3IiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJERUZBVUxUX0FMTE9XRURfSEVBREVSUyIsImV4cG9ydHMiLCJnZXRNb3VudEZvclJlcXVlc3QiLCJyZXEiLCJtb3VudFBhdGhMZW5ndGgiLCJvcmlnaW5hbFVybCIsImxlbmd0aCIsInVybCIsIm1vdW50UGF0aCIsInNsaWNlIiwicHJvdG9jb2wiLCJnZXQiLCJnZXRCbG9ja0xpc3QiLCJpcFJhbmdlTGlzdCIsInN0b3JlIiwiYmxvY2tMaXN0IiwiQmxvY2tMaXN0IiwiZm9yRWFjaCIsImZ1bGxJcCIsInNldCIsImlwIiwibWFzayIsInNwbGl0IiwiYWRkQWRkcmVzcyIsImlzSVB2NCIsImFkZFN1Ym5ldCIsIk51bWJlciIsImNoZWNrSXAiLCJpbmNvbWluZ0lwSXNWNCIsInJlc3VsdCIsImNoZWNrIiwiaW5jbHVkZXMiLCJoYW5kbGVQYXJzZUhlYWRlcnMiLCJyZXMiLCJuZXh0IiwibW91bnQiLCJjb250ZXh0IiwiSlNPTiIsInBhcnNlIiwiT2JqZWN0IiwicHJvdG90eXBlIiwidG9TdHJpbmciLCJjYWxsIiwibWFsZm9ybWVkQ29udGV4dCIsImluZm8iLCJhcHBJZCIsInNlc3Npb25Ub2tlbiIsIm1hc3RlcktleSIsIm1haW50ZW5hbmNlS2V5IiwiaW5zdGFsbGF0aW9uSWQiLCJjbGllbnRLZXkiLCJqYXZhc2NyaXB0S2V5IiwiZG90TmV0S2V5IiwicmVzdEFQSUtleSIsImJhc2ljQXV0aCIsImh0dHBBdXRoIiwiYmFzaWNBdXRoQXBwSWQiLCJBcHBDYWNoZSIsImJvZHkiLCJfbm9Cb2R5IiwiZmlsZVZpYUpTT04iLCJCdWZmZXIiLCJpc0J1ZmZlciIsImludmFsaWRSZXF1ZXN0IiwiX1Jldm9jYWJsZVNlc3Npb24iLCJfQXBwbGljYXRpb25JZCIsIl9KYXZhU2NyaXB0S2V5IiwiX0NsaWVudFZlcnNpb24iLCJfSW5zdGFsbGF0aW9uSWQiLCJfU2Vzc2lvblRva2VuIiwiX01hc3RlcktleSIsIl9jb250ZXh0IiwiVXRpbHMiLCJpc09iamVjdCIsIl9Db250ZW50VHlwZSIsImhlYWRlcnMiLCJiYXNlNjQiLCJmaWxlRGF0YSIsImZyb20iLCJjbGllbnRJcCIsImdldENsaWVudElwIiwiY29uZmlnIiwiQ29uZmlnIiwic3RhdGUiLCJzdGF0dXMiLCJqc29uIiwiY29kZSIsIlBhcnNlIiwiRXJyb3IiLCJJTlRFUk5BTF9TRVJWRVJfRVJST1IiLCJlcnJvciIsImxvYWRLZXlzIiwiYXBwIiwiYXV0aCIsImlzTWFzdGVyIiwiaXNNYWludGVuYW5jZSIsInJlc29sdmVkIiwicmVzb2x2ZUtleUF1dGgiLCJrZXlWYWx1ZSIsIm1haW50ZW5hbmNlS2V5VmFsdWUiLCJoYW5kbGVSYXRlTGltaXQiLCJrZXlzIiwib25lS2V5Q29uZmlndXJlZCIsInNvbWUiLCJrZXkiLCJ1bmRlZmluZWQiLCJvbmVLZXlNYXRjaGVzIiwibWF0Y2hlc0V4YWN0Um91dGUiLCJwYXRoIiwidXNlckZyb21KV1QiLCJBdXRoIiwidXNlciIsInJhdGVMaW1pdHMiLCJQcm9taXNlIiwiYWxsIiwibWFwIiwibGltaXQiLCJwYXRoRXhwIiwicmVnZXhwIiwidGVzdCIsImhhbmRsZXIiLCJlcnIiLCJDT05ORUNUSU9OX0ZBSUxFRCIsImxvZ2dlckNvbnRyb2xsZXIiLCJtZXNzYWdlIiwiaGFuZGxlUGFyc2VTZXNzaW9uIiwibWV0aG9kIiwicmVxdWVzdEF1dGgiLCJpbmRleE9mIiwiZ2V0QXV0aEZvckxlZ2FjeVNlc3Npb25Ub2tlbiIsImdldEF1dGhGb3JTZXNzaW9uVG9rZW4iLCJVTktOT1dOX0VSUk9SIiwiYXV0aG9yaXphdGlvbiIsImhlYWRlciIsImF1dGhQcmVmaXgiLCJtYXRjaCIsInRvTG93ZXJDYXNlIiwiZW5jb2RlZEF1dGgiLCJzdWJzdHJpbmciLCJjcmVkZW50aWFscyIsImRlY29kZUJhc2U2NCIsImpzS2V5UHJlZml4IiwibWF0Y2hLZXkiLCJzdHIiLCJhbGxvd0Nyb3NzRG9tYWluIiwiYWxsb3dIZWFkZXJzIiwiam9pbiIsImJhc2VPcmlnaW5zIiwiYWxsb3dPcmlnaW4iLCJyZXF1ZXN0T3JpZ2luIiwib3JpZ2luIiwiYWxsb3dPcmlnaW5zIiwic2VuZFN0YXR1cyIsImFsbG93TWV0aG9kT3ZlcnJpZGUiLCJfbWV0aG9kIiwib3JpZ2luYWxNZXRob2QiLCJ0b1VwcGVyQ2FzZSIsIm1haW50ZW5hbmNlS2V5SXBzIiwibWFpbnRlbmFuY2VLZXlJcHNTdG9yZSIsImxvZyIsImRlZmF1bHRMb2dnZXIiLCJsb2FkTWFzdGVyS2V5IiwibWFzdGVyS2V5SXBzIiwibWFzdGVyS2V5SXBzU3RvcmUiLCJyZWFkT25seU1hc3RlcktleSIsInJlYWRPbmx5TWFzdGVyS2V5SXBzIiwicmVhZE9ubHlNYXN0ZXJLZXlJcHNTdG9yZSIsImlzUmVhZE9ubHkiLCJoYW5kbGVQYXJzZUF1dGgiLCJoYW5kbGVQYXJzZUhlYWx0aCIsIm9wdGlvbnMiLCJub3JtYWxpemVSb3V0ZUFsbG93TGlzdFBhdGgiLCJub3JtYWxpemVkIiwiVVJMIiwicGF0aG5hbWUiLCJzdGFydHNXaXRoIiwiZW5kc1dpdGgiLCJxdWVyeUluZGV4IiwiZXhhY3RSb3V0ZVJlZ2V4cENhY2hlIiwiY3JlYXRlIiwicm91dGUiLCJwYXRoVG9SZWdleHAiLCJpc1JvdXRlQWxsb3dlZCIsInJvdXRlQWxsb3dMaXN0IiwicmVnZXhlcyIsIl9yb3V0ZUFsbG93TGlzdFJlZ2V4IiwicmVnZXgiLCJlbmZvcmNlUm91dGVBbGxvd0xpc3QiLCJjcmVhdGVTYW5pdGl6ZWRFcnJvciIsIk9QRVJBVElPTl9GT1JCSURERU4iLCJoYW5kbGVQYXJzZUVycm9ycyIsImVuYWJsZUV4cHJlc3NFcnJvckhhbmRsZXIiLCJzaWdudXBVc2VybmFtZVRha2VuTGV2ZWwiLCJsb2dMZXZlbHMiLCJzaWdudXBVc2VybmFtZVRha2VuIiwiaHR0cFN0YXR1cyIsIk9CSkVDVF9OT1RfRk9VTkQiLCJVU0VSTkFNRV9UQUtFTiIsImxvZ2dlck1ldGhvZCIsImJpbmQiLCJwcm9jZXNzIiwiZW52IiwiVEVTVElORyIsInN0YWNrIiwiZW5mb3JjZU1hc3RlcktleUFjY2VzcyIsImNyZWF0ZVNhbml0aXplZEh0dHBFcnJvciIsImVuZCIsInByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzIiwicmVxdWVzdCIsInJlc29sdmUiLCJpc0ludGVybmFsUmVxdWVzdCIsInNvY2tldCIsInJlbW90ZUFkZHJlc3MiLCJhZGRSYXRlTGltaXQiLCJjbG91ZCIsIlJhdGVMaW1pdE9wdGlvbnMiLCJyZWRpc1N0b3JlIiwiY29ubmVjdGlvblByb21pc2UiLCJyZWRpc1VybCIsImNsaWVudCIsImNyZWF0ZUNsaWVudCIsIm9uIiwiaXNPcGVuIiwiY29ubmVjdCIsIlJlZGlzU3RvcmUiLCJzZW5kQ29tbWFuZCIsImFyZ3MiLCJwdXNoIiwicmVxdWVzdFBhdGgiLCJyZXF1ZXN0Q291bnQiLCJyZXF1ZXN0TWV0aG9kcyIsImluY2x1ZGVNYXN0ZXJLZXkiLCJpbmNsdWRlSW50ZXJuYWxSZXF1ZXN0cyIsImVycm9yUmVzcG9uc2VNZXNzYWdlIiwicmF0ZUxpbWl0Iiwid2luZG93TXMiLCJyZXF1ZXN0VGltZVdpbmRvdyIsIm1heCIsInJlc3BvbnNlIiwic2tpcCIsIm1ldGhvZHNUb0NoZWNrIiwiU2V0IiwiX2JhdGNoT3JpZ2luYWxNZXRob2QiLCJhZGQiLCJBcnJheSIsImlzQXJyYXkiLCJtIiwiaGFzIiwicmVnRXhwIiwiUmVnRXhwIiwia2V5R2VuZXJhdG9yIiwiem9uZSIsIlNlcnZlciIsIlJhdGVMaW1pdFpvbmUiLCJnbG9iYWwiLCJ0b2tlbiIsInNlc3Npb24iLCJpZCIsInB1dCIsInByb21pc2VFbnN1cmVJZGVtcG90ZW5jeSIsImRhdGFiYXNlIiwiYWRhcHRlciIsIk1vbmdvU3RvcmFnZUFkYXB0ZXIiLCJQb3N0Z3Jlc1N0b3JhZ2VBZGFwdGVyIiwicmVxdWVzdElkIiwicGF0aHMiLCJ0dGwiLCJpZGVtcG90ZW5jeU9wdGlvbnMiLCJyZXFQYXRoIiwicmVwbGFjZSIsImNoYXJBdCIsImV4cGlyeURhdGUiLCJEYXRlIiwic2V0U2Vjb25kcyIsImdldFNlY29uZHMiLCJyZXN0IiwibWFzdGVyIiwicmVxSWQiLCJleHBpcmUiLCJfZW5jb2RlIiwiY2F0Y2giLCJEVVBMSUNBVEVfVkFMVUUiLCJEVVBMSUNBVEVfUkVRVUVTVCIsIklOVkFMSURfSlNPTiIsImFsbG93RG91YmxlRm9yd2FyZFNsYXNoIl0sInNvdXJjZXMiOlsiLi4vc3JjL21pZGRsZXdhcmVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBBcHBDYWNoZSBmcm9tICcuL2NhY2hlJztcbmltcG9ydCBVdGlscyBmcm9tICcuL1V0aWxzJztcbmltcG9ydCBQYXJzZSBmcm9tICdwYXJzZS9ub2RlJztcbmltcG9ydCBhdXRoIGZyb20gJy4vQXV0aCc7XG5pbXBvcnQgQ29uZmlnIGZyb20gJy4vQ29uZmlnJztcbmltcG9ydCBkZWZhdWx0TG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCByZXN0IGZyb20gJy4vcmVzdCc7XG5pbXBvcnQgTW9uZ29TdG9yYWdlQWRhcHRlciBmcm9tICcuL0FkYXB0ZXJzL1N0b3JhZ2UvTW9uZ28vTW9uZ29TdG9yYWdlQWRhcHRlcic7XG5pbXBvcnQgUG9zdGdyZXNTdG9yYWdlQWRhcHRlciBmcm9tICcuL0FkYXB0ZXJzL1N0b3JhZ2UvUG9zdGdyZXMvUG9zdGdyZXNTdG9yYWdlQWRhcHRlcic7XG5pbXBvcnQgcmF0ZUxpbWl0IGZyb20gJ2V4cHJlc3MtcmF0ZS1saW1pdCc7XG5pbXBvcnQgeyBSYXRlTGltaXRPcHRpb25zIH0gZnJvbSAnLi9PcHRpb25zL0RlZmluaXRpb25zJztcbmltcG9ydCB7IHBhdGhUb1JlZ2V4cCB9IGZyb20gJ3BhdGgtdG8tcmVnZXhwJztcbmltcG9ydCBSZWRpc1N0b3JlIGZyb20gJ3JhdGUtbGltaXQtcmVkaXMnO1xuaW1wb3J0IHsgY3JlYXRlQ2xpZW50IH0gZnJvbSAncmVkaXMnO1xuaW1wb3J0IHsgQmxvY2tMaXN0LCBpc0lQdjQgfSBmcm9tICduZXQnO1xuaW1wb3J0IHsgY3JlYXRlU2FuaXRpemVkSHR0cEVycm9yLCBjcmVhdGVTYW5pdGl6ZWRFcnJvciB9IGZyb20gJy4vRXJyb3InO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9BTExPV0VEX0hFQURFUlMgPVxuICAnWC1QYXJzZS1NYXN0ZXItS2V5LCBYLVBhcnNlLVJFU1QtQVBJLUtleSwgWC1QYXJzZS1KYXZhc2NyaXB0LUtleSwgWC1QYXJzZS1BcHBsaWNhdGlvbi1JZCwgWC1QYXJzZS1DbGllbnQtVmVyc2lvbiwgWC1QYXJzZS1TZXNzaW9uLVRva2VuLCBYLVJlcXVlc3RlZC1XaXRoLCBYLVBhcnNlLVJldm9jYWJsZS1TZXNzaW9uLCBYLVBhcnNlLVJlcXVlc3QtSWQsIENvbnRlbnQtVHlwZSwgUHJhZ21hLCBDYWNoZS1Db250cm9sJztcblxuY29uc3QgZ2V0TW91bnRGb3JSZXF1ZXN0ID0gZnVuY3Rpb24gKHJlcSkge1xuICBjb25zdCBtb3VudFBhdGhMZW5ndGggPSByZXEub3JpZ2luYWxVcmwubGVuZ3RoIC0gcmVxLnVybC5sZW5ndGg7XG4gIGNvbnN0IG1vdW50UGF0aCA9IHJlcS5vcmlnaW5hbFVybC5zbGljZSgwLCBtb3VudFBhdGhMZW5ndGgpO1xuICByZXR1cm4gcmVxLnByb3RvY29sICsgJzovLycgKyByZXEuZ2V0KCdob3N0JykgKyBtb3VudFBhdGg7XG59O1xuXG5jb25zdCBnZXRCbG9ja0xpc3QgPSAoaXBSYW5nZUxpc3QsIHN0b3JlKSA9PiB7XG4gIGlmIChzdG9yZS5nZXQoJ2Jsb2NrTGlzdCcpKSB7IHJldHVybiBzdG9yZS5nZXQoJ2Jsb2NrTGlzdCcpOyB9XG4gIGNvbnN0IGJsb2NrTGlzdCA9IG5ldyBCbG9ja0xpc3QoKTtcbiAgaXBSYW5nZUxpc3QuZm9yRWFjaChmdWxsSXAgPT4ge1xuICAgIGlmIChmdWxsSXAgPT09ICc6Oi8wJyB8fCBmdWxsSXAgPT09ICc6OicgfHwgZnVsbElwID09PSAnOjowJykge1xuICAgICAgc3RvcmUuc2V0KCdhbGxvd0FsbElwdjYnLCB0cnVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGZ1bGxJcCA9PT0gJzAuMC4wLjAvMCcgfHwgZnVsbElwID09PSAnMC4wLjAuMCcpIHtcbiAgICAgIHN0b3JlLnNldCgnYWxsb3dBbGxJcHY0JywgdHJ1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IFtpcCwgbWFza10gPSBmdWxsSXAuc3BsaXQoJy8nKTtcbiAgICBpZiAoIW1hc2spIHtcbiAgICAgIGJsb2NrTGlzdC5hZGRBZGRyZXNzKGlwLCBpc0lQdjQoaXApID8gJ2lwdjQnIDogJ2lwdjYnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYmxvY2tMaXN0LmFkZFN1Ym5ldChpcCwgTnVtYmVyKG1hc2spLCBpc0lQdjQoaXApID8gJ2lwdjQnIDogJ2lwdjYnKTtcbiAgICB9XG4gIH0pO1xuICBzdG9yZS5zZXQoJ2Jsb2NrTGlzdCcsIGJsb2NrTGlzdCk7XG4gIHJldHVybiBibG9ja0xpc3Q7XG59O1xuXG5leHBvcnQgY29uc3QgY2hlY2tJcCA9IChpcCwgaXBSYW5nZUxpc3QsIHN0b3JlKSA9PiB7XG4gIGNvbnN0IGluY29taW5nSXBJc1Y0ID0gaXNJUHY0KGlwKTtcbiAgY29uc3QgYmxvY2tMaXN0ID0gZ2V0QmxvY2tMaXN0KGlwUmFuZ2VMaXN0LCBzdG9yZSk7XG5cbiAgaWYgKHN0b3JlLmdldChpcCkpIHsgcmV0dXJuIHRydWU7IH1cbiAgaWYgKHN0b3JlLmdldCgnYWxsb3dBbGxJcHY0JykgJiYgaW5jb21pbmdJcElzVjQpIHsgcmV0dXJuIHRydWU7IH1cbiAgaWYgKHN0b3JlLmdldCgnYWxsb3dBbGxJcHY2JykgJiYgIWluY29taW5nSXBJc1Y0KSB7IHJldHVybiB0cnVlOyB9XG4gIGNvbnN0IHJlc3VsdCA9IGJsb2NrTGlzdC5jaGVjayhpcCwgaW5jb21pbmdJcElzVjQgPyAnaXB2NCcgOiAnaXB2NicpO1xuXG4gIC8vIElmIHRoZSBpcCBpcyBpbiB0aGUgbGlzdCwgd2Ugc3RvcmUgdGhlIHJlc3VsdCBpbiB0aGUgc3RvcmVcbiAgLy8gc28gd2UgaGF2ZSBhIG9wdGltaXplZCBwYXRoIGZvciB0aGUgbmV4dCByZXF1ZXN0XG4gIGlmIChpcFJhbmdlTGlzdC5pbmNsdWRlcyhpcCkgJiYgcmVzdWx0KSB7XG4gICAgc3RvcmUuc2V0KGlwLCByZXN1bHQpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyBDaGVja3MgdGhhdCB0aGUgcmVxdWVzdCBpcyBhdXRob3JpemVkIGZvciB0aGlzIGFwcCBhbmQgY2hlY2tzIHVzZXJcbi8vIGF1dGggdG9vLlxuLy8gVGhlIGJvZHlwYXJzZXIgc2hvdWxkIHJ1biBiZWZvcmUgdGhpcyBtaWRkbGV3YXJlLlxuLy8gQWRkcyBpbmZvIHRvIHRoZSByZXF1ZXN0OlxuLy8gcmVxLmNvbmZpZyAtIHRoZSBDb25maWcgZm9yIHRoaXMgYXBwXG4vLyByZXEuYXV0aCAtIHRoZSBBdXRoIGZvciB0aGlzIHJlcXVlc3RcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoYW5kbGVQYXJzZUhlYWRlcnMocmVxLCByZXMsIG5leHQpIHtcbiAgdmFyIG1vdW50ID0gZ2V0TW91bnRGb3JSZXF1ZXN0KHJlcSk7XG5cbiAgbGV0IGNvbnRleHQgPSB7fTtcbiAgaWYgKHJlcS5nZXQoJ1gtUGFyc2UtQ2xvdWQtQ29udGV4dCcpICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgY29udGV4dCA9IEpTT04ucGFyc2UocmVxLmdldCgnWC1QYXJzZS1DbG91ZC1Db250ZXh0JykpO1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjb250ZXh0KSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICAgICAgdGhyb3cgJ0NvbnRleHQgaXMgbm90IGFuIG9iamVjdCc7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbWFsZm9ybWVkQ29udGV4dChyZXEsIHJlcyk7XG4gICAgfVxuICB9XG4gIHZhciBpbmZvID0ge1xuICAgIGFwcElkOiByZXEuZ2V0KCdYLVBhcnNlLUFwcGxpY2F0aW9uLUlkJyksXG4gICAgc2Vzc2lvblRva2VuOiByZXEuZ2V0KCdYLVBhcnNlLVNlc3Npb24tVG9rZW4nKSxcbiAgICBtYXN0ZXJLZXk6IHJlcS5nZXQoJ1gtUGFyc2UtTWFzdGVyLUtleScpLFxuICAgIG1haW50ZW5hbmNlS2V5OiByZXEuZ2V0KCdYLVBhcnNlLU1haW50ZW5hbmNlLUtleScpLFxuICAgIGluc3RhbGxhdGlvbklkOiByZXEuZ2V0KCdYLVBhcnNlLUluc3RhbGxhdGlvbi1JZCcpLFxuICAgIGNsaWVudEtleTogcmVxLmdldCgnWC1QYXJzZS1DbGllbnQtS2V5JyksXG4gICAgamF2YXNjcmlwdEtleTogcmVxLmdldCgnWC1QYXJzZS1KYXZhc2NyaXB0LUtleScpLFxuICAgIGRvdE5ldEtleTogcmVxLmdldCgnWC1QYXJzZS1XaW5kb3dzLUtleScpLFxuICAgIHJlc3RBUElLZXk6IHJlcS5nZXQoJ1gtUGFyc2UtUkVTVC1BUEktS2V5JyksXG4gICAgY29udGV4dDogY29udGV4dCxcbiAgfTtcblxuICB2YXIgYmFzaWNBdXRoID0gaHR0cEF1dGgocmVxKTtcblxuICBpZiAoYmFzaWNBdXRoKSB7XG4gICAgdmFyIGJhc2ljQXV0aEFwcElkID0gYmFzaWNBdXRoLmFwcElkO1xuICAgIGlmIChBcHBDYWNoZS5nZXQoYmFzaWNBdXRoQXBwSWQpKSB7XG4gICAgICBpbmZvLmFwcElkID0gYmFzaWNBdXRoQXBwSWQ7XG4gICAgICBpbmZvLm1hc3RlcktleSA9IGJhc2ljQXV0aC5tYXN0ZXJLZXkgfHwgaW5mby5tYXN0ZXJLZXk7XG4gICAgICBpbmZvLmphdmFzY3JpcHRLZXkgPSBiYXNpY0F1dGguamF2YXNjcmlwdEtleSB8fCBpbmZvLmphdmFzY3JpcHRLZXk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHJlcS5ib2R5KSB7XG4gICAgLy8gVW5pdHkgU0RLIHNlbmRzIGEgX25vQm9keSBrZXkgd2hpY2ggbmVlZHMgdG8gYmUgcmVtb3ZlZC5cbiAgICAvLyBVbmNsZWFyIGF0IHRoaXMgcG9pbnQgaWYgYWN0aW9uIG5lZWRzIHRvIGJlIHRha2VuLlxuICAgIGRlbGV0ZSByZXEuYm9keS5fbm9Cb2R5O1xuICB9XG5cbiAgdmFyIGZpbGVWaWFKU09OID0gZmFsc2U7XG5cbiAgaWYgKCFpbmZvLmFwcElkIHx8ICFBcHBDYWNoZS5nZXQoaW5mby5hcHBJZCkpIHtcbiAgICAvLyBTZWUgaWYgd2UgY2FuIGZpbmQgdGhlIGFwcCBpZCBvbiB0aGUgYm9keS5cbiAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKHJlcS5ib2R5KSkge1xuICAgICAgLy8gVGhlIG9ubHkgY2hhbmNlIHRvIGZpbmQgdGhlIGFwcCBpZCBpcyBpZiB0aGlzIGlzIGEgZmlsZVxuICAgICAgLy8gdXBsb2FkIHRoYXQgYWN0dWFsbHkgaXMgYSBKU09OIGJvZHkuIFNvIHRyeSB0byBwYXJzZSBpdC5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXJzZS1jb21tdW5pdHkvcGFyc2Utc2VydmVyL2lzc3Vlcy82NTg5XG4gICAgICAvLyBJdCBpcyBhbHNvIHBvc3NpYmxlIHRoYXQgdGhlIGNsaWVudCBpcyB0cnlpbmcgdG8gdXBsb2FkIGEgZmlsZSBidXQgZm9yZ290XG4gICAgICAvLyB0byBwcm92aWRlIHgtcGFyc2UtYXBwLWlkIGluIGhlYWRlciBhbmQgcGFyc2UgYSBiaW5hcnkgZmlsZSB3aWxsIGZhaWxcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlcS5ib2R5ID0gSlNPTi5wYXJzZShyZXEuYm9keSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIGludmFsaWRSZXF1ZXN0KHJlcSwgcmVzKTtcbiAgICAgIH1cbiAgICAgIGZpbGVWaWFKU09OID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAocmVxLmJvZHkpIHtcbiAgICAgIGRlbGV0ZSByZXEuYm9keS5fUmV2b2NhYmxlU2Vzc2lvbjtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICByZXEuYm9keSAmJlxuICAgICAgcmVxLmJvZHkuX0FwcGxpY2F0aW9uSWQgJiZcbiAgICAgIEFwcENhY2hlLmdldChyZXEuYm9keS5fQXBwbGljYXRpb25JZCkgJiZcbiAgICAgICghaW5mby5tYXN0ZXJLZXkgfHwgQXBwQ2FjaGUuZ2V0KHJlcS5ib2R5Ll9BcHBsaWNhdGlvbklkKS5tYXN0ZXJLZXkgPT09IGluZm8ubWFzdGVyS2V5KVxuICAgICkge1xuICAgICAgaW5mby5hcHBJZCA9IHJlcS5ib2R5Ll9BcHBsaWNhdGlvbklkO1xuICAgICAgaW5mby5qYXZhc2NyaXB0S2V5ID0gcmVxLmJvZHkuX0phdmFTY3JpcHRLZXkgfHwgJyc7XG4gICAgICBkZWxldGUgcmVxLmJvZHkuX0FwcGxpY2F0aW9uSWQ7XG4gICAgICBkZWxldGUgcmVxLmJvZHkuX0phdmFTY3JpcHRLZXk7XG4gICAgICAvLyBUT0RPOiB0ZXN0IHRoYXQgdGhlIFJFU1QgQVBJIGZvcm1hdHMgZ2VuZXJhdGVkIGJ5IHRoZSBvdGhlclxuICAgICAgLy8gU0RLcyBhcmUgaGFuZGxlZCBva1xuICAgICAgZGVsZXRlIHJlcS5ib2R5Ll9DbGllbnRWZXJzaW9uO1xuICAgICAgaWYgKHJlcS5ib2R5Ll9JbnN0YWxsYXRpb25JZCkge1xuICAgICAgICBpZiAodHlwZW9mIHJlcS5ib2R5Ll9JbnN0YWxsYXRpb25JZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4gaW52YWxpZFJlcXVlc3QocmVxLCByZXMpO1xuICAgICAgICB9XG4gICAgICAgIGluZm8uaW5zdGFsbGF0aW9uSWQgPSByZXEuYm9keS5fSW5zdGFsbGF0aW9uSWQ7XG4gICAgICAgIGRlbGV0ZSByZXEuYm9keS5fSW5zdGFsbGF0aW9uSWQ7XG4gICAgICB9XG4gICAgICBpZiAocmVxLmJvZHkuX1Nlc3Npb25Ub2tlbikge1xuICAgICAgICBpZiAodHlwZW9mIHJlcS5ib2R5Ll9TZXNzaW9uVG9rZW4gIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuIGludmFsaWRSZXF1ZXN0KHJlcSwgcmVzKTtcbiAgICAgICAgfVxuICAgICAgICBpbmZvLnNlc3Npb25Ub2tlbiA9IHJlcS5ib2R5Ll9TZXNzaW9uVG9rZW47XG4gICAgICAgIGRlbGV0ZSByZXEuYm9keS5fU2Vzc2lvblRva2VuO1xuICAgICAgfVxuICAgICAgaWYgKHJlcS5ib2R5Ll9NYXN0ZXJLZXkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiByZXEuYm9keS5fTWFzdGVyS2V5ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJldHVybiBpbnZhbGlkUmVxdWVzdChyZXEsIHJlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaW5mby5tYXN0ZXJLZXkgPSByZXEuYm9keS5fTWFzdGVyS2V5O1xuICAgICAgICBkZWxldGUgcmVxLmJvZHkuX01hc3RlcktleTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXEuYm9keS5fY29udGV4dCkge1xuICAgICAgICBpZiAoVXRpbHMuaXNPYmplY3QocmVxLmJvZHkuX2NvbnRleHQpKSB7XG4gICAgICAgICAgaW5mby5jb250ZXh0ID0gcmVxLmJvZHkuX2NvbnRleHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGluZm8uY29udGV4dCA9IEpTT04ucGFyc2UocmVxLmJvZHkuX2NvbnRleHQpO1xuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbmZvLmNvbnRleHQpICE9PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgICAgICAgICAgICB0aHJvdyAnQ29udGV4dCBpcyBub3QgYW4gb2JqZWN0JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHJldHVybiBtYWxmb3JtZWRDb250ZXh0KHJlcSwgcmVzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIHJlcS5ib2R5Ll9jb250ZXh0O1xuICAgICAgfVxuICAgICAgaWYgKHJlcS5ib2R5Ll9Db250ZW50VHlwZSkge1xuICAgICAgICBpZiAodHlwZW9mIHJlcS5ib2R5Ll9Db250ZW50VHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4gaW52YWxpZFJlcXVlc3QocmVxLCByZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJlcS5oZWFkZXJzWydjb250ZW50LXR5cGUnXSA9IHJlcS5ib2R5Ll9Db250ZW50VHlwZTtcbiAgICAgICAgZGVsZXRlIHJlcS5ib2R5Ll9Db250ZW50VHlwZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGludmFsaWRSZXF1ZXN0KHJlcSwgcmVzKTtcbiAgICB9XG4gIH1cblxuICBpZiAoaW5mby5zZXNzaW9uVG9rZW4gJiYgdHlwZW9mIGluZm8uc2Vzc2lvblRva2VuICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBpbnZhbGlkUmVxdWVzdChyZXEsIHJlcyk7XG4gIH1cblxuICBpZiAoZmlsZVZpYUpTT04gJiYgcmVxLmJvZHkpIHtcbiAgICBpZiAocmVxLmJvZHkuYmFzZTY0ICYmIHR5cGVvZiByZXEuYm9keS5iYXNlNjQgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gaW52YWxpZFJlcXVlc3QocmVxLCByZXMpO1xuICAgIH1cbiAgICByZXEuZmlsZURhdGEgPSByZXEuYm9keS5maWxlRGF0YTtcbiAgICAvLyBXZSBuZWVkIHRvIHJlcG9wdWxhdGUgcmVxLmJvZHkgd2l0aCBhIGJ1ZmZlclxuICAgIHZhciBiYXNlNjQgPSByZXEuYm9keS5iYXNlNjQ7XG4gICAgcmVxLmJvZHkgPSBCdWZmZXIuZnJvbShiYXNlNjQsICdiYXNlNjQnKTtcbiAgfVxuXG4gIGNvbnN0IGNsaWVudElwID0gZ2V0Q2xpZW50SXAocmVxKTtcbiAgY29uc3QgY29uZmlnID0gcmVxLmNvbmZpZyB8fCBDb25maWcuZ2V0KGluZm8uYXBwSWQsIG1vdW50KTtcbiAgaWYgKGNvbmZpZy5zdGF0ZSAmJiBjb25maWcuc3RhdGUgIT09ICdvaycpIHtcbiAgICByZXMuc3RhdHVzKDUwMCk7XG4gICAgcmVzLmpzb24oe1xuICAgICAgY29kZTogUGFyc2UuRXJyb3IuSU5URVJOQUxfU0VSVkVSX0VSUk9SLFxuICAgICAgZXJyb3I6IGBJbnZhbGlkIHNlcnZlciBzdGF0ZTogJHtjb25maWcuc3RhdGV9YCxcbiAgICB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKCFyZXEuY29uZmlnKSB7XG4gICAgYXdhaXQgY29uZmlnLmxvYWRLZXlzKCk7XG4gIH1cblxuICBpbmZvLmFwcCA9IEFwcENhY2hlLmdldChpbmZvLmFwcElkKTtcbiAgcmVxLmNvbmZpZyA9IGNvbmZpZztcbiAgcmVxLmNvbmZpZy5oZWFkZXJzID0gcmVxLmhlYWRlcnMgfHwge307XG4gIHJlcS5jb25maWcuaXAgPSBjbGllbnRJcDtcbiAgcmVxLmluZm8gPSBpbmZvO1xuXG4gIC8vIFNraXAga2V5IGRldGVjdGlvbiBpZiBhbHJlYWR5IHJlc29sdmVkIGJ5IGhhbmRsZVBhcnNlQXV0aCAoaGVhZGVyLWJhc2VkKS5cbiAgLy8gT25seSByZXNvbHZlIGhlcmUgZm9yIGJvZHktYmFzZWQgX01hc3RlcktleSAoaW5mby5tYXN0ZXJLZXkgbWF5IGNvbWUgZnJvbSBib2R5KS5cbiAgaWYgKCFyZXEuYXV0aCB8fCAoIXJlcS5hdXRoLmlzTWFzdGVyICYmICFyZXEuYXV0aC5pc01haW50ZW5hbmNlKSkge1xuICAgIGNvbnN0IHJlc29sdmVkID0gYXdhaXQgcmVzb2x2ZUtleUF1dGgoe1xuICAgICAgY29uZmlnOiByZXEuY29uZmlnLFxuICAgICAga2V5VmFsdWU6IGluZm8ubWFzdGVyS2V5LFxuICAgICAgbWFpbnRlbmFuY2VLZXlWYWx1ZTogaW5mby5tYWludGVuYW5jZUtleSxcbiAgICAgIGluc3RhbGxhdGlvbklkOiBpbmZvLmluc3RhbGxhdGlvbklkLFxuICAgICAgY2xpZW50SXAsXG4gICAgfSk7XG4gICAgaWYgKHJlc29sdmVkKSB7XG4gICAgICByZXEuYXV0aCA9IHJlc29sdmVkO1xuICAgIH1cbiAgfVxuXG4gIGlmIChyZXEuYXV0aCAmJiAocmVxLmF1dGguaXNNYXN0ZXIgfHwgcmVxLmF1dGguaXNNYWludGVuYW5jZSkpIHtcbiAgICByZXR1cm4gaGFuZGxlUmF0ZUxpbWl0KHJlcSwgcmVzLCBuZXh0KTtcbiAgfVxuXG4gIC8vIENsaWVudCBrZXlzIGFyZSBub3QgcmVxdWlyZWQgaW4gcGFyc2Utc2VydmVyLCBidXQgaWYgYW55IGhhdmUgYmVlbiBjb25maWd1cmVkIGluIHRoZSBzZXJ2ZXIsIHZhbGlkYXRlIHRoZW1cbiAgLy8gIHRvIHByZXNlcnZlIG9yaWdpbmFsIGJlaGF2aW9yLlxuICBjb25zdCBrZXlzID0gWydjbGllbnRLZXknLCAnamF2YXNjcmlwdEtleScsICdkb3ROZXRLZXknLCAncmVzdEFQSUtleSddO1xuICBjb25zdCBvbmVLZXlDb25maWd1cmVkID0ga2V5cy5zb21lKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gcmVxLmNvbmZpZ1trZXldICE9PSB1bmRlZmluZWQ7XG4gIH0pO1xuICBjb25zdCBvbmVLZXlNYXRjaGVzID0ga2V5cy5zb21lKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gcmVxLmNvbmZpZ1trZXldICE9PSB1bmRlZmluZWQgJiYgaW5mb1trZXldID09PSByZXEuY29uZmlnW2tleV07XG4gIH0pO1xuXG4gIGlmIChvbmVLZXlDb25maWd1cmVkICYmICFvbmVLZXlNYXRjaGVzKSB7XG4gICAgcmV0dXJuIGludmFsaWRSZXF1ZXN0KHJlcSwgcmVzKTtcbiAgfVxuXG4gIGlmIChtYXRjaGVzRXhhY3RSb3V0ZShyZXEucGF0aCwgJy9sb2dpbicpKSB7XG4gICAgZGVsZXRlIGluZm8uc2Vzc2lvblRva2VuO1xuICB9XG5cbiAgaWYgKHJlcS51c2VyRnJvbUpXVCkge1xuICAgIHJlcS5hdXRoID0gbmV3IGF1dGguQXV0aCh7XG4gICAgICBjb25maWc6IHJlcS5jb25maWcsXG4gICAgICBpbnN0YWxsYXRpb25JZDogaW5mby5pbnN0YWxsYXRpb25JZCxcbiAgICAgIGlzTWFzdGVyOiBmYWxzZSxcbiAgICAgIHVzZXI6IHJlcS51c2VyRnJvbUpXVCxcbiAgICB9KTtcbiAgICByZXR1cm4gaGFuZGxlUmF0ZUxpbWl0KHJlcSwgcmVzLCBuZXh0KTtcbiAgfVxuXG4gIGlmICghaW5mby5zZXNzaW9uVG9rZW4pIHtcbiAgICByZXEuYXV0aCA9IG5ldyBhdXRoLkF1dGgoe1xuICAgICAgY29uZmlnOiByZXEuY29uZmlnLFxuICAgICAgaW5zdGFsbGF0aW9uSWQ6IGluZm8uaW5zdGFsbGF0aW9uSWQsXG4gICAgICBpc01hc3RlcjogZmFsc2UsXG4gICAgfSk7XG4gIH1cbiAgaGFuZGxlUmF0ZUxpbWl0KHJlcSwgcmVzLCBuZXh0KTtcbn1cblxuY29uc3QgaGFuZGxlUmF0ZUxpbWl0ID0gYXN5bmMgKHJlcSwgcmVzLCBuZXh0KSA9PiB7XG4gIGNvbnN0IHJhdGVMaW1pdHMgPSByZXEuY29uZmlnLnJhdGVMaW1pdHMgfHwgW107XG4gIHRyeSB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICByYXRlTGltaXRzLm1hcChhc3luYyBsaW1pdCA9PiB7XG4gICAgICAgIGNvbnN0IHBhdGhFeHAgPSBsaW1pdC5wYXRoLnJlZ2V4cCB8fCBsaW1pdC5wYXRoO1xuICAgICAgICBpZiAocGF0aEV4cC50ZXN0KHJlcS5wYXRoKSkge1xuICAgICAgICAgIGF3YWl0IGxpbWl0LmhhbmRsZXIocmVxLCByZXMsIGVyciA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgIGlmIChlcnIuY29kZSA9PT0gUGFyc2UuRXJyb3IuQ09OTkVDVElPTl9GQUlMRUQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVxLmNvbmZpZy5sb2dnZXJDb250cm9sbGVyLmVycm9yKFxuICAgICAgICAgICAgICAgICdBbiB1bmtub3duIGVycm9yIG9jY3VyZWQgd2hlbiBhdHRlbXB0aW5nIHRvIGFwcGx5IHRoZSByYXRlIGxpbWl0ZXI6ICcsXG4gICAgICAgICAgICAgICAgZXJyXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXMuc3RhdHVzKDQyOSk7XG4gICAgcmVzLmpzb24oeyBjb2RlOiBQYXJzZS5FcnJvci5DT05ORUNUSU9OX0ZBSUxFRCwgZXJyb3I6IGVycm9yLm1lc3NhZ2UgfSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIG5leHQoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVQYXJzZVNlc3Npb24gPSBhc3luYyAocmVxLCByZXMsIG5leHQpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBpbmZvID0gcmVxLmluZm87XG4gICAgaWYgKHJlcS5hdXRoIHx8IChtYXRjaGVzRXhhY3RSb3V0ZShyZXEucGF0aCwgJy9zZXNzaW9ucy9tZScpICYmIHJlcS5tZXRob2QgPT09ICdHRVQnKSkge1xuICAgICAgbmV4dCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgcmVxdWVzdEF1dGggPSBudWxsO1xuICAgIGlmIChcbiAgICAgIGluZm8uc2Vzc2lvblRva2VuICYmXG4gICAgICBtYXRjaGVzRXhhY3RSb3V0ZShyZXEucGF0aCwgJy91cGdyYWRlVG9SZXZvY2FibGVTZXNzaW9uJykgJiZcbiAgICAgIGluZm8uc2Vzc2lvblRva2VuLmluZGV4T2YoJ3I6JykgIT0gMFxuICAgICkge1xuICAgICAgcmVxdWVzdEF1dGggPSBhd2FpdCBhdXRoLmdldEF1dGhGb3JMZWdhY3lTZXNzaW9uVG9rZW4oe1xuICAgICAgICBjb25maWc6IHJlcS5jb25maWcsXG4gICAgICAgIGluc3RhbGxhdGlvbklkOiBpbmZvLmluc3RhbGxhdGlvbklkLFxuICAgICAgICBzZXNzaW9uVG9rZW46IGluZm8uc2Vzc2lvblRva2VuLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcXVlc3RBdXRoID0gYXdhaXQgYXV0aC5nZXRBdXRoRm9yU2Vzc2lvblRva2VuKHtcbiAgICAgICAgY29uZmlnOiByZXEuY29uZmlnLFxuICAgICAgICBpbnN0YWxsYXRpb25JZDogaW5mby5pbnN0YWxsYXRpb25JZCxcbiAgICAgICAgc2Vzc2lvblRva2VuOiBpbmZvLnNlc3Npb25Ub2tlbixcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXEuYXV0aCA9IHJlcXVlc3RBdXRoO1xuICAgIG5leHQoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBQYXJzZS5FcnJvcikge1xuICAgICAgbmV4dChlcnJvcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIExvZyBmdWxsIGVycm9yIGRldGFpbHMgaW50ZXJuYWxseSwgYnV0IGRvbid0IGV4cG9zZSB0byBjbGllbnRcbiAgICByZXEuY29uZmlnLmxvZ2dlckNvbnRyb2xsZXIuZXJyb3IoJ2Vycm9yIGdldHRpbmcgYXV0aCBmb3Igc2Vzc2lvblRva2VuJywgZXJyb3IpO1xuICAgIG5leHQobmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLlVOS05PV05fRVJST1IsICdVbmtub3duIGVycm9yJykpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBnZXRDbGllbnRJcChyZXEpIHtcbiAgcmV0dXJuIHJlcS5pcDtcbn1cblxuZnVuY3Rpb24gaHR0cEF1dGgocmVxKSB7XG4gIGlmICghKHJlcS5yZXEgfHwgcmVxKS5oZWFkZXJzLmF1dGhvcml6YXRpb24pIHsgcmV0dXJuOyB9XG5cbiAgdmFyIGhlYWRlciA9IChyZXEucmVxIHx8IHJlcSkuaGVhZGVycy5hdXRob3JpemF0aW9uO1xuICB2YXIgYXBwSWQsIG1hc3RlcktleSwgamF2YXNjcmlwdEtleTtcblxuICAvLyBwYXJzZSBoZWFkZXJcbiAgdmFyIGF1dGhQcmVmaXggPSAnYmFzaWMgJztcblxuICB2YXIgbWF0Y2ggPSBoZWFkZXIudG9Mb3dlckNhc2UoKS5pbmRleE9mKGF1dGhQcmVmaXgpO1xuXG4gIGlmIChtYXRjaCA9PSAwKSB7XG4gICAgdmFyIGVuY29kZWRBdXRoID0gaGVhZGVyLnN1YnN0cmluZyhhdXRoUHJlZml4Lmxlbmd0aCwgaGVhZGVyLmxlbmd0aCk7XG4gICAgdmFyIGNyZWRlbnRpYWxzID0gZGVjb2RlQmFzZTY0KGVuY29kZWRBdXRoKS5zcGxpdCgnOicpO1xuXG4gICAgaWYgKGNyZWRlbnRpYWxzLmxlbmd0aCA9PSAyKSB7XG4gICAgICBhcHBJZCA9IGNyZWRlbnRpYWxzWzBdO1xuICAgICAgdmFyIGtleSA9IGNyZWRlbnRpYWxzWzFdO1xuXG4gICAgICB2YXIganNLZXlQcmVmaXggPSAnamF2YXNjcmlwdC1rZXk9JztcblxuICAgICAgdmFyIG1hdGNoS2V5ID0ga2V5LmluZGV4T2YoanNLZXlQcmVmaXgpO1xuICAgICAgaWYgKG1hdGNoS2V5ID09IDApIHtcbiAgICAgICAgamF2YXNjcmlwdEtleSA9IGtleS5zdWJzdHJpbmcoanNLZXlQcmVmaXgubGVuZ3RoLCBrZXkubGVuZ3RoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1hc3RlcktleSA9IGtleTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4geyBhcHBJZDogYXBwSWQsIG1hc3RlcktleTogbWFzdGVyS2V5LCBqYXZhc2NyaXB0S2V5OiBqYXZhc2NyaXB0S2V5IH07XG59XG5cbmZ1bmN0aW9uIGRlY29kZUJhc2U2NChzdHIpIHtcbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKHN0ciwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbGxvd0Nyb3NzRG9tYWluKGFwcElkKSB7XG4gIHJldHVybiAocmVxLCByZXMsIG5leHQpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSBDb25maWcuZ2V0KGFwcElkLCBnZXRNb3VudEZvclJlcXVlc3QocmVxKSk7XG4gICAgbGV0IGFsbG93SGVhZGVycyA9IERFRkFVTFRfQUxMT1dFRF9IRUFERVJTO1xuICAgIGlmIChjb25maWcgJiYgY29uZmlnLmFsbG93SGVhZGVycykge1xuICAgICAgYWxsb3dIZWFkZXJzICs9IGAsICR7Y29uZmlnLmFsbG93SGVhZGVycy5qb2luKCcsICcpfWA7XG4gICAgfVxuXG4gICAgY29uc3QgYmFzZU9yaWdpbnMgPVxuICAgICAgdHlwZW9mIGNvbmZpZz8uYWxsb3dPcmlnaW4gPT09ICdzdHJpbmcnID8gW2NvbmZpZy5hbGxvd09yaWdpbl0gOiBjb25maWc/LmFsbG93T3JpZ2luID8/IFsnKiddO1xuICAgIGNvbnN0IHJlcXVlc3RPcmlnaW4gPSByZXEuaGVhZGVycy5vcmlnaW47XG4gICAgY29uc3QgYWxsb3dPcmlnaW5zID1cbiAgICAgIHJlcXVlc3RPcmlnaW4gJiYgYmFzZU9yaWdpbnMuaW5jbHVkZXMocmVxdWVzdE9yaWdpbikgPyByZXF1ZXN0T3JpZ2luIDogYmFzZU9yaWdpbnNbMF07XG4gICAgcmVzLmhlYWRlcignQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJywgYWxsb3dPcmlnaW5zKTtcbiAgICByZXMuaGVhZGVyKCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzJywgJ0dFVCxQVVQsUE9TVCxERUxFVEUsT1BUSU9OUycpO1xuICAgIHJlcy5oZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMnLCBhbGxvd0hlYWRlcnMpO1xuICAgIHJlcy5oZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUV4cG9zZS1IZWFkZXJzJywgJ1gtUGFyc2UtSm9iLVN0YXR1cy1JZCwgWC1QYXJzZS1QdXNoLVN0YXR1cy1JZCcpO1xuICAgIC8vIGludGVyY2VwdCBPUFRJT05TIG1ldGhvZFxuICAgIGlmICgnT1BUSU9OUycgPT0gcmVxLm1ldGhvZCkge1xuICAgICAgcmVzLnNlbmRTdGF0dXMoMjAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV4dCgpO1xuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsbG93TWV0aG9kT3ZlcnJpZGUocmVxLCByZXMsIG5leHQpIHtcbiAgaWYgKHJlcS5tZXRob2QgPT09ICdQT1NUJyAmJiByZXEuYm9keT8uX21ldGhvZCkge1xuICAgIGlmICh0eXBlb2YgcmVxLmJvZHkuX21ldGhvZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJlcS5vcmlnaW5hbE1ldGhvZCA9IHJlcS5tZXRob2Q7XG4gICAgICByZXEubWV0aG9kID0gcmVxLmJvZHkuX21ldGhvZC50b1VwcGVyQ2FzZSgpO1xuICAgIH1cbiAgICBkZWxldGUgcmVxLmJvZHkuX21ldGhvZDtcbiAgfVxuICBuZXh0KCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVLZXlBdXRoKHsgY29uZmlnLCBrZXlWYWx1ZSwgbWFpbnRlbmFuY2VLZXlWYWx1ZSwgaW5zdGFsbGF0aW9uSWQsIGNsaWVudElwIH0pIHtcbiAgaWYgKG1haW50ZW5hbmNlS2V5VmFsdWUgJiYgbWFpbnRlbmFuY2VLZXlWYWx1ZSA9PT0gY29uZmlnLm1haW50ZW5hbmNlS2V5KSB7XG4gICAgaWYgKGNoZWNrSXAoY2xpZW50SXAsIGNvbmZpZy5tYWludGVuYW5jZUtleUlwcyB8fCBbXSwgY29uZmlnLm1haW50ZW5hbmNlS2V5SXBzU3RvcmUpKSB7XG4gICAgICByZXR1cm4gbmV3IGF1dGguQXV0aCh7IGNvbmZpZywgaW5zdGFsbGF0aW9uSWQsIGlzTWFpbnRlbmFuY2U6IHRydWUgfSk7XG4gICAgfVxuICAgIGNvbnN0IGxvZyA9IGNvbmZpZy5sb2dnZXJDb250cm9sbGVyIHx8IGRlZmF1bHRMb2dnZXI7XG4gICAgbG9nLmVycm9yKFxuICAgICAgYFJlcXVlc3QgdXNpbmcgbWFpbnRlbmFuY2Uga2V5IHJlamVjdGVkIGFzIHRoZSByZXF1ZXN0IElQIGFkZHJlc3MgJyR7Y2xpZW50SXB9JyBpcyBub3Qgc2V0IGluIFBhcnNlIFNlcnZlciBvcHRpb24gJ21haW50ZW5hbmNlS2V5SXBzJy5gXG4gICAgKTtcbiAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcigpO1xuICAgIGVycm9yLnN0YXR1cyA9IDQwMztcbiAgICBlcnJvci5tZXNzYWdlID0gJ3VuYXV0aG9yaXplZCc7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbiAgY29uc3QgbWFzdGVyS2V5ID0gYXdhaXQgY29uZmlnLmxvYWRNYXN0ZXJLZXkoKTtcbiAgaWYgKGtleVZhbHVlID09PSBtYXN0ZXJLZXkpIHtcbiAgICBpZiAoY2hlY2tJcChjbGllbnRJcCwgY29uZmlnLm1hc3RlcktleUlwcyB8fCBbXSwgY29uZmlnLm1hc3RlcktleUlwc1N0b3JlKSkge1xuICAgICAgcmV0dXJuIG5ldyBhdXRoLkF1dGgoeyBjb25maWcsIGluc3RhbGxhdGlvbklkLCBpc01hc3RlcjogdHJ1ZSB9KTtcbiAgICB9XG4gICAgY29uc3QgbG9nID0gY29uZmlnLmxvZ2dlckNvbnRyb2xsZXIgfHwgZGVmYXVsdExvZ2dlcjtcbiAgICBsb2cuZXJyb3IoXG4gICAgICBgUmVxdWVzdCB1c2luZyBtYXN0ZXIga2V5IHJlamVjdGVkIGFzIHRoZSByZXF1ZXN0IElQIGFkZHJlc3MgJyR7Y2xpZW50SXB9JyBpcyBub3Qgc2V0IGluIFBhcnNlIFNlcnZlciBvcHRpb24gJ21hc3RlcktleUlwcycuYFxuICAgICk7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoKTtcbiAgICBlcnJvci5zdGF0dXMgPSA0MDM7XG4gICAgZXJyb3IubWVzc2FnZSA9ICd1bmF1dGhvcml6ZWQnO1xuICAgIHRocm93IGVycm9yO1xuICB9XG4gIGlmIChcbiAgICBrZXlWYWx1ZSAmJlxuICAgIHR5cGVvZiBjb25maWcucmVhZE9ubHlNYXN0ZXJLZXkgIT09ICd1bmRlZmluZWQnICYmXG4gICAgY29uZmlnLnJlYWRPbmx5TWFzdGVyS2V5ICYmXG4gICAga2V5VmFsdWUgPT09IGNvbmZpZy5yZWFkT25seU1hc3RlcktleVxuICApIHtcbiAgICBpZiAoY2hlY2tJcChjbGllbnRJcCwgY29uZmlnLnJlYWRPbmx5TWFzdGVyS2V5SXBzIHx8IFtdLCBjb25maWcucmVhZE9ubHlNYXN0ZXJLZXlJcHNTdG9yZSkpIHtcbiAgICAgIHJldHVybiBuZXcgYXV0aC5BdXRoKHsgY29uZmlnLCBpbnN0YWxsYXRpb25JZCwgaXNNYXN0ZXI6IHRydWUsIGlzUmVhZE9ubHk6IHRydWUgfSk7XG4gICAgfVxuICAgIGNvbnN0IGxvZyA9IGNvbmZpZy5sb2dnZXJDb250cm9sbGVyIHx8IGRlZmF1bHRMb2dnZXI7XG4gICAgbG9nLmVycm9yKFxuICAgICAgYFJlcXVlc3QgdXNpbmcgcmVhZC1vbmx5IG1hc3RlciBrZXkgcmVqZWN0ZWQgYXMgdGhlIHJlcXVlc3QgSVAgYWRkcmVzcyAnJHtjbGllbnRJcH0nIGlzIG5vdCBzZXQgaW4gUGFyc2UgU2VydmVyIG9wdGlvbiAncmVhZE9ubHlNYXN0ZXJLZXlJcHMnLmBcbiAgICApO1xuICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCk7XG4gICAgZXJyb3Iuc3RhdHVzID0gNDAzO1xuICAgIGVycm9yLm1lc3NhZ2UgPSAndW5hdXRob3JpemVkJztcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZVBhcnNlQXV0aChhcHBJZCkge1xuICByZXR1cm4gYXN5bmMgKHJlcSwgcmVzLCBuZXh0KSA9PiB7XG4gICAgY29uc3QgbW91bnQgPSBnZXRNb3VudEZvclJlcXVlc3QocmVxKTtcbiAgICBjb25zdCBjb25maWcgPSBDb25maWcuZ2V0KGFwcElkLCBtb3VudCk7XG4gICAgaWYgKCFjb25maWcpIHtcbiAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgfVxuICAgIHJlcS5jb25maWcgPSBjb25maWc7XG4gICAgY29uc3QgY2xpZW50SXAgPSBnZXRDbGllbnRJcChyZXEpO1xuICAgIHJlcS5jb25maWcuaXAgPSBjbGllbnRJcDtcbiAgICBhd2FpdCBjb25maWcubG9hZEtleXMoKTtcbiAgICBjb25zdCByZXNvbHZlZCA9IGF3YWl0IHJlc29sdmVLZXlBdXRoKHtcbiAgICAgIGNvbmZpZyxcbiAgICAgIGtleVZhbHVlOiByZXEuZ2V0KCdYLVBhcnNlLU1hc3Rlci1LZXknKSB8fCBudWxsLFxuICAgICAgbWFpbnRlbmFuY2VLZXlWYWx1ZTogcmVxLmdldCgnWC1QYXJzZS1NYWludGVuYW5jZS1LZXknKSB8fCBudWxsLFxuICAgICAgaW5zdGFsbGF0aW9uSWQ6IHJlcS5nZXQoJ1gtUGFyc2UtSW5zdGFsbGF0aW9uLUlkJykgfHwgJ2Nsb3VkJyxcbiAgICAgIGNsaWVudElwLFxuICAgIH0pO1xuICAgIGlmIChyZXNvbHZlZCkge1xuICAgICAgcmVxLmF1dGggPSByZXNvbHZlZDtcbiAgICB9XG4gICAgcmV0dXJuIG5leHQoKTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZVBhcnNlSGVhbHRoKG9wdGlvbnMpIHtcbiAgcmV0dXJuIChyZXEsIHJlcykgPT4ge1xuICAgIHJlcy5zdGF0dXMob3B0aW9ucy5zdGF0ZSA9PT0gJ29rJyA/IDIwMCA6IDUwMyk7XG4gICAgaWYgKG9wdGlvbnMuc3RhdGUgPT09ICdzdGFydGluZycpIHtcbiAgICAgIHJlcy5zZXQoJ1JldHJ5LUFmdGVyJywgMSk7XG4gICAgfVxuICAgIHJlcy5qc29uKHtcbiAgICAgIHN0YXR1czogb3B0aW9ucy5zdGF0ZSxcbiAgICB9KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplUm91dGVBbGxvd0xpc3RQYXRoKHBhdGgsIG1vdW50KSB7XG4gIGxldCBub3JtYWxpemVkID0gcGF0aDtcbiAgaWYgKG1vdW50KSB7XG4gICAgY29uc3QgbW91bnRQYXRoID0gbmV3IFVSTChtb3VudCkucGF0aG5hbWU7XG4gICAgaWYgKG5vcm1hbGl6ZWQuc3RhcnRzV2l0aChtb3VudFBhdGgpKSB7XG4gICAgICBub3JtYWxpemVkID0gbm9ybWFsaXplZC5zdWJzdHJpbmcobW91bnRQYXRoLmxlbmd0aCk7XG4gICAgfVxuICB9XG4gIGlmIChub3JtYWxpemVkLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgIG5vcm1hbGl6ZWQgPSBub3JtYWxpemVkLnN1YnN0cmluZygxKTtcbiAgfVxuICBpZiAobm9ybWFsaXplZC5lbmRzV2l0aCgnLycpKSB7XG4gICAgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZWQuc3Vic3RyaW5nKDAsIG5vcm1hbGl6ZWQubGVuZ3RoIC0gMSk7XG4gIH1cbiAgY29uc3QgcXVlcnlJbmRleCA9IG5vcm1hbGl6ZWQuaW5kZXhPZignPycpO1xuICBpZiAocXVlcnlJbmRleCAhPT0gLTEpIHtcbiAgICBub3JtYWxpemVkID0gbm9ybWFsaXplZC5zdWJzdHJpbmcoMCwgcXVlcnlJbmRleCk7XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG59XG5cbi8vIENhY2hlIG9mIGNvbXBpbGVkIGV4YWN0LXJvdXRlIG1hdGNoZXJzLCBrZXllZCBieSByb3V0ZS4gTWlycm9ycyBob3cgYGFkZFJhdGVMaW1pdGAgY29tcGlsZXMgYVxuLy8gcm91dGUncyBgcGF0aFRvUmVnZXhwYCBvbmNlIGFuZCByZXVzZXMgaXQsIGF2b2lkaW5nIHJlY29tcGlsYXRpb24gb24gZXZlcnkgcmVxdWVzdC5cbmNvbnN0IGV4YWN0Um91dGVSZWdleHBDYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGBwYXRoYCByZXNvbHZlcyB0byB0aGUgZ2l2ZW4gZXhhY3Qgc3RhdGljIGByb3V0ZWAsIHVzaW5nIHRoZSBzYW1lXG4gKiBgcGF0aC10by1yZWdleHBgIG1hdGNoaW5nIHRoYXQgdGhlIEV4cHJlc3Mgcm91dGVyIGFuZCB0aGUgcmF0ZSBsaW1pdGVyIHVzZSAoY2FzZS1pbnNlbnNpdGl2ZVxuICogYW5kIHRyYWlsaW5nLXNsYXNoLXRvbGVyYW50IGJ5IGRlZmF1bHQpLiBQYXRoLWxpdGVyYWwgY2hlY2tzIOKAlCBzdWNoIGFzIGRldGVjdGluZyBgL2xvZ2luYCB0b1xuICogZHJvcCB0aGUgaW5ib3VuZCBzZXNzaW9uIHRva2VuIOKAlCBtdXN0IHVzZSB0aGlzIHNvIHRoZXkgc3RheSBjb25zaXN0ZW50IHdpdGggaG93IHRoZSByb3V0ZXJcbiAqIGFjdHVhbGx5IGRpc3BhdGNoZXMgdGhlIHJlcXVlc3QsIGluc3RlYWQgb2YgcmUtZGVyaXZpbmcgdGhlIG1hdGNoaW5nIHJ1bGVzIGJ5IGhhbmQuXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBUaGUgcmVxdWVzdCBwYXRoIChlLmcuIGByZXEucGF0aGAgb3IgYSBiYXRjaCBzdWItcmVxdWVzdCByb3V0YWJsZSBwYXRoKS5cbiAqIEBwYXJhbSB7c3RyaW5nfSByb3V0ZSBUaGUgZXhhY3Qgc3RhdGljIHJvdXRlIHRvIG1hdGNoIChlLmcuIGAvbG9naW5gKS5cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hlc0V4YWN0Um91dGUocGF0aCwgcm91dGUpIHtcbiAgaWYgKHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoIWV4YWN0Um91dGVSZWdleHBDYWNoZVtyb3V0ZV0pIHtcbiAgICBleGFjdFJvdXRlUmVnZXhwQ2FjaGVbcm91dGVdID0gcGF0aFRvUmVnZXhwKHJvdXRlKS5yZWdleHA7XG4gIH1cbiAgcmV0dXJuIGV4YWN0Um91dGVSZWdleHBDYWNoZVtyb3V0ZV0udGVzdChwYXRoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUm91dGVBbGxvd2VkKHBhdGgsIGNvbmZpZywgYXV0aCkge1xuICBpZiAoIWNvbmZpZyB8fCBjb25maWcucm91dGVBbGxvd0xpc3QgPT09IHVuZGVmaW5lZCB8fCBjb25maWcucm91dGVBbGxvd0xpc3QgPT09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoYXV0aCAmJiAoYXV0aC5pc01hc3RlciB8fCBhdXRoLmlzTWFpbnRlbmFuY2UpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZVJvdXRlQWxsb3dMaXN0UGF0aChwYXRoLCBjb25maWcubW91bnQpO1xuICBjb25zdCByZWdleGVzID0gY29uZmlnLl9yb3V0ZUFsbG93TGlzdFJlZ2V4IHx8IFtdO1xuICBmb3IgKGNvbnN0IHJlZ2V4IG9mIHJlZ2V4ZXMpIHtcbiAgICBpZiAocmVnZXgudGVzdChub3JtYWxpemVkKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuZm9yY2VSb3V0ZUFsbG93TGlzdChyZXEsIHJlcywgbmV4dCkge1xuICBpZiAoaXNSb3V0ZUFsbG93ZWQocmVxLm9yaWdpbmFsVXJsLCByZXEuY29uZmlnLCByZXEuYXV0aCkpIHtcbiAgICByZXR1cm4gbmV4dCgpO1xuICB9XG4gIGNvbnN0IHBhdGggPSBub3JtYWxpemVSb3V0ZUFsbG93TGlzdFBhdGgocmVxLm9yaWdpbmFsVXJsLCByZXEuY29uZmlnPy5tb3VudCk7XG4gIHRocm93IGNyZWF0ZVNhbml0aXplZEVycm9yKFxuICAgIFBhcnNlLkVycm9yLk9QRVJBVElPTl9GT1JCSURERU4sXG4gICAgYFJvdXRlIG5vdCBhbGxvd2VkIGJ5IHJvdXRlQWxsb3dMaXN0OiAke3JlcS5tZXRob2R9ICR7cGF0aH1gLFxuICAgIHJlcS5jb25maWdcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZVBhcnNlRXJyb3JzKGVyciwgcmVxLCByZXMsIG5leHQpIHtcbiAgY29uc3QgbG9nID0gKHJlcS5jb25maWcgJiYgcmVxLmNvbmZpZy5sb2dnZXJDb250cm9sbGVyKSB8fCBkZWZhdWx0TG9nZ2VyO1xuICBpZiAoZXJyIGluc3RhbmNlb2YgUGFyc2UuRXJyb3IpIHtcbiAgICBpZiAocmVxLmNvbmZpZyAmJiByZXEuY29uZmlnLmVuYWJsZUV4cHJlc3NFcnJvckhhbmRsZXIpIHtcbiAgICAgIHJldHVybiBuZXh0KGVycik7XG4gICAgfVxuICAgIGNvbnN0IHNpZ251cFVzZXJuYW1lVGFrZW5MZXZlbCA9XG4gICAgICByZXEuY29uZmlnPy5sb2dMZXZlbHM/LnNpZ251cFVzZXJuYW1lVGFrZW4gfHwgJ2luZm8nO1xuICAgIGxldCBodHRwU3RhdHVzO1xuICAgIC8vIFRPRE86IGZpbGwgb3V0IHRoaXMgbWFwcGluZ1xuICAgIHN3aXRjaCAoZXJyLmNvZGUpIHtcbiAgICAgIGNhc2UgUGFyc2UuRXJyb3IuSU5URVJOQUxfU0VSVkVSX0VSUk9SOlxuICAgICAgICBodHRwU3RhdHVzID0gNTAwO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgUGFyc2UuRXJyb3IuT0JKRUNUX05PVF9GT1VORDpcbiAgICAgICAgaHR0cFN0YXR1cyA9IDQwNDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBodHRwU3RhdHVzID0gNDAwO1xuICAgIH1cbiAgICByZXMuc3RhdHVzKGh0dHBTdGF0dXMpO1xuICAgIHJlcy5qc29uKHsgY29kZTogZXJyLmNvZGUsIGVycm9yOiBlcnIubWVzc2FnZSB9KTtcbiAgICBpZiAoZXJyLmNvZGUgPT09IFBhcnNlLkVycm9yLlVTRVJOQU1FX1RBS0VOKSB7XG4gICAgICBpZiAoc2lnbnVwVXNlcm5hbWVUYWtlbkxldmVsICE9PSAnc2lsZW50Jykge1xuICAgICAgICBjb25zdCBsb2dnZXJNZXRob2QgPVxuICAgICAgICAgIHR5cGVvZiBsb2dbc2lnbnVwVXNlcm5hbWVUYWtlbkxldmVsXSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgPyBsb2dbc2lnbnVwVXNlcm5hbWVUYWtlbkxldmVsXS5iaW5kKGxvZylcbiAgICAgICAgICAgIDogbG9nLmVycm9yLmJpbmQobG9nKTtcbiAgICAgICAgbG9nZ2VyTWV0aG9kKCdQYXJzZSBlcnJvcjogJywgZXJyKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbG9nLmVycm9yKCdQYXJzZSBlcnJvcjogJywgZXJyKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoZXJyLnN0YXR1cyAmJiBlcnIubWVzc2FnZSkge1xuICAgIHJlcy5zdGF0dXMoZXJyLnN0YXR1cyk7XG4gICAgcmVzLmpzb24oeyBlcnJvcjogZXJyLm1lc3NhZ2UgfSk7XG4gICAgaWYgKCEocHJvY2VzcyAmJiBwcm9jZXNzLmVudi5URVNUSU5HKSkge1xuICAgICAgbmV4dChlcnIpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsb2cuZXJyb3IoJ1VuY2F1Z2h0IGludGVybmFsIHNlcnZlciBlcnJvci4nLCBlcnIsIGVyci5zdGFjayk7XG4gICAgcmVzLnN0YXR1cyg1MDApO1xuICAgIHJlcy5qc29uKHtcbiAgICAgIGNvZGU6IFBhcnNlLkVycm9yLklOVEVSTkFMX1NFUlZFUl9FUlJPUixcbiAgICAgIG1lc3NhZ2U6ICdJbnRlcm5hbCBzZXJ2ZXIgZXJyb3IuJyxcbiAgICB9KTtcbiAgICBpZiAoIShwcm9jZXNzICYmIHByb2Nlc3MuZW52LlRFU1RJTkcpKSB7XG4gICAgICBuZXh0KGVycik7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmZvcmNlTWFzdGVyS2V5QWNjZXNzKHJlcSwgcmVzLCBuZXh0KSB7XG4gIGlmICghcmVxLmF1dGguaXNNYXN0ZXIpIHtcbiAgICBjb25zdCBlcnJvciA9IGNyZWF0ZVNhbml0aXplZEh0dHBFcnJvcig0MDMsICd1bmF1dGhvcml6ZWQ6IG1hc3RlciBrZXkgaXMgcmVxdWlyZWQnLCByZXEuY29uZmlnKTtcbiAgICByZXMuc3RhdHVzKGVycm9yLnN0YXR1cyk7XG4gICAgcmVzLmVuZChge1wiZXJyb3JcIjpcIiR7ZXJyb3IubWVzc2FnZX1cIn1gKTtcbiAgICByZXR1cm47XG4gIH1cbiAgbmV4dCgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvbWlzZUVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MocmVxdWVzdCkge1xuICBpZiAoIXJlcXVlc3QuYXV0aC5pc01hc3Rlcikge1xuICAgIHRocm93IGNyZWF0ZVNhbml0aXplZEh0dHBFcnJvcig0MDMsICd1bmF1dGhvcml6ZWQ6IG1hc3RlciBrZXkgaXMgcmVxdWlyZWQnLCByZXF1ZXN0LmNvbmZpZyk7XG4gIH1cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhIHJlcXVlc3QgaXMgYW4gaW50ZXJuYWwgcmVxdWVzdCwgaS5lLiBvbmUgdGhhdCBvcmlnaW5hdGVzIGZyb20gdGhlIHNhbWUgaG9zdFxuICogd2l0aG91dCBwYXNzaW5nIHRocm91Z2ggYSBwcm94eSwgc3VjaCBhcyBhIENsb3VkIENvZGUgcmVxdWVzdCB0aGF0IGlzIHJvdXRlZCB2aWEgSFRUUCB3aGVuIHRoZVxuICogUGFyc2UgU2VydmVyIG9wdGlvbiBgZGlyZWN0QWNjZXNzYCBpcyBgZmFsc2VgLiBPbmx5IHRoZSByYXcgc29ja2V0IHBlZXIgYWRkcmVzcyBpcyBjb25zdWx0ZWQsXG4gKiBuZXZlciBgcmVxdWVzdC5pcGA6IHVuZGVyIGEgcGVybWlzc2l2ZSBgdHJ1c3RQcm94eWAgc2V0dGluZyBFeHByZXNzIHJlc29sdmVzIGByZXF1ZXN0LmlwYCBmcm9tXG4gKiB0aGUgY2xpZW50LXN1cHBsaWVkIGBYLUZvcndhcmRlZC1Gb3JgIGhlYWRlciwgc28gYSByZW1vdGUgY2xpZW50IGNvdWxkIG90aGVyd2lzZSBwb3NlIGFzIGFuXG4gKiBpbnRlcm5hbCByZXF1ZXN0LiBBIHJlcXVlc3QgdGhhdCBjYXJyaWVzIGFuIGBYLUZvcndhcmRlZC1Gb3JgIGhlYWRlciwgZXZlbiBhbiBlbXB0eSBvbmUsIGhhcyBiZWVuXG4gKiBmb3J3YXJkZWQgYnkgYSBwcm94eSBvciBjcmFmdGVkIGJ5IGEgY2xpZW50IGFuZCBpcyB0aGVyZWZvcmUgbmV2ZXIgaW50ZXJuYWwsIGV2ZW4gaWYgaXQgYXJyaXZlc1xuICogb3ZlciBhIGxvb3BiYWNrIHNvY2tldC5cbiAqIEBwYXJhbSB7T2JqZWN0fSByZXF1ZXN0IFRoZSByZXF1ZXN0IHRvIGV2YWx1YXRlLlxuICogQHJldHVybnMge0Jvb2xlYW59IFdoZXRoZXIgdGhlIHJlcXVlc3QgaXMgaW50ZXJuYWwuXG4gKi9cbmNvbnN0IGlzSW50ZXJuYWxSZXF1ZXN0ID0gcmVxdWVzdCA9PlxuICByZXF1ZXN0LnNvY2tldD8ucmVtb3RlQWRkcmVzcyA9PT0gJzEyNy4wLjAuMScgJiZcbiAgcmVxdWVzdC5oZWFkZXJzPy5bJ3gtZm9yd2FyZGVkLWZvciddID09PSB1bmRlZmluZWQ7XG5cbmV4cG9ydCBjb25zdCBhZGRSYXRlTGltaXQgPSAocm91dGUsIGNvbmZpZywgY2xvdWQpID0+IHtcbiAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uZmlnID0gQ29uZmlnLmdldChjb25maWcpO1xuICB9XG4gIGZvciAoY29uc3Qga2V5IGluIHJvdXRlKSB7XG4gICAgaWYgKCFSYXRlTGltaXRPcHRpb25zW2tleV0pIHtcbiAgICAgIHRocm93IGBJbnZhbGlkIHJhdGUgbGltaXQgb3B0aW9uIFwiJHtrZXl9XCJgO1xuICAgIH1cbiAgfVxuICBpZiAoIWNvbmZpZy5yYXRlTGltaXRzKSB7XG4gICAgY29uZmlnLnJhdGVMaW1pdHMgPSBbXTtcbiAgfVxuICBjb25zdCByZWRpc1N0b3JlID0ge1xuICAgIGNvbm5lY3Rpb25Qcm9taXNlOiBQcm9taXNlLnJlc29sdmUoKSxcbiAgICBzdG9yZTogbnVsbCxcbiAgfTtcbiAgaWYgKHJvdXRlLnJlZGlzVXJsKSB7XG4gICAgY29uc3QgbG9nID0gY29uZmlnPy5sb2dnZXJDb250cm9sbGVyIHx8IGRlZmF1bHRMb2dnZXI7XG4gICAgY29uc3QgY2xpZW50ID0gY3JlYXRlQ2xpZW50KHtcbiAgICAgIHVybDogcm91dGUucmVkaXNVcmwsXG4gICAgfSk7XG4gICAgY2xpZW50Lm9uKCdlcnJvcicsIGVyciA9PiB7IGxvZy5lcnJvcignTWlkZGxld2FyZXMgYWRkUmF0ZUxpbWl0IFJlZGlzIGNsaWVudCBlcnJvcicsIHsgZXJyb3I6IGVyciB9KSB9KTtcbiAgICBjbGllbnQub24oJ2Nvbm5lY3QnLCAoKSA9PiB7IH0pO1xuICAgIGNsaWVudC5vbigncmVjb25uZWN0aW5nJywgKCkgPT4geyB9KTtcbiAgICBjbGllbnQub24oJ3JlYWR5JywgKCkgPT4geyB9KTtcbiAgICByZWRpc1N0b3JlLmNvbm5lY3Rpb25Qcm9taXNlID0gYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKGNsaWVudC5pc09wZW4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgY2xpZW50LmNvbm5lY3QoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nLmVycm9yKGBDb3VsZCBub3QgY29ubmVjdCB0byByZWRpc1VSTCBpbiByYXRlIGxpbWl0OiAke2V9YCk7XG4gICAgICB9XG4gICAgfTtcbiAgICByZWRpc1N0b3JlLmNvbm5lY3Rpb25Qcm9taXNlKCk7XG4gICAgcmVkaXNTdG9yZS5zdG9yZSA9IG5ldyBSZWRpc1N0b3JlKHtcbiAgICAgIHNlbmRDb21tYW5kOiBhc3luYyAoLi4uYXJncykgPT4ge1xuICAgICAgICBhd2FpdCByZWRpc1N0b3JlLmNvbm5lY3Rpb25Qcm9taXNlKCk7XG4gICAgICAgIHJldHVybiBjbGllbnQuc2VuZENvbW1hbmQoYXJncyk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG4gIGNvbmZpZy5yYXRlTGltaXRzLnB1c2goe1xuICAgIHBhdGg6IHBhdGhUb1JlZ2V4cChyb3V0ZS5yZXF1ZXN0UGF0aCksXG4gICAgcmVxdWVzdENvdW50OiByb3V0ZS5yZXF1ZXN0Q291bnQsXG4gICAgcmVxdWVzdE1ldGhvZHM6IHJvdXRlLnJlcXVlc3RNZXRob2RzLFxuICAgIGluY2x1ZGVNYXN0ZXJLZXk6IHJvdXRlLmluY2x1ZGVNYXN0ZXJLZXksXG4gICAgaW5jbHVkZUludGVybmFsUmVxdWVzdHM6IHJvdXRlLmluY2x1ZGVJbnRlcm5hbFJlcXVlc3RzLFxuICAgIGVycm9yUmVzcG9uc2VNZXNzYWdlOiByb3V0ZS5lcnJvclJlc3BvbnNlTWVzc2FnZSB8fCBSYXRlTGltaXRPcHRpb25zLmVycm9yUmVzcG9uc2VNZXNzYWdlLmRlZmF1bHQsXG4gICAgaGFuZGxlcjogcmF0ZUxpbWl0KHtcbiAgICAgIHdpbmRvd01zOiByb3V0ZS5yZXF1ZXN0VGltZVdpbmRvdyxcbiAgICAgIG1heDogcm91dGUucmVxdWVzdENvdW50LFxuICAgICAgbWVzc2FnZTogcm91dGUuZXJyb3JSZXNwb25zZU1lc3NhZ2UgfHwgUmF0ZUxpbWl0T3B0aW9ucy5lcnJvclJlc3BvbnNlTWVzc2FnZS5kZWZhdWx0LFxuICAgICAgaGFuZGxlcjogKHJlcXVlc3QsIHJlc3BvbnNlLCBuZXh0LCBvcHRpb25zKSA9PiB7XG4gICAgICAgIHRocm93IHtcbiAgICAgICAgICBjb2RlOiBQYXJzZS5FcnJvci5DT05ORUNUSU9OX0ZBSUxFRCxcbiAgICAgICAgICBtZXNzYWdlOiBvcHRpb25zLm1lc3NhZ2UsXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgc2tpcDogcmVxdWVzdCA9PiB7XG4gICAgICAgIGlmICghcm91dGUuaW5jbHVkZUludGVybmFsUmVxdWVzdHMgJiYgaXNJbnRlcm5hbFJlcXVlc3QocmVxdWVzdCkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm91dGUuaW5jbHVkZU1hc3RlcktleSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm91dGUucmVxdWVzdE1ldGhvZHMpIHtcbiAgICAgICAgICBjb25zdCBtZXRob2RzVG9DaGVjayA9IG5ldyBTZXQoW3JlcXVlc3QubWV0aG9kXSk7XG4gICAgICAgICAgaWYgKHJlcXVlc3QuX2JhdGNoT3JpZ2luYWxNZXRob2QpIHtcbiAgICAgICAgICAgIG1ldGhvZHNUb0NoZWNrLmFkZChyZXF1ZXN0Ll9iYXRjaE9yaWdpbmFsTWV0aG9kKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocm91dGUucmVxdWVzdE1ldGhvZHMpKSB7XG4gICAgICAgICAgICBpZiAoIXJvdXRlLnJlcXVlc3RNZXRob2RzLnNvbWUobSA9PiBtZXRob2RzVG9DaGVjay5oYXMobSkpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByZWdFeHAgPSBuZXcgUmVnRXhwKHJvdXRlLnJlcXVlc3RNZXRob2RzKTtcbiAgICAgICAgICAgIGlmICghWy4uLm1ldGhvZHNUb0NoZWNrXS5zb21lKG0gPT4gcmVnRXhwLnRlc3QobSkpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVxdWVzdC5hdXRoPy5pc01hc3RlcjtcbiAgICAgIH0sXG4gICAgICBrZXlHZW5lcmF0b3I6IGFzeW5jIHJlcXVlc3QgPT4ge1xuICAgICAgICBpZiAocm91dGUuem9uZSA9PT0gUGFyc2UuU2VydmVyLlJhdGVMaW1pdFpvbmUuZ2xvYmFsKSB7XG4gICAgICAgICAgcmV0dXJuIHJlcXVlc3QuY29uZmlnLmFwcElkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRva2VuID0gcmVxdWVzdC5pbmZvLnNlc3Npb25Ub2tlbjtcbiAgICAgICAgaWYgKHJvdXRlLnpvbmUgPT09IFBhcnNlLlNlcnZlci5SYXRlTGltaXRab25lLnNlc3Npb24gJiYgdG9rZW4pIHtcbiAgICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvdXRlLnpvbmUgPT09IFBhcnNlLlNlcnZlci5SYXRlTGltaXRab25lLnVzZXIgJiYgdG9rZW4pIHtcbiAgICAgICAgICBpZiAoIXJlcXVlc3QuYXV0aCkge1xuICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBoYW5kbGVQYXJzZVNlc3Npb24ocmVxdWVzdCwgbnVsbCwgcmVzb2x2ZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVxdWVzdC5hdXRoPy51c2VyPy5pZCAmJiByb3V0ZS56b25lID09PSAndXNlcicpIHtcbiAgICAgICAgICAgIHJldHVybiByZXF1ZXN0LmF1dGgudXNlci5pZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcXVlc3QuY29uZmlnLmlwO1xuICAgICAgfSxcbiAgICAgIHN0b3JlOiByZWRpc1N0b3JlLnN0b3JlLFxuICAgIH0pLFxuICAgIGNsb3VkLFxuICB9KTtcbiAgQ29uZmlnLnB1dChjb25maWcpO1xufTtcblxuLyoqXG4gKiBEZWR1cGxpY2F0ZXMgYSByZXF1ZXN0IHRvIGVuc3VyZSBpZGVtcG90ZW5jeS4gRHVwbGljYXRlcyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgcmVxdWVzdCBJRFxuICogaW4gdGhlIHJlcXVlc3QgaGVhZGVyLiBJZiBhIHJlcXVlc3QgaGFzIG5vIHJlcXVlc3QgSUQsIGl0IGlzIGV4ZWN1dGVkIGFueXdheS5cbiAqIEBwYXJhbSB7Kn0gcmVxIFRoZSByZXF1ZXN0IHRvIGV2YWx1YXRlLlxuICogQHJldHVybnMgUHJvbWlzZTx7fT5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb21pc2VFbnN1cmVJZGVtcG90ZW5jeShyZXEpIHtcbiAgLy8gRW5hYmxlIGZlYXR1cmUgb25seSBmb3IgTW9uZ29EQlxuICBpZiAoXG4gICAgIShcbiAgICAgIHJlcS5jb25maWcuZGF0YWJhc2UuYWRhcHRlciBpbnN0YW5jZW9mIE1vbmdvU3RvcmFnZUFkYXB0ZXIgfHxcbiAgICAgIHJlcS5jb25maWcuZGF0YWJhc2UuYWRhcHRlciBpbnN0YW5jZW9mIFBvc3RncmVzU3RvcmFnZUFkYXB0ZXJcbiAgICApXG4gICkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuICAvLyBHZXQgcGFyYW1ldGVyc1xuICBjb25zdCBjb25maWcgPSByZXEuY29uZmlnO1xuICBjb25zdCByZXF1ZXN0SWQgPSAoKHJlcSB8fCB7fSkuaGVhZGVycyB8fCB7fSlbJ3gtcGFyc2UtcmVxdWVzdC1pZCddO1xuICBjb25zdCB7IHBhdGhzLCB0dGwgfSA9IGNvbmZpZy5pZGVtcG90ZW5jeU9wdGlvbnM7XG4gIGlmICghcmVxdWVzdElkIHx8ICFjb25maWcuaWRlbXBvdGVuY3lPcHRpb25zKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG4gIC8vIFJlcXVlc3QgcGF0aCBtYXkgY29udGFpbiB0cmFpbGluZyBzbGFzaGVzLCBkZXBlbmRpbmcgb24gdGhlIG9yaWdpbmFsIHJlcXVlc3QsIHNvIHJlbW92ZVxuICAvLyBsZWFkaW5nIGFuZCB0cmFpbGluZyBzbGFzaGVzIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHNwZWNpZnkgcGF0aHMgaW4gdGhlIGNvbmZpZ3VyYXRpb25cbiAgY29uc3QgcmVxUGF0aCA9IHJlcS5wYXRoLnJlcGxhY2UoL15cXC98XFwvJC8sICcnKTtcbiAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgaWRlbXBvdGVuY3kgaXMgZW5hYmxlZCBmb3IgY3VycmVudCByZXF1ZXN0IHBhdGhcbiAgbGV0IG1hdGNoID0gZmFsc2U7XG4gIGZvciAoY29uc3QgcGF0aCBvZiBwYXRocykge1xuICAgIC8vIEFzc3VtZSBvbmUgd2FudHMgYSBwYXRoIHRvIGFsd2F5cyBtYXRjaCBmcm9tIHRoZSBiZWdpbm5pbmcgdG8gcHJldmVudCBhbnkgbWlzdGFrZXNcbiAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAocGF0aC5jaGFyQXQoMCkgPT09ICdeJyA/IHBhdGggOiAnXicgKyBwYXRoKTtcbiAgICBpZiAocmVxUGF0aC5tYXRjaChyZWdleCkpIHtcbiAgICAgIG1hdGNoID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoIW1hdGNoKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG4gIC8vIFRyeSB0byBzdG9yZSByZXF1ZXN0XG4gIGNvbnN0IGV4cGlyeURhdGUgPSBuZXcgRGF0ZShuZXcgRGF0ZSgpLnNldFNlY29uZHMobmV3IERhdGUoKS5nZXRTZWNvbmRzKCkgKyB0dGwpKTtcbiAgcmV0dXJuIHJlc3RcbiAgICAuY3JlYXRlKGNvbmZpZywgYXV0aC5tYXN0ZXIoY29uZmlnKSwgJ19JZGVtcG90ZW5jeScsIHtcbiAgICAgIHJlcUlkOiByZXF1ZXN0SWQsXG4gICAgICBleHBpcmU6IFBhcnNlLl9lbmNvZGUoZXhwaXJ5RGF0ZSksXG4gICAgfSlcbiAgICAuY2F0Y2goZSA9PiB7XG4gICAgICBpZiAoZS5jb2RlID09IFBhcnNlLkVycm9yLkRVUExJQ0FURV9WQUxVRSkge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuRFVQTElDQVRFX1JFUVVFU1QsICdEdXBsaWNhdGUgcmVxdWVzdCcpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gaW52YWxpZFJlcXVlc3QocmVxLCByZXMpIHtcbiAgcmVzLnN0YXR1cyg0MDMpO1xuICByZXMuZW5kKCd7XCJlcnJvclwiOlwidW5hdXRob3JpemVkXCJ9Jyk7XG59XG5cbmZ1bmN0aW9uIG1hbGZvcm1lZENvbnRleHQocmVxLCByZXMpIHtcbiAgcmVzLnN0YXR1cyg0MDApO1xuICByZXMuanNvbih7IGNvZGU6IFBhcnNlLkVycm9yLklOVkFMSURfSlNPTiwgZXJyb3I6ICdJbnZhbGlkIG9iamVjdCBmb3IgY29udGV4dC4nIH0pO1xufVxuXG4vKipcbiAqIEV4cHJlc3MgNCBhbGxvd2VkIGEgZG91YmxlIGZvcndhcmQgc2xhc2ggYmV0d2VlbiBhIHJvdXRlIGFuZCByb3V0ZXIuIEFsdGhvdWdoXG4gKiB0aGlzIHNob3VsZCBiZSBjb25zaWRlcmVkIGFuIGFudGktcGF0dGVybiwgd2UgbmVlZCB0byBzdXBwb3J0IGl0IGZvciBiYWNrd2FyZHNcbiAqIGNvbXBhdGliaWxpdHkuXG4gKlxuICogVGVjaG5pY2FsbHkgdmFsaWQgVVJMIHdpdGggZG91YmxlIGZvcm93YXJkIHNsYXNoOlxuICogaHR0cDovL2xvY2FsaG9zdDoxMzM3L3BhcnNlLy9mdW5jdGlvbnMvdGVzdEZ1bmN0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbGxvd0RvdWJsZUZvcndhcmRTbGFzaChyZXEsIHJlcywgbmV4dCkge1xuICByZXEudXJsID0gcmVxLnVybC5zdGFydHNXaXRoKCcvLycpID8gcmVxLnVybC5zdWJzdHJpbmcoMSkgOiByZXEudXJsO1xuICBuZXh0KCk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE1BQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLEtBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLEtBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLE9BQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFLLE9BQUEsR0FBQU4sc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFNLEtBQUEsR0FBQVAsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFPLG9CQUFBLEdBQUFSLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBUSx1QkFBQSxHQUFBVCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVMsaUJBQUEsR0FBQVYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFVLFlBQUEsR0FBQVYsT0FBQTtBQUNBLElBQUFXLGFBQUEsR0FBQVgsT0FBQTtBQUNBLElBQUFZLGVBQUEsR0FBQWIsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFhLE1BQUEsR0FBQWIsT0FBQTtBQUNBLElBQUFjLElBQUEsR0FBQWQsT0FBQTtBQUNBLElB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
|
|
849
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY2FjaGUiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9VdGlscyIsIl9ub2RlIiwiX0F1dGgiLCJfQ29uZmlnIiwiX2xvZ2dlciIsIl9yZXN0IiwiX01vbmdvU3RvcmFnZUFkYXB0ZXIiLCJfUG9zdGdyZXNTdG9yYWdlQWRhcHRlciIsIl9leHByZXNzUmF0ZUxpbWl0IiwiX0RlZmluaXRpb25zIiwiX3BhdGhUb1JlZ2V4cCIsIl9yYXRlTGltaXRSZWRpcyIsIl9yZWRpcyIsIl9uZXQiLCJfRXJyb3IiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJERUZBVUxUX0FMTE9XRURfSEVBREVSUyIsImV4cG9ydHMiLCJnZXRNb3VudEZvclJlcXVlc3QiLCJyZXEiLCJtb3VudFBhdGhMZW5ndGgiLCJvcmlnaW5hbFVybCIsImxlbmd0aCIsInVybCIsIm1vdW50UGF0aCIsInNsaWNlIiwicHJvdG9jb2wiLCJnZXQiLCJnZXRCbG9ja0xpc3QiLCJpcFJhbmdlTGlzdCIsInN0b3JlIiwiYmxvY2tMaXN0IiwiQmxvY2tMaXN0IiwiZm9yRWFjaCIsImZ1bGxJcCIsInNldCIsImlwIiwibWFzayIsInNwbGl0IiwiYWRkQWRkcmVzcyIsImlzSVB2NCIsImFkZFN1Ym5ldCIsIk51bWJlciIsImNoZWNrSXAiLCJpbmNvbWluZ0lwSXNWNCIsInJlc3VsdCIsImNoZWNrIiwiaW5jbHVkZXMiLCJoYW5kbGVQYXJzZUhlYWRlcnMiLCJyZXMiLCJuZXh0IiwibW91bnQiLCJjb250ZXh0IiwiSlNPTiIsInBhcnNlIiwiT2JqZWN0IiwicHJvdG90eXBlIiwidG9TdHJpbmciLCJjYWxsIiwibWFsZm9ybWVkQ29udGV4dCIsImluZm8iLCJhcHBJZCIsInNlc3Npb25Ub2tlbiIsIm1hc3RlcktleSIsIm1haW50ZW5hbmNlS2V5IiwiaW5zdGFsbGF0aW9uSWQiLCJjbGllbnRLZXkiLCJqYXZhc2NyaXB0S2V5IiwiZG90TmV0S2V5IiwicmVzdEFQSUtleSIsImJhc2ljQXV0aCIsImh0dHBBdXRoIiwiYmFzaWNBdXRoQXBwSWQiLCJBcHBDYWNoZSIsImJvZHkiLCJfbm9Cb2R5IiwiZmlsZVZpYUpTT04iLCJCdWZmZXIiLCJpc0J1ZmZlciIsImludmFsaWRSZXF1ZXN0IiwiX1Jldm9jYWJsZVNlc3Npb24iLCJfQXBwbGljYXRpb25JZCIsIl9KYXZhU2NyaXB0S2V5IiwiX0NsaWVudFZlcnNpb24iLCJfSW5zdGFsbGF0aW9uSWQiLCJfU2Vzc2lvblRva2VuIiwiX01hc3RlcktleSIsIl9jb250ZXh0IiwiVXRpbHMiLCJpc09iamVjdCIsIl9Db250ZW50VHlwZSIsImhlYWRlcnMiLCJiYXNlNjQiLCJmaWxlRGF0YSIsImZyb20iLCJjbGllbnRJcCIsImdldENsaWVudElwIiwiY29uZmlnIiwiQ29uZmlnIiwic3RhdGUiLCJzdGF0dXMiLCJqc29uIiwiY29kZSIsIlBhcnNlIiwiRXJyb3IiLCJJTlRFUk5BTF9TRVJWRVJfRVJST1IiLCJlcnJvciIsImxvYWRLZXlzIiwiYXBwIiwiYXV0aCIsImlzTWFzdGVyIiwiaXNNYWludGVuYW5jZSIsInJlc29sdmVkIiwicmVzb2x2ZUtleUF1dGgiLCJrZXlWYWx1ZSIsIm1haW50ZW5hbmNlS2V5VmFsdWUiLCJoYW5kbGVSYXRlTGltaXQiLCJrZXlzIiwib25lS2V5Q29uZmlndXJlZCIsInNvbWUiLCJrZXkiLCJ1bmRlZmluZWQiLCJvbmVLZXlNYXRjaGVzIiwibWF0Y2hlc0V4YWN0Um91dGUiLCJwYXRoIiwidXNlckZyb21KV1QiLCJBdXRoIiwidXNlciIsInJhdGVMaW1pdHMiLCJQcm9taXNlIiwiYWxsIiwibWFwIiwibGltaXQiLCJwYXRoRXhwIiwicmVnZXhwIiwidGVzdCIsIl9ncmFwaFFMUGF0aCIsImhhbmRsZXIiLCJlcnIiLCJDT05ORUNUSU9OX0ZBSUxFRCIsImxvZ2dlckNvbnRyb2xsZXIiLCJtZXNzYWdlIiwiaGFuZGxlUGFyc2VTZXNzaW9uIiwibWV0aG9kIiwicmVxdWVzdEF1dGgiLCJpbmRleE9mIiwiZ2V0QXV0aEZvckxlZ2FjeVNlc3Npb25Ub2tlbiIsImdldEF1dGhGb3JTZXNzaW9uVG9rZW4iLCJVTktOT1dOX0VSUk9SIiwiYXV0aG9yaXphdGlvbiIsImhlYWRlciIsImF1dGhQcmVmaXgiLCJtYXRjaCIsInRvTG93ZXJDYXNlIiwiZW5jb2RlZEF1dGgiLCJzdWJzdHJpbmciLCJjcmVkZW50aWFscyIsImRlY29kZUJhc2U2NCIsImpzS2V5UHJlZml4IiwibWF0Y2hLZXkiLCJzdHIiLCJhbGxvd0Nyb3NzRG9tYWluIiwiYWxsb3dIZWFkZXJzIiwiam9pbiIsImJhc2VPcmlnaW5zIiwiYWxsb3dPcmlnaW4iLCJyZXF1ZXN0T3JpZ2luIiwib3JpZ2luIiwiYWxsb3dPcmlnaW5zIiwic2VuZFN0YXR1cyIsImFsbG93TWV0aG9kT3ZlcnJpZGUiLCJfbWV0aG9kIiwib3JpZ2luYWxNZXRob2QiLCJ0b1VwcGVyQ2FzZSIsIm1haW50ZW5hbmNlS2V5SXBzIiwibWFpbnRlbmFuY2VLZXlJcHNTdG9yZSIsImxvZyIsImRlZmF1bHRMb2dnZXIiLCJsb2FkTWFzdGVyS2V5IiwibWFzdGVyS2V5SXBzIiwibWFzdGVyS2V5SXBzU3RvcmUiLCJyZWFkT25seU1hc3RlcktleSIsInJlYWRPbmx5TWFzdGVyS2V5SXBzIiwicmVhZE9ubHlNYXN0ZXJLZXlJcHNTdG9yZSIsImlzUmVhZE9ubHkiLCJoYW5kbGVQYXJzZUF1dGgiLCJoYW5kbGVQYXJzZUhlYWx0aCIsIm9wdGlvbnMiLCJub3JtYWxpemVSb3V0ZUFsbG93TGlzdFBhdGgiLCJub3JtYWxpemVkIiwiVVJMIiwicGF0aG5hbWUiLCJzdGFydHNXaXRoIiwiZW5kc1dpdGgiLCJxdWVyeUluZGV4IiwiZXhhY3RSb3V0ZVJlZ2V4cENhY2hlIiwiY3JlYXRlIiwicm91dGUiLCJwYXRoVG9SZWdleHAiLCJpc1JvdXRlQWxsb3dlZCIsInJvdXRlQWxsb3dMaXN0IiwicmVnZXhlcyIsIl9yb3V0ZUFsbG93TGlzdFJlZ2V4IiwicmVnZXgiLCJlbmZvcmNlUm91dGVBbGxvd0xpc3QiLCJjcmVhdGVTYW5pdGl6ZWRFcnJvciIsIk9QRVJBVElPTl9GT1JCSURERU4iLCJoYW5kbGVQYXJzZUVycm9ycyIsImVuYWJsZUV4cHJlc3NFcnJvckhhbmRsZXIiLCJzaWdudXBVc2VybmFtZVRha2VuTGV2ZWwiLCJsb2dMZXZlbHMiLCJzaWdudXBVc2VybmFtZVRha2VuIiwiaHR0cFN0YXR1cyIsIk9CSkVDVF9OT1RfRk9VTkQiLCJVU0VSTkFNRV9UQUtFTiIsImxvZ2dlck1ldGhvZCIsImJpbmQiLCJwcm9jZXNzIiwiZW52IiwiVEVTVElORyIsInN0YWNrIiwiZW5mb3JjZU1hc3RlcktleUFjY2VzcyIsImNyZWF0ZVNhbml0aXplZEh0dHBFcnJvciIsImVuZCIsInByb21pc2VFbmZvcmNlTWFzdGVyS2V5QWNjZXNzIiwicmVxdWVzdCIsInJlc29sdmUiLCJpc0ludGVybmFsUmVxdWVzdCIsInNvY2tldCIsInJlbW90ZUFkZHJlc3MiLCJhZGRSYXRlTGltaXQiLCJjbG91ZCIsIlJhdGVMaW1pdE9wdGlvbnMiLCJyZWRpc1N0b3JlIiwiY29ubmVjdGlvblByb21pc2UiLCJyZWRpc1VybCIsImNsaWVudCIsImNyZWF0ZUNsaWVudCIsIm9uIiwiaXNPcGVuIiwiY29ubmVjdCIsIlJlZGlzU3RvcmUiLCJzZW5kQ29tbWFuZCIsImFyZ3MiLCJwdXNoIiwicmVxdWVzdFBhdGgiLCJyZXF1ZXN0Q291bnQiLCJyZXF1ZXN0TWV0aG9kcyIsImluY2x1ZGVNYXN0ZXJLZXkiLCJpbmNsdWRlSW50ZXJuYWxSZXF1ZXN0cyIsImVycm9yUmVzcG9uc2VNZXNzYWdlIiwicmF0ZUxpbWl0Iiwid2luZG93TXMiLCJyZXF1ZXN0VGltZVdpbmRvdyIsIm1heCIsInJlc3BvbnNlIiwic2tpcCIsIm1ldGhvZHNUb0NoZWNrIiwiU2V0IiwiX2JhdGNoT3JpZ2luYWxNZXRob2QiLCJhZGQiLCJBcnJheSIsImlzQXJyYXkiLCJtIiwiaGFzIiwicmVnRXhwIiwiUmVnRXhwIiwia2V5R2VuZXJhdG9yIiwiem9uZSIsIlNlcnZlciIsIlJhdGVMaW1pdFpvbmUiLCJnbG9iYWwiLCJ0b2tlbiIsInNlc3Npb24iLCJpZCIsInB1dCIsInByb21pc2VFbnN1cmVJZGVtcG90ZW5jeSIsImRhdGFiYXNlIiwiYWRhcHRlciIsIk1vbmdvU3RvcmFnZUFkYXB0ZXIiLCJQb3N0Z3Jlc1N0b3JhZ2VBZGFwdGVyIiwicmVxdWVzdElkIiwicGF0aHMiLCJ0dGwiLCJpZGVtcG90ZW5jeU9wdGlvbnMiLCJyZXFQYXRoIiwicmVwbGFjZSIsImNoYXJBdCIsImV4cGlyeURhdGUiLCJEYXRlIiwic2V0U2Vjb25kcyIsImdldFNlY29uZHMiLCJyZXN0IiwibWFzdGVyIiwicmVxSWQiLCJleHBpcmUiLCJfZW5jb2RlIiwiY2F0Y2giLCJEVVBMSUNBVEVfVkFMVUUiLCJEVVBMSUNBVEVfUkVRVUVTVCIsIklOVkFMSURfSlNPTiIsImFsbG93RG91YmxlRm9yd2FyZFNsYXNoIl0sInNvdXJjZXMiOlsiLi4vc3JjL21pZGRsZXdhcmVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBBcHBDYWNoZSBmcm9tICcuL2NhY2hlJztcbmltcG9ydCBVdGlscyBmcm9tICcuL1V0aWxzJztcbmltcG9ydCBQYXJzZSBmcm9tICdwYXJzZS9ub2RlJztcbmltcG9ydCBhdXRoIGZyb20gJy4vQXV0aCc7XG5pbXBvcnQgQ29uZmlnIGZyb20gJy4vQ29uZmlnJztcbmltcG9ydCBkZWZhdWx0TG9nZ2VyIGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCByZXN0IGZyb20gJy4vcmVzdCc7XG5pbXBvcnQgTW9uZ29TdG9yYWdlQWRhcHRlciBmcm9tICcuL0FkYXB0ZXJzL1N0b3JhZ2UvTW9uZ28vTW9uZ29TdG9yYWdlQWRhcHRlcic7XG5pbXBvcnQgUG9zdGdyZXNTdG9yYWdlQWRhcHRlciBmcm9tICcuL0FkYXB0ZXJzL1N0b3JhZ2UvUG9zdGdyZXMvUG9zdGdyZXNTdG9yYWdlQWRhcHRlcic7XG5pbXBvcnQgcmF0ZUxpbWl0IGZyb20gJ2V4cHJlc3MtcmF0ZS1saW1pdCc7XG5pbXBvcnQgeyBSYXRlTGltaXRPcHRpb25zIH0gZnJvbSAnLi9PcHRpb25zL0RlZmluaXRpb25zJztcbmltcG9ydCB7IHBhdGhUb1JlZ2V4cCB9IGZyb20gJ3BhdGgtdG8tcmVnZXhwJztcbmltcG9ydCBSZWRpc1N0b3JlIGZyb20gJ3JhdGUtbGltaXQtcmVkaXMnO1xuaW1wb3J0IHsgY3JlYXRlQ2xpZW50IH0gZnJvbSAncmVkaXMnO1xuaW1wb3J0IHsgQmxvY2tMaXN0LCBpc0lQdjQgfSBmcm9tICduZXQnO1xuaW1wb3J0IHsgY3JlYXRlU2FuaXRpemVkSHR0cEVycm9yLCBjcmVhdGVTYW5pdGl6ZWRFcnJvciB9IGZyb20gJy4vRXJyb3InO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9BTExPV0VEX0hFQURFUlMgPVxuICAnWC1QYXJzZS1NYXN0ZXItS2V5LCBYLVBhcnNlLVJFU1QtQVBJLUtleSwgWC1QYXJzZS1KYXZhc2NyaXB0LUtleSwgWC1QYXJzZS1BcHBsaWNhdGlvbi1JZCwgWC1QYXJzZS1DbGllbnQtVmVyc2lvbiwgWC1QYXJzZS1TZXNzaW9uLVRva2VuLCBYLVJlcXVlc3RlZC1XaXRoLCBYLVBhcnNlLVJldm9jYWJsZS1TZXNzaW9uLCBYLVBhcnNlLVJlcXVlc3QtSWQsIENvbnRlbnQtVHlwZSwgUHJhZ21hLCBDYWNoZS1Db250cm9sJztcblxuY29uc3QgZ2V0TW91bnRGb3JSZXF1ZXN0ID0gZnVuY3Rpb24gKHJlcSkge1xuICBjb25zdCBtb3VudFBhdGhMZW5ndGggPSByZXEub3JpZ2luYWxVcmwubGVuZ3RoIC0gcmVxLnVybC5sZW5ndGg7XG4gIGNvbnN0IG1vdW50UGF0aCA9IHJlcS5vcmlnaW5hbFVybC5zbGljZSgwLCBtb3VudFBhdGhMZW5ndGgpO1xuICByZXR1cm4gcmVxLnByb3RvY29sICsgJzovLycgKyByZXEuZ2V0KCdob3N0JykgKyBtb3VudFBhdGg7XG59O1xuXG5jb25zdCBnZXRCbG9ja0xpc3QgPSAoaXBSYW5nZUxpc3QsIHN0b3JlKSA9PiB7XG4gIGlmIChzdG9yZS5nZXQoJ2Jsb2NrTGlzdCcpKSB7IHJldHVybiBzdG9yZS5nZXQoJ2Jsb2NrTGlzdCcpOyB9XG4gIGNvbnN0IGJsb2NrTGlzdCA9IG5ldyBCbG9ja0xpc3QoKTtcbiAgaXBSYW5nZUxpc3QuZm9yRWFjaChmdWxsSXAgPT4ge1xuICAgIGlmIChmdWxsSXAgPT09ICc6Oi8wJyB8fCBmdWxsSXAgPT09ICc6OicgfHwgZnVsbElwID09PSAnOjowJykge1xuICAgICAgc3RvcmUuc2V0KCdhbGxvd0FsbElwdjYnLCB0cnVlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGZ1bGxJcCA9PT0gJzAuMC4wLjAvMCcgfHwgZnVsbElwID09PSAnMC4wLjAuMCcpIHtcbiAgICAgIHN0b3JlLnNldCgnYWxsb3dBbGxJcHY0JywgdHJ1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IFtpcCwgbWFza10gPSBmdWxsSXAuc3BsaXQoJy8nKTtcbiAgICBpZiAoIW1hc2spIHtcbiAgICAgIGJsb2NrTGlzdC5hZGRBZGRyZXNzKGlwLCBpc0lQdjQoaXApID8gJ2lwdjQnIDogJ2lwdjYnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYmxvY2tMaXN0LmFkZFN1Ym5ldChpcCwgTnVtYmVyKG1hc2spLCBpc0lQdjQoaXApID8gJ2lwdjQnIDogJ2lwdjYnKTtcbiAgICB9XG4gIH0pO1xuICBzdG9yZS5zZXQoJ2Jsb2NrTGlzdCcsIGJsb2NrTGlzdCk7XG4gIHJldHVybiBibG9ja0xpc3Q7XG59O1xuXG5leHBvcnQgY29uc3QgY2hlY2tJcCA9IChpcCwgaXBSYW5nZUxpc3QsIHN0b3JlKSA9PiB7XG4gIGNvbnN0IGluY29taW5nSXBJc1Y0ID0gaXNJUHY0KGlwKTtcbiAgY29uc3QgYmxvY2tMaXN0ID0gZ2V0QmxvY2tMaXN0KGlwUmFuZ2VMaXN0LCBzdG9yZSk7XG5cbiAgaWYgKHN0b3JlLmdldChpcCkpIHsgcmV0dXJuIHRydWU7IH1cbiAgaWYgKHN0b3JlLmdldCgnYWxsb3dBbGxJcHY0JykgJiYgaW5jb21pbmdJcElzVjQpIHsgcmV0dXJuIHRydWU7IH1cbiAgaWYgKHN0b3JlLmdldCgnYWxsb3dBbGxJcHY2JykgJiYgIWluY29taW5nSXBJc1Y0KSB7IHJldHVybiB0cnVlOyB9XG4gIGNvbnN0IHJlc3VsdCA9IGJsb2NrTGlzdC5jaGVjayhpcCwgaW5jb21pbmdJcElzVjQgPyAnaXB2NCcgOiAnaXB2NicpO1xuXG4gIC8vIElmIHRoZSBpcCBpcyBpbiB0aGUgbGlzdCwgd2Ugc3RvcmUgdGhlIHJlc3VsdCBpbiB0aGUgc3RvcmVcbiAgLy8gc28gd2UgaGF2ZSBhIG9wdGltaXplZCBwYXRoIGZvciB0aGUgbmV4dCByZXF1ZXN0XG4gIGlmIChpcFJhbmdlTGlzdC5pbmNsdWRlcyhpcCkgJiYgcmVzdWx0KSB7XG4gICAgc3RvcmUuc2V0KGlwLCByZXN1bHQpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyBDaGVja3MgdGhhdCB0aGUgcmVxdWVzdCBpcyBhdXRob3JpemVkIGZvciB0aGlzIGFwcCBhbmQgY2hlY2tzIHVzZXJcbi8vIGF1dGggdG9vLlxuLy8gVGhlIGJvZHlwYXJzZXIgc2hvdWxkIHJ1biBiZWZvcmUgdGhpcyBtaWRkbGV3YXJlLlxuLy8gQWRkcyBpbmZvIHRvIHRoZSByZXF1ZXN0OlxuLy8gcmVxLmNvbmZpZyAtIHRoZSBDb25maWcgZm9yIHRoaXMgYXBwXG4vLyByZXEuYXV0aCAtIHRoZSBBdXRoIGZvciB0aGlzIHJlcXVlc3RcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoYW5kbGVQYXJzZUhlYWRlcnMocmVxLCByZXMsIG5leHQpIHtcbiAgdmFyIG1vdW50ID0gZ2V0TW91bnRGb3JSZXF1ZXN0KHJlcSk7XG5cbiAgbGV0IGNvbnRleHQgPSB7fTtcbiAgaWYgKHJlcS5nZXQoJ1gtUGFyc2UtQ2xvdWQtQ29udGV4dCcpICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgY29udGV4dCA9IEpTT04ucGFyc2UocmVxLmdldCgnWC1QYXJzZS1DbG91ZC1Db250ZXh0JykpO1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjb250ZXh0KSAhPT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICAgICAgdGhyb3cgJ0NvbnRleHQgaXMgbm90IGFuIG9iamVjdCc7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbWFsZm9ybWVkQ29udGV4dChyZXEsIHJlcyk7XG4gICAgfVxuICB9XG4gIHZhciBpbmZvID0ge1xuICAgIGFwcElkOiByZXEuZ2V0KCdYLVBhcnNlLUFwcGxpY2F0aW9uLUlkJyksXG4gICAgc2Vzc2lvblRva2VuOiByZXEuZ2V0KCdYLVBhcnNlLVNlc3Npb24tVG9rZW4nKSxcbiAgICBtYXN0ZXJLZXk6IHJlcS5nZXQoJ1gtUGFyc2UtTWFzdGVyLUtleScpLFxuICAgIG1haW50ZW5hbmNlS2V5OiByZXEuZ2V0KCdYLVBhcnNlLU1haW50ZW5hbmNlLUtleScpLFxuICAgIGluc3RhbGxhdGlvbklkOiByZXEuZ2V0KCdYLVBhcnNlLUluc3RhbGxhdGlvbi1JZCcpLFxuICAgIGNsaWVudEtleTogcmVxLmdldCgnWC1QYXJzZS1DbGllbnQtS2V5JyksXG4gICAgamF2YXNjcmlwdEtleTogcmVxLmdldCgnWC1QYXJzZS1KYXZhc2NyaXB0LUtleScpLFxuICAgIGRvdE5ldEtleTogcmVxLmdldCgnWC1QYXJzZS1XaW5kb3dzLUtleScpLFxuICAgIHJlc3RBUElLZXk6IHJlcS5nZXQoJ1gtUGFyc2UtUkVTVC1BUEktS2V5JyksXG4gICAgY29udGV4dDogY29udGV4dCxcbiAgfTtcblxuICB2YXIgYmFzaWNBdXRoID0gaHR0cEF1dGgocmVxKTtcblxuICBpZiAoYmFzaWNBdXRoKSB7XG4gICAgdmFyIGJhc2ljQXV0aEFwcElkID0gYmFzaWNBdXRoLmFwcElkO1xuICAgIGlmIChBcHBDYWNoZS5nZXQoYmFzaWNBdXRoQXBwSWQpKSB7XG4gICAgICBpbmZvLmFwcElkID0gYmFzaWNBdXRoQXBwSWQ7XG4gICAgICBpbmZvLm1hc3RlcktleSA9IGJhc2ljQXV0aC5tYXN0ZXJLZXkgfHwgaW5mby5tYXN0ZXJLZXk7XG4gICAgICBpbmZvLmphdmFzY3JpcHRLZXkgPSBiYXNpY0F1dGguamF2YXNjcmlwdEtleSB8fCBpbmZvLmphdmFzY3JpcHRLZXk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHJlcS5ib2R5KSB7XG4gICAgLy8gVW5pdHkgU0RLIHNlbmRzIGEgX25vQm9keSBrZXkgd2hpY2ggbmVlZHMgdG8gYmUgcmVtb3ZlZC5cbiAgICAvLyBVbmNsZWFyIGF0IHRoaXMgcG9pbnQgaWYgYWN0aW9uIG5lZWRzIHRvIGJlIHRha2VuLlxuICAgIGRlbGV0ZSByZXEuYm9keS5fbm9Cb2R5O1xuICB9XG5cbiAgdmFyIGZpbGVWaWFKU09OID0gZmFsc2U7XG5cbiAgaWYgKCFpbmZvLmFwcElkIHx8ICFBcHBDYWNoZS5nZXQoaW5mby5hcHBJZCkpIHtcbiAgICAvLyBTZWUgaWYgd2UgY2FuIGZpbmQgdGhlIGFwcCBpZCBvbiB0aGUgYm9keS5cbiAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKHJlcS5ib2R5KSkge1xuICAgICAgLy8gVGhlIG9ubHkgY2hhbmNlIHRvIGZpbmQgdGhlIGFwcCBpZCBpcyBpZiB0aGlzIGlzIGEgZmlsZVxuICAgICAgLy8gdXBsb2FkIHRoYXQgYWN0dWFsbHkgaXMgYSBKU09OIGJvZHkuIFNvIHRyeSB0byBwYXJzZSBpdC5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXJzZS1jb21tdW5pdHkvcGFyc2Utc2VydmVyL2lzc3Vlcy82NTg5XG4gICAgICAvLyBJdCBpcyBhbHNvIHBvc3NpYmxlIHRoYXQgdGhlIGNsaWVudCBpcyB0cnlpbmcgdG8gdXBsb2FkIGEgZmlsZSBidXQgZm9yZ290XG4gICAgICAvLyB0byBwcm92aWRlIHgtcGFyc2UtYXBwLWlkIGluIGhlYWRlciBhbmQgcGFyc2UgYSBiaW5hcnkgZmlsZSB3aWxsIGZhaWxcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlcS5ib2R5ID0gSlNPTi5wYXJzZShyZXEuYm9keSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIGludmFsaWRSZXF1ZXN0KHJlcSwgcmVzKTtcbiAgICAgIH1cbiAgICAgIGZpbGVWaWFKU09OID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAocmVxLmJvZHkpIHtcbiAgICAgIGRlbGV0ZSByZXEuYm9keS5fUmV2b2NhYmxlU2Vzc2lvbjtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICByZXEuYm9keSAmJlxuICAgICAgcmVxLmJvZHkuX0FwcGxpY2F0aW9uSWQgJiZcbiAgICAgIEFwcENhY2hlLmdldChyZXEuYm9keS5fQXBwbGljYXRpb25JZCkgJiZcbiAgICAgICghaW5mby5tYXN0ZXJLZXkgfHwgQXBwQ2FjaGUuZ2V0KHJlcS5ib2R5Ll9BcHBsaWNhdGlvbklkKS5tYXN0ZXJLZXkgPT09IGluZm8ubWFzdGVyS2V5KVxuICAgICkge1xuICAgICAgaW5mby5hcHBJZCA9IHJlcS5ib2R5Ll9BcHBsaWNhdGlvbklkO1xuICAgICAgaW5mby5qYXZhc2NyaXB0S2V5ID0gcmVxLmJvZHkuX0phdmFTY3JpcHRLZXkgfHwgJyc7XG4gICAgICBkZWxldGUgcmVxLmJvZHkuX0FwcGxpY2F0aW9uSWQ7XG4gICAgICBkZWxldGUgcmVxLmJvZHkuX0phdmFTY3JpcHRLZXk7XG4gICAgICAvLyBUT0RPOiB0ZXN0IHRoYXQgdGhlIFJFU1QgQVBJIGZvcm1hdHMgZ2VuZXJhdGVkIGJ5IHRoZSBvdGhlclxuICAgICAgLy8gU0RLcyBhcmUgaGFuZGxlZCBva1xuICAgICAgZGVsZXRlIHJlcS5ib2R5Ll9DbGllbnRWZXJzaW9uO1xuICAgICAgaWYgKHJlcS5ib2R5Ll9JbnN0YWxsYXRpb25JZCkge1xuICAgICAgICBpZiAodHlwZW9mIHJlcS5ib2R5Ll9JbnN0YWxsYXRpb25JZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4gaW52YWxpZFJlcXVlc3QocmVxLCByZXMpO1xuICAgICAgICB9XG4gICAgICAgIGluZm8uaW5zdGFsbGF0aW9uSWQgPSByZXEuYm9keS5fSW5zdGFsbGF0aW9uSWQ7XG4gICAgICAgIGRlbGV0ZSByZXEuYm9keS5fSW5zdGFsbGF0aW9uSWQ7XG4gICAgICB9XG4gICAgICBpZiAocmVxLmJvZHkuX1Nlc3Npb25Ub2tlbikge1xuICAgICAgICBpZiAodHlwZW9mIHJlcS5ib2R5Ll9TZXNzaW9uVG9rZW4gIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuIGludmFsaWRSZXF1ZXN0KHJlcSwgcmVzKTtcbiAgICAgICAgfVxuICAgICAgICBpbmZvLnNlc3Npb25Ub2tlbiA9IHJlcS5ib2R5Ll9TZXNzaW9uVG9rZW47XG4gICAgICAgIGRlbGV0ZSByZXEuYm9keS5fU2Vzc2lvblRva2VuO1xuICAgICAgfVxuICAgICAgaWYgKHJlcS5ib2R5Ll9NYXN0ZXJLZXkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiByZXEuYm9keS5fTWFzdGVyS2V5ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJldHVybiBpbnZhbGlkUmVxdWVzdChyZXEsIHJlcyk7XG4gICAgICAgIH1cbiAgICAgICAgaW5mby5tYXN0ZXJLZXkgPSByZXEuYm9keS5fTWFzdGVyS2V5O1xuICAgICAgICBkZWxldGUgcmVxLmJvZHkuX01hc3RlcktleTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXEuYm9keS5fY29udGV4dCkge1xuICAgICAgICBpZiAoVXRpbHMuaXNPYmplY3QocmVxLmJvZHkuX2NvbnRleHQpKSB7XG4gICAgICAgICAgaW5mby5jb250ZXh0ID0gcmVxLmJvZHkuX2NvbnRleHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGluZm8uY29udGV4dCA9IEpTT04ucGFyc2UocmVxLmJvZHkuX2NvbnRleHQpO1xuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbmZvLmNvbnRleHQpICE9PSAnW29iamVjdCBPYmplY3RdJykge1xuICAgICAgICAgICAgICB0aHJvdyAnQ29udGV4dCBpcyBub3QgYW4gb2JqZWN0JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHJldHVybiBtYWxmb3JtZWRDb250ZXh0KHJlcSwgcmVzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlIHJlcS5ib2R5Ll9jb250ZXh0O1xuICAgICAgfVxuICAgICAgaWYgKHJlcS5ib2R5Ll9Db250ZW50VHlwZSkge1xuICAgICAgICBpZiAodHlwZW9mIHJlcS5ib2R5Ll9Db250ZW50VHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4gaW52YWxpZFJlcXVlc3QocmVxLCByZXMpO1xuICAgICAgICB9XG4gICAgICAgIHJlcS5oZWFkZXJzWydjb250ZW50LXR5cGUnXSA9IHJlcS5ib2R5Ll9Db250ZW50VHlwZTtcbiAgICAgICAgZGVsZXRlIHJlcS5ib2R5Ll9Db250ZW50VHlwZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGludmFsaWRSZXF1ZXN0KHJlcSwgcmVzKTtcbiAgICB9XG4gIH1cblxuICBpZiAoaW5mby5zZXNzaW9uVG9rZW4gJiYgdHlwZW9mIGluZm8uc2Vzc2lvblRva2VuICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBpbnZhbGlkUmVxdWVzdChyZXEsIHJlcyk7XG4gIH1cblxuICBpZiAoZmlsZVZpYUpTT04gJiYgcmVxLmJvZHkpIHtcbiAgICBpZiAocmVxLmJvZHkuYmFzZTY0ICYmIHR5cGVvZiByZXEuYm9keS5iYXNlNjQgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gaW52YWxpZFJlcXVlc3QocmVxLCByZXMpO1xuICAgIH1cbiAgICByZXEuZmlsZURhdGEgPSByZXEuYm9keS5maWxlRGF0YTtcbiAgICAvLyBXZSBuZWVkIHRvIHJlcG9wdWxhdGUgcmVxLmJvZHkgd2l0aCBhIGJ1ZmZlclxuICAgIHZhciBiYXNlNjQgPSByZXEuYm9keS5iYXNlNjQ7XG4gICAgcmVxLmJvZHkgPSBCdWZmZXIuZnJvbShiYXNlNjQsICdiYXNlNjQnKTtcbiAgfVxuXG4gIGNvbnN0IGNsaWVudElwID0gZ2V0Q2xpZW50SXAocmVxKTtcbiAgY29uc3QgY29uZmlnID0gcmVxLmNvbmZpZyB8fCBDb25maWcuZ2V0KGluZm8uYXBwSWQsIG1vdW50KTtcbiAgaWYgKGNvbmZpZy5zdGF0ZSAmJiBjb25maWcuc3RhdGUgIT09ICdvaycpIHtcbiAgICByZXMuc3RhdHVzKDUwMCk7XG4gICAgcmVzLmpzb24oe1xuICAgICAgY29kZTogUGFyc2UuRXJyb3IuSU5URVJOQUxfU0VSVkVSX0VSUk9SLFxuICAgICAgZXJyb3I6IGBJbnZhbGlkIHNlcnZlciBzdGF0ZTogJHtjb25maWcuc3RhdGV9YCxcbiAgICB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKCFyZXEuY29uZmlnKSB7XG4gICAgYXdhaXQgY29uZmlnLmxvYWRLZXlzKCk7XG4gIH1cblxuICBpbmZvLmFwcCA9IEFwcENhY2hlLmdldChpbmZvLmFwcElkKTtcbiAgcmVxLmNvbmZpZyA9IGNvbmZpZztcbiAgcmVxLmNvbmZpZy5oZWFkZXJzID0gcmVxLmhlYWRlcnMgfHwge307XG4gIHJlcS5jb25maWcuaXAgPSBjbGllbnRJcDtcbiAgcmVxLmluZm8gPSBpbmZvO1xuXG4gIC8vIFNraXAga2V5IGRldGVjdGlvbiBpZiBhbHJlYWR5IHJlc29sdmVkIGJ5IGhhbmRsZVBhcnNlQXV0aCAoaGVhZGVyLWJhc2VkKS5cbiAgLy8gT25seSByZXNvbHZlIGhlcmUgZm9yIGJvZHktYmFzZWQgX01hc3RlcktleSAoaW5mby5tYXN0ZXJLZXkgbWF5IGNvbWUgZnJvbSBib2R5KS5cbiAgaWYgKCFyZXEuYXV0aCB8fCAoIXJlcS5hdXRoLmlzTWFzdGVyICYmICFyZXEuYXV0aC5pc01haW50ZW5hbmNlKSkge1xuICAgIGNvbnN0IHJlc29sdmVkID0gYXdhaXQgcmVzb2x2ZUtleUF1dGgoe1xuICAgICAgY29uZmlnOiByZXEuY29uZmlnLFxuICAgICAga2V5VmFsdWU6IGluZm8ubWFzdGVyS2V5LFxuICAgICAgbWFpbnRlbmFuY2VLZXlWYWx1ZTogaW5mby5tYWludGVuYW5jZUtleSxcbiAgICAgIGluc3RhbGxhdGlvbklkOiBpbmZvLmluc3RhbGxhdGlvbklkLFxuICAgICAgY2xpZW50SXAsXG4gICAgfSk7XG4gICAgaWYgKHJlc29sdmVkKSB7XG4gICAgICByZXEuYXV0aCA9IHJlc29sdmVkO1xuICAgIH1cbiAgfVxuXG4gIGlmIChyZXEuYXV0aCAmJiAocmVxLmF1dGguaXNNYXN0ZXIgfHwgcmVxLmF1dGguaXNNYWludGVuYW5jZSkpIHtcbiAgICByZXR1cm4gaGFuZGxlUmF0ZUxpbWl0KHJlcSwgcmVzLCBuZXh0KTtcbiAgfVxuXG4gIC8vIENsaWVudCBrZXlzIGFyZSBub3QgcmVxdWlyZWQgaW4gcGFyc2Utc2VydmVyLCBidXQgaWYgYW55IGhhdmUgYmVlbiBjb25maWd1cmVkIGluIHRoZSBzZXJ2ZXIsIHZhbGlkYXRlIHRoZW1cbiAgLy8gIHRvIHByZXNlcnZlIG9yaWdpbmFsIGJlaGF2aW9yLlxuICBjb25zdCBrZXlzID0gWydjbGllbnRLZXknLCAnamF2YXNjcmlwdEtleScsICdkb3ROZXRLZXknLCAncmVzdEFQSUtleSddO1xuICBjb25zdCBvbmVLZXlDb25maWd1cmVkID0ga2V5cy5zb21lKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gcmVxLmNvbmZpZ1trZXldICE9PSB1bmRlZmluZWQ7XG4gIH0pO1xuICBjb25zdCBvbmVLZXlNYXRjaGVzID0ga2V5cy5zb21lKGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gcmVxLmNvbmZpZ1trZXldICE9PSB1bmRlZmluZWQgJiYgaW5mb1trZXldID09PSByZXEuY29uZmlnW2tleV07XG4gIH0pO1xuXG4gIGlmIChvbmVLZXlDb25maWd1cmVkICYmICFvbmVLZXlNYXRjaGVzKSB7XG4gICAgcmV0dXJuIGludmFsaWRSZXF1ZXN0KHJlcSwgcmVzKTtcbiAgfVxuXG4gIGlmIChtYXRjaGVzRXhhY3RSb3V0ZShyZXEucGF0aCwgJy9sb2dpbicpKSB7XG4gICAgZGVsZXRlIGluZm8uc2Vzc2lvblRva2VuO1xuICB9XG5cbiAgaWYgKHJlcS51c2VyRnJvbUpXVCkge1xuICAgIHJlcS5hdXRoID0gbmV3IGF1dGguQXV0aCh7XG4gICAgICBjb25maWc6IHJlcS5jb25maWcsXG4gICAgICBpbnN0YWxsYXRpb25JZDogaW5mby5pbnN0YWxsYXRpb25JZCxcbiAgICAgIGlzTWFzdGVyOiBmYWxzZSxcbiAgICAgIHVzZXI6IHJlcS51c2VyRnJvbUpXVCxcbiAgICB9KTtcbiAgICByZXR1cm4gaGFuZGxlUmF0ZUxpbWl0KHJlcSwgcmVzLCBuZXh0KTtcbiAgfVxuXG4gIGlmICghaW5mby5zZXNzaW9uVG9rZW4pIHtcbiAgICByZXEuYXV0aCA9IG5ldyBhdXRoLkF1dGgoe1xuICAgICAgY29uZmlnOiByZXEuY29uZmlnLFxuICAgICAgaW5zdGFsbGF0aW9uSWQ6IGluZm8uaW5zdGFsbGF0aW9uSWQsXG4gICAgICBpc01hc3RlcjogZmFsc2UsXG4gICAgfSk7XG4gIH1cbiAgaGFuZGxlUmF0ZUxpbWl0KHJlcSwgcmVzLCBuZXh0KTtcbn1cblxuY29uc3QgaGFuZGxlUmF0ZUxpbWl0ID0gYXN5bmMgKHJlcSwgcmVzLCBuZXh0KSA9PiB7XG4gIGNvbnN0IHJhdGVMaW1pdHMgPSByZXEuY29uZmlnLnJhdGVMaW1pdHMgfHwgW107XG4gIHRyeSB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICByYXRlTGltaXRzLm1hcChhc3luYyBsaW1pdCA9PiB7XG4gICAgICAgIGNvbnN0IHBhdGhFeHAgPSBsaW1pdC5wYXRoLnJlZ2V4cCB8fCBsaW1pdC5wYXRoO1xuICAgICAgICBpZiAocGF0aEV4cC50ZXN0KHJlcS5wYXRoKSB8fCAocmVxLl9ncmFwaFFMUGF0aCAmJiBwYXRoRXhwLnRlc3QocmVxLl9ncmFwaFFMUGF0aCkpKSB7XG4gICAgICAgICAgYXdhaXQgbGltaXQuaGFuZGxlcihyZXEsIHJlcywgZXJyID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgaWYgKGVyci5jb2RlID09PSBQYXJzZS5FcnJvci5DT05ORUNUSU9OX0ZBSUxFRCkge1xuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXEuY29uZmlnLmxvZ2dlckNvbnRyb2xsZXIuZXJyb3IoXG4gICAgICAgICAgICAgICAgJ0FuIHVua25vd24gZXJyb3Igb2NjdXJlZCB3aGVuIGF0dGVtcHRpbmcgdG8gYXBwbHkgdGhlIHJhdGUgbGltaXRlcjogJyxcbiAgICAgICAgICAgICAgICBlcnJcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJlcy5zdGF0dXMoNDI5KTtcbiAgICByZXMuanNvbih7IGNvZGU6IFBhcnNlLkVycm9yLkNPTk5FQ1RJT05fRkFJTEVELCBlcnJvcjogZXJyb3IubWVzc2FnZSB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgbmV4dCgpO1xufTtcblxuZXhwb3J0IGNvbnN0IGhhbmRsZVBhcnNlU2Vzc2lvbiA9IGFzeW5jIChyZXEsIHJlcywgbmV4dCkgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IGluZm8gPSByZXEuaW5mbztcbiAgICBpZiAocmVxLmF1dGggfHwgKG1hdGNoZXNFeGFjdFJvdXRlKHJlcS5wYXRoLCAnL3Nlc3Npb25zL21lJykgJiYgcmVxLm1ldGhvZCA9PT0gJ0dFVCcpKSB7XG4gICAgICBuZXh0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCByZXF1ZXN0QXV0aCA9IG51bGw7XG4gICAgaWYgKFxuICAgICAgaW5mby5zZXNzaW9uVG9rZW4gJiZcbiAgICAgIG1hdGNoZXNFeGFjdFJvdXRlKHJlcS5wYXRoLCAnL3VwZ3JhZGVUb1Jldm9jYWJsZVNlc3Npb24nKSAmJlxuICAgICAgaW5mby5zZXNzaW9uVG9rZW4uaW5kZXhPZigncjonKSAhPSAwXG4gICAgKSB7XG4gICAgICByZXF1ZXN0QXV0aCA9IGF3YWl0IGF1dGguZ2V0QXV0aEZvckxlZ2FjeVNlc3Npb25Ub2tlbih7XG4gICAgICAgIGNvbmZpZzogcmVxLmNvbmZpZyxcbiAgICAgICAgaW5zdGFsbGF0aW9uSWQ6IGluZm8uaW5zdGFsbGF0aW9uSWQsXG4gICAgICAgIHNlc3Npb25Ub2tlbjogaW5mby5zZXNzaW9uVG9rZW4sXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdEF1dGggPSBhd2FpdCBhdXRoLmdldEF1dGhGb3JTZXNzaW9uVG9rZW4oe1xuICAgICAgICBjb25maWc6IHJlcS5jb25maWcsXG4gICAgICAgIGluc3RhbGxhdGlvbklkOiBpbmZvLmluc3RhbGxhdGlvbklkLFxuICAgICAgICBzZXNzaW9uVG9rZW46IGluZm8uc2Vzc2lvblRva2VuLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJlcS5hdXRoID0gcmVxdWVzdEF1dGg7XG4gICAgbmV4dCgpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFBhcnNlLkVycm9yKSB7XG4gICAgICBuZXh0KGVycm9yKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gTG9nIGZ1bGwgZXJyb3IgZGV0YWlscyBpbnRlcm5hbGx5LCBidXQgZG9uJ3QgZXhwb3NlIHRvIGNsaWVudFxuICAgIHJlcS5jb25maWcubG9nZ2VyQ29udHJvbGxlci5lcnJvcignZXJyb3IgZ2V0dGluZyBhdXRoIGZvciBzZXNzaW9uVG9rZW4nLCBlcnJvcik7XG4gICAgbmV4dChuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuVU5LTk9XTl9FUlJPUiwgJ1Vua25vd24gZXJyb3InKSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGdldENsaWVudElwKHJlcSkge1xuICByZXR1cm4gcmVxLmlwO1xufVxuXG5mdW5jdGlvbiBodHRwQXV0aChyZXEpIHtcbiAgaWYgKCEocmVxLnJlcSB8fCByZXEpLmhlYWRlcnMuYXV0aG9yaXphdGlvbikgeyByZXR1cm47IH1cblxuICB2YXIgaGVhZGVyID0gKHJlcS5yZXEgfHwgcmVxKS5oZWFkZXJzLmF1dGhvcml6YXRpb247XG4gIHZhciBhcHBJZCwgbWFzdGVyS2V5LCBqYXZhc2NyaXB0S2V5O1xuXG4gIC8vIHBhcnNlIGhlYWRlclxuICB2YXIgYXV0aFByZWZpeCA9ICdiYXNpYyAnO1xuXG4gIHZhciBtYXRjaCA9IGhlYWRlci50b0xvd2VyQ2FzZSgpLmluZGV4T2YoYXV0aFByZWZpeCk7XG5cbiAgaWYgKG1hdGNoID09IDApIHtcbiAgICB2YXIgZW5jb2RlZEF1dGggPSBoZWFkZXIuc3Vic3RyaW5nKGF1dGhQcmVmaXgubGVuZ3RoLCBoZWFkZXIubGVuZ3RoKTtcbiAgICB2YXIgY3JlZGVudGlhbHMgPSBkZWNvZGVCYXNlNjQoZW5jb2RlZEF1dGgpLnNwbGl0KCc6Jyk7XG5cbiAgICBpZiAoY3JlZGVudGlhbHMubGVuZ3RoID09IDIpIHtcbiAgICAgIGFwcElkID0gY3JlZGVudGlhbHNbMF07XG4gICAgICB2YXIga2V5ID0gY3JlZGVudGlhbHNbMV07XG5cbiAgICAgIHZhciBqc0tleVByZWZpeCA9ICdqYXZhc2NyaXB0LWtleT0nO1xuXG4gICAgICB2YXIgbWF0Y2hLZXkgPSBrZXkuaW5kZXhPZihqc0tleVByZWZpeCk7XG4gICAgICBpZiAobWF0Y2hLZXkgPT0gMCkge1xuICAgICAgICBqYXZhc2NyaXB0S2V5ID0ga2V5LnN1YnN0cmluZyhqc0tleVByZWZpeC5sZW5ndGgsIGtleS5sZW5ndGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWFzdGVyS2V5ID0ga2V5O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7IGFwcElkOiBhcHBJZCwgbWFzdGVyS2V5OiBtYXN0ZXJLZXksIGphdmFzY3JpcHRLZXk6IGphdmFzY3JpcHRLZXkgfTtcbn1cblxuZnVuY3Rpb24gZGVjb2RlQmFzZTY0KHN0cikge1xuICByZXR1cm4gQnVmZmVyLmZyb20oc3RyLCAnYmFzZTY0JykudG9TdHJpbmcoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsbG93Q3Jvc3NEb21haW4oYXBwSWQpIHtcbiAgcmV0dXJuIChyZXEsIHJlcywgbmV4dCkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IENvbmZpZy5nZXQoYXBwSWQsIGdldE1vdW50Rm9yUmVxdWVzdChyZXEpKTtcbiAgICBsZXQgYWxsb3dIZWFkZXJzID0gREVGQVVMVF9BTExPV0VEX0hFQURFUlM7XG4gICAgaWYgKGNvbmZpZyAmJiBjb25maWcuYWxsb3dIZWFkZXJzKSB7XG4gICAgICBhbGxvd0hlYWRlcnMgKz0gYCwgJHtjb25maWcuYWxsb3dIZWFkZXJzLmpvaW4oJywgJyl9YDtcbiAgICB9XG5cbiAgICBjb25zdCBiYXNlT3JpZ2lucyA9XG4gICAgICB0eXBlb2YgY29uZmlnPy5hbGxvd09yaWdpbiA9PT0gJ3N0cmluZycgPyBbY29uZmlnLmFsbG93T3JpZ2luXSA6IGNvbmZpZz8uYWxsb3dPcmlnaW4gPz8gWycqJ107XG4gICAgY29uc3QgcmVxdWVzdE9yaWdpbiA9IHJlcS5oZWFkZXJzLm9yaWdpbjtcbiAgICBjb25zdCBhbGxvd09yaWdpbnMgPVxuICAgICAgcmVxdWVzdE9yaWdpbiAmJiBiYXNlT3JpZ2lucy5pbmNsdWRlcyhyZXF1ZXN0T3JpZ2luKSA/IHJlcXVlc3RPcmlnaW4gOiBiYXNlT3JpZ2luc1swXTtcbiAgICByZXMuaGVhZGVyKCdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nLCBhbGxvd09yaWdpbnMpO1xuICAgIHJlcy5oZWFkZXIoJ0FjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHMnLCAnR0VULFBVVCxQT1NULERFTEVURSxPUFRJT05TJyk7XG4gICAgcmVzLmhlYWRlcignQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycycsIGFsbG93SGVhZGVycyk7XG4gICAgcmVzLmhlYWRlcignQWNjZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnMnLCAnWC1QYXJzZS1Kb2ItU3RhdHVzLUlkLCBYLVBhcnNlLVB1c2gtU3RhdHVzLUlkJyk7XG4gICAgLy8gaW50ZXJjZXB0IE9QVElPTlMgbWV0aG9kXG4gICAgaWYgKCdPUFRJT05TJyA9PSByZXEubWV0aG9kKSB7XG4gICAgICByZXMuc2VuZFN0YXR1cygyMDApO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXh0KCk7XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYWxsb3dNZXRob2RPdmVycmlkZShyZXEsIHJlcywgbmV4dCkge1xuICBpZiAocmVxLm1ldGhvZCA9PT0gJ1BPU1QnICYmIHJlcS5ib2R5Py5fbWV0aG9kKSB7XG4gICAgaWYgKHR5cGVvZiByZXEuYm9keS5fbWV0aG9kID09PSAnc3RyaW5nJykge1xuICAgICAgcmVxLm9yaWdpbmFsTWV0aG9kID0gcmVxLm1ldGhvZDtcbiAgICAgIHJlcS5tZXRob2QgPSByZXEuYm9keS5fbWV0aG9kLnRvVXBwZXJDYXNlKCk7XG4gICAgfVxuICAgIGRlbGV0ZSByZXEuYm9keS5fbWV0aG9kO1xuICB9XG4gIG5leHQoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUtleUF1dGgoeyBjb25maWcsIGtleVZhbHVlLCBtYWludGVuYW5jZUtleVZhbHVlLCBpbnN0YWxsYXRpb25JZCwgY2xpZW50SXAgfSkge1xuICBpZiAobWFpbnRlbmFuY2VLZXlWYWx1ZSAmJiBtYWludGVuYW5jZUtleVZhbHVlID09PSBjb25maWcubWFpbnRlbmFuY2VLZXkpIHtcbiAgICBpZiAoY2hlY2tJcChjbGllbnRJcCwgY29uZmlnLm1haW50ZW5hbmNlS2V5SXBzIHx8IFtdLCBjb25maWcubWFpbnRlbmFuY2VLZXlJcHNTdG9yZSkpIHtcbiAgICAgIHJldHVybiBuZXcgYXV0aC5BdXRoKHsgY29uZmlnLCBpbnN0YWxsYXRpb25JZCwgaXNNYWludGVuYW5jZTogdHJ1ZSB9KTtcbiAgICB9XG4gICAgY29uc3QgbG9nID0gY29uZmlnLmxvZ2dlckNvbnRyb2xsZXIgfHwgZGVmYXVsdExvZ2dlcjtcbiAgICBsb2cuZXJyb3IoXG4gICAgICBgUmVxdWVzdCB1c2luZyBtYWludGVuYW5jZSBrZXkgcmVqZWN0ZWQgYXMgdGhlIHJlcXVlc3QgSVAgYWRkcmVzcyAnJHtjbGllbnRJcH0nIGlzIG5vdCBzZXQgaW4gUGFyc2UgU2VydmVyIG9wdGlvbiAnbWFpbnRlbmFuY2VLZXlJcHMnLmBcbiAgICApO1xuICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCk7XG4gICAgZXJyb3Iuc3RhdHVzID0gNDAzO1xuICAgIGVycm9yLm1lc3NhZ2UgPSAndW5hdXRob3JpemVkJztcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuICBjb25zdCBtYXN0ZXJLZXkgPSBhd2FpdCBjb25maWcubG9hZE1hc3RlcktleSgpO1xuICBpZiAoa2V5VmFsdWUgPT09IG1hc3RlcktleSkge1xuICAgIGlmIChjaGVja0lwKGNsaWVudElwLCBjb25maWcubWFzdGVyS2V5SXBzIHx8IFtdLCBjb25maWcubWFzdGVyS2V5SXBzU3RvcmUpKSB7XG4gICAgICByZXR1cm4gbmV3IGF1dGguQXV0aCh7IGNvbmZpZywgaW5zdGFsbGF0aW9uSWQsIGlzTWFzdGVyOiB0cnVlIH0pO1xuICAgIH1cbiAgICBjb25zdCBsb2cgPSBjb25maWcubG9nZ2VyQ29udHJvbGxlciB8fCBkZWZhdWx0TG9nZ2VyO1xuICAgIGxvZy5lcnJvcihcbiAgICAgIGBSZXF1ZXN0IHVzaW5nIG1hc3RlciBrZXkgcmVqZWN0ZWQgYXMgdGhlIHJlcXVlc3QgSVAgYWRkcmVzcyAnJHtjbGllbnRJcH0nIGlzIG5vdCBzZXQgaW4gUGFyc2UgU2VydmVyIG9wdGlvbiAnbWFzdGVyS2V5SXBzJy5gXG4gICAgKTtcbiAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcigpO1xuICAgIGVycm9yLnN0YXR1cyA9IDQwMztcbiAgICBlcnJvci5tZXNzYWdlID0gJ3VuYXV0aG9yaXplZCc7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbiAgaWYgKFxuICAgIGtleVZhbHVlICYmXG4gICAgdHlwZW9mIGNvbmZpZy5yZWFkT25seU1hc3RlcktleSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICBjb25maWcucmVhZE9ubHlNYXN0ZXJLZXkgJiZcbiAgICBrZXlWYWx1ZSA9PT0gY29uZmlnLnJlYWRPbmx5TWFzdGVyS2V5XG4gICkge1xuICAgIGlmIChjaGVja0lwKGNsaWVudElwLCBjb25maWcucmVhZE9ubHlNYXN0ZXJLZXlJcHMgfHwgW10sIGNvbmZpZy5yZWFkT25seU1hc3RlcktleUlwc1N0b3JlKSkge1xuICAgICAgcmV0dXJuIG5ldyBhdXRoLkF1dGgoeyBjb25maWcsIGluc3RhbGxhdGlvbklkLCBpc01hc3RlcjogdHJ1ZSwgaXNSZWFkT25seTogdHJ1ZSB9KTtcbiAgICB9XG4gICAgY29uc3QgbG9nID0gY29uZmlnLmxvZ2dlckNvbnRyb2xsZXIgfHwgZGVmYXVsdExvZ2dlcjtcbiAgICBsb2cuZXJyb3IoXG4gICAgICBgUmVxdWVzdCB1c2luZyByZWFkLW9ubHkgbWFzdGVyIGtleSByZWplY3RlZCBhcyB0aGUgcmVxdWVzdCBJUCBhZGRyZXNzICcke2NsaWVudElwfScgaXMgbm90IHNldCBpbiBQYXJzZSBTZXJ2ZXIgb3B0aW9uICdyZWFkT25seU1hc3RlcktleUlwcycuYFxuICAgICk7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoKTtcbiAgICBlcnJvci5zdGF0dXMgPSA0MDM7XG4gICAgZXJyb3IubWVzc2FnZSA9ICd1bmF1dGhvcml6ZWQnO1xuICAgIHRocm93IGVycm9yO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlUGFyc2VBdXRoKGFwcElkKSB7XG4gIHJldHVybiBhc3luYyAocmVxLCByZXMsIG5leHQpID0+IHtcbiAgICBjb25zdCBtb3VudCA9IGdldE1vdW50Rm9yUmVxdWVzdChyZXEpO1xuICAgIGNvbnN0IGNvbmZpZyA9IENvbmZpZy5nZXQoYXBwSWQsIG1vdW50KTtcbiAgICBpZiAoIWNvbmZpZykge1xuICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICB9XG4gICAgcmVxLmNvbmZpZyA9IGNvbmZpZztcbiAgICBjb25zdCBjbGllbnRJcCA9IGdldENsaWVudElwKHJlcSk7XG4gICAgcmVxLmNvbmZpZy5pcCA9IGNsaWVudElwO1xuICAgIGF3YWl0IGNvbmZpZy5sb2FkS2V5cygpO1xuICAgIGNvbnN0IHJlc29sdmVkID0gYXdhaXQgcmVzb2x2ZUtleUF1dGgoe1xuICAgICAgY29uZmlnLFxuICAgICAga2V5VmFsdWU6IHJlcS5nZXQoJ1gtUGFyc2UtTWFzdGVyLUtleScpIHx8IG51bGwsXG4gICAgICBtYWludGVuYW5jZUtleVZhbHVlOiByZXEuZ2V0KCdYLVBhcnNlLU1haW50ZW5hbmNlLUtleScpIHx8IG51bGwsXG4gICAgICBpbnN0YWxsYXRpb25JZDogcmVxLmdldCgnWC1QYXJzZS1JbnN0YWxsYXRpb24tSWQnKSB8fCAnY2xvdWQnLFxuICAgICAgY2xpZW50SXAsXG4gICAgfSk7XG4gICAgaWYgKHJlc29sdmVkKSB7XG4gICAgICByZXEuYXV0aCA9IHJlc29sdmVkO1xuICAgIH1cbiAgICByZXR1cm4gbmV4dCgpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlUGFyc2VIZWFsdGgob3B0aW9ucykge1xuICByZXR1cm4gKHJlcSwgcmVzKSA9PiB7XG4gICAgcmVzLnN0YXR1cyhvcHRpb25zLnN0YXRlID09PSAnb2snID8gMjAwIDogNTAzKTtcbiAgICBpZiAob3B0aW9ucy5zdGF0ZSA9PT0gJ3N0YXJ0aW5nJykge1xuICAgICAgcmVzLnNldCgnUmV0cnktQWZ0ZXInLCAxKTtcbiAgICB9XG4gICAgcmVzLmpzb24oe1xuICAgICAgc3RhdHVzOiBvcHRpb25zLnN0YXRlLFxuICAgIH0pO1xuICB9O1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVSb3V0ZUFsbG93TGlzdFBhdGgocGF0aCwgbW91bnQpIHtcbiAgbGV0IG5vcm1hbGl6ZWQgPSBwYXRoO1xuICBpZiAobW91bnQpIHtcbiAgICBjb25zdCBtb3VudFBhdGggPSBuZXcgVVJMKG1vdW50KS5wYXRobmFtZTtcbiAgICBpZiAobm9ybWFsaXplZC5zdGFydHNXaXRoKG1vdW50UGF0aCkpIHtcbiAgICAgIG5vcm1hbGl6ZWQgPSBub3JtYWxpemVkLnN1YnN0cmluZyhtb3VudFBhdGgubGVuZ3RoKTtcbiAgICB9XG4gIH1cbiAgaWYgKG5vcm1hbGl6ZWQuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZWQuc3Vic3RyaW5nKDEpO1xuICB9XG4gIGlmIChub3JtYWxpemVkLmVuZHNXaXRoKCcvJykpIHtcbiAgICBub3JtYWxpemVkID0gbm9ybWFsaXplZC5zdWJzdHJpbmcoMCwgbm9ybWFsaXplZC5sZW5ndGggLSAxKTtcbiAgfVxuICBjb25zdCBxdWVyeUluZGV4ID0gbm9ybWFsaXplZC5pbmRleE9mKCc/Jyk7XG4gIGlmIChxdWVyeUluZGV4ICE9PSAtMSkge1xuICAgIG5vcm1hbGl6ZWQgPSBub3JtYWxpemVkLnN1YnN0cmluZygwLCBxdWVyeUluZGV4KTtcbiAgfVxuICByZXR1cm4gbm9ybWFsaXplZDtcbn1cblxuLy8gQ2FjaGUgb2YgY29tcGlsZWQgZXhhY3Qtcm91dGUgbWF0Y2hlcnMsIGtleWVkIGJ5IHJvdXRlLiBNaXJyb3JzIGhvdyBgYWRkUmF0ZUxpbWl0YCBjb21waWxlcyBhXG4vLyByb3V0ZSdzIGBwYXRoVG9SZWdleHBgIG9uY2UgYW5kIHJldXNlcyBpdCwgYXZvaWRpbmcgcmVjb21waWxhdGlvbiBvbiBldmVyeSByZXF1ZXN0LlxuY29uc3QgZXhhY3RSb3V0ZVJlZ2V4cENhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgYHBhdGhgIHJlc29sdmVzIHRvIHRoZSBnaXZlbiBleGFjdCBzdGF0aWMgYHJvdXRlYCwgdXNpbmcgdGhlIHNhbWVcbiAqIGBwYXRoLXRvLXJlZ2V4cGAgbWF0Y2hpbmcgdGhhdCB0aGUgRXhwcmVzcyByb3V0ZXIgYW5kIHRoZSByYXRlIGxpbWl0ZXIgdXNlIChjYXNlLWluc2Vuc2l0aXZlXG4gKiBhbmQgdHJhaWxpbmctc2xhc2gtdG9sZXJhbnQgYnkgZGVmYXVsdCkuIFBhdGgtbGl0ZXJhbCBjaGVja3Mg4oCUIHN1Y2ggYXMgZGV0ZWN0aW5nIGAvbG9naW5gIHRvXG4gKiBkcm9wIHRoZSBpbmJvdW5kIHNlc3Npb24gdG9rZW4g4oCUIG11c3QgdXNlIHRoaXMgc28gdGhleSBzdGF5IGNvbnNpc3RlbnQgd2l0aCBob3cgdGhlIHJvdXRlclxuICogYWN0dWFsbHkgZGlzcGF0Y2hlcyB0aGUgcmVxdWVzdCwgaW5zdGVhZCBvZiByZS1kZXJpdmluZyB0aGUgbWF0Y2hpbmcgcnVsZXMgYnkgaGFuZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIFRoZSByZXF1ZXN0IHBhdGggKGUuZy4gYHJlcS5wYXRoYCBvciBhIGJhdGNoIHN1Yi1yZXF1ZXN0IHJvdXRhYmxlIHBhdGgpLlxuICogQHBhcmFtIHtzdHJpbmd9IHJvdXRlIFRoZSBleGFjdCBzdGF0aWMgcm91dGUgdG8gbWF0Y2ggKGUuZy4gYC9sb2dpbmApLlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaGVzRXhhY3RSb3V0ZShwYXRoLCByb3V0ZSkge1xuICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICghZXhhY3RSb3V0ZVJlZ2V4cENhY2hlW3JvdXRlXSkge1xuICAgIGV4YWN0Um91dGVSZWdleHBDYWNoZVtyb3V0ZV0gPSBwYXRoVG9SZWdleHAocm91dGUpLnJlZ2V4cDtcbiAgfVxuICByZXR1cm4gZXhhY3RSb3V0ZVJlZ2V4cENhY2hlW3JvdXRlXS50ZXN0KHBhdGgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSb3V0ZUFsbG93ZWQocGF0aCwgY29uZmlnLCBhdXRoKSB7XG4gIGlmICghY29uZmlnIHx8IGNvbmZpZy5yb3V0ZUFsbG93TGlzdCA9PT0gdW5kZWZpbmVkIHx8IGNvbmZpZy5yb3V0ZUFsbG93TGlzdCA9PT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChhdXRoICYmIChhdXRoLmlzTWFzdGVyIHx8IGF1dGguaXNNYWludGVuYW5jZSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplUm91dGVBbGxvd0xpc3RQYXRoKHBhdGgsIGNvbmZpZy5tb3VudCk7XG4gIGNvbnN0IHJlZ2V4ZXMgPSBjb25maWcuX3JvdXRlQWxsb3dMaXN0UmVnZXggfHwgW107XG4gIGZvciAoY29uc3QgcmVnZXggb2YgcmVnZXhlcykge1xuICAgIGlmIChyZWdleC50ZXN0KG5vcm1hbGl6ZWQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5mb3JjZVJvdXRlQWxsb3dMaXN0KHJlcSwgcmVzLCBuZXh0KSB7XG4gIGlmIChpc1JvdXRlQWxsb3dlZChyZXEub3JpZ2luYWxVcmwsIHJlcS5jb25maWcsIHJlcS5hdXRoKSkge1xuICAgIHJldHVybiBuZXh0KCk7XG4gIH1cbiAgY29uc3QgcGF0aCA9IG5vcm1hbGl6ZVJvdXRlQWxsb3dMaXN0UGF0aChyZXEub3JpZ2luYWxVcmwsIHJlcS5jb25maWc/Lm1vdW50KTtcbiAgdGhyb3cgY3JlYXRlU2FuaXRpemVkRXJyb3IoXG4gICAgUGFyc2UuRXJyb3IuT1BFUkFUSU9OX0ZPUkJJRERFTixcbiAgICBgUm91dGUgbm90IGFsbG93ZWQgYnkgcm91dGVBbGxvd0xpc3Q6ICR7cmVxLm1ldGhvZH0gJHtwYXRofWAsXG4gICAgcmVxLmNvbmZpZ1xuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlUGFyc2VFcnJvcnMoZXJyLCByZXEsIHJlcywgbmV4dCkge1xuICBjb25zdCBsb2cgPSAocmVxLmNvbmZpZyAmJiByZXEuY29uZmlnLmxvZ2dlckNvbnRyb2xsZXIpIHx8IGRlZmF1bHRMb2dnZXI7XG4gIGlmIChlcnIgaW5zdGFuY2VvZiBQYXJzZS5FcnJvcikge1xuICAgIGlmIChyZXEuY29uZmlnICYmIHJlcS5jb25maWcuZW5hYmxlRXhwcmVzc0Vycm9ySGFuZGxlcikge1xuICAgICAgcmV0dXJuIG5leHQoZXJyKTtcbiAgICB9XG4gICAgY29uc3Qgc2lnbnVwVXNlcm5hbWVUYWtlbkxldmVsID1cbiAgICAgIHJlcS5jb25maWc/LmxvZ0xldmVscz8uc2lnbnVwVXNlcm5hbWVUYWtlbiB8fCAnaW5mbyc7XG4gICAgbGV0IGh0dHBTdGF0dXM7XG4gICAgLy8gVE9ETzogZmlsbCBvdXQgdGhpcyBtYXBwaW5nXG4gICAgc3dpdGNoIChlcnIuY29kZSkge1xuICAgICAgY2FzZSBQYXJzZS5FcnJvci5JTlRFUk5BTF9TRVJWRVJfRVJST1I6XG4gICAgICAgIGh0dHBTdGF0dXMgPSA1MDA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBQYXJzZS5FcnJvci5PQkpFQ1RfTk9UX0ZPVU5EOlxuICAgICAgICBodHRwU3RhdHVzID0gNDA0O1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGh0dHBTdGF0dXMgPSA0MDA7XG4gICAgfVxuICAgIHJlcy5zdGF0dXMoaHR0cFN0YXR1cyk7XG4gICAgcmVzLmpzb24oeyBjb2RlOiBlcnIuY29kZSwgZXJyb3I6IGVyci5tZXNzYWdlIH0pO1xuICAgIGlmIChlcnIuY29kZSA9PT0gUGFyc2UuRXJyb3IuVVNFUk5BTUVfVEFLRU4pIHtcbiAgICAgIGlmIChzaWdudXBVc2VybmFtZVRha2VuTGV2ZWwgIT09ICdzaWxlbnQnKSB7XG4gICAgICAgIGNvbnN0IGxvZ2dlck1ldGhvZCA9XG4gICAgICAgICAgdHlwZW9mIGxvZ1tzaWdudXBVc2VybmFtZVRha2VuTGV2ZWxdID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICA/IGxvZ1tzaWdudXBVc2VybmFtZVRha2VuTGV2ZWxdLmJpbmQobG9nKVxuICAgICAgICAgICAgOiBsb2cuZXJyb3IuYmluZChsb2cpO1xuICAgICAgICBsb2dnZXJNZXRob2QoJ1BhcnNlIGVycm9yOiAnLCBlcnIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsb2cuZXJyb3IoJ1BhcnNlIGVycm9yOiAnLCBlcnIpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChlcnIuc3RhdHVzICYmIGVyci5tZXNzYWdlKSB7XG4gICAgcmVzLnN0YXR1cyhlcnIuc3RhdHVzKTtcbiAgICByZXMuanNvbih7IGVycm9yOiBlcnIubWVzc2FnZSB9KTtcbiAgICBpZiAoIShwcm9jZXNzICYmIHByb2Nlc3MuZW52LlRFU1RJTkcpKSB7XG4gICAgICBuZXh0KGVycik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxvZy5lcnJvcignVW5jYXVnaHQgaW50ZXJuYWwgc2VydmVyIGVycm9yLicsIGVyciwgZXJyLnN0YWNrKTtcbiAgICByZXMuc3RhdHVzKDUwMCk7XG4gICAgcmVzLmpzb24oe1xuICAgICAgY29kZTogUGFyc2UuRXJyb3IuSU5URVJOQUxfU0VSVkVSX0VSUk9SLFxuICAgICAgbWVzc2FnZTogJ0ludGVybmFsIHNlcnZlciBlcnJvci4nLFxuICAgIH0pO1xuICAgIGlmICghKHByb2Nlc3MgJiYgcHJvY2Vzcy5lbnYuVEVTVElORykpIHtcbiAgICAgIG5leHQoZXJyKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuZm9yY2VNYXN0ZXJLZXlBY2Nlc3MocmVxLCByZXMsIG5leHQpIHtcbiAgaWYgKCFyZXEuYXV0aC5pc01hc3Rlcikge1xuICAgIGNvbnN0IGVycm9yID0gY3JlYXRlU2FuaXRpemVkSHR0cEVycm9yKDQwMywgJ3VuYXV0aG9yaXplZDogbWFzdGVyIGtleSBpcyByZXF1aXJlZCcsIHJlcS5jb25maWcpO1xuICAgIHJlcy5zdGF0dXMoZXJyb3Iuc3RhdHVzKTtcbiAgICByZXMuZW5kKGB7XCJlcnJvclwiOlwiJHtlcnJvci5tZXNzYWdlfVwifWApO1xuICAgIHJldHVybjtcbiAgfVxuICBuZXh0KCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9taXNlRW5mb3JjZU1hc3RlcktleUFjY2VzcyhyZXF1ZXN0KSB7XG4gIGlmICghcmVxdWVzdC5hdXRoLmlzTWFzdGVyKSB7XG4gICAgdGhyb3cgY3JlYXRlU2FuaXRpemVkSHR0cEVycm9yKDQwMywgJ3VuYXV0aG9yaXplZDogbWFzdGVyIGtleSBpcyByZXF1aXJlZCcsIHJlcXVlc3QuY29uZmlnKTtcbiAgfVxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgcmVxdWVzdCBpcyBhbiBpbnRlcm5hbCByZXF1ZXN0LCBpLmUuIG9uZSB0aGF0IG9yaWdpbmF0ZXMgZnJvbSB0aGUgc2FtZSBob3N0XG4gKiB3aXRob3V0IHBhc3NpbmcgdGhyb3VnaCBhIHByb3h5LCBzdWNoIGFzIGEgQ2xvdWQgQ29kZSByZXF1ZXN0IHRoYXQgaXMgcm91dGVkIHZpYSBIVFRQIHdoZW4gdGhlXG4gKiBQYXJzZSBTZXJ2ZXIgb3B0aW9uIGBkaXJlY3RBY2Nlc3NgIGlzIGBmYWxzZWAuIE9ubHkgdGhlIHJhdyBzb2NrZXQgcGVlciBhZGRyZXNzIGlzIGNvbnN1bHRlZCxcbiAqIG5ldmVyIGByZXF1ZXN0LmlwYDogdW5kZXIgYSBwZXJtaXNzaXZlIGB0cnVzdFByb3h5YCBzZXR0aW5nIEV4cHJlc3MgcmVzb2x2ZXMgYHJlcXVlc3QuaXBgIGZyb21cbiAqIHRoZSBjbGllbnQtc3VwcGxpZWQgYFgtRm9yd2FyZGVkLUZvcmAgaGVhZGVyLCBzbyBhIHJlbW90ZSBjbGllbnQgY291bGQgb3RoZXJ3aXNlIHBvc2UgYXMgYW5cbiAqIGludGVybmFsIHJlcXVlc3QuIEEgcmVxdWVzdCB0aGF0IGNhcnJpZXMgYW4gYFgtRm9yd2FyZGVkLUZvcmAgaGVhZGVyLCBldmVuIGFuIGVtcHR5IG9uZSwgaGFzIGJlZW5cbiAqIGZvcndhcmRlZCBieSBhIHByb3h5IG9yIGNyYWZ0ZWQgYnkgYSBjbGllbnQgYW5kIGlzIHRoZXJlZm9yZSBuZXZlciBpbnRlcm5hbCwgZXZlbiBpZiBpdCBhcnJpdmVzXG4gKiBvdmVyIGEgbG9vcGJhY2sgc29ja2V0LlxuICogQHBhcmFtIHtPYmplY3R9IHJlcXVlc3QgVGhlIHJlcXVlc3QgdG8gZXZhbHVhdGUuXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gV2hldGhlciB0aGUgcmVxdWVzdCBpcyBpbnRlcm5hbC5cbiAqL1xuY29uc3QgaXNJbnRlcm5hbFJlcXVlc3QgPSByZXF1ZXN0ID0+XG4gIHJlcXVlc3Quc29ja2V0Py5yZW1vdGVBZGRyZXNzID09PSAnMTI3LjAuMC4xJyAmJlxuICByZXF1ZXN0LmhlYWRlcnM/LlsneC1mb3J3YXJkZWQtZm9yJ10gPT09IHVuZGVmaW5lZDtcblxuZXhwb3J0IGNvbnN0IGFkZFJhdGVMaW1pdCA9IChyb3V0ZSwgY29uZmlnLCBjbG91ZCkgPT4ge1xuICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25maWcgPSBDb25maWcuZ2V0KGNvbmZpZyk7XG4gIH1cbiAgZm9yIChjb25zdCBrZXkgaW4gcm91dGUpIHtcbiAgICBpZiAoIVJhdGVMaW1pdE9wdGlvbnNba2V5XSkge1xuICAgICAgdGhyb3cgYEludmFsaWQgcmF0ZSBsaW1pdCBvcHRpb24gXCIke2tleX1cImA7XG4gICAgfVxuICB9XG4gIGlmICghY29uZmlnLnJhdGVMaW1pdHMpIHtcbiAgICBjb25maWcucmF0ZUxpbWl0cyA9IFtdO1xuICB9XG4gIGNvbnN0IHJlZGlzU3RvcmUgPSB7XG4gICAgY29ubmVjdGlvblByb21pc2U6IFByb21pc2UucmVzb2x2ZSgpLFxuICAgIHN0b3JlOiBudWxsLFxuICB9O1xuICBpZiAocm91dGUucmVkaXNVcmwpIHtcbiAgICBjb25zdCBsb2cgPSBjb25maWc/LmxvZ2dlckNvbnRyb2xsZXIgfHwgZGVmYXVsdExvZ2dlcjtcbiAgICBjb25zdCBjbGllbnQgPSBjcmVhdGVDbGllbnQoe1xuICAgICAgdXJsOiByb3V0ZS5yZWRpc1VybCxcbiAgICB9KTtcbiAgICBjbGllbnQub24oJ2Vycm9yJywgZXJyID0+IHsgbG9nLmVycm9yKCdNaWRkbGV3YXJlcyBhZGRSYXRlTGltaXQgUmVkaXMgY2xpZW50IGVycm9yJywgeyBlcnJvcjogZXJyIH0pIH0pO1xuICAgIGNsaWVudC5vbignY29ubmVjdCcsICgpID0+IHsgfSk7XG4gICAgY2xpZW50Lm9uKCdyZWNvbm5lY3RpbmcnLCAoKSA9PiB7IH0pO1xuICAgIGNsaWVudC5vbigncmVhZHknLCAoKSA9PiB7IH0pO1xuICAgIHJlZGlzU3RvcmUuY29ubmVjdGlvblByb21pc2UgPSBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoY2xpZW50LmlzT3Blbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBjbGllbnQuY29ubmVjdCgpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBsb2cuZXJyb3IoYENvdWxkIG5vdCBjb25uZWN0IHRvIHJlZGlzVVJMIGluIHJhdGUgbGltaXQ6ICR7ZX1gKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJlZGlzU3RvcmUuY29ubmVjdGlvblByb21pc2UoKTtcbiAgICByZWRpc1N0b3JlLnN0b3JlID0gbmV3IFJlZGlzU3RvcmUoe1xuICAgICAgc2VuZENvbW1hbmQ6IGFzeW5jICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGF3YWl0IHJlZGlzU3RvcmUuY29ubmVjdGlvblByb21pc2UoKTtcbiAgICAgICAgcmV0dXJuIGNsaWVudC5zZW5kQ29tbWFuZChhcmdzKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbiAgY29uZmlnLnJhdGVMaW1pdHMucHVzaCh7XG4gICAgcGF0aDogcGF0aFRvUmVnZXhwKHJvdXRlLnJlcXVlc3RQYXRoKSxcbiAgICByZXF1ZXN0Q291bnQ6IHJvdXRlLnJlcXVlc3RDb3VudCxcbiAgICByZXF1ZXN0TWV0aG9kczogcm91dGUucmVxdWVzdE1ldGhvZHMsXG4gICAgaW5jbHVkZU1hc3RlcktleTogcm91dGUuaW5jbHVkZU1hc3RlcktleSxcbiAgICBpbmNsdWRlSW50ZXJuYWxSZXF1ZXN0czogcm91dGUuaW5jbHVkZUludGVybmFsUmVxdWVzdHMsXG4gICAgZXJyb3JSZXNwb25zZU1lc3NhZ2U6IHJvdXRlLmVycm9yUmVzcG9uc2VNZXNzYWdlIHx8IFJhdGVMaW1pdE9wdGlvbnMuZXJyb3JSZXNwb25zZU1lc3NhZ2UuZGVmYXVsdCxcbiAgICBoYW5kbGVyOiByYXRlTGltaXQoe1xuICAgICAgd2luZG93TXM6IHJvdXRlLnJlcXVlc3RUaW1lV2luZG93LFxuICAgICAgbWF4OiByb3V0ZS5yZXF1ZXN0Q291bnQsXG4gICAgICBtZXNzYWdlOiByb3V0ZS5lcnJvclJlc3BvbnNlTWVzc2FnZSB8fCBSYXRlTGltaXRPcHRpb25zLmVycm9yUmVzcG9uc2VNZXNzYWdlLmRlZmF1bHQsXG4gICAgICBoYW5kbGVyOiAocmVxdWVzdCwgcmVzcG9uc2UsIG5leHQsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgdGhyb3cge1xuICAgICAgICAgIGNvZGU6IFBhcnNlLkVycm9yLkNPTk5FQ1RJT05fRkFJTEVELFxuICAgICAgICAgIG1lc3NhZ2U6IG9wdGlvbnMubWVzc2FnZSxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICBza2lwOiByZXF1ZXN0ID0+IHtcbiAgICAgICAgaWYgKCFyb3V0ZS5pbmNsdWRlSW50ZXJuYWxSZXF1ZXN0cyAmJiBpc0ludGVybmFsUmVxdWVzdChyZXF1ZXN0KSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb3V0ZS5pbmNsdWRlTWFzdGVyS2V5KSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb3V0ZS5yZXF1ZXN0TWV0aG9kcykge1xuICAgICAgICAgIGNvbnN0IG1ldGhvZHNUb0NoZWNrID0gbmV3IFNldChbcmVxdWVzdC5tZXRob2RdKTtcbiAgICAgICAgICBpZiAocmVxdWVzdC5fYmF0Y2hPcmlnaW5hbE1ldGhvZCkge1xuICAgICAgICAgICAgbWV0aG9kc1RvQ2hlY2suYWRkKHJlcXVlc3QuX2JhdGNoT3JpZ2luYWxNZXRob2QpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyb3V0ZS5yZXF1ZXN0TWV0aG9kcykpIHtcbiAgICAgICAgICAgIGlmICghcm91dGUucmVxdWVzdE1ldGhvZHMuc29tZShtID0+IG1ldGhvZHNUb0NoZWNrLmhhcyhtKSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZ0V4cCA9IG5ldyBSZWdFeHAocm91dGUucmVxdWVzdE1ldGhvZHMpO1xuICAgICAgICAgICAgaWYgKCFbLi4ubWV0aG9kc1RvQ2hlY2tdLnNvbWUobSA9PiByZWdFeHAudGVzdChtKSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXF1ZXN0LmF1dGg/LmlzTWFzdGVyO1xuICAgICAgfSxcbiAgICAgIGtleUdlbmVyYXRvcjogYXN5bmMgcmVxdWVzdCA9PiB7XG4gICAgICAgIGlmIChyb3V0ZS56b25lID09PSBQYXJzZS5TZXJ2ZXIuUmF0ZUxpbWl0Wm9uZS5nbG9iYWwpIHtcbiAgICAgICAgICByZXR1cm4gcmVxdWVzdC5jb25maWcuYXBwSWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdG9rZW4gPSByZXF1ZXN0LmluZm8uc2Vzc2lvblRva2VuO1xuICAgICAgICBpZiAocm91dGUuem9uZSA9PT0gUGFyc2UuU2VydmVyLlJhdGVMaW1pdFpvbmUuc2Vzc2lvbiAmJiB0b2tlbikge1xuICAgICAgICAgIHJldHVybiB0b2tlbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm91dGUuem9uZSA9PT0gUGFyc2UuU2VydmVyLlJhdGVMaW1pdFpvbmUudXNlciAmJiB0b2tlbikge1xuICAgICAgICAgIGlmICghcmVxdWVzdC5hdXRoKSB7XG4gICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IGhhbmRsZVBhcnNlU2Vzc2lvbihyZXF1ZXN0LCBudWxsLCByZXNvbHZlKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChyZXF1ZXN0LmF1dGg/LnVzZXI/LmlkICYmIHJvdXRlLnpvbmUgPT09ICd1c2VyJykge1xuICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3QuYXV0aC51c2VyLmlkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVxdWVzdC5jb25maWcuaXA7XG4gICAgICB9LFxuICAgICAgc3RvcmU6IHJlZGlzU3RvcmUuc3RvcmUsXG4gICAgfSksXG4gICAgY2xvdWQsXG4gIH0pO1xuICBDb25maWcucHV0KGNvbmZpZyk7XG59O1xuXG4vKipcbiAqIERlZHVwbGljYXRlcyBhIHJlcXVlc3QgdG8gZW5zdXJlIGlkZW1wb3RlbmN5LiBEdXBsaWNhdGVzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSByZXF1ZXN0IElEXG4gKiBpbiB0aGUgcmVxdWVzdCBoZWFkZXIuIElmIGEgcmVxdWVzdCBoYXMgbm8gcmVxdWVzdCBJRCwgaXQgaXMgZXhlY3V0ZWQgYW55d2F5LlxuICogQHBhcmFtIHsqfSByZXEgVGhlIHJlcXVlc3QgdG8gZXZhbHVhdGUuXG4gKiBAcmV0dXJucyBQcm9taXNlPHt9PlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvbWlzZUVuc3VyZUlkZW1wb3RlbmN5KHJlcSkge1xuICAvLyBFbmFibGUgZmVhdHVyZSBvbmx5IGZvciBNb25nb0RCXG4gIGlmIChcbiAgICAhKFxuICAgICAgcmVxLmNvbmZpZy5kYXRhYmFzZS5hZGFwdGVyIGluc3RhbmNlb2YgTW9uZ29TdG9yYWdlQWRhcHRlciB8fFxuICAgICAgcmVxLmNvbmZpZy5kYXRhYmFzZS5hZGFwdGVyIGluc3RhbmNlb2YgUG9zdGdyZXNTdG9yYWdlQWRhcHRlclxuICAgIClcbiAgKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG4gIC8vIEdldCBwYXJhbWV0ZXJzXG4gIGNvbnN0IGNvbmZpZyA9IHJlcS5jb25maWc7XG4gIGNvbnN0IHJlcXVlc3RJZCA9ICgocmVxIHx8IHt9KS5oZWFkZXJzIHx8IHt9KVsneC1wYXJzZS1yZXF1ZXN0LWlkJ107XG4gIGNvbnN0IHsgcGF0aHMsIHR0bCB9ID0gY29uZmlnLmlkZW1wb3RlbmN5T3B0aW9ucztcbiAgaWYgKCFyZXF1ZXN0SWQgfHwgIWNvbmZpZy5pZGVtcG90ZW5jeU9wdGlvbnMpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cbiAgLy8gUmVxdWVzdCBwYXRoIG1heSBjb250YWluIHRyYWlsaW5nIHNsYXNoZXMsIGRlcGVuZGluZyBvbiB0aGUgb3JpZ2luYWwgcmVxdWVzdCwgc28gcmVtb3ZlXG4gIC8vIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoZXMgdG8gbWFrZSBpdCBlYXNpZXIgdG8gc3BlY2lmeSBwYXRocyBpbiB0aGUgY29uZmlndXJhdGlvblxuICBjb25zdCByZXFQYXRoID0gcmVxLnBhdGgucmVwbGFjZSgvXlxcL3xcXC8kLywgJycpO1xuICAvLyBEZXRlcm1pbmUgd2hldGhlciBpZGVtcG90ZW5jeSBpcyBlbmFibGVkIGZvciBjdXJyZW50IHJlcXVlc3QgcGF0aFxuICBsZXQgbWF0Y2ggPSBmYWxzZTtcbiAgZm9yIChjb25zdCBwYXRoIG9mIHBhdGhzKSB7XG4gICAgLy8gQXNzdW1lIG9uZSB3YW50cyBhIHBhdGggdG8gYWx3YXlzIG1hdGNoIGZyb20gdGhlIGJlZ2lubmluZyB0byBwcmV2ZW50IGFueSBtaXN0YWtlc1xuICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChwYXRoLmNoYXJBdCgwKSA9PT0gJ14nID8gcGF0aCA6ICdeJyArIHBhdGgpO1xuICAgIGlmIChyZXFQYXRoLm1hdGNoKHJlZ2V4KSkge1xuICAgICAgbWF0Y2ggPSB0cnVlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cbiAgLy8gVHJ5IHRvIHN0b3JlIHJlcXVlc3RcbiAgY29uc3QgZXhwaXJ5RGF0ZSA9IG5ldyBEYXRlKG5ldyBEYXRlKCkuc2V0U2Vjb25kcyhuZXcgRGF0ZSgpLmdldFNlY29uZHMoKSArIHR0bCkpO1xuICByZXR1cm4gcmVzdFxuICAgIC5jcmVhdGUoY29uZmlnLCBhdXRoLm1hc3Rlcihjb25maWcpLCAnX0lkZW1wb3RlbmN5Jywge1xuICAgICAgcmVxSWQ6IHJlcXVlc3RJZCxcbiAgICAgIGV4cGlyZTogUGFyc2UuX2VuY29kZShleHBpcnlEYXRlKSxcbiAgICB9KVxuICAgIC5jYXRjaChlID0+IHtcbiAgICAgIGlmIChlLmNvZGUgPT0gUGFyc2UuRXJyb3IuRFVQTElDQVRFX1ZBTFVFKSB7XG4gICAgICAgIHRocm93IG5ldyBQYXJzZS5FcnJvcihQYXJzZS5FcnJvci5EVVBMSUNBVEVfUkVRVUVTVCwgJ0R1cGxpY2F0ZSByZXF1ZXN0Jyk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBpbnZhbGlkUmVxdWVzdChyZXEsIHJlcykge1xuICByZXMuc3RhdHVzKDQwMyk7XG4gIHJlcy5lbmQoJ3tcImVycm9yXCI6XCJ1bmF1dGhvcml6ZWRcIn0nKTtcbn1cblxuZnVuY3Rpb24gbWFsZm9ybWVkQ29udGV4dChyZXEsIHJlcykge1xuICByZXMuc3RhdHVzKDQwMCk7XG4gIHJlcy5qc29uKHsgY29kZTogUGFyc2UuRXJyb3IuSU5WQUxJRF9KU09OLCBlcnJvcjogJ0ludmFsaWQgb2JqZWN0IGZvciBjb250ZXh0LicgfSk7XG59XG5cbi8qKlxuICogRXhwcmVzcyA0IGFsbG93ZWQgYSBkb3VibGUgZm9yd2FyZCBzbGFzaCBiZXR3ZWVuIGEgcm91dGUgYW5kIHJvdXRlci4gQWx0aG91Z2hcbiAqIHRoaXMgc2hvdWxkIGJlIGNvbnNpZGVyZWQgYW4gYW50aS1wYXR0ZXJuLCB3ZSBuZWVkIHRvIHN1cHBvcnQgaXQgZm9yIGJhY2t3YXJkc1xuICogY29tcGF0aWJpbGl0eS5cbiAqXG4gKiBUZWNobmljYWxseSB2YWxpZCBVUkwgd2l0aCBkb3VibGUgZm9yb3dhcmQgc2xhc2g6XG4gKiBodHRwOi8vbG9jYWxob3N0OjEzMzcvcGFyc2UvL2Z1bmN0aW9ucy90ZXN0RnVuY3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFsbG93RG91YmxlRm9yd2FyZFNsYXNoKHJlcSwgcmVzLCBuZXh0KSB7XG4gIHJlcS51cmwgPSByZXEudXJsLnN0YXJ0c1dpdGgoJy8vJykgPyByZXEudXJsLnN1YnN0cmluZygxKSA6IHJlcS51cmw7XG4gIG5leHQoKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsS0FBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsS0FBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksT0FBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUssT0FBQSxHQUFBTixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU0sS0FBQSxHQUFBUCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQU8sb0JBQUEsR0FBQVIsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFRLHVCQUFBLEdBQUFULHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBUyxpQkFBQSxHQUFBVixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQVUsWUFBQSxHQUFBVixPQUFBO0FBQ0EsSUFBQVcsYUFBQSxHQUFBWCxPQUFBO0FBQ0EsSUFBQVksZUFBQSxHQUFBYixzQkFBQSxD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
|