construct-hub 0.4.26 → 0.4.27

Sign up to get free protection for your applications and to get access to all the features.
@@ -31,6 +31,13 @@ exports.handler = async () => {
31
31
  let serviceLimit;
32
32
  try {
33
33
  serviceLimit = await github_changelog_fetcher_lambda_shared_1.getServiceLimits();
34
+ await aws_embedded_metrics_1.metricScope((metrics) => async () => {
35
+ metrics.setNamespace(constants.METRICS_NAMESPACE);
36
+ metrics.setDimensions();
37
+ metrics.putMetric(constants.GhRateLimitsRemaining, serviceLimit.remaining, aws_embedded_metrics_1.Unit.Count);
38
+ metrics.putMetric(constants.GhLimitsUsed, serviceLimit.used, aws_embedded_metrics_1.Unit.Count);
39
+ metrics.putMetric(constants.GhLimitsLimit, serviceLimit.limit, aws_embedded_metrics_1.Unit.Count);
40
+ })();
34
41
  }
35
42
  catch (e) {
36
43
  if (e.status == 401) {
@@ -87,4 +94,4 @@ exports.handler = async () => {
87
94
  }
88
95
  return { status: 'NoMoreMessagesLeft' };
89
96
  };
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LW1lc3NhZ2VzLWZyb20td29ya2VyLXF1ZXVlLmxhbWJkYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iYWNrZW5kL3JlbGVhc2Utbm90ZXMvZ2V0LW1lc3NhZ2VzLWZyb20td29ya2VyLXF1ZXVlLmxhbWJkYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrREFBeUQ7QUFDekQscUNBQTZDO0FBQzdDLG1FQUF5RDtBQUN6RCx5Q0FBeUM7QUFFekMseUVBQXlFO0FBQ3pFLDRFQUE0RTtBQUM1RSxzRUFBc0U7QUFDdEUsK0VBQStFO0FBQy9FLE1BQU0sMEJBQTBCLEdBQUcsRUFBRSxDQUFDO0FBRXRDLDRHQUFtRjtBQWNuRjs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDVSxRQUFBLE9BQU8sR0FBRyxLQUFLLElBQTZDLEVBQUU7SUFDekUsSUFBSSxZQUFZLENBQUM7SUFDakIsSUFBSTtRQUNGLFlBQVksR0FBRyxNQUFNLHlEQUFnQixFQUFFLENBQUM7S0FDekM7SUFBQyxPQUFPLENBQUMsRUFBRTtRQUNWLElBQUssQ0FBUyxDQUFDLE1BQU0sSUFBSSxHQUFHLEVBQUU7WUFDNUIsTUFBTSxrQ0FBVyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLElBQUksRUFBRTtnQkFDeEMsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUV4QixPQUFPLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUNsRCxPQUFPLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLEVBQUUsMkJBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqRSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBRUwsT0FBTyxFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxDQUFDO1NBQ3hDO1FBQ0QsTUFBTSxrQ0FBVyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxLQUFLLElBQUksRUFBRTtZQUN4QyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7WUFFeEIsT0FBTyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUNsRCxPQUFPLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUFFLDJCQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0QsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNMLE9BQU8sRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLENBQUM7S0FDbEM7SUFFRCxNQUFNLE1BQU0sR0FBRyw4QkFBVSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFFL0MsdURBQXVEO0lBQ3ZELE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSx1QkFBYSxFQUFFO1NBQ3pDLGNBQWMsQ0FBQztRQUNkLGVBQWUsRUFBRSxNQUFNO1FBQ3ZCLFVBQVUsRUFBRSxDQUFDO1FBQ2IsWUFBWSxFQUFFLFNBQVM7S0FDeEIsQ0FBQztTQUNELE9BQU8sRUFBRSxDQUFDO0lBRWIsSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDcEMsT0FBTyxFQUFFLEtBQUssRUFBRSw2QkFBNkIsRUFBRSxDQUFDO0tBQ2pEO0lBQ0QsSUFBSSxZQUFZLENBQUMsU0FBUyxJQUFJLDBCQUEwQixFQUFFO1FBQ3hELE9BQU87WUFDTCxTQUFTLEVBQUUsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUU7WUFDNUQsU0FBUyxFQUFFLFlBQVksQ0FBQyxTQUFTO1lBQ2pDLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSztZQUN6QixJQUFJLEVBQUUsWUFBWSxDQUFDLElBQUk7U0FDeEIsQ0FBQztLQUNIO0lBRUQsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLGFBQUcsRUFBRTtTQUM3QixjQUFjLENBQUM7UUFDZCxRQUFRLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFjO1FBQ3BDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxHQUFHLENBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLFNBQVMsR0FBRywwQkFBMEIsQ0FBQyxFQUMvRCxFQUFFLENBQ0g7S0FDRixDQUFDO1NBQ0QsT0FBTyxFQUFFLENBQUM7SUFFYixJQUFJLFFBQVEsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFO1FBQzdCLE9BQU87WUFDTCxRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3RDLEdBQUcsQ0FBQztnQkFDSixJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQzthQUNqQyxDQUFDLENBQUM7U0FDSixDQUFDO0tBQ0g7U0FBTTtRQUNMLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7S0FDNUI7SUFDRCxPQUFPLEVBQUUsTUFBTSxFQUFFLG9CQUFvQixFQUFFLENBQUM7QUFDMUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbWV0cmljU2NvcGUsIFVuaXQgfSBmcm9tICdhd3MtZW1iZWRkZWQtbWV0cmljcyc7XG5pbXBvcnQgeyBTdGVwRnVuY3Rpb25zLCBTUVMgfSBmcm9tICdhd3Mtc2RrJztcbmltcG9ydCB7IHJlcXVpcmVFbnYgfSBmcm9tICcuLi9zaGFyZWQvZW52LmxhbWJkYS1zaGFyZWQnO1xuaW1wb3J0ICogYXMgY29uc3RhbnRzIGZyb20gJy4vY29uc3RhbnRzJztcblxuLy8gRWFjaCBvZiB0aGUgcmVsZWFzZSBub3RlIGZldGNoIHRhc2sgY2FuIGludm9sdmUgbWFraW5nIG11bHRpcGxlIEdpdGh1YlxuLy8gQVBJIHJlcXVlc3RzLiBUaGlzIGlzIGEgd29yc3QgY2FzZSBzY2VuYXJpbyB3aGVyZSBhIHBhY2thZ2UgbWlnaHQgcmVxdWlyZVxuLy8gTUFYX0dIX1JFUVVFU1RfUEVSX1BBQ0tBR0UgbnVtYmVyIG9mIHJlcXVlc3RzLiBUaGlzIHdpbGwgYmUgdXNlZCB0b1xuLy8gZW5zdXJlIHRoYXQgdGhlIHN0YXRlIG1hY2hpbmUgZG9lcyBub3QgaGFtbWVyIGFuZCBleGhhdXN0IHRoZSBzZXJ2aWNlIGxpbWl0c1xuY29uc3QgTUFYX0dIX1JFUVVFU1RfUEVSX1BBQ0tBR0UgPSAxMDtcblxuaW1wb3J0IHsgZ2V0U2VydmljZUxpbWl0cyB9IGZyb20gJy4vc2hhcmVkL2dpdGh1Yi1jaGFuZ2Vsb2ctZmV0Y2hlci5sYW1iZGEtc2hhcmVkJztcblxudHlwZSBTZXJ2aWNlTGltaXQgPSB7XG4gIHdhaXRVbnRpbDogc3RyaW5nO1xuICByZW1haW5pbmc6IG51bWJlcjtcbiAgbGltaXQ6IG51bWJlcjtcbiAgdXNlZDogbnVtYmVyO1xufTtcbnR5cGUgRXhlY3V0aW9uUmVzdWx0ID0ge1xuICBlcnJvcj86IHN0cmluZztcbiAgc3RhdHVzPzogc3RyaW5nO1xuICBtZXNzYWdlcz86IFNRUy5NZXNzYWdlW107XG59O1xuXG4vKipcbiAqIExhbWJkYSBmdW5jdGlvbiBleGVjdXRlZCBieSB0aGUgcmVsZWFzZSBub3RlcyBmZXRjaCBzdGVwIGZ1bmN0aW9uIHRvIGdldCB0aGVcbiAqIGxpc3Qgb2YgcGFja2FnZXMgZm9yIHdoaWNoIHRoZSByZWxlYXNlIG5vdGVzIGhhdmUgdG8gYmUgZmV0Y2hlZC4gVGhpc1xuICogZnVuY3Rpb24gY29uc2lkZXJzIHRoZSBHaXRodWIgQVBJIHNlcnZpY2UgbGltaXRhdGlvbiBhbmQgYmVmb3JlIHJldHVybmluZ1xuICogdGhlIGxpc3Qgb2YgcGFja2FnZXNcbiAqIFByZSBjb25kaXRpb25zOlxuICogMS4gSGFzIHZhbGlkIEdpdGh1YiBjcmVkZW50aWFscyBmb3IgbWFraW5nIEFQSSByZXF1ZXN0c1xuICogMi4gU2VydmljZSBxdW90YSBsaW1pdHMgaGF2ZSBub3QgYmUgaGl0LiBJZiB0aGUgbGltaXQgaGFzIGJlZW4gaGl0LCB0aGVuXG4gKiB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gdGltZSB3aGVuIHRoZSBxdW90YSB3aWxsIGJlIHJlc2V0IHNvIHN0ZXAgZnVuY3Rpb25cbiAqIGNhbiB3YWl0IHVudGlsIHRoZW5cbiAqXG4gKiBJZiB0aGVzZSBjb25kaXRpb25zIGFyZSBtZXQsIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiB1cCB0byAxMCBwYWNrYWdlc1xuICogcGVyIGV4ZWN1dGlvblxuICpcbiAqIEByZXR1cm5zIEV4ZWN1dGlvblJlc3VsdCB8IFNlcnZpY2VMaW1pdFxuICovXG5leHBvcnQgY29uc3QgaGFuZGxlciA9IGFzeW5jICgpOiBQcm9taXNlPEV4ZWN1dGlvblJlc3VsdCB8IFNlcnZpY2VMaW1pdD4gPT4ge1xuICBsZXQgc2VydmljZUxpbWl0O1xuICB0cnkge1xuICAgIHNlcnZpY2VMaW1pdCA9IGF3YWl0IGdldFNlcnZpY2VMaW1pdHMoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmICgoZSBhcyBhbnkpLnN0YXR1cyA9PSA0MDEpIHtcbiAgICAgIGF3YWl0IG1ldHJpY1Njb3BlKChtZXRyaWNzKSA9PiBhc3luYyAoKSA9PiB7XG4gICAgICAgIG1ldHJpY3Muc2V0RGltZW5zaW9ucygpO1xuXG4gICAgICAgIG1ldHJpY3Muc2V0TmFtZXNwYWNlKGNvbnN0YW50cy5NRVRSSUNTX05BTUVTUEFDRSk7XG4gICAgICAgIG1ldHJpY3MucHV0TWV0cmljKGNvbnN0YW50cy5JbnZhbGlkQ3JlZGVudGlhbHMsIDEsIFVuaXQuQ291bnQpO1xuICAgICAgfSkoKTtcblxuICAgICAgcmV0dXJuIHsgZXJyb3I6ICdJbnZhbGlkQ3JlZGVudGlhbHMnIH07XG4gICAgfVxuICAgIGF3YWl0IG1ldHJpY1Njb3BlKChtZXRyaWNzKSA9PiBhc3luYyAoKSA9PiB7XG4gICAgICBtZXRyaWNzLnNldERpbWVuc2lvbnMoKTtcblxuICAgICAgbWV0cmljcy5zZXROYW1lc3BhY2UoY29uc3RhbnRzLk1FVFJJQ1NfTkFNRVNQQUNFKTtcbiAgICAgIG1ldHJpY3MucHV0TWV0cmljKGNvbnN0YW50cy5Vbmtub3duRXJyb3IsIDEsIFVuaXQuQ291bnQpO1xuICAgIH0pKCk7XG4gICAgcmV0dXJuIHsgZXJyb3I6ICdVbmtub3duRXJyb3InIH07XG4gIH1cblxuICBjb25zdCBzZm5Bcm4gPSByZXF1aXJlRW52KCdTVEVQX0ZVTkNUSU9OX0FSTicpO1xuXG4gIC8vIEVuc3VyZSBvbmx5IG9uZSBpbnN0YW5jZSBvZiBzdGVwIGZ1bmN0aW9uIGlzIHJ1bm5pbmdcbiAgY29uc3QgYWN0aXZpdGllcyA9IGF3YWl0IG5ldyBTdGVwRnVuY3Rpb25zKClcbiAgICAubGlzdEV4ZWN1dGlvbnMoe1xuICAgICAgc3RhdGVNYWNoaW5lQXJuOiBzZm5Bcm4sXG4gICAgICBtYXhSZXN1bHRzOiAxLFxuICAgICAgc3RhdHVzRmlsdGVyOiAnUlVOTklORycsXG4gICAgfSlcbiAgICAucHJvbWlzZSgpO1xuXG4gIGlmIChhY3Rpdml0aWVzLmV4ZWN1dGlvbnMubGVuZ3RoID4gMSkge1xuICAgIHJldHVybiB7IGVycm9yOiAnTWF4Q29uY3VycmVudEV4ZWN1dGlvbkVycm9yJyB9O1xuICB9XG4gIGlmIChzZXJ2aWNlTGltaXQucmVtYWluaW5nIDw9IE1BWF9HSF9SRVFVRVNUX1BFUl9QQUNLQUdFKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdhaXRVbnRpbDogbmV3IERhdGUoc2VydmljZUxpbWl0LnJlc2V0ICogMTAwMCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHJlbWFpbmluZzogc2VydmljZUxpbWl0LnJlbWFpbmluZyxcbiAgICAgIGxpbWl0OiBzZXJ2aWNlTGltaXQubGltaXQsXG4gICAgICB1c2VkOiBzZXJ2aWNlTGltaXQudXNlZCxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgbWVzc2FnZXMgPSBhd2FpdCBuZXcgU1FTKClcbiAgICAucmVjZWl2ZU1lc3NhZ2Uoe1xuICAgICAgUXVldWVVcmw6IHByb2Nlc3MuZW52LlNRU19RVUVVRV9VUkwhLFxuICAgICAgTWF4TnVtYmVyT2ZNZXNzYWdlczogTWF0aC5taW4oXG4gICAgICAgIE1hdGguZmxvb3Ioc2VydmljZUxpbWl0LnJlbWFpbmluZyAvIE1BWF9HSF9SRVFVRVNUX1BFUl9QQUNLQUdFKSxcbiAgICAgICAgMTBcbiAgICAgICksXG4gICAgfSlcbiAgICAucHJvbWlzZSgpO1xuXG4gIGlmIChtZXNzYWdlcy5NZXNzYWdlcz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1lc3NhZ2VzOiBtZXNzYWdlcy5NZXNzYWdlcy5tYXAoKG0pID0+ICh7XG4gICAgICAgIC4uLm0sXG4gICAgICAgIEJvZHk6IEpTT04ucGFyc2UobS5Cb2R5IHx8ICd7fScpLFxuICAgICAgfSkpLFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5sb2coJ25vIG1lc3NhZ2VzJyk7XG4gIH1cbiAgcmV0dXJuIHsgc3RhdHVzOiAnTm9Nb3JlTWVzc2FnZXNMZWZ0JyB9O1xufTtcbiJdfQ==
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LW1lc3NhZ2VzLWZyb20td29ya2VyLXF1ZXVlLmxhbWJkYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iYWNrZW5kL3JlbGVhc2Utbm90ZXMvZ2V0LW1lc3NhZ2VzLWZyb20td29ya2VyLXF1ZXVlLmxhbWJkYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrREFBeUQ7QUFDekQscUNBQTZDO0FBQzdDLG1FQUF5RDtBQUN6RCx5Q0FBeUM7QUFFekMseUVBQXlFO0FBQ3pFLDRFQUE0RTtBQUM1RSxzRUFBc0U7QUFDdEUsK0VBQStFO0FBQy9FLE1BQU0sMEJBQTBCLEdBQUcsRUFBRSxDQUFDO0FBRXRDLDRHQUFtRjtBQWNuRjs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDVSxRQUFBLE9BQU8sR0FBRyxLQUFLLElBQTZDLEVBQUU7SUFDekUsSUFBSSxZQUtILENBQUM7SUFDRixJQUFJO1FBQ0YsWUFBWSxHQUFHLE1BQU0seURBQWdCLEVBQUUsQ0FBQztRQUN4QyxNQUFNLGtDQUFXLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ3hDLE9BQU8sQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDbEQsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3hCLE9BQU8sQ0FBQyxTQUFTLENBQ2YsU0FBUyxDQUFDLHFCQUFxQixFQUMvQixZQUFhLENBQUMsU0FBUyxFQUN2QiwyQkFBSSxDQUFDLEtBQUssQ0FDWCxDQUFDO1lBQ0YsT0FBTyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLFlBQWEsQ0FBQyxJQUFJLEVBQUUsMkJBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUUxRSxPQUFPLENBQUMsU0FBUyxDQUNmLFNBQVMsQ0FBQyxhQUFhLEVBQ3ZCLFlBQWEsQ0FBQyxLQUFLLEVBQ25CLDJCQUFJLENBQUMsS0FBSyxDQUNYLENBQUM7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QUFFLENBQUM7QUFDMUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbWV0cmljU2NvcGUsIFVuaXQgfSBmcm9tICdhd3MtZW1iZWRkZWQtbWV0cmljcyc7XG5pbXBvcnQgeyBTdGVwRnVuY3Rpb25zLCBTUVMgfSBmcm9tICdhd3Mtc2RrJztcbmltcG9ydCB7IHJlcXVpcmVFbnYgfSBmcm9tICcuLi9zaGFyZWQvZW52LmxhbWJkYS1zaGFyZWQnO1xuaW1wb3J0ICogYXMgY29uc3RhbnRzIGZyb20gJy4vY29uc3RhbnRzJztcblxuLy8gRWFjaCBvZiB0aGUgcmVsZWFzZSBub3RlIGZldGNoIHRhc2sgY2FuIGludm9sdmUgbWFraW5nIG11bHRpcGxlIEdpdGh1YlxuLy8gQVBJIHJlcXVlc3RzLiBUaGlzIGlzIGEgd29yc3QgY2FzZSBzY2VuYXJpbyB3aGVyZSBhIHBhY2thZ2UgbWlnaHQgcmVxdWlyZVxuLy8gTUFYX0dIX1JFUVVFU1RfUEVSX1BBQ0tBR0UgbnVtYmVyIG9mIHJlcXVlc3RzLiBUaGlzIHdpbGwgYmUgdXNlZCB0b1xuLy8gZW5zdXJlIHRoYXQgdGhlIHN0YXRlIG1hY2hpbmUgZG9lcyBub3QgaGFtbWVyIGFuZCBleGhhdXN0IHRoZSBzZXJ2aWNlIGxpbWl0c1xuY29uc3QgTUFYX0dIX1JFUVVFU1RfUEVSX1BBQ0tBR0UgPSAxMDtcblxuaW1wb3J0IHsgZ2V0U2VydmljZUxpbWl0cyB9IGZyb20gJy4vc2hhcmVkL2dpdGh1Yi1jaGFuZ2Vsb2ctZmV0Y2hlci5sYW1iZGEtc2hhcmVkJztcblxudHlwZSBTZXJ2aWNlTGltaXQgPSB7XG4gIHdhaXRVbnRpbDogc3RyaW5nO1xuICByZW1haW5pbmc6IG51bWJlcjtcbiAgbGltaXQ6IG51bWJlcjtcbiAgdXNlZDogbnVtYmVyO1xufTtcbnR5cGUgRXhlY3V0aW9uUmVzdWx0ID0ge1xuICBlcnJvcj86IHN0cmluZztcbiAgc3RhdHVzPzogc3RyaW5nO1xuICBtZXNzYWdlcz86IFNRUy5NZXNzYWdlW107XG59O1xuXG4vKipcbiAqIExhbWJkYSBmdW5jdGlvbiBleGVjdXRlZCBieSB0aGUgcmVsZWFzZSBub3RlcyBmZXRjaCBzdGVwIGZ1bmN0aW9uIHRvIGdldCB0aGVcbiAqIGxpc3Qgb2YgcGFja2FnZXMgZm9yIHdoaWNoIHRoZSByZWxlYXNlIG5vdGVzIGhhdmUgdG8gYmUgZmV0Y2hlZC4gVGhpc1xuICogZnVuY3Rpb24gY29uc2lkZXJzIHRoZSBHaXRodWIgQVBJIHNlcnZpY2UgbGltaXRhdGlvbiBhbmQgYmVmb3JlIHJldHVybmluZ1xuICogdGhlIGxpc3Qgb2YgcGFja2FnZXNcbiAqIFByZSBjb25kaXRpb25zOlxuICogMS4gSGFzIHZhbGlkIEdpdGh1YiBjcmVkZW50aWFscyBmb3IgbWFraW5nIEFQSSByZXF1ZXN0c1xuICogMi4gU2VydmljZSBxdW90YSBsaW1pdHMgaGF2ZSBub3QgYmUgaGl0LiBJZiB0aGUgbGltaXQgaGFzIGJlZW4gaGl0LCB0aGVuXG4gKiB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gdGltZSB3aGVuIHRoZSBxdW90YSB3aWxsIGJlIHJlc2V0IHNvIHN0ZXAgZnVuY3Rpb25cbiAqIGNhbiB3YWl0IHVudGlsIHRoZW5cbiAqXG4gKiBJZiB0aGVzZSBjb25kaXRpb25zIGFyZSBtZXQsIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiB1cCB0byAxMCBwYWNrYWdlc1xuICogcGVyIGV4ZWN1dGlvblxuICpcbiAqIEByZXR1cm5zIEV4ZWN1dGlvblJlc3VsdCB8IFNlcnZpY2VMaW1pdFxuICovXG5leHBvcnQgY29uc3QgaGFuZGxlciA9IGFzeW5jICgpOiBQcm9taXNlPEV4ZWN1dGlvblJlc3VsdCB8IFNlcnZpY2VMaW1pdD4gPT4ge1xuICBsZXQgc2VydmljZUxpbWl0OiB7XG4gICAgbGltaXQ6IG51bWJlcjtcbiAgICByZW1haW5pbmc6IG51bWJlcjtcbiAgICB1c2VkOiBudW1iZXI7XG4gICAgcmVzZXQ6IG51bWJlcjtcbiAgfTtcbiAgdHJ5IHtcbiAgICBzZXJ2aWNlTGltaXQgPSBhd2FpdCBnZXRTZXJ2aWNlTGltaXRzKCk7XG4gICAgYXdhaXQgbWV0cmljU2NvcGUoKG1ldHJpY3MpID0+IGFzeW5jICgpID0+IHtcbiAgICAgIG1ldHJpY3Muc2V0TmFtZXNwYWNlKGNvbnN0YW50cy5NRVRSSUNTX05BTUVTUEFDRSk7XG4gICAgICBtZXRyaWNzLnNldERpbWVuc2lvbnMoKTtcbiAgICAgIG1ldHJpY3MucHV0TWV0cmljKFxuICAgICAgICBjb25zdGFudHMuR2hSYXRlTGltaXRzUmVtYWluaW5nLFxuICAgICAgICBzZXJ2aWNlTGltaXQhLnJlbWFpbmluZyxcbiAgICAgICAgVW5pdC5Db3VudFxuICAgICAgKTtcbiAgICAgIG1ldHJpY3MucHV0TWV0cmljKGNvbnN0YW50cy5HaExpbWl0c1VzZWQsIHNlcnZpY2VMaW1pdCEudXNlZCwgVW5pdC5Db3VudCk7XG5cbiAgICAgIG1ldHJpY3MucHV0TWV0cmljKFxuICAgICAgICBjb25zdGFudHMuR2hMaW1pdHNMaW1pdCxcbiAgICAgICAgc2VydmljZUxpbWl0IS5saW1pdCxcbiAgICAgICAgVW5pdC5Db3VudFxuICAgICAgKTtcbiAgICB9KSgpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKChlIGFzIGFueSkuc3RhdHVzID09IDQwMSkge1xuICAgICAgYXdhaXQgbWV0cmljU2NvcGUoKG1ldHJpY3MpID0+IGFzeW5jICgpID0+IHtcbiAgICAgICAgbWV0cmljcy5zZXREaW1lbnNpb25zKCk7XG5cbiAgICAgICAgbWV0cmljcy5zZXROYW1lc3BhY2UoY29uc3RhbnRzLk1FVFJJQ1NfTkFNRVNQQUNFKTtcbiAgICAgICAgbWV0cmljcy5wdXRNZXRyaWMoY29uc3RhbnRzLkludmFsaWRDcmVkZW50aWFscywgMSwgVW5pdC5Db3VudCk7XG4gICAgICB9KSgpO1xuXG4gICAgICByZXR1cm4geyBlcnJvcjogJ0ludmFsaWRDcmVkZW50aWFscycgfTtcbiAgICB9XG4gICAgYXdhaXQgbWV0cmljU2NvcGUoKG1ldHJpY3MpID0+IGFzeW5jICgpID0+IHtcbiAgICAgIG1ldHJpY3Muc2V0RGltZW5zaW9ucygpO1xuXG4gICAgICBtZXRyaWNzLnNldE5hbWVzcGFjZShjb25zdGFudHMuTUVUUklDU19OQU1FU1BBQ0UpO1xuICAgICAgbWV0cmljcy5wdXRNZXRyaWMoY29uc3RhbnRzLlVua25vd25FcnJvciwgMSwgVW5pdC5Db3VudCk7XG4gICAgfSkoKTtcbiAgICByZXR1cm4geyBlcnJvcjogJ1Vua25vd25FcnJvcicgfTtcbiAgfVxuXG4gIGNvbnN0IHNmbkFybiA9IHJlcXVpcmVFbnYoJ1NURVBfRlVOQ1RJT05fQVJOJyk7XG5cbiAgLy8gRW5zdXJlIG9ubHkgb25lIGluc3RhbmNlIG9mIHN0ZXAgZnVuY3Rpb24gaXMgcnVubmluZ1xuICBjb25zdCBhY3Rpdml0aWVzID0gYXdhaXQgbmV3IFN0ZXBGdW5jdGlvbnMoKVxuICAgIC5saXN0RXhlY3V0aW9ucyh7XG4gICAgICBzdGF0ZU1hY2hpbmVBcm46IHNmbkFybixcbiAgICAgIG1heFJlc3VsdHM6IDEsXG4gICAgICBzdGF0dXNGaWx0ZXI6ICdSVU5OSU5HJyxcbiAgICB9KVxuICAgIC5wcm9taXNlKCk7XG5cbiAgaWYgKGFjdGl2aXRpZXMuZXhlY3V0aW9ucy5sZW5ndGggPiAxKSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6ICdNYXhDb25jdXJyZW50RXhlY3V0aW9uRXJyb3InIH07XG4gIH1cbiAgaWYgKHNlcnZpY2VMaW1pdC5yZW1haW5pbmcgPD0gTUFYX0dIX1JFUVVFU1RfUEVSX1BBQ0tBR0UpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd2FpdFVudGlsOiBuZXcgRGF0ZShzZXJ2aWNlTGltaXQucmVzZXQgKiAxMDAwKS50b0lTT1N0cmluZygpLFxuICAgICAgcmVtYWluaW5nOiBzZXJ2aWNlTGltaXQucmVtYWluaW5nLFxuICAgICAgbGltaXQ6IHNlcnZpY2VMaW1pdC5saW1pdCxcbiAgICAgIHVzZWQ6IHNlcnZpY2VMaW1pdC51c2VkLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBtZXNzYWdlcyA9IGF3YWl0IG5ldyBTUVMoKVxuICAgIC5yZWNlaXZlTWVzc2FnZSh7XG4gICAgICBRdWV1ZVVybDogcHJvY2Vzcy5lbnYuU1FTX1FVRVVFX1VSTCEsXG4gICAgICBNYXhOdW1iZXJPZk1lc3NhZ2VzOiBNYXRoLm1pbihcbiAgICAgICAgTWF0aC5mbG9vcihzZXJ2aWNlTGltaXQucmVtYWluaW5nIC8gTUFYX0dIX1JFUVVFU1RfUEVSX1BBQ0tBR0UpLFxuICAgICAgICAxMFxuICAgICAgKSxcbiAgICB9KVxuICAgIC5wcm9taXNlKCk7XG5cbiAgaWYgKG1lc3NhZ2VzLk1lc3NhZ2VzPy5sZW5ndGgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWVzc2FnZXM6IG1lc3NhZ2VzLk1lc3NhZ2VzLm1hcCgobSkgPT4gKHtcbiAgICAgICAgLi4ubSxcbiAgICAgICAgQm9keTogSlNPTi5wYXJzZShtLkJvZHkgfHwgJ3t9JyksXG4gICAgICB9KSksXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBjb25zb2xlLmxvZygnbm8gbWVzc2FnZXMnKTtcbiAgfVxuICByZXR1cm4geyBzdGF0dXM6ICdOb01vcmVNZXNzYWdlc0xlZnQnIH07XG59O1xuIl19
@@ -67,4 +67,8 @@ export declare class ReleaseNoteFetcher extends Construct {
67
67
  metricRequestInvalidPackageJson(opts?: MetricOptions): Metric;
68
68
  metricChangeLogFetchError(opts?: MetricOptions): Metric;
69
69
  metricChangeLogAllError(opts?: MetricOptions): Metric;
70
+ metricGhRateLimitRemaining(opts?: MetricOptions): Metric;
71
+ metricGhRateLimitUsed(opts?: MetricOptions): Metric;
72
+ metricGhRateLimitLimit(opts?: MetricOptions): Metric;
73
+ private generateGithubRateLimitAlarm;
70
74
  }
@@ -227,6 +227,7 @@ class ReleaseNoteFetcher extends constructs_1.Construct {
227
227
  threshold: 1,
228
228
  treatMissingData: aws_cloudwatch_1.TreatMissingData.NOT_BREACHING,
229
229
  }));
230
+ props.monitoring.addLowSeverityAlarm('Github rate limit', this.generateGithubRateLimitAlarm());
230
231
  props.monitoring.addHighSeverityAlarm('ReleaseNotes Github credential invalid', this.metricInvalidCredentials().createAlarm(this, 'ReleaseNotesInvalidGitHubCredentials', {
231
232
  alarmName: `${this.node.path}/ ReleaseNotes / Invalid GitHub credential`,
232
233
  alarmDescription: [
@@ -313,10 +314,61 @@ class ReleaseNoteFetcher extends constructs_1.Construct {
313
314
  namespace: metricConst.METRICS_NAMESPACE,
314
315
  });
315
316
  }
317
+ metricGhRateLimitRemaining(opts) {
318
+ return new aws_cloudwatch_1.Metric({
319
+ period: cdk.Duration.minutes(5),
320
+ statistic: aws_cloudwatch_1.Statistic.MINIMUM,
321
+ ...opts,
322
+ metricName: metricConst.GhRateLimitsRemaining,
323
+ namespace: metricConst.METRICS_NAMESPACE,
324
+ });
325
+ }
326
+ metricGhRateLimitUsed(opts) {
327
+ return new aws_cloudwatch_1.Metric({
328
+ period: cdk.Duration.minutes(5),
329
+ statistic: aws_cloudwatch_1.Statistic.MAXIMUM,
330
+ ...opts,
331
+ metricName: metricConst.GhLimitsUsed,
332
+ namespace: metricConst.METRICS_NAMESPACE,
333
+ });
334
+ }
335
+ metricGhRateLimitLimit(opts) {
336
+ return new aws_cloudwatch_1.Metric({
337
+ period: cdk.Duration.minutes(5),
338
+ statistic: aws_cloudwatch_1.Statistic.MAXIMUM,
339
+ ...opts,
340
+ metricName: metricConst.GhLimitsLimit,
341
+ namespace: metricConst.METRICS_NAMESPACE,
342
+ });
343
+ }
344
+ generateGithubRateLimitAlarm(threshold = 80) {
345
+ const percentUsed = new aws_cloudwatch_1.MathExpression({
346
+ expression: '100 * rateLimitUsed / rateLimitLimit',
347
+ label: 'GHT Rate limit Percent Used',
348
+ usingMetrics: {
349
+ rateLimitUsed: this.metricGhRateLimitUsed(),
350
+ rateLimitLimit: this.metricGhRateLimitLimit(),
351
+ },
352
+ });
353
+ return percentUsed.createAlarm(this, 'ReleaseNotes Github rate limit', {
354
+ alarmName: `${this.node.path} / Github Rate Limit`,
355
+ alarmDescription: [
356
+ 'Release notes generation is nearing the GitHub rate limit!',
357
+ '',
358
+ `RunBook: ${runbook_url_1.RUNBOOK_URL}`,
359
+ '',
360
+ `Consider either using GitHub application.`,
361
+ ].join('\n'),
362
+ comparisonOperator: aws_cloudwatch_1.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD,
363
+ evaluationPeriods: 2,
364
+ threshold,
365
+ treatMissingData: aws_cloudwatch_1.TreatMissingData.NOT_BREACHING,
366
+ });
367
+ }
316
368
  }
317
369
  exports.ReleaseNoteFetcher = ReleaseNoteFetcher;
318
370
  function stateMachineNameFrom(nodePath) {
319
371
  // Poor man's replace all...
320
372
  return nodePath.split(/[^a-z0-9+!@.()=_'-]+/i).join('.');
321
373
  }
322
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmFja2VuZC9yZWxlYXNlLW5vdGVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUFtQztBQUNuQywrREFNb0M7QUFDcEMsMkNBQTJDO0FBRTNDLG1GQUFzRTtBQUd0RSwyQ0FBMkM7QUFFM0MscURBQXFEO0FBQ3JELHFFQUF5RDtBQUN6RCw2REFBNkQ7QUFDN0QsMkNBQXVDO0FBQ3ZDLCtDQUFxRTtBQUdyRSxtREFBZ0Q7QUFFaEQsbURBSTZCO0FBRTdCLDJDQUEyQztBQUUzQyxxRUFBZ0U7QUFDaEUscUZBQThFO0FBQzlFLG1FQUE4RDtBQWlDOUQ7Ozs7O0dBS0c7QUFDSCxNQUFhLGtCQUFtQixTQUFRLHNCQUFTO0lBa0IvQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQThCO1FBQ3RFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQzNCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUMsdUJBQXVCLENBQUM7UUFDdkQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUM7UUFFL0QsTUFBTSxnQkFBZ0IsR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlELHNFQUFzRTtRQUN0RSxrRUFBa0U7UUFDbEUsb0JBQW9CO1FBQ3BCLE1BQU0sZUFBZSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNuRCxTQUFTLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxtQkFBbUI7WUFDNUMsT0FBTyxFQUFFLFFBQVE7WUFDakIsUUFBUSxFQUFFLGNBQWM7WUFDeEIsWUFBWSxF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bXBvcnQge1xuICBDb21wYXJpc29uT3BlcmF0b3IsXG4gIE1ldHJpYyxcbiAgTWV0cmljT3B0aW9ucyxcbiAgU3RhdGlzdGljLFxuICBUcmVhdE1pc3NpbmdEYXRhLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgKiBhcyBsYW1iZGEgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBTcXNFdmVudFNvdXJjZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEtZXZlbnQtc291cmNlcyc7XG5pbXBvcnQgKiBhcyBzMyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0IHsgSVNlY3JldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zZWNyZXRzbWFuYWdlcic7XG5pbXBvcnQgKiBhcyBzcXMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXNxcyc7XG5pbXBvcnQgeyBJUXVldWUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3FzJztcbmltcG9ydCAqIGFzIHNmbiBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3RlcGZ1bmN0aW9ucyc7XG5pbXBvcnQgeyBKc29uUGF0aCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zJztcbmltcG9ydCAqIGFzIHRhc2tzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zLXRhc2tzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgc3RhdGVNYWNoaW5lVXJsLCBsYW1iZGFGdW5jdGlvblVybCB9IGZyb20gJy4uLy4uL2RlZXAtbGluayc7XG5pbXBvcnQgeyBNb25pdG9yaW5nIH0gZnJvbSAnLi4vLi4vbW9uaXRvcmluZyc7XG5pbXBvcnQgeyBPdmVydmlld0Rhc2hib2FyZCB9IGZyb20gJy4uLy4uL292ZXJ2aWV3LWRhc2hib2FyZCc7XG5pbXBvcnQgeyBSVU5CT09LX1VSTCB9IGZyb20gJy4uLy4uL3J1bmJvb2stdXJsJztcbmltcG9ydCB7IEZlZWRCdWlsZGVyIH0gZnJvbSAnLi4vZmVlZC1idWlsZGVyJztcbmltcG9ydCB7XG4gIFBBQ0tBR0VfS0VZX1NVRkZJWCxcbiAgU1RPUkFHRV9LRVlfUFJFRklYLFxuICBQQUNLQUdFX1JFTEVBU0VfTk9URVNfS0VZX1NVRkZJWCxcbn0gZnJvbSAnLi4vc2hhcmVkL2NvbnN0YW50cyc7XG5cbmltcG9ydCAqIGFzIG1ldHJpY0NvbnN0IGZyb20gJy4vY29uc3RhbnRzJztcblxuaW1wb3J0IHsgR2VuZXJhdGVSZWxlYXNlTm90ZXMgfSBmcm9tICcuL2dlbmVyYXRlLXJlbGVhc2Utbm90ZXMnO1xuaW1wb3J0IHsgR2V0TWVzc2FnZXNGcm9tV29ya2VyUXVldWUgfSBmcm9tICcuL2dldC1tZXNzYWdlcy1mcm9tLXdvcmtlci1xdWV1ZSc7XG5pbXBvcnQgeyBSZWxlYXNlTm90ZXNUcmlnZ2VyIH0gZnJvbSAnLi9yZWxlYXNlLW5vdGVzLXRyaWdnZXInO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIFJlbGVhc2VOb3RlRmV0Y2hlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWxlYXNlTm90ZUZldGNoZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgcGFja2FnZSBkYXRhIHN0b3JhZ2UgYnVja2V0LCB3aGVyZSByZWxlYXNlLW5vdGVzLm1kIHdpbGwgYmUgc3RvcmVkIGFsb25nIHdpdGggb3RoZXIgYXNzZXRzXG4gICAqL1xuICByZWFkb25seSBidWNrZXQ6IHMzLklCdWNrZXQ7XG5cbiAgLyoqXG4gICAqIEdpdEh1YiBjcmVkZW50aWFsIHVzZWQgdG8gd2hlbiBtYWtpbmcgcmVxdWVzdCB0byBHaXRIdWIgQVBJIHRvIHJldHJpZXZlIGNoYW5nZWxvZ3MuXG4gICAqIEBkZWZhdWx0IC0gZG8gbm90IGZldGNoIGNoYW5nZWxvZ3MgZnJvbSBHaXRIdWJcbiAgICovXG4gIHJlYWRvbmx5IGdpdEh1YkNyZWRlbnRpYWxzU2VjcmV0PzogSVNlY3JldDtcblxuICAvKipcbiAgICogVGhlIG1vbml0b3JpbmcgaGFuZGxlciB0byByZWdpc3RlciBhbGFybXMgd2l0aC5cbiAgICovXG4gIHJlYWRvbmx5IG1vbml0b3Jpbmc6IE1vbml0b3Jpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBvdmVydmlldyBkYXNoYm9hcmQgdG8gcmVnaXN0ZXIgZGFzaGJvYXJkcyB3aXRoLlxuICAgKi9cbiAgcmVhZG9ubHkgb3ZlcnZpZXdEYXNoYm9hcmQ6IE92ZXJ2aWV3RGFzaGJvYXJkO1xuXG4gIC8qKlxuICAgKiBUaGUgbGFtYmRhIGZ1bmN0aW9uIHRoYXQgdXBkYXRlcyB0aGUgUlNTL0FUT00gZmVlZFxuICAgKi9cbiAgcmVhZG9ubHkgZmVlZEJ1aWxkZXI6IEZlZWRCdWlsZGVyO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBTdGVwRnVuY3Rpb24gd2hpY2ggd2lsbCBnZW5lcmF0ZSBjaGFuZ2UtbG9nIGZpbGUgZm9yIHRoZSBwYWNrYWdlcyB0aGF0IGFyZSBhZGRlZFxuICogdG8gdGhlIFJlbGVhc2VOb3RlRmV0Y2hlciBRdWV1ZS4gVG8gZ2VuZXJhdGUgdGhlIHJlbGVhc2Ugbm90ZXMsIHRoZSBmZXRjaGVyIHB1bGxzIGRhdGEgZnJvbVxuICogR2l0SHViIChyZWxlYXNlIHRhZywgcmVsZWFzZXMgYW5kIGNoYW5nZWxvZy5tZCBmaWxlKS4gV2hlbiB0aGUgR2l0SHViIGNyZWRlbnRpYWxzIGFyZSBwYXNzZWQsXG4gKiB0aGUgZmV0Y2hlciByZXNwZWN0cyBzZXJ2aWNlIHJhdGUgbGltaXRzIG9mIEdpdEh1YiBieSBwYXVzaW5nIHRoZSBnZW5lcmF0aW9uIG9mIHJlbGVhc2Ugbm90ZXNcbiAqL1xuZXhwb3J0IGNsYXNzIFJlbGVhc2VOb3RlRmV0Y2hlciBleHRlbmRzIENvbnN0cnVjdCB7XG4gIC8qKlxuICAgKiBUaGUgcXVldWUgd2hlcmUgcGFja2FnZXMgd2hlcmUgdGhlIHBhY2thZ2VzIHdpbGwgYmUgYWRkZWQgdG8gZ2VuZXJhdGUgcmVsZWFzZSBub3Rlc1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHF1ZXVlOiBJUXVldWU7XG4gIHByaXZhdGUgcmVhZG9ubHkgYnVja2V0OiBzMy5JQnVja2V0O1xuICBwcml2YXRlIHJlYWRvbmx5IGdpdGh1YlRva2VuU2VjcmV0PzogSVNlY3JldDtcbiAgLyoqXG4gICAqIExhbWJkYSBmdW5jdGlvbiB0aGF0IHVwZGF0ZSB0aGUgUlNTL0F0b20gZmVlZFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHVwZGF0ZUZlZWRGdW5jdGlvbjogbGFtYmRhLkZ1bmN0aW9uO1xuICBwdWJsaWMgcmVhZG9ubHkgd29ya2VyUXVldWU6IElRdWV1ZTtcbiAgcHVibGljIHJlYWRvbmx5IHdvcmtlckRMUTogSVF1ZXVlO1xuXG4gIHB1YmxpYyByZWFkb25seSBzdGF0ZU1hY2hpbmU6IHNmbi5JU3RhdGVNYWNoaW5lO1xuICBwdWJsaWMgcmVhZG9ubHkgcmVsZWFzZU5vdGVzVHJpZ2dlckxhbWJkYTogUmVsZWFzZU5vdGVzVHJpZ2dlcjtcbiAgcHVibGljIHJlYWRvbmx5IGdlbmVyYXRlUmVsZWFzZU5vdGVzTGFtYmRhOiBHZW5lcmF0ZVJlbGVhc2VOb3RlcztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUmVsZWFzZU5vdGVGZXRjaGVyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIHRoaXMuYnVja2V0ID0gcHJvcHMuYnVja2V0O1xuICAgIHRoaXMuZ2l0aHViVG9rZW5TZWNyZXQgPSBwcm9wcy5naXRIdWJDcmVkZW50aWFsc1NlY3JldDtcbiAgICB0aGlzLnVwZGF0ZUZlZWRGdW5jdGlvbiA9IHByb3BzLmZlZWRCdWlsZGVyLnVwZGF0ZUZlZWRGdW5jdGlvbjtcblxuICAgIGNvbnN0IHN0YXRlTWFjaGluZU5hbWUgPSBzdGF0ZU1hY2hpbmVOYW1lRnJvbSh0aGlzLm5vZGUucGF0aCk7XG4gICAgLy8gVGhlIHN0YXRlIG1hY2hpbmUgd2lsbCByZS1ydW4gaXRzZWxmIGFmdGVyIGZldGNoaW5nIGEgcmVsZWFzZSBub3Rlc1xuICAgIC8vIGZvciBhIGZldyBBUElzLiBGb3IgdGhlIHN0YXRlIG1hY2hpbmUgdG8gc2VsZiBleGVjdXRlIEFSTiBuZWVkc1xuICAgIC8vIHRvIGJlIHByZWRpY3RhYmxlXG4gICAgY29uc3Qgc3RhdGVNYWNoaW5lQXJuID0gY2RrLlN0YWNrLm9mKHRoaXMpLmZvcm1hdEFybih7XG4gICAgICBhcm5Gb3JtYXQ6IGNkay5Bcm5Gb3JtYXQuQ09MT05fUkVTT1VSQ0VfTkFNRSxcbiAgICAgIHNlcnZpY2U6ICdzdGF0ZXMnLFxuICAgICAgcmVzb3VyY2U6ICdzdGF0ZU1hY2hpbmUnLFxuICAgICAgcmVzb3VyY2VOYW1lOiBzdGF0ZU1hY2hpbmVOYW1lLFxuICAgIH0pO1xuXG4gICAgdGhpcy53b3JrZXJETFEgPSBuZXcgc3FzLlF1ZXVlKHRoaXMsICdSZWxlYXNlTm90ZXNGZXRjaFdvcmtlclF1ZXVlRExRJywge1xuICAgICAgdmlzaWJpbGl0eVRpbWVvdXQ6IGNkay5EdXJhdGlvbi5zZWNvbmRzKDMwMCksXG4gICAgICBlbmNyeXB0aW9uOiBzcXMuUXVldWVFbmNyeXB0aW9uLktNU19NQU5BR0VELFxuICAgIH0pO1xuXG4gICAgcHJvcHMub3ZlcnZpZXdEYXNoYm9hcmQuYWRkRExRTWV0cmljVG9EYXNoYm9hcmQoXG4gICAgICAnUmVsZWFzZU5vdGVzV29ya2VyRExRJyxcbiAgICAgIHRoaXMud29ya2VyRExRXG4gICAgKTtcblxuICAgIC8vIHdvcmtlciBxdWV1ZSBpcyB0aGUgcXVldWUgZnJvbSB3aGljaCBzdGVwIGZ1bmN0aW9uIHdpbGwgcmV0cmlldmUgbWVzc2FnZXMgZnJvbVxuICAgIHRoaXMud29ya2VyUXVldWUgPSBuZXcgc3FzLlF1ZXVlKHRoaXMsICdSZWxlYXNlTm90ZXNGZXRjaFdvcmtlclF1ZXVlJywge1xuICAgICAgdmlzaWJpbGl0eVRpbWVvdXQ6IGNkay5EdXJhdGlvbi5zZWNvbmRzKDMwMCksXG4gICAgICBkZWFkTGV0dGVyUXVldWU6IHtcbiAgICAgICAgbWF4UmVjZWl2ZUNvdW50OiAxMCxcbiAgICAgICAgcXVldWU6IHRoaXMud29ya2VyRExRLFxuICAgICAgfSxcbiAgICAgIGVuY3J5cHRpb246IHNxcy5RdWV1ZUVuY3J5cHRpb24uS01TX01BTkFHRUQsXG4gICAgfSk7XG5cbiAgICAvLyBGZXRjaCBxdWV1ZSBpcyB3aGVyZSBqb2IgZ2V0cyBhZGRlZCwgYW5kIGEgbGFtYmRhIGZ1bmN0aW9uXG4gICAgLy8gY2hlY2tzIGFuZCBzZWUgaWYgU3RhdGVNYWNoaW5lIGlzIHJ1bm5pbmcgYW5kIGlmIGl0IGlzIG5vdCB0aGVuXG4gICAgLy8ga2lja3Mgb2ZmIHRoZSBzdGF0ZSBtYWNoaW5lIGFmdGVyIGFkZGluZyB0aGUgam9iIHRvIHdvcmtlciBxdWV1ZVxuICAgIHRoaXMucXVldWUgPSBuZXcgc3FzLlF1ZXVlKHRoaXMsICdDaGFuZ2VMb2dGZXRjaFF1ZXVlJywge1xuICAgICAgcXVldWVOYW1lOiAnQ2hhbmdlTG9nRmV0Y2hRdWV1ZScsXG4gICAgICB2aXNpYmlsaXR5VGltZW91dDogY2RrLkR1cmF0aW9uLnNlY29uZHMoMzAwKSxcbiAgICAgIGVuY3J5cHRpb246IHNxcy5RdWV1ZUVuY3J5cHRpb24uS01TX01BTkFHRUQsXG4gICAgfSk7XG5cbiAgICB0aGlzLnJlbGVhc2VOb3Rlc1RyaWdnZXJMYW1iZGEgPSBuZXcgUmVsZWFzZU5vdGVzVHJpZ2dlcihcbiAgICAgIHRoaXMsXG4gICAgICAnUmVsZWFzZU5vdGVzVHJpZ2dlcicsXG4gICAgICB7XG4gICAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgICAgU0ZOX0FSTjogc3RhdGVNYWNoaW5lQXJuLFxuICAgICAgICAgIFdPUktFUl9RVUVVRV9VUkw6IHRoaXMud29ya2VyUXVldWUucXVldWVVcmwsXG4gICAgICAgIH0sXG4gICAgICAgIHRpbWVvdXQ6IGNkay5EdXJhdGlvbi5taW51dGVzKDEpLFxuICAgICAgfVxuICAgICk7XG5cbiAgICBwcm9wcy5vdmVydmlld0Rhc2hib2FyZC5hZGRDb25jdXJyZW50RXhlY3V0aW9uTWV0cmljVG9EYXNoYm9hcmQoXG4gICAgICB0aGlzLnJlbGVhc2VOb3Rlc1RyaWdnZXJMYW1iZGEsXG4gICAgICAncmVsZWFzZU5vdGVzVHJpZ2dlcidcbiAgICApO1xuXG4gICAgdGhpcy53b3JrZXJRdWV1ZS5ncmFudFNlbmRNZXNzYWdlcyh0aGlzLnJlbGVhc2VOb3Rlc1RyaWdnZXJMYW1iZGEpO1xuICAgIHRoaXMucmVsZWFzZU5vdGVzVHJpZ2dlckxhbWJkYS5ncmFudFByaW5jaXBhbC5hZGRUb1ByaW5jaXBhbFBvbGljeShcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogWydzdGF0ZXM6TGlzdEV4ZWN1dGlvbnMnLCAnc3RhdGVzOlN0YXJ0RXhlY3V0aW9uJ10sXG4gICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgcmVzb3VyY2VzOiBbc3RhdGVNYWNoaW5lQXJuXSxcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IGV2ZW50U291cmNlID0gbmV3IFNxc0V2ZW50U291cmNlKHRoaXMucXVldWUpO1xuICAgIHRoaXMucmVsZWFzZU5vdGVzVHJpZ2dlckxhbWJkYS5hZGRFdmVudFNvdXJjZShldmVudFNvdXJjZSk7XG5cbiAgICB0aGlzLmdlbmVyYXRlUmVsZWFzZU5vdGVzTGFtYmRhID0gbmV3IEdlbmVyYXRlUmVsZWFzZU5vdGVzKFxuICAgICAgdGhpcyxcbiAgICAgICdHaXRodWJDaGFuZ2Vsb2dGZXRjaGVyJyxcbiAgICAgIHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZWxlYXNlTm90ZXMgZ2VuZXJhdG9yJyxcbiAgICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICAuLi4odGhpcy5naXRodWJUb2tlblNlY3JldFxuICAgICAgICAgICAgPyB7IEdJVEhVQl9UT0tFTjogdGhpcy5naXRodWJUb2tlblNlY3JldC5zZWNyZXRWYWx1ZS50b1N0cmluZygpIH1cbiAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgIEJVQ0tFVF9OQU1FOiB0aGlzLmJ1Y2tldC5idWNrZXROYW1lLFxuICAgICAgICB9LFxuICAgICAgICB0aW1lb3V0OiBjZGsuRHVyYXRpb24ubWludXRlcygxMCksXG4gICAgICAgIG1lbW9yeVNpemU6IDEwMjQsXG4gICAgICB9XG4gICAgKTtcbiAgICBwcm9wcy5vdmVydmlld0Rhc2hib2FyZC5hZGRDb25jdXJyZW50RXhlY3V0aW9uTWV0cmljVG9EYXNoYm9hcmQoXG4gICAgICB0aGlzLmdlbmVyYXRlUmVsZWFzZU5vdGVzTGFtYmRhLFxuICAgICAgJ3JlbGVhc2VOb3RlR2VuZXJhdGVGb3JQYWNrYWdlJ1xuICAgICk7XG5cbiAgICBjb25zdCByZXN0YXJ0RXhlY3V0aW9uID0gbmV3IHRhc2tzLlN0ZXBGdW5jdGlvbnNTdGFydEV4ZWN1dGlvbihcbiAgICAgIHRoaXMsXG4gICAgICAnQ29udGludWUgYXMgbmV3JyxcbiAgICAgIHtcbiAgICAgICAgYXNzb2NpYXRlV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgc3RhdGVNYWNoaW5lOiBzZm4uU3RhdGVNYWNoaW5lLmZyb21TdGF0ZU1hY2hpbmVBcm4oXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICAnVGhpc1N0YXRlTWFjaGluZScsXG4gICAgICAgICAgc3RhdGVNYWNoaW5lQXJuXG4gICAgICAgICksXG4gICAgICAgIGludGVncmF0aW9uUGF0dGVybjogc2ZuLkludGVncmF0aW9uUGF0dGVybi5SRVFVRVNUX1JFU1BPTlNFLFxuICAgICAgICByZXN1bHRQYXRoOiBKc29uUGF0aC5ESVNDQVJELFxuICAgICAgfVxuICAgIClcbiAgICAgIC5hZGRSZXRyeSh7IGVycm9yczogWydTdGVwRnVuY3Rpb25zLkV4ZWN1dGlvbkxpbWl0RXhjZWVkZWQnXSB9KVxuICAgICAgLm5leHQobmV3IHNmbi5TdWNjZWVkKHRoaXMsICdkb25lJywgeyBjb21tZW50OiAnTmV3IGluc3RhbmNlIHN0YXJ0ZWQnIH0pKTtcblxuICAgIGNvbnN0IGdldFRhc2tzRnJvbVdvcmtlclF1ZXVlID0gbmV3IEdldE1lc3NhZ2VzRnJvbVdvcmtlclF1ZXVlKFxuICAgICAgdGhpcyxcbiAgICAgICdSZWxlYXNlTm90ZVRhc2tzJyxcbiAgICAgIHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZWxlYXNlTm90ZXMgZ2V0IG1lc3NhZ2UgZnJvbSB0aGUgd29ya2VyIHF1ZXVlJyxcblxuICAgICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICAgIC4uLih0aGlzLmdpdGh1YlRva2VuU2VjcmV0XG4gICAgICAgICAgICA/IHsgR0lUSFVCX1RPS0VOOiB0aGlzLmdpdGh1YlRva2VuU2VjcmV0LnNlY3JldFZhbHVlLnRvU3RyaW5nKCkgfVxuICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgU1FTX1FVRVVFX1VSTDogdGhpcy53b3JrZXJRdWV1ZS5xdWV1ZVVybCxcbiAgICAgICAgfSxcbiAgICAgICAgdGltZW91dDogY2RrLkR1cmF0aW9uLm1pbnV0ZXMoNSksXG4gICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMuYnVja2V0LmdyYW50UmVhZChcbiAgICAgIHRoaXMuZ2VuZXJhdGVSZWxlYXNlTm90ZXNMYW1iZGEsXG4gICAgICBgJHtTVE9SQUdFX0tFWV9QUkVGSVh9KiR7UEFDS0FHRV9LRVlfU1VGRklYfWBcbiAgICApO1xuICAgIHRoaXMuYnVja2V0LmdyYW50UmVhZFdyaXRlKFxuICAgICAgdGhpcy5nZW5lcmF0ZVJlbGVhc2VOb3Rlc0xhbWJkYSxcbiAgICAgIGAke1NUT1JBR0VfS0VZX1BSRUZJWH0qJHtQQUNLQUdFX1JFTEVBU0VfTk9URVNfS0VZX1NVRkZJWH1gXG4gICAgKTtcblxuICAgIGNvbnN0IGdlbmVyYXRlUmVsZWFzZU5vdGVzRm9yRWFjaFBhY2thZ2UgPSBuZXcgdGFza3MuTGFtYmRhSW52b2tlKFxuICAgICAgdGhpcyxcbiAgICAgICdHZW5lcmF0ZSBSZWxlYXNlIG5vdGVzIGZvciBhIHBhY2thZ2UnLFxuICAgICAge1xuICAgICAgICBsYW1iZGFGdW5jdGlvbjogdGhpcy5nZW5lcmF0ZVJlbGVhc2VOb3Rlc0xhbWJkYSxcbiAgICAgICAgcGF5bG9hZFJlc3BvbnNlT25seTogdHJ1ZSxcbiAgICAgICAgaW5wdXRQYXRoOiAnJC5Cb2R5JyxcbiAgICAgICAgcmVzdWx0UGF0aDogJyQucmVzdWx0JyxcbiAgICAgIH1cbiAgICApLm5leHQoXG4gICAgICBuZXcgc2ZuLkNob2ljZSh0aGlzLCAnV2l0aCByZXN1bHQnKVxuICAgICAgICAud2hlbihcbiAgICAgICAgICBzZm4uQ29uZGl0aW9uLnN0cmluZ0VxdWFscygnJC5yZXN1bHQuZXJyb3InLCAnUmVxdWVzdFF1b3RhRXhoYXVzdGVkJyksXG4gICAgICAgICAgbmV3IHRhc2tzLkNhbGxBd3NTZXJ2aWNlKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICdNYWtlIHRoZSBtZXNzYWdlIHZpc2libGUgYWdhaW4gZm9yIG5leHQgaXRlcmF0aW9uJyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc2VydmljZTogJ3NxcycsXG4gICAgICAgICAgICAgIGNvbW1lbnQ6XG4gICAgICAgICAgICAgICAgJ01ha2UgdGhlIG1lc3NhZ2UgdmlzaWJsZSBhZ2FpbiBzbyBuZXh0IGl0ZXJhdGlvbiB3aWxsIGNvbnN1bWUgaXQnLFxuICAgICAgICAgICAgICBhY3Rpb246ICdjaGFuZ2VNZXNzYWdlVmlzaWJpbGl0eScsXG4gICAgICAgICAgICAgIGlhbVJlc291cmNlczogW3RoaXMud29ya2VyUXVldWUucXVldWVBcm5dLFxuICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICAgICAgUXVldWVVcmw6IHRoaXMud29ya2VyUXVldWUucXVldWVVcmwsXG4gICAgICAgICAgICAgICAgUmVjZWlwdEhhbmRsZTogSnNvblBhdGguc3RyaW5nQXQoJyQuUmVjZWlwdEhhbmRsZScpLFxuICAgICAgICAgICAgICAgIFZpc2liaWxpdHlUaW1lb3V0OiAwLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICByZXN1bHRQYXRoOiAnJC5lcnJvckhhbmRsZXInLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAud2hlbihcbiAgICAgICAgICBzZm4uQ29uZGl0aW9uLnN0cmluZ0VxdWFscygnJC5yZXN1bHQuZXJyb3InLCAnSW52YWxpZENyZWRlbnRpYWxzJyksXG4gICAgICAgICAgbmV3IHRhc2tzLkNhbGxBd3NTZXJ2aWNlKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICdTZW5kIG1lc3NhZ2UgdG8gRExRIHdoZW4gY3JlZGVudGlhbHMgYXJlIGludmFsaWQnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzZXJ2aWNlOiAnc3FzJyxcbiAgICAgICAgICAgICAgY29tbWVudDpcbiAgICAgICAgICAgICAgICAnR2l0aHViIGNyZWRlbnRpYWxzIHBhc3NlZCBpcyBpbnZhbGlkLiBSZXRyeWluZyB3b250IGhlbHAuIE1vdmluZyB0byBETFEnLFxuICAgICAgICAgICAgICBhY3Rpb246ICdzZW5kTWVzc2FnZScsXG4gICAgICAgICAgICAgIGlhbVJlc291cmNlczogW3RoaXMud29ya2VyRExRLnF1ZXVlQXJuXSxcbiAgICAgICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgICAgIFF1ZXVlVXJsOiB0aGlzLndvcmtlckRMUS5xdWV1ZVVybCxcbiAgICAgICAgICAgICAgICBNZXNzYWdlQm9keTogSnNvblBhdGguanNvblRvU3RyaW5nKEpzb25QYXRoLnN0cmluZ0F0KCckLkJvZHknKSksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHJlc3VsdFBhdGg6ICckLmVycm9ySGFuZGxlcicsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKS5uZXh0KFxuICAgICAgICAgICAgbmV3IHRhc2tzLkNhbGxBd3NTZXJ2aWNlKFxuICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAncmVtb3ZlIHRoZSBtZXNzYWdlIGZyb20gU1FTIGFmdGVyIHNlbmRpbmcgdG8gRExRJyxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNlcnZpY2U6ICdzcXMnLFxuICAgICAgICAgICAgICAgIGFjdGlvbjogJ2RlbGV0ZU1lc3NhZ2UnLFxuICAgICAgICAgICAgICAgIGlhbVJlc291cmNlczogW3RoaXMud29ya2VyUXVldWUucXVldWVBcm5dLFxuICAgICAgICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgICAgICAgIFF1ZXVlVXJsOiB0aGlzLndvcmtlclF1ZXVlLnF1ZXVlVXJsLFxuICAgICAgICAgICAgICAgICAgUmVjZWlwdEhhbmRsZTogSnNvblBhdGguc3RyaW5nQXQoJyQuUmVjZWlwdEhhbmRsZScpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVzdWx0UGF0aDogJyQuZXJyb3JIYW5kbGVyJyxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAub3RoZXJ3aXNlKFxuICAgICAgICAgIG5ldyB0YXNrcy5DYWxsQXdzU2VydmljZSh0aGlzLCAncmVtb3ZlIHRoZSBtZXNzYWdlIGZyb20gU1FTJywge1xuICAgICAgICAgICAgc2VydmljZTogJ3NxcycsXG4gICAgICAgICAgICBhY3Rpb246ICdkZWxldGVNZXNzYWdlJyxcbiAgICAgICAgICAgIGlhbVJlc291cmNlczogW3RoaXMud29ya2VyUXVldWUucXVldWVBcm5dLFxuICAgICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgICBRdWV1ZVVybDogdGhpcy53b3JrZXJRdWV1ZS5xdWV1ZVVybCxcbiAgICAgICAgICAgICAgUmVjZWlwdEhhbmRsZTogSnNvblBhdGguc3RyaW5nQXQoJyQuUmVjZWlwdEhhbmRsZScpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VsdFBhdGg6ICckLmNsZWFudXAnLFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICApO1xuXG4gICAgY29uc3QgdXBkYXRlRmVlZFRhc2tXaGVuV2FpdGluZ0ZvckdIUmF0ZUxpbWl0ID0gbmV3IHRhc2tzLkxhbWJkYUludm9rZShcbiAgICAgIHRoaXMsXG4gICAgICAndXBkYXRlRmVlZFRhc2tXaGVuV2FpdGluZ0ZvckdIUmF0ZUxpbWl0JyxcbiAgICAgIHtcbiAgICAgICAgbGFtYmRhRnVuY3Rpb246IHRoaXMudXBkYXRlRmVlZEZ1bmN0aW9uLFxuICAgICAgICBjb21tZW50OiAnVXBkYXRlIHRoZSBSU1MvQXRvbSBmZWVkJyxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uc3QgdXBkYXRlRmVlZEFmdGVyUHJvY2Vzc2luZyA9IG5ldyB0YXNrcy5MYW1iZGFJbnZva2UoXG4gICAgICB0aGlzLFxuICAgICAgJ3VwZGF0ZUZlZWRBZnRlclByb2Nlc3NpbmcnLFxuICAgICAge1xuICAgICAgICBsYW1iZGFGdW5jdGlvbjogdGhpcy51cGRhdGVGZWVkRnVuY3Rpb24sXG4gICAgICAgIGNvbW1lbnQ6XG4gICAgICAgICAgJ1VwZGF0ZSB0aGUgUlNTL0F0b20gZmVlZCBhZnRlciBwcm9jZXNzaW5nIGFsbCB0aGUgaXRlbXMgaW4gdGhlIHF1ZXVlJyxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uc3QgZ2V0VGFza3NGcm9tUXVldWUgPSBuZXcgdGFza3MuTGFtYmRhSW52b2tlKFxuICAgICAgdGhpcyxcbiAgICAgICdjaGVjayBzZXJ2aWNlIHF1b3RhIGFuZCBnZXQgdGFza3MgZnJvbSB3b3JrZXIgcXVldWUnLFxuICAgICAge1xuICAgICAgICBsYW1iZGFGdW5jdGlvbjogZ2V0VGFza3NGcm9tV29ya2VyUXVldWUsXG4gICAgICAgIHBheWxvYWRSZXNwb25zZU9ubHk6IHRydWUsXG4gICAgICB9XG4gICAgKS5uZXh0KFxuICAgICAgbmV3IHNmbi5DaG9pY2UodGhpcywgJ3dpdGggcmVzdWx0JylcbiAgICAgICAgLndoZW4oXG4gICAgICAgICAgc2ZuLkNvbmRpdGlvbi5pc1ByZXNlbnQoJyQud2FpdFVudGlsJyksXG4gICAgICAgICAgbmV3IHNmbi5QYXJhbGxlbCh0aGlzLCAnd2FpdCBhbmQgdXBkYXRlJylcbiAgICAgICAgICAgIC5icmFuY2goXG4gICAgICAgICAgICAgIG5ldyBzZm4uV2FpdCh0aGlzLCAnd2FpdCB0aWxsIHNlcnZpY2UgcXVvdGEgcmVwbGVuaXNoZXMnLCB7XG4gICAgICAgICAgICAgICAgdGltZTogc2ZuLldhaXRUaW1lLnRpbWVzdGFtcFBhdGgoJyQud2FpdFVudGlsJyksXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICB1cGRhdGVGZWVkVGFza1doZW5XYWl0aW5nRm9yR0hSYXRlTGltaXRcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5uZXh0KHJlc3RhcnRFeGVjdXRpb24pXG4gICAgICAgIClcbiAgICAgICAgLndoZW4oXG4gICAgICAgICAgc2ZuLkNvbmRpdGlvbi5pc1ByZXNlbnQoJyQuZXJyb3IuTWF4Q29uY3VycmVudEV4ZWN1dGlvbkVycm9yJyksXG4gICAgICAgICAgbmV3IHNmbi5TdWNjZWVkKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICdTdG9wcGluZyB0aGlzIGV4ZWN1dGlvbiBzaW5jZSBNYXggY29uY3VycmVudCBleGVjdXRpb24gaGFzIHJlYWNoZWQnXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICAgIC53aGVuKFxuICAgICAgICAgIHNmbi5Db25kaXRpb24uaXNQcmVzZW50KCckLm1lc3NhZ2VzJyksXG4gICAgICAgICAgbmV3IHNmbi5NYXAodGhpcywgJ3dpdGggZWFjaCBwYWNrYWdlJywge1xuICAgICAgICAgICAgY29tbWVudDogJ0ZldGNoIHJlbGVhc2Ugbm90ZXMgZm9yIGVhY2ggcGFja2FnZScsXG4gICAgICAgICAgICBpdGVtc1BhdGg6ICckLm1lc3NhZ2VzJyxcbiAgICAgICAgICB9KS5pdGVyYXRvcihnZW5lcmF0ZVJlbGVhc2VOb3Rlc0ZvckVhY2hQYWNrYWdlKVxuICAgICAgICApXG4gICAgICAgIC5vdGhlcndpc2UoXG4gICAgICAgICAgdXBkYXRlRmVlZEFmdGVyUHJvY2Vzc2luZy5uZXh0KG5ldyBzZm4uU3VjY2VlZCh0aGlzLCAnYWxsIGRvbmUnKSlcbiAgICAgICAgKVxuICAgICAgICAuYWZ0ZXJ3YXJkcygpXG4gICAgICAgIC5uZXh0KHJlc3RhcnRFeGVjdXRpb24pXG4gICAgKTtcblxuICAgIHRoaXMuc3RhdGVNYWNoaW5lID0gbmV3IHNmbi5TdGF0ZU1hY2hpbmUodGhpcywgJ1N0YXRlTWFjaGluZScsIHtcbiAgICAgIGRlZmluaXRpb246IGdldFRhc2tzRnJvbVF1ZXVlLFxuICAgICAgc3RhdGVNYWNoaW5lTmFtZSxcbiAgICAgIHRpbWVvdXQ6IGNkay5EdXJhdGlvbi5kYXlzKDEpLFxuICAgICAgdHJhY2luZ0VuYWJsZWQ6IHRydWUsXG4gICAgfSk7XG5cbiAgICBnZXRUYXNrc0Zyb21Xb3JrZXJRdWV1ZS5hZGRFbnZpcm9ubWVudChcbiAgICAgICdTVEVQX0ZVTkNUSU9OX0FSTicsXG4gICAgICBzdGF0ZU1hY2hpbmVBcm5cbiAgICApO1xuXG4gICAgZ2V0VGFza3NGcm9tV29ya2VyUXVldWUuZ3JhbnRQcmluY2lwYWwuYWRkVG9QcmluY2lwYWxQb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFsnc3RhdGVzOkxpc3RFeGVjdXRpb25zJ10sXG4gICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgcmVzb3VyY2VzOiBbc3RhdGVNYWNoaW5lQXJuXSxcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLndvcmtlclF1ZXVlLmdyYW50Q29uc3VtZU1lc3NhZ2VzKGdldFRhc2tzRnJvbVdvcmtlclF1ZXVlKTtcblxuICAgIHByb3BzLm1vbml0b3JpbmcuYWRkSGlnaFNldmVyaXR5QWxhcm0oXG4gICAgICAnUmVsZWFzZU5vdGVzIGdlbmVyYXRpb24gRmFpbHVyZScsXG4gICAgICB0aGlzLnN0YXRlTWFjaGluZVxuICAgICAgICAubWV0cmljRmFpbGVkKClcbiAgICAgICAgLmNyZWF0ZUFsYXJtKHRoaXMsICdSZWxlYXNlTm90ZXNHZW5lcmF0aW9uRmFpbHVyZScsIHtcbiAgICAgICAgICBhbGFybU5hbWU6IGAke3RoaXMuc3RhdGVNYWNoaW5lLm5vZGUucGF0aH0gLyBGYWlsdXJlYCxcbiAgICAgICAgICBhbGFybURlc2NyaXB0aW9uOiBbXG4gICAgICAgICAgICAnUmVsZWFzZSBub3RlcyBnZW5lcmF0aW9uIHN0ZXAgZnVuY3Rpb24gaXMgZmFpbGluZyEnLFxuICAgICAgICAgICAgJycsXG4gICAgICAgICAgICBgUnVuQm9vazogJHtSVU5CT09LX1VSTH1gLFxuICAgICAgICAgICAgJycsXG4gICAgICAgICAgICBgRGlyZWN0IGxpbmsgdG8gdGhlIGZ1bmN0aW9uOiAke3N0YXRlTWFjaGluZVVybChcbiAgICAgICAgICAgICAgdGhpcy5zdGF0ZU1hY2hpbmVcbiAgICAgICAgICAgICl9YCxcbiAgICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjpcbiAgICAgICAgICAgIENvbXBhcmlzb25PcGVyYXRvci5HUkVBVEVSX1RIQU5fT1JfRVFVQUxfVE9fVEhSRVNIT0xELFxuICAgICAgICAgIGV2YWx1YXRpb25QZXJpb2RzOiAyLFxuICAgICAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgICAgICB0cmVhdE1pc3NpbmdEYXRhOiBUcmVhdE1pc3NpbmdEYXRhLk5PVF9CUkVBQ0hJTkcsXG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIHByb3BzLm1vbml0b3JpbmcuYWRkTG93U2V2ZXJpdHlBbGFybShcbiAgICAgICdSZWxlYXNlTm90ZXMgdHJpZ2dlciBmYWlsdXJlJyxcbiAgICAgIHRoaXMucmVsZWFzZU5vdGVzVHJpZ2dlckxhbWJkYVxuICAgICAgICAubWV0cmljRXJyb3JzKClcbiAgICAgICAgLmNyZWF0ZUFsYXJtKHRoaXMsICdSZWxlYXNlTm90ZXNUcmlnZ2VyRmFpbHVyZScsIHtcbiAgICAgICAgICBhbGFybU5hbWU6IGAke3RoaXMucmVsZWFzZU5vdGVzVHJpZ2dlckxhbWJkYS5ub2RlLnBhdGh9IC8gRmFpbHVyZWAsXG4gICAgICAgICAgYWxhcm1EZXNjcmlwdGlvbjogW1xuICAgICAgICAgICAgJ1JlbGVhc2Ugbm90ZXMgZ2VuZXJhdGlvbiB0cmlnZ2VyIGZ1bmN0aW9uIGlzIGZhaWxpbmchJyxcbiAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgYFJ1bkJvb2s6ICR7UlVOQk9PS19VUkx9YCxcbiAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgYERpcmVjdCBsaW5rIHRvIHRoZSBmdW5jdGlvbjogJHtsYW1iZGFGdW5jdGlvblVybChcbiAgICAgICAgICAgICAgdGhpcy5yZWxlYXNlTm90ZXNUcmlnZ2VyTGFtYmRhXG4gICAgICAgICAgICApfWAsXG4gICAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgICBjb21wYXJpc29uT3BlcmF0b3I6XG4gICAgICAgICAgICBDb21wYXJpc29uT3BlcmF0b3IuR1JFQVRFUl9USEFOX09SX0VRVUFMX1RPX1RIUkVTSE9MRCxcbiAgICAgICAgICBldmFsdWF0aW9uUGVyaW9kczogMixcbiAgICAgICAgICB0aHJlc2hvbGQ6IDEsXG4gICAgICAgICAgdHJlYXRNaXNzaW5nRGF0YTogVHJlYXRNaXNzaW5nRGF0YS5OT1RfQlJFQUNISU5HLFxuICAgICAgICB9KVxuICAgICk7XG5cbiAgICBwcm9wcy5tb25pdG9yaW5nLmFkZEhpZ2hTZXZlcml0eUFsYXJtKFxuICAgICAgJ1JlbGVhc2VOb3RlcyBHaXRodWIgY3JlZGVudGlhbCBpbnZhbGlkJyxcbiAgICAgIHRoaXMubWV0cmljSW52YWxpZENyZWRlbnRpYWxzKCkuY3JlYXRlQWxhcm0oXG4gICAgICAgIHRoaXMsXG4gICAgICAgICdSZWxlYXNlTm90ZXNJbnZhbGlkR2l0SHViQ3JlZGVudGlhbHMnLFxuICAgICAgICB7XG4gICAgICAgICAgYWxhcm1OYW1lOiBgJHt0aGlzLm5vZGUucGF0aH0vIFJlbGVhc2VOb3RlcyAvIEludmFsaWQgR2l0SHViIGNyZWRlbnRpYWxgLFxuICAgICAgICAgIGFsYXJtRGVzY3JpcHRpb246IFtcbiAgICAgICAgICAgICdSZWxlYXNlIG5vdGVzIGdlbmVyYXRpb24gaXMgZmFpbGluZyBkdWUgdG8gSW52YWxpZCBHaXRIdWIgdG9rZW4nLFxuICAgICAgICAgICAgJycsXG4gICAgICAgICAgICBgUnVuQm9vazogJHtSVU5CT09LX1VSTH1gLFxuICAgICAgICAgICAgJycsXG4gICAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgICBjb21wYXJpc29uT3BlcmF0b3I6XG4gICAgICAgICAgICBDb21wYXJpc29uT3BlcmF0b3IuR1JFQVRFUl9USEFOX09SX0VRVUFMX1RPX1RIUkVTSE9MRCxcbiAgICAgICAgICBldmFsdWF0aW9uUGVyaW9kczogMixcbiAgICAgICAgICB0aHJlc2hvbGQ6IDEsXG4gICAgICAgICAgdHJlYXRNaXNzaW5nRGF0YTogVHJlYXRNaXNzaW5nRGF0YS5OT1RfQlJFQUNISU5HLFxuICAgICAgICB9XG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBtZXRyaWNQYWNrYWdlc1dpdGhSZWxlYXNlTm90ZXNDb3VudChvcHRzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIG5ldyBNZXRyaWMoe1xuICAgICAgcGVyaW9kOiBjZGsuRHVyYXRpb24ubWludXRlcyg1KSxcbiAgICAgIHN0YXRpc3RpYzogU3RhdGlzdGljLlNVTSxcbiAgICAgIC4uLm9wdHMsXG4gICAgICBtZXRyaWNOYW1lOiBtZXRyaWNDb25zdC5QYWNrYWdlV2l0aENoYW5nZUxvZyxcbiAgICAgIG5hbWVzcGFjZTogbWV0cmljQ29uc3QuTUVUUklDU19OQU1FU1BBQ0UsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbWV0cmljSW52YWxpZENyZWRlbnRpYWxzKG9wdHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gbmV3IE1ldHJpYyh7XG4gICAgICBwZXJpb2Q6IGNkay5EdXJhdGlvbi5taW51dGVzKDUpLFxuICAgICAgc3RhdGlzdGljOiBTdGF0aXN0aWMuTUFYSU1VTSxcbiAgICAgIC4uLm9wdHMsXG4gICAgICBtZXRyaWNOYW1lOiBtZXRyaWNDb25zdC5JbnZhbGlkQ3JlZGVudGlhbHMsXG4gICAgICBuYW1lc3BhY2U6IG1ldHJpY0NvbnN0Lk1FVFJJQ1NfTkFNRVNQQUNFLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY1JlcXVlc3RRdW90YUV4aGF1c3RlZChvcHRzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIG5ldyBNZXRyaWMoe1xuICAgICAgcGVyaW9kOiBjZGsuRHVyYXRpb24ubWludXRlcyg1KSxcbiAgICAgIHN0YXRpc3RpYzogU3RhdGlzdGljLk1BWElNVU0sXG4gICAgICAuLi5vcHRzLFxuICAgICAgbWV0cmljTmFtZTogbWV0cmljQ29uc3QuUmVxdWVzdFF1b3RhRXhoYXVzdGVkLFxuICAgICAgbmFtZXNwYWNlOiBtZXRyaWNDb25zdC5NRVRSSUNTX05BTUVTUEFDRSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBtZXRyaWNSZXF1ZXN0VW5rbm93bkVycm9yKG9wdHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gbmV3IE1ldHJpYyh7XG4gICAgICBwZXJpb2Q6IGNkay5EdXJhdGlvbi5taW51dGVzKDUpLFxuICAgICAgc3RhdGlzdGljOiBTdGF0aXN0aWMuTUFYSU1VTSxcbiAgICAgIC4uLm9wdHMsXG4gICAgICBtZXRyaWNOYW1lOiBtZXRyaWNDb25zdC5Vbmtub3duRXJyb3IsXG4gICAgICBuYW1lc3BhY2U6IG1ldHJpY0NvbnN0Lk1FVFJJQ1NfTkFNRVNQQUNFLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY1JlcXVlc3RVblN1cHBvcnRlZFJlcG8ob3B0cz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiBuZXcgTWV0cmljKHtcbiAgICAgIHBlcmlvZDogY2RrLkR1cmF0aW9uLm1pbnV0ZXMoNSksXG4gICAgICBzdGF0aXN0aWM6IFN0YXRpc3RpYy5NQVhJTVVNLFxuICAgICAgLi4ub3B0cyxcbiAgICAgIG1ldHJpY05hbWU6IG1ldHJpY0NvbnN0LlVuU3VwcG9ydGVkUmVwbyxcbiAgICAgIG5hbWVzcGFjZTogbWV0cmljQ29uc3QuTUVUUklDU19OQU1FU1BBQ0UsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbWV0cmljUmVxdWVzdEludmFsaWRQYWNrYWdlSnNvbihvcHRzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIG5ldyBNZXRyaWMoe1xuICAgICAgcGVyaW9kOiBjZGsuRHVyYXRpb24ubWludXRlcyg1KSxcbiAgICAgIHN0YXRpc3RpYzogU3RhdGlzdGljLk1BWElNVU0sXG4gICAgICAuLi5vcHRzLFxuICAgICAgbWV0cmljTmFtZTogbWV0cmljQ29uc3QuSW52YWxpZFBhY2thZ2VKc29uLFxuICAgICAgbmFtZXNwYWNlOiBtZXRyaWNDb25zdC5NRVRSSUNTX05BTUVTUEFDRSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBtZXRyaWNDaGFuZ2VMb2dGZXRjaEVycm9yKG9wdHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gbmV3IE1ldHJpYyh7XG4gICAgICBwZXJpb2Q6IGNkay5EdXJhdGlvbi5taW51dGVzKDUpLFxuICAgICAgc3RhdGlzdGljOiBTdGF0aXN0aWMuTUFYSU1VTSxcbiAgICAgIC4uLm9wdHMsXG4gICAgICBtZXRyaWNOYW1lOiBtZXRyaWNDb25zdC5DaGFuZ2Vsb2dGZXRjaEVycm9yLFxuICAgICAgbmFtZXNwYWNlOiBtZXRyaWNDb25zdC5NRVRSSUNTX05BTUVTUEFDRSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBtZXRyaWNDaGFuZ2VMb2dBbGxFcnJvcihvcHRzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIG5ldyBNZXRyaWMoe1xuICAgICAgcGVyaW9kOiBjZGsuRHVyYXRpb24ubWludXRlcyg1KSxcbiAgICAgIHN0YXRpc3RpYzogU3RhdGlzdGljLk1BWElNVU0sXG4gICAgICAuLi5vcHRzLFxuICAgICAgbWV0cmljTmFtZTogbWV0cmljQ29uc3QuQWxsRXJyb3JzLFxuICAgICAgbmFtZXNwYWNlOiBtZXRyaWNDb25zdC5NRVRSSUNTX05BTUVTUEFDRSxcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdGF0ZU1hY2hpbmVOYW1lRnJvbShub2RlUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gUG9vciBtYW4ncyByZXBsYWNlIGFsbC4uLlxuICByZXR1cm4gbm9kZVBhdGguc3BsaXQoL1teYS16MC05KyFALigpPV8nLV0rL2kpLmpvaW4oJy4nKTtcbn1cbiJdfQ==
374
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmFja2VuZC9yZWxlYXNlLW5vdGVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1DQUFtQztBQUNuQywrREFRb0M7QUFDcEMsMkNBQTJDO0FBRTNDLG1GQUFzRTtBQUd0RSwyQ0FBMkM7QUFFM0MscURBQXFEO0FBQ3JELHFFQUF5RDtBQUN6RCw2REFBNkQ7QUFDN0QsMkNBQXVDO0FBQ3ZDLCtDQUFxRTtBQUdyRSxtREFBZ0Q7QUFFaEQsbURBSTZCO0FBRTdCLDJDQUEyQztBQUUzQyxxRUFBZ0U7QUFDaEUscUZBQThFO0FBQzlFLG1FQUE4RDtBQWlDOUQ7Ozs7O0dBS0c7QUFDSCxNQUFhLGtCQUFtQixTQUFRLHNCQUFTO0lBa0IvQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQThCO1FBQ3RFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQzNCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUMsdUJBQXVCLENBQUM7UUFDdkQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUM7UUFFL0QsTUFBTSxnQkFBZ0IsR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlELHNFQUFzRTtRQUN0RSxrRUFBa0U7UUFDbEUsb0JBQW9CO1FBQ3BCLE1BQU0sZUFBZSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNuRCxTQUFTLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxtQkFBbUI7WUFDNUMsT0FBTyxFQUFFLFFBQVE7WUFDakIsUUFBUSxFQUFFLGNBQWM7WUFDeEIsWUFBWSxF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UyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLHNCQUFzQjtZQUNsRCxnQkFBZ0IsRUFBRTtnQkFDaEIsNERBQTREO2dCQUM1RCxFQUFFO2dCQUNGLFlBQVkseUJBQVcsRUFBRTtnQkFDekIsRUFBRTtnQkFDRiwyQ0FBMkM7YUFDNUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ1osa0JBQWtCLEVBQUUsbUNBQWtCLENBQUMsa0NBQWtDO1lBQ3pFLGlCQUFpQixFQUFFLENBQUM7WUFDcEIsU0FBUztZQUNULGdCQUFnQixFQUFFLGlDQUFnQixDQUFDLGFBQWE7U0FDakQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBNWdCRCxnREE0Z0JDO0FBRUQsU0FBUyxvQkFBb0IsQ0FBQyxRQUFnQjtJQUM1Qyw0QkFBNEI7SUFDNUIsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHtcbiAgQWxhcm0sXG4gIENvbXBhcmlzb25PcGVyYXRvcixcbiAgTWF0aEV4cHJlc3Npb24sXG4gIE1ldHJpYyxcbiAgTWV0cmljT3B0aW9ucyxcbiAgU3RhdGlzdGljLFxuICBUcmVhdE1pc3NpbmdEYXRhLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgKiBhcyBsYW1iZGEgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBTcXNFdmVudFNvdXJjZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEtZXZlbnQtc291cmNlcyc7XG5pbXBvcnQgKiBhcyBzMyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0IHsgSVNlY3JldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zZWNyZXRzbWFuYWdlcic7XG5pbXBvcnQgKiBhcyBzcXMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXNxcyc7XG5pbXBvcnQgeyBJUXVldWUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3FzJztcbmltcG9ydCAqIGFzIHNmbiBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3RlcGZ1bmN0aW9ucyc7XG5pbXBvcnQgeyBKc29uUGF0aCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zJztcbmltcG9ydCAqIGFzIHRhc2tzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zLXRhc2tzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgc3RhdGVNYWNoaW5lVXJsLCBsYW1iZGFGdW5jdGlvblVybCB9IGZyb20gJy4uLy4uL2RlZXAtbGluayc7XG5pbXBvcnQgeyBNb25pdG9yaW5nIH0gZnJvbSAnLi4vLi4vbW9uaXRvcmluZyc7XG5pbXBvcnQgeyBPdmVydmlld0Rhc2hib2FyZCB9IGZyb20gJy4uLy4uL292ZXJ2aWV3LWRhc2hib2FyZCc7XG5pbXBvcnQgeyBSVU5CT09LX1VSTCB9IGZyb20gJy4uLy4uL3J1bmJvb2stdXJsJztcbmltcG9ydCB7IEZlZWRCdWlsZGVyIH0gZnJvbSAnLi4vZmVlZC1idWlsZGVyJztcbmltcG9ydCB7XG4gIFBBQ0tBR0VfS0VZX1NVRkZJWCxcbiAgU1RPUkFHRV9LRVlfUFJFRklYLFxuICBQQUNLQUdFX1JFTEVBU0VfTk9URVNfS0VZX1NVRkZJWCxcbn0gZnJvbSAnLi4vc2hhcmVkL2NvbnN0YW50cyc7XG5cbmltcG9ydCAqIGFzIG1ldHJpY0NvbnN0IGZyb20gJy4vY29uc3RhbnRzJztcblxuaW1wb3J0IHsgR2VuZXJhdGVSZWxlYXNlTm90ZXMgfSBmcm9tICcuL2dlbmVyYXRlLXJlbGVhc2Utbm90ZXMnO1xuaW1wb3J0IHsgR2V0TWVzc2FnZXNGcm9tV29ya2VyUXVldWUgfSBmcm9tICcuL2dldC1tZXNzYWdlcy1mcm9tLXdvcmtlci1xdWV1ZSc7XG5pbXBvcnQgeyBSZWxlYXNlTm90ZXNUcmlnZ2VyIH0gZnJvbSAnLi9yZWxlYXNlLW5vdGVzLXRyaWdnZXInO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIFJlbGVhc2VOb3RlRmV0Y2hlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWxlYXNlTm90ZUZldGNoZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgcGFja2FnZSBkYXRhIHN0b3JhZ2UgYnVja2V0LCB3aGVyZSByZWxlYXNlLW5vdGVzLm1kIHdpbGwgYmUgc3RvcmVkIGFsb25nIHdpdGggb3RoZXIgYXNzZXRzXG4gICAqL1xuICByZWFkb25seSBidWNrZXQ6IHMzLklCdWNrZXQ7XG5cbiAgLyoqXG4gICAqIEdpdEh1YiBjcmVkZW50aWFsIHVzZWQgdG8gd2hlbiBtYWtpbmcgcmVxdWVzdCB0byBHaXRIdWIgQVBJIHRvIHJldHJpZXZlIGNoYW5nZWxvZ3MuXG4gICAqIEBkZWZhdWx0IC0gZG8gbm90IGZldGNoIGNoYW5nZWxvZ3MgZnJvbSBHaXRIdWJcbiAgICovXG4gIHJlYWRvbmx5IGdpdEh1YkNyZWRlbnRpYWxzU2VjcmV0PzogSVNlY3JldDtcblxuICAvKipcbiAgICogVGhlIG1vbml0b3JpbmcgaGFuZGxlciB0byByZWdpc3RlciBhbGFybXMgd2l0aC5cbiAgICovXG4gIHJlYWRvbmx5IG1vbml0b3Jpbmc6IE1vbml0b3Jpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBvdmVydmlldyBkYXNoYm9hcmQgdG8gcmVnaXN0ZXIgZGFzaGJvYXJkcyB3aXRoLlxuICAgKi9cbiAgcmVhZG9ubHkgb3ZlcnZpZXdEYXNoYm9hcmQ6IE92ZXJ2aWV3RGFzaGJvYXJkO1xuXG4gIC8qKlxuICAgKiBUaGUgbGFtYmRhIGZ1bmN0aW9uIHRoYXQgdXBkYXRlcyB0aGUgUlNTL0FUT00gZmVlZFxuICAgKi9cbiAgcmVhZG9ubHkgZmVlZEJ1aWxkZXI6IEZlZWRCdWlsZGVyO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBTdGVwRnVuY3Rpb24gd2hpY2ggd2lsbCBnZW5lcmF0ZSBjaGFuZ2UtbG9nIGZpbGUgZm9yIHRoZSBwYWNrYWdlcyB0aGF0IGFyZSBhZGRlZFxuICogdG8gdGhlIFJlbGVhc2VOb3RlRmV0Y2hlciBRdWV1ZS4gVG8gZ2VuZXJhdGUgdGhlIHJlbGVhc2Ugbm90ZXMsIHRoZSBmZXRjaGVyIHB1bGxzIGRhdGEgZnJvbVxuICogR2l0SHViIChyZWxlYXNlIHRhZywgcmVsZWFzZXMgYW5kIGNoYW5nZWxvZy5tZCBmaWxlKS4gV2hlbiB0aGUgR2l0SHViIGNyZWRlbnRpYWxzIGFyZSBwYXNzZWQsXG4gKiB0aGUgZmV0Y2hlciByZXNwZWN0cyBzZXJ2aWNlIHJhdGUgbGltaXRzIG9mIEdpdEh1YiBieSBwYXVzaW5nIHRoZSBnZW5lcmF0aW9uIG9mIHJlbGVhc2Ugbm90ZXNcbiAqL1xuZXhwb3J0IGNsYXNzIFJlbGVhc2VOb3RlRmV0Y2hlciBleHRlbmRzIENvbnN0cnVjdCB7XG4gIC8qKlxuICAgKiBUaGUgcXVldWUgd2hlcmUgcGFja2FnZXMgd2hlcmUgdGhlIHBhY2thZ2VzIHdpbGwgYmUgYWRkZWQgdG8gZ2VuZXJhdGUgcmVsZWFzZSBub3Rlc1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHF1ZXVlOiBJUXVldWU7XG4gIHByaXZhdGUgcmVhZG9ubHkgYnVja2V0OiBzMy5JQnVja2V0O1xuICBwcml2YXRlIHJlYWRvbmx5IGdpdGh1YlRva2VuU2VjcmV0PzogSVNlY3JldDtcbiAgLyoqXG4gICAqIExhbWJkYSBmdW5jdGlvbiB0aGF0IHVwZGF0ZSB0aGUgUlNTL0F0b20gZmVlZFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHVwZGF0ZUZlZWRGdW5jdGlvbjogbGFtYmRhLkZ1bmN0aW9uO1xuICBwdWJsaWMgcmVhZG9ubHkgd29ya2VyUXVldWU6IElRdWV1ZTtcbiAgcHVibGljIHJlYWRvbmx5IHdvcmtlckRMUTogSVF1ZXVlO1xuXG4gIHB1YmxpYyByZWFkb25seSBzdGF0ZU1hY2hpbmU6IHNmbi5JU3RhdGVNYWNoaW5lO1xuICBwdWJsaWMgcmVhZG9ubHkgcmVsZWFzZU5vdGVzVHJpZ2dlckxhbWJkYTogUmVsZWFzZU5vdGVzVHJpZ2dlcjtcbiAgcHVibGljIHJlYWRvbmx5IGdlbmVyYXRlUmVsZWFzZU5vdGVzTGFtYmRhOiBHZW5lcmF0ZVJlbGVhc2VOb3RlcztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUmVsZWFzZU5vdGVGZXRjaGVyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIHRoaXMuYnVja2V0ID0gcHJvcHMuYnVja2V0O1xuICAgIHRoaXMuZ2l0aHViVG9rZW5TZWNyZXQgPSBwcm9wcy5naXRIdWJDcmVkZW50aWFsc1NlY3JldDtcbiAgICB0aGlzLnVwZGF0ZUZlZWRGdW5jdGlvbiA9IHByb3BzLmZlZWRCdWlsZGVyLnVwZGF0ZUZlZWRGdW5jdGlvbjtcblxuICAgIGNvbnN0IHN0YXRlTWFjaGluZU5hbWUgPSBzdGF0ZU1hY2hpbmVOYW1lRnJvbSh0aGlzLm5vZGUucGF0aCk7XG4gICAgLy8gVGhlIHN0YXRlIG1hY2hpbmUgd2lsbCByZS1ydW4gaXRzZWxmIGFmdGVyIGZldGNoaW5nIGEgcmVsZWFzZSBub3Rlc1xuICAgIC8vIGZvciBhIGZldyBBUElzLiBGb3IgdGhlIHN0YXRlIG1hY2hpbmUgdG8gc2VsZiBleGVjdXRlIEFSTiBuZWVkc1xuICAgIC8vIHRvIGJlIHByZWRpY3RhYmxlXG4gICAgY29uc3Qgc3RhdGVNYWNoaW5lQXJuID0gY2RrLlN0YWNrLm9mKHRoaXMpLmZvcm1hdEFybih7XG4gICAgICBhcm5Gb3JtYXQ6IGNkay5Bcm5Gb3JtYXQuQ09MT05fUkVTT1VSQ0VfTkFNRSxcbiAgICAgIHNlcnZpY2U6ICdzdGF0ZXMnLFxuICAgICAgcmVzb3VyY2U6ICdzdGF0ZU1hY2hpbmUnLFxuICAgICAgcmVzb3VyY2VOYW1lOiBzdGF0ZU1hY2hpbmVOYW1lLFxuICAgIH0pO1xuXG4gICAgdGhpcy53b3JrZXJETFEgPSBuZXcgc3FzLlF1ZXVlKHRoaXMsICdSZWxlYXNlTm90ZXNGZXRjaFdvcmtlclF1ZXVlRExRJywge1xuICAgICAgdmlzaWJpbGl0eVRpbWVvdXQ6IGNkay5EdXJhdGlvbi5zZWNvbmRzKDMwMCksXG4gICAgICBlbmNyeXB0aW9uOiBzcXMuUXVldWVFbmNyeXB0aW9uLktNU19NQU5BR0VELFxuICAgIH0pO1xuXG4gICAgcHJvcHMub3ZlcnZpZXdEYXNoYm9hcmQuYWRkRExRTWV0cmljVG9EYXNoYm9hcmQoXG4gICAgICAnUmVsZWFzZU5vdGVzV29ya2VyRExRJyxcbiAgICAgIHRoaXMud29ya2VyRExRXG4gICAgKTtcblxuICAgIC8vIHdvcmtlciBxdWV1ZSBpcyB0aGUgcXVldWUgZnJvbSB3aGljaCBzdGVwIGZ1bmN0aW9uIHdpbGwgcmV0cmlldmUgbWVzc2FnZXMgZnJvbVxuICAgIHRoaXMud29ya2VyUXVldWUgPSBuZXcgc3FzLlF1ZXVlKHRoaXMsICdSZWxlYXNlTm90ZXNGZXRjaFdvcmtlclF1ZXVlJywge1xuICAgICAgdmlzaWJpbGl0eVRpbWVvdXQ6IGNkay5EdXJhdGlvbi5zZWNvbmRzKDMwMCksXG4gICAgICBkZWFkTGV0dGVyUXVldWU6IHtcbiAgICAgICAgbWF4UmVjZWl2ZUNvdW50OiAxMCxcbiAgICAgICAgcXVldWU6IHRoaXMud29ya2VyRExRLFxuICAgICAgfSxcbiAgICAgIGVuY3J5cHRpb246IHNxcy5RdWV1ZUVuY3J5cHRpb24uS01TX01BTkFHRUQsXG4gICAgfSk7XG5cbiAgICAvLyBGZXRjaCBxdWV1ZSBpcyB3aGVyZSBqb2IgZ2V0cyBhZGRlZCwgYW5kIGEgbGFtYmRhIGZ1bmN0aW9uXG4gICAgLy8gY2hlY2tzIGFuZCBzZWUgaWYgU3RhdGVNYWNoaW5lIGlzIHJ1bm5pbmcgYW5kIGlmIGl0IGlzIG5vdCB0aGVuXG4gICAgLy8ga2lja3Mgb2ZmIHRoZSBzdGF0ZSBtYWNoaW5lIGFmdGVyIGFkZGluZyB0aGUgam9iIHRvIHdvcmtlciBxdWV1ZVxuICAgIHRoaXMucXVldWUgPSBuZXcgc3FzLlF1ZXVlKHRoaXMsICdDaGFuZ2VMb2dGZXRjaFF1ZXVlJywge1xuICAgICAgcXVldWVOYW1lOiAnQ2hhbmdlTG9nRmV0Y2hRdWV1ZScsXG4gICAgICB2aXNpYmlsaXR5VGltZW91dDogY2RrLkR1cmF0aW9uLnNlY29uZHMoMzAwKSxcbiAgICAgIGVuY3J5cHRpb246IHNxcy5RdWV1ZUVuY3J5cHRpb24uS01TX01BTkFHRUQsXG4gICAgfSk7XG5cbiAgICB0aGlzLnJlbGVhc2VOb3Rlc1RyaWdnZXJMYW1iZGEgPSBuZXcgUmVsZWFzZU5vdGVzVHJpZ2dlcihcbiAgICAgIHRoaXMsXG4gICAgICAnUmVsZWFzZU5vdGVzVHJpZ2dlcicsXG4gICAgICB7XG4gICAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgICAgU0ZOX0FSTjogc3RhdGVNYWNoaW5lQXJuLFxuICAgICAgICAgIFdPUktFUl9RVUVVRV9VUkw6IHRoaXMud29ya2VyUXVldWUucXVldWVVcmwsXG4gICAgICAgIH0sXG4gICAgICAgIHRpbWVvdXQ6IGNkay5EdXJhdGlvbi5taW51dGVzKDEpLFxuICAgICAgfVxuICAgICk7XG5cbiAgICBwcm9wcy5vdmVydmlld0Rhc2hib2FyZC5hZGRDb25jdXJyZW50RXhlY3V0aW9uTWV0cmljVG9EYXNoYm9hcmQoXG4gICAgICB0aGlzLnJlbGVhc2VOb3Rlc1RyaWdnZXJMYW1iZGEsXG4gICAgICAncmVsZWFzZU5vdGVzVHJpZ2dlcidcbiAgICApO1xuXG4gICAgdGhpcy53b3JrZXJRdWV1ZS5ncmFudFNlbmRNZXNzYWdlcyh0aGlzLnJlbGVhc2VOb3Rlc1RyaWdnZXJMYW1iZGEpO1xuICAgIHRoaXMucmVsZWFzZU5vdGVzVHJpZ2dlckxhbWJkYS5ncmFudFByaW5jaXBhbC5hZGRUb1ByaW5jaXBhbFBvbGljeShcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogWydzdGF0ZXM6TGlzdEV4ZWN1dGlvbnMnLCAnc3RhdGVzOlN0YXJ0RXhlY3V0aW9uJ10sXG4gICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgcmVzb3VyY2VzOiBbc3RhdGVNYWNoaW5lQXJuXSxcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IGV2ZW50U291cmNlID0gbmV3IFNxc0V2ZW50U291cmNlKHRoaXMucXVldWUpO1xuICAgIHRoaXMucmVsZWFzZU5vdGVzVHJpZ2dlckxhbWJkYS5hZGRFdmVudFNvdXJjZShldmVudFNvdXJjZSk7XG5cbiAgICB0aGlzLmdlbmVyYXRlUmVsZWFzZU5vdGVzTGFtYmRhID0gbmV3IEdlbmVyYXRlUmVsZWFzZU5vdGVzKFxuICAgICAgdGhpcyxcbiAgICAgICdHaXRodWJDaGFuZ2Vsb2dGZXRjaGVyJyxcbiAgICAgIHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZWxlYXNlTm90ZXMgZ2VuZXJhdG9yJyxcbiAgICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICAuLi4odGhpcy5naXRodWJUb2tlblNlY3JldFxuICAgICAgICAgICAgPyB7IEdJVEhVQl9UT0tFTjogdGhpcy5naXRodWJUb2tlblNlY3JldC5zZWNyZXRWYWx1ZS50b1N0cmluZygpIH1cbiAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgIEJVQ0tFVF9OQU1FOiB0aGlzLmJ1Y2tldC5idWNrZXROYW1lLFxuICAgICAgICB9LFxuICAgICAgICB0aW1lb3V0OiBjZGsuRHVyYXRpb24ubWludXRlcygxMCksXG4gICAgICAgIG1lbW9yeVNpemU6IDEwMjQsXG4gICAgICB9XG4gICAgKTtcbiAgICBwcm9wcy5vdmVydmlld0Rhc2hib2FyZC5hZGRDb25jdXJyZW50RXhlY3V0aW9uTWV0cmljVG9EYXNoYm9hcmQoXG4gICAgICB0aGlzLmdlbmVyYXRlUmVsZWFzZU5vdGVzTGFtYmRhLFxuICAgICAgJ3JlbGVhc2VOb3RlR2VuZXJhdGVGb3JQYWNrYWdlJ1xuICAgICk7XG5cbiAgICBjb25zdCByZXN0YXJ0RXhlY3V0aW9uID0gbmV3IHRhc2tzLlN0ZXBGdW5jdGlvbnNTdGFydEV4ZWN1dGlvbihcbiAgICAgIHRoaXMsXG4gICAgICAnQ29udGludWUgYXMgbmV3JyxcbiAgICAgIHtcbiAgICAgICAgYXNzb2NpYXRlV2l0aFBhcmVudDogdHJ1ZSxcbiAgICAgICAgc3RhdGVNYWNoaW5lOiBzZm4uU3RhdGVNYWNoaW5lLmZyb21TdGF0ZU1hY2hpbmVBcm4oXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICAnVGhpc1N0YXRlTWFjaGluZScsXG4gICAgICAgICAgc3RhdGVNYWNoaW5lQXJuXG4gICAgICAgICksXG4gICAgICAgIGludGVncmF0aW9uUGF0dGVybjogc2ZuLkludGVncmF0aW9uUGF0dGVybi5SRVFVRVNUX1JFU1BPTlNFLFxuICAgICAgICByZXN1bHRQYXRoOiBKc29uUGF0aC5ESVNDQVJELFxuICAgICAgfVxuICAgIClcbiAgICAgIC5hZGRSZXRyeSh7IGVycm9yczogWydTdGVwRnVuY3Rpb25zLkV4ZWN1dGlvbkxpbWl0RXhjZWVkZWQnXSB9KVxuICAgICAgLm5leHQobmV3IHNmbi5TdWNjZWVkKHRoaXMsICdkb25lJywgeyBjb21tZW50OiAnTmV3IGluc3RhbmNlIHN0YXJ0ZWQnIH0pKTtcblxuICAgIGNvbnN0IGdldFRhc2tzRnJvbVdvcmtlclF1ZXVlID0gbmV3IEdldE1lc3NhZ2VzRnJvbVdvcmtlclF1ZXVlKFxuICAgICAgdGhpcyxcbiAgICAgICdSZWxlYXNlTm90ZVRhc2tzJyxcbiAgICAgIHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdSZWxlYXNlTm90ZXMgZ2V0IG1lc3NhZ2UgZnJvbSB0aGUgd29ya2VyIHF1ZXVlJyxcblxuICAgICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICAgIC4uLih0aGlzLmdpdGh1YlRva2VuU2VjcmV0XG4gICAgICAgICAgICA/IHsgR0lUSFVCX1RPS0VOOiB0aGlzLmdpdGh1YlRva2VuU2VjcmV0LnNlY3JldFZhbHVlLnRvU3RyaW5nKCkgfVxuICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgU1FTX1FVRVVFX1VSTDogdGhpcy53b3JrZXJRdWV1ZS5xdWV1ZVVybCxcbiAgICAgICAgfSxcbiAgICAgICAgdGltZW91dDogY2RrLkR1cmF0aW9uLm1pbnV0ZXMoNSksXG4gICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMuYnVja2V0LmdyYW50UmVhZChcbiAgICAgIHRoaXMuZ2VuZXJhdGVSZWxlYXNlTm90ZXNMYW1iZGEsXG4gICAgICBgJHtTVE9SQUdFX0tFWV9QUkVGSVh9KiR7UEFDS0FHRV9LRVlfU1VGRklYfWBcbiAgICApO1xuICAgIHRoaXMuYnVja2V0LmdyYW50UmVhZFdyaXRlKFxuICAgICAgdGhpcy5nZW5lcmF0ZVJlbGVhc2VOb3Rlc0xhbWJkYSxcbiAgICAgIGAke1NUT1JBR0VfS0VZX1BSRUZJWH0qJHtQQUNLQUdFX1JFTEVBU0VfTk9URVNfS0VZX1NVRkZJWH1gXG4gICAgKTtcblxuICAgIGNvbnN0IGdlbmVyYXRlUmVsZWFzZU5vdGVzRm9yRWFjaFBhY2thZ2UgPSBuZXcgdGFza3MuTGFtYmRhSW52b2tlKFxuICAgICAgdGhpcyxcbiAgICAgICdHZW5lcmF0ZSBSZWxlYXNlIG5vdGVzIGZvciBhIHBhY2thZ2UnLFxuICAgICAge1xuICAgICAgICBsYW1iZGFGdW5jdGlvbjogdGhpcy5nZW5lcmF0ZVJlbGVhc2VOb3Rlc0xhbWJkYSxcbiAgICAgICAgcGF5bG9hZFJlc3BvbnNlT25seTogdHJ1ZSxcbiAgICAgICAgaW5wdXRQYXRoOiAnJC5Cb2R5JyxcbiAgICAgICAgcmVzdWx0UGF0aDogJyQucmVzdWx0JyxcbiAgICAgIH1cbiAgICApLm5leHQoXG4gICAgICBuZXcgc2ZuLkNob2ljZSh0aGlzLCAnV2l0aCByZXN1bHQnKVxuICAgICAgICAud2hlbihcbiAgICAgICAgICBzZm4uQ29uZGl0aW9uLnN0cmluZ0VxdWFscygnJC5yZXN1bHQuZXJyb3InLCAnUmVxdWVzdFF1b3RhRXhoYXVzdGVkJyksXG4gICAgICAgICAgbmV3IHRhc2tzLkNhbGxBd3NTZXJ2aWNlKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICdNYWtlIHRoZSBtZXNzYWdlIHZpc2libGUgYWdhaW4gZm9yIG5leHQgaXRlcmF0aW9uJyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc2VydmljZTogJ3NxcycsXG4gICAgICAgICAgICAgIGNvbW1lbnQ6XG4gICAgICAgICAgICAgICAgJ01ha2UgdGhlIG1lc3NhZ2UgdmlzaWJsZSBhZ2FpbiBzbyBuZXh0IGl0ZXJhdGlvbiB3aWxsIGNvbnN1bWUgaXQnLFxuICAgICAgICAgICAgICBhY3Rpb246ICdjaGFuZ2VNZXNzYWdlVmlzaWJpbGl0eScsXG4gICAgICAgICAgICAgIGlhbVJlc291cmNlczogW3RoaXMud29ya2VyUXVldWUucXVldWVBcm5dLFxuICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICAgICAgUXVldWVVcmw6IHRoaXMud29ya2VyUXVldWUucXVldWVVcmwsXG4gICAgICAgICAgICAgICAgUmVjZWlwdEhhbmRsZTogSnNvblBhdGguc3RyaW5nQXQoJyQuUmVjZWlwdEhhbmRsZScpLFxuICAgICAgICAgICAgICAgIFZpc2liaWxpdHlUaW1lb3V0OiAwLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICByZXN1bHRQYXRoOiAnJC5lcnJvckhhbmRsZXInLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAud2hlbihcbiAgICAgICAgICBzZm4uQ29uZGl0aW9uLnN0cmluZ0VxdWFscygnJC5yZXN1bHQuZXJyb3InLCAnSW52YWxpZENyZWRlbnRpYWxzJyksXG4gICAgICAgICAgbmV3IHRhc2tzLkNhbGxBd3NTZXJ2aWNlKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICdTZW5kIG1lc3NhZ2UgdG8gRExRIHdoZW4gY3JlZGVudGlhbHMgYXJlIGludmFsaWQnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzZXJ2aWNlOiAnc3FzJyxcbiAgICAgICAgICAgICAgY29tbWVudDpcbiAgICAgICAgICAgICAgICAnR2l0aHViIGNyZWRlbnRpYWxzIHBhc3NlZCBpcyBpbnZhbGlkLiBSZXRyeWluZyB3b250IGhlbHAuIE1vdmluZyB0byBETFEnLFxuICAgICAgICAgICAgICBhY3Rpb246ICdzZW5kTWVzc2FnZScsXG4gICAgICAgICAgICAgIGlhbVJlc291cmNlczogW3RoaXMud29ya2VyRExRLnF1ZXVlQXJuXSxcbiAgICAgICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgICAgIFF1ZXVlVXJsOiB0aGlzLndvcmtlckRMUS5xdWV1ZVVybCxcbiAgICAgICAgICAgICAgICBNZXNzYWdlQm9keTogSnNvblBhdGguanNvblRvU3RyaW5nKEpzb25QYXRoLnN0cmluZ0F0KCckLkJvZHknKSksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHJlc3VsdFBhdGg6ICckLmVycm9ySGFuZGxlcicsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKS5uZXh0KFxuICAgICAgICAgICAgbmV3IHRhc2tzLkNhbGxBd3NTZXJ2aWNlKFxuICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAncmVtb3ZlIHRoZSBtZXNzYWdlIGZyb20gU1FTIGFmdGVyIHNlbmRpbmcgdG8gRExRJyxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNlcnZpY2U6ICdzcXMnLFxuICAgICAgICAgICAgICAgIGFjdGlvbjogJ2RlbGV0ZU1lc3NhZ2UnLFxuICAgICAgICAgICAgICAgIGlhbVJlc291cmNlczogW3RoaXMud29ya2VyUXVldWUucXVldWVBcm5dLFxuICAgICAgICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgICAgICAgIFF1ZXVlVXJsOiB0aGlzLndvcmtlclF1ZXVlLnF1ZXVlVXJsLFxuICAgICAgICAgICAgICAgICAgUmVjZWlwdEhhbmRsZTogSnNvblBhdGguc3RyaW5nQXQoJyQuUmVjZWlwdEhhbmRsZScpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVzdWx0UGF0aDogJyQuZXJyb3JIYW5kbGVyJyxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAub3RoZXJ3aXNlKFxuICAgICAgICAgIG5ldyB0YXNrcy5DYWxsQXdzU2VydmljZSh0aGlzLCAncmVtb3ZlIHRoZSBtZXNzYWdlIGZyb20gU1FTJywge1xuICAgICAgICAgICAgc2VydmljZTogJ3NxcycsXG4gICAgICAgICAgICBhY3Rpb246ICdkZWxldGVNZXNzYWdlJyxcbiAgICAgICAgICAgIGlhbVJlc291cmNlczogW3RoaXMud29ya2VyUXVldWUucXVldWVBcm5dLFxuICAgICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgICBRdWV1ZVVybDogdGhpcy53b3JrZXJRdWV1ZS5xdWV1ZVVybCxcbiAgICAgICAgICAgICAgUmVjZWlwdEhhbmRsZTogSnNvblBhdGguc3RyaW5nQXQoJyQuUmVjZWlwdEhhbmRsZScpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3VsdFBhdGg6ICckLmNsZWFudXAnLFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICApO1xuXG4gICAgY29uc3QgdXBkYXRlRmVlZFRhc2tXaGVuV2FpdGluZ0ZvckdIUmF0ZUxpbWl0ID0gbmV3IHRhc2tzLkxhbWJkYUludm9rZShcbiAgICAgIHRoaXMsXG4gICAgICAndXBkYXRlRmVlZFRhc2tXaGVuV2FpdGluZ0ZvckdIUmF0ZUxpbWl0JyxcbiAgICAgIHtcbiAgICAgICAgbGFtYmRhRnVuY3Rpb246IHRoaXMudXBkYXRlRmVlZEZ1bmN0aW9uLFxuICAgICAgICBjb21tZW50OiAnVXBkYXRlIHRoZSBSU1MvQXRvbSBmZWVkJyxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uc3QgdXBkYXRlRmVlZEFmdGVyUHJvY2Vzc2luZyA9IG5ldyB0YXNrcy5MYW1iZGFJbnZva2UoXG4gICAgICB0aGlzLFxuICAgICAgJ3VwZGF0ZUZlZWRBZnRlclByb2Nlc3NpbmcnLFxuICAgICAge1xuICAgICAgICBsYW1iZGFGdW5jdGlvbjogdGhpcy51cGRhdGVGZWVkRnVuY3Rpb24sXG4gICAgICAgIGNvbW1lbnQ6XG4gICAgICAgICAgJ1VwZGF0ZSB0aGUgUlNTL0F0b20gZmVlZCBhZnRlciBwcm9jZXNzaW5nIGFsbCB0aGUgaXRlbXMgaW4gdGhlIHF1ZXVlJyxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uc3QgZ2V0VGFza3NGcm9tUXVldWUgPSBuZXcgdGFza3MuTGFtYmRhSW52b2tlKFxuICAgICAgdGhpcyxcbiAgICAgICdjaGVjayBzZXJ2aWNlIHF1b3RhIGFuZCBnZXQgdGFza3MgZnJvbSB3b3JrZXIgcXVldWUnLFxuICAgICAge1xuICAgICAgICBsYW1iZGFGdW5jdGlvbjogZ2V0VGFza3NGcm9tV29ya2VyUXVldWUsXG4gICAgICAgIHBheWxvYWRSZXNwb25zZU9ubHk6IHRydWUsXG4gICAgICB9XG4gICAgKS5uZXh0KFxuICAgICAgbmV3IHNmbi5DaG9pY2UodGhpcywgJ3dpdGggcmVzdWx0JylcbiAgICAgICAgLndoZW4oXG4gICAgICAgICAgc2ZuLkNvbmRpdGlvbi5pc1ByZXNlbnQoJyQud2FpdFVudGlsJyksXG4gICAgICAgICAgbmV3IHNmbi5QYXJhbGxlbCh0aGlzLCAnd2FpdCBhbmQgdXBkYXRlJylcbiAgICAgICAgICAgIC5icmFuY2goXG4gICAgICAgICAgICAgIG5ldyBzZm4uV2FpdCh0aGlzLCAnd2FpdCB0aWxsIHNlcnZpY2UgcXVvdGEgcmVwbGVuaXNoZXMnLCB7XG4gICAgICAgICAgICAgICAgdGltZTogc2ZuLldhaXRUaW1lLnRpbWVzdGFtcFBhdGgoJyQud2FpdFVudGlsJyksXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICB1cGRhdGVGZWVkVGFza1doZW5XYWl0aW5nRm9yR0hSYXRlTGltaXRcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5uZXh0KHJlc3RhcnRFeGVjdXRpb24pXG4gICAgICAgIClcbiAgICAgICAgLndoZW4oXG4gICAgICAgICAgc2ZuLkNvbmRpdGlvbi5pc1ByZXNlbnQoJyQuZXJyb3IuTWF4Q29uY3VycmVudEV4ZWN1dGlvbkVycm9yJyksXG4gICAgICAgICAgbmV3IHNmbi5TdWNjZWVkKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICdTdG9wcGluZyB0aGlzIGV4ZWN1dGlvbiBzaW5jZSBNYXggY29uY3VycmVudCBleGVjdXRpb24gaGFzIHJlYWNoZWQnXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICAgIC53aGVuKFxuICAgICAgICAgIHNmbi5Db25kaXRpb24uaXNQcmVzZW50KCckLm1lc3NhZ2VzJyksXG4gICAgICAgICAgbmV3IHNmbi5NYXAodGhpcywgJ3dpdGggZWFjaCBwYWNrYWdlJywge1xuICAgICAgICAgICAgY29tbWVudDogJ0ZldGNoIHJlbGVhc2Ugbm90ZXMgZm9yIGVhY2ggcGFja2FnZScsXG4gICAgICAgICAgICBpdGVtc1BhdGg6ICckLm1lc3NhZ2VzJyxcbiAgICAgICAgICB9KS5pdGVyYXRvcihnZW5lcmF0ZVJlbGVhc2VOb3Rlc0ZvckVhY2hQYWNrYWdlKVxuICAgICAgICApXG4gICAgICAgIC5vdGhlcndpc2UoXG4gICAgICAgICAgdXBkYXRlRmVlZEFmdGVyUHJvY2Vzc2luZy5uZXh0KG5ldyBzZm4uU3VjY2VlZCh0aGlzLCAnYWxsIGRvbmUnKSlcbiAgICAgICAgKVxuICAgICAgICAuYWZ0ZXJ3YXJkcygpXG4gICAgICAgIC5uZXh0KHJlc3RhcnRFeGVjdXRpb24pXG4gICAgKTtcblxuICAgIHRoaXMuc3RhdGVNYWNoaW5lID0gbmV3IHNmbi5TdGF0ZU1hY2hpbmUodGhpcywgJ1N0YXRlTWFjaGluZScsIHtcbiAgICAgIGRlZmluaXRpb246IGdldFRhc2tzRnJvbVF1ZXVlLFxuICAgICAgc3RhdGVNYWNoaW5lTmFtZSxcbiAgICAgIHRpbWVvdXQ6IGNkay5EdXJhdGlvbi5kYXlzKDEpLFxuICAgICAgdHJhY2luZ0VuYWJsZWQ6IHRydWUsXG4gICAgfSk7XG5cbiAgICBnZXRUYXNrc0Zyb21Xb3JrZXJRdWV1ZS5hZGRFbnZpcm9ubWVudChcbiAgICAgICdTVEVQX0ZVTkNUSU9OX0FSTicsXG4gICAgICBzdGF0ZU1hY2hpbmVBcm5cbiAgICApO1xuXG4gICAgZ2V0VGFza3NGcm9tV29ya2VyUXVldWUuZ3JhbnRQcmluY2lwYWwuYWRkVG9QcmluY2lwYWxQb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFsnc3RhdGVzOkxpc3RFeGVjdXRpb25zJ10sXG4gICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgICAgcmVzb3VyY2VzOiBbc3RhdGVNYWNoaW5lQXJuXSxcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLndvcmtlclF1ZXVlLmdyYW50Q29uc3VtZU1lc3NhZ2VzKGdldFRhc2tzRnJvbVdvcmtlclF1ZXVlKTtcblxuICAgIHByb3BzLm1vbml0b3JpbmcuYWRkSGlnaFNldmVyaXR5QWxhcm0oXG4gICAgICAnUmVsZWFzZU5vdGVzIGdlbmVyYXRpb24gRmFpbHVyZScsXG4gICAgICB0aGlzLnN0YXRlTWFjaGluZVxuICAgICAgICAubWV0cmljRmFpbGVkKClcbiAgICAgICAgLmNyZWF0ZUFsYXJtKHRoaXMsICdSZWxlYXNlTm90ZXNHZW5lcmF0aW9uRmFpbHVyZScsIHtcbiAgICAgICAgICBhbGFybU5hbWU6IGAke3RoaXMuc3RhdGVNYWNoaW5lLm5vZGUucGF0aH0gLyBGYWlsdXJlYCxcbiAgICAgICAgICBhbGFybURlc2NyaXB0aW9uOiBbXG4gICAgICAgICAgICAnUmVsZWFzZSBub3RlcyBnZW5lcmF0aW9uIHN0ZXAgZnVuY3Rpb24gaXMgZmFpbGluZyEnLFxuICAgICAgICAgICAgJycsXG4gICAgICAgICAgICBgUnVuQm9vazogJHtSVU5CT09LX1VSTH1gLFxuICAgICAgICAgICAgJycsXG4gICAgICAgICAgICBgRGlyZWN0IGxpbmsgdG8gdGhlIGZ1bmN0aW9uOiAke3N0YXRlTWFjaGluZVVybChcbiAgICAgICAgICAgICAgdGhpcy5zdGF0ZU1hY2hpbmVcbiAgICAgICAgICAgICl9YCxcbiAgICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjpcbiAgICAgICAgICAgIENvbXBhcmlzb25PcGVyYXRvci5HUkVBVEVSX1RIQU5fT1JfRVFVQUxfVE9fVEhSRVNIT0xELFxuICAgICAgICAgIGV2YWx1YXRpb25QZXJpb2RzOiAyLFxuICAgICAgICAgIHRocmVzaG9sZDogMSxcbiAgICAgICAgICB0cmVhdE1pc3NpbmdEYXRhOiBUcmVhdE1pc3NpbmdEYXRhLk5PVF9CUkVBQ0hJTkcsXG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIHByb3BzLm1vbml0b3JpbmcuYWRkTG93U2V2ZXJpdHlBbGFybShcbiAgICAgICdSZWxlYXNlTm90ZXMgdHJpZ2dlciBmYWlsdXJlJyxcbiAgICAgIHRoaXMucmVsZWFzZU5vdGVzVHJpZ2dlckxhbWJkYVxuICAgICAgICAubWV0cmljRXJyb3JzKClcbiAgICAgICAgLmNyZWF0ZUFsYXJtKHRoaXMsICdSZWxlYXNlTm90ZXNUcmlnZ2VyRmFpbHVyZScsIHtcbiAgICAgICAgICBhbGFybU5hbWU6IGAke3RoaXMucmVsZWFzZU5vdGVzVHJpZ2dlckxhbWJkYS5ub2RlLnBhdGh9IC8gRmFpbHVyZWAsXG4gICAgICAgICAgYWxhcm1EZXNjcmlwdGlvbjogW1xuICAgICAgICAgICAgJ1JlbGVhc2Ugbm90ZXMgZ2VuZXJhdGlvbiB0cmlnZ2VyIGZ1bmN0aW9uIGlzIGZhaWxpbmchJyxcbiAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgYFJ1bkJvb2s6ICR7UlVOQk9PS19VUkx9YCxcbiAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgYERpcmVjdCBsaW5rIHRvIHRoZSBmdW5jdGlvbjogJHtsYW1iZGFGdW5jdGlvblVybChcbiAgICAgICAgICAgICAgdGhpcy5yZWxlYXNlTm90ZXNUcmlnZ2VyTGFtYmRhXG4gICAgICAgICAgICApfWAsXG4gICAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgICAgICBjb21wYXJpc29uT3BlcmF0b3I6XG4gICAgICAgICAgICBDb21wYXJpc29uT3BlcmF0b3IuR1JFQVRFUl9USEFOX09SX0VRVUFMX1RPX1RIUkVTSE9MRCxcbiAgICAgICAgICBldmFsdWF0aW9uUGVyaW9kczogMixcbiAgICAgICAgICB0aHJlc2hvbGQ6IDEsXG4gICAgICAgICAgdHJlYXRNaXNzaW5nRGF0YTogVHJlYXRNaXNzaW5nRGF0YS5OT1RfQlJFQUNISU5HLFxuICAgICAgICB9KVxuICAgICk7XG5cbiAgICBwcm9wcy5tb25pdG9yaW5nLmFkZExvd1NldmVyaXR5QWxhcm0oXG4gICAgICAnR2l0aHViIHJhdGUgbGltaXQnLFxuICAgICAgdGhpcy5nZW5lcmF0ZUdpdGh1YlJhdGVMaW1pdEFsYXJtKClcbiAgICApO1xuXG4gICAgcHJvcHMubW9uaXRvcmluZy5hZGRIaWdoU2V2ZXJpdHlBbGFybShcbiAgICAgICdSZWxlYXNlTm90ZXMgR2l0aHViIGNyZWRlbnRpYWwgaW52YWxpZCcsXG4gICAgICB0aGlzLm1ldHJpY0ludmFsaWRDcmVkZW50aWFscygpLmNyZWF0ZUFsYXJtKFxuICAgICAgICB0aGlzLFxuICAgICAgICAnUmVsZWFzZU5vdGVzSW52YWxpZEdpdEh1YkNyZWRlbnRpYWxzJyxcbiAgICAgICAge1xuICAgICAgICAgIGFsYXJtTmFtZTogYCR7dGhpcy5ub2RlLnBhdGh9LyBSZWxlYXNlTm90ZXMgLyBJbnZhbGlkIEdpdEh1YiBjcmVkZW50aWFsYCxcbiAgICAgICAgICBhbGFybURlc2NyaXB0aW9uOiBbXG4gICAgICAgICAgICAnUmVsZWFzZSBub3RlcyBnZW5lcmF0aW9uIGlzIGZhaWxpbmcgZHVlIHRvIEludmFsaWQgR2l0SHViIHRva2VuJyxcbiAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgYFJ1bkJvb2s6ICR7UlVOQk9PS19VUkx9YCxcbiAgICAgICAgICAgICcnLFxuICAgICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICAgICAgY29tcGFyaXNvbk9wZXJhdG9yOlxuICAgICAgICAgICAgQ29tcGFyaXNvbk9wZXJhdG9yLkdSRUFURVJfVEhBTl9PUl9FUVVBTF9UT19USFJFU0hPTEQsXG4gICAgICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IDIsXG4gICAgICAgICAgdGhyZXNob2xkOiAxLFxuICAgICAgICAgIHRyZWF0TWlzc2luZ0RhdGE6IFRyZWF0TWlzc2luZ0RhdGEuTk9UX0JSRUFDSElORyxcbiAgICAgICAgfVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgbWV0cmljUGFja2FnZXNXaXRoUmVsZWFzZU5vdGVzQ291bnQob3B0cz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiBuZXcgTWV0cmljKHtcbiAgICAgIHBlcmlvZDogY2RrLkR1cmF0aW9uLm1pbnV0ZXMoNSksXG4gICAgICBzdGF0aXN0aWM6IFN0YXRpc3RpYy5TVU0sXG4gICAgICAuLi5vcHRzLFxuICAgICAgbWV0cmljTmFtZTogbWV0cmljQ29uc3QuUGFja2FnZVdpdGhDaGFuZ2VMb2csXG4gICAgICBuYW1lc3BhY2U6IG1ldHJpY0NvbnN0Lk1FVFJJQ1NfTkFNRVNQQUNFLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY0ludmFsaWRDcmVkZW50aWFscyhvcHRzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIG5ldyBNZXRyaWMoe1xuICAgICAgcGVyaW9kOiBjZGsuRHVyYXRpb24ubWludXRlcyg1KSxcbiAgICAgIHN0YXRpc3RpYzogU3RhdGlzdGljLk1BWElNVU0sXG4gICAgICAuLi5vcHRzLFxuICAgICAgbWV0cmljTmFtZTogbWV0cmljQ29uc3QuSW52YWxpZENyZWRlbnRpYWxzLFxuICAgICAgbmFtZXNwYWNlOiBtZXRyaWNDb25zdC5NRVRSSUNTX05BTUVTUEFDRSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBtZXRyaWNSZXF1ZXN0UXVvdGFFeGhhdXN0ZWQob3B0cz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiBuZXcgTWV0cmljKHtcbiAgICAgIHBlcmlvZDogY2RrLkR1cmF0aW9uLm1pbnV0ZXMoNSksXG4gICAgICBzdGF0aXN0aWM6IFN0YXRpc3RpYy5NQVhJTVVNLFxuICAgICAgLi4ub3B0cyxcbiAgICAgIG1ldHJpY05hbWU6IG1ldHJpY0NvbnN0LlJlcXVlc3RRdW90YUV4aGF1c3RlZCxcbiAgICAgIG5hbWVzcGFjZTogbWV0cmljQ29uc3QuTUVUUklDU19OQU1FU1BBQ0UsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbWV0cmljUmVxdWVzdFVua25vd25FcnJvcihvcHRzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIG5ldyBNZXRyaWMoe1xuICAgICAgcGVyaW9kOiBjZGsuRHVyYXRpb24ubWludXRlcyg1KSxcbiAgICAgIHN0YXRpc3RpYzogU3RhdGlzdGljLk1BWElNVU0sXG4gICAgICAuLi5vcHRzLFxuICAgICAgbWV0cmljTmFtZTogbWV0cmljQ29uc3QuVW5rbm93bkVycm9yLFxuICAgICAgbmFtZXNwYWNlOiBtZXRyaWNDb25zdC5NRVRSSUNTX05BTUVTUEFDRSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBtZXRyaWNSZXF1ZXN0VW5TdXBwb3J0ZWRSZXBvKG9wdHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gbmV3IE1ldHJpYyh7XG4gICAgICBwZXJpb2Q6IGNkay5EdXJhdGlvbi5taW51dGVzKDUpLFxuICAgICAgc3RhdGlzdGljOiBTdGF0aXN0aWMuTUFYSU1VTSxcbiAgICAgIC4uLm9wdHMsXG4gICAgICBtZXRyaWNOYW1lOiBtZXRyaWNDb25zdC5VblN1cHBvcnRlZFJlcG8sXG4gICAgICBuYW1lc3BhY2U6IG1ldHJpY0NvbnN0Lk1FVFJJQ1NfTkFNRVNQQUNFLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY1JlcXVlc3RJbnZhbGlkUGFja2FnZUpzb24ob3B0cz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiBuZXcgTWV0cmljKHtcbiAgICAgIHBlcmlvZDogY2RrLkR1cmF0aW9uLm1pbnV0ZXMoNSksXG4gICAgICBzdGF0aXN0aWM6IFN0YXRpc3RpYy5NQVhJTVVNLFxuICAgICAgLi4ub3B0cyxcbiAgICAgIG1ldHJpY05hbWU6IG1ldHJpY0NvbnN0LkludmFsaWRQYWNrYWdlSnNvbixcbiAgICAgIG5hbWVzcGFjZTogbWV0cmljQ29uc3QuTUVUUklDU19OQU1FU1BBQ0UsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbWV0cmljQ2hhbmdlTG9nRmV0Y2hFcnJvcihvcHRzPzogTWV0cmljT3B0aW9ucyk6IE1ldHJpYyB7XG4gICAgcmV0dXJuIG5ldyBNZXRyaWMoe1xuICAgICAgcGVyaW9kOiBjZGsuRHVyYXRpb24ubWludXRlcyg1KSxcbiAgICAgIHN0YXRpc3RpYzogU3RhdGlzdGljLk1BWElNVU0sXG4gICAgICAuLi5vcHRzLFxuICAgICAgbWV0cmljTmFtZTogbWV0cmljQ29uc3QuQ2hhbmdlbG9nRmV0Y2hFcnJvcixcbiAgICAgIG5hbWVzcGFjZTogbWV0cmljQ29uc3QuTUVUUklDU19OQU1FU1BBQ0UsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbWV0cmljQ2hhbmdlTG9nQWxsRXJyb3Iob3B0cz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiBuZXcgTWV0cmljKHtcbiAgICAgIHBlcmlvZDogY2RrLkR1cmF0aW9uLm1pbnV0ZXMoNSksXG4gICAgICBzdGF0aXN0aWM6IFN0YXRpc3RpYy5NQVhJTVVNLFxuICAgICAgLi4ub3B0cyxcbiAgICAgIG1ldHJpY05hbWU6IG1ldHJpY0NvbnN0LkFsbEVycm9ycyxcbiAgICAgIG5hbWVzcGFjZTogbWV0cmljQ29uc3QuTUVUUklDU19OQU1FU1BBQ0UsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbWV0cmljR2hSYXRlTGltaXRSZW1haW5pbmcob3B0cz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiBuZXcgTWV0cmljKHtcbiAgICAgIHBlcmlvZDogY2RrLkR1cmF0aW9uLm1pbnV0ZXMoNSksXG4gICAgICBzdGF0aXN0aWM6IFN0YXRpc3RpYy5NSU5JTVVNLFxuICAgICAgLi4ub3B0cyxcbiAgICAgIG1ldHJpY05hbWU6IG1ldHJpY0NvbnN0LkdoUmF0ZUxpbWl0c1JlbWFpbmluZyxcbiAgICAgIG5hbWVzcGFjZTogbWV0cmljQ29uc3QuTUVUUklDU19OQU1FU1BBQ0UsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbWV0cmljR2hSYXRlTGltaXRVc2VkKG9wdHM/OiBNZXRyaWNPcHRpb25zKTogTWV0cmljIHtcbiAgICByZXR1cm4gbmV3IE1ldHJpYyh7XG4gICAgICBwZXJpb2Q6IGNkay5EdXJhdGlvbi5taW51dGVzKDUpLFxuICAgICAgc3RhdGlzdGljOiBTdGF0aXN0aWMuTUFYSU1VTSxcbiAgICAgIC4uLm9wdHMsXG4gICAgICBtZXRyaWNOYW1lOiBtZXRyaWNDb25zdC5HaExpbWl0c1VzZWQsXG4gICAgICBuYW1lc3BhY2U6IG1ldHJpY0NvbnN0Lk1FVFJJQ1NfTkFNRVNQQUNFLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG1ldHJpY0doUmF0ZUxpbWl0TGltaXQob3B0cz86IE1ldHJpY09wdGlvbnMpOiBNZXRyaWMge1xuICAgIHJldHVybiBuZXcgTWV0cmljKHtcbiAgICAgIHBlcmlvZDogY2RrLkR1cmF0aW9uLm1pbnV0ZXMoNSksXG4gICAgICBzdGF0aXN0aWM6IFN0YXRpc3RpYy5NQVhJTVVNLFxuICAgICAgLi4ub3B0cyxcbiAgICAgIG1ldHJpY05hbWU6IG1ldHJpY0NvbnN0LkdoTGltaXRzTGltaXQsXG4gICAgICBuYW1lc3BhY2U6IG1ldHJpY0NvbnN0Lk1FVFJJQ1NfTkFNRVNQQUNFLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZUdpdGh1YlJhdGVMaW1pdEFsYXJtKHRocmVzaG9sZDogbnVtYmVyID0gODApOiBBbGFybSB7XG4gICAgY29uc3QgcGVyY2VudFVzZWQgPSBuZXcgTWF0aEV4cHJlc3Npb24oe1xuICAgICAgZXhwcmVzc2lvbjogJzEwMCAqIHJhdGVMaW1pdFVzZWQgLyByYXRlTGltaXRMaW1pdCcsXG4gICAgICBsYWJlbDogJ0dIVCBSYXRlIGxpbWl0IFBlcmNlbnQgVXNlZCcsXG4gICAgICB1c2luZ01ldHJpY3M6IHtcbiAgICAgICAgcmF0ZUxpbWl0VXNlZDogdGhpcy5tZXRyaWNHaFJhdGVMaW1pdFVzZWQoKSxcbiAgICAgICAgcmF0ZUxpbWl0TGltaXQ6IHRoaXMubWV0cmljR2hSYXRlTGltaXRMaW1pdCgpLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBwZXJjZW50VXNlZC5jcmVhdGVBbGFybSh0aGlzLCAnUmVsZWFzZU5vdGVzIEdpdGh1YiByYXRlIGxpbWl0Jywge1xuICAgICAgYWxhcm1OYW1lOiBgJHt0aGlzLm5vZGUucGF0aH0gLyBHaXRodWIgUmF0ZSBMaW1pdGAsXG4gICAgICBhbGFybURlc2NyaXB0aW9uOiBbXG4gICAgICAgICdSZWxlYXNlIG5vdGVzIGdlbmVyYXRpb24gaXMgbmVhcmluZyB0aGUgR2l0SHViIHJhdGUgbGltaXQhJyxcbiAgICAgICAgJycsXG4gICAgICAgIGBSdW5Cb29rOiAke1JVTkJPT0tfVVJMfWAsXG4gICAgICAgICcnLFxuICAgICAgICBgQ29uc2lkZXIgZWl0aGVyIHVzaW5nIEdpdEh1YiBhcHBsaWNhdGlvbi5gLFxuICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjogQ29tcGFyaXNvbk9wZXJhdG9yLkdSRUFURVJfVEhBTl9PUl9FUVVBTF9UT19USFJFU0hPTEQsXG4gICAgICBldmFsdWF0aW9uUGVyaW9kczogMixcbiAgICAgIHRocmVzaG9sZCxcbiAgICAgIHRyZWF0TWlzc2luZ0RhdGE6IFRyZWF0TWlzc2luZ0RhdGEuTk9UX0JSRUFDSElORyxcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdGF0ZU1hY2hpbmVOYW1lRnJvbShub2RlUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gUG9vciBtYW4ncyByZXBsYWNlIGFsbC4uLlxuICByZXR1cm4gbm9kZVBhdGguc3BsaXQoL1teYS16MC05KyFALigpPV8nLV0rL2kpLmpvaW4oJy4nKTtcbn1cbiJdfQ==