@hmcts/ccd-case-ui-toolkit 7.0.9 → 7.0.10-exui-1184-rc1

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.
@@ -1,6 +1,7 @@
1
1
  import { Component, EventEmitter, Input, Output } from '@angular/core';
2
2
  import { FormGroup } from '@angular/forms';
3
3
  import { tap } from 'rxjs/operators';
4
+ import { compressToUTF16, decompressFromUTF16 } from 'lz-string';
4
5
  import { FieldsUtils } from '../../services/fields/fields.utils';
5
6
  import { JurisdictionService } from '../../services/jurisdiction/jurisdiction.service';
6
7
  import { OrderService } from '../../services/order/order.service';
@@ -80,8 +81,18 @@ export class SearchFiltersComponent {
80
81
  if (this.jurisdictions.length === 1 || jurisdiction) {
81
82
  this.selected.jurisdiction = this.jurisdictions[0];
82
83
  if (jurisdiction) {
83
- const localStorageJurisdiction = JSON.parse(jurisdiction);
84
- this.selected.jurisdiction = this.jurisdictions.filter(j => j.id === localStorageJurisdiction.id)[0];
84
+ try {
85
+ console.log('jurisdiction retrieved from local storage len = ' + jurisdiction.length);
86
+ const localStorageJurisdiction = JSON.parse(decompressFromUTF16(jurisdiction));
87
+ if (localStorageJurisdiction) {
88
+ this.selected.jurisdiction = this.jurisdictions
89
+ .filter(j => j.id === localStorageJurisdiction.id)[0];
90
+ }
91
+ }
92
+ catch (e) {
93
+ console.log("Failed to retrieve jurisdiction from local storage");
94
+ this.windowService.setLocalStorage(JURISDICTION_LOC_STORAGE, null);
95
+ }
85
96
  }
86
97
  this.onJurisdictionIdChange();
87
98
  }
@@ -106,6 +117,7 @@ export class SearchFiltersComponent {
106
117
  this.onReset.emit();
107
118
  }
108
119
  apply() {
120
+ console.log("Search filters apply");
109
121
  this.selected.formGroup = this.formGroup;
110
122
  this.selected.page = 1;
111
123
  this.selected.metadataFields = this.getMetadataFields();
@@ -119,7 +131,15 @@ export class SearchFiltersComponent {
119
131
  populateValuesInLocalStorage() {
120
132
  this.windowService.setLocalStorage(FORM_GROUP_VALUE_LOC_STORAGE, JSON.stringify(this.selected.formGroup.value));
121
133
  this.windowService.setLocalStorage(META_FIELDS_LOC_STORAGE, JSON.stringify(this.selected.metadataFields));
122
- this.windowService.setLocalStorage(JURISDICTION_LOC_STORAGE, JSON.stringify(this.selected.jurisdiction));
134
+ try {
135
+ const compJurisd = compressToUTF16(JSON.stringify(this.selected.jurisdiction));
136
+ this.windowService.setLocalStorage(JURISDICTION_LOC_STORAGE, compJurisd);
137
+ console.log('jurisdiction compressed into local storage, length = ' + compJurisd.length);
138
+ }
139
+ catch (e) {
140
+ console.log('Could not store jurisdiction in local storage');
141
+ this.windowService.setLocalStorage(JURISDICTION_LOC_STORAGE, null);
142
+ }
123
143
  if (this.selected.caseType) {
124
144
  this.windowService.setLocalStorage(CASE_TYPE_LOC_STORAGE, JSON.stringify(this.selected.caseType));
125
145
  }
@@ -303,4 +323,4 @@ SearchFiltersComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: Sear
303
323
  }], onJurisdiction: [{
304
324
  type: Output
305
325
  }] }); })();
306
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWZpbHRlcnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL3NlYXJjaC1maWx0ZXJzL3NlYXJjaC1maWx0ZXJzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9zZWFyY2gtZmlsdGVycy9zZWFyY2gtZmlsdGVycy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFNckMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDckUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNDQUFzQyxDQUFDOzs7Ozs7O0lDTC9ELGtDQUFzRDtJQUFBLFlBQXlCOztJQUFBLGlCQUFTOzs7SUFBaEQsOEJBQWE7SUFBQyxlQUF5QjtJQUF6QixxREFBeUI7OztJQVEvRSxrQ0FBd0U7SUFBQSxZQUEwQjs7SUFBQSxpQkFBUzs7O0lBQWxELCtCQUFjO0lBQUMsZUFBMEI7SUFBMUIsc0RBQTBCOzs7O0lBTWxHLDhCQUFpRSwwQkFBQTtJQUM4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ZUFBa0M7UUFBbEMscUVBQWtDO1FBRXJELGVBQW1DO1FBQW5DLG1EQUFtQztRQUV2QyxlQUFnQjtRQUFoQiwyQ0FBZ0I7UUFJSSxlQUErQjtRQUEvQiwwREFBK0I7UUFDbkUsZUFBcUM7UUFBckMsdURBQXFDLGtDQUFBO1FBR3BCLGVBQWdDO1FBQWhDLDJEQUFnQztRQUlyQixlQUF3QztRQUF4Qyw2REFBd0M7UUFTdEUsZUFBZ0Q7UUFBaEQsa0VBQWdELGlEQUFBO1FBQ2hELG9FQUFpRDtRQUN2RCxlQUNGO1FBREUsZ0VBQ0Y7UUFFUSxlQUF1QztRQUF2Qyw4REFBdUM7UUFBQyxvRUFBaUQ7UUFDL0YsZUFDRjtRQURFLGdFQUNGOzt1RkRYVyxzQkFBc0I7Y0FMbEMsU0FBUzsyQkFDRSxvQkFBb0I7eUpBV3ZCLGFBQWE7a0JBRG5CLEtBQUs7WUFJQyxTQUFTO2tCQURmLEtBQUs7WUFJQyxPQUFPO2tCQURiLE1BQU07WUFJQSxPQUFPO2tCQURiLE1BQU07WUFJQSxjQUFjO2tCQURwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBDYXNlRmllbGQgfSBmcm9tICcuLi8uLi9kb21haW4vZGVmaW5pdGlvbi9jYXNlLWZpZWxkLm1vZGVsJztcbmltcG9ydCB7IENhc2VTdGF0ZSB9IGZyb20gJy4uLy4uL2RvbWFpbi9kZWZpbml0aW9uL2Nhc2Utc3RhdGUubW9kZWwnO1xuaW1wb3J0IHsgQ2FzZVR5cGVMaXRlIH0gZnJvbSAnLi4vLi4vZG9tYWluL2RlZmluaXRpb24vY2FzZS10eXBlLWxpdGUubW9kZWwnO1xuaW1wb3J0IHsgSnVyaXNkaWN0aW9uIH0gZnJvbSAnLi4vLi4vZG9tYWluL2RlZmluaXRpb24vanVyaXNkaWN0aW9uLm1vZGVsJztcbmltcG9ydCB7IEZpZWxkc1V0aWxzIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmllbGRzL2ZpZWxkcy51dGlscyc7XG5pbXBvcnQgeyBKdXJpc2RpY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvanVyaXNkaWN0aW9uL2p1cmlzZGljdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IE9yZGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL29yZGVyL29yZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2VhcmNoU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NlYXJjaC9zZWFyY2guc2VydmljZSc7XG5pbXBvcnQgeyBXaW5kb3dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvd2luZG93L3dpbmRvdy5zZXJ2aWNlJztcbmltcG9ydCB7IFNlYXJjaElucHV0IH0gZnJvbSAnLi9kb21haW4vc2VhcmNoLWlucHV0Lm1vZGVsJztcblxuY29uc3QgSlVSSVNESUNUSU9OX0xPQ19TVE9SQUdFID0gJ3NlYXJjaC1qdXJpc2RpY3Rpb24nO1xuY29uc3QgTUVUQV9GSUVMRFNfTE9DX1NUT1JBR0UgPSAnc2VhcmNoLW1ldGFkYXRhLWZpZWxkcyc7XG5jb25zdCBGT1JNX0dST1VQX1ZBTFVFX0xPQ19TVE9SQUdFID0gJ3NlYXJjaC1mb3JtLWdyb3VwLXZhbHVlJztcbmNvbnN0IENBU0VfVFlQRV9MT0NfU1RPUkFHRSA9ICdzZWFyY2gtY2FzZVR5cGUnO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NkLXNlYXJjaC1maWx0ZXJzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlYXJjaC1maWx0ZXJzLmNvbXBvbmVudC5odG1sJyxcbn0pXG5cbmV4cG9ydCBjbGFzcyBTZWFyY2hGaWx0ZXJzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHVibGljIHJlYWRvbmx5IFBBUkFNX0pVUklTRElDVElPTiA9ICdqdXJpc2RpY3Rpb24nO1xuICBwdWJsaWMgcmVhZG9ubHkgUEFSQU1fQ0FTRV9UWVBFID0gJ2Nhc2UtdHlwZSc7XG4gIHB1YmxpYyByZWFkb25seSBQQVJBTV9DQVNFX1NUQVRFID0gJ2Nhc2Utc3RhdGUnO1xuICBwdWJsaWMgY2FzZUZpZWxkczogQ2FzZUZpZWxkW107XG5cbiAgQElucHV0KClcbiAgcHVibGljIGp1cmlzZGljdGlvbnM6IEp1cmlzZGljdGlvbltdO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhdXRvQXBwbHk6IGJvb2xlYW47XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBvbkFwcGx5OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KClcbiAgcHVibGljIG9uUmVzZXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgb25KdXJpc2RpY3Rpb246IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHB1YmxpYyBzZWFyY2hJbnB1dHM6IFNlYXJjaElucHV0W107XG4gIHB1YmxpYyBzZWFyY2hJbnB1dHNSZWFkeTogYm9vbGVhbjtcblxuICBwdWJsaWMgc2VsZWN0ZWQ6IHtcbiAgICBqdXJpc2RpY3Rpb24/OiBKdXJpc2RpY3Rpb24sXG4gICAgY2FzZVR5cGU/OiBDYXNlVHlwZUxpdGUsXG4gICAgZm9ybUdyb3VwPzogRm9ybUdyb3VwLFxuICAgIGNhc2VTdGF0ZT86IENhc2VTdGF0ZSxcbiAgICBwYWdlPzogbnVtYmVyLFxuICAgIG1ldGFkYXRhRmllbGRzPzogc3RyaW5nW11cbiAgfTtcblxuICBwdWJsaWMgc2VsZWN0ZWRKdXJpc2RpY3Rpb25DYXNlVHlwZXM/OiBDYXNlVHlwZUxpdGVbXTtcblxuICBwdWJsaWMgZm9ybUdyb3VwOiBGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHNlYXJjaFNlcnZpY2U6IFNlYXJjaFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBvcmRlclNlcnZpY2U6IE9yZGVyU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGp1cmlzZGljdGlvblNlcnZpY2U6IEp1cmlzZGljdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB3aW5kb3dTZXJ2aWNlOiBXaW5kb3dTZXJ2aWNlKSB7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZCA9IHt9O1xuICAgIGNvbnN0IGp1cmlzZGljdGlvbiA9IHRoaXMud2luZG93U2VydmljZS5nZXRMb2NhbFN0b3JhZ2UoSlVSSVNESUNUSU9OX0xPQ19TVE9SQUdFKTtcbiAgICBpZiAodGhpcy5qdXJpc2RpY3Rpb25zLmxlbmd0aCA9PT0gMSB8fCBqdXJpc2RpY3Rpb24pIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWQuanVyaXNkaWN0aW9uID0gdGhpcy5qdXJpc2RpY3Rpb25zWzBdO1xuICAgICAgaWYgKGp1cmlzZGljdGlvbikge1xuICAgICAgICBjb25zdCBsb2NhbFN0b3JhZ2VKdXJpc2RpY3Rpb24gPSBKU09OLnBhcnNlKGp1cmlzZGljdGlvbik7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQuanVyaXNkaWN0aW9uID0gdGhpcy5qdXJpc2RpY3Rpb25zLmZpbHRlcihqID0+IGouaWQgPT09IGxvY2FsU3RvcmFnZUp1cmlzZGljdGlvbi5pZClbMF07XG4gICAgICB9XG4gICAgICB0aGlzLm9uSnVyaXNkaWN0aW9uSWRDaGFuZ2UoKTtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkLmZvcm1Hcm91cCA9IHRoaXMuZm9ybUdyb3VwO1xuICAgIHRoaXMuc2VsZWN0ZWQucGFnZSA9IDE7XG4gICAgdGhpcy5zZWxlY3RlZC5tZXRhZGF0YUZpZWxkcyA9IHRoaXMuZ2V0TWV0YWRhdGFGaWVsZHMoKTtcbiAgICB0aGlzLm9uQXBwbHkuZW1pdCh7XG4gICAgICBzZWxlY3RlZDogdGhpcy5zZWxlY3RlZCxcbiAgICAgIHF1ZXJ5UGFyYW1zOiB0aGlzLmdldFF1ZXJ5UGFyYW1zKClcbiAgICB9KTtcblxuICB9XG5cbiAgcHVibGljIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMud2luZG93U2VydmljZS5yZW1vdmVMb2NhbFN0b3JhZ2UoRk9STV9HUk9VUF9WQUxVRV9MT0NfU1RPUkFHRSk7XG4gICAgdGhpcy53aW5kb3dTZXJ2aWNlLnJlbW92ZUxvY2FsU3RvcmFnZShDQVNFX1RZUEVfTE9DX1NUT1JBR0UpO1xuICAgIHRoaXMud2luZG93U2VydmljZS5yZW1vdmVMb2NhbFN0b3JhZ2UoSlVSSVNESUNUSU9OX0xPQ19TVE9SQUdFKTtcbiAgICB0aGlzLndpbmRvd1NlcnZpY2UucmVtb3ZlTG9jYWxTdG9yYWdlKE1FVEFfRklFTERTX0xPQ19TVE9SQUdFKTtcbiAgICB0aGlzLnNlbGVjdGVkID0ge307XG4gICAgaWYgKHRoaXMuanVyaXNkaWN0aW9ucy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWQuanVyaXNkaWN0aW9uID0gdGhpcy5qdXJpc2RpY3Rpb25zWzBdO1xuICAgICAgdGhpcy5vbkp1cmlzZGljdGlvbklkQ2hhbmdlKCk7XG4gICAgfVxuICAgIHRoaXMub25SZXNldC5lbWl0KCk7XG4gIH1cblxuICBwdWJsaWMgYXBwbHkoKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZC5mb3JtR3JvdXAgPSB0aGlzLmZvcm1Hcm91cDtcbiAgICB0aGlzLnNlbGVjdGVkLnBhZ2UgPSAxO1xuICAgIHRoaXMuc2VsZWN0ZWQubWV0YWRhdGFGaWVsZHMgPSB0aGlzLmdldE1ldGFkYXRhRmllbGRzKCk7XG4gICAgdGhpcy5wb3B1bGF0ZVZhbHVlc0luTG9jYWxTdG9yYWdlKCk7XG4gICAgdGhpcy5vbkFwcGx5LmVtaXQoe1xuICAgICAgc2VsZWN0ZWQ6IHRoaXMuc2VsZWN0ZWQsXG4gICAgICBxdWVyeVBhcmFtczogdGhpcy5nZXRRdWVyeVBhcmFtcygpXG4gICAgfSk7XG4gICAgdGhpcy5zZXRGb2N1c1RvVG9wKCk7XG4gIH1cblxuICBwdWJsaWMgcG9wdWxhdGVWYWx1ZXNJbkxvY2FsU3RvcmFnZSgpOiB2b2lkIHtcbiAgICB0aGlzLndpbmRvd1NlcnZpY2Uuc2V0TG9jYWxTdG9yYWdlKEZPUk1fR1JPVVBfVkFMVUVfTE9DX1NUT1JBR0UsXG4gICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGVkLmZvcm1Hcm91cC52YWx1ZSkpO1xuICAgIHRoaXMud2luZG93U2VydmljZS5zZXRMb2NhbFN0b3JhZ2UoTUVUQV9GSUVMRFNfTE9DX1NUT1JBR0UsIEpTT04uc3RyaW5naWZ5KHRoaXMuc2VsZWN0ZWQubWV0YWRhdGFGaWVsZHMpKTtcbiAgICB0aGlzLndpbmRvd1NlcnZpY2Uuc2V0TG9jYWxTdG9yYWdlKEpVUklTRElDVElPTl9MT0NfU1RPUkFHRSwgSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZC5qdXJpc2RpY3Rpb24pKTtcbiAgICBpZiAodGhpcy5zZWxlY3RlZC5jYXNlVHlwZSkge1xuICAgICAgdGhpcy53aW5kb3dTZXJ2aWNlLnNldExvY2FsU3RvcmFnZShDQVNFX1RZUEVfTE9DX1NUT1JBR0UsIEpTT04uc3RyaW5naWZ5KHRoaXMuc2VsZWN0ZWQuY2FzZVR5cGUpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0TWV0YWRhdGFGaWVsZHMoKTogc3RyaW5nW10ge1xuICAgIGlmICh0aGlzLnNlYXJjaElucHV0cykge1xuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoSW5wdXRzXG4gICAgICAgIC5maWx0ZXIoc2VhcmNoSW5wdXQgPT4gc2VhcmNoSW5wdXQuZmllbGQubWV0YWRhdGEgPT09IHRydWUpXG4gICAgICAgIC5tYXAoc2VhcmNoSW5wdXQgPT4gc2VhcmNoSW5wdXQuZmllbGQuaWQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpc1NlYXJjaGFibGUoKTogYm9vbGVhbiB7XG4gICAgbGV0IHJlc3VsdDogYm9vbGVhbjtcbiAgICByZXN1bHQgPSB0aGlzLnNlbGVjdGVkLmp1cmlzZGljdGlvbiAhPT0gdW5kZWZpbmVkICYmIHRoaXMuc2VsZWN0ZWQuanVyaXNkaWN0aW9uICE9PSBudWxsO1xuICAgIHJlc3VsdCA9IHJlc3VsdCAmJiB0aGlzLnNlbGVjdGVkLmNhc2VUeXBlICE9PSB1bmRlZmluZWQgJiYgdGhpcy5zZWxlY3RlZC5jYXNlVHlwZSAhPT0gbnVsbDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHVibGljIGlzU2VhcmNoYWJsZUFuZFNlYXJjaElucHV0c1JlYWR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzU2VhcmNoYWJsZSgpICYmIHRoaXMuc2VhcmNoSW5wdXRzUmVhZHk7XG4gIH1cblxuICBwdWJsaWMgb25KdXJpc2RpY3Rpb25JZENoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkLmNhc2VUeXBlID0gbnVsbDtcbiAgICB0aGlzLmp1cmlzZGljdGlvblNlcnZpY2UuYW5ub3VuY2VTZWxlY3RlZEp1cmlzZGljdGlvbih0aGlzLnNlbGVjdGVkLmp1cmlzZGljdGlvbik7XG4gICAgdGhpcy5zZWxlY3RlZEp1cmlzZGljdGlvbkNhc2VUeXBlcyA9IHRoaXMuc2VsZWN0ZWQuanVyaXNkaWN0aW9uLmNhc2VUeXBlcztcbiAgICB0aGlzLnNlbGVjdENhc2VUeXBlKHRoaXMuc2VsZWN0ZWRKdXJpc2RpY3Rpb25DYXNlVHlwZXMpO1xuICAgIHRoaXMub25KdXJpc2RpY3Rpb24uZW1pdCh0aGlzLnNlbGVjdGVkLmp1cmlzZGljdGlvbik7XG4gIH1cblxuICBwdWJsaWMgb25DYXNlVHlwZUlkQ2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XG4gICAgdGhpcy5zZWFyY2hJbnB1dHNSZWFkeSA9IGZhbHNlO1xuICAgIHRoaXMuc2VhcmNoSW5wdXRzID0gW107XG4gICAgdGhpcy5zZWFyY2hTZXJ2aWNlLmdldFNlYXJjaElucHV0cyhcbiAgICAgIHRoaXMuc2VsZWN0ZWQuanVyaXNkaWN0aW9uLmlkLFxuICAgICAgdGhpcy5zZWxlY3RlZC5jYXNlVHlwZS5pZFxuICAgICkucGlwZShcbiAgICAgIHRhcCgoKSA9PiB0aGlzLnNlYXJjaElucHV0c1JlYWR5ID0gdHJ1ZSlcbiAgICApLnN1YnNjcmliZShzZWFyY2hJbnB1dHMgPT4ge1xuICAgICAgdGhpcy5zZWFyY2hJbnB1dHMgPSBzZWFyY2hJbnB1dHMuc29ydCh0aGlzLm9yZGVyU2VydmljZS5zb3J0QXNjKTtcblxuICAgICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy53aW5kb3dTZXJ2aWNlLmdldExvY2FsU3RvcmFnZShGT1JNX0dST1VQX1ZBTFVFX0xPQ19TVE9SQUdFKTtcbiAgICAgIGxldCBmb3JtVmFsdWVPYmplY3QgPSBudWxsO1xuICAgICAgaWYgKGZvcm1WYWx1ZSkge1xuICAgICAgICBmb3JtVmFsdWVPYmplY3QgPSBKU09OLnBhcnNlKGZvcm1WYWx1ZSk7XG4gICAgICB9XG4gICAgICBzZWFyY2hJbnB1dHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaWYgKGl0ZW0uZmllbGQuZWxlbWVudFBhdGgpIHtcbiAgICAgICAgICBpdGVtLmZpZWxkLmlkID0gYCR7aXRlbS5maWVsZC5pZH0uJHtpdGVtLmZpZWxkLmVsZW1lbnRQYXRofWA7XG4gICAgICAgIH1cbiAgICAgICAgaXRlbS5maWVsZC5sYWJlbCA9IGl0ZW0ubGFiZWw7XG4gICAgICAgIGlmIChmb3JtVmFsdWVPYmplY3QpIHtcbiAgICAgICAgICBpdGVtLmZpZWxkLnZhbHVlID0gZm9ybVZhbHVlT2JqZWN0W2l0ZW0uZmllbGQuaWRdO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZ2V0Q2FzZUZpZWxkcygpO1xuICAgIH0sIGVycm9yID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCdTZWFyY2ggaW5wdXQgZmllbGRzIHJlcXVlc3Qgd2lsbCBiZSBkaXNjYXJkZWQgcmVhc29uOiAnLCBlcnJvci5tZXNzYWdlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBpc0p1cmlzZGljdGlvblNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkLmp1cmlzZGljdGlvbiA9PT0gbnVsbCB8fFxuICAgICAgdGhpcy5zZWxlY3RlZC5qdXJpc2RpY3Rpb24gPT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UXVlcnlQYXJhbXMoKSB7XG4gICAgLy8gU2F2ZSBmaWx0ZXJzIGFzIHF1ZXJ5IHBhcmFtZXRlcnMgZm9yIGN1cnJlbnQgcm91dGVcbiAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHt9O1xuICAgIGlmICh0aGlzLnNlbGVjdGVkLmp1cmlzZGljdGlvbikge1xuICAgICAgcXVlcnlQYXJhbXNbdGhpcy5QQVJBTV9KVVJJU0RJQ1RJT05dID0gdGhpcy5zZWxlY3RlZC5qdXJpc2RpY3Rpb24uaWQ7XG4gICAgfVxuICAgIGlmICh0aGlzLnNlbGVjdGVkLmNhc2VUeXBlKSB7XG4gICAgICBxdWVyeVBhcmFtc1t0aGlzLlBBUkFNX0NBU0VfVFlQRV0gPSB0aGlzLnNlbGVjdGVkLmNhc2VUeXBlLmlkO1xuICAgIH1cbiAgICBpZiAodGhpcy5zZWxlY3RlZC5jYXNlU3RhdGUpIHtcbiAgICAgIHF1ZXJ5UGFyYW1zW3RoaXMuUEFSQU1fQ0FTRV9TVEFURV0gPSB0aGlzLnNlbGVjdGVkLmNhc2VTdGF0ZS5pZDtcbiAgICB9XG4gICAgcmV0dXJuIHF1ZXJ5UGFyYW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3RDYXNlVHlwZShjYXNlVHlwZXM6IENhc2VUeXBlTGl0ZVtdKSB7XG4gICAgaWYgKGNhc2VUeXBlcyAmJiBjYXNlVHlwZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zZWxlY3RlZC5jYXNlVHlwZSA9IGNhc2VUeXBlc1swXTtcbiAgICAgIGNvbnN0IGNhc2VUeXBlID0gdGhpcy53aW5kb3dTZXJ2aWNlLmdldExvY2FsU3RvcmFnZShDQVNFX1RZUEVfTE9DX1NUT1JBR0UpO1xuICAgICAgaWYgKGNhc2VUeXBlKSB7XG4gICAgICAgIGNvbnN0IGNhc2VUeXBlT2JqZWN0ID0gSlNPTi5wYXJzZShjYXNlVHlwZSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNhc2VUeXBlcy5maWx0ZXIoYyA9PiBjLmlkID09PSBjYXNlVHlwZU9iamVjdC5pZCk7XG4gICAgICAgIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCAmJiByZXN1bHQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWQuY2FzZVR5cGUgPSByZXN1bHRbMF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZC5jYXNlVHlwZSA9IGNhc2VUeXBlc1swXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZC5jYXNlVHlwZSA9IGNhc2VUeXBlc1swXTtcbiAgICAgIH1cbiAgICAgIHRoaXMub25DYXNlVHlwZUlkQ2hhbmdlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRGb2N1c1RvVG9wKCkge1xuICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTtcblxuICAgIGNvbnN0IHRvcENvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZWFyY2gtcmVzdWx0LWhlYWRpbmdfX3RleHQnKTtcbiAgICBpZiAodG9wQ29udGFpbmVyKSB7XG4gICAgICB0b3BDb250YWluZXIuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldENhc2VGaWVsZHMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VhcmNoSW5wdXRzKSB7XG4gICAgICB0aGlzLmNhc2VGaWVsZHMgPSB0aGlzLnNlYXJjaElucHV0cy5tYXAoaXRlbSA9PiBGaWVsZHNVdGlscy5jb252ZXJ0VG9DYXNlRmllbGQoaXRlbS5maWVsZCkpO1xuICAgIH1cbiAgfVxufVxuIiwiPGgyIGNsYXNzPVwiaGVhZGluZy1oMlwiIGFyaWEtbGFiZWw9XCJGaWx0ZXJzXCI+e3snRmlsdGVycycgfCBycHhUcmFuc2xhdGV9fTwvaDI+XG48Zm9ybSBjbGFzcz1cImdsb2JhbC1kaXNwbGF5XCI+XG4gIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgc3R5bGU9XCJtYXJnaW4tdG9wOiAxM3B4O1wiPlxuICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIiBmb3I9XCJzLWp1cmlzZGljdGlvblwiPnt7J0p1cmlzZGljdGlvbicgfCBycHhUcmFuc2xhdGV9fSo8L2xhYmVsPlxuICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLTMtNCBjY2QtZHJvcGRvd25cIiBpZD1cInMtanVyaXNkaWN0aW9uXCJcbiAgICAgICAgICAgIG5hbWU9XCJqdXJpc2RpY3Rpb25cIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkLmp1cmlzZGljdGlvblwiIGFyaWEtY29udHJvbHM9XCJzZWFyY2gtcmVzdWx0XCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwib25KdXJpc2RpY3Rpb25JZENoYW5nZSgpXCI+XG4gICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBqIG9mIGp1cmlzZGljdGlvbnNcIiBbbmdWYWx1ZV09XCJqXCI+e3tqLm5hbWUgfCBycHhUcmFuc2xhdGV9fTwvb3B0aW9uPlxuICAgIDwvc2VsZWN0PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCIgZm9yPVwicy1jYXNlLXR5cGVcIj57eydDYXNlIHR5cGUqJyB8IHJweFRyYW5zbGF0ZX19PC9sYWJlbD5cbiAgICA8c2VsZWN0IFtkaXNhYmxlZF09XCJpc0p1cmlzZGljdGlvblNlbGVjdGVkKClcIiBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtMy00IGNjZC1kcm9wZG93blwiXG4gICAgICAgICAgICBpZD1cInMtY2FzZS10eXBlXCIgbmFtZT1cImNhc2UtdHlwZVwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWQuY2FzZVR5cGVcIiBhcmlhLWNvbnRyb2xzPVwic2VhcmNoLXJlc3VsdFwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cIm9uQ2FzZVR5cGVJZENoYW5nZSgpXCI+XG4gICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBjdCBvZiBzZWxlY3RlZEp1cmlzZGljdGlvbkNhc2VUeXBlc1wiIFtuZ1ZhbHVlXT1cImN0XCI+e3tjdC5uYW1lIHwgcnB4VHJhbnNsYXRlfX08L29wdGlvbj5cbiAgICA8L3NlbGVjdD5cbiAgPC9kaXY+XG5cbiAgPG5nLWNvbnRhaW5lciBjY2RDb25kaXRpb25hbFNob3dGb3JtICpuZ0lmPVwiaXNTZWFyY2hhYmxlQW5kU2VhcmNoSW5wdXRzUmVhZHkoKVwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCIgW2NvbnRleHRGaWVsZHNdPVwiY2FzZUZpZWxkc1wiPlxuICAgIDxkaXYgaWQ9XCJkeW5hbWljRmlsdGVyc1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiAqbmdGb3I9XCJsZXQgc2VhcmNoSW5wdXQgb2Ygc2VhcmNoSW5wdXRzXCI+XG4gICAgICAgIDxjY2QtZmllbGQtd3JpdGUgW2Nhc2VGaWVsZF09XCJzZWFyY2hJbnB1dC5maWVsZFwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCIgW2lzRXhwYW5kZWRdPVwidHJ1ZVwiIChrZXl1cC5lbnRlcik9XCJhcHBseSgpXCI+XG4gICAgICAgIDwvY2NkLWZpZWxkLXdyaXRlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxidXR0b24gW2Rpc2FibGVkXT1cIiFpc1NlYXJjaGFibGVBbmRTZWFyY2hJbnB1dHNSZWFkeSgpXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnV0dG9uXCIgKGNsaWNrKT1cImFwcGx5KClcIiAoa2V5dXAuZW50ZXIpPVwiYXBwbHkoKVwiIFt0aXRsZV09XCInQXBwbHkgZmlsdGVyJyB8IHJweFRyYW5zbGF0ZVwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQXBwbHkgZmlsdGVyJyB8IHJweFRyYW5zbGF0ZVwiPlxuICAgIHt7J0FwcGx5JyB8IHJweFRyYW5zbGF0ZX19XG4gIDwvYnV0dG9uPiAmbmJzcDsmbmJzcDsmbmJzcDtcbiAgPGJ1dHRvbiBpZD1cInJlc2V0XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJyZXNldCgpXCIgY2xhc3M9XCJidXR0b24gYnV0dG9uLXNlY29uZGFyeVwiXG4gICAgICAgICAgW3RpdGxlXT1cIidSZXNldCBmaWx0ZXInIHwgcnB4VHJhbnNsYXRlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInUmVzZXQgZmlsdGVyJyB8IHJweFRyYW5zbGF0ZVwiPlxuICAgIHt7J1Jlc2V0JyB8IHJweFRyYW5zbGF0ZX19XG4gIDwvYnV0dG9uPlxuPC9mb3JtPlxuIl19
326
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWZpbHRlcnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9jb21wb25lbnRzL3NlYXJjaC1maWx0ZXJzL3NlYXJjaC1maWx0ZXJzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9zZWFyY2gtZmlsdGVycy9zZWFyY2gtZmlsdGVycy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBQyxNQUFNLFdBQVcsQ0FBQztBQU1oRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDakUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDdkYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7SUNOL0Qsa0NBQXNEO0lBQUEsWUFBeUI7O0lBQUEsaUJBQVM7OztJQUFoRCw4QkFBYTtJQUFDLGVBQXlCO0lBQXpCLHFEQUF5Qjs7O0lBUS9FLGtDQUF3RTtJQUFBLFlBQTBCOztJQUFBLGlCQUFTOzs7SUFBbEQsK0JB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Q0Y7UUFERSxnRUFDRjs7dUZEVlcsc0JBQXNCO2NBTGxDLFNBQVM7MkJBQ0Usb0JBQW9CO3lKQVd2QixhQUFhO2tCQURuQixLQUFLO1lBSUMsU0FBUztrQkFEZixLQUFLO1lBSUMsT0FBTztrQkFEYixNQUFNO1lBSUEsT0FBTztrQkFEYixNQUFNO1lBSUEsY0FBYztrQkFEcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGNvbXByZXNzVG9VVEYxNiwgZGVjb21wcmVzc0Zyb21VVEYxNn0gZnJvbSAnbHotc3RyaW5nJztcblxuaW1wb3J0IHsgQ2FzZUZpZWxkIH0gZnJvbSAnLi4vLi4vZG9tYWluL2RlZmluaXRpb24vY2FzZS1maWVsZC5tb2RlbCc7XG5pbXBvcnQgeyBDYXNlU3RhdGUgfSBmcm9tICcuLi8uLi9kb21haW4vZGVmaW5pdGlvbi9jYXNlLXN0YXRlLm1vZGVsJztcbmltcG9ydCB7IENhc2VUeXBlTGl0ZSB9IGZyb20gJy4uLy4uL2RvbWFpbi9kZWZpbml0aW9uL2Nhc2UtdHlwZS1saXRlLm1vZGVsJztcbmltcG9ydCB7IEp1cmlzZGljdGlvbiB9IGZyb20gJy4uLy4uL2RvbWFpbi9kZWZpbml0aW9uL2p1cmlzZGljdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBGaWVsZHNVdGlscyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZpZWxkcy9maWVsZHMudXRpbHMnO1xuaW1wb3J0IHsgSnVyaXNkaWN0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2p1cmlzZGljdGlvbi9qdXJpc2RpY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBPcmRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9vcmRlci9vcmRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFNlYXJjaFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZWFyY2gvc2VhcmNoLnNlcnZpY2UnO1xuaW1wb3J0IHsgV2luZG93U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3dpbmRvdy93aW5kb3cuc2VydmljZSc7XG5pbXBvcnQgeyBTZWFyY2hJbnB1dCB9IGZyb20gJy4vZG9tYWluL3NlYXJjaC1pbnB1dC5tb2RlbCc7XG5cbmNvbnN0IEpVUklTRElDVElPTl9MT0NfU1RPUkFHRSA9ICdzZWFyY2gtanVyaXNkaWN0aW9uJztcbmNvbnN0IE1FVEFfRklFTERTX0xPQ19TVE9SQUdFID0gJ3NlYXJjaC1tZXRhZGF0YS1maWVsZHMnO1xuY29uc3QgRk9STV9HUk9VUF9WQUxVRV9MT0NfU1RPUkFHRSA9ICdzZWFyY2gtZm9ybS1ncm91cC12YWx1ZSc7XG5jb25zdCBDQVNFX1RZUEVfTE9DX1NUT1JBR0UgPSAnc2VhcmNoLWNhc2VUeXBlJztcbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NjZC1zZWFyY2gtZmlsdGVycycsXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWFyY2gtZmlsdGVycy5jb21wb25lbnQuaHRtbCcsXG59KVxuXG5leHBvcnQgY2xhc3MgU2VhcmNoRmlsdGVyc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHB1YmxpYyByZWFkb25seSBQQVJBTV9KVVJJU0RJQ1RJT04gPSAnanVyaXNkaWN0aW9uJztcbiAgcHVibGljIHJlYWRvbmx5IFBBUkFNX0NBU0VfVFlQRSA9ICdjYXNlLXR5cGUnO1xuICBwdWJsaWMgcmVhZG9ubHkgUEFSQU1fQ0FTRV9TVEFURSA9ICdjYXNlLXN0YXRlJztcbiAgcHVibGljIGNhc2VGaWVsZHM6IENhc2VGaWVsZFtdO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBqdXJpc2RpY3Rpb25zOiBKdXJpc2RpY3Rpb25bXTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgYXV0b0FwcGx5OiBib29sZWFuO1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgb25BcHBseTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBvblJlc2V0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KClcbiAgcHVibGljIG9uSnVyaXNkaWN0aW9uOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBwdWJsaWMgc2VhcmNoSW5wdXRzOiBTZWFyY2hJbnB1dFtdO1xuICBwdWJsaWMgc2VhcmNoSW5wdXRzUmVhZHk6IGJvb2xlYW47XG5cbiAgcHVibGljIHNlbGVjdGVkOiB7XG4gICAganVyaXNkaWN0aW9uPzogSnVyaXNkaWN0aW9uLFxuICAgIGNhc2VUeXBlPzogQ2FzZVR5cGVMaXRlLFxuICAgIGZvcm1Hcm91cD86IEZvcm1Hcm91cCxcbiAgICBjYXNlU3RhdGU/OiBDYXNlU3RhdGUsXG4gICAgcGFnZT86IG51bWJlcixcbiAgICBtZXRhZGF0YUZpZWxkcz86IHN0cmluZ1tdXG4gIH07XG5cbiAgcHVibGljIHNlbGVjdGVkSnVyaXNkaWN0aW9uQ2FzZVR5cGVzPzogQ2FzZVR5cGVMaXRlW107XG5cbiAgcHVibGljIGZvcm1Hcm91cDogRm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBzZWFyY2hTZXJ2aWNlOiBTZWFyY2hTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgb3JkZXJTZXJ2aWNlOiBPcmRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBqdXJpc2RpY3Rpb25TZXJ2aWNlOiBKdXJpc2RpY3Rpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgd2luZG93U2VydmljZTogV2luZG93U2VydmljZSkge1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWQgPSB7fTtcbiAgICBjb25zdCBqdXJpc2RpY3Rpb24gPSB0aGlzLndpbmRvd1NlcnZpY2UuZ2V0TG9jYWxTdG9yYWdlKEpVUklTRElDVElPTl9MT0NfU1RPUkFHRSk7XG4gICAgaWYgKHRoaXMuanVyaXNkaWN0aW9ucy5sZW5ndGggPT09IDEgfHwganVyaXNkaWN0aW9uKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkLmp1cmlzZGljdGlvbiA9IHRoaXMuanVyaXNkaWN0aW9uc1swXTtcbiAgICAgIGlmIChqdXJpc2RpY3Rpb24pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnanVyaXNkaWN0aW9uIHJldHJpZXZlZCBmcm9tIGxvY2FsIHN0b3JhZ2UgbGVuID0gJyArIGp1cmlzZGljdGlvbi5sZW5ndGgpXG4gICAgICAgICAgY29uc3QgbG9jYWxTdG9yYWdlSnVyaXNkaWN0aW9uID0gSlNPTi5wYXJzZShkZWNvbXByZXNzRnJvbVVURjE2KGp1cmlzZGljdGlvbikpO1xuICAgICAgICAgIGlmIChsb2NhbFN0b3JhZ2VKdXJpc2RpY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWQuanVyaXNkaWN0aW9uID0gdGhpcy5qdXJpc2RpY3Rpb25zXG4gICAgICAgICAgICAgIC5maWx0ZXIoaiA9PiBqLmlkID09PSBsb2NhbFN0b3JhZ2VKdXJpc2RpY3Rpb24uaWQpWzBdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwiRmFpbGVkIHRvIHJldHJpZXZlIGp1cmlzZGljdGlvbiBmcm9tIGxvY2FsIHN0b3JhZ2VcIik7XG4gICAgICAgICAgdGhpcy53aW5kb3dTZXJ2aWNlLnNldExvY2FsU3RvcmFnZShKVVJJU0RJQ1RJT05fTE9DX1NUT1JBR0UsIG51bGwpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMub25KdXJpc2RpY3Rpb25JZENoYW5nZSgpO1xuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0ZWQuZm9ybUdyb3VwID0gdGhpcy5mb3JtR3JvdXA7XG4gICAgdGhpcy5zZWxlY3RlZC5wYWdlID0gMTtcbiAgICB0aGlzLnNlbGVjdGVkLm1ldGFkYXRhRmllbGRzID0gdGhpcy5nZXRNZXRhZGF0YUZpZWxkcygpO1xuICAgIHRoaXMub25BcHBseS5lbWl0KHtcbiAgICAgIHNlbGVjdGVkOiB0aGlzLnNlbGVjdGVkLFxuICAgICAgcXVlcnlQYXJhbXM6IHRoaXMuZ2V0UXVlcnlQYXJhbXMoKVxuICAgIH0pO1xuXG4gIH1cblxuICBwdWJsaWMgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy53aW5kb3dTZXJ2aWNlLnJlbW92ZUxvY2FsU3RvcmFnZShGT1JNX0dST1VQX1ZBTFVFX0xPQ19TVE9SQUdFKTtcbiAgICB0aGlzLndpbmRvd1NlcnZpY2UucmVtb3ZlTG9jYWxTdG9yYWdlKENBU0VfVFlQRV9MT0NfU1RPUkFHRSk7XG4gICAgdGhpcy53aW5kb3dTZXJ2aWNlLnJlbW92ZUxvY2FsU3RvcmFnZShKVVJJU0RJQ1RJT05fTE9DX1NUT1JBR0UpO1xuICAgIHRoaXMud2luZG93U2VydmljZS5yZW1vdmVMb2NhbFN0b3JhZ2UoTUVUQV9GSUVMRFNfTE9DX1NUT1JBR0UpO1xuICAgIHRoaXMuc2VsZWN0ZWQgPSB7fTtcbiAgICBpZiAodGhpcy5qdXJpc2RpY3Rpb25zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdGhpcy5zZWxlY3RlZC5qdXJpc2RpY3Rpb24gPSB0aGlzLmp1cmlzZGljdGlvbnNbMF07XG4gICAgICB0aGlzLm9uSnVyaXNkaWN0aW9uSWRDaGFuZ2UoKTtcbiAgICB9XG4gICAgdGhpcy5vblJlc2V0LmVtaXQoKTtcbiAgfVxuXG4gIHB1YmxpYyBhcHBseSgpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZyhcIlNlYXJjaCBmaWx0ZXJzIGFwcGx5XCIpO1xuICAgIHRoaXMuc2VsZWN0ZWQuZm9ybUdyb3VwID0gdGhpcy5mb3JtR3JvdXA7XG4gICAgdGhpcy5zZWxlY3RlZC5wYWdlID0gMTtcbiAgICB0aGlzLnNlbGVjdGVkLm1ldGFkYXRhRmllbGRzID0gdGhpcy5nZXRNZXRhZGF0YUZpZWxkcygpO1xuICAgIHRoaXMucG9wdWxhdGVWYWx1ZXNJbkxvY2FsU3RvcmFnZSgpO1xuICAgIHRoaXMub25BcHBseS5lbWl0KHtcbiAgICAgIHNlbGVjdGVkOiB0aGlzLnNlbGVjdGVkLFxuICAgICAgcXVlcnlQYXJhbXM6IHRoaXMuZ2V0UXVlcnlQYXJhbXMoKVxuICAgIH0pO1xuICAgIHRoaXMuc2V0Rm9jdXNUb1RvcCgpO1xuICB9XG5cbiAgcHVibGljIHBvcHVsYXRlVmFsdWVzSW5Mb2NhbFN0b3JhZ2UoKTogdm9pZCB7XG4gICAgdGhpcy53aW5kb3dTZXJ2aWNlLnNldExvY2FsU3RvcmFnZShGT1JNX0dST1VQX1ZBTFVFX0xPQ19TVE9SQUdFLFxuICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZC5mb3JtR3JvdXAudmFsdWUpKTtcbiAgICB0aGlzLndpbmRvd1NlcnZpY2Uuc2V0TG9jYWxTdG9yYWdlKE1FVEFfRklFTERTX0xPQ19TVE9SQUdFLCBKU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGVkLm1ldGFkYXRhRmllbGRzKSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbXBKdXJpc2QgPSBjb21wcmVzc1RvVVRGMTYoSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZC5qdXJpc2RpY3Rpb24pKTtcbiAgICAgIHRoaXMud2luZG93U2VydmljZS5zZXRMb2NhbFN0b3JhZ2UoSlVSSVNESUNUSU9OX0xPQ19TVE9SQUdFLCBjb21wSnVyaXNkKTtcbiAgICAgIGNvbnNvbGUubG9nKCdqdXJpc2RpY3Rpb24gY29tcHJlc3NlZCBpbnRvIGxvY2FsIHN0b3JhZ2UsIGxlbmd0aCA9ICcgKyBjb21wSnVyaXNkLmxlbmd0aCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5sb2coJ0NvdWxkIG5vdCBzdG9yZSBqdXJpc2RpY3Rpb24gaW4gbG9jYWwgc3RvcmFnZScpO1xuICAgICAgdGhpcy53aW5kb3dTZXJ2aWNlLnNldExvY2FsU3RvcmFnZShKVVJJU0RJQ1RJT05fTE9DX1NUT1JBR0UsIG51bGwpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zZWxlY3RlZC5jYXNlVHlwZSkge1xuICAgICAgdGhpcy53aW5kb3dTZXJ2aWNlLnNldExvY2FsU3RvcmFnZShDQVNFX1RZUEVfTE9DX1NUT1JBR0UsIEpTT04uc3RyaW5naWZ5KHRoaXMuc2VsZWN0ZWQuY2FzZVR5cGUpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0TWV0YWRhdGFGaWVsZHMoKTogc3RyaW5nW10ge1xuICAgIGlmICh0aGlzLnNlYXJjaElucHV0cykge1xuICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoSW5wdXRzXG4gICAgICAgIC5maWx0ZXIoc2VhcmNoSW5wdXQgPT4gc2VhcmNoSW5wdXQuZmllbGQubWV0YWRhdGEgPT09IHRydWUpXG4gICAgICAgIC5tYXAoc2VhcmNoSW5wdXQgPT4gc2VhcmNoSW5wdXQuZmllbGQuaWQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpc1NlYXJjaGFibGUoKTogYm9vbGVhbiB7XG4gICAgbGV0IHJlc3VsdDogYm9vbGVhbjtcbiAgICByZXN1bHQgPSB0aGlzLnNlbGVjdGVkLmp1cmlzZGljdGlvbiAhPT0gdW5kZWZpbmVkICYmIHRoaXMuc2VsZWN0ZWQuanVyaXNkaWN0aW9uICE9PSBudWxsO1xuICAgIHJlc3VsdCA9IHJlc3VsdCAmJiB0aGlzLnNlbGVjdGVkLmNhc2VUeXBlICE9PSB1bmRlZmluZWQgJiYgdGhpcy5zZWxlY3RlZC5jYXNlVHlwZSAhPT0gbnVsbDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHVibGljIGlzU2VhcmNoYWJsZUFuZFNlYXJjaElucHV0c1JlYWR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzU2VhcmNoYWJsZSgpICYmIHRoaXMuc2VhcmNoSW5wdXRzUmVhZHk7XG4gIH1cblxuICBwdWJsaWMgb25KdXJpc2RpY3Rpb25JZENoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkLmNhc2VUeXBlID0gbnVsbDtcbiAgICB0aGlzLmp1cmlzZGljdGlvblNlcnZpY2UuYW5ub3VuY2VTZWxlY3RlZEp1cmlzZGljdGlvbih0aGlzLnNlbGVjdGVkLmp1cmlzZGljdGlvbik7XG4gICAgdGhpcy5zZWxlY3RlZEp1cmlzZGljdGlvbkNhc2VUeXBlcyA9IHRoaXMuc2VsZWN0ZWQuanVyaXNkaWN0aW9uLmNhc2VUeXBlcztcbiAgICB0aGlzLnNlbGVjdENhc2VUeXBlKHRoaXMuc2VsZWN0ZWRKdXJpc2RpY3Rpb25DYXNlVHlwZXMpO1xuICAgIHRoaXMub25KdXJpc2RpY3Rpb24uZW1pdCh0aGlzLnNlbGVjdGVkLmp1cmlzZGljdGlvbik7XG4gIH1cblxuICBwdWJsaWMgb25DYXNlVHlwZUlkQ2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XG4gICAgdGhpcy5zZWFyY2hJbnB1dHNSZWFkeSA9IGZhbHNlO1xuICAgIHRoaXMuc2VhcmNoSW5wdXRzID0gW107XG4gICAgdGhpcy5zZWFyY2hTZXJ2aWNlLmdldFNlYXJjaElucHV0cyhcbiAgICAgIHRoaXMuc2VsZWN0ZWQuanVyaXNkaWN0aW9uLmlkLFxuICAgICAgdGhpcy5zZWxlY3RlZC5jYXNlVHlwZS5pZFxuICAgICkucGlwZShcbiAgICAgIHRhcCgoKSA9PiB0aGlzLnNlYXJjaElucHV0c1JlYWR5ID0gdHJ1ZSlcbiAgICApLnN1YnNjcmliZShzZWFyY2hJbnB1dHMgPT4ge1xuICAgICAgdGhpcy5zZWFyY2hJbnB1dHMgPSBzZWFyY2hJbnB1dHMuc29ydCh0aGlzLm9yZGVyU2VydmljZS5zb3J0QXNjKTtcblxuICAgICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy53aW5kb3dTZXJ2aWNlLmdldExvY2FsU3RvcmFnZShGT1JNX0dST1VQX1ZBTFVFX0xPQ19TVE9SQUdFKTtcbiAgICAgIGxldCBmb3JtVmFsdWVPYmplY3QgPSBudWxsO1xuICAgICAgaWYgKGZvcm1WYWx1ZSkge1xuICAgICAgICBmb3JtVmFsdWVPYmplY3QgPSBKU09OLnBhcnNlKGZvcm1WYWx1ZSk7XG4gICAgICB9XG4gICAgICBzZWFyY2hJbnB1dHMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgaWYgKGl0ZW0uZmllbGQuZWxlbWVudFBhdGgpIHtcbiAgICAgICAgICBpdGVtLmZpZWxkLmlkID0gYCR7aXRlbS5maWVsZC5pZH0uJHtpdGVtLmZpZWxkLmVsZW1lbnRQYXRofWA7XG4gICAgICAgIH1cbiAgICAgICAgaXRlbS5maWVsZC5sYWJlbCA9IGl0ZW0ubGFiZWw7XG4gICAgICAgIGlmIChmb3JtVmFsdWVPYmplY3QpIHtcbiAgICAgICAgICBpdGVtLmZpZWxkLnZhbHVlID0gZm9ybVZhbHVlT2JqZWN0W2l0ZW0uZmllbGQuaWRdO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuZ2V0Q2FzZUZpZWxkcygpO1xuICAgIH0sIGVycm9yID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCdTZWFyY2ggaW5wdXQgZmllbGRzIHJlcXVlc3Qgd2lsbCBiZSBkaXNjYXJkZWQgcmVhc29uOiAnLCBlcnJvci5tZXNzYWdlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBpc0p1cmlzZGljdGlvblNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkLmp1cmlzZGljdGlvbiA9PT0gbnVsbCB8fFxuICAgICAgdGhpcy5zZWxlY3RlZC5qdXJpc2RpY3Rpb24gPT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UXVlcnlQYXJhbXMoKSB7XG4gICAgLy8gU2F2ZSBmaWx0ZXJzIGFzIHF1ZXJ5IHBhcmFtZXRlcnMgZm9yIGN1cnJlbnQgcm91dGVcbiAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHt9O1xuICAgIGlmICh0aGlzLnNlbGVjdGVkLmp1cmlzZGljdGlvbikge1xuICAgICAgcXVlcnlQYXJhbXNbdGhpcy5QQVJBTV9KVVJJU0RJQ1RJT05dID0gdGhpcy5zZWxlY3RlZC5qdXJpc2RpY3Rpb24uaWQ7XG4gICAgfVxuICAgIGlmICh0aGlzLnNlbGVjdGVkLmNhc2VUeXBlKSB7XG4gICAgICBxdWVyeVBhcmFtc1t0aGlzLlBBUkFNX0NBU0VfVFlQRV0gPSB0aGlzLnNlbGVjdGVkLmNhc2VUeXBlLmlkO1xuICAgIH1cbiAgICBpZiAodGhpcy5zZWxlY3RlZC5jYXNlU3RhdGUpIHtcbiAgICAgIHF1ZXJ5UGFyYW1zW3RoaXMuUEFSQU1fQ0FTRV9TVEFURV0gPSB0aGlzLnNlbGVjdGVkLmNhc2VTdGF0ZS5pZDtcbiAgICB9XG4gICAgcmV0dXJuIHF1ZXJ5UGFyYW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3RDYXNlVHlwZShjYXNlVHlwZXM6IENhc2VUeXBlTGl0ZVtdKSB7XG4gICAgaWYgKGNhc2VUeXBlcyAmJiBjYXNlVHlwZXMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zZWxlY3RlZC5jYXNlVHlwZSA9IGNhc2VUeXBlc1swXTtcbiAgICAgIGNvbnN0IGNhc2VUeXBlID0gdGhpcy53aW5kb3dTZXJ2aWNlLmdldExvY2FsU3RvcmFnZShDQVNFX1RZUEVfTE9DX1NUT1JBR0UpO1xuICAgICAgaWYgKGNhc2VUeXBlKSB7XG4gICAgICAgIGNvbnN0IGNhc2VUeXBlT2JqZWN0ID0gSlNPTi5wYXJzZShjYXNlVHlwZSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGNhc2VUeXBlcy5maWx0ZXIoYyA9PiBjLmlkID09PSBjYXNlVHlwZU9iamVjdC5pZCk7XG4gICAgICAgIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCAmJiByZXN1bHQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWQuY2FzZVR5cGUgPSByZXN1bHRbMF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZC5jYXNlVHlwZSA9IGNhc2VUeXBlc1swXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZC5jYXNlVHlwZSA9IGNhc2VUeXBlc1swXTtcbiAgICAgIH1cbiAgICAgIHRoaXMub25DYXNlVHlwZUlkQ2hhbmdlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRGb2N1c1RvVG9wKCkge1xuICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTtcblxuICAgIGNvbnN0IHRvcENvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZWFyY2gtcmVzdWx0LWhlYWRpbmdfX3RleHQnKTtcbiAgICBpZiAodG9wQ29udGFpbmVyKSB7XG4gICAgICB0b3BDb250YWluZXIuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldENhc2VGaWVsZHMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VhcmNoSW5wdXRzKSB7XG4gICAgICB0aGlzLmNhc2VGaWVsZHMgPSB0aGlzLnNlYXJjaElucHV0cy5tYXAoaXRlbSA9PiBGaWVsZHNVdGlscy5jb252ZXJ0VG9DYXNlRmllbGQoaXRlbS5maWVsZCkpO1xuICAgIH1cbiAgfVxufVxuIiwiPGgyIGNsYXNzPVwiaGVhZGluZy1oMlwiIGFyaWEtbGFiZWw9XCJGaWx0ZXJzXCI+e3snRmlsdGVycycgfCBycHhUcmFuc2xhdGV9fTwvaDI+XG48Zm9ybSBjbGFzcz1cImdsb2JhbC1kaXNwbGF5XCI+XG4gIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgc3R5bGU9XCJtYXJnaW4tdG9wOiAxM3B4O1wiPlxuICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIiBmb3I9XCJzLWp1cmlzZGljdGlvblwiPnt7J0p1cmlzZGljdGlvbicgfCBycHhUcmFuc2xhdGV9fSo8L2xhYmVsPlxuICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLTMtNCBjY2QtZHJvcGRvd25cIiBpZD1cInMtanVyaXNkaWN0aW9uXCJcbiAgICAgICAgICAgIG5hbWU9XCJqdXJpc2RpY3Rpb25cIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkLmp1cmlzZGljdGlvblwiIGFyaWEtY29udHJvbHM9XCJzZWFyY2gtcmVzdWx0XCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwib25KdXJpc2RpY3Rpb25JZENoYW5nZSgpXCI+XG4gICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBqIG9mIGp1cmlzZGljdGlvbnNcIiBbbmdWYWx1ZV09XCJqXCI+e3tqLm5hbWUgfCBycHhUcmFuc2xhdGV9fTwvb3B0aW9uPlxuICAgIDwvc2VsZWN0PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCIgZm9yPVwicy1jYXNlLXR5cGVcIj57eydDYXNlIHR5cGUqJyB8IHJweFRyYW5zbGF0ZX19PC9sYWJlbD5cbiAgICA8c2VsZWN0IFtkaXNhYmxlZF09XCJpc0p1cmlzZGljdGlvblNlbGVjdGVkKClcIiBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtMy00IGNjZC1kcm9wZG93blwiXG4gICAgICAgICAgICBpZD1cInMtY2FzZS10eXBlXCIgbmFtZT1cImNhc2UtdHlwZVwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWQuY2FzZVR5cGVcIiBhcmlhLWNvbnRyb2xzPVwic2VhcmNoLXJlc3VsdFwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cIm9uQ2FzZVR5cGVJZENoYW5nZSgpXCI+XG4gICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBjdCBvZiBzZWxlY3RlZEp1cmlzZGljdGlvbkNhc2VUeXBlc1wiIFtuZ1ZhbHVlXT1cImN0XCI+e3tjdC5uYW1lIHwgcnB4VHJhbnNsYXRlfX08L29wdGlvbj5cbiAgICA8L3NlbGVjdD5cbiAgPC9kaXY+XG5cbiAgPG5nLWNvbnRhaW5lciBjY2RDb25kaXRpb25hbFNob3dGb3JtICpuZ0lmPVwiaXNTZWFyY2hhYmxlQW5kU2VhcmNoSW5wdXRzUmVhZHkoKVwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCIgW2NvbnRleHRGaWVsZHNdPVwiY2FzZUZpZWxkc1wiPlxuICAgIDxkaXYgaWQ9XCJkeW5hbWljRmlsdGVyc1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiAqbmdGb3I9XCJsZXQgc2VhcmNoSW5wdXQgb2Ygc2VhcmNoSW5wdXRzXCI+XG4gICAgICAgIDxjY2QtZmllbGQtd3JpdGUgW2Nhc2VGaWVsZF09XCJzZWFyY2hJbnB1dC5maWVsZFwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCIgW2lzRXhwYW5kZWRdPVwidHJ1ZVwiIChrZXl1cC5lbnRlcik9XCJhcHBseSgpXCI+XG4gICAgICAgIDwvY2NkLWZpZWxkLXdyaXRlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxidXR0b24gW2Rpc2FibGVkXT1cIiFpc1NlYXJjaGFibGVBbmRTZWFyY2hJbnB1dHNSZWFkeSgpXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnV0dG9uXCIgKGNsaWNrKT1cImFwcGx5KClcIiAoa2V5dXAuZW50ZXIpPVwiYXBwbHkoKVwiIFt0aXRsZV09XCInQXBwbHkgZmlsdGVyJyB8IHJweFRyYW5zbGF0ZVwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQXBwbHkgZmlsdGVyJyB8IHJweFRyYW5zbGF0ZVwiPlxuICAgIHt7J0FwcGx5JyB8IHJweFRyYW5zbGF0ZX19XG4gIDwvYnV0dG9uPiAmbmJzcDsmbmJzcDsmbmJzcDtcbiAgPGJ1dHRvbiBpZD1cInJlc2V0XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJyZXNldCgpXCIgY2xhc3M9XCJidXR0b24gYnV0dG9uLXNlY29uZGFyeVwiXG4gICAgICAgICAgW3RpdGxlXT1cIidSZXNldCBmaWx0ZXInIHwgcnB4VHJhbnNsYXRlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInUmVzZXQgZmlsdGVyJyB8IHJweFRyYW5zbGF0ZVwiPlxuICAgIHt7J1Jlc2V0JyB8IHJweFRyYW5zbGF0ZX19XG4gIDwvYnV0dG9uPlxuPC9mb3JtPlxuIl19
@@ -73,7 +73,7 @@ export class FieldsPurger {
73
73
  // Also need to allow for conditions specified using the "CONTAINS" keyword
74
74
  return showCondition.split(/!=|=|CONTAINS/)[0];
75
75
  }
76
- resetField(form, field) {
76
+ resetField(form, field, calledFromResetPage = false) {
77
77
  /**
78
78
  * If the hidden field's value is to be retained, do nothing (except if it is a Complex type or collection of
79
79
  * Complex types). This is a change to the previous behaviour (which used to clear the field value but remove it
@@ -136,6 +136,11 @@ export class FieldsPurger {
136
136
  }
137
137
  }
138
138
  }
139
+ else if (calledFromResetPage) {
140
+ // Delete the field from formGroup
141
+ const dataGroup = form.get('data');
142
+ dataGroup.removeControl(field.id);
143
+ }
139
144
  else {
140
145
  // Delete the field value
141
146
  this.deleteFieldValue(form.get('data'), field);
@@ -144,7 +149,7 @@ export class FieldsPurger {
144
149
  resetPage(form, wizardPage) {
145
150
  wizardPage.wizard_page_fields.forEach(wpf => {
146
151
  const caseField = this.findCaseFieldByWizardPageFieldId(wizardPage, wpf);
147
- this.resetField(form, caseField);
152
+ this.resetField(form, caseField, true);
148
153
  });
149
154
  }
150
155
  getType(elem) {
@@ -300,4 +305,4 @@ FieldsPurger.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: FieldsPurge
300
305
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FieldsPurger, [{
301
306
  type: Injectable
302
307
  }], function () { return [{ type: i1.FieldsUtils }]; }, null); })();
303
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGRzLnB1cmdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvc2VydmljZXMvZmllbGRzL2ZpZWxkcy5wdXJnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU0zQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUVBQWlFLENBQUM7QUFJaEcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFFN0MsV0FBVztBQUVYLE1BQU0sT0FBTyxZQUFZO0lBRXZCLFlBQTZCLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO0lBQUksQ0FBQztJQUVuRCxpQkFBaUIsQ0FBQyxJQUFlLEVBQUUsTUFBYyxFQUFFLFlBQThCLEVBQUUsYUFBcUI7UUFDN0csSUFBSSxDQUFDLHFDQUFxQyxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3RGLElBQUksQ0FBQyxvQ0FBb0MsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFTyxvQ0FBb0MsQ0FBQyxJQUFlLEVBQUUsTUFBYyxFQUFFLFlBQThCO1FBQzFHLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEYsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDeEIsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsRUFBRSxFQUFFLGlCQUFpQixDQUFDLEVBQUU7Z0JBQ3BELE1BQU0sU0FBUyxHQUFHLElBQUksYUFBYSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FB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QUksQ0FBQyxDQUFDO2FBQy9CO1NBQ0Y7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxvQkFBb0IsQ0FBQyxLQUFZO1FBQ3RDLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzdCLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDekIsSUFBSSxPQUFPLEtBQUssU0FBUyxJQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7b0JBQzdDLE9BQU8sT0FBTyxPQUFPLEtBQUssUUFBUTt3QkFDaEMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ3RFLENBQUMsQ0FBQyxJQUFJLENBQUM7aUJBQ1Y7cUJBQU07b0JBQ0wsT0FBTyxFQUFFLENBQUM7aUJBQ1g7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO2FBQU07WUFDTCxPQUFPLEtBQUssQ0FBQTtTQUNiO0lBQ0gsQ0FBQzs7d0VBdFRVLFlBQVk7a0VBQVosWUFBWSxXQUFaLFlBQVk7dUZBQVosWUFBWTtjQUR4QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBXaXphcmRQYWdlRmllbGQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2Nhc2UtZWRpdG9yL2RvbWFpbi93aXphcmQtcGFnZS1maWVsZC5tb2RlbCc7XG5pbXBvcnQgeyBXaXphcmRQYWdlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jYXNlLWVkaXRvci9kb21haW4vd2l6YXJkLXBhZ2UubW9kZWwnO1xuaW1wb3J0IHsgV2l6YXJkIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jYXNlLWVkaXRvci9kb21haW4vd2l6YXJkLm1vZGVsJztcbmltcG9ydCB7IFNob3dDb25kaXRpb24gfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2NvbmRpdGlvbmFsLXNob3cvZG9tYWluL2NvbmRpdGlvbmFsLXNob3cubW9kZWwnO1xuaW1wb3J0IHsgQ2FzZUV2ZW50VHJpZ2dlciB9IGZyb20gJy4uLy4uL2RvbWFpbi9jYXNlLXZpZXcvY2FzZS1ldmVudC10cmlnZ2VyLm1vZGVsJztcbmltcG9ydCB7IENhc2VGaWVsZCB9IGZyb20gJy4uLy4uL2RvbWFpbi9kZWZpbml0aW9uL2Nhc2UtZmllbGQubW9kZWwnO1xuaW1wb3J0IHsgRmllbGRUeXBlRW51bSB9IGZyb20gJy4uLy4uL2RvbWFpbi9kZWZpbml0aW9uL2ZpZWxkLXR5cGUtZW51bS5tb2RlbCc7XG5pbXBvcnQgeyBGaWVsZHNVdGlscyB9IGZyb20gJy4vZmllbGRzLnV0aWxzJztcblxuLy8gQGR5bmFtaWNcbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBGaWVsZHNQdXJnZXIge1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZmllbGRzVXRpbHM6IEZpZWxkc1V0aWxzKSB7IH1cblxuICBwdWJsaWMgY2xlYXJIaWRkZW5GaWVsZHMoZm9ybTogRm9ybUdyb3VwLCB3aXphcmQ6IFdpemFyZCwgZXZlbnRUcmlnZ2VyOiBDYXNlRXZlbnRUcmlnZ2VyLCBjdXJyZW50UGFnZUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFySGlkZGVuRmllbGRGb3JGaWVsZFNob3dDb25kaXRpb24oY3VycmVudFBhZ2VJZCwgZm9ybSwgd2l6YXJkLCBldmVudFRyaWdnZXIpO1xuICAgIHRoaXMuY2xlYXJIaWRkZW5GaWVsZEZvclBhZ2VTaG93Q29uZGl0aW9uKGZvcm0sIHdpemFyZCwgZXZlbnRUcmlnZ2VyKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJIaWRkZW5GaWVsZEZvclBhZ2VTaG93Q29uZGl0aW9uKGZvcm06IEZvcm1Hcm91cCwgd2l6YXJkOiBXaXphcmQsIGV2ZW50VHJpZ2dlcjogQ2FzZUV2ZW50VHJpZ2dlcik6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRFdmVudFN0YXRlID0gdGhpcy5maWVsZHNVdGlscy5nZXRDdXJyZW50RXZlbnRTdGF0ZShldmVudFRyaWdnZXIsIGZvcm0pO1xuICAgIHdpemFyZC5wYWdlcy5mb3JFYWNoKHdwID0+IHtcbiAgICAgIGlmICh0aGlzLmhhc1Nob3dDb25kaXRpb25QYWdlKHdwLCBjdXJyZW50RXZlbnRTdGF0ZSkpIHtcbiAgICAgICAgY29uc3QgY29uZGl0aW9uID0gbmV3IFNob3dDb25kaXRpb24od3Auc2hvd19jb25kaXRpb24pO1xuICAgICAgICBpZiAodGhpcy5pc0hpZGRlbihjb25kaXRpb24sIGN1cnJlbnRFdmVudFN0YXRlKSkge1xuICAgICAgICAgIHRoaXMucmVzZXRQYWdlKGZvcm0sIHdwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckhpZGRlbkZpZWxkRm9yRmllbGRTaG93Q29uZGl0aW9uKGN1cnJlbnRQYWdlSWQ6IHN0cmluZyxcbiAgICBmb3JtOiBGb3JtR3JvdXAsXG4gICAgd2l6YXJkOiBXaXphcmQsXG4gICAgZXZlbnRUcmlnZ2VyOiBDYXNlRXZlbnRUcmlnZ2VyKTogdm9pZCB7XG4gICAgY29uc3QgZm9ybUZpZWxkcyA9IGZvcm0uZ2V0UmF3VmFsdWUoKTtcbiAgICBjb25zdCBjdXJyZW50UGFnZTogV2l6YXJkUGFnZSA9IHdpemFyZC5nZXRQYWdlKGN1cnJlbnRQYWdlSWQsIHRoaXMuZmllbGRzVXRpbHMuYnVpbGRDYW5TaG93UHJlZGljYXRlKGV2ZW50VHJpZ2dlciwgZm9ybSkpO1xuICAgIGN1cnJlbnRQYWdlLndpemFyZF9wYWdlX2ZpZWxkcy5mb3JFYWNoKHdwZiA9PiB7XG4gICAgICBjb25zdCBjYXNlRmllbGQgPSB0aGlzLmZpbmRDYXNlRmllbGRCeVdpemFyZFBhZ2VGaWVsZElkKGN1cnJlbnRQYWdlLCB3cGYpO1xuICAgICAgaWYgKHRoaXMuaGFzU2hvd0NvbmRpdGlvbkZpZWxkKGNhc2VGaWVsZCwgZm9ybUZpZWxkcykpIHtcbiAgICAgICAgY29uc3QgY29uZGl0aW9uID0gbmV3IFNob3dDb25kaXRpb24oY2FzZUZpZWxkLnNob3dfY29uZGl0aW9uKTtcbiAgICAgICAgaWYgKHRoaXMuaXNIaWRkZW4oY29uZGl0aW9uLCBmb3JtRmllbGRzLmRhdGEpICYmICEodGhpcy5pc1JlYWRvbmx5KGNhc2VGaWVsZCkpKSB7XG4gICAgICAgICAgdGhpcy5yZXNldEZpZWxkKGZvcm0sIGNhc2VGaWVsZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMucmV0YWluSGlkZGVuVmFsdWVCeUZpZWxkVHlwZShjYXNlRmllbGQsIGZvcm0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZXRhaW5IaWRkZW5WYWx1ZUJ5RmllbGRUeXBlKGZpZWxkOiBDYXNlRmllbGQsIGZvcm06IGFueSk6IHZvaWQge1xuICAgIC8vIHNvIGZhciBvbmx5IGFwcGxpZXMgdG8gdGhlIG5ldyBmaWVsZCB0eXBlIE9yZ2FuaXNhdGlvblBvbGljeSB3aGljaCBuZWVkcyB0byByZXRhaW4gdGhlIGRlZmF1bHQgY2FzZSByb2xlIHZhbHVlXG4gICAgLy8gZm9yIG90aGVyIGNhc2UgZmllbGRzIHRoZXJlIHNob3VsZCBiZSBubyBzaWRlIGVmZmVjdHNcbiAgICBpZiAoZmllbGQgJiYgZmllbGQuZmllbGRfdHlwZSAmJiBmaWVsZC5maWVsZF90eXBlLmlkID09PSAnT3JnYW5pc2F0aW9uUG9saWN5Jykge1xuICAgICAgLy8gPGJ1YmJsZV93cmFwPlxuICAgICAgLy8gRG9pbmcgc29tZSBudWxsIGNoZWNraW5nIHRvIHN0b3AgaXQgZnJvbSBmYWxsaW5nIG92ZXIuXG4gICAgICBjb25zdCBkYXRhOiBGb3JtR3JvdXAgPSBmb3JtLmdldCgnZGF0YScpIGFzIEZvcm1Hcm91cDtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkR3JvdXA6IEZvcm1Hcm91cCA9IGRhdGEuY29udHJvbHNbZmllbGQuaWRdIGFzIEZvcm1Hcm91cDtcbiAgICAgICAgaWYgKGZpZWxkR3JvdXApIHtcbiAgICAgICAgICBjb25zdCBjYXNlUm9sZUZvcm1Db250cm9sOiBGb3JtQ29udHJvbCA9IGZpZWxkR3JvdXAuZ2V0KCdPcmdQb2xpY3lDYXNlQXNzaWduZWRSb2xlJykgYXMgRm9ybUNvbnRyb2w7XG4gICAgICAgICAgaWYgKGNhc2VSb2xlRm9ybUNvbnRyb2wpIHtcbiAgICAgICAgICAgIGNhc2VSb2xlRm9ybUNvbnRyb2wuZW5hYmxlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyA8L2J1YmJsZV93cmFwPlxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNIaWRkZW4oY29uZGl0aW9uOiBTaG93Q29uZGl0aW9uLCBmb3JtRmllbGRzOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIWNvbmRpdGlvbi5tYXRjaChmb3JtRmllbGRzKTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZENhc2VGaWVsZEJ5V2l6YXJkUGFnZUZpZWxkSWQoY3VycmVudFBhZ2U6IFdpemFyZFBhZ2UsIHdpemFyZFBhZ2VGaWVsZDogV2l6YXJkUGFnZUZpZWxkKTogQ2FzZUZpZWxkIHtcbiAgICByZXR1cm4gY3VycmVudFBhZ2UuY2FzZV9maWVsZHMuZmluZChjZiA9PiBjZi5pZCA9PT0gd2l6YXJkUGFnZUZpZWxkLmNhc2VfZmllbGRfaWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNTaG93Q29uZGl0aW9uUGFnZSh3aXphcmRQYWdlOiBXaXphcmRQYWdlLCBmb3JtRmllbGRzOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gd2l6YXJkUGFnZS5zaG93X2NvbmRpdGlvbiAmJiBmb3JtRmllbGRzW3RoaXMuZ2V0U2hvd0NvbmRpdGlvbktleSh3aXphcmRQYWdlLnNob3dfY29uZGl0aW9uKV07XG4gIH1cblxuICBwcml2YXRlIGhhc1Nob3dDb25kaXRpb25GaWVsZChjYXNlRmllbGQ6IENhc2VGaWVsZCwgZm9ybUZpZWxkczogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNhc2VGaWVsZC5zaG93X2NvbmRpdGlvbiAmJiBmb3JtRmllbGRzLmRhdGFbdGhpcy5nZXRTaG93Q29uZGl0aW9uS2V5KGNhc2VGaWVsZC5zaG93X2NvbmRpdGlvbildO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTaG93Q29uZGl0aW9uS2V5KHNob3dDb25kaXRpb246IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gTmVlZCB0byBhbGxvdyBmb3IgbmVnYXRlZCBjb25kaXRpb25zLCBpLmUuICE9LCBhcyB3ZWxsIGFzIHJlZ3VsYXIgb25lcyAoPSlcbiAgICAvLyBBbHNvIG5lZWQgdG8gYWxsb3cgZm9yIGNvbmRpdGlvbnMgc3BlY2lmaWVkIHVzaW5nIHRoZSBcIkNPTlRBSU5TXCIga2V5d29yZFxuICAgIHJldHVybiBzaG93Q29uZGl0aW9uLnNwbGl0KC8hPXw9fENPTlRBSU5TLylbMF07XG4gIH1cblxuICBwcml2YXRlIHJlc2V0RmllbGQoZm9ybTogRm9ybUdyb3VwLCBmaWVsZDogQ2FzZUZpZWxkKTogdm9pZCB7XG4gICAgLyoqXG4gICAgICogSWYgdGhlIGhpZGRlbiBmaWVsZCdzIHZhbHVlIGlzIHRvIGJlIHJldGFpbmVkLCBkbyBub3RoaW5nIChleGNlcHQgaWYgaXQgaXMgYSBDb21wbGV4IHR5cGUgb3IgY29sbGVjdGlvbiBvZlxuICAgICAqIENvbXBsZXggdHlwZXMpLiBUaGlzIGlzIGEgY2hhbmdlIHRvIHRoZSBwcmV2aW91cyBiZWhhdmlvdXIgKHdoaWNoIHVzZWQgdG8gY2xlYXIgdGhlIGZpZWxkIHZhbHVlIGJ1dCByZW1vdmUgaXRcbiAgICAgKiBmcm9tIHN1Ym1pc3Npb24gYXMgYW4gdXBkYXRlIHRvIHRoZSBiYWNrLWVuZCkuIFRoZSBuZXcgYmVoYXZpb3VyIGlzIHRvIGxlYXZlIHRoZSBmaWVsZCBhcyBpcywgc28gaWYgdGhlIGZpZWxkXG4gICAgICogaXMgaGlkZGVuIGJ1dCB0aGVuIHVuLWhpZGRlbiBiZWZvcmUgZm9ybSBzdWJtaXNzaW9uLCBhbnkgcHJldmlvdXNseSBlbnRlcmVkIHZhbHVlIGlzIHJldGFpbmVkLlxuICAgICAqXG4gICAgICogRm9yIENvbXBsZXggZmllbGQgdHlwZXMsIGFuIGFkZGl0aW9uYWwgY2hlY2sgb2Ygc3ViLWZpZWxkcyBpcyByZXF1aXJlZC4gVGhlIHNhbWUgYXBwbGllcyB0byBhIGNvbGxlY3Rpb24gb2ZcbiAgICAgKiBDb21wbGV4IHR5cGVzLlxuICAgICAqL1xuICAgIGlmIChmaWVsZC5yZXRhaW5faGlkZGVuX3ZhbHVlKSB7XG4gICAgICBjb25zdCBmaWVsZFR5cGU6IEZpZWxkVHlwZUVudW0gPSBmaWVsZC5maWVsZF90eXBlLnR5cGU7XG4gICAgICAvLyBJZiB0aGUgZmllbGQgaXMgYSBDb21wbGV4IHR5cGUsIGxvb3Agb3ZlciBpdHMgc3ViLWZpZWxkcyBhbmQgY2FsbCBkZWxldGVGaWVsZFZhbHVlKCkgZm9yIGFueSBzdWItZmllbGRzXG4gICAgICAvLyB3aGVyZSByZXRhaW5faGlkZGVuX3ZhbHVlIGlzIGZhbHNlLCBPUiBmb3IgYW55IENvbXBsZXggc3ViLWZpZWxkcyAqcmVnYXJkbGVzcyBvZiB0aGVpciByZXRhaW5faGlkZGVuX3ZhbHVlKlxuICAgICAgLy8gKGluIG9yZGVyIHRvIGluc3BlY3QgdGhlIHN1Yi1maWVsZHMgb2YgYSBDb21wbGV4IHR5cGUgd2l0aGluIGFub3RoZXIgQ29tcGxleCB0eXBlKVxuICAgICAgaWYgKGZpZWxkVHlwZSA9PT0gJ0NvbXBsZXgnICYmIGZpZWxkLmZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgICBmb3IgKGNvbnN0IGNvbXBsZXhTdWJGaWVsZCBvZiBmaWVsZC5maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzKSB7XG4gICAgICAgICAgaWYgKChjb21wbGV4U3ViRmllbGQuZmllbGRfdHlwZS50eXBlID09PSAnQ29tcGxleCcgJiYgY29tcGxleFN1YkZpZWxkLmZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMubGVuZ3RoID4gMCkgfHxcbiAgICAgICAgICAgICFjb21wbGV4U3ViRmllbGQucmV0YWluX2hpZGRlbl92YWx1ZSkge1xuICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIHRoZSBleGlzdGVuY2Ugb2YgdGhlIHBhcmVudCBGb3JtR3JvdXAgY29ycmVzcG9uZGluZyB0byB0aGUgQ29tcGxleCBmaWVsZDsgaWYgaXQgZXhpc3RzLCBjYWxsXG4gICAgICAgICAgICAvLyBkZWxldGVGaWVsZFZhbHVlKCkgdG8gZGVsZXRlIHRoZSBzdWItZmllbGRcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudEZvcm1Hcm91cCA9IChmb3JtLmdldCgnZGF0YScpIGFzIEZvcm1Hcm91cCkuY29udHJvbHNbZmllbGQuaWRdIGFzIEZvcm1Hcm91cDtcbiAgICAgICAgICAgIGlmIChwYXJlbnRGb3JtR3JvdXApIHtcbiAgICAgICAgICAgICAgdGhpcy5kZWxldGVGaWVsZFZhbHVlKHBhcmVudEZvcm1Hcm91cCwgY29tcGxleFN1YkZpZWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZmllbGRUeXBlID09PSAnQ29sbGVjdGlvbicgJiYgZmllbGQuZmllbGRfdHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUudHlwZSA9PT0gJ0NvbXBsZXgnICYmXG4gICAgICAgIGZpZWxkLmZpZWxkX3R5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gSWYgdGhlIGZpZWxkIGlzIGEgY29sbGVjdGlvbiBvZiBDb21wbGV4IHR5cGVzLCBsb29wIHRocm91Z2ggZWFjaCBvbmUgYW5kIGNhbGwgZGVsZXRlRmllbGRWYWx1ZSgpIGZvciBhbnlcbiAgICAgICAgLy8gc3ViLWZpZWxkcyB3aGVyZSByZXRhaW5faGlkZGVuX3ZhbHVlIGlzIGZhbHNlLCBPUiBmb3IgYW55IENvbXBsZXggc3ViLWZpZWxkcyAqcmVnYXJkbGVzcyBvZiB0aGVpclxuICAgICAgICAvLyByZXRhaW5faGlkZGVuX3ZhbHVlKiAoaW4gb3JkZXIgdG8gaW5zcGVjdCB0aGUgc3ViLWZpZWxkcyBvZiBhIENvbXBsZXggdHlwZSB3aXRoaW4gYW5vdGhlciBDb21wbGV4IHR5cGUpXG5cbiAgICAgICAgLy8gR2V0IHRoZSBhcnJheSBvZiBmaWVsZCBjb250cm9scyBjb3JyZXNwb25kaW5nIHRvIHRoZSBDb21wbGV4IGZpZWxkIHZhbHVlc1xuICAgICAgICBjb25zdCBmaWVsZENvbnRyb2xzID0gKGZvcm0uZ2V0KCdkYXRhJykgYXMgRm9ybUdyb3VwKS5jb250cm9sc1tmaWVsZC5pZF0gYXMgRm9ybUFycmF5O1xuXG4gICAgICAgIGlmIChmaWVsZENvbnRyb2xzKSB7XG4gICAgICAgICAgLy8gR2V0IHRoZSBhcnJheSBvZiBDb21wbGV4IGZpZWxkIHZhbHVlc1xuICAgICAgICAgIGNvbnN0IGNvbXBsZXhGaWVsZFZhbHVlcyA9IGZpZWxkQ29udHJvbHMudmFsdWUgYXMgYW55W107XG5cbiAgICAgICAgICAvLyBGb3IgZWFjaCBDb21wbGV4IGZpZWxkIHZhbHVlLCBnZXQgdGhlIElEIG9mIGVhY2ggc3ViLWZpZWxkIHdpdGhpbiBpdCBhbmQgdXNlIGFzIGEga2V5IHRvIGZpbmQgdGhlXG4gICAgICAgICAgLy8gY29ycmVzcG9uZGluZyBzdWItQ2FzZUZpZWxkICh3aGljaCBjb250YWlucyB0aGUgZmllbGQgdHlwZSBpbmZvcm1hdGlvbilcbiAgICAgICAgICBpZiAoY29tcGxleEZpZWxkVmFsdWVzKSB7XG4gICAgICAgICAgICBjb21wbGV4RmllbGRWYWx1ZXMuZm9yRWFjaCgoZmllbGRWYWx1ZSwgaW5kZXgpID0+IE9iamVjdC5rZXlzKGZpZWxkVmFsdWUudmFsdWUpLmZvckVhY2goc3ViRmllbGRJZCA9PiB7XG4gICAgICAgICAgICAgIC8vIEZpbmQgdGhlIHN1Yi1DYXNlRmllbGQgY29ycmVzcG9uZGluZyB0byB0aGUgc3ViLWZpZWxkIElEXG4gICAgICAgICAgICAgIGxldCBzdWJDYXNlRmllbGQ6IENhc2VGaWVsZDtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBjYXNlRmllbGQgb2YgZmllbGQuZmllbGRfdHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FzZUZpZWxkLmlkID09PSBzdWJGaWVsZElkKSB7XG4gICAgICAgICAgICAgICAgICBzdWJDYXNlRmllbGQgPSBjYXNlRmllbGQ7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBkZWxldGUgdGhlIHN1Yi1maWVsZCB2YWx1ZSBpZiByZXRhaW5faGlkZGVuX3ZhbHVlIGlzIGZhbHNlLCBPUiBpZiB0aGUgc3ViLWZpZWxkIHR5cGUgaXNcbiAgICAgICAgICAgICAgLy8gQ29tcGxleCBhbmQgcmVnYXJkbGVzcyBvZiByZXRhaW5faGlkZGVuX3ZhbHVlLCBwYXNzaW5nIGluIHRoZSBwYXJlbnQgRm9ybUdyb3VwXG4gICAgICAgICAgICAgIGlmIChzdWJDYXNlRmllbGQgJiZcbiAgICAgICAgICAgICAgICAoKHN1YkNhc2VGaWVsZC5maWVsZF90eXBlLnR5cGUgPT09ICdDb21wbGV4JyAmJiBzdWJDYXNlRmllbGQuZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcy5sZW5ndGggPiAwKSB8fFxuICAgICAgICAgICAgICAgICAgIXN1YkNhc2VGaWVsZC5yZXRhaW5faGlkZGVuX3ZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudEZvcm1Hcm91cDogRm9ybUdyb3VwID0gZmllbGRDb250cm9scy5hdChpbmRleCkuZ2V0KCd2YWx1ZScpIGFzIEZvcm1Hcm91cDtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZUZpZWxkVmFsdWUocGFyZW50Rm9ybUdyb3VwLCBzdWJDYXNlRmllbGQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIERlbGV0ZSB0aGUgZmllbGQgdmFsdWVcbiAgICAgIHRoaXMuZGVsZXRlRmllbGRWYWx1ZShmb3JtLmdldCgnZGF0YScpIGFzIEZvcm1Hcm91cCwgZmllbGQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRQYWdlKGZvcm06IEZvcm1Hcm91cCwgd2l6YXJkUGFnZTogV2l6YXJkUGFnZSk6IHZvaWQge1xuICAgIHdpemFyZFBhZ2Uud2l6YXJkX3BhZ2VfZmllbGRzLmZvckVhY2god3BmID0+IHtcbiAgICAgIGNvbnN0IGNhc2VGaWVsZCA9IHRoaXMuZmluZENhc2VGaWVsZEJ5V2l6YXJkUGFnZUZpZWxkSWQod2l6YXJkUGFnZSwgd3BmKTtcbiAgICAgIHRoaXMucmVzZXRGaWVsZChmb3JtLCBjYXNlRmllbGQpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUeXBlKGVsZW06IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlbGVtKS5zbGljZSg4LCAtMSk7XG4gIH1cblxuICBwcml2YXRlIGlzT2JqZWN0KGVsZW06IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFR5cGUoZWxlbSkgPT09ICdPYmplY3QnO1xuICB9XG5cbiAgLy8gVE9ETzogY2FsbCBpc1JlYWRPbmx5IG9uIENhc2VGaWVsZHMgb25jZSB3ZSBtYWtlIGl0IGF2YWlsYWJsZVxuICBwcml2YXRlIGlzUmVhZG9ubHkoY2FzZUZpZWxkOiBDYXNlRmllbGQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gY2FzZUZpZWxkLmRpc3BsYXlfY29udGV4dC50b1VwcGVyQ2FzZSgpID09PSAnUkVBRE9OTFknO1xuICB9XG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYSBmaWVsZCB2YWx1ZSBieSBzZXR0aW5nIHRoZSB2YWx1ZSBvZiB0aGUgY29ycmVzcG9uZGluZyB7QGxpbmsgRm9ybUNvbnRyb2x9IHRvIG51bGwgKG9yIGFuIGVtcHR5IGFycmF5XG4gICAqIGlmIHRoZSBmaWVsZCB0eXBlIGlzIGBDb2xsZWN0aW9uYCksIGV4Y2VwdCB3aGVuIHRoZSBmaWVsZCB0eXBlIGlzIGBDb21wbGV4YCBvciBgRG9jdW1lbnRgLiBGb3IgYENvbXBsZXhgIGZpZWxkXG4gICAqIHR5cGVzLCB0aGlzIHJlY3Vyc2l2ZSBtZXRob2QgaXMgY2FsbGVkIHVudGlsIHNpbXBsZSBvciBcImJhc2VcIiBmaWVsZCB0eXBlcyBhcmUgcmVhY2hlZC4gRm9yIGBEb2N1bWVudGAgZmllbGRcbiAgICogdHlwZXMsIGl0cyBfc3ViLWZpZWxkXyBgRm9ybUNvbnRyb2xgIHZhbHVlcyBhcmUgc2V0IHRvIG51bGwuXG4gICAqXG4gICAqIEBwYXJhbSBmb3JtR3JvdXAgVGhlIGBGb3JtR3JvdXBgIGluc3RhbmNlIGNvbnRhaW5pbmcgdGhlIGBGb3JtQ29udHJvbGAgZm9yIHRoZSBzcGVjaWZpZWQgZmllbGRcbiAgICogQHBhcmFtIGZpZWxkIFRoZSBgQ2FzZUZpZWxkYCB3aG9zZSB2YWx1ZSBpcyB0byBiZSBkZWxldGVkIGluIHRoZSBiYWNrZW5kXG4gICAqIEBwYXJhbSBwYXJlbnRGaWVsZCBSZWZlcmVuY2UgdG8gdGhlIHBhcmVudCBgQ2FzZUZpZWxkYC4gVXNlZCBmb3IgY2hlY2tpbmcgc3BlY2lmaWNhbGx5IHdoZXJlIGEgQ29tcGxleCBmaWVsZCBhbmRcbiAgICogaXRzIHN1Yi1maWVsZHMgaGF2ZSBgcmV0YWluX2hpZGRlbl92YWx1ZWAgc2V0IHRvIGB0cnVlYCwgYnV0IHRoZSBmaWVsZCdzIHBhcmVudCBoYXMgaXQgc2V0IHRvIGBmYWxzZWAgb3IgdW5kZWZpbmVkXG4gICAqL1xuICBwdWJsaWMgZGVsZXRlRmllbGRWYWx1ZShmb3JtR3JvdXA6IEZvcm1Hcm91cCwgZmllbGQ6IENhc2VGaWVsZCwgcGFyZW50RmllbGQ/OiBDYXNlRmllbGQpOiB2b2lkIHtcbiAgICBjb25zdCBmaWVsZFR5cGU6IEZpZWxkVHlwZUVudW0gPSBmaWVsZC5maWVsZF90eXBlLnR5cGU7XG4gICAgY29uc3QgZmllbGRDb250cm9sID0gZm9ybUdyb3VwLmdldChmaWVsZC5pZCk7XG5cbiAgICBpZiAoZmllbGRDb250cm9sKSB7XG4gICAgICBzd2l0Y2ggKGZpZWxkVHlwZSkge1xuICAgICAgICBjYXNlICdDb21wbGV4JzpcbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBJZiB0aGUgZmllbGQgaXMgYSBDb21wbGV4IHR5cGUsIGxvb3Agb3ZlciBpdHMgc3ViLWZpZWxkcyBhbmQgY2FsbCBkZWxldGVGaWVsZFZhbHVlKCkgZm9yOlxuICAgICAgICAgICAqXG4gICAgICAgICAgICogKiBBbnkgc3ViLWZpZWxkcyB3aGVyZSByZXRhaW5faGlkZGVuX3ZhbHVlIGlzIGZhbHNlL3VuZGVmaW5lZCwgaWYgdGhlIHBhcmVudCBmaWVsZCBoYXNcbiAgICAgICAgICAgKiByZXRhaW5faGlkZGVuX3ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgKiAqIEFMTCBzdWItZmllbGRzIGlmIHRoZSBwYXJlbnQgZmllbGQgaGFzIHJldGFpbl9oaWRkZW5fdmFsdWUgPSB0cnVlIEJVVCBpdHMgX293bl8gcGFyZW50IGhhc1xuICAgICAgICAgICAqIHJldGFpbl9oaWRkZW5fdmFsdWUgPSBmYWxzZS91bmRlZmluZWQgKHRodXMgb3ZlcnJpZGluZyBhbnl0aGluZyBlbHNlKTtcbiAgICAgICAgICAgKiAqIEFMTCBzdWItZmllbGRzIGlmIHRoZSBwYXJlbnQgZmllbGQgaGFzIHJldGFpbl9oaWRkZW5fdmFsdWUgPSBmYWxzZS91bmRlZmluZWQ7XG4gICAgICAgICAgICogKiBBbnkgQ29tcGxleCBzdWItZmllbGRzICpyZWdhcmRsZXNzIG9mIHRoZWlyIHJldGFpbl9oaWRkZW5fdmFsdWUqIChpbiBvcmRlciB0byBpbnNwZWN0IHRoZSBzdWItZmllbGRzXG4gICAgICAgICAgICogb2YgYSBDb21wbGV4IHR5cGUgd2l0aGluIGFub3RoZXIgQ29tcGxleCB0eXBlKVxuICAgICAgICAgICAqL1xuICAgICAgICAgIGlmIChmaWVsZC5maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29tcGxleFN1YkZpZWxkIG9mIGZpZWxkLmZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMpIHtcbiAgICAgICAgICAgICAgaWYgKChjb21wbGV4U3ViRmllbGQuZmllbGRfdHlwZS50eXBlID09PSAnQ29tcGxleCcgJiYgY29tcGxleFN1YkZpZWxkLmZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMubGVuZ3RoID4gMCkgfHxcbiAgICAgICAgICAgICAgICAoY29tcGxleFN1YkZpZWxkLmZpZWxkX3R5cGUudHlwZSAhPT0gJ0NvbXBsZXgnICYmXG4gICAgICAgICAgICAgICAgICAoZmllbGQucmV0YWluX2hpZGRlbl92YWx1ZVxuICAgICAgICAgICAgICAgICAgICA/ICFjb21wbGV4U3ViRmllbGQucmV0YWluX2hpZGRlbl92YWx1ZSB8fCAocGFyZW50RmllbGQgJiYgIXBhcmVudEZpZWxkLnJldGFpbl9oaWRkZW5fdmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIDogdHJ1ZSkpKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIGZpZWxkQ29udHJvbCBpcyBjYXN0IHRvIGEgRm9ybUdyb3VwIGJlY2F1c2UgYSBDb21wbGV4IGZpZWxkIHR5cGUgdXNlcyB0aGlzIGFzIGl0cyB1bmRlcmx5aW5nXG4gICAgICAgICAgICAgICAgLy8gaW1wbGVtZW50YXRpb25cbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZUZpZWxkVmFsdWUoZmllbGRDb250cm9sIGFzIEZvcm1Hcm91cCwgY29tcGxleFN1YkZpZWxkLCBmaWVsZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0NvbGxlY3Rpb24nOlxuICAgICAgICAgIC8vIElmIGl0IGlzIGEgY29sbGVjdGlvbiBvZiBDb21wbGV4IHR5cGVzLCBsb29wIHRocm91Z2ggZWFjaCBvbmU7IGVsc2UgZmFsbCB0aHJvdWdoIHRvIGJlIGhhbmRsZWQgYXMgYVxuICAgICAgICAgIC8vIGNvbGxlY3Rpb24gb2Ygc2ltcGxlIHR5cGVzIChpbiB0aGUgc2FtZSB3YXkgYXMgTXVsdGlTZWxlY3RMaXN0KSwgdW5sZXNzIGl0J3MgYSBjb2xsZWN0aW9uIG9mIERvY3VtZW50XG4gICAgICAgICAgLy8gdHlwZXMsIHdoaWNoIHJlcXVpcmVzIGRpZmZlcmVudCBoYW5kbGluZ1xuICAgICAgICAgIGNvbnN0IGNvbGxlY3Rpb25GaWVsZFR5cGUgPSBmaWVsZC5maWVsZF90eXBlLmNvbGxlY3Rpb25fZmllbGRfdHlwZTtcbiAgICAgICAgICBpZiAoY29sbGVjdGlvbkZpZWxkVHlwZS50eXBlID09PSAnQ29tcGxleCcgJiYgY29sbGVjdGlvbkZpZWxkVHlwZS5jb21wbGV4X2ZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvLyBHZXQgdGhlIGFycmF5IG9mIENvbXBsZXggZmllbGQgdmFsdWVzXG4gICAgICAgICAgICBjb25zdCBjb21wbGV4RmllbGRWYWx1ZXMgPSBmaWVsZENvbnRyb2wudmFsdWUgYXMgYW55W107XG5cbiAgICAgICAgICAgIC8vIEZvciBlYWNoIENvbXBsZXggZmllbGQgdmFsdWUsIGdldCB0aGUgSUQgb2YgZWFjaCBzdWItZmllbGQgd2l0aGluIGl0IGFuZCB1c2UgYXMgYSBrZXkgdG8gZmluZCB0aGVcbiAgICAgICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgc3ViLUNhc2VGaWVsZCAod2hpY2ggY29udGFpbnMgdGhlIGZpZWxkIHR5cGUgaW5mb3JtYXRpb24pXG4gICAgICAgICAgICBpZiAoY29tcGxleEZpZWxkVmFsdWVzKSB7XG4gICAgICAgICAgICAgIGNvbXBsZXhGaWVsZFZhbHVlcy5mb3JFYWNoKChmaWVsZFZhbHVlLCBpbmRleCkgPT4gT2JqZWN0LmtleXMoZmllbGRWYWx1ZS52YWx1ZSkuZm9yRWFjaChzdWJGaWVsZElkID0+IHtcbiAgICAgICAgICAgICAgICAvLyBGaW5kIHRoZSBzdWItQ2FzZUZpZWxkIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHN1Yi1maWVsZCBJRFxuICAgICAgICAgICAgICAgIGxldCBzdWJDYXNlRmllbGQ6IENhc2VGaWVsZDtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNhc2VGaWVsZCBvZiBjb2xsZWN0aW9uRmllbGRUeXBlLmNvbXBsZXhfZmllbGRzKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoY2FzZUZpZWxkLmlkID09PSBzdWJGaWVsZElkKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YkNhc2VGaWVsZCA9IGNhc2VGaWVsZDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgZGVsZXRlIHRoZSBzdWItZmllbGQgdmFsdWUsIHBhc3NpbmcgaW4gdGhlIHBhcmVudCBGb3JtR3JvdXBcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRGb3JtR3JvdXA6IEZvcm1Hcm91cCA9IChmaWVsZENvbnRyb2wgYXMgRm9ybUFycmF5KS5hdChpbmRleCkuZ2V0KCd2YWx1ZScpIGFzIEZvcm1Hcm91cDtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZUZpZWxkVmFsdWUocGFyZW50Rm9ybUdyb3VwLCBzdWJDYXNlRmllbGQpO1xuICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGVsc2UgaWYgKGNvbGxlY3Rpb25GaWVsZFR5cGUudHlwZSA9PT0gJ0RvY3VtZW50Jykge1xuICAgICAgICAgICAgLy8gR2V0IHRoZSBhcnJheSBvZiBEb2N1bWVudCBmaWVsZCB2YWx1ZXNcbiAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50RmllbGRWYWx1ZXMgPSBmaWVsZENvbnRyb2wudmFsdWUgYXMgYW55W107XG5cbiAgICAgICAgICAgIC8vIEZvciBlYWNoIERvY3VtZW50IGZpZWxkIHZhbHVlLCBzZXQgYWxsIGl0cyBwcm9wZXJ0eSB2YWx1ZXMgdG8gbnVsbCAodGhpcyBpcyBub3QgYWNjZXB0ZWQgYnkgdGhlXG4gICAgICAgICAgICAvLyBiYWNrLWVuZCBidXQgd2lsbCBiZSBoYW5kbGVkIGJ5IHNhbml0aXNlT2JqZWN0KCkgaW4gRm9ybVZhbHVlU2VydmljZSBiZWZvcmUgc2VuZGluZyAtIHNlZSBiZWxvdyBmb3JcbiAgICAgICAgICAgIC8vIHRoZSBzaW5nbGUgRG9jdW1lbnQgY2FzZSlcbiAgICAgICAgICAgIGlmIChkb2N1bWVudEZpZWxkVmFsdWVzKSB7XG4gICAgICAgICAgICAgIGRvY3VtZW50RmllbGRWYWx1ZXMuZm9yRWFjaCgoZmllbGRWYWx1ZSwgaW5kZXgpID0+IE9iamVjdC5rZXlzKGZpZWxkVmFsdWUudmFsdWUpLmZvckVhY2goc3ViRmllbGRJZCA9PiB7XG4gICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBGb3JtR3JvdXAgY29udGFpbmluZyB0aGUgRm9ybUNvbnRyb2wgZm9yIHRoZSBzdWItZmllbGQgYW5kIHNldCBpdHMgdmFsdWUgdG8gbnVsbFxuICAgICAgICAgICAgICAgIChmaWVsZENvbnRyb2wgYXMgRm9ybUFycmF5KS5hdChpbmRleCkuZ2V0KGB2YWx1ZS4ke3N1YkZpZWxkSWR9YCkuc2V0VmFsdWUobnVsbCk7XG4gICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgLy8gT21pdHRlZCBcImJyZWFrXCIgaXMgaW50ZW50aW9uYWwgYmVjYXVzZSBhIGNvbGxlY3Rpb24gc2hvdWxkIGJlIGhhbmRsZWQgYXMgcGVyIE11bHRpU2VsZWN0TGlzdCBpZiBpdCBpc1xuICAgICAgICAvLyBub3QgYSBjb2xsZWN0aW9uIG9mIENvbXBsZXggdHlwZXNcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1zd2l0Y2gtY2FzZS1mYWxsLXRocm91Z2hcbiAgICAgICAgY2FzZSAnTXVsdGlTZWxlY3RMaXN0JzpcbiAgICAgICAgICAvLyBGaWVsZCBjb250cm9sIHNob3VsZCBiZSBhIEZvcm1BcnJheSwgc28gbWFwIGVhY2ggb2YgaXRzIHZhbHVlcyB0byBudWxsXG4gICAgICAgICAgLy8gTk9URTogVGhlIEZvcm1BcnJheSBjYW5ub3QganVzdCBiZSBzZXQgdG8gYW4gZW1wdHkgYXJyYXkgYmVjYXVzZSBBbmd1bGFyIGNoZWNrcyB0aGF0IGFsbCBleGlzdGluZyB2YWx1ZXNcbiAgICAgICAgICAvLyBvZiBhIEZvcm1BcnJheSBhcmUgcHJlc2VudDsgc2V0dGluZyB0aGUgY29udHJvbCdzIHZhbHVlIHRvIGFuIGVtcHR5IGFycmF5IGNhdXNlcyBhIHJ1bnRpbWUgZXJyb3JcbiAgICAgICAgICBpZiAoZmllbGRDb250cm9sLnZhbHVlKSB7XG4gICAgICAgICAgICAvLyBOZWVkIHRvIGFsbG93IGZvciBmaWVsZCB2YWx1ZXMgdGhhdCBhcmUgb2JqZWN0cywgbm90IGp1c3QgcHJpbWl0aXZlc1xuICAgICAgICAgICAgZmllbGRDb250cm9sLnNldFZhbHVlKHRoaXMubWFwQXJyYXlWYWx1ZXNUb051bGwoZmllbGRDb250cm9sLnZhbHVlKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdEb2N1bWVudCc6XG4gICAgICAgICAgLy8gTk9URTogVGhlIGZpZWxkIGNvbnRyb2wgKGEgRm9ybUdyb3VwIGluIHRoaXMgY2FzZSkgY2Fubm90IGp1c3QgYmUgc2V0IHRvIG51bGwgYmVjYXVzZSBBbmd1bGFyIGNoZWNrcyB0aGF0XG4gICAgICAgICAgLy8gYWxsIGV4aXN0aW5nIHZhbHVlcyBvZiBhIEZvcm1Hcm91cCBhcmUgcHJlc2VudDsgc2V0dGluZyB0aGUgY29udHJvbCdzIHZhbHVlIHRvIG51bGwgY2F1c2VzIGEgcnVudGltZSBlcnJvclxuICAgICAgICAgIGNvbnN0IGRvY3VtZW50RmllbGRWYWx1ZSA9IGZpZWxkQ29udHJvbC52YWx1ZTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBkb2N1bWVudEZpZWxkVmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChmaWVsZENvbnRyb2wuZ2V0KGtleSkpIHtcbiAgICAgICAgICAgICAgLy8gVGhlIGJhY2stZW5kIGRvZXNuJ3QgYWNjZXB0IG51bGwgYXMgYSB2YWxpZCB2YWx1ZSBmb3IgYW55IG9mIHRoZSBEb2N1bWVudCBmaWVsZCB0eXBlIHByb3BlcnRpZXMgYnV0XG4gICAgICAgICAgICAgIC8vIHRoaXMgaXMgaGFuZGxlZCBieSBzYW5pdGlzZU9iamVjdCgpIGluIEZvcm1WYWx1ZVNlcnZpY2UsIHJldHVybmluZyBhIG51bGwgb2JqZWN0IGZvciB0aGUgZW50aXJlXG4gICAgICAgICAgICAgIC8vIERvY3VtZW50IGZpZWxkLCBpZiBhbnkgb2YgaXRzIHByb3BlcnRpZXMgaXMgbnVsbCAtIHdoaWNoIGlzIGFjY2VwdGVkIGJ5IHRoZSBiYWNrLWVuZFxuICAgICAgICAgICAgICBmaWVsZENvbnRyb2wuZ2V0KGtleSkuc2V0VmFsdWUobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAvLyBOb3RlOiB0aGUgZGVmYXVsdCBjYXNlIGFwcGxpZXMgdG8gRHluYW1pY0xpc3QgZmllbGRzLCB0b29cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBmaWVsZENvbnRyb2wuc2V0VmFsdWUobnVsbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1hcHMgYWxsIHZhbHVlcyBvZiBhbiBhcnJheSB0byBgbnVsbGAsIHJldGFpbmluZyBrZXlzIGZvciBhbnkgdmFsdWVzIHRoYXQgYXJlIG9iamVjdHMuIEZvciBleGFtcGxlLFxuICAgKiBgW3sgaWQ6ICcwJywgdmFsdWU6ICdUZXN0JyB9LCAnVGVzdCddYCB3b3VsZCBiZWNvbWUgYFt7IGlkOiBudWxsLCB2YWx1ZTogbnVsbCB9LCBudWxsXWAuXG4gICAqIEBwYXJhbSBhcnJheSBUaGUgYXJyYXkgb2YgdmFsdWVzIHRvIG1hcFxuICAgKiBAcmV0dXJucyBBIG5ldyBhcnJheSB3aXRoIHRoZSBtYXBwZWQgdmFsdWVzXG4gICAqL1xuICBwdWJsaWMgbWFwQXJyYXlWYWx1ZXNUb051bGwoYXJyYXk6IGFueVtdKTogYW55W10ge1xuICAgIGlmIChhcnJheSAmJiBhcnJheS5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gYXJyYXkubWFwKGVsZW1lbnQgPT4ge1xuICAgICAgICBpZiAoZWxlbWVudCAhPT0gdW5kZWZpbmVkICYmIGVsZW1lbnQgIT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gdHlwZW9mIGVsZW1lbnQgPT09ICdvYmplY3QnXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24oe30sIC4uLk9iamVjdC5rZXlzKGVsZW1lbnQpLm1hcChrID0+ICh7IFtrXTogbnVsbCB9KSkpXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGFycmF5XG4gICAgfVxuICB9XG59XG4iXX0=
308
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGRzLnB1cmdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvc2VydmljZXMvZmllbGRzL2ZpZWxkcy5wdXJnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU0zQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUVBQWlFLENBQUM7QUFJaEcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFFN0MsV0FBVztBQUVYLE1BQU0sT0FBTyxZQUFZO0lBRXZCLFlBQTZCLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO0lBQUksQ0FBQztJQUVuRCxpQkFBaUIsQ0FBQyxJQUFlLEVBQUUsTUFBYyxFQUFFLFlBQThCLEVBQUUsYUFBcUI7UUFDN0csSUFBSSxDQUFDLHFDQUFxQyxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3RGLElBQUksQ0FBQyxvQ0FBb0MsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFTyxvQ0FBb0MsQ0FBQyxJQUFlLEVBQUUsTUFBYyxFQUFFLFlBQThCO1FBQzFHLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEYsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDeEIsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsRUFBRSxFQUFFLGlCQUFpQixDQUFDLEVBQUU7Z0JBQ3BELE1BQU0sU0FBUyxHQUFHLElBQUksYUFBYSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FB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QkFDekIsc0dBQXNHOzRCQUN0RyxrR0FBa0c7NEJBQ2xHLHVGQUF1Rjs0QkFDdkYsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7eUJBQ3RDO3FCQUNGO29CQUNELE1BQU07Z0JBQ1IsNERBQTREO2dCQUM1RDtvQkFDRSxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQy9CO1NBQ0Y7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxvQkFBb0IsQ0FBQyxLQUFZO1FBQ3RDLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzdCLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDekIsSUFBSSxPQUFPLEtBQUssU0FBUyxJQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7b0JBQzdDLE9BQU8sT0FBTyxPQUFPLEtBQUssUUFBUTt3QkFDaEMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBQ3RFLENBQUMsQ0FBQyxJQUFJLENBQUM7aUJBQ1Y7cUJBQU07b0JBQ0wsT0FBTyxFQUFFLENBQUM7aUJBQ1g7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO2FBQU07WUFDTCxPQUFPLEtBQUssQ0FBQTtTQUNiO0lBQ0gsQ0FBQzs7d0VBMVRVLFlBQVk7a0VBQVosWUFBWSxXQUFaLFlBQVk7dUZBQVosWUFBWTtjQUR4QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBXaXphcmRQYWdlRmllbGQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2Nhc2UtZWRpdG9yL2RvbWFpbi93aXphcmQtcGFnZS1maWVsZC5tb2RlbCc7XG5pbXBvcnQgeyBXaXphcmRQYWdlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jYXNlLWVkaXRvci9kb21haW4vd2l6YXJkLXBhZ2UubW9kZWwnO1xuaW1wb3J0IHsgV2l6YXJkIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jYXNlLWVkaXRvci9kb21haW4vd2l6YXJkLm1vZGVsJztcbmltcG9ydCB7IFNob3dDb25kaXRpb24gfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2NvbmRpdGlvbmFsLXNob3cvZG9tYWluL2NvbmRpdGlvbmFsLXNob3cubW9kZWwnO1xuaW1wb3J0IHsgQ2FzZUV2ZW50VHJpZ2dlciB9IGZyb20gJy4uLy4uL2RvbWFpbi9jYXNlLXZpZXcvY2FzZS1ldmVudC10cmlnZ2VyLm1vZGVsJztcbmltcG9ydCB7IENhc2VGaWVsZCB9IGZyb20gJy4uLy4uL2RvbWFpbi9kZWZpbml0aW9uL2Nhc2UtZmllbGQubW9kZWwnO1xuaW1wb3J0IHsgRmllbGRUeXBlRW51bSB9IGZyb20gJy4uLy4uL2RvbWFpbi9kZWZpbml0aW9uL2ZpZWxkLXR5cGUtZW51bS5tb2RlbCc7XG5pbXBvcnQgeyBGaWVsZHNVdGlscyB9IGZyb20gJy4vZmllbGRzLnV0aWxzJztcblxuLy8gQGR5bmFtaWNcbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBGaWVsZHNQdXJnZXIge1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZmllbGRzVXRpbHM6IEZpZWxkc1V0aWxzKSB7IH1cblxuICBwdWJsaWMgY2xlYXJIaWRkZW5GaWVsZHMoZm9ybTogRm9ybUdyb3VwLCB3aXphcmQ6IFdpemFyZCwgZXZlbnRUcmlnZ2VyOiBDYXNlRXZlbnRUcmlnZ2VyLCBjdXJyZW50UGFnZUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFySGlkZGVuRmllbGRGb3JGaWVsZFNob3dDb25kaXRpb24oY3VycmVudFBhZ2VJZCwgZm9ybSwgd2l6YXJkLCBldmVudFRyaWdnZXIpO1xuICAgIHRoaXMuY2xlYXJIaWRkZW5GaWVsZEZvclBhZ2VTaG93Q29uZGl0aW9uKGZvcm0sIHdpemFyZCwgZXZlbnRUcmlnZ2VyKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJIaWRkZW5GaWVsZEZvclBhZ2VTaG93Q29uZGl0aW9uKGZvcm06IEZvcm1Hcm91cCwgd2l6YXJkOiBXaXphcmQsIGV2ZW50VHJpZ2dlcjogQ2FzZUV2ZW50VHJpZ2dlcik6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRFdmVudFN0YXRlID0gdGhpcy5maWVsZHNVdGlscy5nZXRDdXJyZW50RXZlbnRTdGF0ZShldmVudFRyaWdnZXIsIGZvcm0pO1xuICAgIHdpemFyZC5wYWdlcy5mb3JFYWNoKHdwID0+IHtcbiAgICAgIGlmICh0aGlzLmhhc1Nob3dDb25kaXRpb25QYWdlKHdwLCBjdXJyZW50RXZlbnRTdGF0ZSkpIHtcbiAgICAgICAgY29uc3QgY29uZGl0aW9uID0gbmV3IFNob3dDb25kaXRpb24od3Auc2hvd19jb25kaXRpb24pO1xuICAgICAgICBpZiAodGhpcy5pc0hpZGRlbihjb25kaXRpb24sIGN1cnJlbnRFdmVudFN0YXRlKSkge1xuICAgICAgICAgIHRoaXMucmVzZXRQYWdlKGZvcm0sIHdwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckhpZGRlbkZpZWxkRm9yRmllbGRTaG93Q29uZGl0aW9uKGN1cnJlbnRQYWdlSWQ6IHN0cmluZyxcbiAgICBmb3JtOiBGb3JtR3JvdXAsXG4gICAgd2l6YXJkOiBXaXphcmQsXG4gICAgZXZlbnRUcmlnZ2VyOiBDYXNlRXZlbnRUcmlnZ2VyKTogdm9pZCB7XG4gICAgY29uc3QgZm9ybUZpZWxkcyA9IGZvcm0uZ2V0UmF3VmFsdWUoKTtcbiAgICBjb25zdCBjdXJyZW50UGFnZTogV2l6YXJkUGFnZSA9IHdpemFyZC5nZXRQYWdlKGN1cnJlbnRQYWdlSWQsIHRoaXMuZmllbGRzVXRpbHMuYnVpbGRDYW5TaG93UHJlZGljYXRlKGV2ZW50VHJpZ2dlciwgZm9ybSkpO1xuICAgIGN1cnJlbnRQYWdlLndpemFyZF9wYWdlX2ZpZWxkcy5mb3JFYWNoKHdwZiA9PiB7XG4gICAgICBjb25zdCBjYXNlRmllbGQgPSB0aGlzLmZpbmRDYXNlRmllbGRCeVdpemFyZFBhZ2VGaWVsZElkKGN1cnJlbnRQYWdlLCB3cGYpO1xuICAgICAgaWYgKHRoaXMuaGFzU2hvd0NvbmRpdGlvbkZpZWxkKGNhc2VGaWVsZCwgZm9ybUZpZWxkcykpIHtcbiAgICAgICAgY29uc3QgY29uZGl0aW9uID0gbmV3IFNob3dDb25kaXRpb24oY2FzZUZpZWxkLnNob3dfY29uZGl0aW9uKTtcbiAgICAgICAgaWYgKHRoaXMuaXNIaWRkZW4oY29uZGl0aW9uLCBmb3JtRmllbGRzLmRhdGEpICYmICEodGhpcy5pc1JlYWRvbmx5KGNhc2VGaWVsZCkpKSB7XG4gICAgICAgICAgdGhpcy5yZXNldEZpZWxkKGZvcm0sIGNhc2VGaWVsZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMucmV0YWluSGlkZGVuVmFsdWVCeUZpZWxkVHlwZShjYXNlRmllbGQsIGZvcm0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZXRhaW5IaWRkZW5WYWx1ZUJ5RmllbGRUeXBlKGZpZWxkOiBDYXNlRmllbGQsIGZvcm06IGFueSk6IHZvaWQge1xuICAgIC8vIHNvIGZhciBvbmx5IGFwcGxpZXMgdG8gdGhlIG5ldyBmaWVsZCB0eXBlIE9yZ2FuaXNhdGlvblBvbGljeSB3aGljaCBuZWVkcyB0byByZXRhaW4gdGhlIGRlZmF1bHQgY2FzZSByb2xlIHZhbHVlXG4gICAgLy8gZm9yIG90aGVyIGNhc2UgZmllbGRzIHRoZXJlIHNob3VsZCBiZSBubyBzaWRlIGVmZmVjdHNcbiAgICBpZiAoZmllbGQgJiYgZmllbGQuZmllbGRfdHlwZSAmJiBmaWVsZC5maWVsZF90eXBlLmlkID09PSAnT3JnYW5pc2F0aW9uUG9saWN5Jykge1xuICAgICAgLy8gPGJ1YmJsZV93cmFwPlxuICAgICAgLy8gRG9pbmcgc29tZSBudWxsIGNoZWNraW5nIHRvIHN0b3AgaXQgZnJvbSBmYWxsaW5nIG92ZXIuXG4gICAgICBjb25zdCBkYXRhOiBGb3JtR3JvdXAgPSBmb3JtLmdldCgnZGF0YScpIGFzIEZvcm1Hcm91cDtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkR3JvdXA6IEZvcm1Hcm91cCA9IGRhdGEuY29udHJvbHNbZmllbGQuaWRdIGFzIEZvcm1Hcm91cDtcbiAgICAgICAgaWYgKGZpZWxkR3JvdXApIHtcbiAgICAgICAgICBjb25zdCBjYXNlUm9sZUZvcm1Db250cm9sOiBGb3JtQ29udHJvbCA9IGZpZWxkR3JvdXAuZ2V0KCdPcmdQb2xpY3lDYXNlQXNzaWduZWRSb2xlJykgYXMgRm9ybUNvbnRyb2w7XG4gICAgICAgICAgaWYgKGNhc2VSb2xlRm9ybUNvbnRyb2wpIHtcbiAgICAgICAgICAgIGNhc2VSb2xlRm9ybUNvbnRyb2wuZW5hYmxlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyA8L2J1YmJsZV93cmFwPlxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNIaWRkZW4oY29uZGl0aW9uOiBTaG93Q29uZGl0aW9uLCBmb3JtRmllbGRzOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIWNvbmRpdGlvbi5tYXRjaChmb3JtRmllbGRzKTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZENhc2VGaWVsZEJ5V2l6YXJkUGFnZUZpZWxkSWQoY3VycmVudFBhZ2U6IFdpemFyZFBhZ2UsIHdpemFyZFBhZ2VGaWVsZDogV2l6YXJkUGFnZUZpZWxkKTogQ2FzZUZpZWxkIHtcbiAgICByZXR1cm4gY3VycmVudFBhZ2UuY2FzZV9maWVsZHMuZmluZChjZiA9PiBjZi5pZCA9PT0gd2l6YXJkUGFnZUZpZWxkLmNhc2VfZmllbGRfaWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNTaG93Q29uZGl0aW9uUGFnZSh3aXphcmRQYWdlOiBXaXphcmRQYWdlLCBmb3JtRmllbGRzOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gd2l6YXJkUGFnZS5zaG93X2NvbmRpdGlvbiAmJiBmb3JtRmllbGRzW3RoaXMuZ2V0U2hvd0NvbmRpdGlvbktleSh3aXphcmRQYWdlLnNob3dfY29uZGl0aW9uKV07XG4gIH1cblxuICBwcml2YXRlIGhhc1Nob3dDb25kaXRpb25GaWVsZChjYXNlRmllbGQ6IENhc2VGaWVsZCwgZm9ybUZpZWxkczogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNhc2VGaWVsZC5zaG93X2NvbmRpdGlvbiAmJiBmb3JtRmllbGRzLmRhdGFbdGhpcy5nZXRTaG93Q29uZGl0aW9uS2V5KGNhc2VGaWVsZC5zaG93X2NvbmRpdGlvbildO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTaG93Q29uZGl0aW9uS2V5KHNob3dDb25kaXRpb246IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gTmVlZCB0byBhbGxvdyBmb3IgbmVnYXRlZCBjb25kaXRpb25zLCBpLmUuICE9LCBhcyB3ZWxsIGFzIHJlZ3VsYXIgb25lcyAoPSlcbiAgICAvLyBBbHNvIG5lZWQgdG8gYWxsb3cgZm9yIGNvbmRpdGlvbnMgc3BlY2lmaWVkIHVzaW5nIHRoZSBcIkNPTlRBSU5TXCIga2V5d29yZFxuICAgIHJldHVybiBzaG93Q29uZGl0aW9uLnNwbGl0KC8hPXw9fENPTlRBSU5TLylbMF07XG4gIH1cblxuICBwcml2YXRlIHJlc2V0RmllbGQoZm9ybTogRm9ybUdyb3VwLCBmaWVsZDogQ2FzZUZpZWxkLCBjYWxsZWRGcm9tUmVzZXRQYWdlID0gZmFsc2UpOiB2b2lkIHtcbiAgICAvKipcbiAgICAgKiBJZiB0aGUgaGlkZGVuIGZpZWxkJ3MgdmFsdWUgaXMgdG8gYmUgcmV0YWluZWQsIGRvIG5vdGhpbmcgKGV4Y2VwdCBpZiBpdCBpcyBhIENvbXBsZXggdHlwZSBvciBjb2xsZWN0aW9uIG9mXG4gICAgICogQ29tcGxleCB0eXBlcykuIFRoaXMgaXMgYSBjaGFuZ2UgdG8gdGhlIHByZXZpb3VzIGJlaGF2aW91ciAod2hpY2ggdXNlZCB0byBjbGVhciB0aGUgZmllbGQgdmFsdWUgYnV0IHJlbW92ZSBpdFxuICAgICAqIGZyb20gc3VibWlzc2lvbiBhcyBhbiB1cGRhdGUgdG8gdGhlIGJhY2stZW5kKS4gVGhlIG5ldyBiZWhhdmlvdXIgaXMgdG8gbGVhdmUgdGhlIGZpZWxkIGFzIGlzLCBzbyBpZiB0aGUgZmllbGRcbiAgICAgKiBpcyBoaWRkZW4gYnV0IHRoZW4gdW4taGlkZGVuIGJlZm9yZSBmb3JtIHN1Ym1pc3Npb24sIGFueSBwcmV2aW91c2x5IGVudGVyZWQgdmFsdWUgaXMgcmV0YWluZWQuXG4gICAgICpcbiAgICAgKiBGb3IgQ29tcGxleCBmaWVsZCB0eXBlcywgYW4gYWRkaXRpb25hbCBjaGVjayBvZiBzdWItZmllbGRzIGlzIHJlcXVpcmVkLiBUaGUgc2FtZSBhcHBsaWVzIHRvIGEgY29sbGVjdGlvbiBvZlxuICAgICAqIENvbXBsZXggdHlwZXMuXG4gICAgICovXG4gICAgaWYgKGZpZWxkLnJldGFpbl9oaWRkZW5fdmFsdWUpIHtcbiAgICAgIGNvbnN0IGZpZWxkVHlwZTogRmllbGRUeXBlRW51bSA9IGZpZWxkLmZpZWxkX3R5cGUudHlwZTtcbiAgICAgIC8vIElmIHRoZSBmaWVsZCBpcyBhIENvbXBsZXggdHlwZSwgbG9vcCBvdmVyIGl0cyBzdWItZmllbGRzIGFuZCBjYWxsIGRlbGV0ZUZpZWxkVmFsdWUoKSBmb3IgYW55IHN1Yi1maWVsZHNcbiAgICAgIC8vIHdoZXJlIHJldGFpbl9oaWRkZW5fdmFsdWUgaXMgZmFsc2UsIE9SIGZvciBhbnkgQ29tcGxleCBzdWItZmllbGRzICpyZWdhcmRsZXNzIG9mIHRoZWlyIHJldGFpbl9oaWRkZW5fdmFsdWUqXG4gICAgICAvLyAoaW4gb3JkZXIgdG8gaW5zcGVjdCB0aGUgc3ViLWZpZWxkcyBvZiBhIENvbXBsZXggdHlwZSB3aXRoaW4gYW5vdGhlciBDb21wbGV4IHR5cGUpXG4gICAgICBpZiAoZmllbGRUeXBlID09PSAnQ29tcGxleCcgJiYgZmllbGQuZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAoY29uc3QgY29tcGxleFN1YkZpZWxkIG9mIGZpZWxkLmZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMpIHtcbiAgICAgICAgICBpZiAoKGNvbXBsZXhTdWJGaWVsZC5maWVsZF90eXBlLnR5cGUgPT09ICdDb21wbGV4JyAmJiBjb21wbGV4U3ViRmllbGQuZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcy5sZW5ndGggPiAwKSB8fFxuICAgICAgICAgICAgIWNvbXBsZXhTdWJGaWVsZC5yZXRhaW5faGlkZGVuX3ZhbHVlKSB7XG4gICAgICAgICAgICAvLyBDaGVjayBmb3IgdGhlIGV4aXN0ZW5jZSBvZiB0aGUgcGFyZW50IEZvcm1Hcm91cCBjb3JyZXNwb25kaW5nIHRvIHRoZSBDb21wbGV4IGZpZWxkOyBpZiBpdCBleGlzdHMsIGNhbGxcbiAgICAgICAgICAgIC8vIGRlbGV0ZUZpZWxkVmFsdWUoKSB0byBkZWxldGUgdGhlIHN1Yi1maWVsZFxuICAgICAgICAgICAgY29uc3QgcGFyZW50Rm9ybUdyb3VwID0gKGZvcm0uZ2V0KCdkYXRhJykgYXMgRm9ybUdyb3VwKS5jb250cm9sc1tmaWVsZC5pZF0gYXMgRm9ybUdyb3VwO1xuICAgICAgICAgICAgaWYgKHBhcmVudEZvcm1Hcm91cCkge1xuICAgICAgICAgICAgICB0aGlzLmRlbGV0ZUZpZWxkVmFsdWUocGFyZW50Rm9ybUdyb3VwLCBjb21wbGV4U3ViRmllbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChmaWVsZFR5cGUgPT09ICdDb2xsZWN0aW9uJyAmJiBmaWVsZC5maWVsZF90eXBlLmNvbGxlY3Rpb25fZmllbGRfdHlwZS50eXBlID09PSAnQ29tcGxleCcgJiZcbiAgICAgICAgZmllbGQuZmllbGRfdHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyBJZiB0aGUgZmllbGQgaXMgYSBjb2xsZWN0aW9uIG9mIENvbXBsZXggdHlwZXMsIGxvb3AgdGhyb3VnaCBlYWNoIG9uZSBhbmQgY2FsbCBkZWxldGVGaWVsZFZhbHVlKCkgZm9yIGFueVxuICAgICAgICAvLyBzdWItZmllbGRzIHdoZXJlIHJldGFpbl9oaWRkZW5fdmFsdWUgaXMgZmFsc2UsIE9SIGZvciBhbnkgQ29tcGxleCBzdWItZmllbGRzICpyZWdhcmRsZXNzIG9mIHRoZWlyXG4gICAgICAgIC8vIHJldGFpbl9oaWRkZW5fdmFsdWUqIChpbiBvcmRlciB0byBpbnNwZWN0IHRoZSBzdWItZmllbGRzIG9mIGEgQ29tcGxleCB0eXBlIHdpdGhpbiBhbm90aGVyIENvbXBsZXggdHlwZSlcblxuICAgICAgICAvLyBHZXQgdGhlIGFycmF5IG9mIGZpZWxkIGNvbnRyb2xzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIENvbXBsZXggZmllbGQgdmFsdWVzXG4gICAgICAgIGNvbnN0IGZpZWxkQ29udHJvbHMgPSAoZm9ybS5nZXQoJ2RhdGEnKSBhcyBGb3JtR3JvdXApLmNvbnRyb2xzW2ZpZWxkLmlkXSBhcyBGb3JtQXJyYXk7XG5cbiAgICAgICAgaWYgKGZpZWxkQ29udHJvbHMpIHtcbiAgICAgICAgICAvLyBHZXQgdGhlIGFycmF5IG9mIENvbXBsZXggZmllbGQgdmFsdWVzXG4gICAgICAgICAgY29uc3QgY29tcGxleEZpZWxkVmFsdWVzID0gZmllbGRDb250cm9scy52YWx1ZSBhcyBhbnlbXTtcblxuICAgICAgICAgIC8vIEZvciBlYWNoIENvbXBsZXggZmllbGQgdmFsdWUsIGdldCB0aGUgSUQgb2YgZWFjaCBzdWItZmllbGQgd2l0aGluIGl0IGFuZCB1c2UgYXMgYSBrZXkgdG8gZmluZCB0aGVcbiAgICAgICAgICAvLyBjb3JyZXNwb25kaW5nIHN1Yi1DYXNlRmllbGQgKHdoaWNoIGNvbnRhaW5zIHRoZSBmaWVsZCB0eXBlIGluZm9ybWF0aW9uKVxuICAgICAgICAgIGlmIChjb21wbGV4RmllbGRWYWx1ZXMpIHtcbiAgICAgICAgICAgIGNvbXBsZXhGaWVsZFZhbHVlcy5mb3JFYWNoKChmaWVsZFZhbHVlLCBpbmRleCkgPT4gT2JqZWN0LmtleXMoZmllbGRWYWx1ZS52YWx1ZSkuZm9yRWFjaChzdWJGaWVsZElkID0+IHtcbiAgICAgICAgICAgICAgLy8gRmluZCB0aGUgc3ViLUNhc2VGaWVsZCBjb3JyZXNwb25kaW5nIHRvIHRoZSBzdWItZmllbGQgSURcbiAgICAgICAgICAgICAgbGV0IHN1YkNhc2VGaWVsZDogQ2FzZUZpZWxkO1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNhc2VGaWVsZCBvZiBmaWVsZC5maWVsZF90eXBlLmNvbGxlY3Rpb25fZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcykge1xuICAgICAgICAgICAgICAgIGlmIChjYXNlRmllbGQuaWQgPT09IHN1YkZpZWxkSWQpIHtcbiAgICAgICAgICAgICAgICAgIHN1YkNhc2VGaWVsZCA9IGNhc2VGaWVsZDtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGRlbGV0ZSB0aGUgc3ViLWZpZWxkIHZhbHVlIGlmIHJldGFpbl9oaWRkZW5fdmFsdWUgaXMgZmFsc2UsIE9SIGlmIHRoZSBzdWItZmllbGQgdHlwZSBpc1xuICAgICAgICAgICAgICAvLyBDb21wbGV4IGFuZCByZWdhcmRsZXNzIG9mIHJldGFpbl9oaWRkZW5fdmFsdWUsIHBhc3NpbmcgaW4gdGhlIHBhcmVudCBGb3JtR3JvdXBcbiAgICAgICAgICAgICAgaWYgKHN1YkNhc2VGaWVsZCAmJlxuICAgICAgICAgICAgICAgICgoc3ViQ2FzZUZpZWxkLmZpZWxkX3R5cGUudHlwZSA9PT0gJ0NvbXBsZXgnICYmIHN1YkNhc2VGaWVsZC5maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzLmxlbmd0aCA+IDApIHx8XG4gICAgICAgICAgICAgICAgICAhc3ViQ2FzZUZpZWxkLnJldGFpbl9oaWRkZW5fdmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50Rm9ybUdyb3VwOiBGb3JtR3JvdXAgPSBmaWVsZENvbnRyb2xzLmF0KGluZGV4KS5nZXQoJ3ZhbHVlJykgYXMgRm9ybUdyb3VwO1xuICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlRmllbGRWYWx1ZShwYXJlbnRGb3JtR3JvdXAsIHN1YkNhc2VGaWVsZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNhbGxlZEZyb21SZXNldFBhZ2UpIHtcbiAgICAgIC8vIERlbGV0ZSB0aGUgZmllbGQgZnJvbSBmb3JtR3JvdXBcbiAgICAgIGNvbnN0IGRhdGFHcm91cCA9IGZvcm0uZ2V0KCdkYXRhJykgYXMgRm9ybUdyb3VwO1xuICAgICAgZGF0YUdyb3VwLnJlbW92ZUNvbnRyb2woZmllbGQuaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBEZWxldGUgdGhlIGZpZWxkIHZhbHVlXG4gICAgICB0aGlzLmRlbGV0ZUZpZWxkVmFsdWUoZm9ybS5nZXQoJ2RhdGEnKSBhcyBGb3JtR3JvdXAsIGZpZWxkKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlc2V0UGFnZShmb3JtOiBGb3JtR3JvdXAsIHdpemFyZFBhZ2U6IFdpemFyZFBhZ2UpOiB2b2lkIHtcbiAgICB3aXphcmRQYWdlLndpemFyZF9wYWdlX2ZpZWxkcy5mb3JFYWNoKHdwZiA9PiB7XG4gICAgICBjb25zdCBjYXNlRmllbGQgPSB0aGlzLmZpbmRDYXNlRmllbGRCeVdpemFyZFBhZ2VGaWVsZElkKHdpemFyZFBhZ2UsIHdwZik7XG4gICAgICB0aGlzLnJlc2V0RmllbGQoZm9ybSwgY2FzZUZpZWxkLCB0cnVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VHlwZShlbGVtOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZWxlbSkuc2xpY2UoOCwgLTEpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc09iamVjdChlbGVtOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUeXBlKGVsZW0pID09PSAnT2JqZWN0JztcbiAgfVxuXG4gIC8vIFRPRE86IGNhbGwgaXNSZWFkT25seSBvbiBDYXNlRmllbGRzIG9uY2Ugd2UgbWFrZSBpdCBhdmFpbGFibGVcbiAgcHJpdmF0ZSBpc1JlYWRvbmx5KGNhc2VGaWVsZDogQ2FzZUZpZWxkKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNhc2VGaWVsZC5kaXNwbGF5X2NvbnRleHQudG9VcHBlckNhc2UoKSA9PT0gJ1JFQURPTkxZJztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWxldGVzIGEgZmllbGQgdmFsdWUgYnkgc2V0dGluZyB0aGUgdmFsdWUgb2YgdGhlIGNvcnJlc3BvbmRpbmcge0BsaW5rIEZvcm1Db250cm9sfSB0byBudWxsIChvciBhbiBlbXB0eSBhcnJheVxuICAgKiBpZiB0aGUgZmllbGQgdHlwZSBpcyBgQ29sbGVjdGlvbmApLCBleGNlcHQgd2hlbiB0aGUgZmllbGQgdHlwZSBpcyBgQ29tcGxleGAgb3IgYERvY3VtZW50YC4gRm9yIGBDb21wbGV4YCBmaWVsZFxuICAgKiB0eXBlcywgdGhpcyByZWN1cnNpdmUgbWV0aG9kIGlzIGNhbGxlZCB1bnRpbCBzaW1wbGUgb3IgXCJiYXNlXCIgZmllbGQgdHlwZXMgYXJlIHJlYWNoZWQuIEZvciBgRG9jdW1lbnRgIGZpZWxkXG4gICAqIHR5cGVzLCBpdHMgX3N1Yi1maWVsZF8gYEZvcm1Db250cm9sYCB2YWx1ZXMgYXJlIHNldCB0byBudWxsLlxuICAgKlxuICAgKiBAcGFyYW0gZm9ybUdyb3VwIFRoZSBgRm9ybUdyb3VwYCBpbnN0YW5jZSBjb250YWluaW5nIHRoZSBgRm9ybUNvbnRyb2xgIGZvciB0aGUgc3BlY2lmaWVkIGZpZWxkXG4gICAqIEBwYXJhbSBmaWVsZCBUaGUgYENhc2VGaWVsZGAgd2hvc2UgdmFsdWUgaXMgdG8gYmUgZGVsZXRlZCBpbiB0aGUgYmFja2VuZFxuICAgKiBAcGFyYW0gcGFyZW50RmllbGQgUmVmZXJlbmNlIHRvIHRoZSBwYXJlbnQgYENhc2VGaWVsZGAuIFVzZWQgZm9yIGNoZWNraW5nIHNwZWNpZmljYWxseSB3aGVyZSBhIENvbXBsZXggZmllbGQgYW5kXG4gICAqIGl0cyBzdWItZmllbGRzIGhhdmUgYHJldGFpbl9oaWRkZW5fdmFsdWVgIHNldCB0byBgdHJ1ZWAsIGJ1dCB0aGUgZmllbGQncyBwYXJlbnQgaGFzIGl0IHNldCB0byBgZmFsc2VgIG9yIHVuZGVmaW5lZFxuICAgKi9cbiAgcHVibGljIGRlbGV0ZUZpZWxkVmFsdWUoZm9ybUdyb3VwOiBGb3JtR3JvdXAsIGZpZWxkOiBDYXNlRmllbGQsIHBhcmVudEZpZWxkPzogQ2FzZUZpZWxkKTogdm9pZCB7XG4gICAgY29uc3QgZmllbGRUeXBlOiBGaWVsZFR5cGVFbnVtID0gZmllbGQuZmllbGRfdHlwZS50eXBlO1xuICAgIGNvbnN0IGZpZWxkQ29udHJvbCA9IGZvcm1Hcm91cC5nZXQoZmllbGQuaWQpO1xuXG4gICAgaWYgKGZpZWxkQ29udHJvbCkge1xuICAgICAgc3dpdGNoIChmaWVsZFR5cGUpIHtcbiAgICAgICAgY2FzZSAnQ29tcGxleCc6XG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogSWYgdGhlIGZpZWxkIGlzIGEgQ29tcGxleCB0eXBlLCBsb29wIG92ZXIgaXRzIHN1Yi1maWVsZHMgYW5kIGNhbGwgZGVsZXRlRmllbGRWYWx1ZSgpIGZvcjpcbiAgICAgICAgICAgKlxuICAgICAgICAgICAqICogQW55IHN1Yi1maWVsZHMgd2hlcmUgcmV0YWluX2hpZGRlbl92YWx1ZSBpcyBmYWxzZS91bmRlZmluZWQsIGlmIHRoZSBwYXJlbnQgZmllbGQgaGFzXG4gICAgICAgICAgICogcmV0YWluX2hpZGRlbl92YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICogKiBBTEwgc3ViLWZpZWxkcyBpZiB0aGUgcGFyZW50IGZpZWxkIGhhcyByZXRhaW5faGlkZGVuX3ZhbHVlID0gdHJ1ZSBCVVQgaXRzIF9vd25fIHBhcmVudCBoYXNcbiAgICAgICAgICAgKiByZXRhaW5faGlkZGVuX3ZhbHVlID0gZmFsc2UvdW5kZWZpbmVkICh0aHVzIG92ZXJyaWRpbmcgYW55dGhpbmcgZWxzZSk7XG4gICAgICAgICAgICogKiBBTEwgc3ViLWZpZWxkcyBpZiB0aGUgcGFyZW50IGZpZWxkIGhhcyByZXRhaW5faGlkZGVuX3ZhbHVlID0gZmFsc2UvdW5kZWZpbmVkO1xuICAgICAgICAgICAqICogQW55IENvbXBsZXggc3ViLWZpZWxkcyAqcmVnYXJkbGVzcyBvZiB0aGVpciByZXRhaW5faGlkZGVuX3ZhbHVlKiAoaW4gb3JkZXIgdG8gaW5zcGVjdCB0aGUgc3ViLWZpZWxkc1xuICAgICAgICAgICAqIG9mIGEgQ29tcGxleCB0eXBlIHdpdGhpbiBhbm90aGVyIENvbXBsZXggdHlwZSlcbiAgICAgICAgICAgKi9cbiAgICAgICAgICBpZiAoZmllbGQuZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbXBsZXhTdWJGaWVsZCBvZiBmaWVsZC5maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzKSB7XG4gICAgICAgICAgICAgIGlmICgoY29tcGxleFN1YkZpZWxkLmZpZWxkX3R5cGUudHlwZSA9PT0gJ0NvbXBsZXgnICYmIGNvbXBsZXhTdWJGaWVsZC5maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzLmxlbmd0aCA+IDApIHx8XG4gICAgICAgICAgICAgICAgKGNvbXBsZXhTdWJGaWVsZC5maWVsZF90eXBlLnR5cGUgIT09ICdDb21wbGV4JyAmJlxuICAgICAgICAgICAgICAgICAgKGZpZWxkLnJldGFpbl9oaWRkZW5fdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgPyAhY29tcGxleFN1YkZpZWxkLnJldGFpbl9oaWRkZW5fdmFsdWUgfHwgKHBhcmVudEZpZWxkICYmICFwYXJlbnRGaWVsZC5yZXRhaW5faGlkZGVuX3ZhbHVlKVxuICAgICAgICAgICAgICAgICAgICA6IHRydWUpKSkge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBmaWVsZENvbnRyb2wgaXMgY2FzdCB0byBhIEZvcm1Hcm91cCBiZWNhdXNlIGEgQ29tcGxleCBmaWVsZCB0eXBlIHVzZXMgdGhpcyBhcyBpdHMgdW5kZXJseWluZ1xuICAgICAgICAgICAgICAgIC8vIGltcGxlbWVudGF0aW9uXG4gICAgICAgICAgICAgICAgdGhpcy5kZWxldGVGaWVsZFZhbHVlKGZpZWxkQ29udHJvbCBhcyBGb3JtR3JvdXAsIGNvbXBsZXhTdWJGaWVsZCwgZmllbGQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdDb2xsZWN0aW9uJzpcbiAgICAgICAgICAvLyBJZiBpdCBpcyBhIGNvbGxlY3Rpb24gb2YgQ29tcGxleCB0eXBlcywgbG9vcCB0aHJvdWdoIGVhY2ggb25lOyBlbHNlIGZhbGwgdGhyb3VnaCB0byBiZSBoYW5kbGVkIGFzIGFcbiAgICAgICAgICAvLyBjb2xsZWN0aW9uIG9mIHNpbXBsZSB0eXBlcyAoaW4gdGhlIHNhbWUgd2F5IGFzIE11bHRpU2VsZWN0TGlzdCksIHVubGVzcyBpdCdzIGEgY29sbGVjdGlvbiBvZiBEb2N1bWVudFxuICAgICAgICAgIC8vIHR5cGVzLCB3aGljaCByZXF1aXJlcyBkaWZmZXJlbnQgaGFuZGxpbmdcbiAgICAgICAgICBjb25zdCBjb2xsZWN0aW9uRmllbGRUeXBlID0gZmllbGQuZmllbGRfdHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGU7XG4gICAgICAgICAgaWYgKGNvbGxlY3Rpb25GaWVsZFR5cGUudHlwZSA9PT0gJ0NvbXBsZXgnICYmIGNvbGxlY3Rpb25GaWVsZFR5cGUuY29tcGxleF9maWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgLy8gR2V0IHRoZSBhcnJheSBvZiBDb21wbGV4IGZpZWxkIHZhbHVlc1xuICAgICAgICAgICAgY29uc3QgY29tcGxleEZpZWxkVmFsdWVzID0gZmllbGRDb250cm9sLnZhbHVlIGFzIGFueVtdO1xuXG4gICAgICAgICAgICAvLyBGb3IgZWFjaCBDb21wbGV4IGZpZWxkIHZhbHVlLCBnZXQgdGhlIElEIG9mIGVhY2ggc3ViLWZpZWxkIHdpdGhpbiBpdCBhbmQgdXNlIGFzIGEga2V5IHRvIGZpbmQgdGhlXG4gICAgICAgICAgICAvLyBjb3JyZXNwb25kaW5nIHN1Yi1DYXNlRmllbGQgKHdoaWNoIGNvbnRhaW5zIHRoZSBmaWVsZCB0eXBlIGluZm9ybWF0aW9uKVxuICAgICAgICAgICAgaWYgKGNvbXBsZXhGaWVsZFZhbHVlcykge1xuICAgICAgICAgICAgICBjb21wbGV4RmllbGRWYWx1ZXMuZm9yRWFjaCgoZmllbGRWYWx1ZSwgaW5kZXgpID0+IE9iamVjdC5rZXlzKGZpZWxkVmFsdWUudmFsdWUpLmZvckVhY2goc3ViRmllbGRJZCA9PiB7XG4gICAgICAgICAgICAgICAgLy8gRmluZCB0aGUgc3ViLUNhc2VGaWVsZCBjb3JyZXNwb25kaW5nIHRvIHRoZSBzdWItZmllbGQgSURcbiAgICAgICAgICAgICAgICBsZXQgc3ViQ2FzZUZpZWxkOiBDYXNlRmllbGQ7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjYXNlRmllbGQgb2YgY29sbGVjdGlvbkZpZWxkVHlwZS5jb21wbGV4X2ZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgaWYgKGNhc2VGaWVsZC5pZCA9PT0gc3ViRmllbGRJZCkge1xuICAgICAgICAgICAgICAgICAgICBzdWJDYXNlRmllbGQgPSBjYXNlRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGRlbGV0ZSB0aGUgc3ViLWZpZWxkIHZhbHVlLCBwYXNzaW5nIGluIHRoZSBwYXJlbnQgRm9ybUdyb3VwXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50Rm9ybUdyb3VwOiBGb3JtR3JvdXAgPSAoZmllbGRDb250cm9sIGFzIEZvcm1BcnJheSkuYXQoaW5kZXgpLmdldCgndmFsdWUnKSBhcyBGb3JtR3JvdXA7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWxldGVGaWVsZFZhbHVlKHBhcmVudEZvcm1Hcm91cCwgc3ViQ2FzZUZpZWxkKTtcbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSBlbHNlIGlmIChjb2xsZWN0aW9uRmllbGRUeXBlLnR5cGUgPT09ICdEb2N1bWVudCcpIHtcbiAgICAgICAgICAgIC8vIEdldCB0aGUgYXJyYXkgb2YgRG9jdW1lbnQgZmllbGQgdmFsdWVzXG4gICAgICAgICAgICBjb25zdCBkb2N1bWVudEZpZWxkVmFsdWVzID0gZmllbGRDb250cm9sLnZhbHVlIGFzIGFueVtdO1xuXG4gICAgICAgICAgICAvLyBGb3IgZWFjaCBEb2N1bWVudCBmaWVsZCB2YWx1ZSwgc2V0IGFsbCBpdHMgcHJvcGVydHkgdmFsdWVzIHRvIG51bGwgKHRoaXMgaXMgbm90IGFjY2VwdGVkIGJ5IHRoZVxuICAgICAgICAgICAgLy8gYmFjay1lbmQgYnV0IHdpbGwgYmUgaGFuZGxlZCBieSBzYW5pdGlzZU9iamVjdCgpIGluIEZvcm1WYWx1ZVNlcnZpY2UgYmVmb3JlIHNlbmRpbmcgLSBzZWUgYmVsb3cgZm9yXG4gICAgICAgICAgICAvLyB0aGUgc2luZ2xlIERvY3VtZW50IGNhc2UpXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnRGaWVsZFZhbHVlcykge1xuICAgICAgICAgICAgICBkb2N1bWVudEZpZWxkVmFsdWVzLmZvckVhY2goKGZpZWxkVmFsdWUsIGluZGV4KSA9PiBPYmplY3Qua2V5cyhmaWVsZFZhbHVlLnZhbHVlKS5mb3JFYWNoKHN1YkZpZWxkSWQgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgRm9ybUdyb3VwIGNvbnRhaW5pbmcgdGhlIEZvcm1Db250cm9sIGZvciB0aGUgc3ViLWZpZWxkIGFuZCBzZXQgaXRzIHZhbHVlIHRvIG51bGxcbiAgICAgICAgICAgICAgICAoZmllbGRDb250cm9sIGFzIEZvcm1BcnJheSkuYXQoaW5kZXgpLmdldChgdmFsdWUuJHtzdWJGaWVsZElkfWApLnNldFZhbHVlKG51bGwpO1xuICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIC8vIE9taXR0ZWQgXCJicmVha1wiIGlzIGludGVudGlvbmFsIGJlY2F1c2UgYSBjb2xsZWN0aW9uIHNob3VsZCBiZSBoYW5kbGVkIGFzIHBlciBNdWx0aVNlbGVjdExpc3QgaWYgaXQgaXNcbiAgICAgICAgLy8gbm90IGEgY29sbGVjdGlvbiBvZiBDb21wbGV4IHR5cGVzXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tc3dpdGNoLWNhc2UtZmFsbC10aHJvdWdoXG4gICAgICAgIGNhc2UgJ011bHRpU2VsZWN0TGlzdCc6XG4gICAgICAgICAgLy8gRmllbGQgY29udHJvbCBzaG91bGQgYmUgYSBGb3JtQXJyYXksIHNvIG1hcCBlYWNoIG9mIGl0cyB2YWx1ZXMgdG8gbnVsbFxuICAgICAgICAgIC8vIE5PVEU6IFRoZSBGb3JtQXJyYXkgY2Fubm90IGp1c3QgYmUgc2V0IHRvIGFuIGVtcHR5IGFycmF5IGJlY2F1c2UgQW5ndWxhciBjaGVja3MgdGhhdCBhbGwgZXhpc3RpbmcgdmFsdWVzXG4gICAgICAgICAgLy8gb2YgYSBGb3JtQXJyYXkgYXJlIHByZXNlbnQ7IHNldHRpbmcgdGhlIGNvbnRyb2wncyB2YWx1ZSB0byBhbiBlbXB0eSBhcnJheSBjYXVzZXMgYSBydW50aW1lIGVycm9yXG4gICAgICAgICAgaWYgKGZpZWxkQ29udHJvbC52YWx1ZSkge1xuICAgICAgICAgICAgLy8gTmVlZCB0byBhbGxvdyBmb3IgZmllbGQgdmFsdWVzIHRoYXQgYXJlIG9iamVjdHMsIG5vdCBqdXN0IHByaW1pdGl2ZXNcbiAgICAgICAgICAgIGZpZWxkQ29udHJvbC5zZXRWYWx1ZSh0aGlzLm1hcEFycmF5VmFsdWVzVG9OdWxsKGZpZWxkQ29udHJvbC52YWx1ZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnRG9jdW1lbnQnOlxuICAgICAgICAgIC8vIE5PVEU6IFRoZSBmaWVsZCBjb250cm9sIChhIEZvcm1Hcm91cCBpbiB0aGlzIGNhc2UpIGNhbm5vdCBqdXN0IGJlIHNldCB0byBudWxsIGJlY2F1c2UgQW5ndWxhciBjaGVja3MgdGhhdFxuICAgICAgICAgIC8vIGFsbCBleGlzdGluZyB2YWx1ZXMgb2YgYSBGb3JtR3JvdXAgYXJlIHByZXNlbnQ7IHNldHRpbmcgdGhlIGNvbnRyb2wncyB2YWx1ZSB0byBudWxsIGNhdXNlcyBhIHJ1bnRpbWUgZXJyb3JcbiAgICAgICAgICBjb25zdCBkb2N1bWVudEZpZWxkVmFsdWUgPSBmaWVsZENvbnRyb2wudmFsdWU7XG4gICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZG9jdW1lbnRGaWVsZFZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoZmllbGRDb250cm9sLmdldChrZXkpKSB7XG4gICAgICAgICAgICAgIC8vIFRoZSBiYWNrLWVuZCBkb2Vzbid0IGFjY2VwdCBudWxsIGFzIGEgdmFsaWQgdmFsdWUgZm9yIGFueSBvZiB0aGUgRG9jdW1lbnQgZmllbGQgdHlwZSBwcm9wZXJ0aWVzIGJ1dFxuICAgICAgICAgICAgICAvLyB0aGlzIGlzIGhhbmRsZWQgYnkgc2FuaXRpc2VPYmplY3QoKSBpbiBGb3JtVmFsdWVTZXJ2aWNlLCByZXR1cm5pbmcgYSBudWxsIG9iamVjdCBmb3IgdGhlIGVudGlyZVxuICAgICAgICAgICAgICAvLyBEb2N1bWVudCBmaWVsZCwgaWYgYW55IG9mIGl0cyBwcm9wZXJ0aWVzIGlzIG51bGwgLSB3aGljaCBpcyBhY2NlcHRlZCBieSB0aGUgYmFjay1lbmRcbiAgICAgICAgICAgICAgZmllbGRDb250cm9sLmdldChrZXkpLnNldFZhbHVlKG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgLy8gTm90ZTogdGhlIGRlZmF1bHQgY2FzZSBhcHBsaWVzIHRvIER5bmFtaWNMaXN0IGZpZWxkcywgdG9vXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgZmllbGRDb250cm9sLnNldFZhbHVlKG51bGwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNYXBzIGFsbCB2YWx1ZXMgb2YgYW4gYXJyYXkgdG8gYG51bGxgLCByZXRhaW5pbmcga2V5cyBmb3IgYW55IHZhbHVlcyB0aGF0IGFyZSBvYmplY3RzLiBGb3IgZXhhbXBsZSxcbiAgICogYFt7IGlkOiAnMCcsIHZhbHVlOiAnVGVzdCcgfSwgJ1Rlc3QnXWAgd291bGQgYmVjb21lIGBbeyBpZDogbnVsbCwgdmFsdWU6IG51bGwgfSwgbnVsbF1gLlxuICAgKiBAcGFyYW0gYXJyYXkgVGhlIGFycmF5IG9mIHZhbHVlcyB0byBtYXBcbiAgICogQHJldHVybnMgQSBuZXcgYXJyYXkgd2l0aCB0aGUgbWFwcGVkIHZhbHVlc1xuICAgKi9cbiAgcHVibGljIG1hcEFycmF5VmFsdWVzVG9OdWxsKGFycmF5OiBhbnlbXSk6IGFueVtdIHtcbiAgICBpZiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGFycmF5Lm1hcChlbGVtZW50ID0+IHtcbiAgICAgICAgaWYgKGVsZW1lbnQgIT09IHVuZGVmaW5lZCAmJiBlbGVtZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHR5cGVvZiBlbGVtZW50ID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgPyBPYmplY3QuYXNzaWduKHt9LCAuLi5PYmplY3Qua2V5cyhlbGVtZW50KS5tYXAoayA9PiAoeyBba106IG51bGwgfSkpKVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBhcnJheVxuICAgIH1cbiAgfVxufVxuIl19