@mecanizou/telemetry-hub 1.3.4 → 1.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## [1.3.5](https://github.com/mecanizou-eco/telemetry-hub/compare/v1.3.4...v1.3.5) (2026-01-21)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * ajust scope attr ([312b46f](https://github.com/mecanizou-eco/telemetry-hub/commit/312b46f79cfdd443238709310f42967efc68a8b4))
7
+
1
8
  ## [1.3.4](https://github.com/mecanizou-eco/telemetry-hub/compare/v1.3.3...v1.3.4) (2026-01-21)
2
9
 
3
10
 
@@ -2,8 +2,8 @@ import middy from '@middy/core';
2
2
  interface MiddyMiddlewareOptions {
3
3
  }
4
4
  export declare function extractLoggedUser(event: any): {
5
- email?: string;
6
- uid?: string;
5
+ 'user.email'?: string;
6
+ 'user.uid'?: string;
7
7
  } | undefined;
8
8
  export declare const middyTelemetryMiddleware: (options?: MiddyMiddlewareOptions) => middy.MiddlewareObj;
9
9
  export {};
@@ -19,21 +19,21 @@ function extractHttpAttributes(event) {
19
19
  var _a, _b, _c, _d;
20
20
  if (event.requestContext) {
21
21
  return {
22
- method: ((_a = event.requestContext.http) === null || _a === void 0 ? void 0 : _a.method) || 'unknown',
23
- url: event.requestContext.domainName && ((_b = event.requestContext.http) === null || _b === void 0 ? void 0 : _b.path),
24
- agent: ((_c = event.headers) === null || _c === void 0 ? void 0 : _c['user-agent']) || 'unknown',
25
- pathParameters: event.pathParameters || {},
26
- queryStringParameters: event.queryStringParameters || {},
27
- body: event.body || {},
22
+ 'http.method': ((_a = event.requestContext.http) === null || _a === void 0 ? void 0 : _a.method) || 'unknown',
23
+ 'http.url': event.requestContext.domainName && ((_b = event.requestContext.http) === null || _b === void 0 ? void 0 : _b.path),
24
+ 'http.user_agent': ((_c = event.headers) === null || _c === void 0 ? void 0 : _c['user-agent']) || 'unknown',
25
+ 'http.path_parameters': event.pathParameters || {},
26
+ 'http.query_string_parameters': event.queryStringParameters || {},
27
+ 'http.body': event.body || {},
28
28
  };
29
29
  }
30
30
  return {
31
- method: event.httpMethod || 'unknown',
32
- url: event.path || 'unknown',
33
- agent: ((_d = event.headers) === null || _d === void 0 ? void 0 : _d['User-Agent']) || 'unknown',
34
- pathParameters: event.pathParameters || {},
35
- queryStringParameters: event.queryStringParameters || {},
36
- body: event.body || {},
31
+ 'http.method': event.httpMethod || 'unknown',
32
+ 'http.url': event.path || 'unknown',
33
+ 'http.user_agent': ((_d = event.headers) === null || _d === void 0 ? void 0 : _d['User-Agent']) || 'unknown',
34
+ 'http.path_parameters': event.pathParameters || {},
35
+ 'http.query_string_parameters': event.queryStringParameters || {},
36
+ 'http.body': event.body || {},
37
37
  };
38
38
  }
39
39
  function extractLoggedUser(event) {
@@ -46,8 +46,8 @@ function extractLoggedUser(event) {
46
46
  ((_d = loggedUser === null || loggedUser === void 0 ? void 0 : loggedUser.user) === null || _d === void 0 ? void 0 : _d.account_user) &&
47
47
  ((_f = (_e = loggedUser === null || loggedUser === void 0 ? void 0 : loggedUser.user) === null || _e === void 0 ? void 0 : _e.account_user) === null || _f === void 0 ? void 0 : _f.account)) {
48
48
  return {
49
- email: loggedUser.user.email,
50
- uid: loggedUser.user.account_user.account.uid,
49
+ 'user.email': loggedUser.user.email,
50
+ 'user.uid': loggedUser.user.account_user.account.uid,
51
51
  };
52
52
  }
53
53
  }
@@ -67,37 +67,42 @@ function extractDefaultAttributes(request) {
67
67
  const requestId = (event === null || event === void 0 ? void 0 : event.requestId) || ((_b = event === null || event === void 0 ? void 0 : event.requestContext) === null || _b === void 0 ? void 0 : _b.requestId) || 'unknown';
68
68
  const loggedUser = extractLoggedUser(event);
69
69
  const stage = (0, core_1.getEnvironmentStage)();
70
- return {
71
- functionName,
70
+ return Object.assign(Object.assign({ functionName,
72
71
  invocationId,
73
72
  serviceName,
74
- http,
75
73
  origin,
76
74
  routeKey,
77
75
  requestId,
78
- loggedUser,
79
- stage,
80
- };
76
+ stage }, http), loggedUser);
81
77
  }
82
78
  const middyTelemetryMiddleware = (options) => ({
83
79
  before: (request) => __awaiter(void 0, void 0, void 0, function* () {
84
80
  try {
85
81
  const startTime = perf_hooks_1.performance.now();
86
- const { functionName, invocationId, serviceName, http, origin, routeKey, requestId, loggedUser, stage, } = extractDefaultAttributes(request);
82
+ const attributes = extractDefaultAttributes(request);
87
83
  const standardTracer = (0, telemetry_1.getStandardTracer)();
88
84
  const spanResult = standardTracer.startSpan({
89
- spanName: functionName,
90
- serviceName,
91
- environment: stage,
92
- http,
85
+ spanName: attributes.functionName,
86
+ serviceName: attributes.serviceName,
87
+ environment: attributes.stage,
88
+ http: {
89
+ method: attributes['http.method'],
90
+ url: attributes['http.url'],
91
+ agent: attributes['http.user_agent'],
92
+ params: attributes['http.path_parameters'],
93
+ query: attributes['http.query_string_parameters'],
94
+ },
93
95
  execution: {
94
- functionName,
95
- invocationId,
96
- awsRequestId: invocationId,
97
- origin,
98
- routeKey,
99
- requestId,
100
- loggedUser,
96
+ functionName: attributes.functionName,
97
+ invocationId: attributes.invocationId,
98
+ awsRequestId: attributes.invocationId,
99
+ origin: attributes.origin,
100
+ routeKey: attributes.routeKey,
101
+ requestId: attributes.requestId,
102
+ loggedUser: {
103
+ email: attributes['user.email'],
104
+ uid: attributes['user.uid'],
105
+ },
101
106
  },
102
107
  });
103
108
  const meter = api_1.metrics.getMeter(origin);
@@ -119,12 +124,15 @@ const middyTelemetryMiddleware = (options) => ({
119
124
  successCounter,
120
125
  failureCounter,
121
126
  startTime,
122
- serviceName,
123
- environment: stage,
124
- origin,
125
- routeKey,
126
- requestId,
127
- loggedUser,
127
+ serviceName: attributes.serviceName,
128
+ environment: attributes.stage,
129
+ origin: attributes.origin,
130
+ routeKey: attributes.routeKey,
131
+ requestId: attributes.requestId,
132
+ loggedUser: {
133
+ email: attributes['user.email'],
134
+ uid: attributes['user.uid'],
135
+ },
128
136
  };
129
137
  }
130
138
  catch (error) {
@@ -132,7 +140,7 @@ const middyTelemetryMiddleware = (options) => ({
132
140
  }
133
141
  }),
134
142
  after: (request) => __awaiter(void 0, void 0, void 0, function* () {
135
- var _a, _b, _c, _d, _e, _f, _g, _h;
143
+ var _a, _b, _c, _d, _e, _f;
136
144
  try {
137
145
  const otelData = request.context.otel;
138
146
  if (!otelData)
@@ -165,10 +173,22 @@ const middyTelemetryMiddleware = (options) => ({
165
173
  'service.name': serviceName,
166
174
  'deployment.environment.name': environment,
167
175
  });
168
- const standardLogger = (0, telemetry_1.getStandardLogger)(spanResult.span.attributes);
176
+ const standardLogger = (0, telemetry_1.getStandardLogger)(attributes);
169
177
  yield standardLogger.logInfo({
170
178
  message: 'Request completed successfully',
171
179
  environment,
180
+ http: {
181
+ agent: attributes['http.user_agent'],
182
+ method: attributes['http.method'],
183
+ url: attributes['http.url'],
184
+ params: attributes['http.path_parameters'],
185
+ query: attributes['http.query_string_parameters'],
186
+ body: attributes['http.body'],
187
+ },
188
+ user: {
189
+ uid: attributes['user.uid'],
190
+ email: attributes['user.email'],
191
+ },
172
192
  execution: {
173
193
  functionName: functionName,
174
194
  invocationId: ((_d = spanResult.span.attributes) === null || _d === void 0 ? void 0 : _d['function.invocation_id']) ||
@@ -178,9 +198,9 @@ const middyTelemetryMiddleware = (options) => ({
178
198
  requestId: requestId,
179
199
  loggedUser: {
180
200
  uid: (((_e = spanResult.span.attributes) === null || _e === void 0 ? void 0 : _e['logged_user.uid']) ||
181
- ((_f = attributes.loggedUser) === null || _f === void 0 ? void 0 : _f.uid)),
182
- email: (((_g = spanResult.span.attributes) === null || _g === void 0 ? void 0 : _g['logged_user.email']) ||
183
- ((_h = attributes.loggedUser) === null || _h === void 0 ? void 0 : _h.email)),
201
+ attributes['user.uid']),
202
+ email: (((_f = spanResult.span.attributes) === null || _f === void 0 ? void 0 : _f['logged_user.email']) ||
203
+ attributes['user.email']),
184
204
  },
185
205
  },
186
206
  performance: {
@@ -196,7 +216,7 @@ const middyTelemetryMiddleware = (options) => ({
196
216
  }
197
217
  }),
198
218
  onError: (request) => __awaiter(void 0, void 0, void 0, function* () {
199
- var _a, _b, _c, _d, _e, _f, _g;
219
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
200
220
  try {
201
221
  const otelData = request.context.otel;
202
222
  if (!otelData)
@@ -235,11 +255,23 @@ const middyTelemetryMiddleware = (options) => ({
235
255
  'service.name': serviceName,
236
256
  'deployment.environment.name': environment,
237
257
  });
238
- const standardLogger = (0, telemetry_1.getStandardLogger)(spanResult.span.attributes);
258
+ const standardLogger = (0, telemetry_1.getStandardLogger)(attributes);
239
259
  yield standardLogger.logError({
240
260
  message: (error === null || error === void 0 ? void 0 : error.message) || 'Unknown error occurred',
241
261
  error: error || undefined,
242
262
  environment,
263
+ http: {
264
+ agent: attributes['http.user_agent'],
265
+ method: attributes['http.method'],
266
+ url: attributes['http.url'],
267
+ params: attributes['http.path_parameters'],
268
+ query: attributes['http.query_string_parameters'],
269
+ body: attributes['http.body'],
270
+ },
271
+ user: {
272
+ uid: attributes['user.uid'],
273
+ email: attributes['user.email'],
274
+ },
243
275
  execution: {
244
276
  functionName: functionName,
245
277
  invocationId: ((_e = spanResult.span.attributes) === null || _e === void 0 ? void 0 : _e['function.invocation_id']) ||
@@ -248,13 +280,19 @@ const middyTelemetryMiddleware = (options) => ({
248
280
  origin,
249
281
  routeKey: routeKey,
250
282
  requestId: requestId,
283
+ loggedUser: {
284
+ uid: (((_g = spanResult.span.attributes) === null || _g === void 0 ? void 0 : _g['logged_user.uid']) ||
285
+ attributes['user.uid']),
286
+ email: (((_h = spanResult.span.attributes) === null || _h === void 0 ? void 0 : _h['logged_user.email']) ||
287
+ attributes['user.email']),
288
+ },
251
289
  },
252
290
  performance: {
253
291
  durationMs,
254
292
  success: false,
255
293
  },
256
294
  context: {
257
- errorType: (_g = error === null || error === void 0 ? void 0 : error.constructor) === null || _g === void 0 ? void 0 : _g.name,
295
+ errorType: (_j = error === null || error === void 0 ? void 0 : error.constructor) === null || _j === void 0 ? void 0 : _j.name,
258
296
  },
259
297
  });
260
298
  spanResult.end();
@@ -266,4 +304,4 @@ const middyTelemetryMiddleware = (options) => ({
266
304
  }),
267
305
  });
268
306
  exports.middyTelemetryMiddleware = middyTelemetryMiddleware;
269
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zc3QvbWlkZHkvbWlkZGxld2FyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUE4QkEsOENBcUJDO0FBbERELDRDQUF3RDtBQUN4RCw0Q0FBZ0Y7QUFDaEYsMkNBQXlDO0FBQ3pDLHFDQUFpRDtBQUlqRCxTQUFTLHFCQUFxQixDQUFDLEtBQVU7O0lBQ3ZDLElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3pCLE9BQU87WUFDTCxNQUFNLEVBQUUsQ0FBQSxNQUFBLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSwwQ0FBRSxNQUFNLEtBQUksU0FBUztZQUN0RCxHQUFHLEVBQUUsS0FBSyxDQUFDLGNBQWMsQ0FBQyxVQUFVLEtBQUksTUFBQSxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksMENBQUUsSUFBSSxDQUFBO1lBQ3ZFLEtBQUssRUFBRSxDQUFBLE1BQUEsS0FBSyxDQUFDLE9BQU8sMENBQUcsWUFBWSxDQUFDLEtBQUksU0FBUztZQUNqRCxjQUFjLEVBQUUsS0FBSyxDQUFDLGNBQWMsSUFBSSxFQUFFO1lBQzFDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxxQkFBcUIsSUFBSSxFQUFFO1lBQ3hELElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJLEVBQUU7U0FDdkIsQ0FBQztJQUNKLENBQUM7SUFFRCxPQUFPO1FBQ0wsTUFBTSxFQUFFLEtBQUssQ0FBQyxVQUFVLElBQUksU0FBUztRQUNyQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxTQUFTO1FBQzVCLEtBQUssRUFBRSxDQUFBLE1BQUEsS0FBSyxDQUFDLE9BQU8sMENBQUcsWUFBWSxDQUFDLEtBQUksU0FBUztRQUNqRCxjQUFjLEVBQUUsS0FBSyxDQUFDLGNBQWMsSUFBSSxFQUFFO1FBQzFDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxxQkFBcUIsSUFBSSxFQUFF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O2dCQUN6QixXQUFXO2dCQUNYLFNBQVMsRUFBRTtvQkFDVCxZQUFZLEVBQUUsWUFBWTtvQkFDMUIsWUFBWSxFQUNWLENBQUEsTUFBQSxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsMENBQUcsd0JBQXdCLENBQUM7d0JBQ3JELFVBQVUsQ0FBQyxZQUF1QjtvQkFDckMsWUFBWSxFQUFFLE1BQUEsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLDBDQUN0Qyx5QkFBeUIsQ0FDaEI7b0JBQ1gsTUFBTTtvQkFDTixRQUFRLEVBQUUsUUFBUTtvQkFDbEIsU0FBUyxFQUFFLFNBQVM7aUJBQ3JCO2dCQUNELFdBQVcsRUFBRTtvQkFDWCxVQUFVO29CQUNWLE9BQU8sRUFBRSxLQUFLO2lCQUNmO2dCQUNELE9BQU8sRUFBRTtvQkFDUCxTQUFTLEVBQUUsTUFBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsV0FBVywwQ0FBRSxJQUFJO2lCQUNwQzthQUNGLENBQUMsQ0FBQztZQUdILFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUEsc0JBQVUsR0FBRSxDQUFDO1FBQ3JCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxpREFBaUQsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMxRSxDQUFDO0lBQ0gsQ0FBQyxDQUFBO0NBQ0YsQ0FBQyxDQUFDO0FBOVBVLFFBQUEsd0JBQXdCLDRCQThQbEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbWlkZHkgZnJvbSAnQG1pZGR5L2NvcmUnO1xuaW1wb3J0IHsgbWV0cmljcywgVmFsdWVUeXBlIH0gZnJvbSAnQG9wZW50ZWxlbWV0cnkvYXBpJztcbmltcG9ydCB7IGZvcmNlRmx1c2gsIGdldFN0YW5kYXJkTG9nZ2VyLCBnZXRTdGFuZGFyZFRyYWNlciB9IGZyb20gJy4uL3RlbGVtZXRyeSc7XG5pbXBvcnQgeyBwZXJmb3JtYW5jZSB9IGZyb20gJ3BlcmZfaG9va3MnO1xuaW1wb3J0IHsgZ2V0RW52aXJvbm1lbnRTdGFnZSB9IGZyb20gJy4uLy4uL2NvcmUnO1xuXG5pbnRlcmZhY2UgTWlkZHlNaWRkbGV3YXJlT3B0aW9ucyB7fVxuXG5mdW5jdGlvbiBleHRyYWN0SHR0cEF0dHJpYnV0ZXMoZXZlbnQ6IGFueSk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICBpZiAoZXZlbnQucmVxdWVzdENvbnRleHQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWV0aG9kOiBldmVudC5yZXF1ZXN0Q29udGV4dC5odHRwPy5tZXRob2QgfHwgJ3Vua25vd24nLFxuICAgICAgdXJsOiBldmVudC5yZXF1ZXN0Q29udGV4dC5kb21haW5OYW1lICYmIGV2ZW50LnJlcXVlc3RDb250ZXh0Lmh0dHA/LnBhdGgsXG4gICAgICBhZ2VudDogZXZlbnQuaGVhZGVycz8uWyd1c2VyLWFnZW50J10gfHwgJ3Vua25vd24nLFxuICAgICAgcGF0aFBhcmFtZXRlcnM6IGV2ZW50LnBhdGhQYXJhbWV0ZXJzIHx8IHt9LFxuICAgICAgcXVlcnlTdHJpbmdQYXJhbWV0ZXJzOiBldmVudC5xdWVyeVN0cmluZ1BhcmFtZXRlcnMgfHwge30sXG4gICAgICBib2R5OiBldmVudC5ib2R5IHx8IHt9LFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1ldGhvZDogZXZlbnQuaHR0cE1ldGhvZCB8fCAndW5rbm93bicsXG4gICAgdXJsOiBldmVudC5wYXRoIHx8ICd1bmtub3duJyxcbiAgICBhZ2VudDogZXZlbnQuaGVhZGVycz8uWydVc2VyLUFnZW50J10gfHwgJ3Vua25vd24nLFxuICAgIHBhdGhQYXJhbWV0ZXJzOiBldmVudC5wYXRoUGFyYW1ldGVycyB8fCB7fSxcbiAgICBxdWVyeVN0cmluZ1BhcmFtZXRlcnM6IGV2ZW50LnF1ZXJ5U3RyaW5nUGFyYW1ldGVycyB8fCB7fSxcbiAgICBib2R5OiBldmVudC5ib2R5IHx8IHt9LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdExvZ2dlZFVzZXIoXG4gIGV2ZW50OiBhbnlcbik6IHsgZW1haWw/OiBzdHJpbmc7IHVpZD86IHN0cmluZyB9IHwgdW5kZWZpbmVkIHtcbiAgbGV0IGxvZ2dlZFVzZXIgPSBldmVudD8ucmVxdWVzdENvbnRleHQ/LmF1dGhvcml6ZXI/LmxhbWJkYT8ubG9nZ2VyVXNlcjtcblxuICBpZiAobG9nZ2VkVXNlcikge1xuICAgIGxvZ2dlZFVzZXIgPVxuICAgICAgdHlwZW9mIGxvZ2dlZFVzZXIgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShsb2dnZWRVc2VyKSA6IGxvZ2dlZFVzZXI7XG4gICAgaWYgKFxuICAgICAgbG9nZ2VkVXNlcj8udXNlciAmJlxuICAgICAgbG9nZ2VkVXNlcj8udXNlcj8uYWNjb3VudF91c2VyICYmXG4gICAgICBsb2dnZWRVc2VyPy51c2VyPy5hY2NvdW50X3VzZXI/LmFjY291bnRcbiAgICApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGVtYWlsOiBsb2dnZWRVc2VyLnVzZXIuZW1haWwsXG4gICAgICAgIHVpZDogbG9nZ2VkVXNlci51c2VyLmFjY291bnRfdXNlci5hY2NvdW50LnVpZCxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdERlZmF1bHRBdHRyaWJ1dGVzKHJlcXVlc3Q6IGFueSkge1xuICBjb25zdCB7IGNvbnRleHQ6IGxhbWJkYUNvbnRleHQgfSA9IHJlcXVlc3Q7XG4gIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IGxhbWJkYUNvbnRleHQuZnVuY3Rpb25OYW1lO1xuICBjb25zdCBpbnZvY2F0aW9uSWQgPSBsYW1iZGFDb250ZXh0LmF3c1JlcXVlc3RJZDtcbiAgY29uc3Qgc2VydmljZU5hbWUgPSBwcm9jZXNzLmVudi5TRVJWSUNFX05BTUUgfHwgJ3NzdC1zZXJ2aWNlJztcbiAgY29uc3QgZXZlbnQgPSByZXF1ZXN0LmV2ZW50IGFzIGFueTtcbiAgY29uc3QgcXVlcnlTdHJpbmdQYXJhbWV0ZXJzID0gZXZlbnQ/LnF1ZXJ5U3RyaW5nUGFyYW1ldGVycyB8fCB7fTtcbiAgY29uc3QgaHR0cCA9IGV4dHJhY3RIdHRwQXR0cmlidXRlcyhldmVudCk7XG4gIGNvbnN0IG9yaWdpbiA9IHF1ZXJ5U3RyaW5nUGFyYW1ldGVycy5vcmlnaW4gfHwgJ3Vua25vd24nO1xuICBjb25zdCByb3V0ZUtleSA9XG4gICAgZXZlbnQ/LnJvdXRlS2V5IHx8IGV2ZW50Py5yZXF1ZXN0Q29udGV4dD8ucm91dGVLZXkgfHwgJ3Vua25vd24nO1xuICBjb25zdCByZXF1ZXN0SWQgPVxuICAgIGV2ZW50Py5yZXF1ZXN0SWQgfHwgZXZlbnQ/LnJlcXVlc3RDb250ZXh0Py5yZXF1ZXN0SWQgfHwgJ3Vua25vd24nO1xuICBjb25zdCBsb2dnZWRVc2VyID0gZXh0cmFjdExvZ2dlZFVzZXIoZXZlbnQpO1xuICBjb25zdCBzdGFnZSA9IGdldEVudmlyb25tZW50U3RhZ2UoKTtcblxuICByZXR1cm4ge1xuICAgIGZ1bmN0aW9uTmFtZSxcbiAgICBpbnZvY2F0aW9uSWQsXG4gICAgc2VydmljZU5hbWUsXG4gICAgaHR0cCxcbiAgICBvcmlnaW4sXG4gICAgcm91dGVLZXksXG4gICAgcmVxdWVzdElkLFxuICAgIGxvZ2dlZFVzZXIsXG4gICAgc3RhZ2UsXG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBtaWRkeVRlbGVtZXRyeU1pZGRsZXdhcmUgPSAoXG4gIG9wdGlvbnM/OiBNaWRkeU1pZGRsZXdhcmVPcHRpb25zXG4pOiBtaWRkeS5NaWRkbGV3YXJlT2JqID0+ICh7XG4gIGJlZm9yZTogYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhcnRUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgZnVuY3Rpb25OYW1lLFxuICAgICAgICBpbnZvY2F0aW9uSWQsXG4gICAgICAgIHNlcnZpY2VOYW1lLFxuICAgICAgICBodHRwLFxuICAgICAgICBvcmlnaW4sXG4gICAgICAgIHJvdXRlS2V5LFxuICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgIGxvZ2dlZFVzZXIsXG4gICAgICAgIHN0YWdlLFxuICAgICAgfSA9IGV4dHJhY3REZWZhdWx0QXR0cmlidXRlcyhyZXF1ZXN0KTtcblxuICAgICAgLy8gVXNhciBTdGFuZGFyZFRyYWNlciBwYXJhIGNyaWFyIHNwYW4gY29tIGF0cmlidXRvcyBwYWRyb25pemFkb3NcbiAgICAgIGNvbnN0IHN0YW5kYXJkVHJhY2VyID0gZ2V0U3RhbmRhcmRUcmFjZXIoKTtcbiAgICAgIGNvbnN0IHNwYW5SZXN1bHQgPSBzdGFuZGFyZFRyYWNlci5zdGFydFNwYW4oe1xuICAgICAgICBzcGFuTmFtZTogZnVuY3Rpb25OYW1lLFxuICAgICAgICBzZXJ2aWNlTmFtZSxcbiAgICAgICAgZW52aXJvbm1lbnQ6IHN0YWdlLFxuICAgICAgICBodHRwLFxuICAgICAgICBleGVjdXRpb246IHtcbiAgICAgICAgICBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgaW52b2NhdGlvbklkLFxuICAgICAgICAgIGF3c1JlcXVlc3RJZDogaW52b2NhdGlvbklkLFxuICAgICAgICAgIG9yaWdpbixcbiAgICAgICAgICByb3V0ZUtleSxcbiAgICAgICAgICByZXF1ZXN0SWQsXG4gICAgICAgICAgbG9nZ2VkVXNlcixcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBtZXRlciA9IG1ldHJpY3MuZ2V0TWV0ZXIob3JpZ2luKTtcblxuICAgICAgY29uc3QgZXhlY3V0aW9uVGltZUhpc3RvZ3JhbSA9IG1ldGVyLmNyZWF0ZUhpc3RvZ3JhbShcbiAgICAgICAgJ2xhbWJkYV9leGVjdXRpb25fZHVyYXRpb24nLFxuICAgICAgICB7XG4gICAgICAgICAgZGVzY3JpcHRpb246ICdUZW1wbyB0b3RhbCBkZSBleGVjdcOnw6NvIGRvIExhbWJkYSBlbSBtcycsXG4gICAgICAgICAgdW5pdDogJ21zJyxcbiAgICAgICAgICB2YWx1ZVR5cGU6IFZhbHVlVHlwZS5ET1VCTEUsXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICBjb25zdCBzdWNjZXNzQ291bnRlciA9IG1ldGVyLmNyZWF0ZUNvdW50ZXIoJ3RvdGFsX3N1Y2Nlc3NmdWxfcHVyY2hhc2VzJywge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ1RvdGFsIGRlIGNvbXByYXMgYmVtLXN1Y2VkaWRhcycsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGZhaWx1cmVDb3VudGVyID0gbWV0ZXIuY3JlYXRlQ291bnRlcigndG90YWxfZmFpbGVkX3B1cmNoYXNlcycsIHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdUb3RhbCBkZSBjb21wcmFzIGNvbSBmYWxoYScsXG4gICAgICB9KTtcblxuICAgICAgKHJlcXVlc3QuY29udGV4dCBhcyBhbnkpLm90ZWwgPSB7XG4gICAgICAgIHNwYW5SZXN1bHQsXG4gICAgICAgIG1ldGVyLFxuICAgICAgICBleGVjdXRpb25UaW1lSGlzdG9ncmFtLFxuICAgICAgICBzdWNjZXNzQ291bnRlcixcbiAgICAgICAgZmFpbHVyZUNvdW50ZXIsXG4gICAgICAgIHN0YXJ0VGltZSxcbiAgICAgICAgc2VydmljZU5hbWUsXG4gICAgICAgIGVudmlyb25tZW50OiBzdGFnZSxcbiAgICAgICAgb3JpZ2luLFxuICAgICAgICByb3V0ZUtleSxcbiAgICAgICAgcmVxdWVzdElkLFxuICAgICAgICBsb2dnZWRVc2VyLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW4gbWlkZHlUZWxlbWV0cnlNaWRkbGV3YXJlIGJlZm9yZSBob29rOicsIGVycm9yKTtcbiAgICB9XG4gIH0sXG5cbiAgYWZ0ZXI6IGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG90ZWxEYXRhID0gKHJlcXVlc3QuY29udGV4dCBhcyBhbnkpLm90ZWw7XG4gICAgICBpZiAoIW90ZWxEYXRhKSByZXR1cm47XG4gICAgICBjb25zdCBldmVudCA9IHJlcXVlc3QuZXZlbnQgYXMgYW55O1xuXG4gICAgICBjb25zdCBhdHRyaWJ1dGVzID0gZXh0cmFjdERlZmF1bHRBdHRyaWJ1dGVzKGV2ZW50KTtcblxuICAgICAgY29uc3Qge1xuICAgICAgICBzcGFuUmVzdWx0LFxuICAgICAgICBzdWNjZXNzQ291bnRlcixcbiAgICAgICAgZXhlY3V0aW9uVGltZUhpc3RvZ3JhbSxcbiAgICAgICAgc3RhcnRUaW1lLFxuICAgICAgICBzZXJ2aWNlTmFtZSxcbiAgICAgICAgZW52aXJvbm1lbnQsXG4gICAgICB9ID0gb3RlbERhdGE7XG5cbiAgICAgIC8vIE1hcmNhciBzcGFuIGNvbW8gc3VjZXNzbyB1c2FuZG8gU3RhbmRhcmRUcmFjZXJcbiAgICAgIHNwYW5SZXN1bHQuc2V0U3VjY2Vzcyh0cnVlKTtcblxuICAgICAgY29uc3QgZnVuY3Rpb25OYW1lID1cbiAgICAgICAgc3BhblJlc3VsdC5zcGFuLmF0dHJpYnV0ZXM/LlsnZnVuY3Rpb24ubmFtZSddIHx8XG4gICAgICAgIChhdHRyaWJ1dGVzLmZ1bmN0aW9uTmFtZSBhcyBzdHJpbmcpO1xuICAgICAgY29uc3Qgcm91dGVLZXkgPVxuICAgICAgICBzcGFuUmVzdWx0LnNwYW4uYXR0cmlidXRlcz8uWydyb3V0ZS5rZXknXSB8fFxuICAgICAgICAoYXR0cmlidXRlcy5yb3V0ZUtleSBhcyBzdHJpbmcpO1xuICAgICAgY29uc3QgcmVxdWVzdElkID1cbiAgICAgICAgc3BhblJlc3VsdC5zcGFuLmF0dHJpYnV0ZXM/LlsncmVxdWVzdC5pZCddIHx8XG4gICAgICAgIChhdHRyaWJ1dGVzLnJlcXVlc3RJZCBhcyBzdHJpbmcpO1xuXG4gICAgICAvLyBNw6l0cmljYXNcbiAgICAgIHN1Y2Nlc3NDb3VudGVyLmFkZCgxLCB7XG4gICAgICAgIG9yaWdpbixcbiAgICAgICAgJ2Z1bmN0aW9uLm5hbWUnOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgICdyZXF1ZXN0LmlkJzogcmVxdWVzdElkLFxuICAgICAgICAncm91dGUua2V5Jzogcm91dGVLZXksXG4gICAgICAgICdzZXJ2aWNlLm5hbWUnOiBzZXJ2aWNlTmFtZSxcbiAgICAgICAgJ2RlcGxveW1lbnQuZW52aXJvbm1lbnQubmFtZSc6IGVudmlyb25tZW50LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGR1cmF0aW9uTXMgPSBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0VGltZTtcblxuICAgICAgZXhlY3V0aW9uVGltZUhpc3RvZ3JhbS5yZWNvcmQoZHVyYXRpb25Ncywge1xuICAgICAgICBvcmlnaW4sXG4gICAgICAgIHN0YXR1czogJ3N1Y2Nlc3MnLFxuICAgICAgICAnZnVuY3Rpb24ubmFtZSc6IGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgJ3JlcXVlc3QuaWQnOiByZXF1ZXN0SWQsXG4gICAgICAgICdyb3V0ZS5rZXknOiByb3V0ZUtleSxcbiAgICAgICAgJ3NlcnZpY2UubmFtZSc6IHNlcnZpY2VOYW1lLFxuICAgICAgICAnZGVwbG95bWVudC5lbnZpcm9ubWVudC5uYW1lJzogZW52aXJvbm1lbnQsXG4gICAgICB9KTtcblxuICAgICAgLy8gTG9nIGVzdHJ1dHVyYWRvIGRlIHN1Y2Vzc29cbiAgICAgIGNvbnN0IHN0YW5kYXJkTG9nZ2VyID0gZ2V0U3RhbmRhcmRMb2dnZXIoc3BhblJlc3VsdC5zcGFuLmF0dHJpYnV0ZXMpO1xuXG4gICAgICBhd2FpdCBzdGFuZGFyZExvZ2dlci5sb2dJbmZvKHtcbiAgICAgICAgbWVzc2FnZTogJ1JlcXVlc3QgY29tcGxldGVkIHN1Y2Nlc3NmdWxseScsXG4gICAgICAgIGVudmlyb25tZW50LFxuICAgICAgICBleGVjdXRpb246IHtcbiAgICAgICAgICBmdW5jdGlvbk5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICBpbnZvY2F0aW9uSWQ6XG4gICAgICAgICAgICBzcGFuUmVzdWx0LnNwYW4uYXR0cmlidXRlcz8uWydmdW5jdGlvbi5pbnZvY2F0aW9uX2lkJ10gfHxcbiAgICAgICAgICAgIChhdHRyaWJ1dGVzLmludm9jYXRpb25JZCBhcyBzdHJpbmcpLFxuICAgICAgICAgIG9yaWdpbixcbiAgICAgICAgICByb3V0ZUtleTogcm91dGVLZXksXG4gICAgICAgICAgcmVxdWVzdElkOiByZXF1ZXN0SWQsXG4gICAgICAgICAgbG9nZ2VkVXNlcjoge1xuICAgICAgICAgICAgdWlkOiAoc3BhblJlc3VsdC5zcGFuLmF0dHJpYnV0ZXM/LlsnbG9nZ2VkX3VzZXIudWlkJ10gfHxcbiAgICAgICAgICAgICAgYXR0cmlidXRlcy5sb2dnZWRVc2VyPy51aWQpIGFzIHN0cmluZyxcbiAgICAgICAgICAgIGVtYWlsOiAoc3BhblJlc3VsdC5zcGFuLmF0dHJpYnV0ZXM/LlsnbG9nZ2VkX3VzZXIuZW1haWwnXSB8fFxuICAgICAgICAgICAgICBhdHRyaWJ1dGVzLmxvZ2dlZFVzZXI/LmVtYWlsKSBhcyBzdHJpbmcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgcGVyZm9ybWFuY2U6IHtcbiAgICAgICAgICBkdXJhdGlvbk1zLFxuICAgICAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgLy8gRmluYWxpemFyIHNwYW5cbiAgICAgIHNwYW5SZXN1bHQuZW5kKCk7XG4gICAgICBhd2FpdCBmb3JjZUZsdXNoKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIG1pZGR5VGVsZW1ldHJ5TWlkZGxld2FyZSBhZnRlciBob29rOicsIGVycm9yKTtcbiAgICB9XG4gIH0sXG5cbiAgb25FcnJvcjogYXN5bmMgKHJlcXVlc3QpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgb3RlbERhdGEgPSAocmVxdWVzdC5jb250ZXh0IGFzIGFueSkub3RlbDtcbiAgICAgIGlmICghb3RlbERhdGEpIHJldHVybjtcblxuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IGV4dHJhY3REZWZhdWx0QXR0cmlidXRlcyhyZXF1ZXN0LmV2ZW50KTtcblxuICAgICAgY29uc3Qge1xuICAgICAgICBzcGFuUmVzdWx0LFxuICAgICAgICBmYWlsdXJlQ291bnRlcixcbiAgICAgICAgZXhlY3V0aW9uVGltZUhpc3RvZ3JhbSxcbiAgICAgICAgc3RhcnRUaW1lLFxuICAgICAgICBzZXJ2aWNlTmFtZSxcbiAgICAgICAgZW52aXJvbm1lbnQsXG4gICAgICAgIG9yaWdpbixcbiAgICAgIH0gPSBvdGVsRGF0YTtcbiAgICAgIGNvbnN0IGVycm9yID0gcmVxdWVzdC5lcnJvcjtcblxuICAgICAgLy8gTWFyY2FyIHNwYW4gY29tbyBlcnJvIHVzYW5kbyBTdGFuZGFyZFRyYWNlclxuICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgIHNwYW5SZXN1bHQuc2V0RXJyb3IoZXJyb3IpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmdW5jdGlvbk5hbWUgPVxuICAgICAgICBzcGFuUmVzdWx0LnNwYW4uYXR0cmlidXRlcz8uWydmdW5jdGlvbi5uYW1lJ10gfHxcbiAgICAgICAgYXR0cmlidXRlcy5mdW5jdGlvbk5hbWUgfHxcbiAgICAgICAgJ3Vua25vd24nO1xuICAgICAgY29uc3QgcmVxdWVzdElkID1cbiAgICAgICAgc3BhblJlc3VsdC5zcGFuLmF0dHJpYnV0ZXM/LlsncmVxdWVzdC5pZCddIHx8XG4gICAgICAgIGF0dHJpYnV0ZXMucmVxdWVzdElkIHx8XG4gICAgICAgICd1bmtub3duJztcbiAgICAgIGNvbnN0IHJvdXRlS2V5ID1cbiAgICAgICAgc3BhblJlc3VsdC5zcGFuLmF0dHJpYnV0ZXM/Llsncm91dGUua2V5J10gfHxcbiAgICAgICAgYXR0cmlidXRlcy5yb3V0ZUtleSB8fFxuICAgICAgICAndW5rbm93bic7XG5cbiAgICAgIC8vIE3DqXRyaWNhc1xuICAgICAgZmFpbHVyZUNvdW50ZXIuYWRkKDEsIHtcbiAgICAgICAgb3JpZ2luLFxuICAgICAgICBlcnJvcl90eXBlOiBlcnJvcj8uY29uc3RydWN0b3I/Lm5hbWUgfHwgJ1Vua25vd25FcnJvcicsXG4gICAgICAgICdmdW5jdGlvbi5uYW1lJzogZnVuY3Rpb25OYW1lLFxuICAgICAgICAncmVxdWVzdC5pZCc6IHJlcXVlc3RJZCxcbiAgICAgICAgJ3JvdXRlLmtleSc6IHJvdXRlS2V5LFxuICAgICAgICAnc2VydmljZS5uYW1lJzogc2VydmljZU5hbWUsXG4gICAgICAgICdkZXBsb3ltZW50LmVudmlyb25tZW50Lm5hbWUnOiBlbnZpcm9ubWVudCxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBkdXJhdGlvbk1zID0gcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydFRpbWU7XG5cbiAgICAgIGV4ZWN1dGlvblRpbWVIaXN0b2dyYW0ucmVjb3JkKGR1cmF0aW9uTXMsIHtcbiAgICAgICAgb3JpZ2luLFxuICAgICAgICBzdGF0dXM6ICdlcnJvcicsXG4gICAgICAgICdmdW5jdGlvbi5uYW1lJzogZnVuY3Rpb25OYW1lLFxuICAgICAgICAncmVxdWVzdC5pZCc6IHJlcXVlc3RJZCxcbiAgICAgICAgJ3JvdXRlLmtleSc6IHJvdXRlS2V5LFxuICAgICAgICAnc2VydmljZS5uYW1lJzogc2VydmljZU5hbWUsXG4gICAgICAgICdkZXBsb3ltZW50LmVudmlyb25tZW50Lm5hbWUnOiBlbnZpcm9ubWVudCxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBMb2cgZXN0cnV0dXJhZG8gZGUgZXJyb1xuICAgICAgY29uc3Qgc3RhbmRhcmRMb2dnZXIgPSBnZXRTdGFuZGFyZExvZ2dlcihzcGFuUmVzdWx0LnNwYW4uYXR0cmlidXRlcyk7XG5cbiAgICAgIGF3YWl0IHN0YW5kYXJkTG9nZ2VyLmxvZ0Vycm9yKHtcbiAgICAgICAgbWVzc2FnZTogZXJyb3I/Lm1lc3NhZ2UgfHwgJ1Vua25vd24gZXJyb3Igb2NjdXJyZWQnLFxuICAgICAgICBlcnJvcjogZXJyb3IgfHwgdW5kZWZpbmVkLFxuICAgICAgICBlbnZpcm9ubWVudCxcbiAgICAgICAgZXhlY3V0aW9uOiB7XG4gICAgICAgICAgZnVuY3Rpb25OYW1lOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgaW52b2NhdGlvbklkOlxuICAgICAgICAgICAgc3BhblJlc3VsdC5zcGFuLmF0dHJpYnV0ZXM/LlsnZnVuY3Rpb24uaW52b2NhdGlvbl9pZCddIHx8XG4gICAgICAgICAgICAoYXR0cmlidXRlcy5pbnZvY2F0aW9uSWQgYXMgc3RyaW5nKSxcbiAgICAgICAgICBhd3NSZXF1ZXN0SWQ6IHNwYW5SZXN1bHQuc3Bhbi5hdHRyaWJ1dGVzPy5bXG4gICAgICAgICAgICAnZnVuY3Rpb24uYXdzX3JlcXVlc3RfaWQnXG4gICAgICAgICAgXSBhcyBzdHJpbmcsXG4gICAgICAgICAgb3JpZ2luLFxuICAgICAgICAgIHJvdXRlS2V5OiByb3V0ZUtleSxcbiAgICAgICAgICByZXF1ZXN0SWQ6IHJlcXVlc3RJZCxcbiAgICAgICAgfSxcbiAgICAgICAgcGVyZm9ybWFuY2U6IHtcbiAgICAgICAgICBkdXJhdGlvbk1zLFxuICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgZXJyb3JUeXBlOiBlcnJvcj8uY29uc3RydWN0b3I/Lm5hbWUsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgLy8gRmluYWxpemFyIHNwYW5cbiAgICAgIHNwYW5SZXN1bHQuZW5kKCk7XG4gICAgICBhd2FpdCBmb3JjZUZsdXNoKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIG1pZGR5VGVsZW1ldHJ5TWlkZGxld2FyZSBvbkVycm9yIGhvb2s6JywgZXJyb3IpO1xuICAgIH1cbiAgfSxcbn0pO1xuIl19
307
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zc3QvbWlkZHkvbWlkZGxld2FyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFzQ0EsOENBcUJDO0FBMURELDRDQUFvRTtBQUNwRSw0Q0FBZ0Y7QUFDaEYsMkNBQXlDO0FBQ3pDLHFDQUFpRDtBQUlqRCxTQUFTLHFCQUFxQixDQUFDLEtBQVU7O0lBUXZDLElBQUksS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3pCLE9BQU87WUFDTCxhQUFhLEVBQUUsQ0FBQSxNQUFBLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSwwQ0FBRSxNQUFNLEtBQUksU0FBUztZQUM3RCxVQUFVLEVBQ1IsS0FBSyxDQUFDLGNBQWMsQ0FBQyxVQUFVLEtBQUksTUFBQSxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksMENBQUUsSUFBSSxDQUFBO1lBQ3BFLGlCQUFpQixFQUFFLENBQUEsTUFBQSxLQUFLLENBQUMsT0FBTywwQ0FBRyxZQUFZLENBQUMsS0FBSSxTQUFTO1lBQzdELHNCQUFzQixFQUFFLEtBQUssQ0FBQyxjQUFjLElBQUksRUFBRTtZQUNsRCw4QkFBOEIsRUFBRSxLQUFLLENBQUMscUJBQXFCLElBQUksRUFBRTtZQUNqRSxXQUFXLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxFQUFFO1NBQzlCLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTztRQUNMLGFBQWEsRUFBRSxLQUFLLENBQUMsVUFBVSxJQUFJLFNBQVM7UUFDNUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksU0FBUztRQUNuQyxpQkFBaUIsRUFBRSxDQUFBLE1BQUEsS0FBSyxDQUFDLE9BQU8sMENBQUcsWUFBWSxDQUFDLEtBQUksU0FBUztRQUM3RCxzQkFBc0IsRUFBRSxLQUFLLENBQUMsY0FBYyxJQUFJLEVBQUU7UUFDbEQsOEJBQThCLEVBQUUsS0FBSyxDQUFDLHFCQUFxQixJ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QUNwQzthQUNGLENBQUMsQ0FBQztZQUdILFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUEsc0JBQVUsR0FBRSxDQUFDO1FBQ3JCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyxpREFBaUQsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMxRSxDQUFDO0lBQ0gsQ0FBQyxDQUFBO0NBQ0YsQ0FBQyxDQUFDO0FBOVJVLFFBQUEsd0JBQXdCLDRCQThSbEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgbWlkZHkgZnJvbSAnQG1pZGR5L2NvcmUnO1xuaW1wb3J0IHsgQXR0cmlidXRlcywgbWV0cmljcywgVmFsdWVUeXBlIH0gZnJvbSAnQG9wZW50ZWxlbWV0cnkvYXBpJztcbmltcG9ydCB7IGZvcmNlRmx1c2gsIGdldFN0YW5kYXJkTG9nZ2VyLCBnZXRTdGFuZGFyZFRyYWNlciB9IGZyb20gJy4uL3RlbGVtZXRyeSc7XG5pbXBvcnQgeyBwZXJmb3JtYW5jZSB9IGZyb20gJ3BlcmZfaG9va3MnO1xuaW1wb3J0IHsgZ2V0RW52aXJvbm1lbnRTdGFnZSB9IGZyb20gJy4uLy4uL2NvcmUnO1xuXG5pbnRlcmZhY2UgTWlkZHlNaWRkbGV3YXJlT3B0aW9ucyB7fVxuXG5mdW5jdGlvbiBleHRyYWN0SHR0cEF0dHJpYnV0ZXMoZXZlbnQ6IGFueSk6IHtcbiAgJ2h0dHAubWV0aG9kJzogc3RyaW5nO1xuICAnaHR0cC51cmwnOiBzdHJpbmc7XG4gICdodHRwLnVzZXJfYWdlbnQnOiBzdHJpbmc7XG4gICdodHRwLnBhdGhfcGFyYW1ldGVycyc6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICdodHRwLnF1ZXJ5X3N0cmluZ19wYXJhbWV0ZXJzJzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgJ2h0dHAuYm9keSc6IGFueTtcbn0ge1xuICBpZiAoZXZlbnQucmVxdWVzdENvbnRleHQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJ2h0dHAubWV0aG9kJzogZXZlbnQucmVxdWVzdENvbnRleHQuaHR0cD8ubWV0aG9kIHx8ICd1bmtub3duJyxcbiAgICAgICdodHRwLnVybCc6XG4gICAgICAgIGV2ZW50LnJlcXVlc3RDb250ZXh0LmRvbWFpbk5hbWUgJiYgZXZlbnQucmVxdWVzdENvbnRleHQuaHR0cD8ucGF0aCxcbiAgICAgICdodHRwLnVzZXJfYWdlbnQnOiBldmVudC5oZWFkZXJzPy5bJ3VzZXItYWdlbnQnXSB8fCAndW5rbm93bicsXG4gICAgICAnaHR0cC5wYXRoX3BhcmFtZXRlcnMnOiBldmVudC5wYXRoUGFyYW1ldGVycyB8fCB7fSxcbiAgICAgICdodHRwLnF1ZXJ5X3N0cmluZ19wYXJhbWV0ZXJzJzogZXZlbnQucXVlcnlTdHJpbmdQYXJhbWV0ZXJzIHx8IHt9LFxuICAgICAgJ2h0dHAuYm9keSc6IGV2ZW50LmJvZHkgfHwge30sXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgJ2h0dHAubWV0aG9kJzogZXZlbnQuaHR0cE1ldGhvZCB8fCAndW5rbm93bicsXG4gICAgJ2h0dHAudXJsJzogZXZlbnQucGF0aCB8fCAndW5rbm93bicsXG4gICAgJ2h0dHAudXNlcl9hZ2VudCc6IGV2ZW50LmhlYWRlcnM/LlsnVXNlci1BZ2VudCddIHx8ICd1bmtub3duJyxcbiAgICAnaHR0cC5wYXRoX3BhcmFtZXRlcnMnOiBldmVudC5wYXRoUGFyYW1ldGVycyB8fCB7fSxcbiAgICAnaHR0cC5xdWVyeV9zdHJpbmdfcGFyYW1ldGVycyc6IGV2ZW50LnF1ZXJ5U3RyaW5nUGFyYW1ldGVycyB8fCB7fSxcbiAgICAnaHR0cC5ib2R5JzogZXZlbnQuYm9keSB8fCB7fSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RMb2dnZWRVc2VyKFxuICBldmVudDogYW55XG4pOiB7ICd1c2VyLmVtYWlsJz86IHN0cmluZzsgJ3VzZXIudWlkJz86IHN0cmluZyB9IHwgdW5kZWZpbmVkIHtcbiAgbGV0IGxvZ2dlZFVzZXIgPSBldmVudD8ucmVxdWVzdENvbnRleHQ/LmF1dGhvcml6ZXI/LmxhbWJkYT8ubG9nZ2VyVXNlcjtcblxuICBpZiAobG9nZ2VkVXNlcikge1xuICAgIGxvZ2dlZFVzZXIgPVxuICAgICAgdHlwZW9mIGxvZ2dlZFVzZXIgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShsb2dnZWRVc2VyKSA6IGxvZ2dlZFVzZXI7XG4gICAgaWYgKFxuICAgICAgbG9nZ2VkVXNlcj8udXNlciAmJlxuICAgICAgbG9nZ2VkVXNlcj8udXNlcj8uYWNjb3VudF91c2VyICYmXG4gICAgICBsb2dnZWRVc2VyPy51c2VyPy5hY2NvdW50X3VzZXI/LmFjY291bnRcbiAgICApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICd1c2VyLmVtYWlsJzogbG9nZ2VkVXNlci51c2VyLmVtYWlsLFxuICAgICAgICAndXNlci51aWQnOiBsb2dnZWRVc2VyLnVzZXIuYWNjb3VudF91c2VyLmFjY291bnQudWlkLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0RGVmYXVsdEF0dHJpYnV0ZXMocmVxdWVzdDogYW55KSB7XG4gIGNvbnN0IHsgY29udGV4dDogbGFtYmRhQ29udGV4dCB9ID0gcmVxdWVzdDtcbiAgY29uc3QgZnVuY3Rpb25OYW1lID0gbGFtYmRhQ29udGV4dC5mdW5jdGlvbk5hbWU7XG4gIGNvbnN0IGludm9jYXRpb25JZCA9IGxhbWJkYUNvbnRleHQuYXdzUmVxdWVzdElkO1xuICBjb25zdCBzZXJ2aWNlTmFtZSA9IHByb2Nlc3MuZW52LlNFUlZJQ0VfTkFNRSB8fCAnc3N0LXNlcnZpY2UnO1xuICBjb25zdCBldmVudCA9IHJlcXVlc3QuZXZlbnQ7XG4gIGNvbnN0IHF1ZXJ5U3RyaW5nUGFyYW1ldGVycyA9IGV2ZW50Py5xdWVyeVN0cmluZ1BhcmFtZXRlcnMgfHwge307XG4gIGNvbnN0IGh0dHAgPSBleHRyYWN0SHR0cEF0dHJpYnV0ZXMoZXZlbnQpO1xuICBjb25zdCBvcmlnaW4gPSBxdWVyeVN0cmluZ1BhcmFtZXRlcnMub3JpZ2luIHx8ICd1bmtub3duJztcbiAgY29uc3Qgcm91dGVLZXkgPVxuICAgIGV2ZW50Py5yb3V0ZUtleSB8fCBldmVudD8ucmVxdWVzdENvbnRleHQ/LnJvdXRlS2V5IHx8ICd1bmtub3duJztcbiAgY29uc3QgcmVxdWVzdElkID1cbiAgICBldmVudD8ucmVxdWVzdElkIHx8IGV2ZW50Py5yZXF1ZXN0Q29udGV4dD8ucmVxdWVzdElkIHx8ICd1bmtub3duJztcbiAgY29uc3QgbG9nZ2VkVXNlciA9IGV4dHJhY3RMb2dnZWRVc2VyKGV2ZW50KTtcbiAgY29uc3Qgc3RhZ2UgPSBnZXRFbnZpcm9ubWVudFN0YWdlKCk7XG5cbiAgcmV0dXJuIHtcbiAgICBmdW5jdGlvbk5hbWUsXG4gICAgaW52b2NhdGlvbklkLFxuICAgIHNlcnZpY2VOYW1lLFxuICAgIG9yaWdpbixcbiAgICByb3V0ZUtleSxcbiAgICByZXF1ZXN0SWQsXG4gICAgc3RhZ2UsXG4gICAgLi4uaHR0cCxcbiAgICAuLi5sb2dnZWRVc2VyLFxuICB9O1xufVxuXG5leHBvcnQgY29uc3QgbWlkZHlUZWxlbWV0cnlNaWRkbGV3YXJlID0gKFxuICBvcHRpb25zPzogTWlkZHlNaWRkbGV3YXJlT3B0aW9uc1xuKTogbWlkZHkuTWlkZGxld2FyZU9iaiA9PiAoe1xuICBiZWZvcmU6IGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuXG4gICAgICBjb25zdCBhdHRyaWJ1dGVzID0gZXh0cmFjdERlZmF1bHRBdHRyaWJ1dGVzKHJlcXVlc3QpO1xuXG4gICAgICAvLyBVc2FyIFN0YW5kYXJkVHJhY2VyIHBhcmEgY3JpYXIgc3BhbiBjb20gYXRyaWJ1dG9zIHBhZHJvbml6YWRvc1xuICAgICAgY29uc3Qgc3RhbmRhcmRUcmFjZXIgPSBnZXRTdGFuZGFyZFRyYWNlcigpO1xuICAgICAgY29uc3Qgc3BhblJlc3VsdCA9IHN0YW5kYXJkVHJhY2VyLnN0YXJ0U3Bhbih7XG4gICAgICAgIHNwYW5OYW1lOiBhdHRyaWJ1dGVzLmZ1bmN0aW9uTmFtZSxcbiAgICAgICAgc2VydmljZU5hbWU6IGF0dHJpYnV0ZXMuc2VydmljZU5hbWUsXG4gICAgICAgIGVudmlyb25tZW50OiBhdHRyaWJ1dGVzLnN0YWdlLFxuICAgICAgICBodHRwOiB7XG4gICAgICAgICAgbWV0aG9kOiBhdHRyaWJ1dGVzWydodHRwLm1ldGhvZCddLFxuICAgICAgICAgIHVybDogYXR0cmlidXRlc1snaHR0cC51cmwnXSxcbiAgICAgICAgICBhZ2VudDogYXR0cmlidXRlc1snaHR0cC51c2VyX2FnZW50J10sXG4gICAgICAgICAgcGFyYW1zOiBhdHRyaWJ1dGVzWydodHRwLnBhdGhfcGFyYW1ldGVycyddLFxuICAgICAgICAgIHF1ZXJ5OiBhdHRyaWJ1dGVzWydodHRwLnF1ZXJ5X3N0cmluZ19wYXJhbWV0ZXJzJ10sXG4gICAgICAgIH0sXG4gICAgICAgIGV4ZWN1dGlvbjoge1xuICAgICAgICAgIGZ1bmN0aW9uTmFtZTogYXR0cmlidXRlcy5mdW5jdGlvbk5hbWUsXG4gICAgICAgICAgaW52b2NhdGlvbklkOiBhdHRyaWJ1dGVzLmludm9jYXRpb25JZCxcbiAgICAgICAgICBhd3NSZXF1ZXN0SWQ6IGF0dHJpYnV0ZXMuaW52b2NhdGlvbklkLFxuICAgICAgICAgIG9yaWdpbjogYXR0cmlidXRlcy5vcmlnaW4sXG4gICAgICAgICAgcm91dGVLZXk6IGF0dHJpYnV0ZXMucm91dGVLZXksXG4gICAgICAgICAgcmVxdWVzdElkOiBhdHRyaWJ1dGVzLnJlcXVlc3RJZCxcbiAgICAgICAgICBsb2dnZWRVc2VyOiB7XG4gICAgICAgICAgICBlbWFpbDogYXR0cmlidXRlc1sndXNlci5lbWFpbCddLFxuICAgICAgICAgICAgdWlkOiBhdHRyaWJ1dGVzWyd1c2VyLnVpZCddLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgbWV0ZXIgPSBtZXRyaWNzLmdldE1ldGVyKG9yaWdpbik7XG5cbiAgICAgIGNvbnN0IGV4ZWN1dGlvblRpbWVIaXN0b2dyYW0gPSBtZXRlci5jcmVhdGVIaXN0b2dyYW0oXG4gICAgICAgICdsYW1iZGFfZXhlY3V0aW9uX2R1cmF0aW9uJyxcbiAgICAgICAge1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnVGVtcG8gdG90YWwgZGUgZXhlY3XDp8OjbyBkbyBMYW1iZGEgZW0gbXMnLFxuICAgICAgICAgIHVuaXQ6ICdtcycsXG4gICAgICAgICAgdmFsdWVUeXBlOiBWYWx1ZVR5cGUuRE9VQkxFLFxuICAgICAgICB9XG4gICAgICApO1xuICAgICAgY29uc3Qgc3VjY2Vzc0NvdW50ZXIgPSBtZXRlci5jcmVhdGVDb3VudGVyKCd0b3RhbF9zdWNjZXNzZnVsX3B1cmNoYXNlcycsIHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdUb3RhbCBkZSBjb21wcmFzIGJlbS1zdWNlZGlkYXMnLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBmYWlsdXJlQ291bnRlciA9IG1ldGVyLmNyZWF0ZUNvdW50ZXIoJ3RvdGFsX2ZhaWxlZF9wdXJjaGFzZXMnLCB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVG90YWwgZGUgY29tcHJhcyBjb20gZmFsaGEnLFxuICAgICAgfSk7XG5cbiAgICAgIChyZXF1ZXN0LmNvbnRleHQgYXMgYW55KS5vdGVsID0ge1xuICAgICAgICBzcGFuUmVzdWx0LFxuICAgICAgICBtZXRlcixcbiAgICAgICAgZXhlY3V0aW9uVGltZUhpc3RvZ3JhbSxcbiAgICAgICAgc3VjY2Vzc0NvdW50ZXIsXG4gICAgICAgIGZhaWx1cmVDb3VudGVyLFxuICAgICAgICBzdGFydFRpbWUsXG4gICAgICAgIHNlcnZpY2VOYW1lOiBhdHRyaWJ1dGVzLnNlcnZpY2VOYW1lLFxuICAgICAgICBlbnZpcm9ubWVudDogYXR0cmlidXRlcy5zdGFnZSxcbiAgICAgICAgb3JpZ2luOiBhdHRyaWJ1dGVzLm9yaWdpbixcbiAgICAgICAgcm91dGVLZXk6IGF0dHJpYnV0ZXMucm91dGVLZXksXG4gICAgICAgIHJlcXVlc3RJZDogYXR0cmlidXRlcy5yZXF1ZXN0SWQsXG4gICAgICAgIGxvZ2dlZFVzZXI6IHtcbiAgICAgICAgICBlbWFpbDogYXR0cmlidXRlc1sndXNlci5lbWFpbCddLFxuICAgICAgICAgIHVpZDogYXR0cmlidXRlc1sndXNlci51aWQnXSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluIG1pZGR5VGVsZW1ldHJ5TWlkZGxld2FyZSBiZWZvcmUgaG9vazonLCBlcnJvcik7XG4gICAgfVxuICB9LFxuXG4gIGFmdGVyOiBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBvdGVsRGF0YSA9IChyZXF1ZXN0LmNvbnRleHQgYXMgYW55KS5vdGVsO1xuICAgICAgaWYgKCFvdGVsRGF0YSkgcmV0dXJuO1xuICAgICAgY29uc3QgZXZlbnQgPSByZXF1ZXN0LmV2ZW50IGFzIGFueTtcblxuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IGV4dHJhY3REZWZhdWx0QXR0cmlidXRlcyhldmVudCk7XG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgc3BhblJlc3VsdCxcbiAgICAgICAgc3VjY2Vzc0NvdW50ZXIsXG4gICAgICAgIGV4ZWN1dGlvblRpbWVIaXN0b2dyYW0sXG4gICAgICAgIHN0YXJ0VGltZSxcbiAgICAgICAgc2VydmljZU5hbWUsXG4gICAgICAgIGVudmlyb25tZW50LFxuICAgICAgfSA9IG90ZWxEYXRhO1xuXG4gICAgICAvLyBNYXJjYXIgc3BhbiBjb21vIHN1Y2Vzc28gdXNhbmRvIFN0YW5kYXJkVHJhY2VyXG4gICAgICBzcGFuUmVzdWx0LnNldFN1Y2Nlc3ModHJ1ZSk7XG5cbiAgICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9XG4gICAgICAgIHNwYW5SZXN1bHQuc3Bhbi5hdHRyaWJ1dGVzPy5bJ2Z1bmN0aW9uLm5hbWUnXSB8fFxuICAgICAgICAoYXR0cmlidXRlcy5mdW5jdGlvbk5hbWUgYXMgc3RyaW5nKTtcbiAgICAgIGNvbnN0IHJvdXRlS2V5ID1cbiAgICAgICAgc3BhblJlc3VsdC5zcGFuLmF0dHJpYnV0ZXM/Llsncm91dGUua2V5J10gfHxcbiAgICAgICAgKGF0dHJpYnV0ZXMucm91dGVLZXkgYXMgc3RyaW5nKTtcbiAgICAgIGNvbnN0IHJlcXVlc3RJZCA9XG4gICAgICAgIHNwYW5SZXN1bHQuc3Bhbi5hdHRyaWJ1dGVzPy5bJ3JlcXVlc3QuaWQnXSB8fFxuICAgICAgICAoYXR0cmlidXRlcy5yZXF1ZXN0SWQgYXMgc3RyaW5nKTtcblxuICAgICAgLy8gTcOpdHJpY2FzXG4gICAgICBzdWNjZXNzQ291bnRlci5hZGQoMSwge1xuICAgICAgICBvcmlnaW4sXG4gICAgICAgICdmdW5jdGlvbi5uYW1lJzogZnVuY3Rpb25OYW1lLFxuICAgICAgICAncmVxdWVzdC5pZCc6IHJlcXVlc3RJZCxcbiAgICAgICAgJ3JvdXRlLmtleSc6IHJvdXRlS2V5LFxuICAgICAgICAnc2VydmljZS5uYW1lJzogc2VydmljZU5hbWUsXG4gICAgICAgICdkZXBsb3ltZW50LmVudmlyb25tZW50Lm5hbWUnOiBlbnZpcm9ubWVudCxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBkdXJhdGlvbk1zID0gcGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydFRpbWU7XG5cbiAgICAgIGV4ZWN1dGlvblRpbWVIaXN0b2dyYW0ucmVjb3JkKGR1cmF0aW9uTXMsIHtcbiAgICAgICAgb3JpZ2luLFxuICAgICAgICBzdGF0dXM6ICdzdWNjZXNzJyxcbiAgICAgICAgJ2Z1bmN0aW9uLm5hbWUnOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgICdyZXF1ZXN0LmlkJzogcmVxdWVzdElkLFxuICAgICAgICAncm91dGUua2V5Jzogcm91dGVLZXksXG4gICAgICAgICdzZXJ2aWNlLm5hbWUnOiBzZXJ2aWNlTmFtZSxcbiAgICAgICAgJ2RlcGxveW1lbnQuZW52aXJvbm1lbnQubmFtZSc6IGVudmlyb25tZW50LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIExvZyBlc3RydXR1cmFkbyBkZSBzdWNlc3NvXG4gICAgICBjb25zdCBzdGFuZGFyZExvZ2dlciA9IGdldFN0YW5kYXJkTG9nZ2VyKGF0dHJpYnV0ZXMgYXMgYW55IGFzIEF0dHJpYnV0ZXMpO1xuXG4gICAgICBhd2FpdCBzdGFuZGFyZExvZ2dlci5sb2dJbmZvKHtcbiAgICAgICAgbWVzc2FnZTogJ1JlcXVlc3QgY29tcGxldGVkIHN1Y2Nlc3NmdWxseScsXG4gICAgICAgIGVudmlyb25tZW50LFxuICAgICAgICBodHRwOiB7XG4gICAgICAgICAgYWdlbnQ6IGF0dHJpYnV0ZXNbJ2h0dHAudXNlcl9hZ2VudCddLFxuICAgICAgICAgIG1ldGhvZDogYXR0cmlidXRlc1snaHR0cC5tZXRob2QnXSxcbiAgICAgICAgICB1cmw6IGF0dHJpYnV0ZXNbJ2h0dHAudXJsJ10sXG4gICAgICAgICAgcGFyYW1zOiBhdHRyaWJ1dGVzWydodHRwLnBhdGhfcGFyYW1ldGVycyddLFxuICAgICAgICAgIHF1ZXJ5OiBhdHRyaWJ1dGVzWydodHRwLnF1ZXJ5X3N0cmluZ19wYXJhbWV0ZXJzJ10sXG4gICAgICAgICAgYm9keTogYXR0cmlidXRlc1snaHR0cC5ib2R5J10sXG4gICAgICAgIH0sXG4gICAgICAgIHVzZXI6IHtcbiAgICAgICAgICB1aWQ6IGF0dHJpYnV0ZXNbJ3VzZXIudWlkJ10sXG4gICAgICAgICAgZW1haWw6IGF0dHJpYnV0ZXNbJ3VzZXIuZW1haWwnXSxcbiAgICAgICAgfSxcbiAgICAgICAgZXhlY3V0aW9uOiB7XG4gICAgICAgICAgZnVuY3Rpb25OYW1lOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgaW52b2NhdGlvbklkOlxuICAgICAgICAgICAgc3BhblJlc3VsdC5zcGFuLmF0dHJpYnV0ZXM/LlsnZnVuY3Rpb24uaW52b2NhdGlvbl9pZCddIHx8XG4gICAgICAgICAgICAoYXR0cmlidXRlcy5pbnZvY2F0aW9uSWQgYXMgc3RyaW5nKSxcbiAgICAgICAgICBvcmlnaW4sXG4gICAgICAgICAgcm91dGVLZXk6IHJvdXRlS2V5LFxuICAgICAgICAgIHJlcXVlc3RJZDogcmVxdWVzdElkLFxuICAgICAgICAgIGxvZ2dlZFVzZXI6IHtcbiAgICAgICAgICAgIHVpZDogKHNwYW5SZXN1bHQuc3Bhbi5hdHRyaWJ1dGVzPy5bJ2xvZ2dlZF91c2VyLnVpZCddIHx8XG4gICAgICAgICAgICAgIGF0dHJpYnV0ZXNbJ3VzZXIudWlkJ10pIGFzIHN0cmluZyxcbiAgICAgICAgICAgIGVtYWlsOiAoc3BhblJlc3VsdC5zcGFuLmF0dHJpYnV0ZXM/LlsnbG9nZ2VkX3VzZXIuZW1haWwnXSB8fFxuICAgICAgICAgICAgICBhdHRyaWJ1dGVzWyd1c2VyLmVtYWlsJ10pIGFzIHN0cmluZyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBwZXJmb3JtYW5jZToge1xuICAgICAgICAgIGR1cmF0aW9uTXMsXG4gICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBGaW5hbGl6YXIgc3BhblxuICAgICAgc3BhblJlc3VsdC5lbmQoKTtcbiAgICAgIGF3YWl0IGZvcmNlRmx1c2goKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW4gbWlkZHlUZWxlbWV0cnlNaWRkbGV3YXJlIGFmdGVyIGhvb2s6JywgZXJyb3IpO1xuICAgIH1cbiAgfSxcblxuICBvbkVycm9yOiBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBvdGVsRGF0YSA9IChyZXF1ZXN0LmNvbnRleHQgYXMgYW55KS5vdGVsO1xuICAgICAgaWYgKCFvdGVsRGF0YSkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBhdHRyaWJ1dGVzID0gZXh0cmFjdERlZmF1bHRBdHRyaWJ1dGVzKHJlcXVlc3QuZXZlbnQpO1xuXG4gICAgICBjb25zdCB7XG4gICAgICAgIHNwYW5SZXN1bHQsXG4gICAgICAgIGZhaWx1cmVDb3VudGVyLFxuICAgICAgICBleGVjdXRpb25UaW1lSGlzdG9ncmFtLFxuICAgICAgICBzdGFydFRpbWUsXG4gICAgICAgIHNlcnZpY2VOYW1lLFxuICAgICAgICBlbnZpcm9ubWVudCxcbiAgICAgICAgb3JpZ2luLFxuICAgICAgfSA9IG90ZWxEYXRhO1xuICAgICAgY29uc3QgZXJyb3IgPSByZXF1ZXN0LmVycm9yO1xuXG4gICAgICAvLyBNYXJjYXIgc3BhbiBjb21vIGVycm8gdXNhbmRvIFN0YW5kYXJkVHJhY2VyXG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgc3BhblJlc3VsdC5zZXRFcnJvcihlcnJvcik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9XG4gICAgICAgIHNwYW5SZXN1bHQuc3Bhbi5hdHRyaWJ1dGVzPy5bJ2Z1bmN0aW9uLm5hbWUnXSB8fFxuICAgICAgICBhdHRyaWJ1dGVzLmZ1bmN0aW9uTmFtZSB8fFxuICAgICAgICAndW5rbm93bic7XG4gICAgICBjb25zdCByZXF1ZXN0SWQgPVxuICAgICAgICBzcGFuUmVzdWx0LnNwYW4uYXR0cmlidXRlcz8uWydyZXF1ZXN0LmlkJ10gfHxcbiAgICAgICAgYXR0cmlidXRlcy5yZXF1ZXN0SWQgfHxcbiAgICAgICAgJ3Vua25vd24nO1xuICAgICAgY29uc3Qgcm91dGVLZXkgPVxuICAgICAgICBzcGFuUmVzdWx0LnNwYW4uYXR0cmlidXRlcz8uWydyb3V0ZS5rZXknXSB8fFxuICAgICAgICBhdHRyaWJ1dGVzLnJvdXRlS2V5IHx8XG4gICAgICAgICd1bmtub3duJztcblxuICAgICAgLy8gTcOpdHJpY2FzXG4gICAgICBmYWlsdXJlQ291bnRlci5hZGQoMSwge1xuICAgICAgICBvcmlnaW4sXG4gICAgICAgIGVycm9yX3R5cGU6IGVycm9yPy5jb25zdHJ1Y3Rvcj8ubmFtZSB8fCAnVW5rbm93bkVycm9yJyxcbiAgICAgICAgJ2Z1bmN0aW9uLm5hbWUnOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgICdyZXF1ZXN0LmlkJzogcmVxdWVzdElkLFxuICAgICAgICAncm91dGUua2V5Jzogcm91dGVLZXksXG4gICAgICAgICdzZXJ2aWNlLm5hbWUnOiBzZXJ2aWNlTmFtZSxcbiAgICAgICAgJ2RlcGxveW1lbnQuZW52aXJvbm1lbnQubmFtZSc6IGVudmlyb25tZW50LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGR1cmF0aW9uTXMgPSBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0VGltZTtcblxuICAgICAgZXhlY3V0aW9uVGltZUhpc3RvZ3JhbS5yZWNvcmQoZHVyYXRpb25Ncywge1xuICAgICAgICBvcmlnaW4sXG4gICAgICAgIHN0YXR1czogJ2Vycm9yJyxcbiAgICAgICAgJ2Z1bmN0aW9uLm5hbWUnOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgICdyZXF1ZXN0LmlkJzogcmVxdWVzdElkLFxuICAgICAgICAncm91dGUua2V5Jzogcm91dGVLZXksXG4gICAgICAgICdzZXJ2aWNlLm5hbWUnOiBzZXJ2aWNlTmFtZSxcbiAgICAgICAgJ2RlcGxveW1lbnQuZW52aXJvbm1lbnQubmFtZSc6IGVudmlyb25tZW50LFxuICAgICAgfSk7XG5cbiAgICAgIC8vIExvZyBlc3RydXR1cmFkbyBkZSBlcnJvXG4gICAgICBjb25zdCBzdGFuZGFyZExvZ2dlciA9IGdldFN0YW5kYXJkTG9nZ2VyKGF0dHJpYnV0ZXMgYXMgYW55IGFzIEF0dHJpYnV0ZXMpO1xuXG4gICAgICBhd2FpdCBzdGFuZGFyZExvZ2dlci5sb2dFcnJvcih7XG4gICAgICAgIG1lc3NhZ2U6IGVycm9yPy5tZXNzYWdlIHx8ICdVbmtub3duIGVycm9yIG9jY3VycmVkJyxcbiAgICAgICAgZXJyb3I6IGVycm9yIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgZW52aXJvbm1lbnQsXG4gICAgICAgIGh0dHA6IHtcbiAgICAgICAgICBhZ2VudDogYXR0cmlidXRlc1snaHR0cC51c2VyX2FnZW50J10sXG4gICAgICAgICAgbWV0aG9kOiBhdHRyaWJ1dGVzWydodHRwLm1ldGhvZCddLFxuICAgICAgICAgIHVybDogYXR0cmlidXRlc1snaHR0cC51cmwnXSxcbiAgICAgICAgICBwYXJhbXM6IGF0dHJpYnV0ZXNbJ2h0dHAucGF0aF9wYXJhbWV0ZXJzJ10sXG4gICAgICAgICAgcXVlcnk6IGF0dHJpYnV0ZXNbJ2h0dHAucXVlcnlfc3RyaW5nX3BhcmFtZXRlcnMnXSxcbiAgICAgICAgICBib2R5OiBhdHRyaWJ1dGVzWydodHRwLmJvZHknXSxcbiAgICAgICAgfSxcbiAgICAgICAgdXNlcjoge1xuICAgICAgICAgIHVpZDogYXR0cmlidXRlc1sndXNlci51aWQnXSxcbiAgICAgICAgICBlbWFpbDogYXR0cmlidXRlc1sndXNlci5lbWFpbCddLFxuICAgICAgICB9LFxuICAgICAgICBleGVjdXRpb246IHtcbiAgICAgICAgICBmdW5jdGlvbk5hbWU6IGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICBpbnZvY2F0aW9uSWQ6XG4gICAgICAgICAgICBzcGFuUmVzdWx0LnNwYW4uYXR0cmlidXRlcz8uWydmdW5jdGlvbi5pbnZvY2F0aW9uX2lkJ10gfHxcbiAgICAgICAgICAgIChhdHRyaWJ1dGVzLmludm9jYXRpb25JZCBhcyBzdHJpbmcpLFxuICAgICAgICAgIGF3c1JlcXVlc3RJZDogc3BhblJlc3VsdC5zcGFuLmF0dHJpYnV0ZXM/LltcbiAgICAgICAgICAgICdmdW5jdGlvbi5hd3NfcmVxdWVzdF9pZCdcbiAgICAgICAgICBdIGFzIHN0cmluZyxcbiAgICAgICAgICBvcmlnaW4sXG4gICAgICAgICAgcm91dGVLZXk6IHJvdXRlS2V5LFxuICAgICAgICAgIHJlcXVlc3RJZDogcmVxdWVzdElkLFxuICAgICAgICAgIGxvZ2dlZFVzZXI6IHtcbiAgICAgICAgICAgIHVpZDogKHNwYW5SZXN1bHQuc3Bhbi5hdHRyaWJ1dGVzPy5bJ2xvZ2dlZF91c2VyLnVpZCddIHx8XG4gICAgICAgICAgICAgIGF0dHJpYnV0ZXNbJ3VzZXIudWlkJ10pIGFzIHN0cmluZyxcbiAgICAgICAgICAgIGVtYWlsOiAoc3BhblJlc3VsdC5zcGFuLmF0dHJpYnV0ZXM/LlsnbG9nZ2VkX3VzZXIuZW1haWwnXSB8fFxuICAgICAgICAgICAgICBhdHRyaWJ1dGVzWyd1c2VyLmVtYWlsJ10pIGFzIHN0cmluZyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBwZXJmb3JtYW5jZToge1xuICAgICAgICAgIGR1cmF0aW9uTXMsXG4gICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBlcnJvclR5cGU6IGVycm9yPy5jb25zdHJ1Y3Rvcj8ubmFtZSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBGaW5hbGl6YXIgc3BhblxuICAgICAgc3BhblJlc3VsdC5lbmQoKTtcbiAgICAgIGF3YWl0IGZvcmNlRmx1c2goKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW4gbWlkZHlUZWxlbWV0cnlNaWRkbGV3YXJlIG9uRXJyb3IgaG9vazonLCBlcnJvcik7XG4gICAgfVxuICB9LFxufSk7XG4iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mecanizou/telemetry-hub",
3
- "version": "1.3.4",
3
+ "version": "1.3.5",
4
4
  "description": "Mecanizou telemetry lib",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",