@cometchat/chat-uikit-angular 4.3.16 → 4.3.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CometChatConversationsWithMessages/cometchat-conversations-with-messages/cometchat-conversations-with-messages.component.d.ts +1 -0
- package/CometChatDetails/cometchat-details/cometchat-details.component.d.ts +2 -0
- package/CometChatGroups/cometchat-groups/cometchat-groups.component.d.ts +1 -0
- package/CometChatGroupsWithMessages/cometchat-groups-with-messages/cometchat-groups-with-messages.component.d.ts +1 -0
- package/CometChatMessageComposer/cometchat-message-composer/cometchat-message-composer.component.d.ts +1 -0
- package/CometChatMessageHeader/cometchat-message-header/cometchat-message-header.component.d.ts +1 -0
- package/CometChatMessageInformation/cometchat-message-information/cometchat-message-information.component.d.ts +0 -2
- package/CometChatMessageList/cometchat-message-list/cometchat-message-list.component.d.ts +1 -1
- package/CometChatUsersWithMessages/cometchat-users-with-messages/cometchat-users-with-messages.component.d.ts +1 -0
- package/esm2020/Calls/CometChatCallLogsWithDetails/cometchat-call-logs-with-details/cometchat-call-logs-with-details.component.mjs +8 -3
- package/esm2020/CometChatContacts/cometchat-contacts/cometchat-contacts.component.mjs +2 -2
- package/esm2020/CometChatConversations/cometchat-conversations/cometchat-conversations.component.mjs +2 -11
- package/esm2020/CometChatConversationsWithMessages/cometchat-conversations-with-messages/cometchat-conversations-with-messages.component.mjs +11 -5
- package/esm2020/CometChatDetails/cometchat-details/cometchat-details.component.mjs +20 -4
- package/esm2020/CometChatGroups/cometchat-groups/cometchat-groups.component.mjs +89 -23
- package/esm2020/CometChatGroupsWithMessages/cometchat-groups-with-messages/cometchat-groups-with-messages.component.mjs +11 -5
- package/esm2020/CometChatMessageComposer/cometchat-message-composer/cometchat-message-composer.component.mjs +41 -2
- package/esm2020/CometChatMessageHeader/cometchat-message-header/cometchat-message-header.component.mjs +21 -32
- package/esm2020/CometChatMessageInformation/cometchat-message-information/cometchat-message-information.component.mjs +1 -3
- package/esm2020/CometChatMessageList/cometchat-message-list/cometchat-message-list.component.mjs +27 -25
- package/esm2020/CometChatUsers/cometchat-users/cometchat-users.component.mjs +2 -1
- package/esm2020/CometChatUsersWithMessages/cometchat-users-with-messages/cometchat-users-with-messages.component.mjs +9 -3
- package/esm2020/Shared/CometChatUIkit/CometChatUIKit.mjs +2 -2
- package/examples/sample-app/README.md +4 -8
- package/fesm2015/cometchat-chat-uikit-angular.mjs +237 -115
- package/fesm2015/cometchat-chat-uikit-angular.mjs.map +1 -1
- package/fesm2020/cometchat-chat-uikit-angular.mjs +232 -107
- package/fesm2020/cometchat-chat-uikit-angular.mjs.map +1 -1
- package/package.json +5 -5
|
@@ -102,6 +102,7 @@ export class CometChatConversationsWithMessagesComponent {
|
|
|
102
102
|
border: this.conversationsWithMessagesStyle.border,
|
|
103
103
|
borderRadius: this.conversationsWithMessagesStyle.borderRadius,
|
|
104
104
|
background: this.conversationsWithMessagesStyle.background || this.themeService.theme.palette.getBackground(),
|
|
105
|
+
position: 'relative'
|
|
105
106
|
};
|
|
106
107
|
};
|
|
107
108
|
this.contactsWrapperStyles = () => {
|
|
@@ -215,8 +216,13 @@ export class CometChatConversationsWithMessagesComponent {
|
|
|
215
216
|
this.updateBackdropHeight();
|
|
216
217
|
}
|
|
217
218
|
updateBackdropHeight() {
|
|
218
|
-
|
|
219
|
-
|
|
219
|
+
let divHeight = this.elementRef.nativeElement.offsetHeight;
|
|
220
|
+
let divWidth = this.elementRef.nativeElement.offsetWidth;
|
|
221
|
+
if (divHeight === 0 || divWidth === 0) {
|
|
222
|
+
const rect = this.elementRef.nativeElement.getBoundingClientRect();
|
|
223
|
+
divHeight = rect.height;
|
|
224
|
+
divWidth = rect.width;
|
|
225
|
+
}
|
|
220
226
|
let backdropStyle = {
|
|
221
227
|
height: divHeight + "px",
|
|
222
228
|
width: divWidth + "px",
|
|
@@ -377,10 +383,10 @@ export class CometChatConversationsWithMessagesComponent {
|
|
|
377
383
|
}
|
|
378
384
|
}
|
|
379
385
|
CometChatConversationsWithMessagesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CometChatConversationsWithMessagesComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1.CometChatThemeService }], target: i0.ɵɵFactoryTarget.Component });
|
|
380
|
-
CometChatConversationsWithMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: CometChatConversationsWithMessagesComponent, selector: "cometchat-conversations-with-messages", inputs: { user: "user", group: "group", isMobileView: "isMobileView", messageText: "messageText", conversationsWithMessagesStyle: "conversationsWithMessagesStyle", messagesConfiguration: "messagesConfiguration", conversationConfiguration: "conversationConfiguration", onError: "onError", startNewConversationIconURL: "startNewConversationIconURL", hideStartNewConversation: "hideStartNewConversation", StartConversationConfiguration: "StartConversationConfiguration" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cc-with-messages__wrapper\" [ngStyle]=\"chatsWrapperStyles()\">\n <div class=\"cc-with-messages__sidebar\" [ngClass]=\"{mobile : isMobileView}\"\n [ngStyle]=\"sideBarStyle\">\n <cometchat-conversations #conversationRef\n [activeConversation]=\"activeConversation\"\n [onItemClick]=\"conversationConfiguration.onItemClick || onItemClick\"\n [conversationsStyle]=\"conversationConfiguration.conversationsStyle\"\n [statusIndicatorStyle]=\"conversationConfiguration?.statusIndicatorStyle\"\n [avatarStyle]=\"conversationConfiguration?.avatarStyle!\"\n [subtitleView]=\"conversationConfiguration.subtitleView\"\n [options]=\"conversationConfiguration.options\"\n [disableUsersPresence]=\"conversationConfiguration.disableUsersPresence\"\n [disableReceipt]=\"conversationConfiguration.disableReceipt\"\n [hideReceipt]=\"conversationConfiguration.hideReceipt\"\n [disableTyping]=\"conversationConfiguration.disableTyping\"\n [deliveredIcon]=\"conversationConfiguration.deliveredIcon\"\n [readIcon]=\"conversationConfiguration.readIcon\"\n [waitIcon]=\"conversationConfiguration.waitIcon\"\n [errorIcon]=\"conversationConfiguration.errorIcon\"\n [datePattern]=\"conversationConfiguration.datePattern\"\n [receiptStyle]=\"conversationConfiguration.receiptStyle\"\n [sentIcon]=\"conversationConfiguration.sentIcon\"\n [privateGroupIcon]=\"conversationConfiguration.privateGroupIcon\"\n [protectedGroupIcon]=\"conversationConfiguration.protectedGroupIcon\"\n [passwordGroupIcon]=\"conversationConfiguration.passwordGroupIcon\"\n [customSoundForMessages]=\"conversationConfiguration.customSoundForMessages\"\n [conversationsRequestBuilder]=\"conversationConfiguration.conversationsRequestBuilder\"\n [emptyStateView]=\"conversationConfiguration.emptyStateView\"\n [onSelect]=\"conversationConfiguration.onSelect\"\n [loadingIconURL]=\"conversationConfiguration.loadingIconURL\"\n [errorStateView]=\"conversationConfiguration.errorStateView\"\n [loadingStateView]=\"conversationConfiguration.loadingStateView\"\n [titleAlignment]=\"conversationConfiguration.titleAlignment\"\n [listItemView]=\"conversationConfiguration.listItemView\"\n [menu]=\"conversationConfiguration.menu || startConversationButton\"\n [hideSeparator]=\"conversationConfiguration.hideSeparator\"\n [hideError]=\"conversationConfiguration.hideError\"\n [selectionMode]=\"conversationConfiguration.selectionMode\"\n [disableSoundForMessages]=\"conversationConfiguration.disableSoundForMessages\"\n [deleteConversationDialogStyle]=\"conversationConfiguration.deleteConversationDialogStyle\"\n [badgeStyle]=\"conversationConfiguration.badgeStyle\"\n [dateStyle]=\"conversationConfiguration.dateStyle\"\n [listItemStyle]=\"conversationConfiguration.listItemStyle\"\n [backdropStyle]=\"conversationConfiguration.backdropStyle\"\n [textFormatters]=\"conversationConfiguration?.textFormatters\"\n [disableMentions]=\"conversationConfiguration.disableMentions\"></cometchat-conversations>\n </div>\n <div class=\"cc-with-messages__main\" [ngClass]=\"{mobile : isMobileView}\"\n *ngIf=\"!showStartConversation && (user || group)\">\n <!--Message List Screen-->\n <cometchat-messages #messagesRef [user]=\"user!\" [group]=\"group!\"\n [messageHeaderConfiguration]=\"messagesConfiguration.messageHeaderConfiguration\"\n [messageListConfiguration]=\"messagesConfiguration.messageListConfiguration\"\n [messageComposerConfiguration]=\"messagesConfiguration.messageComposerConfiguration\"\n [messagesStyle]=\"messagesConfiguration.messagesStyle\"\n [customSoundForIncomingMessages]=\"messagesConfiguration.customSoundForIncomingMessages\"\n [customSoundForOutgoingMessages]=\"messagesConfiguration.customSoundForOutgoingMessages\"\n [detailsConfiguration]=\"messagesConfiguration.detailsConfiguration\"\n [disableSoundForMessages]=\"messagesConfiguration.disableSoundForMessages\"\n [disableTyping]=\"messagesConfiguration.disableTyping\"\n [hideMessageComposer]=\"messagesConfiguration.hideMessageComposer\"\n [hideMessageHeader]=\"messagesConfiguration.hideMessageHeader\"\n [messageComposerView]=\"messagesConfiguration.messageComposerView\"\n [messageHeaderView]=\"messagesConfiguration.messageHeaderView\"\n [messageListView]=\"messagesConfiguration.messageListView\"\n [hideDetails]=\"messagesConfiguration.hideDetails!\"\n [threadedMessageConfiguration]=\"messagesConfiguration.threadedMessageConfiguration\">\n </cometchat-messages>\n <!--Message List Screen ENDS-->\n </div>\n <div class=\"cc-with-messages__start-conversation\"\n [ngStyle]=\"contactsWrapperStyles()\"\n [ngClass]=\"{mobile : isMobileView}\" *ngIf=\"showStartConversation\">\n\n <cometchat-contacts [onItemClick]=\"onContactClicked\"\n [usersConfiguration]=\"StartConversationConfiguration?.usersConfiguration!\"\n [groupsConfiguration]=\"StartConversationConfiguration?.groupsConfiguration!\"\n [closeIconURL]=\"StartConversationConfiguration?.closeIconURL!\"\n [contactsStyle]=\"StartConversationConfiguration?.contactsStyle!\"\n [selectionMode]=\"StartConversationConfiguration?.selectionMode!\"\n [onClose]=\"closeStartConversation\"\n [tabVisibility]=\"StartConversationConfiguration?.tabVisibility!\"\n [selectionLimit]=\"StartConversationConfiguration?.selectionLimit!\"\n [tabs]=\"StartConversationConfiguration?.tabs!\"\n [hideSubmitButton]=\"StartConversationConfiguration?.hideSubmitButton!\"></cometchat-contacts>\n </div>\n <div class=\"cc-decorator__message--empty\"\n *ngIf=\"!user && !group && !showStartConversation\"\n [ngStyle]=\"emptyMessageStyle()\">\n <cometchat-label [text]=\"messageText\"\n [labelStyle]=\"labelStyle\"></cometchat-label>\n </div>\n <ng-template #startConversationButton>\n <cometchat-button *ngIf=\"!hideStartNewConversation\"\n [iconURL]=\"startNewConversationIconURL\"\n [buttonStyle]=\"startConversationButtonStyle\"\n (cc-button-clicked)=\"triggerStartConversation()\"></cometchat-button>\n\n </ng-template>\n", styles: [".cc-with-messages__wrapper{display:flex;height:100%;width:100%;box-sizing:border-box;overflow:hidden}.cc-with-messages__sidebar{width:280px;height:100%;position:relative}.cc-with-messages__main,.cc-with-messages__start-conversation{width:calc(100% - 280px);height:100%}.mobile{width:100%!important;height:100%;position:absolute}.cc-decorator__message--empty{display:flex;justify-content:center;align-items:center}\n"], components: [{ type: i2.CometChatConversationsComponent, selector: "cometchat-conversations", inputs: ["subtitleView", "title", "options", "searchPlaceHolder", "disableUsersPresence", "disableReceipt", "hideReceipt", "disableTyping", "deliveredIcon", "readIcon", "errorIcon", "datePattern", "onError", "sentIcon", "privateGroupIcon", "protectedGroupIcon", "passwordGroupIcon", "customSoundForMessages", "activeConversation", "searchIconURL", "hideSearch", "conversationsRequestBuilder", "emptyStateView", "onSelect", "loadingIconURL", "errorStateView", "loadingStateView", "emptyStateText", "errorStateText", "titleAlignment", "listItemView", "menu", "hideSeparator", "searchPlaceholder", "hideError", "selectionMode", "disableSoundForMessages", "confirmDialogTitle", "confirmButtonText", "cancelButtonText", "confirmDialogMessage", "onItemClick", "deleteConversationDialogStyle", "backdropStyle", "badgeStyle", "dateStyle", "conversationsStyle", "listItemStyle", "statusIndicatorStyle", "typingIndicatorText", "threadIndicatorText", "avatarStyle", "receiptStyle", "loggedInUser", "disableMentions", "textFormatters"] }, { type: i3.CometChatMessagesComponent, selector: "cometchat-messages", inputs: ["user", "group", "currentAskAIBot", "hideMessageComposer", "disableTyping", "messageHeaderConfiguration", "messageListConfiguration", "messageComposerConfiguration", "threadedMessageConfiguration", "detailsConfiguration", "customSoundForIncomingMessages", "customSoundForOutgoingMessages", "disableSoundForMessages", "messagesStyle", "messageHeaderView", "messageComposerView", "messageListView", "hideMessageHeader", "hideDetails", "auxiliaryMenu"] }, { type: i4.CometChatContactsComponent, selector: "cometchat-contacts", inputs: ["title", "usersTabTitle", "groupsTabTitle", "usersConfiguration", "groupsConfiguration", "onSubmitButtonClick", "closeIconURL", "contactsStyle", "selectionMode", "onClose", "onItemClick", "tabVisibility", "selectionLimit", "tabs", "hideSubmitButton", "submitButtonText"] }], directives: [{ type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
386
|
+
CometChatConversationsWithMessagesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: CometChatConversationsWithMessagesComponent, selector: "cometchat-conversations-with-messages", inputs: { user: "user", group: "group", isMobileView: "isMobileView", messageText: "messageText", conversationsWithMessagesStyle: "conversationsWithMessagesStyle", messagesConfiguration: "messagesConfiguration", conversationConfiguration: "conversationConfiguration", onError: "onError", startNewConversationIconURL: "startNewConversationIconURL", hideStartNewConversation: "hideStartNewConversation", StartConversationConfiguration: "StartConversationConfiguration" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cc-with-messages__wrapper\" [ngStyle]=\"chatsWrapperStyles()\">\n <div class=\"cc-with-messages__sidebar\" [ngClass]=\"{mobile : isMobileView}\"\n [ngStyle]=\"sideBarStyle\">\n <cometchat-conversations #conversationRef\n [activeConversation]=\"activeConversation\"\n [onItemClick]=\"conversationConfiguration.onItemClick || onItemClick\"\n [conversationsStyle]=\"conversationConfiguration.conversationsStyle\"\n [statusIndicatorStyle]=\"conversationConfiguration?.statusIndicatorStyle\"\n [avatarStyle]=\"conversationConfiguration?.avatarStyle!\"\n [subtitleView]=\"conversationConfiguration.subtitleView\"\n [options]=\"conversationConfiguration.options\"\n [disableUsersPresence]=\"conversationConfiguration.disableUsersPresence\"\n [disableReceipt]=\"conversationConfiguration.disableReceipt\"\n [hideReceipt]=\"conversationConfiguration.hideReceipt\"\n [disableTyping]=\"conversationConfiguration.disableTyping\"\n [deliveredIcon]=\"conversationConfiguration.deliveredIcon\"\n [readIcon]=\"conversationConfiguration.readIcon\"\n [waitIcon]=\"conversationConfiguration.waitIcon\"\n [errorIcon]=\"conversationConfiguration.errorIcon\"\n [datePattern]=\"conversationConfiguration.datePattern\"\n [receiptStyle]=\"conversationConfiguration.receiptStyle\"\n [sentIcon]=\"conversationConfiguration.sentIcon\"\n [privateGroupIcon]=\"conversationConfiguration.privateGroupIcon\"\n [protectedGroupIcon]=\"conversationConfiguration.protectedGroupIcon\"\n [passwordGroupIcon]=\"conversationConfiguration.passwordGroupIcon\"\n [customSoundForMessages]=\"conversationConfiguration.customSoundForMessages\"\n [conversationsRequestBuilder]=\"conversationConfiguration.conversationsRequestBuilder\"\n [emptyStateView]=\"conversationConfiguration.emptyStateView\"\n [onSelect]=\"conversationConfiguration.onSelect\"\n [loadingIconURL]=\"conversationConfiguration.loadingIconURL\"\n [errorStateView]=\"conversationConfiguration.errorStateView\"\n [loadingStateView]=\"conversationConfiguration.loadingStateView\"\n [titleAlignment]=\"conversationConfiguration.titleAlignment\"\n [listItemView]=\"conversationConfiguration.listItemView\"\n [menu]=\"conversationConfiguration.menu || startConversationButton\"\n [hideSeparator]=\"conversationConfiguration.hideSeparator\"\n [hideError]=\"conversationConfiguration.hideError\"\n [selectionMode]=\"conversationConfiguration.selectionMode\"\n [disableSoundForMessages]=\"conversationConfiguration.disableSoundForMessages\"\n [deleteConversationDialogStyle]=\"conversationConfiguration.deleteConversationDialogStyle\"\n [badgeStyle]=\"conversationConfiguration.badgeStyle\"\n [dateStyle]=\"conversationConfiguration.dateStyle\"\n [listItemStyle]=\"conversationConfiguration.listItemStyle\"\n [backdropStyle]=\"conversationConfiguration.backdropStyle\"\n [textFormatters]=\"conversationConfiguration?.textFormatters\"\n [disableMentions]=\"conversationConfiguration.disableMentions\"></cometchat-conversations>\n </div>\n <div class=\"cc-with-messages__main\" [ngClass]=\"{mobile : isMobileView}\"\n *ngIf=\"!showStartConversation && (user || group)\">\n <!--Message List Screen-->\n <cometchat-messages #messagesRef [user]=\"user!\" [group]=\"group!\"\n [messageHeaderConfiguration]=\"messagesConfiguration.messageHeaderConfiguration\"\n [messageListConfiguration]=\"messagesConfiguration.messageListConfiguration\"\n [messageComposerConfiguration]=\"messagesConfiguration.messageComposerConfiguration\"\n [messagesStyle]=\"messagesConfiguration.messagesStyle\"\n [customSoundForIncomingMessages]=\"messagesConfiguration.customSoundForIncomingMessages\"\n [customSoundForOutgoingMessages]=\"messagesConfiguration.customSoundForOutgoingMessages\"\n [detailsConfiguration]=\"messagesConfiguration.detailsConfiguration\"\n [disableSoundForMessages]=\"messagesConfiguration.disableSoundForMessages\"\n [disableTyping]=\"messagesConfiguration.disableTyping\"\n [hideMessageComposer]=\"messagesConfiguration.hideMessageComposer\"\n [hideMessageHeader]=\"messagesConfiguration.hideMessageHeader\"\n [messageComposerView]=\"messagesConfiguration.messageComposerView\"\n [messageHeaderView]=\"messagesConfiguration.messageHeaderView\"\n [messageListView]=\"messagesConfiguration.messageListView\"\n [hideDetails]=\"messagesConfiguration.hideDetails!\"\n [threadedMessageConfiguration]=\"messagesConfiguration.threadedMessageConfiguration\">\n </cometchat-messages>\n <!--Message List Screen ENDS-->\n </div>\n <div class=\"cc-with-messages__start-conversation\"\n [ngStyle]=\"contactsWrapperStyles()\"\n [ngClass]=\"{mobile : isMobileView}\" *ngIf=\"showStartConversation\">\n\n <cometchat-contacts [onItemClick]=\"onContactClicked\"\n [usersConfiguration]=\"StartConversationConfiguration?.usersConfiguration!\"\n [groupsConfiguration]=\"StartConversationConfiguration?.groupsConfiguration!\"\n [closeIconURL]=\"StartConversationConfiguration?.closeIconURL!\"\n [contactsStyle]=\"StartConversationConfiguration?.contactsStyle!\"\n [selectionMode]=\"StartConversationConfiguration?.selectionMode!\"\n [onClose]=\"closeStartConversation\"\n [tabVisibility]=\"StartConversationConfiguration?.tabVisibility!\"\n [selectionLimit]=\"StartConversationConfiguration?.selectionLimit!\"\n [tabs]=\"StartConversationConfiguration?.tabs!\"\n [onSubmitButtonClick]=\"StartConversationConfiguration?.onSubmitButtonClick!\"\n [hideSubmitButton]=\"StartConversationConfiguration?.hideSubmitButton!\"></cometchat-contacts>\n </div>\n <div class=\"cc-decorator__message--empty\"\n *ngIf=\"!user && !group && !showStartConversation\"\n [ngStyle]=\"emptyMessageStyle()\">\n <cometchat-label [text]=\"messageText\"\n [labelStyle]=\"labelStyle\"></cometchat-label>\n </div>\n <ng-template #startConversationButton>\n <cometchat-button *ngIf=\"!hideStartNewConversation\"\n [iconURL]=\"startNewConversationIconURL\"\n [buttonStyle]=\"startConversationButtonStyle\"\n (cc-button-clicked)=\"triggerStartConversation()\"></cometchat-button>\n\n </ng-template>\n", styles: [".cc-with-messages__wrapper{display:flex;height:100%;width:100%;box-sizing:border-box;overflow:hidden}.cc-with-messages__sidebar{width:280px;height:100%;position:relative}.cc-with-messages__main,.cc-with-messages__start-conversation{width:calc(100% - 280px);height:100%}.mobile{width:100%!important;height:100%;position:absolute}.cc-decorator__message--empty{display:flex;justify-content:center;align-items:center}\n"], components: [{ type: i2.CometChatConversationsComponent, selector: "cometchat-conversations", inputs: ["subtitleView", "title", "options", "searchPlaceHolder", "disableUsersPresence", "disableReceipt", "hideReceipt", "disableTyping", "deliveredIcon", "readIcon", "errorIcon", "datePattern", "onError", "sentIcon", "privateGroupIcon", "protectedGroupIcon", "passwordGroupIcon", "customSoundForMessages", "activeConversation", "searchIconURL", "hideSearch", "conversationsRequestBuilder", "emptyStateView", "onSelect", "loadingIconURL", "errorStateView", "loadingStateView", "emptyStateText", "errorStateText", "titleAlignment", "listItemView", "menu", "hideSeparator", "searchPlaceholder", "hideError", "selectionMode", "disableSoundForMessages", "confirmDialogTitle", "confirmButtonText", "cancelButtonText", "confirmDialogMessage", "onItemClick", "deleteConversationDialogStyle", "backdropStyle", "badgeStyle", "dateStyle", "conversationsStyle", "listItemStyle", "statusIndicatorStyle", "typingIndicatorText", "threadIndicatorText", "avatarStyle", "receiptStyle", "loggedInUser", "disableMentions", "textFormatters"] }, { type: i3.CometChatMessagesComponent, selector: "cometchat-messages", inputs: ["user", "group", "currentAskAIBot", "hideMessageComposer", "disableTyping", "messageHeaderConfiguration", "messageListConfiguration", "messageComposerConfiguration", "threadedMessageConfiguration", "detailsConfiguration", "customSoundForIncomingMessages", "customSoundForOutgoingMessages", "disableSoundForMessages", "messagesStyle", "messageHeaderView", "messageComposerView", "messageListView", "hideMessageHeader", "hideDetails", "auxiliaryMenu"] }, { type: i4.CometChatContactsComponent, selector: "cometchat-contacts", inputs: ["title", "usersTabTitle", "groupsTabTitle", "usersConfiguration", "groupsConfiguration", "onSubmitButtonClick", "closeIconURL", "contactsStyle", "selectionMode", "onClose", "onItemClick", "tabVisibility", "selectionLimit", "tabs", "hideSubmitButton", "submitButtonText"] }], directives: [{ type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
381
387
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CometChatConversationsWithMessagesComponent, decorators: [{
|
|
382
388
|
type: Component,
|
|
383
|
-
args: [{ selector: "cometchat-conversations-with-messages", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cc-with-messages__wrapper\" [ngStyle]=\"chatsWrapperStyles()\">\n <div class=\"cc-with-messages__sidebar\" [ngClass]=\"{mobile : isMobileView}\"\n [ngStyle]=\"sideBarStyle\">\n <cometchat-conversations #conversationRef\n [activeConversation]=\"activeConversation\"\n [onItemClick]=\"conversationConfiguration.onItemClick || onItemClick\"\n [conversationsStyle]=\"conversationConfiguration.conversationsStyle\"\n [statusIndicatorStyle]=\"conversationConfiguration?.statusIndicatorStyle\"\n [avatarStyle]=\"conversationConfiguration?.avatarStyle!\"\n [subtitleView]=\"conversationConfiguration.subtitleView\"\n [options]=\"conversationConfiguration.options\"\n [disableUsersPresence]=\"conversationConfiguration.disableUsersPresence\"\n [disableReceipt]=\"conversationConfiguration.disableReceipt\"\n [hideReceipt]=\"conversationConfiguration.hideReceipt\"\n [disableTyping]=\"conversationConfiguration.disableTyping\"\n [deliveredIcon]=\"conversationConfiguration.deliveredIcon\"\n [readIcon]=\"conversationConfiguration.readIcon\"\n [waitIcon]=\"conversationConfiguration.waitIcon\"\n [errorIcon]=\"conversationConfiguration.errorIcon\"\n [datePattern]=\"conversationConfiguration.datePattern\"\n [receiptStyle]=\"conversationConfiguration.receiptStyle\"\n [sentIcon]=\"conversationConfiguration.sentIcon\"\n [privateGroupIcon]=\"conversationConfiguration.privateGroupIcon\"\n [protectedGroupIcon]=\"conversationConfiguration.protectedGroupIcon\"\n [passwordGroupIcon]=\"conversationConfiguration.passwordGroupIcon\"\n [customSoundForMessages]=\"conversationConfiguration.customSoundForMessages\"\n [conversationsRequestBuilder]=\"conversationConfiguration.conversationsRequestBuilder\"\n [emptyStateView]=\"conversationConfiguration.emptyStateView\"\n [onSelect]=\"conversationConfiguration.onSelect\"\n [loadingIconURL]=\"conversationConfiguration.loadingIconURL\"\n [errorStateView]=\"conversationConfiguration.errorStateView\"\n [loadingStateView]=\"conversationConfiguration.loadingStateView\"\n [titleAlignment]=\"conversationConfiguration.titleAlignment\"\n [listItemView]=\"conversationConfiguration.listItemView\"\n [menu]=\"conversationConfiguration.menu || startConversationButton\"\n [hideSeparator]=\"conversationConfiguration.hideSeparator\"\n [hideError]=\"conversationConfiguration.hideError\"\n [selectionMode]=\"conversationConfiguration.selectionMode\"\n [disableSoundForMessages]=\"conversationConfiguration.disableSoundForMessages\"\n [deleteConversationDialogStyle]=\"conversationConfiguration.deleteConversationDialogStyle\"\n [badgeStyle]=\"conversationConfiguration.badgeStyle\"\n [dateStyle]=\"conversationConfiguration.dateStyle\"\n [listItemStyle]=\"conversationConfiguration.listItemStyle\"\n [backdropStyle]=\"conversationConfiguration.backdropStyle\"\n [textFormatters]=\"conversationConfiguration?.textFormatters\"\n [disableMentions]=\"conversationConfiguration.disableMentions\"></cometchat-conversations>\n </div>\n <div class=\"cc-with-messages__main\" [ngClass]=\"{mobile : isMobileView}\"\n *ngIf=\"!showStartConversation && (user || group)\">\n <!--Message List Screen-->\n <cometchat-messages #messagesRef [user]=\"user!\" [group]=\"group!\"\n [messageHeaderConfiguration]=\"messagesConfiguration.messageHeaderConfiguration\"\n [messageListConfiguration]=\"messagesConfiguration.messageListConfiguration\"\n [messageComposerConfiguration]=\"messagesConfiguration.messageComposerConfiguration\"\n [messagesStyle]=\"messagesConfiguration.messagesStyle\"\n [customSoundForIncomingMessages]=\"messagesConfiguration.customSoundForIncomingMessages\"\n [customSoundForOutgoingMessages]=\"messagesConfiguration.customSoundForOutgoingMessages\"\n [detailsConfiguration]=\"messagesConfiguration.detailsConfiguration\"\n [disableSoundForMessages]=\"messagesConfiguration.disableSoundForMessages\"\n [disableTyping]=\"messagesConfiguration.disableTyping\"\n [hideMessageComposer]=\"messagesConfiguration.hideMessageComposer\"\n [hideMessageHeader]=\"messagesConfiguration.hideMessageHeader\"\n [messageComposerView]=\"messagesConfiguration.messageComposerView\"\n [messageHeaderView]=\"messagesConfiguration.messageHeaderView\"\n [messageListView]=\"messagesConfiguration.messageListView\"\n [hideDetails]=\"messagesConfiguration.hideDetails!\"\n [threadedMessageConfiguration]=\"messagesConfiguration.threadedMessageConfiguration\">\n </cometchat-messages>\n <!--Message List Screen ENDS-->\n </div>\n <div class=\"cc-with-messages__start-conversation\"\n [ngStyle]=\"contactsWrapperStyles()\"\n [ngClass]=\"{mobile : isMobileView}\" *ngIf=\"showStartConversation\">\n\n <cometchat-contacts [onItemClick]=\"onContactClicked\"\n [usersConfiguration]=\"StartConversationConfiguration?.usersConfiguration!\"\n [groupsConfiguration]=\"StartConversationConfiguration?.groupsConfiguration!\"\n [closeIconURL]=\"StartConversationConfiguration?.closeIconURL!\"\n [contactsStyle]=\"StartConversationConfiguration?.contactsStyle!\"\n [selectionMode]=\"StartConversationConfiguration?.selectionMode!\"\n [onClose]=\"closeStartConversation\"\n [tabVisibility]=\"StartConversationConfiguration?.tabVisibility!\"\n [selectionLimit]=\"StartConversationConfiguration?.selectionLimit!\"\n [tabs]=\"StartConversationConfiguration?.tabs!\"\n [hideSubmitButton]=\"StartConversationConfiguration?.hideSubmitButton!\"></cometchat-contacts>\n </div>\n <div class=\"cc-decorator__message--empty\"\n *ngIf=\"!user && !group && !showStartConversation\"\n [ngStyle]=\"emptyMessageStyle()\">\n <cometchat-label [text]=\"messageText\"\n [labelStyle]=\"labelStyle\"></cometchat-label>\n </div>\n <ng-template #startConversationButton>\n <cometchat-button *ngIf=\"!hideStartNewConversation\"\n [iconURL]=\"startNewConversationIconURL\"\n [buttonStyle]=\"startConversationButtonStyle\"\n (cc-button-clicked)=\"triggerStartConversation()\"></cometchat-button>\n\n </ng-template>\n", styles: [".cc-with-messages__wrapper{display:flex;height:100%;width:100%;box-sizing:border-box;overflow:hidden}.cc-with-messages__sidebar{width:280px;height:100%;position:relative}.cc-with-messages__main,.cc-with-messages__start-conversation{width:calc(100% - 280px);height:100%}.mobile{width:100%!important;height:100%;position:absolute}.cc-decorator__message--empty{display:flex;justify-content:center;align-items:center}\n"] }]
|
|
389
|
+
args: [{ selector: "cometchat-conversations-with-messages", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cc-with-messages__wrapper\" [ngStyle]=\"chatsWrapperStyles()\">\n <div class=\"cc-with-messages__sidebar\" [ngClass]=\"{mobile : isMobileView}\"\n [ngStyle]=\"sideBarStyle\">\n <cometchat-conversations #conversationRef\n [activeConversation]=\"activeConversation\"\n [onItemClick]=\"conversationConfiguration.onItemClick || onItemClick\"\n [conversationsStyle]=\"conversationConfiguration.conversationsStyle\"\n [statusIndicatorStyle]=\"conversationConfiguration?.statusIndicatorStyle\"\n [avatarStyle]=\"conversationConfiguration?.avatarStyle!\"\n [subtitleView]=\"conversationConfiguration.subtitleView\"\n [options]=\"conversationConfiguration.options\"\n [disableUsersPresence]=\"conversationConfiguration.disableUsersPresence\"\n [disableReceipt]=\"conversationConfiguration.disableReceipt\"\n [hideReceipt]=\"conversationConfiguration.hideReceipt\"\n [disableTyping]=\"conversationConfiguration.disableTyping\"\n [deliveredIcon]=\"conversationConfiguration.deliveredIcon\"\n [readIcon]=\"conversationConfiguration.readIcon\"\n [waitIcon]=\"conversationConfiguration.waitIcon\"\n [errorIcon]=\"conversationConfiguration.errorIcon\"\n [datePattern]=\"conversationConfiguration.datePattern\"\n [receiptStyle]=\"conversationConfiguration.receiptStyle\"\n [sentIcon]=\"conversationConfiguration.sentIcon\"\n [privateGroupIcon]=\"conversationConfiguration.privateGroupIcon\"\n [protectedGroupIcon]=\"conversationConfiguration.protectedGroupIcon\"\n [passwordGroupIcon]=\"conversationConfiguration.passwordGroupIcon\"\n [customSoundForMessages]=\"conversationConfiguration.customSoundForMessages\"\n [conversationsRequestBuilder]=\"conversationConfiguration.conversationsRequestBuilder\"\n [emptyStateView]=\"conversationConfiguration.emptyStateView\"\n [onSelect]=\"conversationConfiguration.onSelect\"\n [loadingIconURL]=\"conversationConfiguration.loadingIconURL\"\n [errorStateView]=\"conversationConfiguration.errorStateView\"\n [loadingStateView]=\"conversationConfiguration.loadingStateView\"\n [titleAlignment]=\"conversationConfiguration.titleAlignment\"\n [listItemView]=\"conversationConfiguration.listItemView\"\n [menu]=\"conversationConfiguration.menu || startConversationButton\"\n [hideSeparator]=\"conversationConfiguration.hideSeparator\"\n [hideError]=\"conversationConfiguration.hideError\"\n [selectionMode]=\"conversationConfiguration.selectionMode\"\n [disableSoundForMessages]=\"conversationConfiguration.disableSoundForMessages\"\n [deleteConversationDialogStyle]=\"conversationConfiguration.deleteConversationDialogStyle\"\n [badgeStyle]=\"conversationConfiguration.badgeStyle\"\n [dateStyle]=\"conversationConfiguration.dateStyle\"\n [listItemStyle]=\"conversationConfiguration.listItemStyle\"\n [backdropStyle]=\"conversationConfiguration.backdropStyle\"\n [textFormatters]=\"conversationConfiguration?.textFormatters\"\n [disableMentions]=\"conversationConfiguration.disableMentions\"></cometchat-conversations>\n </div>\n <div class=\"cc-with-messages__main\" [ngClass]=\"{mobile : isMobileView}\"\n *ngIf=\"!showStartConversation && (user || group)\">\n <!--Message List Screen-->\n <cometchat-messages #messagesRef [user]=\"user!\" [group]=\"group!\"\n [messageHeaderConfiguration]=\"messagesConfiguration.messageHeaderConfiguration\"\n [messageListConfiguration]=\"messagesConfiguration.messageListConfiguration\"\n [messageComposerConfiguration]=\"messagesConfiguration.messageComposerConfiguration\"\n [messagesStyle]=\"messagesConfiguration.messagesStyle\"\n [customSoundForIncomingMessages]=\"messagesConfiguration.customSoundForIncomingMessages\"\n [customSoundForOutgoingMessages]=\"messagesConfiguration.customSoundForOutgoingMessages\"\n [detailsConfiguration]=\"messagesConfiguration.detailsConfiguration\"\n [disableSoundForMessages]=\"messagesConfiguration.disableSoundForMessages\"\n [disableTyping]=\"messagesConfiguration.disableTyping\"\n [hideMessageComposer]=\"messagesConfiguration.hideMessageComposer\"\n [hideMessageHeader]=\"messagesConfiguration.hideMessageHeader\"\n [messageComposerView]=\"messagesConfiguration.messageComposerView\"\n [messageHeaderView]=\"messagesConfiguration.messageHeaderView\"\n [messageListView]=\"messagesConfiguration.messageListView\"\n [hideDetails]=\"messagesConfiguration.hideDetails!\"\n [threadedMessageConfiguration]=\"messagesConfiguration.threadedMessageConfiguration\">\n </cometchat-messages>\n <!--Message List Screen ENDS-->\n </div>\n <div class=\"cc-with-messages__start-conversation\"\n [ngStyle]=\"contactsWrapperStyles()\"\n [ngClass]=\"{mobile : isMobileView}\" *ngIf=\"showStartConversation\">\n\n <cometchat-contacts [onItemClick]=\"onContactClicked\"\n [usersConfiguration]=\"StartConversationConfiguration?.usersConfiguration!\"\n [groupsConfiguration]=\"StartConversationConfiguration?.groupsConfiguration!\"\n [closeIconURL]=\"StartConversationConfiguration?.closeIconURL!\"\n [contactsStyle]=\"StartConversationConfiguration?.contactsStyle!\"\n [selectionMode]=\"StartConversationConfiguration?.selectionMode!\"\n [onClose]=\"closeStartConversation\"\n [tabVisibility]=\"StartConversationConfiguration?.tabVisibility!\"\n [selectionLimit]=\"StartConversationConfiguration?.selectionLimit!\"\n [tabs]=\"StartConversationConfiguration?.tabs!\"\n [onSubmitButtonClick]=\"StartConversationConfiguration?.onSubmitButtonClick!\"\n [hideSubmitButton]=\"StartConversationConfiguration?.hideSubmitButton!\"></cometchat-contacts>\n </div>\n <div class=\"cc-decorator__message--empty\"\n *ngIf=\"!user && !group && !showStartConversation\"\n [ngStyle]=\"emptyMessageStyle()\">\n <cometchat-label [text]=\"messageText\"\n [labelStyle]=\"labelStyle\"></cometchat-label>\n </div>\n <ng-template #startConversationButton>\n <cometchat-button *ngIf=\"!hideStartNewConversation\"\n [iconURL]=\"startNewConversationIconURL\"\n [buttonStyle]=\"startConversationButtonStyle\"\n (cc-button-clicked)=\"triggerStartConversation()\"></cometchat-button>\n\n </ng-template>\n", styles: [".cc-with-messages__wrapper{display:flex;height:100%;width:100%;box-sizing:border-box;overflow:hidden}.cc-with-messages__sidebar{width:280px;height:100%;position:relative}.cc-with-messages__main,.cc-with-messages__start-conversation{width:calc(100% - 280px);height:100%}.mobile{width:100%!important;height:100%;position:absolute}.cc-decorator__message--empty{display:flex;justify-content:center;align-items:center}\n"] }]
|
|
384
390
|
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.CometChatThemeService }]; }, propDecorators: { user: [{
|
|
385
391
|
type: Input
|
|
386
392
|
}], group: [{
|
|
@@ -404,4 +410,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
|
|
|
404
410
|
}], StartConversationConfiguration: [{
|
|
405
411
|
type: Input
|
|
406
412
|
}] } });
|
|
407
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tZXRjaGF0LWNvbnZlcnNhdGlvbnMtd2l0aC1tZXNzYWdlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGF0LXVpa2l0LWFuZ3VsYXIvc3JjL0NvbWV0Q2hhdENvbnZlcnNhdGlvbnNXaXRoTWVzc2FnZXMvY29tZXRjaGF0LWNvbnZlcnNhdGlvbnMtd2l0aC1tZXNzYWdlcy9jb21ldGNoYXQtY29udmVyc2F0aW9ucy13aXRoLW1lc3NhZ2VzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NoYXQtdWlraXQtYW5ndWxhci9zcmMvQ29tZXRDaGF0Q29udmVyc2F0aW9uc1dpdGhNZXNzYWdlcy9jb21ldGNoYXQtY29udmVyc2F0aW9ucy13aXRoLW1lc3NhZ2VzL2NvbWV0Y2hhdC1jb252ZXJzYXRpb25zLXdpdGgtbWVzc2FnZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBcUIsS0FBSyxFQUFFLHVCQUF1QixFQUEyRCxNQUFNLGVBQWUsQ0FBQztBQUN0SixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLHFCQUFxQixFQUFFLDBCQUEwQixFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFDckksT0FBTyxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFtQixvQkFBb0IsRUFBRSx1QkFBdUIsRUFBNkksMkJBQTJCLEVBQXlDLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUE7QUFFblgsT0FBTywyQkFBMkIsQ0FBQTs7Ozs7OztBQUdsQzs7Ozs7Ozs7RUFRRTtBQU9GLE1BQU0sT0FBTywyQ0FBMkM7SUFrRHRELFlBQW9CLFVBQXNCLEVBQVUsR0FBc0IsRUFBVSxZQUFtQztRQUFuRyxlQUFVLEdBQVYs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QUFDLGFBQWEsRUFBRSxDQUFDO1NBQzFCO2FBQU0sSUFBSSxnQkFBZ0IsS0FBSyx1QkFBdUIsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFNLGdCQUFvQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzNLLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDMUI7YUFBTTtZQUNMLE9BQU87U0FDUjtJQUNILENBQUM7O3lJQTFYVSwyQ0FBMkM7NkhBQTNDLDJDQUEyQyx3akJDdkJ4RCwrcE1BbUdBOzRGRDVFYSwyQ0FBMkM7a0JBTnZELFNBQVM7K0JBQ0UsdUNBQXVDLG1CQUdoQyx1QkFBdUIsQ0FBQyxNQUFNO3FLQUl0QyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyw4QkFBOEI7c0JBQXRDLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLHlCQUF5QjtzQkFBakMsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBR0csMkJBQTJCO3NCQUFuQyxLQUFLO2dCQUNHLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFDRyw4QkFBOEI7c0JBQXRDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkLCBJbnB1dCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgQ2hhbmdlRGV0ZWN0b3JSZWYsIEVsZW1lbnRSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQ29tZXRDaGF0IH0gZnJvbSBcIkBjb21ldGNoYXQvY2hhdC1zZGstamF2YXNjcmlwdFwiO1xuaW1wb3J0IHsgV2l0aE1lc3NhZ2VzU3R5bGUsIE1lc3NhZ2VzQ29uZmlndXJhdGlvbiwgQ29udmVyc2F0aW9uc0NvbmZpZ3VyYXRpb24sIENvbnRhY3RzQ29uZmlndXJhdGlvbiB9IGZyb20gJ0Bjb21ldGNoYXQvdWlraXQtc2hhcmVkJ1xuaW1wb3J0IHsgQ29tZXRDaGF0VGhlbWUsIGZvbnRIZWxwZXIsIGxvY2FsaXplLCBDb21ldENoYXRPcHRpb24sIENvbWV0Q2hhdEdyb3VwRXZlbnRzLCBDb21ldENoYXRVSUtpdENvbnN0YW50cywgSUdyb3VwTGVmdCwgSUdyb3VwTWVtYmVyQWRkZWQsIElHcm91cE1lbWJlcktpY2tlZEJhbm5lZCwgSUdyb3VwTWVtYmVyU2NvcGVDaGFuZ2VkLCBJTWVzc2FnZXMsIENvbWV0Q2hhdFVzZXJFdmVudHMsIENvbWV0Q2hhdE1lc3NhZ2VFdmVudHMsIENvbWV0Q2hhdENvbnZlcnNhdGlvbkV2ZW50cywgSUdyb3VwTWVtYmVySm9pbmVkLCBJT3duZXJzaGlwQ2hhbmdlZCwgQ29tZXRDaGF0VUlFdmVudHMgfSBmcm9tICdAY29tZXRjaGF0L3Vpa2l0LXJlc291cmNlcydcblxuaW1wb3J0ICdAY29tZXRjaGF0L3Vpa2l0LWVsZW1lbnRzJ1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IENvbWV0Q2hhdFRoZW1lU2VydmljZSB9IGZyb20gXCIuLi8uLi9Db21ldENoYXRUaGVtZS5zZXJ2aWNlXCI7XG4vKipcbipcbiogQ29tZXRDaGF0Q29udmVyc2F0aW9uc1dpdGhNZXNzYWdlc0NvbXBvbmVudCBpcyBhIHdyYXBwZXIgY29tcG9uZW50IGZvciBDb21ldENoYXRNZXNzYWdlc0NvbXBvbmVudCBhbmQgQ29tZXRDaGF0Q29udmVyc2F0aW9ucyBjb21wb25lbnQgdG8gc2hvdyBjaGF0cyBhbmQgbWVzc2FnZXMgaW4gb25lIHNjcmVlblxuKlxuKiBAdmVyc2lvbiAxLjAuMFxuKiBAYXV0aG9yIENvbWV0Q2hhdFRlYW1cbiogQGNvcHlyaWdodCDCqSAyMDIyIENvbWV0Q2hhdCBJbmMuXG4qXG4qL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImNvbWV0Y2hhdC1jb252ZXJzYXRpb25zLXdpdGgtbWVzc2FnZXNcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9jb21ldGNoYXQtY29udmVyc2F0aW9ucy13aXRoLW1lc3NhZ2VzLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi9jb21ldGNoYXQtY29udmVyc2F0aW9ucy13aXRoLW1lc3NhZ2VzLmNvbXBvbmVudC5zY3NzXCJdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQ29tZXRDaGF0Q29udmVyc2F0aW9uc1dpdGhNZXNzYWdlc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgLy8gdGFraW5nIHJlZmVyZW5jZSBvZiBjb252ZXJzYXRpb25Db21wb25lbnQgYW5kIE1lc3NhZ2VzQ29tcG9uZW50XG4gIEBJbnB1dCgpIHVzZXIhOiBDb21ldENoYXQuVXNlciB8IG51bGw7XG4gIEBJbnB1dCgpIGdyb3VwITogQ29tZXRDaGF0Lkdyb3VwIHwgbnVsbDtcbiAgQElucHV0KCkgaXNNb2JpbGVWaWV3OiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIG1lc3NhZ2VUZXh0OiBzdHJpbmcgPSBsb2NhbGl6ZShcIk5PX0NIQVRTX1NFTEVDVEVEXCIpO1xuICBASW5wdXQoKSBjb252ZXJzYXRpb25zV2l0aE1lc3NhZ2VzU3R5bGU6IFdpdGhNZXNzYWdlc1N0eWxlID0ge307XG4gIEBJbnB1dCgpIG1lc3NhZ2VzQ29uZmlndXJhdGlvbjogTWVzc2FnZXNDb25maWd1cmF0aW9uID0gbmV3IE1lc3NhZ2VzQ29uZmlndXJhdGlvbih7fSk7XG4gIEBJbnB1dCgpIGNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb246IENvbnZlcnNhdGlvbnNDb25maWd1cmF0aW9uID0gbmV3IENvbnZlcnNhdGlvbnNDb25maWd1cmF0aW9uKHt9KTtcbiAgQElucHV0KCkgb25FcnJvcjogKChlcnJvcjogQ29tZXRDaGF0LkNvbWV0Q2hhdEV4Y2VwdGlvbikgPT4gdm9pZCkgfCBudWxsID0gKGVycm9yOiBDb21ldENoYXQuQ29tZXRDaGF0RXhjZXB0aW9uKSA9PiB7XG4gICAgY29uc29sZS5sb2coZXJyb3IpXG4gIH1cbiAgQElucHV0KCkgc3RhcnROZXdDb252ZXJzYXRpb25JY29uVVJMOiBzdHJpbmcgPSBcImFzc2V0cy9uZXctY2hhdC5zdmdcIlxuICBASW5wdXQoKSBoaWRlU3RhcnROZXdDb252ZXJzYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgU3RhcnRDb252ZXJzYXRpb25Db25maWd1cmF0aW9uOiBDb250YWN0c0NvbmZpZ3VyYXRpb24gPSBuZXcgQ29udGFjdHNDb25maWd1cmF0aW9uKHt9KVxuICB0aGVtZTogQ29tZXRDaGF0VGhlbWUgPSBuZXcgQ29tZXRDaGF0VGhlbWUoe30pO1xuICAvKipcbiAgICogUHJvcGVydGllcyBmb3IgaW50ZXJuYWwgdXNlXG4gICAqL1xuICBwdWJsaWMgc2hvd1N0YXJ0Q29udmVyc2F0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBsb2dnZWRJblVzZXIhOiBDb21ldENoYXQuVXNlciB8IG51bGw7XG4gIHB1YmxpYyBhY3RpdmVDb252ZXJzYXRpb24hOiBDb21ldENoYXQuQ29udmVyc2F0aW9uIHwgbnVsbDtcbiAgbGFiZWxTdHlsZTogYW55ID0ge1xuICAgIGJhY2tncm91bmQ6IFwidHJhbnNwYXJlbnRcIixcbiAgICB0ZXh0Rm9udDogXCI3MDAgMjJweCBJbnRlclwiLFxuICAgIHRleHRDb2xvcjogXCJyZ2JhKDIwLCAyMCwgMjAsIDAuMzMpXCJcbiAgfVxuXG4gIHB1YmxpYyBoaWRlU2VhcmNoOiBib29sZWFuID0gdHJ1ZTtcbiAgc3RhcnRDb252ZXJzYXRpb25CdXR0b25TdHlsZTogYW55ID0ge1xuXG4gIH1cbiAgLyoqXG4gICogRXZlbnRzXG4gICovXG4gIGNjR3JvdXBNZW1iZXJBZGRlZCE6IFN1YnNjcmlwdGlvbjtcbiAgY2NHcm91cExlZnQhOiBTdWJzY3JpcHRpb247XG4gIGNjT3BlbkNoYXQhOiBTdWJzY3JpcHRpb247XG4gIGNjR3JvdXBNZW1iZXJKb2luZWQhOiBTdWJzY3JpcHRpb247XG4gIGNjR3JvdXBNZW1iZXJLaWNrZWQhOiBTdWJzY3JpcHRpb247XG4gIGNjR3JvdXBNZW1iZXJCYW5uZWQhOiBTdWJzY3JpcHRpb247XG4gIGNjT3duZXJzaGlwQ2hhbmdlZCE6IFN1YnNjcmlwdGlvbjtcbiAgY2NHcm91cERlbGV0ZWQhOiBTdWJzY3JpcHRpb247XG4gIHNpZGVCYXJTdHlsZTogYW55ID0ge1xuXG4gIH1cbiAgcHVibGljIGdyb3VwTGlzdGVuZXJJZDogc3RyaW5nID0gXCJ3aXRobWVzc2FnZXNfZ3JvdXBfXCIgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcblxuICBwdWJsaWMgY2NDb252ZXJzYXRpb25EZWxldGVkITogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZiwgcHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIHRoZW1lU2VydmljZTogQ29tZXRDaGF0VGhlbWVTZXJ2aWNlKSB7XG4gIH1cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuXG4gICAgaWYgKGNoYW5nZXNbXCJpc01vYmlsZVZpZXdcIl0pIHtcbiAgICAgIGlmICh0aGlzLmlzTW9iaWxlVmlldykge1xuICAgICAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5tZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5oaWRlQmFja0J1dHRvbiA9IGZhbHNlO1xuICAgICAgICBpZiAoIXRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLmRldGFpbHNDb25maWd1cmF0aW9uLmRldGFpbHNTdHlsZS5wYWRkaW5nKSB7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24uZGV0YWlsc0NvbmZpZ3VyYXRpb24uZGV0YWlsc1N0eWxlLnBhZGRpbmcgPSBcIjAgOHB4XCJcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLmRldGFpbHNDb25maWd1cmF0aW9uLmFkZE1lbWJlcnNDb25maWd1cmF0aW9uLmFkZE1lbWJlcnNTdHlsZS5wYWRkaW5nKSB7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24uZGV0YWlsc0NvbmZpZ3VyYXRpb24uYWRkTWVtYmVyc0NvbmZpZ3VyYXRpb24uYWRkTWVtYmVyc1N0eWxlLnBhZGRpbmcgPSBcIjAgOHB4XCJcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLmRldGFpbHNDb25maWd1cmF0aW9uLmJhbm5lZE1lbWJlcnNDb25maWd1cmF0aW9uLmJhbm5lZE1lbWJlcnNTdHlsZS5wYWRkaW5nKSB7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24uZGV0YWlsc0NvbmZpZ3VyYXRpb24uYmFubmVkTWVtYmVyc0NvbmZpZ3VyYXRpb24uYmFubmVkTWVtYmVyc1N0eWxlLnBhZGRpbmcgPSBcIjAgOHB4XCJcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLmRldGFpbHNDb25maWd1cmF0aW9uLmJhbm5lZE1lbWJlcnNDb25maWd1cmF0aW9uLmJhbm5lZE1lbWJlcnNTdHlsZS5wYWRkaW5nKSB7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24uZGV0YWlsc0NvbmZpZ3VyYXRpb24uYmFubmVkTWVtYmVyc0NvbmZpZ3VyYXRpb24uYmFubmVkTWVtYmVyc1N0eWxlLnBhZGRpbmcgPSBcIjAgOHB4XCJcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5tZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbiA9IHsgLi4udGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24ubWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24gfVxuICAgICAgICB0aGlzLlN0YXJ0Q29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5jb250YWN0c1N0eWxlLnBhZGRpbmcgPSBcIjAgOHB4XCI7XG4gICAgICAgIHRoaXMuU3RhcnRDb252ZXJzYXRpb25Db25maWd1cmF0aW9uID0geyAuLi50aGlzLlN0YXJ0Q29udmVyc2F0aW9uQ29uZmlndXJhdGlvbiB9XG5cbiAgICAgICAgdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24gPSB7IC4uLnRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uIH1cbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKCF0aGlzLmlzTW9iaWxlVmlldykge1xuICAgICAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5tZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24ubWVzc2FnZUluZm9ybWF0aW9uQ29uZmlndXJhdGlvbi5tZXNzYWdlSW5mb3JtYXRpb25TdHlsZS5oZWlnaHQgPSBcIjUwMHB4XCJcbiAgICAgICAgdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24ubWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLm1lc3NhZ2VJbmZvcm1hdGlvbkNvbmZpZ3VyYXRpb24ubWVzc2FnZUluZm9ybWF0aW9uU3R5bGUud2lkdGggPSBcIjUwMHB4XCJcbiAgICAgICAgdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24ubWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24uaGlkZUJhY2tCdXR0b24gPSB0cnVlO1xuICAgICAgICBpZiAoIXRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLmRldGFpbHNDb25maWd1cmF0aW9uLmRldGFpbHNTdHlsZS5wYWRkaW5nKSB7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24uZGV0YWlsc0NvbmZpZ3VyYXRpb24uZGV0YWlsc1N0eWxlLnBhZGRpbmcgPSBcIjAgMTAwcHhcIlxuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24uZGV0YWlsc0NvbmZpZ3VyYXRpb24uYWRkTWVtYmVyc0NvbmZpZ3VyYXRpb24uYWRkTWVtYmVyc1N0eWxlLnBhZGRpbmcpIHtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5kZXRhaWxzQ29uZmlndXJhdGlvbi5hZGRNZW1iZXJzQ29uZmlndXJhdGlvbi5hZGRNZW1iZXJzU3R5bGUucGFkZGluZyA9IFwiMCAxMDBweFwiXG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5kZXRhaWxzQ29uZmlndXJhdGlvbi5iYW5uZWRNZW1iZXJzQ29uZmlndXJhdGlvbi5iYW5uZWRNZW1iZXJzU3R5bGUucGFkZGluZykge1xuICAgICAgICAgIHRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLmRldGFpbHNDb25maWd1cmF0aW9uLmJhbm5lZE1lbWJlcnNDb25maWd1cmF0aW9uLmJhbm5lZE1lbWJlcnNTdHlsZS5wYWRkaW5nID0gXCIwIDEwMHB4XCJcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLmRldGFpbHNDb25maWd1cmF0aW9uLmJhbm5lZE1lbWJlcnNDb25maWd1cmF0aW9uLmJhbm5lZE1lbWJlcnNTdHlsZS5wYWRkaW5nKSB7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24uZGV0YWlsc0NvbmZpZ3VyYXRpb24uYmFubmVkTWVtYmVyc0NvbmZpZ3VyYXRpb24uYmFubmVkTWVtYmVyc1N0eWxlLnBhZGRpbmcgPSBcIjAgMTAwcHhcIlxuICAgICAgICB9XG4gICAgICAgIHRoaXMuU3RhcnRDb252ZXJzYXRpb25Db25maWd1cmF0aW9uLmNvbnRhY3RzU3R5bGUucGFkZGluZyA9IFwiMCAxMDBweFwiO1xuICAgICAgICB0aGlzLlN0YXJ0Q29udmVyc2F0aW9uQ29uZmlndXJhdGlvbiA9IHsgLi4udGhpcy5TdGFydENvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24gfVxuICAgICAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5tZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbiA9IHsgLi4udGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24ubWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24gfVxuICAgICAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbiA9IHsgLi4udGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24gfVxuXG4gICAgICB9XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVCYWNrZHJvcEhlaWdodCgpXG4gICAgICB9LCAxMDApO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1tcInVzZXJcIl0gfHwgY2hhbmdlc1tcImdyb3VwXCJdKSB7XG4gICAgICB0aGlzLnNldEFjdGl2ZUNoYXQoKTtcbiAgICB9XG4gIH1cbiAgdHJpZ2dlclN0YXJ0Q29udmVyc2F0aW9uKCkge1xuICAgIHRoaXMuc2hvd1N0YXJ0Q29udmVyc2F0aW9uID0gdHJ1ZTtcbiAgfVxuICByZW1vdmVDaGF0T25Hcm91cEFjdGlvbihsZWZ0VXNlcjogQ29tZXRDaGF0LlVzZXIsIG1lc3NhZ2U6IENvbWV0Q2hhdC5BY3Rpb24pIHtcbiAgICBjb25zdCBpc1NhbWVVc2VyID0gdGhpcy5sb2dnZWRJblVzZXI/LmdldFVpZCgpID09PSBsZWZ0VXNlci5nZXRVaWQoKTtcbiAgICBjb25zdCBhY3Rpb25Gb3JHcm91cCA9IG1lc3NhZ2UuZ2V0QWN0aW9uRm9yKCkgaW5zdGFuY2VvZiBDb21ldENoYXQuR3JvdXA7XG5cbiAgICBpZiAoaXNTYW1lVXNlciAmJiB0aGlzLmFjdGl2ZUNvbnZlcnNhdGlvbiAmJiB0aGlzLmFjdGl2ZUNvbnZlcnNhdGlvbi5nZXRDb252ZXJzYXRpb25XaXRoKCkgaW5zdGFuY2VvZiBDb21ldENoYXQuR3JvdXApIHtcbiAgICAgIGxldCBncm91cCA9IHRoaXMuYWN0aXZlQ29udmVyc2F0aW9uLmdldENvbnZlcnNhdGlvbldpdGgoKSBhcyBDb21ldENoYXQuR3JvdXA7XG5cbiAgICAgIGlmIChhY3Rpb25Gb3JHcm91cCkge1xuICAgICAgICBsZXQgYWN0aW9uT25Hcm91cCA9IG1lc3NhZ2UuZ2V0QWN0aW9uRm9yKCkgYXMgQ29tZXRDaGF0Lkdyb3VwO1xuXG4gICAgICAgIGlmIChhY3Rpb25Pbkdyb3VwLmdldEd1aWQoKSA9PT0gZ3JvdXAuZ2V0R3VpZCgpKSB7XG4gICAgICAgICAgdGhpcy5hY3RpdmVDb252ZXJzYXRpb24gPSBudWxsO1xuICAgICAgICAgIHRoaXMudXNlciA9IG51bGw7XG4gICAgICAgICAgdGhpcy5ncm91cCA9IG51bGw7XG4gICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGF0dGFjaEdyb3VwTGlzdGVuZXJzKCkge1xuICAgIENvbWV0Q2hhdC5hZGRHcm91cExpc3RlbmVyKFxuICAgICAgdGhpcy5ncm91cExpc3RlbmVySWQsXG4gICAgICBuZXcgQ29tZXRDaGF0Lkdyb3VwTGlzdGVuZXIoe1xuICAgICAgICBvbkdyb3VwTWVtYmVyS2lja2VkOiAoXG4gICAgICAgICAgbWVzc2FnZTogYW55LFxuICAgICAgICAgIGtpY2tlZFVzZXI6IGFueSxcbiAgICAgICAgICBraWNrZWRCeTogYW55LFxuICAgICAgICAgIGtpY2tlZEZyb206IGFueVxuICAgICAgICApID0+IHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUNoYXRPbkdyb3VwQWN0aW9uKGtpY2tlZFVzZXIsIG1lc3NhZ2UpXG5cbiAgICAgICAgfSxcbiAgICAgICAgb25Hcm91cE1lbWJlckJhbm5lZDogKFxuICAgICAgICAgIG1lc3NhZ2U6IGFueSxcbiAgICAgICAgICBiYW5uZWRVc2VyOiBhbnksXG4gICAgICAgICAgYmFubmVkQnk6IGFueSxcbiAgICAgICAgICBiYW5uZWRGcm9tOiBhbnlcbiAgICAgICAgKSA9PiB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVDaGF0T25Hcm91cEFjdGlvbihiYW5uZWRVc2VyLCBtZXNzYWdlKVxuXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICk7XG4gIH1cbiAgb25CYWNrID0gKCkgPT4ge1xuICAgIHRoaXMudXNlciA9IG51bGxcbiAgICB0aGlzLmdyb3VwID0gbnVsbFxuICAgIHRoaXMuYWN0aXZlQ29udmVyc2F0aW9uID0gbnVsbFxuICB9XG4gIHNldFdpdGhNZXNzYWdlc1N0eWxlKCkge1xuICAgIGxldCBkZWZhdWx0U3R5bGU6IFdpdGhNZXNzYWdlc1N0eWxlID0gbmV3IFdpdGhNZXNzYWdlc1N0eWxlKHtcbiAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgICBiYWNrZ3JvdW5kOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEJhY2tncm91bmQoKSxcbiAgICAgIGJvcmRlclJhZGl1czogXCJub25lXCIsXG4gICAgICBib3JkZXI6IGAxcHggc29saWQgJHt0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDIwMCgpfWAsXG4gICAgICBtZXNzYWdlVGV4dENvbG9yOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDYwMCgpLFxuICAgICAgbWVzc2FnZVRleHRGb250OiBmb250SGVscGVyKHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnR5cG9ncmFwaHkudGl0bGUxKSxcbiAgICB9KVxuICAgIHRoaXMuY29udmVyc2F0aW9uc1dpdGhNZXNzYWdlc1N0eWxlID0ge1xuICAgICAgLi4uZGVmYXVsdFN0eWxlLFxuICAgICAgLi4udGhpcy5jb252ZXJzYXRpb25zV2l0aE1lc3NhZ2VzU3R5bGVcbiAgICB9XG4gICAgdGhpcy5sYWJlbFN0eWxlLnRleHRGb250ID0gdGhpcy5jb252ZXJzYXRpb25zV2l0aE1lc3NhZ2VzU3R5bGUubWVzc2FnZVRleHRGb250XG4gICAgdGhpcy5sYWJlbFN0eWxlLnRleHRDb2xvciA9IHRoaXMuY29udmVyc2F0aW9uc1dpdGhNZXNzYWdlc1N0eWxlLm1lc3NhZ2VUZXh0Q29sb3JcbiAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5tZXNzYWdlc1N0eWxlLmJvcmRlciA9IHRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLm1lc3NhZ2VzU3R5bGUuYm9yZGVyID8/IFwibm9uZVwiXG4gICAgdGhpcy5jb252ZXJzYXRpb25Db25maWd1cmF0aW9uLmNvbnZlcnNhdGlvbnNTdHlsZS5ib3JkZXIgPSB0aGlzLmNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24uY29udmVyc2F0aW9uc1N0eWxlLmJvcmRlciA/PyBcIm5vbmVcIlxuICAgIGlmICghdGhpcy5jb252ZXJzYXRpb25Db25maWd1cmF0aW9uPy5jb252ZXJzYXRpb25zU3R5bGU/LmJvcmRlciB8fCB0aGlzLmNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24/LmNvbnZlcnNhdGlvbnNTdHlsZT8uYm9yZGVyID09IFwibm9uZVwiKSB7XG4gICAgICB0aGlzLnNpZGVCYXJTdHlsZSA9IHsgYm9yZGVyUmlnaHQ6IHRoaXMuY29udmVyc2F0aW9uc1dpdGhNZXNzYWdlc1N0eWxlLmJvcmRlciB9XG5cbiAgICB9XG4gIH1cbiAgb25Db250YWN0Q2xpY2tlZCA9ICh1c2VyPzogQ29tZXRDaGF0LlVzZXIsIGdyb3VwPzogQ29tZXRDaGF0Lkdyb3VwKSA9PiB7XG4gICAgdGhpcy5zaG93U3RhcnRDb252ZXJzYXRpb24gPSBmYWxzZTtcbiAgICBpZiAodXNlcikge1xuICAgICAgdGhpcy5ncm91cCA9IG51bGxcbiAgICAgIHRoaXMudXNlciA9IHVzZXI7XG4gICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICAgIGlmIChncm91cCkge1xuICAgICAgdGhpcy51c2VyID0gbnVsbFxuICAgICAgdGhpcy5ncm91cCA9IGdyb3VwO1xuICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgb25JdGVtQ2xpY2s6ICgoY29udmVyc2F0aW9uOiBDb21ldENoYXQuQ29udmVyc2F0aW9uKSA9PiB2b2lkKSA9IChjb252ZXJzYXRpb246IENvbWV0Q2hhdC5Db252ZXJzYXRpb24pID0+IHtcbiAgICB0aGlzLmFjdGl2ZUNvbnZlcnNhdGlvbiA9IGNvbnZlcnNhdGlvblxuICAgIHRoaXMuc2hvd1N0YXJ0Q29udmVyc2F0aW9uID0gZmFsc2U7XG4gICAgaWYgKGNvbnZlcnNhdGlvbi5nZXRDb252ZXJzYXRpb25UeXBlKCkgJiYgY29udmVyc2F0aW9uLmdldENvbnZlcnNhdGlvblR5cGUoKSA9PSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlUmVjZWl2ZXJUeXBlLnVzZXIpIHtcbiAgICAgIHRoaXMuZ3JvdXAgPSBudWxsXG4gICAgICB0aGlzLnVzZXIgPSBjb252ZXJzYXRpb24uZ2V0Q29udmVyc2F0aW9uV2l0aCgpIGFzIENvbWV0Q2hhdC5Vc2VyO1xuICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgfVxuICAgIGVsc2UgaWYgKGNvbnZlcnNhdGlvbi5nZXRDb252ZXJzYXRpb25UeXBlKCkgJiYgY29udmVyc2F0aW9uLmdldENvbnZlcnNhdGlvblR5cGUoKSA9PSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlUmVjZWl2ZXJUeXBlLmdyb3VwKSB7XG4gICAgICB0aGlzLnVzZXIgPSBudWxsXG4gICAgICB0aGlzLmdyb3VwID0gY29udmVyc2F0aW9uLmdldENvbnZlcnNhdGlvbldpdGgoKSBhcyBDb21ldENoYXQuR3JvdXBcbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKVxuICAgIH1cbiAgfTtcbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMudXBkYXRlQmFja2Ryb3BIZWlnaHQoKVxuICB9XG4gIHVwZGF0ZUJhY2tkcm9wSGVpZ2h0KCkge1xuICAgIGNvbnN0IGRpdkhlaWdodCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICBjb25zdCBkaXZXaWR0aCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgIGxldCBiYWNrZHJvcFN0eWxlID0ge1xuICAgICAgaGVpZ2h0OiBkaXZIZWlnaHQgKyBcInB4XCIsXG4gICAgICB3aWR0aDogZGl2V2lkdGggKyBcInB4XCIsXG4gICAgICBiYWNrZ3JvdW5kOiBcInJnYmEoMCwgMCwgMCwgMC41KVwiLFxuICAgICAgcG9zaXRpb246IFwiZml4ZWRcIlxuICAgIH1cbiAgICBpZiAodGhpcy5pc01vYmlsZVZpZXcpIHtcbiAgICAgIHRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLmRldGFpbHNDb25maWd1cmF0aW9uLnRyYW5zZmVyT3duZXJzaGlwQ29uZmlndXJhdGlvbi50cmFuc2Zlck93bmVyc2hpcFN0eWxlLmhlaWdodCA9IChkaXZIZWlnaHQgLSAzMCkgKyBcInB4XCI7XG4gICAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5kZXRhaWxzQ29uZmlndXJhdGlvbi50cmFuc2Zlck93bmVyc2hpcENvbmZpZ3VyYXRpb24udHJhbnNmZXJPd25lcnNoaXBTdHlsZS53aWR0aCA9IGRpdldpZHRoICsgXCJweFwiO1xuICAgICAgdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24ubWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLm1lc3NhZ2VJbmZvcm1hdGlvbkNvbmZpZ3VyYXRpb24ubWVzc2FnZUluZm9ybWF0aW9uU3R5bGUuaGVpZ2h0ID0gZGl2SGVpZ2h0ICsgXCJweFwiO1xuICAgICAgdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24ubWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLm1lc3NhZ2VJbmZvcm1hdGlvbkNvbmZpZ3VyYXRpb24ubWVzc2FnZUluZm9ybWF0aW9uU3R5bGUud2lkdGggPSBkaXZXaWR0aCArIFwicHhcIjtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5kZXRhaWxzQ29uZmlndXJhdGlvbi50cmFuc2Zlck93bmVyc2hpcENvbmZpZ3VyYXRpb24udHJhbnNmZXJPd25lcnNoaXBTdHlsZS5oZWlnaHQgPSBcIjY1MHB4XCI7XG4gICAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5kZXRhaWxzQ29uZmlndXJhdGlvbi50cmFuc2Zlck93bmVyc2hpcENvbmZpZ3VyYXRpb24udHJhbnNmZXJPd25lcnNoaXBTdHlsZS53aWR0aCA9IFwiMzYwcHhcIjtcbiAgICB9XG4gICAgdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24ubWVzc2FnZUxpc3RDb25maWd1cmF0aW9uLmJhY2tkcm9wU3R5bGUgPSB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5tZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uYmFja2Ryb3BTdHlsZSB8fCBiYWNrZHJvcFN0eWxlO1xuICAgIHRoaXMuY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5iYWNrZHJvcFN0eWxlID0gdGhpcy5jb252ZXJzYXRpb25Db25maWd1cmF0aW9uLmJhY2tkcm9wU3R5bGUgfHwgYmFja2Ryb3BTdHlsZTtcbiAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5kZXRhaWxzQ29uZmlndXJhdGlvbi5iYWNrZHJvcFN0eWxlID0gdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24uZGV0YWlsc0NvbmZpZ3VyYXRpb24uYmFja2Ryb3BTdHlsZSB8fCBiYWNrZHJvcFN0eWxlO1xuICAgIHRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uYmFja2Ryb3BTdHlsZSA9IHRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLm1lc3NhZ2VDb21wb3NlckNvbmZpZ3VyYXRpb24uYmFja2Ryb3BTdHlsZSB8fCBiYWNrZHJvcFN0eWxlO1xuICAgIHRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLmRldGFpbHNDb25maWd1cmF0aW9uLmJhY2tkcm9wU3R5bGUgPXRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLmRldGFpbHNDb25maWd1cmF0aW9uLmJhY2tkcm9wU3R5bGUgfHwgYmFja2Ryb3BTdHlsZTtcbiAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5kZXRhaWxzQ29uZmlndXJhdGlvbi5ncm91cE1lbWJlcnNDb25maWd1cmF0aW9uLmJhY2tkcm9wU3R5bGUgPSB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5kZXRhaWxzQ29uZmlndXJhdGlvbi5ncm91cE1lbWJlcnNDb25maWd1cmF0aW9uLmJhY2tkcm9wU3R5bGUgfHwgYmFja2Ryb3BTdHlsZTtcblxuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKVxuICB9XG4gIHNldEFjdGl2ZUNoYXQoKSB7XG4gICAgbGV0IHR5cGU6IHN0cmluZyA9IHRoaXMudXNlciA/IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VSZWNlaXZlclR5cGUudXNlciA6IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VSZWNlaXZlclR5cGUuZ3JvdXBcbiAgICB0aGlzLmFjdGl2ZUNvbnZlcnNhdGlvbiA9IG51bGxcbiAgICBsZXQgY29udmVyc2F0aW9uV2l0aDogc3RyaW5nID0gdGhpcy51c2VyPy5nZXRVaWQoKSEgfHwgdGhpcy5ncm91cD8uZ2V0R3VpZCgpIVxuICAgIENvbWV0Q2hhdC5nZXRDb252ZXJzYXRpb24oY29udmVyc2F0aW9uV2l0aCwgdHlwZSkudGhlbigoY29udmVyc2F0aW9uOiBDb21ldENoYXQuQ29udmVyc2F0aW9uKSA9PiB7XG4gICAgICB0aGlzLmFjdGl2ZUNvbnZlcnNhdGlvbiA9IGNvbnZlcnNhdGlvblxuICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IENvbWV0Q2hhdC5Db21ldENoYXRFeGNlcHRpb24pID0+IHtcbiAgICAgICAgaWYgKHRoaXMub25FcnJvcikge1xuICAgICAgICAgIHRoaXMub25FcnJvcihlcnJvcilcbiAgICAgICAgfVxuICAgICAgfSlcbiAgfVxuICBjbG9zZVN0YXJ0Q29udmVyc2F0aW9uID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLlN0YXJ0Q29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5vbkNsb3NlKSB7XG4gICAgICB0aGlzLlN0YXJ0Q29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5vbkNsb3NlKClcbiAgICB9XG4gICAgdGhpcy5zaG93U3RhcnRDb252ZXJzYXRpb24gPSBmYWxzZTtcbiAgfVxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLlN0YXJ0Q29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi51c2Vyc0NvbmZpZ3VyYXRpb24udXNlcnNTdHlsZS5ib3JkZXIgPSBcIm5vbmVcIlxuICAgIHRoaXMuU3RhcnRDb252ZXJzYXRpb25Db25maWd1cmF0aW9uLmdyb3Vwc0NvbmZpZ3VyYXRpb24uZ3JvdXBzU3R5bGUuYm9yZGVyID0gXCJub25lXCJcblxuICAgIHRoaXMuc3RhcnRDb252ZXJzYXRpb25CdXR0b25TdHlsZSA9IHtcbiAgICAgIGhlaWdodDogXCIyNHB4XCIsXG4gICAgICB3aWR0aDogXCIyNHB4XCIsXG4gICAgICBib3JkZXI6IFwibm9uZVwiLFxuICAgICAgYm9yZGVyUmFkaXVzOiAnMCcsXG4gICAgICBiYWNrZ3JvdW5kOiBcInRyYW5zcGFyZW50XCIsXG4gICAgICBidXR0b25JY29uVGludDogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRQcmltYXJ5KClcbiAgICB9XG4gICAgdGhpcy5TdGFydENvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24gPSB7IC4uLnRoaXMuU3RhcnRDb252ZXJzYXRpb25Db25maWd1cmF0aW9uIH1cbiAgICB0aGlzLnNldFdpdGhNZXNzYWdlc1N0eWxlKClcbiAgICBpZiAoIXRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uLm9uQmFjaykge1xuICAgICAgdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24ubWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24ub25CYWNrID0gdGhpcy5vbkJhY2tcbiAgICB9XG4gICAgQ29tZXRDaGF0LmdldExvZ2dlZGluVXNlcigpXG4gICAgICAudGhlbigodXNlcjogQ29tZXRDaGF0LlVzZXIgfCBudWxsKSA9PiB7XG4gICAgICAgIHRoaXMubG9nZ2VkSW5Vc2VyID0gdXNlcjtcbiAgICAgICAgdGhpcy5hdHRhY2hHcm91cExpc3RlbmVycygpO1xuICAgICAgICB0aGlzLnN1YnNjcmliZVRvRXZlbnRzKCk7XG5cbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yOiBDb21ldENoYXQuQ29tZXRDaGF0RXhjZXB0aW9uKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLm9uRXJyb3IpIHtcbiAgICAgICAgICB0aGlzLm9uRXJyb3IoZXJyb3IpXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gIH1cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy51bnN1YnNjcmliZVRvRXZlbnRzKCk7XG4gICAgQ29tZXRDaGF0LnJlbW92ZUdyb3VwTGlzdGVuZXIodGhpcy5ncm91cExpc3RlbmVySWQpO1xuICB9XG4gIC8vIHN1YnNjcmliZSB0byBnbG9iYWwgZXZlbnRzXG4gIHN1YnNjcmliZVRvRXZlbnRzKCkge1xuICAgIHRoaXMuY2NDb252ZXJzYXRpb25EZWxldGVkID0gQ29tZXRDaGF0Q29udmVyc2F0aW9uRXZlbnRzLmNjQ29udmVyc2F0aW9uRGVsZXRlZC5zdWJzY3JpYmUoKGNvbnZlcnNhdGlvbjogQ29tZXRDaGF0LkNvbnZlcnNhdGlvbikgPT4ge1xuICAgICAgdGhpcy5yZW1vdmVBY3RpdmVDaGF0TGlzdChjb252ZXJzYXRpb24pIC8vdG8gbWFrZSBtIG1lc3NhZ2VzIHNlY3Rpb24gZW1wdHkgYWZ0ZXIgZGVsZXRpbmcgY29udmVyc2F0aW9uIGZyb20gY29udmVyc2F0aW9ubGlzdFxuICAgIH0pXG4gICAgdGhpcy5jY0dyb3VwRGVsZXRlZCA9IENvbWV0Q2hhdEdyb3VwRXZlbnRzLmNjR3JvdXBEZWxldGVkLnN1YnNjcmliZSgoZ3JvdXA6IENvbWV0Q2hhdC5Hcm91cCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZ3JvdXAgJiYgZ3JvdXAuZ2V0R3VpZCgpID09IHRoaXMuZ3JvdXAuZ2V0R3VpZCgpKSB7XG4gICAgICAgIHRoaXMuZ3JvdXAgPSBudWxsO1xuICAgICAgICB0aGlzLmFjdGl2ZUNvbnZlcnNhdGlvbiA9IG51bGw7XG4gICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKVxuICAgICAgfVxuICAgIH0pXG4gICAgdGhpcy5jY0dyb3VwTWVtYmVyQWRkZWQgPSBDb21ldENoYXRHcm91cEV2ZW50cy5jY0dyb3VwTWVtYmVyQWRkZWQuc3Vic2NyaWJlKChpdGVtOiBJR3JvdXBNZW1iZXJBZGRlZCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZ3JvdXAgJiYgdGhpcy5ncm91cC5nZXRHdWlkKCkgPT0gaXRlbT8udXNlckFkZGVkSW4hLmdldEd1aWQoKSkge1xuICAgICAgICB0aGlzLmdyb3VwID0gaXRlbT8udXNlckFkZGVkSW47XG4gICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKVxuICAgICAgfVxuICAgIH0pXG4gICAgdGhpcy5jY0dyb3VwTWVtYmVyQmFubmVkID0gQ29tZXRDaGF0R3JvdXBFdmVudHMuY2NHcm91cE1lbWJlckJhbm5lZC5zdWJzY3JpYmUoKGl0ZW06IElHcm91cE1lbWJlcktpY2tlZEJhbm5lZCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZ3JvdXAgJiYgdGhpcy5ncm91cC5nZXRHdWlkKCkgPT0gaXRlbT8ua2lja2VkRnJvbSEuZ2V0R3VpZCgpKSB7XG4gICAgICAgIHRoaXMuZ3JvdXAgPSBpdGVtPy5raWNrZWRGcm9tO1xuICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgICAgIH1cbiAgICB9KVxuICAgIHRoaXMuY2NHcm91cE1lbWJlckpvaW5lZCA9IENvbWV0Q2hhdEdyb3VwRXZlbnRzLmNjR3JvdXBNZW1iZXJKb2luZWQuc3Vic2NyaWJlKChpdGVtOiBJR3JvdXBNZW1iZXJKb2luZWQpID0+IHtcbiAgICAgIGlmICh0aGlzLmdyb3VwICYmIHRoaXMuZ3JvdXAuZ2V0R3VpZCgpID09IGl0ZW0/LmpvaW5lZEdyb3VwIS5nZXRHdWlkKCkpIHtcbiAgICAgICAgdGhpcy5ncm91cCA9IGl0ZW0/LmpvaW5lZEdyb3VwO1xuICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgICAgIH1cbiAgICB9KVxuICAgIHRoaXMuY2NHcm91cE1lbWJlcktpY2tlZCA9IENvbWV0Q2hhdEdyb3VwRXZlbnRzLmNjR3JvdXBNZW1iZXJLaWNrZWQuc3Vic2NyaWJlKChpdGVtOiBJR3JvdXBNZW1iZXJLaWNrZWRCYW5uZWQpID0+IHtcbiAgICAgIGlmICh0aGlzLmdyb3VwICYmIHRoaXMuZ3JvdXAuZ2V0R3VpZCgpID09IGl0ZW0/LmtpY2tlZEZyb20hLmdldEd1aWQoKSkge1xuICAgICAgICB0aGlzLmdyb3VwID0gaXRlbT8ua2lja2VkRnJvbTtcbiAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgICB9XG4gICAgfSlcbiAgICB0aGlzLmNjT3duZXJzaGlwQ2hhbmdlZCA9IENvbWV0Q2hhdEdyb3VwRXZlbnRzLmNjT3duZXJzaGlwQ2hhbmdlZC5zdWJzY3JpYmUoKGl0ZW06IElPd25lcnNoaXBDaGFuZ2VkKSA9PiB7XG4gICAgICBpZiAodGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLmdldEd1aWQoKSA9PSBpdGVtPy5ncm91cCEuZ2V0R3VpZCgpKSB7XG4gICAgICAgIHRoaXMuZ3JvdXAgPSBpdGVtPy5ncm91cDtcbiAgICAgICAgdGhpcy5hY3RpdmVDb252ZXJzYXRpb24/LnNldENvbnZlcnNhdGlvbldpdGgodGhpcy5ncm91cClcbiAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfVxuICAgIH0pXG4gICAgdGhpcy5jY0dyb3VwTGVmdCA9IENvbWV0Q2hhdEdyb3VwRXZlbnRzLmNjR3JvdXBMZWZ0LnN1YnNjcmliZSgoaXRlbTogSUdyb3VwTGVmdCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZ3JvdXAgJiYgdGhpcy5ncm91cC5nZXRHdWlkKCkgPT0gaXRlbT8ubGVmdEdyb3VwIS5nZXRHdWlkKCkgJiYgdGhpcy5sb2dnZWRJblVzZXI/LmdldFVpZCgpID09IGl0ZW0/LnVzZXJMZWZ0Py5nZXRVaWQoKSkge1xuICAgICAgICB0aGlzLmdyb3VwID0gbnVsbDtcbiAgICAgICAgdGhpcy5hY3RpdmVDb252ZXJzYXRpb24gPSBudWxsO1xuICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgICAgIH1cbiAgICB9KVxuICAgIC8vIG9wZW4gY2hhdCBhbmQgbWFyayBhcyBhY3RpdmUgY29udmVyc2F0aW9uXG4gICAgdGhpcy5jY09wZW5DaGF0ID0gQ29tZXRDaGF0VUlFdmVudHMuY2NPcGVuQ2hhdC5zdWJzY3JpYmUoKGl0ZW0pID0+IHtcbiAgICAgIHRoaXMudXNlciA9IGl0ZW0udXNlciA/IGl0ZW0udXNlciA6IG51bGw7XG4gICAgICB0aGlzLmdyb3VwID0gaXRlbS5ncm91cCA/IGl0ZW0uZ3JvdXAgOiBudWxsO1xuICAgICAgdGhpcy5zZXRBY3RpdmVDaGF0KClcbiAgICB9KVxuICB9XG4gIC8vIHVuc3Vic2NyaWJlIHRvIHN1YnNjcmliZWQgZXZlbnRzLlxuICB1bnN1YnNjcmliZVRvRXZlbnRzKCkge1xuICAgIHRoaXMuY2NDb252ZXJzYXRpb25EZWxldGVkPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2NHcm91cERlbGV0ZWQ/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jY0dyb3VwTWVtYmVyQWRkZWQ/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jY0dyb3VwTWVtYmVyQmFubmVkPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2NHcm91cE1lbWJlckpvaW5lZD8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNjR3JvdXBNZW1iZXJLaWNrZWQ/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jY093bmVyc2hpcENoYW5nZWQ/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jY0dyb3VwTGVmdD8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNjT3BlbkNoYXQ/LnVuc3Vic2NyaWJlKCk7XG4gIH1cbiAgLyoqXG4gICAqIHJlbW92ZSBhY3RpdmUgY2hhdCBzY3JlZW4gYWZ0ZXIgZGVsZXRpbmcgdGhlIGNvbnZlcnNhdGlvbi5cbiAgICogQHBhcmFtICB7Q29tZXRDaGF0LkNvbnZlcnNhdGlvbn0gY29udmVyc2F0aW9uXG4gICAqL1xuICByZW1vdmVBY3RpdmVDaGF0TGlzdChjb252ZXJzYXRpb246IENvbWV0Q2hhdC5Db252ZXJzYXRpb24pIHtcbiAgICBjb25zdCBjb252ZXJzYXRpb25UeXBlID0gY29udmVyc2F0aW9uLmdldENvbnZlcnNhdGlvblR5cGUoKTtcbiAgICBjb25zdCBjb252ZXJzYXRpb25XaXRoID0gY29udmVyc2F0aW9uLmdldENvbnZlcnNhdGlvbldpdGgoKTtcbiAgICBpZiAoY29udmVyc2F0aW9uVHlwZSA9PT0gQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVJlY2VpdmVyVHlwZS51c2VyICYmIHRoaXMudXNlciAmJiB0aGlzLnVzZXIuZ2V0VWlkKCkgPT09IChjb252ZXJzYXRpb25XaXRoIGFzIENvbWV0Q2hhdC5Vc2VyKS5nZXRVaWQoKSkge1xuICAgICAgdGhpcy51c2VyID0gbnVsbDtcbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9IGVsc2UgaWYgKGNvbnZlcnNhdGlvblR5cGUgPT09IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VSZWNlaXZlclR5cGUuZ3JvdXAgJiYgdGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLmdldEd1aWQoKSA9PT0gKGNvbnZlcnNhdGlvbldpdGggYXMgQ29tZXRDaGF0Lkdyb3VwKS5nZXRHdWlkKCkpIHtcbiAgICAgIHRoaXMuZ3JvdXAgPSBudWxsO1xuICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG4gIGVtcHR5TWVzc2FnZVN0eWxlID0gKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBiYWNrZ3JvdW5kOiB0aGlzLmNvbnZlcnNhdGlvbnNXaXRoTWVzc2FnZXNTdHlsZS5iYWNrZ3JvdW5kIHx8IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QmFja2dyb3VuZCgpLFxuICAgICAgaGVpZ2h0OiB0aGlzLmNvbnZlcnNhdGlvbnNXaXRoTWVzc2FnZXNTdHlsZS5oZWlnaHQsXG4gICAgICB3aWR0aDogYGNhbGMoJHt0aGlzLmNvbnZlcnNhdGlvbnNXaXRoTWVzc2FnZXNTdHlsZS53aWR0aH0gLSAyODBweClgLFxuICAgICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICAgIGJvcmRlclJhZGl1czogdGhpcy5jb252ZXJzYXRpb25zV2l0aE1lc3NhZ2VzU3R5bGUuYm9yZGVyUmFkaXVzLFxuICAgIH1cbiAgfVxuICBjaGF0c1dyYXBwZXJTdHlsZXMgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhlaWdodDogdGhpcy5jb252ZXJzYXRpb25zV2l0aE1lc3NhZ2VzU3R5bGUuaGVpZ2h0LFxuICAgICAgd2lkdGg6IHRoaXMuY29udmVyc2F0aW9uc1dpdGhNZXNzYWdlc1N0eWxlLndpZHRoLFxuICAgICAgYm9yZGVyOiB0aGlzLmNvbnZlcnNhdGlvbnNXaXRoTWVzc2FnZXNTdHlsZS5ib3JkZXIsXG4gICAgICBib3JkZXJSYWRpdXM6IHRoaXMuY29udmVyc2F0aW9uc1dpdGhNZXNzYWdlc1N0eWxlLmJvcmRlclJhZGl1cyxcbiAgICAgIGJhY2tncm91bmQ6IHRoaXMuY29udmVyc2F0aW9uc1dpdGhNZXNzYWdlc1N0eWxlLmJhY2tncm91bmQgfHwgdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRCYWNrZ3JvdW5kKCksXG4gICAgfVxuICB9XG4gIGNvbnRhY3RzV3JhcHBlclN0eWxlcyA9ICgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgYmFja2dyb3VuZDogdGhpcy5TdGFydENvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24uY29udGFjdHNTdHlsZS5iYWNrZ3JvdW5kIHx8IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QmFja2dyb3VuZCgpLFxuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNjLXdpdGgtbWVzc2FnZXNfX3dyYXBwZXJcIiBbbmdTdHlsZV09XCJjaGF0c1dyYXBwZXJTdHlsZXMoKVwiPlxuICA8ZGl2IGNsYXNzPVwiY2Mtd2l0aC1tZXNzYWdlc19fc2lkZWJhclwiIFtuZ0NsYXNzXT1cInttb2JpbGUgOiBpc01vYmlsZVZpZXd9XCJcbiAgICBbbmdTdHlsZV09XCJzaWRlQmFyU3R5bGVcIj5cbiAgICA8Y29tZXRjaGF0LWNvbnZlcnNhdGlvbnMgI2NvbnZlcnNhdGlvblJlZlxuICAgICAgW2FjdGl2ZUNvbnZlcnNhdGlvbl09XCJhY3RpdmVDb252ZXJzYXRpb25cIlxuICAgICAgW29uSXRlbUNsaWNrXT1cImNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24ub25JdGVtQ2xpY2sgfHwgb25JdGVtQ2xpY2tcIlxuICAgICAgW2NvbnZlcnNhdGlvbnNTdHlsZV09XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLmNvbnZlcnNhdGlvbnNTdHlsZVwiXG4gICAgICBbc3RhdHVzSW5kaWNhdG9yU3R5bGVdPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbj8uc3RhdHVzSW5kaWNhdG9yU3R5bGVcIlxuICAgICAgW2F2YXRhclN0eWxlXT1cImNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24/LmF2YXRhclN0eWxlIVwiXG4gICAgICBbc3VidGl0bGVWaWV3XT1cImNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24uc3VidGl0bGVWaWV3XCJcbiAgICAgIFtvcHRpb25zXT1cImNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24ub3B0aW9uc1wiXG4gICAgICBbZGlzYWJsZVVzZXJzUHJlc2VuY2VdPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5kaXNhYmxlVXNlcnNQcmVzZW5jZVwiXG4gICAgICBbZGlzYWJsZVJlY2VpcHRdPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5kaXNhYmxlUmVjZWlwdFwiXG4gICAgICBbaGlkZVJlY2VpcHRdPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5oaWRlUmVjZWlwdFwiXG4gICAgICBbZGlzYWJsZVR5cGluZ109XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLmRpc2FibGVUeXBpbmdcIlxuICAgICAgW2RlbGl2ZXJlZEljb25dPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5kZWxpdmVyZWRJY29uXCJcbiAgICAgIFtyZWFkSWNvbl09XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLnJlYWRJY29uXCJcbiAgICAgIFt3YWl0SWNvbl09XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLndhaXRJY29uXCJcbiAgICAgIFtlcnJvckljb25dPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5lcnJvckljb25cIlxuICAgICAgW2RhdGVQYXR0ZXJuXT1cImNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24uZGF0ZVBhdHRlcm5cIlxuICAgICAgW3JlY2VpcHRTdHlsZV09XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLnJlY2VpcHRTdHlsZVwiXG4gICAgICBbc2VudEljb25dPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5zZW50SWNvblwiXG4gICAgICBbcHJpdmF0ZUdyb3VwSWNvbl09XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLnByaXZhdGVHcm91cEljb25cIlxuICAgICAgW3Byb3RlY3RlZEdyb3VwSWNvbl09XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLnByb3RlY3RlZEdyb3VwSWNvblwiXG4gICAgICBbcGFzc3dvcmRHcm91cEljb25dPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5wYXNzd29yZEdyb3VwSWNvblwiXG4gICAgICBbY3VzdG9tU291bmRGb3JNZXNzYWdlc109XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLmN1c3RvbVNvdW5kRm9yTWVzc2FnZXNcIlxuICAgICAgW2NvbnZlcnNhdGlvbnNSZXF1ZXN0QnVpbGRlcl09XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLmNvbnZlcnNhdGlvbnNSZXF1ZXN0QnVpbGRlclwiXG4gICAgICBbZW1wdHlTdGF0ZVZpZXddPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5lbXB0eVN0YXRlVmlld1wiXG4gICAgICBbb25TZWxlY3RdPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5vblNlbGVjdFwiXG4gICAgICBbbG9hZGluZ0ljb25VUkxdPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5sb2FkaW5nSWNvblVSTFwiXG4gICAgICBbZXJyb3JTdGF0ZVZpZXddPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5lcnJvclN0YXRlVmlld1wiXG4gICAgICBbbG9hZGluZ1N0YXRlVmlld109XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLmxvYWRpbmdTdGF0ZVZpZXdcIlxuICAgICAgW3RpdGxlQWxpZ25tZW50XT1cImNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24udGl0bGVBbGlnbm1lbnRcIlxuICAgICAgW2xpc3RJdGVtVmlld109XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLmxpc3RJdGVtVmlld1wiXG4gICAgICBbbWVudV09XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLm1lbnUgfHwgc3RhcnRDb252ZXJzYXRpb25CdXR0b25cIlxuICAgICAgW2hpZGVTZXBhcmF0b3JdPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5oaWRlU2VwYXJhdG9yXCJcbiAgICAgIFtoaWRlRXJyb3JdPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5oaWRlRXJyb3JcIlxuICAgICAgW3NlbGVjdGlvbk1vZGVdPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5zZWxlY3Rpb25Nb2RlXCJcbiAgICAgIFtkaXNhYmxlU291bmRGb3JNZXNzYWdlc109XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLmRpc2FibGVTb3VuZEZvck1lc3NhZ2VzXCJcbiAgICAgIFtkZWxldGVDb252ZXJzYXRpb25EaWFsb2dTdHlsZV09XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLmRlbGV0ZUNvbnZlcnNhdGlvbkRpYWxvZ1N0eWxlXCJcbiAgICAgIFtiYWRnZVN0eWxlXT1cImNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24uYmFkZ2VTdHlsZVwiXG4gICAgICBbZGF0ZVN0eWxlXT1cImNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24uZGF0ZVN0eWxlXCJcbiAgICAgIFtsaXN0SXRlbVN0eWxlXT1cImNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24ubGlzdEl0ZW1TdHlsZVwiXG4gICAgICBbYmFja2Ryb3BTdHlsZV09XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLmJhY2tkcm9wU3R5bGVcIlxuICAgICAgW3RleHRGb3JtYXR0ZXJzXT1cImNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24/LnRleHRGb3JtYXR0ZXJzXCJcbiAgICAgIFtkaXNhYmxlTWVudGlvbnNdPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5kaXNhYmxlTWVudGlvbnNcIj48L2NvbWV0Y2hhdC1jb252ZXJzYXRpb25zPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNjLXdpdGgtbWVzc2FnZXNfX21haW5cIiBbbmdDbGFzc109XCJ7bW9iaWxlIDogaXNNb2JpbGVWaWV3fVwiXG4gICAgKm5nSWY9XCIhc2hvd1N0YXJ0Q29udmVyc2F0aW9uICYmICh1c2VyIHx8IGdyb3VwKVwiPlxuICAgIDwhLS1NZXNzYWdlIExpc3QgU2NyZWVuLS0+XG4gICAgPGNvbWV0Y2hhdC1tZXNzYWdlcyAjbWVzc2FnZXNSZWYgW3VzZXJdPVwidXNlciFcIiBbZ3JvdXBdPVwiZ3JvdXAhXCJcbiAgICAgIFttZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbl09XCJtZXNzYWdlc0NvbmZpZ3VyYXRpb24ubWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb25cIlxuICAgICAgW21lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbl09XCJtZXNzYWdlc0NvbmZpZ3VyYXRpb24ubWVzc2FnZUxpc3RDb25maWd1cmF0aW9uXCJcbiAgICAgIFttZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uXT1cIm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5tZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uXCJcbiAgICAgIFttZXNzYWdlc1N0eWxlXT1cIm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5tZXNzYWdlc1N0eWxlXCJcbiAgICAgIFtjdXN0b21Tb3VuZEZvckluY29taW5nTWVzc2FnZXNdPVwibWVzc2FnZXNDb25maWd1cmF0aW9uLmN1c3RvbVNvdW5kRm9ySW5jb21pbmdNZXNzYWdlc1wiXG4gICAgICBbY3VzdG9tU291bmRGb3JPdXRnb2luZ01lc3NhZ2VzXT1cIm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5jdXN0b21Tb3VuZEZvck91dGdvaW5nTWVzc2FnZXNcIlxuICAgICAgW2RldGFpbHNDb25maWd1cmF0aW9uXT1cIm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5kZXRhaWxzQ29uZmlndXJhdGlvblwiXG4gICAgICBbZGlzYWJsZVNvdW5kRm9yTWVzc2FnZXNdPVwibWVzc2FnZXNDb25maWd1cmF0aW9uLmRpc2FibGVTb3VuZEZvck1lc3NhZ2VzXCJcbiAgICAgIFtkaXNhYmxlVHlwaW5nXT1cIm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5kaXNhYmxlVHlwaW5nXCJcbiAgICAgIFtoaWRlTWVzc2FnZUNvbXBvc2VyXT1cIm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5oaWRlTWVzc2FnZUNvbXBvc2VyXCJcbiAgICAgIFtoaWRlTWVzc2FnZUhlYWRlcl09XCJtZXNzYWdlc0NvbmZpZ3VyYXRpb24uaGlkZU1lc3NhZ2VIZWFkZXJcIlxuICAgICAgW21lc3NhZ2VDb21wb3NlclZpZXddPVwibWVzc2FnZXNDb25maWd1cmF0aW9uLm1lc3NhZ2VDb21wb3NlclZpZXdcIlxuICAgICAgW21lc3NhZ2VIZWFkZXJWaWV3XT1cIm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5tZXNzYWdlSGVhZGVyVmlld1wiXG4gICAgICBbbWVzc2FnZUxpc3RWaWV3XT1cIm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5tZXNzYWdlTGlzdFZpZXdcIlxuICAgICAgW2hpZGVEZXRhaWxzXT1cIm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5oaWRlRGV0YWlscyFcIlxuICAgICAgW3RocmVhZGVkTWVzc2FnZUNvbmZpZ3VyYXRpb25dPVwibWVzc2FnZXNDb25maWd1cmF0aW9uLnRocmVhZGVkTWVzc2FnZUNvbmZpZ3VyYXRpb25cIj5cbiAgICA8L2NvbWV0Y2hhdC1tZXNzYWdlcz5cbiAgICA8IS0tTWVzc2FnZSBMaXN0IFNjcmVlbiBFTkRTLS0+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY2Mtd2l0aC1tZXNzYWdlc19fc3RhcnQtY29udmVyc2F0aW9uXCJcbiAgICBbbmdTdHlsZV09XCJjb250YWN0c1dyYXBwZXJTdHlsZXMoKVwiXG4gICAgW25nQ2xhc3NdPVwie21vYmlsZSA6IGlzTW9iaWxlVmlld31cIiAqbmdJZj1cInNob3dTdGFydENvbnZlcnNhdGlvblwiPlxuXG4gICAgPGNvbWV0Y2hhdC1jb250YWN0cyBbb25JdGVtQ2xpY2tdPVwib25Db250YWN0Q2xpY2tlZFwiXG4gICAgICBbdXNlcnNDb25maWd1cmF0aW9uXT1cIlN0YXJ0Q29udmVyc2F0aW9uQ29uZmlndXJhdGlvbj8udXNlcnNDb25maWd1cmF0aW9uIVwiXG4gICAgICBbZ3JvdXBzQ29uZmlndXJhdGlvbl09XCJTdGFydENvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24/Lmdyb3Vwc0NvbmZpZ3VyYXRpb24hXCJcbiAgICAgIFtjbG9zZUljb25VUkxdPVwiU3RhcnRDb252ZXJzYXRpb25Db25maWd1cmF0aW9uPy5jbG9zZUljb25VUkwhXCJcbiAgICAgIFtjb250YWN0c1N0eWxlXT1cIlN0YXJ0Q29udmVyc2F0aW9uQ29uZmlndXJhdGlvbj8uY29udGFjdHNTdHlsZSFcIlxuICAgICAgW3NlbGVjdGlvbk1vZGVdPVwiU3RhcnRDb252ZXJzYXRpb25Db25maWd1cmF0aW9uPy5zZWxlY3Rpb25Nb2RlIVwiXG4gICAgICBbb25DbG9zZV09XCJjbG9zZVN0YXJ0Q29udmVyc2F0aW9uXCJcbiAgICAgIFt0YWJWaXNpYmlsaXR5XT1cIlN0YXJ0Q29udmVyc2F0aW9uQ29uZmlndXJhdGlvbj8udGFiVmlzaWJpbGl0eSFcIlxuICAgICAgW3NlbGVjdGlvbkxpbWl0XT1cIlN0YXJ0Q29udmVyc2F0aW9uQ29uZmlndXJhdGlvbj8uc2VsZWN0aW9uTGltaXQhXCJcbiAgICAgIFt0YWJzXT1cIlN0YXJ0Q29udmVyc2F0aW9uQ29uZmlndXJhdGlvbj8udGFicyFcIlxuICAgICAgW2hpZGVTdWJtaXRCdXR0b25dPVwiU3RhcnRDb252ZXJzYXRpb25Db25maWd1cmF0aW9uPy5oaWRlU3VibWl0QnV0dG9uIVwiPjwvY29tZXRjaGF0LWNvbnRhY3RzPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNjLWRlY29yYXRvcl9fbWVzc2FnZS0tZW1wdHlcIlxuICAgICpuZ0lmPVwiIXVzZXIgJiYgIWdyb3VwICYmICFzaG93U3RhcnRDb252ZXJzYXRpb25cIlxuICAgIFtuZ1N0eWxlXT1cImVtcHR5TWVzc2FnZVN0eWxlKClcIj5cbiAgICA8Y29tZXRjaGF0LWxhYmVsIFt0ZXh0XT1cIm1lc3NhZ2VUZXh0XCJcbiAgICAgIFtsYWJlbFN0eWxlXT1cImxhYmVsU3R5bGVcIj48L2NvbWV0Y2hhdC1sYWJlbD5cbiAgPC9kaXY+XG4gIDxuZy10ZW1wbGF0ZSAjc3RhcnRDb252ZXJzYXRpb25CdXR0b24+XG4gICAgPGNvbWV0Y2hhdC1idXR0b24gKm5nSWY9XCIhaGlkZVN0YXJ0TmV3Q29udmVyc2F0aW9uXCJcbiAgICAgIFtpY29uVVJMXT1cInN0YXJ0TmV3Q29udmVyc2F0aW9uSWNvblVSTFwiXG4gICAgICBbYnV0dG9uU3R5bGVdPVwic3RhcnRDb252ZXJzYXRpb25CdXR0b25TdHlsZVwiXG4gICAgICAoY2MtYnV0dG9uLWNsaWNrZWQpPVwidHJpZ2dlclN0YXJ0Q29udmVyc2F0aW9uKClcIj48L2NvbWV0Y2hhdC1idXR0b24+XG5cbiAgPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
413
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tZXRjaGF0LWNvbnZlcnNhdGlvbnMtd2l0aC1tZXNzYWdlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaGF0LXVpa2l0LWFuZ3VsYXIvc3JjL0NvbWV0Q2hhdENvbnZlcnNhdGlvbnNXaXRoTWVzc2FnZXMvY29tZXRjaGF0LWNvbnZlcnNhdGlvbnMtd2l0aC1tZXNzYWdlcy9jb21ldGNoYXQtY29udmVyc2F0aW9ucy13aXRoLW1lc3NhZ2VzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NoYXQtdWlraXQtYW5ndWxhci9zcmMvQ29tZXRDaGF0Q29udmVyc2F0aW9uc1dpdGhNZXNzYWdlcy9jb21ldGNoYXQtY29udmVyc2F0aW9ucy13aXRoLW1lc3NhZ2VzL2NvbWV0Y2hhdC1jb252ZXJzYXRpb25zLXdpdGgtbWVzc2FnZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBcUIsS0FBSyxFQUFFLHVCQUF1QixFQUEyRCxNQUFNLGVBQWUsQ0FBQztBQUN0SixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLHFCQUFxQixFQUFFLDBCQUEwQixFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFDckksT0FBTyxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFtQixvQkFBb0IsRUFBRSx1QkFBdUIsRUFBNkksMkJBQTJCLEVBQXlDLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUE7QUFFblgsT0FBTywyQkFBMkIsQ0FBQTs7Ozs7OztBQUdsQzs7Ozs7Ozs7RUFRRTtBQU9GLE1BQU0sT0FBTywyQ0FBMkM7SUFrRHRELFlBQW9CLFVBQXNCLEVBQVUsR0FBc0IsRUFBVSxZQUFtQztRQUFuRyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQVUsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFBVSxpQkFBWSxHQUFaLFlBQVksQ0FBdUI7UUE5QzlHLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBQzlCLGdCQUFXLEdBQVcsUUFBUSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDcEQsbUNBQThCLEdBQXNCLEVBQUUsQ0FBQztRQUN2RCwwQkFBcUIsR0FBMEIsSUFBSSxxQkFBcUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM3RSw4QkFBeUIsR0FBK0IsSUFBSSwwQkFBMEIsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMzRixZQUFPLEdBQTJELENBQUMsS0FBbUMsRUFBRSxFQUFFO1lBQ2pILE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDcEIsQ0FBQyxDQUFBO1FBQ1EsZ0NBQTJCLEdBQVcscUJBQXFCLENBQUE7UUFDM0QsNkJBQXdCLEdBQVksS0FBSyxDQUFDO1FBQzFDLG1DQUE4QixHQUEwQixJQUFJLHFCQUFxQixDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQzlGLFVBQUssR0FBbUIsSUFBSSxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDL0M7O1dBRUc7UUFDSSwwQkFBcUIsR0FBWSxLQUFLLENBQUM7UUFHOUMsZUFBVSxHQUFRO1lBQ2hCLFVBQVUsRUFBRSxhQUFhO1lBQ3pCLFFBQVEsRUFBRSxnQkFBZ0I7WUFDMUIsU0FBUyxFQUFFLHdCQUF3QjtTQUNwQyxDQUFBO1FBRU0sZUFBVSxHQUFZLElBQUksQ0FBQztRQUNsQyxpQ0FBNEIsR0FBUSxFQUVuQyxDQUFBO1FBWUQsaUJBQVksR0FBUSxFQUVuQixDQUFBO1FBQ00sb0JBQWUsR0FBVyxxQkFBcUIsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBMEc5RSxXQUFNLEdBQUcsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7WUFDaEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUE7WUFDakIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQTtRQUNoQyxDQUFDLENBQUE7UUF3QkQscUJBQWdCLEdBQUcsQ0FBQyxJQUFxQixFQUFFLEtBQXVCLEVBQUUsRUFBRTtZQUNwRSxJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO1lBQ25DLElBQUksSUFBSSxFQUFFO2dCQUNSLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFBO2dCQUNqQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztnQkFDakIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQzthQUMxQjtZQUNELElBQUksS0FBSyxFQUFFO2dCQUNULElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFBO2dCQUNoQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztnQkFDbkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQzthQUMxQjtRQUNILENBQUMsQ0FBQTtRQUNNLGdCQUFXLEdBQXFELENBQUMsWUFBb0MsRUFBRSxFQUFFO1lBQzlHLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxZQUFZLENBQUE7WUFDdEMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQztZQUNuQyxJQUFJLFlBQVksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLFlBQVksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLHVCQUF1QixDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRTtnQkFDaEksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUE7Z0JBQ2pCLElBQUksQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDLG1CQUFtQixFQUFvQixDQUFDO2dCQUNqRSxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFBO2FBQ3pCO2lCQUNJLElBQUksWUFBWSxDQUFDLG1CQUFtQixFQUFFLElBQUksWUFBWSxDQUFDLG1CQUFtQixFQUFFLElBQUksdUJBQXVCLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFO2dCQUN0SSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQTtnQkFDaEIsSUFBSSxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUMsbUJBQW1CLEVBQXFCLENBQUE7Z0JBQ2xFLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUE7YUFDekI7UUFDSCxDQUFDLENBQUM7UUFtREYsMkJBQXNCLEdBQUcsR0FBRyxFQUFFO1lBQzVCLElBQUksSUFBSSxDQUFDLDhCQUE4QixDQUFDLE9BQU8sRUFBRTtnQkFDL0MsSUFBSSxDQUFDLDhCQUE4QixDQUFDLE9BQU8sRUFBRSxDQUFBO2FBQzlDO1lBQ0QsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQztRQUNyQyxDQUFDLENBQUE7UUEwSEQsc0JBQWlCLEdBQUcsR0FBRyxFQUFFO1lBQ3ZCLE9BQU87Z0JBQ0wsVUFBVSxFQUFFLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRTtnQkFDN0csTUFBTSxFQUFFLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxNQUFNO2dCQUNsRCxLQUFLLEVBQUUsUUFBUSxJQUFJLENBQUMsOEJBQThCLENBQUMsS0FBSyxXQUFXO2dCQUNuRSxNQUFNLEVBQUUsTUFBTTtnQkFDZCxZQUFZLEVBQUUsSUFBSSxDQUFDLDhCQUE4QixDQUFDLFlBQVk7YUFDL0QsQ0FBQTtRQUNILENBQUMsQ0FBQTtRQUNELHVCQUFrQixHQUFHLEdBQUcsRUFBRTtZQUN4QixPQUFPO2dCQUNMLE1BQU0sRUFBRSxJQUFJLENBQUMsOEJBQThCLENBQUMsTUFBTTtnQkFDbEQsS0FBSyxFQUFFLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxLQUFLO2dCQUNoRCxNQUFNLEVBQUUsSUFBSSxDQUFDLDhCQUE4QixDQUFDLE1BQU07Z0JBQ2xELFlBQVksRUFBRSxJQUFJLENBQUMsOEJBQThCLENBQUMsWUFBWTtnQkFDOUQsVUFBVSxFQUFFLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRTtnQkFDN0csUUFBUSxFQUFFLFVBQVU7YUFDckIsQ0FBQTtRQUNILENBQUMsQ0FBQTtRQUNELDBCQUFxQixHQUFHLEdBQUcsRUFBRTtZQUMzQixPQUFPO2dCQUNMLFVBQVUsRUFBRSxJQUFJLENBQUMsOEJBQThCLENBQUMsYUFBYSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFO2FBQzVILENBQUE7UUFDSCxDQUFDLENBQUE7SUFwV0QsQ0FBQztJQUNELFdBQVcsQ0FBQyxPQUFzQjtRQUVoQyxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRTtZQUMzQixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ3JCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQywwQkFBMEIsQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO2dCQUM3RSxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUU7b0JBQ3pFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQTtpQkFDL0U7Z0JBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQyx1QkFBdUIsQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFO29CQUNwRyxJQUFJLENBQUMscUJBQXFCLENBQUMsb0JBQW9CLENBQUMsdUJBQXVCLENBQUMsZUFBZSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUE7aUJBQzFHO2dCQUNELElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsb0JBQW9CLENBQUMsMEJBQTBCLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFO29CQUMxRyxJQUFJLENBQUMscUJBQXFCLENBQUMsb0JBQW9CLENBQUMsMEJBQTBCLENBQUMsa0JBQWtCLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQTtpQkFDaEg7Z0JBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQywwQkFBMEIsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUU7b0JBQzFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQywwQkFBMEIsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFBO2lCQUNoSDtnQkFDRCxJQUFJLENBQUMscUJBQXFCLENBQUMsMEJBQTBCLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQywwQkFBMEIsRUFBRSxDQUFBO2dCQUNwSCxJQUFJLENBQUMsOEJBQThCLENBQUMsYUFBYSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7Z0JBQ3BFLElBQUksQ0FBQyw4QkFBOEIsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUE7Z0JBRWhGLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUE7YUFDL0Q7aUJBQ0ksSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyx3QkFBd0IsQ0FBQywrQkFBK0IsQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFBO2dCQUM1SCxJQUFJLENBQUMscUJBQXFCLENBQUMsd0JBQXdCLENBQUMsK0JBQStCLENBQUMsdUJBQXVCLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQTtnQkFDM0gsSUFBSSxDQUFDLHFCQUFxQixDQUFDLDBCQUEwQixDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7Z0JBQzVFLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsb0JBQW9CLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRTtvQkFDekUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFBO2lCQUNqRjtnQkFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLG9CQUFvQixDQUFDLHVCQUF1QixDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUU7b0JBQ3BHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQyx1QkFBdUIsQ0FBQyxlQUFlLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQTtpQkFDNUc7Z0JBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQywwQkFBMEIsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUU7b0JBQzFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQywwQkFBMEIsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFBO2lCQUNsSDtnQkFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLG9CQUFvQixDQUFDLDBCQUEwQixDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRTtvQkFDMUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLG9CQUFvQixDQUFDLDBCQUEwQixDQUFDLGtCQUFrQixDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUE7aUJBQ2xIO2dCQUNELElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxhQUFhLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQztnQkFDdEUsSUFBSSxDQUFDLDhCQUE4QixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQTtnQkFDaEYsSUFBSSxDQUFDLHFCQUFxQixDQUFDLDBCQUEwQixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsMEJBQTBCLEVBQUUsQ0FBQTtnQkFDcEgsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQTthQUUvRDtZQUNELFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUE7WUFDN0IsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ1Q7UUFDRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDdkMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQ3RCO0lBQ0gsQ0FBQztJQUNELHdCQUF3QjtRQUN0QixJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO0lBQ3BDLENBQUM7SUFDRCx1QkFBdUIsQ0FBQyxRQUF3QixFQUFFLE9BQXlCO1FBQ3pFLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3JFLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxZQUFZLEVBQUUsWUFBWSxTQUFTLENBQUMsS0FBSyxDQUFDO1FBRXpFLElBQUksVUFBVSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsbUJBQW1CLEVBQUUsWUFBWSxTQUFTLENBQUMsS0FBSyxFQUFFO1lBQ3JILElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxtQkFBbUIsRUFBcUIsQ0FBQztZQUU3RSxJQUFJLGNBQWMsRUFBRTtnQkFDbEIsSUFBSSxhQUFhLEdBQUcsT0FBTyxDQUFDLFlBQVksRUFBcUIsQ0FBQztnQkFFOUQsSUFBSSxhQUFhLENBQUMsT0FBTyxFQUFFLEtBQUssS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFO29CQUMvQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO29CQUMvQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztvQkFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7b0JBQ2xCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7aUJBQzFCO2FBQ0Y7U0FDRjtJQUNILENBQUM7SUFDRCxvQkFBb0I7UUFDbEIsU0FBUyxDQUFDLGdCQUFnQixDQUN4QixJQUFJLENBQUMsZUFBZSxFQUNwQixJQUFJLFNBQVMsQ0FBQyxhQUFhLENBQUM7WUFDMUIsbUJBQW1CLEVBQUUsQ0FDbkIsT0FBWSxFQUNaLFVBQWUsRUFDZixRQUFhLEVBQ2IsVUFBZSxFQUNmLEVBQUU7Z0JBQ0YsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQTtZQUVuRCxDQUFDO1lBQ0QsbUJBQW1CLEVBQUUsQ0FDbkIsT0FBWSxFQUNaLFVBQWUsRUFDZixRQUFhLEVBQ2IsVUFBZSxFQUNmLEVBQUU7Z0JBQ0YsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQTtZQUVuRCxDQUFDO1NBQ0YsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBTUQsb0JBQW9CO1FBQ2xCLElBQUksWUFBWSxHQUFzQixJQUFJLGlCQUFpQixDQUFDO1lBQzFELEtBQUssRUFBRSxNQUFNO1lBQ2IsTUFBTSxFQUFFLE1BQU07WUFDZCxVQUFVLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRTtZQUMzRCxZQUFZLEVBQUUsTUFBTTtZQUNwQixNQUFNLEVBQUUsYUFBYSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLEVBQUU7WUFDckUsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRTtZQUNoRSxlQUFlLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7U0FDdkUsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLDhCQUE4QixHQUFHO1lBQ3BDLEdBQUcsWUFBWTtZQUNmLEdBQUcsSUFBSSxDQUFDLDhCQUE4QjtTQUN2QyxDQUFBO1FBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLDhCQUE4QixDQUFDLGVBQWUsQ0FBQTtRQUM5RSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsOEJBQThCLENBQUMsZ0JBQWdCLENBQUE7UUFDaEYsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGFBQWEsQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFBO1FBQzNHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLGtCQUFrQixDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUE7UUFDN0gsSUFBSSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLElBQUksSUFBSSxDQUFDLHlCQUF5QixFQUFFLGtCQUFrQixFQUFFLE1BQU0sSUFBSSxNQUFNLEVBQUU7WUFDdkksSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsOEJBQThCLENBQUMsTUFBTSxFQUFFLENBQUE7U0FFaEY7SUFDSCxDQUFDO0lBNEJELGVBQWU7UUFDYixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQTtJQUM3QixDQUFDO0lBQ0Qsb0JBQW9CO1FBQ2xCLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQztRQUMzRCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUM7UUFDekQsSUFBSSxTQUFTLEtBQUssQ0FBQyxJQUFJLFFBQVEsS0FBSyxDQUFDLEVBQUU7WUFDckMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUNuRSxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUN4QixRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztTQUN2QjtRQUNELElBQUksYUFBYSxHQUFHO1lBQ2xCLE1BQU0sRUFBRSxTQUFTLEdBQUcsSUFBSTtZQUN4QixLQUFLLEVBQUUsUUFBUSxHQUFHLElBQUk7WUFDdEIsVUFBVSxFQUFFLG9CQUFvQjtZQUNoQyxRQUFRLEVBQUUsT0FBTztTQUNsQixDQUFBO1FBQ0QsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQyw4QkFBOEIsQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ3ZJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQyw4QkFBOEIsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLEdBQUcsUUFBUSxHQUFHLElBQUksQ0FBQztZQUM5SCxJQUFJLENBQUMscUJBQXFCLENBQUMsd0JBQXdCLENBQUMsK0JBQStCLENBQUMsdUJBQXVCLENBQUMsTUFBTSxHQUFHLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDdEksSUFBSSxDQUFDLHFCQUFxQixDQUFDLHdCQUF3QixDQUFDLCtCQUErQixDQUFDLHVCQUF1QixDQUFDLEtBQUssR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDO1NBQ3JJO2FBQ0k7WUFDSCxJQUFJLENBQUMscUJBQXFCLENBQUMsb0JBQW9CLENBQUMsOEJBQThCLENBQUMsc0JBQXNCLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQztZQUN2SCxJQUFJLENBQUMscUJBQXFCLENBQUMsb0JBQW9CLENBQUMsOEJBQThCLENBQUMsc0JBQXNCLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQztTQUN2SDtRQUNELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyx3QkFBd0IsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLHdCQUF3QixDQUFDLGFBQWEsSUFBSSxhQUFhLENBQUM7UUFDdkosSUFBSSxDQUFDLHlCQUF5QixDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsYUFBYSxJQUFJLGFBQWEsQ0FBQztRQUM3RyxJQUFJLENBQUMscUJBQXFCLENBQUMsb0JBQW9CLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLElBQUksYUFBYSxDQUFDO1FBQy9JLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyw0QkFBNEIsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLDRCQUE0QixDQUFDLGFBQWEsSUFBSSxhQUFhLENBQUM7UUFDL0osSUFBSSxDQUFDLHFCQUFxQixDQUFDLG9CQUFvQixDQUFDLGFBQWEsR0FBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsb0JBQW9CLENBQUMsYUFBYSxJQUFJLGFBQWEsQ0FBQztRQUM5SSxJQUFJLENBQUMscUJBQXFCLENBQUMsb0JBQW9CLENBQUMseUJBQXlCLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQyx5QkFBeUIsQ0FBQyxhQUFhLElBQUksYUFBYSxDQUFDO1FBRW5NLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUE7SUFDMUIsQ0FBQztJQUNELGFBQWE7UUFDWCxJQUFJLElBQUksR0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQTtRQUNuSSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFBO1FBQzlCLElBQUksZ0JBQWdCLEdBQVcsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRyxDQUFBO1FBQzdFLFNBQVMsQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBb0MsRUFBRSxFQUFFO1lBQzlGLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxZQUFZLENBQUE7WUFDdEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQTtRQUMxQixDQUFDLENBQUM7YUFDQyxLQUFLLENBQUMsQ0FBQyxLQUFtQyxFQUFFLEVBQUU7WUFDN0MsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNoQixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO2FBQ3BCO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDO0lBT0QsUUFBUTtRQUNOLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtRQUNqRixJQUFJLENBQUMsOEJBQThCLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUE7UUFFbkYsSUFBSSxDQUFDLDRCQUE0QixHQUFHO1lBQ2xDLE1BQU0sRUFBRSxNQUFNO1lBQ2QsS0FBSyxFQUFFLE1BQU07WUFDYixNQUFNLEVBQUUsTUFBTTtZQUNkLFlBQVksRUFBRSxHQUFHO1lBQ2pCLFVBQVUsRUFBRSxhQUFhO1lBQ3pCLGNBQWMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFO1NBQzdELENBQUE7UUFDRCxJQUFJLENBQUMsOEJBQThCLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxDQUFBO1FBQ2hGLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFBO1FBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsMEJBQTBCLENBQUMsTUFBTSxFQUFFO1lBQ2pFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQywwQkFBMEIsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQTtTQUMzRTtRQUNELFNBQVMsQ0FBQyxlQUFlLEVBQUU7YUFDeEIsSUFBSSxDQUFDLENBQUMsSUFBMkIsRUFBRSxFQUFFO1lBQ3BDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBRTNCLENBQUMsQ0FBQzthQUNELEtBQUssQ0FBQyxDQUFDLEtBQW1DLEVBQUUsRUFBRTtZQUM3QyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ2hCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7YUFDcEI7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUVQLENBQUM7SUFDRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDM0IsU0FBUyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBQ0QsNkJBQTZCO0lBQzdCLGlCQUFpQjtRQUNmLElBQUksQ0FBQyxxQkFBcUIsR0FBRywyQkFBMkIsQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxZQUFvQyxFQUFFLEVBQUU7WUFDaEksSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxDQUFBLENBQUMsb0ZBQW9GO1FBQzlILENBQUMsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLGNBQWMsR0FBRyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBc0IsRUFBRSxFQUFFO1lBQzdGLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDekQsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7Z0JBQ2xCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUE7YUFDekI7UUFDSCxDQUFDLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxvQkFBb0IsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUF1QixFQUFFLEVBQUU7WUFDdEcsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksSUFBSSxFQUFFLFdBQVksQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDdEUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsV0FBVyxDQUFDO2dCQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFBO2FBQ3pCO1FBQ0gsQ0FBQyxDQUFDLENBQUE7UUFDRixJQUFJLENBQUMsbUJBQW1CLEdBQUcsb0JBQW9CLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBOEIsRUFBRSxFQUFFO1lBQy9HLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLElBQUksRUFBRSxVQUFXLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ3JFLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLFVBQVUsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQTthQUN6QjtRQUNILENBQUMsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLG1CQUFtQixHQUFHLG9CQUFvQixDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQXdCLEVBQUUsRUFBRTtZQUN6RyxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxJQUFJLEVBQUUsV0FBWSxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUN0RSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxXQUFXLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUE7YUFDekI7UUFDSCxDQUFDLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxvQkFBb0IsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUE4QixFQUFFLEVBQUU7WUFDL0csSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksSUFBSSxFQUFFLFVBQVcsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDckUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEVBQUUsVUFBVSxDQUFDO2dCQUM5QixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFBO2FBQ3pCO1FBQ0gsQ0FBQyxDQUFDLENBQUE7UUFDRixJQUFJLENBQUMsa0JBQWtCLEdBQUcsb0JBQW9CLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBdUIsRUFBRSxFQUFFO1lBQ3RHLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLElBQUksRUFBRSxLQUFNLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ2hFLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLEtBQUssQ0FBQztnQkFDekIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtnQkFDeEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQzthQUMxQjtRQUNILENBQUMsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLFdBQVcsR0FBRyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBZ0IsRUFBRSxFQUFFO1lBQ2pGLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLElBQUksRUFBRSxTQUFVLENBQUMsT0FBTyxFQUFFLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsSUFBSSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFO2dCQUMvSCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztnQkFDbEIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztnQkFDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQTthQUN6QjtRQUNILENBQUMsQ0FBQyxDQUFBO1FBQ0YsNENBQTRDO1FBQzVDLElBQUksQ0FBQyxVQUFVLEdBQUcsaUJBQWlCLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ2hFLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQzVDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQTtRQUN0QixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFDRCxvQ0FBb0M7SUFDcEMsbUJBQW1CO1FBQ2pCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUMxQyxJQUFJLENBQUMsY0FBYyxFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDeEMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUN4QyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFDRDs7O09BR0c7SUFDSCxvQkFBb0IsQ0FBQyxZQUFvQztRQUN2RCxNQUFNLGdCQUFnQixHQUFHLFlBQVksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzVELE1BQU0sZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDNUQsSUFBSSxnQkFBZ0IsS0FBSyx1QkFBdUIsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFNLGdCQUFtQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQzlKLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDMUI7YUFBTSxJQUFJLGdCQUFnQixLQUFLLHVCQUF1QixDQUFDLG1CQUFtQixDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQU0sZ0JBQW9DLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDM0ssSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDbEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUMxQjthQUFNO1lBQ0wsT0FBTztTQUNSO0lBQ0gsQ0FBQzs7eUlBL1hVLDJDQUEyQzs2SEFBM0MsMkNBQTJDLHdqQkN2QnhELHF2TUFvR0E7NEZEN0VhLDJDQUEyQztrQkFOdkQsU0FBUzsrQkFDRSx1Q0FBdUMsbUJBR2hDLHVCQUF1QixDQUFDLE1BQU07cUtBSXRDLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLDhCQUE4QjtzQkFBdEMsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0cseUJBQXlCO3NCQUFqQyxLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFHRywyQkFBMkI7c0JBQW5DLEtBQUs7Z0JBQ0csd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUNHLDhCQUE4QjtzQkFBdEMsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQsIElucHV0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBDaGFuZ2VEZXRlY3RvclJlZiwgRWxlbWVudFJlZiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBDb21ldENoYXQgfSBmcm9tIFwiQGNvbWV0Y2hhdC9jaGF0LXNkay1qYXZhc2NyaXB0XCI7XG5pbXBvcnQgeyBXaXRoTWVzc2FnZXNTdHlsZSwgTWVzc2FnZXNDb25maWd1cmF0aW9uLCBDb252ZXJzYXRpb25zQ29uZmlndXJhdGlvbiwgQ29udGFjdHNDb25maWd1cmF0aW9uIH0gZnJvbSAnQGNvbWV0Y2hhdC91aWtpdC1zaGFyZWQnXG5pbXBvcnQgeyBDb21ldENoYXRUaGVtZSwgZm9udEhlbHBlciwgbG9jYWxpemUsIENvbWV0Q2hhdE9wdGlvbiwgQ29tZXRDaGF0R3JvdXBFdmVudHMsIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLCBJR3JvdXBMZWZ0LCBJR3JvdXBNZW1iZXJBZGRlZCwgSUdyb3VwTWVtYmVyS2lja2VkQmFubmVkLCBJR3JvdXBNZW1iZXJTY29wZUNoYW5nZWQsIElNZXNzYWdlcywgQ29tZXRDaGF0VXNlckV2ZW50cywgQ29tZXRDaGF0TWVzc2FnZUV2ZW50cywgQ29tZXRDaGF0Q29udmVyc2F0aW9uRXZlbnRzLCBJR3JvdXBNZW1iZXJKb2luZWQsIElPd25lcnNoaXBDaGFuZ2VkLCBDb21ldENoYXRVSUV2ZW50cyB9IGZyb20gJ0Bjb21ldGNoYXQvdWlraXQtcmVzb3VyY2VzJ1xuXG5pbXBvcnQgJ0Bjb21ldGNoYXQvdWlraXQtZWxlbWVudHMnXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgQ29tZXRDaGF0VGhlbWVTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL0NvbWV0Q2hhdFRoZW1lLnNlcnZpY2VcIjtcbi8qKlxuKlxuKiBDb21ldENoYXRDb252ZXJzYXRpb25zV2l0aE1lc3NhZ2VzQ29tcG9uZW50IGlzIGEgd3JhcHBlciBjb21wb25lbnQgZm9yIENvbWV0Q2hhdE1lc3NhZ2VzQ29tcG9uZW50IGFuZCBDb21ldENoYXRDb252ZXJzYXRpb25zIGNvbXBvbmVudCB0byBzaG93IGNoYXRzIGFuZCBtZXNzYWdlcyBpbiBvbmUgc2NyZWVuXG4qXG4qIEB2ZXJzaW9uIDEuMC4wXG4qIEBhdXRob3IgQ29tZXRDaGF0VGVhbVxuKiBAY29weXJpZ2h0IMKpIDIwMjIgQ29tZXRDaGF0IEluYy5cbipcbiovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiY29tZXRjaGF0LWNvbnZlcnNhdGlvbnMtd2l0aC1tZXNzYWdlc1wiLFxuICB0ZW1wbGF0ZVVybDogXCIuL2NvbWV0Y2hhdC1jb252ZXJzYXRpb25zLXdpdGgtbWVzc2FnZXMuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL2NvbWV0Y2hhdC1jb252ZXJzYXRpb25zLXdpdGgtbWVzc2FnZXMuY29tcG9uZW50LnNjc3NcIl0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBDb21ldENoYXRDb252ZXJzYXRpb25zV2l0aE1lc3NhZ2VzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICAvLyB0YWtpbmcgcmVmZXJlbmNlIG9mIGNvbnZlcnNhdGlvbkNvbXBvbmVudCBhbmQgTWVzc2FnZXNDb21wb25lbnRcbiAgQElucHV0KCkgdXNlciE6IENvbWV0Q2hhdC5Vc2VyIHwgbnVsbDtcbiAgQElucHV0KCkgZ3JvdXAhOiBDb21ldENoYXQuR3JvdXAgfCBudWxsO1xuICBASW5wdXQoKSBpc01vYmlsZVZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgbWVzc2FnZVRleHQ6IHN0cmluZyA9IGxvY2FsaXplKFwiTk9fQ0hBVFNfU0VMRUNURURcIik7XG4gIEBJbnB1dCgpIGNvbnZlcnNhdGlvbnNXaXRoTWVzc2FnZXNTdHlsZTogV2l0aE1lc3NhZ2VzU3R5bGUgPSB7fTtcbiAgQElucHV0KCkgbWVzc2FnZXNDb25maWd1cmF0aW9uOiBNZXNzYWdlc0NvbmZpZ3VyYXRpb24gPSBuZXcgTWVzc2FnZXNDb25maWd1cmF0aW9uKHt9KTtcbiAgQElucHV0KCkgY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbjogQ29udmVyc2F0aW9uc0NvbmZpZ3VyYXRpb24gPSBuZXcgQ29udmVyc2F0aW9uc0NvbmZpZ3VyYXRpb24oe30pO1xuICBASW5wdXQoKSBvbkVycm9yOiAoKGVycm9yOiBDb21ldENoYXQuQ29tZXRDaGF0RXhjZXB0aW9uKSA9PiB2b2lkKSB8IG51bGwgPSAoZXJyb3I6IENvbWV0Q2hhdC5Db21ldENoYXRFeGNlcHRpb24pID0+IHtcbiAgICBjb25zb2xlLmxvZyhlcnJvcilcbiAgfVxuICBASW5wdXQoKSBzdGFydE5ld0NvbnZlcnNhdGlvbkljb25VUkw6IHN0cmluZyA9IFwiYXNzZXRzL25ldy1jaGF0LnN2Z1wiXG4gIEBJbnB1dCgpIGhpZGVTdGFydE5ld0NvbnZlcnNhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBTdGFydENvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb246IENvbnRhY3RzQ29uZmlndXJhdGlvbiA9IG5ldyBDb250YWN0c0NvbmZpZ3VyYXRpb24oe30pXG4gIHRoZW1lOiBDb21ldENoYXRUaGVtZSA9IG5ldyBDb21ldENoYXRUaGVtZSh7fSk7XG4gIC8qKlxuICAgKiBQcm9wZXJ0aWVzIGZvciBpbnRlcm5hbCB1c2VcbiAgICovXG4gIHB1YmxpYyBzaG93U3RhcnRDb252ZXJzYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGxvZ2dlZEluVXNlciE6IENvbWV0Q2hhdC5Vc2VyIHwgbnVsbDtcbiAgcHVibGljIGFjdGl2ZUNvbnZlcnNhdGlvbiE6IENvbWV0Q2hhdC5Db252ZXJzYXRpb24gfCBudWxsO1xuICBsYWJlbFN0eWxlOiBhbnkgPSB7XG4gICAgYmFja2dyb3VuZDogXCJ0cmFuc3BhcmVudFwiLFxuICAgIHRleHRGb250OiBcIjcwMCAyMnB4IEludGVyXCIsXG4gICAgdGV4dENvbG9yOiBcInJnYmEoMjAsIDIwLCAyMCwgMC4zMylcIlxuICB9XG5cbiAgcHVibGljIGhpZGVTZWFyY2g6IGJvb2xlYW4gPSB0cnVlO1xuICBzdGFydENvbnZlcnNhdGlvbkJ1dHRvblN0eWxlOiBhbnkgPSB7XG5cbiAgfVxuICAvKipcbiAgKiBFdmVudHNcbiAgKi9cbiAgY2NHcm91cE1lbWJlckFkZGVkITogU3Vic2NyaXB0aW9uO1xuICBjY0dyb3VwTGVmdCE6IFN1YnNjcmlwdGlvbjtcbiAgY2NPcGVuQ2hhdCE6IFN1YnNjcmlwdGlvbjtcbiAgY2NHcm91cE1lbWJlckpvaW5lZCE6IFN1YnNjcmlwdGlvbjtcbiAgY2NHcm91cE1lbWJlcktpY2tlZCE6IFN1YnNjcmlwdGlvbjtcbiAgY2NHcm91cE1lbWJlckJhbm5lZCE6IFN1YnNjcmlwdGlvbjtcbiAgY2NPd25lcnNoaXBDaGFuZ2VkITogU3Vic2NyaXB0aW9uO1xuICBjY0dyb3VwRGVsZXRlZCE6IFN1YnNjcmlwdGlvbjtcbiAgc2lkZUJhclN0eWxlOiBhbnkgPSB7XG5cbiAgfVxuICBwdWJsaWMgZ3JvdXBMaXN0ZW5lcklkOiBzdHJpbmcgPSBcIndpdGhtZXNzYWdlc19ncm91cF9cIiArIG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuXG4gIHB1YmxpYyBjY0NvbnZlcnNhdGlvbkRlbGV0ZWQhOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLCBwcml2YXRlIHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgdGhlbWVTZXJ2aWNlOiBDb21ldENoYXRUaGVtZVNlcnZpY2UpIHtcbiAgfVxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG5cbiAgICBpZiAoY2hhbmdlc1tcImlzTW9iaWxlVmlld1wiXSkge1xuICAgICAgaWYgKHRoaXMuaXNNb2JpbGVWaWV3KSB7XG4gICAgICAgIHRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uLmhpZGVCYWNrQnV0dG9uID0gZmFsc2U7XG4gICAgICAgIGlmICghdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24uZGV0YWlsc0NvbmZpZ3VyYXRpb24uZGV0YWlsc1N0eWxlLnBhZGRpbmcpIHtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5kZXRhaWxzQ29uZmlndXJhdGlvbi5kZXRhaWxzU3R5bGUucGFkZGluZyA9IFwiMCA4cHhcIlxuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24uZGV0YWlsc0NvbmZpZ3VyYXRpb24uYWRkTWVtYmVyc0NvbmZpZ3VyYXRpb24uYWRkTWVtYmVyc1N0eWxlLnBhZGRpbmcpIHtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5kZXRhaWxzQ29uZmlndXJhdGlvbi5hZGRNZW1iZXJzQ29uZmlndXJhdGlvbi5hZGRNZW1iZXJzU3R5bGUucGFkZGluZyA9IFwiMCA4cHhcIlxuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24uZGV0YWlsc0NvbmZpZ3VyYXRpb24uYmFubmVkTWVtYmVyc0NvbmZpZ3VyYXRpb24uYmFubmVkTWVtYmVyc1N0eWxlLnBhZGRpbmcpIHtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5kZXRhaWxzQ29uZmlndXJhdGlvbi5iYW5uZWRNZW1iZXJzQ29uZmlndXJhdGlvbi5iYW5uZWRNZW1iZXJzU3R5bGUucGFkZGluZyA9IFwiMCA4cHhcIlxuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24uZGV0YWlsc0NvbmZpZ3VyYXRpb24uYmFubmVkTWVtYmVyc0NvbmZpZ3VyYXRpb24uYmFubmVkTWVtYmVyc1N0eWxlLnBhZGRpbmcpIHtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5kZXRhaWxzQ29uZmlndXJhdGlvbi5iYW5uZWRNZW1iZXJzQ29uZmlndXJhdGlvbi5iYW5uZWRNZW1iZXJzU3R5bGUucGFkZGluZyA9IFwiMCA4cHhcIlxuICAgICAgICB9XG4gICAgICAgIHRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uID0geyAuLi50aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5tZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbiB9XG4gICAgICAgIHRoaXMuU3RhcnRDb252ZXJzYXRpb25Db25maWd1cmF0aW9uLmNvbnRhY3RzU3R5bGUucGFkZGluZyA9IFwiMCA4cHhcIjtcbiAgICAgICAgdGhpcy5TdGFydENvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24gPSB7IC4uLnRoaXMuU3RhcnRDb252ZXJzYXRpb25Db25maWd1cmF0aW9uIH1cblxuICAgICAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbiA9IHsgLi4udGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24gfVxuICAgICAgfVxuICAgICAgZWxzZSBpZiAoIXRoaXMuaXNNb2JpbGVWaWV3KSB7XG4gICAgICAgIHRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5tZXNzYWdlSW5mb3JtYXRpb25Db25maWd1cmF0aW9uLm1lc3NhZ2VJbmZvcm1hdGlvblN0eWxlLmhlaWdodCA9IFwiNTAwcHhcIlxuICAgICAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5tZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24ubWVzc2FnZUluZm9ybWF0aW9uQ29uZmlndXJhdGlvbi5tZXNzYWdlSW5mb3JtYXRpb25TdHlsZS53aWR0aCA9IFwiNTAwcHhcIlxuICAgICAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5tZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5oaWRlQmFja0J1dHRvbiA9IHRydWU7XG4gICAgICAgIGlmICghdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24uZGV0YWlsc0NvbmZpZ3VyYXRpb24uZGV0YWlsc1N0eWxlLnBhZGRpbmcpIHtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5kZXRhaWxzQ29uZmlndXJhdGlvbi5kZXRhaWxzU3R5bGUucGFkZGluZyA9IFwiMCAxMDBweFwiXG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5kZXRhaWxzQ29uZmlndXJhdGlvbi5hZGRNZW1iZXJzQ29uZmlndXJhdGlvbi5hZGRNZW1iZXJzU3R5bGUucGFkZGluZykge1xuICAgICAgICAgIHRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLmRldGFpbHNDb25maWd1cmF0aW9uLmFkZE1lbWJlcnNDb25maWd1cmF0aW9uLmFkZE1lbWJlcnNTdHlsZS5wYWRkaW5nID0gXCIwIDEwMHB4XCJcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLmRldGFpbHNDb25maWd1cmF0aW9uLmJhbm5lZE1lbWJlcnNDb25maWd1cmF0aW9uLmJhbm5lZE1lbWJlcnNTdHlsZS5wYWRkaW5nKSB7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24uZGV0YWlsc0NvbmZpZ3VyYXRpb24uYmFubmVkTWVtYmVyc0NvbmZpZ3VyYXRpb24uYmFubmVkTWVtYmVyc1N0eWxlLnBhZGRpbmcgPSBcIjAgMTAwcHhcIlxuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24uZGV0YWlsc0NvbmZpZ3VyYXRpb24uYmFubmVkTWVtYmVyc0NvbmZpZ3VyYXRpb24uYmFubmVkTWVtYmVyc1N0eWxlLnBhZGRpbmcpIHtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5kZXRhaWxzQ29uZmlndXJhdGlvbi5iYW5uZWRNZW1iZXJzQ29uZmlndXJhdGlvbi5iYW5uZWRNZW1iZXJzU3R5bGUucGFkZGluZyA9IFwiMCAxMDBweFwiXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5TdGFydENvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24uY29udGFjdHNTdHlsZS5wYWRkaW5nID0gXCIwIDEwMHB4XCI7XG4gICAgICAgIHRoaXMuU3RhcnRDb252ZXJzYXRpb25Db25maWd1cmF0aW9uID0geyAuLi50aGlzLlN0YXJ0Q29udmVyc2F0aW9uQ29uZmlndXJhdGlvbiB9XG4gICAgICAgIHRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLm1lc3NhZ2VIZWFkZXJDb25maWd1cmF0aW9uID0geyAuLi50aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5tZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbiB9XG4gICAgICAgIHRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uID0geyAuLi50aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbiB9XG5cbiAgICAgIH1cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZUJhY2tkcm9wSGVpZ2h0KClcbiAgICAgIH0sIDEwMCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzW1widXNlclwiXSB8fCBjaGFuZ2VzW1wiZ3JvdXBcIl0pIHtcbiAgICAgIHRoaXMuc2V0QWN0aXZlQ2hhdCgpO1xuICAgIH1cbiAgfVxuICB0cmlnZ2VyU3RhcnRDb252ZXJzYXRpb24oKSB7XG4gICAgdGhpcy5zaG93U3RhcnRDb252ZXJzYXRpb24gPSB0cnVlO1xuICB9XG4gIHJlbW92ZUNoYXRPbkdyb3VwQWN0aW9uKGxlZnRVc2VyOiBDb21ldENoYXQuVXNlciwgbWVzc2FnZTogQ29tZXRDaGF0LkFjdGlvbikge1xuICAgIGNvbnN0IGlzU2FtZVVzZXIgPSB0aGlzLmxvZ2dlZEluVXNlcj8uZ2V0VWlkKCkgPT09IGxlZnRVc2VyLmdldFVpZCgpO1xuICAgIGNvbnN0IGFjdGlvbkZvckdyb3VwID0gbWVzc2FnZS5nZXRBY3Rpb25Gb3IoKSBpbnN0YW5jZW9mIENvbWV0Q2hhdC5Hcm91cDtcblxuICAgIGlmIChpc1NhbWVVc2VyICYmIHRoaXMuYWN0aXZlQ29udmVyc2F0aW9uICYmIHRoaXMuYWN0aXZlQ29udmVyc2F0aW9uLmdldENvbnZlcnNhdGlvbldpdGgoKSBpbnN0YW5jZW9mIENvbWV0Q2hhdC5Hcm91cCkge1xuICAgICAgbGV0IGdyb3VwID0gdGhpcy5hY3RpdmVDb252ZXJzYXRpb24uZ2V0Q29udmVyc2F0aW9uV2l0aCgpIGFzIENvbWV0Q2hhdC5Hcm91cDtcblxuICAgICAgaWYgKGFjdGlvbkZvckdyb3VwKSB7XG4gICAgICAgIGxldCBhY3Rpb25Pbkdyb3VwID0gbWVzc2FnZS5nZXRBY3Rpb25Gb3IoKSBhcyBDb21ldENoYXQuR3JvdXA7XG5cbiAgICAgICAgaWYgKGFjdGlvbk9uR3JvdXAuZ2V0R3VpZCgpID09PSBncm91cC5nZXRHdWlkKCkpIHtcbiAgICAgICAgICB0aGlzLmFjdGl2ZUNvbnZlcnNhdGlvbiA9IG51bGw7XG4gICAgICAgICAgdGhpcy51c2VyID0gbnVsbDtcbiAgICAgICAgICB0aGlzLmdyb3VwID0gbnVsbDtcbiAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgYXR0YWNoR3JvdXBMaXN0ZW5lcnMoKSB7XG4gICAgQ29tZXRDaGF0LmFkZEdyb3VwTGlzdGVuZXIoXG4gICAgICB0aGlzLmdyb3VwTGlzdGVuZXJJZCxcbiAgICAgIG5ldyBDb21ldENoYXQuR3JvdXBMaXN0ZW5lcih7XG4gICAgICAgIG9uR3JvdXBNZW1iZXJLaWNrZWQ6IChcbiAgICAgICAgICBtZXNzYWdlOiBhbnksXG4gICAgICAgICAga2lja2VkVXNlcjogYW55LFxuICAgICAgICAgIGtpY2tlZEJ5OiBhbnksXG4gICAgICAgICAga2lja2VkRnJvbTogYW55XG4gICAgICAgICkgPT4ge1xuICAgICAgICAgIHRoaXMucmVtb3ZlQ2hhdE9uR3JvdXBBY3Rpb24oa2lja2VkVXNlciwgbWVzc2FnZSlcblxuICAgICAgICB9LFxuICAgICAgICBvbkdyb3VwTWVtYmVyQmFubmVkOiAoXG4gICAgICAgICAgbWVzc2FnZTogYW55LFxuICAgICAgICAgIGJhbm5lZFVzZXI6IGFueSxcbiAgICAgICAgICBiYW5uZWRCeTogYW55LFxuICAgICAgICAgIGJhbm5lZEZyb206IGFueVxuICAgICAgICApID0+IHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUNoYXRPbkdyb3VwQWN0aW9uKGJhbm5lZFVzZXIsIG1lc3NhZ2UpXG5cbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuICBvbkJhY2sgPSAoKSA9PiB7XG4gICAgdGhpcy51c2VyID0gbnVsbFxuICAgIHRoaXMuZ3JvdXAgPSBudWxsXG4gICAgdGhpcy5hY3RpdmVDb252ZXJzYXRpb24gPSBudWxsXG4gIH1cbiAgc2V0V2l0aE1lc3NhZ2VzU3R5bGUoKSB7XG4gICAgbGV0IGRlZmF1bHRTdHlsZTogV2l0aE1lc3NhZ2VzU3R5bGUgPSBuZXcgV2l0aE1lc3NhZ2VzU3R5bGUoe1xuICAgICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgICAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgICAgIGJhY2tncm91bmQ6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QmFja2dyb3VuZCgpLFxuICAgICAgYm9yZGVyUmFkaXVzOiBcIm5vbmVcIixcbiAgICAgIGJvcmRlcjogYDFweCBzb2xpZCAke3RoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50MjAwKCl9YCxcbiAgICAgIG1lc3NhZ2VUZXh0Q29sb3I6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCksXG4gICAgICBtZXNzYWdlVGV4dEZvbnQ6IGZvbnRIZWxwZXIodGhpcy50aGVtZVNlcnZpY2UudGhlbWUudHlwb2dyYXBoeS50aXRsZTEpLFxuICAgIH0pXG4gICAgdGhpcy5jb252ZXJzYXRpb25zV2l0aE1lc3NhZ2VzU3R5bGUgPSB7XG4gICAgICAuLi5kZWZhdWx0U3R5bGUsXG4gICAgICAuLi50aGlzLmNvbnZlcnNhdGlvbnNXaXRoTWVzc2FnZXNTdHlsZVxuICAgIH1cbiAgICB0aGlzLmxhYmVsU3R5bGUudGV4dEZvbnQgPSB0aGlzLmNvbnZlcnNhdGlvbnNXaXRoTWVzc2FnZXNTdHlsZS5tZXNzYWdlVGV4dEZvbnRcbiAgICB0aGlzLmxhYmVsU3R5bGUudGV4dENvbG9yID0gdGhpcy5jb252ZXJzYXRpb25zV2l0aE1lc3NhZ2VzU3R5bGUubWVzc2FnZVRleHRDb2xvclxuICAgIHRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLm1lc3NhZ2VzU3R5bGUuYm9yZGVyID0gdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24ubWVzc2FnZXNTdHlsZS5ib3JkZXIgPz8gXCJub25lXCJcbiAgICB0aGlzLmNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24uY29udmVyc2F0aW9uc1N0eWxlLmJvcmRlciA9IHRoaXMuY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5jb252ZXJzYXRpb25zU3R5bGUuYm9yZGVyID8/IFwibm9uZVwiXG4gICAgaWYgKCF0aGlzLmNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24/LmNvbnZlcnNhdGlvbnNTdHlsZT8uYm9yZGVyIHx8IHRoaXMuY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbj8uY29udmVyc2F0aW9uc1N0eWxlPy5ib3JkZXIgPT0gXCJub25lXCIpIHtcbiAgICAgIHRoaXMuc2lkZUJhclN0eWxlID0geyBib3JkZXJSaWdodDogdGhpcy5jb252ZXJzYXRpb25zV2l0aE1lc3NhZ2VzU3R5bGUuYm9yZGVyIH1cblxuICAgIH1cbiAgfVxuICBvbkNvbnRhY3RDbGlja2VkID0gKHVzZXI/OiBDb21ldENoYXQuVXNlciwgZ3JvdXA/OiBDb21ldENoYXQuR3JvdXApID0+IHtcbiAgICB0aGlzLnNob3dTdGFydENvbnZlcnNhdGlvbiA9IGZhbHNlO1xuICAgIGlmICh1c2VyKSB7XG4gICAgICB0aGlzLmdyb3VwID0gbnVsbFxuICAgICAgdGhpcy51c2VyID0gdXNlcjtcbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gICAgaWYgKGdyb3VwKSB7XG4gICAgICB0aGlzLnVzZXIgPSBudWxsXG4gICAgICB0aGlzLmdyb3VwID0gZ3JvdXA7XG4gICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBvbkl0ZW1DbGljazogKChjb252ZXJzYXRpb246IENvbWV0Q2hhdC5Db252ZXJzYXRpb24pID0+IHZvaWQpID0gKGNvbnZlcnNhdGlvbjogQ29tZXRDaGF0LkNvbnZlcnNhdGlvbikgPT4ge1xuICAgIHRoaXMuYWN0aXZlQ29udmVyc2F0aW9uID0gY29udmVyc2F0aW9uXG4gICAgdGhpcy5zaG93U3RhcnRDb252ZXJzYXRpb24gPSBmYWxzZTtcbiAgICBpZiAoY29udmVyc2F0aW9uLmdldENvbnZlcnNhdGlvblR5cGUoKSAmJiBjb252ZXJzYXRpb24uZ2V0Q29udmVyc2F0aW9uVHlwZSgpID09IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VSZWNlaXZlclR5cGUudXNlcikge1xuICAgICAgdGhpcy5ncm91cCA9IG51bGxcbiAgICAgIHRoaXMudXNlciA9IGNvbnZlcnNhdGlvbi5nZXRDb252ZXJzYXRpb25XaXRoKCkgYXMgQ29tZXRDaGF0LlVzZXI7XG4gICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgICB9XG4gICAgZWxzZSBpZiAoY29udmVyc2F0aW9uLmdldENvbnZlcnNhdGlvblR5cGUoKSAmJiBjb252ZXJzYXRpb24uZ2V0Q29udmVyc2F0aW9uVHlwZSgpID09IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VSZWNlaXZlclR5cGUuZ3JvdXApIHtcbiAgICAgIHRoaXMudXNlciA9IG51bGxcbiAgICAgIHRoaXMuZ3JvdXAgPSBjb252ZXJzYXRpb24uZ2V0Q29udmVyc2F0aW9uV2l0aCgpIGFzIENvbWV0Q2hhdC5Hcm91cFxuICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgfVxuICB9O1xuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy51cGRhdGVCYWNrZHJvcEhlaWdodCgpXG4gIH1cbiAgdXBkYXRlQmFja2Ryb3BIZWlnaHQoKSB7XG4gICAgbGV0IGRpdkhlaWdodCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICBsZXQgZGl2V2lkdGggPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICBpZiAoZGl2SGVpZ2h0ID09PSAwIHx8IGRpdldpZHRoID09PSAwKSB7XG4gICAgICBjb25zdCByZWN0ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBkaXZIZWlnaHQgPSByZWN0LmhlaWdodDtcbiAgICAgIGRpdldpZHRoID0gcmVjdC53aWR0aDtcbiAgICB9XG4gICAgbGV0IGJhY2tkcm9wU3R5bGUgPSB7XG4gICAgICBoZWlnaHQ6IGRpdkhlaWdodCArIFwicHhcIixcbiAgICAgIHdpZHRoOiBkaXZXaWR0aCArIFwicHhcIixcbiAgICAgIGJhY2tncm91bmQ6IFwicmdiYSgwLCAwLCAwLCAwLjUpXCIsXG4gICAgICBwb3NpdGlvbjogXCJmaXhlZFwiXG4gICAgfVxuICAgIGlmICh0aGlzLmlzTW9iaWxlVmlldykge1xuICAgICAgdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24uZGV0YWlsc0NvbmZpZ3VyYXRpb24udHJhbnNmZXJPd25lcnNoaXBDb25maWd1cmF0aW9uLnRyYW5zZmVyT3duZXJzaGlwU3R5bGUuaGVpZ2h0ID0gKGRpdkhlaWdodCAtIDMwKSArIFwicHhcIjtcbiAgICAgIHRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLmRldGFpbHNDb25maWd1cmF0aW9uLnRyYW5zZmVyT3duZXJzaGlwQ29uZmlndXJhdGlvbi50cmFuc2Zlck93bmVyc2hpcFN0eWxlLndpZHRoID0gZGl2V2lkdGggKyBcInB4XCI7XG4gICAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5tZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24ubWVzc2FnZUluZm9ybWF0aW9uQ29uZmlndXJhdGlvbi5tZXNzYWdlSW5mb3JtYXRpb25TdHlsZS5oZWlnaHQgPSBkaXZIZWlnaHQgKyBcInB4XCI7XG4gICAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5tZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24ubWVzc2FnZUluZm9ybWF0aW9uQ29uZmlndXJhdGlvbi5tZXNzYWdlSW5mb3JtYXRpb25TdHlsZS53aWR0aCA9IGRpdldpZHRoICsgXCJweFwiO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLmRldGFpbHNDb25maWd1cmF0aW9uLnRyYW5zZmVyT3duZXJzaGlwQ29uZmlndXJhdGlvbi50cmFuc2Zlck93bmVyc2hpcFN0eWxlLmhlaWdodCA9IFwiNjUwcHhcIjtcbiAgICAgIHRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLmRldGFpbHNDb25maWd1cmF0aW9uLnRyYW5zZmVyT3duZXJzaGlwQ29uZmlndXJhdGlvbi50cmFuc2Zlck93bmVyc2hpcFN0eWxlLndpZHRoID0gXCIzNjBweFwiO1xuICAgIH1cbiAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5tZXNzYWdlTGlzdENvbmZpZ3VyYXRpb24uYmFja2Ryb3BTdHlsZSA9IHRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLm1lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbi5iYWNrZHJvcFN0eWxlIHx8IGJhY2tkcm9wU3R5bGU7XG4gICAgdGhpcy5jb252ZXJzYXRpb25Db25maWd1cmF0aW9uLmJhY2tkcm9wU3R5bGUgPSB0aGlzLmNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24uYmFja2Ryb3BTdHlsZSB8fCBiYWNrZHJvcFN0eWxlO1xuICAgIHRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLmRldGFpbHNDb25maWd1cmF0aW9uLmJhY2tkcm9wU3R5bGUgPSB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5kZXRhaWxzQ29uZmlndXJhdGlvbi5iYWNrZHJvcFN0eWxlIHx8IGJhY2tkcm9wU3R5bGU7XG4gICAgdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24ubWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5iYWNrZHJvcFN0eWxlID0gdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24ubWVzc2FnZUNvbXBvc2VyQ29uZmlndXJhdGlvbi5iYWNrZHJvcFN0eWxlIHx8IGJhY2tkcm9wU3R5bGU7XG4gICAgdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24uZGV0YWlsc0NvbmZpZ3VyYXRpb24uYmFja2Ryb3BTdHlsZSA9dGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24uZGV0YWlsc0NvbmZpZ3VyYXRpb24uYmFja2Ryb3BTdHlsZSB8fCBiYWNrZHJvcFN0eWxlO1xuICAgIHRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLmRldGFpbHNDb25maWd1cmF0aW9uLmdyb3VwTWVtYmVyc0NvbmZpZ3VyYXRpb24uYmFja2Ryb3BTdHlsZSA9IHRoaXMubWVzc2FnZXNDb25maWd1cmF0aW9uLmRldGFpbHNDb25maWd1cmF0aW9uLmdyb3VwTWVtYmVyc0NvbmZpZ3VyYXRpb24uYmFja2Ryb3BTdHlsZSB8fCBiYWNrZHJvcFN0eWxlO1xuXG4gICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gIH1cbiAgc2V0QWN0aXZlQ2hhdCgpIHtcbiAgICBsZXQgdHlwZTogc3RyaW5nID0gdGhpcy51c2VyID8gQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVJlY2VpdmVyVHlwZS51c2VyIDogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVJlY2VpdmVyVHlwZS5ncm91cFxuICAgIHRoaXMuYWN0aXZlQ29udmVyc2F0aW9uID0gbnVsbFxuICAgIGxldCBjb252ZXJzYXRpb25XaXRoOiBzdHJpbmcgPSB0aGlzLnVzZXI/LmdldFVpZCgpISB8fCB0aGlzLmdyb3VwPy5nZXRHdWlkKCkhXG4gICAgQ29tZXRDaGF0LmdldENvbnZlcnNhdGlvbihjb252ZXJzYXRpb25XaXRoLCB0eXBlKS50aGVuKChjb252ZXJzYXRpb246IENvbWV0Q2hhdC5Db252ZXJzYXRpb24pID0+IHtcbiAgICAgIHRoaXMuYWN0aXZlQ29udmVyc2F0aW9uID0gY29udmVyc2F0aW9uXG4gICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcjogQ29tZXRDaGF0LkNvbWV0Q2hhdEV4Y2VwdGlvbikgPT4ge1xuICAgICAgICBpZiAodGhpcy5vbkVycm9yKSB7XG4gICAgICAgICAgdGhpcy5vbkVycm9yKGVycm9yKVxuICAgICAgICB9XG4gICAgICB9KVxuICB9XG4gIGNsb3NlU3RhcnRDb252ZXJzYXRpb24gPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuU3RhcnRDb252ZXJzYXRpb25Db25maWd1cmF0aW9uLm9uQ2xvc2UpIHtcbiAgICAgIHRoaXMuU3RhcnRDb252ZXJzYXRpb25Db25maWd1cmF0aW9uLm9uQ2xvc2UoKVxuICAgIH1cbiAgICB0aGlzLnNob3dTdGFydENvbnZlcnNhdGlvbiA9IGZhbHNlO1xuICB9XG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuU3RhcnRDb252ZXJzYXRpb25Db25maWd1cmF0aW9uLnVzZXJzQ29uZmlndXJhdGlvbi51c2Vyc1N0eWxlLmJvcmRlciA9IFwibm9uZVwiXG4gICAgdGhpcy5TdGFydENvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24uZ3JvdXBzQ29uZmlndXJhdGlvbi5ncm91cHNTdHlsZS5ib3JkZXIgPSBcIm5vbmVcIlxuXG4gICAgdGhpcy5zdGFydENvbnZlcnNhdGlvbkJ1dHRvblN0eWxlID0ge1xuICAgICAgaGVpZ2h0OiBcIjI0cHhcIixcbiAgICAgIHdpZHRoOiBcIjI0cHhcIixcbiAgICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgICBib3JkZXJSYWRpdXM6ICcwJyxcbiAgICAgIGJhY2tncm91bmQ6IFwidHJhbnNwYXJlbnRcIixcbiAgICAgIGJ1dHRvbkljb25UaW50OiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldFByaW1hcnkoKVxuICAgIH1cbiAgICB0aGlzLlN0YXJ0Q29udmVyc2F0aW9uQ29uZmlndXJhdGlvbiA9IHsgLi4udGhpcy5TdGFydENvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24gfVxuICAgIHRoaXMuc2V0V2l0aE1lc3NhZ2VzU3R5bGUoKVxuICAgIGlmICghdGhpcy5tZXNzYWdlc0NvbmZpZ3VyYXRpb24ubWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb24ub25CYWNrKSB7XG4gICAgICB0aGlzLm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5tZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbi5vbkJhY2sgPSB0aGlzLm9uQmFja1xuICAgIH1cbiAgICBDb21ldENoYXQuZ2V0TG9nZ2VkaW5Vc2VyKClcbiAgICAgIC50aGVuKCh1c2VyOiBDb21ldENoYXQuVXNlciB8IG51bGwpID0+IHtcbiAgICAgICAgdGhpcy5sb2dnZWRJblVzZXIgPSB1c2VyO1xuICAgICAgICB0aGlzLmF0dGFjaEdyb3VwTGlzdGVuZXJzKCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlVG9FdmVudHMoKTtcblxuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IENvbWV0Q2hhdC5Db21ldENoYXRFeGNlcHRpb24pID0+IHtcbiAgICAgICAgaWYgKHRoaXMub25FcnJvcikge1xuICAgICAgICAgIHRoaXMub25FcnJvcihlcnJvcilcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgfVxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnVuc3Vic2NyaWJlVG9FdmVudHMoKTtcbiAgICBDb21ldENoYXQucmVtb3ZlR3JvdXBMaXN0ZW5lcih0aGlzLmdyb3VwTGlzdGVuZXJJZCk7XG4gIH1cbiAgLy8gc3Vic2NyaWJlIHRvIGdsb2JhbCBldmVudHNcbiAgc3Vic2NyaWJlVG9FdmVudHMoKSB7XG4gICAgdGhpcy5jY0NvbnZlcnNhdGlvbkRlbGV0ZWQgPSBDb21ldENoYXRDb252ZXJzYXRpb25FdmVudHMuY2NDb252ZXJzYXRpb25EZWxldGVkLnN1YnNjcmliZSgoY29udmVyc2F0aW9uOiBDb21ldENoYXQuQ29udmVyc2F0aW9uKSA9PiB7XG4gICAgICB0aGlzLnJlbW92ZUFjdGl2ZUNoYXRMaXN0KGNvbnZlcnNhdGlvbikgLy90byBtYWtlIG0gbWVzc2FnZXMgc2VjdGlvbiBlbXB0eSBhZnRlciBkZWxldGluZyBjb252ZXJzYXRpb24gZnJvbSBjb252ZXJzYXRpb25saXN0XG4gICAgfSlcbiAgICB0aGlzLmNjR3JvdXBEZWxldGVkID0gQ29tZXRDaGF0R3JvdXBFdmVudHMuY2NHcm91cERlbGV0ZWQuc3Vic2NyaWJlKChncm91cDogQ29tZXRDaGF0Lkdyb3VwKSA9PiB7XG4gICAgICBpZiAodGhpcy5ncm91cCAmJiBncm91cC5nZXRHdWlkKCkgPT0gdGhpcy5ncm91cC5nZXRHdWlkKCkpIHtcbiAgICAgICAgdGhpcy5ncm91cCA9IG51bGw7XG4gICAgICAgIHRoaXMuYWN0aXZlQ29udmVyc2F0aW9uID0gbnVsbDtcbiAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgICB9XG4gICAgfSlcbiAgICB0aGlzLmNjR3JvdXBNZW1iZXJBZGRlZCA9IENvbWV0Q2hhdEdyb3VwRXZlbnRzLmNjR3JvdXBNZW1iZXJBZGRlZC5zdWJzY3JpYmUoKGl0ZW06IElHcm91cE1lbWJlckFkZGVkKSA9PiB7XG4gICAgICBpZiAodGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLmdldEd1aWQoKSA9PSBpdGVtPy51c2VyQWRkZWRJbiEuZ2V0R3VpZCgpKSB7XG4gICAgICAgIHRoaXMuZ3JvdXAgPSBpdGVtPy51c2VyQWRkZWRJbjtcbiAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgICB9XG4gICAgfSlcbiAgICB0aGlzLmNjR3JvdXBNZW1iZXJCYW5uZWQgPSBDb21ldENoYXRHcm91cEV2ZW50cy5jY0dyb3VwTWVtYmVyQmFubmVkLnN1YnNjcmliZSgoaXRlbTogSUdyb3VwTWVtYmVyS2lja2VkQmFubmVkKSA9PiB7XG4gICAgICBpZiAodGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLmdldEd1aWQoKSA9PSBpdGVtPy5raWNrZWRGcm9tIS5nZXRHdWlkKCkpIHtcbiAgICAgICAgdGhpcy5ncm91cCA9IGl0ZW0/LmtpY2tlZEZyb207XG4gICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKVxuICAgICAgfVxuICAgIH0pXG4gICAgdGhpcy5jY0dyb3VwTWVtYmVySm9pbmVkID0gQ29tZXRDaGF0R3JvdXBFdmVudHMuY2NHcm91cE1lbWJlckpvaW5lZC5zdWJzY3JpYmUoKGl0ZW06IElHcm91cE1lbWJlckpvaW5lZCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZ3JvdXAgJiYgdGhpcy5ncm91cC5nZXRHdWlkKCkgPT0gaXRlbT8uam9pbmVkR3JvdXAhLmdldEd1aWQoKSkge1xuICAgICAgICB0aGlzLmdyb3VwID0gaXRlbT8uam9pbmVkR3JvdXA7XG4gICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKVxuICAgICAgfVxuICAgIH0pXG4gICAgdGhpcy5jY0dyb3VwTWVtYmVyS2lja2VkID0gQ29tZXRDaGF0R3JvdXBFdmVudHMuY2NHcm91cE1lbWJlcktpY2tlZC5zdWJzY3JpYmUoKGl0ZW06IElHcm91cE1lbWJlcktpY2tlZEJhbm5lZCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZ3JvdXAgJiYgdGhpcy5ncm91cC5nZXRHdWlkKCkgPT0gaXRlbT8ua2lja2VkRnJvbSEuZ2V0R3VpZCgpKSB7XG4gICAgICAgIHRoaXMuZ3JvdXAgPSBpdGVtPy5raWNrZWRGcm9tO1xuICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgICAgIH1cbiAgICB9KVxuICAgIHRoaXMuY2NPd25lcnNoaXBDaGFuZ2VkID0gQ29tZXRDaGF0R3JvdXBFdmVudHMuY2NPd25lcnNoaXBDaGFuZ2VkLnN1YnNjcmliZSgoaXRlbTogSU93bmVyc2hpcENoYW5nZWQpID0+IHtcbiAgICAgIGlmICh0aGlzLmdyb3VwICYmIHRoaXMuZ3JvdXAuZ2V0R3VpZCgpID09IGl0ZW0/Lmdyb3VwIS5nZXRHdWlkKCkpIHtcbiAgICAgICAgdGhpcy5ncm91cCA9IGl0ZW0/Lmdyb3VwO1xuICAgICAgICB0aGlzLmFjdGl2ZUNvbnZlcnNhdGlvbj8uc2V0Q29udmVyc2F0aW9uV2l0aCh0aGlzLmdyb3VwKVxuICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9XG4gICAgfSlcbiAgICB0aGlzLmNjR3JvdXBMZWZ0ID0gQ29tZXRDaGF0R3JvdXBFdmVudHMuY2NHcm91cExlZnQuc3Vic2NyaWJlKChpdGVtOiBJR3JvdXBMZWZ0KSA9PiB7XG4gICAgICBpZiAodGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwLmdldEd1aWQoKSA9PSBpdGVtPy5sZWZ0R3JvdXAhLmdldEd1aWQoKSAmJiB0aGlzLmxvZ2dlZEluVXNlcj8uZ2V0VWlkKCkgPT0gaXRlbT8udXNlckxlZnQ/LmdldFVpZCgpKSB7XG4gICAgICAgIHRoaXMuZ3JvdXAgPSBudWxsO1xuICAgICAgICB0aGlzLmFjdGl2ZUNvbnZlcnNhdGlvbiA9IG51bGw7XG4gICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKVxuICAgICAgfVxuICAgIH0pXG4gICAgLy8gb3BlbiBjaGF0IGFuZCBtYXJrIGFzIGFjdGl2ZSBjb252ZXJzYXRpb25cbiAgICB0aGlzLmNjT3BlbkNoYXQgPSBDb21ldENoYXRVSUV2ZW50cy5jY09wZW5DaGF0LnN1YnNjcmliZSgoaXRlbSkgPT4ge1xuICAgICAgdGhpcy51c2VyID0gaXRlbS51c2VyID8gaXRlbS51c2VyIDogbnVsbDtcbiAgICAgIHRoaXMuZ3JvdXAgPSBpdGVtLmdyb3VwID8gaXRlbS5ncm91cCA6IG51bGw7XG4gICAgICB0aGlzLnNldEFjdGl2ZUNoYXQoKVxuICAgIH0pXG4gIH1cbiAgLy8gdW5zdWJzY3JpYmUgdG8gc3Vic2NyaWJlZCBldmVudHMuXG4gIHVuc3Vic2NyaWJlVG9FdmVudHMoKSB7XG4gICAgdGhpcy5jY0NvbnZlcnNhdGlvbkRlbGV0ZWQ/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jY0dyb3VwRGVsZXRlZD8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNjR3JvdXBNZW1iZXJBZGRlZD8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNjR3JvdXBNZW1iZXJCYW5uZWQ/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jY0dyb3VwTWVtYmVySm9pbmVkPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2NHcm91cE1lbWJlcktpY2tlZD8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNjT3duZXJzaGlwQ2hhbmdlZD8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNjR3JvdXBMZWZ0Py51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2NPcGVuQ2hhdD8udW5zdWJzY3JpYmUoKTtcbiAgfVxuICAvKipcbiAgICogcmVtb3ZlIGFjdGl2ZSBjaGF0IHNjcmVlbiBhZnRlciBkZWxldGluZyB0aGUgY29udmVyc2F0aW9uLlxuICAgKiBAcGFyYW0gIHtDb21ldENoYXQuQ29udmVyc2F0aW9ufSBjb252ZXJzYXRpb25cbiAgICovXG4gIHJlbW92ZUFjdGl2ZUNoYXRMaXN0KGNvbnZlcnNhdGlvbjogQ29tZXRDaGF0LkNvbnZlcnNhdGlvbikge1xuICAgIGNvbnN0IGNvbnZlcnNhdGlvblR5cGUgPSBjb252ZXJzYXRpb24uZ2V0Q29udmVyc2F0aW9uVHlwZSgpO1xuICAgIGNvbnN0IGNvbnZlcnNhdGlvbldpdGggPSBjb252ZXJzYXRpb24uZ2V0Q29udmVyc2F0aW9uV2l0aCgpO1xuICAgIGlmIChjb252ZXJzYXRpb25UeXBlID09PSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlUmVjZWl2ZXJUeXBlLnVzZXIgJiYgdGhpcy51c2VyICYmIHRoaXMudXNlci5nZXRVaWQoKSA9PT0gKGNvbnZlcnNhdGlvbldpdGggYXMgQ29tZXRDaGF0LlVzZXIpLmdldFVpZCgpKSB7XG4gICAgICB0aGlzLnVzZXIgPSBudWxsO1xuICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0gZWxzZSBpZiAoY29udmVyc2F0aW9uVHlwZSA9PT0gQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVJlY2VpdmVyVHlwZS5ncm91cCAmJiB0aGlzLmdyb3VwICYmIHRoaXMuZ3JvdXAuZ2V0R3VpZCgpID09PSAoY29udmVyc2F0aW9uV2l0aCBhcyBDb21ldENoYXQuR3JvdXApLmdldEd1aWQoKSkge1xuICAgICAgdGhpcy5ncm91cCA9IG51bGw7XG4gICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgZW1wdHlNZXNzYWdlU3R5bGUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJhY2tncm91bmQ6IHRoaXMuY29udmVyc2F0aW9uc1dpdGhNZXNzYWdlc1N0eWxlLmJhY2tncm91bmQgfHwgdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRCYWNrZ3JvdW5kKCksXG4gICAgICBoZWlnaHQ6IHRoaXMuY29udmVyc2F0aW9uc1dpdGhNZXNzYWdlc1N0eWxlLmhlaWdodCxcbiAgICAgIHdpZHRoOiBgY2FsYygke3RoaXMuY29udmVyc2F0aW9uc1dpdGhNZXNzYWdlc1N0eWxlLndpZHRofSAtIDI4MHB4KWAsXG4gICAgICBib3JkZXI6IFwibm9uZVwiLFxuICAgICAgYm9yZGVyUmFkaXVzOiB0aGlzLmNvbnZlcnNhdGlvbnNXaXRoTWVzc2FnZXNTdHlsZS5ib3JkZXJSYWRpdXMsXG4gICAgfVxuICB9XG4gIGNoYXRzV3JhcHBlclN0eWxlcyA9ICgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgaGVpZ2h0OiB0aGlzLmNvbnZlcnNhdGlvbnNXaXRoTWVzc2FnZXNTdHlsZS5oZWlnaHQsXG4gICAgICB3aWR0aDogdGhpcy5jb252ZXJzYXRpb25zV2l0aE1lc3NhZ2VzU3R5bGUud2lkdGgsXG4gICAgICBib3JkZXI6IHRoaXMuY29udmVyc2F0aW9uc1dpdGhNZXNzYWdlc1N0eWxlLmJvcmRlcixcbiAgICAgIGJvcmRlclJhZGl1czogdGhpcy5jb252ZXJzYXRpb25zV2l0aE1lc3NhZ2VzU3R5bGUuYm9yZGVyUmFkaXVzLFxuICAgICAgYmFja2dyb3VuZDogdGhpcy5jb252ZXJzYXRpb25zV2l0aE1lc3NhZ2VzU3R5bGUuYmFja2dyb3VuZCB8fCB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEJhY2tncm91bmQoKSxcbiAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnXG4gICAgfVxuICB9XG4gIGNvbnRhY3RzV3JhcHBlclN0eWxlcyA9ICgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgYmFja2dyb3VuZDogdGhpcy5TdGFydENvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24uY29udGFjdHNTdHlsZS5iYWNrZ3JvdW5kIHx8IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QmFja2dyb3VuZCgpLFxuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNjLXdpdGgtbWVzc2FnZXNfX3dyYXBwZXJcIiBbbmdTdHlsZV09XCJjaGF0c1dyYXBwZXJTdHlsZXMoKVwiPlxuICA8ZGl2IGNsYXNzPVwiY2Mtd2l0aC1tZXNzYWdlc19fc2lkZWJhclwiIFtuZ0NsYXNzXT1cInttb2JpbGUgOiBpc01vYmlsZVZpZXd9XCJcbiAgICBbbmdTdHlsZV09XCJzaWRlQmFyU3R5bGVcIj5cbiAgICA8Y29tZXRjaGF0LWNvbnZlcnNhdGlvbnMgI2NvbnZlcnNhdGlvblJlZlxuICAgICAgW2FjdGl2ZUNvbnZlcnNhdGlvbl09XCJhY3RpdmVDb252ZXJzYXRpb25cIlxuICAgICAgW29uSXRlbUNsaWNrXT1cImNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24ub25JdGVtQ2xpY2sgfHwgb25JdGVtQ2xpY2tcIlxuICAgICAgW2NvbnZlcnNhdGlvbnNTdHlsZV09XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLmNvbnZlcnNhdGlvbnNTdHlsZVwiXG4gICAgICBbc3RhdHVzSW5kaWNhdG9yU3R5bGVdPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbj8uc3RhdHVzSW5kaWNhdG9yU3R5bGVcIlxuICAgICAgW2F2YXRhclN0eWxlXT1cImNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24/LmF2YXRhclN0eWxlIVwiXG4gICAgICBbc3VidGl0bGVWaWV3XT1cImNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24uc3VidGl0bGVWaWV3XCJcbiAgICAgIFtvcHRpb25zXT1cImNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24ub3B0aW9uc1wiXG4gICAgICBbZGlzYWJsZVVzZXJzUHJlc2VuY2VdPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5kaXNhYmxlVXNlcnNQcmVzZW5jZVwiXG4gICAgICBbZGlzYWJsZVJlY2VpcHRdPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5kaXNhYmxlUmVjZWlwdFwiXG4gICAgICBbaGlkZVJlY2VpcHRdPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5oaWRlUmVjZWlwdFwiXG4gICAgICBbZGlzYWJsZVR5cGluZ109XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLmRpc2FibGVUeXBpbmdcIlxuICAgICAgW2RlbGl2ZXJlZEljb25dPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5kZWxpdmVyZWRJY29uXCJcbiAgICAgIFtyZWFkSWNvbl09XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLnJlYWRJY29uXCJcbiAgICAgIFt3YWl0SWNvbl09XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLndhaXRJY29uXCJcbiAgICAgIFtlcnJvckljb25dPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5lcnJvckljb25cIlxuICAgICAgW2RhdGVQYXR0ZXJuXT1cImNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24uZGF0ZVBhdHRlcm5cIlxuICAgICAgW3JlY2VpcHRTdHlsZV09XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLnJlY2VpcHRTdHlsZVwiXG4gICAgICBbc2VudEljb25dPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5zZW50SWNvblwiXG4gICAgICBbcHJpdmF0ZUdyb3VwSWNvbl09XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLnByaXZhdGVHcm91cEljb25cIlxuICAgICAgW3Byb3RlY3RlZEdyb3VwSWNvbl09XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLnByb3RlY3RlZEdyb3VwSWNvblwiXG4gICAgICBbcGFzc3dvcmRHcm91cEljb25dPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5wYXNzd29yZEdyb3VwSWNvblwiXG4gICAgICBbY3VzdG9tU291bmRGb3JNZXNzYWdlc109XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLmN1c3RvbVNvdW5kRm9yTWVzc2FnZXNcIlxuICAgICAgW2NvbnZlcnNhdGlvbnNSZXF1ZXN0QnVpbGRlcl09XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLmNvbnZlcnNhdGlvbnNSZXF1ZXN0QnVpbGRlclwiXG4gICAgICBbZW1wdHlTdGF0ZVZpZXddPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5lbXB0eVN0YXRlVmlld1wiXG4gICAgICBbb25TZWxlY3RdPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5vblNlbGVjdFwiXG4gICAgICBbbG9hZGluZ0ljb25VUkxdPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5sb2FkaW5nSWNvblVSTFwiXG4gICAgICBbZXJyb3JTdGF0ZVZpZXddPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5lcnJvclN0YXRlVmlld1wiXG4gICAgICBbbG9hZGluZ1N0YXRlVmlld109XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLmxvYWRpbmdTdGF0ZVZpZXdcIlxuICAgICAgW3RpdGxlQWxpZ25tZW50XT1cImNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24udGl0bGVBbGlnbm1lbnRcIlxuICAgICAgW2xpc3RJdGVtVmlld109XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLmxpc3RJdGVtVmlld1wiXG4gICAgICBbbWVudV09XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLm1lbnUgfHwgc3RhcnRDb252ZXJzYXRpb25CdXR0b25cIlxuICAgICAgW2hpZGVTZXBhcmF0b3JdPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5oaWRlU2VwYXJhdG9yXCJcbiAgICAgIFtoaWRlRXJyb3JdPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5oaWRlRXJyb3JcIlxuICAgICAgW3NlbGVjdGlvbk1vZGVdPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5zZWxlY3Rpb25Nb2RlXCJcbiAgICAgIFtkaXNhYmxlU291bmRGb3JNZXNzYWdlc109XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLmRpc2FibGVTb3VuZEZvck1lc3NhZ2VzXCJcbiAgICAgIFtkZWxldGVDb252ZXJzYXRpb25EaWFsb2dTdHlsZV09XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLmRlbGV0ZUNvbnZlcnNhdGlvbkRpYWxvZ1N0eWxlXCJcbiAgICAgIFtiYWRnZVN0eWxlXT1cImNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24uYmFkZ2VTdHlsZVwiXG4gICAgICBbZGF0ZVN0eWxlXT1cImNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24uZGF0ZVN0eWxlXCJcbiAgICAgIFtsaXN0SXRlbVN0eWxlXT1cImNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24ubGlzdEl0ZW1TdHlsZVwiXG4gICAgICBbYmFja2Ryb3BTdHlsZV09XCJjb252ZXJzYXRpb25Db25maWd1cmF0aW9uLmJhY2tkcm9wU3R5bGVcIlxuICAgICAgW3RleHRGb3JtYXR0ZXJzXT1cImNvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24/LnRleHRGb3JtYXR0ZXJzXCJcbiAgICAgIFtkaXNhYmxlTWVudGlvbnNdPVwiY29udmVyc2F0aW9uQ29uZmlndXJhdGlvbi5kaXNhYmxlTWVudGlvbnNcIj48L2NvbWV0Y2hhdC1jb252ZXJzYXRpb25zPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNjLXdpdGgtbWVzc2FnZXNfX21haW5cIiBbbmdDbGFzc109XCJ7bW9iaWxlIDogaXNNb2JpbGVWaWV3fVwiXG4gICAgKm5nSWY9XCIhc2hvd1N0YXJ0Q29udmVyc2F0aW9uICYmICh1c2VyIHx8IGdyb3VwKVwiPlxuICAgIDwhLS1NZXNzYWdlIExpc3QgU2NyZWVuLS0+XG4gICAgPGNvbWV0Y2hhdC1tZXNzYWdlcyAjbWVzc2FnZXNSZWYgW3VzZXJdPVwidXNlciFcIiBbZ3JvdXBdPVwiZ3JvdXAhXCJcbiAgICAgIFttZXNzYWdlSGVhZGVyQ29uZmlndXJhdGlvbl09XCJtZXNzYWdlc0NvbmZpZ3VyYXRpb24ubWVzc2FnZUhlYWRlckNvbmZpZ3VyYXRpb25cIlxuICAgICAgW21lc3NhZ2VMaXN0Q29uZmlndXJhdGlvbl09XCJtZXNzYWdlc0NvbmZpZ3VyYXRpb24ubWVzc2FnZUxpc3RDb25maWd1cmF0aW9uXCJcbiAgICAgIFttZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uXT1cIm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5tZXNzYWdlQ29tcG9zZXJDb25maWd1cmF0aW9uXCJcbiAgICAgIFttZXNzYWdlc1N0eWxlXT1cIm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5tZXNzYWdlc1N0eWxlXCJcbiAgICAgIFtjdXN0b21Tb3VuZEZvckluY29taW5nTWVzc2FnZXNdPVwibWVzc2FnZXNDb25maWd1cmF0aW9uLmN1c3RvbVNvdW5kRm9ySW5jb21pbmdNZXNzYWdlc1wiXG4gICAgICBbY3VzdG9tU291bmRGb3JPdXRnb2luZ01lc3NhZ2VzXT1cIm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5jdXN0b21Tb3VuZEZvck91dGdvaW5nTWVzc2FnZXNcIlxuICAgICAgW2RldGFpbHNDb25maWd1cmF0aW9uXT1cIm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5kZXRhaWxzQ29uZmlndXJhdGlvblwiXG4gICAgICBbZGlzYWJsZVNvdW5kRm9yTWVzc2FnZXNdPVwibWVzc2FnZXNDb25maWd1cmF0aW9uLmRpc2FibGVTb3VuZEZvck1lc3NhZ2VzXCJcbiAgICAgIFtkaXNhYmxlVHlwaW5nXT1cIm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5kaXNhYmxlVHlwaW5nXCJcbiAgICAgIFtoaWRlTWVzc2FnZUNvbXBvc2VyXT1cIm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5oaWRlTWVzc2FnZUNvbXBvc2VyXCJcbiAgICAgIFtoaWRlTWVzc2FnZUhlYWRlcl09XCJtZXNzYWdlc0NvbmZpZ3VyYXRpb24uaGlkZU1lc3NhZ2VIZWFkZXJcIlxuICAgICAgW21lc3NhZ2VDb21wb3NlclZpZXddPVwibWVzc2FnZXNDb25maWd1cmF0aW9uLm1lc3NhZ2VDb21wb3NlclZpZXdcIlxuICAgICAgW21lc3NhZ2VIZWFkZXJWaWV3XT1cIm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5tZXNzYWdlSGVhZGVyVmlld1wiXG4gICAgICBbbWVzc2FnZUxpc3RWaWV3XT1cIm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5tZXNzYWdlTGlzdFZpZXdcIlxuICAgICAgW2hpZGVEZXRhaWxzXT1cIm1lc3NhZ2VzQ29uZmlndXJhdGlvbi5oaWRlRGV0YWlscyFcIlxuICAgICAgW3RocmVhZGVkTWVzc2FnZUNvbmZpZ3VyYXRpb25dPVwibWVzc2FnZXNDb25maWd1cmF0aW9uLnRocmVhZGVkTWVzc2FnZUNvbmZpZ3VyYXRpb25cIj5cbiAgICA8L2NvbWV0Y2hhdC1tZXNzYWdlcz5cbiAgICA8IS0tTWVzc2FnZSBMaXN0IFNjcmVlbiBFTkRTLS0+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY2Mtd2l0aC1tZXNzYWdlc19fc3RhcnQtY29udmVyc2F0aW9uXCJcbiAgICBbbmdTdHlsZV09XCJjb250YWN0c1dyYXBwZXJTdHlsZXMoKVwiXG4gICAgW25nQ2xhc3NdPVwie21vYmlsZSA6IGlzTW9iaWxlVmlld31cIiAqbmdJZj1cInNob3dTdGFydENvbnZlcnNhdGlvblwiPlxuXG4gICAgPGNvbWV0Y2hhdC1jb250YWN0cyBbb25JdGVtQ2xpY2tdPVwib25Db250YWN0Q2xpY2tlZFwiXG4gICAgICBbdXNlcnNDb25maWd1cmF0aW9uXT1cIlN0YXJ0Q29udmVyc2F0aW9uQ29uZmlndXJhdGlvbj8udXNlcnNDb25maWd1cmF0aW9uIVwiXG4gICAgICBbZ3JvdXBzQ29uZmlndXJhdGlvbl09XCJTdGFydENvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24/Lmdyb3Vwc0NvbmZpZ3VyYXRpb24hXCJcbiAgICAgIFtjbG9zZUljb25VUkxdPVwiU3RhcnRDb252ZXJzYXRpb25Db25maWd1cmF0aW9uPy5jbG9zZUljb25VUkwhXCJcbiAgICAgIFtjb250YWN0c1N0eWxlXT1cIlN0YXJ0Q29udmVyc2F0aW9uQ29uZmlndXJhdGlvbj8uY29udGFjdHNTdHlsZSFcIlxuICAgICAgW3NlbGVjdGlvbk1vZGVdPVwiU3RhcnRDb252ZXJzYXRpb25Db25maWd1cmF0aW9uPy5zZWxlY3Rpb25Nb2RlIVwiXG4gICAgICBbb25DbG9zZV09XCJjbG9zZVN0YXJ0Q29udmVyc2F0aW9uXCJcbiAgICAgIFt0YWJWaXNpYmlsaXR5XT1cIlN0YXJ0Q29udmVyc2F0aW9uQ29uZmlndXJhdGlvbj8udGFiVmlzaWJpbGl0eSFcIlxuICAgICAgW3NlbGVjdGlvbkxpbWl0XT1cIlN0YXJ0Q29udmVyc2F0aW9uQ29uZmlndXJhdGlvbj8uc2VsZWN0aW9uTGltaXQhXCJcbiAgICAgIFt0YWJzXT1cIlN0YXJ0Q29udmVyc2F0aW9uQ29uZmlndXJhdGlvbj8udGFicyFcIlxuICAgICAgW29uU3VibWl0QnV0dG9uQ2xpY2tdPVwiU3RhcnRDb252ZXJzYXRpb25Db25maWd1cmF0aW9uPy5vblN1Ym1pdEJ1dHRvbkNsaWNrIVwiXG4gICAgICBbaGlkZVN1Ym1pdEJ1dHRvbl09XCJTdGFydENvbnZlcnNhdGlvbkNvbmZpZ3VyYXRpb24/LmhpZGVTdWJtaXRCdXR0b24hXCI+PC9jb21ldGNoYXQtY29udGFjdHM+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiY2MtZGVjb3JhdG9yX19tZXNzYWdlLS1lbXB0eVwiXG4gICAgKm5nSWY9XCIhdXNlciAmJiAhZ3JvdXAgJiYgIXNob3dTdGFydENvbnZlcnNhdGlvblwiXG4gICAgW25nU3R5bGVdPVwiZW1wdHlNZXNzYWdlU3R5bGUoKVwiPlxuICAgIDxjb21ldGNoYXQtbGFiZWwgW3RleHRdPVwibWVzc2FnZVRleHRcIlxuICAgICAgW2xhYmVsU3R5bGVdPVwibGFiZWxTdHlsZVwiPjwvY29tZXRjaGF0LWxhYmVsPlxuICA8L2Rpdj5cbiAgPG5nLXRlbXBsYXRlICNzdGFydENvbnZlcnNhdGlvbkJ1dHRvbj5cbiAgICA8Y29tZXRjaGF0LWJ1dHRvbiAqbmdJZj1cIiFoaWRlU3RhcnROZXdDb252ZXJzYXRpb25cIlxuICAgICAgW2ljb25VUkxdPVwic3RhcnROZXdDb252ZXJzYXRpb25JY29uVVJMXCJcbiAgICAgIFtidXR0b25TdHlsZV09XCJzdGFydENvbnZlcnNhdGlvbkJ1dHRvblN0eWxlXCJcbiAgICAgIChjYy1idXR0b24tY2xpY2tlZCk9XCJ0cmlnZ2VyU3RhcnRDb252ZXJzYXRpb24oKVwiPjwvY29tZXRjaGF0LWJ1dHRvbj5cblxuICA8L25nLXRlbXBsYXRlPlxuIl19
|