@hmcts/ccd-case-ui-toolkit 7.0.4-mv-upgrade → 7.0.4-task-completion-error-message
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.
- package/esm2020/lib/shared/commons/constants.mjs +2 -1
- package/esm2020/lib/shared/components/case-editor/case-edit/case-edit.component.mjs +67 -27
- package/esm2020/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.mjs +4 -1
- package/esm2020/lib/shared/components/case-editor/case-event-completion/components/case-event-completion-task-reassigned/case-event-completion-task-reassigned.component.mjs +4 -14
- package/esm2020/lib/shared/components/case-editor/services/event-completion-state-machine.service.mjs +6 -25
- package/esm2020/lib/shared/components/case-viewer/case-event-trigger/case-event-trigger.component.mjs +22 -9
- package/esm2020/lib/shared/components/palette/datetime-picker/datetime-picker-utils.mjs +3 -3
- package/esm2020/lib/shared/components/palette/document/write-document-field.component.mjs +14 -2
- package/esm2020/lib/shared/components/palette/linked-cases/write-linked-cases-field.component.mjs +25 -12
- package/esm2020/lib/shared/domain/case-view/service-org-response.model.mjs +2 -0
- package/esm2020/lib/shared/pipes/complex/ccd-read-fields-filter.pipe.mjs +4 -3
- package/esm2020/lib/shared/services/common-data-service/common-data-service.mjs +7 -1
- package/esm2020/lib/shared/services/fields/fields.purger.mjs +16 -6
- package/esm2020/lib/shared/services/form/form-value.service.mjs +10 -7
- package/esm2020/lib/shared/services/utils/retry/retry.service.mjs +1 -2
- package/fesm2015/hmcts-ccd-case-ui-toolkit.mjs +165 -94
- package/fesm2015/hmcts-ccd-case-ui-toolkit.mjs.map +1 -1
- package/fesm2020/hmcts-ccd-case-ui-toolkit.mjs +164 -94
- package/fesm2020/hmcts-ccd-case-ui-toolkit.mjs.map +1 -1
- package/lib/shared/commons/constants.d.ts +1 -0
- package/lib/shared/commons/constants.d.ts.map +1 -1
- package/lib/shared/components/case-editor/case-edit/case-edit.component.d.ts +7 -3
- package/lib/shared/components/case-editor/case-edit/case-edit.component.d.ts.map +1 -1
- package/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.d.ts.map +1 -1
- package/lib/shared/components/case-editor/case-event-completion/components/case-event-completion-task-reassigned/case-event-completion-task-reassigned.component.d.ts.map +1 -1
- package/lib/shared/components/case-editor/services/event-completion-state-machine.service.d.ts.map +1 -1
- package/lib/shared/components/case-viewer/case-event-trigger/case-event-trigger.component.d.ts +5 -2
- package/lib/shared/components/case-viewer/case-event-trigger/case-event-trigger.component.d.ts.map +1 -1
- package/lib/shared/components/palette/document/write-document-field.component.d.ts.map +1 -1
- package/lib/shared/components/palette/linked-cases/write-linked-cases-field.component.d.ts +6 -3
- package/lib/shared/components/palette/linked-cases/write-linked-cases-field.component.d.ts.map +1 -1
- package/lib/shared/domain/case-view/service-org-response.model.d.ts +14 -0
- package/lib/shared/domain/case-view/service-org-response.model.d.ts.map +1 -0
- package/lib/shared/pipes/complex/ccd-read-fields-filter.pipe.d.ts.map +1 -1
- package/lib/shared/services/common-data-service/common-data-service.d.ts +2 -0
- package/lib/shared/services/common-data-service/common-data-service.d.ts.map +1 -1
- package/lib/shared/services/fields/fields.purger.d.ts.map +1 -1
- package/lib/shared/services/form/form-value.service.d.ts +1 -1
- package/lib/shared/services/form/form-value.service.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -38,8 +38,9 @@ export class ReadFieldsFilterPipe {
|
|
|
38
38
|
return isNotEmpty;
|
|
39
39
|
}
|
|
40
40
|
static isEmpty(value) {
|
|
41
|
-
|
|
42
|
-
|
|
41
|
+
const fieldValue = value?.hasOwnProperty('list_items') && value?.hasOwnProperty('value') ? value.value : value;
|
|
42
|
+
return ReadFieldsFilterPipe.EMPTY_VALUES.indexOf(fieldValue) !== -1
|
|
43
|
+
|| fieldValue.length === 0;
|
|
43
44
|
}
|
|
44
45
|
static isCompound(field) {
|
|
45
46
|
return ReadFieldsFilterPipe.NESTED_TYPES[field.field_type.type];
|
|
@@ -169,4 +170,4 @@ ReadFieldsFilterPipe.ɵpipe = /*@__PURE__*/ i0.ɵɵdefinePipe({ name: "ccdReadFi
|
|
|
169
170
|
name: 'ccdReadFieldsFilter'
|
|
170
171
|
}]
|
|
171
172
|
}], null, null); })();
|
|
172
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2NkLXJlYWQtZmllbGRzLWZpbHRlci5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9waXBlcy9jb21wbGV4L2NjZC1yZWFkLWZpZWxkcy1maWx0ZXIucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUdwRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUVBQWlFLENBQUM7QUFDaEcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7QUFLakUsTUFBTSxPQUFPLG9CQUFvQjtJQWdCL0I7O09BRUc7SUFDSyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQWdCLEVBQUUsTUFBZSxFQUFFLDJCQUFvQztRQUNuRyxNQUFNLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUN0QixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO1FBQzlCLE1BQU0sS0FBSyxHQUFHLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFM0QsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN4RCxNQUFNLFFBQVEsR0FBRyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsMkJBQTJCLENBQUMsQ0FBQztZQUM3RixPQUFPLFFBQVEsSUFBSSxvQkFBb0IsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLEVBQUUsMkJBQTJCLENBQUMsQ0FBQyxNQUFN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LEVBQUU7Z0JBQ3RCLElBQUksV0FBVyxDQUFDLHFCQUFxQixDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsRUFBRTtvQkFDbkUsQ0FBQyxDQUFDLGVBQWUsR0FBRyxZQUFZLENBQUMsZUFBZSxDQUFDO2lCQUNsRDthQUNGO1lBQ0QsSUFBSSxXQUFXLEVBQUU7Z0JBQ2Ysb0JBQW9CLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxFQUFFLDJCQUEyQixFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRSxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDekg7WUFDRCxPQUFPLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQzthQUNELE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsSUFBSSxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsMkJBQTJCLENBQUMsQ0FBQyxDQUFDO0lBQ2hILENBQUM7O0FBM0t1QixpQ0FBWSxHQUFHO0lBQ3JDLFNBQVM7SUFDVCxJQUFJO0lBQ0osRUFBRTtJQUNGLEVBQUU7Q0FDSCxDQUFDO0FBRXNCLHVDQUFrQixHQUFHLENBQUMsMEJBQTBCLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0FBRXBHLGlDQUFZLEdBQUc7SUFDckMsT0FBTyxFQUFFLG9CQUFvQixDQUFDLGNBQWM7SUFDNUMsVUFBVSxFQUFFLG9CQUFvQixDQUFDLGlCQUFpQjtDQUNuRCxDQUFDO3dGQWRTLG9CQUFvQjtnR0FBcEIsb0JBQW9CO3VGQUFwQixvQkFBb0I7Y0FIaEMsSUFBSTtlQUFDO2dCQUNKLElBQUksRUFBRSxxQkFBcUI7YUFDNUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgcGxhaW5Ub0NsYXNzRnJvbUV4aXN0IH0gZnJvbSAnY2xhc3MtdHJhbnNmb3JtZXInO1xuaW1wb3J0IHsgU2hvd0NvbmRpdGlvbiB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvY29uZGl0aW9uYWwtc2hvdy9kb21haW4vY29uZGl0aW9uYWwtc2hvdy5tb2RlbCc7XG5pbXBvcnQgeyBDYXNlRmllbGQgfSBmcm9tICcuLi8uLi9kb21haW4vZGVmaW5pdGlvbi9jYXNlLWZpZWxkLm1vZGVsJztcbmltcG9ydCB7IEZpZWxkc1V0aWxzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmllbGRzL2ZpZWxkcy51dGlscyc7XG5cbkBQaXBlKHtcbiAgbmFtZTogJ2NjZFJlYWRGaWVsZHNGaWx0ZXInXG59KVxuZXhwb3J0IGNsYXNzIFJlYWRGaWVsZHNGaWx0ZXJQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgRU1QVFlfVkFMVUVTID0gW1xuICAgIHVuZGVmaW5lZCxcbiAgICBudWxsLFxuICAgICcnLFxuICAgIHt9XG4gIF07XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQUxXQVlTX05VTExfRklFTERTID0gWydDYXNlUGF5bWVudEhpc3RvcnlWaWV3ZXInLCAnV2F5c1RvUGF5JywgJ0ZsYWdMYXVuY2hlcicsICdDb21wb25lbnRMYXVuY2hlciddO1xuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IE5FU1RFRF9UWVBFUyA9IHtcbiAgICBDb21wbGV4OiBSZWFkRmllbGRzRmlsdGVyUGlwZS5pc1ZhbGlkQ29tcGxleCxcbiAgICBDb2xsZWN0aW9uOiBSZWFkRmllbGRzRmlsdGVyUGlwZS5pc1ZhbGlkQ29sbGVjdGlvblxuICB9O1xuXG4gIC8qKlxuICAgKiBDb21wbGV4IHR5cGUgc2hvdWxkIGhhdmUgYXQgbGVhc3Qgb24gc2ltcGxlIGZpZWxkIGRlc2NlbmRhbnQgd2l0aCBhIHZhbHVlLlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgaXNWYWxpZENvbXBsZXgoZmllbGQ6IENhc2VGaWVsZCwgdmFsdWVzPzogb2JqZWN0LCBjaGVja0NvbmRpdGlvbmFsU2hvd0FnYWluc3Q/OiBvYmplY3QpOiBib29sZWFuIHtcbiAgICB2YWx1ZXMgPSB2YWx1ZXMgfHwge307XG4gICAgY29uc3QgdHlwZSA9IGZpZWxkLmZpZWxkX3R5cGU7XG4gICAgY29uc3QgdmFsdWUgPSBSZWFkRmllbGRzRmlsdGVyUGlwZS5nZXRWYWx1ZShmaWVsZCwgdmFsdWVzKTtcblxuICAgIGNvbnN0IGhhc0NoaWxkcmVuV2l0aFZhbHVlID0gdHlwZS5jb21wbGV4X2ZpZWxkcy5maW5kKGYgPT4ge1xuICAgICAgY29uc3Qgd2lsbEtlZXAgPSBSZWFkRmllbGRzRmlsdGVyUGlwZS5rZWVwRmllbGQoZiwgdmFsdWUsIHRydWUsIGNoZWNrQ29uZGl0aW9uYWxTaG93QWdhaW5zdCk7XG4gICAgICByZXR1cm4gd2lsbEtlZXAgJiYgUmVhZEZpZWxkc0ZpbHRlclBpcGUuZXZhbHVhdGVDb25kaXRpb25hbFNob3coZiwgY2hlY2tDb25kaXRpb25hbFNob3dBZ2FpbnN0KS5oaWRkZW4gIT09IHRydWU7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gISFoYXNDaGlsZHJlbldpdGhWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGlzVmFsaWRDb2xsZWN0aW9uKGZpZWxkOiBDYXNlRmllbGQsIHZhbHVlcz86IG9iamVjdCwgY2hlY2tDb25kaXRpb25hbFNob3dBZ2FpbnN0Pzogb2JqZWN0KTogYm9vbGVhbiB7XG4gICAgLy8gaWYgZmllbGQgaXMgY29sbGVjdGlvbiBhbmQgaXQgaGFzIGNvbXBsZXgvY29sbGVjdGlvbiBjaGlsZCBmaWVsZDsgcGFyZW50IGZpZWxkIGRvZXNudCBoYXZlIHZhbHVlIGRlZmluZWRcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZmllbGQudmFsdWUpICYmIHZhbHVlcyAmJiB2YWx1ZXMuaGFzT3duUHJvcGVydHkoZmllbGQuaWQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgaXNOb3RFbXB0eSA9IEFycmF5LmlzQXJyYXkoZmllbGQudmFsdWUpICYmIGZpZWxkLnZhbHVlLmxlbmd0aCA+IDA7XG4gICAgaWYgKGlzTm90RW1wdHkgJiYgZmllbGQuZmllbGRfdHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUudHlwZSA9PT0gJ0NvbXBsZXgnKSB7XG4gICAgICByZXR1cm4gISFmaWVsZC52YWx1ZS5maW5kKGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCBjb21wbGV4RmllbGQgPSBwbGFpblRvQ2xhc3NGcm9tRXhpc3QobmV3IENhc2VGaWVsZCgpLCB7XG4gICAgICAgICAgaWQ6IGZpZWxkLmZpZWxkX3R5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLmlkLFxuICAgICAgICAgIGZpZWxkX3R5cGU6IGZpZWxkLmZpZWxkX3R5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLFxuICAgICAgICAgIHZhbHVlOiBpdGVtLnZhbHVlLFxuICAgICAgICAgIGxhYmVsOiBudWxsLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIFJlYWRGaWVsZHNGaWx0ZXJQaXBlLmlzVmFsaWRDb21wbGV4KGNvbXBsZXhGaWVsZCwgdW5kZWZpbmVkLCBjaGVja0NvbmRpdGlvbmFsU2hvd0FnYWluc3QpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBpc05vdEVtcHR5O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgaXNFbXB0eSh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFJlYWRGaWVsZHNGaWx0ZXJQaXBlLkVNUFRZX1ZBTFVFUy5pbmRleE9mKHZhbHVlKSAhPT0gLTFcbiAgICAgIHx8IHZhbHVlLmxlbmd0aCA9PT0gMDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGlzQ29tcG91bmQoZmllbGQ6IENhc2VGaWVsZCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBSZWFkRmllbGRzRmlsdGVyUGlwZS5ORVNURURfVFlQRVNbZmllbGQuZmllbGRfdHlwZS50eXBlXTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGlzVmFsaWRDb21wb3VuZChmaWVsZDogQ2FzZUZpZWxkLCB2YWx1ZT86IG9iamVjdCwgY2hlY2tDb25kaXRpb25hbFNob3dBZ2FpbnN0Pzogb2JqZWN0KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFJlYWRGaWVsZHNGaWx0ZXJQaXBlLmlzQ29tcG91bmQoZmllbGQpXG4gICAgICAgICAgICAmJiBSZWFkRmllbGRzRmlsdGVyUGlwZS5ORVNURURfVFlQRVNbZmllbGQuZmllbGRfdHlwZS50eXBlXShmaWVsZCwgdmFsdWUsIGNoZWNrQ29uZGl0aW9uYWxTaG93QWdhaW5zdCk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBrZWVwRmllbGQoZmllbGQ6IENhc2VGaWVsZCwgdmFsdWU/OiBvYmplY3QsIGlnbm9yZUxhYmVscyA9IGZhbHNlLCBjaGVja0NvbmRpdGlvbmFsU2hvd0FnYWluc3Q/OiBvYmplY3QpOiBib29sZWFuIHtcbiAgICAvLyBXZSBzaG91bGRuJ3QgZGl0Y2ggbGFiZWxzLlxuICAgIGlmICghaWdub3JlTGFiZWxzICYmIGZpZWxkLmZpZWxkX3R5cGUudHlwZSA9PT0gJ0xhYmVsJyAmJiAoZmllbGQubGFiZWwgfHwgJycpLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICAvLyBXZSBhbHNvIHNob3VsZG4ndCBkaXRjaCBmaWVsZHMgdGhhdCB3aWxsIGFsd2F5cyBjb21lIGJhY2sgd2l0aCBhIG51bGwgdmFsdWUuXG4gICAgaWYgKHRoaXMuQUxXQVlTX05VTExfRklFTERTLmluZGV4T2YoZmllbGQuZmllbGRfdHlwZS50eXBlKSAhPT0gLTEpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHZhbHVlID0gdmFsdWUgfHwge307XG5cbiAgICBpZiAoUmVhZEZpZWxkc0ZpbHRlclBpcGUuaXNDb21wb3VuZChmaWVsZCkpIHtcbiAgICAgIHJldHVybiBSZWFkRmllbGRzRmlsdGVyUGlwZS5pc1ZhbGlkQ29tcG91bmQoZmllbGQsIHZhbHVlLCBjaGVja0NvbmRpdGlvbmFsU2hvd0FnYWluc3QpO1xuICAgIH1cblxuICAgIHJldHVybiAhUmVhZEZpZWxkc0ZpbHRlclBpcGUuaXNFbXB0eShmaWVsZC52YWx1ZSlcbiAgICAgIHx8ICFSZWFkRmllbGRzRmlsdGVyUGlwZS5pc0VtcHR5KHZhbHVlW2ZpZWxkLmlkXSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZXRWYWx1ZShmaWVsZDogQ2FzZUZpZWxkLCB2YWx1ZXM6IGFueSwgaW5kZXg/OiBudW1iZXIpOiBhbnkge1xuICAgIGlmIChSZWFkRmllbGRzRmlsdGVyUGlwZS5pc0VtcHR5KGZpZWxkLnZhbHVlKSkge1xuICAgICAgbGV0IHZhbHVlOiBhbnk7XG4gICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlc1tpbmRleF0udmFsdWVbZmllbGQuaWRdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZXNbZmllbGQuaWRdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBmaWVsZC52YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGV2YWx1YXRlQ29uZGl0aW9uYWxTaG93KGZpZWxkOiBDYXNlRmllbGQsIGZvcm1WYWx1ZTogYW55LCBwYXRoPzogc3RyaW5nLFxuICAgIGZvcm1Hcm91cEF2YWlsYWJsZT86IGJvb2xlYW4sIGZpZWxkSWQ/OiBzdHJpbmcpOiBDYXNlRmllbGQge1xuICAgIGlmIChmaWVsZC5kaXNwbGF5X2NvbnRleHQgPT09ICdISURERU4nKSB7XG4gICAgICBmaWVsZC5oaWRkZW4gPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoZmllbGQuc2hvd19jb25kaXRpb24pIHtcbiAgICAgIGxldCBjb25kOiBTaG93Q29uZGl0aW9uO1xuICAgICAgaWYgKGZpZWxkSWQgJiYgZmllbGQuc2hvd19jb25kaXRpb24uaW5kZXhPZihgJHtmaWVsZElkfS5gKSA+IC0xICYmICFmb3JtR3JvdXBBdmFpbGFibGUgJiYgISFPYmplY3Qua2V5cyhmb3JtVmFsdWUpLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBzZWFyY2ggPSBgJHtmaWVsZElkfS5gO1xuICAgICAgICBjb25zdCBzZWFyY2hSZWdFeHAgPSBuZXcgUmVnRXhwKHNlYXJjaCwgJ2cnKTtcbiAgICAgICAgY29uc3QgcmVwbGFjZVdpdGggPSAnJztcbiAgICAgICAgY29uZCA9IFNob3dDb25kaXRpb24uZ2V0SW5zdGFuY2UoZmllbGQuc2hvd19jb25kaXRpb24ucmVwbGFjZShzZWFyY2hSZWdFeHAsIHJlcGxhY2VXaXRoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25kID0gU2hvd0NvbmRpdGlvbi5nZXRJbnN0YW5jZShmaWVsZC5zaG93X2NvbmRpdGlvbik7XG4gICAgICB9XG4gICAgICBmaWVsZC5oaWRkZW4gPSAhY29uZC5tYXRjaChmb3JtVmFsdWUsIHBhdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmaWVsZC5oaWRkZW4gPSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGZpZWxkO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlciBvdXQgZmllbGRzIGhhdmluZyBubyBkYXRhIHRvIGRpc3BsYXkgYW5kIGhhcm1vbmlzZSBmaWVsZCB2YWx1ZXMgY29taW5nIHBhcmVudCdzIHZhbHVlLlxuICAgKi9cbiAgcHVibGljIHRyYW5zZm9ybShcbiAgICBjb21wbGV4RmllbGQ6IENhc2VGaWVsZCwga2VlcEVtcHR5PzogYm9vbGVhbiwgaW5kZXg/OiBudW1iZXIsXG4gICAgc2V0dXBIaWRkZW4gPSBmYWxzZSwgZm9ybUdyb3VwPzogRm9ybUdyb3VwIHwgQWJzdHJhY3RDb250cm9sLCBwYXRoPzogc3RyaW5nLCBpZFByZWZpeD86IHN0cmluZyk6IENhc2VGaWVsZFtdIHtcbiAgICBpZiAoIWNvbXBsZXhGaWVsZCB8fCAhY29tcGxleEZpZWxkLmZpZWxkX3R5cGUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWVsZHMgPSBjb21wbGV4RmllbGQuZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcyB8fCBbXTtcbiAgICBjb25zdCB2YWx1ZXMgPSBjb21wbGV4RmllbGQudmFsdWUgfHwge307XG4gICAgbGV0IGNoZWNrQ29uZGl0aW9uYWxTaG93QWdhaW5zdDogYW55ID0gdmFsdWVzO1xuICAgIGxldCBmb3JtR3JvdXBBdmFpbGFibGUgPSBmYWxzZTtcbiAgICBpZiAoZm9ybUdyb3VwKSB7XG4gICAgICBjaGVja0NvbmRpdGlvbmFsU2hvd0FnYWluc3QgPSBmb3JtR3JvdXAudmFsdWUgPyBmb3JtR3JvdXAucGFyZW50LmdldFJhd1ZhbHVlKCkuZGF0YSA6IGZvcm1Hcm91cDtcbiAgICAgIGZvcm1Hcm91cEF2YWlsYWJsZSA9IHRydWU7XG4gICAgICBpZiAoaWRQcmVmaXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoaWRQcmVmaXggIT09ICcnKSB7XG4gICAgICAgICAgY29uc3QgZmllbGRJZCA9IGlkUHJlZml4LnN1YnN0cmluZygwLCBpZFByZWZpeC5pbmRleE9mKCdfJykpO1xuICAgICAgICAgIGlmIChjaGVja0NvbmRpdGlvbmFsU2hvd0FnYWluc3RbZmllbGRJZF0pIHtcbiAgICAgICAgICAgIGNoZWNrQ29uZGl0aW9uYWxTaG93QWdhaW5zdCA9IHZhbHVlcztcbiAgICAgICAgICAgIGZvcm1Hcm91cEF2YWlsYWJsZSA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjaGVja0NvbmRpdGlvbmFsU2hvd0FnYWluc3QgPSBPYmplY3QuYXNzaWduKGNoZWNrQ29uZGl0aW9uYWxTaG93QWdhaW5zdCwgdmFsdWVzKTtcbiAgICAgICAgICBmb3JtR3JvdXBBdmFpbGFibGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmaWVsZHNcbiAgICAgIC5tYXAoZiA9PiB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gRmllbGRzVXRpbHMuY2xvbmVPYmplY3QoZik7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gUmVhZEZpZWxkc0ZpbHRlclBpcGUuZ2V0VmFsdWUoZiwgdmFsdWVzLCBpbmRleCk7XG4gICAgICAgIGlmICghUmVhZEZpZWxkc0ZpbHRlclBpcGUuaXNFbXB0eSh2YWx1ZSkpIHtcbiAgICAgICAgICBjbG9uZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICAgIH0pXG4gICAgICAubWFwKGYgPT4ge1xuICAgICAgICBpZiAoIWYuZGlzcGxheV9jb250ZXh0KSB7XG4gICAgICAgICAgaWYgKEZpZWxkc1V0aWxzLmlzVmFsaWREaXNwbGF5Q29udGV4dChjb21wbGV4RmllbGQuZGlzcGxheV9jb250ZXh0KSkge1xuICAgICAgICAgICAgZi5kaXNwbGF5X2NvbnRleHQgPSBjb21wbGV4RmllbGQuZGlzcGxheV9jb250ZXh0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc2V0dXBIaWRkZW4pIHtcbiAgICAgICAgICBSZWFkRmllbGRzRmlsdGVyUGlwZS5ldmFsdWF0ZUNvbmRpdGlvbmFsU2hvdyhmLCBjaGVja0NvbmRpdGlvbmFsU2hvd0FnYWluc3QsIHBhdGgsIGZvcm1Hcm91cEF2YWlsYWJsZSwgY29tcGxleEZpZWxkLmlkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZjtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKGYgPT4ga2VlcEVtcHR5IHx8IFJlYWRGaWVsZHNGaWx0ZXJQaXBlLmtlZXBGaWVsZChmLCB1bmRlZmluZWQsIGZhbHNlLCBjaGVja0NvbmRpdGlvbmFsU2hvd0FnYWluc3QpKTtcbiAgfVxufVxuIl19
|
|
173
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2NkLXJlYWQtZmllbGRzLWZpbHRlci5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9waXBlcy9jb21wbGV4L2NjZC1yZWFkLWZpZWxkcy1maWx0ZXIucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUdwRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUVBQWlFLENBQUM7QUFDaEcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7QUFLakUsTUFBTSxPQUFPLG9CQUFvQjtJQWdCL0I7O09BRUc7SUFDSyxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQWdCLEVBQUUsTUFBZSxFQUFFLDJCQUFvQztRQUNuRyxNQUFNLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUN0QixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO1FBQzlCLE1BQU0sS0FBSyxHQUFHLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFM0QsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN4RCxNQUFNLFFBQVEsR0FBRyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsMkJBQTJCLENBQUMsQ0FBQztZQUM3RixPQUFPLFFBQVEsSUFBSSxvQkFBb0IsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLEVBQUUsMkJBQTJCLENBQUMsQ0FBQyxNQUFN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bXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgcGxhaW5Ub0NsYXNzRnJvbUV4aXN0IH0gZnJvbSAnY2xhc3MtdHJhbnNmb3JtZXInO1xuaW1wb3J0IHsgU2hvd0NvbmRpdGlvbiB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvY29uZGl0aW9uYWwtc2hvdy9kb21haW4vY29uZGl0aW9uYWwtc2hvdy5tb2RlbCc7XG5pbXBvcnQgeyBDYXNlRmllbGQgfSBmcm9tICcuLi8uLi9kb21haW4vZGVmaW5pdGlvbi9jYXNlLWZpZWxkLm1vZGVsJztcbmltcG9ydCB7IEZpZWxkc1V0aWxzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmllbGRzL2ZpZWxkcy51dGlscyc7XG5cbkBQaXBlKHtcbiAgbmFtZTogJ2NjZFJlYWRGaWVsZHNGaWx0ZXInXG59KVxuZXhwb3J0IGNsYXNzIFJlYWRGaWVsZHNGaWx0ZXJQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgRU1QVFlfVkFMVUVTID0gW1xuICAgIHVuZGVmaW5lZCxcbiAgICBudWxsLFxuICAgICcnLFxuICAgIHt9XG4gIF07XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgQUxXQVlTX05VTExfRklFTERTID0gWydDYXNlUGF5bWVudEhpc3RvcnlWaWV3ZXInLCAnV2F5c1RvUGF5JywgJ0ZsYWdMYXVuY2hlcicsICdDb21wb25lbnRMYXVuY2hlciddO1xuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IE5FU1RFRF9UWVBFUyA9IHtcbiAgICBDb21wbGV4OiBSZWFkRmllbGRzRmlsdGVyUGlwZS5pc1ZhbGlkQ29tcGxleCxcbiAgICBDb2xsZWN0aW9uOiBSZWFkRmllbGRzRmlsdGVyUGlwZS5pc1ZhbGlkQ29sbGVjdGlvblxuICB9O1xuXG4gIC8qKlxuICAgKiBDb21wbGV4IHR5cGUgc2hvdWxkIGhhdmUgYXQgbGVhc3Qgb24gc2ltcGxlIGZpZWxkIGRlc2NlbmRhbnQgd2l0aCBhIHZhbHVlLlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgaXNWYWxpZENvbXBsZXgoZmllbGQ6IENhc2VGaWVsZCwgdmFsdWVzPzogb2JqZWN0LCBjaGVja0NvbmRpdGlvbmFsU2hvd0FnYWluc3Q/OiBvYmplY3QpOiBib29sZWFuIHtcbiAgICB2YWx1ZXMgPSB2YWx1ZXMgfHwge307XG4gICAgY29uc3QgdHlwZSA9IGZpZWxkLmZpZWxkX3R5cGU7XG4gICAgY29uc3QgdmFsdWUgPSBSZWFkRmllbGRzRmlsdGVyUGlwZS5nZXRWYWx1ZShmaWVsZCwgdmFsdWVzKTtcblxuICAgIGNvbnN0IGhhc0NoaWxkcmVuV2l0aFZhbHVlID0gdHlwZS5jb21wbGV4X2ZpZWxkcy5maW5kKGYgPT4ge1xuICAgICAgY29uc3Qgd2lsbEtlZXAgPSBSZWFkRmllbGRzRmlsdGVyUGlwZS5rZWVwRmllbGQoZiwgdmFsdWUsIHRydWUsIGNoZWNrQ29uZGl0aW9uYWxTaG93QWdhaW5zdCk7XG4gICAgICByZXR1cm4gd2lsbEtlZXAgJiYgUmVhZEZpZWxkc0ZpbHRlclBpcGUuZXZhbHVhdGVDb25kaXRpb25hbFNob3coZiwgY2hlY2tDb25kaXRpb25hbFNob3dBZ2FpbnN0KS5oaWRkZW4gIT09IHRydWU7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gISFoYXNDaGlsZHJlbldpdGhWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGlzVmFsaWRDb2xsZWN0aW9uKGZpZWxkOiBDYXNlRmllbGQsIHZhbHVlcz86IG9iamVjdCwgY2hlY2tDb25kaXRpb25hbFNob3dBZ2FpbnN0Pzogb2JqZWN0KTogYm9vbGVhbiB7XG4gICAgLy8gaWYgZmllbGQgaXMgY29sbGVjdGlvbiBhbmQgaXQgaGFzIGNvbXBsZXgvY29sbGVjdGlvbiBjaGlsZCBmaWVsZDsgcGFyZW50IGZpZWxkIGRvZXNudCBoYXZlIHZhbHVlIGRlZmluZWRcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZmllbGQudmFsdWUpICYmIHZhbHVlcyAmJiB2YWx1ZXMuaGFzT3duUHJvcGVydHkoZmllbGQuaWQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgaXNOb3RFbXB0eSA9IEFycmF5LmlzQXJyYXkoZmllbGQudmFsdWUpICYmIGZpZWxkLnZhbHVlLmxlbmd0aCA+IDA7XG4gICAgaWYgKGlzTm90RW1wdHkgJiYgZmllbGQuZmllbGRfdHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUudHlwZSA9PT0gJ0NvbXBsZXgnKSB7XG4gICAgICByZXR1cm4gISFmaWVsZC52YWx1ZS5maW5kKGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCBjb21wbGV4RmllbGQgPSBwbGFpblRvQ2xhc3NGcm9tRXhpc3QobmV3IENhc2VGaWVsZCgpLCB7XG4gICAgICAgICAgaWQ6IGZpZWxkLmZpZWxkX3R5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLmlkLFxuICAgICAgICAgIGZpZWxkX3R5cGU6IGZpZWxkLmZpZWxkX3R5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLFxuICAgICAgICAgIHZhbHVlOiBpdGVtLnZhbHVlLFxuICAgICAgICAgIGxhYmVsOiBudWxsLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIFJlYWRGaWVsZHNGaWx0ZXJQaXBlLmlzVmFsaWRDb21wbGV4KGNvbXBsZXhGaWVsZCwgdW5kZWZpbmVkLCBjaGVja0NvbmRpdGlvbmFsU2hvd0FnYWluc3QpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBpc05vdEVtcHR5O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgaXNFbXB0eSh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgY29uc3QgZmllbGRWYWx1ZSA9IHZhbHVlPy5oYXNPd25Qcm9wZXJ0eSgnbGlzdF9pdGVtcycpICAmJiB2YWx1ZT8uaGFzT3duUHJvcGVydHkoJ3ZhbHVlJykgPyB2YWx1ZS52YWx1ZSA6IHZhbHVlO1xuICAgIHJldHVybiAgUmVhZEZpZWxkc0ZpbHRlclBpcGUuRU1QVFlfVkFMVUVTLmluZGV4T2YoZmllbGRWYWx1ZSkgIT09IC0xXG4gICAgICB8fCBmaWVsZFZhbHVlLmxlbmd0aCA9PT0gMDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGlzQ29tcG91bmQoZmllbGQ6IENhc2VGaWVsZCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBSZWFkRmllbGRzRmlsdGVyUGlwZS5ORVNURURfVFlQRVNbZmllbGQuZmllbGRfdHlwZS50eXBlXTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGlzVmFsaWRDb21wb3VuZChmaWVsZDogQ2FzZUZpZWxkLCB2YWx1ZT86IG9iamVjdCwgY2hlY2tDb25kaXRpb25hbFNob3dBZ2FpbnN0Pzogb2JqZWN0KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFJlYWRGaWVsZHNGaWx0ZXJQaXBlLmlzQ29tcG91bmQoZmllbGQpXG4gICAgICAgICAgICAmJiBSZWFkRmllbGRzRmlsdGVyUGlwZS5ORVNURURfVFlQRVNbZmllbGQuZmllbGRfdHlwZS50eXBlXShmaWVsZCwgdmFsdWUsIGNoZWNrQ29uZGl0aW9uYWxTaG93QWdhaW5zdCk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBrZWVwRmllbGQoZmllbGQ6IENhc2VGaWVsZCwgdmFsdWU/OiBvYmplY3QsIGlnbm9yZUxhYmVscyA9IGZhbHNlLCBjaGVja0NvbmRpdGlvbmFsU2hvd0FnYWluc3Q/OiBvYmplY3QpOiBib29sZWFuIHtcbiAgICAvLyBXZSBzaG91bGRuJ3QgZGl0Y2ggbGFiZWxzLlxuICAgIGlmICghaWdub3JlTGFiZWxzICYmIGZpZWxkLmZpZWxkX3R5cGUudHlwZSA9PT0gJ0xhYmVsJyAmJiAoZmllbGQubGFiZWwgfHwgJycpLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICAvLyBXZSBhbHNvIHNob3VsZG4ndCBkaXRjaCBmaWVsZHMgdGhhdCB3aWxsIGFsd2F5cyBjb21lIGJhY2sgd2l0aCBhIG51bGwgdmFsdWUuXG4gICAgaWYgKHRoaXMuQUxXQVlTX05VTExfRklFTERTLmluZGV4T2YoZmllbGQuZmllbGRfdHlwZS50eXBlKSAhPT0gLTEpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHZhbHVlID0gdmFsdWUgfHwge307XG5cbiAgICBpZiAoUmVhZEZpZWxkc0ZpbHRlclBpcGUuaXNDb21wb3VuZChmaWVsZCkpIHtcbiAgICAgIHJldHVybiBSZWFkRmllbGRzRmlsdGVyUGlwZS5pc1ZhbGlkQ29tcG91bmQoZmllbGQsIHZhbHVlLCBjaGVja0NvbmRpdGlvbmFsU2hvd0FnYWluc3QpO1xuICAgIH1cblxuICAgIHJldHVybiAhUmVhZEZpZWxkc0ZpbHRlclBpcGUuaXNFbXB0eShmaWVsZC52YWx1ZSlcbiAgICAgIHx8ICFSZWFkRmllbGRzRmlsdGVyUGlwZS5pc0VtcHR5KHZhbHVlW2ZpZWxkLmlkXSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZXRWYWx1ZShmaWVsZDogQ2FzZUZpZWxkLCB2YWx1ZXM6IGFueSwgaW5kZXg/OiBudW1iZXIpOiBhbnkge1xuICAgIGlmIChSZWFkRmllbGRzRmlsdGVyUGlwZS5pc0VtcHR5KGZpZWxkLnZhbHVlKSkge1xuICAgICAgbGV0IHZhbHVlOiBhbnk7XG4gICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlc1tpbmRleF0udmFsdWVbZmllbGQuaWRdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZXNbZmllbGQuaWRdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBmaWVsZC52YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGV2YWx1YXRlQ29uZGl0aW9uYWxTaG93KGZpZWxkOiBDYXNlRmllbGQsIGZvcm1WYWx1ZTogYW55LCBwYXRoPzogc3RyaW5nLFxuICAgIGZvcm1Hcm91cEF2YWlsYWJsZT86IGJvb2xlYW4sIGZpZWxkSWQ/OiBzdHJpbmcpOiBDYXNlRmllbGQge1xuICAgIGlmIChmaWVsZC5kaXNwbGF5X2NvbnRleHQgPT09ICdISURERU4nKSB7XG4gICAgICBmaWVsZC5oaWRkZW4gPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoZmllbGQuc2hvd19jb25kaXRpb24pIHtcbiAgICAgIGxldCBjb25kOiBTaG93Q29uZGl0aW9uO1xuICAgICAgaWYgKGZpZWxkSWQgJiYgZmllbGQuc2hvd19jb25kaXRpb24uaW5kZXhPZihgJHtmaWVsZElkfS5gKSA+IC0xICYmICFmb3JtR3JvdXBBdmFpbGFibGUgJiYgISFPYmplY3Qua2V5cyhmb3JtVmFsdWUpLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBzZWFyY2ggPSBgJHtmaWVsZElkfS5gO1xuICAgICAgICBjb25zdCBzZWFyY2hSZWdFeHAgPSBuZXcgUmVnRXhwKHNlYXJjaCwgJ2cnKTtcbiAgICAgICAgY29uc3QgcmVwbGFjZVdpdGggPSAnJztcbiAgICAgICAgY29uZCA9IFNob3dDb25kaXRpb24uZ2V0SW5zdGFuY2UoZmllbGQuc2hvd19jb25kaXRpb24ucmVwbGFjZShzZWFyY2hSZWdFeHAsIHJlcGxhY2VXaXRoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25kID0gU2hvd0NvbmRpdGlvbi5nZXRJbnN0YW5jZShmaWVsZC5zaG93X2NvbmRpdGlvbik7XG4gICAgICB9XG4gICAgICBmaWVsZC5oaWRkZW4gPSAhY29uZC5tYXRjaChmb3JtVmFsdWUsIHBhdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmaWVsZC5oaWRkZW4gPSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGZpZWxkO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlciBvdXQgZmllbGRzIGhhdmluZyBubyBkYXRhIHRvIGRpc3BsYXkgYW5kIGhhcm1vbmlzZSBmaWVsZCB2YWx1ZXMgY29taW5nIHBhcmVudCdzIHZhbHVlLlxuICAgKi9cbiAgcHVibGljIHRyYW5zZm9ybShcbiAgICBjb21wbGV4RmllbGQ6IENhc2VGaWVsZCwga2VlcEVtcHR5PzogYm9vbGVhbiwgaW5kZXg/OiBudW1iZXIsXG4gICAgc2V0dXBIaWRkZW4gPSBmYWxzZSwgZm9ybUdyb3VwPzogRm9ybUdyb3VwIHwgQWJzdHJhY3RDb250cm9sLCBwYXRoPzogc3RyaW5nLCBpZFByZWZpeD86IHN0cmluZyk6IENhc2VGaWVsZFtdIHtcbiAgICBpZiAoIWNvbXBsZXhGaWVsZCB8fCAhY29tcGxleEZpZWxkLmZpZWxkX3R5cGUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBmaWVsZHMgPSBjb21wbGV4RmllbGQuZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcyB8fCBbXTtcbiAgICBjb25zdCB2YWx1ZXMgPSBjb21wbGV4RmllbGQudmFsdWUgfHwge307XG4gICAgbGV0IGNoZWNrQ29uZGl0aW9uYWxTaG93QWdhaW5zdDogYW55ID0gdmFsdWVzO1xuICAgIGxldCBmb3JtR3JvdXBBdmFpbGFibGUgPSBmYWxzZTtcbiAgICBpZiAoZm9ybUdyb3VwKSB7XG4gICAgICBjaGVja0NvbmRpdGlvbmFsU2hvd0FnYWluc3QgPSBmb3JtR3JvdXAudmFsdWUgPyBmb3JtR3JvdXAucGFyZW50LmdldFJhd1ZhbHVlKCkuZGF0YSA6IGZvcm1Hcm91cDtcbiAgICAgIGZvcm1Hcm91cEF2YWlsYWJsZSA9IHRydWU7XG4gICAgICBpZiAoaWRQcmVmaXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoaWRQcmVmaXggIT09ICcnKSB7XG4gICAgICAgICAgY29uc3QgZmllbGRJZCA9IGlkUHJlZml4LnN1YnN0cmluZygwLCBpZFByZWZpeC5pbmRleE9mKCdfJykpO1xuICAgICAgICAgIGlmIChjaGVja0NvbmRpdGlvbmFsU2hvd0FnYWluc3RbZmllbGRJZF0pIHtcbiAgICAgICAgICAgIGNoZWNrQ29uZGl0aW9uYWxTaG93QWdhaW5zdCA9IHZhbHVlcztcbiAgICAgICAgICAgIGZvcm1Hcm91cEF2YWlsYWJsZSA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjaGVja0NvbmRpdGlvbmFsU2hvd0FnYWluc3QgPSBPYmplY3QuYXNzaWduKGNoZWNrQ29uZGl0aW9uYWxTaG93QWdhaW5zdCwgdmFsdWVzKTtcbiAgICAgICAgICBmb3JtR3JvdXBBdmFpbGFibGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmaWVsZHNcbiAgICAgIC5tYXAoZiA9PiB7XG4gICAgICAgIGNvbnN0IGNsb25lID0gRmllbGRzVXRpbHMuY2xvbmVPYmplY3QoZik7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gUmVhZEZpZWxkc0ZpbHRlclBpcGUuZ2V0VmFsdWUoZiwgdmFsdWVzLCBpbmRleCk7XG4gICAgICAgIGlmICghUmVhZEZpZWxkc0ZpbHRlclBpcGUuaXNFbXB0eSh2YWx1ZSkpIHtcbiAgICAgICAgICBjbG9uZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZTtcbiAgICAgIH0pXG4gICAgICAubWFwKGYgPT4ge1xuICAgICAgICBpZiAoIWYuZGlzcGxheV9jb250ZXh0KSB7XG4gICAgICAgICAgaWYgKEZpZWxkc1V0aWxzLmlzVmFsaWREaXNwbGF5Q29udGV4dChjb21wbGV4RmllbGQuZGlzcGxheV9jb250ZXh0KSkge1xuICAgICAgICAgICAgZi5kaXNwbGF5X2NvbnRleHQgPSBjb21wbGV4RmllbGQuZGlzcGxheV9jb250ZXh0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc2V0dXBIaWRkZW4pIHtcbiAgICAgICAgICBSZWFkRmllbGRzRmlsdGVyUGlwZS5ldmFsdWF0ZUNvbmRpdGlvbmFsU2hvdyhmLCBjaGVja0NvbmRpdGlvbmFsU2hvd0FnYWluc3QsIHBhdGgsIGZvcm1Hcm91cEF2YWlsYWJsZSwgY29tcGxleEZpZWxkLmlkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZjtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKGYgPT4ga2VlcEVtcHR5IHx8IFJlYWRGaWVsZHNGaWx0ZXJQaXBlLmtlZXBGaWVsZChmLCB1bmRlZmluZWQsIGZhbHNlLCBjaGVja0NvbmRpdGlvbmFsU2hvd0FnYWluc3QpKTtcbiAgfVxufVxuIl19
|
|
@@ -13,10 +13,16 @@ export class CommonDataService {
|
|
|
13
13
|
}
|
|
14
14
|
return of(null);
|
|
15
15
|
}
|
|
16
|
+
getServiceOrgData(url) {
|
|
17
|
+
if (url) {
|
|
18
|
+
return this.http.get(url, { observe: 'body' });
|
|
19
|
+
}
|
|
20
|
+
return of(null);
|
|
21
|
+
}
|
|
16
22
|
}
|
|
17
23
|
CommonDataService.ɵfac = function CommonDataService_Factory(t) { return new (t || CommonDataService)(i0.ɵɵinject(i1.HttpClient)); };
|
|
18
24
|
CommonDataService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: CommonDataService, factory: CommonDataService.ɵfac });
|
|
19
25
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CommonDataService, [{
|
|
20
26
|
type: Injectable
|
|
21
27
|
}], function () { return [{ type: i1.HttpClient }]; }, null); })();
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLWRhdGEtc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvc2VydmljZXMvY29tbW9uLWRhdGEtc2VydmljZS9jb21tb24tZGF0YS1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7OztBQXdCdEMsTUFBTSxPQUFPLGlCQUFpQjtJQUU1QixZQUE2QixJQUFnQjtRQUFoQixTQUFJLEdBQUosSUFBSSxDQUFZO0lBQUcsQ0FBQztJQUUxQyxVQUFVLENBQUMsR0FBVztRQUMzQixJQUFJLEdBQUcsRUFBRTtZQUNQLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQTJCLEdBQUcsRUFBRSxFQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFDO1NBQ3hFO1FBQ0QsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUVNLGlCQUFpQixDQUFDLEdBQVc7UUFDbEMsSUFBSSxHQUFHLEVBQUU7WUFDUCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFlLEdBQUcsRUFBRSxFQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFDO1NBQzVEO1FBQ0QsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEIsQ0FBQzs7a0ZBaEJVLGlCQUFpQjt1RUFBakIsaUJBQWlCLFdBQWpCLGlCQUFpQjt1RkFBakIsaUJBQWlCO2NBRDdCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNlcnZpY2VPcmcgfSBmcm9tICcuLi8uLi9kb21haW4vY2FzZS12aWV3L3NlcnZpY2Utb3JnLXJlc3BvbnNlLm1vZGVsJztcblxuZXhwb3J0IGludGVyZmFjZSBMb3ZSZWZEYXRhTW9kZWwge1xuICBjYXRlZ29yeV9rZXk6IHN0cmluZztcbiAga2V5OiBzdHJpbmc7XG4gIHZhbHVlX2VuOiBzdHJpbmc7XG4gIHZhbHVlX2N5OiBzdHJpbmc7XG4gIGhpbnRfdGV4dF9lbjogc3RyaW5nO1xuICBoaW50X3RleHRfY3k6IHN0cmluZztcbiAgbG92X29yZGVyOiBudW1iZXI7XG4gIHBhcmVudF9jYXRlZ29yeTogc3RyaW5nO1xuICBwYXJlbnRfa2V5OiBzdHJpbmc7XG4gIGFjdGl2ZV9mbGFnOiBzdHJpbmc7XG4gIGNoaWxkX25vZGVzPzogTG92UmVmRGF0YU1vZGVsW107XG4gIGZyb20/OiBzdHJpbmc7XG4gIHNlbGVjdGVkPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb3ZSZWZEYXRhQnlTZXJ2aWNlTW9kZWwge1xuICBsaXN0X29mX3ZhbHVlczogTG92UmVmRGF0YU1vZGVsW107XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDb21tb25EYXRhU2VydmljZSB7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBodHRwOiBIdHRwQ2xpZW50KSB7fVxuXG4gIHB1YmxpYyBnZXRSZWZEYXRhKHVybDogc3RyaW5nKTogT2JzZXJ2YWJsZTxMb3ZSZWZEYXRhQnlTZXJ2aWNlTW9kZWw+IHtcbiAgICBpZiAodXJsKSB7XG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxMb3ZSZWZEYXRhQnlTZXJ2aWNlTW9kZWw+KHVybCwge29ic2VydmU6ICdib2R5J30pO1xuICAgIH1cbiAgICByZXR1cm4gb2YobnVsbCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0U2VydmljZU9yZ0RhdGEodXJsOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFNlcnZpY2VPcmdbXT4ge1xuICAgIGlmICh1cmwpIHtcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFNlcnZpY2VPcmdbXT4odXJsLCB7b2JzZXJ2ZTogJ2JvZHknfSk7XG4gICAgfVxuICAgIHJldHVybiBvZihudWxsKTtcbiAgfVxufVxuIl19
|
|
@@ -278,11 +278,21 @@ export class FieldsPurger {
|
|
|
278
278
|
* @returns A new array with the mapped values
|
|
279
279
|
*/
|
|
280
280
|
mapArrayValuesToNull(array) {
|
|
281
|
-
|
|
282
|
-
return
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
281
|
+
if (array && array.length > 0) {
|
|
282
|
+
return array.map(element => {
|
|
283
|
+
if (element !== undefined && element !== null) {
|
|
284
|
+
return typeof element === 'object'
|
|
285
|
+
? Object.assign({}, ...Object.keys(element).map(k => ({ [k]: null })))
|
|
286
|
+
: null;
|
|
287
|
+
}
|
|
288
|
+
else {
|
|
289
|
+
return {};
|
|
290
|
+
}
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
else {
|
|
294
|
+
return array;
|
|
295
|
+
}
|
|
286
296
|
}
|
|
287
297
|
}
|
|
288
298
|
FieldsPurger.ɵfac = function FieldsPurger_Factory(t) { return new (t || FieldsPurger)(i0.ɵɵinject(i1.FieldsUtils)); };
|
|
@@ -290,4 +300,4 @@ FieldsPurger.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: FieldsPurge
|
|
|
290
300
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FieldsPurger, [{
|
|
291
301
|
type: Injectable
|
|
292
302
|
}], function () { return [{ type: i1.FieldsUtils }]; }, null); })();
|
|
293
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGRzLnB1cmdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvc2VydmljZXMvZmllbGRzL2ZpZWxkcy5wdXJnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU0zQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUVBQWlFLENBQUM7QUFJaEcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFFN0MsV0FBVztBQUVYLE1BQU0sT0FBTyxZQUFZO0lBRXZCLFlBQTZCLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO0lBQUksQ0FBQztJQUVuRCxpQkFBaUIsQ0FBQyxJQUFlLEVBQUUsTUFBYyxFQUFFLFlBQThCLEVBQUUsYUFBcUI7UUFDN0csSUFBSSxDQUFDLHFDQUFxQyxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3RGLElBQUksQ0FBQyxvQ0FBb0MsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFTyxvQ0FBb0MsQ0FBQyxJQUFlLEVBQUUsTUFBYyxFQUFFLFlBQThCO1FBQzFHLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEYsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDeEIsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsRUFBRSxFQUFFLGlCQUFpQixDQUFDLEVBQUU7Z0JBQ3BELE1BQU0sU0FBUyxHQUFHLElBQUksYUFBYSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FB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QUksQ0FBQyxDQUFDO2FBQy9CO1NBQ0Y7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxvQkFBb0IsQ0FBQyxLQUFZO1FBQ3RDLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUN6QixPQUFPLE9BQU8sT0FBTyxLQUFLLFFBQVE7Z0JBQ2hDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUN0RSxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzt3RUE5U1UsWUFBWTtrRUFBWixZQUFZLFdBQVosWUFBWTt1RkFBWixZQUFZO2NBRHhCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IFdpemFyZFBhZ2VGaWVsZCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY2FzZS1lZGl0b3IvZG9tYWluL3dpemFyZC1wYWdlLWZpZWxkLm1vZGVsJztcbmltcG9ydCB7IFdpemFyZFBhZ2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2Nhc2UtZWRpdG9yL2RvbWFpbi93aXphcmQtcGFnZS5tb2RlbCc7XG5pbXBvcnQgeyBXaXphcmQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2Nhc2UtZWRpdG9yL2RvbWFpbi93aXphcmQubW9kZWwnO1xuaW1wb3J0IHsgU2hvd0NvbmRpdGlvbiB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvY29uZGl0aW9uYWwtc2hvdy9kb21haW4vY29uZGl0aW9uYWwtc2hvdy5tb2RlbCc7XG5pbXBvcnQgeyBDYXNlRXZlbnRUcmlnZ2VyIH0gZnJvbSAnLi4vLi4vZG9tYWluL2Nhc2Utdmlldy9jYXNlLWV2ZW50LXRyaWdnZXIubW9kZWwnO1xuaW1wb3J0IHsgQ2FzZUZpZWxkIH0gZnJvbSAnLi4vLi4vZG9tYWluL2RlZmluaXRpb24vY2FzZS1maWVsZC5tb2RlbCc7XG5pbXBvcnQgeyBGaWVsZFR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vZG9tYWluL2RlZmluaXRpb24vZmllbGQtdHlwZS1lbnVtLm1vZGVsJztcbmltcG9ydCB7IEZpZWxkc1V0aWxzIH0gZnJvbSAnLi9maWVsZHMudXRpbHMnO1xuXG4vLyBAZHluYW1pY1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEZpZWxkc1B1cmdlciB7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBmaWVsZHNVdGlsczogRmllbGRzVXRpbHMpIHsgfVxuXG4gIHB1YmxpYyBjbGVhckhpZGRlbkZpZWxkcyhmb3JtOiBGb3JtR3JvdXAsIHdpemFyZDogV2l6YXJkLCBldmVudFRyaWdnZXI6IENhc2VFdmVudFRyaWdnZXIsIGN1cnJlbnRQYWdlSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJIaWRkZW5GaWVsZEZvckZpZWxkU2hvd0NvbmRpdGlvbihjdXJyZW50UGFnZUlkLCBmb3JtLCB3aXphcmQsIGV2ZW50VHJpZ2dlcik7XG4gICAgdGhpcy5jbGVhckhpZGRlbkZpZWxkRm9yUGFnZVNob3dDb25kaXRpb24oZm9ybSwgd2l6YXJkLCBldmVudFRyaWdnZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckhpZGRlbkZpZWxkRm9yUGFnZVNob3dDb25kaXRpb24oZm9ybTogRm9ybUdyb3VwLCB3aXphcmQ6IFdpemFyZCwgZXZlbnRUcmlnZ2VyOiBDYXNlRXZlbnRUcmlnZ2VyKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudEV2ZW50U3RhdGUgPSB0aGlzLmZpZWxkc1V0aWxzLmdldEN1cnJlbnRFdmVudFN0YXRlKGV2ZW50VHJpZ2dlciwgZm9ybSk7XG4gICAgd2l6YXJkLnBhZ2VzLmZvckVhY2god3AgPT4ge1xuICAgICAgaWYgKHRoaXMuaGFzU2hvd0NvbmRpdGlvblBhZ2Uod3AsIGN1cnJlbnRFdmVudFN0YXRlKSkge1xuICAgICAgICBjb25zdCBjb25kaXRpb24gPSBuZXcgU2hvd0NvbmRpdGlvbih3cC5zaG93X2NvbmRpdGlvbik7XG4gICAgICAgIGlmICh0aGlzLmlzSGlkZGVuKGNvbmRpdGlvbiwgY3VycmVudEV2ZW50U3RhdGUpKSB7XG4gICAgICAgICAgdGhpcy5yZXNldFBhZ2UoZm9ybSwgd3ApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFySGlkZGVuRmllbGRGb3JGaWVsZFNob3dDb25kaXRpb24oY3VycmVudFBhZ2VJZDogc3RyaW5nLFxuICAgIGZvcm06IEZvcm1Hcm91cCxcbiAgICB3aXphcmQ6IFdpemFyZCxcbiAgICBldmVudFRyaWdnZXI6IENhc2VFdmVudFRyaWdnZXIpOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtRmllbGRzID0gZm9ybS5nZXRSYXdWYWx1ZSgpO1xuICAgIGNvbnN0IGN1cnJlbnRQYWdlOiBXaXphcmRQYWdlID0gd2l6YXJkLmdldFBhZ2UoY3VycmVudFBhZ2VJZCwgdGhpcy5maWVsZHNVdGlscy5idWlsZENhblNob3dQcmVkaWNhdGUoZXZlbnRUcmlnZ2VyLCBmb3JtKSk7XG4gICAgY3VycmVudFBhZ2Uud2l6YXJkX3BhZ2VfZmllbGRzLmZvckVhY2god3BmID0+IHtcbiAgICAgIGNvbnN0IGNhc2VGaWVsZCA9IHRoaXMuZmluZENhc2VGaWVsZEJ5V2l6YXJkUGFnZUZpZWxkSWQoY3VycmVudFBhZ2UsIHdwZik7XG4gICAgICBpZiAodGhpcy5oYXNTaG93Q29uZGl0aW9uRmllbGQoY2FzZUZpZWxkLCBmb3JtRmllbGRzKSkge1xuICAgICAgICBjb25zdCBjb25kaXRpb24gPSBuZXcgU2hvd0NvbmRpdGlvbihjYXNlRmllbGQuc2hvd19jb25kaXRpb24pO1xuICAgICAgICBpZiAodGhpcy5pc0hpZGRlbihjb25kaXRpb24sIGZvcm1GaWVsZHMuZGF0YSkgJiYgISh0aGlzLmlzUmVhZG9ubHkoY2FzZUZpZWxkKSkpIHtcbiAgICAgICAgICB0aGlzLnJlc2V0RmllbGQoZm9ybSwgY2FzZUZpZWxkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5yZXRhaW5IaWRkZW5WYWx1ZUJ5RmllbGRUeXBlKGNhc2VGaWVsZCwgZm9ybSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJldGFpbkhpZGRlblZhbHVlQnlGaWVsZFR5cGUoZmllbGQ6IENhc2VGaWVsZCwgZm9ybTogYW55KTogdm9pZCB7XG4gICAgLy8gc28gZmFyIG9ubHkgYXBwbGllcyB0byB0aGUgbmV3IGZpZWxkIHR5cGUgT3JnYW5pc2F0aW9uUG9saWN5IHdoaWNoIG5lZWRzIHRvIHJldGFpbiB0aGUgZGVmYXVsdCBjYXNlIHJvbGUgdmFsdWVcbiAgICAvLyBmb3Igb3RoZXIgY2FzZSBmaWVsZHMgdGhlcmUgc2hvdWxkIGJlIG5vIHNpZGUgZWZmZWN0c1xuICAgIGlmIChmaWVsZCAmJiBmaWVsZC5maWVsZF90eXBlICYmIGZpZWxkLmZpZWxkX3R5cGUuaWQgPT09ICdPcmdhbmlzYXRpb25Qb2xpY3knKSB7XG4gICAgICAvLyA8YnViYmxlX3dyYXA+XG4gICAgICAvLyBEb2luZyBzb21lIG51bGwgY2hlY2tpbmcgdG8gc3RvcCBpdCBmcm9tIGZhbGxpbmcgb3Zlci5cbiAgICAgIGNvbnN0IGRhdGE6IEZvcm1Hcm91cCA9IGZvcm0uZ2V0KCdkYXRhJykgYXMgRm9ybUdyb3VwO1xuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgY29uc3QgZmllbGRHcm91cDogRm9ybUdyb3VwID0gZGF0YS5jb250cm9sc1tmaWVsZC5pZF0gYXMgRm9ybUdyb3VwO1xuICAgICAgICBpZiAoZmllbGRHcm91cCkge1xuICAgICAgICAgIGNvbnN0IGNhc2VSb2xlRm9ybUNvbnRyb2w6IEZvcm1Db250cm9sID0gZmllbGRHcm91cC5nZXQoJ09yZ1BvbGljeUNhc2VBc3NpZ25lZFJvbGUnKSBhcyBGb3JtQ29udHJvbDtcbiAgICAgICAgICBpZiAoY2FzZVJvbGVGb3JtQ29udHJvbCkge1xuICAgICAgICAgICAgY2FzZVJvbGVGb3JtQ29udHJvbC5lbmFibGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIDwvYnViYmxlX3dyYXA+XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpc0hpZGRlbihjb25kaXRpb246IFNob3dDb25kaXRpb24sIGZvcm1GaWVsZHM6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhY29uZGl0aW9uLm1hdGNoKGZvcm1GaWVsZHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kQ2FzZUZpZWxkQnlXaXphcmRQYWdlRmllbGRJZChjdXJyZW50UGFnZTogV2l6YXJkUGFnZSwgd2l6YXJkUGFnZUZpZWxkOiBXaXphcmRQYWdlRmllbGQpOiBDYXNlRmllbGQge1xuICAgIHJldHVybiBjdXJyZW50UGFnZS5jYXNlX2ZpZWxkcy5maW5kKGNmID0+IGNmLmlkID09PSB3aXphcmRQYWdlRmllbGQuY2FzZV9maWVsZF9pZCk7XG4gIH1cblxuICBwcml2YXRlIGhhc1Nob3dDb25kaXRpb25QYWdlKHdpemFyZFBhZ2U6IFdpemFyZFBhZ2UsIGZvcm1GaWVsZHM6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB3aXphcmRQYWdlLnNob3dfY29uZGl0aW9uICYmIGZvcm1GaWVsZHNbdGhpcy5nZXRTaG93Q29uZGl0aW9uS2V5KHdpemFyZFBhZ2Uuc2hvd19jb25kaXRpb24pXTtcbiAgfVxuXG4gIHByaXZhdGUgaGFzU2hvd0NvbmRpdGlvbkZpZWxkKGNhc2VGaWVsZDogQ2FzZUZpZWxkLCBmb3JtRmllbGRzOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gY2FzZUZpZWxkLnNob3dfY29uZGl0aW9uICYmIGZvcm1GaWVsZHMuZGF0YVt0aGlzLmdldFNob3dDb25kaXRpb25LZXkoY2FzZUZpZWxkLnNob3dfY29uZGl0aW9uKV07XG4gIH1cblxuICBwcml2YXRlIGdldFNob3dDb25kaXRpb25LZXkoc2hvd0NvbmRpdGlvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBOZWVkIHRvIGFsbG93IGZvciBuZWdhdGVkIGNvbmRpdGlvbnMsIGkuZS4gIT0sIGFzIHdlbGwgYXMgcmVndWxhciBvbmVzICg9KVxuICAgIC8vIEFsc28gbmVlZCB0byBhbGxvdyBmb3IgY29uZGl0aW9ucyBzcGVjaWZpZWQgdXNpbmcgdGhlIFwiQ09OVEFJTlNcIiBrZXl3b3JkXG4gICAgcmV0dXJuIHNob3dDb25kaXRpb24uc3BsaXQoLyE9fD18Q09OVEFJTlMvKVswXTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRGaWVsZChmb3JtOiBGb3JtR3JvdXAsIGZpZWxkOiBDYXNlRmllbGQpOiB2b2lkIHtcbiAgICAvKipcbiAgICAgKiBJZiB0aGUgaGlkZGVuIGZpZWxkJ3MgdmFsdWUgaXMgdG8gYmUgcmV0YWluZWQsIGRvIG5vdGhpbmcgKGV4Y2VwdCBpZiBpdCBpcyBhIENvbXBsZXggdHlwZSBvciBjb2xsZWN0aW9uIG9mXG4gICAgICogQ29tcGxleCB0eXBlcykuIFRoaXMgaXMgYSBjaGFuZ2UgdG8gdGhlIHByZXZpb3VzIGJlaGF2aW91ciAod2hpY2ggdXNlZCB0byBjbGVhciB0aGUgZmllbGQgdmFsdWUgYnV0IHJlbW92ZSBpdFxuICAgICAqIGZyb20gc3VibWlzc2lvbiBhcyBhbiB1cGRhdGUgdG8gdGhlIGJhY2stZW5kKS4gVGhlIG5ldyBiZWhhdmlvdXIgaXMgdG8gbGVhdmUgdGhlIGZpZWxkIGFzIGlzLCBzbyBpZiB0aGUgZmllbGRcbiAgICAgKiBpcyBoaWRkZW4gYnV0IHRoZW4gdW4taGlkZGVuIGJlZm9yZSBmb3JtIHN1Ym1pc3Npb24sIGFueSBwcmV2aW91c2x5IGVudGVyZWQgdmFsdWUgaXMgcmV0YWluZWQuXG4gICAgICpcbiAgICAgKiBGb3IgQ29tcGxleCBmaWVsZCB0eXBlcywgYW4gYWRkaXRpb25hbCBjaGVjayBvZiBzdWItZmllbGRzIGlzIHJlcXVpcmVkLiBUaGUgc2FtZSBhcHBsaWVzIHRvIGEgY29sbGVjdGlvbiBvZlxuICAgICAqIENvbXBsZXggdHlwZXMuXG4gICAgICovXG4gICAgaWYgKGZpZWxkLnJldGFpbl9oaWRkZW5fdmFsdWUpIHtcbiAgICAgIGNvbnN0IGZpZWxkVHlwZTogRmllbGRUeXBlRW51bSA9IGZpZWxkLmZpZWxkX3R5cGUudHlwZTtcbiAgICAgIC8vIElmIHRoZSBmaWVsZCBpcyBhIENvbXBsZXggdHlwZSwgbG9vcCBvdmVyIGl0cyBzdWItZmllbGRzIGFuZCBjYWxsIGRlbGV0ZUZpZWxkVmFsdWUoKSBmb3IgYW55IHN1Yi1maWVsZHNcbiAgICAgIC8vIHdoZXJlIHJldGFpbl9oaWRkZW5fdmFsdWUgaXMgZmFsc2UsIE9SIGZvciBhbnkgQ29tcGxleCBzdWItZmllbGRzICpyZWdhcmRsZXNzIG9mIHRoZWlyIHJldGFpbl9oaWRkZW5fdmFsdWUqXG4gICAgICAvLyAoaW4gb3JkZXIgdG8gaW5zcGVjdCB0aGUgc3ViLWZpZWxkcyBvZiBhIENvbXBsZXggdHlwZSB3aXRoaW4gYW5vdGhlciBDb21wbGV4IHR5cGUpXG4gICAgICBpZiAoZmllbGRUeXBlID09PSAnQ29tcGxleCcgJiYgZmllbGQuZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAoY29uc3QgY29tcGxleFN1YkZpZWxkIG9mIGZpZWxkLmZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMpIHtcbiAgICAgICAgICBpZiAoKGNvbXBsZXhTdWJGaWVsZC5maWVsZF90eXBlLnR5cGUgPT09ICdDb21wbGV4JyAmJiBjb21wbGV4U3ViRmllbGQuZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcy5sZW5ndGggPiAwKSB8fFxuICAgICAgICAgICAgIWNvbXBsZXhTdWJGaWVsZC5yZXRhaW5faGlkZGVuX3ZhbHVlKSB7XG4gICAgICAgICAgICAvLyBDaGVjayBmb3IgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgcGFyZW50IEZvcm1Hcm91cCBjb3JyZXNwb25kaW5nIHRvIHRoZSBDb21wbGV4IGZpZWxkOyBpZiBpdCBleGlzdHMsIGNhbGxcbiAgICAgICAgICAgIC8vIGRlbGV0ZUZpZWxkVmFsdWUoKSB0byBkZWxldGUgdGhlIHN1Yi1maWVsZFxuICAgICAgICAgICAgY29uc3QgcGFyZW50Rm9ybUdyb3VwID0gKGZvcm0uZ2V0KCdkYXRhJykgYXMgRm9ybUdyb3VwKS5jb250cm9sc1tmaWVsZC5pZF0gYXMgRm9ybUdyb3VwO1xuICAgICAgICAgICAgaWYgKHBhcmVudEZvcm1Hcm91cCkge1xuICAgICAgICAgICAgICB0aGlzLmRlbGV0ZUZpZWxkVmFsdWUocGFyZW50Rm9ybUdyb3VwLCBjb21wbGV4U3ViRmllbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChmaWVsZFR5cGUgPT09ICdDb2xsZWN0aW9uJyAmJiBmaWVsZC5maWVsZF90eXBlLmNvbGxlY3Rpb25fZmllbGRfdHlwZS50eXBlID09PSAnQ29tcGxleCcgJiZcbiAgICAgICAgZmllbGQuZmllbGRfdHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyBJZiB0aGUgZmllbGQgaXMgYSBjb2xsZWN0aW9uIG9mIENvbXBsZXggdHlwZXMsIGxvb3AgdGhyb3VnaCBlYWNoIG9uZSBhbmQgY2FsbCBkZWxldGVGaWVsZFZhbHVlKCkgZm9yIGFueVxuICAgICAgICAvLyBzdWItZmllbGRzIHdoZXJlIHJldGFpbl9oaWRkZW5fdmFsdWUgaXMgZmFsc2UsIE9SIGZvciBhbnkgQ29tcGxleCBzdWItZmllbGRzICpyZWdhcmRsZXNzIG9mIHRoZWlyXG4gICAgICAgIC8vIHJldGFpbl9oaWRkZW5fdmFsdWUqIChpbiBvcmRlciB0byBpbnNwZWN0IHRoZSBzdWItZmllbGRzIG9mIGEgQ29tcGxleCB0eXBlIHdpdGhpbiBhbm90aGVyIENvbXBsZXggdHlwZSlcblxuICAgICAgICAvLyBHZXQgdGhlIGFycmF5IG9mIGZpZWxkIGNvbnRyb2xzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIENvbXBsZXggZmllbGQgdmFsdWVzXG4gICAgICAgIGNvbnN0IGZpZWxkQ29udHJvbHMgPSAoZm9ybS5nZXQoJ2RhdGEnKSBhcyBGb3JtR3JvdXApLmNvbnRyb2xzW2ZpZWxkLmlkXSBhcyBGb3JtQXJyYXk7XG5cbiAgICAgICAgaWYgKGZpZWxkQ29udHJvbHMpIHtcbiAgICAgICAgICAvLyBHZXQgdGhlIGFycmF5IG9mIENvbXBsZXggZmllbGQgdmFsdWVzXG4gICAgICAgICAgY29uc3QgY29tcGxleEZpZWxkVmFsdWVzID0gZmllbGRDb250cm9scy52YWx1ZSBhcyBhbnlbXTtcblxuICAgICAgICAgIC8vIEZvciBlYWNoIENvbXBsZXggZmllbGQgdmFsdWUsIGdldCB0aGUgSUQgb2YgZWFjaCBzdWItZmllbGQgd2l0aGluIGl0IGFuZCB1c2UgYXMgYSBrZXkgdG8gZmluZCB0aGVcbiAgICAgICAgICAvLyBjb3JyZXNwb25kaW5nIHN1Yi1DYXNlRmllbGQgKHdoaWNoIGNvbnRhaW5zIHRoZSBmaWVsZCB0eXBlIGluZm9ybWF0aW9uKVxuICAgICAgICAgIGlmIChjb21wbGV4RmllbGRWYWx1ZXMpIHtcbiAgICAgICAgICAgIGNvbXBsZXhGaWVsZFZhbHVlcy5mb3JFYWNoKChmaWVsZFZhbHVlLCBpbmRleCkgPT4gT2JqZWN0LmtleXMoZmllbGRWYWx1ZS52YWx1ZSkuZm9yRWFjaChzdWJGaWVsZElkID0+IHtcbiAgICAgICAgICAgICAgLy8gRmluZCB0aGUgc3ViLUNhc2VGaWVsZCBjb3JyZXNwb25kaW5nIHRvIHRoZSBzdWItZmllbGQgSURcbiAgICAgICAgICAgICAgbGV0IHN1YkNhc2VGaWVsZDogQ2FzZUZpZWxkO1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNhc2VGaWVsZCBvZiBmaWVsZC5maWVsZF90eXBlLmNvbGxlY3Rpb25fZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcykge1xuICAgICAgICAgICAgICAgIGlmIChjYXNlRmllbGQuaWQgPT09IHN1YkZpZWxkSWQpIHtcbiAgICAgICAgICAgICAgICAgIHN1YkNhc2VGaWVsZCA9IGNhc2VGaWVsZDtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGRlbGV0ZSB0aGUgc3ViLWZpZWxkIHZhbHVlIGlmIHJldGFpbl9oaWRkZW5fdmFsdWUgaXMgZmFsc2UsIE9SIGlmIHRoZSBzdWItZmllbGQgdHlwZSBpc1xuICAgICAgICAgICAgICAvLyBDb21wbGV4IGFuZCByZWdhcmRsZXNzIG9mIHJldGFpbl9oaWRkZW5fdmFsdWUsIHBhc3NpbmcgaW4gdGhlIHBhcmVudCBGb3JtR3JvdXBcbiAgICAgICAgICAgICAgaWYgKHN1YkNhc2VGaWVsZCAmJlxuICAgICAgICAgICAgICAgICgoc3ViQ2FzZUZpZWxkLmZpZWxkX3R5cGUudHlwZSA9PT0gJ0NvbXBsZXgnICYmIHN1YkNhc2VGaWVsZC5maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzLmxlbmd0aCA+IDApIHx8XG4gICAgICAgICAgICAgICAgICAhc3ViQ2FzZUZpZWxkLnJldGFpbl9oaWRkZW5fdmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50Rm9ybUdyb3VwOiBGb3JtR3JvdXAgPSBmaWVsZENvbnRyb2xzLmF0KGluZGV4KS5nZXQoJ3ZhbHVlJykgYXMgRm9ybUdyb3VwO1xuICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlRmllbGRWYWx1ZShwYXJlbnRGb3JtR3JvdXAsIHN1YkNhc2VGaWVsZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRGVsZXRlIHRoZSBmaWVsZCB2YWx1ZVxuICAgICAgdGhpcy5kZWxldGVGaWVsZFZhbHVlKGZvcm0uZ2V0KCdkYXRhJykgYXMgRm9ybUdyb3VwLCBmaWVsZCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZXNldFBhZ2UoZm9ybTogRm9ybUdyb3VwLCB3aXphcmRQYWdlOiBXaXphcmRQYWdlKTogdm9pZCB7XG4gICAgd2l6YXJkUGFnZS53aXphcmRfcGFnZV9maWVsZHMuZm9yRWFjaCh3cGYgPT4ge1xuICAgICAgY29uc3QgY2FzZUZpZWxkID0gdGhpcy5maW5kQ2FzZUZpZWxkQnlXaXphcmRQYWdlRmllbGRJZCh3aXphcmRQYWdlLCB3cGYpO1xuICAgICAgdGhpcy5yZXNldEZpZWxkKGZvcm0sIGNhc2VGaWVsZCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldFR5cGUoZWxlbTogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGVsZW0pLnNsaWNlKDgsIC0xKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNPYmplY3QoZWxlbTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHlwZShlbGVtKSA9PT0gJ09iamVjdCc7XG4gIH1cblxuICAvLyBUT0RPOiBjYWxsIGlzUmVhZE9ubHkgb24gQ2FzZUZpZWxkcyBvbmNlIHdlIG1ha2UgaXQgYXZhaWxhYmxlXG4gIHByaXZhdGUgaXNSZWFkb25seShjYXNlRmllbGQ6IENhc2VGaWVsZCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBjYXNlRmllbGQuZGlzcGxheV9jb250ZXh0LnRvVXBwZXJDYXNlKCkgPT09ICdSRUFET05MWSc7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlcyBhIGZpZWxkIHZhbHVlIGJ5IHNldHRpbmcgdGhlIHZhbHVlIG9mIHRoZSBjb3JyZXNwb25kaW5nIHtAbGluayBGb3JtQ29udHJvbH0gdG8gbnVsbCAob3IgYW4gZW1wdHkgYXJyYXlcbiAgICogaWYgdGhlIGZpZWxkIHR5cGUgaXMgYENvbGxlY3Rpb25gKSwgZXhjZXB0IHdoZW4gdGhlIGZpZWxkIHR5cGUgaXMgYENvbXBsZXhgIG9yIGBEb2N1bWVudGAuIEZvciBgQ29tcGxleGAgZmllbGRcbiAgICogdHlwZXMsIHRoaXMgcmVjdXJzaXZlIG1ldGhvZCBpcyBjYWxsZWQgdW50aWwgc2ltcGxlIG9yIFwiYmFzZVwiIGZpZWxkIHR5cGVzIGFyZSByZWFjaGVkLiBGb3IgYERvY3VtZW50YCBmaWVsZFxuICAgKiB0eXBlcywgaXRzIF9zdWItZmllbGRfIGBGb3JtQ29udHJvbGAgdmFsdWVzIGFyZSBzZXQgdG8gbnVsbC5cbiAgICpcbiAgICogQHBhcmFtIGZvcm1Hcm91cCBUaGUgYEZvcm1Hcm91cGAgaW5zdGFuY2UgY29udGFpbmluZyB0aGUgYEZvcm1Db250cm9sYCBmb3IgdGhlIHNwZWNpZmllZCBmaWVsZFxuICAgKiBAcGFyYW0gZmllbGQgVGhlIGBDYXNlRmllbGRgIHdob3NlIHZhbHVlIGlzIHRvIGJlIGRlbGV0ZWQgaW4gdGhlIGJhY2tlbmRcbiAgICogQHBhcmFtIHBhcmVudEZpZWxkIFJlZmVyZW5jZSB0byB0aGUgcGFyZW50IGBDYXNlRmllbGRgLiBVc2VkIGZvciBjaGVja2luZyBzcGVjaWZpY2FsbHkgd2hlcmUgYSBDb21wbGV4IGZpZWxkIGFuZFxuICAgKiBpdHMgc3ViLWZpZWxkcyBoYXZlIGByZXRhaW5faGlkZGVuX3ZhbHVlYCBzZXQgdG8gYHRydWVgLCBidXQgdGhlIGZpZWxkJ3MgcGFyZW50IGhhcyBpdCBzZXQgdG8gYGZhbHNlYCBvciB1bmRlZmluZWRcbiAgICovXG4gIHB1YmxpYyBkZWxldGVGaWVsZFZhbHVlKGZvcm1Hcm91cDogRm9ybUdyb3VwLCBmaWVsZDogQ2FzZUZpZWxkLCBwYXJlbnRGaWVsZD86IENhc2VGaWVsZCk6IHZvaWQge1xuICAgIGNvbnN0IGZpZWxkVHlwZTogRmllbGRUeXBlRW51bSA9IGZpZWxkLmZpZWxkX3R5cGUudHlwZTtcbiAgICBjb25zdCBmaWVsZENvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KGZpZWxkLmlkKTtcblxuICAgIGlmIChmaWVsZENvbnRyb2wpIHtcbiAgICAgIHN3aXRjaCAoZmllbGRUeXBlKSB7XG4gICAgICAgIGNhc2UgJ0NvbXBsZXgnOlxuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIElmIHRoZSBmaWVsZCBpcyBhIENvbXBsZXggdHlwZSwgbG9vcCBvdmVyIGl0cyBzdWItZmllbGRzIGFuZCBjYWxsIGRlbGV0ZUZpZWxkVmFsdWUoKSBmb3I6XG4gICAgICAgICAgICpcbiAgICAgICAgICAgKiAqIEFueSBzdWItZmllbGRzIHdoZXJlIHJldGFpbl9oaWRkZW5fdmFsdWUgaXMgZmFsc2UvdW5kZWZpbmVkLCBpZiB0aGUgcGFyZW50IGZpZWxkIGhhc1xuICAgICAgICAgICAqIHJldGFpbl9oaWRkZW5fdmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAqICogQUxMIHN1Yi1maWVsZHMgaWYgdGhlIHBhcmVudCBmaWVsZCBoYXMgcmV0YWluX2hpZGRlbl92YWx1ZSA9IHRydWUgQlVUIGl0cyBfb3duXyBwYXJlbnQgaGFzXG4gICAgICAgICAgICogcmV0YWluX2hpZGRlbl92YWx1ZSA9IGZhbHNlL3VuZGVmaW5lZCAodGh1cyBvdmVycmlkaW5nIGFueXRoaW5nIGVsc2UpO1xuICAgICAgICAgICAqICogQUxMIHN1Yi1maWVsZHMgaWYgdGhlIHBhcmVudCBmaWVsZCBoYXMgcmV0YWluX2hpZGRlbl92YWx1ZSA9IGZhbHNlL3VuZGVmaW5lZDtcbiAgICAgICAgICAgKiAqIEFueSBDb21wbGV4IHN1Yi1maWVsZHMgKnJlZ2FyZGxlc3Mgb2YgdGhlaXIgcmV0YWluX2hpZGRlbl92YWx1ZSogKGluIG9yZGVyIHRvIGluc3BlY3QgdGhlIHN1Yi1maWVsZHNcbiAgICAgICAgICAgKiBvZiBhIENvbXBsZXggdHlwZSB3aXRoaW4gYW5vdGhlciBDb21wbGV4IHR5cGUpXG4gICAgICAgICAgICovXG4gICAgICAgICAgaWYgKGZpZWxkLmZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjb21wbGV4U3ViRmllbGQgb2YgZmllbGQuZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcykge1xuICAgICAgICAgICAgICBpZiAoKGNvbXBsZXhTdWJGaWVsZC5maWVsZF90eXBlLnR5cGUgPT09ICdDb21wbGV4JyAmJiBjb21wbGV4U3ViRmllbGQuZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcy5sZW5ndGggPiAwKSB8fFxuICAgICAgICAgICAgICAgIChjb21wbGV4U3ViRmllbGQuZmllbGRfdHlwZS50eXBlICE9PSAnQ29tcGxleCcgJiZcbiAgICAgICAgICAgICAgICAgIChmaWVsZC5yZXRhaW5faGlkZGVuX3ZhbHVlXG4gICAgICAgICAgICAgICAgICAgID8gIWNvbXBsZXhTdWJGaWVsZC5yZXRhaW5faGlkZGVuX3ZhbHVlIHx8IChwYXJlbnRGaWVsZCAmJiAhcGFyZW50RmllbGQucmV0YWluX2hpZGRlbl92YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgOiB0cnVlKSkpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGUgZmllbGRDb250cm9sIGlzIGNhc3QgdG8gYSBGb3JtR3JvdXAgYmVjYXVzZSBhIENvbXBsZXggZmllbGQgdHlwZSB1c2VzIHRoaXMgYXMgaXRzIHVuZGVybHlpbmdcbiAgICAgICAgICAgICAgICAvLyBpbXBsZW1lbnRhdGlvblxuICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlRmllbGRWYWx1ZShmaWVsZENvbnRyb2wgYXMgRm9ybUdyb3VwLCBjb21wbGV4U3ViRmllbGQsIGZpZWxkKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnQ29sbGVjdGlvbic6XG4gICAgICAgICAgLy8gSWYgaXQgaXMgYSBjb2xsZWN0aW9uIG9mIENvbXBsZXggdHlwZXMsIGxvb3AgdGhyb3VnaCBlYWNoIG9uZTsgZWxzZSBmYWxsIHRocm91Z2ggdG8gYmUgaGFuZGxlZCBhcyBhXG4gICAgICAgICAgLy8gY29sbGVjdGlvbiBvZiBzaW1wbGUgdHlwZXMgKGluIHRoZSBzYW1lIHdheSBhcyBNdWx0aVNlbGVjdExpc3QpLCB1bmxlc3MgaXQncyBhIGNvbGxlY3Rpb24gb2YgRG9jdW1lbnRcbiAgICAgICAgICAvLyB0eXBlcywgd2hpY2ggcmVxdWlyZXMgZGlmZmVyZW50IGhhbmRsaW5nXG4gICAgICAgICAgY29uc3QgY29sbGVjdGlvbkZpZWxkVHlwZSA9IGZpZWxkLmZpZWxkX3R5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlO1xuICAgICAgICAgIGlmIChjb2xsZWN0aW9uRmllbGRUeXBlLnR5cGUgPT09ICdDb21wbGV4JyAmJiBjb2xsZWN0aW9uRmllbGRUeXBlLmNvbXBsZXhfZmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vIEdldCB0aGUgYXJyYXkgb2YgQ29tcGxleCBmaWVsZCB2YWx1ZXNcbiAgICAgICAgICAgIGNvbnN0IGNvbXBsZXhGaWVsZFZhbHVlcyA9IGZpZWxkQ29udHJvbC52YWx1ZSBhcyBhbnlbXTtcblxuICAgICAgICAgICAgLy8gRm9yIGVhY2ggQ29tcGxleCBmaWVsZCB2YWx1ZSwgZ2V0IHRoZSBJRCBvZiBlYWNoIHN1Yi1maWVsZCB3aXRoaW4gaXQgYW5kIHVzZSBhcyBhIGtleSB0byBmaW5kIHRoZVxuICAgICAgICAgICAgLy8gY29ycmVzcG9uZGluZyBzdWItQ2FzZUZpZWxkICh3aGljaCBjb250YWlucyB0aGUgZmllbGQgdHlwZSBpbmZvcm1hdGlvbilcbiAgICAgICAgICAgIGlmIChjb21wbGV4RmllbGRWYWx1ZXMpIHtcbiAgICAgICAgICAgICAgY29tcGxleEZpZWxkVmFsdWVzLmZvckVhY2goKGZpZWxkVmFsdWUsIGluZGV4KSA9PiBPYmplY3Qua2V5cyhmaWVsZFZhbHVlLnZhbHVlKS5mb3JFYWNoKHN1YkZpZWxkSWQgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEZpbmQgdGhlIHN1Yi1DYXNlRmllbGQgY29ycmVzcG9uZGluZyB0byB0aGUgc3ViLWZpZWxkIElEXG4gICAgICAgICAgICAgICAgbGV0IHN1YkNhc2VGaWVsZDogQ2FzZUZpZWxkO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY2FzZUZpZWxkIG9mIGNvbGxlY3Rpb25GaWVsZFR5cGUuY29tcGxleF9maWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChjYXNlRmllbGQuaWQgPT09IHN1YkZpZWxkSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3ViQ2FzZUZpZWxkID0gY2FzZUZpZWxkO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBkZWxldGUgdGhlIHN1Yi1maWVsZCB2YWx1ZSwgcGFzc2luZyBpbiB0aGUgcGFyZW50IEZvcm1Hcm91cFxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudEZvcm1Hcm91cDogRm9ybUdyb3VwID0gKGZpZWxkQ29udHJvbCBhcyBGb3JtQXJyYXkpLmF0KGluZGV4KS5nZXQoJ3ZhbHVlJykgYXMgRm9ybUdyb3VwO1xuICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlRmllbGRWYWx1ZShwYXJlbnRGb3JtR3JvdXAsIHN1YkNhc2VGaWVsZCk7XG4gICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY29sbGVjdGlvbkZpZWxkVHlwZS50eXBlID09PSAnRG9jdW1lbnQnKSB7XG4gICAgICAgICAgICAvLyBHZXQgdGhlIGFycmF5IG9mIERvY3VtZW50IGZpZWxkIHZhbHVlc1xuICAgICAgICAgICAgY29uc3QgZG9jdW1lbnRGaWVsZFZhbHVlcyA9IGZpZWxkQ29udHJvbC52YWx1ZSBhcyBhbnlbXTtcblxuICAgICAgICAgICAgLy8gRm9yIGVhY2ggRG9jdW1lbnQgZmllbGQgdmFsdWUsIHNldCBhbGwgaXRzIHByb3BlcnR5IHZhbHVlcyB0byBudWxsICh0aGlzIGlzIG5vdCBhY2NlcHRlZCBieSB0aGVcbiAgICAgICAgICAgIC8vIGJhY2stZW5kIGJ1dCB3aWxsIGJlIGhhbmRsZWQgYnkgc2FuaXRpc2VPYmplY3QoKSBpbiBGb3JtVmFsdWVTZXJ2aWNlIGJlZm9yZSBzZW5kaW5nIC0gc2VlIGJlbG93IGZvclxuICAgICAgICAgICAgLy8gdGhlIHNpbmdsZSBEb2N1bWVudCBjYXNlKVxuICAgICAgICAgICAgaWYgKGRvY3VtZW50RmllbGRWYWx1ZXMpIHtcbiAgICAgICAgICAgICAgZG9jdW1lbnRGaWVsZFZhbHVlcy5mb3JFYWNoKChmaWVsZFZhbHVlLCBpbmRleCkgPT4gT2JqZWN0LmtleXMoZmllbGRWYWx1ZS52YWx1ZSkuZm9yRWFjaChzdWJGaWVsZElkID0+IHtcbiAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIEZvcm1Hcm91cCBjb250YWluaW5nIHRoZSBGb3JtQ29udHJvbCBmb3IgdGhlIHN1Yi1maWVsZCBhbmQgc2V0IGl0cyB2YWx1ZSB0byBudWxsXG4gICAgICAgICAgICAgICAgKGZpZWxkQ29udHJvbCBhcyBGb3JtQXJyYXkpLmF0KGluZGV4KS5nZXQoYHZhbHVlLiR7c3ViRmllbGRJZH1gKS5zZXRWYWx1ZShudWxsKTtcbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAvLyBPbWl0dGVkIFwiYnJlYWtcIiBpcyBpbnRlbnRpb25hbCBiZWNhdXNlIGEgY29sbGVjdGlvbiBzaG91bGQgYmUgaGFuZGxlZCBhcyBwZXIgTXVsdGlTZWxlY3RMaXN0IGlmIGl0IGlzXG4gICAgICAgIC8vIG5vdCBhIGNvbGxlY3Rpb24gb2YgQ29tcGxleCB0eXBlc1xuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXN3aXRjaC1jYXNlLWZhbGwtdGhyb3VnaFxuICAgICAgICBjYXNlICdNdWx0aVNlbGVjdExpc3QnOlxuICAgICAgICAgIC8vIEZpZWxkIGNvbnRyb2wgc2hvdWxkIGJlIGEgRm9ybUFycmF5LCBzbyBtYXAgZWFjaCBvZiBpdHMgdmFsdWVzIHRvIG51bGxcbiAgICAgICAgICAvLyBOT1RFOiBUaGUgRm9ybUFycmF5IGNhbm5vdCBqdXN0IGJlIHNldCB0byBhbiBlbXB0eSBhcnJheSBiZWNhdXNlIEFuZ3VsYXIgY2hlY2tzIHRoYXQgYWxsIGV4aXN0aW5nIHZhbHVlc1xuICAgICAgICAgIC8vIG9mIGEgRm9ybUFycmF5IGFyZSBwcmVzZW50OyBzZXR0aW5nIHRoZSBjb250cm9sJ3MgdmFsdWUgdG8gYW4gZW1wdHkgYXJyYXkgY2F1c2VzIGEgcnVudGltZSBlcnJvclxuICAgICAgICAgIGlmIChmaWVsZENvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgICAgIC8vIE5lZWQgdG8gYWxsb3cgZm9yIGZpZWxkIHZhbHVlcyB0aGF0IGFyZSBvYmplY3RzLCBub3QganVzdCBwcmltaXRpdmVzXG4gICAgICAgICAgICBmaWVsZENvbnRyb2wuc2V0VmFsdWUodGhpcy5tYXBBcnJheVZhbHVlc1RvTnVsbChmaWVsZENvbnRyb2wudmFsdWUpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0RvY3VtZW50JzpcbiAgICAgICAgICAvLyBOT1RFOiBUaGUgZmllbGQgY29udHJvbCAoYSBGb3JtR3JvdXAgaW4gdGhpcyBjYXNlKSBjYW5ub3QganVzdCBiZSBzZXQgdG8gbnVsbCBiZWNhdXNlIEFuZ3VsYXIgY2hlY2tzIHRoYXRcbiAgICAgICAgICAvLyBhbGwgZXhpc3RpbmcgdmFsdWVzIG9mIGEgRm9ybUdyb3VwIGFyZSBwcmVzZW50OyBzZXR0aW5nIHRoZSBjb250cm9sJ3MgdmFsdWUgdG8gbnVsbCBjYXVzZXMgYSBydW50aW1lIGVycm9yXG4gICAgICAgICAgY29uc3QgZG9jdW1lbnRGaWVsZFZhbHVlID0gZmllbGRDb250cm9sLnZhbHVlO1xuICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGRvY3VtZW50RmllbGRWYWx1ZSkge1xuICAgICAgICAgICAgaWYgKGZpZWxkQ29udHJvbC5nZXQoa2V5KSkge1xuICAgICAgICAgICAgICAvLyBUaGUgYmFjay1lbmQgZG9lc24ndCBhY2NlcHQgbnVsbCBhcyBhIHZhbGlkIHZhbHVlIGZvciBhbnkgb2YgdGhlIERvY3VtZW50IGZpZWxkIHR5cGUgcHJvcGVydGllcyBidXRcbiAgICAgICAgICAgICAgLy8gdGhpcyBpcyBoYW5kbGVkIGJ5IHNhbml0aXNlT2JqZWN0KCkgaW4gRm9ybVZhbHVlU2VydmljZSwgcmV0dXJuaW5nIGEgbnVsbCBvYmplY3QgZm9yIHRoZSBlbnRpcmVcbiAgICAgICAgICAgICAgLy8gRG9jdW1lbnQgZmllbGQsIGlmIGFueSBvZiBpdHMgcHJvcGVydGllcyBpcyBudWxsIC0gd2hpY2ggaXMgYWNjZXB0ZWQgYnkgdGhlIGJhY2stZW5kXG4gICAgICAgICAgICAgIGZpZWxkQ29udHJvbC5nZXQoa2V5KS5zZXRWYWx1ZShudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIC8vIE5vdGU6IHRoZSBkZWZhdWx0IGNhc2UgYXBwbGllcyB0byBEeW5hbWljTGlzdCBmaWVsZHMsIHRvb1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGZpZWxkQ29udHJvbC5zZXRWYWx1ZShudWxsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTWFwcyBhbGwgdmFsdWVzIG9mIGFuIGFycmF5IHRvIGBudWxsYCwgcmV0YWluaW5nIGtleXMgZm9yIGFueSB2YWx1ZXMgdGhhdCBhcmUgb2JqZWN0cy4gRm9yIGV4YW1wbGUsXG4gICAqIGBbeyBpZDogJzAnLCB2YWx1ZTogJ1Rlc3QnIH0sICdUZXN0J11gIHdvdWxkIGJlY29tZSBgW3sgaWQ6IG51bGwsIHZhbHVlOiBudWxsIH0sIG51bGxdYC5cbiAgICogQHBhcmFtIGFycmF5IFRoZSBhcnJheSBvZiB2YWx1ZXMgdG8gbWFwXG4gICAqIEByZXR1cm5zIEEgbmV3IGFycmF5IHdpdGggdGhlIG1hcHBlZCB2YWx1ZXNcbiAgICovXG4gIHB1YmxpYyBtYXBBcnJheVZhbHVlc1RvTnVsbChhcnJheTogYW55W10pOiBhbnlbXSB7XG4gICAgcmV0dXJuIGFycmF5Lm1hcChlbGVtZW50ID0+IHtcbiAgICAgIHJldHVybiB0eXBlb2YgZWxlbWVudCA9PT0gJ29iamVjdCdcbiAgICAgICAgPyBPYmplY3QuYXNzaWduKHt9LCAuLi5PYmplY3Qua2V5cyhlbGVtZW50KS5tYXAoayA9PiAoeyBba106IG51bGwgfSkpKVxuICAgICAgICA6IG51bGw7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
303
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGRzLnB1cmdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvc2VydmljZXMvZmllbGRzL2ZpZWxkcy5wdXJnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU0zQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUVBQWlFLENBQUM7QUFJaEcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFFN0MsV0FBVztBQUVYLE1BQU0sT0FBTyxZQUFZO0lBRXZCLFlBQTZCLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO0lBQUksQ0FBQztJQUVuRCxpQkFBaUIsQ0FBQyxJQUFlLEVBQUUsTUFBYyxFQUFFLFlBQThCLEVBQUUsYUFBcUI7UUFDN0csSUFBSSxDQUFDLHFDQUFxQyxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3RGLElBQUksQ0FBQyxvQ0FBb0MsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFTyxvQ0FBb0MsQ0FBQyxJQUFlLEVBQUUsTUFBYyxFQUFFLFlBQThCO1FBQzFHLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEYsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDeEIsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsRUFBRSxFQUFFLGlCQUFpQixDQUFDLEVBQUU7Z0JBQ3BELE1BQU0sU0FBUyxHQUFHLElBQUksYUFBYSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FB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QUksQ0FBQyxDQUFDO2FBQy9CO1NBQ0Y7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxvQkFBb0IsQ0FBQyxLQUFZO1FBQ3RDLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzdCLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDekIsSUFBSSxPQUFPLEtBQUssU0FBUyxJQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7b0JBQzdDLE9BQU8sT0FBTyxPQUFPLEtBQUssUUFBUTt3QkFDaEMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ3RFLENBQUMsQ0FBQyxJQUFJLENBQUM7aUJBQ1Y7cUJBQU07b0JBQ0wsT0FBTyxFQUFFLENBQUM7aUJBQ1g7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO2FBQU07WUFDTCxPQUFPLEtBQUssQ0FBQTtTQUNiO0lBQ0gsQ0FBQzs7d0VBdFRVLFlBQVk7a0VBQVosWUFBWSxXQUFaLFlBQVk7dUZBQVosWUFBWTtjQUR4QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBXaXphcmRQYWdlRmllbGQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2Nhc2UtZWRpdG9yL2RvbWFpbi93aXphcmQtcGFnZS1maWVsZC5tb2RlbCc7XG5pbXBvcnQgeyBXaXphcmRQYWdlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jYXNlLWVkaXRvci9kb21haW4vd2l6YXJkLXBhZ2UubW9kZWwnO1xuaW1wb3J0IHsgV2l6YXJkIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jYXNlLWVkaXRvci9kb21haW4vd2l6YXJkLm1vZGVsJztcbmltcG9ydCB7IFNob3dDb25kaXRpb24gfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2NvbmRpdGlvbmFsLXNob3cvZG9tYWluL2NvbmRpdGlvbmFsLXNob3cubW9kZWwnO1xuaW1wb3J0IHsgQ2FzZUV2ZW50VHJpZ2dlciB9IGZyb20gJy4uLy4uL2RvbWFpbi9jYXNlLXZpZXcvY2FzZS1ldmVudC10cmlnZ2VyLm1vZGVsJztcbmltcG9ydCB7IENhc2VGaWVsZCB9IGZyb20gJy4uLy4uL2RvbWFpbi9kZWZpbml0aW9uL2Nhc2UtZmllbGQubW9kZWwnO1xuaW1wb3J0IHsgRmllbGRUeXBlRW51bSB9IGZyb20gJy4uLy4uL2RvbWFpbi9kZWZpbml0aW9uL2ZpZWxkLXR5cGUtZW51bS5tb2RlbCc7XG5pbXBvcnQgeyBGaWVsZHNVdGlscyB9IGZyb20gJy4vZmllbGRzLnV0aWxzJztcblxuLy8gQGR5bmFtaWNcbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBGaWVsZHNQdXJnZXIge1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZmllbGRzVXRpbHM6IEZpZWxkc1V0aWxzKSB7IH1cblxuICBwdWJsaWMgY2xlYXJIaWRkZW5GaWVsZHMoZm9ybTogRm9ybUdyb3VwLCB3aXphcmQ6IFdpemFyZCwgZXZlbnRUcmlnZ2VyOiBDYXNlRXZlbnRUcmlnZ2VyLCBjdXJyZW50UGFnZUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFySGlkZGVuRmllbGRGb3JGaWVsZFNob3dDb25kaXRpb24oY3VycmVudFBhZ2VJZCwgZm9ybSwgd2l6YXJkLCBldmVudFRyaWdnZXIpO1xuICAgIHRoaXMuY2xlYXJIaWRkZW5GaWVsZEZvclBhZ2VTaG93Q29uZGl0aW9uKGZvcm0sIHdpemFyZCwgZXZlbnRUcmlnZ2VyKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJIaWRkZW5GaWVsZEZvclBhZ2VTaG93Q29uZGl0aW9uKGZvcm06IEZvcm1Hcm91cCwgd2l6YXJkOiBXaXphcmQsIGV2ZW50VHJpZ2dlcjogQ2FzZUV2ZW50VHJpZ2dlcik6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRFdmVudFN0YXRlID0gdGhpcy5maWVsZHNVdGlscy5nZXRDdXJyZW50RXZlbnRTdGF0ZShldmVudFRyaWdnZXIsIGZvcm0pO1xuICAgIHdpemFyZC5wYWdlcy5mb3JFYWNoKHdwID0+IHtcbiAgICAgIGlmICh0aGlzLmhhc1Nob3dDb25kaXRpb25QYWdlKHdwLCBjdXJyZW50RXZlbnRTdGF0ZSkpIHtcbiAgICAgICAgY29uc3QgY29uZGl0aW9uID0gbmV3IFNob3dDb25kaXRpb24od3Auc2hvd19jb25kaXRpb24pO1xuICAgICAgICBpZiAodGhpcy5pc0hpZGRlbihjb25kaXRpb24sIGN1cnJlbnRFdmVudFN0YXRlKSkge1xuICAgICAgICAgIHRoaXMucmVzZXRQYWdlKGZvcm0sIHdwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckhpZGRlbkZpZWxkRm9yRmllbGRTaG93Q29uZGl0aW9uKGN1cnJlbnRQYWdlSWQ6IHN0cmluZyxcbiAgICBmb3JtOiBGb3JtR3JvdXAsXG4gICAgd2l6YXJkOiBXaXphcmQsXG4gICAgZXZlbnRUcmlnZ2VyOiBDYXNlRXZlbnRUcmlnZ2VyKTogdm9pZCB7XG4gICAgY29uc3QgZm9ybUZpZWxkcyA9IGZvcm0uZ2V0UmF3VmFsdWUoKTtcbiAgICBjb25zdCBjdXJyZW50UGFnZTogV2l6YXJkUGFnZSA9IHdpemFyZC5nZXRQYWdlKGN1cnJlbnRQYWdlSWQsIHRoaXMuZmllbGRzVXRpbHMuYnVpbGRDYW5TaG93UHJlZGljYXRlKGV2ZW50VHJpZ2dlciwgZm9ybSkpO1xuICAgIGN1cnJlbnRQYWdlLndpemFyZF9wYWdlX2ZpZWxkcy5mb3JFYWNoKHdwZiA9PiB7XG4gICAgICBjb25zdCBjYXNlRmllbGQgPSB0aGlzLmZpbmRDYXNlRmllbGRCeVdpemFyZFBhZ2VGaWVsZElkKGN1cnJlbnRQYWdlLCB3cGYpO1xuICAgICAgaWYgKHRoaXMuaGFzU2hvd0NvbmRpdGlvbkZpZWxkKGNhc2VGaWVsZCwgZm9ybUZpZWxkcykpIHtcbiAgICAgICAgY29uc3QgY29uZGl0aW9uID0gbmV3IFNob3dDb25kaXRpb24oY2FzZUZpZWxkLnNob3dfY29uZGl0aW9uKTtcbiAgICAgICAgaWYgKHRoaXMuaXNIaWRkZW4oY29uZGl0aW9uLCBmb3JtRmllbGRzLmRhdGEpICYmICEodGhpcy5pc1JlYWRvbmx5KGNhc2VGaWVsZCkpKSB7XG4gICAgICAgICAgdGhpcy5yZXNldEZpZWxkKGZvcm0sIGNhc2VGaWVsZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMucmV0YWluSGlkZGVuVmFsdWVCeUZpZWxkVHlwZShjYXNlRmllbGQsIGZvcm0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZXRhaW5IaWRkZW5WYWx1ZUJ5RmllbGRUeXBlKGZpZWxkOiBDYXNlRmllbGQsIGZvcm06IGFueSk6IHZvaWQge1xuICAgIC8vIHNvIGZhciBvbmx5IGFwcGxpZXMgdG8gdGhlIG5ldyBmaWVsZCB0eXBlIE9yZ2FuaXNhdGlvblBvbGljeSB3aGljaCBuZWVkcyB0byByZXRhaW4gdGhlIGRlZmF1bHQgY2FzZSByb2xlIHZhbHVlXG4gICAgLy8gZm9yIG90aGVyIGNhc2UgZmllbGRzIHRoZXJlIHNob3VsZCBiZSBubyBzaWRlIGVmZmVjdHNcbiAgICBpZiAoZmllbGQgJiYgZmllbGQuZmllbGRfdHlwZSAmJiBmaWVsZC5maWVsZF90eXBlLmlkID09PSAnT3JnYW5pc2F0aW9uUG9saWN5Jykge1xuICAgICAgLy8gPGJ1YmJsZV93cmFwPlxuICAgICAgLy8gRG9pbmcgc29tZSBudWxsIGNoZWNraW5nIHRvIHN0b3AgaXQgZnJvbSBmYWxsaW5nIG92ZXIuXG4gICAgICBjb25zdCBkYXRhOiBGb3JtR3JvdXAgPSBmb3JtLmdldCgnZGF0YScpIGFzIEZvcm1Hcm91cDtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkR3JvdXA6IEZvcm1Hcm91cCA9IGRhdGEuY29udHJvbHNbZmllbGQuaWRdIGFzIEZvcm1Hcm91cDtcbiAgICAgICAgaWYgKGZpZWxkR3JvdXApIHtcbiAgICAgICAgICBjb25zdCBjYXNlUm9sZUZvcm1Db250cm9sOiBGb3JtQ29udHJvbCA9IGZpZWxkR3JvdXAuZ2V0KCdPcmdQb2xpY3lDYXNlQXNzaWduZWRSb2xlJykgYXMgRm9ybUNvbnRyb2w7XG4gICAgICAgICAgaWYgKGNhc2VSb2xlRm9ybUNvbnRyb2wpIHtcbiAgICAgICAgICAgIGNhc2VSb2xlRm9ybUNvbnRyb2wuZW5hYmxlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyA8L2J1YmJsZV93cmFwPlxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNIaWRkZW4oY29uZGl0aW9uOiBTaG93Q29uZGl0aW9uLCBmb3JtRmllbGRzOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIWNvbmRpdGlvbi5tYXRjaChmb3JtRmllbGRzKTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZENhc2VGaWVsZEJ5V2l6YXJkUGFnZUZpZWxkSWQoY3VycmVudFBhZ2U6IFdpemFyZFBhZ2UsIHdpemFyZFBhZ2VGaWVsZDogV2l6YXJkUGFnZUZpZWxkKTogQ2FzZUZpZWxkIHtcbiAgICByZXR1cm4gY3VycmVudFBhZ2UuY2FzZV9maWVsZHMuZmluZChjZiA9PiBjZi5pZCA9PT0gd2l6YXJkUGFnZUZpZWxkLmNhc2VfZmllbGRfaWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNTaG93Q29uZGl0aW9uUGFnZSh3aXphcmRQYWdlOiBXaXphcmRQYWdlLCBmb3JtRmllbGRzOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gd2l6YXJkUGFnZS5zaG93X2NvbmRpdGlvbiAmJiBmb3JtRmllbGRzW3RoaXMuZ2V0U2hvd0NvbmRpdGlvbktleSh3aXphcmRQYWdlLnNob3dfY29uZGl0aW9uKV07XG4gIH1cblxuICBwcml2YXRlIGhhc1Nob3dDb25kaXRpb25GaWVsZChjYXNlRmllbGQ6IENhc2VGaWVsZCwgZm9ybUZpZWxkczogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNhc2VGaWVsZC5zaG93X2NvbmRpdGlvbiAmJiBmb3JtRmllbGRzLmRhdGFbdGhpcy5nZXRTaG93Q29uZGl0aW9uS2V5KGNhc2VGaWVsZC5zaG93X2NvbmRpdGlvbildO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTaG93Q29uZGl0aW9uS2V5KHNob3dDb25kaXRpb246IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gTmVlZCB0byBhbGxvdyBmb3IgbmVnYXRlZCBjb25kaXRpb25zLCBpLmUuICE9LCBhcyB3ZWxsIGFzIHJlZ3VsYXIgb25lcyAoPSlcbiAgICAvLyBBbHNvIG5lZWQgdG8gYWxsb3cgZm9yIGNvbmRpdGlvbnMgc3BlY2lmaWVkIHVzaW5nIHRoZSBcIkNPTlRBSU5TXCIga2V5d29yZFxuICAgIHJldHVybiBzaG93Q29uZGl0aW9uLnNwbGl0KC8hPXw9fENPTlRBSU5TLylbMF07XG4gIH1cblxuICBwcml2YXRlIHJlc2V0RmllbGQoZm9ybTogRm9ybUdyb3VwLCBmaWVsZDogQ2FzZUZpZWxkKTogdm9pZCB7XG4gICAgLyoqXG4gICAgICogSWYgdGhlIGhpZGRlbiBmaWVsZCdzIHZhbHVlIGlzIHRvIGJlIHJldGFpbmVkLCBkbyBub3RoaW5nIChleGNlcHQgaWYgaXQgaXMgYSBDb21wbGV4IHR5cGUgb3IgY29sbGVjdGlvbiBvZlxuICAgICAqIENvbXBsZXggdHlwZXMpLiBUaGlzIGlzIGEgY2hhbmdlIHRvIHRoZSBwcmV2aW91cyBiZWhhdmlvdXIgKHdoaWNoIHVzZWQgdG8gY2xlYXIgdGhlIGZpZWxkIHZhbHVlIGJ1dCByZW1vdmUgaXRcbiAgICAgKiBmcm9tIHN1Ym1pc3Npb24gYXMgYW4gdXBkYXRlIHRvIHRoZSBiYWNrLWVuZCkuIFRoZSBuZXcgYmVoYXZpb3VyIGlzIHRvIGxlYXZlIHRoZSBmaWVsZCBhcyBpcywgc28gaWYgdGhlIGZpZWxkXG4gICAgICogaXMgaGlkZGVuIGJ1dCB0aGVuIHVuLWhpZGRlbiBiZWZvcmUgZm9ybSBzdWJtaXNzaW9uLCBhbnkgcHJldmlvdXNseSBlbnRlcmVkIHZhbHVlIGlzIHJldGFpbmVkLlxuICAgICAqXG4gICAgICogRm9yIENvbXBsZXggZmllbGQgdHlwZXMsIGFuIGFkZGl0aW9uYWwgY2hlY2sgb2Ygc3ViLWZpZWxkcyBpcyByZXF1aXJlZC4gVGhlIHNhbWUgYXBwbGllcyB0byBhIGNvbGxlY3Rpb24gb2ZcbiAgICAgKiBDb21wbGV4IHR5cGVzLlxuICAgICAqL1xuICAgIGlmIChmaWVsZC5yZXRhaW5faGlkZGVuX3ZhbHVlKSB7XG4gICAgICBjb25zdCBmaWVsZFR5cGU6IEZpZWxkVHlwZUVudW0gPSBmaWVsZC5maWVsZF90eXBlLnR5cGU7XG4gICAgICAvLyBJZiB0aGUgZmllbGQgaXMgYSBDb21wbGV4IHR5cGUsIGxvb3Agb3ZlciBpdHMgc3ViLWZpZWxkcyBhbmQgY2FsbCBkZWxldGVGaWVsZFZhbHVlKCkgZm9yIGFueSBzdWItZmllbGRzXG4gICAgICAvLyB3aGVyZSByZXRhaW5faGlkZGVuX3ZhbHVlIGlzIGZhbHNlLCBPUiBmb3IgYW55IENvbXBsZXggc3ViLWZpZWxkcyAqcmVnYXJkbGVzcyBvZiB0aGVpciByZXRhaW5faGlkZGVuX3ZhbHVlKlxuICAgICAgLy8gKGluIG9yZGVyIHRvIGluc3BlY3QgdGhlIHN1Yi1maWVsZHMgb2YgYSBDb21wbGV4IHR5cGUgd2l0aGluIGFub3RoZXIgQ29tcGxleCB0eXBlKVxuICAgICAgaWYgKGZpZWxkVHlwZSA9PT0gJ0NvbXBsZXgnICYmIGZpZWxkLmZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgICBmb3IgKGNvbnN0IGNvbXBsZXhTdWJGaWVsZCBvZiBmaWVsZC5maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzKSB7XG4gICAgICAgICAgaWYgKChjb21wbGV4U3ViRmllbGQuZmllbGRfdHlwZS50eXBlID09PSAnQ29tcGxleCcgJiYgY29tcGxleFN1YkZpZWxkLmZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMubGVuZ3RoID4gMCkgfHxcbiAgICAgICAgICAgICFjb21wbGV4U3ViRmllbGQucmV0YWluX2hpZGRlbl92YWx1ZSkge1xuICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIHRoZSBleGlzdGVuY2Ugb2YgdGhlIHBhcmVudCBGb3JtR3JvdXAgY29ycmVzcG9uZGluZyB0byB0aGUgQ29tcGxleCBmaWVsZDsgaWYgaXQgZXhpc3RzLCBjYWxsXG4gICAgICAgICAgICAvLyBkZWxldGVGaWVsZFZhbHVlKCkgdG8gZGVsZXRlIHRoZSBzdWItZmllbGRcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudEZvcm1Hcm91cCA9IChmb3JtLmdldCgnZGF0YScpIGFzIEZvcm1Hcm91cCkuY29udHJvbHNbZmllbGQuaWRdIGFzIEZvcm1Hcm91cDtcbiAgICAgICAgICAgIGlmIChwYXJlbnRGb3JtR3JvdXApIHtcbiAgICAgICAgICAgICAgdGhpcy5kZWxldGVGaWVsZFZhbHVlKHBhcmVudEZvcm1Hcm91cCwgY29tcGxleFN1YkZpZWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZmllbGRUeXBlID09PSAnQ29sbGVjdGlvbicgJiYgZmllbGQuZmllbGRfdHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUudHlwZSA9PT0gJ0NvbXBsZXgnICYmXG4gICAgICAgIGZpZWxkLmZpZWxkX3R5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gSWYgdGhlIGZpZWxkIGlzIGEgY29sbGVjdGlvbiBvZiBDb21wbGV4IHR5cGVzLCBsb29wIHRocm91Z2ggZWFjaCBvbmUgYW5kIGNhbGwgZGVsZXRlRmllbGRWYWx1ZSgpIGZvciBhbnlcbiAgICAgICAgLy8gc3ViLWZpZWxkcyB3aGVyZSByZXRhaW5faGlkZGVuX3ZhbHVlIGlzIGZhbHNlLCBPUiBmb3IgYW55IENvbXBsZXggc3ViLWZpZWxkcyAqcmVnYXJkbGVzcyBvZiB0aGVpclxuICAgICAgICAvLyByZXRhaW5faGlkZGVuX3ZhbHVlKiAoaW4gb3JkZXIgdG8gaW5zcGVjdCB0aGUgc3ViLWZpZWxkcyBvZiBhIENvbXBsZXggdHlwZSB3aXRoaW4gYW5vdGhlciBDb21wbGV4IHR5cGUpXG5cbiAgICAgICAgLy8gR2V0IHRoZSBhcnJheSBvZiBmaWVsZCBjb250cm9scyBjb3JyZXNwb25kaW5nIHRvIHRoZSBDb21wbGV4IGZpZWxkIHZhbHVlc1xuICAgICAgICBjb25zdCBmaWVsZENvbnRyb2xzID0gKGZvcm0uZ2V0KCdkYXRhJykgYXMgRm9ybUdyb3VwKS5jb250cm9sc1tmaWVsZC5pZF0gYXMgRm9ybUFycmF5O1xuXG4gICAgICAgIGlmIChmaWVsZENvbnRyb2xzKSB7XG4gICAgICAgICAgLy8gR2V0IHRoZSBhcnJheSBvZiBDb21wbGV4IGZpZWxkIHZhbHVlc1xuICAgICAgICAgIGNvbnN0IGNvbXBsZXhGaWVsZFZhbHVlcyA9IGZpZWxkQ29udHJvbHMudmFsdWUgYXMgYW55W107XG5cbiAgICAgICAgICAvLyBGb3IgZWFjaCBDb21wbGV4IGZpZWxkIHZhbHVlLCBnZXQgdGhlIElEIG9mIGVhY2ggc3ViLWZpZWxkIHdpdGhpbiBpdCBhbmQgdXNlIGFzIGEga2V5IHRvIGZpbmQgdGhlXG4gICAgICAgICAgLy8gY29ycmVzcG9uZGluZyBzdWItQ2FzZUZpZWxkICh3aGljaCBjb250YWlucyB0aGUgZmllbGQgdHlwZSBpbmZvcm1hdGlvbilcbiAgICAgICAgICBpZiAoY29tcGxleEZpZWxkVmFsdWVzKSB7XG4gICAgICAgICAgICBjb21wbGV4RmllbGRWYWx1ZXMuZm9yRWFjaCgoZmllbGRWYWx1ZSwgaW5kZXgpID0+IE9iamVjdC5rZXlzKGZpZWxkVmFsdWUudmFsdWUpLmZvckVhY2goc3ViRmllbGRJZCA9PiB7XG4gICAgICAgICAgICAgIC8vIEZpbmQgdGhlIHN1Yi1DYXNlRmllbGQgY29ycmVzcG9uZGluZyB0byB0aGUgc3ViLWZpZWxkIElEXG4gICAgICAgICAgICAgIGxldCBzdWJDYXNlRmllbGQ6IENhc2VGaWVsZDtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBjYXNlRmllbGQgb2YgZmllbGQuZmllbGRfdHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FzZUZpZWxkLmlkID09PSBzdWJGaWVsZElkKSB7XG4gICAgICAgICAgICAgICAgICBzdWJDYXNlRmllbGQgPSBjYXNlRmllbGQ7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBkZWxldGUgdGhlIHN1Yi1maWVsZCB2YWx1ZSBpZiByZXRhaW5faGlkZGVuX3ZhbHVlIGlzIGZhbHNlLCBPUiBpZiB0aGUgc3ViLWZpZWxkIHR5cGUgaXNcbiAgICAgICAgICAgICAgLy8gQ29tcGxleCBhbmQgcmVnYXJkbGVzcyBvZiByZXRhaW5faGlkZGVuX3ZhbHVlLCBwYXNzaW5nIGluIHRoZSBwYXJlbnQgRm9ybUdyb3VwXG4gICAgICAgICAgICAgIGlmIChzdWJDYXNlRmllbGQgJiZcbiAgICAgICAgICAgICAgICAoKHN1YkNhc2VGaWVsZC5maWVsZF90eXBlLnR5cGUgPT09ICdDb21wbGV4JyAmJiBzdWJDYXNlRmllbGQuZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcy5sZW5ndGggPiAwKSB8fFxuICAgICAgICAgICAgICAgICAgIXN1YkNhc2VGaWVsZC5yZXRhaW5faGlkZGVuX3ZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudEZvcm1Hcm91cDogRm9ybUdyb3VwID0gZmllbGRDb250cm9scy5hdChpbmRleCkuZ2V0KCd2YWx1ZScpIGFzIEZvcm1Hcm91cDtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZUZpZWxkVmFsdWUocGFyZW50Rm9ybUdyb3VwLCBzdWJDYXNlRmllbGQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERlbGV0ZSB0aGUgZmllbGQgdmFsdWVcbiAgICAgIHRoaXMuZGVsZXRlRmllbGRWYWx1ZShmb3JtLmdldCgnZGF0YScpIGFzIEZvcm1Hcm91cCwgZmllbGQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRQYWdlKGZvcm06IEZvcm1Hcm91cCwgd2l6YXJkUGFnZTogV2l6YXJkUGFnZSk6IHZvaWQge1xuICAgIHdpemFyZFBhZ2Uud2l6YXJkX3BhZ2VfZmllbGRzLmZvckVhY2god3BmID0+IHtcbiAgICAgIGNvbnN0IGNhc2VGaWVsZCA9IHRoaXMuZmluZENhc2VGaWVsZEJ5V2l6YXJkUGFnZUZpZWxkSWQod2l6YXJkUGFnZSwgd3BmKTtcbiAgICAgIHRoaXMucmVzZXRGaWVsZChmb3JtLCBjYXNlRmllbGQpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUeXBlKGVsZW06IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlbGVtKS5zbGljZSg4LCAtMSk7XG4gIH1cblxuICBwcml2YXRlIGlzT2JqZWN0KGVsZW06IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFR5cGUoZWxlbSkgPT09ICdPYmplY3QnO1xuICB9XG5cbiAgLy8gVE9ETzogY2FsbCBpc1JlYWRPbmx5IG9uIENhc2VGaWVsZHMgb25jZSB3ZSBtYWtlIGl0IGF2YWlsYWJsZVxuICBwcml2YXRlIGlzUmVhZG9ubHkoY2FzZUZpZWxkOiBDYXNlRmllbGQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gY2FzZUZpZWxkLmRpc3BsYXlfY29udGV4dC50b1VwcGVyQ2FzZSgpID09PSAnUkVBRE9OTFknO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYSBmaWVsZCB2YWx1ZSBieSBzZXR0aW5nIHRoZSB2YWx1ZSBvZiB0aGUgY29ycmVzcG9uZGluZyB7QGxpbmsgRm9ybUNvbnRyb2x9IHRvIG51bGwgKG9yIGFuIGVtcHR5IGFycmF5XG4gICAqIGlmIHRoZSBmaWVsZCB0eXBlIGlzIGBDb2xsZWN0aW9uYCksIGV4Y2VwdCB3aGVuIHRoZSBmaWVsZCB0eXBlIGlzIGBDb21wbGV4YCBvciBgRG9jdW1lbnRgLiBGb3IgYENvbXBsZXhgIGZpZWxkXG4gICAqIHR5cGVzLCB0aGlzIHJlY3Vyc2l2ZSBtZXRob2QgaXMgY2FsbGVkIHVudGlsIHNpbXBsZSBvciBcImJhc2VcIiBmaWVsZCB0eXBlcyBhcmUgcmVhY2hlZC4gRm9yIGBEb2N1bWVudGAgZmllbGRcbiAgICogdHlwZXMsIGl0cyBfc3ViLWZpZWxkXyBgRm9ybUNvbnRyb2xgIHZhbHVlcyBhcmUgc2V0IHRvIG51bGwuXG4gICAqXG4gICAqIEBwYXJhbSBmb3JtR3JvdXAgVGhlIGBGb3JtR3JvdXBgIGluc3RhbmNlIGNvbnRhaW5pbmcgdGhlIGBGb3JtQ29udHJvbGAgZm9yIHRoZSBzcGVjaWZpZWQgZmllbGRcbiAgICogQHBhcmFtIGZpZWxkIFRoZSBgQ2FzZUZpZWxkYCB3aG9zZSB2YWx1ZSBpcyB0byBiZSBkZWxldGVkIGluIHRoZSBiYWNrZW5kXG4gICAqIEBwYXJhbSBwYXJlbnRGaWVsZCBSZWZlcmVuY2UgdG8gdGhlIHBhcmVudCBgQ2FzZUZpZWxkYC4gVXNlZCBmb3IgY2hlY2tpbmcgc3BlY2lmaWNhbGx5IHdoZXJlIGEgQ29tcGxleCBmaWVsZCBhbmRcbiAgICogaXRzIHN1Yi1maWVsZHMgaGF2ZSBgcmV0YWluX2hpZGRlbl92YWx1ZWAgc2V0IHRvIGB0cnVlYCwgYnV0IHRoZSBmaWVsZCdzIHBhcmVudCBoYXMgaXQgc2V0IHRvIGBmYWxzZWAgb3IgdW5kZWZpbmVkXG4gICAqL1xuICBwdWJsaWMgZGVsZXRlRmllbGRWYWx1ZShmb3JtR3JvdXA6IEZvcm1Hcm91cCwgZmllbGQ6IENhc2VGaWVsZCwgcGFyZW50RmllbGQ/OiBDYXNlRmllbGQpOiB2b2lkIHtcbiAgICBjb25zdCBmaWVsZFR5cGU6IEZpZWxkVHlwZUVudW0gPSBmaWVsZC5maWVsZF90eXBlLnR5cGU7XG4gICAgY29uc3QgZmllbGRDb250cm9sID0gZm9ybUdyb3VwLmdldChmaWVsZC5pZCk7XG5cbiAgICBpZiAoZmllbGRDb250cm9sKSB7XG4gICAgICBzd2l0Y2ggKGZpZWxkVHlwZSkge1xuICAgICAgICBjYXNlICdDb21wbGV4JzpcbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBJZiB0aGUgZmllbGQgaXMgYSBDb21wbGV4IHR5cGUsIGxvb3Agb3ZlciBpdHMgc3ViLWZpZWxkcyBhbmQgY2FsbCBkZWxldGVGaWVsZFZhbHVlKCkgZm9yOlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogKiBBbnkgc3ViLWZpZWxkcyB3aGVyZSByZXRhaW5faGlkZGVuX3ZhbHVlIGlzIGZhbHNlL3VuZGVmaW5lZCwgaWYgdGhlIHBhcmVudCBmaWVsZCBoYXNcbiAgICAgICAgICAgKiByZXRhaW5faGlkZGVuX3ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgKiAqIEFMTCBzdWItZmllbGRzIGlmIHRoZSBwYXJlbnQgZmllbGQgaGFzIHJldGFpbl9oaWRkZW5fdmFsdWUgPSB0cnVlIEJVVCBpdHMgX293bl8gcGFyZW50IGhhc1xuICAgICAgICAgICAqIHJldGFpbl9oaWRkZW5fdmFsdWUgPSBmYWxzZS91bmRlZmluZWQgKHRodXMgb3ZlcnJpZGluZyBhbnl0aGluZyBlbHNlKTtcbiAgICAgICAgICAgKiAqIEFMTCBzdWItZmllbGRzIGlmIHRoZSBwYXJlbnQgZmllbGQgaGFzIHJldGFpbl9oaWRkZW5fdmFsdWUgPSBmYWxzZS91bmRlZmluZWQ7XG4gICAgICAgICAgICogKiBBbnkgQ29tcGxleCBzdWItZmllbGRzICpyZWdhcmRsZXNzIG9mIHRoZWlyIHJldGFpbl9oaWRkZW5fdmFsdWUqIChpbiBvcmRlciB0byBpbnNwZWN0IHRoZSBzdWItZmllbGRzXG4gICAgICAgICAgICogb2YgYSBDb21wbGV4IHR5cGUgd2l0aGluIGFub3RoZXIgQ29tcGxleCB0eXBlKVxuICAgICAgICAgICAqL1xuICAgICAgICAgIGlmIChmaWVsZC5maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29tcGxleFN1YkZpZWxkIG9mIGZpZWxkLmZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMpIHtcbiAgICAgICAgICAgICAgaWYgKChjb21wbGV4U3ViRmllbGQuZmllbGRfdHlwZS50eXBlID09PSAnQ29tcGxleCcgJiYgY29tcGxleFN1YkZpZWxkLmZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMubGVuZ3RoID4gMCkgfHxcbiAgICAgICAgICAgICAgICAoY29tcGxleFN1YkZpZWxkLmZpZWxkX3R5cGUudHlwZSAhPT0gJ0NvbXBsZXgnICYmXG4gICAgICAgICAgICAgICAgICAoZmllbGQucmV0YWluX2hpZGRlbl92YWx1ZVxuICAgICAgICAgICAgICAgICAgICA/ICFjb21wbGV4U3ViRmllbGQucmV0YWluX2hpZGRlbl92YWx1ZSB8fCAocGFyZW50RmllbGQgJiYgIXBhcmVudEZpZWxkLnJldGFpbl9oaWRkZW5fdmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIDogdHJ1ZSkpKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIGZpZWxkQ29udHJvbCBpcyBjYXN0IHRvIGEgRm9ybUdyb3VwIGJlY2F1c2UgYSBDb21wbGV4IGZpZWxkIHR5cGUgdXNlcyB0aGlzIGFzIGl0cyB1bmRlcmx5aW5nXG4gICAgICAgICAgICAgICAgLy8gaW1wbGVtZW50YXRpb25cbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZUZpZWxkVmFsdWUoZmllbGRDb250cm9sIGFzIEZvcm1Hcm91cCwgY29tcGxleFN1YkZpZWxkLCBmaWVsZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0NvbGxlY3Rpb24nOlxuICAgICAgICAgIC8vIElmIGl0IGlzIGEgY29sbGVjdGlvbiBvZiBDb21wbGV4IHR5cGVzLCBsb29wIHRocm91Z2ggZWFjaCBvbmU7IGVsc2UgZmFsbCB0aHJvdWdoIHRvIGJlIGhhbmRsZWQgYXMgYVxuICAgICAgICAgIC8vIGNvbGxlY3Rpb24gb2Ygc2ltcGxlIHR5cGVzIChpbiB0aGUgc2FtZSB3YXkgYXMgTXVsdGlTZWxlY3RMaXN0KSwgdW5sZXNzIGl0J3MgYSBjb2xsZWN0aW9uIG9mIERvY3VtZW50XG4gICAgICAgICAgLy8gdHlwZXMsIHdoaWNoIHJlcXVpcmVzIGRpZmZlcmVudCBoYW5kbGluZ1xuICAgICAgICAgIGNvbnN0IGNvbGxlY3Rpb25GaWVsZFR5cGUgPSBmaWVsZC5maWVsZF90eXBlLmNvbGxlY3Rpb25fZmllbGRfdHlwZTtcbiAgICAgICAgICBpZiAoY29sbGVjdGlvbkZpZWxkVHlwZS50eXBlID09PSAnQ29tcGxleCcgJiYgY29sbGVjdGlvbkZpZWxkVHlwZS5jb21wbGV4X2ZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvLyBHZXQgdGhlIGFycmF5IG9mIENvbXBsZXggZmllbGQgdmFsdWVzXG4gICAgICAgICAgICBjb25zdCBjb21wbGV4RmllbGRWYWx1ZXMgPSBmaWVsZENvbnRyb2wudmFsdWUgYXMgYW55W107XG5cbiAgICAgICAgICAgIC8vIEZvciBlYWNoIENvbXBsZXggZmllbGQgdmFsdWUsIGdldCB0aGUgSUQgb2YgZWFjaCBzdWItZmllbGQgd2l0aGluIGl0IGFuZCB1c2UgYXMgYSBrZXkgdG8gZmluZCB0aGVcbiAgICAgICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgc3ViLUNhc2VGaWVsZCAod2hpY2ggY29udGFpbnMgdGhlIGZpZWxkIHR5cGUgaW5mb3JtYXRpb24pXG4gICAgICAgICAgICBpZiAoY29tcGxleEZpZWxkVmFsdWVzKSB7XG4gICAgICAgICAgICAgIGNvbXBsZXhGaWVsZFZhbHVlcy5mb3JFYWNoKChmaWVsZFZhbHVlLCBpbmRleCkgPT4gT2JqZWN0LmtleXMoZmllbGRWYWx1ZS52YWx1ZSkuZm9yRWFjaChzdWJGaWVsZElkID0+IHtcbiAgICAgICAgICAgICAgICAvLyBGaW5kIHRoZSBzdWItQ2FzZUZpZWxkIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHN1Yi1maWVsZCBJRFxuICAgICAgICAgICAgICAgIGxldCBzdWJDYXNlRmllbGQ6IENhc2VGaWVsZDtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNhc2VGaWVsZCBvZiBjb2xsZWN0aW9uRmllbGRUeXBlLmNvbXBsZXhfZmllbGRzKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoY2FzZUZpZWxkLmlkID09PSBzdWJGaWVsZElkKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YkNhc2VGaWVsZCA9IGNhc2VGaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgZGVsZXRlIHRoZSBzdWItZmllbGQgdmFsdWUsIHBhc3NpbmcgaW4gdGhlIHBhcmVudCBGb3JtR3JvdXBcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRGb3JtR3JvdXA6IEZvcm1Hcm91cCA9IChmaWVsZENvbnRyb2wgYXMgRm9ybUFycmF5KS5hdChpbmRleCkuZ2V0KCd2YWx1ZScpIGFzIEZvcm1Hcm91cDtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZUZpZWxkVmFsdWUocGFyZW50Rm9ybUdyb3VwLCBzdWJDYXNlRmllbGQpO1xuICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGVsc2UgaWYgKGNvbGxlY3Rpb25GaWVsZFR5cGUudHlwZSA9PT0gJ0RvY3VtZW50Jykge1xuICAgICAgICAgICAgLy8gR2V0IHRoZSBhcnJheSBvZiBEb2N1bWVudCBmaWVsZCB2YWx1ZXNcbiAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50RmllbGRWYWx1ZXMgPSBmaWVsZENvbnRyb2wudmFsdWUgYXMgYW55W107XG5cbiAgICAgICAgICAgIC8vIEZvciBlYWNoIERvY3VtZW50IGZpZWxkIHZhbHVlLCBzZXQgYWxsIGl0cyBwcm9wZXJ0eSB2YWx1ZXMgdG8gbnVsbCAodGhpcyBpcyBub3QgYWNjZXB0ZWQgYnkgdGhlXG4gICAgICAgICAgICAvLyBiYWNrLWVuZCBidXQgd2lsbCBiZSBoYW5kbGVkIGJ5IHNhbml0aXNlT2JqZWN0KCkgaW4gRm9ybVZhbHVlU2VydmljZSBiZWZvcmUgc2VuZGluZyAtIHNlZSBiZWxvdyBmb3JcbiAgICAgICAgICAgIC8vIHRoZSBzaW5nbGUgRG9jdW1lbnQgY2FzZSlcbiAgICAgICAgICAgIGlmIChkb2N1bWVudEZpZWxkVmFsdWVzKSB7XG4gICAgICAgICAgICAgIGRvY3VtZW50RmllbGRWYWx1ZXMuZm9yRWFjaCgoZmllbGRWYWx1ZSwgaW5kZXgpID0+IE9iamVjdC5rZXlzKGZpZWxkVmFsdWUudmFsdWUpLmZvckVhY2goc3ViRmllbGRJZCA9PiB7XG4gICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBGb3JtR3JvdXAgY29udGFpbmluZyB0aGUgRm9ybUNvbnRyb2wgZm9yIHRoZSBzdWItZmllbGQgYW5kIHNldCBpdHMgdmFsdWUgdG8gbnVsbFxuICAgICAgICAgICAgICAgIChmaWVsZENvbnRyb2wgYXMgRm9ybUFycmF5KS5hdChpbmRleCkuZ2V0KGB2YWx1ZS4ke3N1YkZpZWxkSWR9YCkuc2V0VmFsdWUobnVsbCk7XG4gICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgLy8gT21pdHRlZCBcImJyZWFrXCIgaXMgaW50ZW50aW9uYWwgYmVjYXVzZSBhIGNvbGxlY3Rpb24gc2hvdWxkIGJlIGhhbmRsZWQgYXMgcGVyIE11bHRpU2VsZWN0TGlzdCBpZiBpdCBpc1xuICAgICAgICAvLyBub3QgYSBjb2xsZWN0aW9uIG9mIENvbXBsZXggdHlwZXNcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1zd2l0Y2gtY2FzZS1mYWxsLXRocm91Z2hcbiAgICAgICAgY2FzZSAnTXVsdGlTZWxlY3RMaXN0JzpcbiAgICAgICAgICAvLyBGaWVsZCBjb250cm9sIHNob3VsZCBiZSBhIEZvcm1BcnJheSwgc28gbWFwIGVhY2ggb2YgaXRzIHZhbHVlcyB0byBudWxsXG4gICAgICAgICAgLy8gTk9URTogVGhlIEZvcm1BcnJheSBjYW5ub3QganVzdCBiZSBzZXQgdG8gYW4gZW1wdHkgYXJyYXkgYmVjYXVzZSBBbmd1bGFyIGNoZWNrcyB0aGF0IGFsbCBleGlzdGluZyB2YWx1ZXNcbiAgICAgICAgICAvLyBvZiBhIEZvcm1BcnJheSBhcmUgcHJlc2VudDsgc2V0dGluZyB0aGUgY29udHJvbCdzIHZhbHVlIHRvIGFuIGVtcHR5IGFycmF5IGNhdXNlcyBhIHJ1bnRpbWUgZXJyb3JcbiAgICAgICAgICBpZiAoZmllbGRDb250cm9sLnZhbHVlKSB7XG4gICAgICAgICAgICAvLyBOZWVkIHRvIGFsbG93IGZvciBmaWVsZCB2YWx1ZXMgdGhhdCBhcmUgb2JqZWN0cywgbm90IGp1c3QgcHJpbWl0aXZlc1xuICAgICAgICAgICAgZmllbGRDb250cm9sLnNldFZhbHVlKHRoaXMubWFwQXJyYXlWYWx1ZXNUb051bGwoZmllbGRDb250cm9sLnZhbHVlKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdEb2N1bWVudCc6XG4gICAgICAgICAgLy8gTk9URTogVGhlIGZpZWxkIGNvbnRyb2wgKGEgRm9ybUdyb3VwIGluIHRoaXMgY2FzZSkgY2Fubm90IGp1c3QgYmUgc2V0IHRvIG51bGwgYmVjYXVzZSBBbmd1bGFyIGNoZWNrcyB0aGF0XG4gICAgICAgICAgLy8gYWxsIGV4aXN0aW5nIHZhbHVlcyBvZiBhIEZvcm1Hcm91cCBhcmUgcHJlc2VudDsgc2V0dGluZyB0aGUgY29udHJvbCdzIHZhbHVlIHRvIG51bGwgY2F1c2VzIGEgcnVudGltZSBlcnJvclxuICAgICAgICAgIGNvbnN0IGRvY3VtZW50RmllbGRWYWx1ZSA9IGZpZWxkQ29udHJvbC52YWx1ZTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBkb2N1bWVudEZpZWxkVmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChmaWVsZENvbnRyb2wuZ2V0KGtleSkpIHtcbiAgICAgICAgICAgICAgLy8gVGhlIGJhY2stZW5kIGRvZXNuJ3QgYWNjZXB0IG51bGwgYXMgYSB2YWxpZCB2YWx1ZSBmb3IgYW55IG9mIHRoZSBEb2N1bWVudCBmaWVsZCB0eXBlIHByb3BlcnRpZXMgYnV0XG4gICAgICAgICAgICAgIC8vIHRoaXMgaXMgaGFuZGxlZCBieSBzYW5pdGlzZU9iamVjdCgpIGluIEZvcm1WYWx1ZVNlcnZpY2UsIHJldHVybmluZyBhIG51bGwgb2JqZWN0IGZvciB0aGUgZW50aXJlXG4gICAgICAgICAgICAgIC8vIERvY3VtZW50IGZpZWxkLCBpZiBhbnkgb2YgaXRzIHByb3BlcnRpZXMgaXMgbnVsbCAtIHdoaWNoIGlzIGFjY2VwdGVkIGJ5IHRoZSBiYWNrLWVuZFxuICAgICAgICAgICAgICBmaWVsZENvbnRyb2wuZ2V0KGtleSkuc2V0VmFsdWUobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAvLyBOb3RlOiB0aGUgZGVmYXVsdCBjYXNlIGFwcGxpZXMgdG8gRHluYW1pY0xpc3QgZmllbGRzLCB0b29cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBmaWVsZENvbnRyb2wuc2V0VmFsdWUobnVsbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1hcHMgYWxsIHZhbHVlcyBvZiBhbiBhcnJheSB0byBgbnVsbGAsIHJldGFpbmluZyBrZXlzIGZvciBhbnkgdmFsdWVzIHRoYXQgYXJlIG9iamVjdHMuIEZvciBleGFtcGxlLFxuICAgKiBgW3sgaWQ6ICcwJywgdmFsdWU6ICdUZXN0JyB9LCAnVGVzdCddYCB3b3VsZCBiZWNvbWUgYFt7IGlkOiBudWxsLCB2YWx1ZTogbnVsbCB9LCBudWxsXWAuXG4gICAqIEBwYXJhbSBhcnJheSBUaGUgYXJyYXkgb2YgdmFsdWVzIHRvIG1hcFxuICAgKiBAcmV0dXJucyBBIG5ldyBhcnJheSB3aXRoIHRoZSBtYXBwZWQgdmFsdWVzXG4gICAqL1xuICBwdWJsaWMgbWFwQXJyYXlWYWx1ZXNUb051bGwoYXJyYXk6IGFueVtdKTogYW55W10ge1xuICAgIGlmIChhcnJheSAmJiBhcnJheS5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gYXJyYXkubWFwKGVsZW1lbnQgPT4ge1xuICAgICAgICBpZiAoZWxlbWVudCAhPT0gdW5kZWZpbmVkICYmIGVsZW1lbnQgIT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gdHlwZW9mIGVsZW1lbnQgPT09ICdvYmplY3QnXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24oe30sIC4uLk9iamVjdC5rZXlzKGVsZW1lbnQpLm1hcChrID0+ICh7IFtrXTogbnVsbCB9KSkpXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGFycmF5XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -377,7 +377,7 @@ export class FormValueService {
|
|
|
377
377
|
* @param clearEmpty Whether or not we should clear out empty, optional, complex objects.
|
|
378
378
|
* @param clearNonCase Whether or not we should clear out non-case fields at the top level.
|
|
379
379
|
*/
|
|
380
|
-
removeUnnecessaryFields(data, caseFields, clearEmpty = false, clearNonCase = false, fromPreviousPage = false, currentPageCaseFields = []) {
|
|
380
|
+
removeUnnecessaryFields(data, caseFields, clearEmpty = false, clearNonCase = false, fromPreviousPage = false, currentPageCaseFields = [], isCalledFromSubmit = false) {
|
|
381
381
|
if (data && caseFields && caseFields.length > 0) {
|
|
382
382
|
// check if there is any data at the top level of the form that's not in the caseFields
|
|
383
383
|
if (clearNonCase) {
|
|
@@ -388,10 +388,13 @@ export class FormValueService {
|
|
|
388
388
|
// Retain anything that is readonly and not a label.
|
|
389
389
|
continue;
|
|
390
390
|
}
|
|
391
|
-
if (field.hidden === true && field.display_context !== 'HIDDEN' && field.display_context !== 'HIDDEN_TEMP' && field.id !== 'caseLinks'
|
|
391
|
+
if (field.hidden === true && field.display_context !== 'HIDDEN' && field.display_context !== 'HIDDEN_TEMP' && field.id !== 'caseLinks') {
|
|
392
392
|
// Delete anything that is hidden (that is NOT readonly), and that
|
|
393
393
|
// hasn't had its display_context overridden to make it hidden.
|
|
394
|
-
|
|
394
|
+
// in event submission check for field's retain_hidden_value defore deletion
|
|
395
|
+
if ((isCalledFromSubmit && !field.retain_hidden_value) || !isCalledFromSubmit) {
|
|
396
|
+
delete data[field.id];
|
|
397
|
+
}
|
|
395
398
|
}
|
|
396
399
|
else if (field.field_type) {
|
|
397
400
|
switch (field.field_type.type) {
|
|
@@ -405,7 +408,7 @@ export class FormValueService {
|
|
|
405
408
|
}
|
|
406
409
|
break;
|
|
407
410
|
case 'Complex':
|
|
408
|
-
this.removeUnnecessaryFields(data[field.id], field.field_type.complex_fields, clearEmpty);
|
|
411
|
+
this.removeUnnecessaryFields(data[field.id], field.field_type.complex_fields, clearEmpty, false, false, [], isCalledFromSubmit);
|
|
409
412
|
// Also remove any optional complex objects that are completely empty.
|
|
410
413
|
// EUI-4244: Ritesh's fix, passing true instead of clearEmpty.
|
|
411
414
|
if (FormValueService.clearOptionalEmpty(true, data[field.id], field)) {
|
|
@@ -428,8 +431,8 @@ export class FormValueService {
|
|
|
428
431
|
if (field.field_type.collection_field_type.type === 'Complex') {
|
|
429
432
|
// Iterate through the elements and remove any unnecessary fields within.
|
|
430
433
|
for (const item of collection) {
|
|
431
|
-
this.removeUnnecessaryFields(item, field.field_type.collection_field_type.complex_fields, clearEmpty);
|
|
432
|
-
this.removeUnnecessaryFields(item.value, field.field_type.collection_field_type.complex_fields, false);
|
|
434
|
+
this.removeUnnecessaryFields(item, field.field_type.collection_field_type.complex_fields, clearEmpty, false, false, [], isCalledFromSubmit);
|
|
435
|
+
this.removeUnnecessaryFields(item.value, field.field_type.collection_field_type.complex_fields, false, false, false, [], isCalledFromSubmit);
|
|
433
436
|
}
|
|
434
437
|
}
|
|
435
438
|
}
|
|
@@ -545,4 +548,4 @@ FormValueService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: FormVal
|
|
|
545
548
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FormValueService, [{
|
|
546
549
|
type: Injectable
|
|
547
550
|
}], function () { return [{ type: i1.FieldTypeSanitiser }]; }, null); })();
|
|
548
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS12YWx1ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9zZXJ2aWNlcy9mb3JtL2Zvcm0tdmFsdWUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDeEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7OztBQUc1RCxNQUFNLE9BQU8sZ0JBQWdCO0lBOEwzQixZQUE2QixrQkFBc0M7UUFBdEMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtJQUNuRSxDQUFDO0lBOUxEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FtR0c7SUFDSSxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUTtRQUNsRCxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDekMsSUFBSSxXQUFXLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDL0MsT0FBTyxJQUFJLENBQUMsY0FBYyxHQUFHLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDbkU7YUFBTSxJQUFJLFdBQVcsQ0FBQyx5QkFBeUIsQ0FBQyxXQUFXLENBQUMsRUFB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Q0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUU7NEJBQ3ZDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQzt5QkFDaEQ7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7aUJBQ0o7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksd0NBQXdDLENBQUMsSUFBWSxFQUFFLFVBQXVCO1FBQ25GLElBQUksSUFBSSxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMvQyxVQUFVLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsU0FBUyxFQUFFLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO2lCQUM3RixPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7Z0JBQ25CLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsSUFBSSxTQUFTLENBQUMsS0FBSyxFQUFFO29CQUN2RCxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7aUJBQ3RDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDTjtJQUNILENBQUM7O2dGQXRpQlUsZ0JBQWdCO3NFQUFoQixnQkFBZ0IsV0FBaEIsZ0JBQWdCO3VGQUFoQixnQkFBZ0I7Y0FENUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQ2FzZUZpZWxkLCBGaWVsZFR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vZG9tYWluJztcbmltcG9ydCB7IEZpZWxkc1V0aWxzIH0gZnJvbSAnLi4vZmllbGRzJztcbmltcG9ydCB7IEZpZWxkVHlwZVNhbml0aXNlciB9IGZyb20gJy4vZmllbGQtdHlwZS1zYW5pdGlzZXInO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRm9ybVZhbHVlU2VydmljZSB7XG4gIC8qKlxuICAgKiBHZXRzIHZhbHVlIG9mIGEgZmllbGQgYmFzZWQgb24gZmllbGRLZXkgd2hpY2ggaXMgYSBkb3Qgc2VwYXJhdGVkIHJlZmVyZW5jZSB0byB2YWx1ZSBhbmQgY29sbGVjdGlvbiBpbmRleC5cbiAgICogVGhlcmUgYXJlIHR3byBleGNlcHRpb25zOlxuICAgKiAxKSBJbiBjYXNlIG9mIGEgbXVsdGlzZWxlY3QgYmVpbmcgaWRlbnRpZmllZCBhcyBhIGxlYWYgYSAnLS0tTEFCRUwnIHN1ZmZpeCBpcyBhcHBlbmRlZCB0byB0aGUga2V5IGFuZCB2YWx1ZXMgb2YgdGhhdCBrZXkgYXJlIHJldHVybmVkXG4gICAqICAgICAgZm9ybT0geyAnbGlzdCc6IFsnY29kZTEnLCAnY29kZTInXSxcbiAgICogICAgICAgICAgICAgICdsaXN0LS0tTEFCRUwnOiBbJ2xhYmVsMScsICdsYWJlbDInXSB9LFxuICAgKiAgICAgIGZpZWxkS2V5PWxpc3QsXG4gICAqICAgICAgY29sSW5kZXg9MCxcbiAgICogICAgICB2YWx1ZT1sYWJlbDEsIGxhYmVsMlxuICAgKiAyKSBJbiBjYXNlIG9mIGEgY29sbGVjdGlvbiBvZiBzaW1wbGUgZmllbGRzIGlzIGlkZW50aWZpZWQgYXMgYSBsZWFmIGFsbCB2YWx1ZXMgYXJlIGpvaW5lZCBzZXBlcmF0ZWQgYnkgYSBjb21tYVxuICAgKiAgICAgIGZvcm09IHsgJ2NvbGxlY3Rpb24nOiBbeyAndmFsdWUnOiAndmFsdWUxJyB9LCB7ICd2YWx1ZSc6ICd2YWx1ZTInIH1dIH1cbiAgICogICAgICBmaWVsZEtleT1jb2xsZWN0aW9uXG4gICAqICAgICAgY29sSW5kZXg9MVxuICAgKiAgICAgIHZhbHVlPXZhbHVlMSwgdmFsdWUyXG4gICAqXG4gICAqIE90aGVyIGV4YW1wbGVzOlxuICAgKiAxKSBzaW1wbGUgZmllbGQgcmVmZXJlbmNlOiBmb3JtPXsgJ1BlcnNvbkZpcnN0TmFtZSc6ICdKb2huJyB9LCBmaWVsZEtleT1QZXJzb25GaXJzdE5hbWUsIHZhbHVlPUpvaG5cbiAgICogMikgY29tcGxleCBmaWVsZCByZWZlcmVuY2U6XG4gICAqICAgICAgZm9ybT0geyBjb21wbGV4MSc6IHsgJ3NpbXBsZTExJzogJ3ZhbHVlMTEnLCAnc2ltcGxlMTInOiAndmFsdWUxMicsICdjb21wbGV4Mic6IHsgJ3NpbXBsZTIxJzogJ3ZhbHVlMjEnIH0gfX0sXG4gICAqICAgICAgZmllbGRLZXk9Y29tcGxleDEuY29tcGxleDIuc2ltcGxlMjFcbiAgICogICAgICBjb2xJbmRleD0wLFxuICAgKiAgICAgIHZhbHVlPXZhbHVlMjFcbiAgICogMykgY29tcGxleCBmaWVsZCB3aXRoIGNvbGxlY3Rpb24gZmllbGQgd2l0aCBjb21wbGV4IGZpZWxkIHJlZmVyZW5jZTpcbiAgICogICAgICBmb3JtPSB7ICdjb21wbGV4MSc6IHtcbiAgICogICAgICAgICAgICAgICAnY29sbGVjdGlvbjEnOiBbXG4gICAqICAgICAgICAgICAgICAgeyAndmFsdWUnOiB7XG4gICAqICAgICAgICAgICAgICAgICAgICdjb21wbGV4Mic6IHtcbiAgICogICAgICAgICAgICAgICAgICAgICAnc2ltcGxlMSc6ICd2YWx1ZTEnLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICdjb21wbGV4Myc6IHtcbiAgICogICAgICAgICAgICAgICAgICAgICAgICdjb21wbGV4NCc6IHtcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgJ3NpbXBsZTInOiAndmFsdWUxMidcbiAgICogICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICogICAgICAgICAgICAgICAgICAgICB9XG4gICAqICAgICAgICAgICAgICAgICAgIH1cbiAgICogICAgICAgICAgICAgICAgIH1cbiAgICogICAgICAgICAgICAgICB9LFxuICAgKiAgICAgICAgICAgICAgIHsgJ3ZhbHVlJzoge1xuICAgKiAgICAgICAgICAgICAgICAgICAnY29tcGxleDInOiB7XG4gICAqICAgICAgICAgICAgICAgICAgICAgJ3NpbXBsZTEnOiAndmFsdWUyJyxcbiAgICogICAgICAgICAgICAgICAgICAgICAnY29tcGxleDMnOiB7XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAnY29tcGxleDQnOiB7XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICdzaW1wbGUyJzogJ3ZhbHVlMjEnXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAqICAgICAgICAgICAgICAgICAgICAgfVxuICAgKiAgICAgICAgICAgICAgICAgICB9XG4gICAqICAgICAgICAgICAgICAgICB9XG4gICAqICAgICAgICAgICAgICAgfSxcbiAgICogICAgICAgICAgICAgICB7ICd2YWx1ZSc6IHtcbiAgICogICAgICAgICAgICAgICAgICAgJ2NvbXBsZXgyJzoge1xuICAgKiAgICAgICAgICAgICAgICAgICAgICdzaW1wbGUxJzogJ3ZhbHVlMycsXG4gICAqICAgICAgICAgICAgICAgICAgICAgJ2NvbXBsZXgzJzoge1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgJ2NvbXBsZXg0Jzoge1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAnc2ltcGxlMic6ICd2YWx1ZTMxJ1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgKiAgICAgICAgICAgICAgICAgICAgIH1cbiAgICogICAgICAgICAgICAgICAgICAgfVxuICAgKiAgICAgICAgICAgICAgICAgfVxuICAgKiAgICAgICAgICAgICAgIH1cbiAgICogICAgICAgICAgICAgXX19XG4gICAqICAgICAgZmllbGRLZXk9Y29tcGxleDEuY29sbGVjdGlvbjEuY29tcGxleDIuY29tcGxleDMuY29tcGxleDQuc2ltcGxlMlxuICAgKiAgICAgIGNvbEluZGV4PTIsXG4gICAqICAgICAgdmFsdWU9dmFsdWUyMVxuICAgKiA0KSBjb2xsZWN0aW9uIG9mIGNvbXBsZXggdHlwZXNcbiAgICogICAgICBmb3JtPSB7ICdjb2xsZWN0aW9uMSc6IFtcbiAgICogICAgICAgICAgICAgICB7ICd2YWx1ZSc6IHsnY29tcGxleDEnOiB7XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2ltcGxlMSc6ICd2YWx1ZTExJyxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb21wbGV4Mic6IHtcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbXBsZXgzJzoge1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaW1wbGUyJzogJ3ZhbHVlMTInXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICogICAgICAgICAgICAgICB9LFxuICAgKiAgICAgICAgICAgICAgIHsgJ3ZhbHVlJzogeydjb21wbGV4MSc6IHtcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaW1wbGUxJzogJ3ZhbHVlMjEnLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbXBsZXgyJzoge1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29tcGxleDMnOiB7XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NpbXBsZTInOiAndmFsdWUyMidcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgKiAgICAgICAgICAgICAgIH0sXG4gICAqICAgICAgICAgICAgICAgeyAndmFsdWUnOiB7J2NvbXBsZXgxJzoge1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NpbXBsZTEnOiAndmFsdWUzMScsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29tcGxleDInOiB7XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb21wbGV4Myc6IHtcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2ltcGxlMic6ICd2YWx1ZTMyJ1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICogICAgICAgICAgICAgICB9XG4gICAqICAgICAgICAgICAgIF19XG4gICAqICAgICAgZmllbGRLZXk9Y29sbGVjdGlvbjEuY29tcGxleDEuY29tcGxleDIuY29tcGxleDMuc2ltcGxlMlxuICAgKiAgICAgIGNvbEluZGV4PTJcbiAgICogICAgICB2YWx1ZT12YWx1ZTMyXG4gICAqXG4gICAqIElmIGtleSBpcyBwb2ludGluZyBhdCBhIGNvbXBsZXggb3IgY29sbGVjdGlvbiBsZWFmIChub3Qgc2ltcGxlLCBjb2xsZWN0aW9uIG9mIHNpbXBsZSBvciBtdWx0aXNlbGVjdCB0eXBlcykgdGhlbiB1bmRlZmluZWQgaXMgcmV0dXJuZWQuXG4gICAqIEFsc28gbm8ga2V5IHJlZmVycmluZyBhIGxlYWYgdGhhdCBpcyBjb250YWluZWQgd2l0aGluIGNvbGxlY3Rpb24gd2lsbCBjb250YWluIGluZGV4IG51bWJlci4gVGhlIGluZGV4IGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0byB0aGVcbiAgICogbWV0aG9kLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXRGaWVsZFZhbHVlKGZvcm0sIGZpZWxkS2V5LCBjb2xJbmRleCkge1xuICAgIGNvbnN0IGZpZWxkSWRzID0gZmllbGRLZXkuc3BsaXQoJy4nKTtcbiAgICBjb25zdCBjdXJyZW50RmllbGRJZCA9IGZpZWxkSWRzWzBdO1xuICAgIGNvbnN0IGN1cnJlbnRGb3JtID0gZm9ybVtjdXJyZW50RmllbGRJZF07XG4gICAgaWYgKEZpZWxkc1V0aWxzLmlzTXVsdGlTZWxlY3RWYWx1ZShjdXJyZW50Rm9ybSkpIHtcbiAgICAgIHJldHVybiBmb3JtW2N1cnJlbnRGaWVsZElkICsgRmllbGRzVXRpbHMuTEFCRUxfU1VGRklYXS5qb2luKCcsICcpO1xuICAgIH0gZWxzZSBpZiAoRmllbGRzVXRpbHMuaXNDb2xsZWN0aW9uT2ZTaW1wbGVUeXBlcyhjdXJyZW50Rm9ybSkpIHtcbiAgICAgIHJldHVybiBjdXJyZW50Rm9ybS5tYXAoZmllbGRWYWx1ZSA9PiBmaWVsZFZhbHVlWyd2YWx1ZSddKS5qb2luKCcsICcpO1xuICAgIH0gZWxzZSBpZiAoRmllbGRzVXRpbHMuaXNDb2xsZWN0aW9uKGN1cnJlbnRGb3JtKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRWYWx1ZShjdXJyZW50Rm9ybVtjb2xJbmRleF1bJ3ZhbHVlJ10sIGZpZWxkSWRzLnNsaWNlKDEpLmpvaW4oJy4nKSwgY29sSW5kZXgpO1xuICAgIH0gZWxzZSBpZiAoRmllbGRzVXRpbHMuaXNOb25FbXB0eU9iamVjdChjdXJyZW50Rm9ybSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEZpZWxkVmFsdWUoY3VycmVudEZvcm0sIGZpZWxkSWRzLnNsaWNlKDEpLmpvaW4oJy4nKSwgY29sSW5kZXgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gY3VycmVudEZvcm07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEEgcmVjdXJzaXZlIG1ldGhvZCB0byByZW1vdmUgYW55dGhpbmcgd2l0aCBhIGAtLS1MQUJFTGAgc3VmZml4LlxuICAgKiBAcGFyYW0gZGF0YSBUaGUgZGF0YSB0byByZWN1cnNlIHRocm91Z2ggYW5kIHJlbW92ZSBNdWx0aVNlbGVjdCBsYWJlbHMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlbW92ZU11bHRpU2VsZWN0TGFiZWxzKGRhdGE6IGFueSk6IHZvaWQge1xuICAgIGlmIChkYXRhICYmIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGRhdGEpIHtcbiAgICAgICAgICBGb3JtVmFsdWVTZXJ2aWNlLnJlbW92ZU11bHRpU2VsZWN0TGFiZWxzKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBrZXlzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKGRhdGEpO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgICAgLy8gSGF2ZSB3ZSBmb3VuZCBvbmUgYSBNdWx0aVNlbGVjdCBsYWJlbD9cbiAgICAgICAgICBpZiAoa2V5LmluZGV4T2YoRmllbGRzVXRpbHMuTEFCRUxfU1VGRklYKSA+IDApIHtcbiAgICAgICAgICAgIC8vIElmIHNvLCByZW1vdmUgaXQuXG4gICAgICAgICAgICBkZWxldGUgZGF0YVtrZXldO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBGb3JtVmFsdWVTZXJ2aWNlLnJlbW92ZU11bHRpU2VsZWN0TGFiZWxzKGRhdGFba2V5XSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgaXNSZWFkT25seShmaWVsZDogQ2FzZUZpZWxkKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZpZWxkLmRpc3BsYXlfY29udGV4dCA/IGZpZWxkLmRpc3BsYXlfY29udGV4dC50b1VwcGVyQ2FzZSgpID09PSAnUkVBRE9OTFknIDogZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBpc09wdGlvbmFsKGZpZWxkOiBDYXNlRmllbGQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmllbGQuZGlzcGxheV9jb250ZXh0ID8gZmllbGQuZGlzcGxheV9jb250ZXh0LnRvVXBwZXJDYXNlKCkgPT09ICdPUFRJT05BTCcgOiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGlzTGFiZWwoZmllbGQ6IENhc2VGaWVsZCk6IGJvb2xlYW4ge1xuICAgIGlmIChmaWVsZC5maWVsZF90eXBlKSB7XG4gICAgICByZXR1cm4gZmllbGQuZmllbGRfdHlwZS50eXBlID09PSAnTGFiZWwnO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgaXNFbXB0eURhdGEoZGF0YTogb2JqZWN0KTogYm9vbGVhbiB7XG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGxldCBhbGxFbXB0eSA9IHRydWU7XG4gICAgICBmb3IgKGNvbnN0IHByb3Agb2YgT2JqZWN0LmtleXMoZGF0YSkpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBkYXRhW3Byb3BdO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAodHlwZW9mICh2YWx1ZSkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBhbGxFbXB0eSA9IGFsbEVtcHR5ICYmIHRoaXMuaXNFbXB0eURhdGEodmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhbGxFbXB0eSA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFsbEVtcHR5O1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG91bGQgd2UgY2xlYXIgb3V0IG9wdGlvbmFsLCBlbXB0eSwgY29tcGxleCBvYmplY3RzP1xuICAgKiBAcGFyYW0gY2xlYXJFbXB0eSBGYWxzZSBwcm9wZXJ0eSBpZiB3ZSBzaW1wbHkgd2FudCB0byBza2lwIGl0LlxuICAgKiBAcGFyYW0gZGF0YSBUaGUgZGF0YSB0byBhc3Nlc3MgZm9yIFwiZW1wdGluZXNzXCIuXG4gICAqIEBwYXJhbSBmaWVsZCBUaGUgQ2FzZUZpZWxkIHRoYXQgd2lsbCB0ZWxsIHVzIGlmIHRoaXMgaXMgb3B0aW9uYWwuXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBjbGVhck9wdGlvbmFsRW1wdHkoY2xlYXJFbXB0eTogYm9vbGVhbiwgZGF0YTogb2JqZWN0LCBmaWVsZDogQ2FzZUZpZWxkKTogYm9vbGVhbiB7XG4gICAgaWYgKGNsZWFyRW1wdHkpIHtcbiAgICAgIHJldHVybiBGb3JtVmFsdWVTZXJ2aWNlLmlzT3B0aW9uYWwoZmllbGQpICYmIEZvcm1WYWx1ZVNlcnZpY2UuaXNFbXB0eURhdGEoZGF0YSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZmllbGRUeXBlU2FuaXRpc2VyOiBGaWVsZFR5cGVTYW5pdGlzZXIpIHtcbiAgfVxuXG4gIHB1YmxpYyBzYW5pdGlzZShyYXdWYWx1ZTogb2JqZWN0KTogb2JqZWN0IHtcbiAgICByZXR1cm4gdGhpcy5zYW5pdGlzZU9iamVjdChyYXdWYWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2FuaXRpc2VDYXNlUmVmZXJlbmNlKHJlZmVyZW5jZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBzdHJpcCBub24gZGlnaXRzXG4gICAgY29uc3Qgczogc3RyaW5nID0gcmVmZXJlbmNlLnJlcGxhY2UoL1tcXERdL2csICcnKTtcbiAgICBpZiAocy5sZW5ndGggPiAxNikge1xuICAgICAgcmV0dXJuIHMuc3Vic3RyKHMubGVuZ3RoIC0gMTYsIDE2KTtcbiAgICB9XG4gICAgcmV0dXJuIHM7XG4gIH1cblxuICBwdWJsaWMgZmlsdGVyQ3VycmVudFBhZ2VGaWVsZHMoY2FzZUZpZWxkczogQ2FzZUZpZWxkW10sIGVkaXRGb3JtOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IGNsb25lRm9ybSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZWRpdEZvcm0pKTtcbiAgICBPYmplY3Qua2V5cyhjbG9uZUZvcm1bJ2RhdGEnXSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBpZiAoY2FzZUZpZWxkcy5maW5kSW5kZXgoKGVsZW1lbnQpID0+IGVsZW1lbnQuaWQgPT09IGtleSkgPCAwKSB7XG4gICAgICAgIGRlbGV0ZSBjbG9uZUZvcm1bJ2RhdGEnXVtrZXldO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjbG9uZUZvcm07XG4gIH1cblxuICBwdWJsaWMgc2FuaXRpc2VEeW5hbWljTGlzdHMoY2FzZUZpZWxkczogQ2FzZUZpZWxkW10sIGVkaXRGb3JtOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmZpZWxkVHlwZVNhbml0aXNlci5zYW5pdGlzZUxpc3RzKGNhc2VGaWVsZHMsIGVkaXRGb3JtLmRhdGEpO1xuICB9XG5cbiAgcHJpdmF0ZSBzYW5pdGlzZU9iamVjdChyYXdPYmplY3Q6IG9iamVjdCk6IG9iamVjdCB7XG4gICAgaWYgKCFyYXdPYmplY3QpIHtcbiAgICAgIHJldHVybiByYXdPYmplY3Q7XG4gICAgfVxuXG4gICAgbGV0IHNhbml0aXNlZE9iamVjdCA9IHt9O1xuICAgIGNvbnN0IGRvY3VtZW50RmllbGRLZXlzID0gWydkb2N1bWVudF91cmwnLCAnZG9jdW1lbnRfYmluYXJ5X3VybCcsICdkb2N1bWVudF9maWxlbmFtZSddO1xuICAgIGZvciAoY29uc3Qga2V5IGluIHJhd09iamVjdCkge1xuICAgICAgLy8gSWYgdGhlIGtleSBpcyBvbmUgb2YgZG9jdW1lbnRGaWVsZEtleXMsIGl0IG1lYW5zIHRoZSBmaWVsZCBpcyBvZiBEb2N1bWVudCB0eXBlLiBJZiB0aGUgdmFsdWUgb2YgYW55IG9mIHRoZXNlXG4gICAgICAvLyBwcm9wZXJ0aWVzIGlzIG51bGwsIHRoZSBlbnRpcmUgc2FuaXRpc2VkIG9iamVjdCB0byBiZSByZXR1cm5lZCBzaG91bGQgYmUgbnVsbFxuICAgICAgaWYgKGRvY3VtZW50RmllbGRLZXlzLmluZGV4T2Yoa2V5KSA+IC0xICYmIHJhd09iamVjdFtrZXldID09PSBudWxsKSB7XG4gICAgICAgIHNhbml0aXNlZE9iamVjdCA9IG51bGw7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIGlmICgnQ2FzZVJlZmVyZW5jZScgPT09IGtleSkge1xuICAgICAgICBzYW5pdGlzZWRPYmplY3Rba2V5XSA9IHRoaXMuc2FuaXRpc2VWYWx1ZSh0aGlzLnNhbml0aXNlQ2FzZVJlZmVyZW5jZShTdHJpbmcocmF3T2JqZWN0W2tleV0pKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzYW5pdGlzZWRPYmplY3Rba2V5XSA9IHRoaXMuc2FuaXRpc2VWYWx1ZShyYXdPYmplY3Rba2V5XSk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNhbml0aXNlZE9iamVjdFtrZXldKSkge1xuICAgICAgICAgIC8vIElmIHRoZSAnc2FuaXRpc2VkJyBhcnJheSBpcyBlbXB0eSwgd2hlcmVhcyB0aGUgb3JpZ2luYWwgYXJyYXkgaGFkIDEgb3IgbW9yZSBpdGVtc1xuICAgICAgICAgIC8vIGRlbGV0ZSB0aGUgcHJvcGVydHkgZnJvbSB0aGUgc2FuYXRpc2VkIG9iamVjdFxuICAgICAgICAgIGlmIChzYW5pdGlzZWRPYmplY3Rba2V5XS5sZW5ndGggPT09IDAgJiYgcmF3T2JqZWN0W2tleV0ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZGVsZXRlIHNhbml0aXNlZE9iamVjdFtrZXldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc2FuaXRpc2VkT2JqZWN0O1xuICB9XG5cbiAgcHJpdmF0ZSBzYW5pdGlzZUFycmF5KHJhd0FycmF5OiBhbnlbXSk6IGFueVtdIHtcbiAgICBpZiAoIXJhd0FycmF5KSB7XG4gICAgICByZXR1cm4gcmF3QXJyYXk7XG4gICAgfVxuXG4gICAgcmF3QXJyYXkuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGlmIChpdGVtICYmIGl0ZW0uaGFzT3duUHJvcGVydHkoJ3ZhbHVlJykpIHtcbiAgICAgICAgaXRlbS52YWx1ZSA9IHRoaXMuc2FuaXRpc2VWYWx1ZShpdGVtLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIEZpbHRlciB0aGUgYXJyYXkgdG8gZW5zdXJlIG9ubHkgdHJ1dGh5IHZhbHVlcyBhcmUgcmV0dXJuZWQ7IGRvdWJsZS1iYW5nIG9wZXJhdG9yIHJldHVybnMgdGhlIGJvb2xlYW4gdHJ1ZS9mYWxzZVxuICAgIC8vIGFzc29jaWF0aW9uIG9mIGEgdmFsdWUuIEluIGFkZGl0aW9uLCBpZiB0aGUgYXJyYXkgY29udGFpbnMgaXRlbXMgd2l0aCBhIFwidmFsdWVcIiBvYmplY3QgcHJvcGVydHksIHJldHVybiBvbmx5XG4gICAgLy8gdGhvc2Ugd2hvc2UgdmFsdWUgb2JqZWN0IGNvbnRhaW5zIG5vbi1lbXB0eSB2YWx1ZXMsIGluY2x1ZGluZyBmb3IgYW55IGRlc2NlbmRhbnQgb2JqZWN0c1xuICAgIHJldHVybiByYXdBcnJheVxuICAgICAgLmZpbHRlcihpdGVtID0+ICEhaXRlbSlcbiAgICAgIC5maWx0ZXIoaXRlbSA9PiBpdGVtLmhhc093blByb3BlcnR5KCd2YWx1ZScpID8gRmllbGRzVXRpbHMuY29udGFpbnNOb25FbXB0eVZhbHVlcyhpdGVtLnZhbHVlKSA6IHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzYW5pdGlzZVZhbHVlKHJhd1ZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJhd1ZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2FuaXRpc2VBcnJheShyYXdWYWx1ZSk7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0eXBlb2YgcmF3VmFsdWUpIHtcbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHJldHVybiB0aGlzLnNhbml0aXNlT2JqZWN0KHJhd1ZhbHVlKTtcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIHJldHVybiByYXdWYWx1ZS50cmltKCk7XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICByZXR1cm4gU3RyaW5nKHJhd1ZhbHVlKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiByYXdWYWx1ZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY2xlYXJOb25DYXNlRmllbGRzKGRhdGE6IG9iamVjdCwgY2FzZUZpZWxkczogQ2FzZUZpZWxkW10pIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFLZXkgaW4gZGF0YSkge1xuICAgICAgaWYgKCFjYXNlRmllbGRzLmZpbmQoY2YgPT4gY2YuaWQgPT09IGRhdGFLZXkpKSB7XG4gICAgICAgIGRlbGV0ZSBkYXRhW2RhdGFLZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFRPRE8gcmVmYWN0b3Igc28gdGhhdCB0aGlzIGFuZCByZW1vdmUgdW5uZWNlc3NhcnkgZmllbGRzIGhhdmUgYSBjb21tb24gaXRlcmF0b3IgdGhhdCBhcHBsaWVzIGZ1bmN0aW9ucyB0byBlYWNoIG5vZGUgdmlzaXRlZFxuICBwdWJsaWMgcmVtb3ZlTnVsbExhYmVscyhkYXRhOiBvYmplY3QsIGNhc2VGaWVsZHM6IENhc2VGaWVsZFtdKSB7XG4gICAgaWYgKGRhdGEgJiYgY2FzZUZpZWxkcyAmJiBjYXNlRmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIGNoZWNrIGlmIHRoZXJlIGlzIGFueSBkYXRhIGF0IHRoZSB0b3AgbGV2ZWwgb2YgdGhlIGZvcm0gdGhhdCdzIG5vdCBpbiB0aGUgY2FzZUZpZWxkc1xuICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBjYXNlRmllbGRzKSB7XG4gICAgICAgIGlmIChmaWVsZC5maWVsZF90eXBlKSB7XG4gICAgICAgICAgc3dpdGNoIChmaWVsZC5maWVsZF90eXBlLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ0xhYmVsJzpcbiAgICAgICAgICAgICAgLy8gRGVsZXRlIGFueSBsYWJlbHMgdGhhdCBhcmUgbnVsbFxuICAgICAgICAgICAgICBpZiAoKGRhdGFbZmllbGQuaWRdID09PSBudWxsKSB8fCAoZGF0YVtmaWVsZC5pZF0gPT09ICcnKSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBkYXRhW2ZpZWxkLmlkXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0NvbXBsZXgnOlxuICAgICAgICAgICAgICAvLyBSZWN1cnNlIGFuZCByZW1vdmUgYW55dGhpbmcgdW5uZWNlc3NhcnkgZnJvbSB3aXRoaW4gYSBjb21wbGV4IGZpZWxkLlxuICAgICAgICAgICAgICB0aGlzLnJlbW92ZU51bGxMYWJlbHMoZGF0YVtmaWVsZC5pZF0sIGZpZWxkLmZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0NvbGxlY3Rpb24nOlxuICAgICAgICAgICAgICAvLyBHZXQgaG9sZCBvZiB0aGUgY29sbGVjdGlvbi5cbiAgICAgICAgICAgICAgY29uc3QgY29sbGVjdGlvbiA9IGRhdGFbZmllbGQuaWRdO1xuICAgICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBhY3R1YWxseSBoYXZlIGEgY29sbGVjdGlvbiB0byB3b3JrIHdpdGguXG4gICAgICAgICAgICAgIGlmIChjb2xsZWN0aW9uICYmIEFycmF5LmlzQXJyYXkoY29sbGVjdGlvbikpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY29sbGVjdGlvbiBvZiBjb21wbGV4IG9iamVjdCwgd2UgbmVlZCB0byBpdGVyYXRlIHRocm91Z2hcbiAgICAgICAgICAgICAgICAvLyBhbmQgY2xlYXIgdGhlbSBvdXQuXG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkLmZpZWxkX3R5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLnR5cGUgPT09ICdDb21wbGV4Jykge1xuICAgICAgICAgICAgICAgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBlbGVtZW50cyBhbmQgcmVtb3ZlIGFueSB1bm5lY2Vzc2FyeSBmaWVsZHMgd2l0aGluLlxuICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVOdWxsTGFiZWxzKGl0ZW0sIGZpZWxkLmZpZWxkX3R5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVOdWxsTGFiZWxzKGl0ZW0udmFsdWUsIGZpZWxkLmZpZWxkX3R5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8gVE9ETyByZWZhY3RvciBzbyB0aGF0IHRoaXMgYW5kIHJlbW92ZSB1bm5lY2Vzc2FyeSBmaWVsZHMgaGF2ZSBhIGNvbW1vbiBpdGVyYXRvciB0aGF0IGFwcGxpZXMgZnVuY3Rpb25zIHRvIGVhY2ggbm9kZSB2aXNpdGVkXG4gIHB1YmxpYyByZW1vdmVFbXB0eURvY3VtZW50cyhkYXRhOiBvYmplY3QsIGNhc2VGaWVsZHM6IENhc2VGaWVsZFtdKSB7XG4gICAgaWYgKGRhdGEgJiYgY2FzZUZpZWxkcyAmJiBjYXNlRmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIGNoZWNrIGlmIHRoZXJlIGlzIGFueSBkYXRhIGF0IHRoZSB0b3AgbGV2ZWwgb2YgdGhlIGZvcm0gdGhhdCdzIG5vdCBpbiB0aGUgY2FzZUZpZWxkc1xuICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBjYXNlRmllbGRzKSB7XG4gICAgICAgIGlmIChmaWVsZC5maWVsZF90eXBlKSB7XG4gICAgICAgICAgc3dpdGNoIChmaWVsZC5maWVsZF90eXBlLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ0NvbXBsZXgnOlxuICAgICAgICAgICAgICAvLyBSZWN1cnNlIGFuZCByZW1vdmUgYW55IGVtcHR5IGRvY3VtZW50cyBmcm9tIHdpdGhpbiBhIGNvbXBsZXggZmllbGQuXG4gICAgICAgICAgICAgIHRoaXMucmVtb3ZlRW1wdHlEb2N1bWVudHMoZGF0YVtmaWVsZC5pZF0sIGZpZWxkLmZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0NvbGxlY3Rpb24nOlxuICAgICAgICAgICAgICAvLyBHZXQgaG9sZCBvZiB0aGUgY29sbGVjdGlvbi5cbiAgICAgICAgICAgICAgY29uc3QgY29sbGVjdGlvbiA9IGRhdGFbZmllbGQuaWRdO1xuICAgICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBhY3R1YWxseSBoYXZlIGEgY29sbGVjdGlvbiB0byB3b3JrIHdpdGguXG4gICAgICAgICAgICAgIGlmIChjb2xsZWN0aW9uICYmIEFycmF5LmlzQXJyYXkoY29sbGVjdGlvbikpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY29sbGVjdGlvbiBvZiBjb21wbGV4IG9iamVjdCwgd2UgbmVlZCB0byBpdGVyYXRlIHRocm91Z2hcbiAgICAgICAgICAgICAgICAvLyBhbmQgY2xlYXIgb3V0IGVtcHR5IGRvY3VtZW50c1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZC5maWVsZF90eXBlLmNvbGxlY3Rpb25fZmllbGRfdHlwZS50eXBlID09PSAnQ29tcGxleCcpIHtcbiAgICAgICAgICAgICAgICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgZWxlbWVudHMgYW5kIHJlbW92ZSBhbnkgZW1wdHkgZG9jdW1lbnRzIHdpdGhpbi5cbiAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBjb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRW1wdHlEb2N1bWVudHMoaXRlbSwgZmllbGQuZmllbGRfdHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUVtcHR5RG9jdW1lbnRzKGl0ZW0udmFsdWUsIGZpZWxkLmZpZWxkX3R5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdEb2N1bWVudCc6XG4gICAgICAgICAgICAgIC8vIEVuc3VyZSB0aGlzIGlzIGV4ZWN1dGVkIG9ubHkgaWYgdGhlIERvY3VtZW50IGZpZWxkIGlzIE5PVCBoaWRkZW4gYW5kIGlzIGVtcHR5IG9mIGRhdGE7IGhpZGRlbiBEb2N1bWVudFxuICAgICAgICAgICAgICAvLyBmaWVsZHMgYXJlIGhhbmRsZWQgYnkgdGhlIGZpbHRlclJhd0Zvcm1WYWx1ZXMoKSBmdW5jdGlvbiBpbiBDYXNlRWRpdFN1Ym1pdCBjb21wb25lbnRcbiAgICAgICAgICAgICAgaWYgKGZpZWxkLmhpZGRlbiAhPT0gdHJ1ZSAmJiBGb3JtVmFsdWVTZXJ2aWNlLmlzRW1wdHlEYXRhKGRhdGFbZmllbGQuaWRdKSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBkYXRhW2ZpZWxkLmlkXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogQ2xlYXIgb3V0IHVubmVjZXNzYXJ5IGZpZWxkcyBmcm9tIGEgZGF0YSBvYmplY3QsIGJhc2VkIG9uIGFuIGFycmF5IG9mIENhc2VGaWVsZHMuXG4gICAqIFRoaXMgbWV0aG9kIGlzIHJlY3Vyc2l2ZSBhbmQgd2lsbCBjYWxsIGl0c2VsZiBpZiBpdCBlbmNvdW50ZXJzIHBhcnRpY3VsYXIgZmllbGQgdHlwZXMuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIFRoZSBvYmplY3QgdG8gYmUgdGlkaWVkIHVwLlxuICAgKiBAcGFyYW0gY2FzZUZpZWxkcyBUaGUgQ2FzZUZpZWxkcyB0aGF0IG5lZWQgdG8gYmUgY2xlYW5lZCB1cC5cbiAgICogQHBhcmFtIGNsZWFyRW1wdHkgV2hldGhlciBvciBub3Qgd2Ugc2hvdWxkIGNsZWFyIG91dCBlbXB0eSwgb3B0aW9uYWwsIGNvbXBsZXggb2JqZWN0cy5cbiAgICogQHBhcmFtIGNsZWFyTm9uQ2FzZSBXaGV0aGVyIG9yIG5vdCB3ZSBzaG91bGQgY2xlYXIgb3V0IG5vbi1jYXNlIGZpZWxkcyBhdCB0aGUgdG9wIGxldmVsLlxuICAgKi9cbiAgcHVibGljIHJlbW92ZVVubmVjZXNzYXJ5RmllbGRzKGRhdGE6IG9iamVjdCwgY2FzZUZpZWxkczogQ2FzZUZpZWxkW10sIGNsZWFyRW1wdHkgPSBmYWxzZSwgY2xlYXJOb25DYXNlID0gZmFsc2UsXG4gICAgZnJvbVByZXZpb3VzUGFnZSA9IGZhbHNlLCBjdXJyZW50UGFnZUNhc2VGaWVsZHMgPSBbXSk6IHZvaWQge1xuICAgIGlmIChkYXRhICYmIGNhc2VGaWVsZHMgJiYgY2FzZUZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBjaGVjayBpZiB0aGVyZSBpcyBhbnkgZGF0YSBhdCB0aGUgdG9wIGxldmVsIG9mIHRoZSBmb3JtIHRoYXQncyBub3QgaW4gdGhlIGNhc2VGaWVsZHNcbiAgICAgIGlmIChjbGVhck5vbkNhc2UpIHtcbiAgICAgICAgdGhpcy5jbGVhck5vbkNhc2VGaWVsZHMoZGF0YSwgY2FzZUZpZWxkcyk7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGNhc2VGaWVsZHMpIHtcbiAgICAgICAgaWYgKCFGb3JtVmFsdWVTZXJ2aWNlLmlzTGFiZWwoZmllbGQpICYmIEZvcm1WYWx1ZVNlcnZpY2UuaXNSZWFkT25seShmaWVsZCkpIHtcbiAgICAgICAgICAvLyBSZXRhaW4gYW55dGhpbmcgdGhhdCBpcyByZWFkb25seSBhbmQgbm90IGEgbGFiZWwuXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpZWxkLmhpZGRlbiA9PT0gdHJ1ZSAmJiBmaWVsZC5kaXNwbGF5X2NvbnRleHQgIT09ICdISURERU4nICYmIGZpZWxkLmRpc3BsYXlfY29udGV4dCAhPT0gJ0hJRERFTl9URU1QJyAmJiBmaWVsZC5pZCAhPT0gJ2Nhc2VMaW5rcycgJiYgIWZpZWxkLnJldGFpbl9oaWRkZW5fdmFsdWUpIHtcbiAgICAgICAgICAvLyBEZWxldGUgYW55dGhpbmcgdGhhdCBpcyBoaWRkZW4gKHRoYXQgaXMgTk9UIHJlYWRvbmx5KSwgYW5kIHRoYXRcbiAgICAgICAgICAvLyBoYXNuJ3QgaGFkIGl0cyBkaXNwbGF5X2NvbnRleHQgb3ZlcnJpZGRlbiB0byBtYWtlIGl0IGhpZGRlbi5cbiAgICAgICAgICBkZWxldGUgZGF0YVtmaWVsZC5pZF07XG4gICAgICAgIH0gZWxzZSBpZiAoZmllbGQuZmllbGRfdHlwZSkge1xuICAgICAgICAgIHN3aXRjaCAoZmllbGQuZmllbGRfdHlwZS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdMYWJlbCc6XG4gICAgICAgICAgICAgIC8vIERlbGV0ZSBhbnkgbGFiZWxzLlxuICAgICAgICAgICAgICBkZWxldGUgZGF0YVtmaWVsZC5pZF07XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnRG9jdW1lbnQnOlxuICAgICAgICAgICAgICBpZiAoRm9ybVZhbHVlU2VydmljZS5pc0VtcHR5RGF0YShkYXRhW2ZpZWxkLmlkXSkpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgZGF0YVtmaWVsZC5pZF07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdDb21wbGV4JzpcbiAgICAgICAgICAgICAgdGhpcy5yZW1vdmVVbm5lY2Vzc2FyeUZpZWxkcyhkYXRhW2ZpZWxkLmlkXSwgZmllbGQuZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcywgY2xlYXJFbXB0eSk7XG4gICAgICAgICAgICAgIC8vIEFsc28gcmVtb3ZlIGFueSBvcHRpb25hbCBjb21wbGV4IG9iamVjdHMgdGhhdCBhcmUgY29tcGxldGVseSBlbXB0eS5cbiAgICAgICAgICAgICAgLy8gRVVJLTQyNDQ6IFJpdGVzaCdzIGZpeCwgcGFzc2luZyB0cnVlIGluc3RlYWQgb2YgY2xlYXJFbXB0eS5cbiAgICAgICAgICAgICAgaWYgKEZvcm1WYWx1ZVNlcnZpY2UuY2xlYXJPcHRpb25hbEVtcHR5KHRydWUsIGRhdGFbZmllbGQuaWRdLCBmaWVsZCkpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgZGF0YVtmaWVsZC5pZF07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGRhdGFbZmllbGQuaWRdICYmIEZvcm1WYWx1ZVNlcnZpY2UuaXNFbXB0eURhdGEoZGF0YVtmaWVsZC5pZF0pICYmIGZyb21QcmV2aW91c1BhZ2VcbiAgICAgICAgICAgICAgICAmJiBjdXJyZW50UGFnZUNhc2VGaWVsZHMuZmluZEluZGV4KChjRmllbGQ6IGFueSkgPT4gY0ZpZWxkLmlkID09PSBmaWVsZC5pZCkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIGRhdGFbZmllbGQuaWRdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQ29sbGVjdGlvbic6XG4gICAgICAgICAgICAgIC8vIENoZWNrIGZvciB2YWxpZCBjb2xsZWN0aW9uIGRhdGFcbiAgICAgICAgICAgICAgdGhpcy5yZW1vdmVJbnZhbGlkQ29sbGVjdGlvbkRhdGEoZGF0YSwgZmllbGQpO1xuICAgICAgICAgICAgICAvLyBHZXQgaG9sZCBvZiB0aGUgY29sbGVjdGlvbi5cbiAgICAgICAgICAgICAgY29uc3QgY29sbGVjdGlvbiA9IGRhdGFbZmllbGQuaWRdO1xuICAgICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBhY3R1YWxseSBoYXZlIGEgY29sbGVjdGlvbiB0byB3b3JrIHdpdGguXG4gICAgICAgICAgICAgIGlmIChjb2xsZWN0aW9uICYmIEFycmF5LmlzQXJyYXkoY29sbGVjdGlvbikpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY29sbGVjdGlvbiBvZiBjb21wbGV4IG9iamVjdCwgd2UgbmVlZCB0byBpdGVyYXRlIHRocm91Z2hcbiAgICAgICAgICAgICAgICAvLyBhbmQgY2xlYXIgdGhlbSBvdXQuXG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkLmZpZWxkX3R5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLnR5cGUgPT09ICdDb21wbGV4Jykge1xuICAgICAgICAgICAgICAgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBlbGVtZW50cyBhbmQgcmVtb3ZlIGFueSB1bm5lY2Vzc2FyeSBmaWVsZHMgd2l0aGluLlxuICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVVbm5lY2Vzc2FyeUZpZWxkcyhpdGVtLCBmaWVsZC5maWVsZF90eXBlLmNvbGxlY3Rpb25fZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcywgY2xlYXJFbXB0eSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlVW5uZWNlc3NhcnlGaWVsZHMoaXRlbS52YWx1ZSwgZmllbGQuZmllbGRfdHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDbGVhciBvdXQgYW55IE11bHRpU2VsZWN0IGxhYmVscy5cbiAgICBGb3JtVmFsdWVTZXJ2aWNlLnJlbW92ZU11bHRpU2VsZWN0TGFiZWxzKGRhdGEpO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZUludmFsaWRDb2xsZWN0aW9uRGF0YShkYXRhOiBvYmplY3QsIGZpZWxkOiBDYXNlRmllbGQpIHtcbiAgICBpZiAoZGF0YVtmaWVsZC5pZF0gJiYgZGF0YVtmaWVsZC5pZF0ubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCBvYmpDb2xsZWN0aW9uIG9mIGRhdGFbZmllbGQuaWRdKSB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhvYmpDb2xsZWN0aW9uKS5sZW5ndGggPT09IDEgJiYgT2JqZWN0LmtleXMob2JqQ29sbGVjdGlvbikuaW5kZXhPZignaWQnKSA+IC0xKSB7XG4gICAgICAgICAgZGF0YVtmaWVsZC5pZF0gPSBbXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYW55IGVtcHR5IGNvbGxlY3Rpb24gZmllbGRzIHdoZXJlIGEgdmFsdWUgb2YgZ3JlYXRlciB0aGFuIHplcm8gaXMgc3BlY2lmaWVkIGluIHRoZSBmaWVsZCdzIHtAbGluayBGaWVsZFR5cGV9XG4gICAqIGBtaW5gIGF0dHJpYnV0ZS5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgVGhlIG9iamVjdCB0cmVlIG9mIGZvcm0gdmFsdWVzIG9uIHdoaWNoIHRvIHBlcmZvcm0gdGhlIHJlbW92YWxcbiAgICogQHBhcmFtIGNhc2VGaWVsZHMgVGhlIGxpc3Qgb2YgdW5kZXJseWluZyB7QGxpbmsgQ2FzZUZpZWxkfSBkb21haW4gbW9kZWwgb2JqZWN0cyBmb3IgZWFjaCBmaWVsZFxuICAgKi9cbiAgcHVibGljIHJlbW92ZUVtcHR5Q29sbGVjdGlvbnNXaXRoTWluVmFsaWRhdGlvbihkYXRhOiBvYmplY3QsIGNhc2VGaWVsZHM6IENhc2VGaWVsZFtdKTogdm9pZCB7XG4gICAgaWYgKGRhdGEgJiYgY2FzZUZpZWxkcyAmJiBjYXNlRmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgY2FzZUZpZWxkcykge1xuICAgICAgICBpZiAoZmllbGQuZmllbGRfdHlwZS50eXBlID09PSAnQ29sbGVjdGlvbicgJiYgZmllbGQuZmllbGRfdHlwZS5taW4gPiAwICYmIGRhdGFbZmllbGQuaWRdICYmXG4gICAgICAgICAgQXJyYXkuaXNBcnJheShkYXRhW2ZpZWxkLmlkXSkgJiYgZGF0YVtmaWVsZC5pZF0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgZGVsZXRlIGRhdGFbZmllbGQuaWRdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBmcm9tIHRoZSB0b3AgbGV2ZWwgb2YgdGhlIGZvcm0gZGF0YSBhbnkgY2FzZSBmaWVsZHMgb2YgYSBnaXZlbiB0eXBlIG9yIHR5cGVzIHRoYXQgYXJlIG5vdCBpbnRlbmRlZCB0byBiZVxuICAgKiBwZXJzaXN0ZWQuIFRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgdG8gcmVtb3ZlIFwic3BlY2lhbFwiIGNhc2UgZmllbGQgdHlwZXMgZnJvbSB0aGUgZGF0YSwgc3VjaCBhcyBGbGFnTGF1bmNoZXIgb3JcbiAgICogQ29tcG9uZW50TGF1bmNoZXIgZmllbGRzLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSBUaGUgb2JqZWN0IHRyZWUgb2YgZm9ybSB2YWx1ZXMgb24gd2hpY2ggdG8gcGVyZm9ybSB0aGUgcmVtb3ZhbCBhdCB0aGUgdG9wIGxldmVsIG9ubHlcbiAgICogQHBhcmFtIGNhc2VGaWVsZHMgVGhlIGxpc3Qgb2YgdW5kZXJseWluZyB7QGxpbmsgQ2FzZUZpZWxkfSBkb21haW4gbW9kZWwgb2JqZWN0cyBmb3IgZWFjaCBmaWVsZFxuICAgKiBAcGFyYW0gdHlwZXMgQW4gYXJyYXkgb2Ygb25lIG9yIG1vcmUgZmllbGQgdHlwZXNcbiAgICovXG4gIHB1YmxpYyByZW1vdmVDYXNlRmllbGRzT2ZUeXBlKGRhdGE6IG9iamVjdCwgY2FzZUZpZWxkczogQ2FzZUZpZWxkW10sIHR5cGVzOiBGaWVsZFR5cGVFbnVtW10pOiB2b2lkIHtcbiAgICBpZiAoZGF0YSAmJiBjYXNlRmllbGRzICYmIGNhc2VGaWVsZHMubGVuZ3RoID4gMCAmJiB0eXBlcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBjYXNlRmllbGRzVG9SZW1vdmUgPSBjYXNlRmllbGRzLmZpbHRlcihjYXNlRmllbGQgPT4gRmllbGRzVXRpbHMuaXNDYXNlRmllbGRPZlR5cGUoY2FzZUZpZWxkLCB0eXBlcykpO1xuICAgICAgZm9yIChjb25zdCBjYXNlRmllbGQgb2YgY2FzZUZpZWxkc1RvUmVtb3ZlKSB7XG4gICAgICAgIGRlbGV0ZSBkYXRhW2Nhc2VGaWVsZC5pZF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlLXBvcHVsYXRlIHRoZSBmb3JtIGRhdGEgZnJvbSB0aGUgdmFsdWVzIGhlbGQgaW4gdGhlIGNhc2UgZmllbGRzLiBUaGlzIGlzIG5lY2Vzc2FyeSBpbiBvcmRlciB0byBwaWNrIHVwLCBmb3JcbiAgICogZWFjaCBgRmxhZ3NgIGZpZWxkLCBhbnkgZmxhZyBkZXRhaWxzIGRhdGEgbm90IGN1cnJlbnRseSBwcmVzZW50LlxuICAgKlxuICAgKiBgRmxhZ3NgIGZpZWxkcyBtYXkgYmUgY29udGFpbmVkIGluIG90aGVyIGBDYXNlRmllbGRgIGluc3RhbmNlcywgZWl0aGVyIGFzIGEgc3ViLWZpZWxkIG9mIGEgQ29tcGxleCBmaWVsZCwgb3JcbiAgICogZmllbGRzIGluIGEgY29sbGVjdGlvbiAob3Igc3ViLWZpZWxkcyBvZiBDb21wbGV4IGZpZWxkcyBpbiBhIGNvbGxlY3Rpb24pLiBUaGVyZWZvcmUsIGl0IGlzIG5lY2Vzc2FyeSB0b1xuICAgKiBpdGVyYXRlIHRocm91Z2ggYWxsIGBDYXNlRmllbGRgcy5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgVGhlIG9iamVjdCB0cmVlIG9mIGZvcm0gdmFsdWVzIG9uIHdoaWNoIHRvIHBlcmZvcm0gdGhlIGRhdGEgcG9wdWxhdGlvblxuICAgKiBAcGFyYW0gY2FzZUZpZWxkcyBUaGUgbGlzdCBvZiB1bmRlcmx5aW5nIHtAbGluayBDYXNlRmllbGR9IGRvbWFpbiBtb2RlbCBvYmplY3RzIGZvciBlYWNoIGZpZWxkXG4gICAqL1xuICBwdWJsaWMgcmVwb3B1bGF0ZUZvcm1EYXRhRnJvbUNhc2VGaWVsZFZhbHVlcyhkYXRhOiBvYmplY3QsIGNhc2VGaWVsZHM6IENhc2VGaWVsZFtdKTogdm9pZCB7XG4gICAgaWYgKGRhdGEgJiYgY2FzZUZpZWxkcyAmJiBjYXNlRmllbGRzLmxlbmd0aCA+IDAgJiZcbiAgICAgIGNhc2VGaWVsZHMuZmluZEluZGV4KGNhc2VGaWVsZCA9PiBGaWVsZHNVdGlscy5pc0Nhc2VGaWVsZE9mVHlwZShjYXNlRmllbGQsIFsnRmxhZ0xhdW5jaGVyJ10pKSA+IC0xKSB7XG4gICAgICAvLyBJZ25vcmUgdGhlIEZsYWdMYXVuY2hlciBDYXNlRmllbGQgYmVjYXVzZSBpdCBkb2VzIG5vdCBob2xkIGFueSB2YWx1ZXNcbiAgICAgIGNhc2VGaWVsZHMuZmlsdGVyKGNhc2VGaWVsZCA9PiAhRmllbGRzVXRpbHMuaXNDYXNlRmllbGRPZlR5cGUoY2FzZUZpZWxkLCBbJ0ZsYWdMYXVuY2hlciddKSlcbiAgICAgICAgLmZvckVhY2goY2FzZUZpZWxkID0+IHtcbiAgICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgZGF0YSBvYmplY3QgaXMgcG9wdWxhdGVkIGZvciBhbGwgQ2FzZUZpZWxkIGtleXMgaXQgY29udGFpbnMsIGV2ZW4gaWYgZm9yIGEgZ2l2ZW5cbiAgICAgICAgICAvLyBDYXNlRmllbGQga2V5LCB0aGUgZGF0YSBvYmplY3QgaGFzIGEgZmFsc3kgdmFsdWUgKGhlbmNlIHRoZSB1c2Ugb2YgaGFzT3duUHJvcGVydHkoKSBmb3IgdGhlIGNoZWNrIGJlbG93KVxuICAgICAgICAgIC8vIFNlZSBodHRwczovL3Rvb2xzLmhtY3RzLm5ldC9qaXJhL2Jyb3dzZS9FVUktNzM3N1xuICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KGNhc2VGaWVsZC5pZCkgJiYgY2FzZUZpZWxkLnZhbHVlKSB7XG4gICAgICAgICAgICAvLyBDcmVhdGUgbmV3IG9iamVjdCBmb3IgdGhlIENhc2VGaWVsZCBJRCB3aXRoaW4gdGhlIGRhdGEgb2JqZWN0LCBpZiBuZWNlc3NhcnkgKGkuZS4gaWYgdGhlIGN1cnJlbnQgdmFsdWVcbiAgICAgICAgICAgIC8vIGlzIGZhbHN5KVxuICAgICAgICAgICAgaWYgKCFkYXRhW2Nhc2VGaWVsZC5pZF0pIHtcbiAgICAgICAgICAgICAgZGF0YVtjYXNlRmllbGQuaWRdID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDb3B5IGFsbCB2YWx1ZXMgZnJvbSB0aGUgY29ycmVzcG9uZGluZyBDYXNlRmllbGQ7IHRoaXMgZW5zdXJlcyBhbGwgbmVzdGVkIGZsYWcgZGF0YSAoZm9yIGV4YW1wbGUsIGFcbiAgICAgICAgICAgIC8vIEZsYWdzIGZpZWxkIHdpdGhpbiBhIENvbXBsZXggZmllbGQgb3IgYSBjb2xsZWN0aW9uIG9mIENvbXBsZXggZmllbGRzKSBpcyBjb3BpZWQgYWNyb3NzXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhkYXRhW2Nhc2VGaWVsZC5pZF0pLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgaWYgKGNhc2VGaWVsZC52YWx1ZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAgICAgZGF0YVtjYXNlRmllbGQuaWRdW2tleV0gPSBjYXNlRmllbGQudmFsdWVba2V5XTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUG9wdWxhdGUgdGhlIGxpbmtlZCBjYXNlcyBmcm9tIHRoZSBkYXRhIGhlbGQgaW4gaXRzIGNvcnJlc3BvbmRpbmcgQ2FzZUZpZWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSBUaGUgb2JqZWN0IHRyZWUgb2YgZm9ybSB2YWx1ZXMgb24gd2hpY2ggdG8gcGVyZm9ybSB0aGUgZGF0YSBwb3B1bGF0aW9uXG4gICAqIEBwYXJhbSBjYXNlRmllbGRzIFRoZSBsaXN0IG9mIHVuZGVybHlpbmcge0BsaW5rIENhc2VGaWVsZH0gZG9tYWluIG1vZGVsIG9iamVjdHMgZm9yIGVhY2ggZmllbGRcbiAgICovXG4gIHB1YmxpYyBwb3B1bGF0ZUxpbmtlZENhc2VzRGV0YWlsc0Zyb21DYXNlRmllbGRzKGRhdGE6IG9iamVjdCwgY2FzZUZpZWxkczogQ2FzZUZpZWxkW10pOiB2b2lkIHtcbiAgICBpZiAoZGF0YSAmJiBjYXNlRmllbGRzICYmIGNhc2VGaWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgY2FzZUZpZWxkcy5maWx0ZXIoY2FzZUZpZWxkID0+ICFGaWVsZHNVdGlscy5pc0Nhc2VGaWVsZE9mVHlwZShjYXNlRmllbGQsIFsnQ29tcG9uZW50TGF1bmNoZXInXSkpXG4gICAgICAgIC5mb3JFYWNoKGNhc2VGaWVsZCA9PiB7XG4gICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoJ2Nhc2VMaW5rcycpICYmIGNhc2VGaWVsZC52YWx1ZSkge1xuICAgICAgICAgICAgZGF0YVtjYXNlRmllbGQuaWRdID0gY2FzZUZpZWxkLnZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
551
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS12YWx1ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9zZXJ2aWNlcy9mb3JtL2Zvcm0tdmFsdWUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDeEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7OztBQUc1RCxNQUFNLE9BQU8sZ0JBQWdCO0lBOEwzQixZQUE2QixrQkFBc0M7UUFBdEMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtJQUNuRSxDQUFDO0lBOUxEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FtR0c7SUFDSSxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUTtRQUNsRCxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDekMsSUFBSSxXQUFXLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDL0MsT0FBTyxJQUFJLENBQUMsY0FBYyxHQUFHLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDbkU7YUFBTSxJQUFJLFdBQVcsQ0FBQyx5QkFBeUIsQ0FBQyxXQUFXLENBQUMsRUFB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InNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQ2FzZUZpZWxkLCBGaWVsZFR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vZG9tYWluJztcbmltcG9ydCB7IEZpZWxkc1V0aWxzIH0gZnJvbSAnLi4vZmllbGRzJztcbmltcG9ydCB7IEZpZWxkVHlwZVNhbml0aXNlciB9IGZyb20gJy4vZmllbGQtdHlwZS1zYW5pdGlzZXInO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRm9ybVZhbHVlU2VydmljZSB7XG4gIC8qKlxuICAgKiBHZXRzIHZhbHVlIG9mIGEgZmllbGQgYmFzZWQgb24gZmllbGRLZXkgd2hpY2ggaXMgYSBkb3Qgc2VwYXJhdGVkIHJlZmVyZW5jZSB0byB2YWx1ZSBhbmQgY29sbGVjdGlvbiBpbmRleC5cbiAgICogVGhlcmUgYXJlIHR3byBleGNlcHRpb25zOlxuICAgKiAxKSBJbiBjYXNlIG9mIGEgbXVsdGlzZWxlY3QgYmVpbmcgaWRlbnRpZmllZCBhcyBhIGxlYWYgYSAnLS0tTEFCRUwnIHN1ZmZpeCBpcyBhcHBlbmRlZCB0byB0aGUga2V5IGFuZCB2YWx1ZXMgb2YgdGhhdCBrZXkgYXJlIHJldHVybmVkXG4gICAqICAgICAgZm9ybT0geyAnbGlzdCc6IFsnY29kZTEnLCAnY29kZTInXSxcbiAgICogICAgICAgICAgICAgICdsaXN0LS0tTEFCRUwnOiBbJ2xhYmVsMScsICdsYWJlbDInXSB9LFxuICAgKiAgICAgIGZpZWxkS2V5PWxpc3QsXG4gICAqICAgICAgY29sSW5kZXg9MCxcbiAgICogICAgICB2YWx1ZT1sYWJlbDEsIGxhYmVsMlxuICAgKiAyKSBJbiBjYXNlIG9mIGEgY29sbGVjdGlvbiBvZiBzaW1wbGUgZmllbGRzIGlzIGlkZW50aWZpZWQgYXMgYSBsZWFmIGFsbCB2YWx1ZXMgYXJlIGpvaW5lZCBzZXBlcmF0ZWQgYnkgYSBjb21tYVxuICAgKiAgICAgIGZvcm09IHsgJ2NvbGxlY3Rpb24nOiBbeyAndmFsdWUnOiAndmFsdWUxJyB9LCB7ICd2YWx1ZSc6ICd2YWx1ZTInIH1dIH1cbiAgICogICAgICBmaWVsZEtleT1jb2xsZWN0aW9uXG4gICAqICAgICAgY29sSW5kZXg9MVxuICAgKiAgICAgIHZhbHVlPXZhbHVlMSwgdmFsdWUyXG4gICAqXG4gICAqIE90aGVyIGV4YW1wbGVzOlxuICAgKiAxKSBzaW1wbGUgZmllbGQgcmVmZXJlbmNlOiBmb3JtPXsgJ1BlcnNvbkZpcnN0TmFtZSc6ICdKb2huJyB9LCBmaWVsZEtleT1QZXJzb25GaXJzdE5hbWUsIHZhbHVlPUpvaG5cbiAgICogMikgY29tcGxleCBmaWVsZCByZWZlcmVuY2U6XG4gICAqICAgICAgZm9ybT0geyBjb21wbGV4MSc6IHsgJ3NpbXBsZTExJzogJ3ZhbHVlMTEnLCAnc2ltcGxlMTInOiAndmFsdWUxMicsICdjb21wbGV4Mic6IHsgJ3NpbXBsZTIxJzogJ3ZhbHVlMjEnIH0gfX0sXG4gICAqICAgICAgZmllbGRLZXk9Y29tcGxleDEuY29tcGxleDIuc2ltcGxlMjFcbiAgICogICAgICBjb2xJbmRleD0wLFxuICAgKiAgICAgIHZhbHVlPXZhbHVlMjFcbiAgICogMykgY29tcGxleCBmaWVsZCB3aXRoIGNvbGxlY3Rpb24gZmllbGQgd2l0aCBjb21wbGV4IGZpZWxkIHJlZmVyZW5jZTpcbiAgICogICAgICBmb3JtPSB7ICdjb21wbGV4MSc6IHtcbiAgICogICAgICAgICAgICAgICAnY29sbGVjdGlvbjEnOiBbXG4gICAqICAgICAgICAgICAgICAgeyAndmFsdWUnOiB7XG4gICAqICAgICAgICAgICAgICAgICAgICdjb21wbGV4Mic6IHtcbiAgICogICAgICAgICAgICAgICAgICAgICAnc2ltcGxlMSc6ICd2YWx1ZTEnLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICdjb21wbGV4Myc6IHtcbiAgICogICAgICAgICAgICAgICAgICAgICAgICdjb21wbGV4NCc6IHtcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgJ3NpbXBsZTInOiAndmFsdWUxMidcbiAgICogICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICogICAgICAgICAgICAgICAgICAgICB9XG4gICAqICAgICAgICAgICAgICAgICAgIH1cbiAgICogICAgICAgICAgICAgICAgIH1cbiAgICogICAgICAgICAgICAgICB9LFxuICAgKiAgICAgICAgICAgICAgIHsgJ3ZhbHVlJzoge1xuICAgKiAgICAgICAgICAgICAgICAgICAnY29tcGxleDInOiB7XG4gICAqICAgICAgICAgICAgICAgICAgICAgJ3NpbXBsZTEnOiAndmFsdWUyJyxcbiAgICogICAgICAgICAgICAgICAgICAgICAnY29tcGxleDMnOiB7XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAnY29tcGxleDQnOiB7XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICdzaW1wbGUyJzogJ3ZhbHVlMjEnXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAqICAgICAgICAgICAgICAgICAgICAgfVxuICAgKiAgICAgICAgICAgICAgICAgICB9XG4gICAqICAgICAgICAgICAgICAgICB9XG4gICAqICAgICAgICAgICAgICAgfSxcbiAgICogICAgICAgICAgICAgICB7ICd2YWx1ZSc6IHtcbiAgICogICAgICAgICAgICAgICAgICAgJ2NvbXBsZXgyJzoge1xuICAgKiAgICAgICAgICAgICAgICAgICAgICdzaW1wbGUxJzogJ3ZhbHVlMycsXG4gICAqICAgICAgICAgICAgICAgICAgICAgJ2NvbXBsZXgzJzoge1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgJ2NvbXBsZXg0Jzoge1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAnc2ltcGxlMic6ICd2YWx1ZTMxJ1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgKiAgICAgICAgICAgICAgICAgICAgIH1cbiAgICogICAgICAgICAgICAgICAgICAgfVxuICAgKiAgICAgICAgICAgICAgICAgfVxuICAgKiAgICAgICAgICAgICAgIH1cbiAgICogICAgICAgICAgICAgXX19XG4gICAqICAgICAgZmllbGRLZXk9Y29tcGxleDEuY29sbGVjdGlvbjEuY29tcGxleDIuY29tcGxleDMuY29tcGxleDQuc2ltcGxlMlxuICAgKiAgICAgIGNvbEluZGV4PTIsXG4gICAqICAgICAgdmFsdWU9dmFsdWUyMVxuICAgKiA0KSBjb2xsZWN0aW9uIG9mIGNvbXBsZXggdHlwZXNcbiAgICogICAgICBmb3JtPSB7ICdjb2xsZWN0aW9uMSc6IFtcbiAgICogICAgICAgICAgICAgICB7ICd2YWx1ZSc6IHsnY29tcGxleDEnOiB7XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2ltcGxlMSc6ICd2YWx1ZTExJyxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb21wbGV4Mic6IHtcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbXBsZXgzJzoge1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaW1wbGUyJzogJ3ZhbHVlMTInXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICogICAgICAgICAgICAgICB9LFxuICAgKiAgICAgICAgICAgICAgIHsgJ3ZhbHVlJzogeydjb21wbGV4MSc6IHtcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaW1wbGUxJzogJ3ZhbHVlMjEnLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbXBsZXgyJzoge1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29tcGxleDMnOiB7XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NpbXBsZTInOiAndmFsdWUyMidcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgKiAgICAgICAgICAgICAgIH0sXG4gICAqICAgICAgICAgICAgICAgeyAndmFsdWUnOiB7J2NvbXBsZXgxJzoge1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NpbXBsZTEnOiAndmFsdWUzMScsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29tcGxleDInOiB7XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb21wbGV4Myc6IHtcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2ltcGxlMic6ICd2YWx1ZTMyJ1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICogICAgICAgICAgICAgICB9XG4gICAqICAgICAgICAgICAgIF19XG4gICAqICAgICAgZmllbGRLZXk9Y29sbGVjdGlvbjEuY29tcGxleDEuY29tcGxleDIuY29tcGxleDMuc2ltcGxlMlxuICAgKiAgICAgIGNvbEluZGV4PTJcbiAgICogICAgICB2YWx1ZT12YWx1ZTMyXG4gICAqXG4gICAqIElmIGtleSBpcyBwb2ludGluZyBhdCBhIGNvbXBsZXggb3IgY29sbGVjdGlvbiBsZWFmIChub3Qgc2ltcGxlLCBjb2xsZWN0aW9uIG9mIHNpbXBsZSBvciBtdWx0aXNlbGVjdCB0eXBlcykgdGhlbiB1bmRlZmluZWQgaXMgcmV0dXJuZWQuXG4gICAqIEFsc28gbm8ga2V5IHJlZmVycmluZyBhIGxlYWYgdGhhdCBpcyBjb250YWluZWQgd2l0aGluIGNvbGxlY3Rpb24gd2lsbCBjb250YWluIGluZGV4IG51bWJlci4gVGhlIGluZGV4IGlzIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0byB0aGVcbiAgICogbWV0aG9kLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXRGaWVsZFZhbHVlKGZvcm0sIGZpZWxkS2V5LCBjb2xJbmRleCkge1xuICAgIGNvbnN0IGZpZWxkSWRzID0gZmllbGRLZXkuc3BsaXQoJy4nKTtcbiAgICBjb25zdCBjdXJyZW50RmllbGRJZCA9IGZpZWxkSWRzWzBdO1xuICAgIGNvbnN0IGN1cnJlbnRGb3JtID0gZm9ybVtjdXJyZW50RmllbGRJZF07XG4gICAgaWYgKEZpZWxkc1V0aWxzLmlzTXVsdGlTZWxlY3RWYWx1ZShjdXJyZW50Rm9ybSkpIHtcbiAgICAgIHJldHVybiBmb3JtW2N1cnJlbnRGaWVsZElkICsgRmllbGRzVXRpbHMuTEFCRUxfU1VGRklYXS5qb2luKCcsICcpO1xuICAgIH0gZWxzZSBpZiAoRmllbGRzVXRpbHMuaXNDb2xsZWN0aW9uT2ZTaW1wbGVUeXBlcyhjdXJyZW50Rm9ybSkpIHtcbiAgICAgIHJldHVybiBjdXJyZW50Rm9ybS5tYXAoZmllbGRWYWx1ZSA9PiBmaWVsZFZhbHVlWyd2YWx1ZSddKS5qb2luKCcsICcpO1xuICAgIH0gZWxzZSBpZiAoRmllbGRzVXRpbHMuaXNDb2xsZWN0aW9uKGN1cnJlbnRGb3JtKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRWYWx1ZShjdXJyZW50Rm9ybVtjb2xJbmRleF1bJ3ZhbHVlJ10sIGZpZWxkSWRzLnNsaWNlKDEpLmpvaW4oJy4nKSwgY29sSW5kZXgpO1xuICAgIH0gZWxzZSBpZiAoRmllbGRzVXRpbHMuaXNOb25FbXB0eU9iamVjdChjdXJyZW50Rm9ybSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEZpZWxkVmFsdWUoY3VycmVudEZvcm0sIGZpZWxkSWRzLnNsaWNlKDEpLmpvaW4oJy4nKSwgY29sSW5kZXgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gY3VycmVudEZvcm07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEEgcmVjdXJzaXZlIG1ldGhvZCB0byByZW1vdmUgYW55dGhpbmcgd2l0aCBhIGAtLS1MQUJFTGAgc3VmZml4LlxuICAgKiBAcGFyYW0gZGF0YSBUaGUgZGF0YSB0byByZWN1cnNlIHRocm91Z2ggYW5kIHJlbW92ZSBNdWx0aVNlbGVjdCBsYWJlbHMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlbW92ZU11bHRpU2VsZWN0TGFiZWxzKGRhdGE6IGFueSk6IHZvaWQge1xuICAgIGlmIChkYXRhICYmIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGRhdGEpIHtcbiAgICAgICAgICBGb3JtVmFsdWVTZXJ2aWNlLnJlbW92ZU11bHRpU2VsZWN0TGFiZWxzKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBrZXlzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKGRhdGEpO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgICAgLy8gSGF2ZSB3ZSBmb3VuZCBvbmUgYSBNdWx0aVNlbGVjdCBsYWJlbD9cbiAgICAgICAgICBpZiAoa2V5LmluZGV4T2YoRmllbGRzVXRpbHMuTEFCRUxfU1VGRklYKSA+IDApIHtcbiAgICAgICAgICAgIC8vIElmIHNvLCByZW1vdmUgaXQuXG4gICAgICAgICAgICBkZWxldGUgZGF0YVtrZXldO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBGb3JtVmFsdWVTZXJ2aWNlLnJlbW92ZU11bHRpU2VsZWN0TGFiZWxzKGRhdGFba2V5XSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgaXNSZWFkT25seShmaWVsZDogQ2FzZUZpZWxkKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZpZWxkLmRpc3BsYXlfY29udGV4dCA/IGZpZWxkLmRpc3BsYXlfY29udGV4dC50b1VwcGVyQ2FzZSgpID09PSAnUkVBRE9OTFknIDogZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBpc09wdGlvbmFsKGZpZWxkOiBDYXNlRmllbGQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmllbGQuZGlzcGxheV9jb250ZXh0ID8gZmllbGQuZGlzcGxheV9jb250ZXh0LnRvVXBwZXJDYXNlKCkgPT09ICdPUFRJT05BTCcgOiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGlzTGFiZWwoZmllbGQ6IENhc2VGaWVsZCk6IGJvb2xlYW4ge1xuICAgIGlmIChmaWVsZC5maWVsZF90eXBlKSB7XG4gICAgICByZXR1cm4gZmllbGQuZmllbGRfdHlwZS50eXBlID09PSAnTGFiZWwnO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgaXNFbXB0eURhdGEoZGF0YTogb2JqZWN0KTogYm9vbGVhbiB7XG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGxldCBhbGxFbXB0eSA9IHRydWU7XG4gICAgICBmb3IgKGNvbnN0IHByb3Agb2YgT2JqZWN0LmtleXMoZGF0YSkpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBkYXRhW3Byb3BdO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAodHlwZW9mICh2YWx1ZSkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBhbGxFbXB0eSA9IGFsbEVtcHR5ICYmIHRoaXMuaXNFbXB0eURhdGEodmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhbGxFbXB0eSA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFsbEVtcHR5O1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG91bGQgd2UgY2xlYXIgb3V0IG9wdGlvbmFsLCBlbXB0eSwgY29tcGxleCBvYmplY3RzP1xuICAgKiBAcGFyYW0gY2xlYXJFbXB0eSBGYWxzZSBwcm9wZXJ0eSBpZiB3ZSBzaW1wbHkgd2FudCB0byBza2lwIGl0LlxuICAgKiBAcGFyYW0gZGF0YSBUaGUgZGF0YSB0byBhc3Nlc3MgZm9yIFwiZW1wdGluZXNzXCIuXG4gICAqIEBwYXJhbSBmaWVsZCBUaGUgQ2FzZUZpZWxkIHRoYXQgd2lsbCB0ZWxsIHVzIGlmIHRoaXMgaXMgb3B0aW9uYWwuXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBjbGVhck9wdGlvbmFsRW1wdHkoY2xlYXJFbXB0eTogYm9vbGVhbiwgZGF0YTogb2JqZWN0LCBmaWVsZDogQ2FzZUZpZWxkKTogYm9vbGVhbiB7XG4gICAgaWYgKGNsZWFyRW1wdHkpIHtcbiAgICAgIHJldHVybiBGb3JtVmFsdWVTZXJ2aWNlLmlzT3B0aW9uYWwoZmllbGQpICYmIEZvcm1WYWx1ZVNlcnZpY2UuaXNFbXB0eURhdGEoZGF0YSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZmllbGRUeXBlU2FuaXRpc2VyOiBGaWVsZFR5cGVTYW5pdGlzZXIpIHtcbiAgfVxuXG4gIHB1YmxpYyBzYW5pdGlzZShyYXdWYWx1ZTogb2JqZWN0KTogb2JqZWN0IHtcbiAgICByZXR1cm4gdGhpcy5zYW5pdGlzZU9iamVjdChyYXdWYWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2FuaXRpc2VDYXNlUmVmZXJlbmNlKHJlZmVyZW5jZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBzdHJpcCBub24gZGlnaXRzXG4gICAgY29uc3Qgczogc3RyaW5nID0gcmVmZXJlbmNlLnJlcGxhY2UoL1tcXERdL2csICcnKTtcbiAgICBpZiAocy5sZW5ndGggPiAxNikge1xuICAgICAgcmV0dXJuIHMuc3Vic3RyKHMubGVuZ3RoIC0gMTYsIDE2KTtcbiAgICB9XG4gICAgcmV0dXJuIHM7XG4gIH1cblxuICBwdWJsaWMgZmlsdGVyQ3VycmVudFBhZ2VGaWVsZHMoY2FzZUZpZWxkczogQ2FzZUZpZWxkW10sIGVkaXRGb3JtOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IGNsb25lRm9ybSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZWRpdEZvcm0pKTtcbiAgICBPYmplY3Qua2V5cyhjbG9uZUZvcm1bJ2RhdGEnXSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBpZiAoY2FzZUZpZWxkcy5maW5kSW5kZXgoKGVsZW1lbnQpID0+IGVsZW1lbnQuaWQgPT09IGtleSkgPCAwKSB7XG4gICAgICAgIGRlbGV0ZSBjbG9uZUZvcm1bJ2RhdGEnXVtrZXldO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjbG9uZUZvcm07XG4gIH1cblxuICBwdWJsaWMgc2FuaXRpc2VEeW5hbWljTGlzdHMoY2FzZUZpZWxkczogQ2FzZUZpZWxkW10sIGVkaXRGb3JtOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmZpZWxkVHlwZVNhbml0aXNlci5zYW5pdGlzZUxpc3RzKGNhc2VGaWVsZHMsIGVkaXRGb3JtLmRhdGEpO1xuICB9XG5cbiAgcHJpdmF0ZSBzYW5pdGlzZU9iamVjdChyYXdPYmplY3Q6IG9iamVjdCk6IG9iamVjdCB7XG4gICAgaWYgKCFyYXdPYmplY3QpIHtcbiAgICAgIHJldHVybiByYXdPYmplY3Q7XG4gICAgfVxuXG4gICAgbGV0IHNhbml0aXNlZE9iamVjdCA9IHt9O1xuICAgIGNvbnN0IGRvY3VtZW50RmllbGRLZXlzID0gWydkb2N1bWVudF91cmwnLCAnZG9jdW1lbnRfYmluYXJ5X3VybCcsICdkb2N1bWVudF9maWxlbmFtZSddO1xuICAgIGZvciAoY29uc3Qga2V5IGluIHJhd09iamVjdCkge1xuICAgICAgLy8gSWYgdGhlIGtleSBpcyBvbmUgb2YgZG9jdW1lbnRGaWVsZEtleXMsIGl0IG1lYW5zIHRoZSBmaWVsZCBpcyBvZiBEb2N1bWVudCB0eXBlLiBJZiB0aGUgdmFsdWUgb2YgYW55IG9mIHRoZXNlXG4gICAgICAvLyBwcm9wZXJ0aWVzIGlzIG51bGwsIHRoZSBlbnRpcmUgc2FuaXRpc2VkIG9iamVjdCB0byBiZSByZXR1cm5lZCBzaG91bGQgYmUgbnVsbFxuICAgICAgaWYgKGRvY3VtZW50RmllbGRLZXlzLmluZGV4T2Yoa2V5KSA+IC0xICYmIHJhd09iamVjdFtrZXldID09PSBudWxsKSB7XG4gICAgICAgIHNhbml0aXNlZE9iamVjdCA9IG51bGw7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSBlbHNlIGlmICgnQ2FzZVJlZmVyZW5jZScgPT09IGtleSkge1xuICAgICAgICBzYW5pdGlzZWRPYmplY3Rba2V5XSA9IHRoaXMuc2FuaXRpc2VWYWx1ZSh0aGlzLnNhbml0aXNlQ2FzZVJlZmVyZW5jZShTdHJpbmcocmF3T2JqZWN0W2tleV0pKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzYW5pdGlzZWRPYmplY3Rba2V5XSA9IHRoaXMuc2FuaXRpc2VWYWx1ZShyYXdPYmplY3Rba2V5XSk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNhbml0aXNlZE9iamVjdFtrZXldKSkge1xuICAgICAgICAgIC8vIElmIHRoZSAnc2FuaXRpc2VkJyBhcnJheSBpcyBlbXB0eSwgd2hlcmVhcyB0aGUgb3JpZ2luYWwgYXJyYXkgaGFkIDEgb3IgbW9yZSBpdGVtc1xuICAgICAgICAgIC8vIGRlbGV0ZSB0aGUgcHJvcGVydHkgZnJvbSB0aGUgc2FuYXRpc2VkIG9iamVjdFxuICAgICAgICAgIGlmIChzYW5pdGlzZWRPYmplY3Rba2V5XS5sZW5ndGggPT09IDAgJiYgcmF3T2JqZWN0W2tleV0ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZGVsZXRlIHNhbml0aXNlZE9iamVjdFtrZXldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc2FuaXRpc2VkT2JqZWN0O1xuICB9XG5cbiAgcHJpdmF0ZSBzYW5pdGlzZUFycmF5KHJhd0FycmF5OiBhbnlbXSk6IGFueVtdIHtcbiAgICBpZiAoIXJhd0FycmF5KSB7XG4gICAgICByZXR1cm4gcmF3QXJyYXk7XG4gICAgfVxuXG4gICAgcmF3QXJyYXkuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgIGlmIChpdGVtICYmIGl0ZW0uaGFzT3duUHJvcGVydHkoJ3ZhbHVlJykpIHtcbiAgICAgICAgaXRlbS52YWx1ZSA9IHRoaXMuc2FuaXRpc2VWYWx1ZShpdGVtLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIEZpbHRlciB0aGUgYXJyYXkgdG8gZW5zdXJlIG9ubHkgdHJ1dGh5IHZhbHVlcyBhcmUgcmV0dXJuZWQ7IGRvdWJsZS1iYW5nIG9wZXJhdG9yIHJldHVybnMgdGhlIGJvb2xlYW4gdHJ1ZS9mYWxzZVxuICAgIC8vIGFzc29jaWF0aW9uIG9mIGEgdmFsdWUuIEluIGFkZGl0aW9uLCBpZiB0aGUgYXJyYXkgY29udGFpbnMgaXRlbXMgd2l0aCBhIFwidmFsdWVcIiBvYmplY3QgcHJvcGVydHksIHJldHVybiBvbmx5XG4gICAgLy8gdGhvc2Ugd2hvc2UgdmFsdWUgb2JqZWN0IGNvbnRhaW5zIG5vbi1lbXB0eSB2YWx1ZXMsIGluY2x1ZGluZyBmb3IgYW55IGRlc2NlbmRhbnQgb2JqZWN0c1xuICAgIHJldHVybiByYXdBcnJheVxuICAgICAgLmZpbHRlcihpdGVtID0+ICEhaXRlbSlcbiAgICAgIC5maWx0ZXIoaXRlbSA9PiBpdGVtLmhhc093blByb3BlcnR5KCd2YWx1ZScpID8gRmllbGRzVXRpbHMuY29udGFpbnNOb25FbXB0eVZhbHVlcyhpdGVtLnZhbHVlKSA6IHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzYW5pdGlzZVZhbHVlKHJhd1ZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHJhd1ZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuc2FuaXRpc2VBcnJheShyYXdWYWx1ZSk7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0eXBlb2YgcmF3VmFsdWUpIHtcbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHJldHVybiB0aGlzLnNhbml0aXNlT2JqZWN0KHJhd1ZhbHVlKTtcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIHJldHVybiByYXdWYWx1ZS50cmltKCk7XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICByZXR1cm4gU3RyaW5nKHJhd1ZhbHVlKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiByYXdWYWx1ZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY2xlYXJOb25DYXNlRmllbGRzKGRhdGE6IG9iamVjdCwgY2FzZUZpZWxkczogQ2FzZUZpZWxkW10pIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFLZXkgaW4gZGF0YSkge1xuICAgICAgaWYgKCFjYXNlRmllbGRzLmZpbmQoY2YgPT4gY2YuaWQgPT09IGRhdGFLZXkpKSB7XG4gICAgICAgIGRlbGV0ZSBkYXRhW2RhdGFLZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFRPRE8gcmVmYWN0b3Igc28gdGhhdCB0aGlzIGFuZCByZW1vdmUgdW5uZWNlc3NhcnkgZmllbGRzIGhhdmUgYSBjb21tb24gaXRlcmF0b3IgdGhhdCBhcHBsaWVzIGZ1bmN0aW9ucyB0byBlYWNoIG5vZGUgdmlzaXRlZFxuICBwdWJsaWMgcmVtb3ZlTnVsbExhYmVscyhkYXRhOiBvYmplY3QsIGNhc2VGaWVsZHM6IENhc2VGaWVsZFtdKSB7XG4gICAgaWYgKGRhdGEgJiYgY2FzZUZpZWxkcyAmJiBjYXNlRmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIGNoZWNrIGlmIHRoZXJlIGlzIGFueSBkYXRhIGF0IHRoZSB0b3AgbGV2ZWwgb2YgdGhlIGZvcm0gdGhhdCdzIG5vdCBpbiB0aGUgY2FzZUZpZWxkc1xuICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBjYXNlRmllbGRzKSB7XG4gICAgICAgIGlmIChmaWVsZC5maWVsZF90eXBlKSB7XG4gICAgICAgICAgc3dpdGNoIChmaWVsZC5maWVsZF90eXBlLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ0xhYmVsJzpcbiAgICAgICAgICAgICAgLy8gRGVsZXRlIGFueSBsYWJlbHMgdGhhdCBhcmUgbnVsbFxuICAgICAgICAgICAgICBpZiAoKGRhdGFbZmllbGQuaWRdID09PSBudWxsKSB8fCAoZGF0YVtmaWVsZC5pZF0gPT09ICcnKSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBkYXRhW2ZpZWxkLmlkXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0NvbXBsZXgnOlxuICAgICAgICAgICAgICAvLyBSZWN1cnNlIGFuZCByZW1vdmUgYW55dGhpbmcgdW5uZWNlc3NhcnkgZnJvbSB3aXRoaW4gYSBjb21wbGV4IGZpZWxkLlxuICAgICAgICAgICAgICB0aGlzLnJlbW92ZU51bGxMYWJlbHMoZGF0YVtmaWVsZC5pZF0sIGZpZWxkLmZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0NvbGxlY3Rpb24nOlxuICAgICAgICAgICAgICAvLyBHZXQgaG9sZCBvZiB0aGUgY29sbGVjdGlvbi5cbiAgICAgICAgICAgICAgY29uc3QgY29sbGVjdGlvbiA9IGRhdGFbZmllbGQuaWRdO1xuICAgICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBhY3R1YWxseSBoYXZlIGEgY29sbGVjdGlvbiB0byB3b3JrIHdpdGguXG4gICAgICAgICAgICAgIGlmIChjb2xsZWN0aW9uICYmIEFycmF5LmlzQXJyYXkoY29sbGVjdGlvbikpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY29sbGVjdGlvbiBvZiBjb21wbGV4IG9iamVjdCwgd2UgbmVlZCB0byBpdGVyYXRlIHRocm91Z2hcbiAgICAgICAgICAgICAgICAvLyBhbmQgY2xlYXIgdGhlbSBvdXQuXG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkLmZpZWxkX3R5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLnR5cGUgPT09ICdDb21wbGV4Jykge1xuICAgICAgICAgICAgICAgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBlbGVtZW50cyBhbmQgcmVtb3ZlIGFueSB1bm5lY2Vzc2FyeSBmaWVsZHMgd2l0aGluLlxuICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGNvbGxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVOdWxsTGFiZWxzKGl0ZW0sIGZpZWxkLmZpZWxkX3R5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVOdWxsTGFiZWxzKGl0ZW0udmFsdWUsIGZpZWxkLmZpZWxkX3R5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8gVE9ETyByZWZhY3RvciBzbyB0aGF0IHRoaXMgYW5kIHJlbW92ZSB1bm5lY2Vzc2FyeSBmaWVsZHMgaGF2ZSBhIGNvbW1vbiBpdGVyYXRvciB0aGF0IGFwcGxpZXMgZnVuY3Rpb25zIHRvIGVhY2ggbm9kZSB2aXNpdGVkXG4gIHB1YmxpYyByZW1vdmVFbXB0eURvY3VtZW50cyhkYXRhOiBvYmplY3QsIGNhc2VGaWVsZHM6IENhc2VGaWVsZFtdKSB7XG4gICAgaWYgKGRhdGEgJiYgY2FzZUZpZWxkcyAmJiBjYXNlRmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIGNoZWNrIGlmIHRoZXJlIGlzIGFueSBkYXRhIGF0IHRoZSB0b3AgbGV2ZWwgb2YgdGhlIGZvcm0gdGhhdCdzIG5vdCBpbiB0aGUgY2FzZUZpZWxkc1xuICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBjYXNlRmllbGRzKSB7XG4gICAgICAgIGlmIChmaWVsZC5maWVsZF90eXBlKSB7XG4gICAgICAgICAgc3dpdGNoIChmaWVsZC5maWVsZF90eXBlLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ0NvbXBsZXgnOlxuICAgICAgICAgICAgICAvLyBSZWN1cnNlIGFuZCByZW1vdmUgYW55IGVtcHR5IGRvY3VtZW50cyBmcm9tIHdpdGhpbiBhIGNvbXBsZXggZmllbGQuXG4gICAgICAgICAgICAgIHRoaXMucmVtb3ZlRW1wdHlEb2N1bWVudHMoZGF0YVtmaWVsZC5pZF0sIGZpZWxkLmZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0NvbGxlY3Rpb24nOlxuICAgICAgICAgICAgICAvLyBHZXQgaG9sZCBvZiB0aGUgY29sbGVjdGlvbi5cbiAgICAgICAgICAgICAgY29uc3QgY29sbGVjdGlvbiA9IGRhdGFbZmllbGQuaWRdO1xuICAgICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBhY3R1YWxseSBoYXZlIGEgY29sbGVjdGlvbiB0byB3b3JrIHdpdGguXG4gICAgICAgICAgICAgIGlmIChjb2xsZWN0aW9uICYmIEFycmF5LmlzQXJyYXkoY29sbGVjdGlvbikpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgY29sbGVjdGlvbiBvZiBjb21wbGV4IG9iamVjdCwgd2UgbmVlZCB0byBpdGVyYXRlIHRocm91Z2hcbiAgICAgICAgICAgICAgICAvLyBhbmQgY2xlYXIgb3V0IGVtcHR5IGRvY3VtZW50c1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZC5maWVsZF90eXBlLmNvbGxlY3Rpb25fZmllbGRfdHlwZS50eXBlID09PSAnQ29tcGxleCcpIHtcbiAgICAgICAgICAgICAgICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgZWxlbWVudHMgYW5kIHJlbW92ZSBhbnkgZW1wdHkgZG9jdW1lbnRzIHdpdGhpbi5cbiAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBjb2xsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRW1wdHlEb2N1bWVudHMoaXRlbSwgZmllbGQuZmllbGRfdHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUVtcHR5RG9jdW1lbnRzKGl0ZW0udmFsdWUsIGZpZWxkLmZpZWxkX3R5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdEb2N1bWVudCc6XG4gICAgICAgICAgICAgIC8vIEVuc3VyZSB0aGlzIGlzIGV4ZWN1dGVkIG9ubHkgaWYgdGhlIERvY3VtZW50IGZpZWxkIGlzIE5PVCBoaWRkZW4gYW5kIGlzIGVtcHR5IG9mIGRhdGE7IGhpZGRlbiBEb2N1bWVudFxuICAgICAgICAgICAgICAvLyBmaWVsZHMgYXJlIGhhbmRsZWQgYnkgdGhlIGZpbHRlclJhd0Zvcm1WYWx1ZXMoKSBmdW5jdGlvbiBpbiBDYXNlRWRpdFN1Ym1pdCBjb21wb25lbnRcbiAgICAgICAgICAgICAgaWYgKGZpZWxkLmhpZGRlbiAhPT0gdHJ1ZSAmJiBGb3JtVmFsdWVTZXJ2aWNlLmlzRW1wdHlEYXRhKGRhdGFbZmllbGQuaWRdKSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBkYXRhW2ZpZWxkLmlkXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogQ2xlYXIgb3V0IHVubmVjZXNzYXJ5IGZpZWxkcyBmcm9tIGEgZGF0YSBvYmplY3QsIGJhc2VkIG9uIGFuIGFycmF5IG9mIENhc2VGaWVsZHMuXG4gICAqIFRoaXMgbWV0aG9kIGlzIHJlY3Vyc2l2ZSBhbmQgd2lsbCBjYWxsIGl0c2VsZiBpZiBpdCBlbmNvdW50ZXJzIHBhcnRpY3VsYXIgZmllbGQgdHlwZXMuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIFRoZSBvYmplY3QgdG8gYmUgdGlkaWVkIHVwLlxuICAgKiBAcGFyYW0gY2FzZUZpZWxkcyBUaGUgQ2FzZUZpZWxkcyB0aGF0IG5lZWQgdG8gYmUgY2xlYW5lZCB1cC5cbiAgICogQHBhcmFtIGNsZWFyRW1wdHkgV2hldGhlciBvciBub3Qgd2Ugc2hvdWxkIGNsZWFyIG91dCBlbXB0eSwgb3B0aW9uYWwsIGNvbXBsZXggb2JqZWN0cy5cbiAgICogQHBhcmFtIGNsZWFyTm9uQ2FzZSBXaGV0aGVyIG9yIG5vdCB3ZSBzaG91bGQgY2xlYXIgb3V0IG5vbi1jYXNlIGZpZWxkcyBhdCB0aGUgdG9wIGxldmVsLlxuICAgKi9cbiAgcHVibGljIHJlbW92ZVVubmVjZXNzYXJ5RmllbGRzKGRhdGE6IG9iamVjdCwgY2FzZUZpZWxkczogQ2FzZUZpZWxkW10sIGNsZWFyRW1wdHkgPSBmYWxzZSwgY2xlYXJOb25DYXNlID0gZmFsc2UsXG4gICAgZnJvbVByZXZpb3VzUGFnZSA9IGZhbHNlLCBjdXJyZW50UGFnZUNhc2VGaWVsZHMgPSBbXSwgaXNDYWxsZWRGcm9tU3VibWl0ID0gZmFsc2UpOiB2b2lkIHtcbiAgICBpZiAoZGF0YSAmJiBjYXNlRmllbGRzICYmIGNhc2VGaWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gY2hlY2sgaWYgdGhlcmUgaXMgYW55IGRhdGEgYXQgdGhlIHRvcCBsZXZlbCBvZiB0aGUgZm9ybSB0aGF0J3Mgbm90IGluIHRoZSBjYXNlRmllbGRzXG4gICAgICBpZiAoY2xlYXJOb25DYXNlKSB7XG4gICAgICAgIHRoaXMuY2xlYXJOb25DYXNlRmllbGRzKGRhdGEsIGNhc2VGaWVsZHMpO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBjYXNlRmllbGRzKSB7XG4gICAgICAgIGlmICghRm9ybVZhbHVlU2VydmljZS5pc0xhYmVsKGZpZWxkKSAmJiBGb3JtVmFsdWVTZXJ2aWNlLmlzUmVhZE9ubHkoZmllbGQpKSB7XG4gICAgICAgICAgLy8gUmV0YWluIGFueXRoaW5nIHRoYXQgaXMgcmVhZG9ubHkgYW5kIG5vdCBhIGxhYmVsLlxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWVsZC5oaWRkZW4gPT09IHRydWUgJiYgZmllbGQuZGlzcGxheV9jb250ZXh0ICE9PSAnSElEREVOJyAmJiBmaWVsZC5kaXNwbGF5X2NvbnRleHQgIT09ICdISURERU5fVEVNUCcgJiYgZmllbGQuaWQgIT09ICdjYXNlTGlua3MnKSB7XG4gICAgICAgICAgLy8gRGVsZXRlIGFueXRoaW5nIHRoYXQgaXMgaGlkZGVuICh0aGF0IGlzIE5PVCByZWFkb25seSksIGFuZCB0aGF0XG4gICAgICAgICAgLy8gaGFzbid0IGhhZCBpdHMgZGlzcGxheV9jb250ZXh0IG92ZXJyaWRkZW4gdG8gbWFrZSBpdCBoaWRkZW4uXG4gICAgICAgICAgLy8gaW4gZXZlbnQgc3VibWlzc2lvbiBjaGVjayBmb3IgZmllbGQncyByZXRhaW5faGlkZGVuX3ZhbHVlIGRlZm9yZSBkZWxldGlvblxuICAgICAgICAgIGlmKChpc0NhbGxlZEZyb21TdWJtaXQgJiYgIWZpZWxkLnJldGFpbl9oaWRkZW5fdmFsdWUpIHx8ICFpc0NhbGxlZEZyb21TdWJtaXQpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBkYXRhW2ZpZWxkLmlkXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZmllbGQuZmllbGRfdHlwZSkge1xuICAgICAgICAgIHN3aXRjaCAoZmllbGQuZmllbGRfdHlwZS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlICdMYWJlbCc6XG4gICAgICAgICAgICAgIC8vIERlbGV0ZSBhbnkgbGFiZWxzLlxuICAgICAgICAgICAgICBkZWxldGUgZGF0YVtmaWVsZC5pZF07XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnRG9jdW1lbnQnOlxuICAgICAgICAgICAgICBpZiAoRm9ybVZhbHVlU2VydmljZS5pc0VtcHR5RGF0YShkYXRhW2ZpZWxkLmlkXSkpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgZGF0YVtmaWVsZC5pZF07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdDb21wbGV4JzpcbiAgICAgICAgICAgICAgdGhpcy5yZW1vdmVVbm5lY2Vzc2FyeUZpZWxkcyhkYXRhW2ZpZWxkLmlkXSwgZmllbGQuZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcywgY2xlYXJFbXB0eSwgZmFsc2UsIGZhbHNlLCBbXSwgaXNDYWxsZWRGcm9tU3VibWl0KTtcbiAgICAgICAgICAgICAgLy8gQWxzbyByZW1vdmUgYW55IG9wdGlvbmFsIGNvbXBsZXggb2JqZWN0cyB0aGF0IGFyZSBjb21wbGV0ZWx5IGVtcHR5LlxuICAgICAgICAgICAgICAvLyBFVUktNDI0NDogUml0ZXNoJ3MgZml4LCBwYXNzaW5nIHRydWUgaW5zdGVhZCBvZiBjbGVhckVtcHR5LlxuICAgICAgICAgICAgICBpZiAoRm9ybVZhbHVlU2VydmljZS5jbGVhck9wdGlvbmFsRW1wdHkodHJ1ZSwgZGF0YVtmaWVsZC5pZF0sIGZpZWxkKSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBkYXRhW2ZpZWxkLmlkXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoZGF0YVtmaWVsZC5pZF0gJiYgRm9ybVZhbHVlU2VydmljZS5pc0VtcHR5RGF0YShkYXRhW2ZpZWxkLmlkXSkgJiYgZnJvbVByZXZpb3VzUGFnZVxuICAgICAgICAgICAgICAgICYmIGN1cnJlbnRQYWdlQ2FzZUZpZWxkcy5maW5kSW5kZXgoKGNGaWVsZDogYW55KSA9PiBjRmllbGQuaWQgPT09IGZpZWxkLmlkKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgZGF0YVtmaWVsZC5pZF07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdDb2xsZWN0aW9uJzpcbiAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIHZhbGlkIGNvbGxlY3Rpb24gZGF0YVxuICAgICAgICAgICAgICB0aGlzLnJlbW92ZUludmFsaWRDb2xsZWN0aW9uRGF0YShkYXRhLCBmaWVsZCk7XG4gICAgICAgICAgICAgIC8vIEdldCBob2xkIG9mIHRoZSBjb2xsZWN0aW9uLlxuICAgICAgICAgICAgICBjb25zdCBjb2xsZWN0aW9uID0gZGF0YVtmaWVsZC5pZF07XG4gICAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlIGFjdHVhbGx5IGhhdmUgYSBjb2xsZWN0aW9uIHRvIHdvcmsgd2l0aC5cbiAgICAgICAgICAgICAgaWYgKGNvbGxlY3Rpb24gJiYgQXJyYXkuaXNBcnJheShjb2xsZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBjb2xsZWN0aW9uIG9mIGNvbXBsZXggb2JqZWN0LCB3ZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaFxuICAgICAgICAgICAgICAgIC8vIGFuZCBjbGVhciB0aGVtIG91dC5cbiAgICAgICAgICAgICAgICBpZiAoZmllbGQuZmllbGRfdHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUudHlwZSA9PT0gJ0NvbXBsZXgnKSB7XG4gICAgICAgICAgICAgICAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIGVsZW1lbnRzIGFuZCByZW1vdmUgYW55IHVubmVjZXNzYXJ5IGZpZWxkcyB3aXRoaW4uXG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgY29sbGVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZVVubmVjZXNzYXJ5RmllbGRzKGl0ZW0sIGZpZWxkLmZpZWxkX3R5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzLCBjbGVhckVtcHR5LCBmYWxzZSwgZmFsc2UsIFtdLCBpc0NhbGxlZEZyb21TdWJtaXQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZVVubmVjZXNzYXJ5RmllbGRzKGl0ZW0udmFsdWUsIGZpZWxkLmZpZWxkX3R5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBbXSwgaXNDYWxsZWRGcm9tU3VibWl0KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDbGVhciBvdXQgYW55IE11bHRpU2VsZWN0IGxhYmVscy5cbiAgICBGb3JtVmFsdWVTZXJ2aWNlLnJlbW92ZU11bHRpU2VsZWN0TGFiZWxzKGRhdGEpO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZUludmFsaWRDb2xsZWN0aW9uRGF0YShkYXRhOiBvYmplY3QsIGZpZWxkOiBDYXNlRmllbGQpIHtcbiAgICBpZiAoZGF0YVtmaWVsZC5pZF0gJiYgZGF0YVtmaWVsZC5pZF0ubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCBvYmpDb2xsZWN0aW9uIG9mIGRhdGFbZmllbGQuaWRdKSB7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhvYmpDb2xsZWN0aW9uKS5sZW5ndGggPT09IDEgJiYgT2JqZWN0LmtleXMob2JqQ29sbGVjdGlvbikuaW5kZXhPZignaWQnKSA+IC0xKSB7XG4gICAgICAgICAgZGF0YVtmaWVsZC5pZF0gPSBbXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYW55IGVtcHR5IGNvbGxlY3Rpb24gZmllbGRzIHdoZXJlIGEgdmFsdWUgb2YgZ3JlYXRlciB0aGFuIHplcm8gaXMgc3BlY2lmaWVkIGluIHRoZSBmaWVsZCdzIHtAbGluayBGaWVsZFR5cGV9XG4gICAqIGBtaW5gIGF0dHJpYnV0ZS5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgVGhlIG9iamVjdCB0cmVlIG9mIGZvcm0gdmFsdWVzIG9uIHdoaWNoIHRvIHBlcmZvcm0gdGhlIHJlbW92YWxcbiAgICogQHBhcmFtIGNhc2VGaWVsZHMgVGhlIGxpc3Qgb2YgdW5kZXJseWluZyB7QGxpbmsgQ2FzZUZpZWxkfSBkb21haW4gbW9kZWwgb2JqZWN0cyBmb3IgZWFjaCBmaWVsZFxuICAgKi9cbiAgcHVibGljIHJlbW92ZUVtcHR5Q29sbGVjdGlvbnNXaXRoTWluVmFsaWRhdGlvbihkYXRhOiBvYmplY3QsIGNhc2VGaWVsZHM6IENhc2VGaWVsZFtdKTogdm9pZCB7XG4gICAgaWYgKGRhdGEgJiYgY2FzZUZpZWxkcyAmJiBjYXNlRmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgY2FzZUZpZWxkcykge1xuICAgICAgICBpZiAoZmllbGQuZmllbGRfdHlwZS50eXBlID09PSAnQ29sbGVjdGlvbicgJiYgZmllbGQuZmllbGRfdHlwZS5taW4gPiAwICYmIGRhdGFbZmllbGQuaWRdICYmXG4gICAgICAgICAgQXJyYXkuaXNBcnJheShkYXRhW2ZpZWxkLmlkXSkgJiYgZGF0YVtmaWVsZC5pZF0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgZGVsZXRlIGRhdGFbZmllbGQuaWRdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBmcm9tIHRoZSB0b3AgbGV2ZWwgb2YgdGhlIGZvcm0gZGF0YSBhbnkgY2FzZSBmaWVsZHMgb2YgYSBnaXZlbiB0eXBlIG9yIHR5cGVzIHRoYXQgYXJlIG5vdCBpbnRlbmRlZCB0byBiZVxuICAgKiBwZXJzaXN0ZWQuIFRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgdG8gcmVtb3ZlIFwic3BlY2lhbFwiIGNhc2UgZmllbGQgdHlwZXMgZnJvbSB0aGUgZGF0YSwgc3VjaCBhcyBGbGFnTGF1bmNoZXIgb3JcbiAgICogQ29tcG9uZW50TGF1bmNoZXIgZmllbGRzLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSBUaGUgb2JqZWN0IHRyZWUgb2YgZm9ybSB2YWx1ZXMgb24gd2hpY2ggdG8gcGVyZm9ybSB0aGUgcmVtb3ZhbCBhdCB0aGUgdG9wIGxldmVsIG9ubHlcbiAgICogQHBhcmFtIGNhc2VGaWVsZHMgVGhlIGxpc3Qgb2YgdW5kZXJseWluZyB7QGxpbmsgQ2FzZUZpZWxkfSBkb21haW4gbW9kZWwgb2JqZWN0cyBmb3IgZWFjaCBmaWVsZFxuICAgKiBAcGFyYW0gdHlwZXMgQW4gYXJyYXkgb2Ygb25lIG9yIG1vcmUgZmllbGQgdHlwZXNcbiAgICovXG4gIHB1YmxpYyByZW1vdmVDYXNlRmllbGRzT2ZUeXBlKGRhdGE6IG9iamVjdCwgY2FzZUZpZWxkczogQ2FzZUZpZWxkW10sIHR5cGVzOiBGaWVsZFR5cGVFbnVtW10pOiB2b2lkIHtcbiAgICBpZiAoZGF0YSAmJiBjYXNlRmllbGRzICYmIGNhc2VGaWVsZHMubGVuZ3RoID4gMCAmJiB0eXBlcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBjYXNlRmllbGRzVG9SZW1vdmUgPSBjYXNlRmllbGRzLmZpbHRlcihjYXNlRmllbGQgPT4gRmllbGRzVXRpbHMuaXNDYXNlRmllbGRPZlR5cGUoY2FzZUZpZWxkLCB0eXBlcykpO1xuICAgICAgZm9yIChjb25zdCBjYXNlRmllbGQgb2YgY2FzZUZpZWxkc1RvUmVtb3ZlKSB7XG4gICAgICAgIGRlbGV0ZSBkYXRhW2Nhc2VGaWVsZC5pZF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlLXBvcHVsYXRlIHRoZSBmb3JtIGRhdGEgZnJvbSB0aGUgdmFsdWVzIGhlbGQgaW4gdGhlIGNhc2UgZmllbGRzLiBUaGlzIGlzIG5lY2Vzc2FyeSBpbiBvcmRlciB0byBwaWNrIHVwLCBmb3JcbiAgICogZWFjaCBgRmxhZ3NgIGZpZWxkLCBhbnkgZmxhZyBkZXRhaWxzIGRhdGEgbm90IGN1cnJlbnRseSBwcmVzZW50LlxuICAgKlxuICAgKiBgRmxhZ3NgIGZpZWxkcyBtYXkgYmUgY29udGFpbmVkIGluIG90aGVyIGBDYXNlRmllbGRgIGluc3RhbmNlcywgZWl0aGVyIGFzIGEgc3ViLWZpZWxkIG9mIGEgQ29tcGxleCBmaWVsZCwgb3JcbiAgICogZmllbGRzIGluIGEgY29sbGVjdGlvbiAob3Igc3ViLWZpZWxkcyBvZiBDb21wbGV4IGZpZWxkcyBpbiBhIGNvbGxlY3Rpb24pLiBUaGVyZWZvcmUsIGl0IGlzIG5lY2Vzc2FyeSB0b1xuICAgKiBpdGVyYXRlIHRocm91Z2ggYWxsIGBDYXNlRmllbGRgcy5cbiAgICpcbiAgICogQHBhcmFtIGRhdGEgVGhlIG9iamVjdCB0cmVlIG9mIGZvcm0gdmFsdWVzIG9uIHdoaWNoIHRvIHBlcmZvcm0gdGhlIGRhdGEgcG9wdWxhdGlvblxuICAgKiBAcGFyYW0gY2FzZUZpZWxkcyBUaGUgbGlzdCBvZiB1bmRlcmx5aW5nIHtAbGluayBDYXNlRmllbGR9IGRvbWFpbiBtb2RlbCBvYmplY3RzIGZvciBlYWNoIGZpZWxkXG4gICAqL1xuICBwdWJsaWMgcmVwb3B1bGF0ZUZvcm1EYXRhRnJvbUNhc2VGaWVsZFZhbHVlcyhkYXRhOiBvYmplY3QsIGNhc2VGaWVsZHM6IENhc2VGaWVsZFtdKTogdm9pZCB7XG4gICAgaWYgKGRhdGEgJiYgY2FzZUZpZWxkcyAmJiBjYXNlRmllbGRzLmxlbmd0aCA+IDAgJiZcbiAgICAgIGNhc2VGaWVsZHMuZmluZEluZGV4KGNhc2VGaWVsZCA9PiBGaWVsZHNVdGlscy5pc0Nhc2VGaWVsZE9mVHlwZShjYXNlRmllbGQsIFsnRmxhZ0xhdW5jaGVyJ10pKSA+IC0xKSB7XG4gICAgICAvLyBJZ25vcmUgdGhlIEZsYWdMYXVuY2hlciBDYXNlRmllbGQgYmVjYXVzZSBpdCBkb2VzIG5vdCBob2xkIGFueSB2YWx1ZXNcbiAgICAgIGNhc2VGaWVsZHMuZmlsdGVyKGNhc2VGaWVsZCA9PiAhRmllbGRzVXRpbHMuaXNDYXNlRmllbGRPZlR5cGUoY2FzZUZpZWxkLCBbJ0ZsYWdMYXVuY2hlciddKSlcbiAgICAgICAgLmZvckVhY2goY2FzZUZpZWxkID0+IHtcbiAgICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgZGF0YSBvYmplY3QgaXMgcG9wdWxhdGVkIGZvciBhbGwgQ2FzZUZpZWxkIGtleXMgaXQgY29udGFpbnMsIGV2ZW4gaWYgZm9yIGEgZ2l2ZW5cbiAgICAgICAgICAvLyBDYXNlRmllbGQga2V5LCB0aGUgZGF0YSBvYmplY3QgaGFzIGEgZmFsc3kgdmFsdWUgKGhlbmNlIHRoZSB1c2Ugb2YgaGFzT3duUHJvcGVydHkoKSBmb3IgdGhlIGNoZWNrIGJlbG93KVxuICAgICAgICAgIC8vIFNlZSBodHRwczovL3Rvb2xzLmhtY3RzLm5ldC9qaXJhL2Jyb3dzZS9FVUktNzM3N1xuICAgICAgICAgIGlmIChkYXRhLmhhc093blByb3BlcnR5KGNhc2VGaWVsZC5pZCkgJiYgY2FzZUZpZWxkLnZhbHVlKSB7XG4gICAgICAgICAgICAvLyBDcmVhdGUgbmV3IG9iamVjdCBmb3IgdGhlIENhc2VGaWVsZCBJRCB3aXRoaW4gdGhlIGRhdGEgb2JqZWN0LCBpZiBuZWNlc3NhcnkgKGkuZS4gaWYgdGhlIGN1cnJlbnQgdmFsdWVcbiAgICAgICAgICAgIC8vIGlzIGZhbHN5KVxuICAgICAgICAgICAgaWYgKCFkYXRhW2Nhc2VGaWVsZC5pZF0pIHtcbiAgICAgICAgICAgICAgZGF0YVtjYXNlRmllbGQuaWRdID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDb3B5IGFsbCB2YWx1ZXMgZnJvbSB0aGUgY29ycmVzcG9uZGluZyBDYXNlRmllbGQ7IHRoaXMgZW5zdXJlcyBhbGwgbmVzdGVkIGZsYWcgZGF0YSAoZm9yIGV4YW1wbGUsIGFcbiAgICAgICAgICAgIC8vIEZsYWdzIGZpZWxkIHdpdGhpbiBhIENvbXBsZXggZmllbGQgb3IgYSBjb2xsZWN0aW9uIG9mIENvbXBsZXggZmllbGRzKSBpcyBjb3BpZWQgYWNyb3NzXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhkYXRhW2Nhc2VGaWVsZC5pZF0pLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgaWYgKGNhc2VGaWVsZC52YWx1ZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAgICAgZGF0YVtjYXNlRmllbGQuaWRdW2tleV0gPSBjYXNlRmllbGQudmFsdWVba2V5XTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUG9wdWxhdGUgdGhlIGxpbmtlZCBjYXNlcyBmcm9tIHRoZSBkYXRhIGhlbGQgaW4gaXRzIGNvcnJlc3BvbmRpbmcgQ2FzZUZpZWxkLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSBUaGUgb2JqZWN0IHRyZWUgb2YgZm9ybSB2YWx1ZXMgb24gd2hpY2ggdG8gcGVyZm9ybSB0aGUgZGF0YSBwb3B1bGF0aW9uXG4gICAqIEBwYXJhbSBjYXNlRmllbGRzIFRoZSBsaXN0IG9mIHVuZGVybHlpbmcge0BsaW5rIENhc2VGaWVsZH0gZG9tYWluIG1vZGVsIG9iamVjdHMgZm9yIGVhY2ggZmllbGRcbiAgICovXG4gIHB1YmxpYyBwb3B1bGF0ZUxpbmtlZENhc2VzRGV0YWlsc0Zyb21DYXNlRmllbGRzKGRhdGE6IG9iamVjdCwgY2FzZUZpZWxkczogQ2FzZUZpZWxkW10pOiB2b2lkIHtcbiAgICBpZiAoZGF0YSAmJiBjYXNlRmllbGRzICYmIGNhc2VGaWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgY2FzZUZpZWxkcy5maWx0ZXIoY2FzZUZpZWxkID0+ICFGaWVsZHNVdGlscy5pc0Nhc2VGaWVsZE9mVHlwZShjYXNlRmllbGQsIFsnQ29tcG9uZW50TGF1bmNoZXInXSkpXG4gICAgICAgIC5mb3JFYWNoKGNhc2VGaWVsZCA9PiB7XG4gICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoJ2Nhc2VMaW5rcycpICYmIGNhc2VGaWVsZC52YWx1ZSkge1xuICAgICAgICAgICAgZGF0YVtjYXNlRmllbGQuaWRdID0gY2FzZUZpZWxkLnZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iXX0=
|