@sunbird-cb/toc 0.0.25 → 0.0.26

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 (23) hide show
  1. package/esm2022/lib/_collection/_common/ai-tutor/ai-tutor.component.mjs +1169 -0
  2. package/esm2022/lib/_collection/_common/ai-tutor/socket.service.mjs +121 -0
  3. package/esm2022/lib/_collection/_common/content-toc/ai-tutor-confirm-popup/ai-tutor-confirm-popup.component.mjs +3 -3
  4. package/esm2022/lib/_collection/_common/content-toc/content-toc.component.mjs +15 -6
  5. package/esm2022/lib/_collection/_common/content-toc/content-toc.module.mjs +7 -2
  6. package/esm2022/lib/components/app-toc-cios-home/app-toc-cios-home.component.mjs +3 -3
  7. package/esm2022/lib/components/app-toc-home-v2/app-toc-home-v2.component.mjs +2 -2
  8. package/esm2022/lib/services/root.service.mjs +106 -0
  9. package/fesm2022/sunbird-cb-toc.mjs +7800 -6423
  10. package/fesm2022/sunbird-cb-toc.mjs.map +1 -1
  11. package/lib/_collection/_common/ai-tutor/ai-tutor.component.d.ts +140 -0
  12. package/lib/_collection/_common/ai-tutor/ai-tutor.component.d.ts.map +1 -0
  13. package/lib/_collection/_common/ai-tutor/socket.service.d.ts +20 -0
  14. package/lib/_collection/_common/ai-tutor/socket.service.d.ts.map +1 -0
  15. package/lib/_collection/_common/content-toc/ai-tutor-confirm-popup/ai-tutor-confirm-popup.component.d.ts +1 -1
  16. package/lib/_collection/_common/content-toc/ai-tutor-confirm-popup/ai-tutor-confirm-popup.component.d.ts.map +1 -1
  17. package/lib/_collection/_common/content-toc/content-toc.component.d.ts +2 -1
  18. package/lib/_collection/_common/content-toc/content-toc.component.d.ts.map +1 -1
  19. package/lib/_collection/_common/content-toc/content-toc.module.d.ts +29 -28
  20. package/lib/_collection/_common/content-toc/content-toc.module.d.ts.map +1 -1
  21. package/lib/services/root.service.d.ts +27 -0
  22. package/lib/services/root.service.d.ts.map +1 -0
  23. package/package.json +1 -1
@@ -0,0 +1,106 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { BehaviorSubject, throwError } from 'rxjs';
3
+ import { HttpHeaders } from '@angular/common/http';
4
+ import { catchError } from 'rxjs/operators';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common/http";
7
+ const PROXY_CREATE_V8 = '/apis/proxies/v8';
8
+ const API_END_POINTS = {
9
+ CREATE_USER_API: `${PROXY_CREATE_V8}/discussion/user/v1/create`,
10
+ LANGUAGES: '/api/faq/v1/assistant/available/language',
11
+ CONFIG: '/api/faq/v1/assistant/configs/language',
12
+ AI_GLOBAL_SEARCH: `${PROXY_CREATE_V8}/chatbot/v3/search`,
13
+ AI_CHAT_FEEDBACK: `${PROXY_CREATE_V8}/chatbot/v3/feedbacks/save`,
14
+ AI_GLOBAL_INTERNET_SEARCH: `${PROXY_CREATE_V8}/chatbot/v3/global/search`,
15
+ SUPPORT_AI_START_CHAT: `${PROXY_CREATE_V8}/support/ai/chat/start`,
16
+ SUPPORT_AI_SEND_CHAT: `${PROXY_CREATE_V8}/support/ai/chat/send`
17
+ };
18
+ export class RootService {
19
+ constructor(http) {
20
+ this.http = http;
21
+ this.openSupportAIChatbot = new BehaviorSubject(false);
22
+ this.showNavbarDisplay$ = new BehaviorSubject(true);
23
+ }
24
+ createUser(request) {
25
+ return this.http.post(API_END_POINTS.CREATE_USER_API, request);
26
+ }
27
+ setDiscussionConfig(config) {
28
+ this.discussionCnfig = config;
29
+ }
30
+ getCookie(name) {
31
+ const ca = document.cookie.split(';');
32
+ const caLen = ca.length;
33
+ const cookieName = `${name}=`;
34
+ let c;
35
+ for (let i = 0; i < caLen; i += 1) {
36
+ c = ca[i].replace(/^\s+/g, '');
37
+ if (c.indexOf(cookieName) === 0) {
38
+ return c.substring(cookieName.length, c.length);
39
+ }
40
+ }
41
+ return '';
42
+ }
43
+ deleteCookie(name) {
44
+ this.setCookie(name, '', -1);
45
+ }
46
+ setCookie(name, value, expireDays, path = '') {
47
+ const d = new Date();
48
+ d.setTime(d.getTime() + expireDays * 24 * 60 * 60 * 1000);
49
+ const expires = `expires=${d.toUTCString()}`;
50
+ const cpath = path ? `; path=${path}` : '';
51
+ document.cookie = `${name}=${value}; ${expires}${cpath}`;
52
+ }
53
+ getChatData(tabType) {
54
+ return this.http.post(`${API_END_POINTS.CONFIG}`, tabType);
55
+ }
56
+ getLangugages() {
57
+ return this.http.get(`${API_END_POINTS.LANGUAGES}`);
58
+ }
59
+ aiGlobalSearch(requestBody, chatId, userID) {
60
+ return this.http.post(`${API_END_POINTS.AI_GLOBAL_SEARCH}?chatID=${chatId}&userID=${userID}`, requestBody).pipe(catchError(error => {
61
+ if (error.status === 502) {
62
+ console.error('502 Bad Gateway from aiGlobalSearch');
63
+ }
64
+ else if (error.status === 500) {
65
+ console.error('500 Internal Server Error from aiGlobalSearch');
66
+ }
67
+ else {
68
+ console.error(`Unhandled error (${error.status}):`, error.message);
69
+ }
70
+ return throwError(() => error);
71
+ }));
72
+ }
73
+ saveAIChatPositiveContentRating(requestBody, chatId, userID) {
74
+ console.log('chatId=', chatId, 'userID=', userID);
75
+ return this.http.post(`${API_END_POINTS.AI_CHAT_FEEDBACK}?chatID=${chatId}&userID=${userID}`, requestBody);
76
+ }
77
+ shareAIFeedback(requestBody, chatId, userID) {
78
+ return this.http.post(`${API_END_POINTS.AI_CHAT_FEEDBACK}?chatID=${chatId}&userID=${userID}`, requestBody);
79
+ }
80
+ aiGlobalSearchFromInternet(requestBody, chatId, userID) {
81
+ return this.http.post(`${API_END_POINTS.AI_GLOBAL_INTERNET_SEARCH}?chatID=${chatId}&user_id=${userID}`, requestBody);
82
+ }
83
+ aiStartChathForSupport(requestBody, userID) {
84
+ const headers = new HttpHeaders()
85
+ .set('user-id', userID);
86
+ return this.http.post(`${API_END_POINTS.SUPPORT_AI_START_CHAT}`, requestBody, {
87
+ headers
88
+ });
89
+ }
90
+ aiSendChathForSupport(requestBody, userID) {
91
+ const headers = new HttpHeaders()
92
+ .set('user-id', userID);
93
+ return this.http.post(`${API_END_POINTS.SUPPORT_AI_SEND_CHAT}`, requestBody, {
94
+ headers
95
+ });
96
+ }
97
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RootService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
98
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RootService, providedIn: 'root' }); }
99
+ }
100
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: RootService, decorators: [{
101
+ type: Injectable,
102
+ args: [{
103
+ providedIn: 'root',
104
+ }]
105
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }]; } });
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL3NlcnZpY2VzL3Jvb3Quc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzFDLE9BQU8sRUFBRSxlQUFlLEVBQWMsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQzlELE9BQU8sRUFBYyxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUM5RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7OztBQUUzQyxNQUFNLGVBQWUsR0FBRyxrQkFBa0IsQ0FBQTtBQUUxQyxNQUFNLGNBQWMsR0FBRztJQUNyQixlQUFlLEVBQUUsR0FBRyxlQUFlLDRCQUE0QjtJQUMvRCxTQUFTLEVBQUUsMENBQTBDO0lBQ3JELE1BQU0sRUFBRSx3Q0FBd0M7SUFDaEQsZ0JBQWdCLEVBQUUsR0FBRyxlQUFlLG9CQUFvQjtJQUN4RCxnQkFBZ0IsRUFBQyxHQUFHLGVBQWUsNEJBQTRCO0lBQy9ELHlCQUF5QixFQUFFLEdBQUcsZUFBZSwyQkFBMkI7SUFDeEUscUJBQXFCLEVBQUUsR0FBRyxlQUFlLHdCQUF3QjtJQUNqRSxvQkFBb0IsRUFBRSxHQUFHLGVBQWUsdUJBQXVCO0NBQ2hFLENBQUE7QUFNRCxNQUFNLE9BQU8sV0FBVztJQUt0QixZQUNVLElBQWdCO1FBQWhCLFNBQUksR0FBSixJQUFJLENBQVk7UUFMMUIseUJBQW9CLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUE7UUFDMUQsdUJBQWtCLEdBQUcsSUFBSSxlQUFlLENBQVUsSUFBSSxDQUFDLENBQUE7SUFLbkQsQ0FBQztJQUVMLFVBQVUsQ0FBQyxPQUFZO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQU0sY0FBYyxD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QUFDLFdBQWUsRUFBRSxNQUFVO1FBQy9DLE1BQU0sT0FBTyxHQUFHLElBQUksV0FBVyxFQUFFO2FBQzlCLEdBQUcsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUE7UUFDekIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBTSxHQUFHLGNBQWMsQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLFdBQVcsRUFBRTtZQUNoRixPQUFPO1NBRVIsQ0FBQyxDQUFBO0lBQ0osQ0FBQzsrR0E3RlUsV0FBVzttSEFBWCxXQUFXLGNBSFYsTUFBTTs7NEZBR1AsV0FBVztrQkFKdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJ1xuaW1wb3J0IHsgY2F0Y2hFcnJvciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuXG5jb25zdCBQUk9YWV9DUkVBVEVfVjggPSAnL2FwaXMvcHJveGllcy92OCdcblxuY29uc3QgQVBJX0VORF9QT0lOVFMgPSB7XG4gIENSRUFURV9VU0VSX0FQSTogYCR7UFJPWFlfQ1JFQVRFX1Y4fS9kaXNjdXNzaW9uL3VzZXIvdjEvY3JlYXRlYCxcbiAgTEFOR1VBR0VTOiAnL2FwaS9mYXEvdjEvYXNzaXN0YW50L2F2YWlsYWJsZS9sYW5ndWFnZScsXG4gIENPTkZJRzogJy9hcGkvZmFxL3YxL2Fzc2lzdGFudC9jb25maWdzL2xhbmd1YWdlJyxcbiAgQUlfR0xPQkFMX1NFQVJDSDogYCR7UFJPWFlfQ1JFQVRFX1Y4fS9jaGF0Ym90L3YzL3NlYXJjaGAsXG4gIEFJX0NIQVRfRkVFREJBQ0s6YCR7UFJPWFlfQ1JFQVRFX1Y4fS9jaGF0Ym90L3YzL2ZlZWRiYWNrcy9zYXZlYCxcbiAgQUlfR0xPQkFMX0lOVEVSTkVUX1NFQVJDSDogYCR7UFJPWFlfQ1JFQVRFX1Y4fS9jaGF0Ym90L3YzL2dsb2JhbC9zZWFyY2hgLFxuICBTVVBQT1JUX0FJX1NUQVJUX0NIQVQ6IGAke1BST1hZX0NSRUFURV9WOH0vc3VwcG9ydC9haS9jaGF0L3N0YXJ0YCxcbiAgU1VQUE9SVF9BSV9TRU5EX0NIQVQ6IGAke1BST1hZX0NSRUFURV9WOH0vc3VwcG9ydC9haS9jaGF0L3NlbmRgXG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcblxuZXhwb3J0IGNsYXNzIFJvb3RTZXJ2aWNlIHtcbiAgb3BlblN1cHBvcnRBSUNoYXRib3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKVxuICBzaG93TmF2YmFyRGlzcGxheSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpXG4gIGRpc2N1c3Npb25DbmZpZzogYW55XG4gIGlHT1RBSUNoYXRIaXN0b3J5OmFueVxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICkgeyB9XG5cbiAgY3JlYXRlVXNlcihyZXF1ZXN0OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KEFQSV9FTkRfUE9JTlRTLkNSRUFURV9VU0VSX0FQSSwgcmVxdWVzdClcbiAgfVxuXG4gIHNldERpc2N1c3Npb25Db25maWcoY29uZmlnOiBhbnkpIHtcbiAgICB0aGlzLmRpc2N1c3Npb25DbmZpZyA9IGNvbmZpZ1xuICB9XG4gIGdldENvb2tpZShuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBjYTogc3RyaW5nW10gPSBkb2N1bWVudC5jb29raWUuc3BsaXQoJzsnKVxuICAgIGNvbnN0IGNhTGVuOiBudW1iZXIgPSBjYS5sZW5ndGhcbiAgICBjb25zdCBjb29raWVOYW1lID0gYCR7bmFtZX09YFxuICAgIGxldCBjOiBzdHJpbmdcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2FMZW47IGkgKz0gMSkge1xuICAgICAgYyA9IGNhW2ldLnJlcGxhY2UoL15cXHMrL2csICcnKVxuICAgICAgaWYgKGMuaW5kZXhPZihjb29raWVOYW1lKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gYy5zdWJzdHJpbmcoY29va2llTmFtZS5sZW5ndGgsIGMubGVuZ3RoKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJydcbiAgfVxuICBkZWxldGVDb29raWUobmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zZXRDb29raWUobmFtZSwgJycsIC0xKVxuICB9XG5cbiAgc2V0Q29va2llKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZywgZXhwaXJlRGF5czogbnVtYmVyLCBwYXRoOiBzdHJpbmcgPSAnJykge1xuICAgIGNvbnN0IGQgPSBuZXcgRGF0ZSgpXG4gICAgZC5zZXRUaW1lKGQuZ2V0VGltZSgpICsgZXhwaXJlRGF5cyAqIDI0ICogNjAgKiA2MCAqIDEwMDApXG4gICAgY29uc3QgZXhwaXJlcyA9IGBleHBpcmVzPSR7ZC50b1VUQ1N0cmluZygpfWBcbiAgICBjb25zdCBjcGF0aCA9IHBhdGggPyBgOyBwYXRoPSR7cGF0aH1gIDogJydcbiAgICBkb2N1bWVudC5jb29raWUgPSBgJHtuYW1lfT0ke3ZhbHVlfTsgJHtleHBpcmVzfSR7Y3BhdGh9YFxuICB9XG4gIGdldENoYXREYXRhKHRhYlR5cGU6IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7QVBJX0VORF9QT0lOVFMuQ09ORklHfWAsIHRhYlR5cGUpXG4gIH1cblxuICBnZXRMYW5ndWdhZ2VzKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PihgJHtBUElfRU5EX1BPSU5UUy5MQU5HVUFHRVN9YClcbiAgfVxuXG4gIGFpR2xvYmFsU2VhcmNoKHJlcXVlc3RCb2R5OmFueSwgY2hhdElkOmFueSwgdXNlcklEOmFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7QVBJX0VORF9QT0lOVFMuQUlfR0xPQkFMX1NFQVJDSH0/Y2hhdElEPSR7Y2hhdElkfSZ1c2VySUQ9JHt1c2VySUR9YCwgcmVxdWVzdEJvZHkpLnBpcGUoXG4gICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNTAyKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignNTAyIEJhZCBHYXRld2F5IGZyb20gYWlHbG9iYWxTZWFyY2gnKTtcbiAgICAgICAgfSBlbHNlIGlmIChlcnJvci5zdGF0dXMgPT09IDUwMCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJzUwMCBJbnRlcm5hbCBTZXJ2ZXIgRXJyb3IgZnJvbSBhaUdsb2JhbFNlYXJjaCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFVuaGFuZGxlZCBlcnJvciAoJHtlcnJvci5zdGF0dXN9KTpgLCBlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBzYXZlQUlDaGF0UG9zaXRpdmVDb250ZW50UmF0aW5nKHJlcXVlc3RCb2R5OmFueSwgY2hhdElkOmFueSwgdXNlcklEOmFueSkge1xuICAgIGNvbnNvbGUubG9nKCdjaGF0SWQ9JyxjaGF0SWQsICd1c2VySUQ9Jyx1c2VySUQpXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7QVBJX0VORF9QT0lOVFMuQUlfQ0hBVF9GRUVEQkFDS30/Y2hhdElEPSR7Y2hhdElkfSZ1c2VySUQ9JHt1c2VySUR9YCwgcmVxdWVzdEJvZHkpXG4gIH1cblxuICBzaGFyZUFJRmVlZGJhY2socmVxdWVzdEJvZHk6YW55LCBjaGF0SWQ6YW55LCB1c2VySUQ6YW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PGFueT4oYCR7QVBJX0VORF9QT0lOVFMuQUlfQ0hBVF9GRUVEQkFDS30/Y2hhdElEPSR7Y2hhdElkfSZ1c2VySUQ9JHt1c2VySUR9YCwgcmVxdWVzdEJvZHkpXG4gIH1cblxuICBhaUdsb2JhbFNlYXJjaEZyb21JbnRlcm5ldChyZXF1ZXN0Qm9keTphbnksIGNoYXRJZDphbnksIHVzZXJJRDphbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHtBUElfRU5EX1BPSU5UUy5BSV9HTE9CQUxfSU5URVJORVRfU0VBUkNIfT9jaGF0SUQ9JHtjaGF0SWR9JnVzZXJfaWQ9JHt1c2VySUR9YCwgcmVxdWVzdEJvZHkpXG4gIH1cblxuICBhaVN0YXJ0Q2hhdGhGb3JTdXBwb3J0KHJlcXVlc3RCb2R5OmFueSwgdXNlcklEOmFueSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycygpXG4gICAgICAuc2V0KCd1c2VyLWlkJywgdXNlcklEKVxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxhbnk+KGAke0FQSV9FTkRfUE9JTlRTLlNVUFBPUlRfQUlfU1RBUlRfQ0hBVH1gLCByZXF1ZXN0Qm9keSwge1xuICAgICAgaGVhZGVyc1xuICAgICAgXG4gICAgfSlcbiAgfVxuXG4gIGFpU2VuZENoYXRoRm9yU3VwcG9ydChyZXF1ZXN0Qm9keTphbnksIHVzZXJJRDphbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKVxuICAgICAgLnNldCgndXNlci1pZCcsIHVzZXJJRClcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8YW55PihgJHtBUElfRU5EX1BPSU5UUy5TVVBQT1JUX0FJX1NFTkRfQ0hBVH1gLCByZXF1ZXN0Qm9keSwge1xuICAgICAgaGVhZGVyc1xuICAgICAgXG4gICAgfSlcbiAgfVxufVxuIl19