@banta/sdk 5.4.0 → 5.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/{esm2020 → esm2022}/banta-sdk.mjs +4 -4
  2. package/{esm2020 → esm2022}/lib/attachment-scraper.mjs +1 -1
  3. package/esm2022/lib/banta/banta.component.mjs +204 -0
  4. package/{esm2020 → esm2022}/lib/banta-logo.component.mjs +11 -11
  5. package/{esm2020 → esm2022}/lib/banta-sdk.module.mjs +135 -135
  6. package/esm2022/lib/chat/banta-chat/banta-chat.component.mjs +209 -0
  7. package/esm2022/lib/chat/chat-message/chat-message.component.mjs +62 -0
  8. package/esm2022/lib/chat/chat-view/chat-view.component.mjs +170 -0
  9. package/{esm2020 → esm2022}/lib/chat/chat.module.mjs +51 -51
  10. package/{esm2020 → esm2022}/lib/chat/index.mjs +5 -5
  11. package/esm2022/lib/chat/live-chat-message.component.mjs +80 -0
  12. package/{esm2020 → esm2022}/lib/chat-backend-base.mjs +30 -30
  13. package/esm2022/lib/chat-backend.mjs +194 -0
  14. package/{esm2020 → esm2022}/lib/chat-source-base.mjs +1 -1
  15. package/esm2022/lib/chat-source.mjs +233 -0
  16. package/esm2022/lib/comments/attachment-button/attachment-button.component.mjs +76 -0
  17. package/esm2022/lib/comments/attachment-scraper.directive.mjs +107 -0
  18. package/esm2022/lib/comments/banta-comments/banta-comments.component.mjs +748 -0
  19. package/esm2022/lib/comments/comment/comment.component.mjs +175 -0
  20. package/esm2022/lib/comments/comment-field/comment-field.component.mjs +401 -0
  21. package/esm2022/lib/comments/comment-sort/comment-sort.component.mjs +37 -0
  22. package/esm2022/lib/comments/comment-view/comment-view.component.mjs +470 -0
  23. package/{esm2020 → esm2022}/lib/comments/comments.module.mjs +111 -111
  24. package/{esm2020 → esm2022}/lib/comments/index.mjs +10 -10
  25. package/esm2022/lib/comments/live-comment.component.mjs +80 -0
  26. package/{esm2020 → esm2022}/lib/comments/reply-send-options.directive.mjs +13 -13
  27. package/esm2022/lib/common/attachment/attachment.component.mjs +128 -0
  28. package/{esm2020 → esm2022}/lib/common/attachments/attachments.component.mjs +75 -75
  29. package/{esm2020 → esm2022}/lib/common/common.module.mjs +68 -68
  30. package/{esm2020 → esm2022}/lib/common/index.mjs +10 -10
  31. package/{esm2020 → esm2022}/lib/common/lazy-connection.mjs +14 -14
  32. package/esm2022/lib/common/lightbox/lightbox.component.mjs +31 -0
  33. package/esm2022/lib/common/markdown-to-html.pipe.mjs +88 -0
  34. package/esm2022/lib/common/mention-linker.pipe.mjs +35 -0
  35. package/esm2022/lib/common/timer-pool.service.mjs +85 -0
  36. package/esm2022/lib/common/timestamp.component.mjs +124 -0
  37. package/{esm2020 → esm2022}/lib/common/trust-resource-url.pipe.mjs +22 -22
  38. package/esm2022/lib/emoji/emoji-selector-button.component.mjs +115 -0
  39. package/esm2022/lib/emoji/emoji-selector-panel/emoji-selector-panel.component.mjs +98 -0
  40. package/{esm2020 → esm2022}/lib/emoji/emoji.module.mjs +55 -55
  41. package/{esm2020 → esm2022}/lib/emoji/emojis.mjs +6507 -6507
  42. package/{esm2020 → esm2022}/lib/emoji/index.mjs +4 -4
  43. package/esm2022/lib/giphy-attachments.mjs +16 -0
  44. package/{esm2020 → esm2022}/lib/index.mjs +19 -19
  45. package/{esm2020 → esm2022}/lib/live-message.component.mjs +61 -61
  46. package/{esm2020 → esm2022}/lib/message-menu-item.mjs +1 -1
  47. package/{esm2020 → esm2022}/lib/sdk-options.mjs +1 -1
  48. package/esm2022/lib/static-chat-source.mjs +71 -0
  49. package/esm2022/lib/tweet-attachments.mjs +13 -0
  50. package/esm2022/lib/url-attachments.mjs +42 -0
  51. package/esm2022/lib/youtube-attachments.mjs +29 -0
  52. package/{esm2020 → esm2022}/public-api.mjs +4 -4
  53. package/{fesm2020 → fesm2022}/banta-sdk.mjs +10825 -10823
  54. package/fesm2022/banta-sdk.mjs.map +1 -0
  55. package/index.d.ts +5 -5
  56. package/lib/attachment-scraper.d.ts +15 -15
  57. package/lib/banta/banta.component.d.ts +58 -58
  58. package/lib/banta-logo.component.d.ts +5 -5
  59. package/lib/banta-sdk.module.d.ts +31 -31
  60. package/lib/chat/banta-chat/banta-chat.component.d.ts +79 -79
  61. package/lib/chat/chat-message/chat-message.component.d.ts +21 -21
  62. package/lib/chat/chat-view/chat-view.component.d.ts +52 -52
  63. package/lib/chat/chat.module.d.ts +15 -15
  64. package/lib/chat/index.d.ts +5 -5
  65. package/lib/chat/live-chat-message.component.d.ts +23 -23
  66. package/lib/chat-backend-base.d.ts +72 -72
  67. package/lib/chat-backend.d.ts +67 -67
  68. package/lib/chat-source-base.d.ts +44 -44
  69. package/lib/chat-source.d.ts +65 -65
  70. package/lib/comments/attachment-button/attachment-button.component.d.ts +17 -17
  71. package/lib/comments/attachment-scraper.directive.d.ts +21 -21
  72. package/lib/comments/banta-comments/banta-comments.component.d.ts +203 -203
  73. package/lib/comments/comment/comment.component.d.ts +72 -72
  74. package/lib/comments/comment-field/comment-field.component.d.ts +89 -89
  75. package/lib/comments/comment-sort/comment-sort.component.d.ts +16 -16
  76. package/lib/comments/comment-view/comment-view.component.d.ts +121 -121
  77. package/lib/comments/comments.module.d.ts +30 -30
  78. package/lib/comments/index.d.ts +10 -10
  79. package/lib/comments/live-comment.component.d.ts +23 -23
  80. package/lib/comments/reply-send-options.directive.d.ts +5 -5
  81. package/lib/common/attachment/attachment.component.d.ts +34 -34
  82. package/lib/common/attachments/attachments.component.d.ts +26 -26
  83. package/lib/common/common.module.d.ts +19 -19
  84. package/lib/common/index.d.ts +10 -10
  85. package/lib/common/lazy-connection.d.ts +6 -6
  86. package/lib/common/lightbox/lightbox.component.d.ts +14 -14
  87. package/lib/common/markdown-to-html.pipe.d.ts +15 -15
  88. package/lib/common/mention-linker.pipe.d.ts +13 -13
  89. package/lib/common/timer-pool.service.d.ts +15 -15
  90. package/lib/common/timestamp.component.d.ts +19 -19
  91. package/lib/common/trust-resource-url.pipe.d.ts +10 -10
  92. package/lib/emoji/emoji-selector-button.component.d.ts +30 -30
  93. package/lib/emoji/emoji-selector-panel/emoji-selector-panel.component.d.ts +26 -26
  94. package/lib/emoji/emoji.module.d.ts +16 -16
  95. package/lib/emoji/emojis.d.ts +6507 -6507
  96. package/lib/emoji/index.d.ts +4 -4
  97. package/lib/giphy-attachments.d.ts +5 -5
  98. package/lib/index.d.ts +19 -19
  99. package/lib/live-message.component.d.ts +22 -22
  100. package/lib/message-menu-item.d.ts +6 -6
  101. package/lib/sdk-options.d.ts +5 -5
  102. package/lib/static-chat-source.d.ts +42 -42
  103. package/lib/tweet-attachments.d.ts +5 -5
  104. package/lib/url-attachments.d.ts +14 -14
  105. package/lib/youtube-attachments.d.ts +5 -5
  106. package/package.json +5 -11
  107. package/public-api.d.ts +1 -1
  108. package/esm2020/lib/banta/banta.component.mjs +0 -204
  109. package/esm2020/lib/chat/banta-chat/banta-chat.component.mjs +0 -209
  110. package/esm2020/lib/chat/chat-message/chat-message.component.mjs +0 -62
  111. package/esm2020/lib/chat/chat-view/chat-view.component.mjs +0 -170
  112. package/esm2020/lib/chat/live-chat-message.component.mjs +0 -80
  113. package/esm2020/lib/chat-backend.mjs +0 -194
  114. package/esm2020/lib/chat-source.mjs +0 -233
  115. package/esm2020/lib/comments/attachment-button/attachment-button.component.mjs +0 -76
  116. package/esm2020/lib/comments/attachment-scraper.directive.mjs +0 -107
  117. package/esm2020/lib/comments/banta-comments/banta-comments.component.mjs +0 -749
  118. package/esm2020/lib/comments/comment/comment.component.mjs +0 -175
  119. package/esm2020/lib/comments/comment-field/comment-field.component.mjs +0 -401
  120. package/esm2020/lib/comments/comment-sort/comment-sort.component.mjs +0 -37
  121. package/esm2020/lib/comments/comment-view/comment-view.component.mjs +0 -470
  122. package/esm2020/lib/comments/live-comment.component.mjs +0 -80
  123. package/esm2020/lib/common/attachment/attachment.component.mjs +0 -128
  124. package/esm2020/lib/common/lightbox/lightbox.component.mjs +0 -31
  125. package/esm2020/lib/common/markdown-to-html.pipe.mjs +0 -88
  126. package/esm2020/lib/common/mention-linker.pipe.mjs +0 -35
  127. package/esm2020/lib/common/timer-pool.service.mjs +0 -83
  128. package/esm2020/lib/common/timestamp.component.mjs +0 -123
  129. package/esm2020/lib/emoji/emoji-selector-button.component.mjs +0 -116
  130. package/esm2020/lib/emoji/emoji-selector-panel/emoji-selector-panel.component.mjs +0 -98
  131. package/esm2020/lib/giphy-attachments.mjs +0 -16
  132. package/esm2020/lib/static-chat-source.mjs +0 -71
  133. package/esm2020/lib/tweet-attachments.mjs +0 -13
  134. package/esm2020/lib/url-attachments.mjs +0 -42
  135. package/esm2020/lib/youtube-attachments.mjs +0 -29
  136. package/fesm2015/banta-sdk.mjs +0 -11258
  137. package/fesm2015/banta-sdk.mjs.map +0 -1
  138. package/fesm2020/banta-sdk.mjs.map +0 -1
@@ -1,135 +1,135 @@
1
- import { NgModule } from '@angular/core';
2
- import { CommentsModule } from './comments';
3
- import { ChatModule } from './chat';
4
- import { EmojiModule } from './emoji';
5
- import { BantaComponent } from './banta/banta.component';
6
- import { BantaLogoComponent } from './banta-logo.component';
7
- import { CommonModule } from '@angular/common';
8
- import { FormsModule } from '@angular/forms';
9
- import { BantaCommonModule } from './common/common.module';
10
- import { LiveMessageComponent } from './live-message.component';
11
- import { MatButtonModule } from "@angular/material/button";
12
- import { MatIconModule } from "@angular/material/icon";
13
- import { MatTooltipModule } from "@angular/material/tooltip";
14
- import { MatMenuModule } from "@angular/material/menu";
15
- import { MatDialogModule } from "@angular/material/dialog";
16
- import { MatSnackBarModule } from "@angular/material/snack-bar";
17
- import { MatFormFieldModule } from "@angular/material/form-field";
18
- import { MatInputModule } from "@angular/material/input";
19
- import { MatProgressSpinnerModule } from "@angular/material/progress-spinner";
20
- import { ChatBackend } from './chat-backend';
21
- import { BANTA_SDK_OPTIONS } from './sdk-options';
22
- import { ChatBackendBase } from './chat-backend-base';
23
- import { OverlayModule } from '@angular/cdk/overlay';
24
- import { PortalModule } from '@angular/cdk/portal';
25
- import { UrlAttachmentResolver, UrlAttachmentScraper } from './url-attachments';
26
- import { YouTubeAttachmentResolver } from './youtube-attachments';
27
- import { GiphyAttachmentResolver } from './giphy-attachments';
28
- import { TweetAttachmentResolver } from './tweet-attachments';
29
- import * as i0 from "@angular/core";
30
- import * as i1 from "./chat-backend-base";
31
- import * as i2 from "./common/common.module";
32
- export class BantaSdkModule {
33
- constructor(chatBackend) {
34
- chatBackend.registerAttachmentScraper(new UrlAttachmentScraper());
35
- chatBackend.registerAttachmentResolver(new GiphyAttachmentResolver());
36
- chatBackend.registerAttachmentResolver(new YouTubeAttachmentResolver());
37
- chatBackend.registerAttachmentResolver(new TweetAttachmentResolver());
38
- chatBackend.registerAttachmentResolver(new UrlAttachmentResolver(chatBackend));
39
- }
40
- static configure(options) {
41
- return {
42
- ngModule: BantaSdkModule,
43
- providers: [
44
- {
45
- provide: BANTA_SDK_OPTIONS,
46
- useValue: options || {}
47
- },
48
- { provide: ChatBackendBase, useClass: ChatBackend }
49
- ]
50
- };
51
- }
52
- }
53
- BantaSdkModulefac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: BantaSdkModule, deps: [{ token: i1.ChatBackendBase }], target: i0.ɵɵFactoryTarget.NgModule });
54
- BantaSdkModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.12", ngImport: i0, type: BantaSdkModule, declarations: [BantaComponent,
55
- BantaLogoComponent,
56
- LiveMessageComponent], imports: [CommonModule,
57
- FormsModule, i2.BantaCommonModule, CommentsModule,
58
- ChatModule,
59
- EmojiModule,
60
- MatIconModule,
61
- MatButtonModule,
62
- MatTooltipModule,
63
- MatMenuModule,
64
- MatDialogModule,
65
- MatFormFieldModule,
66
- MatInputModule,
67
- MatProgressSpinnerModule,
68
- MatSnackBarModule,
69
- OverlayModule,
70
- PortalModule], exports: [BantaComponent,
71
- BantaLogoComponent,
72
- LiveMessageComponent,
73
- BantaCommonModule,
74
- ChatModule,
75
- CommentsModule,
76
- EmojiModule] });
77
- BantaSdkModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: BantaSdkModule, imports: [CommonModule,
78
- FormsModule,
79
- BantaCommonModule.forRoot(),
80
- CommentsModule,
81
- ChatModule,
82
- EmojiModule,
83
- MatIconModule,
84
- MatButtonModule,
85
- MatTooltipModule,
86
- MatMenuModule,
87
- MatDialogModule,
88
- MatFormFieldModule,
89
- MatInputModule,
90
- MatProgressSpinnerModule,
91
- MatSnackBarModule,
92
- OverlayModule,
93
- PortalModule, BantaCommonModule,
94
- ChatModule,
95
- CommentsModule,
96
- EmojiModule] });
97
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: BantaSdkModule, decorators: [{
98
- type: NgModule,
99
- args: [{
100
- imports: [
101
- CommonModule,
102
- FormsModule,
103
- BantaCommonModule.forRoot(),
104
- CommentsModule,
105
- ChatModule,
106
- EmojiModule,
107
- MatIconModule,
108
- MatButtonModule,
109
- MatTooltipModule,
110
- MatMenuModule,
111
- MatDialogModule,
112
- MatFormFieldModule,
113
- MatInputModule,
114
- MatProgressSpinnerModule,
115
- MatSnackBarModule,
116
- OverlayModule,
117
- PortalModule
118
- ],
119
- declarations: [
120
- BantaComponent,
121
- BantaLogoComponent,
122
- LiveMessageComponent
123
- ],
124
- exports: [
125
- BantaComponent,
126
- BantaLogoComponent,
127
- LiveMessageComponent,
128
- BantaCommonModule,
129
- ChatModule,
130
- CommentsModule,
131
- EmojiModule
132
- ]
133
- }]
134
- }], ctorParameters: function () { return [{ type: i1.ChatBackendBase }]; } });
135
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFudGEtc2RrLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3Nkay9zcmMvbGliL2JhbnRhLXNkay5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF1QixRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDdEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxj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QUNmLGtCQUFrQjt3QkFDbEIsY0FBYzt3QkFDZCx3QkFBd0I7d0JBQ3hCLGlCQUFpQjt3QkFDakIsYUFBYTt3QkFDYixZQUFZO3FCQUNmO29CQUNELFlBQVksRUFBRTt3QkFDVixjQUFjO3dCQUNkLGtCQUFrQjt3QkFDbEIsb0JBQW9CO3FCQUN2QjtvQkFDRCxPQUFPLEVBQUU7d0JBQ0wsY0FBYzt3QkFDZCxrQkFBa0I7d0JBQ2xCLG9CQUFvQjt3QkFDcEIsaUJBQWlCO3dCQUNqQixVQUFVO3dCQUNWLGNBQWM7d0JBQ2QsV0FBVztxQkFDZDtpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1lbnRzTW9kdWxlIH0gZnJvbSAnLi9jb21tZW50cyc7XHJcbmltcG9ydCB7IENoYXRNb2R1bGUgfSBmcm9tICcuL2NoYXQnO1xyXG5pbXBvcnQgeyBFbW9qaU1vZHVsZSB9IGZyb20gJy4vZW1vamknO1xyXG5pbXBvcnQgeyBCYW50YUNvbXBvbmVudCB9IGZyb20gJy4vYmFudGEvYmFudGEuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQmFudGFMb2dvQ29tcG9uZW50IH0gZnJvbSAnLi9iYW50YS1sb2dvLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBCYW50YUNvbW1vbk1vZHVsZSB9IGZyb20gJy4vY29tbW9uL2NvbW1vbi5tb2R1bGUnO1xyXG5pbXBvcnQgeyBMaXZlTWVzc2FnZUNvbXBvbmVudCB9IGZyb20gJy4vbGl2ZS1tZXNzYWdlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9idXR0b25cIjtcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9pY29uXCI7XHJcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcFwiO1xyXG5pbXBvcnQgeyBNYXRNZW51TW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL21lbnVcIjtcclxuaW1wb3J0IHsgTWF0RGlhbG9nTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RpYWxvZ1wiO1xyXG5pbXBvcnQgeyBNYXRTbmFja0Jhck1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXJcIjtcclxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGRcIjtcclxuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXRcIjtcclxuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLXNwaW5uZXJcIjtcclxuaW1wb3J0IHsgQ2hhdEJhY2tlbmQgfSBmcm9tICcuL2NoYXQtYmFja2VuZCc7XHJcbmltcG9ydCB7IFNka09wdGlvbnMgfSBmcm9tICcuL3Nkay1vcHRpb25zJztcclxuaW1wb3J0IHsgQkFOVEFfU0RLX09QVElPTlMgfSBmcm9tICcuL3Nkay1vcHRpb25zJztcclxuaW1wb3J0IHsgQ2hhdEJhY2tlbmRCYXNlIH0gZnJvbSAnLi9jaGF0LWJhY2tlbmQtYmFzZSc7XHJcbmltcG9ydCB7IE92ZXJsYXlNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XHJcbmltcG9ydCB7IFBvcnRhbE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xyXG5pbXBvcnQgeyBVcmxBdHRhY2htZW50UmVzb2x2ZXIsIFVybEF0dGFjaG1lbnRTY3JhcGVyIH0gZnJvbSAnLi91cmwtYXR0YWNobWVudHMnO1xyXG5pbXBvcnQgeyBZb3VUdWJlQXR0YWNobWVudFJlc29sdmVyIH0gZnJvbSAnLi95b3V0dWJlLWF0dGFjaG1lbnRzJztcclxuaW1wb3J0IHsgR2lwaHlBdHRhY2htZW50UmVzb2x2ZXIgfSBmcm9tICcuL2dpcGh5LWF0dGFjaG1lbnRzJztcclxuaW1wb3J0IHsgVHdlZXRBdHRhY2htZW50UmVzb2x2ZXIgfSBmcm9tICcuL3R3ZWV0LWF0dGFjaG1lbnRzJztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgICAgIEJhbnRhQ29tbW9uTW9kdWxlLmZvclJvb3QoKSxcclxuICAgICAgICBDb21tZW50c01vZHVsZSxcclxuICAgICAgICBDaGF0TW9kdWxlLFxyXG4gICAgICAgIEVtb2ppTW9kdWxlLFxyXG4gICAgICAgIFxyXG4gICAgICAgIE1hdEljb25Nb2R1bGUsXHJcbiAgICAgICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gICAgICAgIE1hdFRvb2x0aXBNb2R1bGUsXHJcbiAgICAgICAgTWF0TWVudU1vZHVsZSxcclxuICAgICAgICBNYXREaWFsb2dNb2R1bGUsXHJcbiAgICAgICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxyXG4gICAgICAgIE1hdElucHV0TW9kdWxlLFxyXG4gICAgICAgIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSxcclxuICAgICAgICBNYXRTbmFja0Jhck1vZHVsZSxcclxuICAgICAgICBPdmVybGF5TW9kdWxlLFxyXG4gICAgICAgIFBvcnRhbE1vZHVsZVxyXG4gICAgXSxcclxuICAgIGRlY2xhcmF0aW9uczogW1xyXG4gICAgICAgIEJhbnRhQ29tcG9uZW50LFxyXG4gICAgICAgIEJhbnRhTG9nb0NvbXBvbmVudCxcclxuICAgICAgICBMaXZlTWVzc2FnZUNvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIGV4cG9ydHM6IFtcclxuICAgICAgICBCYW50YUNvbXBvbmVudCxcclxuICAgICAgICBCYW50YUxvZ29Db21wb25lbnQsXHJcbiAgICAgICAgTGl2ZU1lc3NhZ2VDb21wb25lbnQsXHJcbiAgICAgICAgQmFudGFDb21tb25Nb2R1bGUsXHJcbiAgICAgICAgQ2hhdE1vZHVsZSxcclxuICAgICAgICBDb21tZW50c01vZHVsZSxcclxuICAgICAgICBFbW9qaU1vZHVsZVxyXG4gICAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQmFudGFTZGtNb2R1bGUge1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgY2hhdEJhY2tlbmQ6IENoYXRCYWNrZW5kQmFzZVxyXG4gICAgKSB7XHJcbiAgICAgICAgY2hhdEJhY2tlbmQucmVnaXN0ZXJBdHRhY2htZW50U2NyYXBlcihuZXcgVXJsQXR0YWNobWVudFNjcmFwZXIoKSk7XHJcbiAgICAgICAgY2hhdEJhY2tlbmQucmVnaXN0ZXJBdHRhY2htZW50UmVzb2x2ZXIobmV3IEdpcGh5QXR0YWNobWVudFJlc29sdmVyKCkpO1xyXG4gICAgICAgIGNoYXRCYWNrZW5kLnJlZ2lzdGVyQXR0YWNobWVudFJlc29sdmVyKG5ldyBZb3VUdWJlQXR0YWNobWVudFJlc29sdmVyKCkpO1xyXG4gICAgICAgIGNoYXRCYWNrZW5kLnJlZ2lzdGVyQXR0YWNobWVudFJlc29sdmVyKG5ldyBUd2VldEF0dGFjaG1lbnRSZXNvbHZlcigpKTtcclxuICAgICAgICBjaGF0QmFja2VuZC5yZWdpc3RlckF0dGFjaG1lbnRSZXNvbHZlcihuZXcgVXJsQXR0YWNobWVudFJlc29sdmVyKGNoYXRCYWNrZW5kKSk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHN0YXRpYyBjb25maWd1cmUob3B0aW9ucz86IFNka09wdGlvbnMpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPEJhbnRhU2RrTW9kdWxlPiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbmdNb2R1bGU6IEJhbnRhU2RrTW9kdWxlLFxyXG4gICAgICAgICAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICAgICAgICAgIHsgXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogQkFOVEFfU0RLX09QVElPTlMsIFxyXG4gICAgICAgICAgICAgICAgICAgIHVzZVZhbHVlOiBvcHRpb25zIHx8IHt9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBDaGF0QmFja2VuZEJhc2UsIHVzZUNsYXNzOiBDaGF0QmFja2VuZCB9XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0iXX0=
1
+ import { NgModule } from '@angular/core';
2
+ import { CommentsModule } from './comments';
3
+ import { ChatModule } from './chat';
4
+ import { EmojiModule } from './emoji';
5
+ import { BantaComponent } from './banta/banta.component';
6
+ import { BantaLogoComponent } from './banta-logo.component';
7
+ import { CommonModule } from '@angular/common';
8
+ import { FormsModule } from '@angular/forms';
9
+ import { BantaCommonModule } from './common/common.module';
10
+ import { LiveMessageComponent } from './live-message.component';
11
+ import { MatButtonModule } from "@angular/material/button";
12
+ import { MatIconModule } from "@angular/material/icon";
13
+ import { MatTooltipModule } from "@angular/material/tooltip";
14
+ import { MatMenuModule } from "@angular/material/menu";
15
+ import { MatDialogModule } from "@angular/material/dialog";
16
+ import { MatSnackBarModule } from "@angular/material/snack-bar";
17
+ import { MatFormFieldModule } from "@angular/material/form-field";
18
+ import { MatInputModule } from "@angular/material/input";
19
+ import { MatProgressSpinnerModule } from "@angular/material/progress-spinner";
20
+ import { ChatBackend } from './chat-backend';
21
+ import { BANTA_SDK_OPTIONS } from './sdk-options';
22
+ import { ChatBackendBase } from './chat-backend-base';
23
+ import { OverlayModule } from '@angular/cdk/overlay';
24
+ import { PortalModule } from '@angular/cdk/portal';
25
+ import { UrlAttachmentResolver, UrlAttachmentScraper } from './url-attachments';
26
+ import { YouTubeAttachmentResolver } from './youtube-attachments';
27
+ import { GiphyAttachmentResolver } from './giphy-attachments';
28
+ import { TweetAttachmentResolver } from './tweet-attachments';
29
+ import * as i0 from "@angular/core";
30
+ import * as i1 from "./chat-backend-base";
31
+ import * as i2 from "./common/common.module";
32
+ export class BantaSdkModule {
33
+ constructor(chatBackend) {
34
+ chatBackend.registerAttachmentScraper(new UrlAttachmentScraper());
35
+ chatBackend.registerAttachmentResolver(new GiphyAttachmentResolver());
36
+ chatBackend.registerAttachmentResolver(new YouTubeAttachmentResolver());
37
+ chatBackend.registerAttachmentResolver(new TweetAttachmentResolver());
38
+ chatBackend.registerAttachmentResolver(new UrlAttachmentResolver(chatBackend));
39
+ }
40
+ static configure(options) {
41
+ return {
42
+ ngModule: BantaSdkModule,
43
+ providers: [
44
+ {
45
+ provide: BANTA_SDK_OPTIONS,
46
+ useValue: options || {}
47
+ },
48
+ { provide: ChatBackendBase, useClass: ChatBackend }
49
+ ]
50
+ };
51
+ }
52
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: BantaSdkModule, deps: [{ token: i1.ChatBackendBase }], target: i0.ɵɵFactoryTarget.NgModule }); }
53
+ static { thismod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.9", ngImport: i0, type: BantaSdkModule, declarations: [BantaComponent,
54
+ BantaLogoComponent,
55
+ LiveMessageComponent], imports: [CommonModule,
56
+ FormsModule, i2.BantaCommonModule, CommentsModule,
57
+ ChatModule,
58
+ EmojiModule,
59
+ MatIconModule,
60
+ MatButtonModule,
61
+ MatTooltipModule,
62
+ MatMenuModule,
63
+ MatDialogModule,
64
+ MatFormFieldModule,
65
+ MatInputModule,
66
+ MatProgressSpinnerModule,
67
+ MatSnackBarModule,
68
+ OverlayModule,
69
+ PortalModule], exports: [BantaComponent,
70
+ BantaLogoComponent,
71
+ LiveMessageComponent,
72
+ BantaCommonModule,
73
+ ChatModule,
74
+ CommentsModule,
75
+ EmojiModule] }); }
76
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: BantaSdkModule, imports: [CommonModule,
77
+ FormsModule,
78
+ BantaCommonModule.forRoot(),
79
+ CommentsModule,
80
+ ChatModule,
81
+ EmojiModule,
82
+ MatIconModule,
83
+ MatButtonModule,
84
+ MatTooltipModule,
85
+ MatMenuModule,
86
+ MatDialogModule,
87
+ MatFormFieldModule,
88
+ MatInputModule,
89
+ MatProgressSpinnerModule,
90
+ MatSnackBarModule,
91
+ OverlayModule,
92
+ PortalModule, BantaCommonModule,
93
+ ChatModule,
94
+ CommentsModule,
95
+ EmojiModule] }); }
96
+ }
97
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: BantaSdkModule, decorators: [{
98
+ type: NgModule,
99
+ args: [{
100
+ imports: [
101
+ CommonModule,
102
+ FormsModule,
103
+ BantaCommonModule.forRoot(),
104
+ CommentsModule,
105
+ ChatModule,
106
+ EmojiModule,
107
+ MatIconModule,
108
+ MatButtonModule,
109
+ MatTooltipModule,
110
+ MatMenuModule,
111
+ MatDialogModule,
112
+ MatFormFieldModule,
113
+ MatInputModule,
114
+ MatProgressSpinnerModule,
115
+ MatSnackBarModule,
116
+ OverlayModule,
117
+ PortalModule
118
+ ],
119
+ declarations: [
120
+ BantaComponent,
121
+ BantaLogoComponent,
122
+ LiveMessageComponent
123
+ ],
124
+ exports: [
125
+ BantaComponent,
126
+ BantaLogoComponent,
127
+ LiveMessageComponent,
128
+ BantaCommonModule,
129
+ ChatModule,
130
+ CommentsModule,
131
+ EmojiModule
132
+ ]
133
+ }]
134
+ }], ctorParameters: () => [{ type: i1.ChatBackendBase }] });
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFudGEtc2RrLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3Nkay9zcmMvbGliL2JhbnRhLXNkay5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF1QixRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDdEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxj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QUNmLGtCQUFrQjt3QkFDbEIsY0FBYzt3QkFDZCx3QkFBd0I7d0JBQ3hCLGlCQUFpQjt3QkFDakIsYUFBYTt3QkFDYixZQUFZO3FCQUNmO29CQUNELFlBQVksRUFBRTt3QkFDVixjQUFjO3dCQUNkLGtCQUFrQjt3QkFDbEIsb0JBQW9CO3FCQUN2QjtvQkFDRCxPQUFPLEVBQUU7d0JBQ0wsY0FBYzt3QkFDZCxrQkFBa0I7d0JBQ2xCLG9CQUFvQjt3QkFDcEIsaUJBQWlCO3dCQUNqQixVQUFVO3dCQUNWLGNBQWM7d0JBQ2QsV0FBVztxQkFDZDtpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1lbnRzTW9kdWxlIH0gZnJvbSAnLi9jb21tZW50cyc7XHJcbmltcG9ydCB7IENoYXRNb2R1bGUgfSBmcm9tICcuL2NoYXQnO1xyXG5pbXBvcnQgeyBFbW9qaU1vZHVsZSB9IGZyb20gJy4vZW1vamknO1xyXG5pbXBvcnQgeyBCYW50YUNvbXBvbmVudCB9IGZyb20gJy4vYmFudGEvYmFudGEuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQmFudGFMb2dvQ29tcG9uZW50IH0gZnJvbSAnLi9iYW50YS1sb2dvLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBCYW50YUNvbW1vbk1vZHVsZSB9IGZyb20gJy4vY29tbW9uL2NvbW1vbi5tb2R1bGUnO1xyXG5pbXBvcnQgeyBMaXZlTWVzc2FnZUNvbXBvbmVudCB9IGZyb20gJy4vbGl2ZS1tZXNzYWdlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9idXR0b25cIjtcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9pY29uXCI7XHJcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcFwiO1xyXG5pbXBvcnQgeyBNYXRNZW51TW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL21lbnVcIjtcclxuaW1wb3J0IHsgTWF0RGlhbG9nTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RpYWxvZ1wiO1xyXG5pbXBvcnQgeyBNYXRTbmFja0Jhck1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXJcIjtcclxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGRcIjtcclxuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXRcIjtcclxuaW1wb3J0IHsgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLXNwaW5uZXJcIjtcclxuaW1wb3J0IHsgQ2hhdEJhY2tlbmQgfSBmcm9tICcuL2NoYXQtYmFja2VuZCc7XHJcbmltcG9ydCB7IFNka09wdGlvbnMgfSBmcm9tICcuL3Nkay1vcHRpb25zJztcclxuaW1wb3J0IHsgQkFOVEFfU0RLX09QVElPTlMgfSBmcm9tICcuL3Nkay1vcHRpb25zJztcclxuaW1wb3J0IHsgQ2hhdEJhY2tlbmRCYXNlIH0gZnJvbSAnLi9jaGF0LWJhY2tlbmQtYmFzZSc7XHJcbmltcG9ydCB7IE92ZXJsYXlNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XHJcbmltcG9ydCB7IFBvcnRhbE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xyXG5pbXBvcnQgeyBVcmxBdHRhY2htZW50UmVzb2x2ZXIsIFVybEF0dGFjaG1lbnRTY3JhcGVyIH0gZnJvbSAnLi91cmwtYXR0YWNobWVudHMnO1xyXG5pbXBvcnQgeyBZb3VUdWJlQXR0YWNobWVudFJlc29sdmVyIH0gZnJvbSAnLi95b3V0dWJlLWF0dGFjaG1lbnRzJztcclxuaW1wb3J0IHsgR2lwaHlBdHRhY2htZW50UmVzb2x2ZXIgfSBmcm9tICcuL2dpcGh5LWF0dGFjaG1lbnRzJztcclxuaW1wb3J0IHsgVHdlZXRBdHRhY2htZW50UmVzb2x2ZXIgfSBmcm9tICcuL3R3ZWV0LWF0dGFjaG1lbnRzJztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgICAgIEJhbnRhQ29tbW9uTW9kdWxlLmZvclJvb3QoKSxcclxuICAgICAgICBDb21tZW50c01vZHVsZSxcclxuICAgICAgICBDaGF0TW9kdWxlLFxyXG4gICAgICAgIEVtb2ppTW9kdWxlLFxyXG4gICAgICAgIFxyXG4gICAgICAgIE1hdEljb25Nb2R1bGUsXHJcbiAgICAgICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gICAgICAgIE1hdFRvb2x0aXBNb2R1bGUsXHJcbiAgICAgICAgTWF0TWVudU1vZHVsZSxcclxuICAgICAgICBNYXREaWFsb2dNb2R1bGUsXHJcbiAgICAgICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxyXG4gICAgICAgIE1hdElucHV0TW9kdWxlLFxyXG4gICAgICAgIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSxcclxuICAgICAgICBNYXRTbmFja0Jhck1vZHVsZSxcclxuICAgICAgICBPdmVybGF5TW9kdWxlLFxyXG4gICAgICAgIFBvcnRhbE1vZHVsZVxyXG4gICAgXSxcclxuICAgIGRlY2xhcmF0aW9uczogW1xyXG4gICAgICAgIEJhbnRhQ29tcG9uZW50LFxyXG4gICAgICAgIEJhbnRhTG9nb0NvbXBvbmVudCxcclxuICAgICAgICBMaXZlTWVzc2FnZUNvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIGV4cG9ydHM6IFtcclxuICAgICAgICBCYW50YUNvbXBvbmVudCxcclxuICAgICAgICBCYW50YUxvZ29Db21wb25lbnQsXHJcbiAgICAgICAgTGl2ZU1lc3NhZ2VDb21wb25lbnQsXHJcbiAgICAgICAgQmFudGFDb21tb25Nb2R1bGUsXHJcbiAgICAgICAgQ2hhdE1vZHVsZSxcclxuICAgICAgICBDb21tZW50c01vZHVsZSxcclxuICAgICAgICBFbW9qaU1vZHVsZVxyXG4gICAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQmFudGFTZGtNb2R1bGUge1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgY2hhdEJhY2tlbmQ6IENoYXRCYWNrZW5kQmFzZVxyXG4gICAgKSB7XHJcbiAgICAgICAgY2hhdEJhY2tlbmQucmVnaXN0ZXJBdHRhY2htZW50U2NyYXBlcihuZXcgVXJsQXR0YWNobWVudFNjcmFwZXIoKSk7XHJcbiAgICAgICAgY2hhdEJhY2tlbmQucmVnaXN0ZXJBdHRhY2htZW50UmVzb2x2ZXIobmV3IEdpcGh5QXR0YWNobWVudFJlc29sdmVyKCkpO1xyXG4gICAgICAgIGNoYXRCYWNrZW5kLnJlZ2lzdGVyQXR0YWNobWVudFJlc29sdmVyKG5ldyBZb3VUdWJlQXR0YWNobWVudFJlc29sdmVyKCkpO1xyXG4gICAgICAgIGNoYXRCYWNrZW5kLnJlZ2lzdGVyQXR0YWNobWVudFJlc29sdmVyKG5ldyBUd2VldEF0dGFjaG1lbnRSZXNvbHZlcigpKTtcclxuICAgICAgICBjaGF0QmFja2VuZC5yZWdpc3RlckF0dGFjaG1lbnRSZXNvbHZlcihuZXcgVXJsQXR0YWNobWVudFJlc29sdmVyKGNoYXRCYWNrZW5kKSk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHN0YXRpYyBjb25maWd1cmUob3B0aW9ucz86IFNka09wdGlvbnMpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPEJhbnRhU2RrTW9kdWxlPiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbmdNb2R1bGU6IEJhbnRhU2RrTW9kdWxlLFxyXG4gICAgICAgICAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICAgICAgICAgIHsgXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogQkFOVEFfU0RLX09QVElPTlMsIFxyXG4gICAgICAgICAgICAgICAgICAgIHVzZVZhbHVlOiBvcHRpb25zIHx8IHt9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBDaGF0QmFja2VuZEJhc2UsIHVzZUNsYXNzOiBDaGF0QmFja2VuZCB9XHJcbiAgICAgICAgICAgIF1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0iXX0=
@@ -0,0 +1,209 @@
1
+ import { Component, Input, Output, ViewChild } from "@angular/core";
2
+ import { Subject, Subscription } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../../chat-backend-base";
5
+ import * as i2 from "@angular/common";
6
+ import * as i3 from "@angular/forms";
7
+ import * as i4 from "@angular/material/button";
8
+ import * as i5 from "../../emoji/emoji-selector-button.component";
9
+ import * as i6 from "../chat-view/chat-view.component";
10
+ /**
11
+ * Chat component
12
+ */
13
+ export class BantaChatComponent {
14
+ constructor(backend) {
15
+ this.backend = backend;
16
+ this._subs = new Subscription();
17
+ this.user = null;
18
+ this._metadata = {};
19
+ this.signInLabel = 'Sign In';
20
+ this.sendLabel = 'Send';
21
+ this.permissionDeniedLabel = 'Send';
22
+ this.messageFieldPlaceholder = 'Chat';
23
+ this.emptyLabel = 'Be the first to chat';
24
+ this._selected = new Subject();
25
+ this._selected$ = this._selected.asObservable();
26
+ this._reported = new Subject();
27
+ this._reported$ = this._reported.asObservable();
28
+ this._upvoted = new Subject();
29
+ this._upvoted$ = this._upvoted.asObservable();
30
+ this._userSelected = new Subject();
31
+ this._userSelected$ = this._userSelected.asObservable();
32
+ this._permissionDeniedError = new Subject();
33
+ this._permissionDeniedError$ = this._permissionDeniedError.asObservable();
34
+ this._signInSelected = new Subject();
35
+ this._signInSelected$ = this._signInSelected.asObservable();
36
+ this._received = new Subject();
37
+ this._received$ = this._received.asObservable();
38
+ this.showEmojiPanel = false;
39
+ this.newMessage = {};
40
+ }
41
+ ngOnInit() {
42
+ this._subs.add(this.backend.userChanged.subscribe(user => this.user = user));
43
+ }
44
+ ngOnDestroy() {
45
+ this._subs.unsubscribe();
46
+ }
47
+ get source() {
48
+ return this._source;
49
+ }
50
+ set source(value) {
51
+ this._source = value;
52
+ }
53
+ get topicID() {
54
+ return this._source.identifier;
55
+ }
56
+ set topicID(value) {
57
+ this.setSourceFromTopicID(value);
58
+ }
59
+ /**
60
+ * Arbitrary metadata to send to the chat server. This can be used to provide context about the client to the server
61
+ * for things like validating authorization and other uses.
62
+ */
63
+ get metadata() { return this._metadata; }
64
+ set metadata(value) {
65
+ if (JSON.stringify(this._metadata) !== JSON.stringify(value)) {
66
+ this._metadata = value;
67
+ this.reloadSource();
68
+ }
69
+ }
70
+ reloadSource() {
71
+ clearTimeout(this._reloadSourceTimeout);
72
+ this._reloadSourceTimeout = setTimeout(() => {
73
+ this.setSourceFromTopicID(this.topicID);
74
+ });
75
+ }
76
+ async setSourceFromTopicID(topicID) {
77
+ if (this._source && this._source.close)
78
+ this._source.close();
79
+ this._source = null;
80
+ this._source = await this.backend.getSourceForTopic(topicID, {
81
+ metadata: this.metadata
82
+ });
83
+ }
84
+ get selected() { return this._selected$; }
85
+ get reported() { return this._reported$; }
86
+ get upvoted() { return this._upvoted$; }
87
+ get userSelected() { return this._userSelected$; }
88
+ get permissionDeniedError() { return this._permissionDeniedError$; }
89
+ get signInSelected() { return this._signInSelected$; }
90
+ get received() { return this._received$; }
91
+ onReceived(message) {
92
+ this._received.next(message);
93
+ }
94
+ showSignIn() {
95
+ this._signInSelected.next();
96
+ }
97
+ sendPermissionError(message) {
98
+ this._permissionDeniedError.next(message);
99
+ }
100
+ insertEmoji(emoji) {
101
+ let message = this.newMessage.message || '';
102
+ this.newMessage.message = message + emoji;
103
+ }
104
+ onKeyDown(event) {
105
+ // TODO
106
+ }
107
+ jumpToMessage(message) {
108
+ if (this.chatView)
109
+ this.chatView.jumpTo(message);
110
+ }
111
+ select(message) {
112
+ this._selected.next(message);
113
+ }
114
+ selectUser(message) {
115
+ this._userSelected.next(message);
116
+ }
117
+ report(message) {
118
+ this._reported.next(message);
119
+ }
120
+ async upvote(message) {
121
+ await this.source.likeMessage(message.id);
122
+ this._upvoted.next(message);
123
+ }
124
+ get canChat() {
125
+ if (!this.user)
126
+ return false;
127
+ // TODO
128
+ // if (!this.user.permissions)
129
+ // return true;
130
+ // if (!this.user.permissions.canChat)
131
+ // return true;
132
+ // return this.user.permissions?.canChat(this.source);
133
+ return true;
134
+ }
135
+ async sendMessage() {
136
+ if (!this.source)
137
+ return;
138
+ let text = (this.newMessage.message || '').trim();
139
+ this.newMessage.message = '';
140
+ if (text === '')
141
+ return;
142
+ let message = {
143
+ user: null,
144
+ sentAt: Date.now(),
145
+ likes: 0,
146
+ url: this.url ?? (typeof window !== 'undefined' ? location.href : undefined),
147
+ message: text
148
+ };
149
+ try {
150
+ const intercept = await this.shouldInterceptMessageSend?.(message, this.source);
151
+ if (!intercept) {
152
+ await this.source.send(message);
153
+ }
154
+ this.chatView.scrollToLatest();
155
+ this.inputElementRef.nativeElement.focus();
156
+ }
157
+ catch (e) {
158
+ console.error(`Failed to send message: `, message);
159
+ console.error(e);
160
+ }
161
+ }
162
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: BantaChatComponent, deps: [{ token: i1.ChatBackendBase }], target: i0.ɵɵFactoryTarget.Component }); }
163
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.9", type: BantaChatComponent, selector: "banta-chat", inputs: { shouldInterceptMessageSend: "shouldInterceptMessageSend", url: "url", source: "source", topicID: "topicID", metadata: "metadata", signInLabel: "signInLabel", sendLabel: "sendLabel", permissionDeniedLabel: "permissionDeniedLabel", messageFieldPlaceholder: "messageFieldPlaceholder", emptyLabel: "emptyLabel" }, outputs: { selected: "selected", reported: "reported", upvoted: "upvoted", userSelected: "userSelected", permissionDeniedError: "permissionDeniedError", signInSelected: "signInSelected", received: "received" }, viewQueries: [{ propertyName: "chatView", first: true, predicate: ["chatView"], descendants: true }, { propertyName: "inputElementRef", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<banta-chat-view \r\n #chatView\r\n [source]=\"source\"\r\n [emptyLabel]=\"emptyLabel\"\r\n (upvoted)=\"upvote($event)\"\r\n (reported)=\"report($event)\"\r\n (selected)=\"select($event)\"\r\n (received)=\"onReceived($event)\"\r\n (userSelected)=\"selectUser($event)\"\r\n ></banta-chat-view>\r\n\r\n<form class=\"new-message\" (submit)=\"sendMessage()\">\r\n \r\n <div class=\"entry-container\">\r\n <input\r\n #input\r\n type=\"text\"\r\n name=\"message\" \r\n autocomplete=\"off\"\r\n enterkeyhint=\"send\"\r\n [placeholder]=\"messageFieldPlaceholder\"\r\n (keydown)=\"onKeyDown($event)\"\r\n [(ngModel)]=\"newMessage.message\" />\r\n \r\n <emoji-selector-button\r\n (selected)=\"insertEmoji($event)\"\r\n overlayY=\"bottom\"\r\n overlayX=\"end\"\r\n originY=\"top\"\r\n ></emoji-selector-button>\r\n </div>\r\n\r\n <div class=\"actions\">\r\n\r\n <ng-container *ngIf=\"!user\">\r\n <button type=\"button\" (click)=\"showSignIn()\" mat-raised-button color=\"primary\">{{signInLabel}}</button>\r\n </ng-container>\r\n <ng-container *ngIf=\"user\">\r\n <button *ngIf=\"canChat\" [disabled]=\"!newMessage.message\" mat-raised-button color=\"primary\">{{sendLabel}}</button>\r\n <button *ngIf=\"!canChat\" type=\"button\" (click)=\"sendPermissionError()\" mat-raised-button color=\"primary\">{{permissionDeniedLabel}}</button>\r\n </ng-container>\r\n </div>\r\n</form>", styles: [":host{display:flex;flex-direction:column;border-radius:5px;padding:10px;flex-grow:1;font-size:10pt;min-height:1px}.entry-container{display:flex;flex-direction:row;flex-grow:1;position:relative}.entry-container emoji-selector-button{position:absolute;right:0;top:.15em}.entry-container input{height:2.6em;font-size:12pt;padding-left:1em}.entry-container input:-webkit-autofill,.entry-container input:-webkit-autofill:hover,.entry-container input:-webkit-autofill:focus{outline:1px solid #9da302;-webkit-text-fill-color:#9da302;-webkit-box-shadow:0 0 0px 1000px #211e07 inset;transition:background-color 5000s ease-in-out 0s;caret-color:#9da302}.entry-container emoji-selector-panel{pointer-events:none;opacity:0;position:absolute;bottom:3.5em;right:0}.entry-container emoji-selector-panel.visible{opacity:1;pointer-events:initial}form{display:flex;padding:.5em 0;align-items:center}form textarea{font-size:14pt;background:#000;color:#fff;border:1px solid #333;min-height:6em;width:100%}form input[type=text]{background:#fff;color:#000;border:1px solid #ccc;width:100%;height:3.5em}form .actions{margin-left:1em}form button{display:block;margin:0 0 0 auto}:host-context(.mat-dark-theme) form input[type=text]{background:#000;color:#fff;border:1px solid #333}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.EmojiSelectorButtonComponent, selector: "emoji-selector-button", inputs: ["disabled", "overlayX", "overlayY", "originX", "originY"], outputs: ["selected"] }, { kind: "component", type: i6.ChatViewComponent, selector: "banta-chat-view", inputs: ["source", "maxMessages", "emptyLabel"], outputs: ["selected", "userSelected", "reported", "upvoted", "received"] }] }); }
164
+ }
165
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: BantaChatComponent, decorators: [{
166
+ type: Component,
167
+ args: [{ selector: 'banta-chat', template: "<banta-chat-view \r\n #chatView\r\n [source]=\"source\"\r\n [emptyLabel]=\"emptyLabel\"\r\n (upvoted)=\"upvote($event)\"\r\n (reported)=\"report($event)\"\r\n (selected)=\"select($event)\"\r\n (received)=\"onReceived($event)\"\r\n (userSelected)=\"selectUser($event)\"\r\n ></banta-chat-view>\r\n\r\n<form class=\"new-message\" (submit)=\"sendMessage()\">\r\n \r\n <div class=\"entry-container\">\r\n <input\r\n #input\r\n type=\"text\"\r\n name=\"message\" \r\n autocomplete=\"off\"\r\n enterkeyhint=\"send\"\r\n [placeholder]=\"messageFieldPlaceholder\"\r\n (keydown)=\"onKeyDown($event)\"\r\n [(ngModel)]=\"newMessage.message\" />\r\n \r\n <emoji-selector-button\r\n (selected)=\"insertEmoji($event)\"\r\n overlayY=\"bottom\"\r\n overlayX=\"end\"\r\n originY=\"top\"\r\n ></emoji-selector-button>\r\n </div>\r\n\r\n <div class=\"actions\">\r\n\r\n <ng-container *ngIf=\"!user\">\r\n <button type=\"button\" (click)=\"showSignIn()\" mat-raised-button color=\"primary\">{{signInLabel}}</button>\r\n </ng-container>\r\n <ng-container *ngIf=\"user\">\r\n <button *ngIf=\"canChat\" [disabled]=\"!newMessage.message\" mat-raised-button color=\"primary\">{{sendLabel}}</button>\r\n <button *ngIf=\"!canChat\" type=\"button\" (click)=\"sendPermissionError()\" mat-raised-button color=\"primary\">{{permissionDeniedLabel}}</button>\r\n </ng-container>\r\n </div>\r\n</form>", styles: [":host{display:flex;flex-direction:column;border-radius:5px;padding:10px;flex-grow:1;font-size:10pt;min-height:1px}.entry-container{display:flex;flex-direction:row;flex-grow:1;position:relative}.entry-container emoji-selector-button{position:absolute;right:0;top:.15em}.entry-container input{height:2.6em;font-size:12pt;padding-left:1em}.entry-container input:-webkit-autofill,.entry-container input:-webkit-autofill:hover,.entry-container input:-webkit-autofill:focus{outline:1px solid #9da302;-webkit-text-fill-color:#9da302;-webkit-box-shadow:0 0 0px 1000px #211e07 inset;transition:background-color 5000s ease-in-out 0s;caret-color:#9da302}.entry-container emoji-selector-panel{pointer-events:none;opacity:0;position:absolute;bottom:3.5em;right:0}.entry-container emoji-selector-panel.visible{opacity:1;pointer-events:initial}form{display:flex;padding:.5em 0;align-items:center}form textarea{font-size:14pt;background:#000;color:#fff;border:1px solid #333;min-height:6em;width:100%}form input[type=text]{background:#fff;color:#000;border:1px solid #ccc;width:100%;height:3.5em}form .actions{margin-left:1em}form button{display:block;margin:0 0 0 auto}:host-context(.mat-dark-theme) form input[type=text]{background:#000;color:#fff;border:1px solid #333}\n"] }]
168
+ }], ctorParameters: () => [{ type: i1.ChatBackendBase }], propDecorators: { shouldInterceptMessageSend: [{
169
+ type: Input
170
+ }], url: [{
171
+ type: Input
172
+ }], source: [{
173
+ type: Input
174
+ }], topicID: [{
175
+ type: Input
176
+ }], metadata: [{
177
+ type: Input
178
+ }], signInLabel: [{
179
+ type: Input
180
+ }], sendLabel: [{
181
+ type: Input
182
+ }], permissionDeniedLabel: [{
183
+ type: Input
184
+ }], messageFieldPlaceholder: [{
185
+ type: Input
186
+ }], emptyLabel: [{
187
+ type: Input
188
+ }], selected: [{
189
+ type: Output
190
+ }], reported: [{
191
+ type: Output
192
+ }], upvoted: [{
193
+ type: Output
194
+ }], userSelected: [{
195
+ type: Output
196
+ }], permissionDeniedError: [{
197
+ type: Output
198
+ }], signInSelected: [{
199
+ type: Output
200
+ }], received: [{
201
+ type: Output
202
+ }], chatView: [{
203
+ type: ViewChild,
204
+ args: ['chatView']
205
+ }], inputElementRef: [{
206
+ type: ViewChild,
207
+ args: ['input']
208
+ }] } });
209
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFudGEtY2hhdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZGsvc3JjL2xpYi9jaGF0L2JhbnRhLWNoYXQvYmFudGEtY2hhdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZGsvc3JjL2xpYi9jaGF0L2JhbnRhLWNoYXQvYmFudGEtY2hhdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFjLE1BQU0sZUFBZSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxPQUFPLEVBQWMsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7OztBQU96RDs7R0FFRztBQU1ILE1BQU0sT0FBTyxrQkFBa0I7SUFDM0IsWUFDWSxPQUF5QjtRQUF6QixZQUFPLEdBQVAsT0FBTyxDQUFrQjtRQUs3QixVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNuQyxTQUFJLEdBQVUsSUFBSSxDQUFDO1FBK0JYLGNBQVMsR0FBd0IsRUFBRSxDQUFDO1FBK0JuQyxnQkFBVyxHQUFHLFNBQVMsQ0FBQztRQUN4QixjQUFTLEdBQUcsTUFBTSxDQUFDO1FBQ25CLDBCQUFxQixHQUFHLE1BQU0sQ0FBQztRQUMvQiw0QkFBdUIsR0FBRyxNQUFNLENBQUM7UUFDakMsZUFBVSxHQUFHLHNCQUFzQixDQUFDO1FBRXJDLGNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBZSxDQUFDO1FBQ3ZDLGVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzNDLGNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBZSxDQUFDO1FBQ3ZDLGVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzNDLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBZSxD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QXJCLE1BQU07Z0JBQ08sT0FBTztzQkFBcEIsTUFBTTtnQkFDTyxZQUFZO3NCQUF6QixNQUFNO2dCQUNPLHFCQUFxQjtzQkFBbEMsTUFBTTtnQkFDTyxjQUFjO3NCQUEzQixNQUFNO2dCQUNPLFFBQVE7c0JBQXJCLE1BQU07Z0JBMEJnQixRQUFRO3NCQUE5QixTQUFTO3VCQUFDLFVBQVU7Z0JBQ0QsZUFBZTtzQkFBbEMsU0FBUzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IFVzZXIsIENoYXRNZXNzYWdlLCBOZXdNZXNzYWdlRm9ybSB9IGZyb20gJ0BiYW50YS9jb21tb24nO1xyXG5pbXBvcnQgeyBDaGF0Vmlld0NvbXBvbmVudCB9IGZyb20gJy4uL2NoYXQtdmlldy9jaGF0LXZpZXcuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2hhdEJhY2tlbmRCYXNlIH0gZnJvbSBcIi4uLy4uL2NoYXQtYmFja2VuZC1iYXNlXCI7XHJcbmltcG9ydCB7IENoYXRTb3VyY2VCYXNlIH0gZnJvbSBcIi4uLy4uL2NoYXQtc291cmNlLWJhc2VcIjtcclxuXHJcbi8qKlxyXG4gKiBDaGF0IGNvbXBvbmVudFxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2JhbnRhLWNoYXQnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2JhbnRhLWNoYXQuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vYmFudGEtY2hhdC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCYW50YUNoYXRDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBiYWNrZW5kIDogQ2hhdEJhY2tlbmRCYXNlXHJcbiAgICApIHtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9zb3VyY2UgOiBDaGF0U291cmNlQmFzZTtcclxuICAgIHByaXZhdGUgX3N1YnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcbiAgICB1c2VyIDogVXNlciA9IG51bGw7XHJcblxyXG4gICAgQElucHV0KCkgc2hvdWxkSW50ZXJjZXB0TWVzc2FnZVNlbmQ/OiAobWVzc2FnZTogQ2hhdE1lc3NhZ2UsIHNvdXJjZTogQ2hhdFNvdXJjZUJhc2UpID0+IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+O1xyXG4gICAgQElucHV0KCkgdXJsOiBzdHJpbmc7XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5fc3Vicy5hZGQodGhpcy5iYWNrZW5kLnVzZXJDaGFuZ2VkLnN1YnNjcmliZSh1c2VyID0+IHRoaXMudXNlciA9IHVzZXIpKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLl9zdWJzLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIGdldCBzb3VyY2UoKSA6IENoYXRTb3VyY2VCYXNlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc291cmNlO1xyXG4gICAgfVxyXG5cclxuICAgIHNldCBzb3VyY2UodmFsdWUpIHtcclxuICAgICAgICB0aGlzLl9zb3VyY2UgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IHRvcGljSUQoKSA6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZS5pZGVudGlmaWVyO1xyXG4gICAgfVxyXG5cclxuICAgIHNldCB0b3BpY0lEKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTb3VyY2VGcm9tVG9waWNJRCh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEFyYml0cmFyeSBtZXRhZGF0YSB0byBzZW5kIHRvIHRoZSBjaGF0IHNlcnZlci4gVGhpcyBjYW4gYmUgdXNlZCB0byBwcm92aWRlIGNvbnRleHQgYWJvdXQgdGhlIGNsaWVudCB0byB0aGUgc2VydmVyXHJcbiAgICAgKiBmb3IgdGhpbmdzIGxpa2UgdmFsaWRhdGluZyBhdXRob3JpemF0aW9uIGFuZCBvdGhlciB1c2VzLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBnZXQgbWV0YWRhdGEoKSB7IHJldHVybiB0aGlzLl9tZXRhZGF0YTsgfVxyXG4gICAgc2V0IG1ldGFkYXRhKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KHRoaXMuX21ldGFkYXRhKSAhPT0gSlNPTi5zdHJpbmdpZnkodmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMucmVsb2FkU291cmNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3JlbG9hZFNvdXJjZVRpbWVvdXQ7XHJcbiAgICBwcml2YXRlIHJlbG9hZFNvdXJjZSgpIHtcclxuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fcmVsb2FkU291cmNlVGltZW91dCk7XHJcbiAgICAgICAgdGhpcy5fcmVsb2FkU291cmNlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNldFNvdXJjZUZyb21Ub3BpY0lEKHRoaXMudG9waWNJRCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBzZXRTb3VyY2VGcm9tVG9waWNJRCh0b3BpY0lEIDogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3NvdXJjZSAmJiB0aGlzLl9zb3VyY2UuY2xvc2UpXHJcbiAgICAgICAgICAgIHRoaXMuX3NvdXJjZS5jbG9zZSgpO1xyXG4gICAgICAgIHRoaXMuX3NvdXJjZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5fc291cmNlID0gYXdhaXQgdGhpcy5iYWNrZW5kLmdldFNvdXJjZUZvclRvcGljKHRvcGljSUQsIHsgXHJcbiAgICAgICAgICAgIG1ldGFkYXRhOiB0aGlzLm1ldGFkYXRhXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgc2lnbkluTGFiZWwgPSAnU2lnbiBJbic7XHJcbiAgICBASW5wdXQoKSBzZW5kTGFiZWwgPSAnU2VuZCc7XHJcbiAgICBASW5wdXQoKSBwZXJtaXNzaW9uRGVuaWVkTGFiZWwgPSAnU2VuZCc7XHJcbiAgICBASW5wdXQoKSBtZXNzYWdlRmllbGRQbGFjZWhvbGRlciA9ICdDaGF0JztcclxuICAgIEBJbnB1dCgpIGVtcHR5TGFiZWwgPSAnQmUgdGhlIGZpcnN0IHRvIGNoYXQnO1xyXG5cclxuICAgIHByaXZhdGUgX3NlbGVjdGVkID0gbmV3IFN1YmplY3Q8Q2hhdE1lc3NhZ2U+KCk7XHJcbiAgICBwcml2YXRlIF9zZWxlY3RlZCQgPSB0aGlzLl9zZWxlY3RlZC5hc09ic2VydmFibGUoKTtcclxuICAgIHByaXZhdGUgX3JlcG9ydGVkID0gbmV3IFN1YmplY3Q8Q2hhdE1lc3NhZ2U+KCk7XHJcbiAgICBwcml2YXRlIF9yZXBvcnRlZCQgPSB0aGlzLl9yZXBvcnRlZC5hc09ic2VydmFibGUoKTtcclxuICAgIHByaXZhdGUgX3Vwdm90ZWQgPSBuZXcgU3ViamVjdDxDaGF0TWVzc2FnZT4oKTtcclxuICAgIHByaXZhdGUgX3Vwdm90ZWQkID0gdGhpcy5fdXB2b3RlZC5hc09ic2VydmFibGUoKTtcclxuICAgIHByaXZhdGUgX3VzZXJTZWxlY3RlZCA9IG5ldyBTdWJqZWN0PENoYXRNZXNzYWdlPigpO1xyXG4gICAgcHJpdmF0ZSBfdXNlclNlbGVjdGVkJCA9IHRoaXMuX3VzZXJTZWxlY3RlZC5hc09ic2VydmFibGUoKTtcclxuICAgIHByaXZhdGUgX3Blcm1pc3Npb25EZW5pZWRFcnJvciA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICAgIHByaXZhdGUgX3Blcm1pc3Npb25EZW5pZWRFcnJvciQgPSB0aGlzLl9wZXJtaXNzaW9uRGVuaWVkRXJyb3IuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBwcml2YXRlIF9zaWduSW5TZWxlY3RlZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgICBwcml2YXRlIF9zaWduSW5TZWxlY3RlZCQgPSB0aGlzLl9zaWduSW5TZWxlY3RlZC5hc09ic2VydmFibGUoKTtcclxuICAgIHByaXZhdGUgX3JlY2VpdmVkID0gbmV3IFN1YmplY3Q8Q2hhdE1lc3NhZ2U+KCk7XHJcbiAgICBwcml2YXRlIF9yZWNlaXZlZCQgPSB0aGlzLl9yZWNlaXZlZC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgICBAT3V0cHV0KCkgZ2V0IHNlbGVjdGVkKCkgeyByZXR1cm4gdGhpcy5fc2VsZWN0ZWQkOyB9XHJcbiAgICBAT3V0cHV0KCkgZ2V0IHJlcG9ydGVkKCkgeyByZXR1cm4gdGhpcy5fcmVwb3J0ZWQkOyB9XHJcbiAgICBAT3V0cHV0KCkgZ2V0IHVwdm90ZWQoKSB7IHJldHVybiB0aGlzLl91cHZvdGVkJDsgfVxyXG4gICAgQE91dHB1dCgpIGdldCB1c2VyU2VsZWN0ZWQoKSB7IHJldHVybiB0aGlzLl91c2VyU2VsZWN0ZWQkOyB9XHJcbiAgICBAT3V0cHV0KCkgZ2V0IHBlcm1pc3Npb25EZW5pZWRFcnJvcigpIHsgcmV0dXJuIHRoaXMuX3Blcm1pc3Npb25EZW5pZWRFcnJvciQ7IH1cclxuICAgIEBPdXRwdXQoKSBnZXQgc2lnbkluU2VsZWN0ZWQoKSB7IHJldHVybiB0aGlzLl9zaWduSW5TZWxlY3RlZCQ7IH1cclxuICAgIEBPdXRwdXQoKSBnZXQgcmVjZWl2ZWQoKSB7IHJldHVybiB0aGlzLl9yZWNlaXZlZCQ7IH1cclxuXHJcbiAgICBvblJlY2VpdmVkKG1lc3NhZ2U6IENoYXRNZXNzYWdlKSB7XHJcbiAgICAgICAgdGhpcy5fcmVjZWl2ZWQubmV4dChtZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93RW1vamlQYW5lbCA9IGZhbHNlO1xyXG5cclxuICAgIHNob3dTaWduSW4oKSB7XHJcbiAgICAgICAgdGhpcy5fc2lnbkluU2VsZWN0ZWQubmV4dCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbmRQZXJtaXNzaW9uRXJyb3IobWVzc2FnZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fcGVybWlzc2lvbkRlbmllZEVycm9yLm5leHQobWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaW5zZXJ0RW1vamkoZW1vamkpIHtcclxuICAgICAgICBsZXQgbWVzc2FnZSA9IHRoaXMubmV3TWVzc2FnZS5tZXNzYWdlIHx8ICcnO1xyXG5cclxuICAgICAgICB0aGlzLm5ld01lc3NhZ2UubWVzc2FnZSA9IG1lc3NhZ2UgKyBlbW9qaTtcclxuICAgIH1cclxuXHJcbiAgICBvbktleURvd24oZXZlbnQgOiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICAgICAgLy8gVE9ET1xyXG4gICAgfVxyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ2NoYXRWaWV3JykgY2hhdFZpZXcgOiBDaGF0Vmlld0NvbXBvbmVudDtcclxuICAgIEBWaWV3Q2hpbGQoJ2lucHV0JykgaW5wdXRFbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xyXG5cclxuICAgIGp1bXBUb01lc3NhZ2UobWVzc2FnZSA6IENoYXRNZXNzYWdlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2hhdFZpZXcpXHJcbiAgICAgICAgICAgIHRoaXMuY2hhdFZpZXcuanVtcFRvKG1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdChtZXNzYWdlIDogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RlZC5uZXh0KG1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdFVzZXIobWVzc2FnZSA6IENoYXRNZXNzYWdlKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlclNlbGVjdGVkLm5leHQobWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVwb3J0KG1lc3NhZ2UgOiBDaGF0TWVzc2FnZSkge1xyXG4gICAgICAgIHRoaXMuX3JlcG9ydGVkLm5leHQobWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdXB2b3RlKG1lc3NhZ2UgOiBDaGF0TWVzc2FnZSkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuc291cmNlLmxpa2VNZXNzYWdlKG1lc3NhZ2UuaWQpO1xyXG4gICAgICAgIHRoaXMuX3Vwdm90ZWQubmV4dChtZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgY2FuQ2hhdCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMudXNlcilcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICAvLyBUT0RPXHJcbiAgICAgICAgLy8gaWYgKCF0aGlzLnVzZXIucGVybWlzc2lvbnMpXHJcbiAgICAgICAgLy8gICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgICAgICAvLyBpZiAoIXRoaXMudXNlci5wZXJtaXNzaW9ucy5jYW5DaGF0KVxyXG4gICAgICAgIC8vICAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgICAgICAgLy8gcmV0dXJuIHRoaXMudXNlci5wZXJtaXNzaW9ucz8uY2FuQ2hhdCh0aGlzLnNvdXJjZSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgbmV3TWVzc2FnZSA6IE5ld01lc3NhZ2VGb3JtID0ge307XHJcblxyXG4gICAgYXN5bmMgc2VuZE1lc3NhZ2UoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNvdXJjZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgdGV4dCA9ICh0aGlzLm5ld01lc3NhZ2UubWVzc2FnZSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgIHRoaXMubmV3TWVzc2FnZS5tZXNzYWdlID0gJyc7XHJcblxyXG4gICAgICAgIGlmICh0ZXh0ID09PSAnJylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgbWVzc2FnZSA6IENoYXRNZXNzYWdlID0ge1xyXG4gICAgICAgICAgICB1c2VyOiBudWxsLFxyXG4gICAgICAgICAgICBzZW50QXQ6IERhdGUubm93KCksXHJcbiAgICAgICAgICAgIGxpa2VzOiAwLFxyXG4gICAgICAgICAgICB1cmw6IHRoaXMudXJsID8/ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IGxvY2F0aW9uLmhyZWYgOiB1bmRlZmluZWQpLFxyXG4gICAgICAgICAgICBtZXNzYWdlOiB0ZXh0XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgaW50ZXJjZXB0ID0gYXdhaXQgdGhpcy5zaG91bGRJbnRlcmNlcHRNZXNzYWdlU2VuZD8uKG1lc3NhZ2UsIHRoaXMuc291cmNlKTtcclxuICAgICAgICAgICAgaWYgKCFpbnRlcmNlcHQpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc291cmNlLnNlbmQobWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2hhdFZpZXcuc2Nyb2xsVG9MYXRlc3QoKTtcclxuICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIHNlbmQgbWVzc2FnZTogYCwgbWVzc2FnZSk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIjxiYW50YS1jaGF0LXZpZXcgXHJcbiAgICAjY2hhdFZpZXdcclxuICAgIFtzb3VyY2VdPVwic291cmNlXCJcclxuICAgIFtlbXB0eUxhYmVsXT1cImVtcHR5TGFiZWxcIlxyXG4gICAgKHVwdm90ZWQpPVwidXB2b3RlKCRldmVudClcIlxyXG4gICAgKHJlcG9ydGVkKT1cInJlcG9ydCgkZXZlbnQpXCJcclxuICAgIChzZWxlY3RlZCk9XCJzZWxlY3QoJGV2ZW50KVwiXHJcbiAgICAocmVjZWl2ZWQpPVwib25SZWNlaXZlZCgkZXZlbnQpXCJcclxuICAgICh1c2VyU2VsZWN0ZWQpPVwic2VsZWN0VXNlcigkZXZlbnQpXCJcclxuICAgID48L2JhbnRhLWNoYXQtdmlldz5cclxuXHJcbjxmb3JtIGNsYXNzPVwibmV3LW1lc3NhZ2VcIiAoc3VibWl0KT1cInNlbmRNZXNzYWdlKClcIj5cclxuICAgIFxyXG4gICAgPGRpdiBjbGFzcz1cImVudHJ5LWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAjaW5wdXRcclxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICBuYW1lPVwibWVzc2FnZVwiIFxyXG4gICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICBlbnRlcmtleWhpbnQ9XCJzZW5kXCJcclxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIm1lc3NhZ2VGaWVsZFBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgICAgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudClcIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm5ld01lc3NhZ2UubWVzc2FnZVwiIC8+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIDxlbW9qaS1zZWxlY3Rvci1idXR0b25cclxuICAgICAgICAgICAgKHNlbGVjdGVkKT1cImluc2VydEVtb2ppKCRldmVudClcIlxyXG4gICAgICAgICAgICBvdmVybGF5WT1cImJvdHRvbVwiXHJcbiAgICAgICAgICAgIG92ZXJsYXlYPVwiZW5kXCJcclxuICAgICAgICAgICAgb3JpZ2luWT1cInRvcFwiXHJcbiAgICAgICAgICAgID48L2Vtb2ppLXNlbGVjdG9yLWJ1dHRvbj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zXCI+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdXNlclwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwic2hvd1NpZ25JbigpXCIgbWF0LXJhaXNlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCI+e3tzaWduSW5MYWJlbH19PC9idXR0b24+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInVzZXJcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImNhbkNoYXRcIiBbZGlzYWJsZWRdPVwiIW5ld01lc3NhZ2UubWVzc2FnZVwiIG1hdC1yYWlzZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiPnt7c2VuZExhYmVsfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFjYW5DaGF0XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJzZW5kUGVybWlzc2lvbkVycm9yKClcIiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIj57e3Blcm1pc3Npb25EZW5pZWRMYWJlbH19PC9idXR0b24+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuPC9mb3JtPiJdfQ==