@vendasta/social-posts 5.46.0 → 5.48.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/esm2020/lib/_internal/blog-website.api.service.mjs +40 -0
  2. package/esm2020/lib/_internal/drafts.api.service.mjs +82 -0
  3. package/esm2020/lib/_internal/enums/drafts-api.enum.mjs +14 -0
  4. package/esm2020/lib/_internal/enums/drafts.enum.mjs +27 -0
  5. package/esm2020/lib/_internal/enums/engagement.enum.mjs +13 -0
  6. package/esm2020/lib/_internal/enums/index.mjs +7 -1
  7. package/esm2020/lib/_internal/enums/provisioning.enum.mjs +14 -0
  8. package/esm2020/lib/_internal/enums/social-content.enum.mjs +51 -0
  9. package/esm2020/lib/_internal/enums/stock-image.enum.mjs +19 -0
  10. package/esm2020/lib/_internal/image-library.api.service.mjs +40 -0
  11. package/esm2020/lib/_internal/index.mjs +7 -1
  12. package/esm2020/lib/_internal/interfaces/blog-website-info.interface.mjs +8 -0
  13. package/esm2020/lib/_internal/interfaces/drafts-api.interface.mjs +2 -0
  14. package/esm2020/lib/_internal/interfaces/drafts.interface.mjs +8 -0
  15. package/esm2020/lib/_internal/interfaces/engagement.interface.mjs +2 -0
  16. package/esm2020/lib/_internal/interfaces/index.mjs +1 -1
  17. package/esm2020/lib/_internal/interfaces/provisioning.interface.mjs +8 -0
  18. package/esm2020/lib/_internal/interfaces/social-content.interface.mjs +2 -0
  19. package/esm2020/lib/_internal/interfaces/social-post-stats.interface.mjs +1 -1
  20. package/esm2020/lib/_internal/interfaces/stock-image.interface.mjs +8 -0
  21. package/esm2020/lib/_internal/multilocation-post.api.service.mjs +2 -3
  22. package/esm2020/lib/_internal/objects/blog-website-info.mjs +149 -0
  23. package/esm2020/lib/_internal/objects/drafts-api.mjs +622 -0
  24. package/esm2020/lib/_internal/objects/drafts.mjs +446 -0
  25. package/esm2020/lib/_internal/objects/engagement.mjs +221 -0
  26. package/esm2020/lib/_internal/objects/index.mjs +9 -2
  27. package/esm2020/lib/_internal/objects/provisioning.mjs +43 -0
  28. package/esm2020/lib/_internal/objects/social-content.mjs +384 -0
  29. package/esm2020/lib/_internal/objects/social-post-stats.mjs +7 -1
  30. package/esm2020/lib/_internal/objects/stock-image.mjs +168 -0
  31. package/esm2020/lib/_internal/provisioning.api.service.mjs +38 -0
  32. package/esm2020/lib/_internal/social-content.api.service.mjs +40 -0
  33. package/esm2020/lib/_internal/social-post-engagements.api.service.mjs +40 -0
  34. package/esm2020/lib/drafts.service.mjs +46 -0
  35. package/esm2020/lib/index.mjs +2 -1
  36. package/esm2020/lib/multilocation-posts.service.mjs +1 -1
  37. package/fesm2015/vendasta-social-posts.mjs +4202 -1755
  38. package/fesm2015/vendasta-social-posts.mjs.map +1 -1
  39. package/fesm2020/vendasta-social-posts.mjs +4202 -1755
  40. package/fesm2020/vendasta-social-posts.mjs.map +1 -1
  41. package/lib/_internal/blog-website.api.service.d.ts +13 -0
  42. package/lib/_internal/drafts.api.service.d.ts +23 -0
  43. package/lib/_internal/enums/drafts-api.enum.d.ts +6 -0
  44. package/lib/_internal/enums/drafts.enum.d.ts +18 -0
  45. package/lib/_internal/enums/engagement.enum.d.ts +5 -0
  46. package/lib/_internal/enums/index.d.ts +6 -0
  47. package/lib/_internal/enums/provisioning.enum.d.ts +6 -0
  48. package/lib/_internal/enums/social-content.enum.d.ts +39 -0
  49. package/lib/_internal/enums/stock-image.enum.d.ts +10 -0
  50. package/lib/_internal/image-library.api.service.d.ts +13 -0
  51. package/lib/_internal/index.d.ts +6 -0
  52. package/lib/_internal/interfaces/blog-website-info.interface.d.ts +24 -0
  53. package/lib/_internal/interfaces/drafts-api.interface.d.ts +109 -0
  54. package/lib/_internal/interfaces/drafts.interface.d.ts +82 -0
  55. package/lib/_internal/interfaces/engagement.interface.d.ts +37 -0
  56. package/lib/_internal/interfaces/index.d.ts +8 -1
  57. package/lib/_internal/interfaces/provisioning.interface.d.ts +8 -0
  58. package/lib/_internal/interfaces/social-content.interface.d.ts +71 -0
  59. package/lib/_internal/interfaces/social-post-stats.interface.d.ts +1 -0
  60. package/lib/_internal/interfaces/stock-image.interface.d.ts +30 -0
  61. package/lib/_internal/multilocation-post.api.service.d.ts +1 -1
  62. package/lib/_internal/objects/blog-website-info.d.ts +41 -0
  63. package/lib/_internal/objects/drafts-api.d.ts +162 -0
  64. package/lib/_internal/objects/drafts.d.ts +120 -0
  65. package/lib/_internal/objects/engagement.d.ts +60 -0
  66. package/lib/_internal/objects/index.d.ts +8 -1
  67. package/lib/_internal/objects/provisioning.d.ts +13 -0
  68. package/lib/_internal/objects/social-content.d.ts +103 -0
  69. package/lib/_internal/objects/social-post-stats.d.ts +1 -0
  70. package/lib/_internal/objects/stock-image.d.ts +47 -0
  71. package/lib/_internal/provisioning.api.service.d.ts +14 -0
  72. package/lib/_internal/social-content.api.service.d.ts +13 -0
  73. package/lib/_internal/social-post-engagements.api.service.d.ts +13 -0
  74. package/lib/drafts.service.d.ts +20 -0
  75. package/lib/index.d.ts +1 -0
  76. package/lib/multilocation-posts.service.d.ts +1 -1
  77. package/package.json +1 -1
@@ -0,0 +1,622 @@
1
+ import { GMBPostCustomization, DraftMedia, DraftMetaData, DraftYoutubeCustomization, SSIDDraftType, DraftTikTokCustomization, DraftBlogPostCustomization, CampaignCustomization, Draft, MlDraftPost } from './drafts';
2
+ import * as e from '../enums';
3
+ export function enumStringToValue(enumRef, value) {
4
+ if (typeof value === 'number') {
5
+ return value;
6
+ }
7
+ return enumRef[value];
8
+ }
9
+ export class CreateDraftRequest {
10
+ static fromProto(proto) {
11
+ let m = new CreateDraftRequest();
12
+ m = Object.assign(m, proto);
13
+ if (proto.postDateTime) {
14
+ m.postDateTime = new Date(proto.postDateTime);
15
+ }
16
+ if (proto.gmbPostCustomization) {
17
+ m.gmbPostCustomization = GMBPostCustomization.fromProto(proto.gmbPostCustomization);
18
+ }
19
+ if (proto.media) {
20
+ m.media = proto.media.map(DraftMedia.fromProto);
21
+ }
22
+ if (proto.draftType) {
23
+ m.draftType = enumStringToValue(e.DraftType, proto.draftType);
24
+ }
25
+ if (proto.metadata) {
26
+ m.metadata = proto.metadata.map(DraftMetaData.fromProto);
27
+ }
28
+ if (proto.youtubeCustomization) {
29
+ m.youtubeCustomization = DraftYoutubeCustomization.fromProto(proto.youtubeCustomization);
30
+ }
31
+ if (proto.ssidDraftTypes) {
32
+ m.ssidDraftTypes = proto.ssidDraftTypes.map(SSIDDraftType.fromProto);
33
+ }
34
+ if (proto.tiktokCustomization) {
35
+ m.tiktokCustomization = DraftTikTokCustomization.fromProto(proto.tiktokCustomization);
36
+ }
37
+ if (proto.blogPostCustomization) {
38
+ m.blogPostCustomization = DraftBlogPostCustomization.fromProto(proto.blogPostCustomization);
39
+ }
40
+ if (proto.campaignCustomization) {
41
+ m.campaignCustomization = CampaignCustomization.fromProto(proto.campaignCustomization);
42
+ }
43
+ return m;
44
+ }
45
+ constructor(kwargs) {
46
+ if (!kwargs) {
47
+ return;
48
+ }
49
+ Object.assign(this, kwargs);
50
+ }
51
+ toApiJson() {
52
+ const toReturn = {};
53
+ if (typeof this.accountGroupId !== 'undefined') {
54
+ toReturn['accountGroupId'] = this.accountGroupId;
55
+ }
56
+ if (typeof this.draftText !== 'undefined') {
57
+ toReturn['draftText'] = this.draftText;
58
+ }
59
+ if (typeof this.postDateTime !== 'undefined' && this.postDateTime !== null) {
60
+ toReturn['postDateTime'] = 'toApiJson' in this.postDateTime ? this.postDateTime.toApiJson() : this.postDateTime;
61
+ }
62
+ if (typeof this.gmbPostCustomization !== 'undefined' && this.gmbPostCustomization !== null) {
63
+ toReturn['gmbPostCustomization'] = 'toApiJson' in this.gmbPostCustomization ? this.gmbPostCustomization.toApiJson() : this.gmbPostCustomization;
64
+ }
65
+ if (typeof this.previews !== 'undefined') {
66
+ toReturn['previews'] = this.previews;
67
+ }
68
+ if (typeof this.options !== 'undefined') {
69
+ toReturn['options'] = this.options;
70
+ }
71
+ if (typeof this.media !== 'undefined' && this.media !== null) {
72
+ toReturn['media'] = 'toApiJson' in this.media ? this.media.toApiJson() : this.media;
73
+ }
74
+ if (typeof this.ssids !== 'undefined') {
75
+ toReturn['ssids'] = this.ssids;
76
+ }
77
+ if (typeof this.draftType !== 'undefined') {
78
+ toReturn['draftType'] = this.draftType;
79
+ }
80
+ if (typeof this.metadata !== 'undefined' && this.metadata !== null) {
81
+ toReturn['metadata'] = 'toApiJson' in this.metadata ? this.metadata.toApiJson() : this.metadata;
82
+ }
83
+ if (typeof this.youtubeCustomization !== 'undefined' && this.youtubeCustomization !== null) {
84
+ toReturn['youtubeCustomization'] = 'toApiJson' in this.youtubeCustomization ? this.youtubeCustomization.toApiJson() : this.youtubeCustomization;
85
+ }
86
+ if (typeof this.ssidDraftTypes !== 'undefined' && this.ssidDraftTypes !== null) {
87
+ toReturn['ssidDraftTypes'] = 'toApiJson' in this.ssidDraftTypes ? this.ssidDraftTypes.toApiJson() : this.ssidDraftTypes;
88
+ }
89
+ if (typeof this.isHidden !== 'undefined') {
90
+ toReturn['isHidden'] = this.isHidden;
91
+ }
92
+ if (typeof this.tiktokCustomization !== 'undefined' && this.tiktokCustomization !== null) {
93
+ toReturn['tiktokCustomization'] = 'toApiJson' in this.tiktokCustomization ? this.tiktokCustomization.toApiJson() : this.tiktokCustomization;
94
+ }
95
+ if (typeof this.blogPostCustomization !== 'undefined' && this.blogPostCustomization !== null) {
96
+ toReturn['blogPostCustomization'] = 'toApiJson' in this.blogPostCustomization ? this.blogPostCustomization.toApiJson() : this.blogPostCustomization;
97
+ }
98
+ if (typeof this.campaignCustomization !== 'undefined' && this.campaignCustomization !== null) {
99
+ toReturn['campaignCustomization'] = 'toApiJson' in this.campaignCustomization ? this.campaignCustomization.toApiJson() : this.campaignCustomization;
100
+ }
101
+ if (typeof this.brandId !== 'undefined') {
102
+ toReturn['brandId'] = this.brandId;
103
+ }
104
+ if (typeof this.multilocationPostId !== 'undefined') {
105
+ toReturn['multilocationPostId'] = this.multilocationPostId;
106
+ }
107
+ if (typeof this.socialNetworkIdentifier !== 'undefined') {
108
+ toReturn['socialNetworkIdentifier'] = this.socialNetworkIdentifier;
109
+ }
110
+ return toReturn;
111
+ }
112
+ }
113
+ export class CreateDraftResponse {
114
+ static fromProto(proto) {
115
+ let m = new CreateDraftResponse();
116
+ m = Object.assign(m, proto);
117
+ if (proto.draft) {
118
+ m.draft = Draft.fromProto(proto.draft);
119
+ }
120
+ return m;
121
+ }
122
+ constructor(kwargs) {
123
+ if (!kwargs) {
124
+ return;
125
+ }
126
+ Object.assign(this, kwargs);
127
+ }
128
+ toApiJson() {
129
+ const toReturn = {};
130
+ if (typeof this.draft !== 'undefined' && this.draft !== null) {
131
+ toReturn['draft'] = 'toApiJson' in this.draft ? this.draft.toApiJson() : this.draft;
132
+ }
133
+ return toReturn;
134
+ }
135
+ }
136
+ export class CreateMultiDraftsRequest {
137
+ static fromProto(proto) {
138
+ let m = new CreateMultiDraftsRequest();
139
+ m = Object.assign(m, proto);
140
+ if (proto.drafts) {
141
+ m.drafts = proto.drafts.map(CreateDraftRequest.fromProto);
142
+ }
143
+ return m;
144
+ }
145
+ constructor(kwargs) {
146
+ if (!kwargs) {
147
+ return;
148
+ }
149
+ Object.assign(this, kwargs);
150
+ }
151
+ toApiJson() {
152
+ const toReturn = {};
153
+ if (typeof this.drafts !== 'undefined' && this.drafts !== null) {
154
+ toReturn['drafts'] = 'toApiJson' in this.drafts ? this.drafts.toApiJson() : this.drafts;
155
+ }
156
+ return toReturn;
157
+ }
158
+ }
159
+ export class CreateMultiDraftsResponse {
160
+ static fromProto(proto) {
161
+ let m = new CreateMultiDraftsResponse();
162
+ m = Object.assign(m, proto);
163
+ if (proto.drafts) {
164
+ m.drafts = proto.drafts.map(Draft.fromProto);
165
+ }
166
+ return m;
167
+ }
168
+ constructor(kwargs) {
169
+ if (!kwargs) {
170
+ return;
171
+ }
172
+ Object.assign(this, kwargs);
173
+ }
174
+ toApiJson() {
175
+ const toReturn = {};
176
+ if (typeof this.drafts !== 'undefined' && this.drafts !== null) {
177
+ toReturn['drafts'] = 'toApiJson' in this.drafts ? this.drafts.toApiJson() : this.drafts;
178
+ }
179
+ return toReturn;
180
+ }
181
+ }
182
+ export class DeleteDraftRequest {
183
+ static fromProto(proto) {
184
+ let m = new DeleteDraftRequest();
185
+ m = Object.assign(m, proto);
186
+ return m;
187
+ }
188
+ constructor(kwargs) {
189
+ if (!kwargs) {
190
+ return;
191
+ }
192
+ Object.assign(this, kwargs);
193
+ }
194
+ toApiJson() {
195
+ const toReturn = {};
196
+ if (typeof this.accountGroupId !== 'undefined') {
197
+ toReturn['accountGroupId'] = this.accountGroupId;
198
+ }
199
+ if (typeof this.draftId !== 'undefined') {
200
+ toReturn['draftId'] = this.draftId;
201
+ }
202
+ return toReturn;
203
+ }
204
+ }
205
+ export class GetDraftRequest {
206
+ static fromProto(proto) {
207
+ let m = new GetDraftRequest();
208
+ m = Object.assign(m, proto);
209
+ return m;
210
+ }
211
+ constructor(kwargs) {
212
+ if (!kwargs) {
213
+ return;
214
+ }
215
+ Object.assign(this, kwargs);
216
+ }
217
+ toApiJson() {
218
+ const toReturn = {};
219
+ if (typeof this.accountGroupId !== 'undefined') {
220
+ toReturn['accountGroupId'] = this.accountGroupId;
221
+ }
222
+ if (typeof this.draftId !== 'undefined') {
223
+ toReturn['draftId'] = this.draftId;
224
+ }
225
+ return toReturn;
226
+ }
227
+ }
228
+ export class GetDraftResponse {
229
+ static fromProto(proto) {
230
+ let m = new GetDraftResponse();
231
+ m = Object.assign(m, proto);
232
+ if (proto.draft) {
233
+ m.draft = Draft.fromProto(proto.draft);
234
+ }
235
+ return m;
236
+ }
237
+ constructor(kwargs) {
238
+ if (!kwargs) {
239
+ return;
240
+ }
241
+ Object.assign(this, kwargs);
242
+ }
243
+ toApiJson() {
244
+ const toReturn = {};
245
+ if (typeof this.draft !== 'undefined' && this.draft !== null) {
246
+ toReturn['draft'] = 'toApiJson' in this.draft ? this.draft.toApiJson() : this.draft;
247
+ }
248
+ return toReturn;
249
+ }
250
+ }
251
+ export class ListDraftsByNetworkIdentifierRequest {
252
+ static fromProto(proto) {
253
+ let m = new ListDraftsByNetworkIdentifierRequest();
254
+ m = Object.assign(m, proto);
255
+ if (proto.pageSize) {
256
+ m.pageSize = parseInt(proto.pageSize, 10);
257
+ }
258
+ return m;
259
+ }
260
+ constructor(kwargs) {
261
+ if (!kwargs) {
262
+ return;
263
+ }
264
+ Object.assign(this, kwargs);
265
+ }
266
+ toApiJson() {
267
+ const toReturn = {};
268
+ if (typeof this.accountGroupId !== 'undefined') {
269
+ toReturn['accountGroupId'] = this.accountGroupId;
270
+ }
271
+ if (typeof this.socialNetworkIdentifier !== 'undefined') {
272
+ toReturn['socialNetworkIdentifier'] = this.socialNetworkIdentifier;
273
+ }
274
+ if (typeof this.cursor !== 'undefined') {
275
+ toReturn['cursor'] = this.cursor;
276
+ }
277
+ if (typeof this.pageSize !== 'undefined') {
278
+ toReturn['pageSize'] = this.pageSize;
279
+ }
280
+ return toReturn;
281
+ }
282
+ }
283
+ export class ListDraftsByNetworkIdentifierResponse {
284
+ static fromProto(proto) {
285
+ let m = new ListDraftsByNetworkIdentifierResponse();
286
+ m = Object.assign(m, proto);
287
+ if (proto.drafts) {
288
+ m.drafts = proto.drafts.map(Draft.fromProto);
289
+ }
290
+ return m;
291
+ }
292
+ constructor(kwargs) {
293
+ if (!kwargs) {
294
+ return;
295
+ }
296
+ Object.assign(this, kwargs);
297
+ }
298
+ toApiJson() {
299
+ const toReturn = {};
300
+ if (typeof this.drafts !== 'undefined' && this.drafts !== null) {
301
+ toReturn['drafts'] = 'toApiJson' in this.drafts ? this.drafts.toApiJson() : this.drafts;
302
+ }
303
+ if (typeof this.nextCursor !== 'undefined') {
304
+ toReturn['nextCursor'] = this.nextCursor;
305
+ }
306
+ if (typeof this.hasMore !== 'undefined') {
307
+ toReturn['hasMore'] = this.hasMore;
308
+ }
309
+ return toReturn;
310
+ }
311
+ }
312
+ export class ListDraftsRequest {
313
+ static fromProto(proto) {
314
+ let m = new ListDraftsRequest();
315
+ m = Object.assign(m, proto);
316
+ if (proto.pageSize) {
317
+ m.pageSize = parseInt(proto.pageSize, 10);
318
+ }
319
+ if (proto.start) {
320
+ m.start = new Date(proto.start);
321
+ }
322
+ if (proto.end) {
323
+ m.end = new Date(proto.end);
324
+ }
325
+ if (proto.visibilityType) {
326
+ m.visibilityType = enumStringToValue(e.VisibilityType, proto.visibilityType);
327
+ }
328
+ return m;
329
+ }
330
+ constructor(kwargs) {
331
+ if (!kwargs) {
332
+ return;
333
+ }
334
+ Object.assign(this, kwargs);
335
+ }
336
+ toApiJson() {
337
+ const toReturn = {};
338
+ if (typeof this.accountGroupId !== 'undefined') {
339
+ toReturn['accountGroupId'] = this.accountGroupId;
340
+ }
341
+ if (typeof this.cursor !== 'undefined') {
342
+ toReturn['cursor'] = this.cursor;
343
+ }
344
+ if (typeof this.pageSize !== 'undefined') {
345
+ toReturn['pageSize'] = this.pageSize;
346
+ }
347
+ if (typeof this.start !== 'undefined' && this.start !== null) {
348
+ toReturn['start'] = 'toApiJson' in this.start ? this.start.toApiJson() : this.start;
349
+ }
350
+ if (typeof this.end !== 'undefined' && this.end !== null) {
351
+ toReturn['end'] = 'toApiJson' in this.end ? this.end.toApiJson() : this.end;
352
+ }
353
+ if (typeof this.searchTerm !== 'undefined') {
354
+ toReturn['searchTerm'] = this.searchTerm;
355
+ }
356
+ if (typeof this.networks !== 'undefined') {
357
+ toReturn['networks'] = this.networks;
358
+ }
359
+ if (typeof this.visibilityType !== 'undefined') {
360
+ toReturn['visibilityType'] = this.visibilityType;
361
+ }
362
+ return toReturn;
363
+ }
364
+ }
365
+ export class ListDraftsResponse {
366
+ static fromProto(proto) {
367
+ let m = new ListDraftsResponse();
368
+ m = Object.assign(m, proto);
369
+ if (proto.drafts) {
370
+ m.drafts = proto.drafts.map(Draft.fromProto);
371
+ }
372
+ return m;
373
+ }
374
+ constructor(kwargs) {
375
+ if (!kwargs) {
376
+ return;
377
+ }
378
+ Object.assign(this, kwargs);
379
+ }
380
+ toApiJson() {
381
+ const toReturn = {};
382
+ if (typeof this.drafts !== 'undefined' && this.drafts !== null) {
383
+ toReturn['drafts'] = 'toApiJson' in this.drafts ? this.drafts.toApiJson() : this.drafts;
384
+ }
385
+ if (typeof this.nextCursor !== 'undefined') {
386
+ toReturn['nextCursor'] = this.nextCursor;
387
+ }
388
+ if (typeof this.hasMore !== 'undefined') {
389
+ toReturn['hasMore'] = this.hasMore;
390
+ }
391
+ return toReturn;
392
+ }
393
+ }
394
+ export class ListMultilocationDraftsRequest {
395
+ static fromProto(proto) {
396
+ let m = new ListMultilocationDraftsRequest();
397
+ m = Object.assign(m, proto);
398
+ return m;
399
+ }
400
+ constructor(kwargs) {
401
+ if (!kwargs) {
402
+ return;
403
+ }
404
+ Object.assign(this, kwargs);
405
+ }
406
+ toApiJson() {
407
+ const toReturn = {};
408
+ if (typeof this.brandId !== 'undefined') {
409
+ toReturn['brandId'] = this.brandId;
410
+ }
411
+ if (typeof this.multilocationPostId !== 'undefined') {
412
+ toReturn['multilocationPostId'] = this.multilocationPostId;
413
+ }
414
+ if (typeof this.accountGroupIds !== 'undefined') {
415
+ toReturn['accountGroupIds'] = this.accountGroupIds;
416
+ }
417
+ return toReturn;
418
+ }
419
+ }
420
+ export class ListMultilocationDraftsResponse {
421
+ static fromProto(proto) {
422
+ let m = new ListMultilocationDraftsResponse();
423
+ m = Object.assign(m, proto);
424
+ if (proto.drafts) {
425
+ m.drafts = proto.drafts.map(Draft.fromProto);
426
+ }
427
+ return m;
428
+ }
429
+ constructor(kwargs) {
430
+ if (!kwargs) {
431
+ return;
432
+ }
433
+ Object.assign(this, kwargs);
434
+ }
435
+ toApiJson() {
436
+ const toReturn = {};
437
+ if (typeof this.drafts !== 'undefined' && this.drafts !== null) {
438
+ toReturn['drafts'] = 'toApiJson' in this.drafts ? this.drafts.toApiJson() : this.drafts;
439
+ }
440
+ return toReturn;
441
+ }
442
+ }
443
+ export class MultiDeleteMLDraftPostsRequest {
444
+ static fromProto(proto) {
445
+ let m = new MultiDeleteMLDraftPostsRequest();
446
+ m = Object.assign(m, proto);
447
+ if (proto.mlDraftPosts) {
448
+ m.mlDraftPosts = proto.mlDraftPosts.map(MlDraftPost.fromProto);
449
+ }
450
+ return m;
451
+ }
452
+ constructor(kwargs) {
453
+ if (!kwargs) {
454
+ return;
455
+ }
456
+ Object.assign(this, kwargs);
457
+ }
458
+ toApiJson() {
459
+ const toReturn = {};
460
+ if (typeof this.mlDraftPosts !== 'undefined' && this.mlDraftPosts !== null) {
461
+ toReturn['mlDraftPosts'] = 'toApiJson' in this.mlDraftPosts ? this.mlDraftPosts.toApiJson() : this.mlDraftPosts;
462
+ }
463
+ if (typeof this.brandId !== 'undefined') {
464
+ toReturn['brandId'] = this.brandId;
465
+ }
466
+ return toReturn;
467
+ }
468
+ }
469
+ export class UpdateDraftRequest {
470
+ static fromProto(proto) {
471
+ let m = new UpdateDraftRequest();
472
+ m = Object.assign(m, proto);
473
+ if (proto.postDateTime) {
474
+ m.postDateTime = new Date(proto.postDateTime);
475
+ }
476
+ if (proto.gmbPostCustomization) {
477
+ m.gmbPostCustomization = GMBPostCustomization.fromProto(proto.gmbPostCustomization);
478
+ }
479
+ if (proto.media) {
480
+ m.media = proto.media.map(DraftMedia.fromProto);
481
+ }
482
+ if (proto.draftType) {
483
+ m.draftType = enumStringToValue(e.DraftType, proto.draftType);
484
+ }
485
+ if (proto.metadata) {
486
+ m.metadata = proto.metadata.map(DraftMetaData.fromProto);
487
+ }
488
+ if (proto.youtubeCustomization) {
489
+ m.youtubeCustomization = DraftYoutubeCustomization.fromProto(proto.youtubeCustomization);
490
+ }
491
+ if (proto.ssidDraftTypes) {
492
+ m.ssidDraftTypes = proto.ssidDraftTypes.map(SSIDDraftType.fromProto);
493
+ }
494
+ if (proto.tiktokCustomization) {
495
+ m.tiktokCustomization = DraftTikTokCustomization.fromProto(proto.tiktokCustomization);
496
+ }
497
+ if (proto.blogPostCustomization) {
498
+ m.blogPostCustomization = DraftBlogPostCustomization.fromProto(proto.blogPostCustomization);
499
+ }
500
+ if (proto.campaignCustomization) {
501
+ m.campaignCustomization = CampaignCustomization.fromProto(proto.campaignCustomization);
502
+ }
503
+ return m;
504
+ }
505
+ constructor(kwargs) {
506
+ if (!kwargs) {
507
+ return;
508
+ }
509
+ Object.assign(this, kwargs);
510
+ }
511
+ toApiJson() {
512
+ const toReturn = {};
513
+ if (typeof this.accountGroupId !== 'undefined') {
514
+ toReturn['accountGroupId'] = this.accountGroupId;
515
+ }
516
+ if (typeof this.draftId !== 'undefined') {
517
+ toReturn['draftId'] = this.draftId;
518
+ }
519
+ if (typeof this.draftText !== 'undefined') {
520
+ toReturn['draftText'] = this.draftText;
521
+ }
522
+ if (typeof this.postDateTime !== 'undefined' && this.postDateTime !== null) {
523
+ toReturn['postDateTime'] = 'toApiJson' in this.postDateTime ? this.postDateTime.toApiJson() : this.postDateTime;
524
+ }
525
+ if (typeof this.gmbPostCustomization !== 'undefined' && this.gmbPostCustomization !== null) {
526
+ toReturn['gmbPostCustomization'] = 'toApiJson' in this.gmbPostCustomization ? this.gmbPostCustomization.toApiJson() : this.gmbPostCustomization;
527
+ }
528
+ if (typeof this.previews !== 'undefined') {
529
+ toReturn['previews'] = this.previews;
530
+ }
531
+ if (typeof this.options !== 'undefined') {
532
+ toReturn['options'] = this.options;
533
+ }
534
+ if (typeof this.media !== 'undefined' && this.media !== null) {
535
+ toReturn['media'] = 'toApiJson' in this.media ? this.media.toApiJson() : this.media;
536
+ }
537
+ if (typeof this.ssids !== 'undefined') {
538
+ toReturn['ssids'] = this.ssids;
539
+ }
540
+ if (typeof this.draftType !== 'undefined') {
541
+ toReturn['draftType'] = this.draftType;
542
+ }
543
+ if (typeof this.metadata !== 'undefined' && this.metadata !== null) {
544
+ toReturn['metadata'] = 'toApiJson' in this.metadata ? this.metadata.toApiJson() : this.metadata;
545
+ }
546
+ if (typeof this.youtubeCustomization !== 'undefined' && this.youtubeCustomization !== null) {
547
+ toReturn['youtubeCustomization'] = 'toApiJson' in this.youtubeCustomization ? this.youtubeCustomization.toApiJson() : this.youtubeCustomization;
548
+ }
549
+ if (typeof this.ssidDraftTypes !== 'undefined' && this.ssidDraftTypes !== null) {
550
+ toReturn['ssidDraftTypes'] = 'toApiJson' in this.ssidDraftTypes ? this.ssidDraftTypes.toApiJson() : this.ssidDraftTypes;
551
+ }
552
+ if (typeof this.isHidden !== 'undefined') {
553
+ toReturn['isHidden'] = this.isHidden;
554
+ }
555
+ if (typeof this.tiktokCustomization !== 'undefined' && this.tiktokCustomization !== null) {
556
+ toReturn['tiktokCustomization'] = 'toApiJson' in this.tiktokCustomization ? this.tiktokCustomization.toApiJson() : this.tiktokCustomization;
557
+ }
558
+ if (typeof this.blogPostCustomization !== 'undefined' && this.blogPostCustomization !== null) {
559
+ toReturn['blogPostCustomization'] = 'toApiJson' in this.blogPostCustomization ? this.blogPostCustomization.toApiJson() : this.blogPostCustomization;
560
+ }
561
+ if (typeof this.campaignCustomization !== 'undefined' && this.campaignCustomization !== null) {
562
+ toReturn['campaignCustomization'] = 'toApiJson' in this.campaignCustomization ? this.campaignCustomization.toApiJson() : this.campaignCustomization;
563
+ }
564
+ if (typeof this.brandId !== 'undefined') {
565
+ toReturn['brandId'] = this.brandId;
566
+ }
567
+ if (typeof this.multilocationPostId !== 'undefined') {
568
+ toReturn['multilocationPostId'] = this.multilocationPostId;
569
+ }
570
+ if (typeof this.socialNetworkIdentifier !== 'undefined') {
571
+ toReturn['socialNetworkIdentifier'] = this.socialNetworkIdentifier;
572
+ }
573
+ return toReturn;
574
+ }
575
+ }
576
+ export class UpdateDraftResponse {
577
+ static fromProto(proto) {
578
+ let m = new UpdateDraftResponse();
579
+ m = Object.assign(m, proto);
580
+ if (proto.draft) {
581
+ m.draft = Draft.fromProto(proto.draft);
582
+ }
583
+ return m;
584
+ }
585
+ constructor(kwargs) {
586
+ if (!kwargs) {
587
+ return;
588
+ }
589
+ Object.assign(this, kwargs);
590
+ }
591
+ toApiJson() {
592
+ const toReturn = {};
593
+ if (typeof this.draft !== 'undefined' && this.draft !== null) {
594
+ toReturn['draft'] = 'toApiJson' in this.draft ? this.draft.toApiJson() : this.draft;
595
+ }
596
+ return toReturn;
597
+ }
598
+ }
599
+ export class UpdateMultiMLDraftsRequest {
600
+ static fromProto(proto) {
601
+ let m = new UpdateMultiMLDraftsRequest();
602
+ m = Object.assign(m, proto);
603
+ if (proto.drafts) {
604
+ m.drafts = proto.drafts.map(UpdateDraftRequest.fromProto);
605
+ }
606
+ return m;
607
+ }
608
+ constructor(kwargs) {
609
+ if (!kwargs) {
610
+ return;
611
+ }
612
+ Object.assign(this, kwargs);
613
+ }
614
+ toApiJson() {
615
+ const toReturn = {};
616
+ if (typeof this.drafts !== 'undefined' && this.drafts !== null) {
617
+ toReturn['drafts'] = 'toApiJson' in this.drafts ? this.drafts.toApiJson() : this.drafts;
618
+ }
619
+ return toReturn;
620
+ }
621
+ }
622
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZnRzLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NvY2lhbF9wb3N0c19zZGsvc3JjL2xpYi9faW50ZXJuYWwvb2JqZWN0cy9kcmFmdHMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLHlCQUF5QixFQUFFLGFBQWEsRUFBRSx3QkFBd0IsRUFBRSwwQkFBMEIsRUFBRSxxQkFBcUIsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3ROLE9BQU8sS0FBSyxDQUFDLE1BQU0sVUFBVSxDQUFDO0FBRTlCLE1BQU0sVUFBVSxpQkFBaUIsQ0FBSSxPQUFZLEVBQUUsS0FBYTtJQUM5RCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtRQUM3QixPQUFPLEtBQUssQ0FBQztLQUNkO0lBQ0QsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEIsQ0FBQztBQUVELE1BQU0sT0FBTyxrQkFBa0I7SUFxQjNCLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBVTtRQUN2QixJQUFJLENBQUMsR0FBRyxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDakMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksS0FBSyxDQUFDLFlBQVksRUFBRTtZQUFDLENBQUMsQ0FBQyxZQUFZLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQUM7UUFDeEUsSUFBSSxLQUFLLENBQUMsb0JBQW9CLEVBQUU7WUFBQyxDQUFDLENBQUMsb0JBQW9CLEdBQUcsb0JBQW9CLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1NBQUM7UUFDdEgsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFO1lBQUMs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QyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELFNBQVM7UUFDTCxNQUFNLFFBQVEsR0FFVixFQUFFLENBQUM7UUFFUCxJQUFJLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLEVBQUU7WUFBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsV0FBVyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxNQUFjLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7U0FBQztRQUNuSyxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbi8vIENvZGUgZ2VuZXJhdGVkIGJ5IHNka2dlblxuLy8gRE8gTk9UIEVESVQhLlxuLy9cbi8vIE9iamVjdHMuXG4vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbmltcG9ydCAqIGFzIGkgZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBHTUJQb3N0Q3VzdG9taXphdGlvbiwgRHJhZnRNZWRpYSwgRHJhZnRNZXRhRGF0YSwgRHJhZnRZb3V0dWJlQ3VzdG9taXphdGlvbiwgU1NJRERyYWZ0VHlwZSwgRHJhZnRUaWtUb2tDdXN0b21pemF0aW9uLCBEcmFmdEJsb2dQb3N0Q3VzdG9taXphdGlvbiwgQ2FtcGFpZ25DdXN0b21pemF0aW9uLCBEcmFmdCwgTWxEcmFmdFBvc3QgfSBmcm9tICcuL2RyYWZ0cyc7XG5pbXBvcnQgKiBhcyBlIGZyb20gJy4uL2VudW1zJztcblxuZXhwb3J0IGZ1bmN0aW9uIGVudW1TdHJpbmdUb1ZhbHVlPEU+KGVudW1SZWY6IGFueSwgdmFsdWU6IHN0cmluZyk6IEUge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gZW51bVJlZlt2YWx1ZV07XG59XG5cbmV4cG9ydCBjbGFzcyBDcmVhdGVEcmFmdFJlcXVlc3QgaW1wbGVtZW50cyBpLkNyZWF0ZURyYWZ0UmVxdWVzdEludGVyZmFjZSB7XG4gICAgYWNjb3VudEdyb3VwSWQ6IHN0cmluZztcbiAgICBkcmFmdFRleHQ6IHN0cmluZztcbiAgICBwb3N0RGF0ZVRpbWU6IERhdGU7XG4gICAgZ21iUG9zdEN1c3RvbWl6YXRpb246IEdNQlBvc3RDdXN0b21pemF0aW9uO1xuICAgIHByZXZpZXdzOiBzdHJpbmc7XG4gICAgb3B0aW9uczogc3RyaW5nW107XG4gICAgbWVkaWE6IERyYWZ0TWVkaWFbXTtcbiAgICBzc2lkczogc3RyaW5nW107XG4gICAgZHJhZnRUeXBlOiBlLkRyYWZ0VHlwZTtcbiAgICBtZXRhZGF0YTogRHJhZnRNZXRhRGF0YVtdO1xuICAgIHlvdXR1YmVDdXN0b21pemF0aW9uOiBEcmFmdFlvdXR1YmVDdXN0b21pemF0aW9uO1xuICAgIHNzaWREcmFmdFR5cGVzOiBTU0lERHJhZnRUeXBlW107XG4gICAgaXNIaWRkZW46IGJvb2xlYW47XG4gICAgdGlrdG9rQ3VzdG9taXphdGlvbjogRHJhZnRUaWtUb2tDdXN0b21pemF0aW9uO1xuICAgIGJsb2dQb3N0Q3VzdG9taXphdGlvbjogRHJhZnRCbG9nUG9zdEN1c3RvbWl6YXRpb247XG4gICAgY2FtcGFpZ25DdXN0b21pemF0aW9uOiBDYW1wYWlnbkN1c3RvbWl6YXRpb247XG4gICAgYnJhbmRJZDogc3RyaW5nO1xuICAgIG11bHRpbG9jYXRpb25Qb3N0SWQ6IHN0cmluZztcbiAgICBzb2NpYWxOZXR3b3JrSWRlbnRpZmllcjogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ3JlYXRlRHJhZnRSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgQ3JlYXRlRHJhZnRSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnBvc3REYXRlVGltZSkge20ucG9zdERhdGVUaW1lID0gbmV3IERhdGUocHJvdG8ucG9zdERhdGVUaW1lKTt9XG4gICAgICAgIGlmIChwcm90by5nbWJQb3N0Q3VzdG9taXphdGlvbikge20uZ21iUG9zdEN1c3RvbWl6YXRpb24gPSBHTUJQb3N0Q3VzdG9taXphdGlvbi5mcm9tUHJvdG8ocHJvdG8uZ21iUG9zdEN1c3RvbWl6YXRpb24pO31cbiAgICAgICAgaWYgKHByb3RvLm1lZGlhKSB7bS5tZWRpYSA9IHByb3RvLm1lZGlhLm1hcChEcmFmdE1lZGlhLmZyb21Qcm90byk7fVxuICAgICAgICBpZiAocHJvdG8uZHJhZnRUeXBlKSB7bS5kcmFmdFR5cGUgPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLkRyYWZ0VHlwZT4oZS5EcmFmdFR5cGUsIHByb3RvLmRyYWZ0VHlwZSk7fVxuICAgICAgICBpZiAocHJvdG8ubWV0YWRhdGEpIHttLm1ldGFkYXRhID0gcHJvdG8ubWV0YWRhdGEubWFwKERyYWZ0TWV0YURhdGEuZnJvbVByb3RvKTt9XG4gICAgICAgIGlmIChwcm90by55b3V0dWJlQ3VzdG9taXphdGlvbikge20ueW91dHViZUN1c3RvbWl6YXRpb24gPSBEcmFmdFlvdXR1YmVDdXN0b21pemF0aW9uLmZyb21Qcm90byhwcm90by55b3V0dWJlQ3VzdG9taXphdGlvbik7fVxuICAgICAgICBpZiAocHJvdG8uc3NpZERyYWZ0VHlwZXMpIHttLnNzaWREcmFmdFR5cGVzID0gcHJvdG8uc3NpZERyYWZ0VHlwZXMubWFwKFNTSUREcmFmdFR5cGUuZnJvbVByb3RvKTt9XG4gICAgICAgIGlmIChwcm90by50aWt0b2tDdXN0b21pemF0aW9uKSB7bS50aWt0b2tDdXN0b21pemF0aW9uID0gRHJhZnRUaWtUb2tDdXN0b21pemF0aW9uLmZyb21Qcm90byhwcm90by50aWt0b2tDdXN0b21pemF0aW9uKTt9XG4gICAgICAgIGlmIChwcm90by5ibG9nUG9zdEN1c3RvbWl6YXRpb24pIHttLmJsb2dQb3N0Q3VzdG9taXphdGlvbiA9IERyYWZ0QmxvZ1Bvc3RDdXN0b21pemF0aW9uLmZyb21Qcm90byhwcm90by5ibG9nUG9zdEN1c3RvbWl6YXRpb24pO31cbiAgICAgICAgaWYgKHByb3RvLmNhbXBhaWduQ3VzdG9taXphdGlvbikge20uY2FtcGFpZ25DdXN0b21pemF0aW9uID0gQ2FtcGFpZ25DdXN0b21pemF0aW9uLmZyb21Qcm90byhwcm90by5jYW1wYWlnbkN1c3RvbWl6YXRpb24pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5DcmVhdGVEcmFmdFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hY2NvdW50R3JvdXBJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWNjb3VudEdyb3VwSWQnXSA9IHRoaXMuYWNjb3VudEdyb3VwSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZHJhZnRUZXh0ICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydkcmFmdFRleHQnXSA9IHRoaXMuZHJhZnRUZXh0O31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBvc3REYXRlVGltZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5wb3N0RGF0ZVRpbWUgIT09IG51bGwpIHt0b1JldHVyblsncG9zdERhdGVUaW1lJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnBvc3REYXRlVGltZSA/ICh0aGlzLnBvc3REYXRlVGltZSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5wb3N0RGF0ZVRpbWU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZ21iUG9zdEN1c3RvbWl6YXRpb24gIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZ21iUG9zdEN1c3RvbWl6YXRpb24gIT09IG51bGwpIHt0b1JldHVyblsnZ21iUG9zdEN1c3RvbWl6YXRpb24nXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZ21iUG9zdEN1c3RvbWl6YXRpb24gPyAodGhpcy5nbWJQb3N0Q3VzdG9taXphdGlvbiBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5nbWJQb3N0Q3VzdG9taXphdGlvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wcmV2aWV3cyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncHJldmlld3MnXSA9IHRoaXMucHJldmlld3M7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMub3B0aW9ucyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnb3B0aW9ucyddID0gdGhpcy5vcHRpb25zO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1lZGlhICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLm1lZGlhICE9PSBudWxsKSB7dG9SZXR1cm5bJ21lZGlhJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLm1lZGlhID8gKHRoaXMubWVkaWEgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMubWVkaWE7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3NpZHMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NzaWRzJ10gPSB0aGlzLnNzaWRzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRyYWZ0VHlwZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZHJhZnRUeXBlJ10gPSB0aGlzLmRyYWZ0VHlwZTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZXRhZGF0YSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5tZXRhZGF0YSAhPT0gbnVsbCkge3RvUmV0dXJuWydtZXRhZGF0YSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5tZXRhZGF0YSA/ICh0aGlzLm1ldGFkYXRhIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLm1ldGFkYXRhO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnlvdXR1YmVDdXN0b21pemF0aW9uICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnlvdXR1YmVDdXN0b21pemF0aW9uICE9PSBudWxsKSB7dG9SZXR1cm5bJ3lvdXR1YmVDdXN0b21pemF0aW9uJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnlvdXR1YmVDdXN0b21pemF0aW9uID8gKHRoaXMueW91dHViZUN1c3RvbWl6YXRpb24gYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMueW91dHViZUN1c3RvbWl6YXRpb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3NpZERyYWZ0VHlwZXMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuc3NpZERyYWZ0VHlwZXMgIT09IG51bGwpIHt0b1JldHVyblsnc3NpZERyYWZ0VHlwZXMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuc3NpZERyYWZ0VHlwZXMgPyAodGhpcy5zc2lkRHJhZnRUeXBlcyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5zc2lkRHJhZnRUeXBlczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5pc0hpZGRlbiAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnaXNIaWRkZW4nXSA9IHRoaXMuaXNIaWRkZW47fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudGlrdG9rQ3VzdG9taXphdGlvbiAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy50aWt0b2tDdXN0b21pemF0aW9uICE9PSBudWxsKSB7dG9SZXR1cm5bJ3Rpa3Rva0N1c3RvbWl6YXRpb24nXSA9ICd0b0FwaUpzb24nIGluIHRoaXMudGlrdG9rQ3VzdG9taXphdGlvbiA/ICh0aGlzLnRpa3Rva0N1c3RvbWl6YXRpb24gYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMudGlrdG9rQ3VzdG9taXphdGlvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5ibG9nUG9zdEN1c3RvbWl6YXRpb24gIT09ICd1bmRlZmluZWQnICYmIHRoaXMuYmxvZ1Bvc3RDdXN0b21pemF0aW9uICE9PSBudWxsKSB7dG9SZXR1cm5bJ2Jsb2dQb3N0Q3VzdG9taXphdGlvbiddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5ibG9nUG9zdEN1c3RvbWl6YXRpb24gPyAodGhpcy5ibG9nUG9zdEN1c3RvbWl6YXRpb24gYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuYmxvZ1Bvc3RDdXN0b21pemF0aW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNhbXBhaWduQ3VzdG9taXphdGlvbiAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5jYW1wYWlnbkN1c3RvbWl6YXRpb24gIT09IG51bGwpIHt0b1JldHVyblsnY2FtcGFpZ25DdXN0b21pemF0aW9uJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmNhbXBhaWduQ3VzdG9taXphdGlvbiA/ICh0aGlzLmNhbXBhaWduQ3VzdG9taXphdGlvbiBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5jYW1wYWlnbkN1c3RvbWl6YXRpb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYnJhbmRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYnJhbmRJZCddID0gdGhpcy5icmFuZElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm11bHRpbG9jYXRpb25Qb3N0SWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ211bHRpbG9jYXRpb25Qb3N0SWQnXSA9IHRoaXMubXVsdGlsb2NhdGlvblBvc3RJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5zb2NpYWxOZXR3b3JrSWRlbnRpZmllciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnc29jaWFsTmV0d29ya0lkZW50aWZpZXInXSA9IHRoaXMuc29jaWFsTmV0d29ya0lkZW50aWZpZXI7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3JlYXRlRHJhZnRSZXNwb25zZSBpbXBsZW1lbnRzIGkuQ3JlYXRlRHJhZnRSZXNwb25zZUludGVyZmFjZSB7XG4gICAgZHJhZnQ6IERyYWZ0O1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogQ3JlYXRlRHJhZnRSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IENyZWF0ZURyYWZ0UmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uZHJhZnQpIHttLmRyYWZ0ID0gRHJhZnQuZnJvbVByb3RvKHByb3RvLmRyYWZ0KTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuQ3JlYXRlRHJhZnRSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRyYWZ0ICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmRyYWZ0ICE9PSBudWxsKSB7dG9SZXR1cm5bJ2RyYWZ0J10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmRyYWZ0ID8gKHRoaXMuZHJhZnQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZHJhZnQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ3JlYXRlTXVsdGlEcmFmdHNSZXF1ZXN0IGltcGxlbWVudHMgaS5DcmVhdGVNdWx0aURyYWZ0c1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGRyYWZ0czogQ3JlYXRlRHJhZnRSZXF1ZXN0W107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBDcmVhdGVNdWx0aURyYWZ0c1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBDcmVhdGVNdWx0aURyYWZ0c1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uZHJhZnRzKSB7bS5kcmFmdHMgPSBwcm90by5kcmFmdHMubWFwKENyZWF0ZURyYWZ0UmVxdWVzdC5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5DcmVhdGVNdWx0aURyYWZ0c1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kcmFmdHMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZHJhZnRzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2RyYWZ0cyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5kcmFmdHMgPyAodGhpcy5kcmFmdHMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZHJhZnRzO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENyZWF0ZU11bHRpRHJhZnRzUmVzcG9uc2UgaW1wbGVtZW50cyBpLkNyZWF0ZU11bHRpRHJhZnRzUmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGRyYWZ0czogRHJhZnRbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IENyZWF0ZU11bHRpRHJhZnRzUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBDcmVhdGVNdWx0aURyYWZ0c1Jlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmRyYWZ0cykge20uZHJhZnRzID0gcHJvdG8uZHJhZnRzLm1hcChEcmFmdC5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5DcmVhdGVNdWx0aURyYWZ0c1Jlc3BvbnNlSW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZHJhZnRzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmRyYWZ0cyAhPT0gbnVsbCkge3RvUmV0dXJuWydkcmFmdHMnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuZHJhZnRzID8gKHRoaXMuZHJhZnRzIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmRyYWZ0czt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEZWxldGVEcmFmdFJlcXVlc3QgaW1wbGVtZW50cyBpLkRlbGV0ZURyYWZ0UmVxdWVzdEludGVyZmFjZSB7XG4gICAgYWNjb3VudEdyb3VwSWQ6IHN0cmluZztcbiAgICBkcmFmdElkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBEZWxldGVEcmFmdFJlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBEZWxldGVEcmFmdFJlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkRlbGV0ZURyYWZ0UmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFjY291bnRHcm91cElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydhY2NvdW50R3JvdXBJZCddID0gdGhpcy5hY2NvdW50R3JvdXBJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kcmFmdElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydkcmFmdElkJ10gPSB0aGlzLmRyYWZ0SWQ7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgR2V0RHJhZnRSZXF1ZXN0IGltcGxlbWVudHMgaS5HZXREcmFmdFJlcXVlc3RJbnRlcmZhY2Uge1xuICAgIGFjY291bnRHcm91cElkOiBzdHJpbmc7XG4gICAgZHJhZnRJZDogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogR2V0RHJhZnRSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgR2V0RHJhZnRSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5HZXREcmFmdFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hY2NvdW50R3JvdXBJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWNjb3VudEdyb3VwSWQnXSA9IHRoaXMuYWNjb3VudEdyb3VwSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZHJhZnRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZHJhZnRJZCddID0gdGhpcy5kcmFmdElkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdldERyYWZ0UmVzcG9uc2UgaW1wbGVtZW50cyBpLkdldERyYWZ0UmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGRyYWZ0OiBEcmFmdDtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IEdldERyYWZ0UmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBHZXREcmFmdFJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmRyYWZ0KSB7bS5kcmFmdCA9IERyYWZ0LmZyb21Qcm90byhwcm90by5kcmFmdCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkdldERyYWZ0UmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kcmFmdCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5kcmFmdCAhPT0gbnVsbCkge3RvUmV0dXJuWydkcmFmdCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5kcmFmdCA/ICh0aGlzLmRyYWZ0IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmRyYWZ0O31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3REcmFmdHNCeU5ldHdvcmtJZGVudGlmaWVyUmVxdWVzdCBpbXBsZW1lbnRzIGkuTGlzdERyYWZ0c0J5TmV0d29ya0lkZW50aWZpZXJSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBhY2NvdW50R3JvdXBJZDogc3RyaW5nO1xuICAgIHNvY2lhbE5ldHdvcmtJZGVudGlmaWVyOiBzdHJpbmc7XG4gICAgY3Vyc29yOiBzdHJpbmc7XG4gICAgcGFnZVNpemU6IG51bWJlcjtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IExpc3REcmFmdHNCeU5ldHdvcmtJZGVudGlmaWVyUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IExpc3REcmFmdHNCeU5ldHdvcmtJZGVudGlmaWVyUmVxdWVzdCgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5wYWdlU2l6ZSkge20ucGFnZVNpemUgPSBwYXJzZUludChwcm90by5wYWdlU2l6ZSwgMTApO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0RHJhZnRzQnlOZXR3b3JrSWRlbnRpZmllclJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hY2NvdW50R3JvdXBJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWNjb3VudEdyb3VwSWQnXSA9IHRoaXMuYWNjb3VudEdyb3VwSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc29jaWFsTmV0d29ya0lkZW50aWZpZXIgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NvY2lhbE5ldHdvcmtJZGVudGlmaWVyJ10gPSB0aGlzLnNvY2lhbE5ldHdvcmtJZGVudGlmaWVyO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmN1cnNvciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY3Vyc29yJ10gPSB0aGlzLmN1cnNvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYWdlU2l6ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFnZVNpemUnXSA9IHRoaXMucGFnZVNpemU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdERyYWZ0c0J5TmV0d29ya0lkZW50aWZpZXJSZXNwb25zZSBpbXBsZW1lbnRzIGkuTGlzdERyYWZ0c0J5TmV0d29ya0lkZW50aWZpZXJSZXNwb25zZUludGVyZmFjZSB7XG4gICAgZHJhZnRzOiBEcmFmdFtdO1xuICAgIG5leHRDdXJzb3I6IHN0cmluZztcbiAgICBoYXNNb3JlOiBib29sZWFuO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlzdERyYWZ0c0J5TmV0d29ya0lkZW50aWZpZXJSZXNwb25zZSB7XG4gICAgICAgIGxldCBtID0gbmV3IExpc3REcmFmdHNCeU5ldHdvcmtJZGVudGlmaWVyUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uZHJhZnRzKSB7bS5kcmFmdHMgPSBwcm90by5kcmFmdHMubWFwKERyYWZ0LmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpc3REcmFmdHNCeU5ldHdvcmtJZGVudGlmaWVyUmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kcmFmdHMgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZHJhZnRzICE9PSBudWxsKSB7dG9SZXR1cm5bJ2RyYWZ0cyddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5kcmFmdHMgPyAodGhpcy5kcmFmdHMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZHJhZnRzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm5leHRDdXJzb3IgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ25leHRDdXJzb3InXSA9IHRoaXMubmV4dEN1cnNvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5oYXNNb3JlICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydoYXNNb3JlJ10gPSB0aGlzLmhhc01vcmU7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGlzdERyYWZ0c1JlcXVlc3QgaW1wbGVtZW50cyBpLkxpc3REcmFmdHNSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBhY2NvdW50R3JvdXBJZDogc3RyaW5nO1xuICAgIGN1cnNvcjogc3RyaW5nO1xuICAgIHBhZ2VTaXplOiBudW1iZXI7XG4gICAgc3RhcnQ6IERhdGU7XG4gICAgZW5kOiBEYXRlO1xuICAgIHNlYXJjaFRlcm06IHN0cmluZztcbiAgICBuZXR3b3Jrczogc3RyaW5nW107XG4gICAgdmlzaWJpbGl0eVR5cGU6IGUuVmlzaWJpbGl0eVR5cGU7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0RHJhZnRzUmVxdWVzdCB7XG4gICAgICAgIGxldCBtID0gbmV3IExpc3REcmFmdHNSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnBhZ2VTaXplKSB7bS5wYWdlU2l6ZSA9IHBhcnNlSW50KHByb3RvLnBhZ2VTaXplLCAxMCk7fVxuICAgICAgICBpZiAocHJvdG8uc3RhcnQpIHttLnN0YXJ0ID0gbmV3IERhdGUocHJvdG8uc3RhcnQpO31cbiAgICAgICAgaWYgKHByb3RvLmVuZCkge20uZW5kID0gbmV3IERhdGUocHJvdG8uZW5kKTt9XG4gICAgICAgIGlmIChwcm90by52aXNpYmlsaXR5VHlwZSkge20udmlzaWJpbGl0eVR5cGUgPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLlZpc2liaWxpdHlUeXBlPihlLlZpc2liaWxpdHlUeXBlLCBwcm90by52aXNpYmlsaXR5VHlwZSk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpc3REcmFmdHNSZXF1ZXN0SW50ZXJmYWNlKSB7XG4gICAgICAgIGlmICgha3dhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBrd2FyZ3MpO1xuICAgIH1cblxuICAgIHRvQXBpSnNvbigpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCB0b1JldHVybjoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgICB9ID0ge307XG4gICAgICAgIFxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWNjb3VudEdyb3VwSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2FjY291bnRHcm91cElkJ10gPSB0aGlzLmFjY291bnRHcm91cElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmN1cnNvciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnY3Vyc29yJ10gPSB0aGlzLmN1cnNvcjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wYWdlU2l6ZSAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsncGFnZVNpemUnXSA9IHRoaXMucGFnZVNpemU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3RhcnQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuc3RhcnQgIT09IG51bGwpIHt0b1JldHVyblsnc3RhcnQnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuc3RhcnQgPyAodGhpcy5zdGFydCBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5zdGFydDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5lbmQgIT09ICd1bmRlZmluZWQnICYmIHRoaXMuZW5kICE9PSBudWxsKSB7dG9SZXR1cm5bJ2VuZCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5lbmQgPyAodGhpcy5lbmQgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZW5kO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNlYXJjaFRlcm0gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NlYXJjaFRlcm0nXSA9IHRoaXMuc2VhcmNoVGVybTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5uZXR3b3JrcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbmV0d29ya3MnXSA9IHRoaXMubmV0d29ya3M7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMudmlzaWJpbGl0eVR5cGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3Zpc2liaWxpdHlUeXBlJ10gPSB0aGlzLnZpc2liaWxpdHlUeXBlO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpc3REcmFmdHNSZXNwb25zZSBpbXBsZW1lbnRzIGkuTGlzdERyYWZ0c1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBkcmFmdHM6IERyYWZ0W107XG4gICAgbmV4dEN1cnNvcjogc3RyaW5nO1xuICAgIGhhc01vcmU6IGJvb2xlYW47XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0RHJhZnRzUmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBMaXN0RHJhZnRzUmVzcG9uc2UoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uZHJhZnRzKSB7bS5kcmFmdHMgPSBwcm90by5kcmFmdHMubWFwKERyYWZ0LmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLkxpc3REcmFmdHNSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRyYWZ0cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5kcmFmdHMgIT09IG51bGwpIHt0b1JldHVyblsnZHJhZnRzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmRyYWZ0cyA/ICh0aGlzLmRyYWZ0cyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5kcmFmdHM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubmV4dEN1cnNvciAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbmV4dEN1cnNvciddID0gdGhpcy5uZXh0Q3Vyc29yO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmhhc01vcmUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2hhc01vcmUnXSA9IHRoaXMuaGFzTW9yZTt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0TXVsdGlsb2NhdGlvbkRyYWZ0c1JlcXVlc3QgaW1wbGVtZW50cyBpLkxpc3RNdWx0aWxvY2F0aW9uRHJhZnRzUmVxdWVzdEludGVyZmFjZSB7XG4gICAgYnJhbmRJZDogc3RyaW5nO1xuICAgIG11bHRpbG9jYXRpb25Qb3N0SWQ6IHN0cmluZztcbiAgICBhY2NvdW50R3JvdXBJZHM6IHN0cmluZ1tdO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogTGlzdE11bHRpbG9jYXRpb25EcmFmdHNSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdE11bHRpbG9jYXRpb25EcmFmdHNSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5MaXN0TXVsdGlsb2NhdGlvbkRyYWZ0c1JlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5icmFuZElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydicmFuZElkJ10gPSB0aGlzLmJyYW5kSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubXVsdGlsb2NhdGlvblBvc3RJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnbXVsdGlsb2NhdGlvblBvc3RJZCddID0gdGhpcy5tdWx0aWxvY2F0aW9uUG9zdElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFjY291bnRHcm91cElkcyAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWNjb3VudEdyb3VwSWRzJ10gPSB0aGlzLmFjY291bnRHcm91cElkczt9XG4gICAgICAgIHJldHVybiB0b1JldHVybjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaXN0TXVsdGlsb2NhdGlvbkRyYWZ0c1Jlc3BvbnNlIGltcGxlbWVudHMgaS5MaXN0TXVsdGlsb2NhdGlvbkRyYWZ0c1Jlc3BvbnNlSW50ZXJmYWNlIHtcbiAgICBkcmFmdHM6IERyYWZ0W107XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBMaXN0TXVsdGlsb2NhdGlvbkRyYWZ0c1Jlc3BvbnNlIHtcbiAgICAgICAgbGV0IG0gPSBuZXcgTGlzdE11bHRpbG9jYXRpb25EcmFmdHNSZXNwb25zZSgpO1xuICAgICAgICBtID0gT2JqZWN0LmFzc2lnbihtLCBwcm90byk7XG4gICAgICAgIGlmIChwcm90by5kcmFmdHMpIHttLmRyYWZ0cyA9IHByb3RvLmRyYWZ0cy5tYXAoRHJhZnQuZnJvbVByb3RvKTt9XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGt3YXJncz86IGkuTGlzdE11bHRpbG9jYXRpb25EcmFmdHNSZXNwb25zZUludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRyYWZ0cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5kcmFmdHMgIT09IG51bGwpIHt0b1JldHVyblsnZHJhZnRzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmRyYWZ0cyA/ICh0aGlzLmRyYWZ0cyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5kcmFmdHM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTXVsdGlEZWxldGVNTERyYWZ0UG9zdHNSZXF1ZXN0IGltcGxlbWVudHMgaS5NdWx0aURlbGV0ZU1MRHJhZnRQb3N0c1JlcXVlc3RJbnRlcmZhY2Uge1xuICAgIG1sRHJhZnRQb3N0czogTWxEcmFmdFBvc3RbXTtcbiAgICBicmFuZElkOiBzdHJpbmc7XG5cbiAgICBzdGF0aWMgZnJvbVByb3RvKHByb3RvOiBhbnkpOiBNdWx0aURlbGV0ZU1MRHJhZnRQb3N0c1JlcXVlc3Qge1xuICAgICAgICBsZXQgbSA9IG5ldyBNdWx0aURlbGV0ZU1MRHJhZnRQb3N0c1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8ubWxEcmFmdFBvc3RzKSB7bS5tbERyYWZ0UG9zdHMgPSBwcm90by5tbERyYWZ0UG9zdHMubWFwKE1sRHJhZnRQb3N0LmZyb21Qcm90byk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLk11bHRpRGVsZXRlTUxEcmFmdFBvc3RzUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm1sRHJhZnRQb3N0cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5tbERyYWZ0UG9zdHMgIT09IG51bGwpIHt0b1JldHVyblsnbWxEcmFmdFBvc3RzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLm1sRHJhZnRQb3N0cyA/ICh0aGlzLm1sRHJhZnRQb3N0cyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5tbERyYWZ0UG9zdHM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYnJhbmRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYnJhbmRJZCddID0gdGhpcy5icmFuZElkO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVwZGF0ZURyYWZ0UmVxdWVzdCBpbXBsZW1lbnRzIGkuVXBkYXRlRHJhZnRSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgICBhY2NvdW50R3JvdXBJZDogc3RyaW5nO1xuICAgIGRyYWZ0SWQ6IHN0cmluZztcbiAgICBkcmFmdFRleHQ6IHN0cmluZztcbiAgICBwb3N0RGF0ZVRpbWU6IERhdGU7XG4gICAgZ21iUG9zdEN1c3RvbWl6YXRpb246IEdNQlBvc3RDdXN0b21pemF0aW9uO1xuICAgIHByZXZpZXdzOiBzdHJpbmc7XG4gICAgb3B0aW9uczogc3RyaW5nW107XG4gICAgbWVkaWE6IERyYWZ0TWVkaWFbXTtcbiAgICBzc2lkczogc3RyaW5nW107XG4gICAgZHJhZnRUeXBlOiBlLkRyYWZ0VHlwZTtcbiAgICBtZXRhZGF0YTogRHJhZnRNZXRhRGF0YVtdO1xuICAgIHlvdXR1YmVDdXN0b21pemF0aW9uOiBEcmFmdFlvdXR1YmVDdXN0b21pemF0aW9uO1xuICAgIHNzaWREcmFmdFR5cGVzOiBTU0lERHJhZnRUeXBlW107XG4gICAgaXNIaWRkZW46IGJvb2xlYW47XG4gICAgdGlrdG9rQ3VzdG9taXphdGlvbjogRHJhZnRUaWtUb2tDdXN0b21pemF0aW9uO1xuICAgIGJsb2dQb3N0Q3VzdG9taXphdGlvbjogRHJhZnRCbG9nUG9zdEN1c3RvbWl6YXRpb247XG4gICAgY2FtcGFpZ25DdXN0b21pemF0aW9uOiBDYW1wYWlnbkN1c3RvbWl6YXRpb247XG4gICAgYnJhbmRJZDogc3RyaW5nO1xuICAgIG11bHRpbG9jYXRpb25Qb3N0SWQ6IHN0cmluZztcbiAgICBzb2NpYWxOZXR3b3JrSWRlbnRpZmllcjogc3RyaW5nO1xuXG4gICAgc3RhdGljIGZyb21Qcm90byhwcm90bzogYW55KTogVXBkYXRlRHJhZnRSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVXBkYXRlRHJhZnRSZXF1ZXN0KCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLnBvc3REYXRlVGltZSkge20ucG9zdERhdGVUaW1lID0gbmV3IERhdGUocHJvdG8ucG9zdERhdGVUaW1lKTt9XG4gICAgICAgIGlmIChwcm90by5nbWJQb3N0Q3VzdG9taXphdGlvbikge20uZ21iUG9zdEN1c3RvbWl6YXRpb24gPSBHTUJQb3N0Q3VzdG9taXphdGlvbi5mcm9tUHJvdG8ocHJvdG8uZ21iUG9zdEN1c3RvbWl6YXRpb24pO31cbiAgICAgICAgaWYgKHByb3RvLm1lZGlhKSB7bS5tZWRpYSA9IHByb3RvLm1lZGlhLm1hcChEcmFmdE1lZGlhLmZyb21Qcm90byk7fVxuICAgICAgICBpZiAocHJvdG8uZHJhZnRUeXBlKSB7bS5kcmFmdFR5cGUgPSBlbnVtU3RyaW5nVG9WYWx1ZTxlLkRyYWZ0VHlwZT4oZS5EcmFmdFR5cGUsIHByb3RvLmRyYWZ0VHlwZSk7fVxuICAgICAgICBpZiAocHJvdG8ubWV0YWRhdGEpIHttLm1ldGFkYXRhID0gcHJvdG8ubWV0YWRhdGEubWFwKERyYWZ0TWV0YURhdGEuZnJvbVByb3RvKTt9XG4gICAgICAgIGlmIChwcm90by55b3V0dWJlQ3VzdG9taXphdGlvbikge20ueW91dHViZUN1c3RvbWl6YXRpb24gPSBEcmFmdFlvdXR1YmVDdXN0b21pemF0aW9uLmZyb21Qcm90byhwcm90by55b3V0dWJlQ3VzdG9taXphdGlvbik7fVxuICAgICAgICBpZiAocHJvdG8uc3NpZERyYWZ0VHlwZXMpIHttLnNzaWREcmFmdFR5cGVzID0gcHJvdG8uc3NpZERyYWZ0VHlwZXMubWFwKFNTSUREcmFmdFR5cGUuZnJvbVByb3RvKTt9XG4gICAgICAgIGlmIChwcm90by50aWt0b2tDdXN0b21pemF0aW9uKSB7bS50aWt0b2tDdXN0b21pemF0aW9uID0gRHJhZnRUaWtUb2tDdXN0b21pemF0aW9uLmZyb21Qcm90byhwcm90by50aWt0b2tDdXN0b21pemF0aW9uKTt9XG4gICAgICAgIGlmIChwcm90by5ibG9nUG9zdEN1c3RvbWl6YXRpb24pIHttLmJsb2dQb3N0Q3VzdG9taXphdGlvbiA9IERyYWZ0QmxvZ1Bvc3RDdXN0b21pemF0aW9uLmZyb21Qcm90byhwcm90by5ibG9nUG9zdEN1c3RvbWl6YXRpb24pO31cbiAgICAgICAgaWYgKHByb3RvLmNhbXBhaWduQ3VzdG9taXphdGlvbikge20uY2FtcGFpZ25DdXN0b21pemF0aW9uID0gQ2FtcGFpZ25DdXN0b21pemF0aW9uLmZyb21Qcm90byhwcm90by5jYW1wYWlnbkN1c3RvbWl6YXRpb24pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5VcGRhdGVEcmFmdFJlcXVlc3RJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hY2NvdW50R3JvdXBJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnYWNjb3VudEdyb3VwSWQnXSA9IHRoaXMuYWNjb3VudEdyb3VwSWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZHJhZnRJZCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZHJhZnRJZCddID0gdGhpcy5kcmFmdElkO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRyYWZ0VGV4dCAhPT0gJ3VuZGVmaW5lZCcpIHt0b1JldHVyblsnZHJhZnRUZXh0J10gPSB0aGlzLmRyYWZ0VGV4dDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5wb3N0RGF0ZVRpbWUgIT09ICd1bmRlZmluZWQnICYmIHRoaXMucG9zdERhdGVUaW1lICE9PSBudWxsKSB7dG9SZXR1cm5bJ3Bvc3REYXRlVGltZSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5wb3N0RGF0ZVRpbWUgPyAodGhpcy5wb3N0RGF0ZVRpbWUgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMucG9zdERhdGVUaW1lO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmdtYlBvc3RDdXN0b21pemF0aW9uICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmdtYlBvc3RDdXN0b21pemF0aW9uICE9PSBudWxsKSB7dG9SZXR1cm5bJ2dtYlBvc3RDdXN0b21pemF0aW9uJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmdtYlBvc3RDdXN0b21pemF0aW9uID8gKHRoaXMuZ21iUG9zdEN1c3RvbWl6YXRpb24gYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuZ21iUG9zdEN1c3RvbWl6YXRpb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMucHJldmlld3MgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3ByZXZpZXdzJ10gPSB0aGlzLnByZXZpZXdzO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ29wdGlvbnMnXSA9IHRoaXMub3B0aW9uczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tZWRpYSAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5tZWRpYSAhPT0gbnVsbCkge3RvUmV0dXJuWydtZWRpYSddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5tZWRpYSA/ICh0aGlzLm1lZGlhIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLm1lZGlhO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNzaWRzICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydzc2lkcyddID0gdGhpcy5zc2lkczt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kcmFmdFR5cGUgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2RyYWZ0VHlwZSddID0gdGhpcy5kcmFmdFR5cGU7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMubWV0YWRhdGEgIT09ICd1bmRlZmluZWQnICYmIHRoaXMubWV0YWRhdGEgIT09IG51bGwpIHt0b1JldHVyblsnbWV0YWRhdGEnXSA9ICd0b0FwaUpzb24nIGluIHRoaXMubWV0YWRhdGEgPyAodGhpcy5tZXRhZGF0YSBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5tZXRhZGF0YTt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy55b3V0dWJlQ3VzdG9taXphdGlvbiAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy55b3V0dWJlQ3VzdG9taXphdGlvbiAhPT0gbnVsbCkge3RvUmV0dXJuWyd5b3V0dWJlQ3VzdG9taXphdGlvbiddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy55b3V0dWJlQ3VzdG9taXphdGlvbiA/ICh0aGlzLnlvdXR1YmVDdXN0b21pemF0aW9uIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnlvdXR1YmVDdXN0b21pemF0aW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNzaWREcmFmdFR5cGVzICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLnNzaWREcmFmdFR5cGVzICE9PSBudWxsKSB7dG9SZXR1cm5bJ3NzaWREcmFmdFR5cGVzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnNzaWREcmFmdFR5cGVzID8gKHRoaXMuc3NpZERyYWZ0VHlwZXMgYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuc3NpZERyYWZ0VHlwZXM7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuaXNIaWRkZW4gIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2lzSGlkZGVuJ10gPSB0aGlzLmlzSGlkZGVuO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnRpa3Rva0N1c3RvbWl6YXRpb24gIT09ICd1bmRlZmluZWQnICYmIHRoaXMudGlrdG9rQ3VzdG9taXphdGlvbiAhPT0gbnVsbCkge3RvUmV0dXJuWyd0aWt0b2tDdXN0b21pemF0aW9uJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLnRpa3Rva0N1c3RvbWl6YXRpb24gPyAodGhpcy50aWt0b2tDdXN0b21pemF0aW9uIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLnRpa3Rva0N1c3RvbWl6YXRpb247fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYmxvZ1Bvc3RDdXN0b21pemF0aW9uICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzLmJsb2dQb3N0Q3VzdG9taXphdGlvbiAhPT0gbnVsbCkge3RvUmV0dXJuWydibG9nUG9zdEN1c3RvbWl6YXRpb24nXSA9ICd0b0FwaUpzb24nIGluIHRoaXMuYmxvZ1Bvc3RDdXN0b21pemF0aW9uID8gKHRoaXMuYmxvZ1Bvc3RDdXN0b21pemF0aW9uIGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmJsb2dQb3N0Q3VzdG9taXphdGlvbjt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5jYW1wYWlnbkN1c3RvbWl6YXRpb24gIT09ICd1bmRlZmluZWQnICYmIHRoaXMuY2FtcGFpZ25DdXN0b21pemF0aW9uICE9PSBudWxsKSB7dG9SZXR1cm5bJ2NhbXBhaWduQ3VzdG9taXphdGlvbiddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5jYW1wYWlnbkN1c3RvbWl6YXRpb24gPyAodGhpcy5jYW1wYWlnbkN1c3RvbWl6YXRpb24gYXMgYW55KS50b0FwaUpzb24oKSA6IHRoaXMuY2FtcGFpZ25DdXN0b21pemF0aW9uO31cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmJyYW5kSWQgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ2JyYW5kSWQnXSA9IHRoaXMuYnJhbmRJZDt9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5tdWx0aWxvY2F0aW9uUG9zdElkICE9PSAndW5kZWZpbmVkJykge3RvUmV0dXJuWydtdWx0aWxvY2F0aW9uUG9zdElkJ10gPSB0aGlzLm11bHRpbG9jYXRpb25Qb3N0SWQ7fVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc29jaWFsTmV0d29ya0lkZW50aWZpZXIgIT09ICd1bmRlZmluZWQnKSB7dG9SZXR1cm5bJ3NvY2lhbE5ldHdvcmtJZGVudGlmaWVyJ10gPSB0aGlzLnNvY2lhbE5ldHdvcmtJZGVudGlmaWVyO31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVwZGF0ZURyYWZ0UmVzcG9uc2UgaW1wbGVtZW50cyBpLlVwZGF0ZURyYWZ0UmVzcG9uc2VJbnRlcmZhY2Uge1xuICAgIGRyYWZ0OiBEcmFmdDtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFVwZGF0ZURyYWZ0UmVzcG9uc2Uge1xuICAgICAgICBsZXQgbSA9IG5ldyBVcGRhdGVEcmFmdFJlc3BvbnNlKCk7XG4gICAgICAgIG0gPSBPYmplY3QuYXNzaWduKG0sIHByb3RvKTtcbiAgICAgICAgaWYgKHByb3RvLmRyYWZ0KSB7bS5kcmFmdCA9IERyYWZ0LmZyb21Qcm90byhwcm90by5kcmFmdCk7fVxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihrd2FyZ3M/OiBpLlVwZGF0ZURyYWZ0UmVzcG9uc2VJbnRlcmZhY2UpIHtcbiAgICAgICAgaWYgKCFrd2FyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGt3YXJncyk7XG4gICAgfVxuXG4gICAgdG9BcGlKc29uKCk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IHRvUmV0dXJuOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kcmFmdCAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5kcmFmdCAhPT0gbnVsbCkge3RvUmV0dXJuWydkcmFmdCddID0gJ3RvQXBpSnNvbicgaW4gdGhpcy5kcmFmdCA/ICh0aGlzLmRyYWZ0IGFzIGFueSkudG9BcGlKc29uKCkgOiB0aGlzLmRyYWZ0O31cbiAgICAgICAgcmV0dXJuIHRvUmV0dXJuO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVwZGF0ZU11bHRpTUxEcmFmdHNSZXF1ZXN0IGltcGxlbWVudHMgaS5VcGRhdGVNdWx0aU1MRHJhZnRzUmVxdWVzdEludGVyZmFjZSB7XG4gICAgZHJhZnRzOiBVcGRhdGVEcmFmdFJlcXVlc3RbXTtcblxuICAgIHN0YXRpYyBmcm9tUHJvdG8ocHJvdG86IGFueSk6IFVwZGF0ZU11bHRpTUxEcmFmdHNSZXF1ZXN0IHtcbiAgICAgICAgbGV0IG0gPSBuZXcgVXBkYXRlTXVsdGlNTERyYWZ0c1JlcXVlc3QoKTtcbiAgICAgICAgbSA9IE9iamVjdC5hc3NpZ24obSwgcHJvdG8pO1xuICAgICAgICBpZiAocHJvdG8uZHJhZnRzKSB7bS5kcmFmdHMgPSBwcm90by5kcmFmdHMubWFwKFVwZGF0ZURyYWZ0UmVxdWVzdC5mcm9tUHJvdG8pO31cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3Ioa3dhcmdzPzogaS5VcGRhdGVNdWx0aU1MRHJhZnRzUmVxdWVzdEludGVyZmFjZSkge1xuICAgICAgICBpZiAoIWt3YXJncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywga3dhcmdzKTtcbiAgICB9XG5cbiAgICB0b0FwaUpzb24oKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgdG9SZXR1cm46IHtcbiAgICAgICAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRyYWZ0cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5kcmFmdHMgIT09IG51bGwpIHt0b1JldHVyblsnZHJhZnRzJ10gPSAndG9BcGlKc29uJyBpbiB0aGlzLmRyYWZ0cyA/ICh0aGlzLmRyYWZ0cyBhcyBhbnkpLnRvQXBpSnNvbigpIDogdGhpcy5kcmFmdHM7fVxuICAgICAgICByZXR1cm4gdG9SZXR1cm47XG4gICAgfVxufVxuXG4iXX0=