@projectcor/maia-components 2.46.0 → 2.48.0

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.
@@ -64,13 +64,55 @@ export var getAgentConnectors = /*#__PURE__*/function () {
64
64
  return _ref2.apply(this, arguments);
65
65
  };
66
66
  }();
67
- export var saveAgentConnectors = /*#__PURE__*/function () {
68
- var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(agentId, connectorSlugs) {
69
- var response;
67
+
68
+ /** Fetch a fresh OAuth URL on click: its state expires after ten minutes. */
69
+ export var authorizeConnector = /*#__PURE__*/function () {
70
+ var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(slug) {
71
+ var response, payload;
70
72
  return _regeneratorRuntime.wrap(function (_context3) {
71
73
  while (1) switch (_context3.prev = _context3.next) {
72
74
  case 0:
73
75
  _context3.next = 1;
76
+ return fetchMaia({
77
+ path: "connectors/".concat(encodeURIComponent(slug), "/authorize"),
78
+ method: 'POST'
79
+ });
80
+ case 1:
81
+ response = _context3.sent;
82
+ if (response.ok) {
83
+ _context3.next = 2;
84
+ break;
85
+ }
86
+ throw new Error('Failed to start connector authorization');
87
+ case 2:
88
+ _context3.next = 3;
89
+ return response.json();
90
+ case 3:
91
+ payload = _context3.sent;
92
+ if (payload.auth_url) {
93
+ _context3.next = 4;
94
+ break;
95
+ }
96
+ throw new Error('Connector authorization URL is missing');
97
+ case 4:
98
+ return _context3.abrupt("return", payload.auth_url);
99
+ case 5:
100
+ case "end":
101
+ return _context3.stop();
102
+ }
103
+ }, _callee3);
104
+ }));
105
+ return function authorizeConnector(_x2) {
106
+ return _ref3.apply(this, arguments);
107
+ };
108
+ }();
109
+ export var saveAgentConnectors = /*#__PURE__*/function () {
110
+ var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(agentId, connectorSlugs) {
111
+ var response;
112
+ return _regeneratorRuntime.wrap(function (_context4) {
113
+ while (1) switch (_context4.prev = _context4.next) {
114
+ case 0:
115
+ _context4.next = 1;
74
116
  return fetchMaia({
75
117
  path: "agents/".concat(agentId, "/connectors"),
76
118
  method: 'POST',
@@ -79,22 +121,22 @@ export var saveAgentConnectors = /*#__PURE__*/function () {
79
121
  }
80
122
  });
81
123
  case 1:
82
- response = _context3.sent;
124
+ response = _context4.sent;
83
125
  if (response.ok) {
84
- _context3.next = 2;
126
+ _context4.next = 2;
85
127
  break;
86
128
  }
87
129
  throw new Error('Failed to save agent connectors');
88
130
  case 2:
89
- return _context3.abrupt("return", response.json());
131
+ return _context4.abrupt("return", response.json());
90
132
  case 3:
91
133
  case "end":
92
- return _context3.stop();
134
+ return _context4.stop();
93
135
  }
94
- }, _callee3);
136
+ }, _callee4);
95
137
  }));
96
- return function saveAgentConnectors(_x2, _x3) {
97
- return _ref3.apply(this, arguments);
138
+ return function saveAgentConnectors(_x3, _x4) {
139
+ return _ref4.apply(this, arguments);
98
140
  };
99
141
  }();
100
142
  export var openConnectorAuthorizationWindows = function openConnectorAuthorizationWindows(authorizations, popupWindow) {
@@ -128,47 +170,47 @@ var isConnectorOAuthMessage = function isConnectorOAuthMessage(data) {
128
170
 
129
171
  /** Waits until the OAuth popup finishes, then confirms the company token via GET. */
130
172
  export var waitForConnectorAuthorization = /*#__PURE__*/function () {
131
- var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee6(_ref4) {
132
- var agentId, slugs, popup, _ref4$timeoutMs, timeoutMs, pending, oauthError, authorizedSlugs;
133
- return _regeneratorRuntime.wrap(function (_context6) {
134
- while (1) switch (_context6.prev = _context6.next) {
173
+ var _ref6 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee7(_ref5) {
174
+ var agentId, slugs, popup, _ref5$timeoutMs, timeoutMs, pending, oauthError, authorizedSlugs;
175
+ return _regeneratorRuntime.wrap(function (_context7) {
176
+ while (1) switch (_context7.prev = _context7.next) {
135
177
  case 0:
136
- agentId = _ref4.agentId, slugs = _ref4.slugs, popup = _ref4.popup, _ref4$timeoutMs = _ref4.timeoutMs, timeoutMs = _ref4$timeoutMs === void 0 ? 180000 : _ref4$timeoutMs;
178
+ agentId = _ref5.agentId, slugs = _ref5.slugs, popup = _ref5.popup, _ref5$timeoutMs = _ref5.timeoutMs, timeoutMs = _ref5$timeoutMs === void 0 ? 180000 : _ref5$timeoutMs;
137
179
  if (slugs.length) {
138
- _context6.next = 1;
180
+ _context7.next = 1;
139
181
  break;
140
182
  }
141
- return _context6.abrupt("return", {
183
+ return _context7.abrupt("return", {
142
184
  authorized: []
143
185
  });
144
186
  case 1:
145
187
  pending = new Set(slugs);
146
188
  authorizedSlugs = /*#__PURE__*/function () {
147
- var _ref6 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4() {
189
+ var _ref7 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee5() {
148
190
  var connectors;
149
- return _regeneratorRuntime.wrap(function (_context4) {
150
- while (1) switch (_context4.prev = _context4.next) {
191
+ return _regeneratorRuntime.wrap(function (_context5) {
192
+ while (1) switch (_context5.prev = _context5.next) {
151
193
  case 0:
152
- _context4.next = 1;
194
+ _context5.next = 1;
153
195
  return getAgentConnectors(agentId);
154
196
  case 1:
155
- connectors = _context4.sent;
156
- return _context4.abrupt("return", connectors.filter(function (connector) {
197
+ connectors = _context5.sent;
198
+ return _context5.abrupt("return", connectors.filter(function (connector) {
157
199
  return pending.has(connector.slug) && connector.user_authorized;
158
200
  }).map(function (connector) {
159
201
  return connector.slug;
160
202
  }));
161
203
  case 2:
162
204
  case "end":
163
- return _context4.stop();
205
+ return _context5.stop();
164
206
  }
165
- }, _callee4);
207
+ }, _callee5);
166
208
  }));
167
209
  return function authorizedSlugs() {
168
- return _ref6.apply(this, arguments);
210
+ return _ref7.apply(this, arguments);
169
211
  };
170
212
  }();
171
- return _context6.abrupt("return", new Promise(function (resolve) {
213
+ return _context7.abrupt("return", new Promise(function (resolve) {
172
214
  var finished = false;
173
215
  // Declarados antes porque `finish` los limpia y a su vez los tres lo invocan.
174
216
  // Para cuando alguno puede disparar, el bloque de abajo ya los asignó.
@@ -176,47 +218,47 @@ export var waitForConnectorAuthorization = /*#__PURE__*/function () {
176
218
  var poll;
177
219
  var timer;
178
220
  var finish = /*#__PURE__*/function () {
179
- var _ref7 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee5() {
221
+ var _ref8 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee6() {
180
222
  var authorized, _t;
181
- return _regeneratorRuntime.wrap(function (_context5) {
182
- while (1) switch (_context5.prev = _context5.next) {
223
+ return _regeneratorRuntime.wrap(function (_context6) {
224
+ while (1) switch (_context6.prev = _context6.next) {
183
225
  case 0:
184
226
  if (!finished) {
185
- _context5.next = 1;
227
+ _context6.next = 1;
186
228
  break;
187
229
  }
188
- return _context5.abrupt("return");
230
+ return _context6.abrupt("return");
189
231
  case 1:
190
232
  finished = true;
191
233
  window.removeEventListener('message', onMessage);
192
234
  window.clearInterval(poll);
193
235
  window.clearTimeout(timer);
194
- _context5.prev = 2;
195
- _context5.next = 3;
236
+ _context6.prev = 2;
237
+ _context6.next = 3;
196
238
  return authorizedSlugs();
197
239
  case 3:
198
- authorized = _context5.sent;
240
+ authorized = _context6.sent;
199
241
  resolve({
200
242
  authorized: authorized,
201
243
  error: authorized.length ? undefined : oauthError
202
244
  });
203
- _context5.next = 5;
245
+ _context6.next = 5;
204
246
  break;
205
247
  case 4:
206
- _context5.prev = 4;
207
- _t = _context5["catch"](2);
248
+ _context6.prev = 4;
249
+ _t = _context6["catch"](2);
208
250
  resolve({
209
251
  authorized: [],
210
252
  error: oauthError
211
253
  });
212
254
  case 5:
213
255
  case "end":
214
- return _context5.stop();
256
+ return _context6.stop();
215
257
  }
216
- }, _callee5, null, [[2, 4]]);
258
+ }, _callee6, null, [[2, 4]]);
217
259
  }));
218
260
  return function finish() {
219
- return _ref7.apply(this, arguments);
261
+ return _ref8.apply(this, arguments);
220
262
  };
221
263
  }();
222
264
  onMessage = function onMessage(event) {
@@ -241,12 +283,12 @@ export var waitForConnectorAuthorization = /*#__PURE__*/function () {
241
283
  }));
242
284
  case 2:
243
285
  case "end":
244
- return _context6.stop();
286
+ return _context7.stop();
245
287
  }
246
- }, _callee6);
288
+ }, _callee7);
247
289
  }));
248
- return function waitForConnectorAuthorization(_x4) {
249
- return _ref5.apply(this, arguments);
290
+ return function waitForConnectorAuthorization(_x5) {
291
+ return _ref6.apply(this, arguments);
250
292
  };
251
293
  }();
252
294
  export var connectorAuthErrorMessage = function connectorAuthErrorMessage(error) {
@@ -255,4 +297,4 @@ export var connectorAuthErrorMessage = function connectorAuthErrorMessage(error)
255
297
  }
256
298
  return "".concat(error.name, ": ").concat(error.message);
257
299
  };
258
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmZXRjaE1haWEiLCJnZXRBdmFpbGFibGVDb25uZWN0b3JzIiwiX3JlZiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwicmVzcG9uc2UiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsInBhdGgiLCJtZXRob2QiLCJzZW50Iiwib2siLCJFcnJvciIsImFicnVwdCIsImpzb24iLCJzdG9wIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJnZXRBZ2VudENvbm5lY3RvcnMiLCJfcmVmMiIsIl9jYWxsZWUyIiwiYWdlbnRJZCIsIl9jb250ZXh0MiIsImNvbmNhdCIsIl94Iiwic2F2ZUFnZW50Q29ubmVjdG9ycyIsIl9yZWYzIiwiX2NhbGxlZTMiLCJjb25uZWN0b3JTbHVncyIsIl9jb250ZXh0MyIsImJvZHkiLCJjb25uZWN0b3Jfc2x1Z3MiLCJfeDIiLCJfeDMiLCJvcGVuQ29ubmVjdG9yQXV0aG9yaXphdGlvbldpbmRvd3MiLCJhdXRob3JpemF0aW9ucyIsInBvcHVwV2luZG93IiwibGVuZ3RoIiwiY2xvc2VkIiwiY2xvc2UiLCJfYXV0aG9yaXphdGlvbnMiLCJfdG9BcnJheSIsImZpcnN0QXV0aG9yaXphdGlvbiIsInJlbWFpbmluZ0F1dGhvcml6YXRpb25zIiwiX2FycmF5TGlrZVRvQXJyYXkiLCJzbGljZSIsIm9wZW5lZCIsImxvY2F0aW9uIiwiaHJlZiIsImF1dGhfdXJsIiwid2luZG93Iiwib3BlbiIsImZvckVhY2giLCJhdXRob3JpemF0aW9uIiwiaXNDb25uZWN0b3JPQXV0aE1lc3NhZ2UiLCJkYXRhIiwiX3R5cGVvZiIsInR5cGUiLCJ3YWl0Rm9yQ29ubmVjdG9yQXV0aG9yaXphdGlvbiIsIl9yZWY1IiwiX2NhbGxlZTYiLCJfcmVmNCIsInNsdWdzIiwicG9wdXAiLCJfcmVmNCR0aW1lb3V0TXMiLCJ0aW1lb3V0TXMiLCJwZW5kaW5nIiwib2F1dGhFcnJvciIsImF1dGhvcml6ZWRTbHVncyIsIl9jb250ZXh0NiIsImF1dGhvcml6ZWQiLCJTZXQiLCJfcmVmNiIsIl9jYWxsZWU0IiwiY29ubmVjdG9ycyIsIl9jb250ZXh0NCIsImZpbHRlciIsImNvbm5lY3RvciIsImhhcyIsInNsdWciLCJ1c2VyX2F1dGhvcml6ZWQiLCJtYXAiLCJQcm9taXNlIiwicmVzb2x2ZSIsImZpbmlzaGVkIiwib25NZXNzYWdlIiwicG9sbCIsInRpbWVyIiwiZmluaXNoIiwiX3JlZjciLCJfY2FsbGVlNSIsIl90IiwiX2NvbnRleHQ1IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImNsZWFySW50ZXJ2YWwiLCJjbGVhclRpbWVvdXQiLCJlcnJvciIsInVuZGVmaW5lZCIsImV2ZW50Iiwic3RhdHVzIiwibWVzc2FnZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJzZXRJbnRlcnZhbCIsInNldFRpbWVvdXQiLCJfeDQiLCJjb25uZWN0b3JBdXRoRXJyb3JNZXNzYWdlIiwibmFtZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9tYWlhL0FnZW50cy9jb25uZWN0b3JzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZldGNoTWFpYSB9IGZyb20gJy4uL2NsaWVudCdcblxuZXhwb3J0IHR5cGUgQ2F0YWxvZ0Nvbm5lY3RvciA9IHtcbiAgaWQ6IG51bWJlclxuICBzbHVnOiBzdHJpbmdcbiAgbmFtZTogc3RyaW5nXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nXG4gIGljb25fdXJsPzogc3RyaW5nXG4gIHJlcXVpcmVzX2F1dGg6IGJvb2xlYW5cbiAgaXNfYWN0aXZlOiBib29sZWFuXG59XG5cbmV4cG9ydCB0eXBlIEFnZW50Q29ubmVjdG9yID0gQ2F0YWxvZ0Nvbm5lY3RvciAmIHtcbiAgZW5hYmxlZF9mb3JfYWdlbnQ6IGJvb2xlYW5cbiAgdXNlcl9hdXRob3JpemVkOiBib29sZWFuXG59XG5cbmV4cG9ydCB0eXBlIFBlbmRpbmdDb25uZWN0b3JBdXRob3JpemF0aW9uID0ge1xuICBzbHVnOiBzdHJpbmdcbiAgbmFtZTogc3RyaW5nXG4gIGF1dGhfdXJsOiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgQ29ubmVjdG9yQXV0aEVycm9yID0ge1xuICBzbHVnOiBzdHJpbmdcbiAgbmFtZTogc3RyaW5nXG4gIG1lc3NhZ2U6IHN0cmluZ1xufVxuXG5leHBvcnQgdHlwZSBTYXZlQWdlbnRDb25uZWN0b3JzUmVzcG9uc2UgPSB7XG4gIGFnZW50X2lkOiBzdHJpbmdcbiAgY29ubmVjdG9yX3NsdWdzOiBzdHJpbmdbXVxuICByZXF1aXJlc19hdXRoPzogUGVuZGluZ0Nvbm5lY3RvckF1dGhvcml6YXRpb25bXVxuICBhdXRoX2Vycm9ycz86IENvbm5lY3RvckF1dGhFcnJvcltdXG59XG5cbmV4cG9ydCBjb25zdCBnZXRBdmFpbGFibGVDb25uZWN0b3JzID0gYXN5bmMgKCk6IFByb21pc2U8Q2F0YWxvZ0Nvbm5lY3RvcltdPiA9PiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hNYWlhKHtcbiAgICBwYXRoOiAnY29ubmVjdG9ycycsXG4gICAgbWV0aG9kOiAnR0VUJyxcbiAgfSlcblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggY29ubmVjdG9ycycpXG4gIH1cblxuICByZXR1cm4gcmVzcG9uc2UuanNvbigpXG59XG5cbmV4cG9ydCBjb25zdCBnZXRBZ2VudENvbm5lY3RvcnMgPSBhc3luYyAoYWdlbnRJZDogc3RyaW5nKTogUHJvbWlzZTxBZ2VudENvbm5lY3RvcltdPiA9PiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hNYWlhKHtcbiAgICBwYXRoOiBgYWdlbnRzLyR7YWdlbnRJZH0vY29ubmVjdG9yc2AsXG4gICAgbWV0aG9kOiAnR0VUJyxcbiAgfSlcblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggYWdlbnQgY29ubmVjdG9ycycpXG4gIH1cblxuICByZXR1cm4gcmVzcG9uc2UuanNvbigpXG59XG5cbmV4cG9ydCBjb25zdCBzYXZlQWdlbnRDb25uZWN0b3JzID0gYXN5bmMgKFxuICBhZ2VudElkOiBzdHJpbmcsXG4gIGNvbm5lY3RvclNsdWdzOiBzdHJpbmdbXVxuKTogUHJvbWlzZTxTYXZlQWdlbnRDb25uZWN0b3JzUmVzcG9uc2U+ID0+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaE1haWEoe1xuICAgIHBhdGg6IGBhZ2VudHMvJHthZ2VudElkfS9jb25uZWN0b3JzYCxcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICBib2R5OiB7XG4gICAgICBjb25uZWN0b3Jfc2x1Z3M6IGNvbm5lY3RvclNsdWdzLFxuICAgIH0sXG4gIH0pXG5cbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIHNhdmUgYWdlbnQgY29ubmVjdG9ycycpXG4gIH1cblxuICByZXR1cm4gcmVzcG9uc2UuanNvbigpXG59XG5cbmV4cG9ydCBjb25zdCBvcGVuQ29ubmVjdG9yQXV0aG9yaXphdGlvbldpbmRvd3MgPSAoXG4gIGF1dGhvcml6YXRpb25zOiBQZW5kaW5nQ29ubmVjdG9yQXV0aG9yaXphdGlvbltdLFxuICBwb3B1cFdpbmRvdz86IFdpbmRvdyB8IG51bGxcbik6IFdpbmRvdyB8IG51bGwgPT4ge1xuICBpZiAoIWF1dGhvcml6YXRpb25zLmxlbmd0aCkge1xuICAgIGlmIChwb3B1cFdpbmRvdyAmJiAhcG9wdXBXaW5kb3cuY2xvc2VkKSB7XG4gICAgICBwb3B1cFdpbmRvdy5jbG9zZSgpXG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBjb25zdCBbZmlyc3RBdXRob3JpemF0aW9uLCAuLi5yZW1haW5pbmdBdXRob3JpemF0aW9uc10gPSBhdXRob3JpemF0aW9uc1xuXG4gIGxldCBvcGVuZWQ6IFdpbmRvdyB8IG51bGwgPSBudWxsXG4gIGlmIChwb3B1cFdpbmRvdyAmJiAhcG9wdXBXaW5kb3cuY2xvc2VkKSB7XG4gICAgLy8gTmF2ZWdhciBlbCBwb3B1cCBxdWUgeWEgYWJyaW1vcyBlbiBlbCBjbGljayBkZWwgdXN1YXJpbzogc2kgbG8gYWJyacOpcmFtb3NcbiAgICAvLyBhY8OhLCBlbCBicm93c2VyIGxvIGJsb3F1ZWFyw61hIHBvciBubyB2ZW5pciBkZSB1biBnZXN0by5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICBwb3B1cFdpbmRvdy5sb2NhdGlvbi5ocmVmID0gZmlyc3RBdXRob3JpemF0aW9uLmF1dGhfdXJsXG4gICAgb3BlbmVkID0gcG9wdXBXaW5kb3dcbiAgfSBlbHNlIHtcbiAgICBvcGVuZWQgPSB3aW5kb3cub3BlbihmaXJzdEF1dGhvcml6YXRpb24uYXV0aF91cmwsICdfYmxhbmsnLCAncG9wdXA9eWVzLHdpZHRoPTU2MCxoZWlnaHQ9NzYwJylcbiAgfVxuXG4gIHJlbWFpbmluZ0F1dGhvcml6YXRpb25zLmZvckVhY2goYXV0aG9yaXphdGlvbiA9PiB7XG4gICAgd2luZG93Lm9wZW4oYXV0aG9yaXphdGlvbi5hdXRoX3VybCwgJ19ibGFuaycsICdwb3B1cD15ZXMsd2lkdGg9NTYwLGhlaWdodD03NjAnKVxuICB9KVxuXG4gIHJldHVybiBvcGVuZWRcbn1cblxuY29uc3QgaXNDb25uZWN0b3JPQXV0aE1lc3NhZ2UgPSAoXG4gIGRhdGE6IHVua25vd25cbik6IGRhdGEgaXMgeyB0eXBlOiBzdHJpbmc7IHN0YXR1czogc3RyaW5nOyBzbHVnPzogc3RyaW5nOyBtZXNzYWdlPzogc3RyaW5nIH0gPT5cbiAgISFkYXRhICYmIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJiAndHlwZScgaW4gZGF0YSAmJiAoZGF0YSBhcyB7IHR5cGU6IHN0cmluZyB9KS50eXBlID09PSAnY29ubmVjdG9yLW9hdXRoJ1xuXG4vKiogV2FpdHMgdW50aWwgdGhlIE9BdXRoIHBvcHVwIGZpbmlzaGVzLCB0aGVuIGNvbmZpcm1zIHRoZSBjb21wYW55IHRva2VuIHZpYSBHRVQuICovXG5leHBvcnQgY29uc3Qgd2FpdEZvckNvbm5lY3RvckF1dGhvcml6YXRpb24gPSBhc3luYyAoe1xuICBhZ2VudElkLFxuICBzbHVncyxcbiAgcG9wdXAsXG4gIHRpbWVvdXRNcyA9IDE4MF8wMDAsXG59OiB7XG4gIGFnZW50SWQ6IHN0cmluZ1xuICBzbHVnczogc3RyaW5nW11cbiAgcG9wdXA/OiBXaW5kb3cgfCBudWxsXG4gIHRpbWVvdXRNcz86IG51bWJlclxufSk6IFByb21pc2U8eyBhdXRob3JpemVkOiBzdHJpbmdbXTsgZXJyb3I/OiBzdHJpbmcgfT4gPT4ge1xuICBpZiAoIXNsdWdzLmxlbmd0aCkge1xuICAgIHJldHVybiB7IGF1dGhvcml6ZWQ6IFtdIH1cbiAgfVxuXG4gIGNvbnN0IHBlbmRpbmcgPSBuZXcgU2V0KHNsdWdzKVxuICBsZXQgb2F1dGhFcnJvcjogc3RyaW5nIHwgdW5kZWZpbmVkXG5cbiAgY29uc3QgYXV0aG9yaXplZFNsdWdzID0gYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGNvbm5lY3RvcnMgPSBhd2FpdCBnZXRBZ2VudENvbm5lY3RvcnMoYWdlbnRJZClcbiAgICByZXR1cm4gY29ubmVjdG9yc1xuICAgICAgLmZpbHRlcihjb25uZWN0b3IgPT4gcGVuZGluZy5oYXMoY29ubmVjdG9yLnNsdWcpICYmIGNvbm5lY3Rvci51c2VyX2F1dGhvcml6ZWQpXG4gICAgICAubWFwKGNvbm5lY3RvciA9PiBjb25uZWN0b3Iuc2x1ZylcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICBsZXQgZmluaXNoZWQgPSBmYWxzZVxuICAgIC8vIERlY2xhcmFkb3MgYW50ZXMgcG9ycXVlIGBmaW5pc2hgIGxvcyBsaW1waWEgeSBhIHN1IHZleiBsb3MgdHJlcyBsbyBpbnZvY2FuLlxuICAgIC8vIFBhcmEgY3VhbmRvIGFsZ3VubyBwdWVkZSBkaXNwYXJhciwgZWwgYmxvcXVlIGRlIGFiYWpvIHlhIGxvcyBhc2lnbsOzLlxuICAgIGxldCBvbk1lc3NhZ2U6IChldmVudDogTWVzc2FnZUV2ZW50KSA9PiB2b2lkXG4gICAgbGV0IHBvbGw6IG51bWJlclxuICAgIGxldCB0aW1lcjogbnVtYmVyXG5cbiAgICBjb25zdCBmaW5pc2ggPSBhc3luYyAoKSA9PiB7XG4gICAgICBpZiAoZmluaXNoZWQpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBmaW5pc2hlZCA9IHRydWVcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgb25NZXNzYWdlKVxuICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwocG9sbClcbiAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGltZXIpXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBhdXRob3JpemVkID0gYXdhaXQgYXV0aG9yaXplZFNsdWdzKClcbiAgICAgICAgcmVzb2x2ZSh7IGF1dGhvcml6ZWQsIGVycm9yOiBhdXRob3JpemVkLmxlbmd0aCA/IHVuZGVmaW5lZCA6IG9hdXRoRXJyb3IgfSlcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXNvbHZlKHsgYXV0aG9yaXplZDogW10sIGVycm9yOiBvYXV0aEVycm9yIH0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgb25NZXNzYWdlID0gKGV2ZW50OiBNZXNzYWdlRXZlbnQpID0+IHtcbiAgICAgIGlmICghaXNDb25uZWN0b3JPQXV0aE1lc3NhZ2UoZXZlbnQuZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQuZGF0YS5zdGF0dXMgPT09ICdlcnJvcicpIHtcbiAgICAgICAgb2F1dGhFcnJvciA9IGV2ZW50LmRhdGEubWVzc2FnZVxuICAgICAgfVxuICAgICAgZmluaXNoKClcbiAgICB9XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIG9uTWVzc2FnZSlcblxuICAgIHBvbGwgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgaWYgKHBvcHVwICYmIHBvcHVwLmNsb3NlZCkge1xuICAgICAgICBmaW5pc2goKVxuICAgICAgfVxuICAgIH0sIDQwMClcblxuICAgIHRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgb2F1dGhFcnJvciA9IG9hdXRoRXJyb3IgfHwgJ3RpbWVvdXQnXG4gICAgICBmaW5pc2goKVxuICAgIH0sIHRpbWVvdXRNcylcbiAgfSlcbn1cblxuZXhwb3J0IGNvbnN0IGNvbm5lY3RvckF1dGhFcnJvck1lc3NhZ2UgPSAoZXJyb3I6IENvbm5lY3RvckF1dGhFcnJvcik6IHN0cmluZyA9PiB7XG4gIGlmIChlcnJvci5zbHVnID09PSAnbmV0c3VpdGUnKSB7XG4gICAgcmV0dXJuIGVycm9yLm1lc3NhZ2VcbiAgfVxuICByZXR1cm4gYCR7ZXJyb3IubmFtZX06ICR7ZXJyb3IubWVzc2FnZX1gXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsU0FBU0EsU0FBUyxRQUFRLFdBQVc7QUFvQ3JDLE9BQU8sSUFBTUMsc0JBQXNCO0VBQUEsSUFBQUMsSUFBQSxHQUFBQyxpQkFBQSxjQUFBQyxtQkFBQSxDQUFBQyxJQUFBLENBQUcsU0FBQUMsUUFBQTtJQUFBLElBQUFDLFFBQUE7SUFBQSxPQUFBSCxtQkFBQSxDQUFBSSxJQUFBLFdBQUFDLFFBQUE7TUFBQSxrQkFBQUEsUUFBQSxDQUFBQyxJQUFBLEdBQUFELFFBQUEsQ0FBQUUsSUFBQTtRQUFBO1VBQUFGLFFBQUEsQ0FBQUUsSUFBQTtVQUFBLE9BQ2JYLFNBQVMsQ0FBQztZQUMvQlksSUFBSSxFQUFFLFlBQVk7WUFDbEJDLE1BQU0sRUFBRTtVQUNWLENBQUMsQ0FBQztRQUFBO1VBSElOLFFBQVEsR0FBQUUsUUFBQSxDQUFBSyxJQUFBO1VBQUEsSUFLVFAsUUFBUSxDQUFDUSxFQUFFO1lBQUFOLFFBQUEsQ0FBQUUsSUFBQTtZQUFBO1VBQUE7VUFBQSxNQUNSLElBQUlLLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQztRQUFBO1VBQUEsT0FBQVAsUUFBQSxD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
300
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmZXRjaE1haWEiLCJnZXRBdmFpbGFibGVDb25uZWN0b3JzIiwiX3JlZiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwicmVzcG9uc2UiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsInBhdGgiLCJtZXRob2QiLCJzZW50Iiwib2siLCJFcnJvciIsImFicnVwdCIsImpzb24iLCJzdG9wIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJnZXRBZ2VudENvbm5lY3RvcnMiLCJfcmVmMiIsIl9jYWxsZWUyIiwiYWdlbnRJZCIsIl9jb250ZXh0MiIsImNvbmNhdCIsIl94IiwiYXV0aG9yaXplQ29ubmVjdG9yIiwiX3JlZjMiLCJfY2FsbGVlMyIsInNsdWciLCJwYXlsb2FkIiwiX2NvbnRleHQzIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiYXV0aF91cmwiLCJfeDIiLCJzYXZlQWdlbnRDb25uZWN0b3JzIiwiX3JlZjQiLCJfY2FsbGVlNCIsImNvbm5lY3RvclNsdWdzIiwiX2NvbnRleHQ0IiwiYm9keSIsImNvbm5lY3Rvcl9zbHVncyIsIl94MyIsIl94NCIsIm9wZW5Db25uZWN0b3JBdXRob3JpemF0aW9uV2luZG93cyIsImF1dGhvcml6YXRpb25zIiwicG9wdXBXaW5kb3ciLCJsZW5ndGgiLCJjbG9zZWQiLCJjbG9zZSIsIl9hdXRob3JpemF0aW9ucyIsIl90b0FycmF5IiwiZmlyc3RBdXRob3JpemF0aW9uIiwicmVtYWluaW5nQXV0aG9yaXphdGlvbnMiLCJfYXJyYXlMaWtlVG9BcnJheSIsInNsaWNlIiwib3BlbmVkIiwibG9jYXRpb24iLCJocmVmIiwid2luZG93Iiwib3BlbiIsImZvckVhY2giLCJhdXRob3JpemF0aW9uIiwiaXNDb25uZWN0b3JPQXV0aE1lc3NhZ2UiLCJkYXRhIiwiX3R5cGVvZiIsInR5cGUiLCJ3YWl0Rm9yQ29ubmVjdG9yQXV0aG9yaXphdGlvbiIsIl9yZWY2IiwiX2NhbGxlZTciLCJfcmVmNSIsInNsdWdzIiwicG9wdXAiLCJfcmVmNSR0aW1lb3V0TXMiLCJ0aW1lb3V0TXMiLCJwZW5kaW5nIiwib2F1dGhFcnJvciIsImF1dGhvcml6ZWRTbHVncyIsIl9jb250ZXh0NyIsImF1dGhvcml6ZWQiLCJTZXQiLCJfcmVmNyIsIl9jYWxsZWU1IiwiY29ubmVjdG9ycyIsIl9jb250ZXh0NSIsImZpbHRlciIsImNvbm5lY3RvciIsImhhcyIsInVzZXJfYXV0aG9yaXplZCIsIm1hcCIsIlByb21pc2UiLCJyZXNvbHZlIiwiZmluaXNoZWQiLCJvbk1lc3NhZ2UiLCJwb2xsIiwidGltZXIiLCJmaW5pc2giLCJfcmVmOCIsIl9jYWxsZWU2IiwiX3QiLCJfY29udGV4dDYiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiY2xlYXJJbnRlcnZhbCIsImNsZWFyVGltZW91dCIsImVycm9yIiwidW5kZWZpbmVkIiwiZXZlbnQiLCJzdGF0dXMiLCJtZXNzYWdlIiwiYWRkRXZlbnRMaXN0ZW5lciIsInNldEludGVydmFsIiwic2V0VGltZW91dCIsIl94NSIsImNvbm5lY3RvckF1dGhFcnJvck1lc3NhZ2UiLCJuYW1lIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3NlcnZpY2VzL21haWEvQWdlbnRzL2Nvbm5lY3RvcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZmV0Y2hNYWlhIH0gZnJvbSAnLi4vY2xpZW50J1xuXG5leHBvcnQgdHlwZSBDYXRhbG9nQ29ubmVjdG9yID0ge1xuICBpZDogbnVtYmVyXG4gIHNsdWc6IHN0cmluZ1xuICBuYW1lOiBzdHJpbmdcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmdcbiAgaWNvbl91cmw/OiBzdHJpbmdcbiAgcmVxdWlyZXNfYXV0aDogYm9vbGVhblxuICBpc19hY3RpdmU6IGJvb2xlYW5cbn1cblxuZXhwb3J0IHR5cGUgQ29ubmVjdG9yQ29ubmVjdGlvblN0YXR1cyA9ICdvaycgfCAnbmVlZHNfYXR0ZW50aW9uJyB8ICdlcnJvcidcblxuZXhwb3J0IHR5cGUgQWdlbnRDb25uZWN0b3IgPSBDYXRhbG9nQ29ubmVjdG9yICYge1xuICBlbmFibGVkX2Zvcl9hZ2VudDogYm9vbGVhblxuICB1c2VyX2F1dGhvcml6ZWQ6IGJvb2xlYW5cbiAgY29ubmVjdGlvbl9zdGF0dXM/OiBDb25uZWN0b3JDb25uZWN0aW9uU3RhdHVzXG59XG5cbmV4cG9ydCB0eXBlIFBlbmRpbmdDb25uZWN0b3JBdXRob3JpemF0aW9uID0ge1xuICBzbHVnOiBzdHJpbmdcbiAgbmFtZTogc3RyaW5nXG4gIGF1dGhfdXJsOiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgQ29ubmVjdG9yQXV0aEVycm9yID0ge1xuICBzbHVnOiBzdHJpbmdcbiAgbmFtZTogc3RyaW5nXG4gIG1lc3NhZ2U6IHN0cmluZ1xufVxuXG5leHBvcnQgdHlwZSBTYXZlQWdlbnRDb25uZWN0b3JzUmVzcG9uc2UgPSB7XG4gIGFnZW50X2lkOiBzdHJpbmdcbiAgY29ubmVjdG9yX3NsdWdzOiBzdHJpbmdbXVxuICByZXF1aXJlc19hdXRoPzogUGVuZGluZ0Nvbm5lY3RvckF1dGhvcml6YXRpb25bXVxuICBhdXRoX2Vycm9ycz86IENvbm5lY3RvckF1dGhFcnJvcltdXG59XG5cbmV4cG9ydCBjb25zdCBnZXRBdmFpbGFibGVDb25uZWN0b3JzID0gYXN5bmMgKCk6IFByb21pc2U8Q2F0YWxvZ0Nvbm5lY3RvcltdPiA9PiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hNYWlhKHtcbiAgICBwYXRoOiAnY29ubmVjdG9ycycsXG4gICAgbWV0aG9kOiAnR0VUJyxcbiAgfSlcblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggY29ubmVjdG9ycycpXG4gIH1cblxuICByZXR1cm4gcmVzcG9uc2UuanNvbigpXG59XG5cbmV4cG9ydCBjb25zdCBnZXRBZ2VudENvbm5lY3RvcnMgPSBhc3luYyAoYWdlbnRJZDogc3RyaW5nKTogUHJvbWlzZTxBZ2VudENvbm5lY3RvcltdPiA9PiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hNYWlhKHtcbiAgICBwYXRoOiBgYWdlbnRzLyR7YWdlbnRJZH0vY29ubmVjdG9yc2AsXG4gICAgbWV0aG9kOiAnR0VUJyxcbiAgfSlcblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggYWdlbnQgY29ubmVjdG9ycycpXG4gIH1cblxuICByZXR1cm4gcmVzcG9uc2UuanNvbigpXG59XG5cbi8qKiBGZXRjaCBhIGZyZXNoIE9BdXRoIFVSTCBvbiBjbGljazogaXRzIHN0YXRlIGV4cGlyZXMgYWZ0ZXIgdGVuIG1pbnV0ZXMuICovXG5leHBvcnQgY29uc3QgYXV0aG9yaXplQ29ubmVjdG9yID0gYXN5bmMgKHNsdWc6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hNYWlhKHtcbiAgICBwYXRoOiBgY29ubmVjdG9ycy8ke2VuY29kZVVSSUNvbXBvbmVudChzbHVnKX0vYXV0aG9yaXplYCxcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgfSlcblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gc3RhcnQgY29ubmVjdG9yIGF1dGhvcml6YXRpb24nKVxuICB9XG5cbiAgY29uc3QgcGF5bG9hZDogeyBhdXRoX3VybDogc3RyaW5nIH0gPSBhd2FpdCByZXNwb25zZS5qc29uKClcbiAgaWYgKCFwYXlsb2FkLmF1dGhfdXJsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDb25uZWN0b3IgYXV0aG9yaXphdGlvbiBVUkwgaXMgbWlzc2luZycpXG4gIH1cbiAgcmV0dXJuIHBheWxvYWQuYXV0aF91cmxcbn1cblxuZXhwb3J0IGNvbnN0IHNhdmVBZ2VudENvbm5lY3RvcnMgPSBhc3luYyAoXG4gIGFnZW50SWQ6IHN0cmluZyxcbiAgY29ubmVjdG9yU2x1Z3M6IHN0cmluZ1tdXG4pOiBQcm9taXNlPFNhdmVBZ2VudENvbm5lY3RvcnNSZXNwb25zZT4gPT4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoTWFpYSh7XG4gICAgcGF0aDogYGFnZW50cy8ke2FnZW50SWR9L2Nvbm5lY3RvcnNgLFxuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIGJvZHk6IHtcbiAgICAgIGNvbm5lY3Rvcl9zbHVnczogY29ubmVjdG9yU2x1Z3MsXG4gICAgfSxcbiAgfSlcblxuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGYWlsZWQgdG8gc2F2ZSBhZ2VudCBjb25uZWN0b3JzJylcbiAgfVxuXG4gIHJldHVybiByZXNwb25zZS5qc29uKClcbn1cblxuZXhwb3J0IGNvbnN0IG9wZW5Db25uZWN0b3JBdXRob3JpemF0aW9uV2luZG93cyA9IChcbiAgYXV0aG9yaXphdGlvbnM6IFBlbmRpbmdDb25uZWN0b3JBdXRob3JpemF0aW9uW10sXG4gIHBvcHVwV2luZG93PzogV2luZG93IHwgbnVsbFxuKTogV2luZG93IHwgbnVsbCA9PiB7XG4gIGlmICghYXV0aG9yaXphdGlvbnMubGVuZ3RoKSB7XG4gICAgaWYgKHBvcHVwV2luZG93ICYmICFwb3B1cFdpbmRvdy5jbG9zZWQpIHtcbiAgICAgIHBvcHVwV2luZG93LmNsb3NlKClcbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGNvbnN0IFtmaXJzdEF1dGhvcml6YXRpb24sIC4uLnJlbWFpbmluZ0F1dGhvcml6YXRpb25zXSA9IGF1dGhvcml6YXRpb25zXG5cbiAgbGV0IG9wZW5lZDogV2luZG93IHwgbnVsbCA9IG51bGxcbiAgaWYgKHBvcHVwV2luZG93ICYmICFwb3B1cFdpbmRvdy5jbG9zZWQpIHtcbiAgICAvLyBOYXZlZ2FyIGVsIHBvcHVwIHF1ZSB5YSBhYnJpbW9zIGVuIGVsIGNsaWNrIGRlbCB1c3VhcmlvOiBzaSBsbyBhYnJpw6lyYW1vc1xuICAgIC8vIGFjw6EsIGVsIGJyb3dzZXIgbG8gYmxvcXVlYXLDrWEgcG9yIG5vIHZlbmlyIGRlIHVuIGdlc3RvLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIHBvcHVwV2luZG93LmxvY2F0aW9uLmhyZWYgPSBmaXJzdEF1dGhvcml6YXRpb24uYXV0aF91cmxcbiAgICBvcGVuZWQgPSBwb3B1cFdpbmRvd1xuICB9IGVsc2Uge1xuICAgIG9wZW5lZCA9IHdpbmRvdy5vcGVuKGZpcnN0QXV0aG9yaXphdGlvbi5hdXRoX3VybCwgJ19ibGFuaycsICdwb3B1cD15ZXMsd2lkdGg9NTYwLGhlaWdodD03NjAnKVxuICB9XG5cbiAgcmVtYWluaW5nQXV0aG9yaXphdGlvbnMuZm9yRWFjaChhdXRob3JpemF0aW9uID0+IHtcbiAgICB3aW5kb3cub3BlbihhdXRob3JpemF0aW9uLmF1dGhfdXJsLCAnX2JsYW5rJywgJ3BvcHVwPXllcyx3aWR0aD01NjAsaGVpZ2h0PTc2MCcpXG4gIH0pXG5cbiAgcmV0dXJuIG9wZW5lZFxufVxuXG5jb25zdCBpc0Nvbm5lY3Rvck9BdXRoTWVzc2FnZSA9IChcbiAgZGF0YTogdW5rbm93blxuKTogZGF0YSBpcyB7IHR5cGU6IHN0cmluZzsgc3RhdHVzOiBzdHJpbmc7IHNsdWc/OiBzdHJpbmc7IG1lc3NhZ2U/OiBzdHJpbmcgfSA9PlxuICAhIWRhdGEgJiYgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmICd0eXBlJyBpbiBkYXRhICYmIChkYXRhIGFzIHsgdHlwZTogc3RyaW5nIH0pLnR5cGUgPT09ICdjb25uZWN0b3Itb2F1dGgnXG5cbi8qKiBXYWl0cyB1bnRpbCB0aGUgT0F1dGggcG9wdXAgZmluaXNoZXMsIHRoZW4gY29uZmlybXMgdGhlIGNvbXBhbnkgdG9rZW4gdmlhIEdFVC4gKi9cbmV4cG9ydCBjb25zdCB3YWl0Rm9yQ29ubmVjdG9yQXV0aG9yaXphdGlvbiA9IGFzeW5jICh7XG4gIGFnZW50SWQsXG4gIHNsdWdzLFxuICBwb3B1cCxcbiAgdGltZW91dE1zID0gMTgwXzAwMCxcbn06IHtcbiAgYWdlbnRJZDogc3RyaW5nXG4gIHNsdWdzOiBzdHJpbmdbXVxuICBwb3B1cD86IFdpbmRvdyB8IG51bGxcbiAgdGltZW91dE1zPzogbnVtYmVyXG59KTogUHJvbWlzZTx7IGF1dGhvcml6ZWQ6IHN0cmluZ1tdOyBlcnJvcj86IHN0cmluZyB9PiA9PiB7XG4gIGlmICghc2x1Z3MubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHsgYXV0aG9yaXplZDogW10gfVxuICB9XG5cbiAgY29uc3QgcGVuZGluZyA9IG5ldyBTZXQoc2x1Z3MpXG4gIGxldCBvYXV0aEVycm9yOiBzdHJpbmcgfCB1bmRlZmluZWRcblxuICBjb25zdCBhdXRob3JpemVkU2x1Z3MgPSBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgY29ubmVjdG9ycyA9IGF3YWl0IGdldEFnZW50Q29ubmVjdG9ycyhhZ2VudElkKVxuICAgIHJldHVybiBjb25uZWN0b3JzXG4gICAgICAuZmlsdGVyKGNvbm5lY3RvciA9PiBwZW5kaW5nLmhhcyhjb25uZWN0b3Iuc2x1ZykgJiYgY29ubmVjdG9yLnVzZXJfYXV0aG9yaXplZClcbiAgICAgIC5tYXAoY29ubmVjdG9yID0+IGNvbm5lY3Rvci5zbHVnKVxuICB9XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIGxldCBmaW5pc2hlZCA9IGZhbHNlXG4gICAgLy8gRGVjbGFyYWRvcyBhbnRlcyBwb3JxdWUgYGZpbmlzaGAgbG9zIGxpbXBpYSB5IGEgc3UgdmV6IGxvcyB0cmVzIGxvIGludm9jYW4uXG4gICAgLy8gUGFyYSBjdWFuZG8gYWxndW5vIHB1ZWRlIGRpc3BhcmFyLCBlbCBibG9xdWUgZGUgYWJham8geWEgbG9zIGFzaWduw7MuXG4gICAgbGV0IG9uTWVzc2FnZTogKGV2ZW50OiBNZXNzYWdlRXZlbnQpID0+IHZvaWRcbiAgICBsZXQgcG9sbDogbnVtYmVyXG4gICAgbGV0IHRpbWVyOiBudW1iZXJcblxuICAgIGNvbnN0IGZpbmlzaCA9IGFzeW5jICgpID0+IHtcbiAgICAgIGlmIChmaW5pc2hlZCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGZpbmlzaGVkID0gdHJ1ZVxuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBvbk1lc3NhZ2UpXG4gICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbChwb2xsKVxuICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aW1lcilcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGF1dGhvcml6ZWQgPSBhd2FpdCBhdXRob3JpemVkU2x1Z3MoKVxuICAgICAgICByZXNvbHZlKHsgYXV0aG9yaXplZCwgZXJyb3I6IGF1dGhvcml6ZWQubGVuZ3RoID8gdW5kZWZpbmVkIDogb2F1dGhFcnJvciB9KVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJlc29sdmUoeyBhdXRob3JpemVkOiBbXSwgZXJyb3I6IG9hdXRoRXJyb3IgfSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBvbk1lc3NhZ2UgPSAoZXZlbnQ6IE1lc3NhZ2VFdmVudCkgPT4ge1xuICAgICAgaWYgKCFpc0Nvbm5lY3Rvck9BdXRoTWVzc2FnZShldmVudC5kYXRhKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmIChldmVudC5kYXRhLnN0YXR1cyA9PT0gJ2Vycm9yJykge1xuICAgICAgICBvYXV0aEVycm9yID0gZXZlbnQuZGF0YS5tZXNzYWdlXG4gICAgICB9XG4gICAgICBmaW5pc2goKVxuICAgIH1cblxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgb25NZXNzYWdlKVxuXG4gICAgcG9sbCA9IHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBpZiAocG9wdXAgJiYgcG9wdXAuY2xvc2VkKSB7XG4gICAgICAgIGZpbmlzaCgpXG4gICAgICB9XG4gICAgfSwgNDAwKVxuXG4gICAgdGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBvYXV0aEVycm9yID0gb2F1dGhFcnJvciB8fCAndGltZW91dCdcbiAgICAgIGZpbmlzaCgpXG4gICAgfSwgdGltZW91dE1zKVxuICB9KVxufVxuXG5leHBvcnQgY29uc3QgY29ubmVjdG9yQXV0aEVycm9yTWVzc2FnZSA9IChlcnJvcjogQ29ubmVjdG9yQXV0aEVycm9yKTogc3RyaW5nID0+IHtcbiAgaWYgKGVycm9yLnNsdWcgPT09ICduZXRzdWl0ZScpIHtcbiAgICByZXR1cm4gZXJyb3IubWVzc2FnZVxuICB9XG4gIHJldHVybiBgJHtlcnJvci5uYW1lfTogJHtlcnJvci5tZXNzYWdlfWBcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxTQUFTQSxTQUFTLFFBQVEsV0FBVztBQXVDckMsT0FBTyxJQUFNQyxzQkFBc0I7RUFBQSxJQUFBQyxJQUFBLEdBQUFDLGlCQUFBLGNBQUFDLG1CQUFBLENBQUFDLElBQUEsQ0FBRyxTQUFBQyxRQUFBO0lBQUEsSUFBQUMsUUFBQTtJQUFBLE9BQUFILG1CQUFBLENBQUFJLElBQUEsV0FBQUMsUUFBQTtNQUFBLGtCQUFBQSxRQUFBLENBQUFDLElBQUEsR0FBQUQsUUFBQSxDQUFBRSxJQUFBO1FBQUE7VUFBQUYsUUFBQSxDQUFBRSxJQUFBO1VBQUEsT0FDYlgsU0FBUyxDQUFDO1lBQy9CWSxJQUFJLEVBQUUsWUFBWTtZQUNsQkMsTUFBTSxFQUFFO1VBQ1YsQ0FBQyxDQUFDO1FBQUE7VUFISU4sUUFBUSxHQUFBRSxRQUFBLENBQUFLLElBQUE7VUFBQSxJQUtUUCxRQUFRLENBQUNRLEVBQUU7WUFBQU4sUUFBQSxDQUFBRSxJQUFBO1lBQUE7VUFBQTtVQUFBLE1BQ1IsSUFBSUssS0FBSyxDQUFDLDRCQUE0QixDQUFDO1FBQUE7VUFBQSxPQUFBUCxRQUFBLENBQUFRLE1BQUEsV0FHeENWLFFBQVEsQ0FBQ1csSUFBSSxDQUFDLENBQUM7UUFBQTtRQUFBO1VBQUEsT0FBQVQsUUFBQSxDQUFBVSxJQUFBO01BQUE7SUFBQSxHQUFBYixPQUFBO0VBQUEsQ0FDdkI7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