@myrmidon/cadmus-refs-asserted-ids 2.1.4 → 2.1.5

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.
@@ -357,7 +357,7 @@ class PinTargetLookupComponent {
357
357
  loadItemInfo(pin) {
358
358
  forkJoin({
359
359
  item: this._itemService.getItem(pin.itemId, false),
360
- part: this._itemService.getPartFromTypeAndRole(pin.itemId, METADATA_PART_ID),
360
+ part: this._itemService.getPartFromTypeAndRole(pin.itemId, METADATA_PART_ID, undefined, true),
361
361
  })
362
362
  .pipe(take(1))
363
363
  .subscribe({
@@ -429,4 +429,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.3", ngImpor
429
429
  }], targetChange: [{
430
430
  type: Output
431
431
  }] } });
432
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGluLXRhcmdldC1sb29rdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlybWlkb24vY2FkbXVzLXJlZnMtYXNzZXJ0ZWQtaWRzL3NyYy9saWIvcGluLXRhcmdldC1sb29rdXAvcGluLXRhcmdldC1sb29rdXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlybWlkb24vY2FkbXVzLXJlZnMtYXNzZXJ0ZWQtaWRzL3NyYy9saWIvcGluLXRhcmdldC1sb29rdXAvcGluLXRhcmdldC1sb29rdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUlMLFVBQVUsR0FDWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFFTCxZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLFFBQVEsRUFDUixJQUFJLEdBQ0wsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFtQmQsNEJBQTRCO0FBQzVCLE1BQU0sZ0JBQWdCLEdBQUcsbUJBQW1CLENBQUM7QUFtQzdDOzs7Ozs7R0FNRztBQUNILE1BS2Esd0JBQXdCO0lBTW5DOzs7T0FHRztJQUNILElBQ1csYUFBYTtRQUN0QixPQUFPLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDO0lBQ2hDLENBQUM7SUFDRCxJQUFXLGFBQWEsQ0FBQyxLQUEwQjtRQUNqRCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNwQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO1NBQ25DO2FBQU07WUFDTCxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLENBQUM7WUFDekMs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QUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7OEdBL2RVLHdCQUF3QixrQkFvR3pCLHdCQUF3QjtrR0FwR3ZCLHdCQUF3Qix1VkN4RnJDLG9nUkF5UEE7O1NEakthLHdCQUF3QjsyRkFBeEIsd0JBQXdCO2tCQUxwQyxTQUFTOytCQUNFLDBCQUEwQjs7MEJBd0dqQyxNQUFNOzJCQUFDLHdCQUF3Qjs4TkF6RnZCLGFBQWE7c0JBRHZCLEtBQUs7Z0JBaUJDLGFBQWE7c0JBRG5CLEtBQUs7Z0JBT0MsYUFBYTtzQkFEbkIsS0FBSztnQkFXQyxpQkFBaUI7c0JBRHZCLEtBQUs7Z0JBT0ssTUFBTTtzQkFEaEIsS0FBSztnQkFnQkMsa0JBQWtCO3NCQUR4QixLQUFLO2dCQU9DLFdBQVc7c0JBRGpCLE1BQU07Z0JBT0EsWUFBWTtzQkFEbEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgRm9ybUJ1aWxkZXIsXHJcbiAgRm9ybUNvbnRyb2wsXHJcbiAgRm9ybUdyb3VwLFxyXG4gIFZhbGlkYXRvcnMsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge1xyXG4gIFN1YnNjcmlwdGlvbixcclxuICBkZWJvdW5jZVRpbWUsXHJcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXHJcbiAgZm9ya0pvaW4sXHJcbiAgdGFrZSxcclxufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xyXG5cclxuaW1wb3J0IHsgSXRlbVNlcnZpY2UsIFRoZXNhdXJ1c1NlcnZpY2UgfSBmcm9tICdAbXlybWlkb24vY2FkbXVzLWFwaSc7XHJcbmltcG9ydCB7XHJcbiAgRGF0YVBpbkluZm8sXHJcbiAgSW5kZXhMb29rdXBEZWZpbml0aW9uLFxyXG4gIEluZGV4TG9va3VwRGVmaW5pdGlvbnMsXHJcbiAgSXRlbSxcclxuICBQYXJ0LFxyXG4gIFRoZXNhdXJ1c0VudHJ5LFxyXG59IGZyb20gJ0BteXJtaWRvbi9jYWRtdXMtY29yZSc7XHJcblxyXG5pbXBvcnQge1xyXG4gIFBpblJlZkxvb2t1cEZpbHRlcixcclxuICBQaW5SZWZMb29rdXBTZXJ2aWNlLFxyXG59IGZyb20gJy4uL3NlcnZpY2VzL3Bpbi1yZWYtbG9va3VwLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJdGVtUmVmTG9va3VwU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2l0ZW0tcmVmLWxvb2t1cC5zZXJ2aWNlJztcclxuXHJcbi8vIGZyb20gQ2FkbXVzIGdlbmVyYWwgcGFydHNcclxuY29uc3QgTUVUQURBVEFfUEFSVF9JRCA9ICdpdC52ZWRwaC5tZXRhZGF0YSc7XHJcbmludGVyZmFjZSBNZXRhZGF0YVBhcnQgZXh0ZW5kcyBQYXJ0IHtcclxuICBtZXRhZGF0YToge1xyXG4gICAgdHlwZT86IHN0cmluZztcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIHZhbHVlOiBzdHJpbmc7XHJcbiAgfVtdO1xyXG59XHJcblxyXG4vKipcclxuICogUGluIGxvb2t1cCBkYXRhIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgY29tcG9uZW50LlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBQaW5Mb29rdXBEYXRhIHtcclxuICBwaW46IERhdGFQaW5JbmZvO1xyXG4gIGl0ZW0/OiBJdGVtO1xyXG4gIG1ldGFQYXJ0PzogTWV0YWRhdGFQYXJ0O1xyXG59XHJcblxyXG4vKipcclxuICogQSBwaW4tYmFzZWQgdGFyZ2V0LiBUaGlzIGluY2x1ZGVzIHBpbidzIG5hbWUgYW5kIHZhbHVlLCBhbmRcclxuICogdGhlIGl0ZW0ncyBJRCBhbmQgb3B0aW9uYWwgcGFydCBJRHMuIFRoZSBsYWJlbCBpcyBhIHVzZXIgZnJpZW5kbHlcclxuICogc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0YXJnZXQsIHdoaWxlIHRoZSBnaWQgaXMgYSBnbG9iYWxseVxyXG4gKiB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHRhcmdldC5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgUGluVGFyZ2V0IHtcclxuICBnaWQ6IHN0cmluZztcclxuICBsYWJlbDogc3RyaW5nO1xyXG4gIGl0ZW1JZD86IHN0cmluZztcclxuICBwYXJ0SWQ/OiBzdHJpbmc7XHJcbiAgcGFydFR5cGVJZD86IHN0cmluZztcclxuICByb2xlSWQ/OiBzdHJpbmc7XHJcbiAgbmFtZT86IHN0cmluZztcclxuICB2YWx1ZT86IHN0cmluZztcclxufVxyXG5cclxuLypcclxuICogU2NvcGVkIHBpbi1iYXNlZCBsb29rdXAgY29tcG9uZW50LiBUaGlzIGNvbXBvbmVudCBwcm92aWRlcyBhIGxpc3RcclxuICogb2YgcGluLWJhc2VkIHNlYXJjaGVzLCB3aXRoIGEgbG9va3VwIGNvbnRyb2wuIFdoZW5ldmVyIHRoZSB1c2VyXHJcbiAqIHBpY2tzIGEgcGluIHZhbHVlLCBoZSBnZXRzIHRoZSBkZXRhaWxzIGFib3V0IGl0cyBpdGVtIGFuZCBwYXJ0LCBhbmRcclxuICogaXRlbSdzIG1ldGFkYXRhIHBhcnQsIGlmIGFueS4gSGUgY2FuIHRoZW4gdXNlIHRoZXNlIGRhdGEgdG8gYnVpbGRcclxuICogc29tZSBFSUQgYnkgdmFyaW91c2x5IGFzc2VtYmxpbmcgdGhlc2UgY29tcG9uZW50cy5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY2FkbXVzLXBpbi10YXJnZXQtbG9va3VwJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcGluLXRhcmdldC1sb29rdXAuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3Bpbi10YXJnZXQtbG9va3VwLmNvbXBvbmVudC5jc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFBpblRhcmdldExvb2t1cENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBwcml2YXRlIF9zdWJzOiBTdWJzY3JpcHRpb25bXTtcclxuICBwcml2YXRlIF90YXJnZXQ6IFBpblRhcmdldCB8IHVuZGVmaW5lZDtcclxuICBwcml2YXRlIF9ub1RhcmdldFVwZGF0ZT86IGJvb2xlYW47XHJcbiAgcHJpdmF0ZSBfc3RhcnRXaXRoQnlUeXBlTW9kZT86IGJvb2xlYW47XHJcblxyXG4gIC8qKlxyXG4gICAqIFRydWUgd2hlbiB0aGUgYnktdHlwZSBwaW4gbG9va3VwIG1vZGUgaXMgYWN0aXZlLlxyXG4gICAqIFVzZXIgY2FuIGNoYW5nZSBtb2RlIHVubGVzcyBtb2RlU3dpdGNoaW5nIGlzIGZhbHNlLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCBwaW5CeVR5cGVNb2RlKCk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuYnlUeXBlTW9kZT8udmFsdWU7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgcGluQnlUeXBlTW9kZSh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xyXG4gICAgaWYgKCF0aGlzLmJ5VHlwZU1vZGUpIHtcclxuICAgICAgdGhpcy5fc3RhcnRXaXRoQnlUeXBlTW9kZSA9IHZhbHVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5ieVR5cGVNb2RlLnNldFZhbHVlKHZhbHVlIHx8IGZhbHNlKTtcclxuICAgICAgdGhpcy5ieVR5cGVNb2RlLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRydWUgd2hlbiB0aGUgdXNlciBjYW4gc3dpdGNoIGJldHdlZW4gYnktdHlwZSBhbmQgYnktaXRlbSBtb2RlLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGNhblN3aXRjaE1vZGU/OiBib29sZWFuO1xyXG4gIC8qKlxyXG4gICAqIFRydWUgd2hlbiB0aGUgdXNlciBjYW4gZWRpdCB0aGUgdGFyZ2V0J3MgZ2lkL2xhYmVsIGZvciBpbnRlcm5hbFxyXG4gICAqIHRhcmdldHMuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgY2FuRWRpdFRhcmdldD86IGJvb2xlYW47XHJcbiAgLyoqXHJcbiAgICogVGhlIGxvb2t1cCBkZWZpbml0aW9ucyB0byBiZSB1c2VkIGZvciB0aGUgYnktdHlwZSBsb29rdXAuIElmXHJcbiAgICogbm90IHNwZWNpZmllZCwgdGhlIGxvb2t1cCBkZWZpbml0aW9ucyB3aWxsIGJlIGdvdCB2aWEgaW5qZWN0aW9uXHJcbiAgICogd2hlbiBhdmFpbGFibGU7IGlmIHRoZSBpbmplY3RlZCBkZWZpbml0aW9ucyBhcmUgZW1wdHksIHRoZVxyXG4gICAqIGxvb2t1cCBkZWZpbml0aW9ucyB3aWxsIGJlIGJ1aWx0IGZyb20gdGhlIG1vZGVsLXR5cGVzIHRoZXNhdXJ1cztcclxuICAgKiBpZiB0aGlzIGlzIG5vdCBhdmFpbGFibGUgZWl0aGVyLCB0aGUgYnktdHlwZSBsb29rdXAgd2lsbCBiZVxyXG4gICAqIGRpc2FibGVkLlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGxvb2t1cERlZmluaXRpb25zPzogSW5kZXhMb29rdXBEZWZpbml0aW9ucztcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIHRhcmdldCB0byBiZSBlZGl0ZWQuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZ2V0IHRhcmdldCgpOiBQaW5UYXJnZXQgfCB1bmRlZmluZWQgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLl90YXJnZXQ7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgdGFyZ2V0KHZhbHVlOiBQaW5UYXJnZXQgfCB1bmRlZmluZWQgfCBudWxsKSB7XHJcbiAgICBpZiAodGhpcy5fdGFyZ2V0ID09PSB2YWx1ZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl90YXJnZXQgPSB2YWx1ZSB8fCB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnVwZGF0ZUZvcm0odGhpcy5fdGFyZ2V0KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBwYXJ0IHR5cGUga2V5IHdoZW4gdGhlIGJ5LXR5cGUgbW9kZSBpcyBhY3RpdmUuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZGVmYXVsdFBhcnRUeXBlS2V5Pzogc3RyaW5nIHwgbnVsbDtcclxuXHJcbiAgLyoqXHJcbiAgICogRW1pdHRlZCB3aGVuIHVzZXIgY2xvc2VzIHRoZSBlZGl0b3IuXHJcbiAgICovXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIGVkaXRvckNsb3NlOiBFdmVudEVtaXR0ZXI8YW55PjtcclxuICAvKipcclxuICAgKiBFbWl0dGVkIHdoZW5ldmVyIHRoZSB0YXJnZXQgY2hhbmdlcy5cclxuICAgKiBUaGUgZXZlbnQncyB2YWx1ZSBpcyB0aGUgbmV3IHRhcmdldC5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgdGFyZ2V0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8UGluVGFyZ2V0PjtcclxuXHJcbiAgLy8gYnkgdHlwZVxyXG4gIHB1YmxpYyBtb2RlbEVudHJpZXM6IFRoZXNhdXJ1c0VudHJ5W107XHJcbiAgcHVibGljIHBhcnRUeXBlS2V5czogc3RyaW5nW107XHJcbiAgLy8gYnkgaXRlbVxyXG4gIHB1YmxpYyBpdGVtUGFydHM6IFBhcnRbXTtcclxuICAvLyBmb3JtIC0gYnkgaXRlbVxyXG4gIHB1YmxpYyBpdGVtOiBGb3JtQ29udHJvbDxJdGVtIHwgbnVsbD47XHJcbiAgcHVibGljIGl0ZW1QYXJ0OiBGb3JtQ29udHJvbDxQYXJ0IHwgbnVsbD47XHJcbiAgLy8gZm9ybSAtIGJ5IHR5cGVcclxuICBwdWJsaWMgcGFydFR5cGVLZXk6IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+O1xyXG4gIC8vIGZvcm0gLSBib3RoXHJcbiAgcHVibGljIGdpZDogRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD47XHJcbiAgcHVibGljIGxhYmVsOiBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPjtcclxuICBwdWJsaWMgYnlUeXBlTW9kZTogRm9ybUNvbnRyb2w8Ym9vbGVhbj47XHJcbiAgcHVibGljIGV4dGVybmFsOiBGb3JtQ29udHJvbDxib29sZWFuPjtcclxuICBwdWJsaWMgZm9ybTogRm9ybUdyb3VwO1xyXG5cclxuICBwdWJsaWMgZmlsdGVyOiBQaW5SZWZMb29rdXBGaWx0ZXI7XHJcbiAgcHVibGljIHBpbkZpbHRlck9wdGlvbnM/OiBJbmRleExvb2t1cERlZmluaXRpb247XHJcbiAgcHVibGljIGxvb2t1cERhdGE/OiBQaW5Mb29rdXBEYXRhO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoJ2luZGV4TG9va3VwRGVmaW5pdGlvbnMnKVxyXG4gICAgcHJpdmF0ZSBfcHJlc2V0TG9va3VwRGVmczogSW5kZXhMb29rdXBEZWZpbml0aW9ucyxcclxuICAgIHB1YmxpYyBpdGVtTG9va3VwU2VydmljZTogSXRlbVJlZkxvb2t1cFNlcnZpY2UsXHJcbiAgICBwdWJsaWMgcGluTG9va3VwU2VydmljZTogUGluUmVmTG9va3VwU2VydmljZSxcclxuICAgIHByaXZhdGUgX2l0ZW1TZXJ2aWNlOiBJdGVtU2VydmljZSxcclxuICAgIHByaXZhdGUgX3RoZXNTZXJ2aWNlOiBUaGVzYXVydXNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc25hY2tiYXI6IE1hdFNuYWNrQmFyLFxyXG4gICAgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyXHJcbiAgKSB7XHJcbiAgICB0aGlzLnBhcnRUeXBlS2V5cyA9IFtdO1xyXG4gICAgdGhpcy5pdGVtUGFydHMgPSBbXTtcclxuICAgIHRoaXMuX3N1YnMgPSBbXTtcclxuICAgIHRoaXMubW9kZWxFbnRyaWVzID0gW107XHJcbiAgICAvLyB0aGlzIGlzIHRoZSBkZWZhdWx0IGZpbHRlciBmb3IgdGhlIHBpbiBsb29rdXAsIHdoaWNoIHdpbGxcclxuICAgIC8vIGJlIG1lcmdlZCB3aXRoIHZhbHVlcyBwcm92aWRlZCBieSB1c2VyIGhlcmVcclxuICAgIHRoaXMuZmlsdGVyID0ge1xyXG4gICAgICB0ZXh0OiAnJyxcclxuICAgICAgbGltaXQ6IDEwLFxyXG4gICAgfTtcclxuICAgIC8vIGZvcm1cclxuICAgIHRoaXMuaXRlbSA9IGZvcm1CdWlsZGVyLmNvbnRyb2wobnVsbCk7XHJcbiAgICB0aGlzLml0ZW1QYXJ0ID0gZm9ybUJ1aWxkZXIuY29udHJvbChudWxsKTtcclxuICAgIHRoaXMucGFydFR5cGVLZXkgPSBmb3JtQnVpbGRlci5jb250cm9sKG51bGwpO1xyXG4gICAgdGhpcy5naWQgPSBmb3JtQnVpbGRlci5jb250cm9sKG51bGwsIFtcclxuICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcclxuICAgICAgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMzAwKSxcclxuICAgIF0pO1xyXG4gICAgdGhpcy5sYWJlbCA9IGZvcm1CdWlsZGVyLmNvbnRyb2wobnVsbCwgW1xyXG4gICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxyXG4gICAgICBWYWxpZGF0b3JzLm1heExlbmd0aCgzMDApLFxyXG4gICAgXSk7XHJcbiAgICB0aGlzLmJ5VHlwZU1vZGUgPSBmb3JtQnVpbGRlci5jb250cm9sKGZhbHNlLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pO1xyXG4gICAgdGhpcy5leHRlcm5hbCA9IGZvcm1CdWlsZGVyLmNvbnRyb2woZmFsc2UsIHsgbm9uTnVsbGFibGU6IHRydWUgfSk7XHJcbiAgICB0aGlzLmZvcm0gPSBmb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgIGl0ZW06IHRoaXMuaXRlbSxcclxuICAgICAgaXRlbVBhcnQ6IHRoaXMuaXRlbVBhcnQsXHJcbiAgICAgIHBhcnRUeXBlS2V5OiB0aGlzLnBhcnRUeXBlS2V5LFxyXG4gICAgICBnaWQ6IHRoaXMuZ2lkLFxyXG4gICAgICBsYWJlbDogdGhpcy5sYWJlbCxcclxuICAgICAgYnlUeXBlTW9kZTogdGhpcy5ieVR5cGVNb2RlLFxyXG4gICAgICBleHRlcm5hbDogdGhpcy5leHRlcm5hbCxcclxuICAgIH0pO1xyXG4gICAgLy8gZXZlbnRzXHJcbiAgICB0aGlzLnRhcmdldENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8UGluVGFyZ2V0PigpO1xyXG4gICAgdGhpcy5lZGl0b3JDbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmb3JjZUJ5SXRlbSgpOiB2b2lkIHtcclxuICAgIHRoaXMucGluQnlUeXBlTW9kZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5jYW5Td2l0Y2hNb2RlID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldHVwS2V5cygpOiB2b2lkIHtcclxuICAgIC8vIHVzZSBESSBwcmVzZXRzIGlmIG5vIGxvb2t1cCBkZWZpbml0aW9uc1xyXG4gICAgaWYgKCF0aGlzLmxvb2t1cERlZmluaXRpb25zKSB7XHJcbiAgICAgIHRoaXMubG9va3VwRGVmaW5pdGlvbnMgPSB0aGlzLl9wcmVzZXRMb29rdXBEZWZzO1xyXG4gICAgfVxyXG4gICAgLy8ga2V5cyBhcmUgYWxsIHRoZSBkZWZpbmVkIGxvb2t1cCBzZWFyY2hlc1xyXG4gICAgdGhpcy5wYXJ0VHlwZUtleXMgPSBPYmplY3Qua2V5cyh0aGlzLmxvb2t1cERlZmluaXRpb25zKTtcclxuXHJcbiAgICAvLyBpZiBubyBrZXlzLCBnZXQgdGhlbSBmcm9tIHRoZXNhdXJ1cyBtb2RlbC10eXBlcztcclxuICAgIC8vIGlmIHRoaXMgaXMgbm90IGF2YWlsYWJsZSwganVzdCBmb3JjZSBieSBpdGVtIG1vZGUuXHJcbiAgICBpZiAoIXRoaXMucGFydFR5cGVLZXlzLmxlbmd0aCkge1xyXG4gICAgICBpZiAodGhpcy5tb2RlbEVudHJpZXM/Lmxlbmd0aCkge1xyXG4gICAgICAgIC8vIHNldCBsb29rdXBEZWZpbml0aW9ucyBmcm9tIHRoZXNhdXJ1cyBlbnRyaWVzXHJcbiAgICAgICAgdGhpcy5sb29rdXBEZWZpbml0aW9ucyA9IHt9O1xyXG4gICAgICAgIHRoaXMubW9kZWxFbnRyaWVzLmZvckVhY2goKGUpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9va3VwRGVmaW5pdGlvbnMhW2UudmFsdWVdID0ge1xyXG4gICAgICAgICAgICBuYW1lOiBlLnZhbHVlLFxyXG4gICAgICAgICAgICB0eXBlSWQ6IGUuaWQsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vIHNldCB0eXBlIGtleXMgZnJvbSB0aGVzYXVydXMgZW50cmllc1xyXG4gICAgICAgIHRoaXMucGFydFR5cGVLZXlzID0gdGhpcy5tb2RlbEVudHJpZXMubWFwKChlKSA9PiBlLnZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGlmIHN0aWxsIG5vIGtleXMsIGZvcmNlIGJ5IGl0ZW0gbW9kZVxyXG4gICAgaWYgKCF0aGlzLnBhcnRUeXBlS2V5cy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5mb3JjZUJ5SXRlbSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gc2V0IGRlZmF1bHQga2V5XHJcbiAgICAgIHRoaXMucGFydFR5cGVLZXkuc2V0VmFsdWUoXHJcbiAgICAgICAgdGhpcy5kZWZhdWx0UGFydFR5cGVLZXkgfHwgdGhpcy5wYXJ0VHlwZUtleXNbMF1cclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIC8vIHNldCBzdGFydCBtb2RlIGlmIHJlcXVpcmVkXHJcbiAgICBpZiAodGhpcy5fc3RhcnRXaXRoQnlUeXBlTW9kZSkge1xyXG4gICAgICB0aGlzLmJ5VHlwZU1vZGUuc2V0VmFsdWUodHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gd2hlbmV2ZXIgaXRlbSBjaGFuZ2VzLCB1cGRhdGUgaXRlbSdzIHBhcnRzIGFuZCBmaWx0ZXJcclxuICAgIHRoaXMuX3N1YnMucHVzaChcclxuICAgICAgdGhpcy5pdGVtLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAgIC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIGRlYm91bmNlVGltZSgzMDApKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKGl0ZW0pID0+IHtcclxuICAgICAgICAgIHRoaXMuaXRlbVBhcnQuc2V0VmFsdWUobnVsbCk7XHJcbiAgICAgICAgICB0aGlzLml0ZW1QYXJ0cyA9IGl0ZW0/LnBhcnRzIHx8IFtdO1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXIgPSB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMuZmlsdGVyLFxyXG4gICAgICAgICAgICBpdGVtSWQ6IGl0ZW0/LmlkLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyB3aGVuZXZlciBpdGVtUGFydCBjaGFuZ2VzLCB1cGRhdGUgdGFyZ2V0IGFuZCBldmVudHVhbGx5IGdpZFxyXG4gICAgdGhpcy5fc3Vicy5wdXNoKFxyXG4gICAgICB0aGlzLml0ZW1QYXJ0LnZhbHVlQ2hhbmdlc1xyXG4gICAgICAgIC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIGRlYm91bmNlVGltZSgzMDApKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHBhcnQpID0+IHtcclxuICAgICAgICAgIGlmICghdGhpcy5naWQudmFsdWUgfHwgdGhpcy5naWQucHJpc3RpbmUpIHtcclxuICAgICAgICAgICAgdGhpcy5naWQuc2V0VmFsdWUodGhpcy5idWlsZEdpZCgpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuZmlsdGVyID0ge1xyXG4gICAgICAgICAgICAuLi50aGlzLmZpbHRlcixcclxuICAgICAgICAgICAgcGFydElkOiBwYXJ0Py5pZCxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZVRhcmdldCgpO1xyXG4gICAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIC8vIHdoZW5ldmVyIHBhcnRUeXBlS2V5IGNoYW5nZXMsIHVwZGF0ZSBmaWx0ZXIncyBvcHRpb25zXHJcbiAgICB0aGlzLl9zdWJzLnB1c2goXHJcbiAgICAgIHRoaXMucGFydFR5cGVLZXkudmFsdWVDaGFuZ2VzXHJcbiAgICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgZGVib3VuY2VUaW1lKDMwMCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoa2V5KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnBpbkZpbHRlck9wdGlvbnMgPSBrZXlcclxuICAgICAgICAgICAgPyB0aGlzLmxvb2t1cERlZmluaXRpb25zIVtrZXldXHJcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xyXG4gICAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIC8vIHdoZW5ldmVyIGV4dGVybmFsIGNoYW5nZXMsIHNldCByZXF1aXJlZCB2YWxpZGF0b3IgaW4gbGFiZWxcclxuICAgIC8vICh0cnVlIGZvciBleHRlcm5hbCwgZmFsc2UgZm9yIGludGVybmFsKVxyXG4gICAgdGhpcy5fc3Vicy5wdXNoKFxyXG4gICAgICB0aGlzLmV4dGVybmFsLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAgIC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIGRlYm91bmNlVGltZSgzMDApKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKGV4dGVybmFsKSA9PiB7XHJcbiAgICAgICAgICBpZiAoZXh0ZXJuYWwpIHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbC5zZXRWYWxpZGF0b3JzKFtcclxuICAgICAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxyXG4gICAgICAgICAgICAgIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDMwMCksXHJcbiAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbC5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLm1heExlbmd0aCgzMDApXSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmxhYmVsLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBsb2FkIG1vZGVsLXR5cGVzIHRoZXNhdXJ1cyBlbnRyaWVzXHJcbiAgICB0aGlzLl90aGVzU2VydmljZS5nZXRUaGVzYXVydXMoJ21vZGVsLXR5cGVzJywgdHJ1ZSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHQpID0+IHtcclxuICAgICAgICB0aGlzLm1vZGVsRW50cmllcyA9IHQuZW50cmllcyB8fCBbXTtcclxuICAgICAgICBpZiAodGhpcy5tb2RlbEVudHJpZXM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgdGhpcy5zZXR1cEtleXMoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5mb3JjZUJ5SXRlbSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICB0aGlzLmZvcmNlQnlJdGVtKCk7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fc3Vicy5sZW5ndGg7IGkrKykge1xyXG4gICAgICB0aGlzLl9zdWJzW2ldLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkR2lkKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgLy8gdGhlIEdJRCBpcyB0aGUgcGFydCBJRCBpZiBhbnksIG9yIHRoZSBpdGVtIElELCBmb2xsb3dlZCBieVxyXG4gICAgLy8gdGhlIHBpbidzIHZhbHVlICg9RUlEKVxyXG4gICAgY29uc3QgcGluID0gdGhpcy5sb29rdXBEYXRhPy5waW47XHJcbiAgICBpZiAoIXBpbj8udmFsdWUpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcGluLnBhcnRJZFxyXG4gICAgICA/IGBQJHtwaW4ucGFydElkfS8ke3Bpbi52YWx1ZX1gXHJcbiAgICAgIDogYEkke3Bpbi5pdGVtSWR9LyR7cGluLnZhbHVlfWA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkTGFiZWwoKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICBpZiAoIXRoaXMubG9va3VwRGF0YT8ucGluKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc2I6IHN0cmluZ1tdID0gW107XHJcbiAgICAvLyBwaW4gdmFsdWVcclxuICAgIGlmICh0aGlzLmxvb2t1cERhdGEucGluLnZhbHVlKSB7XHJcbiAgICAgIHNiLnB1c2godGhpcy5sb29rdXBEYXRhLnBpbi52YWx1ZSk7XHJcbiAgICAgIHNiLnB1c2goJyB8ICcpO1xyXG4gICAgfVxyXG4gICAgLy8gaXRlbSB0aXRsZVxyXG4gICAgc2IucHVzaCh0aGlzLmxvb2t1cERhdGEuaXRlbT8udGl0bGUgfHwgdGhpcy5sb29rdXBEYXRhLnBpbj8uaXRlbUlkKTtcclxuICAgIC8vIHBhcnQgdHlwZSBhbmQgcm9sZVxyXG4gICAgaWYgKHRoaXMubG9va3VwRGF0YS5waW4ucGFydFR5cGVJZCkge1xyXG4gICAgICBjb25zdCBlID0gdGhpcy5tb2RlbEVudHJpZXM/LmZpbmQoXHJcbiAgICAgICAgKGUpID0+IGUuaWQgPT09IHRoaXMubG9va3VwRGF0YSEucGluLnBhcnRUeXBlSWRcclxuICAgICAgKTtcclxuICAgICAgc2IucHVzaCgnICgnKTtcclxuICAgICAgc2IucHVzaChlPy52YWx1ZSB8fCB0aGlzLmxvb2t1cERhdGEucGluLnBhcnRUeXBlSWQpO1xyXG4gICAgICBpZiAodGhpcy5sb29rdXBEYXRhLnBpbi5yb2xlSWQpIHtcclxuICAgICAgICBzYi5wdXNoKGAsICR7dGhpcy5sb29rdXBEYXRhLnBpbi5yb2xlSWR9YCk7XHJcbiAgICAgIH1cclxuICAgICAgc2IucHVzaCgnKScpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHNiLmpvaW4oJycpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRUYXJnZXQoKTogUGluVGFyZ2V0IHtcclxuICAgIGlmICh0aGlzLmV4dGVybmFsLnZhbHVlKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgZ2lkOiB0aGlzLmdpZC52YWx1ZSB8fCAnJyxcclxuICAgICAgICBsYWJlbDogdGhpcy5sYWJlbC52YWx1ZSB8fCAnJyxcclxuICAgICAgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHBpbiA9IHRoaXMubG9va3VwRGF0YT8ucGluO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGdpZDogdGhpcy5naWQudmFsdWUgfHwgJycsXHJcbiAgICAgICAgbGFiZWw6IHRoaXMubGFiZWwudmFsdWUgfHwgJycsXHJcbiAgICAgICAgaXRlbUlkOiBwaW4/Lml0ZW1JZCB8fCAnJyxcclxuICAgICAgICBwYXJ0SWQ6IHBpbj8ucGFydElkIHx8ICcnLFxyXG4gICAgICAgIHBhcnRUeXBlSWQ6IHBpbj8ucGFydFR5cGVJZCB8fCAnJyxcclxuICAgICAgICByb2xlSWQ6IHBpbj8ucm9sZUlkIHx8ICcnLFxyXG4gICAgICAgIG5hbWU6IHBpbj8ubmFtZSB8fCAnJyxcclxuICAgICAgICB2YWx1ZTogcGluPy52YWx1ZSB8fCAnJyxcclxuICAgICAgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlVGFyZ2V0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX25vVGFyZ2V0VXBkYXRlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5leHRlcm5hbC52YWx1ZSkge1xyXG4gICAgICB0aGlzLmdpZC5zZXRWYWx1ZSh0aGlzLmJ1aWxkR2lkKCkpO1xyXG4gICAgICB0aGlzLmdpZC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgIHRoaXMuZ2lkLm1hcmtBc0RpcnR5KCk7XHJcbiAgICAgIHRoaXMubGFiZWwuc2V0VmFsdWUodGhpcy5idWlsZExhYmVsKCkpO1xyXG4gICAgICB0aGlzLmxhYmVsLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgdGhpcy5sYWJlbC5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fdGFyZ2V0ID0gdGhpcy5nZXRUYXJnZXQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlRm9ybSh0YXJnZXQ/OiBQaW5UYXJnZXQpOiB2b2lkIHtcclxuICAgIC8vIGJ1aWxkIHBpbiBpbmZvIGZyb20gdGFyZ2V0XHJcbiAgICBpZiAoIXRhcmdldCkge1xyXG4gICAgICB0aGlzLmxvb2t1cERhdGEgPSB1bmRlZmluZWQ7XHJcbiAgICAgIHRoaXMuaXRlbS5yZXNldCgpO1xyXG4gICAgICB0aGlzLml0ZW1QYXJ0LnJlc2V0KCk7XHJcbiAgICAgIHRoaXMuZ2lkLnJlc2V0KCk7XHJcbiAgICAgIHRoaXMubGFiZWwucmVzZXQoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fbm9UYXJnZXRVcGRhdGUgPSB0cnVlO1xyXG4gICAgdGhpcy5naWQuc2V0VmFsdWUodGFyZ2V0LmdpZCB8fCAnJyk7XHJcbiAgICB0aGlzLmxhYmVsLnNldFZhbHVlKHRhcmdldC5sYWJlbCB8fCAnJyk7XHJcbiAgICB0aGlzLmxvb2t1cERhdGEgPSB7XHJcbiAgICAgIHBpbjoge1xyXG4gICAgICAgIGl0ZW1JZDogdGFyZ2V0Lml0ZW1JZCB8fCAnJyxcclxuICAgICAgICBwYXJ0SWQ6IHRhcmdldC5wYXJ0SWQgfHwgJycsXHJcbiAgICAgICAgcGFydFR5cGVJZDogdGFyZ2V0LnBhcnRUeXBlSWQgfHwgJycsXHJcbiAgICAgICAgcm9sZUlkOiB0YXJnZXQucm9sZUlkIHx8ICcnLFxyXG4gICAgICAgIG5hbWU6IHRhcmdldC5uYW1lIHx8ICcnLFxyXG4gICAgICAgIHZhbHVlOiB0YXJnZXQudmFsdWUgfHwgJycsXHJcbiAgICAgIH0sXHJcbiAgICB9O1xyXG4gICAgLy8gZ2V0IGl0ZW1cclxuICAgIGlmICh0YXJnZXQuaXRlbUlkKSB7XHJcbiAgICAgIHRoaXMuX2l0ZW1TZXJ2aWNlLmdldEl0ZW0odGFyZ2V0Lml0ZW1JZCwgdHJ1ZSkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pdGVtLnNldFZhbHVlKGl0ZW0pO1xyXG4gICAgICAgICAgdGhpcy5mb3JtLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgICB0aGlzLl9ub1RhcmdldFVwZGF0ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5leHRlcm5hbC5zZXRWYWx1ZSghdGFyZ2V0Lm5hbWUpO1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVUYXJnZXQoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKEpTT04uc3RyaW5naWZ5KGVycm9yKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmV4dGVybmFsLnNldFZhbHVlKCF0YXJnZXQubmFtZSk7XHJcbiAgICAgICAgICB0aGlzLl9ub1RhcmdldFVwZGF0ZSA9IGZhbHNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5leHRlcm5hbC5zZXRWYWx1ZSghdGFyZ2V0Lm5hbWUpO1xyXG4gICAgICB0aGlzLl9ub1RhcmdldFVwZGF0ZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnVwZGF0ZVRhcmdldCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FsbGVkIHdoZW4gdGhlIGl0ZW0gbG9va3VwIGNoYW5nZXMgKGl0ZW0gaXMgbG9va2VkIHVwXHJcbiAgICogYnkgaXRzIHRpdGxlKS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBpdGVtIFRoZSBpdGVtIGdvdCBmcm9tIGxvb2t1cC5cclxuICAgKi9cclxuICBwdWJsaWMgb25JdGVtTG9va3VwQ2hhbmdlKGl0ZW06IEl0ZW0pOiB2b2lkIHtcclxuICAgIC8vIGxvYWQgaXRlbSdzIHBhcnRzXHJcbiAgICB0aGlzLl9pdGVtU2VydmljZS5nZXRJdGVtKGl0ZW0uaWQsIHRydWUpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChpKSA9PiB7XHJcbiAgICAgICAgLy8gc2V0dGluZyB0aGUgaXRlbSB3aWxsIHRyaWdnZXIgaXRzIHBhcnRzIHVwZGF0ZVxyXG4gICAgICAgIHRoaXMuaXRlbS5zZXRWYWx1ZShpKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVRhcmdldCgpO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKEpTT04uc3RyaW5naWZ5KGVycm9yKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXRlbVBhcnQuc2V0VmFsdWUobnVsbCk7XHJcbiAgICAgICAgdGhpcy5pdGVtUGFydHMgPSBbXTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVRhcmdldCgpO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWRJdGVtSW5mbyhwaW46IERhdGFQaW5JbmZvKTogdm9pZCB7XHJcbiAgICBmb3JrSm9pbih7XHJcbiAgICAgIGl0ZW06IHRoaXMuX2l0ZW1TZXJ2aWNlLmdldEl0ZW0ocGluLml0ZW1JZCwgZmFsc2UpLFxyXG4gICAgICBwYXJ0OiB0aGlzLl9pdGVtU2VydmljZS5nZXRQYXJ0RnJvbVR5cGVBbmRSb2xlKFxyXG4gICAgICAgIHBpbi5pdGVtSWQsXHJcbiAgICAgICAgTUVUQURBVEFfUEFSVF9JRFxyXG4gICAgICApLFxyXG4gICAgfSlcclxuICAgICAgLnBpcGUodGFrZSgxKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlc3VsdCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb29rdXBEYXRhID0ge1xyXG4gICAgICAgICAgICBwaW46IHBpbixcclxuICAgICAgICAgICAgaXRlbTogcmVzdWx0Lml0ZW0sXHJcbiAgICAgICAgICAgIG1ldGFQYXJ0OiByZXN1bHQucGFydCBhcyBNZXRhZGF0YVBhcnQsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVUYXJnZXQoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9va3VwRGF0YSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgICAgIGVycm9yID8gSlNPTi5zdHJpbmdpZnkoZXJyb3IpIDogJ0Vycm9yIGxvYWRpbmcgaXRlbS9tZXRhZGF0YSdcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYWxsZWQgd2hlbiB0aGUgcGluIGxvb2t1cCBjaGFuZ2UuIEEgcGluIGlzIGxvb2tlZCB1cCBieSBpdHNcclxuICAgKiBuYW1lIGFuZCB2YWx1ZSAoPXRoZSBmaWx0ZXIncyB0ZXh0KSwgYW5kIG9wdGlvbmFsbHkgYnk6XHJcbiAgICogLSBpdHMgaW5kZXggbG9va3VwIGRlZmluaXRpb24gKHNlbGVjdGVkIGJ5IHBhcnRUeXBlS2V5KS5cclxuICAgKiAtIGl0cyBpdGVtIChkZWZpbmVkIGJ5IGl0ZW0sIGluIGZpbHRlcikuXHJcbiAgICogLSBpdHMgcGFydCAoZGVmaW5lZCBieSBpdGVtUGFydCwgaW4gZmlsdGVyKS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBpbmZvIFRoZSBwaW4gaW5mbyBmcm9tIHBpbiBsb29rdXAuXHJcbiAgICovXHJcbiAgcHVibGljIG9uUGluTG9va3VwQ2hhbmdlKGluZm86IERhdGFQaW5JbmZvKTogdm9pZCB7XHJcbiAgICB0aGlzLmxvYWRJdGVtSW5mbyhpbmZvKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkNvcGllZCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3NuYWNrYmFyLm9wZW4oJ0NvcGllZCB0byBjbGlwYm9hcmQnLCAnT0snLCB7XHJcbiAgICAgIGR1cmF0aW9uOiAxNTAwLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLmVkaXRvckNsb3NlLmVtaXQoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzYXZlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZm9ybS5pbnZhbGlkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuX3RhcmdldCA9IHRoaXMuZ2V0VGFyZ2V0KCk7XHJcbiAgICB0aGlzLnRhcmdldENoYW5nZS5lbWl0KHRoaXMuX3RhcmdldCk7XHJcbiAgfVxyXG59XHJcbiIsIjxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiIChzdWJtaXQpPVwic2F2ZSgpXCI+XHJcbiAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XHJcbiAgICA8IS0tIGV4dGVybmFsIC0tPlxyXG4gICAgPG1hdC1jaGVja2JveCBbZm9ybUNvbnRyb2xdPVwiZXh0ZXJuYWxcIj5leHRlcm5hbDwvbWF0LWNoZWNrYm94PlxyXG4gICAgPCEtLSBtb2RlIHN3aXRjaGVyIC0tPlxyXG4gICAgPGRpdiAqbmdJZj1cIiFleHRlcm5hbC52YWx1ZVwiPlxyXG4gICAgICA8bWF0LWNoZWNrYm94IFtmb3JtQ29udHJvbF09XCJieVR5cGVNb2RlXCIgKm5nSWY9XCJjYW5Td2l0Y2hNb2RlXCI+XHJcbiAgICAgICAgYnkgdHlwZTwvbWF0LWNoZWNrYm94XHJcbiAgICAgID5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIj5cclxuICAgIDwhLS0gbGFiZWwgLS0+XHJcbiAgICA8ZGl2PlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJleHRlcm5hbC52YWx1ZSB8fCBjYW5FZGl0VGFyZ2V0XCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD5sYWJlbDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPVwibGFiZWxcIiAvPlxyXG4gICAgICAgIDxtYXQtZXJyb3JcclxuICAgICAgICAgICpuZ0lmPVwiJGFueShsYWJlbCkuZXJyb3JzPy5yZXF1aXJlZCAmJiAobGFiZWwuZGlydHkgfHwgbGFiZWwudG91Y2hlZClcIlxyXG4gICAgICAgICAgPmxhYmVsIHJlcXVpcmVkPC9tYXQtZXJyb3JcclxuICAgICAgICA+XHJcbiAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgJGFueShsYWJlbCkuZXJyb3JzPy5tYXhMZW5ndGggJiYgKGxhYmVsLmRpcnR5IHx8IGxhYmVsLnRvdWNoZWQpXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgICAgPmxhYmVsIHRvbyBsb25nPC9tYXQtZXJyb3JcclxuICAgICAgICA+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICAqbmdJZj1cIiFleHRlcm5hbC52YWx1ZSAmJiAhY2FuRWRpdFRhcmdldCAmJiBsYWJlbC52YWx1ZVwiXHJcbiAgICAgICAgY2xhc3M9XCJpbmZvXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj5sYWJlbDwvc3Bhbj57eyBsYWJlbC52YWx1ZSB9fVxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gZ2lkIC0tPlxyXG4gICAgPGRpdj5cclxuICAgICAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwiZXh0ZXJuYWwudmFsdWUgfHwgY2FuRWRpdFRhcmdldFwiPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+R0lEPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPGlucHV0IG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJnaWRcIiAvPlxyXG4gICAgICAgIDxtYXQtZXJyb3JcclxuICAgICAgICAgICpuZ0lmPVwiJGFueShnaWQpLmVycm9ycz8ucmVxdWlyZWQgJiYgKGdpZC5kaXJ0eSB8fCBnaWQudG91Y2hlZClcIlxyXG4gICAgICAgICAgPkdJRCByZXF1aXJlZDwvbWF0LWVycm9yXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDxtYXQtZXJyb3JcclxuICAgICAgICAgICpuZ0lmPVwiJGFueShnaWQpLmVycm9ycz8ubWF4TGVuZ3RoICYmIChnaWQuZGlydHkgfHwgZ2lkLnRvdWNoZWQpXCJcclxuICAgICAgICAgID5HSUQgdG9vIGxvbmc8L21hdC1lcnJvclxyXG4gICAgICAgID5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgPGRpdiAqbmdJZj1cIiFleHRlcm5hbC52YWx1ZSAmJiAhY2FuRWRpdFRhcmdldCAmJiBnaWQudmFsdWVcIiBjbGFzcz1cImluZm9cIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+R0lEPC9zcGFuPiA8c3BhbiBjbGFzcz1cImdpZFwiPnt7IGdpZC52YWx1ZSB9fTwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBCWSBJVEVNIC0tPlxyXG4gIDxkaXYgKm5nSWY9XCIhZXh0ZXJuYWwudmFsdWVcIj5cclxuICAgIDxmaWVsZHNldCAqbmdJZj1cIiFieVR5cGVNb2RlLnZhbHVlXCIgY2xhc3M9XCJmb3JtLXJvd1wiPlxyXG4gICAgICA8bGVnZW5kPnBpbiBmaWx0ZXJzPC9sZWdlbmQ+XHJcbiAgICAgIDwhLS0gaXRlbSBmaWx0ZXIgLS0+XHJcbiAgICAgIDxjYWRtdXMtcmVmLWxvb2t1cFxyXG4gICAgICAgIFtzZXJ2aWNlXT1cIml0ZW1Mb29rdXBTZXJ2aWNlXCJcclxuICAgICAgICBsYWJlbD1cIml0ZW1cIlxyXG4gICAgICAgIChpdGVtQ2hhbmdlKT1cIm9uSXRlbUxvb2t1cENoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgPjwvY2FkbXVzLXJlZi1sb29rdXA+XHJcblxyXG4gICAgICA8IS0tIHBhcnQgZmlsdGVyIC0tPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJpdGVtUGFydHMubGVuZ3RoXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD5wYXJ0PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1zZWxlY3QgW2Zvcm1Db250cm9sXT1cIml0ZW1QYXJ0XCI+XHJcbiAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwibnVsbFwiPihhbnkpPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHAgb2YgaXRlbVBhcnRzXCIgW3ZhbHVlXT1cInBcIj57e1xyXG4gICAgICAgICAgICBwLnR5cGVJZCB8IGZsYXRMb29rdXAgOiBtb2RlbEVudHJpZXMgOiBcImlkXCIgOiBcInZhbHVlXCJcclxuICAgICAgICAgIH19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZmllbGRzZXQ+XHJcblxyXG4gICAgPCEtLSBCWSBUWVBFIC0tPlxyXG4gICAgPGRpdiAqbmdJZj1cImJ5VHlwZU1vZGUudmFsdWVcIj5cclxuICAgICAgPCEtLSBwYXIgdHlwZSBmaWx0ZXIgLS0+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZCAqbmdJZj1cInBhcnRUeXBlS2V5cz8ubGVuZ3RoXCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD5wYXJ0IHR5cGU8L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LXNlbGVjdCBbZm9ybUNvbnRyb2xdPVwicGFydFR5cGVLZXlcIj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBrIG9mIHBhcnRUeXBlS2V5c1wiIFt2YWx1ZV09XCJrXCI+e3tcclxuICAgICAgICAgICAga1xyXG4gICAgICAgICAgfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBQSU4gLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwicGFydFR5cGVLZXkudmFsdWVcIj5cclxuICAgICAgPCEtLSBwaW4gbG9va3VwIC0tPlxyXG4gICAgICA8Y2FkbXVzLXJlZi1sb29rdXBcclxuICAgICAgICBbc2VydmljZV09XCJwaW5Mb29rdXBTZXJ2aWNlXCJcclxuICAgICAgICBbYmFzZUZpbHRlcl09XCJmaWx0ZXJcIlxyXG4gICAgICAgIFtvcHRpb25zXT1cInBpbkZpbHRlck9wdGlvbnNcIlxyXG4gICAgICAgIGxhYmVsPVwicGluXCJcclxuICAgICAgICAoaXRlbUNoYW5nZSk9XCJvblBpbkxvb2t1cENoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgPjwvY2FkbXVzLXJlZi1sb29rdXA+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIGRhdGEgLS0+XHJcbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBpZD1cImRhdGFcIiAqbmdJZj1cImxvb2t1cERhdGE/LnBpbj8ubmFtZVwiPlxyXG4gICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+cGluIGRhdGE8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgICA8IS0tIHRhYmxlIC0tPlxyXG4gICAgICA8dGFibGU+XHJcbiAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgPHRoPjwvdGg+XHJcbiAgICAgICAgICA8dGg+c291cmNlPC90aD5cclxuICAgICAgICAgIDx0aD52YWx1ZTwvdGg+XHJcbiAgICAgICAgPC90aGVhZD5cclxuICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICA8IS0tIHBpbiAtLT5cclxuICAgICAgICAgIDx0ciAqbmdJZj1cImxvb2t1cERhdGE/LnBpbj8udmFsdWVcIj5cclxuICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgW2Nka0NvcHlUb0NsaXBib2FyZF09XCJsb29rdXBEYXRhIS5waW4hLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgIChjZGtDb3B5VG9DbGlwYm9hcmRDb3BpZWQpPVwib25Db3BpZWQoKVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmNvbnRlbnRfY29weTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZD5waW48L3RkPlxyXG4gICAgICAgICAgICA8dGQ+e3sgbG9va3VwRGF0YSEucGluLnZhbHVlIH19PC90ZD5cclxuICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8IS0tIGl0ZW0gSUQgLS0+XHJcbiAgICAgICAgICA8dHIgKm5nSWY9XCJsb29rdXBEYXRhPy5waW4/Lml0ZW1JZFwiPlxyXG4gICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICBbY2RrQ29weVRvQ2xpcGJvYXJkXT1cImxvb2t1cERhdGEhLnBpbiEuaXRlbUlkXCJcclxuICAgICAgICAgICAgICAgIChjZGtDb3B5VG9DbGlwYm9hcmRDb3BpZWQpPVwib25Db3BpZWQoKVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmNvbnRlbnRfY29weTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZD5pdGVtIElEPC90ZD5cclxuICAgICAgICAgICAgPHRkPnt7IGxvb2t1cERhdGEhLnBpbi5pdGVtSWQgfX08L3RkPlxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICAgIDwhLS0gaXRlbSB0aXRsZSAtLT5cclxuICAgICAgICAgIDx0ciAqbmdJZj1cImxvb2t1cERhdGE/Lml0ZW0/LnRpdGxlXCI+XHJcbiAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgIFtjZGtDb3B5VG9DbGlwYm9hcmRdPVwibG9va3VwRGF0YSEuaXRlbSEudGl0bGVcIlxyXG4gICAgICAgICAgICAgICAgKGNka0NvcHlUb0NsaXBib2FyZENvcGllZCk9XCJvbkNvcGllZCgpXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y29udGVudF9jb3B5PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPHRkPml0ZW0gdGl0bGU8L3RkPlxyXG4gICAgICAgICAgICA8dGQ+e3sgbG9va3VwRGF0YSEuaXRlbSEudGl0bGUgfX08L3RkPlxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICAgIDwhLS0gcGFydCBJRCAtLT5cclxuICAgICAgICAgIDx0ciAqbmdJZj1cImxvb2t1cERhdGE/LnBpbj8ucGFydElkXCI+XHJcbiAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgIFtjZGtDb3B5VG9DbGlwYm9hcmRdPVwibG9va3VwRGF0YSEucGluIS5wYXJ0SWRcIlxyXG4gICAgICAgICAgICAgICAgKGNka0NvcHlUb0NsaXBib2FyZENvcGllZCk9XCJvbkNvcGllZCgpXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y29udGVudF9jb3B5PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPHRkPnBhcnQgSUQ8L3RkPlxyXG4gICAgICAgICAgICA8dGQ+e3sgbG9va3VwRGF0YSEucGluLnBhcnRJZCB9fTwvdGQ+XHJcbiAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPCEtLSBwYXJ0IHR5cGUgSUQgLS0+XHJcbiAgICAgICAgICA8dHIgKm5nSWY9XCJsb29rdXBEYXRhPy5waW4/LnBhcnRUeXBlSWRcIj5cclxuICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgW2Nka0NvcHlUb0NsaXBib2FyZF09XCJsb29rdXBEYXRhIS5waW4hLnBhcnRUeXBlSWRcIlxyXG4gICAgICAgICAgICAgICAgKGNka0NvcHlUb0NsaXBib2FyZENvcGllZCk9XCJvbkNvcGllZCgpXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y29udGVudF9jb3B5PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPHRkPnBhcnQgdHlwZSBJRDwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZD57eyBsb29rdXBEYXRhIS5waW4hLnBhcnRUeXBlSWQgfX08L3RkPlxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICAgIDwhLS0gcGFydCByb2xlIElEIC0tPlxyXG4gICAgICAgICAgPHRyICpuZ0lmPVwibG9va3VwRGF0YT8ucGluPy5yb2xlSWRcIj5cclxuICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgW2Nka0NvcHlUb0NsaXBib2FyZF09XCJsb29rdXBEYXRhIS5waW4hLnJvbGVJZCFcIlxyXG4gICAgICAgICAgICAgICAgKGNka0NvcHlUb0NsaXBib2FyZENvcGllZCk9XCJvbkNvcGllZCgpXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y29udGVudF9jb3B5PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPHRkPnBhcnQgcm9sZSBJRDwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZD57eyBsb29rdXBEYXRhIS5waW4hLnJvbGVJZCB9fTwvdGQ+XHJcbiAgICAgICAgICA8L3RyPlxyXG5cclxuICAgICAgICAgIDwhLS0gcGFydCdzIG1ldGFkYXRhIC0tPlxyXG4gICAgICAgICAgPHRyXHJcbiAgICAgICAgICAgICpuZ0Zvcj1cIlxyXG4gICAgICAgICAgICAgIGxldCBtIG9mIGxvb2t1cERhdGE/Lm1ldGFQYXJ0Py5tZXRhZGF0YSB8fCBbXTtcclxuICAgICAgICAgICAgICBsZXQgaSA9IGluZGV4XHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgIFtjZGtDb3B5VG9DbGlwYm9hcmRdPVwibS52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAoY2RrQ29weVRvQ2xpcGJvYXJkQ29waWVkKT1cIm9uQ29waWVkKClcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jb250ZW50X2NvcHk8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJtZXRhZGF0YVwiPnt7IG0ubmFtZSB9fTwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cIm1ldGFkYXRhXCI+e3sgbS52YWx1ZSB9fTwvdGQ+XHJcbiAgICAgICAgICA8L3RyPlxyXG4gICAgICAgIDwvdGJvZHk+XHJcbiAgICAgIDwvdGFibGU+XHJcbiAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gYnV0dG9ucyAtLT5cclxuICA8ZGl2PlxyXG4gICAgPGJ1dHRvbiBtYXQtZmxhdC1idXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJjbG9zZSgpXCI+XHJcbiAgICAgIDxtYXQtaWNvbiBjb2xvcj1cIndhcm5cIj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b24gbWF0LWZsYXQtYnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBbZGlzYWJsZWRdPVwiZm9ybS5pbnZhbGlkXCI+XHJcbiAgICAgIDxtYXQtaWNvbiBjb2xvcj1cInByaW1hcnlcIj5jaGVja19jaXJjbGU8L21hdC1pY29uPiB0YXJnZXRcclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L2Zvcm0+XHJcbiJdfQ==
432
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGluLXRhcmdldC1sb29rdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlybWlkb24vY2FkbXVzLXJlZnMtYXNzZXJ0ZWQtaWRzL3NyYy9saWIvcGluLXRhcmdldC1sb29rdXAvcGluLXRhcmdldC1sb29rdXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlybWlkb24vY2FkbXVzLXJlZnMtYXNzZXJ0ZWQtaWRzL3NyYy9saWIvcGluLXRhcmdldC1sb29rdXAvcGluLXRhcmdldC1sb29rdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUlMLFVBQVUsR0FDWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFFTCxZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLFFBQVEsRUFDUixJQUFJLEdBQ0wsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFtQmQsNEJBQTRCO0FBQzVCLE1BQU0sZ0JBQWdCLEdBQUcsbUJBQW1CLENBQUM7QUFtQzdDOzs7Ozs7R0FNRztBQUNILE1BS2Esd0JBQXdCO0lBTW5DOzs7T0FHRztJQUNILElBQ1csYUFBYTtRQUN0QixPQUFPLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDO0lBQ2hDLENBQUM7SUFDRCxJQUFXLGFBQWEsQ0FBQyxLQUEwQjtRQUNqRCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNwQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO1NBQ25DO2FBQU07WUFDTCxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLENBQUM7WUFDekMs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QUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkMsQ0FBQzs4R0FqZVUsd0JBQXdCLGtCQW9HekIsd0JBQXdCO2tHQXBHdkIsd0JBQXdCLHVWQ3hGckMsb2dSQXlQQTs7U0RqS2Esd0JBQXdCOzJGQUF4Qix3QkFBd0I7a0JBTHBDLFNBQVM7K0JBQ0UsMEJBQTBCOzswQkF3R2pDLE1BQU07MkJBQUMsd0JBQXdCOzhOQXpGdkIsYUFBYTtzQkFEdkIsS0FBSztnQkFpQkMsYUFBYTtzQkFEbkIsS0FBSztnQkFPQyxhQUFhO3NCQURuQixLQUFLO2dCQVdDLGlCQUFpQjtzQkFEdkIsS0FBSztnQkFPSyxNQUFNO3NCQURoQixLQUFLO2dCQWdCQyxrQkFBa0I7c0JBRHhCLEtBQUs7Z0JBT0MsV0FBVztzQkFEakIsTUFBTTtnQkFPQSxZQUFZO3NCQURsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEluamVjdCxcclxuICBJbnB1dCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICBGb3JtQnVpbGRlcixcclxuICBGb3JtQ29udHJvbCxcclxuICBGb3JtR3JvdXAsXHJcbiAgVmFsaWRhdG9ycyxcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7XHJcbiAgU3Vic2NyaXB0aW9uLFxyXG4gIGRlYm91bmNlVGltZSxcclxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcclxuICBmb3JrSm9pbixcclxuICB0YWtlLFxyXG59IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XHJcblxyXG5pbXBvcnQgeyBJdGVtU2VydmljZSwgVGhlc2F1cnVzU2VydmljZSB9IGZyb20gJ0BteXJtaWRvbi9jYWRtdXMtYXBpJztcclxuaW1wb3J0IHtcclxuICBEYXRhUGluSW5mbyxcclxuICBJbmRleExvb2t1cERlZmluaXRpb24sXHJcbiAgSW5kZXhMb29rdXBEZWZpbml0aW9ucyxcclxuICBJdGVtLFxyXG4gIFBhcnQsXHJcbiAgVGhlc2F1cnVzRW50cnksXHJcbn0gZnJvbSAnQG15cm1pZG9uL2NhZG11cy1jb3JlJztcclxuXHJcbmltcG9ydCB7XHJcbiAgUGluUmVmTG9va3VwRmlsdGVyLFxyXG4gIFBpblJlZkxvb2t1cFNlcnZpY2UsXHJcbn0gZnJvbSAnLi4vc2VydmljZXMvcGluLXJlZi1sb29rdXAuc2VydmljZSc7XHJcbmltcG9ydCB7IEl0ZW1SZWZMb29rdXBTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvaXRlbS1yZWYtbG9va3VwLnNlcnZpY2UnO1xyXG5cclxuLy8gZnJvbSBDYWRtdXMgZ2VuZXJhbCBwYXJ0c1xyXG5jb25zdCBNRVRBREFUQV9QQVJUX0lEID0gJ2l0LnZlZHBoLm1ldGFkYXRhJztcclxuaW50ZXJmYWNlIE1ldGFkYXRhUGFydCBleHRlbmRzIFBhcnQge1xyXG4gIG1ldGFkYXRhOiB7XHJcbiAgICB0eXBlPzogc3RyaW5nO1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgdmFsdWU6IHN0cmluZztcclxuICB9W107XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBQaW4gbG9va3VwIGRhdGEgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBjb21wb25lbnQuXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFBpbkxvb2t1cERhdGEge1xyXG4gIHBpbjogRGF0YVBpbkluZm87XHJcbiAgaXRlbT86IEl0ZW07XHJcbiAgbWV0YVBhcnQ/OiBNZXRhZGF0YVBhcnQ7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBIHBpbi1iYXNlZCB0YXJnZXQuIFRoaXMgaW5jbHVkZXMgcGluJ3MgbmFtZSBhbmQgdmFsdWUsIGFuZFxyXG4gKiB0aGUgaXRlbSdzIElEIGFuZCBvcHRpb25hbCBwYXJ0IElEcy4gVGhlIGxhYmVsIGlzIGEgdXNlciBmcmllbmRseVxyXG4gKiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRhcmdldCwgd2hpbGUgdGhlIGdpZCBpcyBhIGdsb2JhbGx5XHJcbiAqIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgdGFyZ2V0LlxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBQaW5UYXJnZXQge1xyXG4gIGdpZDogc3RyaW5nO1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgaXRlbUlkPzogc3RyaW5nO1xyXG4gIHBhcnRJZD86IHN0cmluZztcclxuICBwYXJ0VHlwZUlkPzogc3RyaW5nO1xyXG4gIHJvbGVJZD86IHN0cmluZztcclxuICBuYW1lPzogc3RyaW5nO1xyXG4gIHZhbHVlPzogc3RyaW5nO1xyXG59XHJcblxyXG4vKlxyXG4gKiBTY29wZWQgcGluLWJhc2VkIGxvb2t1cCBjb21wb25lbnQuIFRoaXMgY29tcG9uZW50IHByb3ZpZGVzIGEgbGlzdFxyXG4gKiBvZiBwaW4tYmFzZWQgc2VhcmNoZXMsIHdpdGggYSBsb29rdXAgY29udHJvbC4gV2hlbmV2ZXIgdGhlIHVzZXJcclxuICogcGlja3MgYSBwaW4gdmFsdWUsIGhlIGdldHMgdGhlIGRldGFpbHMgYWJvdXQgaXRzIGl0ZW0gYW5kIHBhcnQsIGFuZFxyXG4gKiBpdGVtJ3MgbWV0YWRhdGEgcGFydCwgaWYgYW55LiBIZSBjYW4gdGhlbiB1c2UgdGhlc2UgZGF0YSB0byBidWlsZFxyXG4gKiBzb21lIEVJRCBieSB2YXJpb3VzbHkgYXNzZW1ibGluZyB0aGVzZSBjb21wb25lbnRzLlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjYWRtdXMtcGluLXRhcmdldC1sb29rdXAnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9waW4tdGFyZ2V0LWxvb2t1cC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcGluLXRhcmdldC1sb29rdXAuY29tcG9uZW50LmNzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGluVGFyZ2V0TG9va3VwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgX3N1YnM6IFN1YnNjcmlwdGlvbltdO1xyXG4gIHByaXZhdGUgX3RhcmdldDogUGluVGFyZ2V0IHwgdW5kZWZpbmVkO1xyXG4gIHByaXZhdGUgX25vVGFyZ2V0VXBkYXRlPzogYm9vbGVhbjtcclxuICBwcml2YXRlIF9zdGFydFdpdGhCeVR5cGVNb2RlPzogYm9vbGVhbjtcclxuXHJcbiAgLyoqXHJcbiAgICogVHJ1ZSB3aGVuIHRoZSBieS10eXBlIHBpbiBsb29rdXAgbW9kZSBpcyBhY3RpdmUuXHJcbiAgICogVXNlciBjYW4gY2hhbmdlIG1vZGUgdW5sZXNzIG1vZGVTd2l0Y2hpbmcgaXMgZmFsc2UuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZ2V0IHBpbkJ5VHlwZU1vZGUoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5ieVR5cGVNb2RlPy52YWx1ZTtcclxuICB9XHJcbiAgcHVibGljIHNldCBwaW5CeVR5cGVNb2RlKHZhbHVlOiBib29sZWFuIHwgdW5kZWZpbmVkKSB7XHJcbiAgICBpZiAoIXRoaXMuYnlUeXBlTW9kZSkge1xyXG4gICAgICB0aGlzLl9zdGFydFdpdGhCeVR5cGVNb2RlID0gdmFsdWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmJ5VHlwZU1vZGUuc2V0VmFsdWUodmFsdWUgfHwgZmFsc2UpO1xyXG4gICAgICB0aGlzLmJ5VHlwZU1vZGUudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJ1ZSB3aGVuIHRoZSB1c2VyIGNhbiBzd2l0Y2ggYmV0d2VlbiBieS10eXBlIGFuZCBieS1pdGVtIG1vZGUuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgY2FuU3dpdGNoTW9kZT86IGJvb2xlYW47XHJcbiAgLyoqXHJcbiAgICogVHJ1ZSB3aGVuIHRoZSB1c2VyIGNhbiBlZGl0IHRoZSB0YXJnZXQncyBnaWQvbGFiZWwgZm9yIGludGVybmFsXHJcbiAgICogdGFyZ2V0cy5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBjYW5FZGl0VGFyZ2V0PzogYm9vbGVhbjtcclxuICAvKipcclxuICAgKiBUaGUgbG9va3VwIGRlZmluaXRpb25zIHRvIGJlIHVzZWQgZm9yIHRoZSBieS10eXBlIGxvb2t1cC4gSWZcclxuICAgKiBub3Qgc3BlY2lmaWVkLCB0aGUgbG9va3VwIGRlZmluaXRpb25zIHdpbGwgYmUgZ290IHZpYSBpbmplY3Rpb25cclxuICAgKiB3aGVuIGF2YWlsYWJsZTsgaWYgdGhlIGluamVjdGVkIGRlZmluaXRpb25zIGFyZSBlbXB0eSwgdGhlXHJcbiAgICogbG9va3VwIGRlZmluaXRpb25zIHdpbGwgYmUgYnVpbHQgZnJvbSB0aGUgbW9kZWwtdHlwZXMgdGhlc2F1cnVzO1xyXG4gICAqIGlmIHRoaXMgaXMgbm90IGF2YWlsYWJsZSBlaXRoZXIsIHRoZSBieS10eXBlIGxvb2t1cCB3aWxsIGJlXHJcbiAgICogZGlzYWJsZWQuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgbG9va3VwRGVmaW5pdGlvbnM/OiBJbmRleExvb2t1cERlZmluaXRpb25zO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgdGFyZ2V0IHRvIGJlIGVkaXRlZC5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgdGFyZ2V0KCk6IFBpblRhcmdldCB8IHVuZGVmaW5lZCB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RhcmdldDtcclxuICB9XHJcbiAgcHVibGljIHNldCB0YXJnZXQodmFsdWU6IFBpblRhcmdldCB8IHVuZGVmaW5lZCB8IG51bGwpIHtcclxuICAgIGlmICh0aGlzLl90YXJnZXQgPT09IHZhbHVlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuX3RhcmdldCA9IHZhbHVlIHx8IHVuZGVmaW5lZDtcclxuICAgIHRoaXMudXBkYXRlRm9ybSh0aGlzLl90YXJnZXQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHBhcnQgdHlwZSBrZXkgd2hlbiB0aGUgYnktdHlwZSBtb2RlIGlzIGFjdGl2ZS5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBkZWZhdWx0UGFydFR5cGVLZXk/OiBzdHJpbmcgfCBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiBFbWl0dGVkIHdoZW4gdXNlciBjbG9zZXMgdGhlIGVkaXRvci5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgZWRpdG9yQ2xvc2U6IEV2ZW50RW1pdHRlcjxhbnk+O1xyXG4gIC8qKlxyXG4gICAqIEVtaXR0ZWQgd2hlbmV2ZXIgdGhlIHRhcmdldCBjaGFuZ2VzLlxyXG4gICAqIFRoZSBldmVudCdzIHZhbHVlIGlzIHRoZSBuZXcgdGFyZ2V0LlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyB0YXJnZXRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxQaW5UYXJnZXQ+O1xyXG5cclxuICAvLyBieSB0eXBlXHJcbiAgcHVibGljIG1vZGVsRW50cmllczogVGhlc2F1cnVzRW50cnlbXTtcclxuICBwdWJsaWMgcGFydFR5cGVLZXlzOiBzdHJpbmdbXTtcclxuICAvLyBieSBpdGVtXHJcbiAgcHVibGljIGl0ZW1QYXJ0czogUGFydFtdO1xyXG4gIC8vIGZvcm0gLSBieSBpdGVtXHJcbiAgcHVibGljIGl0ZW06IEZvcm1Db250cm9sPEl0ZW0gfCBudWxsPjtcclxuICBwdWJsaWMgaXRlbVBhcnQ6IEZvcm1Db250cm9sPFBhcnQgfCBudWxsPjtcclxuICAvLyBmb3JtIC0gYnkgdHlwZVxyXG4gIHB1YmxpYyBwYXJ0VHlwZUtleTogRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD47XHJcbiAgLy8gZm9ybSAtIGJvdGhcclxuICBwdWJsaWMgZ2lkOiBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPjtcclxuICBwdWJsaWMgbGFiZWw6IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+O1xyXG4gIHB1YmxpYyBieVR5cGVNb2RlOiBGb3JtQ29udHJvbDxib29sZWFuPjtcclxuICBwdWJsaWMgZXh0ZXJuYWw6IEZvcm1Db250cm9sPGJvb2xlYW4+O1xyXG4gIHB1YmxpYyBmb3JtOiBGb3JtR3JvdXA7XHJcblxyXG4gIHB1YmxpYyBmaWx0ZXI6IFBpblJlZkxvb2t1cEZpbHRlcjtcclxuICBwdWJsaWMgcGluRmlsdGVyT3B0aW9ucz86IEluZGV4TG9va3VwRGVmaW5pdGlvbjtcclxuICBwdWJsaWMgbG9va3VwRGF0YT86IFBpbkxvb2t1cERhdGE7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdCgnaW5kZXhMb29rdXBEZWZpbml0aW9ucycpXHJcbiAgICBwcml2YXRlIF9wcmVzZXRMb29rdXBEZWZzOiBJbmRleExvb2t1cERlZmluaXRpb25zLFxyXG4gICAgcHVibGljIGl0ZW1Mb29rdXBTZXJ2aWNlOiBJdGVtUmVmTG9va3VwU2VydmljZSxcclxuICAgIHB1YmxpYyBwaW5Mb29rdXBTZXJ2aWNlOiBQaW5SZWZMb29rdXBTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaXRlbVNlcnZpY2U6IEl0ZW1TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfdGhlc1NlcnZpY2U6IFRoZXNhdXJ1c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zbmFja2JhcjogTWF0U25hY2tCYXIsXHJcbiAgICBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXJcclxuICApIHtcclxuICAgIHRoaXMucGFydFR5cGVLZXlzID0gW107XHJcbiAgICB0aGlzLml0ZW1QYXJ0cyA9IFtdO1xyXG4gICAgdGhpcy5fc3VicyA9IFtdO1xyXG4gICAgdGhpcy5tb2RlbEVudHJpZXMgPSBbXTtcclxuICAgIC8vIHRoaXMgaXMgdGhlIGRlZmF1bHQgZmlsdGVyIGZvciB0aGUgcGluIGxvb2t1cCwgd2hpY2ggd2lsbFxyXG4gICAgLy8gYmUgbWVyZ2VkIHdpdGggdmFsdWVzIHByb3ZpZGVkIGJ5IHVzZXIgaGVyZVxyXG4gICAgdGhpcy5maWx0ZXIgPSB7XHJcbiAgICAgIHRleHQ6ICcnLFxyXG4gICAgICBsaW1pdDogMTAsXHJcbiAgICB9O1xyXG4gICAgLy8gZm9ybVxyXG4gICAgdGhpcy5pdGVtID0gZm9ybUJ1aWxkZXIuY29udHJvbChudWxsKTtcclxuICAgIHRoaXMuaXRlbVBhcnQgPSBmb3JtQnVpbGRlci5jb250cm9sKG51bGwpO1xyXG4gICAgdGhpcy5wYXJ0VHlwZUtleSA9IGZvcm1CdWlsZGVyLmNvbnRyb2wobnVsbCk7XHJcbiAgICB0aGlzLmdpZCA9IGZvcm1CdWlsZGVyLmNvbnRyb2wobnVsbCwgW1xyXG4gICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxyXG4gICAgICBWYWxpZGF0b3JzLm1heExlbmd0aCgzMDApLFxyXG4gICAgXSk7XHJcbiAgICB0aGlzLmxhYmVsID0gZm9ybUJ1aWxkZXIuY29udHJvbChudWxsLCBbXHJcbiAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXHJcbiAgICAgIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDMwMCksXHJcbiAgICBdKTtcclxuICAgIHRoaXMuYnlUeXBlTW9kZSA9IGZvcm1CdWlsZGVyLmNvbnRyb2woZmFsc2UsIHsgbm9uTnVsbGFibGU6IHRydWUgfSk7XHJcbiAgICB0aGlzLmV4dGVybmFsID0gZm9ybUJ1aWxkZXIuY29udHJvbChmYWxzZSwgeyBub25OdWxsYWJsZTogdHJ1ZSB9KTtcclxuICAgIHRoaXMuZm9ybSA9IGZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgaXRlbTogdGhpcy5pdGVtLFxyXG4gICAgICBpdGVtUGFydDogdGhpcy5pdGVtUGFydCxcclxuICAgICAgcGFydFR5cGVLZXk6IHRoaXMucGFydFR5cGVLZXksXHJcbiAgICAgIGdpZDogdGhpcy5naWQsXHJcbiAgICAgIGxhYmVsOiB0aGlzLmxhYmVsLFxyXG4gICAgICBieVR5cGVNb2RlOiB0aGlzLmJ5VHlwZU1vZGUsXHJcbiAgICAgIGV4dGVybmFsOiB0aGlzLmV4dGVybmFsLFxyXG4gICAgfSk7XHJcbiAgICAvLyBldmVudHNcclxuICAgIHRoaXMudGFyZ2V0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxQaW5UYXJnZXQ+KCk7XHJcbiAgICB0aGlzLmVkaXRvckNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZvcmNlQnlJdGVtKCk6IHZvaWQge1xyXG4gICAgdGhpcy5waW5CeVR5cGVNb2RlID0gZmFsc2U7XHJcbiAgICB0aGlzLmNhblN3aXRjaE1vZGUgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0dXBLZXlzKCk6IHZvaWQge1xyXG4gICAgLy8gdXNlIERJIHByZXNldHMgaWYgbm8gbG9va3VwIGRlZmluaXRpb25zXHJcbiAgICBpZiAoIXRoaXMubG9va3VwRGVmaW5pdGlvbnMpIHtcclxuICAgICAgdGhpcy5sb29rdXBEZWZpbml0aW9ucyA9IHRoaXMuX3ByZXNldExvb2t1cERlZnM7XHJcbiAgICB9XHJcbiAgICAvLyBrZXlzIGFyZSBhbGwgdGhlIGRlZmluZWQgbG9va3VwIHNlYXJjaGVzXHJcbiAgICB0aGlzLnBhcnRUeXBlS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMubG9va3VwRGVmaW5pdGlvbnMpO1xyXG5cclxuICAgIC8vIGlmIG5vIGtleXMsIGdldCB0aGVtIGZyb20gdGhlc2F1cnVzIG1vZGVsLXR5cGVzO1xyXG4gICAgLy8gaWYgdGhpcyBpcyBub3QgYXZhaWxhYmxlLCBqdXN0IGZvcmNlIGJ5IGl0ZW0gbW9kZS5cclxuICAgIGlmICghdGhpcy5wYXJ0VHlwZUtleXMubGVuZ3RoKSB7XHJcbiAgICAgIGlmICh0aGlzLm1vZGVsRW50cmllcz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgLy8gc2V0IGxvb2t1cERlZmluaXRpb25zIGZyb20gdGhlc2F1cnVzIGVudHJpZXNcclxuICAgICAgICB0aGlzLmxvb2t1cERlZmluaXRpb25zID0ge307XHJcbiAgICAgICAgdGhpcy5tb2RlbEVudHJpZXMuZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb29rdXBEZWZpbml0aW9ucyFbZS52YWx1ZV0gPSB7XHJcbiAgICAgICAgICAgIG5hbWU6IGUudmFsdWUsXHJcbiAgICAgICAgICAgIHR5cGVJZDogZS5pZCxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy8gc2V0IHR5cGUga2V5cyBmcm9tIHRoZXNhdXJ1cyBlbnRyaWVzXHJcbiAgICAgICAgdGhpcy5wYXJ0VHlwZUtleXMgPSB0aGlzLm1vZGVsRW50cmllcy5tYXAoKGUpID0+IGUudmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaWYgc3RpbGwgbm8ga2V5cywgZm9yY2UgYnkgaXRlbSBtb2RlXHJcbiAgICBpZiAoIXRoaXMucGFydFR5cGVLZXlzLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmZvcmNlQnlJdGVtKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBzZXQgZGVmYXVsdCBrZXlcclxuICAgICAgdGhpcy5wYXJ0VHlwZUtleS5zZXRWYWx1ZShcclxuICAgICAgICB0aGlzLmRlZmF1bHRQYXJ0VHlwZUtleSB8fCB0aGlzLnBhcnRUeXBlS2V5c1swXVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgLy8gc2V0IHN0YXJ0IG1vZGUgaWYgcmVxdWlyZWRcclxuICAgIGlmICh0aGlzLl9zdGFydFdpdGhCeVR5cGVNb2RlKSB7XHJcbiAgICAgIHRoaXMuYnlUeXBlTW9kZS5zZXRWYWx1ZSh0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyB3aGVuZXZlciBpdGVtIGNoYW5nZXMsIHVwZGF0ZSBpdGVtJ3MgcGFydHMgYW5kIGZpbHRlclxyXG4gICAgdGhpcy5fc3Vicy5wdXNoKFxyXG4gICAgICB0aGlzLml0ZW0udmFsdWVDaGFuZ2VzXHJcbiAgICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgZGVib3VuY2VUaW1lKDMwMCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pdGVtUGFydC5zZXRWYWx1ZShudWxsKTtcclxuICAgICAgICAgIHRoaXMuaXRlbVBhcnRzID0gaXRlbT8ucGFydHMgfHwgW107XHJcbiAgICAgICAgICB0aGlzLmZpbHRlciA9IHtcclxuICAgICAgICAgICAgLi4udGhpcy5maWx0ZXIsXHJcbiAgICAgICAgICAgIGl0ZW1JZDogaXRlbT8uaWQsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIC8vIHdoZW5ldmVyIGl0ZW1QYXJ0IGNoYW5nZXMsIHVwZGF0ZSB0YXJnZXQgYW5kIGV2ZW50dWFsbHkgZ2lkXHJcbiAgICB0aGlzLl9zdWJzLnB1c2goXHJcbiAgICAgIHRoaXMuaXRlbVBhcnQudmFsdWVDaGFuZ2VzXHJcbiAgICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgZGVib3VuY2VUaW1lKDMwMCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgocGFydCkgPT4ge1xyXG4gICAgICAgICAgaWYgKCF0aGlzLmdpZC52YWx1ZSB8fCB0aGlzLmdpZC5wcmlzdGluZSkge1xyXG4gICAgICAgICAgICB0aGlzLmdpZC5zZXRWYWx1ZSh0aGlzLmJ1aWxkR2lkKCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5maWx0ZXIgPSB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMuZmlsdGVyLFxyXG4gICAgICAgICAgICBwYXJ0SWQ6IHBhcnQ/LmlkLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHRoaXMudXBkYXRlVGFyZ2V0KCk7XHJcbiAgICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgLy8gd2hlbmV2ZXIgcGFydFR5cGVLZXkgY2hhbmdlcywgdXBkYXRlIGZpbHRlcidzIG9wdGlvbnNcclxuICAgIHRoaXMuX3N1YnMucHVzaChcclxuICAgICAgdGhpcy5wYXJ0VHlwZUtleS52YWx1ZUNoYW5nZXNcclxuICAgICAgICAucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCBkZWJvdW5jZVRpbWUoMzAwKSlcclxuICAgICAgICAuc3Vic2NyaWJlKChrZXkpID0+IHtcclxuICAgICAgICAgIHRoaXMucGluRmlsdGVyT3B0aW9ucyA9IGtleVxyXG4gICAgICAgICAgICA/IHRoaXMubG9va3VwRGVmaW5pdGlvbnMhW2tleV1cclxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgLy8gd2hlbmV2ZXIgZXh0ZXJuYWwgY2hhbmdlcywgc2V0IHJlcXVpcmVkIHZhbGlkYXRvciBpbiBsYWJlbFxyXG4gICAgLy8gKHRydWUgZm9yIGV4dGVybmFsLCBmYWxzZSBmb3IgaW50ZXJuYWwpXHJcbiAgICB0aGlzLl9zdWJzLnB1c2goXHJcbiAgICAgIHRoaXMuZXh0ZXJuYWwudmFsdWVDaGFuZ2VzXHJcbiAgICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgZGVib3VuY2VUaW1lKDMwMCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoZXh0ZXJuYWwpID0+IHtcclxuICAgICAgICAgIGlmIChleHRlcm5hbCkge1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsLnNldFZhbGlkYXRvcnMoW1xyXG4gICAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXHJcbiAgICAgICAgICAgICAgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMzAwKSxcclxuICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKDMwMCldKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMubGFiZWwudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIC8vIGxvYWQgbW9kZWwtdHlwZXMgdGhlc2F1cnVzIGVudHJpZXNcclxuICAgIHRoaXMuX3RoZXNTZXJ2aWNlLmdldFRoZXNhdXJ1cygnbW9kZWwtdHlwZXMnLCB0cnVlKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAodCkgPT4ge1xyXG4gICAgICAgIHRoaXMubW9kZWxFbnRyaWVzID0gdC5lbnRyaWVzIHx8IFtdO1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsRW50cmllcz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLnNldHVwS2V5cygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmZvcmNlQnlJdGVtKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZm9yY2VCeUl0ZW0oKTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9zdWJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHRoaXMuX3N1YnNbaV0udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGRHaWQoKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICAvLyB0aGUgR0lEIGlzIHRoZSBwYXJ0IElEIGlmIGFueSwgb3IgdGhlIGl0ZW0gSUQsIGZvbGxvd2VkIGJ5XHJcbiAgICAvLyB0aGUgcGluJ3MgdmFsdWUgKD1FSUQpXHJcbiAgICBjb25zdCBwaW4gPSB0aGlzLmxvb2t1cERhdGE/LnBpbjtcclxuICAgIGlmICghcGluPy52YWx1ZSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiBwaW4ucGFydElkXHJcbiAgICAgID8gYFAke3Bpbi5wYXJ0SWR9LyR7cGluLnZhbHVlfWBcclxuICAgICAgOiBgSSR7cGluLml0ZW1JZH0vJHtwaW4udmFsdWV9YDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGRMYWJlbCgpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGlmICghdGhpcy5sb29rdXBEYXRhPy5waW4pIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCBzYjogc3RyaW5nW10gPSBbXTtcclxuICAgIC8vIHBpbiB2YWx1ZVxyXG4gICAgaWYgKHRoaXMubG9va3VwRGF0YS5waW4udmFsdWUpIHtcclxuICAgICAgc2IucHVzaCh0aGlzLmxvb2t1cERhdGEucGluLnZhbHVlKTtcclxuICAgICAgc2IucHVzaCgnIHwgJyk7XHJcbiAgICB9XHJcbiAgICAvLyBpdGVtIHRpdGxlXHJcbiAgICBzYi5wdXNoKHRoaXMubG9va3VwRGF0YS5pdGVtPy50aXRsZSB8fCB0aGlzLmxvb2t1cERhdGEucGluPy5pdGVtSWQpO1xyXG4gICAgLy8gcGFydCB0eXBlIGFuZCByb2xlXHJcbiAgICBpZiAodGhpcy5sb29rdXBEYXRhLnBpbi5wYXJ0VHlwZUlkKSB7XHJcbiAgICAgIGNvbnN0IGUgPSB0aGlzLm1vZGVsRW50cmllcz8uZmluZChcclxuICAgICAgICAoZSkgPT4gZS5pZCA9PT0gdGhpcy5sb29rdXBEYXRhIS5waW4ucGFydFR5cGVJZFxyXG4gICAgICApO1xyXG4gICAgICBzYi5wdXNoKCcgKCcpO1xyXG4gICAgICBzYi5wdXNoKGU/LnZhbHVlIHx8IHRoaXMubG9va3VwRGF0YS5waW4ucGFydFR5cGVJZCk7XHJcbiAgICAgIGlmICh0aGlzLmxvb2t1cERhdGEucGluLnJvbGVJZCkge1xyXG4gICAgICAgIHNiLnB1c2goYCwgJHt0aGlzLmxvb2t1cERhdGEucGluLnJvbGVJZH1gKTtcclxuICAgICAgfVxyXG4gICAgICBzYi5wdXNoKCcpJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc2Iuam9pbignJyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFRhcmdldCgpOiBQaW5UYXJnZXQge1xyXG4gICAgaWYgKHRoaXMuZXh0ZXJuYWwudmFsdWUpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBnaWQ6IHRoaXMuZ2lkLnZhbHVlIHx8ICcnLFxyXG4gICAgICAgIGxhYmVsOiB0aGlzLmxhYmVsLnZhbHVlIHx8ICcnLFxyXG4gICAgICB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgcGluID0gdGhpcy5sb29rdXBEYXRhPy5waW47XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgZ2lkOiB0aGlzLmdpZC52YWx1ZSB8fCAnJyxcclxuICAgICAgICBsYWJlbDogdGhpcy5sYWJlbC52YWx1ZSB8fCAnJyxcclxuICAgICAgICBpdGVtSWQ6IHBpbj8uaXRlbUlkIHx8ICcnLFxyXG4gICAgICAgIHBhcnRJZDogcGluPy5wYXJ0SWQgfHwgJycsXHJcbiAgICAgICAgcGFydFR5cGVJZDogcGluPy5wYXJ0VHlwZUlkIHx8ICcnLFxyXG4gICAgICAgIHJvbGVJZDogcGluPy5yb2xlSWQgfHwgJycsXHJcbiAgICAgICAgbmFtZTogcGluPy5uYW1lIHx8ICcnLFxyXG4gICAgICAgIHZhbHVlOiBwaW4/LnZhbHVlIHx8ICcnLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVUYXJnZXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fbm9UYXJnZXRVcGRhdGUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmV4dGVybmFsLnZhbHVlKSB7XHJcbiAgICAgIHRoaXMuZ2lkLnNldFZhbHVlKHRoaXMuYnVpbGRHaWQoKSk7XHJcbiAgICAgIHRoaXMuZ2lkLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgdGhpcy5naWQubWFya0FzRGlydHkoKTtcclxuICAgICAgdGhpcy5sYWJlbC5zZXRWYWx1ZSh0aGlzLmJ1aWxkTGFiZWwoKSk7XHJcbiAgICAgIHRoaXMubGFiZWwudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICB0aGlzLmxhYmVsLm1hcmtBc0RpcnR5KCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl90YXJnZXQgPSB0aGlzLmdldFRhcmdldCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVGb3JtKHRhcmdldD86IFBpblRhcmdldCk6IHZvaWQge1xyXG4gICAgLy8gYnVpbGQgcGluIGluZm8gZnJvbSB0YXJnZXRcclxuICAgIGlmICghdGFyZ2V0KSB7XHJcbiAgICAgIHRoaXMubG9va3VwRGF0YSA9IHVuZGVmaW5lZDtcclxuICAgICAgdGhpcy5pdGVtLnJlc2V0KCk7XHJcbiAgICAgIHRoaXMuaXRlbVBhcnQucmVzZXQoKTtcclxuICAgICAgdGhpcy5naWQucmVzZXQoKTtcclxuICAgICAgdGhpcy5sYWJlbC5yZXNldCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLl9ub1RhcmdldFVwZGF0ZSA9IHRydWU7XHJcbiAgICB0aGlzLmdpZC5zZXRWYWx1ZSh0YXJnZXQuZ2lkIHx8ICcnKTtcclxuICAgIHRoaXMubGFiZWwuc2V0VmFsdWUodGFyZ2V0LmxhYmVsIHx8ICcnKTtcclxuICAgIHRoaXMubG9va3VwRGF0YSA9IHtcclxuICAgICAgcGluOiB7XHJcbiAgICAgICAgaXRlbUlkOiB0YXJnZXQuaXRlbUlkIHx8ICcnLFxyXG4gICAgICAgIHBhcnRJZDogdGFyZ2V0LnBhcnRJZCB8fCAnJyxcclxuICAgICAgICBwYXJ0VHlwZUlkOiB0YXJnZXQucGFydFR5cGVJZCB8fCAnJyxcclxuICAgICAgICByb2xlSWQ6IHRhcmdldC5yb2xlSWQgfHwgJycsXHJcbiAgICAgICAgbmFtZTogdGFyZ2V0Lm5hbWUgfHwgJycsXHJcbiAgICAgICAgdmFsdWU6IHRhcmdldC52YWx1ZSB8fCAnJyxcclxuICAgICAgfSxcclxuICAgIH07XHJcbiAgICAvLyBnZXQgaXRlbVxyXG4gICAgaWYgKHRhcmdldC5pdGVtSWQpIHtcclxuICAgICAgdGhpcy5faXRlbVNlcnZpY2UuZ2V0SXRlbSh0YXJnZXQuaXRlbUlkLCB0cnVlKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChpdGVtKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLml0ZW0uc2V0VmFsdWUoaXRlbSk7XHJcbiAgICAgICAgICB0aGlzLmZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICAgIHRoaXMuX25vVGFyZ2V0VXBkYXRlID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmV4dGVybmFsLnNldFZhbHVlKCF0YXJnZXQubmFtZSk7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZVRhcmdldCgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoSlNPTi5zdHJpbmdpZnkoZXJyb3IpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuZXh0ZXJuYWwuc2V0VmFsdWUoIXRhcmdldC5uYW1lKTtcclxuICAgICAgICAgIHRoaXMuX25vVGFyZ2V0VXBkYXRlID0gZmFsc2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmV4dGVybmFsLnNldFZhbHVlKCF0YXJnZXQubmFtZSk7XHJcbiAgICAgIHRoaXMuX25vVGFyZ2V0VXBkYXRlID0gZmFsc2U7XHJcbiAgICAgIHRoaXMudXBkYXRlVGFyZ2V0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYWxsZWQgd2hlbiB0aGUgaXRlbSBsb29rdXAgY2hhbmdlcyAoaXRlbSBpcyBsb29rZWQgdXBcclxuICAgKiBieSBpdHMgdGl0bGUpLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGl0ZW0gVGhlIGl0ZW0gZ290IGZyb20gbG9va3VwLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBvbkl0ZW1Mb29rdXBDaGFuZ2UoaXRlbTogSXRlbSk6IHZvaWQge1xyXG4gICAgLy8gbG9hZCBpdGVtJ3MgcGFydHNcclxuICAgIHRoaXMuX2l0ZW1TZXJ2aWNlLmdldEl0ZW0oaXRlbS5pZCwgdHJ1ZSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKGkpID0+IHtcclxuICAgICAgICAvLyBzZXR0aW5nIHRoZSBpdGVtIHdpbGwgdHJpZ2dlciBpdHMgcGFydHMgdXBkYXRlXHJcbiAgICAgICAgdGhpcy5pdGVtLnNldFZhbHVlKGkpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlVGFyZ2V0KCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoSlNPTi5zdHJpbmdpZnkoZXJyb3IpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pdGVtUGFydC5zZXRWYWx1ZShudWxsKTtcclxuICAgICAgICB0aGlzLml0ZW1QYXJ0cyA9IFtdO1xyXG4gICAgICAgIHRoaXMudXBkYXRlVGFyZ2V0KCk7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZEl0ZW1JbmZvKHBpbjogRGF0YVBpbkluZm8pOiB2b2lkIHtcclxuICAgIGZvcmtKb2luKHtcclxuICAgICAgaXRlbTogdGhpcy5faXRlbVNlcnZpY2UuZ2V0SXRlbShwaW4uaXRlbUlkLCBmYWxzZSksXHJcbiAgICAgIHBhcnQ6IHRoaXMuX2l0ZW1TZXJ2aWNlLmdldFBhcnRGcm9tVHlwZUFuZFJvbGUoXHJcbiAgICAgICAgcGluLml0ZW1JZCxcclxuICAgICAgICBNRVRBREFUQV9QQVJUX0lELFxyXG4gICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICB0cnVlXHJcbiAgICAgICksXHJcbiAgICB9KVxyXG4gICAgICAucGlwZSh0YWtlKDEpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvb2t1cERhdGEgPSB7XHJcbiAgICAgICAgICAgIHBpbjogcGluLFxyXG4gICAgICAgICAgICBpdGVtOiByZXN1bHQuaXRlbSxcclxuICAgICAgICAgICAgbWV0YVBhcnQ6IHJlc3VsdC5wYXJ0IGFzIE1ldGFkYXRhUGFydCxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZVRhcmdldCgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb29rdXBEYXRhID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICAgICAgZXJyb3IgPyBKU09OLnN0cmluZ2lmeShlcnJvcikgOiAnRXJyb3IgbG9hZGluZyBpdGVtL21ldGFkYXRhJ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGxlZCB3aGVuIHRoZSBwaW4gbG9va3VwIGNoYW5nZS4gQSBwaW4gaXMgbG9va2VkIHVwIGJ5IGl0c1xyXG4gICAqIG5hbWUgYW5kIHZhbHVlICg9dGhlIGZpbHRlcidzIHRleHQpLCBhbmQgb3B0aW9uYWxseSBieTpcclxuICAgKiAtIGl0cyBpbmRleCBsb29rdXAgZGVmaW5pdGlvbiAoc2VsZWN0ZWQgYnkgcGFydFR5cGVLZXkpLlxyXG4gICAqIC0gaXRzIGl0ZW0gKGRlZmluZWQgYnkgaXRlbSwgaW4gZmlsdGVyKS5cclxuICAgKiAtIGl0cyBwYXJ0IChkZWZpbmVkIGJ5IGl0ZW1QYXJ0LCBpbiBmaWx0ZXIpLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGluZm8gVGhlIHBpbiBpbmZvIGZyb20gcGluIGxvb2t1cC5cclxuICAgKi9cclxuICBwdWJsaWMgb25QaW5Mb29rdXBDaGFuZ2UoaW5mbzogRGF0YVBpbkluZm8pOiB2b2lkIHtcclxuICAgIHRoaXMubG9hZEl0ZW1JbmZvKGluZm8pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uQ29waWVkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fc25hY2tiYXIub3BlbignQ29waWVkIHRvIGNsaXBib2FyZCcsICdPSycsIHtcclxuICAgICAgZHVyYXRpb246IDE1MDAsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZWRpdG9yQ2xvc2UuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNhdmUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5mb3JtLmludmFsaWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fdGFyZ2V0ID0gdGhpcy5nZXRUYXJnZXQoKTtcclxuICAgIHRoaXMudGFyZ2V0Q2hhbmdlLmVtaXQodGhpcy5fdGFyZ2V0KTtcclxuICB9XHJcbn1cclxuIiwiPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCIgKHN1Ym1pdCk9XCJzYXZlKClcIj5cclxuICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIj5cclxuICAgIDwhLS0gZXh0ZXJuYWwgLS0+XHJcbiAgICA8bWF0LWNoZWNrYm94IFtmb3JtQ29udHJvbF09XCJleHRlcm5hbFwiPmV4dGVybmFsPC9tYXQtY2hlY2tib3g+XHJcbiAgICA8IS0tIG1vZGUgc3dpdGNoZXIgLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiIWV4dGVybmFsLnZhbHVlXCI+XHJcbiAgICAgIDxtYXQtY2hlY2tib3ggW2Zvcm1Db250cm9sXT1cImJ5VHlwZU1vZGVcIiAqbmdJZj1cImNhblN3aXRjaE1vZGVcIj5cclxuICAgICAgICBieSB0eXBlPC9tYXQtY2hlY2tib3hcclxuICAgICAgPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJmb3JtLXJvd1wiPlxyXG4gICAgPCEtLSBsYWJlbCAtLT5cclxuICAgIDxkaXY+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZCAqbmdJZj1cImV4dGVybmFsLnZhbHVlIHx8IGNhbkVkaXRUYXJnZXRcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPmxhYmVsPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPGlucHV0IG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJsYWJlbFwiIC8+XHJcbiAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgKm5nSWY9XCIkYW55KGxhYmVsKS5lcnJvcnM/LnJlcXVpcmVkICYmIChsYWJlbC5kaXJ0eSB8fCBsYWJlbC50b3VjaGVkKVwiXHJcbiAgICAgICAgICA+bGFiZWwgcmVxdWlyZWQ8L21hdC1lcnJvclxyXG4gICAgICAgID5cclxuICAgICAgICA8bWF0LWVycm9yXHJcbiAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAkYW55KGxhYmVsKS5lcnJvcnM/Lm1heExlbmd0aCAmJiAobGFiZWwuZGlydHkgfHwgbGFiZWwudG91Y2hlZClcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgICA+bGFiZWwgdG9vIGxvbmc8L21hdC1lcnJvclxyXG4gICAgICAgID5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgPGRpdlxyXG4gICAgICAgICpuZ0lmPVwiIWV4dGVybmFsLnZhbHVlICYmICFjYW5FZGl0VGFyZ2V0ICYmIGxhYmVsLnZhbHVlXCJcclxuICAgICAgICBjbGFzcz1cImluZm9cIlxyXG4gICAgICA+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPmxhYmVsPC9zcGFuPnt7IGxhYmVsLnZhbHVlIH19XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBnaWQgLS0+XHJcbiAgICA8ZGl2PlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJleHRlcm5hbC52YWx1ZSB8fCBjYW5FZGl0VGFyZ2V0XCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD5HSUQ8L21hdC1sYWJlbD5cclxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT1cImdpZFwiIC8+XHJcbiAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgKm5nSWY9XCIkYW55KGdpZCkuZXJyb3JzPy5yZXF1aXJlZCAmJiAoZ2lkLmRpcnR5IHx8IGdpZC50b3VjaGVkKVwiXHJcbiAgICAgICAgICA+R0lEIHJlcXVpcmVkPC9tYXQtZXJyb3JcclxuICAgICAgICA+XHJcbiAgICAgICAgPG1hdC1lcnJvclxyXG4gICAgICAgICAgKm5nSWY9XCIkYW55KGdpZCkuZXJyb3JzPy5tYXhMZW5ndGggJiYgKGdpZC5kaXJ0eSB8fCBnaWQudG91Y2hlZClcIlxyXG4gICAgICAgICAgPkdJRCB0b28gbG9uZzwvbWF0LWVycm9yXHJcbiAgICAgICAgPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiIWV4dGVybmFsLnZhbHVlICYmICFjYW5FZGl0VGFyZ2V0ICYmIGdpZC52YWx1ZVwiIGNsYXNzPVwiaW5mb1wiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj5HSUQ8L3NwYW4+IDxzcGFuIGNsYXNzPVwiZ2lkXCI+e3sgZ2lkLnZhbHVlIH19PC9zcGFuPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIEJZIElURU0gLS0+XHJcbiAgPGRpdiAqbmdJZj1cIiFleHRlcm5hbC52YWx1ZVwiPlxyXG4gICAgPGZpZWxkc2V0ICpuZ0lmPVwiIWJ5VHlwZU1vZGUudmFsdWVcIiBjbGFzcz1cImZvcm0tcm93XCI+XHJcbiAgICAgIDxsZWdlbmQ+cGluIGZpbHRlcnM8L2xlZ2VuZD5cclxuICAgICAgPCEtLSBpdGVtIGZpbHRlciAtLT5cclxuICAgICAgPGNhZG11cy1yZWYtbG9va3VwXHJcbiAgICAgICAgW3NlcnZpY2VdPVwiaXRlbUxvb2t1cFNlcnZpY2VcIlxyXG4gICAgICAgIGxhYmVsPVwiaXRlbVwiXHJcbiAgICAgICAgKGl0ZW1DaGFuZ2UpPVwib25JdGVtTG9va3VwQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICA+PC9jYWRtdXMtcmVmLWxvb2t1cD5cclxuXHJcbiAgICAgIDwhLS0gcGFydCBmaWx0ZXIgLS0+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZCAqbmdJZj1cIml0ZW1QYXJ0cy5sZW5ndGhcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPnBhcnQ8L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LXNlbGVjdCBbZm9ybUNvbnRyb2xdPVwiaXRlbVBhcnRcIj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJudWxsXCI+KGFueSk8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgcCBvZiBpdGVtUGFydHNcIiBbdmFsdWVdPVwicFwiPnt7XHJcbiAgICAgICAgICAgIHAudHlwZUlkIHwgZmxhdExvb2t1cCA6IG1vZGVsRW50cmllcyA6IFwiaWRcIiA6IFwidmFsdWVcIlxyXG4gICAgICAgICAgfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9maWVsZHNldD5cclxuXHJcbiAgICA8IS0tIEJZIFRZUEUgLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiYnlUeXBlTW9kZS52YWx1ZVwiPlxyXG4gICAgICA8IS0tIHBhciB0eXBlIGZpbHRlciAtLT5cclxuICAgICAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwicGFydFR5cGVLZXlzPy5sZW5ndGhcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPnBhcnQgdHlwZTwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtc2VsZWN0IFtmb3JtQ29udHJvbF09XCJwYXJ0VHlwZUtleVwiPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGsgb2YgcGFydFR5cGVLZXlzXCIgW3ZhbHVlXT1cImtcIj57e1xyXG4gICAgICAgICAgICBrXHJcbiAgICAgICAgICB9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIFBJTiAtLT5cclxuICAgIDxkaXYgKm5nSWY9XCJwYXJ0VHlwZUtleS52YWx1ZVwiPlxyXG4gICAgICA8IS0tIHBpbiBsb29rdXAgLS0+XHJcbiAgICAgIDxjYWRtdXMtcmVmLWxvb2t1cFxyXG4gICAgICAgIFtzZXJ2aWNlXT1cInBpbkxvb2t1cFNlcnZpY2VcIlxyXG4gICAgICAgIFtiYXNlRmlsdGVyXT1cImZpbHRlclwiXHJcbiAgICAgICAgW29wdGlvbnNdPVwicGluRmlsdGVyT3B0aW9uc1wiXHJcbiAgICAgICAgbGFiZWw9XCJwaW5cIlxyXG4gICAgICAgIChpdGVtQ2hhbmdlKT1cIm9uUGluTG9va3VwQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICA+PC9jYWRtdXMtcmVmLWxvb2t1cD5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gZGF0YSAtLT5cclxuICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGlkPVwiZGF0YVwiICpuZ0lmPVwibG9va3VwRGF0YT8ucGluPy5uYW1lXCI+XHJcbiAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5waW4gZGF0YTwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgIDwhLS0gdGFibGUgLS0+XHJcbiAgICAgIDx0YWJsZT5cclxuICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICA8dGg+PC90aD5cclxuICAgICAgICAgIDx0aD5zb3VyY2U8L3RoPlxyXG4gICAgICAgICAgPHRoPnZhbHVlPC90aD5cclxuICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgIDwhLS0gcGluIC0tPlxyXG4gICAgICAgICAgPHRyICpuZ0lmPVwibG9va3VwRGF0YT8ucGluPy52YWx1ZVwiPlxyXG4gICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICBbY2RrQ29weVRvQ2xpcGJvYXJkXT1cImxvb2t1cERhdGEhLnBpbiEudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgKGNka0NvcHlUb0NsaXBib2FyZENvcGllZCk9XCJvbkNvcGllZCgpXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y29udGVudF9jb3B5PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPHRkPnBpbjwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZD57eyBsb29rdXBEYXRhIS5waW4udmFsdWUgfX08L3RkPlxyXG4gICAgICAgICAgPC90cj5cclxuICAgICAgICAgIDwhLS0gaXRlbSBJRCAtLT5cclxuICAgICAgICAgIDx0ciAqbmdJZj1cImxvb2t1cERhdGE/LnBpbj8uaXRlbUlkXCI+XHJcbiAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgIFtjZGtDb3B5VG9DbGlwYm9hcmRdPVwibG9va3VwRGF0YSEucGluIS5pdGVtSWRcIlxyXG4gICAgICAgICAgICAgICAgKGNka0NvcHlUb0NsaXBib2FyZENvcGllZCk9XCJvbkNvcGllZCgpXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y29udGVudF9jb3B5PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgPHRkPml0ZW0gSUQ8L3RkPlxyXG4gICAgICAgICAgICA8dGQ+e3sgbG9va3VwRGF0YSEucGluLml0ZW1JZCB9fTwvdGQ+XHJcbiAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPCEtLSBpdGVtIHRpdGxlIC0tPlxyXG4gICAgICAgICAgPHRyICpuZ0lmPVwibG9va3VwRGF0YT8uaXRlbT8udGl0bGVcIj5cclxuICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgW2Nka0NvcHlUb0NsaXBib2FyZF09XCJsb29rdXBEYXRhIS5pdGVtIS50aXRsZVwiXHJcbiAgICAgICAgICAgICAgICAoY2RrQ29weVRvQ2xpcGJvYXJkQ29waWVkKT1cIm9uQ29waWVkKClcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jb250ZW50X2NvcHk8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8dGQ+aXRlbSB0aXRsZTwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZD57eyBsb29rdXBEYXRhIS5pdGVtIS50aXRsZSB9fTwvdGQ+XHJcbiAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPCEtLSBwYXJ0IElEIC0tPlxyXG4gICAgICAgICAgPHRyICpuZ0lmPVwibG9va3VwRGF0YT8ucGluPy5wYXJ0SWRcIj5cclxuICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgW2Nka0NvcHlUb0NsaXBib2FyZF09XCJsb29rdXBEYXRhIS5waW4hLnBhcnRJZFwiXHJcbiAgICAgICAgICAgICAgICAoY2RrQ29weVRvQ2xpcGJvYXJkQ29waWVkKT1cIm9uQ29waWVkKClcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jb250ZW50X2NvcHk8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8dGQ+cGFydCBJRDwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZD57eyBsb29rdXBEYXRhIS5waW4ucGFydElkIH19PC90ZD5cclxuICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICA8IS0tIHBhcnQgdHlwZSBJRCAtLT5cclxuICAgICAgICAgIDx0ciAqbmdJZj1cImxvb2t1cERhdGE/LnBpbj8ucGFydFR5cGVJZFwiPlxyXG4gICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICBbY2RrQ29weVRvQ2xpcGJvYXJkXT1cImxvb2t1cERhdGEhLnBpbiEucGFydFR5cGVJZFwiXHJcbiAgICAgICAgICAgICAgICAoY2RrQ29weVRvQ2xpcGJvYXJkQ29waWVkKT1cIm9uQ29waWVkKClcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jb250ZW50X2NvcHk8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8dGQ+cGFydCB0eXBlIElEPC90ZD5cclxuICAgICAgICAgICAgPHRkPnt7IGxvb2t1cERhdGEhLnBpbiEucGFydFR5cGVJZCB9fTwvdGQ+XHJcbiAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgPCEtLSBwYXJ0IHJvbGUgSUQgLS0+XHJcbiAgICAgICAgICA8dHIgKm5nSWY9XCJsb29rdXBEYXRhPy5waW4/LnJvbGVJZFwiPlxyXG4gICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICBbY2RrQ29weVRvQ2xpcGJvYXJkXT1cImxvb2t1cERhdGEhLnBpbiEucm9sZUlkIVwiXHJcbiAgICAgICAgICAgICAgICAoY2RrQ29weVRvQ2xpcGJvYXJkQ29waWVkKT1cIm9uQ29waWVkKClcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jb250ZW50X2NvcHk8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8dGQ+cGFydCByb2xlIElEPC90ZD5cclxuICAgICAgICAgICAgPHRkPnt7IGxvb2t1cERhdGEhLnBpbiEucm9sZUlkIH19PC90ZD5cclxuICAgICAgICAgIDwvdHI+XHJcblxyXG4gICAgICAgICAgPCEtLSBwYXJ0J3MgbWV0YWRhdGEgLS0+XHJcbiAgICAgICAgICA8dHJcclxuICAgICAgICAgICAgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgICAgbGV0IG0gb2YgbG9va3VwRGF0YT8ubWV0YVBhcnQ/Lm1ldGFkYXRhIHx8IFtdO1xyXG4gICAgICAgICAgICAgIGxldCBpID0gaW5kZXhcclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgW2Nka0NvcHlUb0NsaXBib2FyZF09XCJtLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgIChjZGtDb3B5VG9DbGlwYm9hcmRDb3BpZWQpPVwib25Db3BpZWQoKVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmNvbnRlbnRfY29weTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cIm1ldGFkYXRhXCI+e3sgbS5uYW1lIH19PC90ZD5cclxuICAgICAgICAgICAgPHRkIGNsYXNzPVwibWV0YWRhdGFcIj57eyBtLnZhbHVlIH19PC90ZD5cclxuICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgPC90Ym9keT5cclxuICAgICAgPC90YWJsZT5cclxuICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBidXR0b25zIC0tPlxyXG4gIDxkaXY+XHJcbiAgICA8YnV0dG9uIG1hdC1mbGF0LWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNsb3NlKClcIj5cclxuICAgICAgPG1hdC1pY29uIGNvbG9yPVwid2FyblwiPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBtYXQtZmxhdC1idXR0b24gdHlwZT1cInN1Ym1pdFwiIFtkaXNhYmxlZF09XCJmb3JtLmludmFsaWRcIj5cclxuICAgICAgPG1hdC1pY29uIGNvbG9yPVwicHJpbWFyeVwiPmNoZWNrX2NpcmNsZTwvbWF0LWljb24+IHRhcmdldFxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvZm9ybT5cclxuIl19
@@ -62,7 +62,7 @@ class ScopedPinLookupComponent {
62
62
  // lookup item and its metadata part if any
63
63
  forkJoin({
64
64
  item: this._itemService.getItem(item.itemId, false),
65
- part: this._itemService.getPartFromTypeAndRole(item.itemId, METADATA_PART_ID),
65
+ part: this._itemService.getPartFromTypeAndRole(item.itemId, METADATA_PART_ID, undefined, true),
66
66
  })
67
67
  .pipe(take(1))
68
68
  .subscribe({
@@ -127,4 +127,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.3", ngImpor
127
127
  }] }]; }, propDecorators: { idPick: [{
128
128
  type: Output
129
129
  }] } });
130
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NvcGVkLXBpbi1sb29rdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlybWlkb24vY2FkbXVzLXJlZnMtYXNzZXJ0ZWQtaWRzL3NyYy9saWIvc2NvcGVkLXBpbi1sb29rdXAvc2NvcGVkLXBpbi1sb29rdXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlybWlkb24vY2FkbXVzLXJlZnMtYXNzZXJ0ZWQtaWRzL3NyYy9saWIvc2NvcGVkLXBpbi1sb29rdXAvc2NvcGVkLXBpbi1sb29rdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBSUwsVUFBVSxHQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFTeEIsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBSXRDLDRCQUE0QjtBQUM1QixNQUFNLGdCQUFnQixHQUFHLG1CQUFtQixDQUFDO0FBZTdDOzs7Ozs7R0FNRztBQUNILE1BS2Esd0JBQXdCO0lBYW5DLFlBQ0UsV0FBd0IsRUFDaEIsWUFBeUIsRUFDMUIsYUFBa0MsRUFFbEMsVUFBa0M7UUFIakMsaUJBQVksR0FBWixZQUFZLENBQWE7UUFDMUIsa0JBQWEsR0FBYixhQUFhLENBQXFCO1FBRWxDLGVBQVUsR0FBVixVQUFVLENBQXdCO1FBRXpDLFNBQVM7UUFDVCwyQ0FBMkM7UUFDM0MsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3BDLDRDQUE0QztRQUM1QyxJQUFJLENBQUMsR0FBRyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFD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bmplY3QsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgRm9ybUJ1aWxkZXIsXG4gIEZvcm1Db250cm9sLFxuICBGb3JtR3JvdXAsXG4gIFZhbGlkYXRvcnMsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEl0ZW1TZXJ2aWNlIH0gZnJvbSAnQG15cm1pZG9uL2NhZG11cy1hcGknO1xuXG5pbXBvcnQge1xuICBEYXRhUGluSW5mbyxcbiAgSW5kZXhMb29rdXBEZWZpbml0aW9ucyxcbiAgSXRlbSxcbiAgUGFydCxcbn0gZnJvbSAnQG15cm1pZG9uL2NhZG11cy1jb3JlJztcbmltcG9ydCB7IGZvcmtKb2luLCB0YWtlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFBpblJlZkxvb2t1cFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9waW4tcmVmLWxvb2t1cC5zZXJ2aWNlJztcblxuLy8gZnJvbSBDYWRtdXMgZ2VuZXJhbCBwYXJ0c1xuY29uc3QgTUVUQURBVEFfUEFSVF9JRCA9ICdpdC52ZWRwaC5tZXRhZGF0YSc7XG5pbnRlcmZhY2UgTWV0YWRhdGFQYXJ0IGV4dGVuZHMgUGFydCB7XG4gIG1ldGFkYXRhOiB7XG4gICAgdHlwZT86IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdmFsdWU6IHN0cmluZztcbiAgfVtdO1xufVxuXG5pbnRlcmZhY2UgTG9va3VwSW5mbyB7XG4gIHBpbjogRGF0YVBpbkluZm87XG4gIGl0ZW0/OiBJdGVtO1xuICBwYXJ0PzogTWV0YWRhdGFQYXJ0O1xufVxuXG4vKlxuICogU2NvcGVkIHBpbi1iYXNlZCBsb29rdXAgY29tcG9uZW50LiBUaGlzIGNvbXBvbmVudCBwcm92aWRlcyBhIGxpc3RcbiAqIG9mIHBpbi1iYXNlZCBzZWFyY2hlcywgd2l0aCBhIGxvb2t1cCBjb250cm9sLiBXaGVuZXZlciB0aGUgdXNlclxuICogcGlja3MgYSBwaW4gdmFsdWUsIGhlIGdldHMgdGhlIGRldGFpbHMgYWJvdXQgaXRzIGl0ZW0gYW5kIHBhcnQsIGFuZFxuICogaXRlbSdzIG1ldGFkYXRhIHBhcnQsIGlmIGFueS4gSGUgY2FuIHRoZW4gdXNlIHRoZXNlIGRhdGEgdG8gYnVpbGRcbiAqIHNvbWUgRUlEIGJ5IHZhcmlvdXNseSBhc3NlbWJsaW5nIHRoZXNlIGNvbXBvbmVudHMuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NhZG11cy1zY29wZWQtcGluLWxvb2t1cCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zY29wZWQtcGluLWxvb2t1cC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3Njb3BlZC1waW4tbG9va3VwLmNvbXBvbmVudC5jc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgU2NvcGVkUGluTG9va3VwQ29tcG9uZW50IHtcbiAgLy8gbG9va3VwXG4gIHB1YmxpYyBrZXk6IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+O1xuICBwdWJsaWMga2V5Rm9ybTogRm9ybUdyb3VwO1xuICBwdWJsaWMga2V5czogc3RyaW5nW107XG4gIHB1YmxpYyBpbmZvPzogTG9va3VwSW5mbztcbiAgLy8gYnVpbGRlclxuICBwdWJsaWMgaWQ6IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+O1xuICBwdWJsaWMgaWRGb3JtOiBGb3JtR3JvdXA7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBpZFBpY2s6IEV2ZW50RW1pdHRlcjxzdHJpbmc+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIF9pdGVtU2VydmljZTogSXRlbVNlcnZpY2UsXG4gICAgcHVibGljIGxvb2t1cFNlcnZpY2U6IFBpblJlZkxvb2t1cFNlcnZpY2UsXG4gICAgQEluamVjdCgnaW5kZXhMb29rdXBEZWZpbml0aW9ucycpXG4gICAgcHVibGljIGxvb2t1cERlZnM6IEluZGV4TG9va3VwRGVmaW5pdGlvbnNcbiAgKSB7XG4gICAgLy8gbG9va3VwXG4gICAgLy8ga2V5cyBhcmUgYWxsIHRoZSBkZWZpbmVkIGxvb2t1cCBzZWFyY2hlc1xuICAgIHRoaXMua2V5cyA9IE9iamVjdC5rZXlzKGxvb2t1cERlZnMpO1xuICAgIC8vIHRoZSBzZWxlY3RlZCBrZXkgZGVmaW5lcyB0aGUgbG9va3VwIHNjb3BlXG4gICAgdGhpcy5rZXkgPSBmb3JtQnVpbGRlci5jb250cm9sKG51bGwpO1xuICAgIHRoaXMua2V5Rm9ybSA9IGZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIGtleTogdGhpcy5rZXksXG4gICAgfSk7XG4gICAgLy8gaWRcbiAgICB0aGlzLmlkID0gZm9ybUJ1aWxkZXIuY29udHJvbChudWxsLCBbXG4gICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMzAwKSxcbiAgICBdKTtcbiAgICB0aGlzLmlkRm9ybSA9IGZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIGlkOiB0aGlzLmlkLFxuICAgIH0pO1xuICAgIC8vIGV2ZW50XG4gICAgdGhpcy5pZFBpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIHByZS1zZWxlY3QgYSB1bmlxdWUga2V5XG4gICAgaWYgKHRoaXMua2V5cy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHRoaXMua2V5LnNldFZhbHVlKHRoaXMua2V5c1swXSk7XG4gICAgICB0aGlzLmtleS5tYXJrQXNEaXJ0eSgpO1xuICAgICAgdGhpcy5rZXkudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbkl0ZW1DaGFuZ2UoaXRlbTogRGF0YVBpbkluZm8pOiB2b2lkIHtcbiAgICBjb25zdCBpbmZvOiBMb29rdXBJbmZvID0ge1xuICAgICAgcGluOiBpdGVtLFxuICAgIH07XG4gICAgLy8gbG9va3VwIGl0ZW0gYW5kIGl0cyBtZXRhZGF0YSBwYXJ0IGlmIGFueVxuICAgIGZvcmtKb2luKHtcbiAgICAgIGl0ZW06IHRoaXMuX2l0ZW1TZXJ2aWNlLmdldEl0ZW0oaXRlbS5pdGVtSWQsIGZhbHNlKSxcbiAgICAgIHBhcnQ6IHRoaXMuX2l0ZW1TZXJ2aWNlLmdldFBhcnRGcm9tVHlwZUFuZFJvbGUoXG4gICAgICAgIGl0ZW0uaXRlbUlkLFxuICAgICAgICBNRVRBREFUQV9QQVJUX0lEXG4gICAgICApLFxuICAgIH0pXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChyZXN1bHQpID0+IHtcbiAgICAgICAgICBpbmZvLml0ZW0gPSByZXN1bHQuaXRlbTtcbiAgICAgICAgICBpbmZvLnBhcnQgPSByZXN1bHQucGFydCBhcyBNZXRhZGF0YVBhcnQ7XG4gICAgICAgICAgdGhpcy5pbmZvID0gaW5mbztcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBlcnJvciA/IEpTT04uc3RyaW5naWZ5KGVycm9yKSA6ICdFcnJvciBsb2FkaW5nIGl0ZW0vbWV0YWRhdGEnXG4gICAgICAgICAgKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFwcGVuZElkQ29tcG9uZW50KHR5cGU6IHN0cmluZywgbWV0YUluZGV4ID0gLTEpOiB2b2lkIHtcbiAgICBsZXQgaWQgPSB0aGlzLmlkLnZhbHVlIHx8ICcnO1xuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdwaW4nOlxuICAgICAgICBpZCArPSB0aGlzLmluZm8/LnBpbi52YWx1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdpdGVtSWQnOlxuICAgICAgICBpZCArPSB0aGlzLmluZm8hLml0ZW0/LmlkIHx8ICcnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3BhcnRJZCc6XG4gICAgICAgIGlkICs9IHRoaXMuaW5mbyEucGFydD8uaWQgfHwgJyc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAncGFydFR5cGVJZCc6XG4gICAgICAgIGlkICs9IHRoaXMuaW5mbyEucGFydD8udHlwZUlkIHx8ICcnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3BhcnRSb2xlSWQnOlxuICAgICAgICBpZCArPSB0aGlzLmluZm8hLnBhcnQ/LnJvbGVJZCB8fCAnJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdtZXRhZGF0YSc6XG4gICAgICAgIGlkICs9IHRoaXMuaW5mbyEucGFydCEubWV0YWRhdGFbbWV0YUluZGV4XS52YWx1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdGhpcy5pZC5zZXRWYWx1ZShpZCk7XG4gICAgdGhpcy5pZC5tYXJrQXNEaXJ0eSgpO1xuICAgIHRoaXMuaWQudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICB9XG5cbiAgcHVibGljIHBpY2tJZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pZEZvcm0uaW52YWxpZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmlkUGljay5lbWl0KHRoaXMuaWQudmFsdWUhKTtcbiAgICB0aGlzLmluZm8gPSB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgcmVzZXRJZCgpOiB2b2lkIHtcbiAgICB0aGlzLmlkLnJlc2V0KCk7XG4gICAgdGhpcy5pZC5tYXJrQXNEaXJ0eSgpO1xuICAgIHRoaXMuaWQudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICB9XG59XG4iLCI8ZGl2PlxuICA8IS0tIGxvb2t1cCAtLT5cbiAgPGRpdj5cbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImtleUZvcm1cIiBjbGFzcz1cImZvcm0tcm93XCI+XG4gICAgICA8IS0tIGtleSAtLT5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCAqbmdJZj1cImtleXMubGVuZ3RoID4gMVwiPlxuICAgICAgICA8bWF0LWxhYmVsPnR5cGU8L21hdC1sYWJlbD5cbiAgICAgICAgPG1hdC1zZWxlY3QgW2Zvcm1Db250cm9sXT1cImtleVwiPlxuICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBrIG9mIGtleXNcIiBbdmFsdWVdPVwia1wiPnt7IGsgfX08L21hdC1vcHRpb24+XG4gICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICpuZ0lmPVwiJGFueShrZXkpLmVycm9ycz8ucmVxdWlyZWQgJiYgKGtleS5kaXJ0eSB8fCBrZXkudG91Y2hlZClcIlxuICAgICAgICAgID50eXBlIHJlcXVpcmVkPC9tYXQtZXJyb3JcbiAgICAgICAgPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDxjYWRtdXMtcmVmLWxvb2t1cFxuICAgICAgICBbc2VydmljZV09XCJsb29rdXBTZXJ2aWNlXCJcbiAgICAgICAgbGFiZWw9XCJwaW5cIlxuICAgICAgICBbb3B0aW9uc109XCJrZXkudmFsdWUgPyBsb29rdXBEZWZzW2tleS52YWx1ZV0gOiB1bmRlZmluZWRcIlxuICAgICAgICAoaXRlbUNoYW5nZSk9XCJvbkl0ZW1DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICA+PC9jYWRtdXMtcmVmLWxvb2t1cD5cbiAgICA8L2Zvcm0+XG4gIDwvZGl2PlxuXG4gIDwhLS0gYnVpbGRlciAtLT5cbiAgPG1hdC1leHBhbnNpb24tcGFuZWwgKm5nSWY9XCJpbmZvXCIgW2V4cGFuZGVkXT1cImluZm9cIiBbZGlzYWJsZWRdPVwiIWluZm9cIj5cbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+SUQgYnVpbGRlcjwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgPCEtLSBJRCAtLT5cbiAgICA8ZGl2PlxuICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJpZEZvcm1cIiAoc3VibWl0KT1cInBpY2tJZCgpXCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBzdHlsZT1cIndpZHRoOiAxMDAlXCI+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJpZFwiIC8+XG4gICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgKm5nSWY9XCIkYW55KGlkKS5lcnJvcnM/LnJlcXVpcmVkICYmIChpZC5kaXJ0eSB8fCBpZC50b3VjaGVkKVwiXG4gICAgICAgICAgICA+SUQgcmVxdWlyZWQ8L21hdC1lcnJvclxuICAgICAgICAgID5cbiAgICAgICAgICA8bWF0LWVycm9yXG4gICAgICAgICAgICAqbmdJZj1cIiRhbnkoaWQpLmVycm9ycz8ubWF4TGVuZ3RoICYmIChpZC5kaXJ0eSB8fCBpZC50b3VjaGVkKVwiXG4gICAgICAgICAgICA+SUQgdG9vIGxvbmc8L21hdC1lcnJvclxuICAgICAgICAgID5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAoY2xpY2spPVwicmVzZXRJZCgpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaWQudmFsdWVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBjb2xvcj1cIndhcm5cIj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgKGNsaWNrKT1cInBpY2tJZCgpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpZEZvcm0uaW52YWxpZFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPG1hdC1pY29uIGNvbG9yPVwicHJpbWFyeVwiPmNoZWNrX2NpcmNsZTwvbWF0LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Zvcm0+XG4gICAgPC9kaXY+XG4gICAgPCEtLSB0YWJsZSAtLT5cbiAgICA8dGFibGU+XG4gICAgICA8dGhlYWQ+XG4gICAgICAgIDx0aD48L3RoPlxuICAgICAgICA8dGg+c291cmNlPC90aD5cbiAgICAgICAgPHRoPnZhbHVlPC90aD5cbiAgICAgIDwvdGhlYWQ+XG4gICAgICA8dGJvZHk+XG4gICAgICAgIDwhLS0gcGluIC0tPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRkPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJhcHBlbmRJZENvbXBvbmVudCgncGluJylcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bWF0LWljb24+YWRkX2NpcmNsZTwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDx0ZD5waW48L3RkPlxuICAgICAgICAgIDx0ZD57eyBpbmZvIS5waW4udmFsdWUgfX08L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8IS0tIGl0ZW0gSUQgLS0+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFwcGVuZElkQ29tcG9uZW50KCdpdGVtSWQnKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5hZGRfY2lyY2xlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPHRkPml0ZW0gSUQ8L3RkPlxuICAgICAgICAgIDx0ZD57eyBpbmZvIS5pdGVtPy5pZCB9fTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDwhLS0gaXRlbSB0aXRsZSAtLT5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0ZD48L3RkPlxuICAgICAgICAgIDx0ZD5pdGVtIHRpdGxlPC90ZD5cbiAgICAgICAgICA8dGQ+e3sgaW5mbyEuaXRlbT8udGl0bGUgfX08L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8IS0tIHBhcnQgSUQgLS0+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFwcGVuZElkQ29tcG9uZW50KCdwYXJ0SWQnKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5hZGRfY2lyY2xlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPHRkPnBhcnQgSUQ8L3RkPlxuICAgICAgICAgIDx0ZD57eyBpbmZvIS5wYXJ0Py5pZCB9fTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDwhLS0gcGFydCB0eXBlIElEIC0tPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRkPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJhcHBlbmRJZENvbXBvbmVudCgncGFydFR5cGVJZCcpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG1hdC1pY29uPmFkZF9jaXJjbGU8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8dGQ+cGFydCB0eXBlIElEPC90ZD5cbiAgICAgICAgICA8dGQ+e3sgaW5mbyEucGFydD8udHlwZUlkIH19PC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPCEtLSBwYXJ0IHJvbGUgSUQgLS0+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFwcGVuZElkQ29tcG9uZW50KCdwYXJ0Um9sZUlkJylcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bWF0LWljb24+YWRkX2NpcmNsZTwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDx0ZD5wYXJ0IHJvbGUgSUQ8L3RkPlxuICAgICAgICAgIDx0ZD57eyBpbmZvIS5wYXJ0Py5yb2xlSWQgfX08L3RkPlxuICAgICAgICA8L3RyPlxuXG4gICAgICAgIDwhLS0gcGFydCdzIG1ldGFkYXRhIC0tPlxuICAgICAgICA8dHIgKm5nRm9yPVwibGV0IG0gb2YgaW5mbyEucGFydD8ubWV0YWRhdGE7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFwcGVuZElkQ29tcG9uZW50KCdtZXRhZGF0YScsIGkpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG1hdC1pY29uPmFkZF9jaXJjbGU8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8dGQgY2xhc3M9XCJtZXRhZGF0YVwiPnt7IG0ubmFtZSB9fTwvdGQ+XG4gICAgICAgICAgPHRkIGNsYXNzPVwibWV0YWRhdGFcIj57eyBtLnZhbHVlIH19PC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGJvZHk+XG4gICAgPC90YWJsZT5cbiAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuPC9kaXY+XG4iXX0=
130
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NvcGVkLXBpbi1sb29rdXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlybWlkb24vY2FkbXVzLXJlZnMtYXNzZXJ0ZWQtaWRzL3NyYy9saWIvc2NvcGVkLXBpbi1sb29rdXAvc2NvcGVkLXBpbi1sb29rdXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlybWlkb24vY2FkbXVzLXJlZnMtYXNzZXJ0ZWQtaWRzL3NyYy9saWIvc2NvcGVkLXBpbi1sb29rdXAvc2NvcGVkLXBpbi1sb29rdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBSUwsVUFBVSxHQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFTeEIsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBSXRDLDRCQUE0QjtBQUM1QixNQUFNLGdCQUFnQixHQUFHLG1CQUFtQixDQUFDO0FBZTdDOzs7Ozs7R0FNRztBQUNILE1BS2Esd0JBQXdCO0lBYW5DLFlBQ0UsV0FBd0IsRUFDaEIsWUFBeUIsRUFDMUIsYUFBa0MsRUFFbEMsVUFBa0M7UUFIakMsaUJBQVksR0FBWixZQUFZLENBQWE7UUFDMUIsa0JBQWEsR0FBYixhQUFhLENBQXFCO1FBRWxDLGVBQVUsR0FBVixVQUFVLENBQXdCO1FBRXpDLFNBQVM7UUFDVCwyQ0FBMkM7UUFDM0MsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3BDLDRDQUE0QztRQUM1QyxJQUFJLENBQUMsR0FBRyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFD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ZW50LCBFdmVudEVtaXR0ZXIsIEluamVjdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBGb3JtQnVpbGRlcixcbiAgRm9ybUNvbnRyb2wsXG4gIEZvcm1Hcm91cCxcbiAgVmFsaWRhdG9ycyxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSXRlbVNlcnZpY2UgfSBmcm9tICdAbXlybWlkb24vY2FkbXVzLWFwaSc7XG5cbmltcG9ydCB7XG4gIERhdGFQaW5JbmZvLFxuICBJbmRleExvb2t1cERlZmluaXRpb25zLFxuICBJdGVtLFxuICBQYXJ0LFxufSBmcm9tICdAbXlybWlkb24vY2FkbXVzLWNvcmUnO1xuaW1wb3J0IHsgZm9ya0pvaW4sIHRha2UgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgUGluUmVmTG9va3VwU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3Bpbi1yZWYtbG9va3VwLnNlcnZpY2UnO1xuXG4vLyBmcm9tIENhZG11cyBnZW5lcmFsIHBhcnRzXG5jb25zdCBNRVRBREFUQV9QQVJUX0lEID0gJ2l0LnZlZHBoLm1ldGFkYXRhJztcbmludGVyZmFjZSBNZXRhZGF0YVBhcnQgZXh0ZW5kcyBQYXJ0IHtcbiAgbWV0YWRhdGE6IHtcbiAgICB0eXBlPzogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB2YWx1ZTogc3RyaW5nO1xuICB9W107XG59XG5cbmludGVyZmFjZSBMb29rdXBJbmZvIHtcbiAgcGluOiBEYXRhUGluSW5mbztcbiAgaXRlbT86IEl0ZW07XG4gIHBhcnQ/OiBNZXRhZGF0YVBhcnQ7XG59XG5cbi8qXG4gKiBTY29wZWQgcGluLWJhc2VkIGxvb2t1cCBjb21wb25lbnQuIFRoaXMgY29tcG9uZW50IHByb3ZpZGVzIGEgbGlzdFxuICogb2YgcGluLWJhc2VkIHNlYXJjaGVzLCB3aXRoIGEgbG9va3VwIGNvbnRyb2wuIFdoZW5ldmVyIHRoZSB1c2VyXG4gKiBwaWNrcyBhIHBpbiB2YWx1ZSwgaGUgZ2V0cyB0aGUgZGV0YWlscyBhYm91dCBpdHMgaXRlbSBhbmQgcGFydCwgYW5kXG4gKiBpdGVtJ3MgbWV0YWRhdGEgcGFydCwgaWYgYW55LiBIZSBjYW4gdGhlbiB1c2UgdGhlc2UgZGF0YSB0byBidWlsZFxuICogc29tZSBFSUQgYnkgdmFyaW91c2x5IGFzc2VtYmxpbmcgdGhlc2UgY29tcG9uZW50cy5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2FkbXVzLXNjb3BlZC1waW4tbG9va3VwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Njb3BlZC1waW4tbG9va3VwLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2NvcGVkLXBpbi1sb29rdXAuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBTY29wZWRQaW5Mb29rdXBDb21wb25lbnQge1xuICAvLyBsb29rdXBcbiAgcHVibGljIGtleTogRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD47XG4gIHB1YmxpYyBrZXlGb3JtOiBGb3JtR3JvdXA7XG4gIHB1YmxpYyBrZXlzOiBzdHJpbmdbXTtcbiAgcHVibGljIGluZm8/OiBMb29rdXBJbmZvO1xuICAvLyBidWlsZGVyXG4gIHB1YmxpYyBpZDogRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD47XG4gIHB1YmxpYyBpZEZvcm06IEZvcm1Hcm91cDtcblxuICBAT3V0cHV0KClcbiAgcHVibGljIGlkUGljazogRXZlbnRFbWl0dGVyPHN0cmluZz47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgX2l0ZW1TZXJ2aWNlOiBJdGVtU2VydmljZSxcbiAgICBwdWJsaWMgbG9va3VwU2VydmljZTogUGluUmVmTG9va3VwU2VydmljZSxcbiAgICBASW5qZWN0KCdpbmRleExvb2t1cERlZmluaXRpb25zJylcbiAgICBwdWJsaWMgbG9va3VwRGVmczogSW5kZXhMb29rdXBEZWZpbml0aW9uc1xuICApIHtcbiAgICAvLyBsb29rdXBcbiAgICAvLyBrZXlzIGFyZSBhbGwgdGhlIGRlZmluZWQgbG9va3VwIHNlYXJjaGVzXG4gICAgdGhpcy5rZXlzID0gT2JqZWN0LmtleXMobG9va3VwRGVmcyk7XG4gICAgLy8gdGhlIHNlbGVjdGVkIGtleSBkZWZpbmVzIHRoZSBsb29rdXAgc2NvcGVcbiAgICB0aGlzLmtleSA9IGZvcm1CdWlsZGVyLmNvbnRyb2wobnVsbCk7XG4gICAgdGhpcy5rZXlGb3JtID0gZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAga2V5OiB0aGlzLmtleSxcbiAgICB9KTtcbiAgICAvLyBpZFxuICAgIHRoaXMuaWQgPSBmb3JtQnVpbGRlci5jb250cm9sKG51bGwsIFtcbiAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICBWYWxpZGF0b3JzLm1heExlbmd0aCgzMDApLFxuICAgIF0pO1xuICAgIHRoaXMuaWRGb3JtID0gZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgfSk7XG4gICAgLy8gZXZlbnRcbiAgICB0aGlzLmlkUGljayA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gcHJlLXNlbGVjdCBhIHVuaXF1ZSBrZXlcbiAgICBpZiAodGhpcy5rZXlzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdGhpcy5rZXkuc2V0VmFsdWUodGhpcy5rZXlzWzBdKTtcbiAgICAgIHRoaXMua2V5Lm1hcmtBc0RpcnR5KCk7XG4gICAgICB0aGlzLmtleS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uSXRlbUNoYW5nZShpdGVtOiBEYXRhUGluSW5mbyk6IHZvaWQge1xuICAgIGNvbnN0IGluZm86IExvb2t1cEluZm8gPSB7XG4gICAgICBwaW46IGl0ZW0sXG4gICAgfTtcbiAgICAvLyBsb29rdXAgaXRlbSBhbmQgaXRzIG1ldGFkYXRhIHBhcnQgaWYgYW55XG4gICAgZm9ya0pvaW4oe1xuICAgICAgaXRlbTogdGhpcy5faXRlbVNlcnZpY2UuZ2V0SXRlbShpdGVtLml0ZW1JZCwgZmFsc2UpLFxuICAgICAgcGFydDogdGhpcy5faXRlbVNlcnZpY2UuZ2V0UGFydEZyb21UeXBlQW5kUm9sZShcbiAgICAgICAgaXRlbS5pdGVtSWQsXG4gICAgICAgIE1FVEFEQVRBX1BBUlRfSUQsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdHJ1ZVxuICAgICAgKSxcbiAgICB9KVxuICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgaW5mby5pdGVtID0gcmVzdWx0Lml0ZW07XG4gICAgICAgICAgaW5mby5wYXJ0ID0gcmVzdWx0LnBhcnQgYXMgTWV0YWRhdGFQYXJ0O1xuICAgICAgICAgIHRoaXMuaW5mbyA9IGluZm87XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgZXJyb3IgPyBKU09OLnN0cmluZ2lmeShlcnJvcikgOiAnRXJyb3IgbG9hZGluZyBpdGVtL21ldGFkYXRhJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhcHBlbmRJZENvbXBvbmVudCh0eXBlOiBzdHJpbmcsIG1ldGFJbmRleCA9IC0xKTogdm9pZCB7XG4gICAgbGV0IGlkID0gdGhpcy5pZC52YWx1ZSB8fCAnJztcblxuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAncGluJzpcbiAgICAgICAgaWQgKz0gdGhpcy5pbmZvPy5waW4udmFsdWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaXRlbUlkJzpcbiAgICAgICAgaWQgKz0gdGhpcy5pbmZvIS5pdGVtPy5pZCB8fCAnJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdwYXJ0SWQnOlxuICAgICAgICBpZCArPSB0aGlzLmluZm8hLnBhcnQ/LmlkIHx8ICcnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3BhcnRUeXBlSWQnOlxuICAgICAgICBpZCArPSB0aGlzLmluZm8hLnBhcnQ/LnR5cGVJZCB8fCAnJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdwYXJ0Um9sZUlkJzpcbiAgICAgICAgaWQgKz0gdGhpcy5pbmZvIS5wYXJ0Py5yb2xlSWQgfHwgJyc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbWV0YWRhdGEnOlxuICAgICAgICBpZCArPSB0aGlzLmluZm8hLnBhcnQhLm1ldGFkYXRhW21ldGFJbmRleF0udmFsdWU7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHRoaXMuaWQuc2V0VmFsdWUoaWQpO1xuICAgIHRoaXMuaWQubWFya0FzRGlydHkoKTtcbiAgICB0aGlzLmlkLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgfVxuXG4gIHB1YmxpYyBwaWNrSWQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaWRGb3JtLmludmFsaWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pZFBpY2suZW1pdCh0aGlzLmlkLnZhbHVlISk7XG4gICAgdGhpcy5pbmZvID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHJlc2V0SWQoKTogdm9pZCB7XG4gICAgdGhpcy5pZC5yZXNldCgpO1xuICAgIHRoaXMuaWQubWFya0FzRGlydHkoKTtcbiAgICB0aGlzLmlkLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgfVxufVxuIiwiPGRpdj5cbiAgPCEtLSBsb29rdXAgLS0+XG4gIDxkaXY+XG4gICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJrZXlGb3JtXCIgY2xhc3M9XCJmb3JtLXJvd1wiPlxuICAgICAgPCEtLSBrZXkgLS0+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgKm5nSWY9XCJrZXlzLmxlbmd0aCA+IDFcIj5cbiAgICAgICAgPG1hdC1sYWJlbD50eXBlPC9tYXQtbGFiZWw+XG4gICAgICAgIDxtYXQtc2VsZWN0IFtmb3JtQ29udHJvbF09XCJrZXlcIj5cbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgayBvZiBrZXlzXCIgW3ZhbHVlXT1cImtcIj57eyBrIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAqbmdJZj1cIiRhbnkoa2V5KS5lcnJvcnM/LnJlcXVpcmVkICYmIChrZXkuZGlydHkgfHwga2V5LnRvdWNoZWQpXCJcbiAgICAgICAgICA+dHlwZSByZXF1aXJlZDwvbWF0LWVycm9yXG4gICAgICAgID5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8Y2FkbXVzLXJlZi1sb29rdXBcbiAgICAgICAgW3NlcnZpY2VdPVwibG9va3VwU2VydmljZVwiXG4gICAgICAgIGxhYmVsPVwicGluXCJcbiAgICAgICAgW29wdGlvbnNdPVwia2V5LnZhbHVlID8gbG9va3VwRGVmc1trZXkudmFsdWVdIDogdW5kZWZpbmVkXCJcbiAgICAgICAgKGl0ZW1DaGFuZ2UpPVwib25JdGVtQ2hhbmdlKCRldmVudClcIlxuICAgICAgPjwvY2FkbXVzLXJlZi1sb29rdXA+XG4gICAgPC9mb3JtPlxuICA8L2Rpdj5cblxuICA8IS0tIGJ1aWxkZXIgLS0+XG4gIDxtYXQtZXhwYW5zaW9uLXBhbmVsICpuZ0lmPVwiaW5mb1wiIFtleHBhbmRlZF09XCJpbmZvXCIgW2Rpc2FibGVkXT1cIiFpbmZvXCI+XG4gICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPklEIGJ1aWxkZXI8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgIDwhLS0gSUQgLS0+XG4gICAgPGRpdj5cbiAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiaWRGb3JtXCIgKHN1Ym1pdCk9XCJwaWNrSWQoKVwiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgc3R5bGU9XCJ3aWR0aDogMTAwJVwiPlxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPVwiaWRcIiAvPlxuICAgICAgICAgIDxtYXQtZXJyb3JcbiAgICAgICAgICAgICpuZ0lmPVwiJGFueShpZCkuZXJyb3JzPy5yZXF1aXJlZCAmJiAoaWQuZGlydHkgfHwgaWQudG91Y2hlZClcIlxuICAgICAgICAgICAgPklEIHJlcXVpcmVkPC9tYXQtZXJyb3JcbiAgICAgICAgICA+XG4gICAgICAgICAgPG1hdC1lcnJvclxuICAgICAgICAgICAgKm5nSWY9XCIkYW55KGlkKS5lcnJvcnM/Lm1heExlbmd0aCAmJiAoaWQuZGlydHkgfHwgaWQudG91Y2hlZClcIlxuICAgICAgICAgICAgPklEIHRvbyBsb25nPC9tYXQtZXJyb3JcbiAgICAgICAgICA+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgKGNsaWNrKT1cInJlc2V0SWQoKVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWlkLnZhbHVlXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bWF0LWljb24gY29sb3I9XCJ3YXJuXCI+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBtYXRTdWZmaXhcbiAgICAgICAgICAgIChjbGljayk9XCJwaWNrSWQoKVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiaWRGb3JtLmludmFsaWRcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBjb2xvcj1cInByaW1hcnlcIj5jaGVja19jaXJjbGU8L21hdC1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9mb3JtPlxuICAgIDwvZGl2PlxuICAgIDwhLS0gdGFibGUgLS0+XG4gICAgPHRhYmxlPlxuICAgICAgPHRoZWFkPlxuICAgICAgICA8dGg+PC90aD5cbiAgICAgICAgPHRoPnNvdXJjZTwvdGg+XG4gICAgICAgIDx0aD52YWx1ZTwvdGg+XG4gICAgICA8L3RoZWFkPlxuICAgICAgPHRib2R5PlxuICAgICAgICA8IS0tIHBpbiAtLT5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYXBwZW5kSWRDb21wb25lbnQoJ3BpbicpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG1hdC1pY29uPmFkZF9jaXJjbGU8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8dGQ+cGluPC90ZD5cbiAgICAgICAgICA8dGQ+e3sgaW5mbyEucGluLnZhbHVlIH19PC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPCEtLSBpdGVtIElEIC0tPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRkPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJhcHBlbmRJZENvbXBvbmVudCgnaXRlbUlkJylcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bWF0LWljb24+YWRkX2NpcmNsZTwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDx0ZD5pdGVtIElEPC90ZD5cbiAgICAgICAgICA8dGQ+e3sgaW5mbyEuaXRlbT8uaWQgfX08L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8IS0tIGl0ZW0gdGl0bGUgLS0+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGQ+PC90ZD5cbiAgICAgICAgICA8dGQ+aXRlbSB0aXRsZTwvdGQ+XG4gICAgICAgICAgPHRkPnt7IGluZm8hLml0ZW0/LnRpdGxlIH19PC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPCEtLSBwYXJ0IElEIC0tPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRkPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJhcHBlbmRJZENvbXBvbmVudCgncGFydElkJylcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bWF0LWljb24+YWRkX2NpcmNsZTwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDx0ZD5wYXJ0IElEPC90ZD5cbiAgICAgICAgICA8dGQ+e3sgaW5mbyEucGFydD8uaWQgfX08L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8IS0tIHBhcnQgdHlwZSBJRCAtLT5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYXBwZW5kSWRDb21wb25lbnQoJ3BhcnRUeXBlSWQnKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5hZGRfY2lyY2xlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPHRkPnBhcnQgdHlwZSBJRDwvdGQ+XG4gICAgICAgICAgPHRkPnt7IGluZm8hLnBhcnQ/LnR5cGVJZCB9fTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDwhLS0gcGFydCByb2xlIElEIC0tPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRkPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJhcHBlbmRJZENvbXBvbmVudCgncGFydFJvbGVJZCcpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG1hdC1pY29uPmFkZF9jaXJjbGU8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8dGQ+cGFydCByb2xlIElEPC90ZD5cbiAgICAgICAgICA8dGQ+e3sgaW5mbyEucGFydD8ucm9sZUlkIH19PC90ZD5cbiAgICAgICAgPC90cj5cblxuICAgICAgICA8IS0tIHBhcnQncyBtZXRhZGF0YSAtLT5cbiAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBtIG9mIGluZm8hLnBhcnQ/Lm1ldGFkYXRhOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgPHRkPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJhcHBlbmRJZENvbXBvbmVudCgnbWV0YWRhdGEnLCBpKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5hZGRfY2lyY2xlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPHRkIGNsYXNzPVwibWV0YWRhdGFcIj57eyBtLm5hbWUgfX08L3RkPlxuICAgICAgICAgIDx0ZCBjbGFzcz1cIm1ldGFkYXRhXCI+e3sgbS52YWx1ZSB9fTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3Rib2R5PlxuICAgIDwvdGFibGU+XG4gIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbjwvZGl2PlxuIl19
@@ -164,7 +164,7 @@ class ScopedPinLookupComponent {
164
164
  // lookup item and its metadata part if any
165
165
  forkJoin({
166
166
  item: this._itemService.getItem(item.itemId, false),
167
- part: this._itemService.getPartFromTypeAndRole(item.itemId, METADATA_PART_ID$1),
167
+ part: this._itemService.getPartFromTypeAndRole(item.itemId, METADATA_PART_ID$1, undefined, true),
168
168
  })
169
169
  .pipe(take(1))
170
170
  .subscribe({
@@ -843,7 +843,7 @@ class PinTargetLookupComponent {
843
843
  loadItemInfo(pin) {
844
844
  forkJoin({
845
845
  item: this._itemService.getItem(pin.itemId, false),
846
- part: this._itemService.getPartFromTypeAndRole(pin.itemId, METADATA_PART_ID),
846
+ part: this._itemService.getPartFromTypeAndRole(pin.itemId, METADATA_PART_ID, undefined, true),
847
847
  })
848
848
  .pipe(take(1))
849
849
  .subscribe({
@@ -1 +1 @@
1
- {"version":3,"file":"myrmidon-cadmus-refs-asserted-ids.mjs","sources":["../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/services/pin-ref-lookup.service.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/scoped-pin-lookup/scoped-pin-lookup.component.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/scoped-pin-lookup/scoped-pin-lookup.component.html","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-id/asserted-id.component.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-id/asserted-id.component.html","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-ids/asserted-ids.component.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-ids/asserted-ids.component.html","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/services/item-ref-lookup.service.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/pin-target-lookup/pin-target-lookup.component.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/pin-target-lookup/pin-target-lookup.component.html","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-composite-id/asserted-composite-id.component.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-composite-id/asserted-composite-id.component.html","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-composite-ids/asserted-composite-ids.component.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-composite-ids/asserted-composite-ids.component.html","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/cadmus-refs-asserted-ids.module.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/public-api.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/myrmidon-cadmus-refs-asserted-ids.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { map, Observable, of } from 'rxjs';\r\n\r\nimport { ItemService } from '@myrmidon/cadmus-api';\r\nimport { DataPinInfo, IndexLookupDefinition } from '@myrmidon/cadmus-core';\r\nimport {\r\n RefLookupFilter,\r\n RefLookupService,\r\n} from '@myrmidon/cadmus-refs-lookup';\r\nimport { DataPage, ErrorWrapper } from '@myrmidon/ng-tools';\r\n\r\n/**\r\n * Pin-based lookup filter. This is a RefLookupFilter with the addition\r\n * of the item ID and part ID, which are used to filter the results\r\n * by the ItemPinLookupComponent.\r\n */\r\nexport interface PinRefLookupFilter extends RefLookupFilter {\r\n itemId?: string;\r\n partId?: string;\r\n}\r\n\r\n/**\r\n * Cadmus pin-based lookup data service. The text being searched here is just\r\n * the pin's value, according to the options specified. These options correspond\r\n * to an index lookup definition. The resulting items are of type DataPinInfo.\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class PinRefLookupService implements RefLookupService {\r\n constructor(private _itemService: ItemService) {}\r\n\r\n public getName(item: any | undefined): string {\r\n return item?.value || '';\r\n }\r\n\r\n private buildQuery(\r\n def: IndexLookupDefinition,\r\n filter: PinRefLookupFilter\r\n ): string {\r\n const sb: string[] = [];\r\n const AND = ' AND ';\r\n\r\n if (def.typeId) {\r\n sb.push(`[partTypeId=${def.typeId}]`);\r\n }\r\n if (def.roleId) {\r\n if (sb.length) {\r\n sb.push(AND);\r\n }\r\n sb.push(`[roleId=${def.roleId}]`);\r\n }\r\n if (def.name) {\r\n if (sb.length) {\r\n sb.push(AND);\r\n }\r\n sb.push(`[name=${def.name}]`);\r\n }\r\n if (filter.itemId) {\r\n if (sb.length) {\r\n sb.push(AND);\r\n }\r\n sb.push(`[itemId=${filter.itemId}]`);\r\n }\r\n if (filter.partId) {\r\n if (sb.length) {\r\n sb.push(AND);\r\n }\r\n sb.push(`[partId=${filter.partId}]`);\r\n }\r\n if (filter.text) {\r\n if (sb.length) {\r\n sb.push(AND);\r\n }\r\n // for other operators see backend SqlQueryBuilderBase.cs\r\n sb.push(`[value*=${filter.text}]`); // *= is \"contains\"\r\n }\r\n\r\n return sb.join('');\r\n }\r\n\r\n public lookup(filter: PinRefLookupFilter, options?: any): Observable<any[]> {\r\n // the index lookup definition is required\r\n const def = options as IndexLookupDefinition;\r\n if (!def) {\r\n return of([]);\r\n }\r\n\r\n // build the corresponding pin query\r\n const query = this.buildQuery(def, filter);\r\n\r\n // search the index\r\n return this._itemService.searchPins(query, 1, filter.limit).pipe(\r\n map((w: ErrorWrapper<DataPage<DataPinInfo>>) => {\r\n if (w.error) {\r\n console.error(w.error);\r\n return [];\r\n } else {\r\n return w.value?.items || [];\r\n }\r\n })\r\n );\r\n }\r\n}\r\n","import { Component, EventEmitter, Inject, Output } from '@angular/core';\nimport {\n FormBuilder,\n FormControl,\n FormGroup,\n Validators,\n} from '@angular/forms';\nimport { ItemService } from '@myrmidon/cadmus-api';\n\nimport {\n DataPinInfo,\n IndexLookupDefinitions,\n Item,\n Part,\n} from '@myrmidon/cadmus-core';\nimport { forkJoin, take } from 'rxjs';\n\nimport { PinRefLookupService } from '../services/pin-ref-lookup.service';\n\n// from Cadmus general parts\nconst METADATA_PART_ID = 'it.vedph.metadata';\ninterface MetadataPart extends Part {\n metadata: {\n type?: string;\n name: string;\n value: string;\n }[];\n}\n\ninterface LookupInfo {\n pin: DataPinInfo;\n item?: Item;\n part?: MetadataPart;\n}\n\n/*\n * Scoped pin-based lookup component. This component provides a list\n * of pin-based searches, with a lookup control. Whenever the user\n * picks a pin value, he gets the details about its item and part, and\n * item's metadata part, if any. He can then use these data to build\n * some EID by variously assembling these components.\n */\n@Component({\n selector: 'cadmus-scoped-pin-lookup',\n templateUrl: './scoped-pin-lookup.component.html',\n styleUrls: ['./scoped-pin-lookup.component.css'],\n})\nexport class ScopedPinLookupComponent {\n // lookup\n public key: FormControl<string | null>;\n public keyForm: FormGroup;\n public keys: string[];\n public info?: LookupInfo;\n // builder\n public id: FormControl<string | null>;\n public idForm: FormGroup;\n\n @Output()\n public idPick: EventEmitter<string>;\n\n constructor(\n formBuilder: FormBuilder,\n private _itemService: ItemService,\n public lookupService: PinRefLookupService,\n @Inject('indexLookupDefinitions')\n public lookupDefs: IndexLookupDefinitions\n ) {\n // lookup\n // keys are all the defined lookup searches\n this.keys = Object.keys(lookupDefs);\n // the selected key defines the lookup scope\n this.key = formBuilder.control(null);\n this.keyForm = formBuilder.group({\n key: this.key,\n });\n // id\n this.id = formBuilder.control(null, [\n Validators.required,\n Validators.maxLength(300),\n ]);\n this.idForm = formBuilder.group({\n id: this.id,\n });\n // event\n this.idPick = new EventEmitter<string>();\n }\n\n ngOnInit(): void {\n // pre-select a unique key\n if (this.keys.length === 1) {\n this.key.setValue(this.keys[0]);\n this.key.markAsDirty();\n this.key.updateValueAndValidity();\n }\n }\n\n public onItemChange(item: DataPinInfo): void {\n const info: LookupInfo = {\n pin: item,\n };\n // lookup item and its metadata part if any\n forkJoin({\n item: this._itemService.getItem(item.itemId, false),\n part: this._itemService.getPartFromTypeAndRole(\n item.itemId,\n METADATA_PART_ID\n ),\n })\n .pipe(take(1))\n .subscribe({\n next: (result) => {\n info.item = result.item;\n info.part = result.part as MetadataPart;\n this.info = info;\n },\n error: (error) => {\n console.error(\n error ? JSON.stringify(error) : 'Error loading item/metadata'\n );\n },\n });\n }\n\n public appendIdComponent(type: string, metaIndex = -1): void {\n let id = this.id.value || '';\n\n switch (type) {\n case 'pin':\n id += this.info?.pin.value;\n break;\n case 'itemId':\n id += this.info!.item?.id || '';\n break;\n case 'partId':\n id += this.info!.part?.id || '';\n break;\n case 'partTypeId':\n id += this.info!.part?.typeId || '';\n break;\n case 'partRoleId':\n id += this.info!.part?.roleId || '';\n break;\n case 'metadata':\n id += this.info!.part!.metadata[metaIndex].value;\n break;\n }\n\n this.id.setValue(id);\n this.id.markAsDirty();\n this.id.updateValueAndValidity();\n }\n\n public pickId(): void {\n if (this.idForm.invalid) {\n return;\n }\n this.idPick.emit(this.id.value!);\n this.info = undefined;\n }\n\n public resetId(): void {\n this.id.reset();\n this.id.markAsDirty();\n this.id.updateValueAndValidity();\n }\n}\n","<div>\n <!-- lookup -->\n <div>\n <form [formGroup]=\"keyForm\" class=\"form-row\">\n <!-- key -->\n <mat-form-field *ngIf=\"keys.length > 1\">\n <mat-label>type</mat-label>\n <mat-select [formControl]=\"key\">\n <mat-option *ngFor=\"let k of keys\" [value]=\"k\">{{ k }}</mat-option>\n </mat-select>\n <mat-error\n *ngIf=\"$any(key).errors?.required && (key.dirty || key.touched)\"\n >type required</mat-error\n >\n </mat-form-field>\n <cadmus-ref-lookup\n [service]=\"lookupService\"\n label=\"pin\"\n [options]=\"key.value ? lookupDefs[key.value] : undefined\"\n (itemChange)=\"onItemChange($event)\"\n ></cadmus-ref-lookup>\n </form>\n </div>\n\n <!-- builder -->\n <mat-expansion-panel *ngIf=\"info\" [expanded]=\"info\" [disabled]=\"!info\">\n <mat-expansion-panel-header>ID builder</mat-expansion-panel-header>\n <!-- ID -->\n <div>\n <form [formGroup]=\"idForm\" (submit)=\"pickId()\">\n <mat-form-field style=\"width: 100%\">\n <input matInput [formControl]=\"id\" />\n <mat-error\n *ngIf=\"$any(id).errors?.required && (id.dirty || id.touched)\"\n >ID required</mat-error\n >\n <mat-error\n *ngIf=\"$any(id).errors?.maxLength && (id.dirty || id.touched)\"\n >ID too long</mat-error\n >\n <button\n mat-icon-button\n type=\"button\"\n matSuffix\n (click)=\"resetId()\"\n [disabled]=\"!id.value\"\n >\n <mat-icon color=\"warn\">close</mat-icon>\n </button>\n <button\n mat-icon-button\n type=\"button\"\n matSuffix\n (click)=\"pickId()\"\n [disabled]=\"idForm.invalid\"\n >\n <mat-icon color=\"primary\">check_circle</mat-icon>\n </button>\n </mat-form-field>\n </form>\n </div>\n <!-- table -->\n <table>\n <thead>\n <th></th>\n <th>source</th>\n <th>value</th>\n </thead>\n <tbody>\n <!-- pin -->\n <tr>\n <td>\n <button\n type=\"button\"\n mat-icon-button\n color=\"primary\"\n (click)=\"appendIdComponent('pin')\"\n >\n <mat-icon>add_circle</mat-icon>\n </button>\n </td>\n <td>pin</td>\n <td>{{ info!.pin.value }}</td>\n </tr>\n <!-- item ID -->\n <tr>\n <td>\n <button\n type=\"button\"\n mat-icon-button\n color=\"primary\"\n (click)=\"appendIdComponent('itemId')\"\n >\n <mat-icon>add_circle</mat-icon>\n </button>\n </td>\n <td>item ID</td>\n <td>{{ info!.item?.id }}</td>\n </tr>\n <!-- item title -->\n <tr>\n <td></td>\n <td>item title</td>\n <td>{{ info!.item?.title }}</td>\n </tr>\n <!-- part ID -->\n <tr>\n <td>\n <button\n type=\"button\"\n mat-icon-button\n color=\"primary\"\n (click)=\"appendIdComponent('partId')\"\n >\n <mat-icon>add_circle</mat-icon>\n </button>\n </td>\n <td>part ID</td>\n <td>{{ info!.part?.id }}</td>\n </tr>\n <!-- part type ID -->\n <tr>\n <td>\n <button\n type=\"button\"\n mat-icon-button\n color=\"primary\"\n (click)=\"appendIdComponent('partTypeId')\"\n >\n <mat-icon>add_circle</mat-icon>\n </button>\n </td>\n <td>part type ID</td>\n <td>{{ info!.part?.typeId }}</td>\n </tr>\n <!-- part role ID -->\n <tr>\n <td>\n <button\n type=\"button\"\n mat-icon-button\n color=\"primary\"\n (click)=\"appendIdComponent('partRoleId')\"\n >\n <mat-icon>add_circle</mat-icon>\n </button>\n </td>\n <td>part role ID</td>\n <td>{{ info!.part?.roleId }}</td>\n </tr>\n\n <!-- part's metadata -->\n <tr *ngFor=\"let m of info!.part?.metadata; let i = index\">\n <td>\n <button\n type=\"button\"\n mat-icon-button\n color=\"primary\"\n (click)=\"appendIdComponent('metadata', i)\"\n >\n <mat-icon>add_circle</mat-icon>\n </button>\n </td>\n <td class=\"metadata\">{{ m.name }}</td>\n <td class=\"metadata\">{{ m.value }}</td>\n </tr>\n </tbody>\n </table>\n </mat-expansion-panel>\n</div>\n","import {\r\n Component,\r\n EventEmitter,\r\n Inject,\r\n Input,\r\n OnInit,\r\n Output,\r\n} from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { debounceTime } from 'rxjs/operators';\r\n\r\nimport { IndexLookupDefinitions, ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport { Assertion } from '@myrmidon/cadmus-refs-assertion';\r\n\r\nimport { PinRefLookupService } from '../services/pin-ref-lookup.service';\r\n\r\nexport interface AssertedId {\r\n tag?: string;\r\n value: string;\r\n scope: string;\r\n assertion?: Assertion;\r\n}\r\n\r\n@Component({\r\n selector: 'cadmus-refs-asserted-id',\r\n templateUrl: './asserted-id.component.html',\r\n styleUrls: ['./asserted-id.component.css'],\r\n})\r\nexport class AssertedIdComponent implements OnInit {\r\n private _updatingForm: boolean | undefined;\r\n private _id: AssertedId | undefined;\r\n\r\n public tag: FormControl<string | null>;\r\n public value: FormControl<string | null>;\r\n public scope: FormControl<string | null>;\r\n public assertion: FormControl<Assertion | null>;\r\n public form: FormGroup;\r\n\r\n public lookupExpanded: boolean;\r\n\r\n // asserted-id-scopes\r\n @Input()\r\n public idScopeEntries?: ThesaurusEntry[];\r\n\r\n // asserted-id-tags\r\n @Input()\r\n public idTagEntries?: ThesaurusEntry[];\r\n\r\n // assertion-tags\r\n @Input()\r\n public assTagEntries?: ThesaurusEntry[];\r\n\r\n // doc-reference-types\r\n @Input()\r\n public refTypeEntries: ThesaurusEntry[] | undefined;\r\n\r\n // doc-reference-tags\r\n @Input()\r\n public refTagEntries: ThesaurusEntry[] | undefined;\r\n\r\n @Input()\r\n public get id(): AssertedId | undefined | null {\r\n return this._id;\r\n }\r\n public set id(value: AssertedId | undefined | null) {\r\n if (this._id !== value) {\r\n this._id = value || undefined;\r\n this.updateForm(this._id);\r\n }\r\n }\r\n\r\n /**\r\n * True to hide the pin-based EID lookup UI.\r\n */\r\n @Input()\r\n public noEidLookup: boolean | undefined;\r\n\r\n @Input()\r\n public hasSubmit: boolean | undefined;\r\n\r\n @Output()\r\n public idChange: EventEmitter<AssertedId>;\r\n\r\n @Output()\r\n public editorClose: EventEmitter<any>;\r\n\r\n constructor(\r\n formBuilder: FormBuilder,\r\n public lookupService: PinRefLookupService,\r\n @Inject('indexLookupDefinitions')\r\n public lookupDefs: IndexLookupDefinitions\r\n ) {\r\n this.tag = formBuilder.control(null, Validators.maxLength(50));\r\n this.value = formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(500),\r\n ]);\r\n this.scope = formBuilder.control(null, Validators.maxLength(500));\r\n this.assertion = formBuilder.control(null);\r\n this.form = formBuilder.group({\r\n tag: this.tag,\r\n value: this.value,\r\n scope: this.scope,\r\n assertion: this.assertion\r\n });\r\n this.lookupExpanded = false;\r\n // events\r\n this.idChange = new EventEmitter<AssertedId>();\r\n this.editorClose = new EventEmitter<any>();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.form.valueChanges.pipe(debounceTime(300)).subscribe((_) => {\r\n if (!this._updatingForm) {\r\n this.emitIdChange();\r\n }\r\n });\r\n }\r\n\r\n public onAssertionChange(assertion: Assertion | undefined): void {\r\n this.assertion.setValue(assertion || null);\r\n }\r\n\r\n public onIdPick(id: string): void {\r\n this.value.setValue(id);\r\n this.value.markAsDirty();\r\n this.value.updateValueAndValidity();\r\n this.lookupExpanded = false;\r\n }\r\n\r\n private updateForm(value: AssertedId | undefined): void {\r\n this._updatingForm = true;\r\n if (!value) {\r\n this.form.reset();\r\n } else {\r\n this.tag.setValue(value.tag || null);\r\n this.value.setValue(value.value);\r\n this.scope.setValue(value.scope);\r\n this.assertion.setValue(value.assertion || null);\r\n this.form.markAsPristine();\r\n }\r\n this._updatingForm = false;\r\n // this.emitIdChange();\r\n }\r\n\r\n private getId(): AssertedId {\r\n return {\r\n tag: this.tag.value?.trim(),\r\n value: this.value.value?.trim() || '',\r\n scope: this.scope.value?.trim() || '',\r\n assertion: this.assertion.value || undefined,\r\n };\r\n }\r\n\r\n public emitIdChange(): void {\r\n if (!this.hasSubmit) {\r\n this._id = this.getId();\r\n this.idChange.emit(this._id);\r\n }\r\n }\r\n\r\n public cancel(): void {\r\n this.editorClose.emit();\r\n }\r\n\r\n public save(): void {\r\n if (this.form.valid) {\r\n this._id = this.getId();\r\n this.idChange.emit(this._id);\r\n }\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\n <div>\n <div class=\"form-row\">\n <!-- tag (bound) -->\n <mat-form-field *ngIf=\"idTagEntries?.length\" style=\"width: 8em\">\n <mat-label>tag</mat-label>\n <mat-select [formControl]=\"tag\">\n <mat-option *ngFor=\"let e of idTagEntries\" [value]=\"e.id\">{{\n e.value\n }}</mat-option>\n </mat-select>\n </mat-form-field>\n <!-- tag (free) -->\n <mat-form-field *ngIf=\"!idTagEntries?.length\" style=\"width: 8em\">\n <mat-label>tag</mat-label>\n <input matInput [formControl]=\"tag\" />\n <mat-error *ngIf=\"tag.errors?.maxLength && (tag.dirty || tag.touched)\"\n >tag too long</mat-error\n >\n </mat-form-field>\n\n <!-- scope (bound) -->\n <mat-form-field *ngIf=\"idScopeEntries?.length\" style=\"width: 8em\">\n <mat-label>scope</mat-label>\n <mat-select [formControl]=\"scope\">\n <mat-option *ngFor=\"let e of idScopeEntries\" [value]=\"e.id\">{{\n e.value\n }}</mat-option>\n </mat-select>\n </mat-form-field>\n <!-- scope (free) -->\n <mat-form-field *ngIf=\"!idScopeEntries?.length\" style=\"width: 8em\">\n <mat-label>scope</mat-label>\n <input matInput [formControl]=\"scope\" />\n <mat-error\n *ngIf=\"scope.errors?.maxLength && (scope.dirty || scope.touched)\"\n >scope too long</mat-error\n >\n </mat-form-field>\n\n <!-- value -->\n <mat-form-field>\n <mat-label>value</mat-label>\n <input matInput [formControl]=\"value\" />\n <mat-error\n *ngIf=\"value.errors?.required && (value.dirty || value.touched)\"\n >value required</mat-error\n >\n <mat-error\n *ngIf=\"value.errors?.maxLength && (value.dirty || value.touched)\"\n >value too long</mat-error\n >\n </mat-form-field>\n\n <!-- lookup -->\n <div *ngIf=\"!noEidLookup\" style=\"margin-top: 4px\">\n <mat-expansion-panel [(expanded)]=\"lookupExpanded\">\n <mat-expansion-panel-header>lookup</mat-expansion-panel-header>\n <cadmus-scoped-pin-lookup\n (idPick)=\"onIdPick($event)\"\n ></cadmus-scoped-pin-lookup>\n </mat-expansion-panel>\n </div>\n </div>\n\n <!-- assertion -->\n <mat-expansion-panel>\n <mat-expansion-panel-header>assertion</mat-expansion-panel-header>\n <cadmus-refs-assertion\n [assTagEntries]=\"assTagEntries\"\n [refTypeEntries]=\"refTypeEntries\"\n [refTagEntries]=\"refTagEntries\"\n [assertion]=\"assertion.value\"\n (assertionChange)=\"onAssertionChange($event)\"\n >\n </cadmus-refs-assertion>\n </mat-expansion-panel>\n </div>\n\n <!-- buttons -->\n <div *ngIf=\"hasSubmit\">\n <button mat-icon-button color=\"warn\" type=\"button\" (click)=\"cancel()\">\n <mat-icon>close</mat-icon>\n </button>\n <button\n mat-icon-button\n color=\"primary\"\n type=\"submit\"\n [disabled]=\"form.invalid\"\n >\n <mat-icon>check_circle</mat-icon>\n </button>\n </div>\n</form>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { FormBuilder, FormControl, FormGroup } from '@angular/forms';\r\n\r\nimport { ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport { DialogService } from '@myrmidon/ng-mat-tools';\r\nimport { take } from 'rxjs';\r\n\r\nimport { AssertedId } from '../asserted-id/asserted-id.component';\r\n\r\n/**\r\n * Asserted IDs editor.\r\n */\r\n@Component({\r\n selector: 'cadmus-refs-asserted-ids',\r\n templateUrl: './asserted-ids.component.html',\r\n styleUrls: ['./asserted-ids.component.css'],\r\n})\r\nexport class AssertedIdsComponent {\r\n private _ids: AssertedId[];\r\n private _editedIndex: number;\r\n public edited?: AssertedId;\r\n\r\n /**\r\n * The asserted IDs.\r\n */\r\n @Input()\r\n public get ids(): AssertedId[] {\r\n return this._ids;\r\n }\r\n public set ids(value: AssertedId[]) {\r\n if (this._ids !== value) {\r\n this._ids = value || [];\r\n this.updateForm(value);\r\n }\r\n }\r\n\r\n // asserted-id-scopes\r\n @Input()\r\n public idScopeEntries?: ThesaurusEntry[];\r\n\r\n // asserted-id-tags\r\n @Input()\r\n public idTagEntries?: ThesaurusEntry[];\r\n\r\n // assertion-tags\r\n @Input()\r\n public assTagEntries?: ThesaurusEntry[];\r\n\r\n // doc-reference-types\r\n @Input()\r\n public refTypeEntries: ThesaurusEntry[] | undefined;\r\n\r\n // doc-reference-tags\r\n @Input()\r\n public refTagEntries: ThesaurusEntry[] | undefined;\r\n\r\n /**\r\n * Emitted whenever any ID changes.\r\n */\r\n @Output()\r\n public idsChange: EventEmitter<AssertedId[]>;\r\n\r\n public entries: FormControl<AssertedId[]>;\r\n public form: FormGroup;\r\n\r\n constructor(formBuilder: FormBuilder, private _dialogService: DialogService) {\r\n this._ids = [];\r\n this._editedIndex = -1;\r\n this.idsChange = new EventEmitter<AssertedId[]>();\r\n this.entries = formBuilder.control([], { nonNullable: true });\r\n // form\r\n this.form = formBuilder.group({\r\n ids: this.entries,\r\n });\r\n }\r\n\r\n private updateForm(ids: AssertedId[]): void {\r\n if (!ids?.length) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.entries.setValue(ids, { emitEvent: false });\r\n this.entries.updateValueAndValidity();\r\n this.form.markAsPristine();\r\n }\r\n\r\n private emitIdsChange(): void {\r\n this.idsChange.emit(this.entries.value);\r\n }\r\n\r\n public addId(): void {\r\n this.editId(\r\n {\r\n scope: '',\r\n value: '',\r\n },\r\n -1\r\n );\r\n }\r\n\r\n public editId(id: AssertedId, index: number): void {\r\n this._editedIndex = index;\r\n this.edited = id;\r\n }\r\n\r\n public closeId(): void {\r\n this._editedIndex = -1;\r\n this.edited = undefined;\r\n }\r\n\r\n public saveId(entry: AssertedId): void {\r\n const entries = [...this.entries.value];\r\n if (this._editedIndex === -1) {\r\n entries.push(entry);\r\n } else {\r\n entries.splice(this._editedIndex, 1, entry);\r\n }\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.closeId();\r\n }\r\n\r\n public deleteId(index: number): void {\r\n this._dialogService\r\n .confirm('Confirmation', 'Delete ID?')\r\n .pipe(take(1))\r\n .subscribe((yes) => {\r\n if (yes) {\r\n if (this._editedIndex === index) {\r\n this.closeId();\r\n }\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.emitIdsChange();\r\n }\r\n });\r\n }\r\n\r\n public moveIdUp(index: number): void {\r\n if (index < 1) {\r\n return;\r\n }\r\n const entry = this.entries.value[index];\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n entries.splice(index - 1, 0, entry);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.emitIdsChange();\r\n }\r\n\r\n public moveIdDown(index: number): void {\r\n if (index + 1 >= this.entries.value.length) {\r\n return;\r\n }\r\n const entry = this.entries.value[index];\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n entries.splice(index + 1, 0, entry);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.emitIdsChange();\r\n }\r\n\r\n public onIdChange(id: AssertedId): void {\r\n this.saveId(id);\r\n this.emitIdsChange();\r\n }\r\n}\r\n","<form [formGroup]=\"form\">\r\n <div>\r\n <button type=\"button\" mat-flat-button color=\"primary\" (click)=\"addId()\">\r\n <mat-icon>add_circle</mat-icon> ID\r\n </button>\r\n </div>\r\n <table *ngIf=\"entries.value?.length\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>scope</th>\r\n <th>value</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr\r\n *ngFor=\"\r\n let entry of entries.value;\r\n let i = index;\r\n let first = first;\r\n let last = last\r\n \"\r\n >\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n matTooltip=\"Edit this ID\"\r\n (click)=\"editId(entry, i)\"\r\n >\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this ID up\"\r\n [disabled]=\"first\"\r\n (click)=\"moveIdUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this ID down\"\r\n [disabled]=\"last\"\r\n (click)=\"moveIdDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"warn\"\r\n matTooltip=\"Delete this ID\"\r\n (click)=\"deleteId(i)\"\r\n >\r\n <mat-icon>remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ entry.scope }}</td>\r\n <td>{{ entry.value }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <mat-expansion-panel [expanded]=\"edited\" [disabled]=\"!edited\">\r\n <mat-expansion-panel-header>ID {{edited?.value}}</mat-expansion-panel-header>\r\n <cadmus-refs-asserted-id\r\n [idScopeEntries]=\"idScopeEntries\"\r\n [idTagEntries]=\"idTagEntries\"\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [hasSubmit]=\"true\"\r\n [id]=\"edited\"\r\n (idChange)=\"onIdChange($event)\"\r\n (editorClose)=\"closeId()\"\r\n ></cadmus-refs-asserted-id>\r\n </mat-expansion-panel>\r\n</form>\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable, map } from 'rxjs';\r\n\r\nimport { ItemService } from '@myrmidon/cadmus-api';\r\nimport { Item } from '@myrmidon/cadmus-core';\r\nimport {\r\n RefLookupFilter,\r\n RefLookupService,\r\n} from '@myrmidon/cadmus-refs-lookup';\r\nimport { DataPage } from '@myrmidon/ng-tools';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ItemRefLookupService implements RefLookupService {\r\n constructor(private _itemService: ItemService) {}\r\n\r\n public lookup(filter: RefLookupFilter, options?: any): Observable<Item[]> {\r\n return this._itemService\r\n .getItems(\r\n {\r\n title: filter.text,\r\n },\r\n 1,\r\n filter.limit || 10\r\n )\r\n .pipe(map((page: DataPage<Item>) => page.items));\r\n }\r\n\r\n getName(item: Item): string {\r\n return item?.title;\r\n }\r\n}\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Inject,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n} from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n Validators,\r\n} from '@angular/forms';\r\nimport {\r\n Subscription,\r\n debounceTime,\r\n distinctUntilChanged,\r\n forkJoin,\r\n take,\r\n} from 'rxjs';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\n\r\nimport { ItemService, ThesaurusService } from '@myrmidon/cadmus-api';\r\nimport {\r\n DataPinInfo,\r\n IndexLookupDefinition,\r\n IndexLookupDefinitions,\r\n Item,\r\n Part,\r\n ThesaurusEntry,\r\n} from '@myrmidon/cadmus-core';\r\n\r\nimport {\r\n PinRefLookupFilter,\r\n PinRefLookupService,\r\n} from '../services/pin-ref-lookup.service';\r\nimport { ItemRefLookupService } from '../services/item-ref-lookup.service';\r\n\r\n// from Cadmus general parts\r\nconst METADATA_PART_ID = 'it.vedph.metadata';\r\ninterface MetadataPart extends Part {\r\n metadata: {\r\n type?: string;\r\n name: string;\r\n value: string;\r\n }[];\r\n}\r\n\r\n/**\r\n * Pin lookup data used internally by the component.\r\n */\r\nexport interface PinLookupData {\r\n pin: DataPinInfo;\r\n item?: Item;\r\n metaPart?: MetadataPart;\r\n}\r\n\r\n/**\r\n * A pin-based target. This includes pin's name and value, and\r\n * the item's ID and optional part IDs. The label is a user friendly\r\n * string representation of the target, while the gid is a globally\r\n * unique identifier for the target.\r\n */\r\nexport interface PinTarget {\r\n gid: string;\r\n label: string;\r\n itemId?: string;\r\n partId?: string;\r\n partTypeId?: string;\r\n roleId?: string;\r\n name?: string;\r\n value?: string;\r\n}\r\n\r\n/*\r\n * Scoped pin-based lookup component. This component provides a list\r\n * of pin-based searches, with a lookup control. Whenever the user\r\n * picks a pin value, he gets the details about its item and part, and\r\n * item's metadata part, if any. He can then use these data to build\r\n * some EID by variously assembling these components.\r\n */\r\n@Component({\r\n selector: 'cadmus-pin-target-lookup',\r\n templateUrl: './pin-target-lookup.component.html',\r\n styleUrls: ['./pin-target-lookup.component.css'],\r\n})\r\nexport class PinTargetLookupComponent implements OnInit, OnDestroy {\r\n private _subs: Subscription[];\r\n private _target: PinTarget | undefined;\r\n private _noTargetUpdate?: boolean;\r\n private _startWithByTypeMode?: boolean;\r\n\r\n /**\r\n * True when the by-type pin lookup mode is active.\r\n * User can change mode unless modeSwitching is false.\r\n */\r\n @Input()\r\n public get pinByTypeMode(): boolean | undefined {\r\n return this.byTypeMode?.value;\r\n }\r\n public set pinByTypeMode(value: boolean | undefined) {\r\n if (!this.byTypeMode) {\r\n this._startWithByTypeMode = value;\r\n } else {\r\n this.byTypeMode.setValue(value || false);\r\n this.byTypeMode.updateValueAndValidity();\r\n }\r\n }\r\n\r\n /**\r\n * True when the user can switch between by-type and by-item mode.\r\n */\r\n @Input()\r\n public canSwitchMode?: boolean;\r\n /**\r\n * True when the user can edit the target's gid/label for internal\r\n * targets.\r\n */\r\n @Input()\r\n public canEditTarget?: boolean;\r\n /**\r\n * The lookup definitions to be used for the by-type lookup. If\r\n * not specified, the lookup definitions will be got via injection\r\n * when available; if the injected definitions are empty, the\r\n * lookup definitions will be built from the model-types thesaurus;\r\n * if this is not available either, the by-type lookup will be\r\n * disabled.\r\n */\r\n @Input()\r\n public lookupDefinitions?: IndexLookupDefinitions;\r\n\r\n /**\r\n * The target to be edited.\r\n */\r\n @Input()\r\n public get target(): PinTarget | undefined | null {\r\n return this._target;\r\n }\r\n public set target(value: PinTarget | undefined | null) {\r\n if (this._target === value) {\r\n return;\r\n }\r\n this._target = value || undefined;\r\n this.updateForm(this._target);\r\n }\r\n\r\n /**\r\n * The default value for part type key when the by-type mode is active.\r\n */\r\n @Input()\r\n public defaultPartTypeKey?: string | null;\r\n\r\n /**\r\n * Emitted when user closes the editor.\r\n */\r\n @Output()\r\n public editorClose: EventEmitter<any>;\r\n /**\r\n * Emitted whenever the target changes.\r\n * The event's value is the new target.\r\n */\r\n @Output()\r\n public targetChange: EventEmitter<PinTarget>;\r\n\r\n // by type\r\n public modelEntries: ThesaurusEntry[];\r\n public partTypeKeys: string[];\r\n // by item\r\n public itemParts: Part[];\r\n // form - by item\r\n public item: FormControl<Item | null>;\r\n public itemPart: FormControl<Part | null>;\r\n // form - by type\r\n public partTypeKey: FormControl<string | null>;\r\n // form - both\r\n public gid: FormControl<string | null>;\r\n public label: FormControl<string | null>;\r\n public byTypeMode: FormControl<boolean>;\r\n public external: FormControl<boolean>;\r\n public form: FormGroup;\r\n\r\n public filter: PinRefLookupFilter;\r\n public pinFilterOptions?: IndexLookupDefinition;\r\n public lookupData?: PinLookupData;\r\n\r\n constructor(\r\n @Inject('indexLookupDefinitions')\r\n private _presetLookupDefs: IndexLookupDefinitions,\r\n public itemLookupService: ItemRefLookupService,\r\n public pinLookupService: PinRefLookupService,\r\n private _itemService: ItemService,\r\n private _thesService: ThesaurusService,\r\n private _snackbar: MatSnackBar,\r\n formBuilder: FormBuilder\r\n ) {\r\n this.partTypeKeys = [];\r\n this.itemParts = [];\r\n this._subs = [];\r\n this.modelEntries = [];\r\n // this is the default filter for the pin lookup, which will\r\n // be merged with values provided by user here\r\n this.filter = {\r\n text: '',\r\n limit: 10,\r\n };\r\n // form\r\n this.item = formBuilder.control(null);\r\n this.itemPart = formBuilder.control(null);\r\n this.partTypeKey = formBuilder.control(null);\r\n this.gid = formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(300),\r\n ]);\r\n this.label = formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(300),\r\n ]);\r\n this.byTypeMode = formBuilder.control(false, { nonNullable: true });\r\n this.external = formBuilder.control(false, { nonNullable: true });\r\n this.form = formBuilder.group({\r\n item: this.item,\r\n itemPart: this.itemPart,\r\n partTypeKey: this.partTypeKey,\r\n gid: this.gid,\r\n label: this.label,\r\n byTypeMode: this.byTypeMode,\r\n external: this.external,\r\n });\r\n // events\r\n this.targetChange = new EventEmitter<PinTarget>();\r\n this.editorClose = new EventEmitter<any>();\r\n }\r\n\r\n private forceByItem(): void {\r\n this.pinByTypeMode = false;\r\n this.canSwitchMode = false;\r\n }\r\n\r\n private setupKeys(): void {\r\n // use DI presets if no lookup definitions\r\n if (!this.lookupDefinitions) {\r\n this.lookupDefinitions = this._presetLookupDefs;\r\n }\r\n // keys are all the defined lookup searches\r\n this.partTypeKeys = Object.keys(this.lookupDefinitions);\r\n\r\n // if no keys, get them from thesaurus model-types;\r\n // if this is not available, just force by item mode.\r\n if (!this.partTypeKeys.length) {\r\n if (this.modelEntries?.length) {\r\n // set lookupDefinitions from thesaurus entries\r\n this.lookupDefinitions = {};\r\n this.modelEntries.forEach((e) => {\r\n this.lookupDefinitions![e.value] = {\r\n name: e.value,\r\n typeId: e.id,\r\n };\r\n });\r\n // set type keys from thesaurus entries\r\n this.partTypeKeys = this.modelEntries.map((e) => e.value);\r\n }\r\n }\r\n\r\n // if still no keys, force by item mode\r\n if (!this.partTypeKeys.length) {\r\n this.forceByItem();\r\n } else {\r\n // set default key\r\n this.partTypeKey.setValue(\r\n this.defaultPartTypeKey || this.partTypeKeys[0]\r\n );\r\n }\r\n }\r\n\r\n public ngOnInit(): void {\r\n // set start mode if required\r\n if (this._startWithByTypeMode) {\r\n this.byTypeMode.setValue(true);\r\n }\r\n\r\n // whenever item changes, update item's parts and filter\r\n this._subs.push(\r\n this.item.valueChanges\r\n .pipe(distinctUntilChanged(), debounceTime(300))\r\n .subscribe((item) => {\r\n this.itemPart.setValue(null);\r\n this.itemParts = item?.parts || [];\r\n this.filter = {\r\n ...this.filter,\r\n itemId: item?.id,\r\n };\r\n })\r\n );\r\n\r\n // whenever itemPart changes, update target and eventually gid\r\n this._subs.push(\r\n this.itemPart.valueChanges\r\n .pipe(distinctUntilChanged(), debounceTime(300))\r\n .subscribe((part) => {\r\n if (!this.gid.value || this.gid.pristine) {\r\n this.gid.setValue(this.buildGid());\r\n }\r\n this.filter = {\r\n ...this.filter,\r\n partId: part?.id,\r\n };\r\n this.updateTarget();\r\n })\r\n );\r\n\r\n // whenever partTypeKey changes, update filter's options\r\n this._subs.push(\r\n this.partTypeKey.valueChanges\r\n .pipe(distinctUntilChanged(), debounceTime(300))\r\n .subscribe((key) => {\r\n this.pinFilterOptions = key\r\n ? this.lookupDefinitions![key]\r\n : undefined;\r\n })\r\n );\r\n\r\n // whenever external changes, set required validator in label\r\n // (true for external, false for internal)\r\n this._subs.push(\r\n this.external.valueChanges\r\n .pipe(distinctUntilChanged(), debounceTime(300))\r\n .subscribe((external) => {\r\n if (external) {\r\n this.label.setValidators([\r\n Validators.required,\r\n Validators.maxLength(300),\r\n ]);\r\n } else {\r\n this.label.setValidators([Validators.maxLength(300)]);\r\n }\r\n this.label.updateValueAndValidity();\r\n })\r\n );\r\n\r\n // load model-types thesaurus entries\r\n this._thesService.getThesaurus('model-types', true).subscribe({\r\n next: (t) => {\r\n this.modelEntries = t.entries || [];\r\n if (this.modelEntries?.length) {\r\n this.setupKeys();\r\n } else {\r\n this.forceByItem();\r\n }\r\n },\r\n error: () => {\r\n this.forceByItem();\r\n },\r\n });\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n for (let i = 0; i < this._subs.length; i++) {\r\n this._subs[i].unsubscribe();\r\n }\r\n }\r\n\r\n private buildGid(): string | null {\r\n // the GID is the part ID if any, or the item ID, followed by\r\n // the pin's value (=EID)\r\n const pin = this.lookupData?.pin;\r\n if (!pin?.value) {\r\n return null;\r\n }\r\n return pin.partId\r\n ? `P${pin.partId}/${pin.value}`\r\n : `I${pin.itemId}/${pin.value}`;\r\n }\r\n\r\n private buildLabel(): string | null {\r\n if (!this.lookupData?.pin) {\r\n return null;\r\n }\r\n const sb: string[] = [];\r\n // pin value\r\n if (this.lookupData.pin.value) {\r\n sb.push(this.lookupData.pin.value);\r\n sb.push(' | ');\r\n }\r\n // item title\r\n sb.push(this.lookupData.item?.title || this.lookupData.pin?.itemId);\r\n // part type and role\r\n if (this.lookupData.pin.partTypeId) {\r\n const e = this.modelEntries?.find(\r\n (e) => e.id === this.lookupData!.pin.partTypeId\r\n );\r\n sb.push(' (');\r\n sb.push(e?.value || this.lookupData.pin.partTypeId);\r\n if (this.lookupData.pin.roleId) {\r\n sb.push(`, ${this.lookupData.pin.roleId}`);\r\n }\r\n sb.push(')');\r\n }\r\n return sb.join('');\r\n }\r\n\r\n private getTarget(): PinTarget {\r\n if (this.external.value) {\r\n return {\r\n gid: this.gid.value || '',\r\n label: this.label.value || '',\r\n };\r\n } else {\r\n const pin = this.lookupData?.pin;\r\n return {\r\n gid: this.gid.value || '',\r\n label: this.label.value || '',\r\n itemId: pin?.itemId || '',\r\n partId: pin?.partId || '',\r\n partTypeId: pin?.partTypeId || '',\r\n roleId: pin?.roleId || '',\r\n name: pin?.name || '',\r\n value: pin?.value || '',\r\n };\r\n }\r\n }\r\n\r\n private updateTarget(): void {\r\n if (this._noTargetUpdate) {\r\n return;\r\n }\r\n if (!this.external.value) {\r\n this.gid.setValue(this.buildGid());\r\n this.gid.updateValueAndValidity();\r\n this.gid.markAsDirty();\r\n this.label.setValue(this.buildLabel());\r\n this.label.updateValueAndValidity();\r\n this.label.markAsDirty();\r\n }\r\n this._target = this.getTarget();\r\n }\r\n\r\n private updateForm(target?: PinTarget): void {\r\n // build pin info from target\r\n if (!target) {\r\n this.lookupData = undefined;\r\n this.item.reset();\r\n this.itemPart.reset();\r\n this.gid.reset();\r\n this.label.reset();\r\n return;\r\n }\r\n this._noTargetUpdate = true;\r\n this.gid.setValue(target.gid || '');\r\n this.label.setValue(target.label || '');\r\n this.lookupData = {\r\n pin: {\r\n itemId: target.itemId || '',\r\n partId: target.partId || '',\r\n partTypeId: target.partTypeId || '',\r\n roleId: target.roleId || '',\r\n name: target.name || '',\r\n value: target.value || '',\r\n },\r\n };\r\n // get item\r\n if (target.itemId) {\r\n this._itemService.getItem(target.itemId, true).subscribe({\r\n next: (item) => {\r\n this.item.setValue(item);\r\n this.form.markAsPristine();\r\n this._noTargetUpdate = false;\r\n this.external.setValue(!target.name);\r\n this.updateTarget();\r\n },\r\n error: (error) => {\r\n if (error) {\r\n console.error(JSON.stringify(error));\r\n }\r\n this.external.setValue(!target.name);\r\n this._noTargetUpdate = false;\r\n },\r\n });\r\n } else {\r\n this.external.setValue(!target.name);\r\n this._noTargetUpdate = false;\r\n this.updateTarget();\r\n }\r\n }\r\n\r\n /**\r\n * Called when the item lookup changes (item is looked up\r\n * by its title).\r\n *\r\n * @param item The item got from lookup.\r\n */\r\n public onItemLookupChange(item: Item): void {\r\n // load item's parts\r\n this._itemService.getItem(item.id, true).subscribe({\r\n next: (i) => {\r\n // setting the item will trigger its parts update\r\n this.item.setValue(i);\r\n this.updateTarget();\r\n },\r\n error: (error) => {\r\n if (error) {\r\n console.error(JSON.stringify(error));\r\n }\r\n this.itemPart.setValue(null);\r\n this.itemParts = [];\r\n this.updateTarget();\r\n },\r\n });\r\n }\r\n\r\n private loadItemInfo(pin: DataPinInfo): void {\r\n forkJoin({\r\n item: this._itemService.getItem(pin.itemId, false),\r\n part: this._itemService.getPartFromTypeAndRole(\r\n pin.itemId,\r\n METADATA_PART_ID\r\n ),\r\n })\r\n .pipe(take(1))\r\n .subscribe({\r\n next: (result) => {\r\n this.lookupData = {\r\n pin: pin,\r\n item: result.item,\r\n metaPart: result.part as MetadataPart,\r\n };\r\n this.updateTarget();\r\n },\r\n error: (error) => {\r\n this.lookupData = undefined;\r\n console.error(\r\n error ? JSON.stringify(error) : 'Error loading item/metadata'\r\n );\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Called when the pin lookup change. A pin is looked up by its\r\n * name and value (=the filter's text), and optionally by:\r\n * - its index lookup definition (selected by partTypeKey).\r\n * - its item (defined by item, in filter).\r\n * - its part (defined by itemPart, in filter).\r\n *\r\n * @param info The pin info from pin lookup.\r\n */\r\n public onPinLookupChange(info: DataPinInfo): void {\r\n this.loadItemInfo(info);\r\n }\r\n\r\n public onCopied(): void {\r\n this._snackbar.open('Copied to clipboard', 'OK', {\r\n duration: 1500,\r\n });\r\n }\r\n\r\n public close(): void {\r\n this.editorClose.emit();\r\n }\r\n\r\n public save(): void {\r\n if (this.form.invalid) {\r\n return;\r\n }\r\n this._target = this.getTarget();\r\n this.targetChange.emit(this._target);\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <div class=\"form-row\">\r\n <!-- external -->\r\n <mat-checkbox [formControl]=\"external\">external</mat-checkbox>\r\n <!-- mode switcher -->\r\n <div *ngIf=\"!external.value\">\r\n <mat-checkbox [formControl]=\"byTypeMode\" *ngIf=\"canSwitchMode\">\r\n by type</mat-checkbox\r\n >\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-row\">\r\n <!-- label -->\r\n <div>\r\n <mat-form-field *ngIf=\"external.value || canEditTarget\">\r\n <mat-label>label</mat-label>\r\n <input matInput [formControl]=\"label\" />\r\n <mat-error\r\n *ngIf=\"$any(label).errors?.required && (label.dirty || label.touched)\"\r\n >label required</mat-error\r\n >\r\n <mat-error\r\n *ngIf=\"\r\n $any(label).errors?.maxLength && (label.dirty || label.touched)\r\n \"\r\n >label too long</mat-error\r\n >\r\n </mat-form-field>\r\n <div\r\n *ngIf=\"!external.value && !canEditTarget && label.value\"\r\n class=\"info\"\r\n >\r\n <span class=\"label\">label</span>{{ label.value }}\r\n </div>\r\n </div>\r\n\r\n <!-- gid -->\r\n <div>\r\n <mat-form-field *ngIf=\"external.value || canEditTarget\">\r\n <mat-label>GID</mat-label>\r\n <input matInput [formControl]=\"gid\" />\r\n <mat-error\r\n *ngIf=\"$any(gid).errors?.required && (gid.dirty || gid.touched)\"\r\n >GID required</mat-error\r\n >\r\n <mat-error\r\n *ngIf=\"$any(gid).errors?.maxLength && (gid.dirty || gid.touched)\"\r\n >GID too long</mat-error\r\n >\r\n </mat-form-field>\r\n <div *ngIf=\"!external.value && !canEditTarget && gid.value\" class=\"info\">\r\n <span class=\"label\">GID</span> <span class=\"gid\">{{ gid.value }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- BY ITEM -->\r\n <div *ngIf=\"!external.value\">\r\n <fieldset *ngIf=\"!byTypeMode.value\" class=\"form-row\">\r\n <legend>pin filters</legend>\r\n <!-- item filter -->\r\n <cadmus-ref-lookup\r\n [service]=\"itemLookupService\"\r\n label=\"item\"\r\n (itemChange)=\"onItemLookupChange($event)\"\r\n ></cadmus-ref-lookup>\r\n\r\n <!-- part filter -->\r\n <mat-form-field *ngIf=\"itemParts.length\">\r\n <mat-label>part</mat-label>\r\n <mat-select [formControl]=\"itemPart\">\r\n <mat-option [value]=\"null\">(any)</mat-option>\r\n <mat-option *ngFor=\"let p of itemParts\" [value]=\"p\">{{\r\n p.typeId | flatLookup : modelEntries : \"id\" : \"value\"\r\n }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </fieldset>\r\n\r\n <!-- BY TYPE -->\r\n <div *ngIf=\"byTypeMode.value\">\r\n <!-- par type filter -->\r\n <mat-form-field *ngIf=\"partTypeKeys?.length\">\r\n <mat-label>part type</mat-label>\r\n <mat-select [formControl]=\"partTypeKey\">\r\n <mat-option *ngFor=\"let k of partTypeKeys\" [value]=\"k\">{{\r\n k\r\n }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <!-- PIN -->\r\n <div *ngIf=\"partTypeKey.value\">\r\n <!-- pin lookup -->\r\n <cadmus-ref-lookup\r\n [service]=\"pinLookupService\"\r\n [baseFilter]=\"filter\"\r\n [options]=\"pinFilterOptions\"\r\n label=\"pin\"\r\n (itemChange)=\"onPinLookupChange($event)\"\r\n ></cadmus-ref-lookup>\r\n </div>\r\n\r\n <!-- data -->\r\n <mat-expansion-panel id=\"data\" *ngIf=\"lookupData?.pin?.name\">\r\n <mat-expansion-panel-header>pin data</mat-expansion-panel-header>\r\n <!-- table -->\r\n <table>\r\n <thead>\r\n <th></th>\r\n <th>source</th>\r\n <th>value</th>\r\n </thead>\r\n <tbody>\r\n <!-- pin -->\r\n <tr *ngIf=\"lookupData?.pin?.value\">\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n [cdkCopyToClipboard]=\"lookupData!.pin!.value\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon>content_copy</mat-icon>\r\n </button>\r\n </td>\r\n <td>pin</td>\r\n <td>{{ lookupData!.pin.value }}</td>\r\n </tr>\r\n <!-- item ID -->\r\n <tr *ngIf=\"lookupData?.pin?.itemId\">\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n [cdkCopyToClipboard]=\"lookupData!.pin!.itemId\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon>content_copy</mat-icon>\r\n </button>\r\n </td>\r\n <td>item ID</td>\r\n <td>{{ lookupData!.pin.itemId }}</td>\r\n </tr>\r\n <!-- item title -->\r\n <tr *ngIf=\"lookupData?.item?.title\">\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n [cdkCopyToClipboard]=\"lookupData!.item!.title\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon>content_copy</mat-icon>\r\n </button>\r\n </td>\r\n <td>item title</td>\r\n <td>{{ lookupData!.item!.title }}</td>\r\n </tr>\r\n <!-- part ID -->\r\n <tr *ngIf=\"lookupData?.pin?.partId\">\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n [cdkCopyToClipboard]=\"lookupData!.pin!.partId\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon>content_copy</mat-icon>\r\n </button>\r\n </td>\r\n <td>part ID</td>\r\n <td>{{ lookupData!.pin.partId }}</td>\r\n </tr>\r\n <!-- part type ID -->\r\n <tr *ngIf=\"lookupData?.pin?.partTypeId\">\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n [cdkCopyToClipboard]=\"lookupData!.pin!.partTypeId\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon>content_copy</mat-icon>\r\n </button>\r\n </td>\r\n <td>part type ID</td>\r\n <td>{{ lookupData!.pin!.partTypeId }}</td>\r\n </tr>\r\n <!-- part role ID -->\r\n <tr *ngIf=\"lookupData?.pin?.roleId\">\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n [cdkCopyToClipboard]=\"lookupData!.pin!.roleId!\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon>content_copy</mat-icon>\r\n </button>\r\n </td>\r\n <td>part role ID</td>\r\n <td>{{ lookupData!.pin!.roleId }}</td>\r\n </tr>\r\n\r\n <!-- part's metadata -->\r\n <tr\r\n *ngFor=\"\r\n let m of lookupData?.metaPart?.metadata || [];\r\n let i = index\r\n \"\r\n >\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n [cdkCopyToClipboard]=\"m.value\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon>content_copy</mat-icon>\r\n </button>\r\n </td>\r\n <td class=\"metadata\">{{ m.name }}</td>\r\n <td class=\"metadata\">{{ m.value }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </mat-expansion-panel>\r\n </div>\r\n\r\n <!-- buttons -->\r\n <div>\r\n <button mat-flat-button type=\"button\" (click)=\"close()\">\r\n <mat-icon color=\"warn\">close</mat-icon>\r\n </button>\r\n <button mat-flat-button type=\"submit\" [disabled]=\"form.invalid\">\r\n <mat-icon color=\"primary\">check_circle</mat-icon> target\r\n </button>\r\n </div>\r\n</form>\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Inject,\r\n Input,\r\n OnInit,\r\n Output,\r\n} from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { debounceTime } from 'rxjs/operators';\r\n\r\nimport { IndexLookupDefinitions, ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport { Assertion } from '@myrmidon/cadmus-refs-assertion';\r\n\r\nimport { PinRefLookupService } from '../services/pin-ref-lookup.service';\r\nimport { PinTarget } from '../pin-target-lookup/pin-target-lookup.component';\r\n\r\n/**\r\n * An asserted composite ID. This can be an external ID, having only the ID value\r\n * as its target.gid property; or a lookup ID, with a pin-based target.\r\n * In both cases, we can add a tag, a scope, and an assertion.\r\n */\r\nexport interface AssertedCompositeId {\r\n target: PinTarget;\r\n tag?: string;\r\n scope?: string;\r\n assertion?: Assertion;\r\n}\r\n\r\n@Component({\r\n selector: 'cadmus-refs-asserted-composite-id',\r\n templateUrl: './asserted-composite-id.component.html',\r\n styleUrls: ['./asserted-composite-id.component.css'],\r\n})\r\nexport class AssertedCompositeIdComponent implements OnInit {\r\n private _updatingForm: boolean | undefined;\r\n private _id: AssertedCompositeId | undefined;\r\n\r\n public target: FormControl<PinTarget | null>;\r\n public scope: FormControl<string | null>;\r\n public tag: FormControl<string | null>;\r\n public assertion: FormControl<Assertion | null>;\r\n public form: FormGroup;\r\n\r\n public targetExpanded: boolean;\r\n\r\n // asserted-id-scopes\r\n @Input()\r\n public idScopeEntries?: ThesaurusEntry[];\r\n\r\n // asserted-id-tags\r\n @Input()\r\n public idTagEntries?: ThesaurusEntry[];\r\n\r\n // assertion-tags\r\n @Input()\r\n public assTagEntries?: ThesaurusEntry[];\r\n\r\n // doc-reference-types\r\n @Input()\r\n public refTypeEntries: ThesaurusEntry[] | undefined;\r\n\r\n // doc-reference-tags\r\n @Input()\r\n public refTagEntries: ThesaurusEntry[] | undefined;\r\n\r\n @Input()\r\n public get id(): AssertedCompositeId | undefined | null {\r\n return this._id;\r\n }\r\n public set id(value: AssertedCompositeId | undefined | null) {\r\n if (this._id !== value) {\r\n this._id = value || undefined;\r\n this.updateForm(this._id);\r\n }\r\n }\r\n\r\n /**\r\n * True if the UI has a submit button.\r\n */\r\n @Input()\r\n public hasSubmit: boolean | undefined;\r\n\r\n /**\r\n * True when the internal UI preselected mode should be by type rather than\r\n * by item. User can change mode unless modeSwitching is false.\r\n */\r\n @Input()\r\n public pinByTypeMode?: boolean;\r\n /**\r\n * True when the user can switch between by-type and by-item mode in\r\n * the internal UI.\r\n */\r\n @Input()\r\n public canSwitchMode?: boolean;\r\n /**\r\n * True when the user can edit the target's gid/label for internal targets.\r\n */\r\n @Input()\r\n public canEditTarget?: boolean;\r\n /**\r\n * The lookup definitions to be used for the by-type lookup in the internal UI.\r\n * If not specified, the lookup definitions will be got via injection\r\n * when available; if the injected definitions are empty, the\r\n * lookup definitions will be built from the model-types thesaurus;\r\n * if this is not available either, the by-type lookup will be\r\n * disabled.\r\n */\r\n @Input()\r\n public lookupDefinitions?: IndexLookupDefinitions;\r\n\r\n /**\r\n * The default part type key to be used.\r\n */\r\n @Input()\r\n public defaultPartTypeKey?: string | null;\r\n\r\n /**\r\n * Emitted whenever the ID changes.\r\n */\r\n @Output()\r\n public idChange: EventEmitter<AssertedCompositeId>;\r\n\r\n /**\r\n * Emitted whenever the user requests to close the editor.\r\n */\r\n @Output()\r\n public editorClose: EventEmitter<any>;\r\n\r\n constructor(\r\n formBuilder: FormBuilder,\r\n public lookupService: PinRefLookupService,\r\n @Inject('indexLookupDefinitions')\r\n public lookupDefs: IndexLookupDefinitions\r\n ) {\r\n this.target = formBuilder.control(null, Validators.required);\r\n this.scope = formBuilder.control(null, Validators.maxLength(500));\r\n this.tag = formBuilder.control(null, Validators.maxLength(50));\r\n this.assertion = formBuilder.control(null);\r\n this.form = formBuilder.group({\r\n target: this.target,\r\n scope: this.scope,\r\n tag: this.tag,\r\n assertion: this.assertion,\r\n });\r\n this.targetExpanded = false;\r\n // events\r\n this.idChange = new EventEmitter<AssertedCompositeId>();\r\n this.editorClose = new EventEmitter<any>();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.form.valueChanges.pipe(debounceTime(300)).subscribe((_) => {\r\n if (!this._updatingForm) {\r\n this.emitIdChange();\r\n }\r\n });\r\n }\r\n\r\n public onAssertionChange(assertion: Assertion | undefined): void {\r\n this.assertion.setValue(assertion || null);\r\n }\r\n\r\n public onTargetChange(target: PinTarget): void {\r\n this.target.setValue(target);\r\n this.target.markAsDirty();\r\n this.target.updateValueAndValidity();\r\n this.targetExpanded = false;\r\n }\r\n\r\n private updateForm(id: AssertedCompositeId | undefined): void {\r\n this._updatingForm = true;\r\n if (!id) {\r\n this.form.reset();\r\n } else {\r\n this.target.setValue(id.target);\r\n this.scope.setValue(id.scope || null);\r\n this.tag.setValue(id.tag || null);\r\n this.assertion.setValue(id.assertion || null);\r\n this.form.markAsPristine();\r\n }\r\n this._updatingForm = false;\r\n }\r\n\r\n private getId(): AssertedCompositeId {\r\n const external = !this.target.value?.name;\r\n const target = this.target.value;\r\n return {\r\n target: external\r\n ? {\r\n gid: target?.gid || '',\r\n label: target?.label || target?.gid || '',\r\n }\r\n : target!,\r\n scope: this.scope.value?.trim() || '',\r\n tag: this.tag.value?.trim(),\r\n assertion: this.assertion.value || undefined,\r\n };\r\n }\r\n\r\n public emitIdChange(): void {\r\n if (!this.hasSubmit) {\r\n this._id = this.getId();\r\n this.idChange.emit(this._id);\r\n }\r\n }\r\n\r\n public onEditorClose(): void {\r\n this.targetExpanded = false;\r\n }\r\n\r\n public cancel(): void {\r\n this.editorClose.emit();\r\n }\r\n\r\n public save(): void {\r\n if (this.form.valid) {\r\n this._id = this.getId();\r\n this.idChange.emit(this._id);\r\n }\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <div>\r\n <div class=\"form-row\">\r\n <!-- tag (bound) -->\r\n <mat-form-field *ngIf=\"idTagEntries?.length\" class=\"short-text\">\r\n <mat-label>tag</mat-label>\r\n <mat-select [formControl]=\"tag\">\r\n <mat-option *ngFor=\"let e of idTagEntries\" [value]=\"e.id\">{{\r\n e.value\r\n }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <!-- tag (free) -->\r\n <mat-form-field *ngIf=\"!idTagEntries?.length\" class=\"short-text\">\r\n <mat-label>tag</mat-label>\r\n <input matInput [formControl]=\"tag\" />\r\n <mat-error *ngIf=\"tag.errors?.maxLength && (tag.dirty || tag.touched)\"\r\n >tag too long</mat-error\r\n >\r\n </mat-form-field>\r\n\r\n <!-- scope (bound) -->\r\n <mat-form-field *ngIf=\"idScopeEntries?.length\" class=\"short-text\">\r\n <mat-label>scope</mat-label>\r\n <mat-select [formControl]=\"scope\">\r\n <mat-option *ngFor=\"let e of idScopeEntries\" [value]=\"e.id\">{{\r\n e.value\r\n }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <!-- scope (free) -->\r\n <mat-form-field *ngIf=\"!idScopeEntries?.length\" class=\"short-text\">\r\n <mat-label>scope</mat-label>\r\n <input matInput [formControl]=\"scope\" />\r\n <mat-error\r\n *ngIf=\"scope.errors?.maxLength && (scope.dirty || scope.touched)\"\r\n >scope too long</mat-error\r\n >\r\n </mat-form-field>\r\n\r\n <!-- label and GID -->\r\n <div class=\"info\" *ngIf=\"target.value?.label\">\r\n <span class=\"label\">label</span>{{ target.value?.label }}\r\n </div>\r\n <div class=\"info\" *ngIf=\"target.value?.gid\">\r\n <span class=\"label\">GID</span>{{ target.value?.gid }}\r\n </div>\r\n </div>\r\n\r\n <!-- target -->\r\n <div>\r\n <mat-expansion-panel [(expanded)]=\"targetExpanded\">\r\n <mat-expansion-panel-header>target</mat-expansion-panel-header>\r\n <cadmus-pin-target-lookup\r\n [pinByTypeMode]=\"pinByTypeMode\"\r\n [canSwitchMode]=\"canSwitchMode\"\r\n [canEditTarget]=\"canEditTarget\"\r\n [lookupDefinitions]=\"lookupDefinitions\"\r\n [defaultPartTypeKey]=\"defaultPartTypeKey\"\r\n [target]=\"target.value\"\r\n (targetChange)=\"onTargetChange($event)\"\r\n (editorClose)=\"onEditorClose()\"\r\n ></cadmus-pin-target-lookup>\r\n </mat-expansion-panel>\r\n </div>\r\n\r\n <!-- assertion -->\r\n <br />\r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header>assertion</mat-expansion-panel-header>\r\n <cadmus-refs-assertion\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [assertion]=\"assertion.value\"\r\n (assertionChange)=\"onAssertionChange($event)\"\r\n >\r\n </cadmus-refs-assertion>\r\n </mat-expansion-panel>\r\n </div>\r\n\r\n <!-- buttons -->\r\n <div *ngIf=\"hasSubmit\">\r\n <button\r\n mat-icon-button\r\n color=\"warn\"\r\n type=\"button\"\r\n (click)=\"cancel()\"\r\n [disabled]=\"!this.target.value?.gid || !this.target.value?.label\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n <button\r\n mat-icon-button\r\n color=\"primary\"\r\n type=\"submit\"\r\n [disabled]=\"form.invalid\"\r\n >\r\n <mat-icon>check_circle</mat-icon>\r\n </button>\r\n </div>\r\n</form>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { FormBuilder, FormControl, FormGroup } from '@angular/forms';\r\nimport { take } from 'rxjs';\r\n\r\nimport { IndexLookupDefinitions, ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport { DialogService } from '@myrmidon/ng-mat-tools';\r\n\r\nimport { AssertedCompositeId } from '../asserted-composite-id/asserted-composite-id.component';\r\n\r\n/**\r\n * Asserted IDs editor.\r\n */\r\n@Component({\r\n selector: 'cadmus-refs-asserted-composite-ids',\r\n templateUrl: './asserted-composite-ids.component.html',\r\n styleUrls: ['./asserted-composite-ids.component.css'],\r\n})\r\nexport class AssertedCompositeIdsComponent {\r\n private _ids: AssertedCompositeId[];\r\n private _editedIndex: number;\r\n public edited?: AssertedCompositeId;\r\n\r\n /**\r\n * The asserted IDs.\r\n */\r\n @Input()\r\n public get ids(): AssertedCompositeId[] {\r\n return this._ids;\r\n }\r\n public set ids(value: AssertedCompositeId[]) {\r\n if (this._ids !== value) {\r\n this._ids = value || [];\r\n this.updateForm(value);\r\n }\r\n }\r\n\r\n // asserted-id-scopes\r\n @Input()\r\n public idScopeEntries?: ThesaurusEntry[];\r\n\r\n // asserted-id-tags\r\n @Input()\r\n public idTagEntries?: ThesaurusEntry[];\r\n\r\n // assertion-tags\r\n @Input()\r\n public assTagEntries?: ThesaurusEntry[];\r\n\r\n // doc-reference-types\r\n @Input()\r\n public refTypeEntries: ThesaurusEntry[] | undefined;\r\n\r\n // doc-reference-tags\r\n @Input()\r\n public refTagEntries: ThesaurusEntry[] | undefined;\r\n\r\n /**\r\n * True when the internal UI preselected mode should be by type rather than\r\n * by item. User can change mode unless modeSwitching is false.\r\n */\r\n @Input()\r\n public pinByTypeMode?: boolean;\r\n /**\r\n * True when the user can switch between by-type and by-item mode in\r\n * the internal UI.\r\n */\r\n @Input()\r\n public canSwitchMode?: boolean;\r\n /**\r\n * True when the user can edit the target's gid/label for internal targets.\r\n */\r\n @Input()\r\n public canEditTarget?: boolean;\r\n /**\r\n * The lookup definitions to be used for the by-type lookup in the internal UI.\r\n * If not specified, the lookup definitions will be got via injection\r\n * when available; if the injected definitions are empty, the\r\n * lookup definitions will be built from the model-types thesaurus;\r\n * if this is not available either, the by-type lookup will be\r\n * disabled.\r\n */\r\n @Input()\r\n public lookupDefinitions?: IndexLookupDefinitions;\r\n\r\n /**\r\n * The default part type key.\r\n */\r\n @Input()\r\n public defaultPartTypeKey?: string | null;\r\n\r\n /**\r\n * Emitted whenever any ID changes.\r\n */\r\n @Output()\r\n public idsChange: EventEmitter<AssertedCompositeId[]>;\r\n\r\n public entries: FormControl<AssertedCompositeId[]>;\r\n public form: FormGroup;\r\n\r\n constructor(formBuilder: FormBuilder, private _dialogService: DialogService) {\r\n this._ids = [];\r\n this._editedIndex = -1;\r\n this.idsChange = new EventEmitter<AssertedCompositeId[]>();\r\n this.entries = formBuilder.control([], { nonNullable: true });\r\n // form\r\n this.form = formBuilder.group({\r\n ids: this.entries,\r\n });\r\n }\r\n\r\n private updateForm(ids: AssertedCompositeId[]): void {\r\n if (!ids?.length) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.entries.setValue(ids, { emitEvent: false });\r\n this.entries.updateValueAndValidity();\r\n this.form.markAsPristine();\r\n }\r\n\r\n private emitIdsChange(): void {\r\n this.idsChange.emit(this.entries.value);\r\n }\r\n\r\n public addId(): void {\r\n this.editId(\r\n {\r\n target: { gid: '', label: '' },\r\n },\r\n -1\r\n );\r\n }\r\n\r\n public editId(id: AssertedCompositeId, index: number): void {\r\n this._editedIndex = index;\r\n this.edited = id;\r\n }\r\n\r\n public closeId(): void {\r\n this._editedIndex = -1;\r\n this.edited = undefined;\r\n }\r\n\r\n public saveId(entry: AssertedCompositeId): void {\r\n const entries = [...this.entries.value];\r\n if (this._editedIndex === -1) {\r\n entries.push(entry);\r\n } else {\r\n entries.splice(this._editedIndex, 1, entry);\r\n }\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.closeId();\r\n }\r\n\r\n public deleteId(index: number): void {\r\n this._dialogService\r\n .confirm('Confirmation', 'Delete ID?')\r\n .pipe(take(1))\r\n .subscribe((yes) => {\r\n if (yes) {\r\n if (this._editedIndex === index) {\r\n this.closeId();\r\n }\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.emitIdsChange();\r\n }\r\n });\r\n }\r\n\r\n public moveIdUp(index: number): void {\r\n if (index < 1) {\r\n return;\r\n }\r\n const entry = this.entries.value[index];\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n entries.splice(index - 1, 0, entry);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.emitIdsChange();\r\n }\r\n\r\n public moveIdDown(index: number): void {\r\n if (index + 1 >= this.entries.value.length) {\r\n return;\r\n }\r\n const entry = this.entries.value[index];\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n entries.splice(index + 1, 0, entry);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.emitIdsChange();\r\n }\r\n\r\n public onIdChange(id: AssertedCompositeId): void {\r\n this.saveId(id);\r\n this.emitIdsChange();\r\n }\r\n}\r\n","<form [formGroup]=\"form\">\r\n <!-- buttons -->\r\n <button type=\"button\" color=\"primary\" mat-flat-button (click)=\"addId()\">\r\n <mat-icon>add_circle</mat-icon> ID\r\n </button>\r\n <!-- list -->\r\n <table *ngIf=\"entries.value?.length\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>scope</th>\r\n <th>label</th>\r\n <th>value</th>\r\n <th>ass.</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr\r\n *ngFor=\"\r\n let entry of entries.value;\r\n let i = index;\r\n let first = first;\r\n let last = last\r\n \"\r\n >\r\n <td class=\"fit-width\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n matTooltip=\"Edit this ID\"\r\n (click)=\"editId(entry, i)\"\r\n >\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this ID up\"\r\n [disabled]=\"first\"\r\n (click)=\"moveIdUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this ID down\"\r\n [disabled]=\"last\"\r\n (click)=\"moveIdDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"warn\"\r\n matTooltip=\"Delete this ID\"\r\n (click)=\"deleteId(i)\"\r\n >\r\n <mat-icon>remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ entry.scope }}</td>\r\n <td>{{ entry?.target?.label }}</td>\r\n <td>{{ entry?.target?.gid }}</td>\r\n <td>{{ entry?.assertion ? \"Y\" : \"N\" }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <!-- editor -->\r\n <mat-expansion-panel [expanded]=\"edited\" [disabled]=\"!edited\">\r\n <mat-expansion-panel-header\r\n >ID {{ edited?.target?.label }}</mat-expansion-panel-header\r\n >\r\n <cadmus-refs-asserted-composite-id\r\n [idScopeEntries]=\"idScopeEntries\"\r\n [idTagEntries]=\"idTagEntries\"\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [hasSubmit]=\"true\"\r\n [pinByTypeMode]=\"pinByTypeMode\"\r\n [canSwitchMode]=\"canSwitchMode\"\r\n [canEditTarget]=\"canEditTarget\"\r\n [lookupDefinitions]=\"lookupDefinitions\"\r\n [defaultPartTypeKey]=\"defaultPartTypeKey\"\r\n [id]=\"edited\"\r\n (idChange)=\"onIdChange($event)\"\r\n (editorClose)=\"closeId()\"\r\n ></cadmus-refs-asserted-composite-id>\r\n </mat-expansion-panel>\r\n</form>\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\n\r\nimport { ClipboardModule } from '@angular/cdk/clipboard';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatSelectModule } from '@angular/material/select';\r\n\r\nimport { NgToolsModule } from '@myrmidon/ng-tools';\r\nimport { CadmusCoreModule } from '@myrmidon/cadmus-core';\r\nimport { CadmusApiModule } from '@myrmidon/cadmus-api';\r\nimport { CadmusRefsAssertionModule } from '@myrmidon/cadmus-refs-assertion';\r\nimport { CadmusRefsDocReferencesModule } from '@myrmidon/cadmus-refs-doc-references';\r\nimport { CadmusRefsLookupModule } from '@myrmidon/cadmus-refs-lookup';\r\n\r\nimport { AssertedIdComponent } from './asserted-id/asserted-id.component';\r\nimport { AssertedIdsComponent } from './asserted-ids/asserted-ids.component';\r\nimport { AssertedCompositeIdComponent } from './asserted-composite-id/asserted-composite-id.component';\r\nimport { AssertedCompositeIdsComponent } from './asserted-composite-ids/asserted-composite-ids.component';\r\nimport { PinTargetLookupComponent } from './pin-target-lookup/pin-target-lookup.component';\r\nimport { ScopedPinLookupComponent } from './scoped-pin-lookup/scoped-pin-lookup.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n AssertedIdComponent,\r\n AssertedIdsComponent,\r\n AssertedCompositeIdComponent,\r\n AssertedCompositeIdsComponent,\r\n PinTargetLookupComponent,\r\n ScopedPinLookupComponent,\r\n ],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n // material\r\n ClipboardModule,\r\n MatButtonModule,\r\n MatCheckboxModule,\r\n MatExpansionModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatInputModule,\r\n MatSelectModule,\r\n // Myrmidon\r\n NgToolsModule,\r\n // Cadmus\r\n CadmusCoreModule,\r\n CadmusRefsDocReferencesModule,\r\n CadmusRefsAssertionModule,\r\n CadmusRefsLookupModule,\r\n CadmusApiModule,\r\n ],\r\n exports: [\r\n AssertedIdComponent,\r\n AssertedIdsComponent,\r\n AssertedCompositeIdComponent,\r\n AssertedCompositeIdsComponent,\r\n PinTargetLookupComponent,\r\n ScopedPinLookupComponent,\r\n ],\r\n})\r\nexport class CadmusRefsAssertedIdsModule {}\r\n","/*\r\n * Public API Surface of cadmus-refs-asserted-ids\r\n */\r\n\r\nexport * from './lib/asserted-id/asserted-id.component';\r\nexport * from './lib/asserted-ids/asserted-ids.component';\r\nexport * from './lib/scoped-pin-lookup/scoped-pin-lookup.component';\r\nexport * from './lib/asserted-composite-id/asserted-composite-id.component';\r\nexport * from './lib/asserted-composite-ids/asserted-composite-ids.component';\r\nexport * from './lib/pin-target-lookup/pin-target-lookup.component';\r\n\r\nexport * from './lib/services/pin-ref-lookup.service';\r\nexport * from './lib/services/item-ref-lookup.service';\r\n\r\nexport * from './lib/cadmus-refs-asserted-ids.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["METADATA_PART_ID","i4","i1","i5","i6","i7","i8","i9","i10","i11","i12.ScopedPinLookupComponent","i7.AssertedIdComponent","debounceTime","i1.ItemRefLookupService","i2.PinRefLookupService","i3","i12","i13","i14","i15","i16","i12.PinTargetLookupComponent","i7.AssertedCompositeIdComponent"],"mappings":"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"}
1
+ {"version":3,"file":"myrmidon-cadmus-refs-asserted-ids.mjs","sources":["../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/services/pin-ref-lookup.service.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/scoped-pin-lookup/scoped-pin-lookup.component.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/scoped-pin-lookup/scoped-pin-lookup.component.html","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-id/asserted-id.component.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-id/asserted-id.component.html","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-ids/asserted-ids.component.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-ids/asserted-ids.component.html","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/services/item-ref-lookup.service.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/pin-target-lookup/pin-target-lookup.component.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/pin-target-lookup/pin-target-lookup.component.html","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-composite-id/asserted-composite-id.component.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-composite-id/asserted-composite-id.component.html","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-composite-ids/asserted-composite-ids.component.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/asserted-composite-ids/asserted-composite-ids.component.html","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/lib/cadmus-refs-asserted-ids.module.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/public-api.ts","../../../../projects/myrmidon/cadmus-refs-asserted-ids/src/myrmidon-cadmus-refs-asserted-ids.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { map, Observable, of } from 'rxjs';\r\n\r\nimport { ItemService } from '@myrmidon/cadmus-api';\r\nimport { DataPinInfo, IndexLookupDefinition } from '@myrmidon/cadmus-core';\r\nimport {\r\n RefLookupFilter,\r\n RefLookupService,\r\n} from '@myrmidon/cadmus-refs-lookup';\r\nimport { DataPage, ErrorWrapper } from '@myrmidon/ng-tools';\r\n\r\n/**\r\n * Pin-based lookup filter. This is a RefLookupFilter with the addition\r\n * of the item ID and part ID, which are used to filter the results\r\n * by the ItemPinLookupComponent.\r\n */\r\nexport interface PinRefLookupFilter extends RefLookupFilter {\r\n itemId?: string;\r\n partId?: string;\r\n}\r\n\r\n/**\r\n * Cadmus pin-based lookup data service. The text being searched here is just\r\n * the pin's value, according to the options specified. These options correspond\r\n * to an index lookup definition. The resulting items are of type DataPinInfo.\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class PinRefLookupService implements RefLookupService {\r\n constructor(private _itemService: ItemService) {}\r\n\r\n public getName(item: any | undefined): string {\r\n return item?.value || '';\r\n }\r\n\r\n private buildQuery(\r\n def: IndexLookupDefinition,\r\n filter: PinRefLookupFilter\r\n ): string {\r\n const sb: string[] = [];\r\n const AND = ' AND ';\r\n\r\n if (def.typeId) {\r\n sb.push(`[partTypeId=${def.typeId}]`);\r\n }\r\n if (def.roleId) {\r\n if (sb.length) {\r\n sb.push(AND);\r\n }\r\n sb.push(`[roleId=${def.roleId}]`);\r\n }\r\n if (def.name) {\r\n if (sb.length) {\r\n sb.push(AND);\r\n }\r\n sb.push(`[name=${def.name}]`);\r\n }\r\n if (filter.itemId) {\r\n if (sb.length) {\r\n sb.push(AND);\r\n }\r\n sb.push(`[itemId=${filter.itemId}]`);\r\n }\r\n if (filter.partId) {\r\n if (sb.length) {\r\n sb.push(AND);\r\n }\r\n sb.push(`[partId=${filter.partId}]`);\r\n }\r\n if (filter.text) {\r\n if (sb.length) {\r\n sb.push(AND);\r\n }\r\n // for other operators see backend SqlQueryBuilderBase.cs\r\n sb.push(`[value*=${filter.text}]`); // *= is \"contains\"\r\n }\r\n\r\n return sb.join('');\r\n }\r\n\r\n public lookup(filter: PinRefLookupFilter, options?: any): Observable<any[]> {\r\n // the index lookup definition is required\r\n const def = options as IndexLookupDefinition;\r\n if (!def) {\r\n return of([]);\r\n }\r\n\r\n // build the corresponding pin query\r\n const query = this.buildQuery(def, filter);\r\n\r\n // search the index\r\n return this._itemService.searchPins(query, 1, filter.limit).pipe(\r\n map((w: ErrorWrapper<DataPage<DataPinInfo>>) => {\r\n if (w.error) {\r\n console.error(w.error);\r\n return [];\r\n } else {\r\n return w.value?.items || [];\r\n }\r\n })\r\n );\r\n }\r\n}\r\n","import { Component, EventEmitter, Inject, Output } from '@angular/core';\nimport {\n FormBuilder,\n FormControl,\n FormGroup,\n Validators,\n} from '@angular/forms';\nimport { ItemService } from '@myrmidon/cadmus-api';\n\nimport {\n DataPinInfo,\n IndexLookupDefinitions,\n Item,\n Part,\n} from '@myrmidon/cadmus-core';\nimport { forkJoin, take } from 'rxjs';\n\nimport { PinRefLookupService } from '../services/pin-ref-lookup.service';\n\n// from Cadmus general parts\nconst METADATA_PART_ID = 'it.vedph.metadata';\ninterface MetadataPart extends Part {\n metadata: {\n type?: string;\n name: string;\n value: string;\n }[];\n}\n\ninterface LookupInfo {\n pin: DataPinInfo;\n item?: Item;\n part?: MetadataPart;\n}\n\n/*\n * Scoped pin-based lookup component. This component provides a list\n * of pin-based searches, with a lookup control. Whenever the user\n * picks a pin value, he gets the details about its item and part, and\n * item's metadata part, if any. He can then use these data to build\n * some EID by variously assembling these components.\n */\n@Component({\n selector: 'cadmus-scoped-pin-lookup',\n templateUrl: './scoped-pin-lookup.component.html',\n styleUrls: ['./scoped-pin-lookup.component.css'],\n})\nexport class ScopedPinLookupComponent {\n // lookup\n public key: FormControl<string | null>;\n public keyForm: FormGroup;\n public keys: string[];\n public info?: LookupInfo;\n // builder\n public id: FormControl<string | null>;\n public idForm: FormGroup;\n\n @Output()\n public idPick: EventEmitter<string>;\n\n constructor(\n formBuilder: FormBuilder,\n private _itemService: ItemService,\n public lookupService: PinRefLookupService,\n @Inject('indexLookupDefinitions')\n public lookupDefs: IndexLookupDefinitions\n ) {\n // lookup\n // keys are all the defined lookup searches\n this.keys = Object.keys(lookupDefs);\n // the selected key defines the lookup scope\n this.key = formBuilder.control(null);\n this.keyForm = formBuilder.group({\n key: this.key,\n });\n // id\n this.id = formBuilder.control(null, [\n Validators.required,\n Validators.maxLength(300),\n ]);\n this.idForm = formBuilder.group({\n id: this.id,\n });\n // event\n this.idPick = new EventEmitter<string>();\n }\n\n ngOnInit(): void {\n // pre-select a unique key\n if (this.keys.length === 1) {\n this.key.setValue(this.keys[0]);\n this.key.markAsDirty();\n this.key.updateValueAndValidity();\n }\n }\n\n public onItemChange(item: DataPinInfo): void {\n const info: LookupInfo = {\n pin: item,\n };\n // lookup item and its metadata part if any\n forkJoin({\n item: this._itemService.getItem(item.itemId, false),\n part: this._itemService.getPartFromTypeAndRole(\n item.itemId,\n METADATA_PART_ID,\n undefined,\n true\n ),\n })\n .pipe(take(1))\n .subscribe({\n next: (result) => {\n info.item = result.item;\n info.part = result.part as MetadataPart;\n this.info = info;\n },\n error: (error) => {\n console.error(\n error ? JSON.stringify(error) : 'Error loading item/metadata'\n );\n },\n });\n }\n\n public appendIdComponent(type: string, metaIndex = -1): void {\n let id = this.id.value || '';\n\n switch (type) {\n case 'pin':\n id += this.info?.pin.value;\n break;\n case 'itemId':\n id += this.info!.item?.id || '';\n break;\n case 'partId':\n id += this.info!.part?.id || '';\n break;\n case 'partTypeId':\n id += this.info!.part?.typeId || '';\n break;\n case 'partRoleId':\n id += this.info!.part?.roleId || '';\n break;\n case 'metadata':\n id += this.info!.part!.metadata[metaIndex].value;\n break;\n }\n\n this.id.setValue(id);\n this.id.markAsDirty();\n this.id.updateValueAndValidity();\n }\n\n public pickId(): void {\n if (this.idForm.invalid) {\n return;\n }\n this.idPick.emit(this.id.value!);\n this.info = undefined;\n }\n\n public resetId(): void {\n this.id.reset();\n this.id.markAsDirty();\n this.id.updateValueAndValidity();\n }\n}\n","<div>\n <!-- lookup -->\n <div>\n <form [formGroup]=\"keyForm\" class=\"form-row\">\n <!-- key -->\n <mat-form-field *ngIf=\"keys.length > 1\">\n <mat-label>type</mat-label>\n <mat-select [formControl]=\"key\">\n <mat-option *ngFor=\"let k of keys\" [value]=\"k\">{{ k }}</mat-option>\n </mat-select>\n <mat-error\n *ngIf=\"$any(key).errors?.required && (key.dirty || key.touched)\"\n >type required</mat-error\n >\n </mat-form-field>\n <cadmus-ref-lookup\n [service]=\"lookupService\"\n label=\"pin\"\n [options]=\"key.value ? lookupDefs[key.value] : undefined\"\n (itemChange)=\"onItemChange($event)\"\n ></cadmus-ref-lookup>\n </form>\n </div>\n\n <!-- builder -->\n <mat-expansion-panel *ngIf=\"info\" [expanded]=\"info\" [disabled]=\"!info\">\n <mat-expansion-panel-header>ID builder</mat-expansion-panel-header>\n <!-- ID -->\n <div>\n <form [formGroup]=\"idForm\" (submit)=\"pickId()\">\n <mat-form-field style=\"width: 100%\">\n <input matInput [formControl]=\"id\" />\n <mat-error\n *ngIf=\"$any(id).errors?.required && (id.dirty || id.touched)\"\n >ID required</mat-error\n >\n <mat-error\n *ngIf=\"$any(id).errors?.maxLength && (id.dirty || id.touched)\"\n >ID too long</mat-error\n >\n <button\n mat-icon-button\n type=\"button\"\n matSuffix\n (click)=\"resetId()\"\n [disabled]=\"!id.value\"\n >\n <mat-icon color=\"warn\">close</mat-icon>\n </button>\n <button\n mat-icon-button\n type=\"button\"\n matSuffix\n (click)=\"pickId()\"\n [disabled]=\"idForm.invalid\"\n >\n <mat-icon color=\"primary\">check_circle</mat-icon>\n </button>\n </mat-form-field>\n </form>\n </div>\n <!-- table -->\n <table>\n <thead>\n <th></th>\n <th>source</th>\n <th>value</th>\n </thead>\n <tbody>\n <!-- pin -->\n <tr>\n <td>\n <button\n type=\"button\"\n mat-icon-button\n color=\"primary\"\n (click)=\"appendIdComponent('pin')\"\n >\n <mat-icon>add_circle</mat-icon>\n </button>\n </td>\n <td>pin</td>\n <td>{{ info!.pin.value }}</td>\n </tr>\n <!-- item ID -->\n <tr>\n <td>\n <button\n type=\"button\"\n mat-icon-button\n color=\"primary\"\n (click)=\"appendIdComponent('itemId')\"\n >\n <mat-icon>add_circle</mat-icon>\n </button>\n </td>\n <td>item ID</td>\n <td>{{ info!.item?.id }}</td>\n </tr>\n <!-- item title -->\n <tr>\n <td></td>\n <td>item title</td>\n <td>{{ info!.item?.title }}</td>\n </tr>\n <!-- part ID -->\n <tr>\n <td>\n <button\n type=\"button\"\n mat-icon-button\n color=\"primary\"\n (click)=\"appendIdComponent('partId')\"\n >\n <mat-icon>add_circle</mat-icon>\n </button>\n </td>\n <td>part ID</td>\n <td>{{ info!.part?.id }}</td>\n </tr>\n <!-- part type ID -->\n <tr>\n <td>\n <button\n type=\"button\"\n mat-icon-button\n color=\"primary\"\n (click)=\"appendIdComponent('partTypeId')\"\n >\n <mat-icon>add_circle</mat-icon>\n </button>\n </td>\n <td>part type ID</td>\n <td>{{ info!.part?.typeId }}</td>\n </tr>\n <!-- part role ID -->\n <tr>\n <td>\n <button\n type=\"button\"\n mat-icon-button\n color=\"primary\"\n (click)=\"appendIdComponent('partRoleId')\"\n >\n <mat-icon>add_circle</mat-icon>\n </button>\n </td>\n <td>part role ID</td>\n <td>{{ info!.part?.roleId }}</td>\n </tr>\n\n <!-- part's metadata -->\n <tr *ngFor=\"let m of info!.part?.metadata; let i = index\">\n <td>\n <button\n type=\"button\"\n mat-icon-button\n color=\"primary\"\n (click)=\"appendIdComponent('metadata', i)\"\n >\n <mat-icon>add_circle</mat-icon>\n </button>\n </td>\n <td class=\"metadata\">{{ m.name }}</td>\n <td class=\"metadata\">{{ m.value }}</td>\n </tr>\n </tbody>\n </table>\n </mat-expansion-panel>\n</div>\n","import {\r\n Component,\r\n EventEmitter,\r\n Inject,\r\n Input,\r\n OnInit,\r\n Output,\r\n} from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { debounceTime } from 'rxjs/operators';\r\n\r\nimport { IndexLookupDefinitions, ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport { Assertion } from '@myrmidon/cadmus-refs-assertion';\r\n\r\nimport { PinRefLookupService } from '../services/pin-ref-lookup.service';\r\n\r\nexport interface AssertedId {\r\n tag?: string;\r\n value: string;\r\n scope: string;\r\n assertion?: Assertion;\r\n}\r\n\r\n@Component({\r\n selector: 'cadmus-refs-asserted-id',\r\n templateUrl: './asserted-id.component.html',\r\n styleUrls: ['./asserted-id.component.css'],\r\n})\r\nexport class AssertedIdComponent implements OnInit {\r\n private _updatingForm: boolean | undefined;\r\n private _id: AssertedId | undefined;\r\n\r\n public tag: FormControl<string | null>;\r\n public value: FormControl<string | null>;\r\n public scope: FormControl<string | null>;\r\n public assertion: FormControl<Assertion | null>;\r\n public form: FormGroup;\r\n\r\n public lookupExpanded: boolean;\r\n\r\n // asserted-id-scopes\r\n @Input()\r\n public idScopeEntries?: ThesaurusEntry[];\r\n\r\n // asserted-id-tags\r\n @Input()\r\n public idTagEntries?: ThesaurusEntry[];\r\n\r\n // assertion-tags\r\n @Input()\r\n public assTagEntries?: ThesaurusEntry[];\r\n\r\n // doc-reference-types\r\n @Input()\r\n public refTypeEntries: ThesaurusEntry[] | undefined;\r\n\r\n // doc-reference-tags\r\n @Input()\r\n public refTagEntries: ThesaurusEntry[] | undefined;\r\n\r\n @Input()\r\n public get id(): AssertedId | undefined | null {\r\n return this._id;\r\n }\r\n public set id(value: AssertedId | undefined | null) {\r\n if (this._id !== value) {\r\n this._id = value || undefined;\r\n this.updateForm(this._id);\r\n }\r\n }\r\n\r\n /**\r\n * True to hide the pin-based EID lookup UI.\r\n */\r\n @Input()\r\n public noEidLookup: boolean | undefined;\r\n\r\n @Input()\r\n public hasSubmit: boolean | undefined;\r\n\r\n @Output()\r\n public idChange: EventEmitter<AssertedId>;\r\n\r\n @Output()\r\n public editorClose: EventEmitter<any>;\r\n\r\n constructor(\r\n formBuilder: FormBuilder,\r\n public lookupService: PinRefLookupService,\r\n @Inject('indexLookupDefinitions')\r\n public lookupDefs: IndexLookupDefinitions\r\n ) {\r\n this.tag = formBuilder.control(null, Validators.maxLength(50));\r\n this.value = formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(500),\r\n ]);\r\n this.scope = formBuilder.control(null, Validators.maxLength(500));\r\n this.assertion = formBuilder.control(null);\r\n this.form = formBuilder.group({\r\n tag: this.tag,\r\n value: this.value,\r\n scope: this.scope,\r\n assertion: this.assertion\r\n });\r\n this.lookupExpanded = false;\r\n // events\r\n this.idChange = new EventEmitter<AssertedId>();\r\n this.editorClose = new EventEmitter<any>();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.form.valueChanges.pipe(debounceTime(300)).subscribe((_) => {\r\n if (!this._updatingForm) {\r\n this.emitIdChange();\r\n }\r\n });\r\n }\r\n\r\n public onAssertionChange(assertion: Assertion | undefined): void {\r\n this.assertion.setValue(assertion || null);\r\n }\r\n\r\n public onIdPick(id: string): void {\r\n this.value.setValue(id);\r\n this.value.markAsDirty();\r\n this.value.updateValueAndValidity();\r\n this.lookupExpanded = false;\r\n }\r\n\r\n private updateForm(value: AssertedId | undefined): void {\r\n this._updatingForm = true;\r\n if (!value) {\r\n this.form.reset();\r\n } else {\r\n this.tag.setValue(value.tag || null);\r\n this.value.setValue(value.value);\r\n this.scope.setValue(value.scope);\r\n this.assertion.setValue(value.assertion || null);\r\n this.form.markAsPristine();\r\n }\r\n this._updatingForm = false;\r\n // this.emitIdChange();\r\n }\r\n\r\n private getId(): AssertedId {\r\n return {\r\n tag: this.tag.value?.trim(),\r\n value: this.value.value?.trim() || '',\r\n scope: this.scope.value?.trim() || '',\r\n assertion: this.assertion.value || undefined,\r\n };\r\n }\r\n\r\n public emitIdChange(): void {\r\n if (!this.hasSubmit) {\r\n this._id = this.getId();\r\n this.idChange.emit(this._id);\r\n }\r\n }\r\n\r\n public cancel(): void {\r\n this.editorClose.emit();\r\n }\r\n\r\n public save(): void {\r\n if (this.form.valid) {\r\n this._id = this.getId();\r\n this.idChange.emit(this._id);\r\n }\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\n <div>\n <div class=\"form-row\">\n <!-- tag (bound) -->\n <mat-form-field *ngIf=\"idTagEntries?.length\" style=\"width: 8em\">\n <mat-label>tag</mat-label>\n <mat-select [formControl]=\"tag\">\n <mat-option *ngFor=\"let e of idTagEntries\" [value]=\"e.id\">{{\n e.value\n }}</mat-option>\n </mat-select>\n </mat-form-field>\n <!-- tag (free) -->\n <mat-form-field *ngIf=\"!idTagEntries?.length\" style=\"width: 8em\">\n <mat-label>tag</mat-label>\n <input matInput [formControl]=\"tag\" />\n <mat-error *ngIf=\"tag.errors?.maxLength && (tag.dirty || tag.touched)\"\n >tag too long</mat-error\n >\n </mat-form-field>\n\n <!-- scope (bound) -->\n <mat-form-field *ngIf=\"idScopeEntries?.length\" style=\"width: 8em\">\n <mat-label>scope</mat-label>\n <mat-select [formControl]=\"scope\">\n <mat-option *ngFor=\"let e of idScopeEntries\" [value]=\"e.id\">{{\n e.value\n }}</mat-option>\n </mat-select>\n </mat-form-field>\n <!-- scope (free) -->\n <mat-form-field *ngIf=\"!idScopeEntries?.length\" style=\"width: 8em\">\n <mat-label>scope</mat-label>\n <input matInput [formControl]=\"scope\" />\n <mat-error\n *ngIf=\"scope.errors?.maxLength && (scope.dirty || scope.touched)\"\n >scope too long</mat-error\n >\n </mat-form-field>\n\n <!-- value -->\n <mat-form-field>\n <mat-label>value</mat-label>\n <input matInput [formControl]=\"value\" />\n <mat-error\n *ngIf=\"value.errors?.required && (value.dirty || value.touched)\"\n >value required</mat-error\n >\n <mat-error\n *ngIf=\"value.errors?.maxLength && (value.dirty || value.touched)\"\n >value too long</mat-error\n >\n </mat-form-field>\n\n <!-- lookup -->\n <div *ngIf=\"!noEidLookup\" style=\"margin-top: 4px\">\n <mat-expansion-panel [(expanded)]=\"lookupExpanded\">\n <mat-expansion-panel-header>lookup</mat-expansion-panel-header>\n <cadmus-scoped-pin-lookup\n (idPick)=\"onIdPick($event)\"\n ></cadmus-scoped-pin-lookup>\n </mat-expansion-panel>\n </div>\n </div>\n\n <!-- assertion -->\n <mat-expansion-panel>\n <mat-expansion-panel-header>assertion</mat-expansion-panel-header>\n <cadmus-refs-assertion\n [assTagEntries]=\"assTagEntries\"\n [refTypeEntries]=\"refTypeEntries\"\n [refTagEntries]=\"refTagEntries\"\n [assertion]=\"assertion.value\"\n (assertionChange)=\"onAssertionChange($event)\"\n >\n </cadmus-refs-assertion>\n </mat-expansion-panel>\n </div>\n\n <!-- buttons -->\n <div *ngIf=\"hasSubmit\">\n <button mat-icon-button color=\"warn\" type=\"button\" (click)=\"cancel()\">\n <mat-icon>close</mat-icon>\n </button>\n <button\n mat-icon-button\n color=\"primary\"\n type=\"submit\"\n [disabled]=\"form.invalid\"\n >\n <mat-icon>check_circle</mat-icon>\n </button>\n </div>\n</form>\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { FormBuilder, FormControl, FormGroup } from '@angular/forms';\r\n\r\nimport { ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport { DialogService } from '@myrmidon/ng-mat-tools';\r\nimport { take } from 'rxjs';\r\n\r\nimport { AssertedId } from '../asserted-id/asserted-id.component';\r\n\r\n/**\r\n * Asserted IDs editor.\r\n */\r\n@Component({\r\n selector: 'cadmus-refs-asserted-ids',\r\n templateUrl: './asserted-ids.component.html',\r\n styleUrls: ['./asserted-ids.component.css'],\r\n})\r\nexport class AssertedIdsComponent {\r\n private _ids: AssertedId[];\r\n private _editedIndex: number;\r\n public edited?: AssertedId;\r\n\r\n /**\r\n * The asserted IDs.\r\n */\r\n @Input()\r\n public get ids(): AssertedId[] {\r\n return this._ids;\r\n }\r\n public set ids(value: AssertedId[]) {\r\n if (this._ids !== value) {\r\n this._ids = value || [];\r\n this.updateForm(value);\r\n }\r\n }\r\n\r\n // asserted-id-scopes\r\n @Input()\r\n public idScopeEntries?: ThesaurusEntry[];\r\n\r\n // asserted-id-tags\r\n @Input()\r\n public idTagEntries?: ThesaurusEntry[];\r\n\r\n // assertion-tags\r\n @Input()\r\n public assTagEntries?: ThesaurusEntry[];\r\n\r\n // doc-reference-types\r\n @Input()\r\n public refTypeEntries: ThesaurusEntry[] | undefined;\r\n\r\n // doc-reference-tags\r\n @Input()\r\n public refTagEntries: ThesaurusEntry[] | undefined;\r\n\r\n /**\r\n * Emitted whenever any ID changes.\r\n */\r\n @Output()\r\n public idsChange: EventEmitter<AssertedId[]>;\r\n\r\n public entries: FormControl<AssertedId[]>;\r\n public form: FormGroup;\r\n\r\n constructor(formBuilder: FormBuilder, private _dialogService: DialogService) {\r\n this._ids = [];\r\n this._editedIndex = -1;\r\n this.idsChange = new EventEmitter<AssertedId[]>();\r\n this.entries = formBuilder.control([], { nonNullable: true });\r\n // form\r\n this.form = formBuilder.group({\r\n ids: this.entries,\r\n });\r\n }\r\n\r\n private updateForm(ids: AssertedId[]): void {\r\n if (!ids?.length) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.entries.setValue(ids, { emitEvent: false });\r\n this.entries.updateValueAndValidity();\r\n this.form.markAsPristine();\r\n }\r\n\r\n private emitIdsChange(): void {\r\n this.idsChange.emit(this.entries.value);\r\n }\r\n\r\n public addId(): void {\r\n this.editId(\r\n {\r\n scope: '',\r\n value: '',\r\n },\r\n -1\r\n );\r\n }\r\n\r\n public editId(id: AssertedId, index: number): void {\r\n this._editedIndex = index;\r\n this.edited = id;\r\n }\r\n\r\n public closeId(): void {\r\n this._editedIndex = -1;\r\n this.edited = undefined;\r\n }\r\n\r\n public saveId(entry: AssertedId): void {\r\n const entries = [...this.entries.value];\r\n if (this._editedIndex === -1) {\r\n entries.push(entry);\r\n } else {\r\n entries.splice(this._editedIndex, 1, entry);\r\n }\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.closeId();\r\n }\r\n\r\n public deleteId(index: number): void {\r\n this._dialogService\r\n .confirm('Confirmation', 'Delete ID?')\r\n .pipe(take(1))\r\n .subscribe((yes) => {\r\n if (yes) {\r\n if (this._editedIndex === index) {\r\n this.closeId();\r\n }\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.emitIdsChange();\r\n }\r\n });\r\n }\r\n\r\n public moveIdUp(index: number): void {\r\n if (index < 1) {\r\n return;\r\n }\r\n const entry = this.entries.value[index];\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n entries.splice(index - 1, 0, entry);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.emitIdsChange();\r\n }\r\n\r\n public moveIdDown(index: number): void {\r\n if (index + 1 >= this.entries.value.length) {\r\n return;\r\n }\r\n const entry = this.entries.value[index];\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n entries.splice(index + 1, 0, entry);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.emitIdsChange();\r\n }\r\n\r\n public onIdChange(id: AssertedId): void {\r\n this.saveId(id);\r\n this.emitIdsChange();\r\n }\r\n}\r\n","<form [formGroup]=\"form\">\r\n <div>\r\n <button type=\"button\" mat-flat-button color=\"primary\" (click)=\"addId()\">\r\n <mat-icon>add_circle</mat-icon> ID\r\n </button>\r\n </div>\r\n <table *ngIf=\"entries.value?.length\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>scope</th>\r\n <th>value</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr\r\n *ngFor=\"\r\n let entry of entries.value;\r\n let i = index;\r\n let first = first;\r\n let last = last\r\n \"\r\n >\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n matTooltip=\"Edit this ID\"\r\n (click)=\"editId(entry, i)\"\r\n >\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this ID up\"\r\n [disabled]=\"first\"\r\n (click)=\"moveIdUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this ID down\"\r\n [disabled]=\"last\"\r\n (click)=\"moveIdDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"warn\"\r\n matTooltip=\"Delete this ID\"\r\n (click)=\"deleteId(i)\"\r\n >\r\n <mat-icon>remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ entry.scope }}</td>\r\n <td>{{ entry.value }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <mat-expansion-panel [expanded]=\"edited\" [disabled]=\"!edited\">\r\n <mat-expansion-panel-header>ID {{edited?.value}}</mat-expansion-panel-header>\r\n <cadmus-refs-asserted-id\r\n [idScopeEntries]=\"idScopeEntries\"\r\n [idTagEntries]=\"idTagEntries\"\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [hasSubmit]=\"true\"\r\n [id]=\"edited\"\r\n (idChange)=\"onIdChange($event)\"\r\n (editorClose)=\"closeId()\"\r\n ></cadmus-refs-asserted-id>\r\n </mat-expansion-panel>\r\n</form>\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable, map } from 'rxjs';\r\n\r\nimport { ItemService } from '@myrmidon/cadmus-api';\r\nimport { Item } from '@myrmidon/cadmus-core';\r\nimport {\r\n RefLookupFilter,\r\n RefLookupService,\r\n} from '@myrmidon/cadmus-refs-lookup';\r\nimport { DataPage } from '@myrmidon/ng-tools';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ItemRefLookupService implements RefLookupService {\r\n constructor(private _itemService: ItemService) {}\r\n\r\n public lookup(filter: RefLookupFilter, options?: any): Observable<Item[]> {\r\n return this._itemService\r\n .getItems(\r\n {\r\n title: filter.text,\r\n },\r\n 1,\r\n filter.limit || 10\r\n )\r\n .pipe(map((page: DataPage<Item>) => page.items));\r\n }\r\n\r\n getName(item: Item): string {\r\n return item?.title;\r\n }\r\n}\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Inject,\r\n Input,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n} from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n Validators,\r\n} from '@angular/forms';\r\nimport {\r\n Subscription,\r\n debounceTime,\r\n distinctUntilChanged,\r\n forkJoin,\r\n take,\r\n} from 'rxjs';\r\nimport { MatSnackBar } from '@angular/material/snack-bar';\r\n\r\nimport { ItemService, ThesaurusService } from '@myrmidon/cadmus-api';\r\nimport {\r\n DataPinInfo,\r\n IndexLookupDefinition,\r\n IndexLookupDefinitions,\r\n Item,\r\n Part,\r\n ThesaurusEntry,\r\n} from '@myrmidon/cadmus-core';\r\n\r\nimport {\r\n PinRefLookupFilter,\r\n PinRefLookupService,\r\n} from '../services/pin-ref-lookup.service';\r\nimport { ItemRefLookupService } from '../services/item-ref-lookup.service';\r\n\r\n// from Cadmus general parts\r\nconst METADATA_PART_ID = 'it.vedph.metadata';\r\ninterface MetadataPart extends Part {\r\n metadata: {\r\n type?: string;\r\n name: string;\r\n value: string;\r\n }[];\r\n}\r\n\r\n/**\r\n * Pin lookup data used internally by the component.\r\n */\r\nexport interface PinLookupData {\r\n pin: DataPinInfo;\r\n item?: Item;\r\n metaPart?: MetadataPart;\r\n}\r\n\r\n/**\r\n * A pin-based target. This includes pin's name and value, and\r\n * the item's ID and optional part IDs. The label is a user friendly\r\n * string representation of the target, while the gid is a globally\r\n * unique identifier for the target.\r\n */\r\nexport interface PinTarget {\r\n gid: string;\r\n label: string;\r\n itemId?: string;\r\n partId?: string;\r\n partTypeId?: string;\r\n roleId?: string;\r\n name?: string;\r\n value?: string;\r\n}\r\n\r\n/*\r\n * Scoped pin-based lookup component. This component provides a list\r\n * of pin-based searches, with a lookup control. Whenever the user\r\n * picks a pin value, he gets the details about its item and part, and\r\n * item's metadata part, if any. He can then use these data to build\r\n * some EID by variously assembling these components.\r\n */\r\n@Component({\r\n selector: 'cadmus-pin-target-lookup',\r\n templateUrl: './pin-target-lookup.component.html',\r\n styleUrls: ['./pin-target-lookup.component.css'],\r\n})\r\nexport class PinTargetLookupComponent implements OnInit, OnDestroy {\r\n private _subs: Subscription[];\r\n private _target: PinTarget | undefined;\r\n private _noTargetUpdate?: boolean;\r\n private _startWithByTypeMode?: boolean;\r\n\r\n /**\r\n * True when the by-type pin lookup mode is active.\r\n * User can change mode unless modeSwitching is false.\r\n */\r\n @Input()\r\n public get pinByTypeMode(): boolean | undefined {\r\n return this.byTypeMode?.value;\r\n }\r\n public set pinByTypeMode(value: boolean | undefined) {\r\n if (!this.byTypeMode) {\r\n this._startWithByTypeMode = value;\r\n } else {\r\n this.byTypeMode.setValue(value || false);\r\n this.byTypeMode.updateValueAndValidity();\r\n }\r\n }\r\n\r\n /**\r\n * True when the user can switch between by-type and by-item mode.\r\n */\r\n @Input()\r\n public canSwitchMode?: boolean;\r\n /**\r\n * True when the user can edit the target's gid/label for internal\r\n * targets.\r\n */\r\n @Input()\r\n public canEditTarget?: boolean;\r\n /**\r\n * The lookup definitions to be used for the by-type lookup. If\r\n * not specified, the lookup definitions will be got via injection\r\n * when available; if the injected definitions are empty, the\r\n * lookup definitions will be built from the model-types thesaurus;\r\n * if this is not available either, the by-type lookup will be\r\n * disabled.\r\n */\r\n @Input()\r\n public lookupDefinitions?: IndexLookupDefinitions;\r\n\r\n /**\r\n * The target to be edited.\r\n */\r\n @Input()\r\n public get target(): PinTarget | undefined | null {\r\n return this._target;\r\n }\r\n public set target(value: PinTarget | undefined | null) {\r\n if (this._target === value) {\r\n return;\r\n }\r\n this._target = value || undefined;\r\n this.updateForm(this._target);\r\n }\r\n\r\n /**\r\n * The default value for part type key when the by-type mode is active.\r\n */\r\n @Input()\r\n public defaultPartTypeKey?: string | null;\r\n\r\n /**\r\n * Emitted when user closes the editor.\r\n */\r\n @Output()\r\n public editorClose: EventEmitter<any>;\r\n /**\r\n * Emitted whenever the target changes.\r\n * The event's value is the new target.\r\n */\r\n @Output()\r\n public targetChange: EventEmitter<PinTarget>;\r\n\r\n // by type\r\n public modelEntries: ThesaurusEntry[];\r\n public partTypeKeys: string[];\r\n // by item\r\n public itemParts: Part[];\r\n // form - by item\r\n public item: FormControl<Item | null>;\r\n public itemPart: FormControl<Part | null>;\r\n // form - by type\r\n public partTypeKey: FormControl<string | null>;\r\n // form - both\r\n public gid: FormControl<string | null>;\r\n public label: FormControl<string | null>;\r\n public byTypeMode: FormControl<boolean>;\r\n public external: FormControl<boolean>;\r\n public form: FormGroup;\r\n\r\n public filter: PinRefLookupFilter;\r\n public pinFilterOptions?: IndexLookupDefinition;\r\n public lookupData?: PinLookupData;\r\n\r\n constructor(\r\n @Inject('indexLookupDefinitions')\r\n private _presetLookupDefs: IndexLookupDefinitions,\r\n public itemLookupService: ItemRefLookupService,\r\n public pinLookupService: PinRefLookupService,\r\n private _itemService: ItemService,\r\n private _thesService: ThesaurusService,\r\n private _snackbar: MatSnackBar,\r\n formBuilder: FormBuilder\r\n ) {\r\n this.partTypeKeys = [];\r\n this.itemParts = [];\r\n this._subs = [];\r\n this.modelEntries = [];\r\n // this is the default filter for the pin lookup, which will\r\n // be merged with values provided by user here\r\n this.filter = {\r\n text: '',\r\n limit: 10,\r\n };\r\n // form\r\n this.item = formBuilder.control(null);\r\n this.itemPart = formBuilder.control(null);\r\n this.partTypeKey = formBuilder.control(null);\r\n this.gid = formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(300),\r\n ]);\r\n this.label = formBuilder.control(null, [\r\n Validators.required,\r\n Validators.maxLength(300),\r\n ]);\r\n this.byTypeMode = formBuilder.control(false, { nonNullable: true });\r\n this.external = formBuilder.control(false, { nonNullable: true });\r\n this.form = formBuilder.group({\r\n item: this.item,\r\n itemPart: this.itemPart,\r\n partTypeKey: this.partTypeKey,\r\n gid: this.gid,\r\n label: this.label,\r\n byTypeMode: this.byTypeMode,\r\n external: this.external,\r\n });\r\n // events\r\n this.targetChange = new EventEmitter<PinTarget>();\r\n this.editorClose = new EventEmitter<any>();\r\n }\r\n\r\n private forceByItem(): void {\r\n this.pinByTypeMode = false;\r\n this.canSwitchMode = false;\r\n }\r\n\r\n private setupKeys(): void {\r\n // use DI presets if no lookup definitions\r\n if (!this.lookupDefinitions) {\r\n this.lookupDefinitions = this._presetLookupDefs;\r\n }\r\n // keys are all the defined lookup searches\r\n this.partTypeKeys = Object.keys(this.lookupDefinitions);\r\n\r\n // if no keys, get them from thesaurus model-types;\r\n // if this is not available, just force by item mode.\r\n if (!this.partTypeKeys.length) {\r\n if (this.modelEntries?.length) {\r\n // set lookupDefinitions from thesaurus entries\r\n this.lookupDefinitions = {};\r\n this.modelEntries.forEach((e) => {\r\n this.lookupDefinitions![e.value] = {\r\n name: e.value,\r\n typeId: e.id,\r\n };\r\n });\r\n // set type keys from thesaurus entries\r\n this.partTypeKeys = this.modelEntries.map((e) => e.value);\r\n }\r\n }\r\n\r\n // if still no keys, force by item mode\r\n if (!this.partTypeKeys.length) {\r\n this.forceByItem();\r\n } else {\r\n // set default key\r\n this.partTypeKey.setValue(\r\n this.defaultPartTypeKey || this.partTypeKeys[0]\r\n );\r\n }\r\n }\r\n\r\n public ngOnInit(): void {\r\n // set start mode if required\r\n if (this._startWithByTypeMode) {\r\n this.byTypeMode.setValue(true);\r\n }\r\n\r\n // whenever item changes, update item's parts and filter\r\n this._subs.push(\r\n this.item.valueChanges\r\n .pipe(distinctUntilChanged(), debounceTime(300))\r\n .subscribe((item) => {\r\n this.itemPart.setValue(null);\r\n this.itemParts = item?.parts || [];\r\n this.filter = {\r\n ...this.filter,\r\n itemId: item?.id,\r\n };\r\n })\r\n );\r\n\r\n // whenever itemPart changes, update target and eventually gid\r\n this._subs.push(\r\n this.itemPart.valueChanges\r\n .pipe(distinctUntilChanged(), debounceTime(300))\r\n .subscribe((part) => {\r\n if (!this.gid.value || this.gid.pristine) {\r\n this.gid.setValue(this.buildGid());\r\n }\r\n this.filter = {\r\n ...this.filter,\r\n partId: part?.id,\r\n };\r\n this.updateTarget();\r\n })\r\n );\r\n\r\n // whenever partTypeKey changes, update filter's options\r\n this._subs.push(\r\n this.partTypeKey.valueChanges\r\n .pipe(distinctUntilChanged(), debounceTime(300))\r\n .subscribe((key) => {\r\n this.pinFilterOptions = key\r\n ? this.lookupDefinitions![key]\r\n : undefined;\r\n })\r\n );\r\n\r\n // whenever external changes, set required validator in label\r\n // (true for external, false for internal)\r\n this._subs.push(\r\n this.external.valueChanges\r\n .pipe(distinctUntilChanged(), debounceTime(300))\r\n .subscribe((external) => {\r\n if (external) {\r\n this.label.setValidators([\r\n Validators.required,\r\n Validators.maxLength(300),\r\n ]);\r\n } else {\r\n this.label.setValidators([Validators.maxLength(300)]);\r\n }\r\n this.label.updateValueAndValidity();\r\n })\r\n );\r\n\r\n // load model-types thesaurus entries\r\n this._thesService.getThesaurus('model-types', true).subscribe({\r\n next: (t) => {\r\n this.modelEntries = t.entries || [];\r\n if (this.modelEntries?.length) {\r\n this.setupKeys();\r\n } else {\r\n this.forceByItem();\r\n }\r\n },\r\n error: () => {\r\n this.forceByItem();\r\n },\r\n });\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n for (let i = 0; i < this._subs.length; i++) {\r\n this._subs[i].unsubscribe();\r\n }\r\n }\r\n\r\n private buildGid(): string | null {\r\n // the GID is the part ID if any, or the item ID, followed by\r\n // the pin's value (=EID)\r\n const pin = this.lookupData?.pin;\r\n if (!pin?.value) {\r\n return null;\r\n }\r\n return pin.partId\r\n ? `P${pin.partId}/${pin.value}`\r\n : `I${pin.itemId}/${pin.value}`;\r\n }\r\n\r\n private buildLabel(): string | null {\r\n if (!this.lookupData?.pin) {\r\n return null;\r\n }\r\n const sb: string[] = [];\r\n // pin value\r\n if (this.lookupData.pin.value) {\r\n sb.push(this.lookupData.pin.value);\r\n sb.push(' | ');\r\n }\r\n // item title\r\n sb.push(this.lookupData.item?.title || this.lookupData.pin?.itemId);\r\n // part type and role\r\n if (this.lookupData.pin.partTypeId) {\r\n const e = this.modelEntries?.find(\r\n (e) => e.id === this.lookupData!.pin.partTypeId\r\n );\r\n sb.push(' (');\r\n sb.push(e?.value || this.lookupData.pin.partTypeId);\r\n if (this.lookupData.pin.roleId) {\r\n sb.push(`, ${this.lookupData.pin.roleId}`);\r\n }\r\n sb.push(')');\r\n }\r\n return sb.join('');\r\n }\r\n\r\n private getTarget(): PinTarget {\r\n if (this.external.value) {\r\n return {\r\n gid: this.gid.value || '',\r\n label: this.label.value || '',\r\n };\r\n } else {\r\n const pin = this.lookupData?.pin;\r\n return {\r\n gid: this.gid.value || '',\r\n label: this.label.value || '',\r\n itemId: pin?.itemId || '',\r\n partId: pin?.partId || '',\r\n partTypeId: pin?.partTypeId || '',\r\n roleId: pin?.roleId || '',\r\n name: pin?.name || '',\r\n value: pin?.value || '',\r\n };\r\n }\r\n }\r\n\r\n private updateTarget(): void {\r\n if (this._noTargetUpdate) {\r\n return;\r\n }\r\n if (!this.external.value) {\r\n this.gid.setValue(this.buildGid());\r\n this.gid.updateValueAndValidity();\r\n this.gid.markAsDirty();\r\n this.label.setValue(this.buildLabel());\r\n this.label.updateValueAndValidity();\r\n this.label.markAsDirty();\r\n }\r\n this._target = this.getTarget();\r\n }\r\n\r\n private updateForm(target?: PinTarget): void {\r\n // build pin info from target\r\n if (!target) {\r\n this.lookupData = undefined;\r\n this.item.reset();\r\n this.itemPart.reset();\r\n this.gid.reset();\r\n this.label.reset();\r\n return;\r\n }\r\n this._noTargetUpdate = true;\r\n this.gid.setValue(target.gid || '');\r\n this.label.setValue(target.label || '');\r\n this.lookupData = {\r\n pin: {\r\n itemId: target.itemId || '',\r\n partId: target.partId || '',\r\n partTypeId: target.partTypeId || '',\r\n roleId: target.roleId || '',\r\n name: target.name || '',\r\n value: target.value || '',\r\n },\r\n };\r\n // get item\r\n if (target.itemId) {\r\n this._itemService.getItem(target.itemId, true).subscribe({\r\n next: (item) => {\r\n this.item.setValue(item);\r\n this.form.markAsPristine();\r\n this._noTargetUpdate = false;\r\n this.external.setValue(!target.name);\r\n this.updateTarget();\r\n },\r\n error: (error) => {\r\n if (error) {\r\n console.error(JSON.stringify(error));\r\n }\r\n this.external.setValue(!target.name);\r\n this._noTargetUpdate = false;\r\n },\r\n });\r\n } else {\r\n this.external.setValue(!target.name);\r\n this._noTargetUpdate = false;\r\n this.updateTarget();\r\n }\r\n }\r\n\r\n /**\r\n * Called when the item lookup changes (item is looked up\r\n * by its title).\r\n *\r\n * @param item The item got from lookup.\r\n */\r\n public onItemLookupChange(item: Item): void {\r\n // load item's parts\r\n this._itemService.getItem(item.id, true).subscribe({\r\n next: (i) => {\r\n // setting the item will trigger its parts update\r\n this.item.setValue(i);\r\n this.updateTarget();\r\n },\r\n error: (error) => {\r\n if (error) {\r\n console.error(JSON.stringify(error));\r\n }\r\n this.itemPart.setValue(null);\r\n this.itemParts = [];\r\n this.updateTarget();\r\n },\r\n });\r\n }\r\n\r\n private loadItemInfo(pin: DataPinInfo): void {\r\n forkJoin({\r\n item: this._itemService.getItem(pin.itemId, false),\r\n part: this._itemService.getPartFromTypeAndRole(\r\n pin.itemId,\r\n METADATA_PART_ID,\r\n undefined,\r\n true\r\n ),\r\n })\r\n .pipe(take(1))\r\n .subscribe({\r\n next: (result) => {\r\n this.lookupData = {\r\n pin: pin,\r\n item: result.item,\r\n metaPart: result.part as MetadataPart,\r\n };\r\n this.updateTarget();\r\n },\r\n error: (error) => {\r\n this.lookupData = undefined;\r\n console.error(\r\n error ? JSON.stringify(error) : 'Error loading item/metadata'\r\n );\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Called when the pin lookup change. A pin is looked up by its\r\n * name and value (=the filter's text), and optionally by:\r\n * - its index lookup definition (selected by partTypeKey).\r\n * - its item (defined by item, in filter).\r\n * - its part (defined by itemPart, in filter).\r\n *\r\n * @param info The pin info from pin lookup.\r\n */\r\n public onPinLookupChange(info: DataPinInfo): void {\r\n this.loadItemInfo(info);\r\n }\r\n\r\n public onCopied(): void {\r\n this._snackbar.open('Copied to clipboard', 'OK', {\r\n duration: 1500,\r\n });\r\n }\r\n\r\n public close(): void {\r\n this.editorClose.emit();\r\n }\r\n\r\n public save(): void {\r\n if (this.form.invalid) {\r\n return;\r\n }\r\n this._target = this.getTarget();\r\n this.targetChange.emit(this._target);\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <div class=\"form-row\">\r\n <!-- external -->\r\n <mat-checkbox [formControl]=\"external\">external</mat-checkbox>\r\n <!-- mode switcher -->\r\n <div *ngIf=\"!external.value\">\r\n <mat-checkbox [formControl]=\"byTypeMode\" *ngIf=\"canSwitchMode\">\r\n by type</mat-checkbox\r\n >\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-row\">\r\n <!-- label -->\r\n <div>\r\n <mat-form-field *ngIf=\"external.value || canEditTarget\">\r\n <mat-label>label</mat-label>\r\n <input matInput [formControl]=\"label\" />\r\n <mat-error\r\n *ngIf=\"$any(label).errors?.required && (label.dirty || label.touched)\"\r\n >label required</mat-error\r\n >\r\n <mat-error\r\n *ngIf=\"\r\n $any(label).errors?.maxLength && (label.dirty || label.touched)\r\n \"\r\n >label too long</mat-error\r\n >\r\n </mat-form-field>\r\n <div\r\n *ngIf=\"!external.value && !canEditTarget && label.value\"\r\n class=\"info\"\r\n >\r\n <span class=\"label\">label</span>{{ label.value }}\r\n </div>\r\n </div>\r\n\r\n <!-- gid -->\r\n <div>\r\n <mat-form-field *ngIf=\"external.value || canEditTarget\">\r\n <mat-label>GID</mat-label>\r\n <input matInput [formControl]=\"gid\" />\r\n <mat-error\r\n *ngIf=\"$any(gid).errors?.required && (gid.dirty || gid.touched)\"\r\n >GID required</mat-error\r\n >\r\n <mat-error\r\n *ngIf=\"$any(gid).errors?.maxLength && (gid.dirty || gid.touched)\"\r\n >GID too long</mat-error\r\n >\r\n </mat-form-field>\r\n <div *ngIf=\"!external.value && !canEditTarget && gid.value\" class=\"info\">\r\n <span class=\"label\">GID</span> <span class=\"gid\">{{ gid.value }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- BY ITEM -->\r\n <div *ngIf=\"!external.value\">\r\n <fieldset *ngIf=\"!byTypeMode.value\" class=\"form-row\">\r\n <legend>pin filters</legend>\r\n <!-- item filter -->\r\n <cadmus-ref-lookup\r\n [service]=\"itemLookupService\"\r\n label=\"item\"\r\n (itemChange)=\"onItemLookupChange($event)\"\r\n ></cadmus-ref-lookup>\r\n\r\n <!-- part filter -->\r\n <mat-form-field *ngIf=\"itemParts.length\">\r\n <mat-label>part</mat-label>\r\n <mat-select [formControl]=\"itemPart\">\r\n <mat-option [value]=\"null\">(any)</mat-option>\r\n <mat-option *ngFor=\"let p of itemParts\" [value]=\"p\">{{\r\n p.typeId | flatLookup : modelEntries : \"id\" : \"value\"\r\n }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </fieldset>\r\n\r\n <!-- BY TYPE -->\r\n <div *ngIf=\"byTypeMode.value\">\r\n <!-- par type filter -->\r\n <mat-form-field *ngIf=\"partTypeKeys?.length\">\r\n <mat-label>part type</mat-label>\r\n <mat-select [formControl]=\"partTypeKey\">\r\n <mat-option *ngFor=\"let k of partTypeKeys\" [value]=\"k\">{{\r\n k\r\n }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <!-- PIN -->\r\n <div *ngIf=\"partTypeKey.value\">\r\n <!-- pin lookup -->\r\n <cadmus-ref-lookup\r\n [service]=\"pinLookupService\"\r\n [baseFilter]=\"filter\"\r\n [options]=\"pinFilterOptions\"\r\n label=\"pin\"\r\n (itemChange)=\"onPinLookupChange($event)\"\r\n ></cadmus-ref-lookup>\r\n </div>\r\n\r\n <!-- data -->\r\n <mat-expansion-panel id=\"data\" *ngIf=\"lookupData?.pin?.name\">\r\n <mat-expansion-panel-header>pin data</mat-expansion-panel-header>\r\n <!-- table -->\r\n <table>\r\n <thead>\r\n <th></th>\r\n <th>source</th>\r\n <th>value</th>\r\n </thead>\r\n <tbody>\r\n <!-- pin -->\r\n <tr *ngIf=\"lookupData?.pin?.value\">\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n [cdkCopyToClipboard]=\"lookupData!.pin!.value\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon>content_copy</mat-icon>\r\n </button>\r\n </td>\r\n <td>pin</td>\r\n <td>{{ lookupData!.pin.value }}</td>\r\n </tr>\r\n <!-- item ID -->\r\n <tr *ngIf=\"lookupData?.pin?.itemId\">\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n [cdkCopyToClipboard]=\"lookupData!.pin!.itemId\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon>content_copy</mat-icon>\r\n </button>\r\n </td>\r\n <td>item ID</td>\r\n <td>{{ lookupData!.pin.itemId }}</td>\r\n </tr>\r\n <!-- item title -->\r\n <tr *ngIf=\"lookupData?.item?.title\">\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n [cdkCopyToClipboard]=\"lookupData!.item!.title\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon>content_copy</mat-icon>\r\n </button>\r\n </td>\r\n <td>item title</td>\r\n <td>{{ lookupData!.item!.title }}</td>\r\n </tr>\r\n <!-- part ID -->\r\n <tr *ngIf=\"lookupData?.pin?.partId\">\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n [cdkCopyToClipboard]=\"lookupData!.pin!.partId\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon>content_copy</mat-icon>\r\n </button>\r\n </td>\r\n <td>part ID</td>\r\n <td>{{ lookupData!.pin.partId }}</td>\r\n </tr>\r\n <!-- part type ID -->\r\n <tr *ngIf=\"lookupData?.pin?.partTypeId\">\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n [cdkCopyToClipboard]=\"lookupData!.pin!.partTypeId\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon>content_copy</mat-icon>\r\n </button>\r\n </td>\r\n <td>part type ID</td>\r\n <td>{{ lookupData!.pin!.partTypeId }}</td>\r\n </tr>\r\n <!-- part role ID -->\r\n <tr *ngIf=\"lookupData?.pin?.roleId\">\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n [cdkCopyToClipboard]=\"lookupData!.pin!.roleId!\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon>content_copy</mat-icon>\r\n </button>\r\n </td>\r\n <td>part role ID</td>\r\n <td>{{ lookupData!.pin!.roleId }}</td>\r\n </tr>\r\n\r\n <!-- part's metadata -->\r\n <tr\r\n *ngFor=\"\r\n let m of lookupData?.metaPart?.metadata || [];\r\n let i = index\r\n \"\r\n >\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n [cdkCopyToClipboard]=\"m.value\"\r\n (cdkCopyToClipboardCopied)=\"onCopied()\"\r\n >\r\n <mat-icon>content_copy</mat-icon>\r\n </button>\r\n </td>\r\n <td class=\"metadata\">{{ m.name }}</td>\r\n <td class=\"metadata\">{{ m.value }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </mat-expansion-panel>\r\n </div>\r\n\r\n <!-- buttons -->\r\n <div>\r\n <button mat-flat-button type=\"button\" (click)=\"close()\">\r\n <mat-icon color=\"warn\">close</mat-icon>\r\n </button>\r\n <button mat-flat-button type=\"submit\" [disabled]=\"form.invalid\">\r\n <mat-icon color=\"primary\">check_circle</mat-icon> target\r\n </button>\r\n </div>\r\n</form>\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Inject,\r\n Input,\r\n OnInit,\r\n Output,\r\n} from '@angular/core';\r\nimport {\r\n FormBuilder,\r\n FormControl,\r\n FormGroup,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { debounceTime } from 'rxjs/operators';\r\n\r\nimport { IndexLookupDefinitions, ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport { Assertion } from '@myrmidon/cadmus-refs-assertion';\r\n\r\nimport { PinRefLookupService } from '../services/pin-ref-lookup.service';\r\nimport { PinTarget } from '../pin-target-lookup/pin-target-lookup.component';\r\n\r\n/**\r\n * An asserted composite ID. This can be an external ID, having only the ID value\r\n * as its target.gid property; or a lookup ID, with a pin-based target.\r\n * In both cases, we can add a tag, a scope, and an assertion.\r\n */\r\nexport interface AssertedCompositeId {\r\n target: PinTarget;\r\n tag?: string;\r\n scope?: string;\r\n assertion?: Assertion;\r\n}\r\n\r\n@Component({\r\n selector: 'cadmus-refs-asserted-composite-id',\r\n templateUrl: './asserted-composite-id.component.html',\r\n styleUrls: ['./asserted-composite-id.component.css'],\r\n})\r\nexport class AssertedCompositeIdComponent implements OnInit {\r\n private _updatingForm: boolean | undefined;\r\n private _id: AssertedCompositeId | undefined;\r\n\r\n public target: FormControl<PinTarget | null>;\r\n public scope: FormControl<string | null>;\r\n public tag: FormControl<string | null>;\r\n public assertion: FormControl<Assertion | null>;\r\n public form: FormGroup;\r\n\r\n public targetExpanded: boolean;\r\n\r\n // asserted-id-scopes\r\n @Input()\r\n public idScopeEntries?: ThesaurusEntry[];\r\n\r\n // asserted-id-tags\r\n @Input()\r\n public idTagEntries?: ThesaurusEntry[];\r\n\r\n // assertion-tags\r\n @Input()\r\n public assTagEntries?: ThesaurusEntry[];\r\n\r\n // doc-reference-types\r\n @Input()\r\n public refTypeEntries: ThesaurusEntry[] | undefined;\r\n\r\n // doc-reference-tags\r\n @Input()\r\n public refTagEntries: ThesaurusEntry[] | undefined;\r\n\r\n @Input()\r\n public get id(): AssertedCompositeId | undefined | null {\r\n return this._id;\r\n }\r\n public set id(value: AssertedCompositeId | undefined | null) {\r\n if (this._id !== value) {\r\n this._id = value || undefined;\r\n this.updateForm(this._id);\r\n }\r\n }\r\n\r\n /**\r\n * True if the UI has a submit button.\r\n */\r\n @Input()\r\n public hasSubmit: boolean | undefined;\r\n\r\n /**\r\n * True when the internal UI preselected mode should be by type rather than\r\n * by item. User can change mode unless modeSwitching is false.\r\n */\r\n @Input()\r\n public pinByTypeMode?: boolean;\r\n /**\r\n * True when the user can switch between by-type and by-item mode in\r\n * the internal UI.\r\n */\r\n @Input()\r\n public canSwitchMode?: boolean;\r\n /**\r\n * True when the user can edit the target's gid/label for internal targets.\r\n */\r\n @Input()\r\n public canEditTarget?: boolean;\r\n /**\r\n * The lookup definitions to be used for the by-type lookup in the internal UI.\r\n * If not specified, the lookup definitions will be got via injection\r\n * when available; if the injected definitions are empty, the\r\n * lookup definitions will be built from the model-types thesaurus;\r\n * if this is not available either, the by-type lookup will be\r\n * disabled.\r\n */\r\n @Input()\r\n public lookupDefinitions?: IndexLookupDefinitions;\r\n\r\n /**\r\n * The default part type key to be used.\r\n */\r\n @Input()\r\n public defaultPartTypeKey?: string | null;\r\n\r\n /**\r\n * Emitted whenever the ID changes.\r\n */\r\n @Output()\r\n public idChange: EventEmitter<AssertedCompositeId>;\r\n\r\n /**\r\n * Emitted whenever the user requests to close the editor.\r\n */\r\n @Output()\r\n public editorClose: EventEmitter<any>;\r\n\r\n constructor(\r\n formBuilder: FormBuilder,\r\n public lookupService: PinRefLookupService,\r\n @Inject('indexLookupDefinitions')\r\n public lookupDefs: IndexLookupDefinitions\r\n ) {\r\n this.target = formBuilder.control(null, Validators.required);\r\n this.scope = formBuilder.control(null, Validators.maxLength(500));\r\n this.tag = formBuilder.control(null, Validators.maxLength(50));\r\n this.assertion = formBuilder.control(null);\r\n this.form = formBuilder.group({\r\n target: this.target,\r\n scope: this.scope,\r\n tag: this.tag,\r\n assertion: this.assertion,\r\n });\r\n this.targetExpanded = false;\r\n // events\r\n this.idChange = new EventEmitter<AssertedCompositeId>();\r\n this.editorClose = new EventEmitter<any>();\r\n }\r\n\r\n ngOnInit(): void {\r\n this.form.valueChanges.pipe(debounceTime(300)).subscribe((_) => {\r\n if (!this._updatingForm) {\r\n this.emitIdChange();\r\n }\r\n });\r\n }\r\n\r\n public onAssertionChange(assertion: Assertion | undefined): void {\r\n this.assertion.setValue(assertion || null);\r\n }\r\n\r\n public onTargetChange(target: PinTarget): void {\r\n this.target.setValue(target);\r\n this.target.markAsDirty();\r\n this.target.updateValueAndValidity();\r\n this.targetExpanded = false;\r\n }\r\n\r\n private updateForm(id: AssertedCompositeId | undefined): void {\r\n this._updatingForm = true;\r\n if (!id) {\r\n this.form.reset();\r\n } else {\r\n this.target.setValue(id.target);\r\n this.scope.setValue(id.scope || null);\r\n this.tag.setValue(id.tag || null);\r\n this.assertion.setValue(id.assertion || null);\r\n this.form.markAsPristine();\r\n }\r\n this._updatingForm = false;\r\n }\r\n\r\n private getId(): AssertedCompositeId {\r\n const external = !this.target.value?.name;\r\n const target = this.target.value;\r\n return {\r\n target: external\r\n ? {\r\n gid: target?.gid || '',\r\n label: target?.label || target?.gid || '',\r\n }\r\n : target!,\r\n scope: this.scope.value?.trim() || '',\r\n tag: this.tag.value?.trim(),\r\n assertion: this.assertion.value || undefined,\r\n };\r\n }\r\n\r\n public emitIdChange(): void {\r\n if (!this.hasSubmit) {\r\n this._id = this.getId();\r\n this.idChange.emit(this._id);\r\n }\r\n }\r\n\r\n public onEditorClose(): void {\r\n this.targetExpanded = false;\r\n }\r\n\r\n public cancel(): void {\r\n this.editorClose.emit();\r\n }\r\n\r\n public save(): void {\r\n if (this.form.valid) {\r\n this._id = this.getId();\r\n this.idChange.emit(this._id);\r\n }\r\n }\r\n}\r\n","<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <div>\r\n <div class=\"form-row\">\r\n <!-- tag (bound) -->\r\n <mat-form-field *ngIf=\"idTagEntries?.length\" class=\"short-text\">\r\n <mat-label>tag</mat-label>\r\n <mat-select [formControl]=\"tag\">\r\n <mat-option *ngFor=\"let e of idTagEntries\" [value]=\"e.id\">{{\r\n e.value\r\n }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <!-- tag (free) -->\r\n <mat-form-field *ngIf=\"!idTagEntries?.length\" class=\"short-text\">\r\n <mat-label>tag</mat-label>\r\n <input matInput [formControl]=\"tag\" />\r\n <mat-error *ngIf=\"tag.errors?.maxLength && (tag.dirty || tag.touched)\"\r\n >tag too long</mat-error\r\n >\r\n </mat-form-field>\r\n\r\n <!-- scope (bound) -->\r\n <mat-form-field *ngIf=\"idScopeEntries?.length\" class=\"short-text\">\r\n <mat-label>scope</mat-label>\r\n <mat-select [formControl]=\"scope\">\r\n <mat-option *ngFor=\"let e of idScopeEntries\" [value]=\"e.id\">{{\r\n e.value\r\n }}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <!-- scope (free) -->\r\n <mat-form-field *ngIf=\"!idScopeEntries?.length\" class=\"short-text\">\r\n <mat-label>scope</mat-label>\r\n <input matInput [formControl]=\"scope\" />\r\n <mat-error\r\n *ngIf=\"scope.errors?.maxLength && (scope.dirty || scope.touched)\"\r\n >scope too long</mat-error\r\n >\r\n </mat-form-field>\r\n\r\n <!-- label and GID -->\r\n <div class=\"info\" *ngIf=\"target.value?.label\">\r\n <span class=\"label\">label</span>{{ target.value?.label }}\r\n </div>\r\n <div class=\"info\" *ngIf=\"target.value?.gid\">\r\n <span class=\"label\">GID</span>{{ target.value?.gid }}\r\n </div>\r\n </div>\r\n\r\n <!-- target -->\r\n <div>\r\n <mat-expansion-panel [(expanded)]=\"targetExpanded\">\r\n <mat-expansion-panel-header>target</mat-expansion-panel-header>\r\n <cadmus-pin-target-lookup\r\n [pinByTypeMode]=\"pinByTypeMode\"\r\n [canSwitchMode]=\"canSwitchMode\"\r\n [canEditTarget]=\"canEditTarget\"\r\n [lookupDefinitions]=\"lookupDefinitions\"\r\n [defaultPartTypeKey]=\"defaultPartTypeKey\"\r\n [target]=\"target.value\"\r\n (targetChange)=\"onTargetChange($event)\"\r\n (editorClose)=\"onEditorClose()\"\r\n ></cadmus-pin-target-lookup>\r\n </mat-expansion-panel>\r\n </div>\r\n\r\n <!-- assertion -->\r\n <br />\r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header>assertion</mat-expansion-panel-header>\r\n <cadmus-refs-assertion\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [assertion]=\"assertion.value\"\r\n (assertionChange)=\"onAssertionChange($event)\"\r\n >\r\n </cadmus-refs-assertion>\r\n </mat-expansion-panel>\r\n </div>\r\n\r\n <!-- buttons -->\r\n <div *ngIf=\"hasSubmit\">\r\n <button\r\n mat-icon-button\r\n color=\"warn\"\r\n type=\"button\"\r\n (click)=\"cancel()\"\r\n [disabled]=\"!this.target.value?.gid || !this.target.value?.label\"\r\n >\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n <button\r\n mat-icon-button\r\n color=\"primary\"\r\n type=\"submit\"\r\n [disabled]=\"form.invalid\"\r\n >\r\n <mat-icon>check_circle</mat-icon>\r\n </button>\r\n </div>\r\n</form>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { FormBuilder, FormControl, FormGroup } from '@angular/forms';\r\nimport { take } from 'rxjs';\r\n\r\nimport { IndexLookupDefinitions, ThesaurusEntry } from '@myrmidon/cadmus-core';\r\nimport { DialogService } from '@myrmidon/ng-mat-tools';\r\n\r\nimport { AssertedCompositeId } from '../asserted-composite-id/asserted-composite-id.component';\r\n\r\n/**\r\n * Asserted IDs editor.\r\n */\r\n@Component({\r\n selector: 'cadmus-refs-asserted-composite-ids',\r\n templateUrl: './asserted-composite-ids.component.html',\r\n styleUrls: ['./asserted-composite-ids.component.css'],\r\n})\r\nexport class AssertedCompositeIdsComponent {\r\n private _ids: AssertedCompositeId[];\r\n private _editedIndex: number;\r\n public edited?: AssertedCompositeId;\r\n\r\n /**\r\n * The asserted IDs.\r\n */\r\n @Input()\r\n public get ids(): AssertedCompositeId[] {\r\n return this._ids;\r\n }\r\n public set ids(value: AssertedCompositeId[]) {\r\n if (this._ids !== value) {\r\n this._ids = value || [];\r\n this.updateForm(value);\r\n }\r\n }\r\n\r\n // asserted-id-scopes\r\n @Input()\r\n public idScopeEntries?: ThesaurusEntry[];\r\n\r\n // asserted-id-tags\r\n @Input()\r\n public idTagEntries?: ThesaurusEntry[];\r\n\r\n // assertion-tags\r\n @Input()\r\n public assTagEntries?: ThesaurusEntry[];\r\n\r\n // doc-reference-types\r\n @Input()\r\n public refTypeEntries: ThesaurusEntry[] | undefined;\r\n\r\n // doc-reference-tags\r\n @Input()\r\n public refTagEntries: ThesaurusEntry[] | undefined;\r\n\r\n /**\r\n * True when the internal UI preselected mode should be by type rather than\r\n * by item. User can change mode unless modeSwitching is false.\r\n */\r\n @Input()\r\n public pinByTypeMode?: boolean;\r\n /**\r\n * True when the user can switch between by-type and by-item mode in\r\n * the internal UI.\r\n */\r\n @Input()\r\n public canSwitchMode?: boolean;\r\n /**\r\n * True when the user can edit the target's gid/label for internal targets.\r\n */\r\n @Input()\r\n public canEditTarget?: boolean;\r\n /**\r\n * The lookup definitions to be used for the by-type lookup in the internal UI.\r\n * If not specified, the lookup definitions will be got via injection\r\n * when available; if the injected definitions are empty, the\r\n * lookup definitions will be built from the model-types thesaurus;\r\n * if this is not available either, the by-type lookup will be\r\n * disabled.\r\n */\r\n @Input()\r\n public lookupDefinitions?: IndexLookupDefinitions;\r\n\r\n /**\r\n * The default part type key.\r\n */\r\n @Input()\r\n public defaultPartTypeKey?: string | null;\r\n\r\n /**\r\n * Emitted whenever any ID changes.\r\n */\r\n @Output()\r\n public idsChange: EventEmitter<AssertedCompositeId[]>;\r\n\r\n public entries: FormControl<AssertedCompositeId[]>;\r\n public form: FormGroup;\r\n\r\n constructor(formBuilder: FormBuilder, private _dialogService: DialogService) {\r\n this._ids = [];\r\n this._editedIndex = -1;\r\n this.idsChange = new EventEmitter<AssertedCompositeId[]>();\r\n this.entries = formBuilder.control([], { nonNullable: true });\r\n // form\r\n this.form = formBuilder.group({\r\n ids: this.entries,\r\n });\r\n }\r\n\r\n private updateForm(ids: AssertedCompositeId[]): void {\r\n if (!ids?.length) {\r\n this.form.reset();\r\n return;\r\n }\r\n this.entries.setValue(ids, { emitEvent: false });\r\n this.entries.updateValueAndValidity();\r\n this.form.markAsPristine();\r\n }\r\n\r\n private emitIdsChange(): void {\r\n this.idsChange.emit(this.entries.value);\r\n }\r\n\r\n public addId(): void {\r\n this.editId(\r\n {\r\n target: { gid: '', label: '' },\r\n },\r\n -1\r\n );\r\n }\r\n\r\n public editId(id: AssertedCompositeId, index: number): void {\r\n this._editedIndex = index;\r\n this.edited = id;\r\n }\r\n\r\n public closeId(): void {\r\n this._editedIndex = -1;\r\n this.edited = undefined;\r\n }\r\n\r\n public saveId(entry: AssertedCompositeId): void {\r\n const entries = [...this.entries.value];\r\n if (this._editedIndex === -1) {\r\n entries.push(entry);\r\n } else {\r\n entries.splice(this._editedIndex, 1, entry);\r\n }\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.closeId();\r\n }\r\n\r\n public deleteId(index: number): void {\r\n this._dialogService\r\n .confirm('Confirmation', 'Delete ID?')\r\n .pipe(take(1))\r\n .subscribe((yes) => {\r\n if (yes) {\r\n if (this._editedIndex === index) {\r\n this.closeId();\r\n }\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.emitIdsChange();\r\n }\r\n });\r\n }\r\n\r\n public moveIdUp(index: number): void {\r\n if (index < 1) {\r\n return;\r\n }\r\n const entry = this.entries.value[index];\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n entries.splice(index - 1, 0, entry);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.emitIdsChange();\r\n }\r\n\r\n public moveIdDown(index: number): void {\r\n if (index + 1 >= this.entries.value.length) {\r\n return;\r\n }\r\n const entry = this.entries.value[index];\r\n const entries = [...this.entries.value];\r\n entries.splice(index, 1);\r\n entries.splice(index + 1, 0, entry);\r\n this.entries.setValue(entries);\r\n this.entries.markAsDirty();\r\n this.entries.updateValueAndValidity();\r\n this.emitIdsChange();\r\n }\r\n\r\n public onIdChange(id: AssertedCompositeId): void {\r\n this.saveId(id);\r\n this.emitIdsChange();\r\n }\r\n}\r\n","<form [formGroup]=\"form\">\r\n <!-- buttons -->\r\n <button type=\"button\" color=\"primary\" mat-flat-button (click)=\"addId()\">\r\n <mat-icon>add_circle</mat-icon> ID\r\n </button>\r\n <!-- list -->\r\n <table *ngIf=\"entries.value?.length\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>scope</th>\r\n <th>label</th>\r\n <th>value</th>\r\n <th>ass.</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr\r\n *ngFor=\"\r\n let entry of entries.value;\r\n let i = index;\r\n let first = first;\r\n let last = last\r\n \"\r\n >\r\n <td class=\"fit-width\">\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n matTooltip=\"Edit this ID\"\r\n (click)=\"editId(entry, i)\"\r\n >\r\n <mat-icon>edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this ID up\"\r\n [disabled]=\"first\"\r\n (click)=\"moveIdUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this ID down\"\r\n [disabled]=\"last\"\r\n (click)=\"moveIdDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"warn\"\r\n matTooltip=\"Delete this ID\"\r\n (click)=\"deleteId(i)\"\r\n >\r\n <mat-icon>remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ entry.scope }}</td>\r\n <td>{{ entry?.target?.label }}</td>\r\n <td>{{ entry?.target?.gid }}</td>\r\n <td>{{ entry?.assertion ? \"Y\" : \"N\" }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <!-- editor -->\r\n <mat-expansion-panel [expanded]=\"edited\" [disabled]=\"!edited\">\r\n <mat-expansion-panel-header\r\n >ID {{ edited?.target?.label }}</mat-expansion-panel-header\r\n >\r\n <cadmus-refs-asserted-composite-id\r\n [idScopeEntries]=\"idScopeEntries\"\r\n [idTagEntries]=\"idTagEntries\"\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [hasSubmit]=\"true\"\r\n [pinByTypeMode]=\"pinByTypeMode\"\r\n [canSwitchMode]=\"canSwitchMode\"\r\n [canEditTarget]=\"canEditTarget\"\r\n [lookupDefinitions]=\"lookupDefinitions\"\r\n [defaultPartTypeKey]=\"defaultPartTypeKey\"\r\n [id]=\"edited\"\r\n (idChange)=\"onIdChange($event)\"\r\n (editorClose)=\"closeId()\"\r\n ></cadmus-refs-asserted-composite-id>\r\n </mat-expansion-panel>\r\n</form>\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\n\r\nimport { ClipboardModule } from '@angular/cdk/clipboard';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatSelectModule } from '@angular/material/select';\r\n\r\nimport { NgToolsModule } from '@myrmidon/ng-tools';\r\nimport { CadmusCoreModule } from '@myrmidon/cadmus-core';\r\nimport { CadmusApiModule } from '@myrmidon/cadmus-api';\r\nimport { CadmusRefsAssertionModule } from '@myrmidon/cadmus-refs-assertion';\r\nimport { CadmusRefsDocReferencesModule } from '@myrmidon/cadmus-refs-doc-references';\r\nimport { CadmusRefsLookupModule } from '@myrmidon/cadmus-refs-lookup';\r\n\r\nimport { AssertedIdComponent } from './asserted-id/asserted-id.component';\r\nimport { AssertedIdsComponent } from './asserted-ids/asserted-ids.component';\r\nimport { AssertedCompositeIdComponent } from './asserted-composite-id/asserted-composite-id.component';\r\nimport { AssertedCompositeIdsComponent } from './asserted-composite-ids/asserted-composite-ids.component';\r\nimport { PinTargetLookupComponent } from './pin-target-lookup/pin-target-lookup.component';\r\nimport { ScopedPinLookupComponent } from './scoped-pin-lookup/scoped-pin-lookup.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n AssertedIdComponent,\r\n AssertedIdsComponent,\r\n AssertedCompositeIdComponent,\r\n AssertedCompositeIdsComponent,\r\n PinTargetLookupComponent,\r\n ScopedPinLookupComponent,\r\n ],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n // material\r\n ClipboardModule,\r\n MatButtonModule,\r\n MatCheckboxModule,\r\n MatExpansionModule,\r\n MatFormFieldModule,\r\n MatIconModule,\r\n MatInputModule,\r\n MatSelectModule,\r\n // Myrmidon\r\n NgToolsModule,\r\n // Cadmus\r\n CadmusCoreModule,\r\n CadmusRefsDocReferencesModule,\r\n CadmusRefsAssertionModule,\r\n CadmusRefsLookupModule,\r\n CadmusApiModule,\r\n ],\r\n exports: [\r\n AssertedIdComponent,\r\n AssertedIdsComponent,\r\n AssertedCompositeIdComponent,\r\n AssertedCompositeIdsComponent,\r\n PinTargetLookupComponent,\r\n ScopedPinLookupComponent,\r\n ],\r\n})\r\nexport class CadmusRefsAssertedIdsModule {}\r\n","/*\r\n * Public API Surface of cadmus-refs-asserted-ids\r\n */\r\n\r\nexport * from './lib/asserted-id/asserted-id.component';\r\nexport * from './lib/asserted-ids/asserted-ids.component';\r\nexport * from './lib/scoped-pin-lookup/scoped-pin-lookup.component';\r\nexport * from './lib/asserted-composite-id/asserted-composite-id.component';\r\nexport * from './lib/asserted-composite-ids/asserted-composite-ids.component';\r\nexport * from './lib/pin-target-lookup/pin-target-lookup.component';\r\n\r\nexport * from './lib/services/pin-ref-lookup.service';\r\nexport * from './lib/services/item-ref-lookup.service';\r\n\r\nexport * from './lib/cadmus-refs-asserted-ids.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["METADATA_PART_ID","i4","i1","i5","i6","i7","i8","i9","i10","i11","i12.ScopedPinLookupComponent","i7.AssertedIdComponent","debounceTime","i1.ItemRefLookupService","i2.PinRefLookupService","i3","i12","i13","i14","i15","i16","i12.PinTargetLookupComponent","i7.AssertedCompositeIdComponent"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@myrmidon/cadmus-refs-asserted-ids",
3
- "version": "2.1.4",
3
+ "version": "2.1.5",
4
4
  "description": "Cadmus - asserted IDs components.",
5
5
  "keywords": [
6
6
  "Cadmus",