@sinequa/assistant 3.8.5-rc1 → 3.8.6

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 (37) hide show
  1. package/chat/styles/assistant.scss +102 -102
  2. package/chat/styles/references.scss +22 -22
  3. package/esm2020/chat/charts/chart/chart.component.mjs +3 -3
  4. package/esm2020/chat/chat-message/chat-message.component.mjs +3 -3
  5. package/esm2020/chat/chat-reference/chat-reference.component.mjs +3 -3
  6. package/esm2020/chat/chat-settings-v3/chat-settings-v3.component.mjs +3 -3
  7. package/esm2020/chat/chat.component.mjs +3 -3
  8. package/esm2020/chat/chat.service.mjs +1 -1
  9. package/esm2020/chat/debug-message/debug-message.component.mjs +3 -3
  10. package/esm2020/chat/documents-upload/document-list/document-list.component.mjs +3 -3
  11. package/esm2020/chat/documents-upload/document-overview/document-overview.component.mjs +3 -3
  12. package/esm2020/chat/documents-upload/document-upload/document-upload.component.mjs +3 -3
  13. package/esm2020/chat/documents-upload/documents-upload.model.mjs +1 -1
  14. package/esm2020/chat/documents-upload/documents-upload.service.mjs +1 -1
  15. package/esm2020/chat/format-icon/format-icon.component.mjs +1 -1
  16. package/esm2020/chat/format-icon/icons.mjs +1 -1
  17. package/esm2020/chat/initials-avatar/initials-avatar.component.mjs +3 -3
  18. package/esm2020/chat/instance-manager.service.mjs +1 -1
  19. package/esm2020/chat/messages/de.mjs +1 -1
  20. package/esm2020/chat/messages/en.mjs +1 -1
  21. package/esm2020/chat/messages/fr.mjs +1 -1
  22. package/esm2020/chat/messages/index.mjs +1 -1
  23. package/esm2020/chat/prompt.component.mjs +23 -23
  24. package/esm2020/chat/public-api.mjs +1 -1
  25. package/esm2020/chat/rest-chat.service.mjs +1 -1
  26. package/esm2020/chat/saved-chats/saved-chats.component.mjs +3 -3
  27. package/esm2020/chat/token-progress-bar/token-progress-bar.component.mjs +3 -3
  28. package/esm2020/chat/types.mjs +1 -1
  29. package/esm2020/chat/websocket-chat.service.mjs +1 -1
  30. package/esm2020/public-api.mjs +1 -1
  31. package/fesm2015/sinequa-assistant-chat.mjs +46 -46
  32. package/fesm2015/sinequa-assistant-chat.mjs.map +1 -1
  33. package/fesm2015/sinequa-assistant.mjs.map +1 -1
  34. package/fesm2020/sinequa-assistant-chat.mjs +46 -46
  35. package/fesm2020/sinequa-assistant-chat.mjs.map +1 -1
  36. package/fesm2020/sinequa-assistant.mjs.map +1 -1
  37. package/package.json +1 -1
@@ -330,4 +330,4 @@ ChatService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version:
330
330
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: ChatService, decorators: [{
331
331
  type: Injectable
332
332
  }] });
333
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNzaXN0YW50L2NoYXQvY2hhdC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzVDLE9BQU8sR0FBRyxNQUFNLFlBQVksQ0FBQztBQUM3QixPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBRW5ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsVUFBVSxFQUFTLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkQsT0FBTyxFQUFlLFdBQVcsRUFBZSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFMUcsT0FBTyxFQUEySyxnQkFBZ0IsRUFBRSxNQUFNLFNBQVMsQ0FBQzs7QUFHcE4sTUFBTSxPQUFnQixXQUFXO0lBRGpDO1FBSUUsMEVBQTBFO1FBQzFFLGlCQUFZLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDbkQseUVBQXlFO1FBQ3pFLGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDbEQsc0RBQXNE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S0FBSyxXQUFXLEVBQUU7WUFDdEQsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsb0JBQW9CLENBQUMsT0FBTyxLQUFLLElBQUksRUFBRTtnQkFDdEQsZ0NBQWdDLEdBQUcsS0FBSyxDQUFDO2dCQUN6QyxNQUFNO2FBQ1A7WUFDRCxLQUFLLEVBQUUsQ0FBQztTQUNUO1FBQ0QsT0FBTyxnQ0FBZ0MsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNPLGNBQWMsQ0FBQyxLQUFhO1FBQ3BDLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMxQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUM7SUFDN0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQWMsRUFBRSxPQUFZO1FBQzlDLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FDbkIsWUFBWSxFQUNaLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxLQUFLLENBQzdDLENBQUM7SUFDSixDQUFDOzt3R0FoYW1CLFdBQVc7NEdBQVgsV0FBVzsyRkFBWCxXQUFXO2tCQURoQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgcGFyc2VJU08sIHRvRGF0ZSB9IGZyb20gXCJkYXRlLWZuc1wiO1xyXG5pbXBvcnQgZ2V0IGZyb20gXCJsb2Rhc2gvZ2V0XCI7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XHJcblxyXG5pbXBvcnQgeyBVc2VyUHJlZmVyZW5jZXMgfSBmcm9tIFwiQHNpbmVxdWEvY29tcG9uZW50cy91c2VyLXNldHRpbmdzXCI7XHJcbmltcG9ydCB7IEFwcFNlcnZpY2UsIFF1ZXJ5IH0gZnJvbSBcIkBzaW5lcXVhL2NvcmUvYXBwLXV0aWxzXCI7XHJcbmltcG9ydCB7IFV0aWxzIH0gZnJvbSBcIkBzaW5lcXVhL2NvcmUvYmFzZVwiO1xyXG5pbXBvcnQgeyBJbnRsU2VydmljZSB9IGZyb20gXCJAc2luZXF1YS9jb3JlL2ludGxcIjtcclxuaW1wb3J0IHsgTG9naW5TZXJ2aWNlIH0gZnJvbSBcIkBzaW5lcXVhL2NvcmUvbG9naW5cIjtcclxuaW1wb3J0IHsgQ29uZmlybVR5cGUsIE1vZGFsQnV0dG9uLCBNb2RhbFJlc3VsdCwgTW9kYWxTZXJ2aWNlIH0gZnJvbSBcIkBzaW5lcXVhL2NvcmUvbW9kYWxcIjtcclxuaW1wb3J0IHsgTm90aWZpY2F0aW9uc1NlcnZpY2UgfSBmcm9tIFwiQHNpbmVxdWEvY29yZS9ub3RpZmljYXRpb25cIjtcclxuaW1wb3J0IHsgQXVkaXRXZWJTZXJ2aWNlLCBQcmluY2lwYWxXZWJTZXJ2aWNlLCBVc2VyU2V0dGluZ3NXZWJTZXJ2aWNlIH0gZnJvbSBcIkBzaW5lcXVhL2NvcmUvd2ViLXNlcnZpY2VzXCI7XHJcblxyXG5pbXBvcnQgeyBDaGF0Q29uZmlnLCBDaGF0TWVzc2FnZSwgQ2hhdFJlc3BvbnNlLCBDaGF0VXNhZ2VNZXRyaWNzLCBHbGxtRnVuY3Rpb24sIEdsbG1Nb2RlbERlc2NyaXB0aW9uLCBRdW90YSwgU2F2ZWRDaGF0LCBTYXZlZENoYXRIaXN0b3J5LCBUb2tlbkNvbnN1bXB0aW9uLCBVc2VyVG9rZW5Db25zdW1wdGlvbiwgY2hhdENvbmZpZ1NjaGVtYSB9IGZyb20gXCIuL3R5cGVzXCI7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDaGF0U2VydmljZSB7XHJcbiAgLyoqIE5hbWUgb2YgdGhlIGFzc2lzdGFudCBwbHVnaW4gT1Igd2Vic29ja2V0IGVuZHBvaW50LiAqL1xyXG4gIFJFUVVFU1RfVVJMOiBzdHJpbmc7XHJcbiAgLyoqIEVtaXQgdHJ1ZSBvbmNlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgYXNzaXN0YW50IHByb2Nlc3MgaXMgZG9uZS4gKi9cclxuICBpbml0UHJvY2VzcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICAvKiogRW1pdCB0cnVlIG9uY2UgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBhc3Npc3RhbnQgY29uZmlnIGlzIGRvbmUuICovXHJcbiAgaW5pdENvbmZpZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICAvKiogRW1pdCB0aGUgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGFzc2lzdGFudC4gKi9cclxuICBhc3Npc3RhbnRDb25maWckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDaGF0Q29uZmlnIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gIC8qKiBFbWl0IHRydWUgaWYgdGhlIHVzZXIgaGFzIGJlZW4gb3ZlcnJpZGRlbiwgZmFsc2Ugb3RoZXJ3aXNlLiAqL1xyXG4gIHVzZXJPdmVycmlkZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XHJcbiAgLyoqXHJcbiAgICogRW1pdCB0cnVlIGlmIHRoZSBmZXRjaCBvZiBhbiBhc3Npc3RhbnQncyByZXNwb25zZSBpcyBvbmdvaW5nIChpdCBpbmNsdWRlcyBTdHJlYW1pbmcgc3RhdHVzIG9mIHRoZSBhc3Npc3RhbnQgZW5kcG9pbnQgQU5EIHNhdmluZyB0aGUgZGlzY3Vzc2lvbiBpZiBzYXZlIENoYXQgaXMgZW5hYmxlZCkuXHJcbiAgICogVGhpcyBpcyB1c2VkIHRvIHByZXZlbnQgbXVsdGlwbGUgZmV0Y2hlcyBhdCB0aGUgc2FtZSB0aW1lLlxyXG4gICAqIFR5cGljYWxseSwgdGhlcmUgaXMgbm8gcHJvYmxlbSBjaGFpbmluZyBmZXRjaGVzLCBidXQgd2hlbiBmb3JjaW5nIGEgcmVsb2FkIGFmdGVyIHF1ZXJ5IGNoYW5nZXMgY2FzZXMsIGl0IGNhbid0IGJlIGFsbG93ZWQgYmVjYXVzZSBpdCBicmVha3MgdGhlIHdob2xlIGJ1c2luZXNzIGxvZ2ljLlxyXG4gICovXHJcbiAgc3RyZWFtaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIC8qKiBTdG9yZSB0aGUgbWVzc2FnZXMgaGlzdG9yeSBvZiB0aGUgY3VycmVudCBjaGF0LiAqL1xyXG4gIGNoYXRIaXN0b3J5OiBDaGF0TWVzc2FnZVtdIHwgdW5kZWZpbmVkO1xyXG4gIC8qKiBMaXN0IG9mIG1vZGVscyBhdmFpbGFibGUgb24gdGhlIHNlcnZlci4gKi9cclxuICBtb2RlbHM6IEdsbG1Nb2RlbERlc2NyaXB0aW9uW10gfCB1bmRlZmluZWQ7XHJcbiAgLyoqIExpc3Qgb2YgZnVuY3Rpb25zIGF2YWlsYWJsZSBvbiB0aGUgc2VydmVyLiAqL1xyXG4gIGZ1bmN0aW9uczogR2xsbUZ1bmN0aW9uW10gfCB1bmRlZmluZWQ7XHJcbiAgLyoqIExpc3Qgb2Ygc2F2ZWQgY2hhdHMuICovXHJcbiAgc2F2ZWRDaGF0cyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNhdmVkQ2hhdFtdPihbXSk7XHJcbiAgLyoqIEVtaXQgdGhlIHNhdmVkIGNoYXQgdG8gbG9hZC4gKi9cclxuICBsb2FkU2F2ZWRDaGF0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2F2ZWRDaGF0IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gIC8qKiBFbWl0IHRoZSBxdW90YSBlYWNoIHRpbWUgdGhlIGNoYXQgaXMgaW52b2tlZC4gKi9cclxuICBxdW90YSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFF1b3RhIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gIC8qKiBFbWl0IHRoZSBjYWxjdWxhdGVkIHVzZXIncyB0b2tlbiBjb25zdW1wdGlvbiBiYXNlZCBvbiB0aGUgcXVvdGEuICovXHJcbiAgdXNlclRva2VuQ29uc3VtcHRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxVc2VyVG9rZW5Db25zdW1wdGlvbiB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcclxuICAvKiogRW1pdCB0aGUgY2hhdCB1c2FnZSBtZXRyaWNzIGVhY2ggdGltZSB0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgYXNzaXN0YW50IHJlc3BvbnNlIGlzIGNvbXBsZXRlZC4gKi9cclxuICBjaGF0VXNhZ2VNZXRyaWNzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2hhdFVzYWdlTWV0cmljcyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcclxuICAvKiogRW1pdCB0aGUgY2FsY3VsYXRlZCBjaGF0J3MgdG9rZW4gY29uc3VtcHRpb24gYmFzZWQgb24gdGhlIGNoYXQgdXNhZ2UgbWV0cmljcy4gKi9cclxuICBjaGF0VG9rZW5Db25zdW1wdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRva2VuQ29uc3VtcHRpb24gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XHJcbiAgLyoqIEVtaXQgdHJ1ZSBpZiBcIkNhbmNlbFRhc2tzXCIgaXMgb25nb2luZy4gKi9cclxuICBzdG9wcGluZ0dlbmVyYXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgLyoqIEluc3RhbmNlIElEIG9mIHRoZSBjaGF0IHNlcnZpY2UgZGVmaW5pbmcgdGhlIGFzc2lzdGFudCBpbnN0YW5jZS4gKi9cclxuICBwcml2YXRlIF9jaGF0SW5zdGFuY2VJZDogc3RyaW5nO1xyXG4gIC8qKiBJRCBvZiB0aGUgY3VycmVudCAqKnNhdmVkIGNoYXQqKiBkaXNjdXNzaW9uIHdoaWNoIGlzIHVzZWQgdG8gdXBkYXRlL2dldC9kZWxldGUgaXQuICovXHJcbiAgcHJpdmF0ZSBfc2F2ZWRDaGF0SWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICAvKiogR2VuZXJhdGVkIEdVSUQgZm9yIHRoZSBjdXJyZW50IG5vbi1zYXZlZCBjaGF0IGRpc2N1c3Npb24gdXNlZCB0byBpZGVudGlmeSBhdWRpdCBldmVudHMuXHJcbiAgICogSWYgdGhlIGNoYXQgaXMgc2F2ZWQsIHRoZSBzYXZlZENoYXRJZCBpcyBpbml0aWFsaXplZCB3aXRoIHRoZSB2YWx1ZSBvZiB0aGlzIGNoYXRJZC5cclxuICAgKi9cclxuICBwcml2YXRlIF9jaGF0SWQ6IHN0cmluZztcclxuXHJcbiAgcHVibGljIHVzZXJTZXR0aW5nc1NlcnZpY2UgPSBpbmplY3QoVXNlclNldHRpbmdzV2ViU2VydmljZSk7XHJcbiAgcHVibGljIG5vdGlmaWNhdGlvbnNTZXJ2aWNlID0gaW5qZWN0KE5vdGlmaWNhdGlvbnNTZXJ2aWNlKTtcclxuICBwdWJsaWMgYXVkaXRTZXJ2aWNlID0gaW5qZWN0KEF1ZGl0V2ViU2VydmljZSk7XHJcbiAgcHVibGljIHByZWZzID0gaW5qZWN0KFVzZXJQcmVmZXJlbmNlcyk7XHJcbiAgcHVibGljIGxvZ2luU2VydmljZSA9IGluamVjdChMb2dpblNlcnZpY2UpO1xyXG4gIHB1YmxpYyBhcHBTZXJ2aWNlID0gaW5qZWN0KEFwcFNlcnZpY2UpO1xyXG4gIHB1YmxpYyBpbnRsU2VydmljZSA9IGluamVjdChJbnRsU2VydmljZSk7XHJcbiAgcHVibGljIG1vZGFsU2VydmljZSA9IGluamVjdChNb2RhbFNlcnZpY2UpO1xyXG4gIHB1YmxpYyBwcmluY2lwYWxTZXJ2aWNlID0gaW5qZWN0KFByaW5jaXBhbFdlYlNlcnZpY2UpO1xyXG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemUgdGhlIGNoYXQgcHJvY2Vzc1xyXG4gICAqL1xyXG4gIGFic3RyYWN0IGluaXQoKTogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuXHJcbiAgLyoqXHJcbiAgICogSW5pdGlhbGl6ZSB0aGUgUkVRVUVTVF9VUkxcclxuICAgKi9cclxuICBhYnN0cmFjdCBnZXRSZXF1ZXN0c1VybCgpOiB2b2lkO1xyXG5cclxuICBnZXQgYXNzaXN0YW50cygpOiBhbnkge1xyXG4gICAgaWYgKCF0aGlzLnVzZXJTZXR0aW5nc1NlcnZpY2UudXNlclNldHRpbmdzKVxyXG4gICAgICB0aGlzLnVzZXJTZXR0aW5nc1NlcnZpY2UudXNlclNldHRpbmdzID0ge307XHJcbiAgICBpZiAoIXRoaXMudXNlclNldHRpbmdzU2VydmljZS51c2VyU2V0dGluZ3NbXCJhc3Npc3RhbnRzXCJdKVxyXG4gICAgICB0aGlzLnVzZXJTZXR0aW5nc1NlcnZpY2UudXNlclNldHRpbmdzW1wiYXNzaXN0YW50c1wiXSA9IHt9O1xyXG4gICAgcmV0dXJuICB0aGlzLnVzZXJTZXR0aW5nc1NlcnZpY2UudXNlclNldHRpbmdzW1wiYXNzaXN0YW50c1wiXTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUgaW5zdGFuY2UgSUQgb2YgdGhlIGNoYXQgc2VydmljZVxyXG4gICAqIEByZXR1cm5zIFRoZSBpbnN0YW5jZSBJRCBvZiB0aGUgY2hhdCBzZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0IGNoYXRJbnN0YW5jZUlkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2hhdEluc3RhbmNlSWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQZXJzaXN0IHRoZSBpbnN0YW5jZSBJRCBvZiB0aGUgY2hhdCBzZXJ2aWNlXHJcbiAgICogQHBhcmFtIGluc3RhbmNlSWQgVGhlIGluc3RhbmNlIElEIG9mIHRoZSBjaGF0IHNlcnZpY2VcclxuICAgKi9cclxuICBzZXRDaGF0SW5zdGFuY2VJZChpbnN0YW5jZUlkOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2NoYXRJbnN0YW5jZUlkID0gaW5zdGFuY2VJZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUgSUQgb2YgdGhlIGN1cnJlbnQgY2hhdCBkaXNjdXNzaW9uIHdoaWNoIGlzIHVzZWQgdG8gc2F2ZS9nZXQvZGVsZXRlIGl0XHJcbiAgICogQHJldHVybnMgVGhlIElEIG9mIHRoZSBjdXJyZW50IGNoYXQgZGlzY3Vzc2lvblxyXG4gICAqL1xyXG4gIGdldCBzYXZlZENoYXRJZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NhdmVkQ2hhdElkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGVyc2lzdCB0aGUgSUQgb2YgdGhlIGN1cnJlbnQgY2hhdCBkaXNjdXNzaW9uIHdoaWNoIGlzIHVzZWQgdG8gc2F2ZS9nZXQvZGVsZXRlIGl0XHJcbiAgICogQHBhcmFtIHNhdmVkQ2hhdElkIFRoZSBJRCBvZiB0aGUgY3VycmVudCBjaGF0IGRpc2N1c3Npb24gd2hpY2ggaXMgdXNlZCB0byBzYXZlL2dldC9kZWxldGUgaXRcclxuICAgKi9cclxuICBzZXRTYXZlZENoYXRJZChzYXZlZENoYXRJZDogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9zYXZlZENoYXRJZCA9IHNhdmVkQ2hhdElkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBJRCBvZiB0aGUgY3VycmVudCBjaGF0IGRpc2N1c3Npb24gd2hpY2ggaXMgdXNlZCB0byBpZGVudGlmeSBhdWRpdCBldmVudHNcclxuICAgKiBAcmV0dXJucyBUaGUgSUQgb2YgdGhlIGN1cnJlbnQgY2hhdCBkaXNjdXNzaW9uXHJcbiAgICovXHJcbiAgZ2V0IGNoYXRJZCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NoYXRJZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlbmVyYXRlIGFuIEdVSUQgZm9yIHRoZSBjdXJyZW50IGNoYXQgZGlzY3Vzc2lvbiB3aGljaCBpcyB1c2VkIHRvIGlkZW50aWZ5IGF1ZGl0IGV2ZW50c1xyXG4gICAqIElmIHRoZSBkaXNjdXNzaW9uIGlzIHNhdmVkLCB0aGUgc2F2ZWRDaGF0SWQgaXMgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgdmFsdWUgb2YgdGhpcyBjaGF0SWRcclxuICAgKiBAcGFyYW0gY2hhdElkIGlmIHByb3ZpZGVkLCBpdCB3aWxsIGJlIGNvbnNpZGVyZWQgYXMgdGhlIElEIG9mIHRoZSBjdXJyZW50IGNoYXQgZGlzY3Vzc2lvbiB3aGljaCBpcyB1c2VkIHRvIGlkZW50aWZ5IGF1ZGl0IGV2ZW50c1xyXG4gICAqL1xyXG4gIGdlbmVyYXRlQ2hhdElkKGNoYXRJZD86IHN0cmluZykge1xyXG4gICAgdGhpcy5fY2hhdElkID0gY2hhdElkIHx8IFV0aWxzLmd1aWQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemUgdGhlIGNoYXQgY29uZmlnIGJ5IG1hbmFnaW5nIE9OTFkgc3ViLW9iamVjdCAqKmRlZmF1bHRWYWx1ZXMqKiBjb25maWdzIG9mIHRoZSBzdGFuZGFyZCBhcHAgY29uZmlnIChkZWZpbmVkIGluIHRoZSBjdXN0b21pemF0aW9uIGpzb24gdGFiICkgYW5kIHRoZSB1c2VyIHByZWZlcmVuY2VzLlxyXG4gICAqIFRvIGRvIHNvLCBhIHRyYWNraW5nIG1lY2hhbmlzbSBpcyBpbXBsZW1lbnRlZCB0byBub3RpZnkgdGhlIHVzZXIgYWJvdXQgdGhlIGF2YWlsYWJsZSB1cGRhdGVzIGluIHRoZSBkZWZhdWx0VmFsdWVzIG9iamVjdCBvZiB0aGUgc3RhbmRhcmQgYXBwIGNvbmZpZy5cclxuICAgKiBUaGUgcmVzdCBvZiB0aGUgY29uZmlnIG9iamVjdCBjb21pbmcgZnJvbSBcInN0YW5kYXJkIGFwcCBjb25maWdcIiBpcyB1c2VkIGFzIGl0IGlzIHdpdGhvdXQgYW55IG92ZXJyaWRlLlxyXG4gICAqIFRodXMsIHRoZSB1c2VyIHByZWZlcmVuY2VzIGFyZSB1c2VkIG9ubHkgZm9yIHRoZSBkZWZhdWx0VmFsdWVzIG9iamVjdC5cclxuICAgKiBUaGlzIHByb3ZpZGUgYSBjZW50cmFsaXplZCB3YXkgdG8gbWFuYWdlIHRoZSByZXN0IG9mIHRoZSBjb25maWcgb2JqZWN0IGJ5IGFkbWlucyBhbmQgZW5zdXJlIGEgdW5pcXVlIGNvbW1vbiBiZWhhdmlvciBmb3IgYWxsIHVzZXJzLlxyXG4gICAqL1xyXG4gIGluaXRDaGF0Q29uZmlnKCkge1xyXG4gICAgY29uc3Qga2V5ID0gdGhpcy5jaGF0SW5zdGFuY2VJZDtcclxuICAgIGNvbnN0IHVzZXJTZXR0aW5nc0NvbmZpZyA9IHRoaXMuYXNzaXN0YW50c1trZXldIHx8IHt9O1xyXG4gICAgY29uc3Qgc3RhbmRhcmRDaGF0Q29uZmlnID0gdGhpcy5hcHBTZXJ2aWNlLmFwcD8uZGF0YT8uYXNzaXN0YW50cz8uW2tleV07XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gVmFsaWRhdGUgdGhlIHdob2xlIGNvbmZpZyBvYmplY3QgYWdhaW5zdCB0aGUgc2NoZW1hXHJcbiAgICAgIGNoYXRDb25maWdTY2hlbWEucGFyc2Uoc3RhbmRhcmRDaGF0Q29uZmlnKTtcclxuICAgICAgLy8gSWYgdGhlIHVzZXIgcHJlZmVyZW5jZXMgZG8gbm90IGNvbnRhaW4gYSBjb25maWcncyBkZWZhdWx0VmFsdWVzIG9iamVjdCwga2VlcCB1c2luZyB0aGUgc3RhbmRhcmQgYXBwIGNvbmZpZyBhbmQgbm90aGluZyB0byBzdG9yZSBpbiB0aGUgdXNlciBwcmVmZXJlbmNlc1xyXG4gICAgICBpZiAoIXVzZXJTZXR0aW5nc0NvbmZpZy5kZWZhdWx0VmFsdWVzKSB7XHJcbiAgICAgICAgdGhpcy5hc3Npc3RhbnRDb25maWckLm5leHQoey4uLnN0YW5kYXJkQ2hhdENvbmZpZ30pO1xyXG4gICAgICAgIHRoaXMuaW5pdENvbmZpZyQubmV4dCh0cnVlKTtcclxuICAgICAgfSBlbHNlIHsgLy8gSWYgdGhlIHVzZXIgaGFzIGl0cyBvd24gZGVmYXVsdFZhbHVlcyBpbiBpdHMgdXNlclNldHRpbmdzLCB0aGVuIHdlIG5lZWQgdG8gY2hlY2sgZm9yIHBvdGVudGlhbCB1cGRhdGVzIG1hZGUgYnkgYWRtaW5zIGluIHRoZSBtZWFudGltZSBhbmQgaG93IGhlIHdhbnRzIHRvIG1hbmFnZSB0aGVtXHJcblxyXG4gICAgICAgIC8vIFJldHJpZXZlIGFscmVhZHkgc3RvcmVkIGhhc2hlcyBpbiB0aGUgdXNlciBzZXR0aW5ncyBpZiBleGlzdHNcclxuICAgICAgICBjb25zdCBhcHBsaWVkRGVmYXVsdFZhbHVlc0hhc2ggPSB1c2VyU2V0dGluZ3NDb25maWcuaGFzaGVzPy5bXCJhcHBsaWVkLWRlZmF1bHRWYWx1ZXMtaGFzaFwiXTtcclxuICAgICAgICBjb25zdCBza2lwcGVkRGVmYXVsdFZhbHVlc0hhc2ggPSB1c2VyU2V0dGluZ3NDb25maWcuaGFzaGVzPy5bXCJza2lwcGVkLWRlZmF1bHRWYWx1ZXMtaGFzaFwiXTtcclxuICAgICAgICAvLyBDcmVhdGUgYSBoYXNoIG9mIHRoZSBjdXJyZW50IGRlZmF1bHRWYWx1ZXMgb2YgdGhlIHN0YW5kYXJkQ2hhdENvbmZpZ1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnREZWZhdWx0VmFsdWVzSGFzaCA9IFV0aWxzLnNoYTUxMihKU09OLnN0cmluZ2lmeShzdGFuZGFyZENoYXRDb25maWcuZGVmYXVsdFZhbHVlcykpO1xyXG5cclxuICAgICAgICAvLyBJbXBsZW1lbnQgdGhlIHRyYWNraW5nIG1lY2hhbmlzbSB0byBub3RpZnkgdGhlIHVzZXIgYWJvdXQgdGhlIGF2YWlsYWJsZSB1cGRhdGVzIGluIHRoZSBkZWZhdWx0VmFsdWVzIG9iamVjdCBvZiB0aGUgc3RhbmRhcmQgYXBwIGNvbmZpZ1xyXG4gICAgICAgIGNvbnN0IGNvbmRpdGlvbiA9IChjdXJyZW50RGVmYXVsdFZhbHVlc0hhc2ggIT09IGFwcGxpZWREZWZhdWx0VmFsdWVzSGFzaCkgJiYgKGN1cnJlbnREZWZhdWx0VmFsdWVzSGFzaCAhPT0gc2tpcHBlZERlZmF1bHRWYWx1ZXNIYXNoKTtcclxuICAgICAgICBpZiAoY29uZGl0aW9uKSB7XHJcbiAgICAgICAgICB0aGlzLm1vZGFsU2VydmljZVxyXG4gICAgICAgICAgICAuY29uZmlybSh7XHJcbiAgICAgICAgICAgICAgdGl0bGU6IFwiQXZhaWxhYmxlIHVwZGF0ZXMgIVwiLFxyXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IFwiQ2hhbmdlcyBoYXZlIGJlZW4gbWFkZSB0byB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLiBEbyB5b3Ugd2FudCB0byB1cGRhdGUgeW91ciBvd24gdmVyc2lvbiA/XCIsXHJcbiAgICAgICAgICAgICAgYnV0dG9uczogW1xyXG4gICAgICAgICAgICAgICAgICBuZXcgTW9kYWxCdXR0b24oe3Jlc3VsdDogTW9kYWxSZXN1bHQuTm8sIHRleHQ6IFwiU2VlIG5vIG1vcmVcIn0pLFxyXG4gICAgICAgICAgICAgICAgICBuZXcgTW9kYWxCdXR0b24oe3Jlc3VsdDogTW9kYWxSZXN1bHQuSWdub3JlLCB0ZXh0OiBcIlJlbWluZCBtZSBsYXRlclwifSksXHJcbiAgICAgICAgICAgICAgICAgIG5ldyBNb2RhbEJ1dHRvbih7cmVzdWx0OiBNb2RhbFJlc3VsdC5PSywgdGV4dDogXCJVcGRhdGVcIiwgcHJpbWFyeTogdHJ1ZX0pXHJcbiAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICBjb25maXJtVHlwZTogQ29uZmlybVR5cGUuV2FybmluZ1xyXG4gICAgICAgICAgICB9KS50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZihyZXMgPT09IE1vZGFsUmVzdWx0Lk9LKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc2hlcyA9IHsgLi4udXNlclNldHRpbmdzQ29uZmlnLmhhc2hlcywgXCJhcHBsaWVkLWRlZmF1bHRWYWx1ZXMtaGFzaFwiOiBjdXJyZW50RGVmYXVsdFZhbHVlc0hhc2gsIFwic2tpcHBlZC1kZWZhdWx0VmFsdWVzLWhhc2hcIjogdW5kZWZpbmVkIH07XHJcbiAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgY2hhdCBjb25maWcgYW5kIHN0b3JlIGl0cyBkZWZhdWx0VmFsdWVzIGluIHRoZSB1c2VyIHByZWZlcmVuY2VzXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2hhdENvbmZpZyh7Li4uc3RhbmRhcmRDaGF0Q29uZmlnfSwgaGFzaGVzLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5pbml0Q29uZmlnJC5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlQXVkaXRFdmVudChcImNvbmZpZ3VyYXRpb24uZWRpdFwiLCB7ICdjb25maWd1cmF0aW9uJzogSlNPTi5zdHJpbmdpZnkoey4uLnN0YW5kYXJkQ2hhdENvbmZpZ30pIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmKHJlcyA9PT0gTW9kYWxSZXN1bHQuTm8pIHtcclxuICAgICAgICAgICAgICAgICAgLy8gRG8gbm90IG5vdGlmeSB0aGUgdXNlciBhYm91dCBjaGFuZ2VzIHdoaWxlIHRoaXMgc2tpcHBlZCB2ZXJzaW9uIGlzIG5vdCB1cGRhdGVkXHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc2hlcyA9IHsgLi4udXNlclNldHRpbmdzQ29uZmlnLmhhc2hlcywgXCJza2lwcGVkLWRlZmF1bHRWYWx1ZXMtaGFzaFwiOiBjdXJyZW50RGVmYXVsdFZhbHVlc0hhc2ggfTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDaGF0Q29uZmlnKHsuLi5zdGFuZGFyZENoYXRDb25maWcsIGRlZmF1bHRWYWx1ZXM6IHVzZXJTZXR0aW5nc0NvbmZpZy5kZWZhdWx0VmFsdWVzfSwgaGFzaGVzLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdENvbmZpZyQubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIEp1c3QgcGljayB0aGUgdmVyc2lvbiBpbiB0aGUgdXNlciBzZXR0aW5ncywgbm90aGluZyB0byBiZSB1cGRhdGVkXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuYXNzaXN0YW50Q29uZmlnJC5uZXh0KHsuLi5zdGFuZGFyZENoYXRDb25maWcsIGRlZmF1bHRWYWx1ZXM6IHVzZXJTZXR0aW5nc0NvbmZpZy5kZWZhdWx0VmFsdWVzfSk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdENvbmZpZyQubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHsgLy8gTm8gYXZhaWxhYmxlIHVwZGF0ZXMgT3IgdXBkYXRlcyBoYXMgYmVlbiBhbHJlYWR5IHNraXBwZWQsIHRoZW4ganVzdCBwaWNrIHRoZSB2ZXJzaW9uIGluIHRoZSB1c2VyIHNldHRpbmdzXHJcbiAgICAgICAgICB0aGlzLmFzc2lzdGFudENvbmZpZyQubmV4dCh7Li4uc3RhbmRhcmRDaGF0Q29uZmlnLCBkZWZhdWx0VmFsdWVzOiB1c2VyU2V0dGluZ3NDb25maWcuZGVmYXVsdFZhbHVlc30pO1xyXG4gICAgICAgICAgdGhpcy5pbml0Q29uZmlnJC5uZXh0KHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgdGhpcy5ub3RpZmljYXRpb25zU2VydmljZS5lcnJvcihgTWlzc2luZyB2YWxpZCBjb25maWd1cmF0aW9uIGZvciB0aGUgYXNzaXN0YW50IGluc3RhbmNlICcke2tleX0nLiBTZWUgdGhlIGJyb3dzZXIgY29uc29sZSBtZXNzYWdlcyBmb3IgZGV0YWlscyBvbiB0aGUgbWlzc2luZyBvciBpbmNvcnJlY3QgcHJvcGVydGllcy5gKTtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIHZhbGlkIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBhc3Npc3RhbnQgaW5zdGFuY2UgJyR7a2V5fScgLiBcXG4gJHtKU09OLnN0cmluZ2lmeShlcnJvci5pc3N1ZXMsIG51bGwsIDIpfWApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHRoZSBjaGF0IGNvbmZpZyBhbmQgc3RvcmUgaXRzIGRlZmF1bHRWYWx1ZXMgaW4gdGhlIHVzZXIgcHJlZmVyZW5jZXNcclxuICAgKiBAcGFyYW0gY29uZmlnICBUaGUgdXBkYXRlZCBjaGF0IGNvbmZpZ1xyXG4gICAqIEBwYXJhbSBoYXNoZXMgIFRoZSB1cGRhdGVkIGhhc2hlcyB0byBzdG9yZSBpbiB0aGUgdXNlciBwcmVmZXJlbmNlc1xyXG4gICAqIEBwYXJhbSBub3RpZnkgIFdoZXRoZXIgdG8gbm90aWZ5IHRoZSB1c2VyIGFib3V0IHRoZSB1cGRhdGVcclxuICAgKiBAcGFyYW0gc3VjY2Vzc0NhbGxiYWNrICBUaGUgY2FsbGJhY2sgdG8gZXhlY3V0ZSBpZiB0aGUgdXBkYXRlIGlzIHN1Y2Nlc3NmdWxcclxuICAgKiBAcGFyYW0gZXJyb3JDYWxsYmFjayAgVGhlIGNhbGxiYWNrIHRvIGV4ZWN1dGUgaWYgdGhlIHVwZGF0ZSBmYWlsc1xyXG4gICAqL1xyXG4gIHVwZGF0ZUNoYXRDb25maWcoY29uZmlnOiBDaGF0Q29uZmlnLCBoYXNoZXM/OiB7XCJhcHBsaWVkLWRlZmF1bHRWYWx1ZXMtaGFzaFwiPzogc3RyaW5nLCBcInNraXBwZWQtZGVmYXVsdFZhbHVlcy1oYXNoXCI/OiBzdHJpbmd9LCAgbm90aWZ5ID0gdHJ1ZSwgc3VjY2Vzc0NhbGxiYWNrPzogKCkgPT4gYW55LCBlcnJvckNhbGxiYWNrPzogKCkgPT4gYW55KSB7XHJcbiAgICB0aGlzLmFzc2lzdGFudENvbmZpZyQubmV4dChjb25maWcpO1xyXG4gICAgY29uc3QgYXNzaXN0YW50cyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuYXNzaXN0YW50cyk7XHJcbiAgICBhc3Npc3RhbnRzW3RoaXMuY2hhdEluc3RhbmNlSWRdID0geyAuLi5hc3Npc3RhbnRzW3RoaXMuY2hhdEluc3RhbmNlSWRdLCBkZWZhdWx0VmFsdWVzOiBjb25maWcuZGVmYXVsdFZhbHVlcyB9O1xyXG4gICAgaWYoaGFzaGVzKSBhc3Npc3RhbnRzW3RoaXMuY2hhdEluc3RhbmNlSWRdLmhhc2hlcyA9IGhhc2hlcztcclxuICAgIHRoaXMudXNlclNldHRpbmdzU2VydmljZS5wYXRjaCh7IGFzc2lzdGFudHMgfSkuc3Vic2NyaWJlKFxyXG4gICAgICBuZXh0ID0+IHt9LFxyXG4gICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgaWYobm90aWZ5KSB7XHJcbiAgICAgICAgICBlcnJvckNhbGxiYWNrID8gZXJyb3JDYWxsYmFjaygpIDogdGhpcy5ub3RpZmljYXRpb25zU2VydmljZS5lcnJvcihgVGhlIHVwZGF0ZSBvZiB0aGUgYXNzaXN0YW50IGluc3RhbmNlICcke3RoaXMuY2hhdEluc3RhbmNlSWR9JyBjb25maWd1cmF0aW9uIGZhaWxlZGApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiQ291bGQgbm90IHBhdGNoIGFzc2lzdGFudHMhXCIsIGVycm9yKTtcclxuICAgICAgfSxcclxuICAgICAgKCkgPT4ge1xyXG4gICAgICAgIGlmKG5vdGlmeSkge1xyXG4gICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrID8gc3VjY2Vzc0NhbGxiYWNrKCkgOiB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLnN1Y2Nlc3MoYFRoZSBhc3Npc3RhbnQgaW5zdGFuY2UgJyR7dGhpcy5jaGF0SW5zdGFuY2VJZH0nIGNvbmZpZ3VyYXRpb24gaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHVwZGF0ZWRgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPdmVycmlkZXMgdGhlIGxvZ2dlZCBpbiB1c2VyXHJcbiAgICovXHJcbiAgYWJzdHJhY3Qgb3ZlcnJpZGVVc2VyKCk6IHZvaWQ7XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGxzIHRoZSBGZXRjaCBBUEkgdG8gcmV0cmlldmUgYSBuZXcgbWVzc2FnZSBnaXZlbiBhbGwgcHJldmlvdXMgbWVzc2FnZXNcclxuICAgKi9cclxuICBhYnN0cmFjdCBmZXRjaChtZXNzYWdlczogQ2hhdE1lc3NhZ2VbXSwgcXVlcnk6IFF1ZXJ5KTogT2JzZXJ2YWJsZTxDaGF0UmVzcG9uc2U+XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0aGUgbGlzdCBvZiBtb2RlbHMgYXZhaWxhYmxlIG9uIHRoZSBzZXJ2ZXJcclxuICAgKi9cclxuICBhYnN0cmFjdCBsaXN0TW9kZWxzKCk6IE9ic2VydmFibGU8R2xsbU1vZGVsRGVzY3JpcHRpb25bXSB8IHVuZGVmaW5lZD47XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0aGUgbGlzdCBvZiBmdW5jdGlvbnMgYXZhaWxhYmxlIG9uIHRoZSBzZXJ2ZXIgQU5EIG1hdGNoaW5nIGVuYWJsZWQgZnVuY3Rpb25zIGluIHRoZSBjaGF0IGNvbmZpZ1xyXG4gICAqL1xyXG4gIGFic3RyYWN0IGxpc3RGdW5jdGlvbnMoKTogT2JzZXJ2YWJsZTxHbGxtRnVuY3Rpb25bXSB8IHVuZGVmaW5lZD47XHJcblxyXG4gIC8qKlxyXG4gICAqIFN0b3BzIHRoZSBhc3Npc3RhbnQgYW5zd2VyIGdlbmVyYXRpb24gYW5kIGNhbmNlbHMgYWxsIHRoZSBvbmdvaW5nIGFuZCBwZW5kaW5nIHJlbGF0ZWQgdGFza3NcclxuICAgKi9cclxuICBhYnN0cmFjdCBzdG9wR2VuZXJhdGlvbigpOiBPYnNlcnZhYmxlPGFueT5cclxuXHJcbiAgLyoqXHJcbiAgICogQSBoYW5kbGVyIGZvciBxdW90YSB1cGRhdGVzIGVhY2ggdGltZSB0aGUgY2hhdCBpcyBpbnZva2VkLlxyXG4gICAqIEl0IGVtaXRzIHRoZSB1cGRhdGVkIHF1b3RhIHRvIHRoZSBxdW90YSQgc3ViamVjdCwgZW1pdHMgYWNjb3JkaW5nbHkgdGhlIHVwZGF0ZWQgdXNlcidzIHRva2VucyBjb25zdW1wdGlvbiBhbmQgbm90aWZpZXMgdGhlIHVzZXIgaWYgdGhlIG1heCBxdW90YSBpcyByZWFjaGVkLlxyXG4gICAqIEBwYXJhbSBxdW90YSBUaGUgdXBkYXRlZCBxdW90YVxyXG4gICAqIEBwYXJhbSBwcm9wYWdhdGVFcnJvciBXaGV0aGVyIHRvIHByb3BhZ2F0ZSB0aGUgZXJyb3IgdG8gdGhlIGNhbGxlclxyXG4gICAqL1xyXG4gIHVwZGF0ZVF1b3RhKHF1b3RhOiBRdW90YSwgcHJvcGFnYXRlRXJyb3IgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5xdW90YSQubmV4dChxdW90YSk7XHJcbiAgICBjb25zdCBuZXh0UmVzZXREYXRlID0gdGhpcy5mb3JtYXREYXRlVGltZShxdW90YS5uZXh0UmVzZXRVVEMrXCIrMDA6MDBcIik7IC8vIFRoaXMgKzAwOjAwIGlzIHRvIGVuc3VyZSBkYXRlcyB3aWxsIGJlIHByb3Blcmx5IGNvbnZlcnRlZCB0byBsb2NhbCB0aW1lXHJcbiAgICBjb25zdCBjb25zdW1wdGlvblBlcmNlbnRhZ2UgPSBNYXRoLnJvdW5kKChxdW90YS50b2tlbkNvdW50ICogMTAwIC8gcXVvdGEucGVyaW9kVG9rZW5zKSAqIDEwMCkgLyAxMDA7XHJcbiAgICB0aGlzLnVzZXJUb2tlbkNvbnN1bXB0aW9uJC5uZXh0KHtwZXJjZW50YWdlOiBjb25zdW1wdGlvblBlcmNlbnRhZ2UsIG5leHRSZXNldERhdGV9KTtcclxuICAgIGlmKHF1b3RhLm1heFF1b3RhUmVhY2hlZCkge1xyXG4gICAgICB0aGlzLmdlbmVyYXRlQXVkaXRFdmVudCgncXVvdGEuZXhjZWVkZWQnLCB7fSk7XHJcbiAgICAgIGNvbnN0IG1zZyA9IGBTb3JyeSwgeW91IGhhdmUgZXhjZWVkZWQgdGhlIGFsbG93ZWQgcXVvdGEuIFBsZWFzZSByZXRyeSBzdGFydGluZyBmcm9tICR7bmV4dFJlc2V0RGF0ZX0uYDtcclxuICAgICAgdGhpcy5ub3RpZmljYXRpb25zU2VydmljZS5lcnJvcihtc2cpO1xyXG4gICAgICBpZihwcm9wYWdhdGVFcnJvcikgdGhyb3cgbmV3IEVycm9yKG1zZyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBIGhhbmRsZXIgZm9yIGNoYXQgdXNhZ2UgbWV0cmljcyBlYWNoIHRpbWUgdGhlIGdlbmVyYXRpb24gb2YgdGhlIGFzc2lzdGFudCByZXNwb25zZSBpcyBjb21wbGV0ZWQuXHJcbiAgICogSXQgZW1pdHMgdGhlIGNoYXQgdXNhZ2UgbWV0cmljcyB0byB0aGUgY2hhdFVzYWdlTWV0cmljcyQgc3ViamVjdCwgZW1pdHMgYWNjb3JkaW5nbHkgdGhlIHVwZGF0ZWQgY2hhdCdzIHRva2VucyBjb25zdW1wdGlvblxyXG4gICAqIEBwYXJhbSBjaGF0VXNhZ2VNZXRyaWNzIFRoZSBjaGF0IHVzYWdlIG1ldHJpY3NcclxuICAgKi9cclxuICB1cGRhdGVDaGF0VXNhZ2VNZXRyaWNzKGNoYXRVc2FnZU1ldHJpY3M6IENoYXRVc2FnZU1ldHJpY3MpIHtcclxuICAgIHRoaXMuY2hhdFVzYWdlTWV0cmljcyQubmV4dChjaGF0VXNhZ2VNZXRyaWNzKTtcclxuICAgIGNvbnN0IGN1cnJlbnRNb2RlbCA9IHRoaXMuZ2V0TW9kZWwodGhpcy5hc3Npc3RhbnRDb25maWckLnZhbHVlIS5kZWZhdWx0VmFsdWVzLnNlcnZpY2VfaWQsIHRoaXMuYXNzaXN0YW50Q29uZmlnJC52YWx1ZSEuZGVmYXVsdFZhbHVlcy5tb2RlbF9pZCk7XHJcbiAgICBjb25zdCBjb25zdW1wdGlvblBlcmNlbnRhZ2UgPSBNYXRoLnJvdW5kKChjaGF0VXNhZ2VNZXRyaWNzLnRvdGFsVG9rZW5Db3VudCAqIDEwMCAvIChjdXJyZW50TW9kZWwhLmNvbnRleHRXaW5kb3dTaXplIC0gY3VycmVudE1vZGVsIS5tYXhHZW5lcmF0aW9uU2l6ZSkpICogMTAwKSAvIDEwMDtcclxuICAgIHRoaXMuY2hhdFRva2VuQ29uc3VtcHRpb24kLm5leHQoe3BlcmNlbnRhZ2U6IGNvbnN1bXB0aW9uUGVyY2VudGFnZX0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBtb2RlbCBkZXNjcmlwdGlvbiBmb3IgdGhlIGdpdmVuIChzZXJ2aWNlSWQgKyBtb2RlbElkKVxyXG4gICAqIElmIGEgbW9kZWwgaXMgbm90IGZvdW5kLCBhbiBlcnJvciBtZXNzYWdlIGlzIHJldHVybmVkXHJcbiAgICogQHBhcmFtIHNlcnZpY2VJZCBUaGUgc2VydmljZUlkIG9mIHRoZSBtb2RlbFxyXG4gICAqIEBwYXJhbSBtb2RlbElkIFRoZSBtb2RlbElkIG9mIHRoZSBtb2RlbFxyXG4gICAqIEByZXR1cm5zIFRoZSBtb2RlbCBkZXNjcmlwdGlvblxyXG4gICAqL1xyXG4gIGdldE1vZGVsKHNlcnZpY2VJZDogc3RyaW5nLCBtb2RlbElkOiBzdHJpbmcpOiBHbGxtTW9kZWxEZXNjcmlwdGlvbiB8IHVuZGVmaW5lZHtcclxuICAgIGxldCBtb2RlbCA9IHRoaXMubW9kZWxzPy5maW5kKG0gPT4gbS5zZXJ2aWNlSWQgPT09IHNlcnZpY2VJZCAmJiBtLm1vZGVsSWQgPT09IG1vZGVsSWQpO1xyXG4gICAgLy8gSGFuZGxlIG9ic29sZXRlIGNvbmZpZ1xyXG4gICAgaWYoIW1vZGVsKSB7XHJcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uc1NlcnZpY2UuZXJyb3IoYEZBVEFMIEVSUk9SIDogVGhlIG1vZGVsIChzZXJ2aWNlSWQgPSAnJHtzZXJ2aWNlSWR9JywgbW9kZWxJZCA9ICcke21vZGVsSWR9JykgaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZS4gUGxlYXNlIGNvbnRhY3QgYW4gYWRtaW4gZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uYCk7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRkFUQUwgRVJST1IgOiBUaGUgbW9kZWwgKHNlcnZpY2VJZCA9ICcke3NlcnZpY2VJZH0nLCBtb2RlbElkID0gJyR7bW9kZWxJZH0nKSBpcyBubyBsb25nZXIgYXZhaWxhYmxlYCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbW9kZWw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGZXRjaCB0aGUgbGlzdCBzYXZlZCBjaGF0cyBiZWxvbmdpbmcgdG8gYSBzcGVjaWZpYyBpbnN0YW5jZSBvZiB0aGUgYXNzaXN0YW50XHJcbiAgICovXHJcbiAgYWJzdHJhY3QgbGlzdFNhdmVkQ2hhdCgpOiB2b2lkO1xyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIHNhdmVkIGNoYXQgd2l0aCB0aGUgZ2l2ZW4gaWQsIGlmIGV4aXN0cy4gT3RoZXJ3aXNlLCByZXR1cm4gdW5kZWZpbmVkXHJcbiAgICogQHBhcmFtIGlkIFRoZSBpZCBvZiB0aGUgc2F2ZWQgY2hhdFxyXG4gICAqL1xyXG4gIGFic3RyYWN0IGdldFNhdmVkQ2hhdChpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxTYXZlZENoYXRIaXN0b3J5IHwgdW5kZWZpbmVkPjtcclxuXHJcbiAgLyoqXHJcbiAgICogU2F2ZSBhIGNoYXQgd2l0aCB0aGUgZ2l2ZW4gbWVzc2FnZXNcclxuICAgKiBAcGFyYW0gbWVzc2FnZXMgVGhlIG1lc3NhZ2VzIHRvIGFkZCB0byB0aGUgc2F2ZWQgY2hhdCBpbmRleFxyXG4gICAqIEByZXR1cm5zIFRoZSBzYXZlZCBjaGF0XHJcbiAgICovXHJcbiAgYWJzdHJhY3QgYWRkU2F2ZWRDaGF0KG1lc3NhZ2VzOiBDaGF0TWVzc2FnZVtdKTogT2JzZXJ2YWJsZTxTYXZlZENoYXQ+O1xyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgYSBzYXZlZCBjaGF0IHdpdGggdGhlIGdpdmVuIGlkLlxyXG4gICAqIEBwYXJhbSBpZCBUaGUgaWQgb2YgdGhlIHNhdmVkIGNoYXRcclxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmV3IG5hbWUgb2YgdGhlIHNhdmVkIGNoYXQsIGlmIHByb3ZpZGVkXHJcbiAgICogQHBhcmFtIG1lc3NhZ2VzIFRoZSBtZXNzYWdlcyB0byB1cGRhdGUgdGhlIHNhdmVkIGNoYXQgaGlzdG9yeSwgaWYgcHJvdmlkZWRcclxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBzYXZlZCBjaGF0IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB1cGRhdGVkXHJcbiAgICovXHJcbiAgYWJzdHJhY3QgdXBkYXRlU2F2ZWRDaGF0KGlkOiBzdHJpbmcsIG5hbWU/OiBzdHJpbmcsIG1lc3NhZ2VzPzogQ2hhdE1lc3NhZ2VbXSk6IE9ic2VydmFibGU8U2F2ZWRDaGF0PjtcclxuXHJcbiAgLyoqXHJcbiAgICogQnVsayBkZWxldGUgb2Ygc2F2ZWQgY2hhdHMgbWF0Y2hpbmcgdGhlIGdpdmVuIGlkc1xyXG4gICAqIEBwYXJhbSBpZHMgTGlzdCBvZiBpZHMgb2YgdGhlIHNhdmVkIGNoYXRzIHRvIGRlbGV0ZVxyXG4gICAqIEByZXR1cm5zIFRoZSBudW1iZXIgb2YgZGVsZXRlZCBjaGF0c1xyXG4gICAqL1xyXG4gIGFic3RyYWN0IGRlbGV0ZVNhdmVkQ2hhdChpZHM6IHN0cmluZ1tdKTogT2JzZXJ2YWJsZTxudW1iZXI+O1xyXG5cclxuICAvKipcclxuICAgKiBHZW5lcmF0ZSBhbiBhdWRpdCBldmVudCB3aXRoIHRoZSBnaXZlbiB0eXBlIGFuZCBkZXRhaWxzLiBUaGUgZ2VuZXJhdGVkIGF1ZGl0IGV2ZW50IGlzIHNlbnQgYWZ0ZXJ3YXJkcyB2aWEgdGhlIEF1ZGl0V2ViU2VydmljZVxyXG4gICAqIEBwYXJhbSB0eXBlIEF1ZGl0IGV2ZW50IHR5cGVcclxuICAgKiBAcGFyYW0gZGV0YWlscyBBdWRpdCBldmVudCBkZXRhaWxzXHJcbiAgICogQHBhcmFtIGlkIEFjdGlvbnMgKHNhdmVkQ2hhdCBkZWxldGUvcmVuYW1lLy4uLikgbWF5IG9jY3VyIG9uIGEgc3BlY2lmaWMgY2hhdCBkaWZmZXJlbnQgdGhhbiB0aGUgY3VycmVudCBvbmUgc3RvcmVkIGluIHRoaXMgc2VydmljZSwgc28gdGhlIGNoYXQgaWQgY2FuIGJlIHByb3ZpZGVkXHJcbiAgICovXHJcbiAgZ2VuZXJhdGVBdWRpdEV2ZW50KHR5cGU6IHN0cmluZywgZGV0YWlsczogUmVjb3JkPHN0cmluZywgYW55PiwgaWQ/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGJhc2VEZXRhaWxzID0ge1xyXG4gICAgICBcInVybFwiOiBkZWNvZGVVUklDb21wb25lbnQod2luZG93LmxvY2F0aW9uLmhyZWYpLFxyXG4gICAgICBcImFwcFwiOiB0aGlzLmFwcFNlcnZpY2UuYXBwTmFtZSxcclxuICAgICAgXCJ1c2VyLWlkXCI6IHRoaXMucHJpbmNpcGFsU2VydmljZS5wcmluY2lwYWw/LnVzZXJJZCxcclxuICAgICAgXCJpbnN0YW5jZS1pZFwiOiB0aGlzLmNoYXRJbnN0YW5jZUlkLFxyXG4gICAgICBcImNoYXQtaWRcIjogaWQgfHwgdGhpcy5jaGF0SWQsXHJcbiAgICAgIFwic2VydmljZS1pZFwiOiB0aGlzLmFzc2lzdGFudENvbmZpZyQudmFsdWUhLmRlZmF1bHRWYWx1ZXMuc2VydmljZV9pZCxcclxuICAgICAgXCJtb2RlbC1pZFwiOiB0aGlzLmFzc2lzdGFudENvbmZpZyQudmFsdWUhLmRlZmF1bHRWYWx1ZXMubW9kZWxfaWQsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgYXVkaXQgPSB7XHJcbiAgICAgIHR5cGUsXHJcbiAgICAgIGRldGFpbDoge1xyXG4gICAgICAgIC4uLmJhc2VEZXRhaWxzLFxyXG4gICAgICAgIC4uLmRldGFpbHNcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5hdWRpdFNlcnZpY2Uubm90aWZ5KGF1ZGl0KTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogVHJhdmVyc2UgdGhlIGFycmF5IGZyb20gdGhlIGVuZCBhbmQgdHJhY2sgdGhlIGZpcnN0ICdhc3Npc3RhbnQnIG1lc3NhZ2UgYW1vbmcgdGhlIGxhc3QgZ3JvdXAgb2YgXCJhc3Npc3RhbnRcIiBtZXNzYWdlcyB3aGVyZSBkaXNwbGF5IGlzIHRydWVcclxuICAgKiBAcGFyYW0gYXJyYXkgVGhlIGFycmF5IG9mIENoYXRNZXNzYWdlIHRvIHRyYXZlcnNlXHJcbiAgICogQHJldHVybnMgVGhlIGluZGV4IG9mIHRoZSBmaXJzdCB2aXNpYmxlIGFzc2lzdGFudCBtZXNzYWdlIGFtb25nIHRoZSBsYXN0IGdyb3VwIG9mIFwiYXNzaXN0YW50XCIgbWVzc2FnZXMgaW4gdGhlIGFycmF5XHJcbiAgICovXHJcbiAgZmlyc3RWaXNpYmxlQXNzaXN0YW50TWVzc2FnZUluZGV4KGFycmF5OiBDaGF0TWVzc2FnZVtdfCB1bmRlZmluZWQpOiBudW1iZXIge1xyXG4gICAgaWYgKCFhcnJheSkge1xyXG4gICAgICByZXR1cm4gLTE7XHJcbiAgICB9XHJcbiAgICBsZXQgaW5kZXggPSBhcnJheS5sZW5ndGggLSAxO1xyXG4gICAgbGV0IGZpcnN0VmlzaWJsZUFzc2lzdGFudE1lc3NhZ2VJbmRleCA9IC0xO1xyXG4gICAgd2hpbGUgKGluZGV4ID49IDAgJiYgYXJyYXlbaW5kZXhdLnJvbGUgPT09ICdhc3Npc3RhbnQnKSB7XHJcbiAgICAgIGlmIChhcnJheVtpbmRleF0uYWRkaXRpb25hbFByb3BlcnRpZXMuZGlzcGxheSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIGZpcnN0VmlzaWJsZUFzc2lzdGFudE1lc3NhZ2VJbmRleCA9IGluZGV4O1xyXG4gICAgICB9XHJcbiAgICAgIGluZGV4LS07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmlyc3RWaXNpYmxlQXNzaXN0YW50TWVzc2FnZUluZGV4O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJhdmVyc2UgdGhlIGFycmF5IGZyb20gdGhlIGVuZCBhbmQgcGljayB0aGUgbGFzdCAnYXNzaXN0YW50JyBtZXNzYWdlIGFtb25nIHRoZSBsYXN0IGdyb3VwIG9mIFwiYXNzaXN0YW50XCIgbWVzc2FnZXMgd2hlcmUgZGlzcGxheSBpcyB0cnVlXHJcbiAgICogQHBhcmFtIGFycmF5IFRoZSBhcnJheSBvZiBDaGF0TWVzc2FnZSB0byB0cmF2ZXJzZVxyXG4gICAqIEByZXR1cm5zIFRoZSBpbmRleCBvZiB0aGUgbGFzdCB2aXNpYmxlIGFzc2lzdGFudCBtZXNzYWdlIGFtb25nIHRoZSBsYXN0IGdyb3VwIG9mIFwiYXNzaXN0YW50XCIgbWVzc2FnZXMgaW4gdGhlIGFycmF5XHJcbiAgICovXHJcbiAgbGFzdFZpc2libGVBc3Npc3RhbnRNZXNzYWdlSW5kZXgoYXJyYXk6IENoYXRNZXNzYWdlW118IHVuZGVmaW5lZCk6IG51bWJlciB7XHJcbiAgICBpZiAoIWFycmF5KSB7XHJcbiAgICAgIHJldHVybiAtMTtcclxuICAgIH1cclxuICAgIGxldCBpbmRleCA9IGFycmF5Lmxlbmd0aCAtIDE7XHJcbiAgICBsZXQgbGFzdFZpc2libGVBc3Npc3RhbnRNZXNzYWdlSW5kZXggPSAtMTtcclxuICAgIHdoaWxlIChpbmRleCA+PSAwICYmIGFycmF5W2luZGV4XS5yb2xlID09PSAnYXNzaXN0YW50Jykge1xyXG4gICAgICBpZiAoYXJyYXlbaW5kZXhdLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLmRpc3BsYXkgPT09IHRydWUpIHtcclxuICAgICAgICBsYXN0VmlzaWJsZUFzc2lzdGFudE1lc3NhZ2VJbmRleCA9IGluZGV4O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGluZGV4LS07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGFzdFZpc2libGVBc3Npc3RhbnRNZXNzYWdlSW5kZXg7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb3JtYXQgYSBkYXRlIHN0cmluZyBpbiBVVEMgdG8gYSBsb2NhbCBkYXRlIHN0cmluZ1xyXG4gICAqIEBwYXJhbSB2YWx1ZSBEYXRlIHN0cmluZyBpbiBVVEMgdG8gZm9ybWF0XHJcbiAgICogQHJldHVybnMgQSBmb3JtYXR0ZWQgbG9jYWwgZGF0ZSBzdHJpbmdcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgZm9ybWF0RGF0ZVRpbWUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBsb2NhbERhdGUgPSB0b0RhdGUocGFyc2VJU08odmFsdWUpKTtcclxuICAgIHJldHVybiB0aGlzLmludGxTZXJ2aWNlW1wiZm9ybWF0VGltZVwiXShsb2NhbERhdGUsIHtkYXk6IFwibnVtZXJpY1wiLCBtb250aDogXCJzaG9ydFwiLCB5ZWFyOiBcIm51bWVyaWNcIiwgdGltZVpvbmVOYW1lOiAnc2hvcnQnfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUYWtlcyBhIHRleHQgcHJvbXB0IHRoYXQgbWF5IGNvbnRhaW4gcGxhY2Vob2xkZXJzIGZvciB2YXJpYWJsZXNcclxuICAgKiBhbmQgcmVwbGFjZXMgdGhlc2UgcGxhY2Vob2xkZXJzIGlmIGl0IGZpbmRzIGEgbWF0Y2ggaW4gdGhlIGdpdmVuXHJcbiAgICogY29udGV4dCBvYmplY3QuXHJcbiAgICovXHJcbiAgc3RhdGljIGZvcm1hdFByb21wdChwcm9tcHQ6IHN0cmluZywgY29udGV4dDogYW55KSB7XHJcbiAgICByZXR1cm4gcHJvbXB0LnJlcGxhY2UoXHJcbiAgICAgIC97eyguKj8pfX0vZyxcclxuICAgICAgKG1hdGNoLCBleHByKSA9PiBnZXQoY29udGV4dCwgZXhwcikgPz8gbWF0Y2hcclxuICAgICk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
333
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNzaXN0YW50L2NoYXQvY2hhdC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzVDLE9BQU8sR0FBRyxNQUFNLFlBQVksQ0FBQztBQUM3QixPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBRW5ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsVUFBVSxFQUFTLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkQsT0FBTyxFQUFlLFdBQVcsRUFBZSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFMUcsT0FBTyxFQUEySyxnQkFBZ0IsRUFBRSxNQUFNLFNBQVMsQ0FBQzs7QUFHcE4sTUFBTSxPQUFnQixXQUFXO0lBRGpDO1FBSUUsMEVBQTBFO1FBQzFFLGlCQUFZLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDbkQseUVBQXlFO1FBQ3pFLGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDbEQsc0RBQXNEO1FBQ3RELHFCQUFnQixHQUFHLElBQUksZUFBZSxDQUF5QixTQUFTLENBQUMsQ0FBQztRQUMxRSxrRUFBa0U7UUFDbEUsa0JBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBc0IsU0FBUyxDQUFDLENBQUM7UUFDcEU7Ozs7VUFJRTtRQUNGLGVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQU9qRCwyQkFBMkI7UUFDM0IsZ0JBQVcsR0FBRyxJQUFJLGVBQWUsQ0FBYyxFQUFFLENBQUMsQ0FBQztRQUNuRCxtQ0FBbUM7UUFDbkMsbUJBQWMsR0FBRyxJQUFJLGVBQWUsQ0FBd0IsU0FBUyxDQUFDLENBQUM7UUFDdkUsb0RBQW9EO1FBQ3BELFdBQU0sR0FBRyxJQUFJLGVBQWUsQ0FBb0IsU0FBUyxDQUFDLENBQUM7UUFDM0QsdUVBQXVFO1FBQ3ZFLDBCQUFxQixHQUFHLElBQUksZUFBZSxDQUFtQyxTQUFTLENBQUMsQ0FBQztRQUN6RixtR0FBbUc7UUFDbkcsc0JBQWlCLEdBQUcsSUFBSSxlQUFlLENBQStCLFNBQVMsQ0FBQyxDQUFDO1FBQ2pGLG9GQUFvRjtRQUNwRiwwQkFBcUIsR0FBRyxJQUFJLGVBQWUsQ0FBK0IsU0FBUyxDQUFDLENBQUM7UUFDckYsNkNBQTZDO1FBQzdDLHdCQUFtQixHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBVW5ELHdCQUFtQixHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3JELHlCQUFvQixHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3BELGlCQUFZLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3ZDLFVBQUssR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDaEMsaUJBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDcEMsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoQyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNsQyxpQkFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNwQyxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztLQTRXdkQ7SUFqV0MsSUFBSSxVQUFVO1FBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZO1lBQ3hDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQzdDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQztZQUN0RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMzRCxPQUFRLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQUksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUVEOzs7T0FHRztJQUNILGlCQUFpQixDQUFDLFVBQWtCO1FBQ2xDLElBQUksQ0FBQyxlQUFlLEdBQUcsVUFBVSxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7T0FHRztJQUNILGNBQWMsQ0FBQyxXQUErQjtRQUM1QyxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsY0FBYyxDQUFDLE1BQWU7UUFDNUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxjQUFjO1FBQ1osTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUNoQyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXhFLElBQUk7WUFDRixzREFBc0Q7WUFDdEQsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDM0MsMEpBQTBKO1lBQzFKLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLEVBQUU7Z0JBQ3JDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBQyxHQUFHLGtCQUFrQixFQUFDLENBQUMsQ0FBQztnQkFDcEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDN0I7aUJBQU0sRUFBRSx3S0FBd0s7Z0JBRS9LLGdFQUFnRTtnQkFDaEUsTUFBTSx3QkFBd0IsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO2dCQUMzRixNQUFNLHdCQUF3QixHQUFHLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxDQUFDLDRCQUE0QixDQUFDLENBQUM7Z0JBQzNGLHVFQUF1RTtnQkFDdkUsTUFBTSx3QkFBd0IsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztnQkFFaEcseUlBQXlJO2dCQUN6SSxNQUFNLFNBQVMsR0FBRyxDQUFDLHdCQUF3QixLQUFLLHdCQUF3QixDQUFDLElBQUksQ0FBQyx3QkFBd0IsS0FBSyx3QkFBd0IsQ0FBQyxDQUFDO2dCQUNySSxJQUFJLFNBQVMsRUFBRTtvQkFDYixJQUFJLENBQUMsWUFBWTt5QkFDZCxPQUFPLENBQUM7d0JBQ1AsS0FBSyxFQUFFLHFCQUFxQjt3QkFDNUIsT0FBTyxFQUFFLCtGQUErRjt3QkFDeEcsT0FBTyxFQUFFOzRCQUNMLElBQUksV0FBVyxDQUFDLEVBQUMsTUFBTSx5QkFBZ0IsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFDLENBQUM7NEJBQzlELElBQUksV0FBVyxDQUFDLEVBQUMsTUFBTSw2QkFBb0IsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUMsQ0FBQzs0QkFDdEUsSUFBSSxXQUFXLENBQUMsRUFBQyxNQUFNLHlCQUFnQixFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBQyxDQUFDO3lCQUMzRTt3QkFDRCxXQUFXLDZCQUFxQjtxQkFDakMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTt3QkFDVixJQUFHLEdBQUcsNEJBQW1CLEVBQUU7NEJBQ3pCLE1BQU0sTUFBTSxHQUFHLEVBQUUsR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsNEJBQTRCLEVBQUUsd0JBQXdCLEVBQUUsNEJBQTRCLEVBQUUsU0FBUyxFQUFFLENBQUM7NEJBQ2pKLDZFQUE2RTs0QkFDN0UsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUMsR0FBRyxrQkFBa0IsRUFBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQzs0QkFDN0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7NEJBQzVCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLGVBQWUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUMsR0FBRyxrQkFBa0IsRUFBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO3lCQUM3Rzs2QkFBTSxJQUFHLEdBQUcsNEJBQW1CLEVBQUU7NEJBQ2hDLGlGQUFpRjs0QkFDakYsTUFBTSxNQUFNLEdBQUcsRUFBRSxHQUFHLGtCQUFrQixDQUFDLE1BQU0sRUFBRSw0QkFBNEIsRUFBRSx3QkFBd0IsRUFBRSxDQUFDOzRCQUN4RyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBQyxHQUFHLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxrQkFBa0IsQ0FBQyxhQUFhLEVBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7NEJBQy9HLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO3lCQUM3Qjs2QkFBTTs0QkFDTCxvRUFBb0U7NEJBQ3BFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBQyxHQUFHLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxrQkFBa0IsQ0FBQyxhQUFhLEVBQUMsQ0FBQyxDQUFDOzRCQUNyRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzt5QkFDN0I7b0JBQ0wsQ0FBQyxDQUFDLENBQUM7aUJBQ047cUJBQU0sRUFBRSw0R0FBNEc7b0JBQ25ILElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBQyxHQUFHLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxrQkFBa0IsQ0FBQyxhQUFhLEVBQUMsQ0FBQyxDQUFDO29CQUNyRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDN0I7YUFDRjtTQUNGO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLDJEQUEyRCxHQUFHLHlGQUF5RixDQUFDLENBQUM7WUFDekwsTUFBTSxJQUFJLEtBQUssQ0FBQywyREFBMkQsR0FBRyxVQUFVLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ2xJO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxnQkFBZ0IsQ0FBQyxNQUFrQixFQUFFLE1BQXVGLEVBQUcsTUFBTSxHQUFHLElBQUksRUFBRSxlQUEyQixFQUFFLGFBQXlCO1FBQ2xNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3RELFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsYUFBYSxFQUFFLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM5RyxJQUFHLE1BQU07WUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDM0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUN0RCxJQUFJLENBQUMsRUFBRSxHQUFFLENBQUMsRUFDVixLQUFLLENBQUMsRUFBRTtZQUNOLElBQUcsTUFBTSxFQUFFO2dCQUNULGFBQWEsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMseUNBQXlDLElBQUksQ0FBQyxjQUFjLHdCQUF3QixDQUFDLENBQUM7YUFDeko7WUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLDZCQUE2QixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3RELENBQUMsRUFDRCxHQUFHLEVBQUU7WUFDSCxJQUFHLE1BQU0sRUFBRTtnQkFDVCxlQUFlLENBQUMsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLDJCQUEyQixJQUFJLENBQUMsY0FBYywrQ0FBK0MsQ0FBQyxDQUFDO2FBQ3hLO1FBQ0gsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBMkJEOzs7OztPQUtHO0lBQ0gsV0FBVyxDQUFDLEtBQVksRUFBRSxjQUFjLEdBQUcsS0FBSztRQUM5QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQywwRUFBMEU7UUFDbEosTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNwRyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEVBQUMsVUFBVSxFQUFFLHFCQUFxQixFQUFFLGFBQWEsRUFBQyxDQUFDLENBQUM7UUFDcEYsSUFBRyxLQUFLLENBQUMsZUFBZSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM5QyxNQUFNLEdBQUcsR0FBRywwRUFBMEUsYUFBYSxHQUFHLENBQUM7WUFDdkcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNyQyxJQUFHLGNBQWM7Z0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN6QztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsc0JBQXNCLENBQUMsZ0JBQWtDO1FBQ3ZELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM5QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFNLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBTSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMvSSxNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLEdBQUcsR0FBRyxHQUFHLENBQUMsWUFBYSxDQUFDLGlCQUFpQixHQUFHLFlBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ3JLLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsRUFBQyxVQUFVLEVBQUUscUJBQXFCLEVBQUMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxRQUFRLENBQUMsU0FBaUIsRUFBRSxPQUFlO1FBQ3pDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLElBQUksQ0FBQyxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQUMsQ0FBQztRQUN2Rix5QkFBeUI7UUFDekIsSUFBRyxDQUFDLEtBQUssRUFBRTtZQUNULElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMseUNBQXlDLFNBQVMsaUJBQWlCLE9BQU8sNkVBQTZFLENBQUMsQ0FBQztZQUN6TCxNQUFNLElBQUksS0FBSyxDQUFDLHlDQUF5QyxTQUFTLGlCQUFpQixPQUFPLDJCQUEyQixDQUFDLENBQUM7U0FDeEg7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFvQ0Q7Ozs7O09BS0c7SUFDSCxrQkFBa0IsQ0FBQyxJQUFZLEVBQUUsT0FBNEIsRUFBRSxFQUFXO1FBQ3hFLE1BQU0sV0FBVyxHQUFHO1lBQ2xCLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztZQUMvQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPO1lBQzlCLFNBQVMsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLE1BQU07WUFDbEQsYUFBYSxFQUFFLElBQUksQ0FBQyxjQUFjO1lBQ2xDLFNBQVMsRUFBRSxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU07WUFDNUIsWUFBWSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFNLENBQUMsYUFBYSxDQUFDLFVBQVU7WUFDbkUsVUFBVSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFNLENBQUMsYUFBYSxDQUFDLFFBQVE7U0FDaEUsQ0FBQztRQUNGLE1BQU0sS0FBSyxHQUFHO1lBQ1osSUFBSTtZQUNKLE1BQU0sRUFBRTtnQkFDTixHQUFHLFdBQVc7Z0JBQ2QsR0FBRyxPQUFPO2FBQ1g7U0FDRixDQUFBO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUlEOzs7O09BSUc7SUFDSCxpQ0FBaUMsQ0FBQyxLQUErQjtRQUMvRCxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1YsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUNYO1FBQ0QsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDN0IsSUFBSSxpQ0FBaUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMzQyxPQUFPLEtBQUssSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUU7WUFDdEQsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsb0JBQW9CLENBQUMsT0FBTyxLQUFLLElBQUksRUFBRTtnQkFDdEQsaUNBQWlDLEdBQUcsS0FBSyxDQUFDO2FBQzNDO1lBQ0QsS0FBSyxFQUFFLENBQUM7U0FDVDtRQUNELE9BQU8saUNBQWlDLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxnQ0FBZ0MsQ0FBQyxLQUErQjtRQUM5RCxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1YsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUNYO1FBQ0QsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDN0IsSUFBSSxnQ0FBZ0MsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMxQyxPQUFPLEtBQUssSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUU7WUFDdEQsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsb0JBQW9CLENBQUMsT0FBTyxLQUFLLElBQUksRUFBRTtnQkFDdEQsZ0NBQWdDLEdBQUcsS0FBSyxDQUFDO2dCQUN6QyxNQUFNO2FBQ1A7WUFDRCxLQUFLLEVBQUUsQ0FBQztTQUNUO1FBQ0QsT0FBTyxnQ0FBZ0MsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNPLGNBQWMsQ0FBQyxLQUFhO1FBQ3BDLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMxQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUM7SUFDN0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQWMsRUFBRSxPQUFZO1FBQzlDLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FDbkIsWUFBWSxFQUNaLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxLQUFLLENBQzdDLENBQUM7SUFDSixDQUFDOzt3R0FoYW1CLFdBQVc7NEdBQVgsV0FBVzsyRkFBWCxXQUFXO2tCQURoQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IHBhcnNlSVNPLCB0b0RhdGUgfSBmcm9tIFwiZGF0ZS1mbnNcIjtcbmltcG9ydCBnZXQgZnJvbSBcImxvZGFzaC9nZXRcIjtcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XG5cbmltcG9ydCB7IFVzZXJQcmVmZXJlbmNlcyB9IGZyb20gXCJAc2luZXF1YS9jb21wb25lbnRzL3VzZXItc2V0dGluZ3NcIjtcbmltcG9ydCB7IEFwcFNlcnZpY2UsIFF1ZXJ5IH0gZnJvbSBcIkBzaW5lcXVhL2NvcmUvYXBwLXV0aWxzXCI7XG5pbXBvcnQgeyBVdGlscyB9IGZyb20gXCJAc2luZXF1YS9jb3JlL2Jhc2VcIjtcbmltcG9ydCB7IEludGxTZXJ2aWNlIH0gZnJvbSBcIkBzaW5lcXVhL2NvcmUvaW50bFwiO1xuaW1wb3J0IHsgTG9naW5TZXJ2aWNlIH0gZnJvbSBcIkBzaW5lcXVhL2NvcmUvbG9naW5cIjtcbmltcG9ydCB7IENvbmZpcm1UeXBlLCBNb2RhbEJ1dHRvbiwgTW9kYWxSZXN1bHQsIE1vZGFsU2VydmljZSB9IGZyb20gXCJAc2luZXF1YS9jb3JlL21vZGFsXCI7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25zU2VydmljZSB9IGZyb20gXCJAc2luZXF1YS9jb3JlL25vdGlmaWNhdGlvblwiO1xuaW1wb3J0IHsgQXVkaXRXZWJTZXJ2aWNlLCBQcmluY2lwYWxXZWJTZXJ2aWNlLCBVc2VyU2V0dGluZ3NXZWJTZXJ2aWNlIH0gZnJvbSBcIkBzaW5lcXVhL2NvcmUvd2ViLXNlcnZpY2VzXCI7XG5cbmltcG9ydCB7IENoYXRDb25maWcsIENoYXRNZXNzYWdlLCBDaGF0UmVzcG9uc2UsIENoYXRVc2FnZU1ldHJpY3MsIEdsbG1GdW5jdGlvbiwgR2xsbU1vZGVsRGVzY3JpcHRpb24sIFF1b3RhLCBTYXZlZENoYXQsIFNhdmVkQ2hhdEhpc3RvcnksIFRva2VuQ29uc3VtcHRpb24sIFVzZXJUb2tlbkNvbnN1bXB0aW9uLCBjaGF0Q29uZmlnU2NoZW1hIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENoYXRTZXJ2aWNlIHtcbiAgLyoqIE5hbWUgb2YgdGhlIGFzc2lzdGFudCBwbHVnaW4gT1Igd2Vic29ja2V0IGVuZHBvaW50LiAqL1xuICBSRVFVRVNUX1VSTDogc3RyaW5nO1xuICAvKiogRW1pdCB0cnVlIG9uY2UgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSBhc3Npc3RhbnQgcHJvY2VzcyBpcyBkb25lLiAqL1xuICBpbml0UHJvY2VzcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgLyoqIEVtaXQgdHJ1ZSBvbmNlIHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgYXNzaXN0YW50IGNvbmZpZyBpcyBkb25lLiAqL1xuICBpbml0Q29uZmlnJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAvKiogRW1pdCB0aGUgZ2xvYmFsIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGFzc2lzdGFudC4gKi9cbiAgYXNzaXN0YW50Q29uZmlnJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2hhdENvbmZpZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgLyoqIEVtaXQgdHJ1ZSBpZiB0aGUgdXNlciBoYXMgYmVlbiBvdmVycmlkZGVuLCBmYWxzZSBvdGhlcndpc2UuICovXG4gIHVzZXJPdmVycmlkZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBFbWl0IHRydWUgaWYgdGhlIGZldGNoIG9mIGFuIGFzc2lzdGFudCdzIHJlc3BvbnNlIGlzIG9uZ29pbmcgKGl0IGluY2x1ZGVzIFN0cmVhbWluZyBzdGF0dXMgb2YgdGhlIGFzc2lzdGFudCBlbmRwb2ludCBBTkQgc2F2aW5nIHRoZSBkaXNjdXNzaW9uIGlmIHNhdmUgQ2hhdCBpcyBlbmFibGVkKS5cbiAgICogVGhpcyBpcyB1c2VkIHRvIHByZXZlbnQgbXVsdGlwbGUgZmV0Y2hlcyBhdCB0aGUgc2FtZSB0aW1lLlxuICAgKiBUeXBpY2FsbHksIHRoZXJlIGlzIG5vIHByb2JsZW0gY2hhaW5pbmcgZmV0Y2hlcywgYnV0IHdoZW4gZm9yY2luZyBhIHJlbG9hZCBhZnRlciBxdWVyeSBjaGFuZ2VzIGNhc2VzLCBpdCBjYW4ndCBiZSBhbGxvd2VkIGJlY2F1c2UgaXQgYnJlYWtzIHRoZSB3aG9sZSBidXNpbmVzcyBsb2dpYy5cbiAgKi9cbiAgc3RyZWFtaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAvKiogU3RvcmUgdGhlIG1lc3NhZ2VzIGhpc3Rvcnkgb2YgdGhlIGN1cnJlbnQgY2hhdC4gKi9cbiAgY2hhdEhpc3Rvcnk6IENoYXRNZXNzYWdlW10gfCB1bmRlZmluZWQ7XG4gIC8qKiBMaXN0IG9mIG1vZGVscyBhdmFpbGFibGUgb24gdGhlIHNlcnZlci4gKi9cbiAgbW9kZWxzOiBHbGxtTW9kZWxEZXNjcmlwdGlvbltdIHwgdW5kZWZpbmVkO1xuICAvKiogTGlzdCBvZiBmdW5jdGlvbnMgYXZhaWxhYmxlIG9uIHRoZSBzZXJ2ZXIuICovXG4gIGZ1bmN0aW9uczogR2xsbUZ1bmN0aW9uW10gfCB1bmRlZmluZWQ7XG4gIC8qKiBMaXN0IG9mIHNhdmVkIGNoYXRzLiAqL1xuICBzYXZlZENoYXRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2F2ZWRDaGF0W10+KFtdKTtcbiAgLyoqIEVtaXQgdGhlIHNhdmVkIGNoYXQgdG8gbG9hZC4gKi9cbiAgbG9hZFNhdmVkQ2hhdCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNhdmVkQ2hhdCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgLyoqIEVtaXQgdGhlIHF1b3RhIGVhY2ggdGltZSB0aGUgY2hhdCBpcyBpbnZva2VkLiAqL1xuICBxdW90YSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFF1b3RhIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAvKiogRW1pdCB0aGUgY2FsY3VsYXRlZCB1c2VyJ3MgdG9rZW4gY29uc3VtcHRpb24gYmFzZWQgb24gdGhlIHF1b3RhLiAqL1xuICB1c2VyVG9rZW5Db25zdW1wdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFVzZXJUb2tlbkNvbnN1bXB0aW9uIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAvKiogRW1pdCB0aGUgY2hhdCB1c2FnZSBtZXRyaWNzIGVhY2ggdGltZSB0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgYXNzaXN0YW50IHJlc3BvbnNlIGlzIGNvbXBsZXRlZC4gKi9cbiAgY2hhdFVzYWdlTWV0cmljcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENoYXRVc2FnZU1ldHJpY3MgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIC8qKiBFbWl0IHRoZSBjYWxjdWxhdGVkIGNoYXQncyB0b2tlbiBjb25zdW1wdGlvbiBiYXNlZCBvbiB0aGUgY2hhdCB1c2FnZSBtZXRyaWNzLiAqL1xuICBjaGF0VG9rZW5Db25zdW1wdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRva2VuQ29uc3VtcHRpb24gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIC8qKiBFbWl0IHRydWUgaWYgXCJDYW5jZWxUYXNrc1wiIGlzIG9uZ29pbmcuICovXG4gIHN0b3BwaW5nR2VuZXJhdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgLyoqIEluc3RhbmNlIElEIG9mIHRoZSBjaGF0IHNlcnZpY2UgZGVmaW5pbmcgdGhlIGFzc2lzdGFudCBpbnN0YW5jZS4gKi9cbiAgcHJpdmF0ZSBfY2hhdEluc3RhbmNlSWQ6IHN0cmluZztcbiAgLyoqIElEIG9mIHRoZSBjdXJyZW50ICoqc2F2ZWQgY2hhdCoqIGRpc2N1c3Npb24gd2hpY2ggaXMgdXNlZCB0byB1cGRhdGUvZ2V0L2RlbGV0ZSBpdC4gKi9cbiAgcHJpdmF0ZSBfc2F2ZWRDaGF0SWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgLyoqIEdlbmVyYXRlZCBHVUlEIGZvciB0aGUgY3VycmVudCBub24tc2F2ZWQgY2hhdCBkaXNjdXNzaW9uIHVzZWQgdG8gaWRlbnRpZnkgYXVkaXQgZXZlbnRzLlxuICAgKiBJZiB0aGUgY2hhdCBpcyBzYXZlZCwgdGhlIHNhdmVkQ2hhdElkIGlzIGluaXRpYWxpemVkIHdpdGggdGhlIHZhbHVlIG9mIHRoaXMgY2hhdElkLlxuICAgKi9cbiAgcHJpdmF0ZSBfY2hhdElkOiBzdHJpbmc7XG5cbiAgcHVibGljIHVzZXJTZXR0aW5nc1NlcnZpY2UgPSBpbmplY3QoVXNlclNldHRpbmdzV2ViU2VydmljZSk7XG4gIHB1YmxpYyBub3RpZmljYXRpb25zU2VydmljZSA9IGluamVjdChOb3RpZmljYXRpb25zU2VydmljZSk7XG4gIHB1YmxpYyBhdWRpdFNlcnZpY2UgPSBpbmplY3QoQXVkaXRXZWJTZXJ2aWNlKTtcbiAgcHVibGljIHByZWZzID0gaW5qZWN0KFVzZXJQcmVmZXJlbmNlcyk7XG4gIHB1YmxpYyBsb2dpblNlcnZpY2UgPSBpbmplY3QoTG9naW5TZXJ2aWNlKTtcbiAgcHVibGljIGFwcFNlcnZpY2UgPSBpbmplY3QoQXBwU2VydmljZSk7XG4gIHB1YmxpYyBpbnRsU2VydmljZSA9IGluamVjdChJbnRsU2VydmljZSk7XG4gIHB1YmxpYyBtb2RhbFNlcnZpY2UgPSBpbmplY3QoTW9kYWxTZXJ2aWNlKTtcbiAgcHVibGljIHByaW5jaXBhbFNlcnZpY2UgPSBpbmplY3QoUHJpbmNpcGFsV2ViU2VydmljZSk7XG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSBjaGF0IHByb2Nlc3NcbiAgICovXG4gIGFic3RyYWN0IGluaXQoKTogT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgUkVRVUVTVF9VUkxcbiAgICovXG4gIGFic3RyYWN0IGdldFJlcXVlc3RzVXJsKCk6IHZvaWQ7XG5cbiAgZ2V0IGFzc2lzdGFudHMoKTogYW55IHtcbiAgICBpZiAoIXRoaXMudXNlclNldHRpbmdzU2VydmljZS51c2VyU2V0dGluZ3MpXG4gICAgICB0aGlzLnVzZXJTZXR0aW5nc1NlcnZpY2UudXNlclNldHRpbmdzID0ge307XG4gICAgaWYgKCF0aGlzLnVzZXJTZXR0aW5nc1NlcnZpY2UudXNlclNldHRpbmdzW1wiYXNzaXN0YW50c1wiXSlcbiAgICAgIHRoaXMudXNlclNldHRpbmdzU2VydmljZS51c2VyU2V0dGluZ3NbXCJhc3Npc3RhbnRzXCJdID0ge307XG4gICAgcmV0dXJuICB0aGlzLnVzZXJTZXR0aW5nc1NlcnZpY2UudXNlclNldHRpbmdzW1wiYXNzaXN0YW50c1wiXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGluc3RhbmNlIElEIG9mIHRoZSBjaGF0IHNlcnZpY2VcbiAgICogQHJldHVybnMgVGhlIGluc3RhbmNlIElEIG9mIHRoZSBjaGF0IHNlcnZpY2VcbiAgICovXG4gIGdldCBjaGF0SW5zdGFuY2VJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jaGF0SW5zdGFuY2VJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJzaXN0IHRoZSBpbnN0YW5jZSBJRCBvZiB0aGUgY2hhdCBzZXJ2aWNlXG4gICAqIEBwYXJhbSBpbnN0YW5jZUlkIFRoZSBpbnN0YW5jZSBJRCBvZiB0aGUgY2hhdCBzZXJ2aWNlXG4gICAqL1xuICBzZXRDaGF0SW5zdGFuY2VJZChpbnN0YW5jZUlkOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9jaGF0SW5zdGFuY2VJZCA9IGluc3RhbmNlSWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBJRCBvZiB0aGUgY3VycmVudCBjaGF0IGRpc2N1c3Npb24gd2hpY2ggaXMgdXNlZCB0byBzYXZlL2dldC9kZWxldGUgaXRcbiAgICogQHJldHVybnMgVGhlIElEIG9mIHRoZSBjdXJyZW50IGNoYXQgZGlzY3Vzc2lvblxuICAgKi9cbiAgZ2V0IHNhdmVkQ2hhdElkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3NhdmVkQ2hhdElkO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcnNpc3QgdGhlIElEIG9mIHRoZSBjdXJyZW50IGNoYXQgZGlzY3Vzc2lvbiB3aGljaCBpcyB1c2VkIHRvIHNhdmUvZ2V0L2RlbGV0ZSBpdFxuICAgKiBAcGFyYW0gc2F2ZWRDaGF0SWQgVGhlIElEIG9mIHRoZSBjdXJyZW50IGNoYXQgZGlzY3Vzc2lvbiB3aGljaCBpcyB1c2VkIHRvIHNhdmUvZ2V0L2RlbGV0ZSBpdFxuICAgKi9cbiAgc2V0U2F2ZWRDaGF0SWQoc2F2ZWRDaGF0SWQ6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3NhdmVkQ2hhdElkID0gc2F2ZWRDaGF0SWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBJRCBvZiB0aGUgY3VycmVudCBjaGF0IGRpc2N1c3Npb24gd2hpY2ggaXMgdXNlZCB0byBpZGVudGlmeSBhdWRpdCBldmVudHNcbiAgICogQHJldHVybnMgVGhlIElEIG9mIHRoZSBjdXJyZW50IGNoYXQgZGlzY3Vzc2lvblxuICAgKi9cbiAgZ2V0IGNoYXRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jaGF0SWQ7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYW4gR1VJRCBmb3IgdGhlIGN1cnJlbnQgY2hhdCBkaXNjdXNzaW9uIHdoaWNoIGlzIHVzZWQgdG8gaWRlbnRpZnkgYXVkaXQgZXZlbnRzXG4gICAqIElmIHRoZSBkaXNjdXNzaW9uIGlzIHNhdmVkLCB0aGUgc2F2ZWRDaGF0SWQgaXMgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgdmFsdWUgb2YgdGhpcyBjaGF0SWRcbiAgICogQHBhcmFtIGNoYXRJZCBpZiBwcm92aWRlZCwgaXQgd2lsbCBiZSBjb25zaWRlcmVkIGFzIHRoZSBJRCBvZiB0aGUgY3VycmVudCBjaGF0IGRpc2N1c3Npb24gd2hpY2ggaXMgdXNlZCB0byBpZGVudGlmeSBhdWRpdCBldmVudHNcbiAgICovXG4gIGdlbmVyYXRlQ2hhdElkKGNoYXRJZD86IHN0cmluZykge1xuICAgIHRoaXMuX2NoYXRJZCA9IGNoYXRJZCB8fCBVdGlscy5ndWlkKCk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgY2hhdCBjb25maWcgYnkgbWFuYWdpbmcgT05MWSBzdWItb2JqZWN0ICoqZGVmYXVsdFZhbHVlcyoqIGNvbmZpZ3Mgb2YgdGhlIHN0YW5kYXJkIGFwcCBjb25maWcgKGRlZmluZWQgaW4gdGhlIGN1c3RvbWl6YXRpb24ganNvbiB0YWIgKSBhbmQgdGhlIHVzZXIgcHJlZmVyZW5jZXMuXG4gICAqIFRvIGRvIHNvLCBhIHRyYWNraW5nIG1lY2hhbmlzbSBpcyBpbXBsZW1lbnRlZCB0byBub3RpZnkgdGhlIHVzZXIgYWJvdXQgdGhlIGF2YWlsYWJsZSB1cGRhdGVzIGluIHRoZSBkZWZhdWx0VmFsdWVzIG9iamVjdCBvZiB0aGUgc3RhbmRhcmQgYXBwIGNvbmZpZy5cbiAgICogVGhlIHJlc3Qgb2YgdGhlIGNvbmZpZyBvYmplY3QgY29taW5nIGZyb20gXCJzdGFuZGFyZCBhcHAgY29uZmlnXCIgaXMgdXNlZCBhcyBpdCBpcyB3aXRob3V0IGFueSBvdmVycmlkZS5cbiAgICogVGh1cywgdGhlIHVzZXIgcHJlZmVyZW5jZXMgYXJlIHVzZWQgb25seSBmb3IgdGhlIGRlZmF1bHRWYWx1ZXMgb2JqZWN0LlxuICAgKiBUaGlzIHByb3ZpZGUgYSBjZW50cmFsaXplZCB3YXkgdG8gbWFuYWdlIHRoZSByZXN0IG9mIHRoZSBjb25maWcgb2JqZWN0IGJ5IGFkbWlucyBhbmQgZW5zdXJlIGEgdW5pcXVlIGNvbW1vbiBiZWhhdmlvciBmb3IgYWxsIHVzZXJzLlxuICAgKi9cbiAgaW5pdENoYXRDb25maWcoKSB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5jaGF0SW5zdGFuY2VJZDtcbiAgICBjb25zdCB1c2VyU2V0dGluZ3NDb25maWcgPSB0aGlzLmFzc2lzdGFudHNba2V5XSB8fCB7fTtcbiAgICBjb25zdCBzdGFuZGFyZENoYXRDb25maWcgPSB0aGlzLmFwcFNlcnZpY2UuYXBwPy5kYXRhPy5hc3Npc3RhbnRzPy5ba2V5XTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBWYWxpZGF0ZSB0aGUgd2hvbGUgY29uZmlnIG9iamVjdCBhZ2FpbnN0IHRoZSBzY2hlbWFcbiAgICAgIGNoYXRDb25maWdTY2hlbWEucGFyc2Uoc3RhbmRhcmRDaGF0Q29uZmlnKTtcbiAgICAgIC8vIElmIHRoZSB1c2VyIHByZWZlcmVuY2VzIGRvIG5vdCBjb250YWluIGEgY29uZmlnJ3MgZGVmYXVsdFZhbHVlcyBvYmplY3QsIGtlZXAgdXNpbmcgdGhlIHN0YW5kYXJkIGFwcCBjb25maWcgYW5kIG5vdGhpbmcgdG8gc3RvcmUgaW4gdGhlIHVzZXIgcHJlZmVyZW5jZXNcbiAgICAgIGlmICghdXNlclNldHRpbmdzQ29uZmlnLmRlZmF1bHRWYWx1ZXMpIHtcbiAgICAgICAgdGhpcy5hc3Npc3RhbnRDb25maWckLm5leHQoey4uLnN0YW5kYXJkQ2hhdENvbmZpZ30pO1xuICAgICAgICB0aGlzLmluaXRDb25maWckLm5leHQodHJ1ZSk7XG4gICAgICB9IGVsc2UgeyAvLyBJZiB0aGUgdXNlciBoYXMgaXRzIG93biBkZWZhdWx0VmFsdWVzIGluIGl0cyB1c2VyU2V0dGluZ3MsIHRoZW4gd2UgbmVlZCB0byBjaGVjayBmb3IgcG90ZW50aWFsIHVwZGF0ZXMgbWFkZSBieSBhZG1pbnMgaW4gdGhlIG1lYW50aW1lIGFuZCBob3cgaGUgd2FudHMgdG8gbWFuYWdlIHRoZW1cblxuICAgICAgICAvLyBSZXRyaWV2ZSBhbHJlYWR5IHN0b3JlZCBoYXNoZXMgaW4gdGhlIHVzZXIgc2V0dGluZ3MgaWYgZXhpc3RzXG4gICAgICAgIGNvbnN0IGFwcGxpZWREZWZhdWx0VmFsdWVzSGFzaCA9IHVzZXJTZXR0aW5nc0NvbmZpZy5oYXNoZXM/LltcImFwcGxpZWQtZGVmYXVsdFZhbHVlcy1oYXNoXCJdO1xuICAgICAgICBjb25zdCBza2lwcGVkRGVmYXVsdFZhbHVlc0hhc2ggPSB1c2VyU2V0dGluZ3NDb25maWcuaGFzaGVzPy5bXCJza2lwcGVkLWRlZmF1bHRWYWx1ZXMtaGFzaFwiXTtcbiAgICAgICAgLy8gQ3JlYXRlIGEgaGFzaCBvZiB0aGUgY3VycmVudCBkZWZhdWx0VmFsdWVzIG9mIHRoZSBzdGFuZGFyZENoYXRDb25maWdcbiAgICAgICAgY29uc3QgY3VycmVudERlZmF1bHRWYWx1ZXNIYXNoID0gVXRpbHMuc2hhNTEyKEpTT04uc3RyaW5naWZ5KHN0YW5kYXJkQ2hhdENvbmZpZy5kZWZhdWx0VmFsdWVzKSk7XG5cbiAgICAgICAgLy8gSW1wbGVtZW50IHRoZSB0cmFja2luZyBtZWNoYW5pc20gdG8gbm90aWZ5IHRoZSB1c2VyIGFib3V0IHRoZSBhdmFpbGFibGUgdXBkYXRlcyBpbiB0aGUgZGVmYXVsdFZhbHVlcyBvYmplY3Qgb2YgdGhlIHN0YW5kYXJkIGFwcCBjb25maWdcbiAgICAgICAgY29uc3QgY29uZGl0aW9uID0gKGN1cnJlbnREZWZhdWx0VmFsdWVzSGFzaCAhPT0gYXBwbGllZERlZmF1bHRWYWx1ZXNIYXNoKSAmJiAoY3VycmVudERlZmF1bHRWYWx1ZXNIYXNoICE9PSBza2lwcGVkRGVmYXVsdFZhbHVlc0hhc2gpO1xuICAgICAgICBpZiAoY29uZGl0aW9uKSB7XG4gICAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2VcbiAgICAgICAgICAgIC5jb25maXJtKHtcbiAgICAgICAgICAgICAgdGl0bGU6IFwiQXZhaWxhYmxlIHVwZGF0ZXMgIVwiLFxuICAgICAgICAgICAgICBtZXNzYWdlOiBcIkNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgdG8gdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbi4gRG8geW91IHdhbnQgdG8gdXBkYXRlIHlvdXIgb3duIHZlcnNpb24gP1wiLFxuICAgICAgICAgICAgICBidXR0b25zOiBbXG4gICAgICAgICAgICAgICAgICBuZXcgTW9kYWxCdXR0b24oe3Jlc3VsdDogTW9kYWxSZXN1bHQuTm8sIHRleHQ6IFwiU2VlIG5vIG1vcmVcIn0pLFxuICAgICAgICAgICAgICAgICAgbmV3IE1vZGFsQnV0dG9uKHtyZXN1bHQ6IE1vZGFsUmVzdWx0Lklnbm9yZSwgdGV4dDogXCJSZW1pbmQgbWUgbGF0ZXJcIn0pLFxuICAgICAgICAgICAgICAgICAgbmV3IE1vZGFsQnV0dG9uKHtyZXN1bHQ6IE1vZGFsUmVzdWx0Lk9LLCB0ZXh0OiBcIlVwZGF0ZVwiLCBwcmltYXJ5OiB0cnVlfSlcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgY29uZmlybVR5cGU6IENvbmZpcm1UeXBlLldhcm5pbmdcbiAgICAgICAgICAgIH0pLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICAgICAgICBpZihyZXMgPT09IE1vZGFsUmVzdWx0Lk9LKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBoYXNoZXMgPSB7IC4uLnVzZXJTZXR0aW5nc0NvbmZpZy5oYXNoZXMsIFwiYXBwbGllZC1kZWZhdWx0VmFsdWVzLWhhc2hcIjogY3VycmVudERlZmF1bHRWYWx1ZXNIYXNoLCBcInNraXBwZWQtZGVmYXVsdFZhbHVlcy1oYXNoXCI6IHVuZGVmaW5lZCB9O1xuICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBjaGF0IGNvbmZpZyBhbmQgc3RvcmUgaXRzIGRlZmF1bHRWYWx1ZXMgaW4gdGhlIHVzZXIgcHJlZmVyZW5jZXNcbiAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2hhdENvbmZpZyh7Li4uc3RhbmRhcmRDaGF0Q29uZmlnfSwgaGFzaGVzLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdENvbmZpZyQubmV4dCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVBdWRpdEV2ZW50KFwiY29uZmlndXJhdGlvbi5lZGl0XCIsIHsgJ2NvbmZpZ3VyYXRpb24nOiBKU09OLnN0cmluZ2lmeSh7Li4uc3RhbmRhcmRDaGF0Q29uZmlnfSkgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmKHJlcyA9PT0gTW9kYWxSZXN1bHQuTm8pIHtcbiAgICAgICAgICAgICAgICAgIC8vIERvIG5vdCBub3RpZnkgdGhlIHVzZXIgYWJvdXQgY2hhbmdlcyB3aGlsZSB0aGlzIHNraXBwZWQgdmVyc2lvbiBpcyBub3QgdXBkYXRlZFxuICAgICAgICAgICAgICAgICAgY29uc3QgaGFzaGVzID0geyAuLi51c2VyU2V0dGluZ3NDb25maWcuaGFzaGVzLCBcInNraXBwZWQtZGVmYXVsdFZhbHVlcy1oYXNoXCI6IGN1cnJlbnREZWZhdWx0VmFsdWVzSGFzaCB9O1xuICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDaGF0Q29uZmlnKHsuLi5zdGFuZGFyZENoYXRDb25maWcsIGRlZmF1bHRWYWx1ZXM6IHVzZXJTZXR0aW5nc0NvbmZpZy5kZWZhdWx0VmFsdWVzfSwgaGFzaGVzLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICB0aGlzLmluaXRDb25maWckLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIC8vIEp1c3QgcGljayB0aGUgdmVyc2lvbiBpbiB0aGUgdXNlciBzZXR0aW5ncywgbm90aGluZyB0byBiZSB1cGRhdGVkXG4gICAgICAgICAgICAgICAgICB0aGlzLmFzc2lzdGFudENvbmZpZyQubmV4dCh7Li4uc3RhbmRhcmRDaGF0Q29uZmlnLCBkZWZhdWx0VmFsdWVzOiB1c2VyU2V0dGluZ3NDb25maWcuZGVmYXVsdFZhbHVlc30pO1xuICAgICAgICAgICAgICAgICAgdGhpcy5pbml0Q29uZmlnJC5uZXh0KHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgeyAvLyBObyBhdmFpbGFibGUgdXBkYXRlcyBPciB1cGRhdGVzIGhhcyBiZWVuIGFscmVhZHkgc2tpcHBlZCwgdGhlbiBqdXN0IHBpY2sgdGhlIHZlcnNpb24gaW4gdGhlIHVzZXIgc2V0dGluZ3NcbiAgICAgICAgICB0aGlzLmFzc2lzdGFudENvbmZpZyQubmV4dCh7Li4uc3RhbmRhcmRDaGF0Q29uZmlnLCBkZWZhdWx0VmFsdWVzOiB1c2VyU2V0dGluZ3NDb25maWcuZGVmYXVsdFZhbHVlc30pO1xuICAgICAgICAgIHRoaXMuaW5pdENvbmZpZyQubmV4dCh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLmVycm9yKGBNaXNzaW5nIHZhbGlkIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBhc3Npc3RhbnQgaW5zdGFuY2UgJyR7a2V5fScuIFNlZSB0aGUgYnJvd3NlciBjb25zb2xlIG1lc3NhZ2VzIGZvciBkZXRhaWxzIG9uIHRoZSBtaXNzaW5nIG9yIGluY29ycmVjdCBwcm9wZXJ0aWVzLmApO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIHZhbGlkIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBhc3Npc3RhbnQgaW5zdGFuY2UgJyR7a2V5fScgLiBcXG4gJHtKU09OLnN0cmluZ2lmeShlcnJvci5pc3N1ZXMsIG51bGwsIDIpfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIGNoYXQgY29uZmlnIGFuZCBzdG9yZSBpdHMgZGVmYXVsdFZhbHVlcyBpbiB0aGUgdXNlciBwcmVmZXJlbmNlc1xuICAgKiBAcGFyYW0gY29uZmlnICBUaGUgdXBkYXRlZCBjaGF0IGNvbmZpZ1xuICAgKiBAcGFyYW0gaGFzaGVzICBUaGUgdXBkYXRlZCBoYXNoZXMgdG8gc3RvcmUgaW4gdGhlIHVzZXIgcHJlZmVyZW5jZXNcbiAgICogQHBhcmFtIG5vdGlmeSAgV2hldGhlciB0byBub3RpZnkgdGhlIHVzZXIgYWJvdXQgdGhlIHVwZGF0ZVxuICAgKiBAcGFyYW0gc3VjY2Vzc0NhbGxiYWNrICBUaGUgY2FsbGJhY2sgdG8gZXhlY3V0ZSBpZiB0aGUgdXBkYXRlIGlzIHN1Y2Nlc3NmdWxcbiAgICogQHBhcmFtIGVycm9yQ2FsbGJhY2sgIFRoZSBjYWxsYmFjayB0byBleGVjdXRlIGlmIHRoZSB1cGRhdGUgZmFpbHNcbiAgICovXG4gIHVwZGF0ZUNoYXRDb25maWcoY29uZmlnOiBDaGF0Q29uZmlnLCBoYXNoZXM/OiB7XCJhcHBsaWVkLWRlZmF1bHRWYWx1ZXMtaGFzaFwiPzogc3RyaW5nLCBcInNraXBwZWQtZGVmYXVsdFZhbHVlcy1oYXNoXCI/OiBzdHJpbmd9LCAgbm90aWZ5ID0gdHJ1ZSwgc3VjY2Vzc0NhbGxiYWNrPzogKCkgPT4gYW55LCBlcnJvckNhbGxiYWNrPzogKCkgPT4gYW55KSB7XG4gICAgdGhpcy5hc3Npc3RhbnRDb25maWckLm5leHQoY29uZmlnKTtcbiAgICBjb25zdCBhc3Npc3RhbnRzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5hc3Npc3RhbnRzKTtcbiAgICBhc3Npc3RhbnRzW3RoaXMuY2hhdEluc3RhbmNlSWRdID0geyAuLi5hc3Npc3RhbnRzW3RoaXMuY2hhdEluc3RhbmNlSWRdLCBkZWZhdWx0VmFsdWVzOiBjb25maWcuZGVmYXVsdFZhbHVlcyB9O1xuICAgIGlmKGhhc2hlcykgYXNzaXN0YW50c1t0aGlzLmNoYXRJbnN0YW5jZUlkXS5oYXNoZXMgPSBoYXNoZXM7XG4gICAgdGhpcy51c2VyU2V0dGluZ3NTZXJ2aWNlLnBhdGNoKHsgYXNzaXN0YW50cyB9KS5zdWJzY3JpYmUoXG4gICAgICBuZXh0ID0+IHt9LFxuICAgICAgZXJyb3IgPT4ge1xuICAgICAgICBpZihub3RpZnkpIHtcbiAgICAgICAgICBlcnJvckNhbGxiYWNrID8gZXJyb3JDYWxsYmFjaygpIDogdGhpcy5ub3RpZmljYXRpb25zU2VydmljZS5lcnJvcihgVGhlIHVwZGF0ZSBvZiB0aGUgYXNzaXN0YW50IGluc3RhbmNlICcke3RoaXMuY2hhdEluc3RhbmNlSWR9JyBjb25maWd1cmF0aW9uIGZhaWxlZGApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJDb3VsZCBub3QgcGF0Y2ggYXNzaXN0YW50cyFcIiwgZXJyb3IpO1xuICAgICAgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgaWYobm90aWZ5KSB7XG4gICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrID8gc3VjY2Vzc0NhbGxiYWNrKCkgOiB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLnN1Y2Nlc3MoYFRoZSBhc3Npc3RhbnQgaW5zdGFuY2UgJyR7dGhpcy5jaGF0SW5zdGFuY2VJZH0nIGNvbmZpZ3VyYXRpb24gaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHVwZGF0ZWRgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogT3ZlcnJpZGVzIHRoZSBsb2dnZWQgaW4gdXNlclxuICAgKi9cbiAgYWJzdHJhY3Qgb3ZlcnJpZGVVc2VyKCk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIENhbGxzIHRoZSBGZXRjaCBBUEkgdG8gcmV0cmlldmUgYSBuZXcgbWVzc2FnZSBnaXZlbiBhbGwgcHJldmlvdXMgbWVzc2FnZXNcbiAgICovXG4gIGFic3RyYWN0IGZldGNoKG1lc3NhZ2VzOiBDaGF0TWVzc2FnZVtdLCBxdWVyeTogUXVlcnkpOiBPYnNlcnZhYmxlPENoYXRSZXNwb25zZT5cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBsaXN0IG9mIG1vZGVscyBhdmFpbGFibGUgb24gdGhlIHNlcnZlclxuICAgKi9cbiAgYWJzdHJhY3QgbGlzdE1vZGVscygpOiBPYnNlcnZhYmxlPEdsbG1Nb2RlbERlc2NyaXB0aW9uW10gfCB1bmRlZmluZWQ+O1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGxpc3Qgb2YgZnVuY3Rpb25zIGF2YWlsYWJsZSBvbiB0aGUgc2VydmVyIEFORCBtYXRjaGluZyBlbmFibGVkIGZ1bmN0aW9ucyBpbiB0aGUgY2hhdCBjb25maWdcbiAgICovXG4gIGFic3RyYWN0IGxpc3RGdW5jdGlvbnMoKTogT2JzZXJ2YWJsZTxHbGxtRnVuY3Rpb25bXSB8IHVuZGVmaW5lZD47XG5cbiAgLyoqXG4gICAqIFN0b3BzIHRoZSBhc3Npc3RhbnQgYW5zd2VyIGdlbmVyYXRpb24gYW5kIGNhbmNlbHMgYWxsIHRoZSBvbmdvaW5nIGFuZCBwZW5kaW5nIHJlbGF0ZWQgdGFza3NcbiAgICovXG4gIGFic3RyYWN0IHN0b3BHZW5lcmF0aW9uKCk6IE9ic2VydmFibGU8YW55PlxuXG4gIC8qKlxuICAgKiBBIGhhbmRsZXIgZm9yIHF1b3RhIHVwZGF0ZXMgZWFjaCB0aW1lIHRoZSBjaGF0IGlzIGludm9rZWQuXG4gICAqIEl0IGVtaXRzIHRoZSB1cGRhdGVkIHF1b3RhIHRvIHRoZSBxdW90YSQgc3ViamVjdCwgZW1pdHMgYWNjb3JkaW5nbHkgdGhlIHVwZGF0ZWQgdXNlcidzIHRva2VucyBjb25zdW1wdGlvbiBhbmQgbm90aWZpZXMgdGhlIHVzZXIgaWYgdGhlIG1heCBxdW90YSBpcyByZWFjaGVkLlxuICAgKiBAcGFyYW0gcXVvdGEgVGhlIHVwZGF0ZWQgcXVvdGFcbiAgICogQHBhcmFtIHByb3BhZ2F0ZUVycm9yIFdoZXRoZXIgdG8gcHJvcGFnYXRlIHRoZSBlcnJvciB0byB0aGUgY2FsbGVyXG4gICAqL1xuICB1cGRhdGVRdW90YShxdW90YTogUXVvdGEsIHByb3BhZ2F0ZUVycm9yID0gZmFsc2UpIHtcbiAgICB0aGlzLnF1b3RhJC5uZXh0KHF1b3RhKTtcbiAgICBjb25zdCBuZXh0UmVzZXREYXRlID0gdGhpcy5mb3JtYXREYXRlVGltZShxdW90YS5uZXh0UmVzZXRVVEMrXCIrMDA6MDBcIik7IC8vIFRoaXMgKzAwOjAwIGlzIHRvIGVuc3VyZSBkYXRlcyB3aWxsIGJlIHByb3Blcmx5IGNvbnZlcnRlZCB0byBsb2NhbCB0aW1lXG4gICAgY29uc3QgY29uc3VtcHRpb25QZXJjZW50YWdlID0gTWF0aC5yb3VuZCgocXVvdGEudG9rZW5Db3VudCAqIDEwMCAvIHF1b3RhLnBlcmlvZFRva2VucykgKiAxMDApIC8gMTAwO1xuICAgIHRoaXMudXNlclRva2VuQ29uc3VtcHRpb24kLm5leHQoe3BlcmNlbnRhZ2U6IGNvbnN1bXB0aW9uUGVyY2VudGFnZSwgbmV4dFJlc2V0RGF0ZX0pO1xuICAgIGlmKHF1b3RhLm1heFF1b3RhUmVhY2hlZCkge1xuICAgICAgdGhpcy5nZW5lcmF0ZUF1ZGl0RXZlbnQoJ3F1b3RhLmV4Y2VlZGVkJywge30pO1xuICAgICAgY29uc3QgbXNnID0gYFNvcnJ5LCB5b3UgaGF2ZSBleGNlZWRlZCB0aGUgYWxsb3dlZCBxdW90YS4gUGxlYXNlIHJldHJ5IHN0YXJ0aW5nIGZyb20gJHtuZXh0UmVzZXREYXRlfS5gO1xuICAgICAgdGhpcy5ub3RpZmljYXRpb25zU2VydmljZS5lcnJvcihtc2cpO1xuICAgICAgaWYocHJvcGFnYXRlRXJyb3IpIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBIGhhbmRsZXIgZm9yIGNoYXQgdXNhZ2UgbWV0cmljcyBlYWNoIHRpbWUgdGhlIGdlbmVyYXRpb24gb2YgdGhlIGFzc2lzdGFudCByZXNwb25zZSBpcyBjb21wbGV0ZWQuXG4gICAqIEl0IGVtaXRzIHRoZSBjaGF0IHVzYWdlIG1ldHJpY3MgdG8gdGhlIGNoYXRVc2FnZU1ldHJpY3MkIHN1YmplY3QsIGVtaXRzIGFjY29yZGluZ2x5IHRoZSB1cGRhdGVkIGNoYXQncyB0b2tlbnMgY29uc3VtcHRpb25cbiAgICogQHBhcmFtIGNoYXRVc2FnZU1ldHJpY3MgVGhlIGNoYXQgdXNhZ2UgbWV0cmljc1xuICAgKi9cbiAgdXBkYXRlQ2hhdFVzYWdlTWV0cmljcyhjaGF0VXNhZ2VNZXRyaWNzOiBDaGF0VXNhZ2VNZXRyaWNzKSB7XG4gICAgdGhpcy5jaGF0VXNhZ2VNZXRyaWNzJC5uZXh0KGNoYXRVc2FnZU1ldHJpY3MpO1xuICAgIGNvbnN0IGN1cnJlbnRNb2RlbCA9IHRoaXMuZ2V0TW9kZWwodGhpcy5hc3Npc3RhbnRDb25maWckLnZhbHVlIS5kZWZhdWx0VmFsdWVzLnNlcnZpY2VfaWQsIHRoaXMuYXNzaXN0YW50Q29uZmlnJC52YWx1ZSEuZGVmYXVsdFZhbHVlcy5tb2RlbF9pZCk7XG4gICAgY29uc3QgY29uc3VtcHRpb25QZXJjZW50YWdlID0gTWF0aC5yb3VuZCgoY2hhdFVzYWdlTWV0cmljcy50b3RhbFRva2VuQ291bnQgKiAxMDAgLyAoY3VycmVudE1vZGVsIS5jb250ZXh0V2luZG93U2l6ZSAtIGN1cnJlbnRNb2RlbCEubWF4R2VuZXJhdGlvblNpemUpKSAqIDEwMCkgLyAxMDA7XG4gICAgdGhpcy5jaGF0VG9rZW5Db25zdW1wdGlvbiQubmV4dCh7cGVyY2VudGFnZTogY29uc3VtcHRpb25QZXJjZW50YWdlfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBtb2RlbCBkZXNjcmlwdGlvbiBmb3IgdGhlIGdpdmVuIChzZXJ2aWNlSWQgKyBtb2RlbElkKVxuICAgKiBJZiBhIG1vZGVsIGlzIG5vdCBmb3VuZCwgYW4gZXJyb3IgbWVzc2FnZSBpcyByZXR1cm5lZFxuICAgKiBAcGFyYW0gc2VydmljZUlkIFRoZSBzZXJ2aWNlSWQgb2YgdGhlIG1vZGVsXG4gICAqIEBwYXJhbSBtb2RlbElkIFRoZSBtb2RlbElkIG9mIHRoZSBtb2RlbFxuICAgKiBAcmV0dXJucyBUaGUgbW9kZWwgZGVzY3JpcHRpb25cbiAgICovXG4gIGdldE1vZGVsKHNlcnZpY2VJZDogc3RyaW5nLCBtb2RlbElkOiBzdHJpbmcpOiBHbGxtTW9kZWxEZXNjcmlwdGlvbiB8IHVuZGVmaW5lZHtcbiAgICBsZXQgbW9kZWwgPSB0aGlzLm1vZGVscz8uZmluZChtID0+IG0uc2VydmljZUlkID09PSBzZXJ2aWNlSWQgJiYgbS5tb2RlbElkID09PSBtb2RlbElkKTtcbiAgICAvLyBIYW5kbGUgb2Jzb2xldGUgY29uZmlnXG4gICAgaWYoIW1vZGVsKSB7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLmVycm9yKGBGQVRBTCBFUlJPUiA6IFRoZSBtb2RlbCAoc2VydmljZUlkID0gJyR7c2VydmljZUlkfScsIG1vZGVsSWQgPSAnJHttb2RlbElkfScpIGlzIG5vIGxvbmdlciBhdmFpbGFibGUuIFBsZWFzZSBjb250YWN0IGFuIGFkbWluIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLmApO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGQVRBTCBFUlJPUiA6IFRoZSBtb2RlbCAoc2VydmljZUlkID0gJyR7c2VydmljZUlkfScsIG1vZGVsSWQgPSAnJHttb2RlbElkfScpIGlzIG5vIGxvbmdlciBhdmFpbGFibGVgKTtcbiAgICB9XG4gICAgcmV0dXJuIG1vZGVsO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIHRoZSBsaXN0IHNhdmVkIGNoYXRzIGJlbG9uZ2luZyB0byBhIHNwZWNpZmljIGluc3RhbmNlIG9mIHRoZSBhc3Npc3RhbnRcbiAgICovXG4gIGFic3RyYWN0IGxpc3RTYXZlZENoYXQoKTogdm9pZDtcblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBzYXZlZCBjaGF0IHdpdGggdGhlIGdpdmVuIGlkLCBpZiBleGlzdHMuIE90aGVyd2lzZSwgcmV0dXJuIHVuZGVmaW5lZFxuICAgKiBAcGFyYW0gaWQgVGhlIGlkIG9mIHRoZSBzYXZlZCBjaGF0XG4gICAqL1xuICBhYnN0cmFjdCBnZXRTYXZlZENoYXQoaWQ6IHN0cmluZyk6IE9ic2VydmFibGU8U2F2ZWRDaGF0SGlzdG9yeSB8IHVuZGVmaW5lZD47XG5cbiAgLyoqXG4gICAqIFNhdmUgYSBjaGF0IHdpdGggdGhlIGdpdmVuIG1lc3NhZ2VzXG4gICAqIEBwYXJhbSBtZXNzYWdlcyBUaGUgbWVzc2FnZXMgdG8gYWRkIHRvIHRoZSBzYXZlZCBjaGF0IGluZGV4XG4gICAqIEByZXR1cm5zIFRoZSBzYXZlZCBjaGF0XG4gICAqL1xuICBhYnN0cmFjdCBhZGRTYXZlZENoYXQobWVzc2FnZXM6IENoYXRNZXNzYWdlW10pOiBPYnNlcnZhYmxlPFNhdmVkQ2hhdD47XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBhIHNhdmVkIGNoYXQgd2l0aCB0aGUgZ2l2ZW4gaWQuXG4gICAqIEBwYXJhbSBpZCBUaGUgaWQgb2YgdGhlIHNhdmVkIGNoYXRcbiAgICogQHBhcmFtIG5hbWUgVGhlIG5ldyBuYW1lIG9mIHRoZSBzYXZlZCBjaGF0LCBpZiBwcm92aWRlZFxuICAgKiBAcGFyYW0gbWVzc2FnZXMgVGhlIG1lc3NhZ2VzIHRvIHVwZGF0ZSB0aGUgc2F2ZWQgY2hhdCBoaXN0b3J5LCBpZiBwcm92aWRlZFxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBzYXZlZCBjaGF0IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB1cGRhdGVkXG4gICAqL1xuICBhYnN0cmFjdCB1cGRhdGVTYXZlZENoYXQoaWQ6IHN0cmluZywgbmFtZT86IHN0cmluZywgbWVzc2FnZXM/OiBDaGF0TWVzc2FnZVtdKTogT2JzZXJ2YWJsZTxTYXZlZENoYXQ+O1xuXG4gIC8qKlxuICAgKiBCdWxrIGRlbGV0ZSBvZiBzYXZlZCBjaGF0cyBtYXRjaGluZyB0aGUgZ2l2ZW4gaWRzXG4gICAqIEBwYXJhbSBpZHMgTGlzdCBvZiBpZHMgb2YgdGhlIHNhdmVkIGNoYXRzIHRvIGRlbGV0ZVxuICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGRlbGV0ZWQgY2hhdHNcbiAgICovXG4gIGFic3RyYWN0IGRlbGV0ZVNhdmVkQ2hhdChpZHM6IHN0cmluZ1tdKTogT2JzZXJ2YWJsZTxudW1iZXI+O1xuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhbiBhdWRpdCBldmVudCB3aXRoIHRoZSBnaXZlbiB0eXBlIGFuZCBkZXRhaWxzLiBUaGUgZ2VuZXJhdGVkIGF1ZGl0IGV2ZW50IGlzIHNlbnQgYWZ0ZXJ3YXJkcyB2aWEgdGhlIEF1ZGl0V2ViU2VydmljZVxuICAgKiBAcGFyYW0gdHlwZSBBdWRpdCBldmVudCB0eXBlXG4gICAqIEBwYXJhbSBkZXRhaWxzIEF1ZGl0IGV2ZW50IGRldGFpbHNcbiAgICogQHBhcmFtIGlkIEFjdGlvbnMgKHNhdmVkQ2hhdCBkZWxldGUvcmVuYW1lLy4uLikgbWF5IG9jY3VyIG9uIGEgc3BlY2lmaWMgY2hhdCBkaWZmZXJlbnQgdGhhbiB0aGUgY3VycmVudCBvbmUgc3RvcmVkIGluIHRoaXMgc2VydmljZSwgc28gdGhlIGNoYXQgaWQgY2FuIGJlIHByb3ZpZGVkXG4gICAqL1xuICBnZW5lcmF0ZUF1ZGl0RXZlbnQodHlwZTogc3RyaW5nLCBkZXRhaWxzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBpZD86IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGJhc2VEZXRhaWxzID0ge1xuICAgICAgXCJ1cmxcIjogZGVjb2RlVVJJQ29tcG9uZW50KHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxcbiAgICAgIFwiYXBwXCI6IHRoaXMuYXBwU2VydmljZS5hcHBOYW1lLFxuICAgICAgXCJ1c2VyLWlkXCI6IHRoaXMucHJpbmNpcGFsU2VydmljZS5wcmluY2lwYWw/LnVzZXJJZCxcbiAgICAgIFwiaW5zdGFuY2UtaWRcIjogdGhpcy5jaGF0SW5zdGFuY2VJZCxcbiAgICAgIFwiY2hhdC1pZFwiOiBpZCB8fCB0aGlzLmNoYXRJZCxcbiAgICAgIFwic2VydmljZS1pZFwiOiB0aGlzLmFzc2lzdGFudENvbmZpZyQudmFsdWUhLmRlZmF1bHRWYWx1ZXMuc2VydmljZV9pZCxcbiAgICAgIFwibW9kZWwtaWRcIjogdGhpcy5hc3Npc3RhbnRDb25maWckLnZhbHVlIS5kZWZhdWx0VmFsdWVzLm1vZGVsX2lkLFxuICAgIH07XG4gICAgY29uc3QgYXVkaXQgPSB7XG4gICAgICB0eXBlLFxuICAgICAgZGV0YWlsOiB7XG4gICAgICAgIC4uLmJhc2VEZXRhaWxzLFxuICAgICAgICAuLi5kZXRhaWxzXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuYXVkaXRTZXJ2aWNlLm5vdGlmeShhdWRpdCk7XG4gIH1cblxuXG5cbiAgLyoqXG4gICAqIFRyYXZlcnNlIHRoZSBhcnJheSBmcm9tIHRoZSBlbmQgYW5kIHRyYWNrIHRoZSBmaXJzdCAnYXNzaXN0YW50JyBtZXNzYWdlIGFtb25nIHRoZSBsYXN0IGdyb3VwIG9mIFwiYXNzaXN0YW50XCIgbWVzc2FnZXMgd2hlcmUgZGlzcGxheSBpcyB0cnVlXG4gICAqIEBwYXJhbSBhcnJheSBUaGUgYXJyYXkgb2YgQ2hhdE1lc3NhZ2UgdG8gdHJhdmVyc2VcbiAgICogQHJldHVybnMgVGhlIGluZGV4IG9mIHRoZSBmaXJzdCB2aXNpYmxlIGFzc2lzdGFudCBtZXNzYWdlIGFtb25nIHRoZSBsYXN0IGdyb3VwIG9mIFwiYXNzaXN0YW50XCIgbWVzc2FnZXMgaW4gdGhlIGFycmF5XG4gICAqL1xuICBmaXJzdFZpc2libGVBc3Npc3RhbnRNZXNzYWdlSW5kZXgoYXJyYXk6IENoYXRNZXNzYWdlW118IHVuZGVmaW5lZCk6IG51bWJlciB7XG4gICAgaWYgKCFhcnJheSkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICBsZXQgaW5kZXggPSBhcnJheS5sZW5ndGggLSAxO1xuICAgIGxldCBmaXJzdFZpc2libGVBc3Npc3RhbnRNZXNzYWdlSW5kZXggPSAtMTtcbiAgICB3aGlsZSAoaW5kZXggPj0gMCAmJiBhcnJheVtpbmRleF0ucm9sZSA9PT0gJ2Fzc2lzdGFudCcpIHtcbiAgICAgIGlmIChhcnJheVtpbmRleF0uYWRkaXRpb25hbFByb3BlcnRpZXMuZGlzcGxheSA9PT0gdHJ1ZSkge1xuICAgICAgICBmaXJzdFZpc2libGVBc3Npc3RhbnRNZXNzYWdlSW5kZXggPSBpbmRleDtcbiAgICAgIH1cbiAgICAgIGluZGV4LS07XG4gICAgfVxuICAgIHJldHVybiBmaXJzdFZpc2libGVBc3Npc3RhbnRNZXNzYWdlSW5kZXg7XG4gIH1cblxuICAvKipcbiAgICogVHJhdmVyc2UgdGhlIGFycmF5IGZyb20gdGhlIGVuZCBhbmQgcGljayB0aGUgbGFzdCAnYXNzaXN0YW50JyBtZXNzYWdlIGFtb25nIHRoZSBsYXN0IGdyb3VwIG9mIFwiYXNzaXN0YW50XCIgbWVzc2FnZXMgd2hlcmUgZGlzcGxheSBpcyB0cnVlXG4gICAqIEBwYXJhbSBhcnJheSBUaGUgYXJyYXkgb2YgQ2hhdE1lc3NhZ2UgdG8gdHJhdmVyc2VcbiAgICogQHJldHVybnMgVGhlIGluZGV4IG9mIHRoZSBsYXN0IHZpc2libGUgYXNzaXN0YW50IG1lc3NhZ2UgYW1vbmcgdGhlIGxhc3QgZ3JvdXAgb2YgXCJhc3Npc3RhbnRcIiBtZXNzYWdlcyBpbiB0aGUgYXJyYXlcbiAgICovXG4gIGxhc3RWaXNpYmxlQXNzaXN0YW50TWVzc2FnZUluZGV4KGFycmF5OiBDaGF0TWVzc2FnZVtdfCB1bmRlZmluZWQpOiBudW1iZXIge1xuICAgIGlmICghYXJyYXkpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gICAgbGV0IGluZGV4ID0gYXJyYXkubGVuZ3RoIC0gMTtcbiAgICBsZXQgbGFzdFZpc2libGVBc3Npc3RhbnRNZXNzYWdlSW5kZXggPSAtMTtcbiAgICB3aGlsZSAoaW5kZXggPj0gMCAmJiBhcnJheVtpbmRleF0ucm9sZSA9PT0gJ2Fzc2lzdGFudCcpIHtcbiAgICAgIGlmIChhcnJheVtpbmRleF0uYWRkaXRpb25hbFByb3BlcnRpZXMuZGlzcGxheSA9PT0gdHJ1ZSkge1xuICAgICAgICBsYXN0VmlzaWJsZUFzc2lzdGFudE1lc3NhZ2VJbmRleCA9IGluZGV4O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGluZGV4LS07XG4gICAgfVxuICAgIHJldHVybiBsYXN0VmlzaWJsZUFzc2lzdGFudE1lc3NhZ2VJbmRleDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXQgYSBkYXRlIHN0cmluZyBpbiBVVEMgdG8gYSBsb2NhbCBkYXRlIHN0cmluZ1xuICAgKiBAcGFyYW0gdmFsdWUgRGF0ZSBzdHJpbmcgaW4gVVRDIHRvIGZvcm1hdFxuICAgKiBAcmV0dXJucyBBIGZvcm1hdHRlZCBsb2NhbCBkYXRlIHN0cmluZ1xuICAgKi9cbiAgcHJvdGVjdGVkIGZvcm1hdERhdGVUaW1lKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGxvY2FsRGF0ZSA9IHRvRGF0ZShwYXJzZUlTTyh2YWx1ZSkpO1xuICAgIHJldHVybiB0aGlzLmludGxTZXJ2aWNlW1wiZm9ybWF0VGltZVwiXShsb2NhbERhdGUsIHtkYXk6IFwibnVtZXJpY1wiLCBtb250aDogXCJzaG9ydFwiLCB5ZWFyOiBcIm51bWVyaWNcIiwgdGltZVpvbmVOYW1lOiAnc2hvcnQnfSk7XG4gIH1cblxuICAvKipcbiAgICogVGFrZXMgYSB0ZXh0IHByb21wdCB0aGF0IG1heSBjb250YWluIHBsYWNlaG9sZGVycyBmb3IgdmFyaWFibGVzXG4gICAqIGFuZCByZXBsYWNlcyB0aGVzZSBwbGFjZWhvbGRlcnMgaWYgaXQgZmluZHMgYSBtYXRjaCBpbiB0aGUgZ2l2ZW5cbiAgICogY29udGV4dCBvYmplY3QuXG4gICAqL1xuICBzdGF0aWMgZm9ybWF0UHJvbXB0KHByb21wdDogc3RyaW5nLCBjb250ZXh0OiBhbnkpIHtcbiAgICByZXR1cm4gcHJvbXB0LnJlcGxhY2UoXG4gICAgICAve3soLio/KX19L2csXG4gICAgICAobWF0Y2gsIGV4cHIpID0+IGdldChjb250ZXh0LCBleHByKSA/PyBtYXRjaFxuICAgICk7XG4gIH1cblxufVxuIl19
@@ -29,10 +29,10 @@ export class DebugMessageComponent {
29
29
  }
30
30
  }
31
31
  DebugMessageComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DebugMessageComponent, deps: [{ token: i1.UIService }], target: i0.ɵɵFactoryTarget.Component });
32
- DebugMessageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: DebugMessageComponent, isStandalone: true, selector: "sq-debug-message", inputs: { data: "data", level: "level", parentColor: "parentColor" }, ngImport: i0, template: "<div *ngIf=\"data\" class=\"table-root\">\r\n <ng-container *ngFor=\"let item of data; let i = index\">\r\n <div *ngIf=\"item.type === 'KV'\" [ngClass]=\"getRowClass(item, i)\" class=\"table-row kv-object\">\r\n <div class=\"kv-key\">{{ item.data.key }}</div>\r\n <div class=\"kv-value\">\r\n <ng-container *ngIf=\"isObject(item.data.value); else normalValue\">\r\n <div class=\"card mb-2\">\r\n <div class=\"card-header\">\r\n <button class=\"btn btn-light btn-sm\" (click)=\"copyToClipboard(item.data.value)\"><i class=\"far fa-fw fa-clipboard\"></i> Copy code</button>\r\n </div>\r\n <pre class=\"language-json my-0 rounded-0 rounded-bottom\"><code class=\"language-json\">{{ item.data.value | json }}</code></pre>\r\n </div>\r\n </ng-container>\r\n <ng-template #normalValue><div class=\"data-value\">{{ item.data.value }}</div></ng-template>\r\n </div>\r\n </div>\r\n <div *ngIf=\"item.type === 'LIST'\" [ngClass]=\"getRowClass(item, i)\" class=\"table-row list-object\">\r\n <div class=\"list-name w-100\" [class.fw-bold]=\"level === 0\" (click)=\"item.expanded=!item.expanded\">\r\n <i class=\"fas\" [class.fa-chevron-up]=\"item.expanded\" [class.fa-chevron-down]=\"!item.expanded\"></i>\r\n {{ item.name }}\r\n </div>\r\n <div class=\"list-items w-100\" *ngIf=\"item.expanded\">\r\n <sq-debug-message [data]=\"item.items\" [level]=\"level + 1\" [parentColor]=\"getRowClass(item, i)\"></sq-debug-message>\r\n </div>\r\n </div>\r\n </ng-container>\r\n</div>\r\n", styles: [".table-root{display:flex;flex-direction:column;border:1px solid #ccc;width:100%;border-spacing:0}.table-row{display:flex;width:100%}.list-name{width:15%;cursor:pointer}.list-items{width:85%}.kv-key,.kv-value,.list-name{padding:8px;border:1px solid #ccc;box-sizing:border-box;word-wrap:break-word}.kv-key{width:20%}.kv-value{width:80%}.kv-value .data-value{white-space:pre-line}.kv-object,.list-object{display:flex;flex:1}.list-object{flex-direction:column}.row-even{background-color:#fff}.row-odd{background-color:#f2f8fe}.row-error{background-color:#f08080}.table-row:not(:last-child){border-bottom:1px solid #ccc}.kv-key:last-child,.kv-value:last-child,.list-name:last-child{border-right:none}\n"], dependencies: [{ kind: "component", type: DebugMessageComponent, selector: "sq-debug-message", inputs: ["data", "level", "parentColor"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.JsonPipe, name: "json" }] });
32
+ DebugMessageComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: DebugMessageComponent, isStandalone: true, selector: "sq-debug-message", inputs: { data: "data", level: "level", parentColor: "parentColor" }, ngImport: i0, template: "<div *ngIf=\"data\" class=\"table-root\">\n <ng-container *ngFor=\"let item of data; let i = index\">\n <div *ngIf=\"item.type === 'KV'\" [ngClass]=\"getRowClass(item, i)\" class=\"table-row kv-object\">\n <div class=\"kv-key\">{{ item.data.key }}</div>\n <div class=\"kv-value\">\n <ng-container *ngIf=\"isObject(item.data.value); else normalValue\">\n <div class=\"card mb-2\">\n <div class=\"card-header\">\n <button class=\"btn btn-light btn-sm\" (click)=\"copyToClipboard(item.data.value)\"><i class=\"far fa-fw fa-clipboard\"></i> Copy code</button>\n </div>\n <pre class=\"language-json my-0 rounded-0 rounded-bottom\"><code class=\"language-json\">{{ item.data.value | json }}</code></pre>\n </div>\n </ng-container>\n <ng-template #normalValue><div class=\"data-value\">{{ item.data.value }}</div></ng-template>\n </div>\n </div>\n <div *ngIf=\"item.type === 'LIST'\" [ngClass]=\"getRowClass(item, i)\" class=\"table-row list-object\">\n <div class=\"list-name w-100\" [class.fw-bold]=\"level === 0\" (click)=\"item.expanded=!item.expanded\">\n <i class=\"fas\" [class.fa-chevron-up]=\"item.expanded\" [class.fa-chevron-down]=\"!item.expanded\"></i>\n {{ item.name }}\n </div>\n <div class=\"list-items w-100\" *ngIf=\"item.expanded\">\n <sq-debug-message [data]=\"item.items\" [level]=\"level + 1\" [parentColor]=\"getRowClass(item, i)\"></sq-debug-message>\n </div>\n </div>\n </ng-container>\n</div>\n", styles: [".table-root{display:flex;flex-direction:column;border:1px solid #ccc;width:100%;border-spacing:0}.table-row{display:flex;width:100%}.list-name{width:15%;cursor:pointer}.list-items{width:85%}.kv-key,.kv-value,.list-name{padding:8px;border:1px solid #ccc;box-sizing:border-box;word-wrap:break-word}.kv-key{width:20%}.kv-value{width:80%}.kv-value .data-value{white-space:pre-line}.kv-object,.list-object{display:flex;flex:1}.list-object{flex-direction:column}.row-even{background-color:#fff}.row-odd{background-color:#f2f8fe}.row-error{background-color:#f08080}.table-row:not(:last-child){border-bottom:1px solid #ccc}.kv-key:last-child,.kv-value:last-child,.list-name:last-child{border-right:none}\n"], dependencies: [{ kind: "component", type: DebugMessageComponent, selector: "sq-debug-message", inputs: ["data", "level", "parentColor"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.JsonPipe, name: "json" }] });
33
33
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DebugMessageComponent, decorators: [{
34
34
  type: Component,
35
- args: [{ selector: "sq-debug-message", standalone: true, imports: [CommonModule], template: "<div *ngIf=\"data\" class=\"table-root\">\r\n <ng-container *ngFor=\"let item of data; let i = index\">\r\n <div *ngIf=\"item.type === 'KV'\" [ngClass]=\"getRowClass(item, i)\" class=\"table-row kv-object\">\r\n <div class=\"kv-key\">{{ item.data.key }}</div>\r\n <div class=\"kv-value\">\r\n <ng-container *ngIf=\"isObject(item.data.value); else normalValue\">\r\n <div class=\"card mb-2\">\r\n <div class=\"card-header\">\r\n <button class=\"btn btn-light btn-sm\" (click)=\"copyToClipboard(item.data.value)\"><i class=\"far fa-fw fa-clipboard\"></i> Copy code</button>\r\n </div>\r\n <pre class=\"language-json my-0 rounded-0 rounded-bottom\"><code class=\"language-json\">{{ item.data.value | json }}</code></pre>\r\n </div>\r\n </ng-container>\r\n <ng-template #normalValue><div class=\"data-value\">{{ item.data.value }}</div></ng-template>\r\n </div>\r\n </div>\r\n <div *ngIf=\"item.type === 'LIST'\" [ngClass]=\"getRowClass(item, i)\" class=\"table-row list-object\">\r\n <div class=\"list-name w-100\" [class.fw-bold]=\"level === 0\" (click)=\"item.expanded=!item.expanded\">\r\n <i class=\"fas\" [class.fa-chevron-up]=\"item.expanded\" [class.fa-chevron-down]=\"!item.expanded\"></i>\r\n {{ item.name }}\r\n </div>\r\n <div class=\"list-items w-100\" *ngIf=\"item.expanded\">\r\n <sq-debug-message [data]=\"item.items\" [level]=\"level + 1\" [parentColor]=\"getRowClass(item, i)\"></sq-debug-message>\r\n </div>\r\n </div>\r\n </ng-container>\r\n</div>\r\n", styles: [".table-root{display:flex;flex-direction:column;border:1px solid #ccc;width:100%;border-spacing:0}.table-row{display:flex;width:100%}.list-name{width:15%;cursor:pointer}.list-items{width:85%}.kv-key,.kv-value,.list-name{padding:8px;border:1px solid #ccc;box-sizing:border-box;word-wrap:break-word}.kv-key{width:20%}.kv-value{width:80%}.kv-value .data-value{white-space:pre-line}.kv-object,.list-object{display:flex;flex:1}.list-object{flex-direction:column}.row-even{background-color:#fff}.row-odd{background-color:#f2f8fe}.row-error{background-color:#f08080}.table-row:not(:last-child){border-bottom:1px solid #ccc}.kv-key:last-child,.kv-value:last-child,.list-name:last-child{border-right:none}\n"] }]
35
+ args: [{ selector: "sq-debug-message", standalone: true, imports: [CommonModule], template: "<div *ngIf=\"data\" class=\"table-root\">\n <ng-container *ngFor=\"let item of data; let i = index\">\n <div *ngIf=\"item.type === 'KV'\" [ngClass]=\"getRowClass(item, i)\" class=\"table-row kv-object\">\n <div class=\"kv-key\">{{ item.data.key }}</div>\n <div class=\"kv-value\">\n <ng-container *ngIf=\"isObject(item.data.value); else normalValue\">\n <div class=\"card mb-2\">\n <div class=\"card-header\">\n <button class=\"btn btn-light btn-sm\" (click)=\"copyToClipboard(item.data.value)\"><i class=\"far fa-fw fa-clipboard\"></i> Copy code</button>\n </div>\n <pre class=\"language-json my-0 rounded-0 rounded-bottom\"><code class=\"language-json\">{{ item.data.value | json }}</code></pre>\n </div>\n </ng-container>\n <ng-template #normalValue><div class=\"data-value\">{{ item.data.value }}</div></ng-template>\n </div>\n </div>\n <div *ngIf=\"item.type === 'LIST'\" [ngClass]=\"getRowClass(item, i)\" class=\"table-row list-object\">\n <div class=\"list-name w-100\" [class.fw-bold]=\"level === 0\" (click)=\"item.expanded=!item.expanded\">\n <i class=\"fas\" [class.fa-chevron-up]=\"item.expanded\" [class.fa-chevron-down]=\"!item.expanded\"></i>\n {{ item.name }}\n </div>\n <div class=\"list-items w-100\" *ngIf=\"item.expanded\">\n <sq-debug-message [data]=\"item.items\" [level]=\"level + 1\" [parentColor]=\"getRowClass(item, i)\"></sq-debug-message>\n </div>\n </div>\n </ng-container>\n</div>\n", styles: [".table-root{display:flex;flex-direction:column;border:1px solid #ccc;width:100%;border-spacing:0}.table-row{display:flex;width:100%}.list-name{width:15%;cursor:pointer}.list-items{width:85%}.kv-key,.kv-value,.list-name{padding:8px;border:1px solid #ccc;box-sizing:border-box;word-wrap:break-word}.kv-key{width:20%}.kv-value{width:80%}.kv-value .data-value{white-space:pre-line}.kv-object,.list-object{display:flex;flex:1}.list-object{flex-direction:column}.row-even{background-color:#fff}.row-odd{background-color:#f2f8fe}.row-error{background-color:#f08080}.table-row:not(:last-child){border-bottom:1px solid #ccc}.kv-key:last-child,.kv-value:last-child,.list-name:last-child{border-right:none}\n"] }]
36
36
  }], ctorParameters: function () { return [{ type: i1.UIService }]; }, propDecorators: { data: [{
37
37
  type: Input
38
38
  }], level: [{
@@ -40,4 +40,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
40
40
  }], parentColor: [{
41
41
  type: Input
42
42
  }] } });
43
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVidWctbWVzc2FnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc3Npc3RhbnQvY2hhdC9kZWJ1Zy1tZXNzYWdlL2RlYnVnLW1lc3NhZ2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNzaXN0YW50L2NoYXQvZGVidWctbWVzc2FnZS9kZWJ1Zy1tZXNzYWdlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQWtCLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzNDLE9BQU8sS0FBSyxLQUFLLE1BQU0sU0FBUyxDQUFDOzs7O0FBVWpDLE1BQU0sT0FBTyxxQkFBcUI7SUFLaEMsWUFBbUIsRUFBYTtRQUFiLE9BQUUsR0FBRixFQUFFLENBQVc7UUFIdkIsVUFBSyxHQUFXLENBQUMsQ0FBQyxDQUFFLDBCQUEwQjtRQUM5QyxnQkFBVyxHQUFXLEVBQUUsQ0FBQyxDQUFFLDZCQUE2QjtJQUU3QixDQUFDO0lBRXJDLGVBQWU7UUFDYixLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFVO1FBQ2pCLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsV0FBVyxDQUFDLElBQWtCLEVBQUUsS0FBYTtRQUMzQyxJQUFJLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTyxXQUFXLENBQUM7UUFDckMsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUM7WUFBRSxPQUFPLEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUN0RSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVELGVBQWUsQ0FBQyxJQUFTO1FBQ3ZCLElBQUksQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7O2tIQXZCVSxxQkFBcUI7c0dBQXJCLHFCQUFxQixrSkNkbEMsd2xEQTJCQSxtdkJEYmEscUJBQXFCLHNHQUZ0QixZQUFZOzJGQUVYLHFCQUFxQjtrQkFQakMsU0FBUzsrQkFDRSxrQkFBa0IsY0FHaEIsSUFBSSxXQUNQLENBQUMsWUFBWSxDQUFDO2dHQUdkLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuaW1wb3J0IHsgIEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgSW5wdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBEZWJ1Z01lc3NhZ2UgfSBmcm9tIFwiLi4vdHlwZXNcIjtcclxuaW1wb3J0IHsgVXRpbHMgfSBmcm9tIFwiQHNpbmVxdWEvY29yZS9iYXNlXCI7XHJcbmltcG9ydCAqIGFzIFByaXNtIGZyb20gJ3ByaXNtanMnO1xyXG5pbXBvcnQgeyBVSVNlcnZpY2UgfSBmcm9tIFwiQHNpbmVxdWEvY29tcG9uZW50cy91dGlsc1wiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwic3EtZGVidWctbWVzc2FnZVwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vZGVidWctbWVzc2FnZS5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsczogW1wiLi9kZWJ1Zy1tZXNzYWdlLmNvbXBvbmVudC5zY3NzXCJdLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIERlYnVnTWVzc2FnZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xyXG4gIEBJbnB1dCgpIGRhdGE6IERlYnVnTWVzc2FnZVtdIHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIGxldmVsOiBudW1iZXIgPSAwOyAgLy8gVHJhY2sgdGhlIG5lc3RpbmcgbGV2ZWxcclxuICBASW5wdXQoKSBwYXJlbnRDb2xvcjogc3RyaW5nID0gJyc7ICAvLyBUcmFjayB0aGUgcGFyZW50IHJvdyBjb2xvclxyXG5cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdWk6IFVJU2VydmljZSkgeyB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIFByaXNtLmhpZ2hsaWdodEFsbCgpO1xyXG4gIH1cclxuXHJcbiAgaXNPYmplY3QodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIFV0aWxzLmlzT2JqZWN0KHZhbHVlKTtcclxuICB9XHJcblxyXG4gIGdldFJvd0NsYXNzKGl0ZW06IERlYnVnTWVzc2FnZSwgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBpZiAoaXRlbS5pc0Vycm9yKSByZXR1cm4gJ3Jvdy1lcnJvcic7XHJcbiAgICBpZiAodGhpcy5sZXZlbCA9PT0gMCkgcmV0dXJuIGluZGV4ICUgMiA9PT0gMCA/ICdyb3ctZXZlbicgOiAncm93LW9kZCc7XHJcbiAgICByZXR1cm4gdGhpcy5wYXJlbnRDb2xvcjtcclxuICB9XHJcblxyXG4gIGNvcHlUb0NsaXBib2FyZChjb2RlOiBhbnkpIHtcclxuICAgIHRoaXMudWkuY29weVRvQ2xpcGJvYXJkKEpTT04uc3RyaW5naWZ5KGNvZGUsIG51bGwsIDIpKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiAqbmdJZj1cImRhdGFcIiBjbGFzcz1cInRhYmxlLXJvb3RcIj5cclxuICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGRhdGE7IGxldCBpID0gaW5kZXhcIj5cclxuICAgIDxkaXYgKm5nSWY9XCJpdGVtLnR5cGUgPT09ICdLVidcIiBbbmdDbGFzc109XCJnZXRSb3dDbGFzcyhpdGVtLCBpKVwiIGNsYXNzPVwidGFibGUtcm93IGt2LW9iamVjdFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwia3Yta2V5XCI+e3sgaXRlbS5kYXRhLmtleSB9fTwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwia3YtdmFsdWVcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNPYmplY3QoaXRlbS5kYXRhLnZhbHVlKTsgZWxzZSBub3JtYWxWYWx1ZVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgbWItMlwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tc21cIiAoY2xpY2spPVwiY29weVRvQ2xpcGJvYXJkKGl0ZW0uZGF0YS52YWx1ZSlcIj48aSBjbGFzcz1cImZhciBmYS1mdyBmYS1jbGlwYm9hcmRcIj48L2k+IENvcHkgY29kZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPHByZSBjbGFzcz1cImxhbmd1YWdlLWpzb24gbXktMCByb3VuZGVkLTAgcm91bmRlZC1ib3R0b21cIj48Y29kZSBjbGFzcz1cImxhbmd1YWdlLWpzb25cIj57eyBpdGVtLmRhdGEudmFsdWUgfCBqc29uIH19PC9jb2RlPjwvcHJlPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNub3JtYWxWYWx1ZT48ZGl2IGNsYXNzPVwiZGF0YS12YWx1ZVwiPnt7IGl0ZW0uZGF0YS52YWx1ZSB9fTwvZGl2PjwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiaXRlbS50eXBlID09PSAnTElTVCdcIiBbbmdDbGFzc109XCJnZXRSb3dDbGFzcyhpdGVtLCBpKVwiIGNsYXNzPVwidGFibGUtcm93IGxpc3Qtb2JqZWN0XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LW5hbWUgdy0xMDBcIiBbY2xhc3MuZnctYm9sZF09XCJsZXZlbCA9PT0gMFwiIChjbGljayk9XCJpdGVtLmV4cGFuZGVkPSFpdGVtLmV4cGFuZGVkXCI+XHJcbiAgICAgICAgPGkgY2xhc3M9XCJmYXNcIiBbY2xhc3MuZmEtY2hldnJvbi11cF09XCJpdGVtLmV4cGFuZGVkXCIgW2NsYXNzLmZhLWNoZXZyb24tZG93bl09XCIhaXRlbS5leHBhbmRlZFwiPjwvaT5cclxuICAgICAgICB7eyBpdGVtLm5hbWUgfX1cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWl0ZW1zIHctMTAwXCIgKm5nSWY9XCJpdGVtLmV4cGFuZGVkXCI+XHJcbiAgICAgICAgPHNxLWRlYnVnLW1lc3NhZ2UgW2RhdGFdPVwiaXRlbS5pdGVtc1wiIFtsZXZlbF09XCJsZXZlbCArIDFcIiBbcGFyZW50Q29sb3JdPVwiZ2V0Um93Q2xhc3MoaXRlbSwgaSlcIj48L3NxLWRlYnVnLW1lc3NhZ2U+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbjwvZGl2PlxyXG4iXX0=
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVidWctbWVzc2FnZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc3Npc3RhbnQvY2hhdC9kZWJ1Zy1tZXNzYWdlL2RlYnVnLW1lc3NhZ2UuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNzaXN0YW50L2NoYXQvZGVidWctbWVzc2FnZS9kZWJ1Zy1tZXNzYWdlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQWtCLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzNDLE9BQU8sS0FBSyxLQUFLLE1BQU0sU0FBUyxDQUFDOzs7O0FBVWpDLE1BQU0sT0FBTyxxQkFBcUI7SUFLaEMsWUFBbUIsRUFBYTtRQUFiLE9BQUUsR0FBRixFQUFFLENBQVc7UUFIdkIsVUFBSyxHQUFXLENBQUMsQ0FBQyxDQUFFLDBCQUEwQjtRQUM5QyxnQkFBVyxHQUFXLEVBQUUsQ0FBQyxDQUFFLDZCQUE2QjtJQUU3QixDQUFDO0lBRXJDLGVBQWU7UUFDYixLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFVO1FBQ2pCLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsV0FBVyxDQUFDLElBQWtCLEVBQUUsS0FBYTtRQUMzQyxJQUFJLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTyxXQUFXLENBQUM7UUFDckMsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLENBQUM7WUFBRSxPQUFPLEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUN0RSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVELGVBQWUsQ0FBQyxJQUFTO1FBQ3ZCLElBQUksQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7O2tIQXZCVSxxQkFBcUI7c0dBQXJCLHFCQUFxQixrSkNkbEMsa2lEQTJCQSxtdkJEYmEscUJBQXFCLHNHQUZ0QixZQUFZOzJGQUVYLHFCQUFxQjtrQkFQakMsU0FBUzsrQkFDRSxrQkFBa0IsY0FHaEIsSUFBSSxXQUNQLENBQUMsWUFBWSxDQUFDO2dHQUdkLElBQUk7c0JBQVosS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7ICBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIElucHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IERlYnVnTWVzc2FnZSB9IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHsgVXRpbHMgfSBmcm9tIFwiQHNpbmVxdWEvY29yZS9iYXNlXCI7XG5pbXBvcnQgKiBhcyBQcmlzbSBmcm9tICdwcmlzbWpzJztcbmltcG9ydCB7IFVJU2VydmljZSB9IGZyb20gXCJAc2luZXF1YS9jb21wb25lbnRzL3V0aWxzXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJzcS1kZWJ1Zy1tZXNzYWdlXCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vZGVidWctbWVzc2FnZS5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vZGVidWctbWVzc2FnZS5jb21wb25lbnQuc2Nzc1wiXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgRGVidWdNZXNzYWdlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBJbnB1dCgpIGRhdGE6IERlYnVnTWVzc2FnZVtdIHwgdW5kZWZpbmVkO1xuICBASW5wdXQoKSBsZXZlbDogbnVtYmVyID0gMDsgIC8vIFRyYWNrIHRoZSBuZXN0aW5nIGxldmVsXG4gIEBJbnB1dCgpIHBhcmVudENvbG9yOiBzdHJpbmcgPSAnJzsgIC8vIFRyYWNrIHRoZSBwYXJlbnQgcm93IGNvbG9yXG5cbiAgY29uc3RydWN0b3IocHVibGljIHVpOiBVSVNlcnZpY2UpIHsgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBQcmlzbS5oaWdobGlnaHRBbGwoKTtcbiAgfVxuXG4gIGlzT2JqZWN0KHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gVXRpbHMuaXNPYmplY3QodmFsdWUpO1xuICB9XG5cbiAgZ2V0Um93Q2xhc3MoaXRlbTogRGVidWdNZXNzYWdlLCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAoaXRlbS5pc0Vycm9yKSByZXR1cm4gJ3Jvdy1lcnJvcic7XG4gICAgaWYgKHRoaXMubGV2ZWwgPT09IDApIHJldHVybiBpbmRleCAlIDIgPT09IDAgPyAncm93LWV2ZW4nIDogJ3Jvdy1vZGQnO1xuICAgIHJldHVybiB0aGlzLnBhcmVudENvbG9yO1xuICB9XG5cbiAgY29weVRvQ2xpcGJvYXJkKGNvZGU6IGFueSkge1xuICAgIHRoaXMudWkuY29weVRvQ2xpcGJvYXJkKEpTT04uc3RyaW5naWZ5KGNvZGUsIG51bGwsIDIpKTtcbiAgfVxufVxuIiwiPGRpdiAqbmdJZj1cImRhdGFcIiBjbGFzcz1cInRhYmxlLXJvb3RcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkYXRhOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgPGRpdiAqbmdJZj1cIml0ZW0udHlwZSA9PT0gJ0tWJ1wiIFtuZ0NsYXNzXT1cImdldFJvd0NsYXNzKGl0ZW0sIGkpXCIgY2xhc3M9XCJ0YWJsZS1yb3cga3Ytb2JqZWN0XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwia3Yta2V5XCI+e3sgaXRlbS5kYXRhLmtleSB9fTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImt2LXZhbHVlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc09iamVjdChpdGVtLmRhdGEudmFsdWUpOyBlbHNlIG5vcm1hbFZhbHVlXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgbWItMlwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbVwiIChjbGljayk9XCJjb3B5VG9DbGlwYm9hcmQoaXRlbS5kYXRhLnZhbHVlKVwiPjxpIGNsYXNzPVwiZmFyIGZhLWZ3IGZhLWNsaXBib2FyZFwiPjwvaT4gQ29weSBjb2RlPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxwcmUgY2xhc3M9XCJsYW5ndWFnZS1qc29uIG15LTAgcm91bmRlZC0wIHJvdW5kZWQtYm90dG9tXCI+PGNvZGUgY2xhc3M9XCJsYW5ndWFnZS1qc29uXCI+e3sgaXRlbS5kYXRhLnZhbHVlIHwganNvbiB9fTwvY29kZT48L3ByZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9ybWFsVmFsdWU+PGRpdiBjbGFzcz1cImRhdGEtdmFsdWVcIj57eyBpdGVtLmRhdGEudmFsdWUgfX08L2Rpdj48L25nLXRlbXBsYXRlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cIml0ZW0udHlwZSA9PT0gJ0xJU1QnXCIgW25nQ2xhc3NdPVwiZ2V0Um93Q2xhc3MoaXRlbSwgaSlcIiBjbGFzcz1cInRhYmxlLXJvdyBsaXN0LW9iamVjdFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImxpc3QtbmFtZSB3LTEwMFwiIFtjbGFzcy5mdy1ib2xkXT1cImxldmVsID09PSAwXCIgKGNsaWNrKT1cIml0ZW0uZXhwYW5kZWQ9IWl0ZW0uZXhwYW5kZWRcIj5cbiAgICAgICAgPGkgY2xhc3M9XCJmYXNcIiBbY2xhc3MuZmEtY2hldnJvbi11cF09XCJpdGVtLmV4cGFuZGVkXCIgW2NsYXNzLmZhLWNoZXZyb24tZG93bl09XCIhaXRlbS5leHBhbmRlZFwiPjwvaT5cbiAgICAgICAge3sgaXRlbS5uYW1lIH19XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWl0ZW1zIHctMTAwXCIgKm5nSWY9XCJpdGVtLmV4cGFuZGVkXCI+XG4gICAgICAgIDxzcS1kZWJ1Zy1tZXNzYWdlIFtkYXRhXT1cIml0ZW0uaXRlbXNcIiBbbGV2ZWxdPVwibGV2ZWwgKyAxXCIgW3BhcmVudENvbG9yXT1cImdldFJvd0NsYXNzKGl0ZW0sIGkpXCI+PC9zcS1kZWJ1Zy1tZXNzYWdlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG4iXX0=
@@ -181,11 +181,11 @@ export class DocumentListComponent extends AbstractFacet {
181
181
  }
182
182
  }
183
183
  DocumentListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DocumentListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
184
- DocumentListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: DocumentListComponent, isStandalone: true, selector: "sq-document-list", inputs: { instanceId: "instanceId" }, providers: [DocumentsUploadService], usesInheritance: true, ngImport: i0, template: "<div class=\"alert alert-danger\" *ngIf=\"deletingAll\">\r\n <span>You are about to delete all the documents. Do you want to continue ?</span>\r\n <div class=\"d-flex gap-2\">\r\n <button class=\"btn btn-light w-100\" (click)=\"deletingAll=false\">Cancel</button>\r\n <button class=\"btn btn-secondary w-100\" (click)=\"performDeleteAllDocuments()\">Confirm</button>\r\n </div>\r\n</div>\r\n\r\n<div *ngFor=\"let group of (groupedUploadedDocuments$ | async)\" class=\"uploaded-docs\">\r\n <span class=\"uploaded-docs-date\">{{group.key}}</span>\r\n <div *ngFor=\"let doc of group.value\">\r\n <div class=\"uploaded-doc p-2\">\r\n <sq-format-icon [extension]=\"doc.fileExt\" class=\"me-1\"></sq-format-icon>\r\n <span class=\"title me-1\" [sqTooltip]=\"doc.fileName\">{{doc.fileName}}</span>\r\n <i class=\"uploaded-doc-actions fas fa-trash ms-1\" [sqTooltip]=\"'Delete'\"\r\n (click)=\"deleteDocument($event, doc)\"></i> \r\n </div>\r\n\r\n <div class=\"alert alert-warning\" *ngIf=\"documentToDelete && documentToDelete.id === doc.id\">\r\n <span>You are about to delete the document {{documentToDelete!.fileName}}. Do you want to continue ?</span>\r\n <div class=\"d-flex gap-2\">\r\n <button class=\"btn btn-light w-100\" (click)=\"documentToDelete=undefined\">Cancel</button>\r\n <button class=\"btn btn-secondary w-100\" (click)=\"performDeleteDocument()\">Confirm</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}.uploaded-docs{padding:.3rem 1rem}.uploaded-docs-date{font-size:12px;font-weight:500;color:#a9a9a9;margin-top:.5rem}.uploaded-docs .uploaded-doc{display:flex;align-items:center;cursor:pointer;margin-left:.25rem}.uploaded-docs .uploaded-doc span{flex-grow:1;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.uploaded-docs .uploaded-doc .uploaded-doc-actions{display:none}.uploaded-docs .uploaded-doc .uploaded-doc-actions:hover{color:var(--ast-primary-color, #005DA7)}.uploaded-docs .uploaded-doc:hover{background-color:var(--ast-uploaded-doc-hover-background, #f2f8fe)}.uploaded-docs .uploaded-doc:hover .uploaded-doc-actions{display:block}.uploaded-docs .title{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "component", type: FormatIconComponent, selector: "sq-format-icon", inputs: ["extension"] }, { kind: "ngmodule", type: UtilsModule }, { kind: "directive", type: i2.TooltipDirective, selector: "[sqTooltip]", inputs: ["sqTooltip", "sqTooltipData", "sqTooltipTemplate", "placement", "fallbackPlacements", "delay", "hoverableTooltip", "tooltipClass"] }] });
184
+ DocumentListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: DocumentListComponent, isStandalone: true, selector: "sq-document-list", inputs: { instanceId: "instanceId" }, providers: [DocumentsUploadService], usesInheritance: true, ngImport: i0, template: "<div class=\"alert alert-danger\" *ngIf=\"deletingAll\">\n <span>You are about to delete all the documents. Do you want to continue ?</span>\n <div class=\"d-flex gap-2\">\n <button class=\"btn btn-light w-100\" (click)=\"deletingAll=false\">Cancel</button>\n <button class=\"btn btn-secondary w-100\" (click)=\"performDeleteAllDocuments()\">Confirm</button>\n </div>\n</div>\n\n<div *ngFor=\"let group of (groupedUploadedDocuments$ | async)\" class=\"uploaded-docs\">\n <span class=\"uploaded-docs-date\">{{group.key}}</span>\n <div *ngFor=\"let doc of group.value\">\n <div class=\"uploaded-doc p-2\">\n <sq-format-icon [extension]=\"doc.fileExt\" class=\"me-1\"></sq-format-icon>\n <span class=\"title me-1\" [sqTooltip]=\"doc.fileName\">{{doc.fileName}}</span>\n <i class=\"uploaded-doc-actions fas fa-trash ms-1\" [sqTooltip]=\"'Delete'\"\n (click)=\"deleteDocument($event, doc)\"></i> \n </div>\n\n <div class=\"alert alert-warning\" *ngIf=\"documentToDelete && documentToDelete.id === doc.id\">\n <span>You are about to delete the document {{documentToDelete!.fileName}}. Do you want to continue ?</span>\n <div class=\"d-flex gap-2\">\n <button class=\"btn btn-light w-100\" (click)=\"documentToDelete=undefined\">Cancel</button>\n <button class=\"btn btn-secondary w-100\" (click)=\"performDeleteDocument()\">Confirm</button>\n </div>\n </div>\n </div>\n</div>", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}.uploaded-docs{padding:.3rem 1rem}.uploaded-docs-date{font-size:12px;font-weight:500;color:#a9a9a9;margin-top:.5rem}.uploaded-docs .uploaded-doc{display:flex;align-items:center;cursor:pointer;margin-left:.25rem}.uploaded-docs .uploaded-doc span{flex-grow:1;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.uploaded-docs .uploaded-doc .uploaded-doc-actions{display:none}.uploaded-docs .uploaded-doc .uploaded-doc-actions:hover{color:var(--ast-primary-color, #005DA7)}.uploaded-docs .uploaded-doc:hover{background-color:var(--ast-uploaded-doc-hover-background, #f2f8fe)}.uploaded-docs .uploaded-doc:hover .uploaded-doc-actions{display:block}.uploaded-docs .title{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "component", type: FormatIconComponent, selector: "sq-format-icon", inputs: ["extension"] }, { kind: "ngmodule", type: UtilsModule }, { kind: "directive", type: i2.TooltipDirective, selector: "[sqTooltip]", inputs: ["sqTooltip", "sqTooltipData", "sqTooltipTemplate", "placement", "fallbackPlacements", "delay", "hoverableTooltip", "tooltipClass"] }] });
185
185
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DocumentListComponent, decorators: [{
186
186
  type: Component,
187
- args: [{ selector: "sq-document-list", standalone: true, providers: [DocumentsUploadService], imports: [CommonModule, FormatIconComponent, UtilsModule], template: "<div class=\"alert alert-danger\" *ngIf=\"deletingAll\">\r\n <span>You are about to delete all the documents. Do you want to continue ?</span>\r\n <div class=\"d-flex gap-2\">\r\n <button class=\"btn btn-light w-100\" (click)=\"deletingAll=false\">Cancel</button>\r\n <button class=\"btn btn-secondary w-100\" (click)=\"performDeleteAllDocuments()\">Confirm</button>\r\n </div>\r\n</div>\r\n\r\n<div *ngFor=\"let group of (groupedUploadedDocuments$ | async)\" class=\"uploaded-docs\">\r\n <span class=\"uploaded-docs-date\">{{group.key}}</span>\r\n <div *ngFor=\"let doc of group.value\">\r\n <div class=\"uploaded-doc p-2\">\r\n <sq-format-icon [extension]=\"doc.fileExt\" class=\"me-1\"></sq-format-icon>\r\n <span class=\"title me-1\" [sqTooltip]=\"doc.fileName\">{{doc.fileName}}</span>\r\n <i class=\"uploaded-doc-actions fas fa-trash ms-1\" [sqTooltip]=\"'Delete'\"\r\n (click)=\"deleteDocument($event, doc)\"></i> \r\n </div>\r\n\r\n <div class=\"alert alert-warning\" *ngIf=\"documentToDelete && documentToDelete.id === doc.id\">\r\n <span>You are about to delete the document {{documentToDelete!.fileName}}. Do you want to continue ?</span>\r\n <div class=\"d-flex gap-2\">\r\n <button class=\"btn btn-light w-100\" (click)=\"documentToDelete=undefined\">Cancel</button>\r\n <button class=\"btn btn-secondary w-100\" (click)=\"performDeleteDocument()\">Confirm</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}.uploaded-docs{padding:.3rem 1rem}.uploaded-docs-date{font-size:12px;font-weight:500;color:#a9a9a9;margin-top:.5rem}.uploaded-docs .uploaded-doc{display:flex;align-items:center;cursor:pointer;margin-left:.25rem}.uploaded-docs .uploaded-doc span{flex-grow:1;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.uploaded-docs .uploaded-doc .uploaded-doc-actions{display:none}.uploaded-docs .uploaded-doc .uploaded-doc-actions:hover{color:var(--ast-primary-color, #005DA7)}.uploaded-docs .uploaded-doc:hover{background-color:var(--ast-uploaded-doc-hover-background, #f2f8fe)}.uploaded-docs .uploaded-doc:hover .uploaded-doc-actions{display:block}.uploaded-docs .title{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"] }]
187
+ args: [{ selector: "sq-document-list", standalone: true, providers: [DocumentsUploadService], imports: [CommonModule, FormatIconComponent, UtilsModule], template: "<div class=\"alert alert-danger\" *ngIf=\"deletingAll\">\n <span>You are about to delete all the documents. Do you want to continue ?</span>\n <div class=\"d-flex gap-2\">\n <button class=\"btn btn-light w-100\" (click)=\"deletingAll=false\">Cancel</button>\n <button class=\"btn btn-secondary w-100\" (click)=\"performDeleteAllDocuments()\">Confirm</button>\n </div>\n</div>\n\n<div *ngFor=\"let group of (groupedUploadedDocuments$ | async)\" class=\"uploaded-docs\">\n <span class=\"uploaded-docs-date\">{{group.key}}</span>\n <div *ngFor=\"let doc of group.value\">\n <div class=\"uploaded-doc p-2\">\n <sq-format-icon [extension]=\"doc.fileExt\" class=\"me-1\"></sq-format-icon>\n <span class=\"title me-1\" [sqTooltip]=\"doc.fileName\">{{doc.fileName}}</span>\n <i class=\"uploaded-doc-actions fas fa-trash ms-1\" [sqTooltip]=\"'Delete'\"\n (click)=\"deleteDocument($event, doc)\"></i> \n </div>\n\n <div class=\"alert alert-warning\" *ngIf=\"documentToDelete && documentToDelete.id === doc.id\">\n <span>You are about to delete the document {{documentToDelete!.fileName}}. Do you want to continue ?</span>\n <div class=\"d-flex gap-2\">\n <button class=\"btn btn-light w-100\" (click)=\"documentToDelete=undefined\">Cancel</button>\n <button class=\"btn btn-secondary w-100\" (click)=\"performDeleteDocument()\">Confirm</button>\n </div>\n </div>\n </div>\n</div>", styles: [".ast-primary{color:var(--ast-primary-color, #005DA7);background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover{background-color:var(--ast-primary-bg, #f2f8fe)}.ast-primary-hover:hover{color:var(--ast-primary-color, #005DA7)}.ast-secondary{color:var(--ast-secondary-color, #FF732E);background-color:var(--ast-secondary-bg, #FFF8F1)}.ast-error{background-color:var(--ast-error-bg, rgba(249, 58, 55, .2));color:var(--ast-action-buttons-color, inherit)}.ast-error:hover{color:var(--ast-error-color, rgba(249, 58, 55, .7))}.ast-btn{border:0;text-align:left;padding-top:.5rem;padding-bottom:.5rem;display:flex;align-items:center}.dark{--ast-primary-bg: #0d0701;--ast-primary-color: #008cd1;--ast-secondary-bg: #00070e;--ast-secondary-color: #ffa258;--ast-input-bg: #070707;--ast-input-color: rgba(222, 218, 218, .75);--ast-muted-color: rgba(222, 218, 218, .75);--ast-saved-chat-hover-background: #262421;--ast-uploaded-doc-hover-background: #262421;--ast-message-table-border-color: #333333;--ast-message-table-tr-bg: #070707;--ast-message-table-tr-border-color: #222222;--ast-reference-icon-color: white;--ast-reference-icon-active-color: black;--ast-reference-passages-color: white;--ast-reference-expanded-hover-bg: #262421;--ast-message-reference-color: black;--ast-action-buttons-color: white;--ast-action-buttons-hover-color: #6dbee6;--ast-report-bg: #070707}.uploaded-docs{padding:.3rem 1rem}.uploaded-docs-date{font-size:12px;font-weight:500;color:#a9a9a9;margin-top:.5rem}.uploaded-docs .uploaded-doc{display:flex;align-items:center;cursor:pointer;margin-left:.25rem}.uploaded-docs .uploaded-doc span{flex-grow:1;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.uploaded-docs .uploaded-doc .uploaded-doc-actions{display:none}.uploaded-docs .uploaded-doc .uploaded-doc-actions:hover{color:var(--ast-primary-color, #005DA7)}.uploaded-docs .uploaded-doc:hover{background-color:var(--ast-uploaded-doc-hover-background, #f2f8fe)}.uploaded-docs .uploaded-doc:hover .uploaded-doc-actions{display:block}.uploaded-docs .title{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"] }]
188
188
  }], ctorParameters: function () { return []; }, propDecorators: { instanceId: [{
189
189
  type: Input
190
190
  }] } });
191
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc3Npc3RhbnQvY2hhdC9kb2N1bWVudHMtdXBsb2FkL2RvY3VtZW50LWxpc3QvZG9jdW1lbnQtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc3Npc3RhbnQvY2hhdC9kb2N1bWVudHMtdXBsb2FkL2RvY3VtZW50LWxpc3QvZG9jdW1lbnQtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUM1RSxPQUFPLEVBQ0wsZUFBZSxFQUNmLFVBQVUsRUFDVixLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixTQUFTLEVBQ1QsSUFBSSxFQUNKLEdBQUcsRUFDSixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ2xCLGlCQUFpQixFQUNqQixjQUFjLEVBQ2QsV0FBVyxFQUNYLGFBQWEsRUFDYixVQUFVLEVBQ1YsVUFBVSxFQUNWLE9BQU8sRUFDUCxXQUFXLEVBQ1gsTUFBTSxFQUNOLFFBQVEsRUFDUixNQUFNLEVBQ1AsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDMUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDRCQUE0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LFVBQVU7c0JBQWxCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgaW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge1xyXG4gIEJlaGF2aW9yU3ViamVjdCxcclxuICBjYXRjaEVycm9yLFxyXG4gIEVNUFRZLFxyXG4gIGZpbHRlcixcclxuICBTdWJzY3JpcHRpb24sXHJcbiAgc3dpdGNoTWFwLFxyXG4gIHRha2UsXHJcbiAgdGFwXHJcbn0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHtcclxuICBkaWZmZXJlbmNlSW5EYXlzLFxyXG4gIGRpZmZlcmVuY2VJbk1vbnRocyxcclxuICBkaWZmZXJlbmNlSW5ZZWFycyxcclxuICBlbmRPZlllc3RlcmRheSxcclxuICBpc1RoaXNNb250aCxcclxuICBpc1RoaXNRdWFydGVyLFxyXG4gIGlzVGhpc1dlZWssXHJcbiAgaXNUaGlzWWVhcixcclxuICBpc1RvZGF5LFxyXG4gIGlzWWVzdGVyZGF5LFxyXG4gIGZvcm1hdCxcclxuICBwYXJzZUlTTyxcclxuICB0b0RhdGVcclxufSBmcm9tIFwiZGF0ZS1mbnNcIjtcclxuaW1wb3J0IHsgTG9naW5TZXJ2aWNlIH0gZnJvbSBcIkBzaW5lcXVhL2NvcmUvbG9naW5cIjtcclxuaW1wb3J0IHsgTm90aWZpY2F0aW9uc1NlcnZpY2UgfSBmcm9tIFwiQHNpbmVxdWEvY29yZS9ub3RpZmljYXRpb25cIjtcclxuaW1wb3J0IHsgVXRpbHNNb2R1bGUgfSBmcm9tIFwiQHNpbmVxdWEvY29tcG9uZW50cy91dGlsc1wiO1xyXG5pbXBvcnQgeyBBYnN0cmFjdEZhY2V0IH0gZnJvbSBcIkBzaW5lcXVhL2NvbXBvbmVudHMvZmFjZXRcIjtcclxuaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSBcIkBzaW5lcXVhL2NvbXBvbmVudHMvYWN0aW9uXCI7XHJcbmltcG9ydCB7IEluc3RhbmNlTWFuYWdlclNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vaW5zdGFuY2UtbWFuYWdlci5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IENoYXRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NoYXQuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBEb2N1bWVudHNVcGxvYWRTZXJ2aWNlIH0gZnJvbSBcIi4uL2RvY3VtZW50cy11cGxvYWQuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBGb3JtYXRJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZm9ybWF0LWljb24vZm9ybWF0LWljb24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2hhdENvbmZpZyB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xyXG5pbXBvcnQgeyBVcGxvYWRlZERvY3VtZW50LCBVcGxvYWRlZERvY3VtZW50cyB9IGZyb20gXCIuLi9kb2N1bWVudHMtdXBsb2FkLm1vZGVsXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJzcS1kb2N1bWVudC1saXN0XCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9kb2N1bWVudC1saXN0LmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL2RvY3VtZW50LWxpc3QuY29tcG9uZW50LnNjc3NcIl0sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBwcm92aWRlcnM6IFtEb2N1bWVudHNVcGxvYWRTZXJ2aWNlXSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3JtYXRJY29uQ29tcG9uZW50LCBVdGlsc01vZHVsZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEb2N1bWVudExpc3RDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdEZhY2V0IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIC8qKiBEZWZpbmUgdGhlIGtleSBiYXNlZCBvbiBpdCwgdGhlIGFwcHJvcHJpYXRlIGNoYXRTZXJ2aWNlIGluc3RhbmNlIHdpbGwgYmUgcmV0dXJuZWQgZnJvbSBpbnN0YW5jZU1hbmFnZXJTZXJ2aWNlICovXHJcbiAgQElucHV0KCkgaW5zdGFuY2VJZDogc3RyaW5nO1xyXG5cclxuICBwdWJsaWMgY2hhdFNlcnZpY2U6IENoYXRTZXJ2aWNlO1xyXG4gIHB1YmxpYyBncm91cGVkVXBsb2FkZWREb2N1bWVudHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7IGtleTogc3RyaW5nOyB2YWx1ZTogVXBsb2FkZWREb2N1bWVudFtdfVtdPihbXSk7XHJcblxyXG4gIHB1YmxpYyBkb2N1bWVudFRvRGVsZXRlPzogVXBsb2FkZWREb2N1bWVudDtcclxuICBwdWJsaWMgZGVsZXRpbmdBbGw6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG4gIHByaXZhdGUgX2FjdGlvbnM6IEFjdGlvbltdID0gW107XHJcbiAgcHJpdmF0ZSBfdXBkYXRlRG9jdW1lbnRzTGlzdEFjdGlvbiA9IG5ldyBBY3Rpb24oe1xyXG4gICAgaWNvbjogJ2ZhcyBmYS1zeW5jJyxcclxuICAgIHRpdGxlOiBcIlJlZnJlc2hcIixcclxuICAgIGFjdGlvbjogKCkgPT4gdGhpcy51cGRhdGVVcGxvYWRlZERvY3VtZW50c0xpc3QoKVxyXG4gIH0pO1xyXG4gIHByaXZhdGUgX2RlbGV0ZUFsbERvY3VtZW50c0FjdGlvbiA9IG5ldyBBY3Rpb24oe1xyXG4gICAgaWNvbjogJ2ZhcyBmYS10cmFzaCcsXHJcbiAgICB0aXRsZTogXCJEZWxldGUgYWxsXCIsXHJcbiAgICBhY3Rpb246ICgpID0+IHRoaXMuZGVsZXRlQWxsRG9jdW1lbnRzKClcclxuICB9KTtcclxuXHJcbiAgcHVibGljIGxvZ2luU2VydmljZSA9IGluamVjdChMb2dpblNlcnZpY2UpO1xyXG4gIHB1YmxpYyBpbnN0YW5jZU1hbmFnZXJTZXJ2aWNlID0gaW5qZWN0KEluc3RhbmNlTWFuYWdlclNlcnZpY2UpO1xyXG4gIHB1YmxpYyBkb2N1bWVudHNVcGxvYWRTZXJ2aWNlID0gaW5qZWN0KERvY3VtZW50c1VwbG9hZFNlcnZpY2UpO1xyXG4gIHB1YmxpYyBub3RpZmljYXRpb25zU2VydmljZSA9IGluamVjdChOb3RpZmljYXRpb25zU2VydmljZSk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMuX2FjdGlvbnMgPSBbdGhpcy5fdXBkYXRlRG9jdW1lbnRzTGlzdEFjdGlvbiwgdGhpcy5fZGVsZXRlQWxsRG9jdW1lbnRzQWN0aW9uXTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgdGhpcy5sb2dpblNlcnZpY2UuZXZlbnRzXHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICBmaWx0ZXIoKGUpID0+IGUudHlwZSA9PT0gXCJsb2dpbi1jb21wbGV0ZVwiKSxcclxuICAgICAgICAgIHRhcCgoXykgPT4gdGhpcy5pbnN0YW50aWF0ZUNoYXRTZXJ2aWNlKCkpLFxyXG4gICAgICAgICAgc3dpdGNoTWFwKChfKSA9PiB0aGlzLmNoYXRTZXJ2aWNlLmFzc2lzdGFudENvbmZpZyQpLFxyXG4gICAgICAgICAgZmlsdGVyKChjb25maWc6IENoYXRDb25maWcgfCB1bmRlZmluZWQpID0+ICEhY29uZmlnKSxcclxuICAgICAgICAgIHRhcCgoXykgPT4gdGhpcy5kb2N1bWVudHNVcGxvYWRTZXJ2aWNlLmluaXQodGhpcy5jaGF0U2VydmljZSkpLFxyXG4gICAgICAgICAgdGFwKChfKSA9PiB0aGlzLnVwZGF0ZVVwbG9hZGVkRG9jdW1lbnRzTGlzdCgpKSxcclxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApXHJcbiAgICAgICAgLnN1YnNjcmliZSgpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIGdldCBhY3Rpb25zKCkgeyByZXR1cm4gdGhpcy5fYWN0aW9uczsgfVxyXG5cclxuICBpbnN0YW50aWF0ZUNoYXRTZXJ2aWNlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jaGF0U2VydmljZSA9IHRoaXMuaW5zdGFuY2VNYW5hZ2VyU2VydmljZS5nZXRJbnN0YW5jZSh0aGlzLmluc3RhbmNlSWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyB0aGUgbGlzdCBvZiB1cGxvYWRlZCBkb2N1bWVudHMgYnkgZmV0Y2hpbmcgdGhlIGxhdGVzdCBkYXRhIGZyb20gdGhlIHNlcnZpY2UuXHJcbiAgICogVGhlIGZldGNoZWQgZG9jdW1lbnRzIGFyZSBncm91cGVkIGJ5IGRhdGUuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgKi9cclxuICB1cGRhdGVVcGxvYWRlZERvY3VtZW50c0xpc3QoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxyXG4gICAgICB0aGlzLmRvY3VtZW50c1VwbG9hZFNlcnZpY2UuZ2V0RG9jdW1lbnRzTGlzdCgpXHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICB0YXAoKHVwbG9hZGVkRG9jdW1lbnRzOiBVcGxvYWRlZERvY3VtZW50cykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmdyb3VwZWRVcGxvYWRlZERvY3VtZW50cyQubmV4dCh0aGlzLl9ncm91cFVwbG9hZGVkRG9jdW1lbnRzQnlEYXRlKHVwbG9hZGVkRG9jdW1lbnRzLmRvY3MpKVxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zU2VydmljZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgIHJldHVybiBFTVBUWTtcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgdGFrZSgxKVxyXG4gICAgICAgIClcclxuICAgICAgICAuc3Vic2NyaWJlKClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVEb2N1bWVudChldmVudDogRXZlbnQsIGRvYzogVXBsb2FkZWREb2N1bWVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLmRvY3VtZW50VG9EZWxldGUgPSBkb2M7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIHRoZSBkZWxldGlvbiBvZiBhbiB1cGxvYWRlZCBkb2N1bWVudC4gVGhpcyBtZXRob2QgdHJpZ2dlcnMgYSBjb25maXJtYXRpb24gbW9kYWxcclxuICAgKiB0byBlbnN1cmUgdGhlIHVzZXIgd2FudHMgdG8gcHJvY2VlZCB3aXRoIHRoZSBkZWxldGlvbi4gSWYgY29uZmlybWVkLCBpdCBzZW5kcyBhIHJlcXVlc3RcclxuICAgKiB0byBkZWxldGUgdGhlIGRvY3VtZW50IGFuZCBwcm92aWRlcyBmZWVkYmFjayB0byB0aGUgdXNlciB1cG9uIHN1Y2Nlc3Mgb3IgZmFpbHVyZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBldmVudCAtIFRoZSBldmVudCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZWxldGUgYWN0aW9uLCB1c2VkIHRvIHN0b3AgcHJvcGFnYXRpb24uXHJcbiAgICogQHBhcmFtIGRvYyAtIFRoZSBkb2N1bWVudCB0byBiZSBkZWxldGVkLCByZXByZXNlbnRlZCBhcyBhbiBpbnN0YW5jZSBvZiBgVXBsb2FkZWREb2N1bWVudGAuXHJcbiAgICpcclxuICAgKiBAcmVtYXJrc1xyXG4gICAqIC0gRGlzcGxheXMgYSBjb25maXJtYXRpb24gbW9kYWwgd2l0aCBhIHdhcm5pbmcgbWVzc2FnZS5cclxuICAgKiAtIE9uIGNvbmZpcm1hdGlvbiwgZGVsZXRlcyB0aGUgZG9jdW1lbnQuXHJcbiAgICogLSBTaG93cyBhIHN1Y2Nlc3Mgbm90aWZpY2F0aW9uIHVwb24gc3VjY2Vzc2Z1bCBkZWxldGlvbi5cclxuICAgKiAtIExvZ3MgYW5kIG5vdGlmaWVzIHRoZSB1c2VyIG9mIGFueSBlcnJvcnMgZW5jb3VudGVyZWQgZHVyaW5nIHRoZSBkZWxldGlvbiBwcm9jZXNzLlxyXG4gICAqL1xyXG4gIHBlcmZvcm1EZWxldGVEb2N1bWVudCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXHJcbiAgICAgIHRoaXMuZG9jdW1lbnRzVXBsb2FkU2VydmljZS5kZWxldGVEb2N1bWVudHMoW3RoaXMuZG9jdW1lbnRUb0RlbGV0ZSEuaWRdKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zU2VydmljZS5zdWNjZXNzKGBUaGUgZG9jdW1lbnQgXCIke3RoaXMuZG9jdW1lbnRUb0RlbGV0ZSEuZmlsZU5hbWV9XCIgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGRlbGV0ZWQuYCk7XHJcbiAgICAgICAgICB0aGlzLmRvY3VtZW50VG9EZWxldGUgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZVVwbG9hZGVkRG9jdW1lbnRzTGlzdCgpO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uc1NlcnZpY2UuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgcmV0dXJuIEVNUFRZO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHRha2UoMSlcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKClcclxuICAgICk7XHJcblxyXG4gIH1cclxuXHJcbiAgZGVsZXRlQWxsRG9jdW1lbnRzKGV2ZW50PzogRXZlbnQpOiB2b2lkIHtcclxuICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMuZGVsZXRpbmdBbGwgPSB0cnVlOyBcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhhbmRsZXMgdGhlIGRlbGV0aW9uIG9mIGFsbCB1cGxvYWRlZCBkb2N1bWVudHMuIFRoaXMgbWV0aG9kIHRyaWdnZXJzIGEgY29uZmlybWF0aW9uIG1vZGFsXHJcbiAgICogdG8gZW5zdXJlIHRoZSB1c2VyIHdhbnRzIHRvIHByb2NlZWQgd2l0aCB0aGUgZGVsZXRpb24uIElmIGNvbmZpcm1lZCwgaXQgc2VuZHMgYSByZXF1ZXN0XHJcbiAgICogdG8gZGVsZXRlIHRoZSB3aG9sZSBsaXN0IG9mIGRvY3VtZW50cyBhbmQgcHJvdmlkZXMgZmVlZGJhY2sgdG8gdGhlIHVzZXIgdXBvbiBzdWNjZXNzIG9yIGZhaWx1cmUuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gZXZlbnQgLSAoT3B0aW9uYWwpIFRoZSBldmVudCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZWxldGUgYWN0aW9uLCB1c2VkIHRvIHN0b3AgcHJvcGFnYXRpb24uXHJcbiAgICpcclxuICAgKiBAcmVtYXJrc1xyXG4gICAqIC0gRGlzcGxheXMgYSBjb25maXJtYXRpb24gbW9kYWwgd2l0aCBhIHdhcm5pbmcgbWVzc2FnZS5cclxuICAgKiAtIE9uIGNvbmZpcm1hdGlvbiwgZGVsZXRlcyBhbGwgZG9jdW1lbnRzLlxyXG4gICAqIC0gU2hvd3MgYSBzdWNjZXNzIG5vdGlmaWNhdGlvbiB1cG9uIHN1Y2Nlc3NmdWwgZGVsZXRpb24uXHJcbiAgICogLSBMb2dzIGFuZCBub3RpZmllcyB0aGUgdXNlciBvZiBhbnkgZXJyb3JzIGVuY291bnRlcmVkIGR1cmluZyB0aGUgZGVsZXRpb24gcHJvY2Vzcy5cclxuICAgKi9cclxuICBwZXJmb3JtRGVsZXRlQWxsRG9jdW1lbnRzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgdGhpcy5kb2N1bWVudHNVcGxvYWRTZXJ2aWNlLmRlbGV0ZUFsbERvY3VtZW50cygpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmRlbGV0aW5nQWxsID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLnN1Y2Nlc3MoYEFsbCBkb2N1bWVudHMgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSBkZWxldGVkLmApO1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVVcGxvYWRlZERvY3VtZW50c0xpc3QoKTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgIHJldHVybiBFTVBUWTtcclxuICAgICAgICB9KSxcclxuICAgICAgICB0YWtlKDEpXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ3JvdXBVcGxvYWRlZERvY3VtZW50c0J5RGF0ZShkb2NzOiBVcGxvYWRlZERvY3VtZW50W10pOiB7IGtleTogc3RyaW5nOyB2YWx1ZTogVXBsb2FkZWREb2N1bWVudFtdIH1bXSB7XHJcbiAgICBjb25zdCBncm91cGVkVXBsb2FkZWREb2N1bWVudHMgPSBuZXcgTWFwPHN0cmluZywgVXBsb2FkZWREb2N1bWVudFtdPigpO1xyXG5cclxuICAgIGRvY3NcclxuICAgICAgLnNvcnQoKGEsIGIpID0+IHBhcnNlSVNPKGIuaW5kZXhhdGlvblRpbWUpLmdldFRpbWUoKSAtIHBhcnNlSVNPKGEuaW5kZXhhdGlvblRpbWUpLmdldFRpbWUoKSlcclxuICAgICAgLmZvckVhY2goZG9jID0+IHtcclxuICAgICAgICAgIGNvbnN0IGdyb3VwS2V5ID0gdGhpcy5fZ2V0VGltZUtleSh0b0RhdGUocGFyc2VJU08oZG9jLmluZGV4YXRpb25UaW1lKSkpOyAvLyBNdXN0IGNvbnZlcnQgdGhlIFVUQyBkYXRlIHRvIGxvY2FsIGRhdGUgYmVmb3JlIHBhc3NpbmcgdG8gX2dldFRpbWVLZXlcclxuXHJcbiAgICAgICAgICBpZiAoIWdyb3VwZWRVcGxvYWRlZERvY3VtZW50cy5oYXMoZ3JvdXBLZXkpKSB7XHJcbiAgICAgICAgICAgIGdyb3VwZWRVcGxvYWRlZERvY3VtZW50cy5zZXQoZ3JvdXBLZXksIFtdKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBncm91cGVkVXBsb2FkZWREb2N1bWVudHMuZ2V0KGdyb3VwS2V5KSEucHVzaChkb2MpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gQXJyYXkuZnJvbShncm91cGVkVXBsb2FkZWREb2N1bWVudHMsIChba2V5LCB2YWx1ZV0pID0+ICh7IGtleSwgdmFsdWUgfSkpOztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldFRpbWVLZXkoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XHJcbiAgICBpZiAoaXNUb2RheShkYXRlKSkge1xyXG4gICAgICAgIHJldHVybiAnVG9kYXknO1xyXG4gICAgfSBlbHNlIGlmIChpc1llc3RlcmRheShkYXRlKSkge1xyXG4gICAgICAgIHJldHVybiAnWWVzdGVyZGF5JztcclxuICAgIH0gZWxzZSBpZiAoaXNUaGlzV2VlayhkYXRlKSkge1xyXG4gICAgICAgIHJldHVybiAnVGhpcyB3ZWVrJztcclxuICAgIH0gZWxzZSBpZiAoZGlmZmVyZW5jZUluRGF5cyhlbmRPZlllc3RlcmRheSgpLCBkYXRlKSA8PSA3KSB7XHJcbiAgICAgIHJldHVybiAnTGFzdCB3ZWVrJztcclxuICAgIH0gZWxzZSBpZiAoaXNUaGlzTW9udGgoZGF0ZSkpIHtcclxuICAgICAgICByZXR1cm4gJ1RoaXMgbW9udGgnO1xyXG4gICAgfSBlbHNlIGlmIChkaWZmZXJlbmNlSW5Nb250aHMoZW5kT2ZZZXN0ZXJkYXkoKSwgZGF0ZSkgPD0gMSkge1xyXG4gICAgICByZXR1cm4gJ0xhc3QgbW9udGgnO1xyXG4gICAgfSBlbHNlIGlmIChpc1RoaXNRdWFydGVyKGRhdGUpKSB7XHJcbiAgICAgICAgcmV0dXJuICdUaGlzIHF1YXJ0ZXInO1xyXG4gICAgfSBlbHNlIGlmIChkaWZmZXJlbmNlSW5Nb250aHMoZW5kT2ZZZXN0ZXJkYXkoKSwgZGF0ZSkgPD0gMykge1xyXG4gICAgICAgIHJldHVybiAnTGFzdCBxdWFydGVyJztcclxuICAgIH0gZWxzZSBpZiAoaXNUaGlzWWVhcihkYXRlKSkge1xyXG4gICAgICAgIHJldHVybiAnVGhpcyB5ZWFyJztcclxuICAgIH0gZWxzZSBpZiAoZGlmZmVyZW5jZUluWWVhcnMoZW5kT2ZZZXN0ZXJkYXkoKSwgZGF0ZSkgPT09IDEpIHtcclxuICAgICAgICByZXR1cm4gJ0xhc3QgeWVhcic7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBmb3JtYXQoZGF0ZSwgJ3l5eXknKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlclwiICpuZ0lmPVwiZGVsZXRpbmdBbGxcIj5cclxuICA8c3Bhbj5Zb3UgYXJlIGFib3V0IHRvIGRlbGV0ZSBhbGwgdGhlIGRvY3VtZW50cy4gRG8geW91IHdhbnQgdG8gY29udGludWUgPzwvc3Bhbj5cclxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yXCI+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1saWdodCB3LTEwMFwiIChjbGljayk9XCJkZWxldGluZ0FsbD1mYWxzZVwiPkNhbmNlbDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5IHctMTAwXCIgKGNsaWNrKT1cInBlcmZvcm1EZWxldGVBbGxEb2N1bWVudHMoKVwiPkNvbmZpcm08L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48ZGl2ICpuZ0Zvcj1cImxldCBncm91cCBvZiAoZ3JvdXBlZFVwbG9hZGVkRG9jdW1lbnRzJCB8IGFzeW5jKVwiIGNsYXNzPVwidXBsb2FkZWQtZG9jc1wiPlxyXG4gIDxzcGFuIGNsYXNzPVwidXBsb2FkZWQtZG9jcy1kYXRlXCI+e3tncm91cC5rZXl9fTwvc3Bhbj5cclxuICA8ZGl2ICpuZ0Zvcj1cImxldCBkb2Mgb2YgZ3JvdXAudmFsdWVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWRlZC1kb2MgcC0yXCI+XHJcbiAgICAgIDxzcS1mb3JtYXQtaWNvbiBbZXh0ZW5zaW9uXT1cImRvYy5maWxlRXh0XCIgY2xhc3M9XCJtZS0xXCI+PC9zcS1mb3JtYXQtaWNvbj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJ0aXRsZSBtZS0xXCIgW3NxVG9vbHRpcF09XCJkb2MuZmlsZU5hbWVcIj57e2RvYy5maWxlTmFtZX19PC9zcGFuPlxyXG4gICAgICA8aSBjbGFzcz1cInVwbG9hZGVkLWRvYy1hY3Rpb25zIGZhcyBmYS10cmFzaCBtcy0xXCIgW3NxVG9vbHRpcF09XCInRGVsZXRlJ1wiXHJcbiAgICAgICAgKGNsaWNrKT1cImRlbGV0ZURvY3VtZW50KCRldmVudCwgZG9jKVwiPjwvaT4gIFxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LXdhcm5pbmdcIiAqbmdJZj1cImRvY3VtZW50VG9EZWxldGUgJiYgZG9jdW1lbnRUb0RlbGV0ZS5pZCA9PT0gZG9jLmlkXCI+XHJcbiAgICAgIDxzcGFuPllvdSBhcmUgYWJvdXQgdG8gZGVsZXRlIHRoZSBkb2N1bWVudCB7e2RvY3VtZW50VG9EZWxldGUhLmZpbGVOYW1lfX0uIERvIHlvdSB3YW50IHRvIGNvbnRpbnVlID88L3NwYW4+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTJcIj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1saWdodCB3LTEwMFwiIChjbGljayk9XCJkb2N1bWVudFRvRGVsZXRlPXVuZGVmaW5lZFwiPkNhbmNlbDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSB3LTEwMFwiIChjbGljayk9XCJwZXJmb3JtRGVsZXRlRG9jdW1lbnQoKVwiPkNvbmZpcm08L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+Il19
191
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc3Npc3RhbnQvY2hhdC9kb2N1bWVudHMtdXBsb2FkL2RvY3VtZW50LWxpc3QvZG9jdW1lbnQtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc3Npc3RhbnQvY2hhdC9kb2N1bWVudHMtdXBsb2FkL2RvY3VtZW50LWxpc3QvZG9jdW1lbnQtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUM1RSxPQUFPLEVBQ0wsZUFBZSxFQUNmLFVBQVUsRUFDVixLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixTQUFTLEVBQ1QsSUFBSSxFQUNKLEdBQUcsRUFDSixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ2xCLGlCQUFpQixFQUNqQixjQUFjLEVBQ2QsV0FBVyxFQUNYLGFBQWEsRUFDYixVQUFVLEVBQ1YsVUFBVSxFQUNWLE9BQU8sRUFDUCxXQUFXLEVBQ1gsTUFBTSxFQUNOLFFBQVEsRUFDUixNQUFNLEVBQ1AsTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDMUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDRCQUE0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LFVBQVU7c0JBQWxCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY2F0Y2hFcnJvcixcbiAgRU1QVFksXG4gIGZpbHRlcixcbiAgU3Vic2NyaXB0aW9uLFxuICBzd2l0Y2hNYXAsXG4gIHRha2UsXG4gIHRhcFxufSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHtcbiAgZGlmZmVyZW5jZUluRGF5cyxcbiAgZGlmZmVyZW5jZUluTW9udGhzLFxuICBkaWZmZXJlbmNlSW5ZZWFycyxcbiAgZW5kT2ZZZXN0ZXJkYXksXG4gIGlzVGhpc01vbnRoLFxuICBpc1RoaXNRdWFydGVyLFxuICBpc1RoaXNXZWVrLFxuICBpc1RoaXNZZWFyLFxuICBpc1RvZGF5LFxuICBpc1llc3RlcmRheSxcbiAgZm9ybWF0LFxuICBwYXJzZUlTTyxcbiAgdG9EYXRlXG59IGZyb20gXCJkYXRlLWZuc1wiO1xuaW1wb3J0IHsgTG9naW5TZXJ2aWNlIH0gZnJvbSBcIkBzaW5lcXVhL2NvcmUvbG9naW5cIjtcbmltcG9ydCB7IE5vdGlmaWNhdGlvbnNTZXJ2aWNlIH0gZnJvbSBcIkBzaW5lcXVhL2NvcmUvbm90aWZpY2F0aW9uXCI7XG5pbXBvcnQgeyBVdGlsc01vZHVsZSB9IGZyb20gXCJAc2luZXF1YS9jb21wb25lbnRzL3V0aWxzXCI7XG5pbXBvcnQgeyBBYnN0cmFjdEZhY2V0IH0gZnJvbSBcIkBzaW5lcXVhL2NvbXBvbmVudHMvZmFjZXRcIjtcbmltcG9ydCB7IEFjdGlvbiB9IGZyb20gXCJAc2luZXF1YS9jb21wb25lbnRzL2FjdGlvblwiO1xuaW1wb3J0IHsgSW5zdGFuY2VNYW5hZ2VyU2VydmljZSB9IGZyb20gXCIuLi8uLi9pbnN0YW5jZS1tYW5hZ2VyLnNlcnZpY2VcIjtcbmltcG9ydCB7IENoYXRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NoYXQuc2VydmljZVwiO1xuaW1wb3J0IHsgRG9jdW1lbnRzVXBsb2FkU2VydmljZSB9IGZyb20gXCIuLi9kb2N1bWVudHMtdXBsb2FkLnNlcnZpY2VcIjtcbmltcG9ydCB7IEZvcm1hdEljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9mb3JtYXQtaWNvbi9mb3JtYXQtaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2hhdENvbmZpZyB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuaW1wb3J0IHsgVXBsb2FkZWREb2N1bWVudCwgVXBsb2FkZWREb2N1bWVudHMgfSBmcm9tIFwiLi4vZG9jdW1lbnRzLXVwbG9hZC5tb2RlbFwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwic3EtZG9jdW1lbnQtbGlzdFwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL2RvY3VtZW50LWxpc3QuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL2RvY3VtZW50LWxpc3QuY29tcG9uZW50LnNjc3NcIl0sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHByb3ZpZGVyczogW0RvY3VtZW50c1VwbG9hZFNlcnZpY2VdLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3JtYXRJY29uQ29tcG9uZW50LCBVdGlsc01vZHVsZV0sXG59KVxuZXhwb3J0IGNsYXNzIERvY3VtZW50TGlzdENvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0RmFjZXQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8qKiBEZWZpbmUgdGhlIGtleSBiYXNlZCBvbiBpdCwgdGhlIGFwcHJvcHJpYXRlIGNoYXRTZXJ2aWNlIGluc3RhbmNlIHdpbGwgYmUgcmV0dXJuZWQgZnJvbSBpbnN0YW5jZU1hbmFnZXJTZXJ2aWNlICovXG4gIEBJbnB1dCgpIGluc3RhbmNlSWQ6IHN0cmluZztcblxuICBwdWJsaWMgY2hhdFNlcnZpY2U6IENoYXRTZXJ2aWNlO1xuICBwdWJsaWMgZ3JvdXBlZFVwbG9hZGVkRG9jdW1lbnRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8eyBrZXk6IHN0cmluZzsgdmFsdWU6IFVwbG9hZGVkRG9jdW1lbnRbXX1bXT4oW10pO1xuXG4gIHB1YmxpYyBkb2N1bWVudFRvRGVsZXRlPzogVXBsb2FkZWREb2N1bWVudDtcbiAgcHVibGljIGRlbGV0aW5nQWxsOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIF9hY3Rpb25zOiBBY3Rpb25bXSA9IFtdO1xuICBwcml2YXRlIF91cGRhdGVEb2N1bWVudHNMaXN0QWN0aW9uID0gbmV3IEFjdGlvbih7XG4gICAgaWNvbjogJ2ZhcyBmYS1zeW5jJyxcbiAgICB0aXRsZTogXCJSZWZyZXNoXCIsXG4gICAgYWN0aW9uOiAoKSA9PiB0aGlzLnVwZGF0ZVVwbG9hZGVkRG9jdW1lbnRzTGlzdCgpXG4gIH0pO1xuICBwcml2YXRlIF9kZWxldGVBbGxEb2N1bWVudHNBY3Rpb24gPSBuZXcgQWN0aW9uKHtcbiAgICBpY29uOiAnZmFzIGZhLXRyYXNoJyxcbiAgICB0aXRsZTogXCJEZWxldGUgYWxsXCIsXG4gICAgYWN0aW9uOiAoKSA9PiB0aGlzLmRlbGV0ZUFsbERvY3VtZW50cygpXG4gIH0pO1xuXG4gIHB1YmxpYyBsb2dpblNlcnZpY2UgPSBpbmplY3QoTG9naW5TZXJ2aWNlKTtcbiAgcHVibGljIGluc3RhbmNlTWFuYWdlclNlcnZpY2UgPSBpbmplY3QoSW5zdGFuY2VNYW5hZ2VyU2VydmljZSk7XG4gIHB1YmxpYyBkb2N1bWVudHNVcGxvYWRTZXJ2aWNlID0gaW5qZWN0KERvY3VtZW50c1VwbG9hZFNlcnZpY2UpO1xuICBwdWJsaWMgbm90aWZpY2F0aW9uc1NlcnZpY2UgPSBpbmplY3QoTm90aWZpY2F0aW9uc1NlcnZpY2UpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fYWN0aW9ucyA9IFt0aGlzLl91cGRhdGVEb2N1bWVudHNMaXN0QWN0aW9uLCB0aGlzLl9kZWxldGVBbGxEb2N1bWVudHNBY3Rpb25dO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMubG9naW5TZXJ2aWNlLmV2ZW50c1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKGUpID0+IGUudHlwZSA9PT0gXCJsb2dpbi1jb21wbGV0ZVwiKSxcbiAgICAgICAgICB0YXAoKF8pID0+IHRoaXMuaW5zdGFudGlhdGVDaGF0U2VydmljZSgpKSxcbiAgICAgICAgICBzd2l0Y2hNYXAoKF8pID0+IHRoaXMuY2hhdFNlcnZpY2UuYXNzaXN0YW50Q29uZmlnJCksXG4gICAgICAgICAgZmlsdGVyKChjb25maWc6IENoYXRDb25maWcgfCB1bmRlZmluZWQpID0+ICEhY29uZmlnKSxcbiAgICAgICAgICB0YXAoKF8pID0+IHRoaXMuZG9jdW1lbnRzVXBsb2FkU2VydmljZS5pbml0KHRoaXMuY2hhdFNlcnZpY2UpKSxcbiAgICAgICAgICB0YXAoKF8pID0+IHRoaXMudXBkYXRlVXBsb2FkZWREb2N1bWVudHNMaXN0KCkpLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uc1NlcnZpY2UuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpXG4gICAgKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgb3ZlcnJpZGUgZ2V0IGFjdGlvbnMoKSB7IHJldHVybiB0aGlzLl9hY3Rpb25zOyB9XG5cbiAgaW5zdGFudGlhdGVDaGF0U2VydmljZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNoYXRTZXJ2aWNlID0gdGhpcy5pbnN0YW5jZU1hbmFnZXJTZXJ2aWNlLmdldEluc3RhbmNlKHRoaXMuaW5zdGFuY2VJZCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgbGlzdCBvZiB1cGxvYWRlZCBkb2N1bWVudHMgYnkgZmV0Y2hpbmcgdGhlIGxhdGVzdCBkYXRhIGZyb20gdGhlIHNlcnZpY2UuXG4gICAqIFRoZSBmZXRjaGVkIGRvY3VtZW50cyBhcmUgZ3JvdXBlZCBieSBkYXRlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIHVwZGF0ZVVwbG9hZGVkRG9jdW1lbnRzTGlzdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5kb2N1bWVudHNVcGxvYWRTZXJ2aWNlLmdldERvY3VtZW50c0xpc3QoKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YXAoKHVwbG9hZGVkRG9jdW1lbnRzOiBVcGxvYWRlZERvY3VtZW50cykgPT4ge1xuICAgICAgICAgICAgdGhpcy5ncm91cGVkVXBsb2FkZWREb2N1bWVudHMkLm5leHQodGhpcy5fZ3JvdXBVcGxvYWRlZERvY3VtZW50c0J5RGF0ZSh1cGxvYWRlZERvY3VtZW50cy5kb2NzKSlcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB0YWtlKDEpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpXG4gICAgKTtcbiAgfVxuXG4gIGRlbGV0ZURvY3VtZW50KGV2ZW50OiBFdmVudCwgZG9jOiBVcGxvYWRlZERvY3VtZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5kb2N1bWVudFRvRGVsZXRlID0gZG9jO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdGhlIGRlbGV0aW9uIG9mIGFuIHVwbG9hZGVkIGRvY3VtZW50LiBUaGlzIG1ldGhvZCB0cmlnZ2VycyBhIGNvbmZpcm1hdGlvbiBtb2RhbFxuICAgKiB0byBlbnN1cmUgdGhlIHVzZXIgd2FudHMgdG8gcHJvY2VlZCB3aXRoIHRoZSBkZWxldGlvbi4gSWYgY29uZmlybWVkLCBpdCBzZW5kcyBhIHJlcXVlc3RcbiAgICogdG8gZGVsZXRlIHRoZSBkb2N1bWVudCBhbmQgcHJvdmlkZXMgZmVlZGJhY2sgdG8gdGhlIHVzZXIgdXBvbiBzdWNjZXNzIG9yIGZhaWx1cmUuXG4gICAqXG4gICAqIEBwYXJhbSBldmVudCAtIFRoZSBldmVudCBvYmplY3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBkZWxldGUgYWN0aW9uLCB1c2VkIHRvIHN0b3AgcHJvcGFnYXRpb24uXG4gICAqIEBwYXJhbSBkb2MgLSBUaGUgZG9jdW1lbnQgdG8gYmUgZGVsZXRlZCwgcmVwcmVzZW50ZWQgYXMgYW4gaW5zdGFuY2Ugb2YgYFVwbG9hZGVkRG9jdW1lbnRgLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiAtIERpc3BsYXlzIGEgY29uZmlybWF0aW9uIG1vZGFsIHdpdGggYSB3YXJuaW5nIG1lc3NhZ2UuXG4gICAqIC0gT24gY29uZmlybWF0aW9uLCBkZWxldGVzIHRoZSBkb2N1bWVudC5cbiAgICogLSBTaG93cyBhIHN1Y2Nlc3Mgbm90aWZpY2F0aW9uIHVwb24gc3VjY2Vzc2Z1bCBkZWxldGlvbi5cbiAgICogLSBMb2dzIGFuZCBub3RpZmllcyB0aGUgdXNlciBvZiBhbnkgZXJyb3JzIGVuY291bnRlcmVkIGR1cmluZyB0aGUgZGVsZXRpb24gcHJvY2Vzcy5cbiAgICovXG4gIHBlcmZvcm1EZWxldGVEb2N1bWVudCgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5kb2N1bWVudHNVcGxvYWRTZXJ2aWNlLmRlbGV0ZURvY3VtZW50cyhbdGhpcy5kb2N1bWVudFRvRGVsZXRlIS5pZF0pXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLnN1Y2Nlc3MoYFRoZSBkb2N1bWVudCBcIiR7dGhpcy5kb2N1bWVudFRvRGVsZXRlIS5maWxlTmFtZX1cIiBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZGVsZXRlZC5gKTtcbiAgICAgICAgICB0aGlzLmRvY3VtZW50VG9EZWxldGUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgdGhpcy51cGRhdGVVcGxvYWRlZERvY3VtZW50c0xpc3QoKTtcbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zU2VydmljZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZSgxKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpXG4gICAgKTtcblxuICB9XG5cbiAgZGVsZXRlQWxsRG9jdW1lbnRzKGV2ZW50PzogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5kZWxldGluZ0FsbCA9IHRydWU7IFxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdGhlIGRlbGV0aW9uIG9mIGFsbCB1cGxvYWRlZCBkb2N1bWVudHMuIFRoaXMgbWV0aG9kIHRyaWdnZXJzIGEgY29uZmlybWF0aW9uIG1vZGFsXG4gICAqIHRvIGVuc3VyZSB0aGUgdXNlciB3YW50cyB0byBwcm9jZWVkIHdpdGggdGhlIGRlbGV0aW9uLiBJZiBjb25maXJtZWQsIGl0IHNlbmRzIGEgcmVxdWVzdFxuICAgKiB0byBkZWxldGUgdGhlIHdob2xlIGxpc3Qgb2YgZG9jdW1lbnRzIGFuZCBwcm92aWRlcyBmZWVkYmFjayB0byB0aGUgdXNlciB1cG9uIHN1Y2Nlc3Mgb3IgZmFpbHVyZS5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IC0gKE9wdGlvbmFsKSBUaGUgZXZlbnQgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGUgZGVsZXRlIGFjdGlvbiwgdXNlZCB0byBzdG9wIHByb3BhZ2F0aW9uLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiAtIERpc3BsYXlzIGEgY29uZmlybWF0aW9uIG1vZGFsIHdpdGggYSB3YXJuaW5nIG1lc3NhZ2UuXG4gICAqIC0gT24gY29uZmlybWF0aW9uLCBkZWxldGVzIGFsbCBkb2N1bWVudHMuXG4gICAqIC0gU2hvd3MgYSBzdWNjZXNzIG5vdGlmaWNhdGlvbiB1cG9uIHN1Y2Nlc3NmdWwgZGVsZXRpb24uXG4gICAqIC0gTG9ncyBhbmQgbm90aWZpZXMgdGhlIHVzZXIgb2YgYW55IGVycm9ycyBlbmNvdW50ZXJlZCBkdXJpbmcgdGhlIGRlbGV0aW9uIHByb2Nlc3MuXG4gICAqL1xuICBwZXJmb3JtRGVsZXRlQWxsRG9jdW1lbnRzKCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLmRvY3VtZW50c1VwbG9hZFNlcnZpY2UuZGVsZXRlQWxsRG9jdW1lbnRzKClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZGVsZXRpbmdBbGwgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnNTZXJ2aWNlLnN1Y2Nlc3MoYEFsbCBkb2N1bWVudHMgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSBkZWxldGVkLmApO1xuICAgICAgICAgIHRoaXMudXBkYXRlVXBsb2FkZWREb2N1bWVudHNMaXN0KCk7XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uc1NlcnZpY2UuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgIHJldHVybiBFTVBUWTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2UoMSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9ncm91cFVwbG9hZGVkRG9jdW1lbnRzQnlEYXRlKGRvY3M6IFVwbG9hZGVkRG9jdW1lbnRbXSk6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBVcGxvYWRlZERvY3VtZW50W10gfVtdIHtcbiAgICBjb25zdCBncm91cGVkVXBsb2FkZWREb2N1bWVudHMgPSBuZXcgTWFwPHN0cmluZywgVXBsb2FkZWREb2N1bWVudFtdPigpO1xuXG4gICAgZG9jc1xuICAgICAgLnNvcnQoKGEsIGIpID0+IHBhcnNlSVNPKGIuaW5kZXhhdGlvblRpbWUpLmdldFRpbWUoKSAtIHBhcnNlSVNPKGEuaW5kZXhhdGlvblRpbWUpLmdldFRpbWUoKSlcbiAgICAgIC5mb3JFYWNoKGRvYyA9PiB7XG4gICAgICAgICAgY29uc3QgZ3JvdXBLZXkgPSB0aGlzLl9nZXRUaW1lS2V5KHRvRGF0ZShwYXJzZUlTTyhkb2MuaW5kZXhhdGlvblRpbWUpKSk7IC8vIE11c3QgY29udmVydCB0aGUgVVRDIGRhdGUgdG8gbG9jYWwgZGF0ZSBiZWZvcmUgcGFzc2luZyB0byBfZ2V0VGltZUtleVxuXG4gICAgICAgICAgaWYgKCFncm91cGVkVXBsb2FkZWREb2N1bWVudHMuaGFzKGdyb3VwS2V5KSkge1xuICAgICAgICAgICAgZ3JvdXBlZFVwbG9hZGVkRG9jdW1lbnRzLnNldChncm91cEtleSwgW10pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGdyb3VwZWRVcGxvYWRlZERvY3VtZW50cy5nZXQoZ3JvdXBLZXkpIS5wdXNoKGRvYyk7XG4gICAgICB9KTtcblxuICAgIHJldHVybiBBcnJheS5mcm9tKGdyb3VwZWRVcGxvYWRlZERvY3VtZW50cywgKFtrZXksIHZhbHVlXSkgPT4gKHsga2V5LCB2YWx1ZSB9KSk7O1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0VGltZUtleShkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICBpZiAoaXNUb2RheShkYXRlKSkge1xuICAgICAgICByZXR1cm4gJ1RvZGF5JztcbiAgICB9IGVsc2UgaWYgKGlzWWVzdGVyZGF5KGRhdGUpKSB7XG4gICAgICAgIHJldHVybiAnWWVzdGVyZGF5JztcbiAgICB9IGVsc2UgaWYgKGlzVGhpc1dlZWsoZGF0ZSkpIHtcbiAgICAgICAgcmV0dXJuICdUaGlzIHdlZWsnO1xuICAgIH0gZWxzZSBpZiAoZGlmZmVyZW5jZUluRGF5cyhlbmRPZlllc3RlcmRheSgpLCBkYXRlKSA8PSA3KSB7XG4gICAgICByZXR1cm4gJ0xhc3Qgd2Vlayc7XG4gICAgfSBlbHNlIGlmIChpc1RoaXNNb250aChkYXRlKSkge1xuICAgICAgICByZXR1cm4gJ1RoaXMgbW9udGgnO1xuICAgIH0gZWxzZSBpZiAoZGlmZmVyZW5jZUluTW9udGhzKGVuZE9mWWVzdGVyZGF5KCksIGRhdGUpIDw9IDEpIHtcbiAgICAgIHJldHVybiAnTGFzdCBtb250aCc7XG4gICAgfSBlbHNlIGlmIChpc1RoaXNRdWFydGVyKGRhdGUpKSB7XG4gICAgICAgIHJldHVybiAnVGhpcyBxdWFydGVyJztcbiAgICB9IGVsc2UgaWYgKGRpZmZlcmVuY2VJbk1vbnRocyhlbmRPZlllc3RlcmRheSgpLCBkYXRlKSA8PSAzKSB7XG4gICAgICAgIHJldHVybiAnTGFzdCBxdWFydGVyJztcbiAgICB9IGVsc2UgaWYgKGlzVGhpc1llYXIoZGF0ZSkpIHtcbiAgICAgICAgcmV0dXJuICdUaGlzIHllYXInO1xuICAgIH0gZWxzZSBpZiAoZGlmZmVyZW5jZUluWWVhcnMoZW5kT2ZZZXN0ZXJkYXkoKSwgZGF0ZSkgPT09IDEpIHtcbiAgICAgICAgcmV0dXJuICdMYXN0IHllYXInO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmb3JtYXQoZGF0ZSwgJ3l5eXknKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXJcIiAqbmdJZj1cImRlbGV0aW5nQWxsXCI+XG4gIDxzcGFuPllvdSBhcmUgYWJvdXQgdG8gZGVsZXRlIGFsbCB0aGUgZG9jdW1lbnRzLiBEbyB5b3Ugd2FudCB0byBjb250aW51ZSA/PC9zcGFuPlxuICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yXCI+XG4gICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tbGlnaHQgdy0xMDBcIiAoY2xpY2spPVwiZGVsZXRpbmdBbGw9ZmFsc2VcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnkgdy0xMDBcIiAoY2xpY2spPVwicGVyZm9ybURlbGV0ZUFsbERvY3VtZW50cygpXCI+Q29uZmlybTwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48ZGl2ICpuZ0Zvcj1cImxldCBncm91cCBvZiAoZ3JvdXBlZFVwbG9hZGVkRG9jdW1lbnRzJCB8IGFzeW5jKVwiIGNsYXNzPVwidXBsb2FkZWQtZG9jc1wiPlxuICA8c3BhbiBjbGFzcz1cInVwbG9hZGVkLWRvY3MtZGF0ZVwiPnt7Z3JvdXAua2V5fX08L3NwYW4+XG4gIDxkaXYgKm5nRm9yPVwibGV0IGRvYyBvZiBncm91cC52YWx1ZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWRlZC1kb2MgcC0yXCI+XG4gICAgICA8c3EtZm9ybWF0LWljb24gW2V4dGVuc2lvbl09XCJkb2MuZmlsZUV4dFwiIGNsYXNzPVwibWUtMVwiPjwvc3EtZm9ybWF0LWljb24+XG4gICAgICA8c3BhbiBjbGFzcz1cInRpdGxlIG1lLTFcIiBbc3FUb29sdGlwXT1cImRvYy5maWxlTmFtZVwiPnt7ZG9jLmZpbGVOYW1lfX08L3NwYW4+XG4gICAgICA8aSBjbGFzcz1cInVwbG9hZGVkLWRvYy1hY3Rpb25zIGZhcyBmYS10cmFzaCBtcy0xXCIgW3NxVG9vbHRpcF09XCInRGVsZXRlJ1wiXG4gICAgICAgIChjbGljayk9XCJkZWxldGVEb2N1bWVudCgkZXZlbnQsIGRvYylcIj48L2k+ICBcbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC13YXJuaW5nXCIgKm5nSWY9XCJkb2N1bWVudFRvRGVsZXRlICYmIGRvY3VtZW50VG9EZWxldGUuaWQgPT09IGRvYy5pZFwiPlxuICAgICAgPHNwYW4+WW91IGFyZSBhYm91dCB0byBkZWxldGUgdGhlIGRvY3VtZW50IHt7ZG9jdW1lbnRUb0RlbGV0ZSEuZmlsZU5hbWV9fS4gRG8geW91IHdhbnQgdG8gY29udGludWUgPzwvc3Bhbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTJcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tbGlnaHQgdy0xMDBcIiAoY2xpY2spPVwiZG9jdW1lbnRUb0RlbGV0ZT11bmRlZmluZWRcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5IHctMTAwXCIgKGNsaWNrKT1cInBlcmZvcm1EZWxldGVEb2N1bWVudCgpXCI+Q29uZmlybTwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+Il19
@@ -66,10 +66,10 @@ export class DocumentOverviewComponent extends AbstractFacet {
66
66
  }
67
67
  }
68
68
  DocumentOverviewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DocumentOverviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
69
- DocumentOverviewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: DocumentOverviewComponent, isStandalone: true, selector: "sq-document-overview", inputs: { instanceId: "instanceId", disabledUpload: "disabledUpload" }, outputs: { onUpload: "onUpload" }, providers: [DocumentsUploadService], usesInheritance: true, ngImport: i0, template: "<div class=\"d-flex\">\r\n <span class=\"overview-text flex-grow-1\">{{ (uploadedDocuments$ | async)?.length || 0 }} uploaded document(s)</span>\r\n <button disabled class=\"btn btn-light\" title=\"Upload to Sources\" (click)=\"onUpload.emit()\" [disabled]=\"disabledUpload\">\r\n <i class=\"fas fa-cloud-upload-alt\"></i>\r\n </button>\r\n</div>", styles: [".overview-text{font-style:italic;padding:.5rem .8rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: UtilsModule }, { kind: "ngmodule", type: ModalModule }] });
69
+ DocumentOverviewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: DocumentOverviewComponent, isStandalone: true, selector: "sq-document-overview", inputs: { instanceId: "instanceId", disabledUpload: "disabledUpload" }, outputs: { onUpload: "onUpload" }, providers: [DocumentsUploadService], usesInheritance: true, ngImport: i0, template: "<div class=\"d-flex\">\n <span class=\"overview-text flex-grow-1\">{{ (uploadedDocuments$ | async)?.length || 0 }} uploaded document(s)</span>\n <button disabled class=\"btn btn-light\" title=\"Upload to Sources\" (click)=\"onUpload.emit()\" [disabled]=\"disabledUpload\">\n <i class=\"fas fa-cloud-upload-alt\"></i>\n </button>\n</div>", styles: [".overview-text{font-style:italic;padding:.5rem .8rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: UtilsModule }, { kind: "ngmodule", type: ModalModule }] });
70
70
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DocumentOverviewComponent, decorators: [{
71
71
  type: Component,
72
- args: [{ selector: "sq-document-overview", standalone: true, providers: [DocumentsUploadService], imports: [CommonModule, UtilsModule, ModalModule], template: "<div class=\"d-flex\">\r\n <span class=\"overview-text flex-grow-1\">{{ (uploadedDocuments$ | async)?.length || 0 }} uploaded document(s)</span>\r\n <button disabled class=\"btn btn-light\" title=\"Upload to Sources\" (click)=\"onUpload.emit()\" [disabled]=\"disabledUpload\">\r\n <i class=\"fas fa-cloud-upload-alt\"></i>\r\n </button>\r\n</div>", styles: [".overview-text{font-style:italic;padding:.5rem .8rem}\n"] }]
72
+ args: [{ selector: "sq-document-overview", standalone: true, providers: [DocumentsUploadService], imports: [CommonModule, UtilsModule, ModalModule], template: "<div class=\"d-flex\">\n <span class=\"overview-text flex-grow-1\">{{ (uploadedDocuments$ | async)?.length || 0 }} uploaded document(s)</span>\n <button disabled class=\"btn btn-light\" title=\"Upload to Sources\" (click)=\"onUpload.emit()\" [disabled]=\"disabledUpload\">\n <i class=\"fas fa-cloud-upload-alt\"></i>\n </button>\n</div>", styles: [".overview-text{font-style:italic;padding:.5rem .8rem}\n"] }]
73
73
  }], ctorParameters: function () { return []; }, propDecorators: { instanceId: [{
74
74
  type: Input
75
75
  }], disabledUpload: [{
@@ -77,4 +77,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
77
77
  }], onUpload: [{
78
78
  type: Output
79
79
  }] } });
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtb3ZlcnZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNzaXN0YW50L2NoYXQvZG9jdW1lbnRzLXVwbG9hZC9kb2N1bWVudC1vdmVydmlldy9kb2N1bWVudC1vdmVydmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc3Npc3RhbnQvY2hhdC9kb2N1bWVudHMtdXBsb2FkL2RvY3VtZW50LW92ZXJ2aWV3L2RvY3VtZW50LW92ZXJ2aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEcsT0FBTyxFQUNMLGVBQWUsRUFDZixVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osU0FBUyxFQUNULElBQUksRUFDSixHQUFHLEVBQ0osTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV4RSxPQUFPLEVBQUUsc0JBQXNCLEVB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QUMzQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3RELENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ25CLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2QyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQyxFQUNGLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FDUjthQUNBLFNBQVMsRUFBRSxDQUNmLENBQUM7SUFDSixDQUFDOztzSEFoRlUseUJBQXlCOzBHQUF6Qix5QkFBeUIsOEtBVHpCLENBQUMsc0JBQXNCLENBQUMsaURDNUJyQyxrV0FLTSxnSER3Qk0sWUFBWSxtRkFBRSxXQUFXLDhCQUFFLFdBQVc7MkZBUXJDLHlCQUF5QjtrQkFickMsU0FBUzsrQkFDRSxzQkFBc0IsY0FFcEIsSUFBSSxhQUNMLENBQUMsc0JBQXNCLENBQUMsV0FDMUIsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLFdBQVcsQ0FBQzswRUFVeEMsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVJLFFBQVE7c0JBQWpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBpbmplY3QsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtcclxuICBCZWhhdmlvclN1YmplY3QsXHJcbiAgY2F0Y2hFcnJvcixcclxuICBFTVBUWSxcclxuICBmaWx0ZXIsXHJcbiAgU3Vic2NyaXB0aW9uLFxyXG4gIHN3aXRjaE1hcCxcclxuICB0YWtlLFxyXG4gIHRhcFxyXG59IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IExvZ2luU2VydmljZSB9IGZyb20gXCJAc2luZXF1YS9jb3JlL2xvZ2luXCI7XHJcbmltcG9ydCB7IE5vdGlmaWNhdGlvbnNTZXJ2aWNlIH0gZnJvbSBcIkBzaW5lcXVhL2NvcmUvbm90aWZpY2F0aW9uXCI7XHJcbmltcG9ydCB7IFV0aWxzTW9kdWxlIH0gZnJvbSBcIkBzaW5lcXVhL2NvbXBvbmVudHMvdXRpbHNcIjtcclxuaW1wb3J0IHsgQWJzdHJhY3RGYWNldCB9IGZyb20gXCJAc2luZXF1YS9jb21wb25lbnRzL2ZhY2V0XCI7XHJcbmltcG9ydCB7IEFjdGlvbiB9IGZyb20gXCJAc2luZXF1YS9jb21wb25lbnRzL2FjdGlvblwiO1xyXG5pbXBvcnQgeyBNb2RhbFNlcnZpY2UsIE1vZGFsTW9kdWxlIH0gZnJvbSBcIkBzaW5lcXVhL2NvcmUvbW9kYWxcIjtcclxuaW1wb3J0IHsgSW5zdGFuY2VNYW5hZ2VyU2VydmljZSB9IGZyb20gXCIuLi8uLi9pbnN0YW5jZS1tYW5hZ2VyLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQ2hhdFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY2hhdC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IERvY3VtZW50c1VwbG9hZFNlcnZpY2UgfSBmcm9tIFwiLi4vZG9jdW1lbnRzLXVwbG9hZC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IENoYXRDb25maWcgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcclxuaW1wb3J0IHsgVXBsb2FkZWREb2N1bWVudCwgVXBsb2FkZWREb2N1bWVudHMgfSBmcm9tIFwiLi4vZG9jdW1lbnRzLXVwbG9hZC5tb2RlbFwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwic3EtZG9jdW1lbnQtb3ZlcnZpZXdcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL2RvY3VtZW50LW92ZXJ2aWV3LmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBwcm92aWRlcnM6IFtEb2N1bWVudHNVcGxvYWRTZXJ2aWNlXSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBVdGlsc01vZHVsZSwgTW9kYWxNb2R1bGVdLFxyXG4gIHN0eWxlczogW2BcclxuLm92ZXJ2aWV3LXRleHQge1xyXG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcclxuICBwYWRkaW5nOiAuNXJlbSAuOHJlbTtcclxufVxyXG4gIGBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEb2N1bWVudE92ZXJ2aWV3Q29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RGYWNldCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAvKiogRGVmaW5lIHRoZSBrZXkgYmFzZWQgb24gaXQsIHRoZSBhcHByb3ByaWF0ZSBjaGF0U2VydmljZSBpbnN0YW5jZSB3aWxsIGJlIHJldHVybmVkIGZyb20gaW5zdGFuY2VNYW5hZ2VyU2VydmljZSAqL1xyXG4gIEBJbnB1dCgpIGluc3RhbmNlSWQ6IHN0cmluZztcclxuICBASW5wdXQoKSBkaXNhYmxlZFVwbG9hZDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIEBPdXRwdXQoKSBvblVwbG9hZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgcHVibGljIGNoYXRTZXJ2aWNlOiBDaGF0U2VydmljZTtcclxuICBwdWJsaWMgdXBsb2FkZWREb2N1bWVudHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxVcGxvYWRlZERvY3VtZW50W10+KFtdKTs7XHJcblxyXG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuICBwcml2YXRlIF9hY3Rpb25zOiBBY3Rpb25bXSA9IFtdO1xyXG4gIHByaXZhdGUgX3VwZGF0ZURvY3VtZW50c0xpc3RBY3Rpb24gPSBuZXcgQWN0aW9uKHtcclxuICAgIGljb246ICdmYXMgZmEtc3luYycsXHJcbiAgICB0aXRsZTogXCJSZWZyZXNoXCIsXHJcbiAgICBhY3Rpb246ICgpID0+IHRoaXMudXBkYXRlVXBsb2FkZWREb2N1bWVudHNMaXN0KClcclxuICB9KTtcclxuXHJcbiAgcHVibGljIGxvZ2luU2VydmljZSA9IGluamVjdChMb2dpblNlcnZpY2UpO1xyXG4gIHB1YmxpYyBpbnN0YW5jZU1hbmFnZXJTZXJ2aWNlID0gaW5qZWN0KEluc3RhbmNlTWFuYWdlclNlcnZpY2UpO1xyXG4gIHB1YmxpYyBkb2N1bWVudHNVcGxvYWRTZXJ2aWNlID0gaW5qZWN0KERvY3VtZW50c1VwbG9hZFNlcnZpY2UpO1xyXG4gIHB1YmxpYyBub3RpZmljYXRpb25zU2VydmljZSA9IGluamVjdChOb3RpZmljYXRpb25zU2VydmljZSk7XHJcbiAgcHVibGljIG1vZGFsU2VydmljZSA9IGluamVjdChNb2RhbFNlcnZpY2UpO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLl9hY3Rpb25zID0gW3RoaXMuX3VwZGF0ZURvY3VtZW50c0xpc3RBY3Rpb25dO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxyXG4gICAgICB0aGlzLmxvZ2luU2VydmljZS5ldmVudHNcclxuICAgICAgICAucGlwZShcclxuICAgICAgICAgIGZpbHRlcigoZSkgPT4gZS50eXBlID09PSBcImxvZ2luLWNvbXBsZXRlXCIpLFxyXG4gICAgICAgICAgdGFwKChfKSA9PiB0aGlzLmluc3RhbnRpYXRlQ2hhdFNlcnZpY2UoKSksXHJcbiAgICAgICAgICBzd2l0Y2hNYXAoKF8pID0+IHRoaXMuY2hhdFNlcnZpY2UuYXNzaXN0YW50Q29uZmlnJCksXHJcbiAgICAgICAgICBmaWx0ZXIoKGNvbmZpZzogQ2hhdENvbmZpZyB8IHVuZGVmaW5lZCkgPT4gISFjb25maWcpLFxyXG4gICAgICAgICAgdGFwKChfKSA9PiB0aGlzLmRvY3VtZW50c1VwbG9hZFNlcnZpY2UuaW5pdCh0aGlzLmNoYXRTZXJ2aWNlKSksXHJcbiAgICAgICAgICB0YXAoKF8pID0+IHRoaXMudXBkYXRlVXBsb2FkZWREb2N1bWVudHNMaXN0KCkpLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uc1NlcnZpY2UuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICByZXR1cm4gRU1QVFk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIClcclxuICAgICAgICAuc3Vic2NyaWJlKClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgZ2V0IGFjdGlvbnMoKSB7IHJldHVybiB0aGlzLl9hY3Rpb25zOyB9XHJcblxyXG4gIGluc3RhbnRpYXRlQ2hhdFNlcnZpY2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNoYXRTZXJ2aWNlID0gdGhpcy5pbnN0YW5jZU1hbmFnZXJTZXJ2aWNlLmdldEluc3RhbmNlKHRoaXMuaW5zdGFuY2VJZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIHRoZSBsaXN0IG9mIHVwbG9hZGVkIGRvY3VtZW50cyBieSBmZXRjaGluZyB0aGUgbGF0ZXN0IGRhdGEgZnJvbSB0aGUgc2VydmljZS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAqL1xyXG4gIHVwZGF0ZVVwbG9hZGVkRG9jdW1lbnRzTGlzdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXHJcbiAgICAgIHRoaXMuZG9jdW1lbnRzVXBsb2FkU2VydmljZS5nZXREb2N1bWVudHNMaXN0KClcclxuICAgICAgICAucGlwZShcclxuICAgICAgICAgIHRhcCgodXBsb2FkZWREb2N1bWVudHM6IFVwbG9hZGVkRG9jdW1lbnRzKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXBsb2FkZWREb2N1bWVudHMkLm5leHQodXBsb2FkZWREb2N1bWVudHMuZG9jcylcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uc1NlcnZpY2UuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICByZXR1cm4gRU1QVFk7XHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICAgIHRha2UoMSlcclxuICAgICAgICApXHJcbiAgICAgICAgLnN1YnNjcmliZSgpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gIDxzcGFuIGNsYXNzPVwib3ZlcnZpZXctdGV4dCBmbGV4LWdyb3ctMVwiPnt7ICh1cGxvYWRlZERvY3VtZW50cyQgfCBhc3luYyk/Lmxlbmd0aCB8fCAwIH19IHVwbG9hZGVkIGRvY3VtZW50KHMpPC9zcGFuPlxyXG4gIDxidXR0b24gZGlzYWJsZWQgY2xhc3M9XCJidG4gYnRuLWxpZ2h0XCIgdGl0bGU9XCJVcGxvYWQgdG8gU291cmNlc1wiIChjbGljayk9XCJvblVwbG9hZC5lbWl0KClcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRVcGxvYWRcIj5cclxuICAgIDxpIGNsYXNzPVwiZmFzIGZhLWNsb3VkLXVwbG9hZC1hbHRcIj48L2k+XHJcbiAgPC9idXR0b24+XHJcbjwvZGl2PiJdfQ==
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtb3ZlcnZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXNzaXN0YW50L2NoYXQvZG9jdW1lbnRzLXVwbG9hZC9kb2N1bWVudC1vdmVydmlldy9kb2N1bWVudC1vdmVydmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc3Npc3RhbnQvY2hhdC9kb2N1bWVudHMtdXBsb2FkL2RvY3VtZW50LW92ZXJ2aWV3L2RvY3VtZW50LW92ZXJ2aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEcsT0FBTyxFQUNMLGVBQWUsRUFDZixVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osU0FBUyxFQUNULElBQUksRUFDSixHQUFHLEVBQ0osTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV4RSxPQUFPLEVBQUUsc0JBQXNCLEVB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QUMzQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3RELENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ25CLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2QyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQyxFQUNGLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FDUjthQUNBLFNBQVMsRUFBRSxDQUNmLENBQUM7SUFDSixDQUFDOztzSEFoRlUseUJBQXlCOzBHQUF6Qix5QkFBeUIsOEtBVHpCLENBQUMsc0JBQXNCLENBQUMsaURDNUJyQyx3VkFLTSxnSER3Qk0sWUFBWSxtRkFBRSxXQUFXLDhCQUFFLFdBQVc7MkZBUXJDLHlCQUF5QjtrQkFickMsU0FBUzsrQkFDRSxzQkFBc0IsY0FFcEIsSUFBSSxhQUNMLENBQUMsc0JBQXNCLENBQUMsV0FDMUIsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLFdBQVcsQ0FBQzswRUFVeEMsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVJLFFBQVE7c0JBQWpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgaW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNhdGNoRXJyb3IsXG4gIEVNUFRZLFxuICBmaWx0ZXIsXG4gIFN1YnNjcmlwdGlvbixcbiAgc3dpdGNoTWFwLFxuICB0YWtlLFxuICB0YXBcbn0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IExvZ2luU2VydmljZSB9IGZyb20gXCJAc2luZXF1YS9jb3JlL2xvZ2luXCI7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25zU2VydmljZSB9IGZyb20gXCJAc2luZXF1YS9jb3JlL25vdGlmaWNhdGlvblwiO1xuaW1wb3J0IHsgVXRpbHNNb2R1bGUgfSBmcm9tIFwiQHNpbmVxdWEvY29tcG9uZW50cy91dGlsc1wiO1xuaW1wb3J0IHsgQWJzdHJhY3RGYWNldCB9IGZyb20gXCJAc2luZXF1YS9jb21wb25lbnRzL2ZhY2V0XCI7XG5pbXBvcnQgeyBBY3Rpb24gfSBmcm9tIFwiQHNpbmVxdWEvY29tcG9uZW50cy9hY3Rpb25cIjtcbmltcG9ydCB7IE1vZGFsU2VydmljZSwgTW9kYWxNb2R1bGUgfSBmcm9tIFwiQHNpbmVxdWEvY29yZS9tb2RhbFwiO1xuaW1wb3J0IHsgSW5zdGFuY2VNYW5hZ2VyU2VydmljZSB9IGZyb20gXCIuLi8uLi9pbnN0YW5jZS1tYW5hZ2VyLnNlcnZpY2VcIjtcbmltcG9ydCB7IENoYXRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NoYXQuc2VydmljZVwiO1xuaW1wb3J0IHsgRG9jdW1lbnRzVXBsb2FkU2VydmljZSB9IGZyb20gXCIuLi9kb2N1bWVudHMtdXBsb2FkLnNlcnZpY2VcIjtcbmltcG9ydCB7IENoYXRDb25maWcgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IFVwbG9hZGVkRG9jdW1lbnQsIFVwbG9hZGVkRG9jdW1lbnRzIH0gZnJvbSBcIi4uL2RvY3VtZW50cy11cGxvYWQubW9kZWxcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcInNxLWRvY3VtZW50LW92ZXJ2aWV3XCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vZG9jdW1lbnQtb3ZlcnZpZXcuY29tcG9uZW50Lmh0bWxcIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgcHJvdmlkZXJzOiBbRG9jdW1lbnRzVXBsb2FkU2VydmljZV0sXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFV0aWxzTW9kdWxlLCBNb2RhbE1vZHVsZV0sXG4gIHN0eWxlczogW2Bcbi5vdmVydmlldy10ZXh0IHtcbiAgZm9udC1zdHlsZTogaXRhbGljO1xuICBwYWRkaW5nOiAuNXJlbSAuOHJlbTtcbn1cbiAgYF1cbn0pXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRPdmVydmlld0NvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0RmFjZXQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIC8qKiBEZWZpbmUgdGhlIGtleSBiYXNlZCBvbiBpdCwgdGhlIGFwcHJvcHJpYXRlIGNoYXRTZXJ2aWNlIGluc3RhbmNlIHdpbGwgYmUgcmV0dXJuZWQgZnJvbSBpbnN0YW5jZU1hbmFnZXJTZXJ2aWNlICovXG4gIEBJbnB1dCgpIGluc3RhbmNlSWQ6IHN0cmluZztcbiAgQElucHV0KCkgZGlzYWJsZWRVcGxvYWQ6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBPdXRwdXQoKSBvblVwbG9hZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBwdWJsaWMgY2hhdFNlcnZpY2U6IENoYXRTZXJ2aWNlO1xuICBwdWJsaWMgdXBsb2FkZWREb2N1bWVudHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxVcGxvYWRlZERvY3VtZW50W10+KFtdKTs7XG5cbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIF9hY3Rpb25zOiBBY3Rpb25bXSA9IFtdO1xuICBwcml2YXRlIF91cGRhdGVEb2N1bWVudHNMaXN0QWN0aW9uID0gbmV3IEFjdGlvbih7XG4gICAgaWNvbjogJ2ZhcyBmYS1zeW5jJyxcbiAgICB0aXRsZTogXCJSZWZyZXNoXCIsXG4gICAgYWN0aW9uOiAoKSA9PiB0aGlzLnVwZGF0ZVVwbG9hZGVkRG9jdW1lbnRzTGlzdCgpXG4gIH0pO1xuXG4gIHB1YmxpYyBsb2dpblNlcnZpY2UgPSBpbmplY3QoTG9naW5TZXJ2aWNlKTtcbiAgcHVibGljIGluc3RhbmNlTWFuYWdlclNlcnZpY2UgPSBpbmplY3QoSW5zdGFuY2VNYW5hZ2VyU2VydmljZSk7XG4gIHB1YmxpYyBkb2N1bWVudHNVcGxvYWRTZXJ2aWNlID0gaW5qZWN0KERvY3VtZW50c1VwbG9hZFNlcnZpY2UpO1xuICBwdWJsaWMgbm90aWZpY2F0aW9uc1NlcnZpY2UgPSBpbmplY3QoTm90aWZpY2F0aW9uc1NlcnZpY2UpO1xuICBwdWJsaWMgbW9kYWxTZXJ2aWNlID0gaW5qZWN0KE1vZGFsU2VydmljZSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9hY3Rpb25zID0gW3RoaXMuX3VwZGF0ZURvY3VtZW50c0xpc3RBY3Rpb25dO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMubG9naW5TZXJ2aWNlLmV2ZW50c1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKGUpID0+IGUudHlwZSA9PT0gXCJsb2dpbi1jb21wbGV0ZVwiKSxcbiAgICAgICAgICB0YXAoKF8pID0+IHRoaXMuaW5zdGFudGlhdGVDaGF0U2VydmljZSgpKSxcbiAgICAgICAgICBzd2l0Y2hNYXAoKF8pID0+IHRoaXMuY2hhdFNlcnZpY2UuYXNzaXN0YW50Q29uZmlnJCksXG4gICAgICAgICAgZmlsdGVyKChjb25maWc6IENoYXRDb25maWcgfCB1bmRlZmluZWQpID0+ICEhY29uZmlnKSxcbiAgICAgICAgICB0YXAoKF8pID0+IHRoaXMuZG9jdW1lbnRzVXBsb2FkU2VydmljZS5pbml0KHRoaXMuY2hhdFNlcnZpY2UpKSxcbiAgICAgICAgICB0YXAoKF8pID0+IHRoaXMudXBkYXRlVXBsb2FkZWREb2N1bWVudHNMaXN0KCkpLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uc1NlcnZpY2UuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpXG4gICAgKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgb3ZlcnJpZGUgZ2V0IGFjdGlvbnMoKSB7IHJldHVybiB0aGlzLl9hY3Rpb25zOyB9XG5cbiAgaW5zdGFudGlhdGVDaGF0U2VydmljZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNoYXRTZXJ2aWNlID0gdGhpcy5pbnN0YW5jZU1hbmFnZXJTZXJ2aWNlLmdldEluc3RhbmNlKHRoaXMuaW5zdGFuY2VJZCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgbGlzdCBvZiB1cGxvYWRlZCBkb2N1bWVudHMgYnkgZmV0Y2hpbmcgdGhlIGxhdGVzdCBkYXRhIGZyb20gdGhlIHNlcnZpY2UuXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgdXBkYXRlVXBsb2FkZWREb2N1bWVudHNMaXN0KCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLmRvY3VtZW50c1VwbG9hZFNlcnZpY2UuZ2V0RG9jdW1lbnRzTGlzdCgpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRhcCgodXBsb2FkZWREb2N1bWVudHM6IFVwbG9hZGVkRG9jdW1lbnRzKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwbG9hZGVkRG9jdW1lbnRzJC5uZXh0KHVwbG9hZGVkRG9jdW1lbnRzLmRvY3MpXG4gICAgICAgICAgfSksXG4gICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zU2VydmljZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgdGFrZSgxKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKVxuICAgICk7XG4gIH1cblxufVxuIiwiPGRpdiBjbGFzcz1cImQtZmxleFwiPlxuICA8c3BhbiBjbGFzcz1cIm92ZXJ2aWV3LXRleHQgZmxleC1ncm93LTFcIj57eyAodXBsb2FkZWREb2N1bWVudHMkIHwgYXN5bmMpPy5sZW5ndGggfHwgMCB9fSB1cGxvYWRlZCBkb2N1bWVudChzKTwvc3Bhbj5cbiAgPGJ1dHRvbiBkaXNhYmxlZCBjbGFzcz1cImJ0biBidG4tbGlnaHRcIiB0aXRsZT1cIlVwbG9hZCB0byBTb3VyY2VzXCIgKGNsaWNrKT1cIm9uVXBsb2FkLmVtaXQoKVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFVwbG9hZFwiPlxuICAgIDxpIGNsYXNzPVwiZmFzIGZhLWNsb3VkLXVwbG9hZC1hbHRcIj48L2k+XG4gIDwvYnV0dG9uPlxuPC9kaXY+Il19