@cometchat/chat-uikit-angular 4.0.1 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/AI/AIAssistBot/AIAssistBot.d.ts +7 -0
  2. package/AI/AIAssistBot/AIAssistBotDecorator.d.ts +11 -0
  3. package/AI/AIConversationStarter/AIConversationStarter.d.ts +2 -2
  4. package/AI/AIConversationStarter/AIConversationStarterDecorator.d.ts +3 -0
  5. package/AI/AIConversationSummary/AIConversationSummary.d.ts +7 -0
  6. package/AI/AIConversationSummary/AIConversationSummaryDecorator.d.ts +10 -0
  7. package/AI/AISmartReplies/AISmartReplies.d.ts +2 -2
  8. package/AI/AISmartReplies/AISmartRepliesDecorator.d.ts +3 -0
  9. package/Calls/CometChatCallLogDetails/cometchat-call-log-details/cometchat-call-log-details.component.d.ts +119 -0
  10. package/Calls/CometChatCallLogDetails/cometchat-call-log-details.module.d.ts +14 -0
  11. package/Calls/CometChatCallLogHistory/cometchat-call-log-history/cometchat-call-log-history.component.d.ts +111 -0
  12. package/Calls/CometChatCallLogHistory/cometchat-call-log-history.module.d.ts +10 -0
  13. package/Calls/CometChatCallLogParticipants/cometchat-call-log-participants/cometchat-call-log-participants.component.d.ts +76 -0
  14. package/Calls/CometChatCallLogParticipants/cometchat-call-log-participants.module.d.ts +10 -0
  15. package/Calls/CometChatCallLogRecordings/cometchat-call-log-recordings/cometchat-call-log-recordings.component.d.ts +90 -0
  16. package/Calls/CometChatCallLogRecordings/cometchat-call-log-recordings.module.d.ts +10 -0
  17. package/Calls/CometChatCallLogs/cometchat-call-logs/cometchat-call-logs.component.d.ts +133 -0
  18. package/Calls/CometChatCallLogs/cometchat-call-logs.module.d.ts +12 -0
  19. package/Calls/CometChatCallLogsWithDetails/cometchat-call-logs-with-details/cometchat-call-logs-with-details.component.d.ts +54 -0
  20. package/Calls/CometChatCallLogsWithDetails/cometchat-call-logs-with-details.module.d.ts +12 -0
  21. package/CometChatConversations/cometchat-conversations/cometchat-conversations.component.d.ts +18 -7
  22. package/CometChatList/cometchat-list.component.d.ts +12 -9
  23. package/CometChatMessageComposer/cometchat-message-composer/cometchat-message-composer.component.d.ts +65 -29
  24. package/CometChatMessageComposer/cometchat-message-composer.module.d.ts +3 -3
  25. package/CometChatMessageHeader/cometchat-message-header/cometchat-message-header.component.d.ts +7 -6
  26. package/CometChatMessageInformation/cometchat-message-information/cometchat-message-information.component.d.ts +6 -4
  27. package/CometChatMessageList/cometchat-message-list/cometchat-message-list.component.d.ts +96 -55
  28. package/CometChatMessageList/cometchat-message-list.module.d.ts +1 -1
  29. package/CometChatMessages/cometchat-messages/cometchat-messages.component.d.ts +19 -16
  30. package/CometChatMessages/cometchat-messages.module.d.ts +3 -2
  31. package/CometChatThreadedMessages/cometchat-threaded-messages/cometchat-threaded-messages.component.d.ts +8 -5
  32. package/Shared/CometChatUIkit/CometChatUIKit.d.ts +13 -3
  33. package/Shared/Framework/AIExtensionDataSource.d.ts +5 -0
  34. package/Shared/Framework/DataSource.d.ts +3 -1
  35. package/Shared/Framework/DataSourceDecorator.d.ts +3 -1
  36. package/Shared/Utils/CallDetailUtils.d.ts +8 -0
  37. package/Shared/Utils/CallLogUtils.d.ts +8 -0
  38. package/Shared/Utils/MessageUtils.d.ts +2 -1
  39. package/Shared/Views/AIAssistBotMessageList/aiassist-bot-message-list/aiassist-bot-message-list.component.d.ts +71 -0
  40. package/Shared/Views/AIAssistBotMessageList/aiassist-bot-message-list.module.d.ts +11 -0
  41. package/assets/InfoIcon.svg +13 -0
  42. package/assets/greaterThanIcon.svg +3 -0
  43. package/assets/incomingAudioCallIconUrl.svg +5 -0
  44. package/assets/incomingVideoCallIconUrl.svg +6 -0
  45. package/assets/missedAudioCallIconUrl.svg +5 -0
  46. package/assets/missedVideoCallIconUrl.svg +6 -0
  47. package/assets/outgoingAudioCallIconUrl.svg +5 -0
  48. package/assets/outgoingVideoCallIconUrl.svg +6 -0
  49. package/esm2020/AI/AIAssistBot/AIAssistBot.mjs +21 -0
  50. package/esm2020/AI/AIAssistBot/AIAssistBotDecorator.mjs +68 -0
  51. package/esm2020/AI/AIConversationStarter/AIConversationStarter.mjs +7 -4
  52. package/esm2020/AI/AIConversationStarter/AIConversationStarterDecorator.mjs +22 -1
  53. package/esm2020/AI/AIConversationSummary/AIConversationSummary.mjs +21 -0
  54. package/esm2020/AI/AIConversationSummary/AIConversationSummaryDecorator.mjs +32 -0
  55. package/esm2020/AI/AISmartReplies/AISmartReplies.mjs +7 -4
  56. package/esm2020/AI/AISmartReplies/AISmartRepliesDecorator.mjs +22 -1
  57. package/esm2020/Calls/CometChatCallButtons/cometchat-call-buttons/cometchat-call-buttons.component.mjs +3 -3
  58. package/esm2020/Calls/CometChatCallLogDetails/cometchat-call-log-details/cometchat-call-log-details.component.mjs +351 -0
  59. package/esm2020/Calls/CometChatCallLogDetails/cometchat-call-log-details.module.mjs +47 -0
  60. package/esm2020/Calls/CometChatCallLogHistory/cometchat-call-log-history/cometchat-call-log-history.component.mjs +352 -0
  61. package/esm2020/Calls/CometChatCallLogHistory/cometchat-call-log-history.module.mjs +21 -0
  62. package/esm2020/Calls/CometChatCallLogParticipants/cometchat-call-log-participants/cometchat-call-log-participants.component.mjs +189 -0
  63. package/esm2020/Calls/CometChatCallLogParticipants/cometchat-call-log-participants.module.mjs +21 -0
  64. package/esm2020/Calls/CometChatCallLogRecordings/cometchat-call-log-recordings/cometchat-call-log-recordings.component.mjs +246 -0
  65. package/esm2020/Calls/CometChatCallLogRecordings/cometchat-call-log-recordings.module.mjs +21 -0
  66. package/esm2020/Calls/CometChatCallLogs/cometchat-call-logs/cometchat-call-logs.component.mjs +585 -0
  67. package/esm2020/Calls/CometChatCallLogs/cometchat-call-logs.module.mjs +36 -0
  68. package/esm2020/Calls/CometChatCallLogsWithDetails/cometchat-call-logs-with-details/cometchat-call-logs-with-details.component.mjs +193 -0
  69. package/esm2020/Calls/CometChatCallLogsWithDetails/cometchat-call-logs-with-details.module.mjs +39 -0
  70. package/esm2020/CometChatBannedMembers/cometchat-banned-members/cometchat-banned-members.component.mjs +1 -1
  71. package/esm2020/CometChatConversations/cometchat-conversations/cometchat-conversations.component.mjs +72 -46
  72. package/esm2020/CometChatConversationsWithMessages/cometchat-conversations-with-messages/cometchat-conversations-with-messages.component.mjs +3 -3
  73. package/esm2020/CometChatGroupMembers/cometchat-group-members/cometchat-group-members.component.mjs +1 -1
  74. package/esm2020/CometChatGroups/cometchat-groups/cometchat-groups.component.mjs +1 -1
  75. package/esm2020/CometChatGroupsWithMessages/cometchat-groups-with-messages/cometchat-groups-with-messages.component.mjs +3 -3
  76. package/esm2020/CometChatList/cometchat-list.component.mjs +44 -28
  77. package/esm2020/CometChatMessageComposer/cometchat-message-composer/cometchat-message-composer.component.mjs +312 -115
  78. package/esm2020/CometChatMessageComposer/cometchat-message-composer.module.mjs +7 -14
  79. package/esm2020/CometChatMessageHeader/cometchat-message-header/cometchat-message-header.component.mjs +15 -17
  80. package/esm2020/CometChatMessageInformation/cometchat-message-information/cometchat-message-information.component.mjs +19 -21
  81. package/esm2020/CometChatMessageList/cometchat-message-list/cometchat-message-list.component.mjs +888 -300
  82. package/esm2020/CometChatMessageList/cometchat-message-list.module.mjs +5 -5
  83. package/esm2020/CometChatMessages/cometchat-messages/cometchat-messages.component.mjs +72 -51
  84. package/esm2020/CometChatMessages/cometchat-messages.module.mjs +10 -6
  85. package/esm2020/CometChatThreadedMessages/cometchat-threaded-messages/cometchat-threaded-messages.component.mjs +23 -23
  86. package/esm2020/CometChatUsers/cometchat-users/cometchat-users.component.mjs +1 -1
  87. package/esm2020/CometChatUsersWithMessages/cometchat-users-with-messages/cometchat-users-with-messages.component.mjs +3 -3
  88. package/esm2020/Shared/CometChatUIkit/CometChatUIKit.mjs +173 -36
  89. package/esm2020/Shared/Framework/AIExtensionDataSource.mjs +3 -0
  90. package/esm2020/Shared/Framework/ChatConfigurator.mjs +2 -2
  91. package/esm2020/Shared/Framework/DataSource.mjs +1 -1
  92. package/esm2020/Shared/Framework/DataSourceDecorator.mjs +5 -2
  93. package/esm2020/Shared/Utils/CallDetailUtils.mjs +72 -0
  94. package/esm2020/Shared/Utils/CallLogUtils.mjs +122 -0
  95. package/esm2020/Shared/Utils/MessageUtils.mjs +31 -20
  96. package/esm2020/Shared/Views/AIAssistBotMessageList/aiassist-bot-message-list/aiassist-bot-message-list.component.mjs +289 -0
  97. package/esm2020/Shared/Views/AIAssistBotMessageList/aiassist-bot-message-list.module.mjs +22 -0
  98. package/esm2020/public-api.mjs +106 -91
  99. package/fesm2015/cometchat-chat-uikit-angular.mjs +4249 -817
  100. package/fesm2015/cometchat-chat-uikit-angular.mjs.map +1 -1
  101. package/fesm2020/cometchat-chat-uikit-angular.mjs +4271 -836
  102. package/fesm2020/cometchat-chat-uikit-angular.mjs.map +1 -1
  103. package/package.json +6 -6
  104. package/public-api.d.ts +105 -90
  105. package/AI/AIEnabler.d.ts +0 -8
  106. package/AI/AIEnablerDecorator.d.ts +0 -7
  107. package/LICENSE.md +0 -3
  108. package/Shared/Views/CometChatCardView/cometchat-card-view/cometchat-card-view.component.d.ts +0 -71
  109. package/Shared/Views/CometChatCardView/cometchat-card-view.module.d.ts +0 -8
  110. package/esm2020/AI/AIEnabler.mjs +0 -70
  111. package/esm2020/AI/AIEnablerDecorator.mjs +0 -10
  112. package/esm2020/Shared/Views/CometChatCardView/cometchat-card-view/cometchat-card-view.component.mjs +0 -117
  113. package/esm2020/Shared/Views/CometChatCardView/cometchat-card-view.module.mjs +0 -23
@@ -1,27 +1,28 @@
1
- import { Component, Input, ViewChild, ChangeDetectionStrategy } from "@angular/core";
1
+ import { Component, Input, ViewChild, ChangeDetectionStrategy, EventEmitter, } from "@angular/core";
2
2
  import { CometChat } from "@cometchat/chat-sdk-javascript";
3
- import { fontHelper, CometChatMessageEvents, CometChatGroupEvents, CometChatUserEvents, CometChatUIKitConstants } from "@cometchat/uikit-resources";
4
- import { MessageHeaderConfiguration, MessageListConfiguration, MessageComposerConfiguration, ThreadedMessagesConfiguration, DetailsConfiguration, MessagesStyle, MessageHeaderStyle } from "@cometchat/uikit-shared";
3
+ import { fontHelper, CometChatMessageEvents, CometChatGroupEvents, CometChatUserEvents, CometChatUIKitConstants, CometChatUIEvents, } from "@cometchat/uikit-resources";
4
+ import { MessageHeaderConfiguration, MessageListConfiguration, MessageComposerConfiguration, ThreadedMessagesConfiguration, DetailsConfiguration, MessagesStyle, MessageHeaderStyle, } from "@cometchat/uikit-shared";
5
5
  import { ChatConfigurator } from "../../Shared/Framework/ChatConfigurator";
6
6
  import { CometChatException } from "../../Shared/Utils/ComeChatException";
7
7
  import * as i0 from "@angular/core";
8
8
  import * as i1 from "../../CometChatTheme.service";
9
- import * as i2 from "../../CometChatMessageHeader/cometchat-message-header/cometchat-message-header.component";
10
- import * as i3 from "../../CometChatMessageList/cometchat-message-list/cometchat-message-list.component";
11
- import * as i4 from "../../CometChatMessageComposer/cometchat-message-composer/cometchat-message-composer.component";
12
- import * as i5 from "../../CometChatThreadedMessages/cometchat-threaded-messages/cometchat-threaded-messages.component";
13
- import * as i6 from "../../CometChatDetails/cometchat-details/cometchat-details.component";
14
- import * as i7 from "../../Calls/CometChatCallButtons/cometchat-call-buttons/cometchat-call-buttons.component";
15
- import * as i8 from "@angular/common";
9
+ import * as i2 from "../../Shared/Views/AIAssistBotMessageList/aiassist-bot-message-list/aiassist-bot-message-list.component";
10
+ import * as i3 from "../../CometChatMessageHeader/cometchat-message-header/cometchat-message-header.component";
11
+ import * as i4 from "../../CometChatMessageList/cometchat-message-list/cometchat-message-list.component";
12
+ import * as i5 from "../../CometChatMessageComposer/cometchat-message-composer/cometchat-message-composer.component";
13
+ import * as i6 from "../../CometChatThreadedMessages/cometchat-threaded-messages/cometchat-threaded-messages.component";
14
+ import * as i7 from "../../CometChatDetails/cometchat-details/cometchat-details.component";
15
+ import * as i8 from "../../Calls/CometChatCallButtons/cometchat-call-buttons/cometchat-call-buttons.component";
16
+ import * as i9 from "@angular/common";
16
17
  /**
17
- *
18
- * CometChatMessages is a wrapper component for messageList, messageHeader, messageComposer and liveReaction component.
19
- *
20
- * @version 1.0.0
21
- * @author CometChatTeam
22
- * @copyright © 2022 CometChat Inc.
23
- *
24
- */
18
+ *
19
+ * CometChatMessages is a wrapper component for messageList, messageHeader, messageComposer and liveReaction component.
20
+ *
21
+ * @version 1.0.0
22
+ * @author CometChatTeam
23
+ * @copyright © 2022 CometChat Inc.
24
+ *
25
+ */
25
26
  export class CometChatMessagesComponent {
26
27
  constructor(ref, themeService, elementRef) {
27
28
  this.ref = ref;
@@ -37,11 +38,13 @@ export class CometChatMessagesComponent {
37
38
  width: "100%",
38
39
  height: "100%",
39
40
  background: "white",
40
- borderRadius: "none", messageTextColor: "rgba(20, 20, 20, 0.33)",
41
+ borderRadius: "none",
42
+ messageTextColor: "rgba(20, 20, 20, 0.33)",
41
43
  messageTextFont: "700 22px Inter",
42
44
  };
43
45
  this.hideMessageHeader = false;
44
46
  this.hideDetails = false;
47
+ this.conversationSummaryClicked = new EventEmitter();
45
48
  this.callButtonsStyle = {
46
49
  width: "100%",
47
50
  height: "100%",
@@ -51,7 +54,7 @@ export class CometChatMessagesComponent {
51
54
  buttonPadding: "0",
52
55
  buttonBackground: "transparent",
53
56
  buttonBorder: "0 4px",
54
- buttonBorderRadius: "8px"
57
+ buttonBorderRadius: "8px",
55
58
  };
56
59
  this.messageToBeEdited = null;
57
60
  this.liveReaction = false;
@@ -69,6 +72,7 @@ export class CometChatMessagesComponent {
69
72
  };
70
73
  this.liveReactionTimeout = 0;
71
74
  this.openThreadedMessages = false;
75
+ this.showAiBotChat = false;
72
76
  this.disableUsersPresence = false;
73
77
  this.protectedGroupIcon = "assets/Locked.svg";
74
78
  this.privateGroupIcon = "assets/Private.svg";
@@ -115,7 +119,7 @@ export class CometChatMessagesComponent {
115
119
  borderRadius: "2px",
116
120
  separatorColor: "",
117
121
  activeBackground: "transparent",
118
- hoverBackground: "transparent"
122
+ hoverBackground: "transparent",
119
123
  };
120
124
  this.infoIconStyle = "assets/Info.svg";
121
125
  this.detailsButtonStyle = {
@@ -125,7 +129,7 @@ export class CometChatMessagesComponent {
125
129
  borderRadius: "0",
126
130
  background: "transparent",
127
131
  buttonIconTint: "#3399FF",
128
- padding: "0 8px"
132
+ padding: "0 8px",
129
133
  };
130
134
  this.enableCalling = false;
131
135
  this.openDetails = false;
@@ -171,27 +175,24 @@ export class CometChatMessagesComponent {
171
175
  ngOnInit() {
172
176
  this.subscribeToEvents();
173
177
  this.setMessagesStyle();
174
- CometChat.getLoggedinUser().then((user) => {
178
+ CometChat.getLoggedinUser()
179
+ .then((user) => {
175
180
  this.loggedInUser = user;
176
- }).catch((error) => {
181
+ })
182
+ .catch((error) => {
177
183
  if (this.onError) {
178
184
  this.onError(error);
179
185
  }
180
186
  });
181
- if (ChatConfigurator.names.includes('calling')) {
187
+ if (ChatConfigurator.names.includes("calling")) {
182
188
  this.enableCalling = true;
183
189
  }
184
190
  }
185
- ngAfterViewInit() {
186
- setTimeout(() => {
187
- const divHeight = this.elementRef.nativeElement.offsetHeight;
188
- const divWidth = this.elementRef.nativeElement.offsetWidth;
189
- }, 1000);
190
- }
191
191
  subscribeToEvents() {
192
192
  this.ccLiveReaction = CometChatMessageEvents.ccLiveReaction.subscribe((reactionName) => {
193
193
  if (reactionName && reactionName != "") {
194
- let iconURL = this.messageComposerConfiguration.LiveReactionIconURL ?? "assets/heart-reaction.png";
194
+ let iconURL = this.messageComposerConfiguration.LiveReactionIconURL ??
195
+ "assets/heart-reaction.png";
195
196
  this.liveReactionStart(iconURL);
196
197
  this.ref.detectChanges();
197
198
  }
@@ -226,6 +227,16 @@ export class CometChatMessagesComponent {
226
227
  this.ref.detectChanges();
227
228
  }
228
229
  });
230
+ this.ccShowPanel = CometChatUIEvents.ccShowPanel.subscribe((e) => {
231
+ this.currentAskAIBot = e.child?.bot;
232
+ if (e.child?.showBotView) {
233
+ this.showAiBotChat = true;
234
+ }
235
+ else {
236
+ this.showAiBotChat = false;
237
+ }
238
+ this.ref.detectChanges();
239
+ });
229
240
  }
230
241
  unsubscribeToEvents() {
231
242
  this.ccLiveReaction?.unsubscribe();
@@ -233,6 +244,7 @@ export class CometChatMessagesComponent {
233
244
  this.ccGroupLeft?.unsubscribe();
234
245
  this.ccUserBlocked?.unsubscribe();
235
246
  this.ccUserUnBlocked?.unsubscribe();
247
+ this.ccShowPanel?.unsubscribe();
236
248
  }
237
249
  setMessagesStyle() {
238
250
  let defaultStyle = new MessagesStyle({
@@ -246,12 +258,19 @@ export class CometChatMessagesComponent {
246
258
  });
247
259
  this.messagesStyle = {
248
260
  ...defaultStyle,
249
- ...this.messagesStyle
261
+ ...this.messagesStyle,
250
262
  };
251
- this.detailsConfiguration.detailsStyle.border = this.detailsConfiguration.detailsStyle.border ?? "none";
252
- this.detailsConfiguration.addMembersConfiguration.addMembersStyle.border = this.detailsConfiguration.addMembersConfiguration.addMembersStyle.border ?? "none";
253
- this.detailsConfiguration.bannedMembersConfiguration.bannedMembersStyle.border = this.detailsConfiguration.bannedMembersConfiguration.bannedMembersStyle.border ?? "none";
254
- this.detailsConfiguration.groupMembersConfiguration.groupMembersStyle.border = this.detailsConfiguration.groupMembersConfiguration.groupMembersStyle.border ?? "none";
263
+ this.detailsConfiguration.detailsStyle.border =
264
+ this.detailsConfiguration.detailsStyle.border ?? "none";
265
+ this.detailsConfiguration.addMembersConfiguration.addMembersStyle.border =
266
+ this.detailsConfiguration.addMembersConfiguration.addMembersStyle
267
+ .border ?? "none";
268
+ this.detailsConfiguration.bannedMembersConfiguration.bannedMembersStyle.border =
269
+ this.detailsConfiguration.bannedMembersConfiguration.bannedMembersStyle
270
+ .border ?? "none";
271
+ this.detailsConfiguration.groupMembersConfiguration.groupMembersStyle.border =
272
+ this.detailsConfiguration.groupMembersConfiguration.groupMembersStyle
273
+ .border ?? "none";
255
274
  }
256
275
  getAuxilaryView() {
257
276
  if (this.messageHeaderConfiguration.menu) {
@@ -266,21 +285,20 @@ export class CometChatMessagesComponent {
266
285
  }
267
286
  ngOnChanges(change) {
268
287
  try {
269
- if (change[CometChatUIKitConstants.MessageReceiverType.user] || change[CometChatUIKitConstants.MessageReceiverType.group]) {
288
+ if (change[CometChatUIKitConstants.MessageReceiverType.user] ||
289
+ change[CometChatUIKitConstants.MessageReceiverType.group]) {
270
290
  this.openThreadedMessages = false;
271
291
  this.openDetails = false;
272
292
  if (this.user) {
273
293
  if (Object.keys(this.user).length === 1) {
274
- CometChat.getUser(this.user)
275
- .then((user) => {
294
+ CometChat.getUser(this.user).then((user) => {
276
295
  this.user = user;
277
296
  });
278
297
  }
279
298
  }
280
299
  else if (this.group) {
281
300
  if (Object.keys(this.group).length === 1) {
282
- CometChat.getGroup(this.group)
283
- .then((group) => {
301
+ CometChat.getGroup(this.group).then((group) => {
284
302
  this.group = group;
285
303
  });
286
304
  }
@@ -300,19 +318,20 @@ export class CometChatMessagesComponent {
300
318
  }
301
319
  chatListStyle() {
302
320
  return {
303
- background: this.messagesStyle.background || this.themeService.theme.palette.getBackground(),
321
+ background: this.messagesStyle.background ||
322
+ this.themeService.theme.palette.getBackground(),
304
323
  height: this.messagesStyle.height,
305
324
  width: this.messagesStyle.width,
306
325
  border: this.messagesStyle.border,
307
- borderRadius: this.messagesStyle.borderRadius
326
+ borderRadius: this.messagesStyle.borderRadius,
308
327
  };
309
328
  }
310
329
  /**
311
330
  * public methods
312
- * messageListRef methods
313
- * This metthod will append message in message list
314
- * @param {CometChat.BaseMessage} message
315
- */
331
+ * messageListRef methods
332
+ * This metthod will append message in message list
333
+ * @param {CometChat.BaseMessage} message
334
+ */
316
335
  addMessage(message) {
317
336
  this.messageListRef.addMessage(message);
318
337
  }
@@ -355,10 +374,10 @@ export class CometChatMessagesComponent {
355
374
  }
356
375
  }
357
376
  CometChatMessagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CometChatMessagesComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.CometChatThemeService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
358
- CometChatMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: CometChatMessagesComponent, selector: "cometchat-messages", inputs: { user: "user", group: "group", hideMessageComposer: "hideMessageComposer", disableTyping: "disableTyping", messageHeaderConfiguration: "messageHeaderConfiguration", messageListConfiguration: "messageListConfiguration", messageComposerConfiguration: "messageComposerConfiguration", threadedMessageConfiguration: "threadedMessageConfiguration", detailsConfiguration: "detailsConfiguration", customSoundForIncomingMessages: "customSoundForIncomingMessages", customSoundForOutgoingMessages: "customSoundForOutgoingMessages", disableSoundForMessages: "disableSoundForMessages", messagesStyle: "messagesStyle", messageHeaderView: "messageHeaderView", messageComposerView: "messageComposerView", messageListView: "messageListView", hideMessageHeader: "hideMessageHeader", hideDetails: "hideDetails", auxiliaryMenu: "auxiliaryMenu" }, viewQueries: [{ propertyName: "messageComposerRef", first: true, predicate: ["messageComposerRef"], descendants: true }, { propertyName: "messageListRef", first: true, predicate: ["messageListRef"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"cc-messages__wrapper\">\n<div class=\"cc-messages\" [ngStyle]=\"chatListStyle()\" *ngIf=\"user || group\">\n<div class=\"cc-messages__header\" *ngIf=\"!hideMessageHeader\">\n <div *ngIf=\"messageHeaderView; else customHeaderView\" class=\"cc-messages__header-customview\">\n <ng-container *ngTemplateOutlet=\"messageHeaderView\">\n </ng-container>\n </div>\n <ng-template #customHeaderView>\n <cometchat-message-header [user]=\"user\" [group]=\"group\" [subtitleView]=\"messageHeaderConfiguration.subtitleView\"\n [disableUsersPresence]=\"messageHeaderConfiguration.disableUsersPresence\" [protectedGroupIcon]=\"messageHeaderConfiguration.protectedGroupIcon\" [privateGroupIcon]=\"messageHeaderConfiguration.privateGroupIcon\" [menu]=\"headerMenu\" [messageHeaderStyle]=\"messageHeaderConfiguration.messageHeaderStyle\"\n [backButtonIconURL]=\"messageHeaderConfiguration.backButtonIconURL\" [hideBackButton]=\"messageHeaderConfiguration.hideBackButton\" [onError]=\"messageHeaderConfiguration.onError\" [onBack]=\"messageHeaderConfiguration.onBack\" [listItemStyle]=\"messageHeaderConfiguration.listItemStyle\" [statusIndicatorStyle]=\"messageHeaderConfiguration.statusIndicatorStyle\"\n [avatarStyle]=\"messageHeaderConfiguration.avatarStyle\"\n >\n </cometchat-message-header>\n </ng-template>\n</div>\n<div class=\"cc-messages__list\">\n <cometchat-message-list #messageListRef [messageInformationConfiguration]=\"messageListConfiguration.messageInformationConfiguration\" [disableSoundForMessages]=\"disableSoundForMessages\" [customSoundForMessages]=\"customSoundForIncomingMessages\" [emptyStateView]=\"messageListConfiguration.emptyStateView\" [loadingIconURL]=\"messageListConfiguration?.loadingIconURL!\" [loadingStateView]=\"messageListConfiguration.loadingStateView\" [user]=\"user\" [group]=\"group\"\n [errorStateView]=\"messageListConfiguration.errorStateView\" [disableReceipt]=\"messageListConfiguration.disableReceipt\" [readIcon]=\"messageListConfiguration.readIcon\" [deliveredIcon]=\"messageListConfiguration.deliveredIcon\" [sentIcon]=\"messageListConfiguration.sentIcon\" [waitIcon]=\"messageListConfiguration.waitIcon\"\n [errorIcon]=\"messageListConfiguration.errorIcon\" [alignment]=\"messageListConfiguration.alignment\" [showAvatar]=\"messageListConfiguration.showAvatar\" [datePattern]=\"messageListConfiguration.datePattern\" [timestampAlignment]=\"messageListConfiguration.timestampAlignment\" [DateSeparatorPattern]=\"messageListConfiguration.DateSeparatorPattern\"\n [templates]=\"messageListConfiguration.templates\" [messagesRequestBuilder]=\"messageListConfiguration.messagesRequestBuilder\" [thresholdValue]=\"messageListConfiguration.thresholdValue\" [onThreadRepliesClick]=\"messageListConfiguration.onThreadRepliesClick || openThreadView\" [headerView]=\"messageListConfiguration.headerView\" [footerView]=\"messageListConfiguration.footerView\"\n [avatarStyle]=\"messageListConfiguration.avatarStyle\" [scrollToBottomOnNewMessages]=\"messageListConfiguration.scrollToBottomOnNewMessages\" [backdropStyle]=\"messageListConfiguration.backdropStyle\" [dateSeparatorStyle]=\"messageListConfiguration.dateSeparatorStyle\" [messageListStyle]=\"messageListConfiguration.messageListStyle\" [onError]=\"messageListConfiguration.onError\"\n >\n </cometchat-message-list>\n</div>\n<div class=\"cc-messages__composer\" *ngIf=\"!hideMessageComposer\">\n <div *ngIf=\"messageComposerView; else customComposerView\" class=\"cc-messages__composer--customview\">\n <ng-container *ngTemplateOutlet=\"messageComposerView\">\n </ng-container>\n </div>\n <ng-template #customComposerView>\n <cometchat-message-composer #messageComposerRef [disableSoundForMessages]=\"disableSoundForMessages\"\n [voiceRecordingStopIconURL]=\"messageComposerConfiguration.voiceRecordingStopIconURL\"\n [voiceRecordingStartIconURL]=\"messageComposerConfiguration.voiceRecordingStartIconURL\"\n [voiceRecordingCloseIconURL]=\"messageComposerConfiguration.voiceRecordingCloseIconURL\"\n [voiceRecordingSubmitIconURL]=\"messageComposerConfiguration.voiceRecordingSubmitIconURL\"\n [mediaRecorderStyle]=\"messageComposerConfiguration.mediaRecorderStyle\"\n [customSoundForMessages]=\"customSoundForOutgoingMessages\"\n [user]=\"user\" [group]=\"group\" [text]=\"messageComposerConfiguration.text\" [headerView]=\"messageComposerConfiguration.headerView\" [onTextChange]=\"messageComposerConfiguration.onTextChange\" [attachmentIconURL]=\"messageComposerConfiguration.attachmentIconURL\"\n [attachmentOptions]=\"messageComposerConfiguration.attachmentOptions\" [secondaryButtonView]=\"messageComposerConfiguration.secondaryButtonView\" [auxilaryButtonView]=\"messageComposerConfiguration.auxilaryButtonView\" [auxiliaryButtonsAlignment]=\"messageComposerConfiguration.auxiliaryButtonsAlignment\"\n [sendButtonView]=\"messageComposerConfiguration.sendButtonView\" [hideLiveReaction]=\"messageComposerConfiguration.hideLiveReaction\" [LiveReactionIconURL]=\"messageComposerConfiguration.LiveReactionIconURL\" [messageComposerStyle]=\"messageComposerConfiguration.messageComposerStyle\" [onSendButtonClick]=\"messageComposerConfiguration.onSendButtonClick\"\n [onSendButtonClick]=\"messageComposerConfiguration.onSendButtonClick\" [onError]=\"messageComposerConfiguration.onError\"\n >\n </cometchat-message-composer>\n </ng-template>\n</div>\n </div>\n <div class=\"cc-messages__livereaction\">\n <cometchat-live-reaction *ngIf=\"liveReaction\" [reactionIconURL]=\"reactionName\"></cometchat-live-reaction>\n</div>\n<div *ngIf=\"openThreadedMessages\" class=\"cc-messages__threadedmessages\">\n<cometchat-threaded-messages [onClose]=\"closeThreadView\" [threadedMessagesStyle]=\"threadedMessageConfiguration.threadedMessagesStyle\" [messageActionView]=\"threadedMessageConfiguration.messageActionView\" [closeIconURL]=\"threadedMessageConfiguration.closeIconURL\" [onError]=\"threadedMessageConfiguration.onError\" [bubbleView]=\"threadedMessageConfiguration.bubbleView || parentBubbleView\" [parentMessage]=\"threadMessageObject\" [user]=\"user\" [group]=\"group\"></cometchat-threaded-messages>\n</div>\n<div *ngIf=\"openDetails\" class=\"cc-messages__details\">\n <cometchat-details [backdropStyle]=\"detailsConfiguration.backdropStyle\" [transferOwnershipConfiguration]=\"detailsConfiguration.transferOwnershipConfiguration\" [groupMembersConfiguration]=\"detailsConfiguration.groupMembersConfiguration\" [bannedMembersConfiguration]=\"detailsConfiguration.bannedMembersConfiguration\" [addMembersConfiguration]=\"detailsConfiguration.addMembersConfiguration\" [onClose]=\"detailsConfiguration.onClose || closeDetailsPage\" [listItemStyle]=\"detailsConfiguration.listItemStyle\" [detailsStyle]=\"detailsConfiguration.detailsStyle\" [avatarStyle]=\"detailsConfiguration.avatarStyle\" [statusIndicatorStyle]=\"detailsConfiguration.statusIndicatorStyle\" [leaveDialogStyle]=\"detailsConfiguration.leaveDialogStyle\" [data]=\"detailsConfiguration.data\" [customProfileView]=\"detailsConfiguration.customProfileView\" [subtitleView]=\"detailsConfiguration.subtitleView\" [hideProfile]=\"detailsConfiguration.hideProfile\" [onError]=\"detailsConfiguration.onError\" [closeButtonIconURL]=\"detailsConfiguration.closeButtonIconURL\" [user]=\"user\" [group]=\"group\"></cometchat-details>\n </div>\n</div>\n<ng-template #headerMenu>\n <div class=\"cc-messages__headermenu\">\n<div class=\"cc-messages__auxiliarymenu\" *ngIf=\"getAuxilaryView(); else elseBlock\">\n <ng-container *ngTemplateOutlet=\"getAuxilaryView()\">\n </ng-container>\n</div>\n <ng-template #elseBlock>\n <cometchat-call-buttons *ngIf=\"enableCalling\" voiceCallIconText=\"\" videoCallIconText=\"\" [user]=\"user\" [group]=\"group\" [callButtonsStyle]=\"callButtonsStyle\">\n </cometchat-call-buttons>\n </ng-template>\n <cometchat-button *ngIf=\"!hideDetails\" [iconURL]=\"infoIconStyle\" [buttonStyle]=\"detailsButtonStyle\" (cc-button-clicked)=\"openDetailsPage()\"></cometchat-button>\n </div>\n</ng-template>\n", styles: ["*{box-sizing:border-box;margin:0;padding:0}.cc-messages__wrapper{position:relative;height:100%;width:100%}.cc-messages{display:flex;flex-direction:column;position:relative;height:100%;width:100%;box-sizing:border-box;justify-content:space-between}.cc-messages__headermenu{display:flex;justify-content:center;align-items:center}.cc-messages__threadedmessages,.cc-messages__details{position:absolute;top:0;left:0;height:100%;width:100%;max-height:100%;overflow-y:auto;overflow-x:hidden;max-width:100%;z-index:1}.cc-messages__header{width:100%}.cc-messages__list{overflow:hidden;width:100%;height:100%}cometchat-threaded-messages{height:100%;display:flex}.cc-messages__composer{width:100%;display:flex;flex-direction:column;justify-content:flex-end}\n"], components: [{ type: i2.CometChatMessageHeaderComponent, selector: "cometchat-message-header", inputs: ["avatarStyle", "statusIndicatorStyle", "messageHeaderStyle", "listItemStyle", "subtitleView", "disableUsersPresence", "disableTyping", "protectedGroupIcon", "privateGroupIcon", "menu", "user", "group", "backButtonIconURL", "hideBackButton", "listItemView", "onError", "onBack"] }, { type: i3.CometChatMessageListComponent, selector: "cometchat-message-list", inputs: ["hideError", "errorStateView", "loadingStateView", "emptyStateView", "errorStateText", "emptyStateText", "loadingIconURL", "user", "group", "disableReceipt", "disableSoundForMessages", "customSoundForMessages", "readIcon", "deliveredIcon", "sentIcon", "waitIcon", "errorIcon", "alignment", "showAvatar", "datePattern", "timestampAlignment", "DateSeparatorPattern", "templates", "messagesRequestBuilder", "newMessageIndicatorText", "scrollToBottomOnNewMessages", "thresholdValue", "onThreadRepliesClick", "headerView", "footerView", "parentMessageId", "avatarStyle", "backdropStyle", "dateSeparatorStyle", "messageListStyle", "onError", "messageInformationConfiguration"] }, { type: i4.CometChatMessageComposerComponent, selector: "cometchat-message-composer", inputs: ["user", "group", "disableSoundForMessages", "customSoundForMessage", "disableTypingEvents", "text", "placeholderText", "headerView", "onTextChange", "attachmentIconURL", "attachmentOptions", "secondaryButtonView", "auxilaryButtonView", "auxiliaryButtonsAlignment", "sendButtonView", "parentMessageId", "hideLiveReaction", "LiveReactionIconURL", "messageComposerStyle", "onSendButtonClick", "onError", "backdropStyle", "hideVoiceRecording", "mediaRecorderStyle", "voiceRecordingIconURL", "voiceRecordingCloseIconURL", "voiceRecordingStartIconURL", "voiceRecordingStopIconURL", "voiceRecordingSubmitIconURL"] }, { type: i5.CometChatThreadedMessagesComponent, selector: "cometchat-threaded-messages", inputs: ["onClose", "onError", "parentMessage", "title", "closeIconURL", "bubbleView", "messageActionView", "messageListConfiguration", "messageComposerConfiguration", "threadedMessagesStyle"] }, { type: i6.CometChatDetailsComponent, selector: "cometchat-details", inputs: ["group", "user", "title", "closeButtonIconURL", "hideProfile", "subtitleView", "customProfileView", "data", "disableUsersPresence", "privateGroupIcon", "protectedGroupIcon", "onError", "onClose", "leaveGroupConfirmButtonText", "leaveGroupCancelButtonText", "leaveGroupDialogMessage", "leaveGroupDialogStyle", "deleteGroupConfirmButtonText", "deleteGroupDialogMessage", "deleteGroupCancelButtonText", "deleteGroupDialogStyle", "transferOwnershipConfirmButtonText", "transferOwnershipDialogMessage", "transferOwnershipCancelButtonText", "transferOwnershipDialogStyle", "addMembersConfiguration", "bannedMembersConfiguration", "groupMembersConfiguration", "transferOwnershipConfiguration", "statusIndicatorStyle", "backdropStyle", "avatarStyle", "detailsStyle", "listItemStyle"] }, { type: i7.CometChatCallButtonsComponent, selector: "cometchat-call-buttons", inputs: ["user", "group", "voiceCallIconURL", "voiceCallIconText", "voiceCallIconHoverText", "videoCallIconURL", "videoCallIconText", "videoCallIconHoverText", "onVoiceCallClick", "onVideoCallClick", "onError", "callButtonsStyle", "outgoingCallConfiguration", "ongoingCallConfiguration"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
377
+ CometChatMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: CometChatMessagesComponent, selector: "cometchat-messages", inputs: { user: "user", group: "group", currentAskAIBot: "currentAskAIBot", hideMessageComposer: "hideMessageComposer", disableTyping: "disableTyping", messageHeaderConfiguration: "messageHeaderConfiguration", messageListConfiguration: "messageListConfiguration", messageComposerConfiguration: "messageComposerConfiguration", threadedMessageConfiguration: "threadedMessageConfiguration", detailsConfiguration: "detailsConfiguration", customSoundForIncomingMessages: "customSoundForIncomingMessages", customSoundForOutgoingMessages: "customSoundForOutgoingMessages", disableSoundForMessages: "disableSoundForMessages", messagesStyle: "messagesStyle", messageHeaderView: "messageHeaderView", messageComposerView: "messageComposerView", messageListView: "messageListView", hideMessageHeader: "hideMessageHeader", hideDetails: "hideDetails", auxiliaryMenu: "auxiliaryMenu" }, viewQueries: [{ propertyName: "messageComposerRef", first: true, predicate: ["messageComposerRef"], descendants: true }, { propertyName: "messageListRef", first: true, predicate: ["messageListRef"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"cc-messages__wrapper\">\n <cometchat-backdrop *ngIf=\"showAiBotChat\">\n <aiassist-bot-message-list [user]=\"user\" [group]=\"group\"\n [currentAskAIBot]=\"currentAskAIBot\"></aiassist-bot-message-list>\n </cometchat-backdrop>\n <div class=\"cc-messages\" [ngStyle]=\"chatListStyle()\" *ngIf=\"user || group\">\n <div class=\"cc-messages__header\" *ngIf=\"!hideMessageHeader\">\n <div *ngIf=\"messageHeaderView; else customHeaderView\" class=\"cc-messages__header-customview\">\n <ng-container *ngTemplateOutlet=\"messageHeaderView\">\n </ng-container>\n </div>\n <ng-template #customHeaderView>\n <cometchat-message-header [user]=\"user\" [group]=\"group\" [subtitleView]=\"messageHeaderConfiguration.subtitleView\"\n [disableUsersPresence]=\"messageHeaderConfiguration.disableUsersPresence\"\n [protectedGroupIcon]=\"messageHeaderConfiguration.protectedGroupIcon\"\n [privateGroupIcon]=\"messageHeaderConfiguration.privateGroupIcon\" [menu]=\"headerMenu\"\n [messageHeaderStyle]=\"messageHeaderConfiguration.messageHeaderStyle\"\n [backButtonIconURL]=\"messageHeaderConfiguration.backButtonIconURL\"\n [hideBackButton]=\"messageHeaderConfiguration.hideBackButton\" [onError]=\"messageHeaderConfiguration.onError\"\n [onBack]=\"messageHeaderConfiguration.onBack\" [listItemStyle]=\"messageHeaderConfiguration.listItemStyle\"\n [statusIndicatorStyle]=\"messageHeaderConfiguration.statusIndicatorStyle\"\n [avatarStyle]=\"messageHeaderConfiguration.avatarStyle\">\n </cometchat-message-header>\n </ng-template>\n </div>\n <div class=\"cc-messages__list\">\n <cometchat-message-list #messageListRef\n [messageInformationConfiguration]=\"messageListConfiguration.messageInformationConfiguration\"\n [disableSoundForMessages]=\"disableSoundForMessages\" [customSoundForMessages]=\"customSoundForIncomingMessages\"\n [emptyStateView]=\"messageListConfiguration.emptyStateView\"\n [loadingIconURL]=\"messageListConfiguration?.loadingIconURL!\"\n [loadingStateView]=\"messageListConfiguration.loadingStateView\" [user]=\"user\" [group]=\"group\"\n [errorStateView]=\"messageListConfiguration.errorStateView\"\n [disableReceipt]=\"messageListConfiguration.disableReceipt\" [readIcon]=\"messageListConfiguration.readIcon\"\n [deliveredIcon]=\"messageListConfiguration.deliveredIcon\" [sentIcon]=\"messageListConfiguration.sentIcon\"\n [waitIcon]=\"messageListConfiguration.waitIcon\" [errorIcon]=\"messageListConfiguration.errorIcon\"\n [alignment]=\"messageListConfiguration.alignment\" [showAvatar]=\"messageListConfiguration.showAvatar\"\n [datePattern]=\"messageListConfiguration.datePattern\"\n [timestampAlignment]=\"messageListConfiguration.timestampAlignment\"\n [DateSeparatorPattern]=\"messageListConfiguration.DateSeparatorPattern\"\n [templates]=\"messageListConfiguration.templates\"\n [messagesRequestBuilder]=\"messageListConfiguration.messagesRequestBuilder\"\n [thresholdValue]=\"messageListConfiguration.thresholdValue\"\n [onThreadRepliesClick]=\"messageListConfiguration.onThreadRepliesClick || openThreadView\"\n [headerView]=\"messageListConfiguration.headerView\" [footerView]=\"messageListConfiguration.footerView\"\n [avatarStyle]=\"messageListConfiguration.avatarStyle\"\n [scrollToBottomOnNewMessages]=\"messageListConfiguration.scrollToBottomOnNewMessages\"\n [backdropStyle]=\"messageListConfiguration.backdropStyle\"\n [dateSeparatorStyle]=\"messageListConfiguration.dateSeparatorStyle\"\n [messageListStyle]=\"messageListConfiguration.messageListStyle\" [onError]=\"messageListConfiguration.onError\">\n </cometchat-message-list>\n </div>\n <div class=\"cc-messages__composer\" *ngIf=\"!hideMessageComposer\">\n <div *ngIf=\"messageComposerView; else customComposerView\" class=\"cc-messages__composer--customview\">\n <ng-container *ngTemplateOutlet=\"messageComposerView\">\n </ng-container>\n </div>\n <ng-template #customComposerView>\n <cometchat-message-composer #messageComposerRef [disableSoundForMessages]=\"disableSoundForMessages\"\n [voiceRecordingStopIconURL]=\"messageComposerConfiguration.voiceRecordingStopIconURL\"\n [voiceRecordingStartIconURL]=\"messageComposerConfiguration.voiceRecordingStartIconURL\"\n [voiceRecordingCloseIconURL]=\"messageComposerConfiguration.voiceRecordingCloseIconURL\"\n [voiceRecordingSubmitIconURL]=\"messageComposerConfiguration.voiceRecordingSubmitIconURL\"\n [mediaRecorderStyle]=\"messageComposerConfiguration.mediaRecorderStyle\"\n [customSoundForMessages]=\"customSoundForOutgoingMessages\" [user]=\"user\" [group]=\"group\"\n [text]=\"messageComposerConfiguration.text\" [headerView]=\"messageComposerConfiguration.headerView\"\n [onTextChange]=\"messageComposerConfiguration.onTextChange\"\n [attachmentIconURL]=\"messageComposerConfiguration.attachmentIconURL\"\n [attachmentOptions]=\"messageComposerConfiguration.attachmentOptions\"\n [secondaryButtonView]=\"messageComposerConfiguration.secondaryButtonView\"\n [auxilaryButtonView]=\"messageComposerConfiguration.auxilaryButtonView\"\n [auxiliaryButtonsAlignment]=\"messageComposerConfiguration.auxiliaryButtonsAlignment\"\n [sendButtonView]=\"messageComposerConfiguration.sendButtonView\"\n [hideLiveReaction]=\"messageComposerConfiguration.hideLiveReaction\"\n [LiveReactionIconURL]=\"messageComposerConfiguration.LiveReactionIconURL\"\n [messageComposerStyle]=\"messageComposerConfiguration.messageComposerStyle\"\n [onSendButtonClick]=\"messageComposerConfiguration.onSendButtonClick\"\n [onSendButtonClick]=\"messageComposerConfiguration.onSendButtonClick\"\n [onError]=\"messageComposerConfiguration.onError\"\n [actionSheetStyle]=\"messageComposerConfiguration.actionSheetStyle\"\n [aiOptionsStyle]=\"messageComposerConfiguration.AIOptionsStyle\"\n [aiIconURL]=\"messageComposerConfiguration.AIIconURL\">\n </cometchat-message-composer>\n </ng-template>\n </div>\n </div>\n <div class=\"cc-messages__livereaction\">\n <cometchat-live-reaction *ngIf=\"liveReaction\" [reactionIconURL]=\"reactionName\"></cometchat-live-reaction>\n </div>\n <div *ngIf=\"openThreadedMessages\" class=\"cc-messages__threadedmessages\">\n <cometchat-threaded-messages [onClose]=\"closeThreadView\"\n [threadedMessagesStyle]=\"threadedMessageConfiguration.threadedMessagesStyle\"\n [messageActionView]=\"threadedMessageConfiguration.messageActionView\"\n [closeIconURL]=\"threadedMessageConfiguration.closeIconURL\" [onError]=\"threadedMessageConfiguration.onError\"\n [bubbleView]=\"threadedMessageConfiguration.bubbleView || parentBubbleView\" [parentMessage]=\"threadMessageObject\"\n [user]=\"user\" [group]=\"group\"></cometchat-threaded-messages>\n </div>\n <div *ngIf=\"openDetails\" class=\"cc-messages__details\">\n <cometchat-details [backdropStyle]=\"detailsConfiguration.backdropStyle\"\n [transferOwnershipConfiguration]=\"detailsConfiguration.transferOwnershipConfiguration\"\n [groupMembersConfiguration]=\"detailsConfiguration.groupMembersConfiguration\"\n [bannedMembersConfiguration]=\"detailsConfiguration.bannedMembersConfiguration\"\n [addMembersConfiguration]=\"detailsConfiguration.addMembersConfiguration\"\n [onClose]=\"detailsConfiguration.onClose || closeDetailsPage\" [listItemStyle]=\"detailsConfiguration.listItemStyle\"\n [detailsStyle]=\"detailsConfiguration.detailsStyle\" [avatarStyle]=\"detailsConfiguration.avatarStyle\"\n [statusIndicatorStyle]=\"detailsConfiguration.statusIndicatorStyle\"\n [leaveDialogStyle]=\"detailsConfiguration.leaveDialogStyle\" [data]=\"detailsConfiguration.data\"\n [customProfileView]=\"detailsConfiguration.customProfileView\" [subtitleView]=\"detailsConfiguration.subtitleView\"\n [hideProfile]=\"detailsConfiguration.hideProfile\" [onError]=\"detailsConfiguration.onError\"\n [closeButtonIconURL]=\"detailsConfiguration.closeButtonIconURL\" [user]=\"user\" [group]=\"group\"></cometchat-details>\n </div>\n</div>\n<ng-template #headerMenu>\n <div class=\"cc-messages__headermenu\">\n <div class=\"cc-messages__auxiliarymenu\" *ngIf=\"getAuxilaryView(); else elseBlock\">\n <ng-container *ngTemplateOutlet=\"getAuxilaryView()\">\n </ng-container>\n </div>\n <ng-template #elseBlock>\n <cometchat-call-buttons *ngIf=\"enableCalling\" voiceCallIconText=\"\" videoCallIconText=\"\" [user]=\"user\"\n [group]=\"group\" [callButtonsStyle]=\"callButtonsStyle\">\n </cometchat-call-buttons>\n </ng-template>\n <cometchat-button *ngIf=\"!hideDetails\" [iconURL]=\"infoIconStyle\" [buttonStyle]=\"detailsButtonStyle\"\n (cc-button-clicked)=\"openDetailsPage()\"></cometchat-button>\n </div>\n</ng-template>", styles: ["*{box-sizing:border-box;margin:0;padding:0}.cc-messages__wrapper{position:relative;height:100%;width:100%}.cc-messages{display:flex;flex-direction:column;position:relative;height:100%;width:100%;box-sizing:border-box;justify-content:space-between}.cc-messages__headermenu{display:flex;justify-content:center;align-items:center}.cc-messages__threadedmessages,.cc-messages__details{position:absolute;top:0;left:0;height:100%;width:100%;max-height:100%;overflow-y:auto;overflow-x:hidden;max-width:100%;z-index:1}.cc-messages__header{width:100%}.cc-messages__list{overflow:hidden;width:100%;height:100%}cometchat-threaded-messages{height:100%;display:flex}.cc-messages__composer{width:100%;display:flex;flex-direction:column;justify-content:flex-end}\n"], components: [{ type: i2.AIAssistBotMessageListComponent, selector: "aiassist-bot-message-list", inputs: ["hideSearch", "footerView", "user", "group", "currentAskAIBot", "subtitleText", "sendIconUrl", "waitIcon", "errorIcon", "botFirstMessageText", "closeButtonIconURL", "sendButtonIconURL", "avatarStyle", "aiBotChatHeaderStyle", "aiBotChatContainerStyle", "datePattern", "alignment"] }, { type: i3.CometChatMessageHeaderComponent, selector: "cometchat-message-header", inputs: ["avatarStyle", "statusIndicatorStyle", "messageHeaderStyle", "listItemStyle", "subtitleView", "disableUsersPresence", "disableTyping", "protectedGroupIcon", "privateGroupIcon", "menu", "user", "group", "backButtonIconURL", "hideBackButton", "listItemView", "onError", "onBack"] }, { type: i4.CometChatMessageListComponent, selector: "cometchat-message-list", inputs: ["hideError", "errorStateView", "loadingStateView", "emptyStateView", "errorStateText", "emptyStateText", "loadingIconURL", "user", "group", "disableReceipt", "disableSoundForMessages", "customSoundForMessages", "readIcon", "deliveredIcon", "sentIcon", "waitIcon", "errorIcon", "aiErrorIcon", "aiEmptyIcon", "alignment", "showAvatar", "datePattern", "timestampAlignment", "DateSeparatorPattern", "templates", "messagesRequestBuilder", "newMessageIndicatorText", "scrollToBottomOnNewMessages", "thresholdValue", "unreadMessageThreshold", "apiConfiguration", "onThreadRepliesClick", "headerView", "footerView", "parentMessageId", "avatarStyle", "backdropStyle", "dateSeparatorStyle", "messageListStyle", "onError", "messageInformationConfiguration"] }, { type: i5.CometChatMessageComposerComponent, selector: "cometchat-message-composer", inputs: ["user", "group", "disableSoundForMessages", "customSoundForMessage", "disableTypingEvents", "text", "placeholderText", "headerView", "onTextChange", "attachmentIconURL", "attachmentOptions", "secondaryButtonView", "auxilaryButtonView", "auxiliaryButtonsAlignment", "sendButtonView", "parentMessageId", "hideLiveReaction", "LiveReactionIconURL", "backButtonIconURL", "messageComposerStyle", "onSendButtonClick", "onError", "backdropStyle", "actionSheetStyle", "aiActionSheetStyle", "hideVoiceRecording", "mediaRecorderStyle", "aiOptionsStyle", "aiIconURL", "voiceRecordingIconURL", "voiceRecordingCloseIconURL", "voiceRecordingStartIconURL", "voiceRecordingStopIconURL", "voiceRecordingSubmitIconURL"], outputs: ["childEvent"] }, { type: i6.CometChatThreadedMessagesComponent, selector: "cometchat-threaded-messages", inputs: ["onClose", "onError", "parentMessage", "title", "closeIconURL", "bubbleView", "messageActionView", "messageListConfiguration", "messageComposerConfiguration", "threadedMessagesStyle"] }, { type: i7.CometChatDetailsComponent, selector: "cometchat-details", inputs: ["group", "user", "title", "closeButtonIconURL", "hideProfile", "subtitleView", "customProfileView", "data", "disableUsersPresence", "privateGroupIcon", "protectedGroupIcon", "onError", "onClose", "leaveGroupConfirmButtonText", "leaveGroupCancelButtonText", "leaveGroupDialogMessage", "leaveGroupDialogStyle", "deleteGroupConfirmButtonText", "deleteGroupDialogMessage", "deleteGroupCancelButtonText", "deleteGroupDialogStyle", "transferOwnershipConfirmButtonText", "transferOwnershipDialogMessage", "transferOwnershipCancelButtonText", "transferOwnershipDialogStyle", "addMembersConfiguration", "bannedMembersConfiguration", "groupMembersConfiguration", "transferOwnershipConfiguration", "statusIndicatorStyle", "backdropStyle", "avatarStyle", "detailsStyle", "listItemStyle"] }, { type: i8.CometChatCallButtonsComponent, selector: "cometchat-call-buttons", inputs: ["user", "group", "voiceCallIconURL", "voiceCallIconText", "voiceCallIconHoverText", "videoCallIconURL", "videoCallIconText", "videoCallIconHoverText", "onVoiceCallClick", "onVideoCallClick", "onError", "callButtonsStyle", "outgoingCallConfiguration", "ongoingCallConfiguration"] }], directives: [{ type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i9.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
359
378
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CometChatMessagesComponent, decorators: [{
360
379
  type: Component,
361
- args: [{ selector: "cometchat-messages", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cc-messages__wrapper\">\n<div class=\"cc-messages\" [ngStyle]=\"chatListStyle()\" *ngIf=\"user || group\">\n<div class=\"cc-messages__header\" *ngIf=\"!hideMessageHeader\">\n <div *ngIf=\"messageHeaderView; else customHeaderView\" class=\"cc-messages__header-customview\">\n <ng-container *ngTemplateOutlet=\"messageHeaderView\">\n </ng-container>\n </div>\n <ng-template #customHeaderView>\n <cometchat-message-header [user]=\"user\" [group]=\"group\" [subtitleView]=\"messageHeaderConfiguration.subtitleView\"\n [disableUsersPresence]=\"messageHeaderConfiguration.disableUsersPresence\" [protectedGroupIcon]=\"messageHeaderConfiguration.protectedGroupIcon\" [privateGroupIcon]=\"messageHeaderConfiguration.privateGroupIcon\" [menu]=\"headerMenu\" [messageHeaderStyle]=\"messageHeaderConfiguration.messageHeaderStyle\"\n [backButtonIconURL]=\"messageHeaderConfiguration.backButtonIconURL\" [hideBackButton]=\"messageHeaderConfiguration.hideBackButton\" [onError]=\"messageHeaderConfiguration.onError\" [onBack]=\"messageHeaderConfiguration.onBack\" [listItemStyle]=\"messageHeaderConfiguration.listItemStyle\" [statusIndicatorStyle]=\"messageHeaderConfiguration.statusIndicatorStyle\"\n [avatarStyle]=\"messageHeaderConfiguration.avatarStyle\"\n >\n </cometchat-message-header>\n </ng-template>\n</div>\n<div class=\"cc-messages__list\">\n <cometchat-message-list #messageListRef [messageInformationConfiguration]=\"messageListConfiguration.messageInformationConfiguration\" [disableSoundForMessages]=\"disableSoundForMessages\" [customSoundForMessages]=\"customSoundForIncomingMessages\" [emptyStateView]=\"messageListConfiguration.emptyStateView\" [loadingIconURL]=\"messageListConfiguration?.loadingIconURL!\" [loadingStateView]=\"messageListConfiguration.loadingStateView\" [user]=\"user\" [group]=\"group\"\n [errorStateView]=\"messageListConfiguration.errorStateView\" [disableReceipt]=\"messageListConfiguration.disableReceipt\" [readIcon]=\"messageListConfiguration.readIcon\" [deliveredIcon]=\"messageListConfiguration.deliveredIcon\" [sentIcon]=\"messageListConfiguration.sentIcon\" [waitIcon]=\"messageListConfiguration.waitIcon\"\n [errorIcon]=\"messageListConfiguration.errorIcon\" [alignment]=\"messageListConfiguration.alignment\" [showAvatar]=\"messageListConfiguration.showAvatar\" [datePattern]=\"messageListConfiguration.datePattern\" [timestampAlignment]=\"messageListConfiguration.timestampAlignment\" [DateSeparatorPattern]=\"messageListConfiguration.DateSeparatorPattern\"\n [templates]=\"messageListConfiguration.templates\" [messagesRequestBuilder]=\"messageListConfiguration.messagesRequestBuilder\" [thresholdValue]=\"messageListConfiguration.thresholdValue\" [onThreadRepliesClick]=\"messageListConfiguration.onThreadRepliesClick || openThreadView\" [headerView]=\"messageListConfiguration.headerView\" [footerView]=\"messageListConfiguration.footerView\"\n [avatarStyle]=\"messageListConfiguration.avatarStyle\" [scrollToBottomOnNewMessages]=\"messageListConfiguration.scrollToBottomOnNewMessages\" [backdropStyle]=\"messageListConfiguration.backdropStyle\" [dateSeparatorStyle]=\"messageListConfiguration.dateSeparatorStyle\" [messageListStyle]=\"messageListConfiguration.messageListStyle\" [onError]=\"messageListConfiguration.onError\"\n >\n </cometchat-message-list>\n</div>\n<div class=\"cc-messages__composer\" *ngIf=\"!hideMessageComposer\">\n <div *ngIf=\"messageComposerView; else customComposerView\" class=\"cc-messages__composer--customview\">\n <ng-container *ngTemplateOutlet=\"messageComposerView\">\n </ng-container>\n </div>\n <ng-template #customComposerView>\n <cometchat-message-composer #messageComposerRef [disableSoundForMessages]=\"disableSoundForMessages\"\n [voiceRecordingStopIconURL]=\"messageComposerConfiguration.voiceRecordingStopIconURL\"\n [voiceRecordingStartIconURL]=\"messageComposerConfiguration.voiceRecordingStartIconURL\"\n [voiceRecordingCloseIconURL]=\"messageComposerConfiguration.voiceRecordingCloseIconURL\"\n [voiceRecordingSubmitIconURL]=\"messageComposerConfiguration.voiceRecordingSubmitIconURL\"\n [mediaRecorderStyle]=\"messageComposerConfiguration.mediaRecorderStyle\"\n [customSoundForMessages]=\"customSoundForOutgoingMessages\"\n [user]=\"user\" [group]=\"group\" [text]=\"messageComposerConfiguration.text\" [headerView]=\"messageComposerConfiguration.headerView\" [onTextChange]=\"messageComposerConfiguration.onTextChange\" [attachmentIconURL]=\"messageComposerConfiguration.attachmentIconURL\"\n [attachmentOptions]=\"messageComposerConfiguration.attachmentOptions\" [secondaryButtonView]=\"messageComposerConfiguration.secondaryButtonView\" [auxilaryButtonView]=\"messageComposerConfiguration.auxilaryButtonView\" [auxiliaryButtonsAlignment]=\"messageComposerConfiguration.auxiliaryButtonsAlignment\"\n [sendButtonView]=\"messageComposerConfiguration.sendButtonView\" [hideLiveReaction]=\"messageComposerConfiguration.hideLiveReaction\" [LiveReactionIconURL]=\"messageComposerConfiguration.LiveReactionIconURL\" [messageComposerStyle]=\"messageComposerConfiguration.messageComposerStyle\" [onSendButtonClick]=\"messageComposerConfiguration.onSendButtonClick\"\n [onSendButtonClick]=\"messageComposerConfiguration.onSendButtonClick\" [onError]=\"messageComposerConfiguration.onError\"\n >\n </cometchat-message-composer>\n </ng-template>\n</div>\n </div>\n <div class=\"cc-messages__livereaction\">\n <cometchat-live-reaction *ngIf=\"liveReaction\" [reactionIconURL]=\"reactionName\"></cometchat-live-reaction>\n</div>\n<div *ngIf=\"openThreadedMessages\" class=\"cc-messages__threadedmessages\">\n<cometchat-threaded-messages [onClose]=\"closeThreadView\" [threadedMessagesStyle]=\"threadedMessageConfiguration.threadedMessagesStyle\" [messageActionView]=\"threadedMessageConfiguration.messageActionView\" [closeIconURL]=\"threadedMessageConfiguration.closeIconURL\" [onError]=\"threadedMessageConfiguration.onError\" [bubbleView]=\"threadedMessageConfiguration.bubbleView || parentBubbleView\" [parentMessage]=\"threadMessageObject\" [user]=\"user\" [group]=\"group\"></cometchat-threaded-messages>\n</div>\n<div *ngIf=\"openDetails\" class=\"cc-messages__details\">\n <cometchat-details [backdropStyle]=\"detailsConfiguration.backdropStyle\" [transferOwnershipConfiguration]=\"detailsConfiguration.transferOwnershipConfiguration\" [groupMembersConfiguration]=\"detailsConfiguration.groupMembersConfiguration\" [bannedMembersConfiguration]=\"detailsConfiguration.bannedMembersConfiguration\" [addMembersConfiguration]=\"detailsConfiguration.addMembersConfiguration\" [onClose]=\"detailsConfiguration.onClose || closeDetailsPage\" [listItemStyle]=\"detailsConfiguration.listItemStyle\" [detailsStyle]=\"detailsConfiguration.detailsStyle\" [avatarStyle]=\"detailsConfiguration.avatarStyle\" [statusIndicatorStyle]=\"detailsConfiguration.statusIndicatorStyle\" [leaveDialogStyle]=\"detailsConfiguration.leaveDialogStyle\" [data]=\"detailsConfiguration.data\" [customProfileView]=\"detailsConfiguration.customProfileView\" [subtitleView]=\"detailsConfiguration.subtitleView\" [hideProfile]=\"detailsConfiguration.hideProfile\" [onError]=\"detailsConfiguration.onError\" [closeButtonIconURL]=\"detailsConfiguration.closeButtonIconURL\" [user]=\"user\" [group]=\"group\"></cometchat-details>\n </div>\n</div>\n<ng-template #headerMenu>\n <div class=\"cc-messages__headermenu\">\n<div class=\"cc-messages__auxiliarymenu\" *ngIf=\"getAuxilaryView(); else elseBlock\">\n <ng-container *ngTemplateOutlet=\"getAuxilaryView()\">\n </ng-container>\n</div>\n <ng-template #elseBlock>\n <cometchat-call-buttons *ngIf=\"enableCalling\" voiceCallIconText=\"\" videoCallIconText=\"\" [user]=\"user\" [group]=\"group\" [callButtonsStyle]=\"callButtonsStyle\">\n </cometchat-call-buttons>\n </ng-template>\n <cometchat-button *ngIf=\"!hideDetails\" [iconURL]=\"infoIconStyle\" [buttonStyle]=\"detailsButtonStyle\" (cc-button-clicked)=\"openDetailsPage()\"></cometchat-button>\n </div>\n</ng-template>\n", styles: ["*{box-sizing:border-box;margin:0;padding:0}.cc-messages__wrapper{position:relative;height:100%;width:100%}.cc-messages{display:flex;flex-direction:column;position:relative;height:100%;width:100%;box-sizing:border-box;justify-content:space-between}.cc-messages__headermenu{display:flex;justify-content:center;align-items:center}.cc-messages__threadedmessages,.cc-messages__details{position:absolute;top:0;left:0;height:100%;width:100%;max-height:100%;overflow-y:auto;overflow-x:hidden;max-width:100%;z-index:1}.cc-messages__header{width:100%}.cc-messages__list{overflow:hidden;width:100%;height:100%}cometchat-threaded-messages{height:100%;display:flex}.cc-messages__composer{width:100%;display:flex;flex-direction:column;justify-content:flex-end}\n"] }]
380
+ args: [{ selector: "cometchat-messages", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cc-messages__wrapper\">\n <cometchat-backdrop *ngIf=\"showAiBotChat\">\n <aiassist-bot-message-list [user]=\"user\" [group]=\"group\"\n [currentAskAIBot]=\"currentAskAIBot\"></aiassist-bot-message-list>\n </cometchat-backdrop>\n <div class=\"cc-messages\" [ngStyle]=\"chatListStyle()\" *ngIf=\"user || group\">\n <div class=\"cc-messages__header\" *ngIf=\"!hideMessageHeader\">\n <div *ngIf=\"messageHeaderView; else customHeaderView\" class=\"cc-messages__header-customview\">\n <ng-container *ngTemplateOutlet=\"messageHeaderView\">\n </ng-container>\n </div>\n <ng-template #customHeaderView>\n <cometchat-message-header [user]=\"user\" [group]=\"group\" [subtitleView]=\"messageHeaderConfiguration.subtitleView\"\n [disableUsersPresence]=\"messageHeaderConfiguration.disableUsersPresence\"\n [protectedGroupIcon]=\"messageHeaderConfiguration.protectedGroupIcon\"\n [privateGroupIcon]=\"messageHeaderConfiguration.privateGroupIcon\" [menu]=\"headerMenu\"\n [messageHeaderStyle]=\"messageHeaderConfiguration.messageHeaderStyle\"\n [backButtonIconURL]=\"messageHeaderConfiguration.backButtonIconURL\"\n [hideBackButton]=\"messageHeaderConfiguration.hideBackButton\" [onError]=\"messageHeaderConfiguration.onError\"\n [onBack]=\"messageHeaderConfiguration.onBack\" [listItemStyle]=\"messageHeaderConfiguration.listItemStyle\"\n [statusIndicatorStyle]=\"messageHeaderConfiguration.statusIndicatorStyle\"\n [avatarStyle]=\"messageHeaderConfiguration.avatarStyle\">\n </cometchat-message-header>\n </ng-template>\n </div>\n <div class=\"cc-messages__list\">\n <cometchat-message-list #messageListRef\n [messageInformationConfiguration]=\"messageListConfiguration.messageInformationConfiguration\"\n [disableSoundForMessages]=\"disableSoundForMessages\" [customSoundForMessages]=\"customSoundForIncomingMessages\"\n [emptyStateView]=\"messageListConfiguration.emptyStateView\"\n [loadingIconURL]=\"messageListConfiguration?.loadingIconURL!\"\n [loadingStateView]=\"messageListConfiguration.loadingStateView\" [user]=\"user\" [group]=\"group\"\n [errorStateView]=\"messageListConfiguration.errorStateView\"\n [disableReceipt]=\"messageListConfiguration.disableReceipt\" [readIcon]=\"messageListConfiguration.readIcon\"\n [deliveredIcon]=\"messageListConfiguration.deliveredIcon\" [sentIcon]=\"messageListConfiguration.sentIcon\"\n [waitIcon]=\"messageListConfiguration.waitIcon\" [errorIcon]=\"messageListConfiguration.errorIcon\"\n [alignment]=\"messageListConfiguration.alignment\" [showAvatar]=\"messageListConfiguration.showAvatar\"\n [datePattern]=\"messageListConfiguration.datePattern\"\n [timestampAlignment]=\"messageListConfiguration.timestampAlignment\"\n [DateSeparatorPattern]=\"messageListConfiguration.DateSeparatorPattern\"\n [templates]=\"messageListConfiguration.templates\"\n [messagesRequestBuilder]=\"messageListConfiguration.messagesRequestBuilder\"\n [thresholdValue]=\"messageListConfiguration.thresholdValue\"\n [onThreadRepliesClick]=\"messageListConfiguration.onThreadRepliesClick || openThreadView\"\n [headerView]=\"messageListConfiguration.headerView\" [footerView]=\"messageListConfiguration.footerView\"\n [avatarStyle]=\"messageListConfiguration.avatarStyle\"\n [scrollToBottomOnNewMessages]=\"messageListConfiguration.scrollToBottomOnNewMessages\"\n [backdropStyle]=\"messageListConfiguration.backdropStyle\"\n [dateSeparatorStyle]=\"messageListConfiguration.dateSeparatorStyle\"\n [messageListStyle]=\"messageListConfiguration.messageListStyle\" [onError]=\"messageListConfiguration.onError\">\n </cometchat-message-list>\n </div>\n <div class=\"cc-messages__composer\" *ngIf=\"!hideMessageComposer\">\n <div *ngIf=\"messageComposerView; else customComposerView\" class=\"cc-messages__composer--customview\">\n <ng-container *ngTemplateOutlet=\"messageComposerView\">\n </ng-container>\n </div>\n <ng-template #customComposerView>\n <cometchat-message-composer #messageComposerRef [disableSoundForMessages]=\"disableSoundForMessages\"\n [voiceRecordingStopIconURL]=\"messageComposerConfiguration.voiceRecordingStopIconURL\"\n [voiceRecordingStartIconURL]=\"messageComposerConfiguration.voiceRecordingStartIconURL\"\n [voiceRecordingCloseIconURL]=\"messageComposerConfiguration.voiceRecordingCloseIconURL\"\n [voiceRecordingSubmitIconURL]=\"messageComposerConfiguration.voiceRecordingSubmitIconURL\"\n [mediaRecorderStyle]=\"messageComposerConfiguration.mediaRecorderStyle\"\n [customSoundForMessages]=\"customSoundForOutgoingMessages\" [user]=\"user\" [group]=\"group\"\n [text]=\"messageComposerConfiguration.text\" [headerView]=\"messageComposerConfiguration.headerView\"\n [onTextChange]=\"messageComposerConfiguration.onTextChange\"\n [attachmentIconURL]=\"messageComposerConfiguration.attachmentIconURL\"\n [attachmentOptions]=\"messageComposerConfiguration.attachmentOptions\"\n [secondaryButtonView]=\"messageComposerConfiguration.secondaryButtonView\"\n [auxilaryButtonView]=\"messageComposerConfiguration.auxilaryButtonView\"\n [auxiliaryButtonsAlignment]=\"messageComposerConfiguration.auxiliaryButtonsAlignment\"\n [sendButtonView]=\"messageComposerConfiguration.sendButtonView\"\n [hideLiveReaction]=\"messageComposerConfiguration.hideLiveReaction\"\n [LiveReactionIconURL]=\"messageComposerConfiguration.LiveReactionIconURL\"\n [messageComposerStyle]=\"messageComposerConfiguration.messageComposerStyle\"\n [onSendButtonClick]=\"messageComposerConfiguration.onSendButtonClick\"\n [onSendButtonClick]=\"messageComposerConfiguration.onSendButtonClick\"\n [onError]=\"messageComposerConfiguration.onError\"\n [actionSheetStyle]=\"messageComposerConfiguration.actionSheetStyle\"\n [aiOptionsStyle]=\"messageComposerConfiguration.AIOptionsStyle\"\n [aiIconURL]=\"messageComposerConfiguration.AIIconURL\">\n </cometchat-message-composer>\n </ng-template>\n </div>\n </div>\n <div class=\"cc-messages__livereaction\">\n <cometchat-live-reaction *ngIf=\"liveReaction\" [reactionIconURL]=\"reactionName\"></cometchat-live-reaction>\n </div>\n <div *ngIf=\"openThreadedMessages\" class=\"cc-messages__threadedmessages\">\n <cometchat-threaded-messages [onClose]=\"closeThreadView\"\n [threadedMessagesStyle]=\"threadedMessageConfiguration.threadedMessagesStyle\"\n [messageActionView]=\"threadedMessageConfiguration.messageActionView\"\n [closeIconURL]=\"threadedMessageConfiguration.closeIconURL\" [onError]=\"threadedMessageConfiguration.onError\"\n [bubbleView]=\"threadedMessageConfiguration.bubbleView || parentBubbleView\" [parentMessage]=\"threadMessageObject\"\n [user]=\"user\" [group]=\"group\"></cometchat-threaded-messages>\n </div>\n <div *ngIf=\"openDetails\" class=\"cc-messages__details\">\n <cometchat-details [backdropStyle]=\"detailsConfiguration.backdropStyle\"\n [transferOwnershipConfiguration]=\"detailsConfiguration.transferOwnershipConfiguration\"\n [groupMembersConfiguration]=\"detailsConfiguration.groupMembersConfiguration\"\n [bannedMembersConfiguration]=\"detailsConfiguration.bannedMembersConfiguration\"\n [addMembersConfiguration]=\"detailsConfiguration.addMembersConfiguration\"\n [onClose]=\"detailsConfiguration.onClose || closeDetailsPage\" [listItemStyle]=\"detailsConfiguration.listItemStyle\"\n [detailsStyle]=\"detailsConfiguration.detailsStyle\" [avatarStyle]=\"detailsConfiguration.avatarStyle\"\n [statusIndicatorStyle]=\"detailsConfiguration.statusIndicatorStyle\"\n [leaveDialogStyle]=\"detailsConfiguration.leaveDialogStyle\" [data]=\"detailsConfiguration.data\"\n [customProfileView]=\"detailsConfiguration.customProfileView\" [subtitleView]=\"detailsConfiguration.subtitleView\"\n [hideProfile]=\"detailsConfiguration.hideProfile\" [onError]=\"detailsConfiguration.onError\"\n [closeButtonIconURL]=\"detailsConfiguration.closeButtonIconURL\" [user]=\"user\" [group]=\"group\"></cometchat-details>\n </div>\n</div>\n<ng-template #headerMenu>\n <div class=\"cc-messages__headermenu\">\n <div class=\"cc-messages__auxiliarymenu\" *ngIf=\"getAuxilaryView(); else elseBlock\">\n <ng-container *ngTemplateOutlet=\"getAuxilaryView()\">\n </ng-container>\n </div>\n <ng-template #elseBlock>\n <cometchat-call-buttons *ngIf=\"enableCalling\" voiceCallIconText=\"\" videoCallIconText=\"\" [user]=\"user\"\n [group]=\"group\" [callButtonsStyle]=\"callButtonsStyle\">\n </cometchat-call-buttons>\n </ng-template>\n <cometchat-button *ngIf=\"!hideDetails\" [iconURL]=\"infoIconStyle\" [buttonStyle]=\"detailsButtonStyle\"\n (cc-button-clicked)=\"openDetailsPage()\"></cometchat-button>\n </div>\n</ng-template>", styles: ["*{box-sizing:border-box;margin:0;padding:0}.cc-messages__wrapper{position:relative;height:100%;width:100%}.cc-messages{display:flex;flex-direction:column;position:relative;height:100%;width:100%;box-sizing:border-box;justify-content:space-between}.cc-messages__headermenu{display:flex;justify-content:center;align-items:center}.cc-messages__threadedmessages,.cc-messages__details{position:absolute;top:0;left:0;height:100%;width:100%;max-height:100%;overflow-y:auto;overflow-x:hidden;max-width:100%;z-index:1}.cc-messages__header{width:100%}.cc-messages__list{overflow:hidden;width:100%;height:100%}cometchat-threaded-messages{height:100%;display:flex}.cc-messages__composer{width:100%;display:flex;flex-direction:column;justify-content:flex-end}\n"] }]
362
381
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.CometChatThemeService }, { type: i0.ElementRef }]; }, propDecorators: { messageComposerRef: [{
363
382
  type: ViewChild,
364
383
  args: ["messageComposerRef", { static: false }]
@@ -369,6 +388,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
369
388
  type: Input
370
389
  }], group: [{
371
390
  type: Input
391
+ }], currentAskAIBot: [{
392
+ type: Input
372
393
  }], hideMessageComposer: [{
373
394
  type: Input
374
395
  }], disableTyping: [{
@@ -404,4 +425,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
404
425
  }], auxiliaryMenu: [{
405
426
  type: Input
406
427
  }] } });
407
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tZXRjaGF0LW1lc3NhZ2VzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NoYXQtdWlraXQtYW5ndWxhci9zcmMvQ29tZXRDaGF0TWVzc2FnZXMvY29tZXRjaGF0LW1lc3NhZ2VzL2NvbWV0Y2hhdC1tZXNzYWdlcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGF0LXVpa2l0LWFuZ3VsYXIvc3JjL0NvbWV0Q2hhdE1lc3NhZ2VzL2NvbWV0Y2hhdC1tZXNzYWdlcy9jb21ldGNoYXQtbWVzc2FnZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBRUwsU0FBUyxFQUdULHVCQUF1QixFQUl4QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFPM0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxzQkFBc0IsRUFBRSxvQkFBb0IsRUFBYyxtQkFBbUIsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hLLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSx3QkFBd0IsRUFBRSw0QkFBNEIsRUFBRSw2QkFBNkIsRUFBQyxvQkFBb0IsRUFBRSxhQUFhLEVBQXdCLGtCQUFrQixFQUFvQixNQUFNLHlCQUF5QixDQUFDO0FBQzVQLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDOzs7Ozs7Ozs7O0FBQzFFOzs7Ozs7OztFQVFFO0FBT0YsTUFBTSxPQUFPLDBCQUEwQjtJQXVJckMsWUFBcUIsR0FBc0IsRUFBUyxZQUFrQyxFQUFTLFVBQXNCO1FBQWhHLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQVMsaUJBQVksR0FBWixZQUFZLENBQXNCO1FBQVMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQWxJNUcsd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBRXJDLCtCQUEwQixHQUErQixJQUFJLDBCQUEwQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVGLDZCQUF3QixHQUE2QixJQUFJLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3RGLGlDQUE0QixHQUFpQyxJQUFJLDRCQUE0QixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xHLGlDQUE0QixHQUFrQyxJQUFJLDZCQUE2QixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BHLHlCQUFvQixHQUF5QixJQUFJLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBSTFFLGtCQUFhLEdBQWtCO1lBQ3RDLEtBQUssRUFBRSxNQUFNO1lBQ2IsTUFBTSxFQUFFLE1BQU07WUFDZCxVQUFVLEVBQUUsT0FBTztZQUNuQixZQUFZLEVBQUUsTUFBTSxFQUFLLGdCQUFnQixFQUFFLHdCQUF3QjtZQUNuRSxlQUFlLEVBQUUsZ0JBQWdCO1NBQ2xDLENBQUM7UUFJTyxzQkFBaUIsR0FBWSxLQUFLLENBQUM7UUFDbkMsZ0JBQVcsR0FBVyxLQUFLLENBQUM7UUFHckMscUJBQWdCLEdBQXFCO1lBQ25DLEtBQUssRUFBRSxNQUFNO1lBQ2IsTUFBTSxFQUFFLE1BQU07WUFDZCxNQUFNLEVBQUUsTUFBTTtZQUNkLFlBQVksRUFBRSxHQUFHO1lBQ2pCLFVBQVUsRUFBRSxhQUFhO1lBQ3pCLGFBQWEsRUFBQyxHQUFHO1lBQ2pCLGdCQUFnQixFQUFDLGFBQWE7WUFDOUIsWUFBWSxFQUFDLE9BQU87WUFDcEIsa0JBQWtCLEVBQUMsS0FBSztTQUN6QixDQUFDO1FBQ0ssc0JBQWlCLEdBQWlDLElBQUksQ0FBQztRQUN2RCxpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUM5QixpQkFBWSxHQUFXLDJCQUEyQixDQUFDO1FBQ25ELG1CQUFjLEdBQWlDLElBQUksQ0FBQztRQUNwRCxtQkFBYyxHQUF5QjtZQUM1QyxLQUFLLEVBQUUsTUFBTTtZQUNiLE1BQU0sRUFBRSxNQUFNO1lBQ2QsTUFBTSxFQUFFLE1BQU07WUFDZCxZQUFZLEVBQUUsTUFBTTtZQUNwQixVQUFVLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRTtZQUMxRCxlQUFlLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRTtZQUMvRCxRQUFRLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUM7WUFDbEUsU0FBUyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxPQUFPO1NBQ2hFLENBQUE7UUFDTSx3QkFBbUIsR0FBUSxDQUFDLENBQUM7UUFDN0IseUJBQW9CLEdBQVcsS0FBSyxDQUFDO1FBSzVDLHlCQUFvQixHQUFZLEtBQUssQ0FBQztRQUN0Qyx1QkFBa0IsR0FBVyxtQkFBbUIsQ0FBQztRQUNqRCxxQkFBZ0IsR0FBVSxvQkFBb0IsQ0FBQztRQUUvQyxnQkFBVyxHQUF1QixJQUFJLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQzVELHNCQUFpQixHQUFXLHVCQUF1QixDQUFDO1FBQ3BELGlCQUFZLEdBQVksSUFBSSxDQUFDO1FBSTdCLGdCQUFXLEdBQWdCO1lBQ3pCLFlBQVksRUFBRSxNQUFNO1lBQ3BCLEtBQUssRUFBRSxNQUFNO1lBQ2IsTUFBTSxFQUFFLE1BQU07WUFDZCxNQUFNLEVBQUUsTUFBTTtZQUNkLGVBQWUsRUFBRSxPQUFPO1lBQ3hCLGFBQWEsRUFBRSxlQUFlO1lBQzlCLGNBQWMsRUFBRSxPQUFPO1lBQ3ZCLFlBQVksRUFBRSxnQkFBZ0I7WUFFOUIsc0JBQXNCLEVBQUUsRUFBRTtTQUMzQixDQUFBO1FBQ0QseUJBQW9CLEdBQWM7WUFDaEMsWUFBWSxFQUFFLE1BQU07WUFDcEIsS0FBSyxFQUFFLE1BQU07WUFDYixNQUFNLEVBQUUsTUFBTTtZQUNkLE1BQU0sRUFBRSxNQUFNO1NBQ2YsQ0FBQTtRQUNELHVCQUFrQixHQUF1QjtZQUN2QyxLQUFLLEVBQUUsTUFBTTtZQUNiLE1BQU0sRUFBRSxNQUFNO1lBQ2QsVUFBVSxFQUFFLGFBQWE7WUFDekIsTUFBTSxFQUFFLE1BQU07WUFDZCxZQUFZLEVBQUUsR0FBRztZQUNqQixrQkFBa0IsRUFBRSxTQUFTO1lBQzdCLGlCQUFpQixFQUFFLFNBQVM7WUFDNUIsaUJBQWlCLEVBQUUsTUFBTTtZQUN6QixnQkFBZ0IsRUFBRSxnQkFBZ0I7WUFDbEMsd0JBQXdCLEVBQUUsU0FBUztZQUNuQyx1QkFBdUIsRUFBRSxnQkFBZ0I7U0FDMUMsQ0FBQTtRQUNELGtCQUFhLEdBQWtCO1lBQzdCLFVBQVUsRUFBRSxPQUFPO1lBQ25CLFVBQVUsRUFBRSxPQUFPO1lBQ25CLFNBQVMsRUFBRSxnQkFBZ0I7WUFDM0IsS0FBSyxFQUFFLEVBQUU7WUFDVCxNQUFNLEVBQUUsTUFBTTtZQUNkLE1BQU0sRUFBRSxNQUFNO1lBQ2QsWUFBWSxFQUFFLEtBQUs7WUFDbkIsY0FBYyxFQUFFLEVBQUU7WUFDbEIsZ0JBQWdCLEVBQUUsYUFBYTtZQUMvQixlQUFlLEVBQUMsYUFBYTtTQUM5QixDQUFBO1FBR0Ysa0JBQWEsR0FBVSxpQkFBaUIsQ0FBQTtRQUN4Qyx1QkFBa0IsR0FBTztZQUN2QixNQUFNLEVBQUMsTUFBTTtZQUNiLEtBQUssRUFBQyxNQUFNO1lBQ1osTUFBTSxFQUFDLE1BQU07WUFDYixZQUFZLEVBQUMsR0FBRztZQUNoQixVQUFVLEVBQUMsYUFBYTtZQUN4QixjQUFjLEVBQUMsU0FBUztZQUN4QixPQUFPLEVBQUMsT0FBTztTQUNoQixDQUFBO1FBQ0Qsa0JBQWEsR0FBVyxLQUFLLENBQUM7UUFTN0IsZ0JBQVcsR0FBVyxLQUFLLENBQUM7UUF5RzVCLG1CQUFjLEdBQUcsQ0FBQyxPQUE2QixFQUFDLE1BQXVCLEVBQUMsRUFBRTtZQUM1RSxJQUFJLENBQUMsbUJBQW1CLEdBQUMsT0FBTyxDQUFBO1lBQ2hDLElBQUksQ0FBQyxnQkFBZ0IsR0FBQyxNQUFNLENBQUE7WUFDNUIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztZQUNqQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3ZCLENBQUMsQ0FBQTtRQUNELG9CQUFlLEdBQUUsR0FBRSxFQUFFO1lBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDM0IsQ0FBQyxDQUFBO1FBQ0QscUJBQWdCLEdBQUUsR0FBRSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDM0IsQ0FBQyxDQUFBO1FBQ0Qsb0JBQWUsR0FBRyxHQUFFLEVBQUU7WUFDcEIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztZQUNwQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdkIsQ0FBQyxDQUFBO1FBQ0Q7O1dBRUc7UUFDSCxzQkFBaUIsR0FBRyxDQUFDLFlBQW9CLEVBQUUsRUFBRTtZQUMzQyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ3JCLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztnQkFDMUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQzthQUMxQjtZQUNELElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDekIsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDM0IsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ1QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMzQixDQUFDLENBQUE7SUE3SXdILENBQUM7SUFDMUgsUUFBUTtRQUVOLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFBO1FBQ3hCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO1FBR3ZCLFNBQVMsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUN4QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFrQyxFQUFDLEVBQUU7WUFDN0MsSUFBRyxJQUFJLENBQUMsT0FBTyxFQUFDO2dCQUNkLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7YUFDcEI7UUFDSCxDQUFDLENBQUMsQ0FBQTtRQUNGLElBQUksZ0JBQWdCLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUM5QyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQTtTQUMxQjtJQUNILENBQUM7SUFDRCxlQUFlO1FBQ2pCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFFZCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUM7WUFDN0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDO1FBQzdELENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUVQLENBQUM7SUFDRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsY0FBYyxHQUFHLHNCQUFzQixDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxZQUFpQixFQUFFLEVBQUU7WUFDM0YsSUFBRyxZQUFZLElBQUksWUFBWSxJQUFJLEVBQUUsRUFBQztnQkFDckMsSUFBSSxPQUFPLEdBQVUsSUFBSSxDQUFDLDRCQUE0QixDQUFDLG1CQUFtQixJQUFJLDJCQUEyQixDQUFBO2dCQUN6RyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUE7Z0JBQy9CLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7YUFDekI7UUFFRixDQUFDLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxjQUFjLEdBQUcsb0JBQW9CLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQXFCLEVBQUMsRUFBRTtZQUMzRixJQUFHLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUM7Z0JBQ3ZELElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO2dCQUN6QixJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO2dCQUNsQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtnQkFDbEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQTthQUN6QjtRQUNILENBQUMsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLFdBQVcsR0FBRyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBZSxFQUFDLEVBQUU7WUFDL0UsSUFBRyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsRUFBQztnQkFDaEUsSUFBRyxJQUFJLENBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxJQUFJLElBQUksRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFLEVBQUM7b0JBQ3hELElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO29CQUN6QixJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO2lCQUNuQztnQkFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7YUFDMUI7UUFDSCxDQUFDLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxhQUFhLEdBQUcsbUJBQW1CLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQW1CLEVBQUUsRUFBRTtZQUN2RixJQUFHLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUM7Z0JBQ2xELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO2dCQUNqQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFBO2FBQ3pCO1FBQ0osQ0FBQyxDQUFDLENBQUE7UUFDRixJQUFJLENBQUMsZUFBZSxHQUFHLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFtQixFQUFFLEVBQUU7WUFDM0YsSUFBRyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFDO2dCQUNsRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztnQkFDakIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQTthQUN6QjtRQUNILENBQUMsQ0FBQyxDQUFBO0lBQ0gsQ0FBQztJQUNELG1CQUFtQjtRQUNoQixJQUFJLENBQUMsY0FBYyxFQUFFLFdBQVcsRUFBRSxDQUFBO1FBQ3RDLElBQUksQ0FBQyxjQUFjLEVBQUUsV0FBVyxFQUFFLENBQUE7UUFDbEMsSUFBSSxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsQ0FBQTtRQUMvQixJQUFJLENBQUMsYUFBYSxFQUFFLFdBQVcsRUFBRSxDQUFBO1FBQ2pDLElBQUksQ0FBQyxlQUFlLEVBQUUsV0FBVyxFQUFFLENBQUE7SUFDbEMsQ0FBQztJQUNELGdCQUFnQjtRQUNkLElBQUksWUFBWSxHQUFpQixJQUFJLGFBQWEsQ0FBQztZQUNqRCxLQUFLLEVBQUUsTUFBTTtZQUNiLE1BQU0sRUFBRSxNQUFNO1lBQ2QsVUFBVSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUU7WUFDM0QsWUFBWSxFQUFFLE1BQU07WUFDcEIsTUFBTSxFQUFFLGFBQWEsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFFO1lBQ3JFLGdCQUFnQixFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUU7WUFDaEUsZUFBZSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO1NBQ3ZFLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxhQUFhLEdBQUc7WUFDbkIsR0FBRyxZQUFZO1lBQ2YsR0FBRyxJQUFJLENBQUMsYUFBYTtTQUN0QixDQUFBO1FBQ0QsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFBO1FBQ3hHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyx1QkFBdUIsQ0FBQyxlQUFlLENBQUMsTUFBTSxHQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyx1QkFBdUIsQ0FBQyxlQUFlLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQTtRQUM5SixJQUFJLENBQUMsb0JBQW9CLENBQUMsMEJBQTBCLENBQUMsa0JBQWtCLENBQUMsTUFBTSxHQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQywwQkFBMEIsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFBO1FBQzFLLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyx5QkFBeUIsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEdBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLHlCQUF5QixDQUFDLGlCQUFpQixDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUE7SUFFeEssQ0FBQztJQUNELGVBQWU7UUFDYixJQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLEVBQUM7WUFDdEMsT0FBTyxJQUFJLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFBO1NBQzVDO2FBQ0ksSUFBRyxJQUFJLENBQUMsYUFBYSxFQUFDO1lBQ3pCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQTtTQUMxQjthQUNHO1lBQ0YsT0FBTyxJQUFJLENBQUM7U0FDYjtJQUNILENBQUM7SUF3Q0QsV0FBVyxDQUFDLE1BQXFCO1FBQy9CLElBQUk7WUFDSixJQUFJLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsdUJBQXVCLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3pILElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO2dCQUN6QixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7b0JBQ2IsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO3dCQUN2QyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7NkJBQ3pCLElBQUksQ0FBQyxDQUFDLElBQW9CLEVBQUUsRUFBRTs0QkFDN0IsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7d0JBQ2xCLENBQUMsQ0FBQyxDQUFBO3FCQUNMO2lCQUNGO3FCQUFNLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtvQkFDckIsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO3dCQUN4QyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7NkJBQzNCLElBQUksQ0FBQyxDQUFDLEtBQXNCLEVBQUUsRUFBRTs0QkFDL0IsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUE7d0JBQ3BCLENBQUMsQ0FBQyxDQUFBO3FCQUNMO2lCQUNGO2FBQ0Y7U0FDQTtRQUFDLE9BQU8sS0FBVSxFQUFFO1lBQ3pCLElBQUcsSUFBSSxDQUFDLE9BQU8sRUFBQztnQkFDZCxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7YUFDeEM7U0FDSTtJQUNILENBQUM7SUFDRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBRTNCLENBQUM7SUFDRCxhQUFhO1FBQ1gsT0FBTztZQUNMLFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFO1lBQzVGLE1BQU0sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU07WUFDakMsS0FBSyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSztZQUMvQixNQUFNLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNO1lBQ2pDLFlBQVksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVk7U0FDOUMsQ0FBQTtJQUNILENBQUM7SUFDRDs7Ozs7S0FLQztJQUNELFVBQVUsQ0FBQyxPQUE4QjtRQUN2QyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsYUFBYSxDQUFDLE9BQThCLEVBQUUsT0FBZ0IsS0FBSztRQUNqRSxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUNEOzs7T0FHRztJQUNILGFBQWEsQ0FBQyxPQUE4QjtRQUMxQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUM1QyxDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsYUFBYSxDQUFDLE9BQThCO1FBQzFDLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQzVDLENBQUM7SUFDRDs7O09BR0c7SUFDSCxlQUFlLENBQUMsSUFBWTtRQUMxQixJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQy9DLENBQUM7SUFDRDs7OztPQUlHO0lBQ0gsY0FBYyxDQUFDLE9BQThCLEVBQUUsT0FBZSxFQUFFO1FBQzlELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsR0FBRyxPQUFPLENBQUE7UUFDbkQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsRUFBRSxDQUFBO0lBQzNDLENBQUM7O3dIQTdXVSwwQkFBMEI7NEdBQTFCLDBCQUEwQixnbkNDdEN2Qyx3NlBBc0VBOzRGRGhDYSwwQkFBMEI7a0JBTnRDLFNBQVM7K0JBQ0Usb0JBQW9CLG1CQUdiLHVCQUF1QixDQUFDLE1BQU07cUtBR0ssa0JBQWtCO3NCQUFyRSxTQUFTO3VCQUFDLG9CQUFvQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDRixjQUFjO3NCQUE3RCxTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDckMsSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRywwQkFBMEI7c0JBQWxDLEtBQUs7Z0JBQ0csd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUNHLDRCQUE0QjtzQkFBcEMsS0FBSztnQkFDRyw0QkFBNEI7c0JBQXBDLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLDhCQUE4QjtzQkFBdEMsS0FBSztnQkFDRyw4QkFBOEI7c0JBQXRDLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBT0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIFZpZXdDaGlsZCxcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIFRlbXBsYXRlUmVmLFxuICBFbGVtZW50UmVmXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBDb21ldENoYXQgfSBmcm9tIFwiQGNvbWV0Y2hhdC9jaGF0LXNkay1qYXZhc2NyaXB0XCI7XG5pbXBvcnQgeyBDb21ldENoYXRNZXNzYWdlQ29tcG9zZXJDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vQ29tZXRDaGF0TWVzc2FnZUNvbXBvc2VyL2NvbWV0Y2hhdC1tZXNzYWdlLWNvbXBvc2VyL2NvbWV0Y2hhdC1tZXNzYWdlLWNvbXBvc2VyLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgQ29tZXRDaGF0TWVzc2FnZUxpc3RDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vQ29tZXRDaGF0TWVzc2FnZUxpc3QvY29tZXRjaGF0LW1lc3NhZ2UtbGlzdC9jb21ldGNoYXQtbWVzc2FnZS1saXN0LmNvbXBvbmVudFwiO1xuXG4gICBpbXBvcnQgeyBMaXN0SXRlbVN0eWxlLCBNZW51TGlzdFN0eWxlLEF2YXRhclN0eWxlLERhdGVTdHlsZSwgQmFzZVN0eWxlfSBmcm9tICdAY29tZXRjaGF0L3Vpa2l0LWVsZW1lbnRzJ1xuaW1wb3J0IHsgIFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBDb21ldENoYXRUaGVtZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vQ29tZXRDaGF0VGhlbWUuc2VydmljZVwiO1xuaW1wb3J0IHsgZm9udEhlbHBlciwgQ29tZXRDaGF0TWVzc2FnZUV2ZW50cywgQ29tZXRDaGF0R3JvdXBFdmVudHMsIElHcm91cExlZnQsIENvbWV0Q2hhdFVzZXJFdmVudHMsIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzIH0gZnJvbSBcIkBjb21ldGNoYXQvdWlraXQtcmVzb3VyY2VzXCI7XG5pbXBvcnQgeyBNZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbiwgTWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLCBNZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLCBUaHJlYWRlZE1lc3NhZ2VzQ29uZmlndXJhdGlvbixEZXRhaWxzQ29uZmlndXJhdGlvbiwgTWVzc2FnZXNTdHlsZSwgTWVzc2FnZUNvbXBvc2VyU3R5bGUsIE1lc3NhZ2VIZWFkZXJTdHlsZSwgQ2FsbEJ1dHRvbnNTdHlsZSB9IGZyb20gXCJAY29tZXRjaGF0L3Vpa2l0LXNoYXJlZFwiO1xuaW1wb3J0IHsgQ2hhdENvbmZpZ3VyYXRvciB9IGZyb20gXCIuLi8uLi9TaGFyZWQvRnJhbWV3b3JrL0NoYXRDb25maWd1cmF0b3JcIjtcbmltcG9ydCB7IENvbWV0Q2hhdEV4Y2VwdGlvbiB9IGZyb20gXCIuLi8uLi9TaGFyZWQvVXRpbHMvQ29tZUNoYXRFeGNlcHRpb25cIjtcbi8qKlxuKlxuKiBDb21ldENoYXRNZXNzYWdlcyBpcyBhIHdyYXBwZXIgY29tcG9uZW50IGZvciBtZXNzYWdlTGlzdCwgbWVzc2FnZUhlYWRlciwgbWVzc2FnZUNvbXBvc2VyIGFuZCBsaXZlUmVhY3Rpb24gY29tcG9uZW50LlxuKlxuKiBAdmVyc2lvbiAxLjAuMFxuKiBAYXV0aG9yIENvbWV0Q2hhdFRlYW1cbiogQGNvcHlyaWdodCDCqSAyMDIyIENvbWV0Q2hhdCBJbmMuXG4qXG4qL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImNvbWV0Y2hhdC1tZXNzYWdlc1wiLFxuICB0ZW1wbGF0ZVVybDogXCIuL2NvbWV0Y2hhdC1tZXNzYWdlcy5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vY29tZXRjaGF0LW1lc3NhZ2VzLmNvbXBvbmVudC5zY3NzXCJdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQ29tZXRDaGF0TWVzc2FnZXNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBWaWV3Q2hpbGQoXCJtZXNzYWdlQ29tcG9zZXJSZWZcIiwgeyBzdGF0aWM6IGZhbHNlIH0pIG1lc3NhZ2VDb21wb3NlclJlZiE6IENvbWV0Q2hhdE1lc3NhZ2VDb21wb3NlckNvbXBvbmVudDtcbiAgQFZpZXdDaGlsZChcIm1lc3NhZ2VMaXN0UmVmXCIsIHsgc3RhdGljOiBmYWxzZSB9KSBtZXNzYWdlTGlzdFJlZiE6IENvbWV0Q2hhdE1lc3NhZ2VMaXN0Q29tcG9uZW50O1xuICBASW5wdXQoKSB1c2VyITogQ29tZXRDaGF0LlVzZXI7XG4gIEBJbnB1dCgpIGdyb3VwITogQ29tZXRDaGF0Lkdyb3VwO1xuICBASW5wdXQoKSBoaWRlTWVzc2FnZUNvbXBvc2VyOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGRpc2FibGVUeXBpbmchOiBib29sZWFuO1xuICBASW5wdXQoKSBtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbjogTWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24gPSBuZXcgTWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24oe30pO1xuICBASW5wdXQoKSBtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb246IE1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbiA9IG5ldyBNZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24oe30pO1xuICBASW5wdXQoKSBtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uOiBNZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uID0gbmV3IE1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24oe30pO1xuICBASW5wdXQoKSB0aHJlYWRlZE1lc3NhZ2VDb25maWd1cmF0aW9uOiBUaHJlYWRlZE1lc3NhZ2VzQ29uZmlndXJhdGlvbiA9IG5ldyBUaHJlYWRlZE1lc3NhZ2VzQ29uZmlndXJhdGlvbih7fSk7XG4gIEBJbnB1dCgpIGRldGFpbHNDb25maWd1cmF0aW9uOiBEZXRhaWxzQ29uZmlndXJhdGlvbiA9IG5ldyBEZXRhaWxzQ29uZmlndXJhdGlvbih7fSk7XG4gIEBJbnB1dCgpIGN1c3RvbVNvdW5kRm9ySW5jb21pbmdNZXNzYWdlcyE6IHN0cmluZztcbiAgQElucHV0KCkgY3VzdG9tU291bmRGb3JPdXRnb2luZ01lc3NhZ2VzITogc3RyaW5nO1xuICBASW5wdXQoKSBkaXNhYmxlU291bmRGb3JNZXNzYWdlcyE6IGJvb2xlYW47XG4gIEBJbnB1dCgpIG1lc3NhZ2VzU3R5bGU6IE1lc3NhZ2VzU3R5bGUgPSB7XG4gICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgYmFja2dyb3VuZDogXCJ3aGl0ZVwiLFxuICAgIGJvcmRlclJhZGl1czogXCJub25lXCIsICAgIG1lc3NhZ2VUZXh0Q29sb3I6IFwicmdiYSgyMCwgMjAsIDIwLCAwLjMzKVwiLFxuICAgIG1lc3NhZ2VUZXh0Rm9udDogXCI3MDAgMjJweCBJbnRlclwiLFxuICB9O1xuICBASW5wdXQoKSBtZXNzYWdlSGVhZGVyVmlldyE6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBJbnB1dCgpIG1lc3NhZ2VDb21wb3NlclZpZXchOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBtZXNzYWdlTGlzdFZpZXchOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBoaWRlTWVzc2FnZUhlYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBoaWRlRGV0YWlsczpib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGF1eGlsaWFyeU1lbnUhOlRlbXBsYXRlUmVmPGFueT47XG4gIGxvZ2dlZEluVXNlciE6IENvbWV0Q2hhdC5Vc2VyIHwgbnVsbDtcbiAgY2FsbEJ1dHRvbnNTdHlsZTogQ2FsbEJ1dHRvbnNTdHlsZSA9IHtcbiAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgICBib3JkZXI6IFwibm9uZVwiLFxuICAgIGJvcmRlclJhZGl1czogXCIwXCIsXG4gICAgYmFja2dyb3VuZDogXCJ0cmFuc3BhcmVudFwiLFxuICAgIGJ1dHRvblBhZGRpbmc6XCIwXCIsXG4gICAgYnV0dG9uQmFja2dyb3VuZDpcInRyYW5zcGFyZW50XCIsXG4gICAgYnV0dG9uQm9yZGVyOlwiMCA0cHhcIixcbiAgICBidXR0b25Cb3JkZXJSYWRpdXM6XCI4cHhcIlxuICB9O1xuICBwdWJsaWMgbWVzc2FnZVRvQmVFZGl0ZWQ6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgbGl2ZVJlYWN0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyByZWFjdGlvbk5hbWU6IHN0cmluZyA9IFwiYXNzZXRzL2hlYXJ0LXJlYWN0aW9uLnBuZ1wiO1xuICBwdWJsaWMgbWVzc2FnZVRvUmVhY3Q6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgY29tcG9zZXJTdHlsZXM6IE1lc3NhZ2VDb21wb3NlclN0eWxlID0ge1xuICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgYm9yZGVyUmFkaXVzOiBcIjEycHhcIixcbiAgICBiYWNrZ3JvdW5kOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDkwMCgpLFxuICAgIGlucHV0QmFja2dyb3VuZDogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRTZWNvbmRhcnkoKSwgLy8gZG9uZVxuICAgIHRleHRGb250OiBmb250SGVscGVyKHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnR5cG9ncmFwaHkuc3VidGl0bGUxKSwgLy8gZG9uZVxuICAgIHRleHRDb2xvcjogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQoKSwgLy8gZG9uZVxuICB9XG4gIHB1YmxpYyBsaXZlUmVhY3Rpb25UaW1lb3V0OiBhbnkgPSAwO1xuICBwdWJsaWMgb3BlblRocmVhZGVkTWVzc2FnZXM6Ym9vbGVhbiA9IGZhbHNlO1xuICAvKlxuIG1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uXG4gKi9cbiAgc3VidGl0bGVWaWV3ITogVGVtcGxhdGVSZWY8YW55PjtcbiAgZGlzYWJsZVVzZXJzUHJlc2VuY2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJvdGVjdGVkR3JvdXBJY29uOiBzdHJpbmcgPSBcImFzc2V0cy9Mb2NrZWQuc3ZnXCI7XG4gIHByaXZhdGVHcm91cEljb246IHN0cmluZyA9XCJhc3NldHMvUHJpdmF0ZS5zdmdcIjtcbiAgbWVudSE6IFRlbXBsYXRlUmVmPGFueT47XG4gIGhlYWRlclN0eWxlOiBNZXNzYWdlSGVhZGVyU3R5bGUgPSBuZXcgTWVzc2FnZUhlYWRlclN0eWxlKHt9KVxuICBiYWNrQnV0dG9uSWNvblVSTDogc3RyaW5nID0gXCJhc3NldHMvYmFja2J1dHRvbi5zdmdcIjtcbiAgaGlkZUJhY2tJY29uOiBib29sZWFuID0gdHJ1ZTtcbiAgbGlzdEl0ZW1WaWV3ITogVGVtcGxhdGVSZWY8YW55PjtcbiAgb25FcnJvciE6IChlcnJvcjpDb21ldENoYXQuQ29tZXRDaGF0RXhjZXB0aW9uKT0+IHZvaWQ7XG4gIG9uQmFjayE6ICgpPT4gdm9pZDtcbiAgYXZhdGFyU3R5bGU6IEF2YXRhclN0eWxlID0ge1xuICAgIGJvcmRlclJhZGl1czogXCIxNnB4XCIsXG4gICAgd2lkdGg6IFwiMjhweFwiLFxuICAgIGhlaWdodDogXCIyOHB4XCIsXG4gICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IFwid2hpdGVcIixcbiAgICBuYW1lVGV4dENvbG9yOiBcInJnYigyMCwyMCwyMClcIixcbiAgICBiYWNrZ3JvdW5kU2l6ZTogXCJjb3ZlclwiLFxuICAgIG5hbWVUZXh0Rm9udDogXCI1MDAgMTZweCBJbnRlclwiLFxuICAgIFxuICAgIG91dGVyVmlld0JvcmRlclNwYWNpbmc6IFwiXCIsXG4gIH1cbiAgc3RhdHVzSW5kaWNhdG9yU3R5bGU6IEJhc2VTdHlsZSA9IHtcbiAgICBib3JkZXJSYWRpdXM6IFwiMTZweFwiLFxuICAgIHdpZHRoOiBcIjEwcHhcIixcbiAgICBoZWlnaHQ6IFwiMTBweFwiLFxuICAgIGJvcmRlcjogXCJub25lXCIsXG4gIH1cbiAgbWVzc2FnZUhlYWRlclN0eWxlOiBNZXNzYWdlSGVhZGVyU3R5bGUgPSB7XG4gICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgYmFja2dyb3VuZDogXCJ0cmFuc3BhcmVudFwiLFxuICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgYm9yZGVyUmFkaXVzOiBcIjBcIixcbiAgICBiYWNrQnV0dG9uSWNvblRpbnQ6IFwiIzMzOTlGRlwiLFxuICAgIG9ubGluZVN0YXR1c0NvbG9yOiBcIiMwMGYzMDBcIixcbiAgICBzdWJ0aXRsZVRleHRDb2xvcjogXCJncmV5XCIsXG4gICAgc3VidGl0bGVUZXh0Rm9udDogXCI0MDAgMTRweCBJbnRlclwiLFxuICAgIHR5cGluZ0luZGljYXRvclRleHRDb2xvcjogXCIjMzM5OUZGXCIsXG4gICAgdHlwaW5nSW5kaWNhdG9yVGV4dEZvbnQ6IFwiNDAwIDEzcHggSW50ZXJcIixcbiAgfVxuICBsaXN0SXRlbVN0eWxlOiBMaXN0SXRlbVN0eWxlID0ge1xuICAgIGJhY2tncm91bmQ6IFwid2hpdGVcIixcbiAgICB0aXRsZUNvbG9yOiBcImJsYWNrXCIsXG4gICAgdGl0bGVGb250OiBcIjUwMCAxNnB4IEludGVyXCIsXG4gICAgd2lkdGg6IFwiXCIsXG4gICAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgICBib3JkZXI6IFwibm9uZVwiLFxuICAgIGJvcmRlclJhZGl1czogXCIycHhcIixcbiAgICBzZXBhcmF0b3JDb2xvcjogXCJcIixcbiAgICBhY3RpdmVCYWNrZ3JvdW5kOiBcInRyYW5zcGFyZW50XCIsXG4gICAgaG92ZXJCYWNrZ3JvdW5kOlwidHJhbnNwYXJlbnRcIlxuICB9XG5cblxuIGluZm9JY29uU3R5bGU6c3RyaW5nID0gXCJhc3NldHMvSW5mby5zdmdcIlxuIGRldGFpbHNCdXR0b25TdHlsZTphbnkgPSB7XG4gICBoZWlnaHQ6XCIyNHB4XCIsXG4gICB3aWR0aDpcIjI0cHhcIixcbiAgIGJvcmRlcjpcIm5vbmVcIixcbiAgIGJvcmRlclJhZGl1czpcIjBcIixcbiAgIGJhY2tncm91bmQ6XCJ0cmFuc3BhcmVudFwiLFxuICAgYnV0dG9uSWNvblRpbnQ6XCIjMzM5OUZGXCIsXG4gICBwYWRkaW5nOlwiMCA4cHhcIlxuIH1cbiBlbmFibGVDYWxsaW5nOmJvb2xlYW4gPSBmYWxzZTtcbi8vXG5wdWJsaWMgY2NMaXZlUmVhY3Rpb24hOiBTdWJzY3JpcHRpb247XG5wdWJsaWMgY2NHcm91cERlbGV0ZWQhOiBTdWJzY3JpcHRpb247XG5wdWJsaWMgY2NHcm91cExlZnQhOlN1YnNjcmlwdGlvbjtcbnB1YmxpYyBjY1VzZXJCbG9ja2VkITogU3Vic2NyaXB0aW9uO1xucHVibGljIGNjVXNlclVuQmxvY2tlZCE6U3Vic2NyaXB0aW9uO1xuICB0aHJlYWRNZXNzYWdlT2JqZWN0ITpDb21ldENoYXQuQmFzZU1lc3NhZ2UgfCBudWxsO1xuICBwYXJlbnRCdWJibGVWaWV3ITpUZW1wbGF0ZVJlZjxhbnk+O1xuICBvcGVuRGV0YWlsczpib29sZWFuID0gZmFsc2U7XG4gIGNvbnN0cnVjdG9yKCBwcml2YXRlIHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYscHJpdmF0ZSB0aGVtZVNlcnZpY2U6Q29tZXRDaGF0VGhlbWVTZXJ2aWNlLHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZikgeyB9XG4gIG5nT25Jbml0KCkge1xuXG4gICAgdGhpcy5zdWJzY3JpYmVUb0V2ZW50cygpXG4gICAgdGhpcy5zZXRNZXNzYWdlc1N0eWxlKClcblxuXG4gICAgQ29tZXRDaGF0LmdldExvZ2dlZGluVXNlcigpLnRoZW4oKHVzZXIpID0+IHtcbiAgICAgIHRoaXMubG9nZ2VkSW5Vc2VyID0gdXNlcjtcbiAgICB9KS5jYXRjaCgoZXJyb3I6Q29tZXRDaGF0LkNvbWV0Q2hhdEV4Y2VwdGlvbik9PntcbiAgICAgIGlmKHRoaXMub25FcnJvcil7XG4gICAgICAgIHRoaXMub25FcnJvcihlcnJvcilcbiAgICAgIH1cbiAgICB9KVxuICAgIGlmIChDaGF0Q29uZmlndXJhdG9yLm5hbWVzLmluY2x1ZGVzKCdjYWxsaW5nJykpIHtcbiAgICAgIHRoaXMuZW5hYmxlQ2FsbGluZyA9IHRydWVcbiAgICB9XG4gIH1cbiAgbmdBZnRlclZpZXdJbml0KCl7XG5zZXRUaW1lb3V0KCgpID0+IHtcblxuICBjb25zdCBkaXZIZWlnaHQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gIGNvbnN0IGRpdldpZHRoID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG59LCAxMDAwKTtcblxuICB9XG4gIHN1YnNjcmliZVRvRXZlbnRzKCl7XG4gICAgdGhpcy5jY0xpdmVSZWFjdGlvbiA9IENvbWV0Q2hhdE1lc3NhZ2VFdmVudHMuY2NMaXZlUmVhY3Rpb24uc3Vic2NyaWJlKChyZWFjdGlvbk5hbWU6IGFueSkgPT4ge1xuICAgICBpZihyZWFjdGlvbk5hbWUgJiYgcmVhY3Rpb25OYW1lICE9IFwiXCIpe1xuICAgICAgbGV0IGljb25VUkw6c3RyaW5nID0gdGhpcy5tZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLkxpdmVSZWFjdGlvbkljb25VUkwgPz8gXCJhc3NldHMvaGVhcnQtcmVhY3Rpb24ucG5nXCJcbiAgICAgIHRoaXMubGl2ZVJlYWN0aW9uU3RhcnQoaWNvblVSTClcbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgfVxuICAgIFxuICAgIH0pXG4gICAgdGhpcy5jY0dyb3VwRGVsZXRlZCA9IENvbWV0Q2hhdEdyb3VwRXZlbnRzLmNjR3JvdXBEZWxldGVkLnN1YnNjcmliZSgoZ3JvdXA6Q29tZXRDaGF0Lkdyb3VwKT0+e1xuICAgICAgaWYodGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLmdldEd1aWQoKSA9PSBncm91cC5nZXRHdWlkKCkpe1xuICAgICAgICB0aGlzLm9wZW5EZXRhaWxzID0gZmFsc2U7XG4gICAgICAgIHRoaXMub3BlblRocmVhZGVkTWVzc2FnZXMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5ncm91cCA9IGdyb3VwXG4gICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKVxuICAgICAgfVxuICAgIH0pXG4gICAgdGhpcy5jY0dyb3VwTGVmdCA9IENvbWV0Q2hhdEdyb3VwRXZlbnRzLmNjR3JvdXBMZWZ0LnN1YnNjcmliZSgoaXRlbTpJR3JvdXBMZWZ0KT0+e1xuICAgICAgaWYodGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLmdldEd1aWQoKSA9PSBpdGVtLmxlZnRHcm91cC5nZXRHdWlkKCkpe1xuICAgICAgICBpZih0aGlzLmxvZ2dlZEluVXNlcj8uZ2V0VWlkKCkgPT0gaXRlbT8udXNlckxlZnQuZ2V0VWlkKCkpe1xuICAgICAgICAgIHRoaXMub3BlbkRldGFpbHMgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLm9wZW5UaHJlYWRlZE1lc3NhZ2VzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ncm91cCA9IGl0ZW0ubGVmdEdyb3VwO1xuICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9XG4gICAgfSlcbiAgICB0aGlzLmNjVXNlckJsb2NrZWQgPSBDb21ldENoYXRVc2VyRXZlbnRzLmNjVXNlckJsb2NrZWQuc3Vic2NyaWJlKCh1c2VyOkNvbWV0Q2hhdC5Vc2VyKSA9PiB7XG4gICAgICBpZih0aGlzLnVzZXIgJiYgdXNlci5nZXRVaWQoKSA9PSB0aGlzLnVzZXIuZ2V0VWlkKCkpe1xuICAgICAgICB0aGlzLnVzZXIgPSB1c2VyO1xuICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgICAgIH1cbiAgIH0pXG4gICB0aGlzLmNjVXNlclVuQmxvY2tlZCA9IENvbWV0Q2hhdFVzZXJFdmVudHMuY2NVc2VyVW5ibG9ja2VkLnN1YnNjcmliZSgodXNlcjpDb21ldENoYXQuVXNlcikgPT4ge1xuICAgICBpZih0aGlzLnVzZXIgJiYgdXNlci5nZXRVaWQoKSA9PSB0aGlzLnVzZXIuZ2V0VWlkKCkpe1xuICAgICAgIHRoaXMudXNlciA9IHVzZXI7XG4gICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgIH1cbiAgIH0pXG4gIH1cbiAgdW5zdWJzY3JpYmVUb0V2ZW50cygpe1xuICAgICB0aGlzLmNjTGl2ZVJlYWN0aW9uPy51bnN1YnNjcmliZSgpXG4gdGhpcy5jY0dyb3VwRGVsZXRlZD8udW5zdWJzY3JpYmUoKVxuIHRoaXMuY2NHcm91cExlZnQ/LnVuc3Vic2NyaWJlKClcbiB0aGlzLmNjVXNlckJsb2NrZWQ/LnVuc3Vic2NyaWJlKClcbiB0aGlzLmNjVXNlclVuQmxvY2tlZD8udW5zdWJzY3JpYmUoKVxuICB9XG4gIHNldE1lc3NhZ2VzU3R5bGUoKXtcbiAgICBsZXQgZGVmYXVsdFN0eWxlOk1lc3NhZ2VzU3R5bGUgPSBuZXcgTWVzc2FnZXNTdHlsZSh7XG4gICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgICAgYmFja2dyb3VuZDogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRCYWNrZ3JvdW5kKCksXG4gICAgICBib3JkZXJSYWRpdXM6IFwibm9uZVwiLFxuICAgICAgYm9yZGVyOiBgMXB4IHNvbGlkICR7dGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQyMDAoKX1gLFxuICAgICAgbWVzc2FnZVRleHRDb2xvcjogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbiAgICAgIG1lc3NhZ2VUZXh0Rm9udDogZm9udEhlbHBlcih0aGlzLnRoZW1lU2VydmljZS50aGVtZS50eXBvZ3JhcGh5LnRpdGxlMSksXG4gICAgfSlcbiAgICB0aGlzLm1lc3NhZ2VzU3R5bGUgPSB7XG4gICAgICAuLi5kZWZhdWx0U3R5bGUsXG4gICAgICAuLi50aGlzLm1lc3NhZ2VzU3R5bGVcbiAgICB9XG4gICAgdGhpcy5kZXRhaWxzQ29uZmlndXJhdGlvbi5kZXRhaWxzU3R5bGUuYm9yZGVyID0gIHRoaXMuZGV0YWlsc0NvbmZpZ3VyYXRpb24uZGV0YWlsc1N0eWxlLmJvcmRlciA/PyBcIm5vbmVcIlxuICAgIHRoaXMuZGV0YWlsc0NvbmZpZ3VyYXRpb24uYWRkTWVtYmVyc0NvbmZpZ3VyYXRpb24uYWRkTWVtYmVyc1N0eWxlLmJvcmRlciA9ICB0aGlzLmRldGFpbHNDb25maWd1cmF0aW9uLmFkZE1lbWJlcnNDb25maWd1cmF0aW9uLmFkZE1lbWJlcnNTdHlsZS5ib3JkZXIgPz8gXCJub25lXCJcbiAgICB0aGlzLmRldGFpbHNDb25maWd1cmF0aW9uLmJhbm5lZE1lbWJlcnNDb25maWd1cmF0aW9uLmJhbm5lZE1lbWJlcnNTdHlsZS5ib3JkZXIgPSAgdGhpcy5kZXRhaWxzQ29uZmlndXJhdGlvbi5iYW5uZWRNZW1iZXJzQ29uZmlndXJhdGlvbi5iYW5uZWRNZW1iZXJzU3R5bGUuYm9yZGVyID8/IFwibm9uZVwiXG4gICAgdGhpcy5kZXRhaWxzQ29uZmlndXJhdGlvbi5ncm91cE1lbWJlcnNDb25maWd1cmF0aW9uLmdyb3VwTWVtYmVyc1N0eWxlLmJvcmRlciA9ICB0aGlzLmRldGFpbHNDb25maWd1cmF0aW9uLmdyb3VwTWVtYmVyc0NvbmZpZ3VyYXRpb24uZ3JvdXBNZW1iZXJzU3R5bGUuYm9yZGVyID8/IFwibm9uZVwiXG5cbiAgfVxuICBnZXRBdXhpbGFyeVZpZXcoKXtcbiAgICBpZih0aGlzLm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uLm1lbnUpe1xuICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24ubWVudVxuICAgIH1cbiAgICBlbHNlIGlmKHRoaXMuYXV4aWxpYXJ5TWVudSl7XG4gICAgICByZXR1cm4gdGhpcy5hdXhpbGlhcnlNZW51XG4gICAgfVxuICAgIGVsc2V7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgb3BlblRocmVhZFZpZXcgPSAobWVzc2FnZTpDb21ldENoYXQuQmFzZU1lc3NhZ2UsYnViYmxlOlRlbXBsYXRlUmVmPGFueT4pPT57XG50aGlzLnRocmVhZE1lc3NhZ2VPYmplY3Q9bWVzc2FnZVxudGhpcy5wYXJlbnRCdWJibGVWaWV3PWJ1YmJsZVxudGhpcy5vcGVuVGhyZWFkZWRNZXNzYWdlcyA9IHRydWU7XG50aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cbiAgb3BlbkRldGFpbHNQYWdlID0oKT0+e1xuICAgIHRoaXMub3BlbkRldGFpbHMgPSB0cnVlO1xuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuICBjbG9zZURldGFpbHNQYWdlID0oKT0+e1xuICAgIHRoaXMub3BlbkRldGFpbHMgPSBmYWxzZTtcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cbiAgY2xvc2VUaHJlYWRWaWV3ID0gKCk9PntcbiAgICB0aGlzLnRocmVhZE1lc3NhZ2VPYmplY3QgPSBudWxsO1xudGhpcy5vcGVuVGhyZWFkZWRNZXNzYWdlcyA9IGZhbHNlO1xudGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG4gIC8qKlxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IHJlYWN0aW9uTmFtZVxuICAgKi9cbiAgbGl2ZVJlYWN0aW9uU3RhcnQgPSAocmVhY3Rpb25OYW1lOiBzdHJpbmcpID0+IHtcbiAgICBpZiAodGhpcy5saXZlUmVhY3Rpb24pIHtcbiAgICAgIHRoaXMucmVhY3Rpb25OYW1lID0gXCJcIjtcbiAgICAgIHRoaXMubGl2ZVJlYWN0aW9uID0gZmFsc2U7XG4gICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICAgIHRoaXMucmVhY3Rpb25OYW1lID0gcmVhY3Rpb25OYW1lO1xuICAgIHRoaXMubGl2ZVJlYWN0aW9uID0gdHJ1ZTtcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnJlYWN0aW9uTmFtZSA9IFwiXCI7XG4gICAgICB0aGlzLmxpdmVSZWFjdGlvbiA9IGZhbHNlO1xuICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0sIDE1MDApO1xuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZTogU2ltcGxlQ2hhbmdlcykge1xuICAgIHRyeSB7XG4gICAgaWYgKGNoYW5nZVtDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlUmVjZWl2ZXJUeXBlLnVzZXJdIHx8IGNoYW5nZVtDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlUmVjZWl2ZXJUeXBlLmdyb3VwXSkge1xuICAgICAgdGhpcy5vcGVuVGhyZWFkZWRNZXNzYWdlcyA9IGZhbHNlO1xuICAgICAgdGhpcy5vcGVuRGV0YWlscyA9IGZhbHNlO1xuICAgICAgaWYgKHRoaXMudXNlcikge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXModGhpcy51c2VyKS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBDb21ldENoYXQuZ2V0VXNlcih0aGlzLnVzZXIpXG4gICAgICAgICAgICAudGhlbigodXNlcjogQ29tZXRDaGF0LlVzZXIpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy51c2VyID0gdXNlclxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLmdyb3VwKSB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLmdyb3VwKS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBDb21ldENoYXQuZ2V0R3JvdXAodGhpcy5ncm91cClcbiAgICAgICAgICAgIC50aGVuKChncm91cDogQ29tZXRDaGF0Lkdyb3VwKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuZ3JvdXAgPSBncm91cFxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG5pZih0aGlzLm9uRXJyb3Ipe1xuICB0aGlzLm9uRXJyb3IoQ29tZXRDaGF0RXhjZXB0aW9uKGVycm9yKSlcbn1cbiAgICB9XG4gIH1cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5jY0xpdmVSZWFjdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMub3BlblRocmVhZGVkTWVzc2FnZXMgPSBmYWxzZTtcbiAgICB0aGlzLm9wZW5EZXRhaWxzID0gZmFsc2U7XG5cbiAgfVxuICBjaGF0TGlzdFN0eWxlKCkge1xuICAgIHJldHVybiB7XG4gICAgICBiYWNrZ3JvdW5kOiB0aGlzLm1lc3NhZ2VzU3R5bGUuYmFja2dyb3VuZCB8fCB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEJhY2tncm91bmQoKSxcbiAgICAgIGhlaWdodDogdGhpcy5tZXNzYWdlc1N0eWxlLmhlaWdodCxcbiAgICAgIHdpZHRoOiB0aGlzLm1lc3NhZ2VzU3R5bGUud2lkdGgsXG4gICAgICBib3JkZXI6IHRoaXMubWVzc2FnZXNTdHlsZS5ib3JkZXIsXG4gICAgICBib3JkZXJSYWRpdXM6IHRoaXMubWVzc2FnZXNTdHlsZS5ib3JkZXJSYWRpdXNcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIHB1YmxpYyBtZXRob2RzXG4gKiBtZXNzYWdlTGlzdFJlZiBtZXRob2RzXG4gKiBUaGlzIG1ldHRob2Qgd2lsbCBhcHBlbmQgbWVzc2FnZSBpbiBtZXNzYWdlIGxpc3RcbiAqIEBwYXJhbSAge0NvbWV0Q2hhdC5CYXNlTWVzc2FnZX0gbWVzc2FnZVxuICovXG4gIGFkZE1lc3NhZ2UobWVzc2FnZTogQ29tZXRDaGF0LkJhc2VNZXNzYWdlKSB7XG4gICAgdGhpcy5tZXNzYWdlTGlzdFJlZi5hZGRNZXNzYWdlKG1lc3NhZ2UpO1xuICB9XG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCB3aWxsIHVwZGF0ZSB0aGUgbWVzc2FnZSBpbiBtZXNzYWdlTGlzdFxuICAgKiBAcGFyYW0gIHtDb21ldENoYXQuQmFzZU1lc3NhZ2V9IG1lc3NhZ2VcbiAgICovXG4gIHVwZGF0ZU1lc3NhZ2UobWVzc2FnZTogQ29tZXRDaGF0LkJhc2VNZXNzYWdlLCBtdWlkOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICB0aGlzLm1lc3NhZ2VMaXN0UmVmLnVwZGF0ZU1lc3NhZ2UobWVzc2FnZSwgbXVpZCk7XG4gIH1cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHdpbGwgcmVtb3ZlICB0aGUgbWVzc2FnZSBmcm9tIG1lc3NhZ2VMaXN0XG4gICAqIEBwYXJhbSAge0NvbWV0Q2hhdC5CYXNlTWVzc2FnZX0gbWVzc2FnZVxuICAgKi9cbiAgcmVtb3ZlTWVzc2FnZShtZXNzYWdlOiBDb21ldENoYXQuQmFzZU1lc3NhZ2UpIHtcbiAgICB0aGlzLm1lc3NhZ2VMaXN0UmVmLnJlbW92ZU1lc3NhZ2UobWVzc2FnZSlcbiAgfVxuICAvKipcbiAgICogVGhpcyBtZXRob2Qgd2lsbCBkZWxldGUgYW5kIHJlbW92ZSAgdGhlIG1lc3NhZ2UgZnJvbSBtZXNzYWdlTGlzdFxuICAgKiBAcGFyYW0gIHtDb21ldENoYXQuQmFzZU1lc3NhZ2V9IG1lc3NhZ2VcbiAgICovXG4gIGRlbGV0ZU1lc3NhZ2UobWVzc2FnZTogQ29tZXRDaGF0LkJhc2VNZXNzYWdlKSB7XG4gICAgdGhpcy5tZXNzYWdlTGlzdFJlZi5kZWxldGVNZXNzYWdlKG1lc3NhZ2UpXG4gIH1cbiAgLyoqXG4gICAqIHRoaXMgbWV0aG9kIHdpbGwgc2VuZCBhIHRleHQgbWVzc2FnZVxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IHRleHRcbiAgICovXG4gIHNlbmRUZXh0TWVzc2FnZSh0ZXh0OiBzdHJpbmcpIHtcbiAgICB0aGlzLm1lc3NhZ2VDb21wb3NlclJlZi5zZW5kVGV4dE1lc3NhZ2UodGV4dClcbiAgfVxuICAvKipcbiAgICogdGhpcyBtZXRob2Qgd2lsbCBvcGVuIHByZXZpZXcgb2YgdGhlIG1lc3NhZ2VcbiAgICogQHBhcmFtICB7Q29tZXRDaGF0LkJhc2VNZXNzYWdlfSBtZXNzYWdlXG4gICAqIEBwYXJhbSAge3N0cmluZ30gbW9kZVxuICAgKi9cbiAgcHJldmlld01lc3NhZ2UobWVzc2FnZTogQ29tZXRDaGF0LlRleHRNZXNzYWdlLCBtb2RlOiBzdHJpbmcgPSBcIlwiKSB7XG4gICAgdGhpcy5tZXNzYWdlQ29tcG9zZXJSZWYubWVzc2FnZVRvQmVFZGl0ZWQgPSBtZXNzYWdlXG4gICAgdGhpcy5tZXNzYWdlQ29tcG9zZXJSZWYub3BlbkVkaXRQcmV2aWV3KClcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNjLW1lc3NhZ2VzX193cmFwcGVyXCI+XG48ZGl2IGNsYXNzPVwiY2MtbWVzc2FnZXNcIiBbbmdTdHlsZV09XCJjaGF0TGlzdFN0eWxlKClcIiAqbmdJZj1cInVzZXIgfHwgZ3JvdXBcIj5cbjxkaXYgY2xhc3M9XCJjYy1tZXNzYWdlc19faGVhZGVyXCIgKm5nSWY9XCIhaGlkZU1lc3NhZ2VIZWFkZXJcIj5cbiAgPGRpdiAqbmdJZj1cIm1lc3NhZ2VIZWFkZXJWaWV3OyBlbHNlIGN1c3RvbUhlYWRlclZpZXdcIiBjbGFzcz1cImNjLW1lc3NhZ2VzX19oZWFkZXItY3VzdG9tdmlld1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtZXNzYWdlSGVhZGVyVmlld1wiPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbiAgPG5nLXRlbXBsYXRlICNjdXN0b21IZWFkZXJWaWV3PlxuICAgIDxjb21ldGNoYXQtbWVzc2FnZS1oZWFkZXIgW3VzZXJdPVwidXNlclwiIFtncm91cF09XCJncm91cFwiIFtzdWJ0aXRsZVZpZXddPVwibWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24uc3VidGl0bGVWaWV3XCJcbiAgICBbZGlzYWJsZVVzZXJzUHJlc2VuY2VdPVwibWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24uZGlzYWJsZVVzZXJzUHJlc2VuY2VcIiBbcHJvdGVjdGVkR3JvdXBJY29uXT1cIm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uLnByb3RlY3RlZEdyb3VwSWNvblwiIFtwcml2YXRlR3JvdXBJY29uXT1cIm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uLnByaXZhdGVHcm91cEljb25cIiBbbWVudV09XCJoZWFkZXJNZW51XCIgW21lc3NhZ2VIZWFkZXJTdHlsZV09XCJtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5tZXNzYWdlSGVhZGVyU3R5bGVcIlxuICAgIFtiYWNrQnV0dG9uSWNvblVSTF09XCJtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5iYWNrQnV0dG9uSWNvblVSTFwiIFtoaWRlQmFja0J1dHRvbl09XCJtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5oaWRlQmFja0J1dHRvblwiIFtvbkVycm9yXT1cIm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uLm9uRXJyb3JcIiBbb25CYWNrXT1cIm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uLm9uQmFja1wiIFtsaXN0SXRlbVN0eWxlXT1cIm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uLmxpc3RJdGVtU3R5bGVcIiBbc3RhdHVzSW5kaWNhdG9yU3R5bGVdPVwibWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24uc3RhdHVzSW5kaWNhdG9yU3R5bGVcIlxuICAgIFthdmF0YXJTdHlsZV09XCJtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5hdmF0YXJTdHlsZVwiXG4gICAgPlxuICAgIDwvY29tZXRjaGF0LW1lc3NhZ2UtaGVhZGVyPlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwiY2MtbWVzc2FnZXNfX2xpc3RcIj5cbiAgPGNvbWV0Y2hhdC1tZXNzYWdlLWxpc3QgI21lc3NhZ2VMaXN0UmVmIFttZXNzYWdlSW5mb3JtYXRpb25Db25maWd1cmF0aW9uXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5tZXNzYWdlSW5mb3JtYXRpb25Db25maWd1cmF0aW9uXCIgW2Rpc2FibGVTb3VuZEZvck1lc3NhZ2VzXT1cImRpc2FibGVTb3VuZEZvck1lc3NhZ2VzXCIgW2N1c3RvbVNvdW5kRm9yTWVzc2FnZXNdPVwiY3VzdG9tU291bmRGb3JJbmNvbWluZ01lc3NhZ2VzXCIgW2VtcHR5U3RhdGVWaWV3XT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5lbXB0eVN0YXRlVmlld1wiIFtsb2FkaW5nSWNvblVSTF09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24/LmxvYWRpbmdJY29uVVJMIVwiIFtsb2FkaW5nU3RhdGVWaWV3XT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5sb2FkaW5nU3RhdGVWaWV3XCIgIFt1c2VyXT1cInVzZXJcIiBbZ3JvdXBdPVwiZ3JvdXBcIlxuICBbZXJyb3JTdGF0ZVZpZXddPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLmVycm9yU3RhdGVWaWV3XCIgW2Rpc2FibGVSZWNlaXB0XT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5kaXNhYmxlUmVjZWlwdFwiIFtyZWFkSWNvbl09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24ucmVhZEljb25cIiBbZGVsaXZlcmVkSWNvbl09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uZGVsaXZlcmVkSWNvblwiIFtzZW50SWNvbl09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uc2VudEljb25cIiBbd2FpdEljb25dPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLndhaXRJY29uXCJcbiAgW2Vycm9ySWNvbl09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uZXJyb3JJY29uXCIgW2FsaWdubWVudF09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uYWxpZ25tZW50XCIgW3Nob3dBdmF0YXJdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLnNob3dBdmF0YXJcIiBbZGF0ZVBhdHRlcm5dPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLmRhdGVQYXR0ZXJuXCIgW3RpbWVzdGFtcEFsaWdubWVudF09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24udGltZXN0YW1wQWxpZ25tZW50XCIgW0RhdGVTZXBhcmF0b3JQYXR0ZXJuXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5EYXRlU2VwYXJhdG9yUGF0dGVyblwiXG4gIFt0ZW1wbGF0ZXNdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLnRlbXBsYXRlc1wiIFttZXNzYWdlc1JlcXVlc3RCdWlsZGVyXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5tZXNzYWdlc1JlcXVlc3RCdWlsZGVyXCIgW3RocmVzaG9sZFZhbHVlXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi50aHJlc2hvbGRWYWx1ZVwiIFtvblRocmVhZFJlcGxpZXNDbGlja109XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24ub25UaHJlYWRSZXBsaWVzQ2xpY2sgfHwgb3BlblRocmVhZFZpZXdcIiBbaGVhZGVyVmlld109XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uaGVhZGVyVmlld1wiIFtmb290ZXJWaWV3XT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5mb290ZXJWaWV3XCJcbiAgIFthdmF0YXJTdHlsZV09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uYXZhdGFyU3R5bGVcIiBbc2Nyb2xsVG9Cb3R0b21Pbk5ld01lc3NhZ2VzXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5zY3JvbGxUb0JvdHRvbU9uTmV3TWVzc2FnZXNcIiBbYmFja2Ryb3BTdHlsZV09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uYmFja2Ryb3BTdHlsZVwiIFtkYXRlU2VwYXJhdG9yU3R5bGVdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLmRhdGVTZXBhcmF0b3JTdHlsZVwiIFttZXNzYWdlTGlzdFN0eWxlXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5tZXNzYWdlTGlzdFN0eWxlXCIgIFtvbkVycm9yXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5vbkVycm9yXCJcbiAgPlxuICA8L2NvbWV0Y2hhdC1tZXNzYWdlLWxpc3Q+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJjYy1tZXNzYWdlc19fY29tcG9zZXJcIiAqbmdJZj1cIiFoaWRlTWVzc2FnZUNvbXBvc2VyXCI+XG4gIDxkaXYgKm5nSWY9XCJtZXNzYWdlQ29tcG9zZXJWaWV3OyBlbHNlIGN1c3RvbUNvbXBvc2VyVmlld1wiIGNsYXNzPVwiY2MtbWVzc2FnZXNfX2NvbXBvc2VyLS1jdXN0b212aWV3XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1lc3NhZ2VDb21wb3NlclZpZXdcIj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gIDxuZy10ZW1wbGF0ZSAjY3VzdG9tQ29tcG9zZXJWaWV3PlxuICAgIDxjb21ldGNoYXQtbWVzc2FnZS1jb21wb3NlciAjbWVzc2FnZUNvbXBvc2VyUmVmIFtkaXNhYmxlU291bmRGb3JNZXNzYWdlc109XCJkaXNhYmxlU291bmRGb3JNZXNzYWdlc1wiXG4gICAgW3ZvaWNlUmVjb3JkaW5nU3RvcEljb25VUkxdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi52b2ljZVJlY29yZGluZ1N0b3BJY29uVVJMXCJcbiAgICBbdm9pY2VSZWNvcmRpbmdTdGFydEljb25VUkxdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi52b2ljZVJlY29yZGluZ1N0YXJ0SWNvblVSTFwiXG4gICAgW3ZvaWNlUmVjb3JkaW5nQ2xvc2VJY29uVVJMXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24udm9pY2VSZWNvcmRpbmdDbG9zZUljb25VUkxcIlxuICAgIFt2b2ljZVJlY29yZGluZ1N1Ym1pdEljb25VUkxdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi52b2ljZVJlY29yZGluZ1N1Ym1pdEljb25VUkxcIlxuICAgIFttZWRpYVJlY29yZGVyU3R5bGVdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5tZWRpYVJlY29yZGVyU3R5bGVcIlxuICAgIFtjdXN0b21Tb3VuZEZvck1lc3NhZ2VzXT1cImN1c3RvbVNvdW5kRm9yT3V0Z29pbmdNZXNzYWdlc1wiXG4gICAgW3VzZXJdPVwidXNlclwiIFtncm91cF09XCJncm91cFwiIFt0ZXh0XT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24udGV4dFwiIFtoZWFkZXJWaWV3XT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uaGVhZGVyVmlld1wiIFtvblRleHRDaGFuZ2VdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5vblRleHRDaGFuZ2VcIiBbYXR0YWNobWVudEljb25VUkxdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5hdHRhY2htZW50SWNvblVSTFwiXG4gICAgW2F0dGFjaG1lbnRPcHRpb25zXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uYXR0YWNobWVudE9wdGlvbnNcIiBbc2Vjb25kYXJ5QnV0dG9uVmlld109XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLnNlY29uZGFyeUJ1dHRvblZpZXdcIiBbYXV4aWxhcnlCdXR0b25WaWV3XT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uYXV4aWxhcnlCdXR0b25WaWV3XCIgW2F1eGlsaWFyeUJ1dHRvbnNBbGlnbm1lbnRdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5hdXhpbGlhcnlCdXR0b25zQWxpZ25tZW50XCJcbiAgICBbc2VuZEJ1dHRvblZpZXddPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5zZW5kQnV0dG9uVmlld1wiIFtoaWRlTGl2ZVJlYWN0aW9uXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uaGlkZUxpdmVSZWFjdGlvblwiIFtMaXZlUmVhY3Rpb25JY29uVVJMXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uTGl2ZVJlYWN0aW9uSWNvblVSTFwiIFttZXNzYWdlQ29tcG9zZXJTdHlsZV09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLm1lc3NhZ2VDb21wb3NlclN0eWxlXCIgW29uU2VuZEJ1dHRvbkNsaWNrXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24ub25TZW5kQnV0dG9uQ2xpY2tcIlxuICAgIFtvblNlbmRCdXR0b25DbGlja109XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLm9uU2VuZEJ1dHRvbkNsaWNrXCIgW29uRXJyb3JdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5vbkVycm9yXCJcbiAgICA+XG4gICAgPC9jb21ldGNoYXQtbWVzc2FnZS1jb21wb3Nlcj5cbiAgPC9uZy10ZW1wbGF0ZT5cbjwvZGl2PlxuIDwvZGl2PlxuIDxkaXYgY2xhc3M9XCJjYy1tZXNzYWdlc19fbGl2ZXJlYWN0aW9uXCI+XG4gIDxjb21ldGNoYXQtbGl2ZS1yZWFjdGlvbiAqbmdJZj1cImxpdmVSZWFjdGlvblwiIFtyZWFjdGlvbkljb25VUkxdPVwicmVhY3Rpb25OYW1lXCI+PC9jb21ldGNoYXQtbGl2ZS1yZWFjdGlvbj5cbjwvZGl2PlxuPGRpdiAqbmdJZj1cIm9wZW5UaHJlYWRlZE1lc3NhZ2VzXCIgY2xhc3M9XCJjYy1tZXNzYWdlc19fdGhyZWFkZWRtZXNzYWdlc1wiPlxuPGNvbWV0Y2hhdC10aHJlYWRlZC1tZXNzYWdlcyBbb25DbG9zZV09XCJjbG9zZVRocmVhZFZpZXdcIiBbdGhyZWFkZWRNZXNzYWdlc1N0eWxlXT1cInRocmVhZGVkTWVzc2FnZUNvbmZpZ3VyYXRpb24udGhyZWFkZWRNZXNzYWdlc1N0eWxlXCIgW21lc3NhZ2VBY3Rpb25WaWV3XT1cInRocmVhZGVkTWVzc2FnZUNvbmZpZ3VyYXRpb24ubWVzc2FnZUFjdGlvblZpZXdcIiBbY2xvc2VJY29uVVJMXT1cInRocmVhZGVkTWVzc2FnZUNvbmZpZ3VyYXRpb24uY2xvc2VJY29uVVJMXCIgW29uRXJyb3JdPVwidGhyZWFkZWRNZXNzYWdlQ29uZmlndXJhdGlvbi5vbkVycm9yXCIgW2J1YmJsZVZpZXddPVwidGhyZWFkZWRNZXNzYWdlQ29uZmlndXJhdGlvbi5idWJibGVWaWV3IHx8IHBhcmVudEJ1YmJsZVZpZXdcIiBbcGFyZW50TWVzc2FnZV09XCJ0aHJlYWRNZXNzYWdlT2JqZWN0XCIgW3VzZXJdPVwidXNlclwiIFtncm91cF09XCJncm91cFwiPjwvY29tZXRjaGF0LXRocmVhZGVkLW1lc3NhZ2VzPlxuPC9kaXY+XG48ZGl2ICpuZ0lmPVwib3BlbkRldGFpbHNcIiBjbGFzcz1cImNjLW1lc3NhZ2VzX19kZXRhaWxzXCI+XG4gIDxjb21ldGNoYXQtZGV0YWlscyBbYmFja2Ryb3BTdHlsZV09XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5iYWNrZHJvcFN0eWxlXCIgIFt0cmFuc2Zlck93bmVyc2hpcENvbmZpZ3VyYXRpb25dPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24udHJhbnNmZXJPd25lcnNoaXBDb25maWd1cmF0aW9uXCIgW2dyb3VwTWVtYmVyc0NvbmZpZ3VyYXRpb25dPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24uZ3JvdXBNZW1iZXJzQ29uZmlndXJhdGlvblwiIFtiYW5uZWRNZW1iZXJzQ29uZmlndXJhdGlvbl09XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5iYW5uZWRNZW1iZXJzQ29uZmlndXJhdGlvblwiIFthZGRNZW1iZXJzQ29uZmlndXJhdGlvbl09XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5hZGRNZW1iZXJzQ29uZmlndXJhdGlvblwiICBbb25DbG9zZV09XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5vbkNsb3NlIHx8IGNsb3NlRGV0YWlsc1BhZ2VcIiBbbGlzdEl0ZW1TdHlsZV09XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5saXN0SXRlbVN0eWxlXCIgW2RldGFpbHNTdHlsZV09XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5kZXRhaWxzU3R5bGVcIiBbYXZhdGFyU3R5bGVdPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24uYXZhdGFyU3R5bGVcIiBbc3RhdHVzSW5kaWNhdG9yU3R5bGVdPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24uc3RhdHVzSW5kaWNhdG9yU3R5bGVcIiBbbGVhdmVEaWFsb2dTdHlsZV09XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5sZWF2ZURpYWxvZ1N0eWxlXCIgW2RhdGFdPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24uZGF0YVwiIFtjdXN0b21Qcm9maWxlVmlld109XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5jdXN0b21Qcm9maWxlVmlld1wiIFtzdWJ0aXRsZVZpZXddPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24uc3VidGl0bGVWaWV3XCIgW2hpZGVQcm9maWxlXT1cImRldGFpbHNDb25maWd1cmF0aW9uLmhpZGVQcm9maWxlXCIgW29uRXJyb3JdPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24ub25FcnJvclwiIFtjbG9zZUJ1dHRvbkljb25VUkxdPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24uY2xvc2VCdXR0b25JY29uVVJMXCIgIFt1c2VyXT1cInVzZXJcIiBbZ3JvdXBdPVwiZ3JvdXBcIj48L2NvbWV0Y2hhdC1kZXRhaWxzPlxuICA8L2Rpdj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNoZWFkZXJNZW51PlxuICA8ZGl2IGNsYXNzPVwiY2MtbWVzc2FnZXNfX2hlYWRlcm1lbnVcIj5cbjxkaXYgY2xhc3M9XCJjYy1tZXNzYWdlc19fYXV4aWxpYXJ5bWVudVwiICpuZ0lmPVwiZ2V0QXV4aWxhcnlWaWV3KCk7IGVsc2UgZWxzZUJsb2NrXCI+XG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJnZXRBdXhpbGFyeVZpZXcoKVwiPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuICAgIDxuZy10ZW1wbGF0ZSAjZWxzZUJsb2NrPlxuICAgICAgPGNvbWV0Y2hhdC1jYWxsLWJ1dHRvbnMgKm5nSWY9XCJlbmFibGVDYWxsaW5nXCIgdm9pY2VDYWxsSWNvblRleHQ9XCJcIiB2aWRlb0NhbGxJY29uVGV4dD1cIlwiIFt1c2VyXT1cInVzZXJcIiBbZ3JvdXBdPVwiZ3JvdXBcIiBbY2FsbEJ1dHRvbnNTdHlsZV09XCJjYWxsQnV0dG9uc1N0eWxlXCI+XG4gICAgICA8L2NvbWV0Y2hhdC1jYWxsLWJ1dHRvbnM+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8Y29tZXRjaGF0LWJ1dHRvbiAqbmdJZj1cIiFoaWRlRGV0YWlsc1wiIFtpY29uVVJMXT1cImluZm9JY29uU3R5bGVcIiBbYnV0dG9uU3R5bGVdPVwiZGV0YWlsc0J1dHRvblN0eWxlXCIgKGNjLWJ1dHRvbi1jbGlja2VkKT1cIm9wZW5EZXRhaWxzUGFnZSgpXCI+PC9jb21ldGNoYXQtYnV0dG9uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
428
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tZXRjaGF0LW1lc3NhZ2VzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NoYXQtdWlraXQtYW5ndWxhci9zcmMvQ29tZXRDaGF0TWVzc2FnZXMvY29tZXRjaGF0LW1lc3NhZ2VzL2NvbWV0Y2hhdC1tZXNzYWdlcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGF0LXVpa2l0LWFuZ3VsYXIvc3JjL0NvbWV0Q2hhdE1lc3NhZ2VzL2NvbWV0Y2hhdC1tZXNzYWdlcy9jb21ldGNoYXQtbWVzc2FnZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBRUwsU0FBUyxFQUdULHVCQUF1QixFQUl2QixZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBYTNELE9BQU8sRUFDTCxVQUFVLEVBQ1Ysc0JBQXNCLEVBQ3RCLG9CQUFvQixFQUVwQixtQkFBbUIsRUFDbkIsdUJBQXVCLEVBQ3ZCLGlCQUFpQixHQUNsQixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFDTCwwQkFBMEIsRUFDMUIsd0JBQXdCLEVBQ3hCLDRCQUE0QixFQUM1Qiw2QkFBNkIsRUFDN0Isb0JBQW9CLEVBQ3BCLGFBQWEsRUFFYixrQkFBa0IsR0FFbkIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7Ozs7Ozs7Ozs7QUFDMUU7Ozs7Ozs7O0dBUUc7QUFPSCxNQUFNLE9BQU8sMEJBQTBCO0lBbUpyQyxZQUNVLEdBQXNCLEVBQ3RCLFlBQW1DLEVBQ25DLFVBQXNCO1FBRnRCLFFBQUcsR0FBSCxHQUFH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QUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFHbEQsY0FBYztzQkFEYixTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFFckMsSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLDBCQUEwQjtzQkFBbEMsS0FBSztnQkFFRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBRUcsNEJBQTRCO3NCQUFwQyxLQUFLO2dCQUVHLDRCQUE0QjtzQkFBcEMsS0FBSztnQkFFRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBRUcsOEJBQThCO3NCQUF0QyxLQUFLO2dCQUNHLDhCQUE4QjtzQkFBdEMsS0FBSztnQkFDRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFRRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgVmlld0NoaWxkLFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgVGVtcGxhdGVSZWYsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENvbWV0Q2hhdCB9IGZyb20gXCJAY29tZXRjaGF0L2NoYXQtc2RrLWphdmFzY3JpcHRcIjtcbmltcG9ydCB7IENvbWV0Q2hhdE1lc3NhZ2VDb21wb3NlckNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9Db21ldENoYXRNZXNzYWdlQ29tcG9zZXIvY29tZXRjaGF0LW1lc3NhZ2UtY29tcG9zZXIvY29tZXRjaGF0LW1lc3NhZ2UtY29tcG9zZXIuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBDb21ldENoYXRNZXNzYWdlTGlzdENvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9Db21ldENoYXRNZXNzYWdlTGlzdC9jb21ldGNoYXQtbWVzc2FnZS1saXN0L2NvbWV0Y2hhdC1tZXNzYWdlLWxpc3QuY29tcG9uZW50XCI7XG5cbmltcG9ydCB7XG4gIExpc3RJdGVtU3R5bGUsXG4gIE1lbnVMaXN0U3R5bGUsXG4gIEF2YXRhclN0eWxlLFxuICBEYXRlU3R5bGUsXG4gIEJhc2VTdHlsZSxcbn0gZnJvbSBcIkBjb21ldGNoYXQvdWlraXQtZWxlbWVudHNcIjtcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBDb21ldENoYXRUaGVtZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vQ29tZXRDaGF0VGhlbWUuc2VydmljZVwiO1xuaW1wb3J0IHtcbiAgZm9udEhlbHBlcixcbiAgQ29tZXRDaGF0TWVzc2FnZUV2ZW50cyxcbiAgQ29tZXRDaGF0R3JvdXBFdmVudHMsXG4gIElHcm91cExlZnQsXG4gIENvbWV0Q2hhdFVzZXJFdmVudHMsXG4gIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLFxuICBDb21ldENoYXRVSUV2ZW50cyxcbn0gZnJvbSBcIkBjb21ldGNoYXQvdWlraXQtcmVzb3VyY2VzXCI7XG5pbXBvcnQge1xuICBNZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbixcbiAgTWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLFxuICBNZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLFxuICBUaHJlYWRlZE1lc3NhZ2VzQ29uZmlndXJhdGlvbixcbiAgRGV0YWlsc0NvbmZpZ3VyYXRpb24sXG4gIE1lc3NhZ2VzU3R5bGUsXG4gIE1lc3NhZ2VDb21wb3NlclN0eWxlLFxuICBNZXNzYWdlSGVhZGVyU3R5bGUsXG4gIENhbGxCdXR0b25zU3R5bGUsXG59IGZyb20gXCJAY29tZXRjaGF0L3Vpa2l0LXNoYXJlZFwiO1xuaW1wb3J0IHsgQ2hhdENvbmZpZ3VyYXRvciB9IGZyb20gXCIuLi8uLi9TaGFyZWQvRnJhbWV3b3JrL0NoYXRDb25maWd1cmF0b3JcIjtcbmltcG9ydCB7IENvbWV0Q2hhdEV4Y2VwdGlvbiB9IGZyb20gXCIuLi8uLi9TaGFyZWQvVXRpbHMvQ29tZUNoYXRFeGNlcHRpb25cIjtcbi8qKlxuICpcbiAqIENvbWV0Q2hhdE1lc3NhZ2VzIGlzIGEgd3JhcHBlciBjb21wb25lbnQgZm9yIG1lc3NhZ2VMaXN0LCBtZXNzYWdlSGVhZGVyLCBtZXNzYWdlQ29tcG9zZXIgYW5kIGxpdmVSZWFjdGlvbiBjb21wb25lbnQuXG4gKlxuICogQHZlcnNpb24gMS4wLjBcbiAqIEBhdXRob3IgQ29tZXRDaGF0VGVhbVxuICogQGNvcHlyaWdodCDCqSAyMDIyIENvbWV0Q2hhdCBJbmMuXG4gKlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiY29tZXRjaGF0LW1lc3NhZ2VzXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vY29tZXRjaGF0LW1lc3NhZ2VzLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi9jb21ldGNoYXQtbWVzc2FnZXMuY29tcG9uZW50LnNjc3NcIl0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBDb21ldENoYXRNZXNzYWdlc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgQFZpZXdDaGlsZChcIm1lc3NhZ2VDb21wb3NlclJlZlwiLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgbWVzc2FnZUNvbXBvc2VyUmVmITogQ29tZXRDaGF0TWVzc2FnZUNvbXBvc2VyQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKFwibWVzc2FnZUxpc3RSZWZcIiwgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIG1lc3NhZ2VMaXN0UmVmITogQ29tZXRDaGF0TWVzc2FnZUxpc3RDb21wb25lbnQ7XG4gIEBJbnB1dCgpIHVzZXIhOiBDb21ldENoYXQuVXNlcjtcbiAgQElucHV0KCkgZ3JvdXAhOiBDb21ldENoYXQuR3JvdXA7XG4gIEBJbnB1dCgpIGN1cnJlbnRBc2tBSUJvdCE6IENvbWV0Q2hhdC5Vc2VyO1xuICBASW5wdXQoKSBoaWRlTWVzc2FnZUNvbXBvc2VyOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGRpc2FibGVUeXBpbmchOiBib29sZWFuO1xuICBASW5wdXQoKSBtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbjogTWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24gPVxuICAgIG5ldyBNZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbih7fSk7XG4gIEBJbnB1dCgpIG1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbjogTWVzc2FnZUxpc3RDb25maWd1cmF0aW9uID1cbiAgICBuZXcgTWVzc2FnZUxpc3RDb25maWd1cmF0aW9uKHt9KTtcbiAgQElucHV0KCkgbWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbjogTWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbiA9XG4gICAgbmV3IE1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24oe30pO1xuICBASW5wdXQoKSB0aHJlYWRlZE1lc3NhZ2VDb25maWd1cmF0aW9uOiBUaHJlYWRlZE1lc3NhZ2VzQ29uZmlndXJhdGlvbiA9XG4gICAgbmV3IFRocmVhZGVkTWVzc2FnZXNDb25maWd1cmF0aW9uKHt9KTtcbiAgQElucHV0KCkgZGV0YWlsc0NvbmZpZ3VyYXRpb246IERldGFpbHNDb25maWd1cmF0aW9uID1cbiAgICBuZXcgRGV0YWlsc0NvbmZpZ3VyYXRpb24oe30pO1xuICBASW5wdXQoKSBjdXN0b21Tb3VuZEZvckluY29taW5nTWVzc2FnZXMhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGN1c3RvbVNvdW5kRm9yT3V0Z29pbmdNZXNzYWdlcyE6IHN0cmluZztcbiAgQElucHV0KCkgZGlzYWJsZVNvdW5kRm9yTWVzc2FnZXMhOiBib29sZWFuO1xuICBASW5wdXQoKSBtZXNzYWdlc1N0eWxlOiBNZXNzYWdlc1N0eWxlID0ge1xuICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgIGJhY2tncm91bmQ6IFwid2hpdGVcIixcbiAgICBib3JkZXJSYWRpdXM6IFwibm9uZVwiLFxuICAgIG1lc3NhZ2VUZXh0Q29sb3I6IFwicmdiYSgyMCwgMjAsIDIwLCAwLjMzKVwiLFxuICAgIG1lc3NhZ2VUZXh0Rm9udDogXCI3MDAgMjJweCBJbnRlclwiLFxuICB9O1xuICBASW5wdXQoKSBtZXNzYWdlSGVhZGVyVmlldyE6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBJbnB1dCgpIG1lc3NhZ2VDb21wb3NlclZpZXchOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBtZXNzYWdlTGlzdFZpZXchOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBoaWRlTWVzc2FnZUhlYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBoaWRlRGV0YWlsczogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBhdXhpbGlhcnlNZW51ITogVGVtcGxhdGVSZWY8YW55PjtcbiAgY29udmVyc2F0aW9uU3VtbWFyeUNsaWNrZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBsb2dnZWRJblVzZXIhOiBDb21ldENoYXQuVXNlciB8IG51bGw7XG4gIGNhbGxCdXR0b25zU3R5bGU6IENhbGxCdXR0b25zU3R5bGUgPSB7XG4gICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICBib3JkZXJSYWRpdXM6IFwiMFwiLFxuICAgIGJhY2tncm91bmQ6IFwidHJhbnNwYXJlbnRcIixcbiAgICBidXR0b25QYWRkaW5nOiBcIjBcIixcbiAgICBidXR0b25CYWNrZ3JvdW5kOiBcInRyYW5zcGFyZW50XCIsXG4gICAgYnV0dG9uQm9yZGVyOiBcIjAgNHB4XCIsXG4gICAgYnV0dG9uQm9yZGVyUmFkaXVzOiBcIjhweFwiLFxuICB9O1xuICBwdWJsaWMgbWVzc2FnZVRvQmVFZGl0ZWQ6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgbGl2ZVJlYWN0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyByZWFjdGlvbk5hbWU6IHN0cmluZyA9IFwiYXNzZXRzL2hlYXJ0LXJlYWN0aW9uLnBuZ1wiO1xuICBwdWJsaWMgbWVzc2FnZVRvUmVhY3Q6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSB8IG51bGwgPSBudWxsO1xuICBwdWJsaWMgY29tcG9zZXJTdHlsZXM6IE1lc3NhZ2VDb21wb3NlclN0eWxlID0ge1xuICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgYm9yZGVyUmFkaXVzOiBcIjEycHhcIixcbiAgICBiYWNrZ3JvdW5kOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDkwMCgpLFxuICAgIGlucHV0QmFja2dyb3VuZDogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRTZWNvbmRhcnkoKSwgLy8gZG9uZVxuICAgIHRleHRGb250OiBmb250SGVscGVyKHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnR5cG9ncmFwaHkuc3VidGl0bGUxKSwgLy8gZG9uZVxuICAgIHRleHRDb2xvcjogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQoKSwgLy8gZG9uZVxuICB9O1xuICBwdWJsaWMgbGl2ZVJlYWN0aW9uVGltZW91dDogYW55ID0gMDtcbiAgcHVibGljIG9wZW5UaHJlYWRlZE1lc3NhZ2VzOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBzaG93QWlCb3RDaGF0OiBib29sZWFuID0gZmFsc2U7XG4gIC8qXG4gbWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb25cbiAqL1xuICBzdWJ0aXRsZVZpZXchOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBkaXNhYmxlVXNlcnNQcmVzZW5jZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcm90ZWN0ZWRHcm91cEljb246IHN0cmluZyA9IFwiYXNzZXRzL0xvY2tlZC5zdmdcIjtcbiAgcHJpdmF0ZUdyb3VwSWNvbjogc3RyaW5nID0gXCJhc3NldHMvUHJpdmF0ZS5zdmdcIjtcbiAgbWVudSE6IFRlbXBsYXRlUmVmPGFueT47XG4gIGhlYWRlclN0eWxlOiBNZXNzYWdlSGVhZGVyU3R5bGUgPSBuZXcgTWVzc2FnZUhlYWRlclN0eWxlKHt9KTtcbiAgYmFja0J1dHRvbkljb25VUkw6IHN0cmluZyA9IFwiYXNzZXRzL2JhY2tidXR0b24uc3ZnXCI7XG4gIGhpZGVCYWNrSWNvbjogYm9vbGVhbiA9IHRydWU7XG4gIGxpc3RJdGVtVmlldyE6IFRlbXBsYXRlUmVmPGFueT47XG4gIG9uRXJyb3IhOiAoZXJyb3I6IENvbWV0Q2hhdC5Db21ldENoYXRFeGNlcHRpb24pID0+IHZvaWQ7XG4gIG9uQmFjayE6ICgpID0+IHZvaWQ7XG4gIGF2YXRhclN0eWxlOiBBdmF0YXJTdHlsZSA9IHtcbiAgICBib3JkZXJSYWRpdXM6IFwiMTZweFwiLFxuICAgIHdpZHRoOiBcIjI4cHhcIixcbiAgICBoZWlnaHQ6IFwiMjhweFwiLFxuICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgYmFja2dyb3VuZENvbG9yOiBcIndoaXRlXCIsXG4gICAgbmFtZVRleHRDb2xvcjogXCJyZ2IoMjAsMjAsMjApXCIsXG4gICAgYmFja2dyb3VuZFNpemU6IFwiY292ZXJcIixcbiAgICBuYW1lVGV4dEZvbnQ6IFwiNTAwIDE2cHggSW50ZXJcIixcblxuICAgIG91dGVyVmlld0JvcmRlclNwYWNpbmc6IFwiXCIsXG4gIH07XG4gIHN0YXR1c0luZGljYXRvclN0eWxlOiBCYXNlU3R5bGUgPSB7XG4gICAgYm9yZGVyUmFkaXVzOiBcIjE2cHhcIixcbiAgICB3aWR0aDogXCIxMHB4XCIsXG4gICAgaGVpZ2h0OiBcIjEwcHhcIixcbiAgICBib3JkZXI6IFwibm9uZVwiLFxuICB9O1xuICBtZXNzYWdlSGVhZGVyU3R5bGU6IE1lc3NhZ2VIZWFkZXJTdHlsZSA9IHtcbiAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgICBiYWNrZ3JvdW5kOiBcInRyYW5zcGFyZW50XCIsXG4gICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICBib3JkZXJSYWRpdXM6IFwiMFwiLFxuICAgIGJhY2tCdXR0b25JY29uVGludDogXCIjMzM5OUZGXCIsXG4gICAgb25saW5lU3RhdHVzQ29sb3I6IFwiIzAwZjMwMFwiLFxuICAgIHN1YnRpdGxlVGV4dENvbG9yOiBcImdyZXlcIixcbiAgICBzdWJ0aXRsZVRleHRGb250OiBcIjQwMCAxNHB4IEludGVyXCIsXG4gICAgdHlwaW5nSW5kaWNhdG9yVGV4dENvbG9yOiBcIiMzMzk5RkZcIixcbiAgICB0eXBpbmdJbmRpY2F0b3JUZXh0Rm9udDogXCI0MDAgMTNweCBJbnRlclwiLFxuICB9O1xuICBsaXN0SXRlbVN0eWxlOiBMaXN0SXRlbVN0eWxlID0ge1xuICAgIGJhY2tncm91bmQ6IFwid2hpdGVcIixcbiAgICB0aXRsZUNvbG9yOiBcImJsYWNrXCIsXG4gICAgdGl0bGVGb250OiBcIjUwMCAxNnB4IEludGVyXCIsXG4gICAgd2lkdGg6IFwiXCIsXG4gICAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgICBib3JkZXI6IFwibm9uZVwiLFxuICAgIGJvcmRlclJhZGl1czogXCIycHhcIixcbiAgICBzZXBhcmF0b3JDb2xvcjogXCJcIixcbiAgICBhY3RpdmVCYWNrZ3JvdW5kOiBcInRyYW5zcGFyZW50XCIsXG4gICAgaG92ZXJCYWNrZ3JvdW5kOiBcInRyYW5zcGFyZW50XCIsXG4gIH07XG5cbiAgaW5mb0ljb25TdHlsZTogc3RyaW5nID0gXCJhc3NldHMvSW5mby5zdmdcIjtcbiAgZGV0YWlsc0J1dHRvblN0eWxlOiBhbnkgPSB7XG4gICAgaGVpZ2h0OiBcIjI0cHhcIixcbiAgICB3aWR0aDogXCIyNHB4XCIsXG4gICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICBib3JkZXJSYWRpdXM6IFwiMFwiLFxuICAgIGJhY2tncm91bmQ6IFwidHJhbnNwYXJlbnRcIixcbiAgICBidXR0b25JY29uVGludDogXCIjMzM5OUZGXCIsXG4gICAgcGFkZGluZzogXCIwIDhweFwiLFxuICB9O1xuICBlbmFibGVDYWxsaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIC8vXG4gIHB1YmxpYyBjY0xpdmVSZWFjdGlvbiE6IFN1YnNjcmlwdGlvbjtcbiAgcHVibGljIGNjR3JvdXBEZWxldGVkITogU3Vic2NyaXB0aW9uO1xuICBwdWJsaWMgY2NHcm91cExlZnQhOiBTdWJzY3JpcHRpb247XG4gIHB1YmxpYyBjY1VzZXJCbG9ja2VkITogU3Vic2NyaXB0aW9uO1xuICBwdWJsaWMgY2NVc2VyVW5CbG9ja2VkITogU3Vic2NyaXB0aW9uO1xuICBwdWJsaWMgY2NTaG93UGFuZWwhOiBTdWJzY3JpcHRpb247XG4gIHRocmVhZE1lc3NhZ2VPYmplY3QhOiBDb21ldENoYXQuQmFzZU1lc3NhZ2UgfCBudWxsO1xuICBwYXJlbnRCdWJibGVWaWV3ITogVGVtcGxhdGVSZWY8YW55PjtcbiAgb3BlbkRldGFpbHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgdGhlbWVTZXJ2aWNlOiBDb21ldENoYXRUaGVtZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmXG4gICkge31cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zdWJzY3JpYmVUb0V2ZW50cygpO1xuICAgIHRoaXMuc2V0TWVzc2FnZXNTdHlsZSgpO1xuICAgIENvbWV0Q2hhdC5nZXRMb2dnZWRpblVzZXIoKVxuICAgICAgLnRoZW4oKHVzZXIpID0+IHtcbiAgICAgICAgdGhpcy5sb2dnZWRJblVzZXIgPSB1c2VyO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IENvbWV0Q2hhdC5Db21ldENoYXRFeGNlcHRpb24pID0+IHtcbiAgICAgICAgaWYgKHRoaXMub25FcnJvcikge1xuICAgICAgICAgIHRoaXMub25FcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIGlmIChDaGF0Q29uZmlndXJhdG9yLm5hbWVzLmluY2x1ZGVzKFwiY2FsbGluZ1wiKSkge1xuICAgICAgdGhpcy5lbmFibGVDYWxsaW5nID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBzdWJzY3JpYmVUb0V2ZW50cygpIHtcbiAgICB0aGlzLmNjTGl2ZVJlYWN0aW9uID0gQ29tZXRDaGF0TWVzc2FnZUV2ZW50cy5jY0xpdmVSZWFjdGlvbi5zdWJzY3JpYmUoXG4gICAgICAocmVhY3Rpb25OYW1lOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHJlYWN0aW9uTmFtZSAmJiByZWFjdGlvbk5hbWUgIT0gXCJcIikge1xuICAgICAgICAgIGxldCBpY29uVVJMOiBzdHJpbmcgPVxuICAgICAgICAgICAgdGhpcy5tZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLkxpdmVSZWFjdGlvbkljb25VUkwgPz9cbiAgICAgICAgICAgIFwiYXNzZXRzL2hlYXJ0LXJlYWN0aW9uLnBuZ1wiO1xuICAgICAgICAgIHRoaXMubGl2ZVJlYWN0aW9uU3RhcnQoaWNvblVSTCk7XG4gICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLmNjR3JvdXBEZWxldGVkID0gQ29tZXRDaGF0R3JvdXBFdmVudHMuY2NHcm91cERlbGV0ZWQuc3Vic2NyaWJlKFxuICAgICAgKGdyb3VwOiBDb21ldENoYXQuR3JvdXApID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXAgJiYgdGhpcy5ncm91cC5nZXRHdWlkKCkgPT0gZ3JvdXAuZ2V0R3VpZCgpKSB7XG4gICAgICAgICAgdGhpcy5vcGVuRGV0YWlscyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMub3BlblRocmVhZGVkTWVzc2FnZXMgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmdyb3VwID0gZ3JvdXA7XG4gICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLmNjR3JvdXBMZWZ0ID0gQ29tZXRDaGF0R3JvdXBFdmVudHMuY2NHcm91cExlZnQuc3Vic2NyaWJlKFxuICAgICAgKGl0ZW06IElHcm91cExlZnQpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXAgJiYgdGhpcy5ncm91cC5nZXRHdWlkKCkgPT0gaXRlbS5sZWZ0R3JvdXAuZ2V0R3VpZCgpKSB7XG4gICAgICAgICAgaWYgKHRoaXMubG9nZ2VkSW5Vc2VyPy5nZXRVaWQoKSA9PSBpdGVtPy51c2VyTGVmdC5nZXRVaWQoKSkge1xuICAgICAgICAgICAgdGhpcy5vcGVuRGV0YWlscyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5vcGVuVGhyZWFkZWRNZXNzYWdlcyA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmdyb3VwID0gaXRlbS5sZWZ0R3JvdXA7XG4gICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgICB0aGlzLmNjVXNlckJsb2NrZWQgPSBDb21ldENoYXRVc2VyRXZlbnRzLmNjVXNlckJsb2NrZWQuc3Vic2NyaWJlKFxuICAgICAgKHVzZXI6IENvbWV0Q2hhdC5Vc2VyKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnVzZXIgJiYgdXNlci5nZXRVaWQoKSA9PSB0aGlzLnVzZXIuZ2V0VWlkKCkpIHtcbiAgICAgICAgICB0aGlzLnVzZXIgPSB1c2VyO1xuICAgICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gICAgdGhpcy5jY1VzZXJVbkJsb2NrZWQgPSBDb21ldENoYXRVc2VyRXZlbnRzLmNjVXNlclVuYmxvY2tlZC5zdWJzY3JpYmUoXG4gICAgICAodXNlcjogQ29tZXRDaGF0LlVzZXIpID0+IHtcbiAgICAgICAgaWYgKHRoaXMudXNlciAmJiB1c2VyLmdldFVpZCgpID09IHRoaXMudXNlci5nZXRVaWQoKSkge1xuICAgICAgICAgIHRoaXMudXNlciA9IHVzZXI7XG4gICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMuY2NTaG93UGFuZWwgPSBDb21ldENoYXRVSUV2ZW50cy5jY1Nob3dQYW5lbC5zdWJzY3JpYmUoKGU6IGFueSkgPT4ge1xuICAgICAgdGhpcy5jdXJyZW50QXNrQUlCb3QgPSBlLmNoaWxkPy5ib3Q7XG4gICAgICBpZiAoZS5jaGlsZD8uc2hvd0JvdFZpZXcpIHtcbiAgICAgICAgdGhpcy5zaG93QWlCb3RDaGF0ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2hvd0FpQm90Q2hhdCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSk7XG4gIH1cbiAgdW5zdWJzY3JpYmVUb0V2ZW50cygpIHtcbiAgICB0aGlzLmNjTGl2ZVJlYWN0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2NHcm91cERlbGV0ZWQ/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jY0dyb3VwTGVmdD8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNjVXNlckJsb2NrZWQ/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jY1VzZXJVbkJsb2NrZWQ/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jY1Nob3dQYW5lbD8udW5zdWJzY3JpYmUoKTtcbiAgfVxuICBzZXRNZXNzYWdlc1N0eWxlKCkge1xuICAgIGxldCBkZWZhdWx0U3R5bGU6IE1lc3NhZ2VzU3R5bGUgPSBuZXcgTWVzc2FnZXNTdHlsZSh7XG4gICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgICAgYmFja2dyb3VuZDogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRCYWNrZ3JvdW5kKCksXG4gICAgICBib3JkZXJSYWRpdXM6IFwibm9uZVwiLFxuICAgICAgYm9yZGVyOiBgMXB4IHNvbGlkICR7dGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQyMDAoKX1gLFxuICAgICAgbWVzc2FnZVRleHRDb2xvcjogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbiAgICAgIG1lc3NhZ2VUZXh0Rm9udDogZm9udEhlbHBlcih0aGlzLnRoZW1lU2VydmljZS50aGVtZS50eXBvZ3JhcGh5LnRpdGxlMSksXG4gICAgfSk7XG4gICAgdGhpcy5tZXNzYWdlc1N0eWxlID0ge1xuICAgICAgLi4uZGVmYXVsdFN0eWxlLFxuICAgICAgLi4udGhpcy5tZXNzYWdlc1N0eWxlLFxuICAgIH07XG4gICAgdGhpcy5kZXRhaWxzQ29uZmlndXJhdGlvbi5kZXRhaWxzU3R5bGUuYm9yZGVyID1cbiAgICAgIHRoaXMuZGV0YWlsc0NvbmZpZ3VyYXRpb24uZGV0YWlsc1N0eWxlLmJvcmRlciA/PyBcIm5vbmVcIjtcbiAgICB0aGlzLmRldGFpbHNDb25maWd1cmF0aW9uLmFkZE1lbWJlcnNDb25maWd1cmF0aW9uLmFkZE1lbWJlcnNTdHlsZS5ib3JkZXIgPVxuICAgICAgdGhpcy5kZXRhaWxzQ29uZmlndXJhdGlvbi5hZGRNZW1iZXJzQ29uZmlndXJhdGlvbi5hZGRNZW1iZXJzU3R5bGVcbiAgICAgICAgLmJvcmRlciA/PyBcIm5vbmVcIjtcbiAgICB0aGlzLmRldGFpbHNDb25maWd1cmF0aW9uLmJhbm5lZE1lbWJlcnNDb25maWd1cmF0aW9uLmJhbm5lZE1lbWJlcnNTdHlsZS5ib3JkZXIgPVxuICAgICAgdGhpcy5kZXRhaWxzQ29uZmlndXJhdGlvbi5iYW5uZWRNZW1iZXJzQ29uZmlndXJhdGlvbi5iYW5uZWRNZW1iZXJzU3R5bGVcbiAgICAgICAgLmJvcmRlciA/PyBcIm5vbmVcIjtcbiAgICB0aGlzLmRldGFpbHNDb25maWd1cmF0aW9uLmdyb3VwTWVtYmVyc0NvbmZpZ3VyYXRpb24uZ3JvdXBNZW1iZXJzU3R5bGUuYm9yZGVyID1cbiAgICAgIHRoaXMuZGV0YWlsc0NvbmZpZ3VyYXRpb24uZ3JvdXBNZW1iZXJzQ29uZmlndXJhdGlvbi5ncm91cE1lbWJlcnNTdHlsZVxuICAgICAgICAuYm9yZGVyID8/IFwibm9uZVwiO1xuICB9XG4gIGdldEF1eGlsYXJ5VmlldygpIHtcbiAgICBpZiAodGhpcy5tZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5tZW51KSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5tZW51O1xuICAgIH0gZWxzZSBpZiAodGhpcy5hdXhpbGlhcnlNZW51KSB7XG4gICAgICByZXR1cm4gdGhpcy5hdXhpbGlhcnlNZW51O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgb3BlblRocmVhZFZpZXcgPSAoXG4gICAgbWVzc2FnZTogQ29tZXRDaGF0LkJhc2VNZXNzYWdlLFxuICAgIGJ1YmJsZTogVGVtcGxhdGVSZWY8YW55PlxuICApID0+IHtcbiAgICB0aGlzLnRocmVhZE1lc3NhZ2VPYmplY3QgPSBtZXNzYWdlO1xuICAgIHRoaXMucGFyZW50QnViYmxlVmlldyA9IGJ1YmJsZTtcbiAgICB0aGlzLm9wZW5UaHJlYWRlZE1lc3NhZ2VzID0gdHJ1ZTtcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH07XG4gIG9wZW5EZXRhaWxzUGFnZSA9ICgpID0+IHtcbiAgICB0aGlzLm9wZW5EZXRhaWxzID0gdHJ1ZTtcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH07XG4gIGNsb3NlRGV0YWlsc1BhZ2UgPSAoKSA9PiB7XG4gICAgdGhpcy5vcGVuRGV0YWlscyA9IGZhbHNlO1xuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfTtcbiAgY2xvc2VUaHJlYWRWaWV3ID0gKCkgPT4ge1xuICAgIHRoaXMudGhyZWFkTWVzc2FnZU9iamVjdCA9IG51bGw7XG4gICAgdGhpcy5vcGVuVGhyZWFkZWRNZXNzYWdlcyA9IGZhbHNlO1xuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfTtcbiAgLyoqXG4gICAqIEBwYXJhbSAge3N0cmluZ30gcmVhY3Rpb25OYW1lXG4gICAqL1xuICBsaXZlUmVhY3Rpb25TdGFydCA9IChyZWFjdGlvbk5hbWU6IHN0cmluZykgPT4ge1xuICAgIGlmICh0aGlzLmxpdmVSZWFjdGlvbikge1xuICAgICAgdGhpcy5yZWFjdGlvbk5hbWUgPSBcIlwiO1xuICAgICAgdGhpcy5saXZlUmVhY3Rpb24gPSBmYWxzZTtcbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gICAgdGhpcy5yZWFjdGlvbk5hbWUgPSByZWFjdGlvbk5hbWU7XG4gICAgdGhpcy5saXZlUmVhY3Rpb24gPSB0cnVlO1xuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMucmVhY3Rpb25OYW1lID0gXCJcIjtcbiAgICAgIHRoaXMubGl2ZVJlYWN0aW9uID0gZmFsc2U7XG4gICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSwgMTUwMCk7XG4gICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9O1xuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZTogU2ltcGxlQ2hhbmdlcykge1xuICAgIHRyeSB7XG4gICAgICBpZiAoXG4gICAgICAgIGNoYW5nZVtDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlUmVjZWl2ZXJUeXBlLnVzZXJdIHx8XG4gICAgICAgIGNoYW5nZVtDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlUmVjZWl2ZXJUeXBlLmdyb3VwXVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMub3BlblRocmVhZGVkTWVzc2FnZXMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5vcGVuRGV0YWlscyA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy51c2VyKSB7XG4gICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMudXNlcikubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBDb21ldENoYXQuZ2V0VXNlcih0aGlzLnVzZXIpLnRoZW4oKHVzZXI6IENvbWV0Q2hhdC5Vc2VyKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMudXNlciA9IHVzZXI7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5ncm91cCkge1xuICAgICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLmdyb3VwKS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIENvbWV0Q2hhdC5nZXRHcm91cCh0aGlzLmdyb3VwKS50aGVuKChncm91cDogQ29tZXRDaGF0Lkdyb3VwKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuZ3JvdXAgPSBncm91cDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGlmICh0aGlzLm9uRXJyb3IpIHtcbiAgICAgICAgdGhpcy5vbkVycm9yKENvbWV0Q2hhdEV4Y2VwdGlvbihlcnJvcikpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmNjTGl2ZVJlYWN0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5vcGVuVGhyZWFkZWRNZXNzYWdlcyA9IGZhbHNlO1xuICAgIHRoaXMub3BlbkRldGFpbHMgPSBmYWxzZTtcbiAgfVxuICBjaGF0TGlzdFN0eWxlKCkge1xuICAgIHJldHVybiB7XG4gICAgICBiYWNrZ3JvdW5kOlxuICAgICAgICB0aGlzLm1lc3NhZ2VzU3R5bGUuYmFja2dyb3VuZCB8fFxuICAgICAgICB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEJhY2tncm91bmQoKSxcbiAgICAgIGhlaWdodDogdGhpcy5tZXNzYWdlc1N0eWxlLmhlaWdodCxcbiAgICAgIHdpZHRoOiB0aGlzLm1lc3NhZ2VzU3R5bGUud2lkdGgsXG4gICAgICBib3JkZXI6IHRoaXMubWVzc2FnZXNTdHlsZS5ib3JkZXIsXG4gICAgICBib3JkZXJSYWRpdXM6IHRoaXMubWVzc2FnZXNTdHlsZS5ib3JkZXJSYWRpdXMsXG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogcHVibGljIG1ldGhvZHNcbiAgICogbWVzc2FnZUxpc3RSZWYgbWV0aG9kc1xuICAgKiBUaGlzIG1ldHRob2Qgd2lsbCBhcHBlbmQgbWVzc2FnZSBpbiBtZXNzYWdlIGxpc3RcbiAgICogQHBhcmFtICB7Q29tZXRDaGF0LkJhc2VNZXNzYWdlfSBtZXNzYWdlXG4gICAqL1xuICBhZGRNZXNzYWdlKG1lc3NhZ2U6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSkge1xuICAgIHRoaXMubWVzc2FnZUxpc3RSZWYuYWRkTWVzc2FnZShtZXNzYWdlKTtcbiAgfVxuICAvKipcbiAgICogVGhpcyBtZXRob2Qgd2lsbCB1cGRhdGUgdGhlIG1lc3NhZ2UgaW4gbWVzc2FnZUxpc3RcbiAgICogQHBhcmFtICB7Q29tZXRDaGF0LkJhc2VNZXNzYWdlfSBtZXNzYWdlXG4gICAqL1xuICB1cGRhdGVNZXNzYWdlKG1lc3NhZ2U6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSwgbXVpZDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgdGhpcy5tZXNzYWdlTGlzdFJlZi51cGRhdGVNZXNzYWdlKG1lc3NhZ2UsIG11aWQpO1xuICB9XG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCB3aWxsIHJlbW92ZSAgdGhlIG1lc3NhZ2UgZnJvbSBtZXNzYWdlTGlzdFxuICAgKiBAcGFyYW0gIHtDb21ldENoYXQuQmFzZU1lc3NhZ2V9IG1lc3NhZ2VcbiAgICovXG4gIHJlbW92ZU1lc3NhZ2UobWVzc2FnZTogQ29tZXRDaGF0LkJhc2VNZXNzYWdlKSB7XG4gICAgdGhpcy5tZXNzYWdlTGlzdFJlZi5yZW1vdmVNZXNzYWdlKG1lc3NhZ2UpO1xuICB9XG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCB3aWxsIGRlbGV0ZSBhbmQgcmVtb3ZlICB0aGUgbWVzc2FnZSBmcm9tIG1lc3NhZ2VMaXN0XG4gICAqIEBwYXJhbSAge0NvbWV0Q2hhdC5CYXNlTWVzc2FnZX0gbWVzc2FnZVxuICAgKi9cbiAgZGVsZXRlTWVzc2FnZShtZXNzYWdlOiBDb21ldENoYXQuQmFzZU1lc3NhZ2UpIHtcbiAgICB0aGlzLm1lc3NhZ2VMaXN0UmVmLmRlbGV0ZU1lc3NhZ2UobWVzc2FnZSk7XG4gIH1cbiAgLyoqXG4gICAqIHRoaXMgbWV0aG9kIHdpbGwgc2VuZCBhIHRleHQgbWVzc2FnZVxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IHRleHRcbiAgICovXG4gIHNlbmRUZXh0TWVzc2FnZSh0ZXh0OiBzdHJpbmcpIHtcbiAgICB0aGlzLm1lc3NhZ2VDb21wb3NlclJlZi5zZW5kVGV4dE1lc3NhZ2UodGV4dCk7XG4gIH1cbiAgLyoqXG4gICAqIHRoaXMgbWV0aG9kIHdpbGwgb3BlbiBwcmV2aWV3IG9mIHRoZSBtZXNzYWdlXG4gICAqIEBwYXJhbSAge0NvbWV0Q2hhdC5CYXNlTWVzc2FnZX0gbWVzc2FnZVxuICAgKiBAcGFyYW0gIHtzdHJpbmd9IG1vZGVcbiAgICovXG4gIHByZXZpZXdNZXNzYWdlKG1lc3NhZ2U6IENvbWV0Q2hhdC5UZXh0TWVzc2FnZSwgbW9kZTogc3RyaW5nID0gXCJcIikge1xuICAgIHRoaXMubWVzc2FnZUNvbXBvc2VyUmVmLm1lc3NhZ2VUb0JlRWRpdGVkID0gbWVzc2FnZTtcbiAgICB0aGlzLm1lc3NhZ2VDb21wb3NlclJlZi5vcGVuRWRpdFByZXZpZXcoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNjLW1lc3NhZ2VzX193cmFwcGVyXCI+XG4gIDxjb21ldGNoYXQtYmFja2Ryb3AgKm5nSWY9XCJzaG93QWlCb3RDaGF0XCI+XG4gICAgPGFpYXNzaXN0LWJvdC1tZXNzYWdlLWxpc3QgW3VzZXJdPVwidXNlclwiIFtncm91cF09XCJncm91cFwiXG4gICAgICBbY3VycmVudEFza0FJQm90XT1cImN1cnJlbnRBc2tBSUJvdFwiPjwvYWlhc3Npc3QtYm90LW1lc3NhZ2UtbGlzdD5cbiAgPC9jb21ldGNoYXQtYmFja2Ryb3A+XG4gIDxkaXYgY2xhc3M9XCJjYy1tZXNzYWdlc1wiIFtuZ1N0eWxlXT1cImNoYXRMaXN0U3R5bGUoKVwiICpuZ0lmPVwidXNlciB8fCBncm91cFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjYy1tZXNzYWdlc19faGVhZGVyXCIgKm5nSWY9XCIhaGlkZU1lc3NhZ2VIZWFkZXJcIj5cbiAgICAgIDxkaXYgKm5nSWY9XCJtZXNzYWdlSGVhZGVyVmlldzsgZWxzZSBjdXN0b21IZWFkZXJWaWV3XCIgY2xhc3M9XCJjYy1tZXNzYWdlc19faGVhZGVyLWN1c3RvbXZpZXdcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1lc3NhZ2VIZWFkZXJWaWV3XCI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctdGVtcGxhdGUgI2N1c3RvbUhlYWRlclZpZXc+XG4gICAgICAgIDxjb21ldGNoYXQtbWVzc2FnZS1oZWFkZXIgW3VzZXJdPVwidXNlclwiIFtncm91cF09XCJncm91cFwiIFtzdWJ0aXRsZVZpZXddPVwibWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24uc3VidGl0bGVWaWV3XCJcbiAgICAgICAgICBbZGlzYWJsZVVzZXJzUHJlc2VuY2VdPVwibWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24uZGlzYWJsZVVzZXJzUHJlc2VuY2VcIlxuICAgICAgICAgIFtwcm90ZWN0ZWRHcm91cEljb25dPVwibWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24ucHJvdGVjdGVkR3JvdXBJY29uXCJcbiAgICAgICAgICBbcHJpdmF0ZUdyb3VwSWNvbl09XCJtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5wcml2YXRlR3JvdXBJY29uXCIgW21lbnVdPVwiaGVhZGVyTWVudVwiXG4gICAgICAgICAgW21lc3NhZ2VIZWFkZXJTdHlsZV09XCJtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5tZXNzYWdlSGVhZGVyU3R5bGVcIlxuICAgICAgICAgIFtiYWNrQnV0dG9uSWNvblVSTF09XCJtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5iYWNrQnV0dG9uSWNvblVSTFwiXG4gICAgICAgICAgW2hpZGVCYWNrQnV0dG9uXT1cIm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uLmhpZGVCYWNrQnV0dG9uXCIgW29uRXJyb3JdPVwibWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24ub25FcnJvclwiXG4gICAgICAgICAgW29uQmFja109XCJtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5vbkJhY2tcIiBbbGlzdEl0ZW1TdHlsZV09XCJtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5saXN0SXRlbVN0eWxlXCJcbiAgICAgICAgICBbc3RhdHVzSW5kaWNhdG9yU3R5bGVdPVwibWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24uc3RhdHVzSW5kaWNhdG9yU3R5bGVcIlxuICAgICAgICAgIFthdmF0YXJTdHlsZV09XCJtZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5hdmF0YXJTdHlsZVwiPlxuICAgICAgICA8L2NvbWV0Y2hhdC1tZXNzYWdlLWhlYWRlcj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNjLW1lc3NhZ2VzX19saXN0XCI+XG4gICAgICA8Y29tZXRjaGF0LW1lc3NhZ2UtbGlzdCAjbWVzc2FnZUxpc3RSZWZcbiAgICAgICAgW21lc3NhZ2VJbmZvcm1hdGlvbkNvbmZpZ3VyYXRpb25dPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLm1lc3NhZ2VJbmZvcm1hdGlvbkNvbmZpZ3VyYXRpb25cIlxuICAgICAgICBbZGlzYWJsZVNvdW5kRm9yTWVzc2FnZXNdPVwiZGlzYWJsZVNvdW5kRm9yTWVzc2FnZXNcIiBbY3VzdG9tU291bmRGb3JNZXNzYWdlc109XCJjdXN0b21Tb3VuZEZvckluY29taW5nTWVzc2FnZXNcIlxuICAgICAgICBbZW1wdHlTdGF0ZVZpZXddPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLmVtcHR5U3RhdGVWaWV3XCJcbiAgICAgICAgW2xvYWRpbmdJY29uVVJMXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbj8ubG9hZGluZ0ljb25VUkwhXCJcbiAgICAgICAgW2xvYWRpbmdTdGF0ZVZpZXddPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLmxvYWRpbmdTdGF0ZVZpZXdcIiBbdXNlcl09XCJ1c2VyXCIgW2dyb3VwXT1cImdyb3VwXCJcbiAgICAgICAgW2Vycm9yU3RhdGVWaWV3XT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5lcnJvclN0YXRlVmlld1wiXG4gICAgICAgIFtkaXNhYmxlUmVjZWlwdF09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uZGlzYWJsZVJlY2VpcHRcIiBbcmVhZEljb25dPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLnJlYWRJY29uXCJcbiAgICAgICAgW2RlbGl2ZXJlZEljb25dPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLmRlbGl2ZXJlZEljb25cIiBbc2VudEljb25dPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLnNlbnRJY29uXCJcbiAgICAgICAgW3dhaXRJY29uXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi53YWl0SWNvblwiIFtlcnJvckljb25dPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLmVycm9ySWNvblwiXG4gICAgICAgIFthbGlnbm1lbnRdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLmFsaWdubWVudFwiIFtzaG93QXZhdGFyXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5zaG93QXZhdGFyXCJcbiAgICAgICAgW2RhdGVQYXR0ZXJuXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5kYXRlUGF0dGVyblwiXG4gICAgICAgIFt0aW1lc3RhbXBBbGlnbm1lbnRdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLnRpbWVzdGFtcEFsaWdubWVudFwiXG4gICAgICAgIFtEYXRlU2VwYXJhdG9yUGF0dGVybl09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uRGF0ZVNlcGFyYXRvclBhdHRlcm5cIlxuICAgICAgICBbdGVtcGxhdGVzXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi50ZW1wbGF0ZXNcIlxuICAgICAgICBbbWVzc2FnZXNSZXF1ZXN0QnVpbGRlcl09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24ubWVzc2FnZXNSZXF1ZXN0QnVpbGRlclwiXG4gICAgICAgIFt0aHJlc2hvbGRWYWx1ZV09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24udGhyZXNob2xkVmFsdWVcIlxuICAgICAgICBbb25UaHJlYWRSZXBsaWVzQ2xpY2tdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLm9uVGhyZWFkUmVwbGllc0NsaWNrIHx8IG9wZW5UaHJlYWRWaWV3XCJcbiAgICAgICAgW2hlYWRlclZpZXddPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLmhlYWRlclZpZXdcIiBbZm9vdGVyVmlld109XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uZm9vdGVyVmlld1wiXG4gICAgICAgIFthdmF0YXJTdHlsZV09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uYXZhdGFyU3R5bGVcIlxuICAgICAgICBbc2Nyb2xsVG9Cb3R0b21Pbk5ld01lc3NhZ2VzXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5zY3JvbGxUb0JvdHRvbU9uTmV3TWVzc2FnZXNcIlxuICAgICAgICBbYmFja2Ryb3BTdHlsZV09XCJtZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uYmFja2Ryb3BTdHlsZVwiXG4gICAgICAgIFtkYXRlU2VwYXJhdG9yU3R5bGVdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLmRhdGVTZXBhcmF0b3JTdHlsZVwiXG4gICAgICAgIFttZXNzYWdlTGlzdFN0eWxlXT1cIm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5tZXNzYWdlTGlzdFN0eWxlXCIgW29uRXJyb3JdPVwibWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLm9uRXJyb3JcIj5cbiAgICAgIDwvY29tZXRjaGF0LW1lc3NhZ2UtbGlzdD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY2MtbWVzc2FnZXNfX2NvbXBvc2VyXCIgKm5nSWY9XCIhaGlkZU1lc3NhZ2VDb21wb3NlclwiPlxuICAgICAgPGRpdiAqbmdJZj1cIm1lc3NhZ2VDb21wb3NlclZpZXc7IGVsc2UgY3VzdG9tQ29tcG9zZXJWaWV3XCIgY2xhc3M9XCJjYy1tZXNzYWdlc19fY29tcG9zZXItLWN1c3RvbXZpZXdcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1lc3NhZ2VDb21wb3NlclZpZXdcIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjY3VzdG9tQ29tcG9zZXJWaWV3PlxuICAgICAgICA8Y29tZXRjaGF0LW1lc3NhZ2UtY29tcG9zZXIgI21lc3NhZ2VDb21wb3NlclJlZiBbZGlzYWJsZVNvdW5kRm9yTWVzc2FnZXNdPVwiZGlzYWJsZVNvdW5kRm9yTWVzc2FnZXNcIlxuICAgICAgICAgIFt2b2ljZVJlY29yZGluZ1N0b3BJY29uVVJMXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24udm9pY2VSZWNvcmRpbmdTdG9wSWNvblVSTFwiXG4gICAgICAgICAgW3ZvaWNlUmVjb3JkaW5nU3RhcnRJY29uVVJMXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24udm9pY2VSZWNvcmRpbmdTdGFydEljb25VUkxcIlxuICAgICAgICAgIFt2b2ljZVJlY29yZGluZ0Nsb3NlSWNvblVSTF09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLnZvaWNlUmVjb3JkaW5nQ2xvc2VJY29uVVJMXCJcbiAgICAgICAgICBbdm9pY2VSZWNvcmRpbmdTdWJtaXRJY29uVVJMXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24udm9pY2VSZWNvcmRpbmdTdWJtaXRJY29uVVJMXCJcbiAgICAgICAgICBbbWVkaWFSZWNvcmRlclN0eWxlXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24ubWVkaWFSZWNvcmRlclN0eWxlXCJcbiAgICAgICAgICBbY3VzdG9tU291bmRGb3JNZXNzYWdlc109XCJjdXN0b21Tb3VuZEZvck91dGdvaW5nTWVzc2FnZXNcIiBbdXNlcl09XCJ1c2VyXCIgW2dyb3VwXT1cImdyb3VwXCJcbiAgICAgICAgICBbdGV4dF09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLnRleHRcIiBbaGVhZGVyVmlld109XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLmhlYWRlclZpZXdcIlxuICAgICAgICAgIFtvblRleHRDaGFuZ2VdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5vblRleHRDaGFuZ2VcIlxuICAgICAgICAgIFthdHRhY2htZW50SWNvblVSTF09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLmF0dGFjaG1lbnRJY29uVVJMXCJcbiAgICAgICAgICBbYXR0YWNobWVudE9wdGlvbnNdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5hdHRhY2htZW50T3B0aW9uc1wiXG4gICAgICAgICAgW3NlY29uZGFyeUJ1dHRvblZpZXddPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5zZWNvbmRhcnlCdXR0b25WaWV3XCJcbiAgICAgICAgICBbYXV4aWxhcnlCdXR0b25WaWV3XT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uYXV4aWxhcnlCdXR0b25WaWV3XCJcbiAgICAgICAgICBbYXV4aWxpYXJ5QnV0dG9uc0FsaWdubWVudF09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLmF1eGlsaWFyeUJ1dHRvbnNBbGlnbm1lbnRcIlxuICAgICAgICAgIFtzZW5kQnV0dG9uVmlld109XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLnNlbmRCdXR0b25WaWV3XCJcbiAgICAgICAgICBbaGlkZUxpdmVSZWFjdGlvbl09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLmhpZGVMaXZlUmVhY3Rpb25cIlxuICAgICAgICAgIFtMaXZlUmVhY3Rpb25JY29uVVJMXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uTGl2ZVJlYWN0aW9uSWNvblVSTFwiXG4gICAgICAgICAgW21lc3NhZ2VDb21wb3NlclN0eWxlXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24ubWVzc2FnZUNvbXBvc2VyU3R5bGVcIlxuICAgICAgICAgIFtvblNlbmRCdXR0b25DbGlja109XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLm9uU2VuZEJ1dHRvbkNsaWNrXCJcbiAgICAgICAgICBbb25TZW5kQnV0dG9uQ2xpY2tdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5vblNlbmRCdXR0b25DbGlja1wiXG4gICAgICAgICAgW29uRXJyb3JdPVwibWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5vbkVycm9yXCJcbiAgICAgICAgICBbYWN0aW9uU2hlZXRTdHlsZV09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLmFjdGlvblNoZWV0U3R5bGVcIlxuICAgICAgICAgIFthaU9wdGlvbnNTdHlsZV09XCJtZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uLkFJT3B0aW9uc1N0eWxlXCJcbiAgICAgICAgICBbYWlJY29uVVJMXT1cIm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uQUlJY29uVVJMXCI+XG4gICAgICAgIDwvY29tZXRjaGF0LW1lc3NhZ2UtY29tcG9zZXI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNjLW1lc3NhZ2VzX19saXZlcmVhY3Rpb25cIj5cbiAgICA8Y29tZXRjaGF0LWxpdmUtcmVhY3Rpb24gKm5nSWY9XCJsaXZlUmVhY3Rpb25cIiBbcmVhY3Rpb25JY29uVVJMXT1cInJlYWN0aW9uTmFtZVwiPjwvY29tZXRjaGF0LWxpdmUtcmVhY3Rpb24+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwib3BlblRocmVhZGVkTWVzc2FnZXNcIiBjbGFzcz1cImNjLW1lc3NhZ2VzX190aHJlYWRlZG1lc3NhZ2VzXCI+XG4gICAgPGNvbWV0Y2hhdC10aHJlYWRlZC1tZXNzYWdlcyBbb25DbG9zZV09XCJjbG9zZVRocmVhZFZpZXdcIlxuICAgICAgW3RocmVhZGVkTWVzc2FnZXNTdHlsZV09XCJ0aHJlYWRlZE1lc3NhZ2VDb25maWd1cmF0aW9uLnRocmVhZGVkTWVzc2FnZXNTdHlsZVwiXG4gICAgICBbbWVzc2FnZUFjdGlvblZpZXddPVwidGhyZWFkZWRNZXNzYWdlQ29uZmlndXJhdGlvbi5tZXNzYWdlQWN0aW9uVmlld1wiXG4gICAgICBbY2xvc2VJY29uVVJMXT1cInRocmVhZGVkTWVzc2FnZUNvbmZpZ3VyYXRpb24uY2xvc2VJY29uVVJMXCIgW29uRXJyb3JdPVwidGhyZWFkZWRNZXNzYWdlQ29uZmlndXJhdGlvbi5vbkVycm9yXCJcbiAgICAgIFtidWJibGVWaWV3XT1cInRocmVhZGVkTWVzc2FnZUNvbmZpZ3VyYXRpb24uYnViYmxlVmlldyB8fCBwYXJlbnRCdWJibGVWaWV3XCIgW3BhcmVudE1lc3NhZ2VdPVwidGhyZWFkTWVzc2FnZU9iamVjdFwiXG4gICAgICBbdXNlcl09XCJ1c2VyXCIgW2dyb3VwXT1cImdyb3VwXCI+PC9jb21ldGNoYXQtdGhyZWFkZWQtbWVzc2FnZXM+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwib3BlbkRldGFpbHNcIiBjbGFzcz1cImNjLW1lc3NhZ2VzX19kZXRhaWxzXCI+XG4gICAgPGNvbWV0Y2hhdC1kZXRhaWxzIFtiYWNrZHJvcFN0eWxlXT1cImRldGFpbHNDb25maWd1cmF0aW9uLmJhY2tkcm9wU3R5bGVcIlxuICAgICAgW3RyYW5zZmVyT3duZXJzaGlwQ29uZmlndXJhdGlvbl09XCJkZXRhaWxzQ29uZmlndXJhdGlvbi50cmFuc2Zlck93bmVyc2hpcENvbmZpZ3VyYXRpb25cIlxuICAgICAgW2dyb3VwTWVtYmVyc0NvbmZpZ3VyYXRpb25dPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24uZ3JvdXBNZW1iZXJzQ29uZmlndXJhdGlvblwiXG4gICAgICBbYmFubmVkTWVtYmVyc0NvbmZpZ3VyYXRpb25dPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24uYmFubmVkTWVtYmVyc0NvbmZpZ3VyYXRpb25cIlxuICAgICAgW2FkZE1lbWJlcnNDb25maWd1cmF0aW9uXT1cImRldGFpbHNDb25maWd1cmF0aW9uLmFkZE1lbWJlcnNDb25maWd1cmF0aW9uXCJcbiAgICAgIFtvbkNsb3NlXT1cImRldGFpbHNDb25maWd1cmF0aW9uLm9uQ2xvc2UgfHwgY2xvc2VEZXRhaWxzUGFnZVwiIFtsaXN0SXRlbVN0eWxlXT1cImRldGFpbHNDb25maWd1cmF0aW9uLmxpc3RJdGVtU3R5bGVcIlxuICAgICAgW2RldGFpbHNTdHlsZV09XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5kZXRhaWxzU3R5bGVcIiBbYXZhdGFyU3R5bGVdPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24uYXZhdGFyU3R5bGVcIlxuICAgICAgW3N0YXR1c0luZGljYXRvclN0eWxlXT1cImRldGFpbHNDb25maWd1cmF0aW9uLnN0YXR1c0luZGljYXRvclN0eWxlXCJcbiAgICAgIFtsZWF2ZURpYWxvZ1N0eWxlXT1cImRldGFpbHNDb25maWd1cmF0aW9uLmxlYXZlRGlhbG9nU3R5bGVcIiBbZGF0YV09XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5kYXRhXCJcbiAgICAgIFtjdXN0b21Qcm9maWxlVmlld109XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5jdXN0b21Qcm9maWxlVmlld1wiIFtzdWJ0aXRsZVZpZXddPVwiZGV0YWlsc0NvbmZpZ3VyYXRpb24uc3VidGl0bGVWaWV3XCJcbiAgICAgIFtoaWRlUHJvZmlsZV09XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5oaWRlUHJvZmlsZVwiIFtvbkVycm9yXT1cImRldGFpbHNDb25maWd1cmF0aW9uLm9uRXJyb3JcIlxuICAgICAgW2Nsb3NlQnV0dG9uSWNvblVSTF09XCJkZXRhaWxzQ29uZmlndXJhdGlvbi5jbG9zZUJ1dHRvbkljb25VUkxcIiBbdXNlcl09XCJ1c2VyXCIgW2dyb3VwXT1cImdyb3VwXCI+PC9jb21ldGNoYXQtZGV0YWlscz5cbiAgPC9kaXY+XG48L2Rpdj5cbjxuZy10ZW1wbGF0ZSAjaGVhZGVyTWVudT5cbiAgPGRpdiBjbGFzcz1cImNjLW1lc3NhZ2VzX19oZWFkZXJtZW51XCI+XG4gICAgPGRpdiBjbGFzcz1cImNjLW1lc3NhZ2VzX19hdXhpbGlhcnltZW51XCIgKm5nSWY9XCJnZXRBdXhpbGFyeVZpZXcoKTsgZWxzZSBlbHNlQmxvY2tcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJnZXRBdXhpbGFyeVZpZXcoKVwiPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gICAgPG5nLXRlbXBsYXRlICNlbHNlQmxvY2s+XG4gICAgICA8Y29tZXRjaGF0LWNhbGwtYnV0dG9ucyAqbmdJZj1cImVuYWJsZUNhbGxpbmdcIiB2b2ljZUNhbGxJY29uVGV4dD1cIlwiIHZpZGVvQ2FsbEljb25UZXh0PVwiXCIgW3VzZXJdPVwidXNlclwiXG4gICAgICAgIFtncm91cF09XCJncm91cFwiIFtjYWxsQnV0dG9uc1N0eWxlXT1cImNhbGxCdXR0b25zU3R5bGVcIj5cbiAgICAgIDwvY29tZXRjaGF0LWNhbGwtYnV0dG9ucz5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxjb21ldGNoYXQtYnV0dG9uICpuZ0lmPVwiIWhpZGVEZXRhaWxzXCIgW2ljb25VUkxdPVwiaW5mb0ljb25TdHlsZVwiIFtidXR0b25TdHlsZV09XCJkZXRhaWxzQnV0dG9uU3R5bGVcIlxuICAgICAgKGNjLWJ1dHRvbi1jbGlja2VkKT1cIm9wZW5EZXRhaWxzUGFnZSgpXCI+PC9jb21ldGNoYXQtYnV0dG9uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+Il19