@agilemotion/oui-react-js 2.0.25 → 2.0.27

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.
Files changed (34) hide show
  1. package/dist/RestService.js +22 -13
  2. package/dist/RestUtils.js +7 -4
  3. package/dist/components/AlertBar.js +2 -2
  4. package/dist/components/Button.js +59 -7
  5. package/dist/components/DataGrid.js +42 -16
  6. package/dist/components/DocumentTemplateDesignerComponent.js +2 -2
  7. package/dist/components/FileThumb.js +69 -7
  8. package/dist/components/WordDocumentViewer.js +2 -2
  9. package/dist/components/dashboard/components/blackDashboard/sidebar/FoldingTabSidebar.js +6 -2
  10. package/dist/components/form/BaseField.js +4 -2
  11. package/dist/components/form/Checkbox.js +3 -2
  12. package/dist/components/form/FieldSet.js +2 -2
  13. package/dist/components/form/Form.css +1 -1
  14. package/dist/components/form/Form.js +40 -38
  15. package/dist/components/form/GridField.js +6 -5
  16. package/dist/components/form/RadioGroup.js +5 -5
  17. package/dist/components/form/UploadField.js +68 -4
  18. package/dist/components/layout/Layout.js +9 -1
  19. package/dist/components/layout/View.css +2 -0
  20. package/dist/components/media/ChatViewer.js +103 -0
  21. package/dist/components/media/TrainingRoom.js +5 -5
  22. package/dist/components/media/VCRoomParticipant.js +7 -3
  23. package/dist/components/media/VCRoomWorkspace.js +19 -4
  24. package/dist/components/media/chat/ChatRoom.js +21 -10
  25. package/dist/components/media/chat/PollContainer.js +85 -18
  26. package/dist/js/ProcurementMeetings.js +11 -4
  27. package/dist/view/PortalDashboard.js +6 -5
  28. package/dist/view/security/ForgotPassword.js +4 -1
  29. package/dist/view/security/ForgotPasswordBasic.js +4 -1
  30. package/dist/view/security/RegisterInteractionPortal.js +5 -1
  31. package/dist/view/security/ResetPassword.js +4 -1
  32. package/dist/view/security/ResetPasswordBasic.js +4 -1
  33. package/dist/view/security/Security.js +16 -3
  34. package/package.json +1 -1
@@ -157,19 +157,19 @@ class RestService {
157
157
  // Body is passed through; the fetch layer drops it for verbs that
158
158
  // forbid one. DELETE with a body is uncommon but permitted by
159
159
  // HTTP — we don't block it here.
160
- // Pre-auth flows (registration wizard endpoints) must not
161
- // attach a bearer token Spring Security's BearerTokenAuthenticationFilter
162
- // validates *any* attached token even on permitAll() paths,
163
- // so an empty/stale token would 401 a whitelisted endpoint.
164
- // Path-prefix detection matches the equivalent fix in
165
- // RouteActionHandler for /view/public/get.
166
- const isPublicRegistration = service.url && /\/api\/v[0-9]+\/registration\//.test(service.url);
160
+ // Secure by default: attach the session token whenever one exists.
161
+ // No URL special-casingpre-auth surfaces (view/security/* login,
162
+ // register, reset) clear sessionStorage on mount, so nothing is
163
+ // attached on those screens. `secure` here only prevents leaking a
164
+ // token to a plain-http endpoint; the attachment itself is
165
+ // presence-based in fetchWithCustomConfig, so a stale/empty token is
166
+ // never sent.
167
167
  this.fetchWithCustomConfig({
168
168
  viewId: request.viewId,
169
169
  url,
170
170
  serviceType: request.service.type,
171
171
  method,
172
- secure: !isPublicRegistration && !service.url.startsWith('http://'),
172
+ secure: !service.url.startsWith('http://'),
173
173
  body: requestBody,
174
174
  headers,
175
175
  track: request.track !== false
@@ -211,7 +211,12 @@ class RestService {
211
211
  if (_Utils.default.isNull(parameter.type)) {
212
212
  parameter.type = 'String';
213
213
  }
214
- if (!_Utils.default.isNull(parameter.validator) && (parameter.validator.nullable && !_Utils.default.evaluateBooleanExpression(parameter.validator.nullable, parameter.name) || _Utils.default.evaluateBooleanExpression(parameter.validator.required && _Utils.default.evaluateBooleanExpression(parameter.validator.required, parameter.name))) && this.isParamValueNull(parameter.value)) {
214
+
215
+ // The validator lives on the view config (parameterConfig), NOT on the
216
+ // freshly-built outbound `parameter` object — reading parameter.validator
217
+ // here always saw undefined, so required/nullable RPC params were never
218
+ // enforced and the call fired with a null value.
219
+ if (!_Utils.default.isNull(parameterConfig.validator) && (parameterConfig.validator.nullable && !_Utils.default.evaluateBooleanExpression(parameterConfig.validator.nullable, parameter.name) || _Utils.default.evaluateBooleanExpression(parameterConfig.validator.required && _Utils.default.evaluateBooleanExpression(parameterConfig.validator.required, parameter.name))) && this.isParamValueNull(parameter.value)) {
215
220
  reject({
216
221
  errorType: 'INVALID_PARAMETER',
217
222
  parameter
@@ -264,12 +269,16 @@ class RestService {
264
269
  fetchConfig = {
265
270
  method: _Utils.default.isNull(request.method) ? 'GET' : request.method,
266
271
  headers: _objectSpread(_objectSpread({}, request.headers), {}, {
267
- 'Content-Type': request.contentType ? request.contentType : 'application/x-www-form-urlencoded',
268
- 'Authorization': 'Bearer ' + accessToken,
269
- 'idToken': idToken
272
+ 'Content-Type': request.contentType ? request.contentType : 'application/x-www-form-urlencoded'
270
273
  }),
271
274
  body: data
272
275
  };
276
+ // Secure by default, presence-based: attach auth ONLY when a
277
+ // session exists. Pre-auth screens (view/security/*) clear
278
+ // sessionStorage on mount, so nothing is attached there — and
279
+ // we never emit 'Bearer null' or a stale token.
280
+ if (accessToken) fetchConfig.headers['Authorization'] = 'Bearer ' + accessToken;
281
+ if (idToken) fetchConfig.headers['idToken'] = idToken;
273
282
  } else {
274
283
  fetchConfig = {
275
284
  method: _Utils.default.isNull(request.method) ? 'GET' : request.method,
@@ -412,4 +421,4 @@ const invokeRest = request => {
412
421
  return instance.invokeRest(request);
413
422
  };
414
423
  exports.invokeRest = invokeRest;
415
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfVXRpbHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdFByb21pc2VUcmFja2VyIiwiX0FwcGxpY2F0aW9uTWFuYWdlciIsIl9FdmVudCIsIl9PYnNlcnZhYmxlIiwiX0V2ZW50VHlwZSIsIl9wcm9wVHlwZXMiLCJfUmVzdFV0aWxzIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0Iiwib3duS2V5cyIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX3RvUHJvcGVydHlLZXkiLCJ2YWx1ZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiaSIsIl90b1ByaW1pdGl2ZSIsIlN5bWJvbCIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsImxvY2F0aW9uIiwiZXhwb3J0cyIsIndpbmRvdyIsInByb3RvY29sIiwiaG9zdG5hbWUiLCJzdGF0dXMiLCJyZXNwb25zZSIsIm9rIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJqc29uIiwidGV4dCIsIlJlc3RTZXJ2aWNlIiwiaXNQYXJhbVZhbHVlTnVsbCIsInBhcmFtVmFsdWUiLCJVdGlscyIsImlzTnVsbCIsImhhc093blByb3BlcnR5IiwiaW52b2tlUmVzdCIsInJlcXVlc3QiLCJzZXJ2aWNlIiwidXJsIiwic3RhcnRzV2l0aCIsImNvbmNhdCIsImFwcGxpY2F0aW9uTWFuYWdlciIsImdldENvbnRleHRSb290IiwicmVxdWVzdEJvZHkiLCJoZWFkZXJzIiwicGFyYW1ldGVycyIsInF1ZXJ5U3RyaW5nIiwicGF0aFBhcmFtZXRlcnMiLCJyZXF1ZXN0Qm9keVBhcmFtRm91bmQiLCJwYXJhbWV0ZXIiLCJwYXJhbWV0ZXJWYWx1ZSIsInJlc29sdmVQYXJhbWV0ZXJWYWx1ZSIsImV2ZW50IiwiZGF0YSIsInZhbGlkYXRvciIsIm51bGxhYmxlIiwiZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbiIsIm5hbWUiLCJyZXF1aXJlZCIsImVycm9yVHlwZSIsImh0dHBQYXJhbWV0ZXJUeXBlIiwiaW5jbHVkZVBhcmFtZXRlclR5cGVzIiwidHlwZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJyZXNvbHZlZFZhbHVlIiwiZW5jb2RlIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiaW5zdGFuY2VUeXBlIiwiaW5kZXhPZiIsInJlcGxhY2UiLCJFcnJvciIsImNvbnRlbnRUeXBlIiwibWV0aG9kIiwidG9VcHBlckNhc2UiLCJmZXRjaFdpdGhDdXN0b21Db25maWciLCJ2aWV3SWQiLCJzZXJ2aWNlVHlwZSIsInNlY3VyZSIsImRvd25sb2FkIiwidGhlbiIsImNhdGNoIiwiaXNQdWJsaWNSZWdpc3RyYXRpb24iLCJ0ZXN0IiwiYm9keSIsInRyYWNrIiwicGF0aCIsImdldFByb3BlcnR5Q2hhaW5QYXRoIiwicmV0dXJuVmFsdWVCaW5kaW5nIiwidmFsdWVPYmplY3QiLCJwcm9wZXJ0eSIsInByb2Nlc3NTdWNjZXNzZnVsUmVzcG9uc2VEYXRhIiwiY29tcG9uZW50Iiwic3VjY2Vzc01lc3NhZ2UiLCJpbnZva2VScGMiLCJycGNSZXF1ZXN0IiwiaWQiLCJzcGxpdCIsInNlcnZpY2VJZCIsInByb2NlZHVyZU5hbWUiLCJtb2R1bGUiLCJ0b0xvd2VyQ2FzZSIsInBhcmFtZXRlckNvbmZpZyIsImluZGV4IiwidmFsIiwiYWNjZXNzVG9rZW4iLCJzZXNzaW9uU3RvcmFnZSIsImdldEl0ZW0iLCJpZFRva2VuIiwiRm9ybURhdGEiLCJmZXRjaENvbmZpZyIsImNvbmZpZyIsImFjY2VwdCIsImdldEFwcGxpY2F0aW9uUHJpbWFyeUNvbG9yIiwiZ2V0QXBwbGljYXRpb25TZWNvbmRhcnlDb2xvciIsImZldGNoIiwiZXJyb3JEYXRhIiwibWVzc2FnZSIsInN0YXR1c1RleHQiLCJjb250ZW50RGlzcG9zaXRpb24iLCJnZXQiLCJmaWxlbmFtZSIsImluY2x1ZGVzIiwidHJpbSIsImJsb2IiLCJfcmVmIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiYSIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImhyZWYiLCJhcHBlbmRDaGlsZCIsImNsaWNrIiwicmVtb3ZlQ2hpbGQiLCJyZXZva2VPYmplY3RVUkwiLCJlcnJvciIsImNvbnNvbGUiLCJ0cmFja1Byb21pc2UiLCJleGVjdXRlRmV0Y2giLCJlbmNvZGVVUkkiLCJlbmRzV2l0aCIsImNsZWFyIiwibmF2aWdhdGUiLCJ0b1N0cmluZyIsInBhcnNlIiwiaWdub3JlZCIsImRhdGFUeXBlIiwiRXZlbnQiLCJldmVudE1hbmFnZXIiLCJmaXJlRXZlbnQiLCJFdmVudFR5cGUiLCJNRVNTQUdFX0FSUklWRUQiLCJtZXNzYWdlVHlwZSIsInBvcHVsYXRlVGVtcGxhdGUiLCJpbnN0YW5jZSJdLCJzb3VyY2VzIjpbIi4uL3NyYy9saWIvUmVzdFNlcnZpY2UuanMiXSwic291cmNlc0NvbnRlbnQiOlsi77u/aW1wb3J0IFV0aWxzIGZyb20gJy4vVXRpbHMnO1xuaW1wb3J0IHt0cmFja1Byb21pc2V9IGZyb20gJ3JlYWN0LXByb21pc2UtdHJhY2tlcic7XG5pbXBvcnQgYXBwbGljYXRpb25NYW5hZ2VyIGZyb20gJy4vQXBwbGljYXRpb25NYW5hZ2VyJztcbmltcG9ydCBFdmVudCBmcm9tICcuL2V2ZW50L0V2ZW50JztcbmltcG9ydCBldmVudE1hbmFnZXIgZnJvbSAnLi9ldmVudC9PYnNlcnZhYmxlJztcbmltcG9ydCBFdmVudFR5cGUgZnJvbSAnLi9ldmVudC9FdmVudFR5cGUnO1xuaW1wb3J0IHtpbnN0YW5jZU9mfSBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHtkb3dubG9hZCwgcG9zdERhdGEsIHNlbmRSZXF1ZXN0fSBmcm9tIFwiLi9SZXN0VXRpbHNcIjtcblxuZXhwb3J0IGNvbnN0IGxvY2F0aW9uID0gd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZTtcbmNvbnN0IHN0YXR1cyA9IChyZXNwb25zZSkgPT4ge1xuICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVzcG9uc2UpO1xuICAgIH1cbn07XG5cbmNvbnN0IGpzb24gPSAocmVzcG9uc2UpID0+IHtcbiAgICByZXR1cm4gcmVzcG9uc2UudGV4dCgpO1xufTtcblxuY2xhc3MgUmVzdFNlcnZpY2Uge1xuICAgIGlzUGFyYW1WYWx1ZU51bGwocGFyYW1WYWx1ZSkge1xuICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHBhcmFtVmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXJhbVZhbHVlLmhhc093blByb3BlcnR5KCd2YWx1ZScpID8gVXRpbHMuaXNOdWxsKHBhcmFtVmFsdWUudmFsdWUpIDogZmFsc2U7XG4gICAgfVxuXG4gICAgaW52b2tlUmVzdChyZXF1ZXN0KSB7XG4gICAgICAgIGxldCBzZXJ2aWNlID0gcmVxdWVzdC5zZXJ2aWNlO1xuICAgICAgICBsZXQgdXJsID0gc2VydmljZS51cmwuc3RhcnRzV2l0aCgnaHR0cDovLycpIHx8IHNlcnZpY2UudXJsLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykgP1xuICAgICAgICAgICAgc2VydmljZS51cmwgOiBsb2NhdGlvbiArIGAke2FwcGxpY2F0aW9uTWFuYWdlci5nZXRDb250ZXh0Um9vdCgpICsgc2VydmljZS51cmx9YDtcbiAgICAgICAgbGV0IHJlcXVlc3RCb2R5ID0gbnVsbDtcbiAgICAgICAgbGV0IGhlYWRlcnMgPSBzZXJ2aWNlLmhlYWRlcnM7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHNlcnZpY2UucGFyYW1ldGVycykpIHtcbiAgICAgICAgICAgICAgICBsZXQgcXVlcnlTdHJpbmcgPSAnJztcbiAgICAgICAgICAgICAgICBsZXQgcGF0aFBhcmFtZXRlcnMgPSAnJztcbiAgICAgICAgICAgICAgICBsZXQgcmVxdWVzdEJvZHlQYXJhbUZvdW5kID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwYXJhbWV0ZXIgb2Ygc2VydmljZS5wYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJhbWV0ZXJWYWx1ZSA9IGFwcGxpY2F0aW9uTWFuYWdlci5yZXNvbHZlUGFyYW1ldGVyVmFsdWUocGFyYW1ldGVyLCByZXF1ZXN0LmV2ZW50ID8gcmVxdWVzdC5ldmVudC5kYXRhIDogbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHBhcmFtZXRlci52YWxpZGF0b3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiAoKHBhcmFtZXRlci52YWxpZGF0b3IubnVsbGFibGUgJiYgIVV0aWxzLmV2YWx1YXRlQm9vbGVhbkV4cHJlc3Npb24ocGFyYW1ldGVyLnZhbGlkYXRvci5udWxsYWJsZSwgcGFyYW1ldGVyLm5hbWUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoVXRpbHMuZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihwYXJhbWV0ZXIudmFsaWRhdG9yLnJlcXVpcmVkICYmIFV0aWxzLmV2YWx1YXRlQm9vbGVhbkV4cHJlc3Npb24ocGFyYW1ldGVyLnZhbGlkYXRvci5yZXF1aXJlZCwgcGFyYW1ldGVyLm5hbWUpKSkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5pc1BhcmFtVmFsdWVOdWxsKHBhcmFtZXRlclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvclR5cGU6ICdJTlZBTElEX1BBUkFNRVRFUicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBsZXQgaHR0cFBhcmFtZXRlclR5cGUgPSBwYXJhbWV0ZXIuaHR0cFBhcmFtZXRlclR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChVdGlscy5pc051bGwoaHR0cFBhcmFtZXRlclR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBodHRwUGFyYW1ldGVyVHlwZSA9ICdRVUVSWV9QQVJBTUVURVInO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGh0dHBQYXJhbWV0ZXJUeXBlID09PSAnUVVFUllfUEFSQU1FVEVSJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyYW1ldGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1ZXJ5U3RyaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlTdHJpbmcgKz0gJyYnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHNlcnZpY2UuaW5jbHVkZVBhcmFtZXRlclR5cGVzKSAmJiBzZXJ2aWNlLmluY2x1ZGVQYXJhbWV0ZXJUeXBlcyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVN0cmluZyArPSBwYXJhbWV0ZXJWYWx1ZS50eXBlICsgJzonO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9IHBhcmFtZXRlci5uYW1lICsgJz0nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9ICh0eXBlb2YgcGFyYW1ldGVyVmFsdWUudmFsdWUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBwYXJhbWV0ZXJWYWx1ZS52YWx1ZSA9PT0gJ251bWJlcicgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJWYWx1ZS52YWx1ZSA6IEpTT04uc3RyaW5naWZ5KHBhcmFtZXRlclZhbHVlLnZhbHVlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoaHR0cFBhcmFtZXRlclR5cGUgPT09ICdQQVRIX1ZBUklBQkxFJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyYW1ldGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc29sdmVkVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtZXRlci5lbmNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRWYWx1ZSA9IHR5cGVvZiBwYXJhbWV0ZXJWYWx1ZS52YWx1ZSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHBhcmFtZXRlclZhbHVlLnZhbHVlKSkgOiBwYXJhbWV0ZXJWYWx1ZS5pbnN0YW5jZVR5cGUgPT09ICdUeXBlZFZhbHVlJyA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtZXRlclZhbHVlLnZhbHVlKSA6IGVuY29kZVVSSUNvbXBvbmVudChwYXJhbWV0ZXJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRWYWx1ZSA9IHR5cGVvZiBwYXJhbWV0ZXJWYWx1ZS52YWx1ZSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gSlNPTi5zdHJpbmdpZnkocGFyYW1ldGVyVmFsdWUudmFsdWUpIDogcGFyYW1ldGVyVmFsdWUuaW5zdGFuY2VUeXBlID09PSAnVHlwZWRWYWx1ZScgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlclZhbHVlLnZhbHVlIDogcGFyYW1ldGVyVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHBhcmFtZXRlciBoYXMgYSBuYW1lIGFuZCB0aGUgVVJMIGNvbnRhaW5zIHtuYW1lfSwgcmVwbGFjZSB0aGUgcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXJhbWV0ZXIubmFtZSkgJiYgdXJsLmluZGV4T2YoJ3snICsgcGFyYW1ldGVyLm5hbWUgKyAnfScpID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gdXJsLnJlcGxhY2UoJ3snICsgcGFyYW1ldGVyLm5hbWUgKyAnfScsIHJlc29sdmVkVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJhY2t3YXJkIGNvbXBhdGliaWxpdHk6IGFwcGVuZCB0byBlbmQgb2YgVVJMXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhQYXJhbWV0ZXJzICs9ICcvJyArIHJlc29sdmVkVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGh0dHBQYXJhbWV0ZXJUeXBlID09PSAnSEVBREVSJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyYW1ldGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnMgPSB7fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnNbcGFyYW1ldGVyLm5hbWVdID0gcGFyYW1ldGVyVmFsdWUudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoaHR0cFBhcmFtZXRlclR5cGUgPT09ICdSRVFVRVNUX0JPRFknKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWVzdEJvZHlQYXJhbUZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIk9ubHkgb25lIHJlcXVlc3QgYm9keSBpcyBwZXJtaXR0ZWRcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1hcmsgdGhlIHNsb3QgYXMgdGFrZW4gcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXMgbnVsbC4gQSBzZWNvbmQgUkVRVUVTVF9CT0RZIHBhcmFtIGlzIGEgY29uZmlnIGJ1Z1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWl0aGVyIHdheSwgYW5kIHdlIHdhbnQgaXQgdG8gc3VyZmFjZSBsb3VkbHkuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Qm9keVBhcmFtRm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzUGFyYW1WYWx1ZU51bGwocGFyYW1ldGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEJvZHkgPSBwYXJhbWV0ZXJWYWx1ZS5pbnN0YW5jZVR5cGUgPT09ICdUeXBlZFZhbHVlJyA/IHBhcmFtZXRlclZhbHVlLnZhbHVlIDogcGFyYW1ldGVyVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocGF0aFBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB1cmwgKz0gcGF0aFBhcmFtZXRlcnM7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHF1ZXJ5U3RyaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdXJsICs9ICc/JztcbiAgICAgICAgICAgICAgICAgICAgdXJsICs9IHF1ZXJ5U3RyaW5nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGNvbnRlbnRUeXBlID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoaGVhZGVycykpIHtcbiAgICAgICAgICAgICAgICBjb250ZW50VHlwZSA9IGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBSZXNvbHZlIHRoZSBIVFRQIG1ldGhvZC4gSG9ub3Igc2VydmljZS5tZXRob2Qgd2hlbiBwcm92aWRlZCBzb1xuICAgICAgICAgICAgLy8gY2FsbGVycyBjYW4gaXNzdWUgREVMRVRFLCBQVVQsIFBBVENIIChub3QganVzdCBHRVQvUE9TVCkuXG4gICAgICAgICAgICAvLyBEZWZhdWx0OiBQT1NUIHdoZW4gYSBib2R5IHdhcyBib3VuZCwgR0VUIG90aGVyd2lzZSDigJQgcHJlc2VydmVzXG4gICAgICAgICAgICAvLyB0aGUgaGlzdG9yaWNhbCBiZWhhdmlvdXIgZm9yIGNhbGxlcnMgdGhhdCBvbWl0IHNlcnZpY2UubWV0aG9kLlxuICAgICAgICAgICAgY29uc3QgbWV0aG9kID0gc2VydmljZS5tZXRob2RcbiAgICAgICAgICAgICAgICA/IHNlcnZpY2UubWV0aG9kLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICAgICAgICA6IChyZXF1ZXN0Qm9keSAhPT0gbnVsbCA/ICdQT1NUJyA6ICdHRVQnKTtcblxuICAgICAgICAgICAgaWYgKHJlcXVlc3RCb2R5ICE9PSBudWxsICYmIG1ldGhvZCA9PT0gJ0dFVCcpIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdBIHJlcXVlc3QgYm9keSBwYXJhbWV0ZXIgY2Fubm90IGJlIHNwZWNpZmllZCBmb3IgYSBHRVQgcmVxdWVzdCcpKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIERvd25sb2FkIHBhdGggKFBERiAvIEV4Y2VsKSBpcyBHRVQtb25seSBhbmQgdXNlcyBhIHNlcGFyYXRlXG4gICAgICAgICAgICAvLyBmZXRjaCBzaGFwZSAoYmxvYiBoYW5kbGluZyk7IGJyYW5jaCBmaXJzdC5cbiAgICAgICAgICAgIGlmIChtZXRob2QgPT09ICdHRVQnICYmIChjb250ZW50VHlwZSA9PT0gJ2FwcGxpY2F0aW9uL3BkZicgfHwgY29udGVudFR5cGUgPT09ICdhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2hXaXRoQ3VzdG9tQ29uZmlnKHtcbiAgICAgICAgICAgICAgICAgICAgdmlld0lkOiByZXF1ZXN0LnZpZXdJZCxcbiAgICAgICAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlVHlwZTogcmVxdWVzdC5zZXJ2aWNlLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIHNlY3VyZTogcmVxdWVzdC5zZWN1cmUsXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgICAgICAgICAgICAgIGRvd25sb2FkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzXG4gICAgICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTaW5nbGUgZGlzcGF0Y2ggZm9yIEdFVCAvIFBPU1QgLyBQVVQgLyBQQVRDSCAvIERFTEVURSAvIGV0Yy5cbiAgICAgICAgICAgIC8vIEJvZHkgaXMgcGFzc2VkIHRocm91Z2g7IHRoZSBmZXRjaCBsYXllciBkcm9wcyBpdCBmb3IgdmVyYnMgdGhhdFxuICAgICAgICAgICAgLy8gZm9yYmlkIG9uZS4gREVMRVRFIHdpdGggYSBib2R5IGlzIHVuY29tbW9uIGJ1dCBwZXJtaXR0ZWQgYnlcbiAgICAgICAgICAgIC8vIEhUVFAg4oCUIHdlIGRvbid0IGJsb2NrIGl0IGhlcmUuXG4gICAgICAgICAgICAvLyBQcmUtYXV0aCBmbG93cyAocmVnaXN0cmF0aW9uIHdpemFyZCBlbmRwb2ludHMpIG11c3Qgbm90XG4gICAgICAgICAgICAgICAgLy8gYXR0YWNoIGEgYmVhcmVyIHRva2VuIOKAlCBTcHJpbmcgU2VjdXJpdHkncyBCZWFyZXJUb2tlbkF1dGhlbnRpY2F0aW9uRmlsdGVyXG4gICAgICAgICAgICAgICAgLy8gdmFsaWRhdGVzICphbnkqIGF0dGFjaGVkIHRva2VuIGV2ZW4gb24gcGVybWl0QWxsKCkgcGF0aHMsXG4gICAgICAgICAgICAgICAgLy8gc28gYW4gZW1wdHkvc3RhbGUgdG9rZW4gd291bGQgNDAxIGEgd2hpdGVsaXN0ZWQgZW5kcG9pbnQuXG4gICAgICAgICAgICAgICAgLy8gUGF0aC1wcmVmaXggZGV0ZWN0aW9uIG1hdGNoZXMgdGhlIGVxdWl2YWxlbnQgZml4IGluXG4gICAgICAgICAgICAgICAgLy8gUm91dGVBY3Rpb25IYW5kbGVyIGZvciAvdmlldy9wdWJsaWMvZ2V0LlxuICAgICAgICAgICAgY29uc3QgaXNQdWJsaWNSZWdpc3RyYXRpb24gPSBzZXJ2aWNlLnVybFxuICAgICAgICAgICAgICAgICAgICAmJiAvXFwvYXBpXFwvdlswLTldK1xcL3JlZ2lzdHJhdGlvblxcLy8udGVzdChzZXJ2aWNlLnVybCk7XG4gICAgICAgICAgICB0aGlzLmZldGNoV2l0aEN1c3RvbUNvbmZpZyh7XG4gICAgICAgICAgICAgICAgdmlld0lkOiByZXF1ZXN0LnZpZXdJZCxcbiAgICAgICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICAgICAgc2VydmljZVR5cGU6IHJlcXVlc3Quc2VydmljZS50eXBlLFxuICAgICAgICAgICAgICAgIG1ldGhvZCxcbiAgICAgICAgICAgICAgICBzZWN1cmU6ICFpc1B1YmxpY1JlZ2lzdHJhdGlvbiAmJiAhc2VydmljZS51cmwuc3RhcnRzV2l0aCgnaHR0cDovLycpLFxuICAgICAgICAgICAgICAgIGJvZHk6IHJlcXVlc3RCb2R5LFxuICAgICAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgdHJhY2s6IHJlcXVlc3QudHJhY2sgIT09IGZhbHNlXG4gICAgICAgICAgICB9KS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBwYXRoID0gVXRpbHMuZ2V0UHJvcGVydHlDaGFpblBhdGgocmVxdWVzdC5yZXR1cm5WYWx1ZUJpbmRpbmcpO1xuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHBhdGgudmFsdWVPYmplY3QpICYmICFVdGlscy5pc051bGwocGF0aC5wcm9wZXJ0eSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF0aC52YWx1ZU9iamVjdFtwYXRoLnByb3BlcnR5XSA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5wcm9jZXNzU3VjY2Vzc2Z1bFJlc3BvbnNlRGF0YShyZXF1ZXN0LmNvbXBvbmVudCwgcmVzcG9uc2UsIHJlcXVlc3Qudmlld0lkLCByZXF1ZXN0LnN1Y2Nlc3NNZXNzYWdlKSk7XG4gICAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpbnZva2VScGMocmVxdWVzdCkge1xuICAgICAgICBsZXQgcnBjUmVxdWVzdCA9IHt9O1xuICAgICAgICBycGNSZXF1ZXN0LmlkID0gcmVxdWVzdC52aWV3SWQ7XG5cbiAgICAgICAgbGV0IHNwbGl0ID0gcmVxdWVzdC5zZXJ2aWNlLnNlcnZpY2VJZC5zcGxpdCgnLicpO1xuICAgICAgICBycGNSZXF1ZXN0LnNlcnZpY2UgPSBzcGxpdFsxXTtcbiAgICAgICAgcnBjUmVxdWVzdC5tZXRob2QgPSByZXF1ZXN0LnNlcnZpY2UucHJvY2VkdXJlTmFtZTtcblxuICAgICAgICBsZXQgbW9kdWxlID0gc3BsaXRbMF0udG9Mb3dlckNhc2UoKTtcblxuICAgICAgICBsZXQgaGVhZGVycyA9IHt9O1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocmVxdWVzdC5zZXJ2aWNlLnBhcmFtZXRlcnMpICYmIHJlcXVlc3Quc2VydmljZS5wYXJhbWV0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBycGNSZXF1ZXN0LnBhcmFtZXRlcnMgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3Quc2VydmljZS5wYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJhbWV0ZXJDb25maWcgPSByZXF1ZXN0LnNlcnZpY2UucGFyYW1ldGVyc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBhcmFtZXRlciA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIubmFtZSA9IHBhcmFtZXRlckNvbmZpZy5uYW1lO1xuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIuaW5kZXggPSBwYXJhbWV0ZXJDb25maWcuaW5kZXg7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IHZhbCA9IGFwcGxpY2F0aW9uTWFuYWdlci5yZXNvbHZlUGFyYW1ldGVyVmFsdWUocGFyYW1ldGVyQ29uZmlnLCByZXF1ZXN0LmV2ZW50ID8gcmVxdWVzdC5ldmVudC5kYXRhIDogbnVsbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwodmFsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyLnZhbHVlID0gdmFsLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyLnR5cGUgPSB2YWwudHlwZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW1ldGVyLnZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyLnZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChVdGlscy5pc051bGwocGFyYW1ldGVyLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIudHlwZSA9ICdTdHJpbmcnO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyYW1ldGVyLnZhbGlkYXRvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICYmICgocGFyYW1ldGVyLnZhbGlkYXRvci5udWxsYWJsZSAmJiAhVXRpbHMuZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihwYXJhbWV0ZXIudmFsaWRhdG9yLm51bGxhYmxlLCBwYXJhbWV0ZXIubmFtZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKChVdGlscy5ldmFsdWF0ZUJvb2xlYW5FeHByZXNzaW9uKHBhcmFtZXRlci52YWxpZGF0b3IucmVxdWlyZWQgJiYgVXRpbHMuZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihwYXJhbWV0ZXIudmFsaWRhdG9yLnJlcXVpcmVkLCBwYXJhbWV0ZXIubmFtZSkpKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLmlzUGFyYW1WYWx1ZU51bGwocGFyYW1ldGVyLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvclR5cGU6ICdJTlZBTElEX1BBUkFNRVRFUicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1ldGVyQ29uZmlnLmh0dHBQYXJhbWV0ZXJUeXBlID09PSAnSEVBREVSJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyYW1ldGVyLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGVhZGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzID0ge31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzW3BhcmFtZXRlci5uYW1lXSA9IHBhcmFtZXRlci52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJwY1JlcXVlc3QucGFyYW1ldGVycy5wdXNoKHBhcmFtZXRlcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuZmV0Y2hXaXRoQ3VzdG9tQ29uZmlnKHtcbiAgICAgICAgICAgICAgICB2aWV3SWQ6IHJlcXVlc3Qudmlld0lkLFxuICAgICAgICAgICAgICAgIHVybDogbG9jYXRpb24gKyBhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0Q29udGV4dFJvb3QoKSArICcvJyArIG1vZHVsZSArICcvYXBpL3YxL3JwYy9pbnZva2UnLFxuICAgICAgICAgICAgICAgIHNlcnZpY2VUeXBlOiByZXF1ZXN0LnNlcnZpY2UudHlwZSxcbiAgICAgICAgICAgICAgICBzZWN1cmU6IHRydWUsXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICAgICAgYm9keTogcnBjUmVxdWVzdCxcbiAgICAgICAgICAgICAgICB0cmFjazogcmVxdWVzdC50cmFjayAhPT0gZmFsc2UsXG4gICAgICAgICAgICAgICAgY29udGVudFR5cGU6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWVzdC5yZXR1cm5WYWx1ZUJpbmRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwYXRoID0gVXRpbHMuZ2V0UHJvcGVydHlDaGFpblBhdGgocmVxdWVzdC5yZXR1cm5WYWx1ZUJpbmRpbmcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGF0aC52YWx1ZU9iamVjdCkgJiYgIVV0aWxzLmlzTnVsbChwYXRoLnByb3BlcnR5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgudmFsdWVPYmplY3RbcGF0aC5wcm9wZXJ0eV0gPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5wcm9jZXNzU3VjY2Vzc2Z1bFJlc3BvbnNlRGF0YShyZXF1ZXN0LmNvbXBvbmVudCwgcmVzcG9uc2UsIHJlcXVlc3Qudmlld0lkLCByZXF1ZXN0LnN1Y2Nlc3NNZXNzYWdlKSk7XG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBmZXRjaFdpdGhDdXN0b21Db25maWcocmVxdWVzdCkge1xuICAgICAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2FjY2Vzc1Rva2VuJyk7XG4gICAgICAgIGNvbnN0IGlkVG9rZW4gPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdpZFRva2VuJyk7XG5cbiAgICAgICAgbGV0IGRhdGEgPSByZXF1ZXN0LmJvZHkgPyAocmVxdWVzdC5ib2R5IGluc3RhbmNlb2YgRm9ybURhdGEpID8gcmVxdWVzdC5ib2R5IDogSlNPTi5zdHJpbmdpZnkocmVxdWVzdC5ib2R5KSA6IG51bGw7XG4gICAgICAgIGxldCBmZXRjaENvbmZpZyA9IHJlcXVlc3QuY29uZmlnO1xuXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKGZldGNoQ29uZmlnKSkge1xuICAgICAgICAgICAgICAgIGlmIChVdGlscy5pc051bGwocmVxdWVzdC5zZWN1cmUpIHx8IHJlcXVlc3Quc2VjdXJlID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGZldGNoQ29uZmlnID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBVdGlscy5pc051bGwocmVxdWVzdC5tZXRob2QpID8gJ0dFVCcgOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5yZXF1ZXN0LmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6IHJlcXVlc3QuY29udGVudFR5cGUgPyByZXF1ZXN0LmNvbnRlbnRUeXBlIDogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiAnQmVhcmVyICcgKyBhY2Nlc3NUb2tlbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaWRUb2tlbic6IGlkVG9rZW5cblxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IGRhdGFcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmZXRjaENvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogVXRpbHMuaXNOdWxsKHJlcXVlc3QubWV0aG9kKSA/ICdHRVQnIDogcmVxdWVzdC5tZXRob2QsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucmVxdWVzdC5oZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiByZXF1ZXN0LmNvbnRlbnRUeXBlID8gcmVxdWVzdC5jb250ZW50VHlwZSA6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWNjZXB0JzogcmVxdWVzdC5hY2NlcHQgPyByZXF1ZXN0LmFjY2VwdCA6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IGRhdGFcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoJ3Jlc3QnID09PSByZXF1ZXN0LnNlcnZpY2VUeXBlICYmICEocmVxdWVzdC5ib2R5IGluc3RhbmNlb2YgRm9ybURhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZldGNoQ29uZmlnLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gcmVxdWVzdC5jb250ZW50VHlwZSA/IHJlcXVlc3QuY29udGVudFR5cGUgOiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKChyZXF1ZXN0LmJvZHkgaW5zdGFuY2VvZiBGb3JtRGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGZldGNoQ29uZmlnLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddO1xuICAgICAgICAgICAgICAgICAgICBmZXRjaENvbmZpZy5oZWFkZXJzWydBY2NlcHQnXSA9IHJlcXVlc3QuYWNjZXB0ID8gcmVxdWVzdC5hY2NlcHQgOiAnYXBwbGljYXRpb24vanNvbic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVxdWVzdC5jb250ZW50VHlwZSkge1xuICAgICAgICAgICAgICAgIGZldGNoQ29uZmlnLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gcmVxdWVzdC5jb250ZW50VHlwZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHVybCA9IHJlcXVlc3QudXJsO1xuICAgICAgICAgICAgaWYgKHJlcXVlc3QuZG93bmxvYWQpIHtcbiAgICAgICAgICAgICAgICBpZiAodXJsLmluZGV4T2YoJz8nKSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdXJsICs9ICc/JztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1cmwgKz0gJyYnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vdXJsICs9ICdhY2Nlc3NfdG9rZW49JyArIGFjY2Vzc1Rva2VuO1xuICAgICAgICAgICAgICAgIC8vdXJsICs9ICcmaWRUb2tlbj0nICsgaWRUb2tlbjtcbiAgICAgICAgICAgICAgICB1cmwgKz0gJyZ0aGVtZVByaW1hcnlDb2xvcj0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvblByaW1hcnlDb2xvcigpKTtcbiAgICAgICAgICAgICAgICB1cmwgKz0gJyZ0aGVtZVNlY29uZGFyeUNvbG9yPScgKyBlbmNvZGVVUklDb21wb25lbnQoYXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uU2Vjb25kYXJ5Q29sb3IoKSk7XG5cbiAgICAgICAgICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5yZXF1ZXN0LmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAnQXV0aG9yaXphdGlvbic6ICdCZWFyZXIgJyArIGFjY2Vzc1Rva2VuLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2lkVG9rZW4nOiBpZFRva2VuXG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpLnRoZW4oZXJyb3JEYXRhID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciAke3Jlc3BvbnNlLnN0YXR1c306ICR7ZXJyb3JEYXRhLm1lc3NhZ2UgfHwgcmVzcG9uc2Uuc3RhdHVzVGV4dH1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRlbnREaXNwb3NpdGlvbiA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwiQ29udGVudC1EaXNwb3NpdGlvblwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmaWxlbmFtZSA9IFwiZG93bmxvYWRlZC1maWxlXCI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50RGlzcG9zaXRpb24gJiYgY29udGVudERpc3Bvc2l0aW9uLmluY2x1ZGVzKFwiZmlsZW5hbWU9XCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBjb250ZW50RGlzcG9zaXRpb24uc3BsaXQoXCJmaWxlbmFtZT1cIilbMV0udHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUucmVwbGFjZSgvW1wiJ10vZywgXCJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5ibG9iKCkudGhlbihibG9iID0+ICh7YmxvYiwgZmlsZW5hbWV9KSk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCh7YmxvYiwgZmlsZW5hbWV9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYS5ocmVmID0gdXJsO1xuICAgICAgICAgICAgICAgICAgICAgICAgYS5kb3dubG9hZCA9IGZpbGVuYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGEuY2xpY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaChlcnJvciA9PiBjb25zb2xlLmVycm9yKFwiRG93bmxvYWQgZmFpbGVkOlwiLCBlcnJvcikpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHJlcXVlc3QudHJhY2spIHx8IHJlcXVlc3QudHJhY2sgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJhY2tQcm9taXNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leGVjdXRlRmV0Y2godXJsLCBmZXRjaENvbmZpZywgcmVxdWVzdC52aWV3SWQsIHJlcXVlc3Quc3VjY2Vzc01lc3NhZ2UpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5leGVjdXRlRmV0Y2godXJsLCBmZXRjaENvbmZpZywgcmVxdWVzdC52aWV3SWQsIHJlcXVlc3Quc3VjY2Vzc01lc3NhZ2UpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZXhlY3V0ZUZldGNoKHVybCwgZmV0Y2hDb25maWcsIHZpZXdJZCwgc3VjY2Vzc01lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGZldGNoKGVuY29kZVVSSSh1cmwpLCBmZXRjaENvbmZpZylcbiAgICAgICAgICAgICAgICAudGhlbihzdGF0dXMpXG4gICAgICAgICAgICAgICAgLnRoZW4oanNvbilcbiAgICAgICAgICAgICAgICAudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMucHJvY2Vzc1N1Y2Nlc3NmdWxSZXNwb25zZURhdGEobnVsbCwgZGF0YSwgdmlld0lkLCBzdWNjZXNzTWVzc2FnZSkpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlLnN0YXR1cyA9PT0gNDAxICYmICF1cmwuZW5kc1dpdGgoJy9sb2dvdXQnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25NYW5hZ2VyLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIubmF2aWdhdGUoJy9sb2dpbicpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIHByb2Nlc3NTdWNjZXNzZnVsUmVzcG9uc2VEYXRhKGNvbXBvbmVudCwgZGF0YSwgdmlld0lkLCBzdWNjZXNzTWVzc2FnZSkge1xuICAgICAgICBsZXQgcmVzcG9uc2U7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyB8fCBVdGlscy5pc051bGwoZGF0YSkgfHwgZGF0YS50b1N0cmluZygpXG4gICAgICAgICAgICAudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmVzcG9uc2UgPSBkYXRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgICAgICB9IGNhdGNoIChpZ25vcmVkKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBkYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmRhdGFUeXBlID09PSAnbWVzc2FnZScpIHtcbiAgICAgICAgICAgIGxldCBldmVudCA9IG5ldyBFdmVudChhcHBsaWNhdGlvbk1hbmFnZXIsIHZpZXdJZCwgcmVzcG9uc2UpO1xuICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChFdmVudFR5cGUuTUVTU0FHRV9BUlJJVkVELCBldmVudCk7XG5cbiAgICAgICAgICAgIGlmIChjb21wb25lbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBldmVudCA9IG5ldyBFdmVudChjb21wb25lbnQsIHZpZXdJZCwgcmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIGV2ZW50TWFuYWdlci5maXJlRXZlbnQoRXZlbnRUeXBlLk1FU1NBR0VfQVJSSVZFRCwgZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCFVdGlscy5pc051bGwoc3VjY2Vzc01lc3NhZ2UpKSB7XG4gICAgICAgICAgICBsZXQgbWVzc2FnZSA9IHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlVHlwZTogJ1NVQ0NFU1MnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGFwcGxpY2F0aW9uTWFuYWdlci5wb3B1bGF0ZVRlbXBsYXRlKHN1Y2Nlc3NNZXNzYWdlLCByZXNwb25zZSlcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGxldCBldmVudCA9IG5ldyBFdmVudChhcHBsaWNhdGlvbk1hbmFnZXIsIHZpZXdJZCwgbWVzc2FnZSk7XG4gICAgICAgICAgICBldmVudE1hbmFnZXIuZmlyZUV2ZW50KEV2ZW50VHlwZS5NRVNTQUdFX0FSUklWRUQsIGV2ZW50KTtcblxuICAgICAgICAgICAgaWYgKGNvbXBvbmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGV2ZW50ID0gbmV3IEV2ZW50KGNvbXBvbmVudCwgdmlld0lkLCBtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICBldmVudE1hbmFnZXIuZmlyZUV2ZW50KEV2ZW50VHlwZS5NRVNTQUdFX0FSUklWRUQsIGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG59XG5cbmNvbnN0IGluc3RhbmNlID0gbmV3IFJlc3RTZXJ2aWNlKCk7XG5cbmV4cG9ydCBjb25zdCBpbnZva2VScGMgPSAocmVxdWVzdCkgPT4ge1xuICAgIHJldHVybiBpbnN0YW5jZS5pbnZva2VScGMocmVxdWVzdCk7XG59O1xuXG5leHBvcnQgY29uc3QgaW52b2tlUmVzdCA9IChyZXF1ZXN0KSA9PiB7XG4gICAgcmV0dXJuIGluc3RhbmNlLmludm9rZVJlc3QocmVxdWVzdCk7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQyxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDRCxJQUFBQyxvQkFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsbUJBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLE1BQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLFdBQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFLLFVBQUEsR0FBQU4sc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFNLFVBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLFVBQUEsR0FBQVAsT0FBQTtBQUE0RCxTQUFBRCx1QkFBQVMsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQUFBLFNBQUFHLFFBQUFILENBQUEsRUFBQUksQ0FBQSxRQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsSUFBQSxDQUFBUCxDQUFBLE9BQUFNLE1BQUEsQ0FBQUUscUJBQUEsUUFBQUMsQ0FBQSxHQUFBSCxNQUFBLENBQUFFLHFC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
424
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfVXRpbHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdFByb21pc2VUcmFja2VyIiwiX0FwcGxpY2F0aW9uTWFuYWdlciIsIl9FdmVudCIsIl9PYnNlcnZhYmxlIiwiX0V2ZW50VHlwZSIsIl9wcm9wVHlwZXMiLCJfUmVzdFV0aWxzIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0Iiwib3duS2V5cyIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX3RvUHJvcGVydHlLZXkiLCJ2YWx1ZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiaSIsIl90b1ByaW1pdGl2ZSIsIlN5bWJvbCIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsImxvY2F0aW9uIiwiZXhwb3J0cyIsIndpbmRvdyIsInByb3RvY29sIiwiaG9zdG5hbWUiLCJzdGF0dXMiLCJyZXNwb25zZSIsIm9rIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJqc29uIiwidGV4dCIsIlJlc3RTZXJ2aWNlIiwiaXNQYXJhbVZhbHVlTnVsbCIsInBhcmFtVmFsdWUiLCJVdGlscyIsImlzTnVsbCIsImhhc093blByb3BlcnR5IiwiaW52b2tlUmVzdCIsInJlcXVlc3QiLCJzZXJ2aWNlIiwidXJsIiwic3RhcnRzV2l0aCIsImNvbmNhdCIsImFwcGxpY2F0aW9uTWFuYWdlciIsImdldENvbnRleHRSb290IiwicmVxdWVzdEJvZHkiLCJoZWFkZXJzIiwicGFyYW1ldGVycyIsInF1ZXJ5U3RyaW5nIiwicGF0aFBhcmFtZXRlcnMiLCJyZXF1ZXN0Qm9keVBhcmFtRm91bmQiLCJwYXJhbWV0ZXIiLCJwYXJhbWV0ZXJWYWx1ZSIsInJlc29sdmVQYXJhbWV0ZXJWYWx1ZSIsImV2ZW50IiwiZGF0YSIsInZhbGlkYXRvciIsIm51bGxhYmxlIiwiZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbiIsIm5hbWUiLCJyZXF1aXJlZCIsImVycm9yVHlwZSIsImh0dHBQYXJhbWV0ZXJUeXBlIiwiaW5jbHVkZVBhcmFtZXRlclR5cGVzIiwidHlwZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJyZXNvbHZlZFZhbHVlIiwiZW5jb2RlIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiaW5zdGFuY2VUeXBlIiwiaW5kZXhPZiIsInJlcGxhY2UiLCJFcnJvciIsImNvbnRlbnRUeXBlIiwibWV0aG9kIiwidG9VcHBlckNhc2UiLCJmZXRjaFdpdGhDdXN0b21Db25maWciLCJ2aWV3SWQiLCJzZXJ2aWNlVHlwZSIsInNlY3VyZSIsImRvd25sb2FkIiwidGhlbiIsImNhdGNoIiwiYm9keSIsInRyYWNrIiwicGF0aCIsImdldFByb3BlcnR5Q2hhaW5QYXRoIiwicmV0dXJuVmFsdWVCaW5kaW5nIiwidmFsdWVPYmplY3QiLCJwcm9wZXJ0eSIsInByb2Nlc3NTdWNjZXNzZnVsUmVzcG9uc2VEYXRhIiwiY29tcG9uZW50Iiwic3VjY2Vzc01lc3NhZ2UiLCJpbnZva2VScGMiLCJycGNSZXF1ZXN0IiwiaWQiLCJzcGxpdCIsInNlcnZpY2VJZCIsInByb2NlZHVyZU5hbWUiLCJtb2R1bGUiLCJ0b0xvd2VyQ2FzZSIsInBhcmFtZXRlckNvbmZpZyIsImluZGV4IiwidmFsIiwiYWNjZXNzVG9rZW4iLCJzZXNzaW9uU3RvcmFnZSIsImdldEl0ZW0iLCJpZFRva2VuIiwiRm9ybURhdGEiLCJmZXRjaENvbmZpZyIsImNvbmZpZyIsImFjY2VwdCIsImdldEFwcGxpY2F0aW9uUHJpbWFyeUNvbG9yIiwiZ2V0QXBwbGljYXRpb25TZWNvbmRhcnlDb2xvciIsImZldGNoIiwiZXJyb3JEYXRhIiwibWVzc2FnZSIsInN0YXR1c1RleHQiLCJjb250ZW50RGlzcG9zaXRpb24iLCJnZXQiLCJmaWxlbmFtZSIsImluY2x1ZGVzIiwidHJpbSIsImJsb2IiLCJfcmVmIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiYSIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImhyZWYiLCJhcHBlbmRDaGlsZCIsImNsaWNrIiwicmVtb3ZlQ2hpbGQiLCJyZXZva2VPYmplY3RVUkwiLCJlcnJvciIsImNvbnNvbGUiLCJ0cmFja1Byb21pc2UiLCJleGVjdXRlRmV0Y2giLCJlbmNvZGVVUkkiLCJlbmRzV2l0aCIsImNsZWFyIiwibmF2aWdhdGUiLCJ0b1N0cmluZyIsInBhcnNlIiwiaWdub3JlZCIsImRhdGFUeXBlIiwiRXZlbnQiLCJldmVudE1hbmFnZXIiLCJmaXJlRXZlbnQiLCJFdmVudFR5cGUiLCJNRVNTQUdFX0FSUklWRUQiLCJtZXNzYWdlVHlwZSIsInBvcHVsYXRlVGVtcGxhdGUiLCJpbnN0YW5jZSJdLCJzb3VyY2VzIjpbIi4uL3NyYy9saWIvUmVzdFNlcnZpY2UuanMiXSwic291cmNlc0NvbnRlbnQiOlsi77u/aW1wb3J0IFV0aWxzIGZyb20gJy4vVXRpbHMnO1xuaW1wb3J0IHt0cmFja1Byb21pc2V9IGZyb20gJ3JlYWN0LXByb21pc2UtdHJhY2tlcic7XG5pbXBvcnQgYXBwbGljYXRpb25NYW5hZ2VyIGZyb20gJy4vQXBwbGljYXRpb25NYW5hZ2VyJztcbmltcG9ydCBFdmVudCBmcm9tICcuL2V2ZW50L0V2ZW50JztcbmltcG9ydCBldmVudE1hbmFnZXIgZnJvbSAnLi9ldmVudC9PYnNlcnZhYmxlJztcbmltcG9ydCBFdmVudFR5cGUgZnJvbSAnLi9ldmVudC9FdmVudFR5cGUnO1xuaW1wb3J0IHtpbnN0YW5jZU9mfSBmcm9tIFwicHJvcC10eXBlc1wiO1xuaW1wb3J0IHtkb3dubG9hZCwgcG9zdERhdGEsIHNlbmRSZXF1ZXN0fSBmcm9tIFwiLi9SZXN0VXRpbHNcIjtcblxuZXhwb3J0IGNvbnN0IGxvY2F0aW9uID0gd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZTtcbmNvbnN0IHN0YXR1cyA9IChyZXNwb25zZSkgPT4ge1xuICAgIGlmIChyZXNwb25zZS5vaykge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVzcG9uc2UpO1xuICAgIH1cbn07XG5cbmNvbnN0IGpzb24gPSAocmVzcG9uc2UpID0+IHtcbiAgICByZXR1cm4gcmVzcG9uc2UudGV4dCgpO1xufTtcblxuY2xhc3MgUmVzdFNlcnZpY2Uge1xuICAgIGlzUGFyYW1WYWx1ZU51bGwocGFyYW1WYWx1ZSkge1xuICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHBhcmFtVmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXJhbVZhbHVlLmhhc093blByb3BlcnR5KCd2YWx1ZScpID8gVXRpbHMuaXNOdWxsKHBhcmFtVmFsdWUudmFsdWUpIDogZmFsc2U7XG4gICAgfVxuXG4gICAgaW52b2tlUmVzdChyZXF1ZXN0KSB7XG4gICAgICAgIGxldCBzZXJ2aWNlID0gcmVxdWVzdC5zZXJ2aWNlO1xuICAgICAgICBsZXQgdXJsID0gc2VydmljZS51cmwuc3RhcnRzV2l0aCgnaHR0cDovLycpIHx8IHNlcnZpY2UudXJsLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykgP1xuICAgICAgICAgICAgc2VydmljZS51cmwgOiBsb2NhdGlvbiArIGAke2FwcGxpY2F0aW9uTWFuYWdlci5nZXRDb250ZXh0Um9vdCgpICsgc2VydmljZS51cmx9YDtcbiAgICAgICAgbGV0IHJlcXVlc3RCb2R5ID0gbnVsbDtcbiAgICAgICAgbGV0IGhlYWRlcnMgPSBzZXJ2aWNlLmhlYWRlcnM7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHNlcnZpY2UucGFyYW1ldGVycykpIHtcbiAgICAgICAgICAgICAgICBsZXQgcXVlcnlTdHJpbmcgPSAnJztcbiAgICAgICAgICAgICAgICBsZXQgcGF0aFBhcmFtZXRlcnMgPSAnJztcbiAgICAgICAgICAgICAgICBsZXQgcmVxdWVzdEJvZHlQYXJhbUZvdW5kID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwYXJhbWV0ZXIgb2Ygc2VydmljZS5wYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJhbWV0ZXJWYWx1ZSA9IGFwcGxpY2F0aW9uTWFuYWdlci5yZXNvbHZlUGFyYW1ldGVyVmFsdWUocGFyYW1ldGVyLCByZXF1ZXN0LmV2ZW50ID8gcmVxdWVzdC5ldmVudC5kYXRhIDogbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHBhcmFtZXRlci52YWxpZGF0b3IpXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiAoKHBhcmFtZXRlci52YWxpZGF0b3IubnVsbGFibGUgJiYgIVV0aWxzLmV2YWx1YXRlQm9vbGVhbkV4cHJlc3Npb24ocGFyYW1ldGVyLnZhbGlkYXRvci5udWxsYWJsZSwgcGFyYW1ldGVyLm5hbWUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICgoVXRpbHMuZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihwYXJhbWV0ZXIudmFsaWRhdG9yLnJlcXVpcmVkICYmIFV0aWxzLmV2YWx1YXRlQm9vbGVhbkV4cHJlc3Npb24ocGFyYW1ldGVyLnZhbGlkYXRvci5yZXF1aXJlZCwgcGFyYW1ldGVyLm5hbWUpKSkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5pc1BhcmFtVmFsdWVOdWxsKHBhcmFtZXRlclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvclR5cGU6ICdJTlZBTElEX1BBUkFNRVRFUicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBsZXQgaHR0cFBhcmFtZXRlclR5cGUgPSBwYXJhbWV0ZXIuaHR0cFBhcmFtZXRlclR5cGU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChVdGlscy5pc051bGwoaHR0cFBhcmFtZXRlclR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBodHRwUGFyYW1ldGVyVHlwZSA9ICdRVUVSWV9QQVJBTUVURVInO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGh0dHBQYXJhbWV0ZXJUeXBlID09PSAnUVVFUllfUEFSQU1FVEVSJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyYW1ldGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1ZXJ5U3RyaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlTdHJpbmcgKz0gJyYnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHNlcnZpY2UuaW5jbHVkZVBhcmFtZXRlclR5cGVzKSAmJiBzZXJ2aWNlLmluY2x1ZGVQYXJhbWV0ZXJUeXBlcyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVN0cmluZyArPSBwYXJhbWV0ZXJWYWx1ZS50eXBlICsgJzonO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9IHBhcmFtZXRlci5uYW1lICsgJz0nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9ICh0eXBlb2YgcGFyYW1ldGVyVmFsdWUudmFsdWUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBwYXJhbWV0ZXJWYWx1ZS52YWx1ZSA9PT0gJ251bWJlcicgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJWYWx1ZS52YWx1ZSA6IEpTT04uc3RyaW5naWZ5KHBhcmFtZXRlclZhbHVlLnZhbHVlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoaHR0cFBhcmFtZXRlclR5cGUgPT09ICdQQVRIX1ZBUklBQkxFJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyYW1ldGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc29sdmVkVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtZXRlci5lbmNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRWYWx1ZSA9IHR5cGVvZiBwYXJhbWV0ZXJWYWx1ZS52YWx1ZSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHBhcmFtZXRlclZhbHVlLnZhbHVlKSkgOiBwYXJhbWV0ZXJWYWx1ZS5pbnN0YW5jZVR5cGUgPT09ICdUeXBlZFZhbHVlJyA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtZXRlclZhbHVlLnZhbHVlKSA6IGVuY29kZVVSSUNvbXBvbmVudChwYXJhbWV0ZXJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRWYWx1ZSA9IHR5cGVvZiBwYXJhbWV0ZXJWYWx1ZS52YWx1ZSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gSlNPTi5zdHJpbmdpZnkocGFyYW1ldGVyVmFsdWUudmFsdWUpIDogcGFyYW1ldGVyVmFsdWUuaW5zdGFuY2VUeXBlID09PSAnVHlwZWRWYWx1ZScgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlclZhbHVlLnZhbHVlIDogcGFyYW1ldGVyVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHBhcmFtZXRlciBoYXMgYSBuYW1lIGFuZCB0aGUgVVJMIGNvbnRhaW5zIHtuYW1lfSwgcmVwbGFjZSB0aGUgcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXJhbWV0ZXIubmFtZSkgJiYgdXJsLmluZGV4T2YoJ3snICsgcGFyYW1ldGVyLm5hbWUgKyAnfScpID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gdXJsLnJlcGxhY2UoJ3snICsgcGFyYW1ldGVyLm5hbWUgKyAnfScsIHJlc29sdmVkVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJhY2t3YXJkIGNvbXBhdGliaWxpdHk6IGFwcGVuZCB0byBlbmQgb2YgVVJMXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhQYXJhbWV0ZXJzICs9ICcvJyArIHJlc29sdmVkVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGh0dHBQYXJhbWV0ZXJUeXBlID09PSAnSEVBREVSJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyYW1ldGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnMgPSB7fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnNbcGFyYW1ldGVyLm5hbWVdID0gcGFyYW1ldGVyVmFsdWUudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoaHR0cFBhcmFtZXRlclR5cGUgPT09ICdSRVFVRVNUX0JPRFknKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWVzdEJvZHlQYXJhbUZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIk9ubHkgb25lIHJlcXVlc3QgYm9keSBpcyBwZXJtaXR0ZWRcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1hcmsgdGhlIHNsb3QgYXMgdGFrZW4gcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXMgbnVsbC4gQSBzZWNvbmQgUkVRVUVTVF9CT0RZIHBhcmFtIGlzIGEgY29uZmlnIGJ1Z1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWl0aGVyIHdheSwgYW5kIHdlIHdhbnQgaXQgdG8gc3VyZmFjZSBsb3VkbHkuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Qm9keVBhcmFtRm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzUGFyYW1WYWx1ZU51bGwocGFyYW1ldGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEJvZHkgPSBwYXJhbWV0ZXJWYWx1ZS5pbnN0YW5jZVR5cGUgPT09ICdUeXBlZFZhbHVlJyA/IHBhcmFtZXRlclZhbHVlLnZhbHVlIDogcGFyYW1ldGVyVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocGF0aFBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICB1cmwgKz0gcGF0aFBhcmFtZXRlcnM7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHF1ZXJ5U3RyaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdXJsICs9ICc/JztcbiAgICAgICAgICAgICAgICAgICAgdXJsICs9IHF1ZXJ5U3RyaW5nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGNvbnRlbnRUeXBlID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwoaGVhZGVycykpIHtcbiAgICAgICAgICAgICAgICBjb250ZW50VHlwZSA9IGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBSZXNvbHZlIHRoZSBIVFRQIG1ldGhvZC4gSG9ub3Igc2VydmljZS5tZXRob2Qgd2hlbiBwcm92aWRlZCBzb1xuICAgICAgICAgICAgLy8gY2FsbGVycyBjYW4gaXNzdWUgREVMRVRFLCBQVVQsIFBBVENIIChub3QganVzdCBHRVQvUE9TVCkuXG4gICAgICAgICAgICAvLyBEZWZhdWx0OiBQT1NUIHdoZW4gYSBib2R5IHdhcyBib3VuZCwgR0VUIG90aGVyd2lzZSDigJQgcHJlc2VydmVzXG4gICAgICAgICAgICAvLyB0aGUgaGlzdG9yaWNhbCBiZWhhdmlvdXIgZm9yIGNhbGxlcnMgdGhhdCBvbWl0IHNlcnZpY2UubWV0aG9kLlxuICAgICAgICAgICAgY29uc3QgbWV0aG9kID0gc2VydmljZS5tZXRob2RcbiAgICAgICAgICAgICAgICA/IHNlcnZpY2UubWV0aG9kLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICAgICAgICA6IChyZXF1ZXN0Qm9keSAhPT0gbnVsbCA/ICdQT1NUJyA6ICdHRVQnKTtcblxuICAgICAgICAgICAgaWYgKHJlcXVlc3RCb2R5ICE9PSBudWxsICYmIG1ldGhvZCA9PT0gJ0dFVCcpIHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdBIHJlcXVlc3QgYm9keSBwYXJhbWV0ZXIgY2Fubm90IGJlIHNwZWNpZmllZCBmb3IgYSBHRVQgcmVxdWVzdCcpKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIERvd25sb2FkIHBhdGggKFBERiAvIEV4Y2VsKSBpcyBHRVQtb25seSBhbmQgdXNlcyBhIHNlcGFyYXRlXG4gICAgICAgICAgICAvLyBmZXRjaCBzaGFwZSAoYmxvYiBoYW5kbGluZyk7IGJyYW5jaCBmaXJzdC5cbiAgICAgICAgICAgIGlmIChtZXRob2QgPT09ICdHRVQnICYmIChjb250ZW50VHlwZSA9PT0gJ2FwcGxpY2F0aW9uL3BkZicgfHwgY29udGVudFR5cGUgPT09ICdhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2hXaXRoQ3VzdG9tQ29uZmlnKHtcbiAgICAgICAgICAgICAgICAgICAgdmlld0lkOiByZXF1ZXN0LnZpZXdJZCxcbiAgICAgICAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlVHlwZTogcmVxdWVzdC5zZXJ2aWNlLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIHNlY3VyZTogcmVxdWVzdC5zZWN1cmUsXG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgICAgICAgICAgICAgIGRvd25sb2FkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzXG4gICAgICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTaW5nbGUgZGlzcGF0Y2ggZm9yIEdFVCAvIFBPU1QgLyBQVVQgLyBQQVRDSCAvIERFTEVURSAvIGV0Yy5cbiAgICAgICAgICAgIC8vIEJvZHkgaXMgcGFzc2VkIHRocm91Z2g7IHRoZSBmZXRjaCBsYXllciBkcm9wcyBpdCBmb3IgdmVyYnMgdGhhdFxuICAgICAgICAgICAgLy8gZm9yYmlkIG9uZS4gREVMRVRFIHdpdGggYSBib2R5IGlzIHVuY29tbW9uIGJ1dCBwZXJtaXR0ZWQgYnlcbiAgICAgICAgICAgIC8vIEhUVFAg4oCUIHdlIGRvbid0IGJsb2NrIGl0IGhlcmUuXG4gICAgICAgICAgICAvLyBTZWN1cmUgYnkgZGVmYXVsdDogYXR0YWNoIHRoZSBzZXNzaW9uIHRva2VuIHdoZW5ldmVyIG9uZSBleGlzdHMuXG4gICAgICAgICAgICAvLyBObyBVUkwgc3BlY2lhbC1jYXNpbmcg4oCUIHByZS1hdXRoIHN1cmZhY2VzICh2aWV3L3NlY3VyaXR5LyogbG9naW4sXG4gICAgICAgICAgICAvLyByZWdpc3RlciwgcmVzZXQpIGNsZWFyIHNlc3Npb25TdG9yYWdlIG9uIG1vdW50LCBzbyBub3RoaW5nIGlzXG4gICAgICAgICAgICAvLyBhdHRhY2hlZCBvbiB0aG9zZSBzY3JlZW5zLiBgc2VjdXJlYCBoZXJlIG9ubHkgcHJldmVudHMgbGVha2luZyBhXG4gICAgICAgICAgICAvLyB0b2tlbiB0byBhIHBsYWluLWh0dHAgZW5kcG9pbnQ7IHRoZSBhdHRhY2htZW50IGl0c2VsZiBpc1xuICAgICAgICAgICAgLy8gcHJlc2VuY2UtYmFzZWQgaW4gZmV0Y2hXaXRoQ3VzdG9tQ29uZmlnLCBzbyBhIHN0YWxlL2VtcHR5IHRva2VuIGlzXG4gICAgICAgICAgICAvLyBuZXZlciBzZW50LlxuICAgICAgICAgICAgdGhpcy5mZXRjaFdpdGhDdXN0b21Db25maWcoe1xuICAgICAgICAgICAgICAgIHZpZXdJZDogcmVxdWVzdC52aWV3SWQsXG4gICAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICAgIHNlcnZpY2VUeXBlOiByZXF1ZXN0LnNlcnZpY2UudHlwZSxcbiAgICAgICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgICAgICAgc2VjdXJlOiAhc2VydmljZS51cmwuc3RhcnRzV2l0aCgnaHR0cDovLycpLFxuICAgICAgICAgICAgICAgIGJvZHk6IHJlcXVlc3RCb2R5LFxuICAgICAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgdHJhY2s6IHJlcXVlc3QudHJhY2sgIT09IGZhbHNlXG4gICAgICAgICAgICB9KS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBwYXRoID0gVXRpbHMuZ2V0UHJvcGVydHlDaGFpblBhdGgocmVxdWVzdC5yZXR1cm5WYWx1ZUJpbmRpbmcpO1xuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHBhdGgudmFsdWVPYmplY3QpICYmICFVdGlscy5pc051bGwocGF0aC5wcm9wZXJ0eSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF0aC52YWx1ZU9iamVjdFtwYXRoLnByb3BlcnR5XSA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5wcm9jZXNzU3VjY2Vzc2Z1bFJlc3BvbnNlRGF0YShyZXF1ZXN0LmNvbXBvbmVudCwgcmVzcG9uc2UsIHJlcXVlc3Qudmlld0lkLCByZXF1ZXN0LnN1Y2Nlc3NNZXNzYWdlKSk7XG4gICAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpbnZva2VScGMocmVxdWVzdCkge1xuICAgICAgICBsZXQgcnBjUmVxdWVzdCA9IHt9O1xuICAgICAgICBycGNSZXF1ZXN0LmlkID0gcmVxdWVzdC52aWV3SWQ7XG5cbiAgICAgICAgbGV0IHNwbGl0ID0gcmVxdWVzdC5zZXJ2aWNlLnNlcnZpY2VJZC5zcGxpdCgnLicpO1xuICAgICAgICBycGNSZXF1ZXN0LnNlcnZpY2UgPSBzcGxpdFsxXTtcbiAgICAgICAgcnBjUmVxdWVzdC5tZXRob2QgPSByZXF1ZXN0LnNlcnZpY2UucHJvY2VkdXJlTmFtZTtcblxuICAgICAgICBsZXQgbW9kdWxlID0gc3BsaXRbMF0udG9Mb3dlckNhc2UoKTtcblxuICAgICAgICBsZXQgaGVhZGVycyA9IHt9O1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocmVxdWVzdC5zZXJ2aWNlLnBhcmFtZXRlcnMpICYmIHJlcXVlc3Quc2VydmljZS5wYXJhbWV0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBycGNSZXF1ZXN0LnBhcmFtZXRlcnMgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3Quc2VydmljZS5wYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJhbWV0ZXJDb25maWcgPSByZXF1ZXN0LnNlcnZpY2UucGFyYW1ldGVyc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBhcmFtZXRlciA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIubmFtZSA9IHBhcmFtZXRlckNvbmZpZy5uYW1lO1xuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIuaW5kZXggPSBwYXJhbWV0ZXJDb25maWcuaW5kZXg7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IHZhbCA9IGFwcGxpY2F0aW9uTWFuYWdlci5yZXNvbHZlUGFyYW1ldGVyVmFsdWUocGFyYW1ldGVyQ29uZmlnLCByZXF1ZXN0LmV2ZW50ID8gcmVxdWVzdC5ldmVudC5kYXRhIDogbnVsbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwodmFsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyLnZhbHVlID0gdmFsLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyLnR5cGUgPSB2YWwudHlwZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW1ldGVyLnZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyLnZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChVdGlscy5pc051bGwocGFyYW1ldGVyLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIudHlwZSA9ICdTdHJpbmcnO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHZhbGlkYXRvciBsaXZlcyBvbiB0aGUgdmlldyBjb25maWcgKHBhcmFtZXRlckNvbmZpZyksIE5PVCBvbiB0aGVcbiAgICAgICAgICAgICAgICAgICAgLy8gZnJlc2hseS1idWlsdCBvdXRib3VuZCBgcGFyYW1ldGVyYCBvYmplY3Qg4oCUIHJlYWRpbmcgcGFyYW1ldGVyLnZhbGlkYXRvclxuICAgICAgICAgICAgICAgICAgICAvLyBoZXJlIGFsd2F5cyBzYXcgdW5kZWZpbmVkLCBzbyByZXF1aXJlZC9udWxsYWJsZSBSUEMgcGFyYW1zIHdlcmUgbmV2ZXJcbiAgICAgICAgICAgICAgICAgICAgLy8gZW5mb3JjZWQgYW5kIHRoZSBjYWxsIGZpcmVkIHdpdGggYSBudWxsIHZhbHVlLlxuICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXJhbWV0ZXJDb25maWcudmFsaWRhdG9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgKChwYXJhbWV0ZXJDb25maWcudmFsaWRhdG9yLm51bGxhYmxlICYmICFVdGlscy5ldmFsdWF0ZUJvb2xlYW5FeHByZXNzaW9uKHBhcmFtZXRlckNvbmZpZy52YWxpZGF0b3IubnVsbGFibGUsIHBhcmFtZXRlci5uYW1lKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKFV0aWxzLmV2YWx1YXRlQm9vbGVhbkV4cHJlc3Npb24ocGFyYW1ldGVyQ29uZmlnLnZhbGlkYXRvci5yZXF1aXJlZCAmJiBVdGlscy5ldmFsdWF0ZUJvb2xlYW5FeHByZXNzaW9uKHBhcmFtZXRlckNvbmZpZy52YWxpZGF0b3IucmVxdWlyZWQsIHBhcmFtZXRlci5uYW1lKSkpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIHRoaXMuaXNQYXJhbVZhbHVlTnVsbChwYXJhbWV0ZXIudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yVHlwZTogJ0lOVkFMSURfUEFSQU1FVEVSJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbWV0ZXJDb25maWcuaHR0cFBhcmFtZXRlclR5cGUgPT09ICdIRUFERVInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXJhbWV0ZXIudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnMgPSB7fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnNbcGFyYW1ldGVyLm5hbWVdID0gcGFyYW1ldGVyLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcnBjUmVxdWVzdC5wYXJhbWV0ZXJzLnB1c2gocGFyYW1ldGVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5mZXRjaFdpdGhDdXN0b21Db25maWcoe1xuICAgICAgICAgICAgICAgIHZpZXdJZDogcmVxdWVzdC52aWV3SWQsXG4gICAgICAgICAgICAgICAgdXJsOiBsb2NhdGlvbiArIGFwcGxpY2F0aW9uTWFuYWdlci5nZXRDb250ZXh0Um9vdCgpICsgJy8nICsgbW9kdWxlICsgJy9hcGkvdjEvcnBjL2ludm9rZScsXG4gICAgICAgICAgICAgICAgc2VydmljZVR5cGU6IHJlcXVlc3Quc2VydmljZS50eXBlLFxuICAgICAgICAgICAgICAgIHNlY3VyZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgICAgICBib2R5OiBycGNSZXF1ZXN0LFxuICAgICAgICAgICAgICAgIHRyYWNrOiByZXF1ZXN0LnRyYWNrICE9PSBmYWxzZSxcbiAgICAgICAgICAgICAgICBjb250ZW50VHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgIGhlYWRlcnNcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0LnJldHVyblZhbHVlQmluZGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBhdGggPSBVdGlscy5nZXRQcm9wZXJ0eUNoYWluUGF0aChyZXF1ZXN0LnJldHVyblZhbHVlQmluZGluZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXRoLnZhbHVlT2JqZWN0KSAmJiAhVXRpbHMuaXNOdWxsKHBhdGgucHJvcGVydHkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC52YWx1ZU9iamVjdFtwYXRoLnByb3BlcnR5XSA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnByb2Nlc3NTdWNjZXNzZnVsUmVzcG9uc2VEYXRhKHJlcXVlc3QuY29tcG9uZW50LCByZXNwb25zZSwgcmVxdWVzdC52aWV3SWQsIHJlcXVlc3Quc3VjY2Vzc01lc3NhZ2UpKTtcbiAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIGZldGNoV2l0aEN1c3RvbUNvbmZpZyhyZXF1ZXN0KSB7XG4gICAgICAgIGNvbnN0IGFjY2Vzc1Rva2VuID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnYWNjZXNzVG9rZW4nKTtcbiAgICAgICAgY29uc3QgaWRUb2tlbiA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2lkVG9rZW4nKTtcblxuICAgICAgICBsZXQgZGF0YSA9IHJlcXVlc3QuYm9keSA/IChyZXF1ZXN0LmJvZHkgaW5zdGFuY2VvZiBGb3JtRGF0YSkgPyByZXF1ZXN0LmJvZHkgOiBKU09OLnN0cmluZ2lmeShyZXF1ZXN0LmJvZHkpIDogbnVsbDtcbiAgICAgICAgbGV0IGZldGNoQ29uZmlnID0gcmVxdWVzdC5jb25maWc7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGlmIChVdGlscy5pc051bGwoZmV0Y2hDb25maWcpKSB7XG4gICAgICAgICAgICAgICAgaWYgKFV0aWxzLmlzTnVsbChyZXF1ZXN0LnNlY3VyZSkgfHwgcmVxdWVzdC5zZWN1cmUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgZmV0Y2hDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IFV0aWxzLmlzTnVsbChyZXF1ZXN0Lm1ldGhvZCkgPyAnR0VUJyA6IHJlcXVlc3QubWV0aG9kLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnJlcXVlc3QuaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogcmVxdWVzdC5jb250ZW50VHlwZSA/IHJlcXVlc3QuY29udGVudFR5cGUgOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IGRhdGFcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgLy8gU2VjdXJlIGJ5IGRlZmF1bHQsIHByZXNlbmNlLWJhc2VkOiBhdHRhY2ggYXV0aCBPTkxZIHdoZW4gYVxuICAgICAgICAgICAgICAgICAgICAvLyBzZXNzaW9uIGV4aXN0cy4gUHJlLWF1dGggc2NyZWVucyAodmlldy9zZWN1cml0eS8qKSBjbGVhclxuICAgICAgICAgICAgICAgICAgICAvLyBzZXNzaW9uU3RvcmFnZSBvbiBtb3VudCwgc28gbm90aGluZyBpcyBhdHRhY2hlZCB0aGVyZSDigJQgYW5kXG4gICAgICAgICAgICAgICAgICAgIC8vIHdlIG5ldmVyIGVtaXQgJ0JlYXJlciBudWxsJyBvciBhIHN0YWxlIHRva2VuLlxuICAgICAgICAgICAgICAgICAgICBpZiAoYWNjZXNzVG9rZW4pIGZldGNoQ29uZmlnLmhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSA9ICdCZWFyZXIgJyArIGFjY2Vzc1Rva2VuO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaWRUb2tlbikgZmV0Y2hDb25maWcuaGVhZGVyc1snaWRUb2tlbiddID0gaWRUb2tlbjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmZXRjaENvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogVXRpbHMuaXNOdWxsKHJlcXVlc3QubWV0aG9kKSA/ICdHRVQnIDogcmVxdWVzdC5tZXRob2QsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucmVxdWVzdC5oZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiByZXF1ZXN0LmNvbnRlbnRUeXBlID8gcmVxdWVzdC5jb250ZW50VHlwZSA6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWNjZXB0JzogcmVxdWVzdC5hY2NlcHQgPyByZXF1ZXN0LmFjY2VwdCA6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHk6IGRhdGFcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoJ3Jlc3QnID09PSByZXF1ZXN0LnNlcnZpY2VUeXBlICYmICEocmVxdWVzdC5ib2R5IGluc3RhbmNlb2YgRm9ybURhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZldGNoQ29uZmlnLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gcmVxdWVzdC5jb250ZW50VHlwZSA/IHJlcXVlc3QuY29udGVudFR5cGUgOiAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKChyZXF1ZXN0LmJvZHkgaW5zdGFuY2VvZiBGb3JtRGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGZldGNoQ29uZmlnLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddO1xuICAgICAgICAgICAgICAgICAgICBmZXRjaENvbmZpZy5oZWFkZXJzWydBY2NlcHQnXSA9IHJlcXVlc3QuYWNjZXB0ID8gcmVxdWVzdC5hY2NlcHQgOiAnYXBwbGljYXRpb24vanNvbic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVxdWVzdC5jb250ZW50VHlwZSkge1xuICAgICAgICAgICAgICAgIGZldGNoQ29uZmlnLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gcmVxdWVzdC5jb250ZW50VHlwZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHVybCA9IHJlcXVlc3QudXJsO1xuICAgICAgICAgICAgaWYgKHJlcXVlc3QuZG93bmxvYWQpIHtcbiAgICAgICAgICAgICAgICBpZiAodXJsLmluZGV4T2YoJz8nKSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdXJsICs9ICc/JztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1cmwgKz0gJyYnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vdXJsICs9ICdhY2Nlc3NfdG9rZW49JyArIGFjY2Vzc1Rva2VuO1xuICAgICAgICAgICAgICAgIC8vdXJsICs9ICcmaWRUb2tlbj0nICsgaWRUb2tlbjtcbiAgICAgICAgICAgICAgICB1cmwgKz0gJyZ0aGVtZVByaW1hcnlDb2xvcj0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvblByaW1hcnlDb2xvcigpKTtcbiAgICAgICAgICAgICAgICB1cmwgKz0gJyZ0aGVtZVNlY29uZGFyeUNvbG9yPScgKyBlbmNvZGVVUklDb21wb25lbnQoYXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uU2Vjb25kYXJ5Q29sb3IoKSk7XG5cbiAgICAgICAgICAgICAgICBmZXRjaCh1cmwsIHtcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5yZXF1ZXN0LmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAnQXV0aG9yaXphdGlvbic6ICdCZWFyZXIgJyArIGFjY2Vzc1Rva2VuLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2lkVG9rZW4nOiBpZFRva2VuXG5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpLnRoZW4oZXJyb3JEYXRhID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciAke3Jlc3BvbnNlLnN0YXR1c306ICR7ZXJyb3JEYXRhLm1lc3NhZ2UgfHwgcmVzcG9uc2Uuc3RhdHVzVGV4dH1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbnRlbnREaXNwb3NpdGlvbiA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KFwiQ29udGVudC1EaXNwb3NpdGlvblwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmaWxlbmFtZSA9IFwiZG93bmxvYWRlZC1maWxlXCI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50RGlzcG9zaXRpb24gJiYgY29udGVudERpc3Bvc2l0aW9uLmluY2x1ZGVzKFwiZmlsZW5hbWU9XCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBjb250ZW50RGlzcG9zaXRpb24uc3BsaXQoXCJmaWxlbmFtZT1cIilbMV0udHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUucmVwbGFjZSgvW1wiJ10vZywgXCJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5ibG9iKCkudGhlbihibG9iID0+ICh7YmxvYiwgZmlsZW5hbWV9KSk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCh7YmxvYiwgZmlsZW5hbWV9KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYS5ocmVmID0gdXJsO1xuICAgICAgICAgICAgICAgICAgICAgICAgYS5kb3dubG9hZCA9IGZpbGVuYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGEuY2xpY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaChlcnJvciA9PiBjb25zb2xlLmVycm9yKFwiRG93bmxvYWQgZmFpbGVkOlwiLCBlcnJvcikpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHJlcXVlc3QudHJhY2spIHx8IHJlcXVlc3QudHJhY2sgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJhY2tQcm9taXNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leGVjdXRlRmV0Y2godXJsLCBmZXRjaENvbmZpZywgcmVxdWVzdC52aWV3SWQsIHJlcXVlc3Quc3VjY2Vzc01lc3NhZ2UpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5leGVjdXRlRmV0Y2godXJsLCBmZXRjaENvbmZpZywgcmVxdWVzdC52aWV3SWQsIHJlcXVlc3Quc3VjY2Vzc01lc3NhZ2UpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZXhlY3V0ZUZldGNoKHVybCwgZmV0Y2hDb25maWcsIHZpZXdJZCwgc3VjY2Vzc01lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGZldGNoKGVuY29kZVVSSSh1cmwpLCBmZXRjaENvbmZpZylcbiAgICAgICAgICAgICAgICAudGhlbihzdGF0dXMpXG4gICAgICAgICAgICAgICAgLnRoZW4oanNvbilcbiAgICAgICAgICAgICAgICAudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMucHJvY2Vzc1N1Y2Nlc3NmdWxSZXNwb25zZURhdGEobnVsbCwgZGF0YSwgdmlld0lkLCBzdWNjZXNzTWVzc2FnZSkpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlLnN0YXR1cyA9PT0gNDAxICYmICF1cmwuZW5kc1dpdGgoJy9sb2dvdXQnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25NYW5hZ2VyLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIubmF2aWdhdGUoJy9sb2dpbicpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIHByb2Nlc3NTdWNjZXNzZnVsUmVzcG9uc2VEYXRhKGNvbXBvbmVudCwgZGF0YSwgdmlld0lkLCBzdWNjZXNzTWVzc2FnZSkge1xuICAgICAgICBsZXQgcmVzcG9uc2U7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyB8fCBVdGlscy5pc051bGwoZGF0YSkgfHwgZGF0YS50b1N0cmluZygpXG4gICAgICAgICAgICAudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmVzcG9uc2UgPSBkYXRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgICAgICB9IGNhdGNoIChpZ25vcmVkKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBkYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmRhdGFUeXBlID09PSAnbWVzc2FnZScpIHtcbiAgICAgICAgICAgIGxldCBldmVudCA9IG5ldyBFdmVudChhcHBsaWNhdGlvbk1hbmFnZXIsIHZpZXdJZCwgcmVzcG9uc2UpO1xuICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChFdmVudFR5cGUuTUVTU0FHRV9BUlJJVkVELCBldmVudCk7XG5cbiAgICAgICAgICAgIGlmIChjb21wb25lbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBldmVudCA9IG5ldyBFdmVudChjb21wb25lbnQsIHZpZXdJZCwgcmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIGV2ZW50TWFuYWdlci5maXJlRXZlbnQoRXZlbnRUeXBlLk1FU1NBR0VfQVJSSVZFRCwgZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCFVdGlscy5pc051bGwoc3VjY2Vzc01lc3NhZ2UpKSB7XG4gICAgICAgICAgICBsZXQgbWVzc2FnZSA9IHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlVHlwZTogJ1NVQ0NFU1MnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGFwcGxpY2F0aW9uTWFuYWdlci5wb3B1bGF0ZVRlbXBsYXRlKHN1Y2Nlc3NNZXNzYWdlLCByZXNwb25zZSlcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGxldCBldmVudCA9IG5ldyBFdmVudChhcHBsaWNhdGlvbk1hbmFnZXIsIHZpZXdJZCwgbWVzc2FnZSk7XG4gICAgICAgICAgICBldmVudE1hbmFnZXIuZmlyZUV2ZW50KEV2ZW50VHlwZS5NRVNTQUdFX0FSUklWRUQsIGV2ZW50KTtcblxuICAgICAgICAgICAgaWYgKGNvbXBvbmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGV2ZW50ID0gbmV3IEV2ZW50KGNvbXBvbmVudCwgdmlld0lkLCBtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICBldmVudE1hbmFnZXIuZmlyZUV2ZW50KEV2ZW50VHlwZS5NRVNTQUdFX0FSUklWRUQsIGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG59XG5cbmNvbnN0IGluc3RhbmNlID0gbmV3IFJlc3RTZXJ2aWNlKCk7XG5cbmV4cG9ydCBjb25zdCBpbnZva2VScGMgPSAocmVxdWVzdCkgPT4ge1xuICAgIHJldHVybiBpbnN0YW5jZS5pbnZva2VScGMocmVxdWVzdCk7XG59O1xuXG5leHBvcnQgY29uc3QgaW52b2tlUmVzdCA9IChyZXF1ZXN0KSA9PiB7XG4gICAgcmV0dXJuIGluc3RhbmNlLmludm9rZVJlc3QocmVxdWVzdCk7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQyxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDRCxJQUFBQyxvQkFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsbUJBQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLE1BQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLFdBQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFLLFVBQUEsR0FBQU4sc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFNLFVBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLFVBQUEsR0FBQVAsT0FBQTtBQUE0RCxTQUFBRCx1QkFBQVMsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQUFBLFNBQUFHLFFBQUFILENBQUEsRUFBQUksQ0FBQSxRQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsSUFBQSxDQUFBUCxDQUFBLE9BQUFNLE1BQUEsQ0FBQUUscUJBQUEsUUFBQUMsQ0FBQSxHQUFBSCxNQUFBLENBQUFFLHFCQUFBLENBQUFSLENBQUEsR0FBQUksQ0FBQSxLQUFBSyxDQUFBLEdBQUFBLENBQUEsQ0FBQUMsTUFBQSxXQUFBTixDQUFBLFdBQUFFLE1BQUEsQ0FBQUssd0JBQUEsQ0FBQVgsQ0FBQSxFQUFBSSxDQUFBLEVBQUFRLFVBQUEsT0FBQVAsQ0FBQSxDQUFBUSxJQUFBLENBQUFDLEtBQUEsQ0FBQVQsQ0FBQSxFQUFBSSxDQUFBLFlBQUFKLENBQUE7QUFBQSxTQUFBVSxjQUFBZixDQUFBLGFBQUFJLENBQUEsTUFBQUEsQ0FBQSxHQUFBWSxTQUFBLENBQUFDLE1BQUEsRUFBQWIsQ0FBQSxVQUFBQyxD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
package/dist/RestUtils.js CHANGED
@@ -244,12 +244,15 @@ class RestUtils {
244
244
  fetchConfig = {
245
245
  method: _Utils.default.isNull(method) ? 'GET' : method,
246
246
  headers: {
247
- 'Content-Type': 'application/x-www-form-urlencoded',
248
- 'Authorization': 'Bearer ' + accessToken,
249
- 'idToken': idToken
247
+ 'Content-Type': 'application/x-www-form-urlencoded'
250
248
  },
251
249
  body: data
252
250
  };
251
+ // Secure by default, presence-based: attach auth ONLY when a
252
+ // session exists — never 'Bearer null' or a stale token. Pre-auth
253
+ // screens (view/security/*) clear sessionStorage on mount.
254
+ if (accessToken) fetchConfig.headers['Authorization'] = 'Bearer ' + accessToken;
255
+ if (idToken) fetchConfig.headers['idToken'] = idToken;
253
256
  } else {
254
257
  fetchConfig = {
255
258
  method: _Utils.default.isNull(method) ? 'GET' : method,
@@ -402,4 +405,4 @@ const invokeRest = function (serviceConfig, component, viewId, successCallback,
402
405
  instance.invokeRest(serviceConfig, component, viewId, successCallback, errorCallback, invalidParamCallback, returnValueBinding, successMessage, event);
403
406
  };
404
407
  exports.invokeRest = invokeRest;
405
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfVXRpbHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdFByb21pc2VUcmFja2VyIiwiX0FwcGxpY2F0aW9uTWFuYWdlciIsIl9FdmVudCIsIl9PYnNlcnZhYmxlIiwiX0V2ZW50VHlwZSIsIl9wcm9wVHlwZXMiLCJfSGVhZGVyIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwibG9jYXRpb24iLCJleHBvcnRzIiwid2luZG93IiwicHJvdG9jb2wiLCJob3N0bmFtZSIsInN0YXR1cyIsInJlc3BvbnNlIiwib2siLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImpzb24iLCJ0ZXh0IiwiUmVzdFV0aWxzIiwiaXNQYXJhbVZhbHVlTnVsbCIsInBhcmFtVmFsdWUiLCJVdGlscyIsImlzTnVsbCIsImhhc093blByb3BlcnR5IiwidmFsdWUiLCJpbnZva2VSZXN0Iiwic2VydmljZSIsImNvbXBvbmVudCIsInZpZXdJZCIsInN1Y2Nlc3NDYWxsYmFjayIsImVycm9yQ2FsbGJhY2siLCJpbnZhbGlkUGFyYW1DYWxsYmFjayIsInJldHVyblZhbHVlQmluZGluZyIsInN1Y2Nlc3NNZXNzYWdlIiwiZXZlbnQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJ1cmwiLCJzdGFydHNXaXRoIiwiY29uY2F0IiwiYXBwbGljYXRpb25NYW5hZ2VyIiwiZ2V0Q29udGV4dFJvb3QiLCJyZXF1ZXN0Qm9keSIsImhlYWRlcnMiLCJwYXJhbWV0ZXJzIiwicXVlcnlTdHJpbmciLCJwYXRoUGFyYW1ldGVycyIsInJlcXVlc3RCb2R5UGFyYW1Gb3VuZCIsInBhcmFtZXRlciIsInBhcmFtZXRlclZhbHVlIiwicmVzb2x2ZVBhcmFtZXRlclZhbHVlIiwiZGF0YSIsInZhbGlkYXRvciIsImV2YWx1YXRlQm9vbGVhbkV4cHJlc3Npb24iLCJudWxsYWJsZSIsIm5hbWUiLCJjb25zb2xlIiwiZXJyb3IiLCJodHRwUGFyYW1ldGVyVHlwZSIsImluY2x1ZGVQYXJhbWV0ZXJUeXBlcyIsInR5cGUiLCJKU09OIiwic3RyaW5naWZ5IiwicmVzb2x2ZWRWYWx1ZSIsImVuY29kZSIsImVuY29kZVVSSUNvbXBvbmVudCIsImluc3RhbmNlVHlwZSIsImluZGV4T2YiLCJyZXBsYWNlIiwiY29udGVudFR5cGUiLCJtZXRob2QiLCJFcnJvciIsImxvZyIsInBvc3REYXRhIiwicHJvY2Vzc1N1Y2Nlc3NmdWxSZXNwb25zZURhdGEiLCJwYXRoIiwiZ2V0UHJvcGVydHlDaGFpblBhdGgiLCJ2YWx1ZU9iamVjdCIsInByb3BlcnR5IiwiZmlyZUV2ZW50IiwiRXZlbnRUeXBlIiwiU0VSVklDRV9DQUxMX1NVQ0NFU1MiLCJTRVJWSUNFX0NBTExfRkFJTFVSRSIsImRvd25sb2FkIiwic2VuZFJlcXVlc3QiLCJpbnZva2VScGMiLCJycGNEZXRhaWxzIiwicmVxdWVzdCIsImlkIiwic3BsaXQiLCJzZXJ2aWNlSWQiLCJwcm9jZWR1cmVOYW1lIiwiY29uZmlnIiwibW9kdWxlIiwidG9Mb3dlckNhc2UiLCJpIiwicGFyYW1ldGVyQ29uZmlnIiwiaW5kZXgiLCJ2YWwiLCJwdXNoIiwiZG9GZXRjaCIsIndhcm4iLCJkb1Bvc3REYXRhIiwic2VjdXJlIiwiZmV0Y2hXaXRoQ3VzdG9tQ29uZmlnIiwiYm9keSIsInRyYWNrIiwic2VydmljZVR5cGUiLCJhY2Nlc3NUb2tlbiIsInNlc3Npb25TdG9yYWdlIiwiZ2V0SXRlbSIsImlkVG9rZW4iLCJGb3JtRGF0YSIsImZldGNoQ29uZmlnIiwiZ2V0QXBwbGljYXRpb25QcmltYXJ5Q29sb3IiLCJnZXRBcHBsaWNhdGlvblNlY29uZGFyeUNvbG9yIiwib3BlbiIsImVuY29kZVVSSSIsInRyYWNrUHJvbWlzZSIsImV4ZWN1dGVGZXRjaCIsImZldGNoIiwidGhlbiIsImNhdGNoIiwiZW5kc1dpdGgiLCJjbGVhciIsIm5hdmlnYXRlIiwidG9TdHJpbmciLCJ0cmltIiwicGFyc2UiLCJpZ25vcmVkIiwiZGF0YVR5cGUiLCJFdmVudCIsImV2ZW50TWFuYWdlciIsIk1FU1NBR0VfQVJSSVZFRCIsIm1lc3NhZ2UiLCJtZXNzYWdlVHlwZSIsInBvcHVsYXRlVGVtcGxhdGUiLCJldmVudFR5cGUiLCJpbnN0YW5jZSIsIlVJX0FTU0VUX1VSTF9QQVRURVJOIiwid3JhcERlY29kZUlmVWlBc3NldCIsIm9wTGFiZWwiLCJ0ZXN0IiwicmF3IiwiZGVjb2RlZCIsIm1heWJlRGVjb2RlV2lyZSIsInNlcnZpY2VDb25maWciXSwic291cmNlcyI6WyIuLi9zcmMvbGliL1Jlc3RVdGlscy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyLvu79pbXBvcnQgVXRpbHMgZnJvbSAnLi9VdGlscyc7XG5pbXBvcnQge3RyYWNrUHJvbWlzZX0gZnJvbSAncmVhY3QtcHJvbWlzZS10cmFja2VyJztcbmltcG9ydCBhcHBsaWNhdGlvbk1hbmFnZXIgZnJvbSAnLi9BcHBsaWNhdGlvbk1hbmFnZXInO1xuaW1wb3J0IEV2ZW50IGZyb20gJy4vZXZlbnQvRXZlbnQnO1xuaW1wb3J0IGV2ZW50TWFuYWdlciBmcm9tICcuL2V2ZW50L09ic2VydmFibGUnO1xuaW1wb3J0IEV2ZW50VHlwZSBmcm9tICcuL2V2ZW50L0V2ZW50VHlwZSc7XG5pbXBvcnQge2luc3RhbmNlT2Z9IGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgaGVhZGVyIGZyb20gXCIuL2NvbXBvbmVudHMvZGFzaGJvYXJkL2NvbXBvbmVudHMvSGVhZGVyXCI7XG5cbmV4cG9ydCBjb25zdCBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWU7XG5jb25zdCBzdGF0dXMgPSAocmVzcG9uc2UpID0+IHtcbiAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXNwb25zZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlc3BvbnNlKTtcbiAgICB9XG59O1xuXG5jb25zdCBqc29uID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKTtcbn07XG5cbmNsYXNzIFJlc3RVdGlscyB7XG4gICAgaXNQYXJhbVZhbHVlTnVsbChwYXJhbVZhbHVlKSB7XG4gICAgICAgIGlmIChVdGlscy5pc051bGwocGFyYW1WYWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBhcmFtVmFsdWUuaGFzT3duUHJvcGVydHkoJ3ZhbHVlJykgPyBVdGlscy5pc051bGwocGFyYW1WYWx1ZS52YWx1ZSkgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBpbnZva2VSZXN0KHNlcnZpY2UsIGNvbXBvbmVudCwgdmlld0lkLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIGludmFsaWRQYXJhbUNhbGxiYWNrLCByZXR1cm5WYWx1ZUJpbmRpbmcsIHN1Y2Nlc3NNZXNzYWdlLCBldmVudCA9IG51bGwpIHtcbiAgICAgICAgbGV0IHVybCA9IHNlcnZpY2UudXJsLnN0YXJ0c1dpdGgoJ2h0dHA6Ly8nKSB8fCBzZXJ2aWNlLnVybC5zdGFydHNXaXRoKCdodHRwczovLycpID8gc2VydmljZS51cmwgOiBsb2NhdGlvbiArIGAke2FwcGxpY2F0aW9uTWFuYWdlci5nZXRDb250ZXh0Um9vdCgpICsgc2VydmljZS51cmx9YDtcbiAgICAgICAgbGV0IHJlcXVlc3RCb2R5ID0gbnVsbDtcbiAgICAgICAgbGV0IGhlYWRlcnMgPSBzZXJ2aWNlLmhlYWRlcnM7XG5cbiAgICAgICAgaWYgKCFVdGlscy5pc051bGwoc2VydmljZS5wYXJhbWV0ZXJzKSkge1xuICAgICAgICAgICAgbGV0IHF1ZXJ5U3RyaW5nID0gJyc7XG4gICAgICAgICAgICBsZXQgcGF0aFBhcmFtZXRlcnMgPSAnJztcbiAgICAgICAgICAgIGxldCByZXF1ZXN0Qm9keVBhcmFtRm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGFyYW1ldGVyIG9mIHNlcnZpY2UucGFyYW1ldGVycykge1xuICAgICAgICAgICAgICAgIGxldCBwYXJhbWV0ZXJWYWx1ZSA9IGFwcGxpY2F0aW9uTWFuYWdlci5yZXNvbHZlUGFyYW1ldGVyVmFsdWUocGFyYW1ldGVyLCBldmVudCA/IGV2ZW50LmRhdGEgOiBudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXJhbWV0ZXIudmFsaWRhdG9yKVxuICAgICAgICAgICAgICAgICAgICAmJiAhVXRpbHMuZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihwYXJhbWV0ZXIudmFsaWRhdG9yLm51bGxhYmxlLCBwYXJhbWV0ZXIubmFtZSlcbiAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5pc1BhcmFtVmFsdWVOdWxsKHBhcmFtZXRlclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChpbnZhbGlkUGFyYW1DYWxsYmFjaykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0lOVkFMSUQgUEFSQU1FVEVSIDogJywgcGFyYW1ldGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGludmFsaWRQYXJhbUNhbGxiYWNrKHBhcmFtZXRlcik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IGh0dHBQYXJhbWV0ZXJUeXBlID0gcGFyYW1ldGVyLmh0dHBQYXJhbWV0ZXJUeXBlO1xuICAgICAgICAgICAgICAgIGlmIChVdGlscy5pc051bGwoaHR0cFBhcmFtZXRlclR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGh0dHBQYXJhbWV0ZXJUeXBlID0gJ1FVRVJZX1BBUkFNRVRFUic7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGh0dHBQYXJhbWV0ZXJUeXBlID09PSAnUVVFUllfUEFSQU1FVEVSJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXJhbWV0ZXJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxdWVyeVN0cmluZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlTdHJpbmcgKz0gJyYnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChzZXJ2aWNlLmluY2x1ZGVQYXJhbWV0ZXJUeXBlcykgJiYgc2VydmljZS5pbmNsdWRlUGFyYW1ldGVyVHlwZXMgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVN0cmluZyArPSBwYXJhbWV0ZXJWYWx1ZS50eXBlICsgJzonO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1ldGVyVmFsdWUudHlwZSA9PT0gJ01hcE9iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJWYWx1ZS52YWx1ZS50eXBlID0gJ01hcEVudGl0eUR0byc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9IHBhcmFtZXRlci5uYW1lICsgJz0nO1xuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlTdHJpbmcgKz0gKHR5cGVvZiBwYXJhbWV0ZXJWYWx1ZS52YWx1ZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHBhcmFtZXRlclZhbHVlLnZhbHVlID09PSAnbnVtYmVyJyA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyVmFsdWUudmFsdWUgOiBKU09OLnN0cmluZ2lmeShwYXJhbWV0ZXJWYWx1ZS52YWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGh0dHBQYXJhbWV0ZXJUeXBlID09PSAnUEFUSF9WQVJJQUJMRScpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyYW1ldGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzb2x2ZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbWV0ZXIuZW5jb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRWYWx1ZSA9IHR5cGVvZiBwYXJhbWV0ZXJWYWx1ZS52YWx1ZSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkocGFyYW1ldGVyVmFsdWUudmFsdWUpKSA6IHBhcmFtZXRlclZhbHVlLmluc3RhbmNlVHlwZSA9PT0gJ1R5cGVkVmFsdWUnID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChwYXJhbWV0ZXJWYWx1ZS52YWx1ZSkgOiBlbmNvZGVVUklDb21wb25lbnQocGFyYW1ldGVyVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlZFZhbHVlID0gdHlwZW9mIHBhcmFtZXRlclZhbHVlLnZhbHVlID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IEpTT04uc3RyaW5naWZ5KHBhcmFtZXRlclZhbHVlLnZhbHVlKSA6IHBhcmFtZXRlclZhbHVlLmluc3RhbmNlVHlwZSA9PT0gJ1R5cGVkVmFsdWUnID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlclZhbHVlLnZhbHVlIDogcGFyYW1ldGVyVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwYXJhbWV0ZXIgaGFzIGEgbmFtZSBhbmQgdGhlIFVSTCBjb250YWlucyB7bmFtZX0sIHJlcGxhY2UgdGhlIHBsYWNlaG9sZGVyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXJhbWV0ZXIubmFtZSkgJiYgdXJsLmluZGV4T2YoJ3snICsgcGFyYW1ldGVyLm5hbWUgKyAnfScpID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSB1cmwucmVwbGFjZSgneycgKyBwYXJhbWV0ZXIubmFtZSArICd9JywgcmVzb2x2ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJhY2t3YXJkIGNvbXBhdGliaWxpdHk6IGFwcGVuZCB0byBlbmQgb2YgVVJMXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aFBhcmFtZXRlcnMgKz0gJy8nICsgcmVzb2x2ZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChodHRwUGFyYW1ldGVyVHlwZSA9PT0gJ0hFQURFUicpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyYW1ldGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhlYWRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzID0ge31cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyc1twYXJhbWV0ZXIubmFtZV0gPSBwYXJhbWV0ZXJWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChodHRwUGFyYW1ldGVyVHlwZSA9PT0gJ1JFUVVFU1RfQk9EWScpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RCb2R5UGFyYW1Gb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignT25seSBvbmUgcmVxdWVzdCBib2R5IGlzIHBlcm1pdHRlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzUGFyYW1WYWx1ZU51bGwocGFyYW1ldGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEJvZHkgPSBwYXJhbWV0ZXJWYWx1ZS5pbnN0YW5jZVR5cGUgPT09ICdUeXBlZFZhbHVlJyA/IHBhcmFtZXRlclZhbHVlLnZhbHVlIDogcGFyYW1ldGVyVmFsdWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1ldGVyVmFsdWUudHlwZSA9PT0gJ01hcE9iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEJvZHkudHlwZSA9ICdNYXBFbnRpdHlEdG8nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVxdWVzdEJvZHkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Qm9keS50eXBlID0gcGFyYW1ldGVyVmFsdWUudHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHBhdGhQYXJhbWV0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB1cmwgKz0gcGF0aFBhcmFtZXRlcnM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChxdWVyeVN0cmluZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JztcbiAgICAgICAgICAgICAgICB1cmwgKz0gcXVlcnlTdHJpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY29udGVudFR5cGUgPSBudWxsO1xuXG4gICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGhlYWRlcnMpKSB7XG4gICAgICAgICAgICBjb250ZW50VHlwZSA9IGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlcXVlc3RCb2R5ICE9PSBudWxsICYmIHNlcnZpY2UubWV0aG9kID09PSAnR0VUJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBIHJlcXVlc3QgYm9keSBwYXJhbWV0ZXIgY2Fubm90IGJlIHNwZWNpZmllZCBmb3IgYSBHRVQgcmVxdWVzdCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlcXVlc3RCb2R5ICE9PSBudWxsIHx8IHNlcnZpY2UubWV0aG9kID09PSAnUE9TVCcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUE9TVElORyBSRVNUIFJFUVVFU1QgQk9EWSA6IFwiLCByZXF1ZXN0Qm9keSk7XG4gICAgICAgICAgICBwb3N0RGF0YSh1cmwsIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N1Y2Nlc3NmdWxSZXNwb25zZURhdGEoY29tcG9uZW50LCByZXNwb25zZSwgc3VjY2Vzc0NhbGxiYWNrLCB2aWV3SWQsIHN1Y2Nlc3NNZXNzYWdlKTtcblxuICAgICAgICAgICAgICAgIGxldCBwYXRoID0gVXRpbHMuZ2V0UHJvcGVydHlDaGFpblBhdGgocmV0dXJuVmFsdWVCaW5kaW5nKTtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXRoLnZhbHVlT2JqZWN0KSAmJiAhVXRpbHMuaXNOdWxsKHBhdGgucHJvcGVydHkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhdGgudmFsdWVPYmplY3RbcGF0aC5wcm9wZXJ0eV0gPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmZpcmVFdmVudCh2aWV3SWQsIGNvbXBvbmVudCwgRXZlbnRUeXBlLlNFUlZJQ0VfQ0FMTF9TVUNDRVNTLCByZXNwb25zZSk7XG4gICAgICAgICAgICB9LCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGVycm9yQ2FsbGJhY2spKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yQ2FsbGJhY2soZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5maXJlRXZlbnQodmlld0lkLCBjb21wb25lbnQsIEV2ZW50VHlwZS5TRVJWSUNFX0NBTExfRkFJTFVSRSk7XG4gICAgICAgICAgICB9LCAhc2VydmljZS51cmwuc3RhcnRzV2l0aCgnaHR0cDovLycpLCByZXF1ZXN0Qm9keSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udGVudFR5cGUgPT09ICdhcHBsaWNhdGlvbi9wZGYnIHx8IGNvbnRlbnRUeXBlID09PSAnYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsJykge1xuICAgICAgICAgICAgZG93bmxvYWQodXJsLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgfSwgKGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChlcnJvckNhbGxiYWNrKSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvckNhbGxiYWNrKGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VuZFJlcXVlc3QodXJsLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N1Y2Nlc3NmdWxSZXNwb25zZURhdGEoY29tcG9uZW50LCBkYXRhLCBzdWNjZXNzQ2FsbGJhY2ssIHZpZXdJZCwgc3VjY2Vzc01lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIGxldCBwYXRoID0gVXRpbHMuZ2V0UHJvcGVydHlDaGFpblBhdGgocmV0dXJuVmFsdWVCaW5kaW5nKTtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXRoLnZhbHVlT2JqZWN0KSAmJiAhVXRpbHMuaXNOdWxsKHBhdGgucHJvcGVydHkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhdGgudmFsdWVPYmplY3RbcGF0aC5wcm9wZXJ0eV0gPSBkYXRhO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuZmlyZUV2ZW50KHZpZXdJZCwgY29tcG9uZW50LCBFdmVudFR5cGUuU0VSVklDRV9DQUxMX1NVQ0NFU1MsIGRhdGEpO1xuICAgICAgICAgICAgfSwgKGUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmVFdmVudCh2aWV3SWQsIGNvbXBvbmVudCwgRXZlbnRUeXBlLlNFUlZJQ0VfQ0FMTF9GQUlMVVJFKTtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChlcnJvckNhbGxiYWNrKSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvckNhbGxiYWNrKGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sICFzZXJ2aWNlLnVybC5zdGFydHNXaXRoKCdodHRwOi8vJykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW52b2tlUnBjKHJwY0RldGFpbHMsIGNvbXBvbmVudCwgdmlld0lkLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIGludmFsaWRQYXJhbUNhbGxiYWNrLCByZXR1cm5WYWx1ZUJpbmRpbmcsIHN1Y2Nlc3NNZXNzYWdlLCBldmVudCA9IG51bGwpIHtcbiAgICAgICAgbGV0IHJlcXVlc3QgPSB7fTtcbiAgICAgICAgcmVxdWVzdC5pZCA9IHZpZXdJZDtcblxuICAgICAgICBsZXQgc3BsaXQgPSBycGNEZXRhaWxzLnNlcnZpY2VJZC5zcGxpdCgnLicpO1xuICAgICAgICByZXF1ZXN0LnNlcnZpY2UgPSBzcGxpdFsxXTtcbiAgICAgICAgcmVxdWVzdC5tZXRob2QgPSBycGNEZXRhaWxzLnByb2NlZHVyZU5hbWU7XG5cbiAgICAgICAgbGV0IGNvbmZpZyA9IHt9O1xuICAgICAgICBjb25maWcuaGVhZGVycyA9IHt9O1xuICAgICAgICBsZXQgbW9kdWxlID0gc3BsaXRbMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCFVdGlscy5pc051bGwocnBjRGV0YWlscy5wYXJhbWV0ZXJzKSAmJiBycGNEZXRhaWxzLnBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmVxdWVzdC5wYXJhbWV0ZXJzID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJwY0RldGFpbHMucGFyYW1ldGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBwYXJhbWV0ZXJDb25maWcgPSBycGNEZXRhaWxzLnBhcmFtZXRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHBhcmFtZXRlciA9IHt9O1xuICAgICAgICAgICAgICAgIHBhcmFtZXRlci5uYW1lID0gcGFyYW1ldGVyQ29uZmlnLm5hbWU7XG4gICAgICAgICAgICAgICAgcGFyYW1ldGVyLmluZGV4ID0gcGFyYW1ldGVyQ29uZmlnLmluZGV4O1xuXG4gICAgICAgICAgICAgICAgbGV0IHZhbCA9IGFwcGxpY2F0aW9uTWFuYWdlci5yZXNvbHZlUGFyYW1ldGVyVmFsdWUocGFyYW1ldGVyQ29uZmlnLCBldmVudCA/IGV2ZW50LmRhdGEgOiBudWxsKTtcblxuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyLnZhbHVlID0gdmFsLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIudHlwZSA9IHZhbC50eXBlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW1ldGVyLnZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIudmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChVdGlscy5pc051bGwocGFyYW1ldGVyLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlci50eXBlID0gJ1N0cmluZyc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyYW1ldGVyQ29uZmlnLnZhbGlkYXRvcilcbiAgICAgICAgICAgICAgICAgICAgJiYgVXRpbHMuZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihwYXJhbWV0ZXJDb25maWcudmFsaWRhdG9yLm51bGxhYmxlLCBwYXJhbWV0ZXJDb25maWcubmFtZSkgPT09IGZhbHNlICYmIHRoaXMuaXNQYXJhbVZhbHVlTnVsbChwYXJhbWV0ZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGludmFsaWRQYXJhbUNhbGxiYWNrKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignSU5WQUxJRCBQQVJBTUVURVIgOiAnLCBwYXJhbWV0ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZFBhcmFtQ2FsbGJhY2socGFyYW1ldGVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXF1ZXN0LnBhcmFtZXRlcnMucHVzaChwYXJhbWV0ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kb0ZldGNoKGxvY2F0aW9uICsgYXBwbGljYXRpb25NYW5hZ2VyLmdldENvbnRleHRSb290KCkgKyAnLycgKyBtb2R1bGUgKyAnL2FwaS92MS9ycGMvaW52b2tlJyxcbiAgICAgICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHZpZXdJZCkgJiYgIVV0aWxzLmlzTnVsbChjb21wb25lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyZUV2ZW50KHZpZXdJZCwgY29tcG9uZW50LCBFdmVudFR5cGUuU0VSVklDRV9DQUxMX1NVQ0NFU1MsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXCJObyB2aWV3IGlkIG9yIGNvbXBvbmVudCBzcGVjaWZpZWQgd2hpbGUgZXhlY3V0aW5nIFtcIiArIG1vZHVsZSArIFwiXSBycGMgOiBcIiwgcnBjRGV0YWlscyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHJldHVyblZhbHVlQmluZGluZykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcGF0aCA9IFV0aWxzLmdldFByb3BlcnR5Q2hhaW5QYXRoKHJldHVyblZhbHVlQmluZGluZyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHBhdGgudmFsdWVPYmplY3QpICYmICFVdGlscy5pc051bGwocGF0aC5wcm9wZXJ0eSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgudmFsdWVPYmplY3RbcGF0aC5wcm9wZXJ0eV0gPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzQ2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnJvckNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yQ2FsbGJhY2soZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwodmlld0lkKSAmJiAhVXRpbHMuaXNOdWxsKGNvbXBvbmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlRXZlbnQodmlld0lkLCBjb21wb25lbnQsIEV2ZW50VHlwZS5TRVJWSUNFX0NBTExfRkFJTFVSRSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgdHJ1ZSwgJ1BPU1QnLCBmYWxzZSwgcmVxdWVzdCwgdmlld0lkLCBzdWNjZXNzTWVzc2FnZSwgdHJ1ZSwgJ2FwcGxpY2F0aW9uL2pzb24nLCBjb25maWcpO1xuICAgIH1cblxuICAgIGRvUG9zdERhdGEodXJsLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHNlY3VyZSwgZGF0YSwgdmlld0lkLCBzdWNjZXNzTWVzc2FnZSkge1xuICAgICAgICB0aGlzLmZldGNoV2l0aEN1c3RvbUNvbmZpZyh1cmwsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgc2VjdXJlLCBudWxsLCAnUE9TVCcsIGZhbHNlLCBkYXRhLCAncmVzdCcpO1xuICAgIH1cblxuICAgIGRvRmV0Y2godXJsLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHNlY3VyZSwgbWV0aG9kLCBkb3dubG9hZCwgYm9keSwgdmlld0lkLCBzdWNjZXNzTWVzc2FnZSwgdHJhY2ssIGNvbnRlbnRUeXBlID0gbnVsbCwgY29uZmlnID0gbnVsbCkge1xuICAgICAgICB0aGlzLmZldGNoV2l0aEN1c3RvbUNvbmZpZyh1cmwsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgc2VjdXJlLCBjb25maWcsIG1ldGhvZCwgZG93bmxvYWQsXG4gICAgICAgICAgICBib2R5LCBudWxsLCB2aWV3SWQsIHN1Y2Nlc3NNZXNzYWdlLCB0cmFjaywgY29udGVudFR5cGUpO1xuICAgIH1cblxuICAgIGZldGNoV2l0aEN1c3RvbUNvbmZpZyh1cmwsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgc2VjdXJlLCBjb25maWcsIG1ldGhvZCwgZG93bmxvYWQsIGJvZHksIHNlcnZpY2VUeXBlLCB2aWV3SWQsIHN1Y2Nlc3NNZXNzYWdlLCB0cmFjaywgY29udGVudFR5cGUpIHtcbiAgICAgICAgY29uc3QgYWNjZXNzVG9rZW4gPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdhY2Nlc3NUb2tlbicpO1xuICAgICAgICBjb25zdCBpZFRva2VuID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnaWRUb2tlbicpO1xuXG4gICAgICAgIGxldCBkYXRhID0gYm9keSA/IChib2R5IGluc3RhbmNlb2YgRm9ybURhdGEpID8gYm9keSA6IEpTT04uc3RyaW5naWZ5KGJvZHkpIDogbnVsbDtcbiAgICAgICAgbGV0IGZldGNoQ29uZmlnID0gY29uZmlnO1xuXG4gICAgICAgIGlmIChVdGlscy5pc051bGwoZmV0Y2hDb25maWcpKSB7XG4gICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHNlY3VyZSkgfHwgc2VjdXJlID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgZmV0Y2hDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogVXRpbHMuaXNOdWxsKG1ldGhvZCkgPyAnR0VUJyA6IG1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0F1dGhvcml6YXRpb24nOiAnQmVhcmVyICcgKyBhY2Nlc3NUb2tlbixcbiAgICAgICAgICAgICAgICAgICAgICAgICdpZFRva2VuJzogaWRUb2tlblxuXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IGRhdGFcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmZXRjaENvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBVdGlscy5pc051bGwobWV0aG9kKSA/ICdHRVQnIDogbWV0aG9kLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBib2R5OiBkYXRhXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCdyZXN0JyA9PT0gc2VydmljZVR5cGUgJiYgIShib2R5IGluc3RhbmNlb2YgRm9ybURhdGEpKSB7XG4gICAgICAgICAgICAgICAgZmV0Y2hDb25maWcuaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICgoYm9keSBpbnN0YW5jZW9mIEZvcm1EYXRhKSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBmZXRjaENvbmZpZy5oZWFkZXJzWydDb250ZW50LVR5cGUnXTtcbiAgICAgICAgICAgICAgICBmZXRjaENvbmZpZy5oZWFkZXJzWydBY2NlcHQnXSA9ICdhcHBsaWNhdGlvbi9qc29uJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb250ZW50VHlwZSkge1xuICAgICAgICAgICAgZmV0Y2hDb25maWcuaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSBjb250ZW50VHlwZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkb3dubG9hZCkge1xuICAgICAgICAgICAgaWYgKHVybC5pbmRleE9mKCc/JykgPCAwKSB7XG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdXJsICs9ICcmJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdXJsICs9ICdhY2Nlc3NfdG9rZW49JyArIGFjY2Vzc1Rva2VuO1xuICAgICAgICAgICAgdXJsICs9ICcmaWRUb2tlbj0nICsgaWRUb2tlbjtcbiAgICAgICAgICAgIHVybCArPSAnJnRoZW1lUHJpbWFyeUNvbG9yPScgKyBlbmNvZGVVUklDb21wb25lbnQoYXBwbGljYXRpb25NYW5hZ2VyLmdldEFwcGxpY2F0aW9uUHJpbWFyeUNvbG9yKCkpO1xuICAgICAgICAgICAgdXJsICs9ICcmdGhlbWVTZWNvbmRhcnlDb2xvcj0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvblNlY29uZGFyeUNvbG9yKCkpO1xuXG4gICAgICAgICAgICB3aW5kb3cub3BlbihlbmNvZGVVUkkodXJsKSwgJ19ibGFuaycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKFV0aWxzLmlzTnVsbCh0cmFjaykgfHwgdHJhY2sgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICB0cmFja1Byb21pc2UoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhlY3V0ZUZldGNoKHVybCwgZmV0Y2hDb25maWcsIHN1Y2Nlc3NDYWxsYmFjaywgdmlld0lkLCBzdWNjZXNzTWVzc2FnZSwgZXJyb3JDYWxsYmFjaylcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4ZWN1dGVGZXRjaCh1cmwsIGZldGNoQ29uZmlnLCBzdWNjZXNzQ2FsbGJhY2ssIHZpZXdJZCwgc3VjY2Vzc01lc3NhZ2UsIGVycm9yQ2FsbGJhY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhlY3V0ZUZldGNoKHVybCwgZmV0Y2hDb25maWcsIHN1Y2Nlc3NDYWxsYmFjaywgdmlld0lkLCBzdWNjZXNzTWVzc2FnZSwgZXJyb3JDYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gZmV0Y2goZW5jb2RlVVJJKHVybCksIGZldGNoQ29uZmlnKVxuICAgICAgICAgICAgLnRoZW4oc3RhdHVzKVxuICAgICAgICAgICAgLnRoZW4oanNvbilcbiAgICAgICAgICAgIC50aGVuKChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3VjY2Vzc2Z1bFJlc3BvbnNlRGF0YShudWxsLCBkYXRhLCBzdWNjZXNzQ2FsbGJhY2ssIHZpZXdJZCwgc3VjY2Vzc01lc3NhZ2UpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRVJST1IgRkVUQ0hJTkcgRlJPTSBVUkwgW1wiICsgdXJsICsgXCJdXCIpO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICAgICAgaWYoZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZS5zdGF0dXMgPT09IDQwMSAmJiAhdXJsLmVuZHNXaXRoKCcvbG9nb3V0JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yQ2FsbGJhY2soZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uTWFuYWdlci5uYXZpZ2F0ZSgnL2xvZ2luJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3JDYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JDYWxsYmFjayhlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb2Nlc3NTdWNjZXNzZnVsUmVzcG9uc2VEYXRhKGNvbXBvbmVudCwgZGF0YSwgc3VjY2Vzc0NhbGxiYWNrLCB2aWV3SWQsIHN1Y2Nlc3NNZXNzYWdlKSB7XG4gICAgICAgIGxldCByZXNwb25zZTtcblxuICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChkYXRhKSAmJiBkYXRhLnRvU3RyaW5nKClcbiAgICAgICAgICAgIC50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXNwb25zZSA9IG51bGw7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGRhdGEgPT09ICdvYmplY3QnIHx8IFV0aWxzLmlzTnVsbChkYXRhKSB8fCBkYXRhLnRvU3RyaW5nKClcbiAgICAgICAgICAgIC50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXNwb25zZSA9IGRhdGE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGlnbm9yZWQpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IGRhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UuZGF0YVR5cGUgPT09ICdtZXNzYWdlJykge1xuICAgICAgICAgICAgbGV0IGV2ZW50ID0gbmV3IEV2ZW50KGFwcGxpY2F0aW9uTWFuYWdlciwgdmlld0lkLCByZXNwb25zZSk7XG4gICAgICAgICAgICBldmVudE1hbmFnZXIuZmlyZUV2ZW50KEV2ZW50VHlwZS5NRVNTQUdFX0FSUklWRUQsIGV2ZW50KTtcblxuICAgICAgICAgICAgaWYgKGNvbXBvbmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGV2ZW50ID0gbmV3IEV2ZW50KGNvbXBvbmVudCwgdmlld0lkLCByZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChFdmVudFR5cGUuTUVTU0FHRV9BUlJJVkVELCBldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoIVV0aWxzLmlzTnVsbChzdWNjZXNzTWVzc2FnZSkpIHtcbiAgICAgICAgICAgIGxldCBtZXNzYWdlID0ge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2VUeXBlOiAnU1VDQ0VTUycsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYXBwbGljYXRpb25NYW5hZ2VyLnBvcHVsYXRlVGVtcGxhdGUoc3VjY2Vzc01lc3NhZ2UsIHJlc3BvbnNlKVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgbGV0IGV2ZW50ID0gbmV3IEV2ZW50KGFwcGxpY2F0aW9uTWFuYWdlciwgdmlld0lkLCBtZXNzYWdlKTtcbiAgICAgICAgICAgIGV2ZW50TWFuYWdlci5maXJlRXZlbnQoRXZlbnRUeXBlLk1FU1NBR0VfQVJSSVZFRCwgZXZlbnQpO1xuXG4gICAgICAgICAgICBpZiAoY29tcG9uZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQgPSBuZXcgRXZlbnQoY29tcG9uZW50LCB2aWV3SWQsIG1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIGV2ZW50TWFuYWdlci5maXJlRXZlbnQoRXZlbnRUeXBlLk1FU1NBR0VfQVJSSVZFRCwgZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN1Y2Nlc3NDYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKHJlc3BvbnNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZpcmVFdmVudCh2aWV3SWQsIGNvbXBvbmVudCwgZXZlbnRUeXBlLCByZXNwb25zZSkge1xuICAgICAgICBsZXQgZXZlbnQgPSBuZXcgRXZlbnQoY29tcG9uZW50LCB2aWV3SWQsIHJlc3BvbnNlKTtcbiAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChldmVudFR5cGUsIGV2ZW50KTtcbiAgICB9XG59XG5cbmNvbnN0IGluc3RhbmNlID0gbmV3IFJlc3RVdGlscygpO1xuLy8gQ0RVSSBVSS1hc3NldCBVUkxzICh2aWV3IC8gbWVudSAvIGRhc2hib2FyZCkgYXJlIHNlcnZlZCB3cmFwcGVkIGluIGFcbi8vIHtfY2R1aV96OiBcIjxiYXNlNjQoZ3ppcChqc29uKSk+XCJ9IGVudmVsb3BlIGJ5IG91aS1zZXJ2ZXInc1xuLy8gd2lyZUNvbXByZXNzaW9uIHV0aWwg4oCUIHNlZSBvdWktc2VydmVyL3NyYy93ZWIvdXRpbC93aXJlQ29tcHJlc3Npb24udHMuXG4vLyBEZWNvZGUgdHJhbnNwYXJlbnRseSBoZXJlIHNvIGV2ZXJ5IGxvYWRlciBkb3duc3RyZWFtIHNlZXMgdGhlIHJhd1xuLy8gQ0RVSSBKU09OIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgc2VydmVyIGhhcyBjb21wcmVzc2lvbiBlbmFibGVkLlxuLy8gR2F0ZWQgb24gdGhlIC91aS9hcGkvdiovIHBhdGggc28gbm9uLVVJIGZldGNoZXMgYXJlIHVuYWZmZWN0ZWQuXG5jb25zdCBVSV9BU1NFVF9VUkxfUEFUVEVSTiA9IC9cXC91aVxcL2FwaVxcL3ZbMC05XStcXC8vO1xuXG4vLyBXcmFwcyBhIHN1Y2Nlc3MgY2FsbGJhY2sgd2l0aCB0aGUgd2lyZS1lbnZlbG9wZSBkZWNvZGVyIHdoZW4gdGhlIFVSTFxuLy8gbWF0Y2hlcyB0aGUgVUktYXNzZXQgcGF0dGVybi4gQm90aCBzZW5kUmVxdWVzdCAoR0VUIC8gZG9GZXRjaCBwYXRoKVxuLy8gYW5kIHBvc3REYXRhIChQT1NUIC8gZG9Qb3N0RGF0YSBwYXRoKSBuZWVkIHRoaXMg4oCUIG1lbnVzIGFuZFxuLy8gZGFzaGJvYXJkcyBhcmUgc29tZXRpbWVzIGxvYWRlZCB2aWEgUE9TVCB3aXRoIGNyaXRlcmlhIGJvZGllcywgc29cbi8vIHRoZXkgaGl0IG91aS1zZXJ2ZXIncyBjb21wcmVzc2lvbiB0b28uXG5jb25zdCB3cmFwRGVjb2RlSWZVaUFzc2V0ID0gKHVybCwgc3VjY2Vzc0NhbGxiYWNrLCBvcExhYmVsKSA9PiB7XG4gICAgaWYgKCF1cmwgfHwgIVVJX0FTU0VUX1VSTF9QQVRURVJOLnRlc3QodXJsKSB8fCAhc3VjY2Vzc0NhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiBzdWNjZXNzQ2FsbGJhY2s7XG4gICAgfVxuICAgIHJldHVybiBhc3luYyAocmF3KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBkZWNvZGVkID0gYXdhaXQgVXRpbHMubWF5YmVEZWNvZGVXaXJlKHJhdyk7XG4gICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2soZGVjb2RlZCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFske29wTGFiZWx9XSBDRFVJIHdpcmUgZGVjb2RlIGZhaWxlZCBmb3JgLCB1cmwsIGUpO1xuICAgICAgICAgICAgLy8gRmFsbCBiYWNrIHRvIHJhdyBzbyB0aGUgY2FsbGVyIHN0aWxsIGdldHMgKnNvbWV0aGluZyo7XG4gICAgICAgICAgICAvLyBtaXNzaW5nIF9jZHVpX3ogYW5kIGRlY29kZSBmYWlsdXJlcyBib3RoIGZsb3cgdGhyb3VnaFxuICAgICAgICAgICAgLy8gbWF5YmVEZWNvZGVXaXJlJ3Mgb3duIHBhc3MtdGhyb3VnaCBiZWhhdmlvdXIuXG4gICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2socmF3KTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuXG5leHBvcnQgY29uc3QgcG9zdERhdGEgPSAodXJsLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHNlY3VyZSwgZGF0YSkgPT4ge1xuICAgIGluc3RhbmNlLmRvUG9zdERhdGEodXJsLCB3cmFwRGVjb2RlSWZVaUFzc2V0KHVybCwgc3VjY2Vzc0NhbGxiYWNrLCAncG9zdERhdGEnKSwgZXJyb3JDYWxsYmFjaywgc2VjdXJlLCBkYXRhKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZW5kUmVxdWVzdCA9ICh1cmwsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgc2VjdXJlLCB0cmFjaykgPT4ge1xuICAgIGluc3RhbmNlLmRvRmV0Y2godXJsLCB3cmFwRGVjb2RlSWZVaUFzc2V0KHVybCwgc3VjY2Vzc0NhbGxiYWNrLCAnc2VuZFJlcXVlc3QnKSxcbiAgICAgICAgZXJyb3JDYWxsYmFjaywgc2VjdXJlLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCB0cmFjayk7XG59O1xuXG5leHBvcnQgY29uc3QgZG93bmxvYWQgPSAodXJsLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHNlY3VyZSkgPT4ge1xuICAgIGluc3RhbmNlLmRvRmV0Y2godXJsLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHNlY3VyZSwgJ0dFVCcsIHRydWUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGludm9rZVJwYyA9IChycGNEZXRhaWxzLCBjb21wb25lbnQsIHZpZXdJZCwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBpbnZhbGlkUGFyYW1DYWxsYmFjaywgcmV0dXJuVmFsdWVCaW5kaW5nLCBzdWNjZXNzTWVzc2FnZSwgZXZlbnQgPSBudWxsKSA9PiB7XG4gICAgaW5zdGFuY2UuaW52b2tlUnBjKHJwY0RldGFpbHMsIGNvbXBvbmVudCwgdmlld0lkLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIGludmFsaWRQYXJhbUNhbGxiYWNrLCByZXR1cm5WYWx1ZUJpbmRpbmcsIHN1Y2Nlc3NNZXNzYWdlLCBldmVudCk7XG59O1xuXG5leHBvcnQgY29uc3QgaW52b2tlUmVzdCA9IChzZXJ2aWNlQ29uZmlnLCBjb21wb25lbnQsIHZpZXdJZCwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBpbnZhbGlkUGFyYW1DYWxsYmFjaywgcmV0dXJuVmFsdWVCaW5kaW5nLCBzdWNjZXNzTWVzc2FnZSwgZXZlbnQgPSBudWxsKSA9PiB7XG4gICAgaW5zdGFuY2UuaW52b2tlUmVzdChzZXJ2aWNlQ29uZmlnLCBjb21wb25lbnQsIHZpZXdJZCwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBpbnZhbGlkUGFyYW1DYWxsYmFjaywgcmV0dXJuVmFsdWVCaW5kaW5nLCBzdWNjZXNzTWVzc2FnZSwgZXZlbnQpO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUMsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0QsSUFBQUMsb0JBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLG1CQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxNQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSSxXQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSyxVQUFBLEdBQUFOLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTSxVQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxPQUFBLEdBQUFSLHNCQUFBLENBQUFDLE9BQUE7QUFBOEQsU0FBQUQsdUJBQUFTLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFFdkQsTUFBTUcsUUFBUSxHQUFBQyxPQUFBLENBQUFELFFBQUEsR0FBR0UsTUFBTSxDQUFDRixRQUFRLENBQUNHLFFBQVEsR0FBRyxJQUFJLEdB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
408
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfVXRpbHMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdFByb21pc2VUcmFja2VyIiwiX0FwcGxpY2F0aW9uTWFuYWdlciIsIl9FdmVudCIsIl9PYnNlcnZhYmxlIiwiX0V2ZW50VHlwZSIsIl9wcm9wVHlwZXMiLCJfSGVhZGVyIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwibG9jYXRpb24iLCJleHBvcnRzIiwid2luZG93IiwicHJvdG9jb2wiLCJob3N0bmFtZSIsInN0YXR1cyIsInJlc3BvbnNlIiwib2siLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImpzb24iLCJ0ZXh0IiwiUmVzdFV0aWxzIiwiaXNQYXJhbVZhbHVlTnVsbCIsInBhcmFtVmFsdWUiLCJVdGlscyIsImlzTnVsbCIsImhhc093blByb3BlcnR5IiwidmFsdWUiLCJpbnZva2VSZXN0Iiwic2VydmljZSIsImNvbXBvbmVudCIsInZpZXdJZCIsInN1Y2Nlc3NDYWxsYmFjayIsImVycm9yQ2FsbGJhY2siLCJpbnZhbGlkUGFyYW1DYWxsYmFjayIsInJldHVyblZhbHVlQmluZGluZyIsInN1Y2Nlc3NNZXNzYWdlIiwiZXZlbnQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJ1cmwiLCJzdGFydHNXaXRoIiwiY29uY2F0IiwiYXBwbGljYXRpb25NYW5hZ2VyIiwiZ2V0Q29udGV4dFJvb3QiLCJyZXF1ZXN0Qm9keSIsImhlYWRlcnMiLCJwYXJhbWV0ZXJzIiwicXVlcnlTdHJpbmciLCJwYXRoUGFyYW1ldGVycyIsInJlcXVlc3RCb2R5UGFyYW1Gb3VuZCIsInBhcmFtZXRlciIsInBhcmFtZXRlclZhbHVlIiwicmVzb2x2ZVBhcmFtZXRlclZhbHVlIiwiZGF0YSIsInZhbGlkYXRvciIsImV2YWx1YXRlQm9vbGVhbkV4cHJlc3Npb24iLCJudWxsYWJsZSIsIm5hbWUiLCJjb25zb2xlIiwiZXJyb3IiLCJodHRwUGFyYW1ldGVyVHlwZSIsImluY2x1ZGVQYXJhbWV0ZXJUeXBlcyIsInR5cGUiLCJKU09OIiwic3RyaW5naWZ5IiwicmVzb2x2ZWRWYWx1ZSIsImVuY29kZSIsImVuY29kZVVSSUNvbXBvbmVudCIsImluc3RhbmNlVHlwZSIsImluZGV4T2YiLCJyZXBsYWNlIiwiY29udGVudFR5cGUiLCJtZXRob2QiLCJFcnJvciIsImxvZyIsInBvc3REYXRhIiwicHJvY2Vzc1N1Y2Nlc3NmdWxSZXNwb25zZURhdGEiLCJwYXRoIiwiZ2V0UHJvcGVydHlDaGFpblBhdGgiLCJ2YWx1ZU9iamVjdCIsInByb3BlcnR5IiwiZmlyZUV2ZW50IiwiRXZlbnRUeXBlIiwiU0VSVklDRV9DQUxMX1NVQ0NFU1MiLCJTRVJWSUNFX0NBTExfRkFJTFVSRSIsImRvd25sb2FkIiwic2VuZFJlcXVlc3QiLCJpbnZva2VScGMiLCJycGNEZXRhaWxzIiwicmVxdWVzdCIsImlkIiwic3BsaXQiLCJzZXJ2aWNlSWQiLCJwcm9jZWR1cmVOYW1lIiwiY29uZmlnIiwibW9kdWxlIiwidG9Mb3dlckNhc2UiLCJpIiwicGFyYW1ldGVyQ29uZmlnIiwiaW5kZXgiLCJ2YWwiLCJwdXNoIiwiZG9GZXRjaCIsIndhcm4iLCJkb1Bvc3REYXRhIiwic2VjdXJlIiwiZmV0Y2hXaXRoQ3VzdG9tQ29uZmlnIiwiYm9keSIsInRyYWNrIiwic2VydmljZVR5cGUiLCJhY2Nlc3NUb2tlbiIsInNlc3Npb25TdG9yYWdlIiwiZ2V0SXRlbSIsImlkVG9rZW4iLCJGb3JtRGF0YSIsImZldGNoQ29uZmlnIiwiZ2V0QXBwbGljYXRpb25QcmltYXJ5Q29sb3IiLCJnZXRBcHBsaWNhdGlvblNlY29uZGFyeUNvbG9yIiwib3BlbiIsImVuY29kZVVSSSIsInRyYWNrUHJvbWlzZSIsImV4ZWN1dGVGZXRjaCIsImZldGNoIiwidGhlbiIsImNhdGNoIiwiZW5kc1dpdGgiLCJjbGVhciIsIm5hdmlnYXRlIiwidG9TdHJpbmciLCJ0cmltIiwicGFyc2UiLCJpZ25vcmVkIiwiZGF0YVR5cGUiLCJFdmVudCIsImV2ZW50TWFuYWdlciIsIk1FU1NBR0VfQVJSSVZFRCIsIm1lc3NhZ2UiLCJtZXNzYWdlVHlwZSIsInBvcHVsYXRlVGVtcGxhdGUiLCJldmVudFR5cGUiLCJpbnN0YW5jZSIsIlVJX0FTU0VUX1VSTF9QQVRURVJOIiwid3JhcERlY29kZUlmVWlBc3NldCIsIm9wTGFiZWwiLCJ0ZXN0IiwicmF3IiwiZGVjb2RlZCIsIm1heWJlRGVjb2RlV2lyZSIsInNlcnZpY2VDb25maWciXSwic291cmNlcyI6WyIuLi9zcmMvbGliL1Jlc3RVdGlscy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyLvu79pbXBvcnQgVXRpbHMgZnJvbSAnLi9VdGlscyc7XG5pbXBvcnQge3RyYWNrUHJvbWlzZX0gZnJvbSAncmVhY3QtcHJvbWlzZS10cmFja2VyJztcbmltcG9ydCBhcHBsaWNhdGlvbk1hbmFnZXIgZnJvbSAnLi9BcHBsaWNhdGlvbk1hbmFnZXInO1xuaW1wb3J0IEV2ZW50IGZyb20gJy4vZXZlbnQvRXZlbnQnO1xuaW1wb3J0IGV2ZW50TWFuYWdlciBmcm9tICcuL2V2ZW50L09ic2VydmFibGUnO1xuaW1wb3J0IEV2ZW50VHlwZSBmcm9tICcuL2V2ZW50L0V2ZW50VHlwZSc7XG5pbXBvcnQge2luc3RhbmNlT2Z9IGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgaGVhZGVyIGZyb20gXCIuL2NvbXBvbmVudHMvZGFzaGJvYXJkL2NvbXBvbmVudHMvSGVhZGVyXCI7XG5cbmV4cG9ydCBjb25zdCBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWU7XG5jb25zdCBzdGF0dXMgPSAocmVzcG9uc2UpID0+IHtcbiAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXNwb25zZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlc3BvbnNlKTtcbiAgICB9XG59O1xuXG5jb25zdCBqc29uID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKTtcbn07XG5cbmNsYXNzIFJlc3RVdGlscyB7XG4gICAgaXNQYXJhbVZhbHVlTnVsbChwYXJhbVZhbHVlKSB7XG4gICAgICAgIGlmIChVdGlscy5pc051bGwocGFyYW1WYWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHBhcmFtVmFsdWUuaGFzT3duUHJvcGVydHkoJ3ZhbHVlJykgPyBVdGlscy5pc051bGwocGFyYW1WYWx1ZS52YWx1ZSkgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBpbnZva2VSZXN0KHNlcnZpY2UsIGNvbXBvbmVudCwgdmlld0lkLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIGludmFsaWRQYXJhbUNhbGxiYWNrLCByZXR1cm5WYWx1ZUJpbmRpbmcsIHN1Y2Nlc3NNZXNzYWdlLCBldmVudCA9IG51bGwpIHtcbiAgICAgICAgbGV0IHVybCA9IHNlcnZpY2UudXJsLnN0YXJ0c1dpdGgoJ2h0dHA6Ly8nKSB8fCBzZXJ2aWNlLnVybC5zdGFydHNXaXRoKCdodHRwczovLycpID8gc2VydmljZS51cmwgOiBsb2NhdGlvbiArIGAke2FwcGxpY2F0aW9uTWFuYWdlci5nZXRDb250ZXh0Um9vdCgpICsgc2VydmljZS51cmx9YDtcbiAgICAgICAgbGV0IHJlcXVlc3RCb2R5ID0gbnVsbDtcbiAgICAgICAgbGV0IGhlYWRlcnMgPSBzZXJ2aWNlLmhlYWRlcnM7XG5cbiAgICAgICAgaWYgKCFVdGlscy5pc051bGwoc2VydmljZS5wYXJhbWV0ZXJzKSkge1xuICAgICAgICAgICAgbGV0IHF1ZXJ5U3RyaW5nID0gJyc7XG4gICAgICAgICAgICBsZXQgcGF0aFBhcmFtZXRlcnMgPSAnJztcbiAgICAgICAgICAgIGxldCByZXF1ZXN0Qm9keVBhcmFtRm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGFyYW1ldGVyIG9mIHNlcnZpY2UucGFyYW1ldGVycykge1xuICAgICAgICAgICAgICAgIGxldCBwYXJhbWV0ZXJWYWx1ZSA9IGFwcGxpY2F0aW9uTWFuYWdlci5yZXNvbHZlUGFyYW1ldGVyVmFsdWUocGFyYW1ldGVyLCBldmVudCA/IGV2ZW50LmRhdGEgOiBudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXJhbWV0ZXIudmFsaWRhdG9yKVxuICAgICAgICAgICAgICAgICAgICAmJiAhVXRpbHMuZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihwYXJhbWV0ZXIudmFsaWRhdG9yLm51bGxhYmxlLCBwYXJhbWV0ZXIubmFtZSlcbiAgICAgICAgICAgICAgICAgICAgJiYgdGhpcy5pc1BhcmFtVmFsdWVOdWxsKHBhcmFtZXRlclZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChpbnZhbGlkUGFyYW1DYWxsYmFjaykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0lOVkFMSUQgUEFSQU1FVEVSIDogJywgcGFyYW1ldGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGludmFsaWRQYXJhbUNhbGxiYWNrKHBhcmFtZXRlcik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IGh0dHBQYXJhbWV0ZXJUeXBlID0gcGFyYW1ldGVyLmh0dHBQYXJhbWV0ZXJUeXBlO1xuICAgICAgICAgICAgICAgIGlmIChVdGlscy5pc051bGwoaHR0cFBhcmFtZXRlclR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGh0dHBQYXJhbWV0ZXJUeXBlID0gJ1FVRVJZX1BBUkFNRVRFUic7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGh0dHBQYXJhbWV0ZXJUeXBlID09PSAnUVVFUllfUEFSQU1FVEVSJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXJhbWV0ZXJWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxdWVyeVN0cmluZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlTdHJpbmcgKz0gJyYnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChzZXJ2aWNlLmluY2x1ZGVQYXJhbWV0ZXJUeXBlcykgJiYgc2VydmljZS5pbmNsdWRlUGFyYW1ldGVyVHlwZXMgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVN0cmluZyArPSBwYXJhbWV0ZXJWYWx1ZS50eXBlICsgJzonO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1ldGVyVmFsdWUudHlwZSA9PT0gJ01hcE9iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJWYWx1ZS52YWx1ZS50eXBlID0gJ01hcEVudGl0eUR0byc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9IHBhcmFtZXRlci5uYW1lICsgJz0nO1xuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlTdHJpbmcgKz0gKHR5cGVvZiBwYXJhbWV0ZXJWYWx1ZS52YWx1ZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHBhcmFtZXRlclZhbHVlLnZhbHVlID09PSAnbnVtYmVyJyA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyVmFsdWUudmFsdWUgOiBKU09OLnN0cmluZ2lmeShwYXJhbWV0ZXJWYWx1ZS52YWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGh0dHBQYXJhbWV0ZXJUeXBlID09PSAnUEFUSF9WQVJJQUJMRScpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyYW1ldGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzb2x2ZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbWV0ZXIuZW5jb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRWYWx1ZSA9IHR5cGVvZiBwYXJhbWV0ZXJWYWx1ZS52YWx1ZSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkocGFyYW1ldGVyVmFsdWUudmFsdWUpKSA6IHBhcmFtZXRlclZhbHVlLmluc3RhbmNlVHlwZSA9PT0gJ1R5cGVkVmFsdWUnID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChwYXJhbWV0ZXJWYWx1ZS52YWx1ZSkgOiBlbmNvZGVVUklDb21wb25lbnQocGFyYW1ldGVyVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlZFZhbHVlID0gdHlwZW9mIHBhcmFtZXRlclZhbHVlLnZhbHVlID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IEpTT04uc3RyaW5naWZ5KHBhcmFtZXRlclZhbHVlLnZhbHVlKSA6IHBhcmFtZXRlclZhbHVlLmluc3RhbmNlVHlwZSA9PT0gJ1R5cGVkVmFsdWUnID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlclZhbHVlLnZhbHVlIDogcGFyYW1ldGVyVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwYXJhbWV0ZXIgaGFzIGEgbmFtZSBhbmQgdGhlIFVSTCBjb250YWlucyB7bmFtZX0sIHJlcGxhY2UgdGhlIHBsYWNlaG9sZGVyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXJhbWV0ZXIubmFtZSkgJiYgdXJsLmluZGV4T2YoJ3snICsgcGFyYW1ldGVyLm5hbWUgKyAnfScpID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSB1cmwucmVwbGFjZSgneycgKyBwYXJhbWV0ZXIubmFtZSArICd9JywgcmVzb2x2ZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJhY2t3YXJkIGNvbXBhdGliaWxpdHk6IGFwcGVuZCB0byBlbmQgb2YgVVJMXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aFBhcmFtZXRlcnMgKz0gJy8nICsgcmVzb2x2ZWRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChodHRwUGFyYW1ldGVyVHlwZSA9PT0gJ0hFQURFUicpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyYW1ldGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhlYWRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzID0ge31cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyc1twYXJhbWV0ZXIubmFtZV0gPSBwYXJhbWV0ZXJWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChodHRwUGFyYW1ldGVyVHlwZSA9PT0gJ1JFUVVFU1RfQk9EWScpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RCb2R5UGFyYW1Gb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignT25seSBvbmUgcmVxdWVzdCBib2R5IGlzIHBlcm1pdHRlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzUGFyYW1WYWx1ZU51bGwocGFyYW1ldGVyVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEJvZHkgPSBwYXJhbWV0ZXJWYWx1ZS5pbnN0YW5jZVR5cGUgPT09ICdUeXBlZFZhbHVlJyA/IHBhcmFtZXRlclZhbHVlLnZhbHVlIDogcGFyYW1ldGVyVmFsdWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1ldGVyVmFsdWUudHlwZSA9PT0gJ01hcE9iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEJvZHkudHlwZSA9ICdNYXBFbnRpdHlEdG8nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVxdWVzdEJvZHkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Qm9keS50eXBlID0gcGFyYW1ldGVyVmFsdWUudHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHBhdGhQYXJhbWV0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB1cmwgKz0gcGF0aFBhcmFtZXRlcnM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChxdWVyeVN0cmluZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdXJsICs9ICc/JztcbiAgICAgICAgICAgICAgICB1cmwgKz0gcXVlcnlTdHJpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY29udGVudFR5cGUgPSBudWxsO1xuXG4gICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGhlYWRlcnMpKSB7XG4gICAgICAgICAgICBjb250ZW50VHlwZSA9IGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlcXVlc3RCb2R5ICE9PSBudWxsICYmIHNlcnZpY2UubWV0aG9kID09PSAnR0VUJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBIHJlcXVlc3QgYm9keSBwYXJhbWV0ZXIgY2Fubm90IGJlIHNwZWNpZmllZCBmb3IgYSBHRVQgcmVxdWVzdCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlcXVlc3RCb2R5ICE9PSBudWxsIHx8IHNlcnZpY2UubWV0aG9kID09PSAnUE9TVCcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUE9TVElORyBSRVNUIFJFUVVFU1QgQk9EWSA6IFwiLCByZXF1ZXN0Qm9keSk7XG4gICAgICAgICAgICBwb3N0RGF0YSh1cmwsIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N1Y2Nlc3NmdWxSZXNwb25zZURhdGEoY29tcG9uZW50LCByZXNwb25zZSwgc3VjY2Vzc0NhbGxiYWNrLCB2aWV3SWQsIHN1Y2Nlc3NNZXNzYWdlKTtcblxuICAgICAgICAgICAgICAgIGxldCBwYXRoID0gVXRpbHMuZ2V0UHJvcGVydHlDaGFpblBhdGgocmV0dXJuVmFsdWVCaW5kaW5nKTtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXRoLnZhbHVlT2JqZWN0KSAmJiAhVXRpbHMuaXNOdWxsKHBhdGgucHJvcGVydHkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhdGgudmFsdWVPYmplY3RbcGF0aC5wcm9wZXJ0eV0gPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmZpcmVFdmVudCh2aWV3SWQsIGNvbXBvbmVudCwgRXZlbnRUeXBlLlNFUlZJQ0VfQ0FMTF9TVUNDRVNTLCByZXNwb25zZSk7XG4gICAgICAgICAgICB9LCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGVycm9yQ2FsbGJhY2spKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yQ2FsbGJhY2soZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5maXJlRXZlbnQodmlld0lkLCBjb21wb25lbnQsIEV2ZW50VHlwZS5TRVJWSUNFX0NBTExfRkFJTFVSRSk7XG4gICAgICAgICAgICB9LCAhc2VydmljZS51cmwuc3RhcnRzV2l0aCgnaHR0cDovLycpLCByZXF1ZXN0Qm9keSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udGVudFR5cGUgPT09ICdhcHBsaWNhdGlvbi9wZGYnIHx8IGNvbnRlbnRUeXBlID09PSAnYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsJykge1xuICAgICAgICAgICAgZG93bmxvYWQodXJsLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgfSwgKGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChlcnJvckNhbGxiYWNrKSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvckNhbGxiYWNrKGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VuZFJlcXVlc3QodXJsLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N1Y2Nlc3NmdWxSZXNwb25zZURhdGEoY29tcG9uZW50LCBkYXRhLCBzdWNjZXNzQ2FsbGJhY2ssIHZpZXdJZCwgc3VjY2Vzc01lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIGxldCBwYXRoID0gVXRpbHMuZ2V0UHJvcGVydHlDaGFpblBhdGgocmV0dXJuVmFsdWVCaW5kaW5nKTtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChwYXRoLnZhbHVlT2JqZWN0KSAmJiAhVXRpbHMuaXNOdWxsKHBhdGgucHJvcGVydHkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhdGgudmFsdWVPYmplY3RbcGF0aC5wcm9wZXJ0eV0gPSBkYXRhO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuZmlyZUV2ZW50KHZpZXdJZCwgY29tcG9uZW50LCBFdmVudFR5cGUuU0VSVklDRV9DQUxMX1NVQ0NFU1MsIGRhdGEpO1xuICAgICAgICAgICAgfSwgKGUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmVFdmVudCh2aWV3SWQsIGNvbXBvbmVudCwgRXZlbnRUeXBlLlNFUlZJQ0VfQ0FMTF9GQUlMVVJFKTtcbiAgICAgICAgICAgICAgICBpZiAoIVV0aWxzLmlzTnVsbChlcnJvckNhbGxiYWNrKSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvckNhbGxiYWNrKGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sICFzZXJ2aWNlLnVybC5zdGFydHNXaXRoKCdodHRwOi8vJykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW52b2tlUnBjKHJwY0RldGFpbHMsIGNvbXBvbmVudCwgdmlld0lkLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIGludmFsaWRQYXJhbUNhbGxiYWNrLCByZXR1cm5WYWx1ZUJpbmRpbmcsIHN1Y2Nlc3NNZXNzYWdlLCBldmVudCA9IG51bGwpIHtcbiAgICAgICAgbGV0IHJlcXVlc3QgPSB7fTtcbiAgICAgICAgcmVxdWVzdC5pZCA9IHZpZXdJZDtcblxuICAgICAgICBsZXQgc3BsaXQgPSBycGNEZXRhaWxzLnNlcnZpY2VJZC5zcGxpdCgnLicpO1xuICAgICAgICByZXF1ZXN0LnNlcnZpY2UgPSBzcGxpdFsxXTtcbiAgICAgICAgcmVxdWVzdC5tZXRob2QgPSBycGNEZXRhaWxzLnByb2NlZHVyZU5hbWU7XG5cbiAgICAgICAgbGV0IGNvbmZpZyA9IHt9O1xuICAgICAgICBjb25maWcuaGVhZGVycyA9IHt9O1xuICAgICAgICBsZXQgbW9kdWxlID0gc3BsaXRbMF0udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCFVdGlscy5pc051bGwocnBjRGV0YWlscy5wYXJhbWV0ZXJzKSAmJiBycGNEZXRhaWxzLnBhcmFtZXRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmVxdWVzdC5wYXJhbWV0ZXJzID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJwY0RldGFpbHMucGFyYW1ldGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBwYXJhbWV0ZXJDb25maWcgPSBycGNEZXRhaWxzLnBhcmFtZXRlcnNbaV07XG4gICAgICAgICAgICAgICAgbGV0IHBhcmFtZXRlciA9IHt9O1xuICAgICAgICAgICAgICAgIHBhcmFtZXRlci5uYW1lID0gcGFyYW1ldGVyQ29uZmlnLm5hbWU7XG4gICAgICAgICAgICAgICAgcGFyYW1ldGVyLmluZGV4ID0gcGFyYW1ldGVyQ29uZmlnLmluZGV4O1xuXG4gICAgICAgICAgICAgICAgbGV0IHZhbCA9IGFwcGxpY2F0aW9uTWFuYWdlci5yZXNvbHZlUGFyYW1ldGVyVmFsdWUocGFyYW1ldGVyQ29uZmlnLCBldmVudCA/IGV2ZW50LmRhdGEgOiBudWxsKTtcblxuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyLnZhbHVlID0gdmFsLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIudHlwZSA9IHZhbC50eXBlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW1ldGVyLnZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIudmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChVdGlscy5pc051bGwocGFyYW1ldGVyLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlci50eXBlID0gJ1N0cmluZyc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwocGFyYW1ldGVyQ29uZmlnLnZhbGlkYXRvcilcbiAgICAgICAgICAgICAgICAgICAgJiYgVXRpbHMuZXZhbHVhdGVCb29sZWFuRXhwcmVzc2lvbihwYXJhbWV0ZXJDb25maWcudmFsaWRhdG9yLm51bGxhYmxlLCBwYXJhbWV0ZXJDb25maWcubmFtZSkgPT09IGZhbHNlICYmIHRoaXMuaXNQYXJhbVZhbHVlTnVsbChwYXJhbWV0ZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKGludmFsaWRQYXJhbUNhbGxiYWNrKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignSU5WQUxJRCBQQVJBTUVURVIgOiAnLCBwYXJhbWV0ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZFBhcmFtQ2FsbGJhY2socGFyYW1ldGVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXF1ZXN0LnBhcmFtZXRlcnMucHVzaChwYXJhbWV0ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5kb0ZldGNoKGxvY2F0aW9uICsgYXBwbGljYXRpb25NYW5hZ2VyLmdldENvbnRleHRSb290KCkgKyAnLycgKyBtb2R1bGUgKyAnL2FwaS92MS9ycGMvaW52b2tlJyxcbiAgICAgICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHZpZXdJZCkgJiYgIVV0aWxzLmlzTnVsbChjb21wb25lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyZUV2ZW50KHZpZXdJZCwgY29tcG9uZW50LCBFdmVudFR5cGUuU0VSVklDRV9DQUxMX1NVQ0NFU1MsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXCJObyB2aWV3IGlkIG9yIGNvbXBvbmVudCBzcGVjaWZpZWQgd2hpbGUgZXhlY3V0aW5nIFtcIiArIG1vZHVsZSArIFwiXSBycGMgOiBcIiwgcnBjRGV0YWlscyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHJldHVyblZhbHVlQmluZGluZykge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcGF0aCA9IFV0aWxzLmdldFByb3BlcnR5Q2hhaW5QYXRoKHJldHVyblZhbHVlQmluZGluZyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghVXRpbHMuaXNOdWxsKHBhdGgudmFsdWVPYmplY3QpICYmICFVdGlscy5pc051bGwocGF0aC5wcm9wZXJ0eSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGgudmFsdWVPYmplY3RbcGF0aC5wcm9wZXJ0eV0gPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzQ2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnJvckNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yQ2FsbGJhY2soZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFVdGlscy5pc051bGwodmlld0lkKSAmJiAhVXRpbHMuaXNOdWxsKGNvbXBvbmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlRXZlbnQodmlld0lkLCBjb21wb25lbnQsIEV2ZW50VHlwZS5TRVJWSUNFX0NBTExfRkFJTFVSRSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgdHJ1ZSwgJ1BPU1QnLCBmYWxzZSwgcmVxdWVzdCwgdmlld0lkLCBzdWNjZXNzTWVzc2FnZSwgdHJ1ZSwgJ2FwcGxpY2F0aW9uL2pzb24nLCBjb25maWcpO1xuICAgIH1cblxuICAgIGRvUG9zdERhdGEodXJsLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHNlY3VyZSwgZGF0YSwgdmlld0lkLCBzdWNjZXNzTWVzc2FnZSkge1xuICAgICAgICB0aGlzLmZldGNoV2l0aEN1c3RvbUNvbmZpZyh1cmwsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgc2VjdXJlLCBudWxsLCAnUE9TVCcsIGZhbHNlLCBkYXRhLCAncmVzdCcpO1xuICAgIH1cblxuICAgIGRvRmV0Y2godXJsLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHNlY3VyZSwgbWV0aG9kLCBkb3dubG9hZCwgYm9keSwgdmlld0lkLCBzdWNjZXNzTWVzc2FnZSwgdHJhY2ssIGNvbnRlbnRUeXBlID0gbnVsbCwgY29uZmlnID0gbnVsbCkge1xuICAgICAgICB0aGlzLmZldGNoV2l0aEN1c3RvbUNvbmZpZyh1cmwsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgc2VjdXJlLCBjb25maWcsIG1ldGhvZCwgZG93bmxvYWQsXG4gICAgICAgICAgICBib2R5LCBudWxsLCB2aWV3SWQsIHN1Y2Nlc3NNZXNzYWdlLCB0cmFjaywgY29udGVudFR5cGUpO1xuICAgIH1cblxuICAgIGZldGNoV2l0aEN1c3RvbUNvbmZpZyh1cmwsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgc2VjdXJlLCBjb25maWcsIG1ldGhvZCwgZG93bmxvYWQsIGJvZHksIHNlcnZpY2VUeXBlLCB2aWV3SWQsIHN1Y2Nlc3NNZXNzYWdlLCB0cmFjaywgY29udGVudFR5cGUpIHtcbiAgICAgICAgY29uc3QgYWNjZXNzVG9rZW4gPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdhY2Nlc3NUb2tlbicpO1xuICAgICAgICBjb25zdCBpZFRva2VuID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnaWRUb2tlbicpO1xuXG4gICAgICAgIGxldCBkYXRhID0gYm9keSA/IChib2R5IGluc3RhbmNlb2YgRm9ybURhdGEpID8gYm9keSA6IEpTT04uc3RyaW5naWZ5KGJvZHkpIDogbnVsbDtcbiAgICAgICAgbGV0IGZldGNoQ29uZmlnID0gY29uZmlnO1xuXG4gICAgICAgIGlmIChVdGlscy5pc051bGwoZmV0Y2hDb25maWcpKSB7XG4gICAgICAgICAgICBpZiAoVXRpbHMuaXNOdWxsKHNlY3VyZSkgfHwgc2VjdXJlID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgZmV0Y2hDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogVXRpbHMuaXNOdWxsKG1ldGhvZCkgPyAnR0VUJyA6IG1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IGRhdGFcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIC8vIFNlY3VyZSBieSBkZWZhdWx0LCBwcmVzZW5jZS1iYXNlZDogYXR0YWNoIGF1dGggT05MWSB3aGVuIGFcbiAgICAgICAgICAgICAgICAvLyBzZXNzaW9uIGV4aXN0cyDigJQgbmV2ZXIgJ0JlYXJlciBudWxsJyBvciBhIHN0YWxlIHRva2VuLiBQcmUtYXV0aFxuICAgICAgICAgICAgICAgIC8vIHNjcmVlbnMgKHZpZXcvc2VjdXJpdHkvKikgY2xlYXIgc2Vzc2lvblN0b3JhZ2Ugb24gbW91bnQuXG4gICAgICAgICAgICAgICAgaWYgKGFjY2Vzc1Rva2VuKSBmZXRjaENvbmZpZy5oZWFkZXJzWydBdXRob3JpemF0aW9uJ10gPSAnQmVhcmVyICcgKyBhY2Nlc3NUb2tlbjtcbiAgICAgICAgICAgICAgICBpZiAoaWRUb2tlbikgZmV0Y2hDb25maWcuaGVhZGVyc1snaWRUb2tlbiddID0gaWRUb2tlbjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZmV0Y2hDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgICAgIG1ldGhvZDogVXRpbHMuaXNOdWxsKG1ldGhvZCkgPyAnR0VUJyA6IG1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgYm9keTogZGF0YVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICgncmVzdCcgPT09IHNlcnZpY2VUeXBlICYmICEoYm9keSBpbnN0YW5jZW9mIEZvcm1EYXRhKSkge1xuICAgICAgICAgICAgICAgIGZldGNoQ29uZmlnLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgnO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoKGJvZHkgaW5zdGFuY2VvZiBGb3JtRGF0YSkpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgZmV0Y2hDb25maWcuaGVhZGVyc1snQ29udGVudC1UeXBlJ107XG4gICAgICAgICAgICAgICAgZmV0Y2hDb25maWcuaGVhZGVyc1snQWNjZXB0J10gPSAnYXBwbGljYXRpb24vanNvbic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29udGVudFR5cGUpIHtcbiAgICAgICAgICAgIGZldGNoQ29uZmlnLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gY29udGVudFR5cGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZG93bmxvYWQpIHtcbiAgICAgICAgICAgIGlmICh1cmwuaW5kZXhPZignPycpIDwgMCkge1xuICAgICAgICAgICAgICAgIHVybCArPSAnPyc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHVybCArPSAnJic7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHVybCArPSAnYWNjZXNzX3Rva2VuPScgKyBhY2Nlc3NUb2tlbjtcbiAgICAgICAgICAgIHVybCArPSAnJmlkVG9rZW49JyArIGlkVG9rZW47XG4gICAgICAgICAgICB1cmwgKz0gJyZ0aGVtZVByaW1hcnlDb2xvcj0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGFwcGxpY2F0aW9uTWFuYWdlci5nZXRBcHBsaWNhdGlvblByaW1hcnlDb2xvcigpKTtcbiAgICAgICAgICAgIHVybCArPSAnJnRoZW1lU2Vjb25kYXJ5Q29sb3I9JyArIGVuY29kZVVSSUNvbXBvbmVudChhcHBsaWNhdGlvbk1hbmFnZXIuZ2V0QXBwbGljYXRpb25TZWNvbmRhcnlDb2xvcigpKTtcblxuICAgICAgICAgICAgd2luZG93Lm9wZW4oZW5jb2RlVVJJKHVybCksICdfYmxhbmsnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChVdGlscy5pc051bGwodHJhY2spIHx8IHRyYWNrID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgdHJhY2tQcm9taXNlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmV4ZWN1dGVGZXRjaCh1cmwsIGZldGNoQ29uZmlnLCBzdWNjZXNzQ2FsbGJhY2ssIHZpZXdJZCwgc3VjY2Vzc01lc3NhZ2UsIGVycm9yQ2FsbGJhY2spXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5leGVjdXRlRmV0Y2godXJsLCBmZXRjaENvbmZpZywgc3VjY2Vzc0NhbGxiYWNrLCB2aWV3SWQsIHN1Y2Nlc3NNZXNzYWdlLCBlcnJvckNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGV4ZWN1dGVGZXRjaCh1cmwsIGZldGNoQ29uZmlnLCBzdWNjZXNzQ2FsbGJhY2ssIHZpZXdJZCwgc3VjY2Vzc01lc3NhZ2UsIGVycm9yQ2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIGZldGNoKGVuY29kZVVSSSh1cmwpLCBmZXRjaENvbmZpZylcbiAgICAgICAgICAgIC50aGVuKHN0YXR1cylcbiAgICAgICAgICAgIC50aGVuKGpzb24pXG4gICAgICAgICAgICAudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N1Y2Nlc3NmdWxSZXNwb25zZURhdGEobnVsbCwgZGF0YSwgc3VjY2Vzc0NhbGxiYWNrLCB2aWV3SWQsIHN1Y2Nlc3NNZXNzYWdlKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkVSUk9SIEZFVENISU5HIEZST00gVVJMIFtcIiArIHVybCArIFwiXVwiKTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgIGlmKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUuc3RhdHVzID09PSA0MDEgJiYgIXVybC5lbmRzV2l0aCgnL2xvZ291dCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvckNhbGxiYWNrKGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb25NYW5hZ2VyLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbk1hbmFnZXIubmF2aWdhdGUoJy9sb2dpbicpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yQ2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yQ2FsbGJhY2soZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm9jZXNzU3VjY2Vzc2Z1bFJlc3BvbnNlRGF0YShjb21wb25lbnQsIGRhdGEsIHN1Y2Nlc3NDYWxsYmFjaywgdmlld0lkLCBzdWNjZXNzTWVzc2FnZSkge1xuICAgICAgICBsZXQgcmVzcG9uc2U7XG5cbiAgICAgICAgaWYgKCFVdGlscy5pc051bGwoZGF0YSkgJiYgZGF0YS50b1N0cmluZygpXG4gICAgICAgICAgICAudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmVzcG9uc2UgPSBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyB8fCBVdGlscy5pc051bGwoZGF0YSkgfHwgZGF0YS50b1N0cmluZygpXG4gICAgICAgICAgICAudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmVzcG9uc2UgPSBkYXRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXNwb25zZSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgICAgICB9IGNhdGNoIChpZ25vcmVkKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBkYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmRhdGFUeXBlID09PSAnbWVzc2FnZScpIHtcbiAgICAgICAgICAgIGxldCBldmVudCA9IG5ldyBFdmVudChhcHBsaWNhdGlvbk1hbmFnZXIsIHZpZXdJZCwgcmVzcG9uc2UpO1xuICAgICAgICAgICAgZXZlbnRNYW5hZ2VyLmZpcmVFdmVudChFdmVudFR5cGUuTUVTU0FHRV9BUlJJVkVELCBldmVudCk7XG5cbiAgICAgICAgICAgIGlmIChjb21wb25lbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBldmVudCA9IG5ldyBFdmVudChjb21wb25lbnQsIHZpZXdJZCwgcmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIGV2ZW50TWFuYWdlci5maXJlRXZlbnQoRXZlbnRUeXBlLk1FU1NBR0VfQVJSSVZFRCwgZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCFVdGlscy5pc051bGwoc3VjY2Vzc01lc3NhZ2UpKSB7XG4gICAgICAgICAgICBsZXQgbWVzc2FnZSA9IHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlVHlwZTogJ1NVQ0NFU1MnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGFwcGxpY2F0aW9uTWFuYWdlci5wb3B1bGF0ZVRlbXBsYXRlKHN1Y2Nlc3NNZXNzYWdlLCByZXNwb25zZSlcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGxldCBldmVudCA9IG5ldyBFdmVudChhcHBsaWNhdGlvbk1hbmFnZXIsIHZpZXdJZCwgbWVzc2FnZSk7XG4gICAgICAgICAgICBldmVudE1hbmFnZXIuZmlyZUV2ZW50KEV2ZW50VHlwZS5NRVNTQUdFX0FSUklWRUQsIGV2ZW50KTtcblxuICAgICAgICAgICAgaWYgKGNvbXBvbmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGV2ZW50ID0gbmV3IEV2ZW50KGNvbXBvbmVudCwgdmlld0lkLCBtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICBldmVudE1hbmFnZXIuZmlyZUV2ZW50KEV2ZW50VHlwZS5NRVNTQUdFX0FSUklWRUQsIGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdWNjZXNzQ2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHN1Y2Nlc3NDYWxsYmFjayhyZXNwb25zZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmaXJlRXZlbnQodmlld0lkLCBjb21wb25lbnQsIGV2ZW50VHlwZSwgcmVzcG9uc2UpIHtcbiAgICAgICAgbGV0IGV2ZW50ID0gbmV3IEV2ZW50KGNvbXBvbmVudCwgdmlld0lkLCByZXNwb25zZSk7XG4gICAgICAgIGV2ZW50TWFuYWdlci5maXJlRXZlbnQoZXZlbnRUeXBlLCBldmVudCk7XG4gICAgfVxufVxuXG5jb25zdCBpbnN0YW5jZSA9IG5ldyBSZXN0VXRpbHMoKTtcbi8vIENEVUkgVUktYXNzZXQgVVJMcyAodmlldyAvIG1lbnUgLyBkYXNoYm9hcmQpIGFyZSBzZXJ2ZWQgd3JhcHBlZCBpbiBhXG4vLyB7X2NkdWlfejogXCI8YmFzZTY0KGd6aXAoanNvbikpPlwifSBlbnZlbG9wZSBieSBvdWktc2VydmVyJ3Ncbi8vIHdpcmVDb21wcmVzc2lvbiB1dGlsIOKAlCBzZWUgb3VpLXNlcnZlci9zcmMvd2ViL3V0aWwvd2lyZUNvbXByZXNzaW9uLnRzLlxuLy8gRGVjb2RlIHRyYW5zcGFyZW50bHkgaGVyZSBzbyBldmVyeSBsb2FkZXIgZG93bnN0cmVhbSBzZWVzIHRoZSByYXdcbi8vIENEVUkgSlNPTiByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIHNlcnZlciBoYXMgY29tcHJlc3Npb24gZW5hYmxlZC5cbi8vIEdhdGVkIG9uIHRoZSAvdWkvYXBpL3YqLyBwYXRoIHNvIG5vbi1VSSBmZXRjaGVzIGFyZSB1bmFmZmVjdGVkLlxuY29uc3QgVUlfQVNTRVRfVVJMX1BBVFRFUk4gPSAvXFwvdWlcXC9hcGlcXC92WzAtOV0rXFwvLztcblxuLy8gV3JhcHMgYSBzdWNjZXNzIGNhbGxiYWNrIHdpdGggdGhlIHdpcmUtZW52ZWxvcGUgZGVjb2RlciB3aGVuIHRoZSBVUkxcbi8vIG1hdGNoZXMgdGhlIFVJLWFzc2V0IHBhdHRlcm4uIEJvdGggc2VuZFJlcXVlc3QgKEdFVCAvIGRvRmV0Y2ggcGF0aClcbi8vIGFuZCBwb3N0RGF0YSAoUE9TVCAvIGRvUG9zdERhdGEgcGF0aCkgbmVlZCB0aGlzIOKAlCBtZW51cyBhbmRcbi8vIGRhc2hib2FyZHMgYXJlIHNvbWV0aW1lcyBsb2FkZWQgdmlhIFBPU1Qgd2l0aCBjcml0ZXJpYSBib2RpZXMsIHNvXG4vLyB0aGV5IGhpdCBvdWktc2VydmVyJ3MgY29tcHJlc3Npb24gdG9vLlxuY29uc3Qgd3JhcERlY29kZUlmVWlBc3NldCA9ICh1cmwsIHN1Y2Nlc3NDYWxsYmFjaywgb3BMYWJlbCkgPT4ge1xuICAgIGlmICghdXJsIHx8ICFVSV9BU1NFVF9VUkxfUEFUVEVSTi50ZXN0KHVybCkgfHwgIXN1Y2Nlc3NDYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gc3VjY2Vzc0NhbGxiYWNrO1xuICAgIH1cbiAgICByZXR1cm4gYXN5bmMgKHJhdykgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZGVjb2RlZCA9IGF3YWl0IFV0aWxzLm1heWJlRGVjb2RlV2lyZShyYXcpO1xuICAgICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKGRlY29kZWQpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBbJHtvcExhYmVsfV0gQ0RVSSB3aXJlIGRlY29kZSBmYWlsZWQgZm9yYCwgdXJsLCBlKTtcbiAgICAgICAgICAgIC8vIEZhbGwgYmFjayB0byByYXcgc28gdGhlIGNhbGxlciBzdGlsbCBnZXRzICpzb21ldGhpbmcqO1xuICAgICAgICAgICAgLy8gbWlzc2luZyBfY2R1aV96IGFuZCBkZWNvZGUgZmFpbHVyZXMgYm90aCBmbG93IHRocm91Z2hcbiAgICAgICAgICAgIC8vIG1heWJlRGVjb2RlV2lyZSdzIG93biBwYXNzLXRocm91Z2ggYmVoYXZpb3VyLlxuICAgICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKHJhdyk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHBvc3REYXRhID0gKHVybCwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBzZWN1cmUsIGRhdGEpID0+IHtcbiAgICBpbnN0YW5jZS5kb1Bvc3REYXRhKHVybCwgd3JhcERlY29kZUlmVWlBc3NldCh1cmwsIHN1Y2Nlc3NDYWxsYmFjaywgJ3Bvc3REYXRhJyksIGVycm9yQ2FsbGJhY2ssIHNlY3VyZSwgZGF0YSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2VuZFJlcXVlc3QgPSAodXJsLCBzdWNjZXNzQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHNlY3VyZSwgdHJhY2spID0+IHtcbiAgICBpbnN0YW5jZS5kb0ZldGNoKHVybCwgd3JhcERlY29kZUlmVWlBc3NldCh1cmwsIHN1Y2Nlc3NDYWxsYmFjaywgJ3NlbmRSZXF1ZXN0JyksXG4gICAgICAgIGVycm9yQ2FsbGJhY2ssIHNlY3VyZSwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgdHJhY2spO1xufTtcblxuZXhwb3J0IGNvbnN0IGRvd25sb2FkID0gKHVybCwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBzZWN1cmUpID0+IHtcbiAgICBpbnN0YW5jZS5kb0ZldGNoKHVybCwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBzZWN1cmUsICdHRVQnLCB0cnVlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpbnZva2VScGMgPSAocnBjRGV0YWlscywgY29tcG9uZW50LCB2aWV3SWQsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgaW52YWxpZFBhcmFtQ2FsbGJhY2ssIHJldHVyblZhbHVlQmluZGluZywgc3VjY2Vzc01lc3NhZ2UsIGV2ZW50ID0gbnVsbCkgPT4ge1xuICAgIGluc3RhbmNlLmludm9rZVJwYyhycGNEZXRhaWxzLCBjb21wb25lbnQsIHZpZXdJZCwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBpbnZhbGlkUGFyYW1DYWxsYmFjaywgcmV0dXJuVmFsdWVCaW5kaW5nLCBzdWNjZXNzTWVzc2FnZSwgZXZlbnQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGludm9rZVJlc3QgPSAoc2VydmljZUNvbmZpZywgY29tcG9uZW50LCB2aWV3SWQsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgaW52YWxpZFBhcmFtQ2FsbGJhY2ssIHJldHVyblZhbHVlQmluZGluZywgc3VjY2Vzc01lc3NhZ2UsIGV2ZW50ID0gbnVsbCkgPT4ge1xuICAgIGluc3RhbmNlLmludm9rZVJlc3Qoc2VydmljZUNvbmZpZywgY29tcG9uZW50LCB2aWV3SWQsIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgaW52YWxpZFBhcmFtQ2FsbGJhY2ssIHJldHVyblZhbHVlQmluZGluZywgc3VjY2Vzc01lc3NhZ2UsIGV2ZW50KTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFDLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNELElBQUFDLG9CQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxtQkFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsTUFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUksV0FBQSxHQUFB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