@hmcts/rpx-xui-common-lib 2.1.5-javascript-void-removal → 2.1.5-srt-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.
@@ -75,7 +75,7 @@ function WriteAddressFieldComponent_div_2_div_13_Template(rf, ctx) { if (rf & 1)
75
75
  function WriteAddressFieldComponent_div_2_a_14_Template(rf, ctx) { if (rf & 1) {
76
76
  const _r5 = i0.ɵɵgetCurrentView();
77
77
  i0.ɵɵelementStart(0, "a", 23);
78
- i0.ɵɵlistener("click", function WriteAddressFieldComponent_div_2_a_14_Template_a_click_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(2); ctx_r0.blankAddress(); return i0.ɵɵresetView($event.preventDefault()); });
78
+ i0.ɵɵlistener("click", function WriteAddressFieldComponent_div_2_a_14_Template_a_click_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.blankAddress()); });
79
79
  i0.ɵɵtext(1, "I can't enter a UK postcode");
80
80
  i0.ɵɵelementEnd();
81
81
  } }
@@ -296,7 +296,7 @@ export class WriteAddressFieldComponent {
296
296
  this.addressFormGroup.get('postcode').patchValue(postcodeNeeded ? this.formGroup.get('address').get('postCode').value : '');
297
297
  }
298
298
  static { this.ɵfac = function WriteAddressFieldComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || WriteAddressFieldComponent)(i0.ɵɵdirectiveInject(i1.AddressService)); }; }
299
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: WriteAddressFieldComponent, selectors: [["xuilib-write-address-field"]], inputs: { formGroup: "formGroup", internationalMode: "internationalMode", isInternational: "isInternational", submissionAttempted: "submissionAttempted", startedInternational: "startedInternational", addressChosen: "addressChosen" }, outputs: { postcodeOptionSelected: "postcodeOptionSelected", internationalModeStart: "internationalModeStart", ukAddressOptionSelected: "ukAddressOptionSelected", canSelectAddress: "canSelectAddress", resetSubmission: "resetSubmission" }, features: [i0.ɵɵNgOnChangesFeature], decls: 5, vars: 8, consts: [[1, "govuk-form-group", 3, "formGroup", "ngClass"], ["class", "govuk-error-message", 4, "ngIf"], [4, "ngIf"], ["id", "govuk-radios", "class", "govuk-radios", "data-module", "govuk-radios", 4, "ngIf"], [3, "formGroup", "isInternational", "submissionAttempted", 4, "ngIf"], [1, "govuk-error-message"], [1, "govuk-visually-hidden"], [1, "govuk-label"], ["id", "addressLookup", 1, "govuk-body", "postcode-lookup", 3, "ngClass"], ["for", "postcodeInput"], [1, "govuk-hint"], [1, "govuk-body"], ["type", "text", "id", "postcodeInput", "name", "postcode", "formControlName", "postcode", 1, "govuk-input", "govuk-!-width-one-third", "postcodeinput", "inline-block", 3, "ngClass"], ["type", "button", 1, "govuk-button", "find-address", 3, "click"], ["class", "govuk-body", "id", "selectAddress", 4, "ngIf"], ["class", "manual-link govuk-link", "href", "#", 3, "click", 4, "ngIf"], ["id", "selectAddress", 1, "govuk-body"], [1, "govuk-body", 3, "ngClass"], ["for", "addressList", 1, "govuk-label"], [1, "form-label"], ["id", "addressList", "name", "address", "formControlName", "addressList", "focusElement", "", 1, "form-control", "govuk-select", "ccd-dropdown", "addressList", 3, "change"], [3, "ngValue", 4, "ngFor", "ngForOf"], [3, "ngValue"], ["href", "#", 1, "manual-link", "govuk-link", 3, "click"], ["id", "govuk-radios", "data-module", "govuk-radios", 1, "govuk-radios"], [1, "govuk-radios__item"], ["id", "yes", "value", "yes", "name", "ukAddress", "type", "radio", "data-aria-controls", "address-fields", "formControlName", "ukAddress", 1, "govuk-radios__input", 3, "click"], ["for", "yes", 1, "govuk-label", "govuk-radios__label"], ["id", "no", "value", "no", "name", "ukAddress", "type", "radio", "data-aria-controls", "address-fields", "formControlName", "ukAddress", 1, "govuk-radios__input", 3, "click"], ["for", "no", 1, "govuk-label", "govuk-radios__label"], ["id", "address-fields", 1, "govuk-radios__conditional"], [3, "formGroup", "isInternational", "submissionAttempted"]], template: function WriteAddressFieldComponent_Template(rf, ctx) { if (rf & 1) {
299
+ static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: WriteAddressFieldComponent, selectors: [["xuilib-write-address-field"]], inputs: { formGroup: "formGroup", internationalMode: "internationalMode", isInternational: "isInternational", submissionAttempted: "submissionAttempted", startedInternational: "startedInternational", addressChosen: "addressChosen" }, outputs: { postcodeOptionSelected: "postcodeOptionSelected", internationalModeStart: "internationalModeStart", ukAddressOptionSelected: "ukAddressOptionSelected", canSelectAddress: "canSelectAddress", resetSubmission: "resetSubmission" }, features: [i0.ɵɵNgOnChangesFeature], decls: 5, vars: 8, consts: [[1, "govuk-form-group", 3, "formGroup", "ngClass"], ["class", "govuk-error-message", 4, "ngIf"], [4, "ngIf"], ["id", "govuk-radios", "class", "govuk-radios", "data-module", "govuk-radios", 4, "ngIf"], [3, "formGroup", "isInternational", "submissionAttempted", 4, "ngIf"], [1, "govuk-error-message"], [1, "govuk-visually-hidden"], [1, "govuk-label"], ["id", "addressLookup", 1, "govuk-body", "postcode-lookup", 3, "ngClass"], ["for", "postcodeInput"], [1, "govuk-hint"], [1, "govuk-body"], ["type", "text", "id", "postcodeInput", "name", "postcode", "formControlName", "postcode", 1, "govuk-input", "govuk-!-width-one-third", "postcodeinput", "inline-block", 3, "ngClass"], ["type", "button", 1, "govuk-button", "find-address", 3, "click"], ["class", "govuk-body", "id", "selectAddress", 4, "ngIf"], ["class", "manual-link govuk-link", "href", "javascript:void(0)", 3, "click", 4, "ngIf"], ["id", "selectAddress", 1, "govuk-body"], [1, "govuk-body", 3, "ngClass"], ["for", "addressList", 1, "govuk-label"], [1, "form-label"], ["id", "addressList", "name", "address", "formControlName", "addressList", "focusElement", "", 1, "form-control", "govuk-select", "ccd-dropdown", "addressList", 3, "change"], [3, "ngValue", 4, "ngFor", "ngForOf"], [3, "ngValue"], ["href", "javascript:void(0)", 1, "manual-link", "govuk-link", 3, "click"], ["id", "govuk-radios", "data-module", "govuk-radios", 1, "govuk-radios"], [1, "govuk-radios__item"], ["id", "yes", "value", "yes", "name", "ukAddress", "type", "radio", "data-aria-controls", "address-fields", "formControlName", "ukAddress", 1, "govuk-radios__input", 3, "click"], ["for", "yes", 1, "govuk-label", "govuk-radios__label"], ["id", "no", "value", "no", "name", "ukAddress", "type", "radio", "data-aria-controls", "address-fields", "formControlName", "ukAddress", 1, "govuk-radios__input", 3, "click"], ["for", "no", 1, "govuk-label", "govuk-radios__label"], ["id", "address-fields", 1, "govuk-radios__conditional"], [3, "formGroup", "isInternational", "submissionAttempted"]], template: function WriteAddressFieldComponent_Template(rf, ctx) { if (rf & 1) {
300
300
  i0.ɵɵelementStart(0, "div", 0);
301
301
  i0.ɵɵtemplate(1, WriteAddressFieldComponent_p_1_Template, 4, 1, "p", 1)(2, WriteAddressFieldComponent_div_2_Template, 15, 9, "div", 2)(3, WriteAddressFieldComponent_div_3_Template, 11, 1, "div", 3)(4, WriteAddressFieldComponent_xuilib_write_address_inputs_4_Template, 1, 3, "xuilib-write-address-inputs", 4);
302
302
  i0.ɵɵelementEnd();
@@ -314,7 +314,7 @@ export class WriteAddressFieldComponent {
314
314
  }
315
315
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(WriteAddressFieldComponent, [{
316
316
  type: Component,
317
- args: [{ selector: 'xuilib-write-address-field', template: "<div class=\"govuk-form-group\" [formGroup]=\"addressFormGroup\"\n [ngClass]=\"{'govuk-form-group--error': optionErrorsPresent}\">\n <p class=\"govuk-error-message\" *ngIf=\"optionErrorsPresent\">\n <span class=\"govuk-visually-hidden\">Error:</span>{{optionErrorMessage}}\n </p>\n <div *ngIf=\"postcodeLookupVisible()\">\n <span class=\"govuk-label\"><strong>Provide address details</strong></span>\n <div class=\"govuk-body postcode-lookup\" id=\"addressLookup\"\n [ngClass]=\"{'govuk-form-group--error': missingPostcode || postcodeErrorPresent(true)}\">\n <label for=\"postcodeInput\">\n <span class=\"govuk-hint\">Enter a UK postcode</span>\n </label>\n <p class=\"govuk-error-message\" *ngIf=\"missingPostcode || postcodeErrorPresent(true)\">\n <span class=\"govuk-visually-hidden\">Error:</span>{{postcodeErrorMessage}}\n </p>\n <div class=\"govuk-body\">\n <input type=\"text\" [ngClass]=\"{'govuk-input--error': missingPostcode}\" id=\"postcodeInput\" name=\"postcode\"\n class=\"govuk-input govuk-!-width-one-third postcodeinput inline-block\" formControlName=\"postcode\">\n <button type=\"button\" class=\"govuk-button find-address\" (click)=\"findAddress()\">Find address</button>\n </div>\n </div>\n\n <div class=\"govuk-body\" *ngIf=\"addressOptions\" id=\"selectAddress\">\n <div class=\"govuk-body\" [ngClass]=\"{'govuk-form-group--error': postcodeErrorPresent(false)}\">\n <label class=\"govuk-label\" for=\"addressList\">\n <span class=\"form-label\">Select an address</span>\n </label>\n <p class=\"govuk-error-message\" *ngIf=\"postcodeErrorPresent(false)\">\n <span class=\"govuk-visually-hidden\">Error:</span>{{selectErrorMessage}}\n </p>\n <select class=\"form-control govuk-select ccd-dropdown addressList\" id=\"addressList\" name=\"address\"\n formControlName=\"addressList\" (change)=\"addressSelected()\" focusElement>\n <option *ngFor=\"let addressOption of addressOptions\" [ngValue]=\"addressOption.value\">\n {{addressOption.description}}\n </option>\n </select>\n </div>\n </div>\n\n <a class=\"manual-link govuk-link\" *ngIf=\"!shouldShowDetailFields() || (!startedInternational && !addressChosen)\"\n (click)=\"blankAddress(); $event.preventDefault()\" href=\"#\">I can't enter a UK postcode</a>\n </div>\n\n <div id=\"govuk-radios\" class=\"govuk-radios\" data-module=\"govuk-radios\"\n *ngIf=\"shouldShowDetailFields() && internationalMode && startedInternational && !addressChosen\">\n <div class=\"govuk-radios__item\">\n <input class=\"govuk-radios__input\" id=\"yes\" value=\"yes\" name=\"ukAddress\" type=\"radio\"\n data-aria-controls=\"address-fields\" (click)=\"setInternationalAddress(false)\" formControlName=\"ukAddress\">\n <label class=\"govuk-label govuk-radios__label\" for=\"yes\">\n Yes\n </label>\n </div>\n <div class=\"govuk-radios__item\">\n <input class=\"govuk-radios__input\" id=\"no\" value=\"no\" name=\"ukAddress\" type=\"radio\"\n data-aria-controls=\"address-fields\" (click)=\"setInternationalAddress(true)\" formControlName=\"ukAddress\">\n <label class=\"govuk-label govuk-radios__label\" for=\"no\">\n No\n </label>\n </div>\n <div class=\"govuk-radios__conditional\" id=\"address-fields\">\n <xuilib-write-address-inputs *ngIf=\"isInternational !== undefined\" [formGroup]=\"formGroup\"\n [isInternational]=\"isInternational\" [submissionAttempted]=\"submissionAttempted\">\n </xuilib-write-address-inputs>\n </div>\n </div>\n\n <xuilib-write-address-inputs *ngIf=\"shouldShowDetailFields() && (addressChosen || !internationalMode)\"\n [formGroup]=\"formGroup\" [isInternational]=\"false\" [submissionAttempted]=\"submissionAttempted\">\n </xuilib-write-address-inputs>\n\n</div>", styles: [".manual-link{cursor:pointer;display:block;text-decoration:underline;font-size:1.1875rem}.postcode-lookup{margin-bottom:-20px}.find-address{left:1%}:host{display:block}\n"] }]
317
+ args: [{ selector: 'xuilib-write-address-field', template: "<div class=\"govuk-form-group\" [formGroup]=\"addressFormGroup\"\n [ngClass]=\"{'govuk-form-group--error': optionErrorsPresent}\">\n <p class=\"govuk-error-message\" *ngIf=\"optionErrorsPresent\">\n <span class=\"govuk-visually-hidden\">Error:</span>{{optionErrorMessage}}\n </p>\n <div *ngIf=\"postcodeLookupVisible()\">\n <span class=\"govuk-label\"><strong>Provide address details</strong></span>\n <div class=\"govuk-body postcode-lookup\" id=\"addressLookup\"\n [ngClass]=\"{'govuk-form-group--error': missingPostcode || postcodeErrorPresent(true)}\">\n <label for=\"postcodeInput\">\n <span class=\"govuk-hint\">Enter a UK postcode</span>\n </label>\n <p class=\"govuk-error-message\" *ngIf=\"missingPostcode || postcodeErrorPresent(true)\">\n <span class=\"govuk-visually-hidden\">Error:</span>{{postcodeErrorMessage}}\n </p>\n <div class=\"govuk-body\">\n <input type=\"text\" [ngClass]=\"{'govuk-input--error': missingPostcode}\" id=\"postcodeInput\" name=\"postcode\"\n class=\"govuk-input govuk-!-width-one-third postcodeinput inline-block\" formControlName=\"postcode\">\n <button type=\"button\" class=\"govuk-button find-address\" (click)=\"findAddress()\">Find address</button>\n </div>\n </div>\n\n <div class=\"govuk-body\" *ngIf=\"addressOptions\" id=\"selectAddress\">\n <div class=\"govuk-body\" [ngClass]=\"{'govuk-form-group--error': postcodeErrorPresent(false)}\">\n <label class=\"govuk-label\" for=\"addressList\">\n <span class=\"form-label\">Select an address</span>\n </label>\n <p class=\"govuk-error-message\" *ngIf=\"postcodeErrorPresent(false)\">\n <span class=\"govuk-visually-hidden\">Error:</span>{{selectErrorMessage}}\n </p>\n <select class=\"form-control govuk-select ccd-dropdown addressList\" id=\"addressList\" name=\"address\"\n formControlName=\"addressList\" (change)=\"addressSelected()\" focusElement>\n <option *ngFor=\"let addressOption of addressOptions\" [ngValue]=\"addressOption.value\">\n {{addressOption.description}}\n </option>\n </select>\n </div>\n </div>\n\n <a class=\"manual-link govuk-link\" *ngIf=\"!shouldShowDetailFields() || (!startedInternational && !addressChosen)\"\n (click)=\"blankAddress()\" href=\"javascript:void(0)\">I can't enter a UK postcode</a>\n </div>\n\n <div id=\"govuk-radios\" class=\"govuk-radios\" data-module=\"govuk-radios\"\n *ngIf=\"shouldShowDetailFields() && internationalMode && startedInternational && !addressChosen\">\n <div class=\"govuk-radios__item\">\n <input class=\"govuk-radios__input\" id=\"yes\" value=\"yes\" name=\"ukAddress\" type=\"radio\"\n data-aria-controls=\"address-fields\" (click)=\"setInternationalAddress(false)\" formControlName=\"ukAddress\">\n <label class=\"govuk-label govuk-radios__label\" for=\"yes\">\n Yes\n </label>\n </div>\n <div class=\"govuk-radios__item\">\n <input class=\"govuk-radios__input\" id=\"no\" value=\"no\" name=\"ukAddress\" type=\"radio\"\n data-aria-controls=\"address-fields\" (click)=\"setInternationalAddress(true)\" formControlName=\"ukAddress\">\n <label class=\"govuk-label govuk-radios__label\" for=\"no\">\n No\n </label>\n </div>\n <div class=\"govuk-radios__conditional\" id=\"address-fields\">\n <xuilib-write-address-inputs *ngIf=\"isInternational !== undefined\" [formGroup]=\"formGroup\"\n [isInternational]=\"isInternational\" [submissionAttempted]=\"submissionAttempted\">\n </xuilib-write-address-inputs>\n </div>\n </div>\n\n <xuilib-write-address-inputs *ngIf=\"shouldShowDetailFields() && (addressChosen || !internationalMode)\"\n [formGroup]=\"formGroup\" [isInternational]=\"false\" [submissionAttempted]=\"submissionAttempted\">\n </xuilib-write-address-inputs>\n\n</div>", styles: [".manual-link{cursor:pointer;display:block;text-decoration:underline;font-size:1.1875rem}.postcode-lookup{margin-bottom:-20px}.find-address{left:1%}:host{display:block}\n"] }]
318
318
  }], () => [{ type: i1.AddressService }], { formGroup: [{
319
319
  type: Input
320
320
  }], internationalMode: [{
@@ -339,4 +339,4 @@ export class WriteAddressFieldComponent {
339
339
  type: Output
340
340
  }] }); })();
341
341
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(WriteAddressFieldComponent, { className: "WriteAddressFieldComponent", filePath: "lib/components/write-address/write-address.component.ts", lineNumber: 12 }); })();
342
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGUtYWRkcmVzcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9leHVpLWNvbW1vbi1saWIvc3JjL2xpYi9jb21wb25lbnRzL3dyaXRlLWFkZHJlc3Mvd3JpdGUtYWRkcmVzcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9leHVpLWNvbW1vbi1saWIvc3JjL2xpYi9jb21wb25lbnRzL3dyaXRlLWFkZHJlc3Mvd3JpdGUtYWRkcmVzcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsa0JBQWtCLEVBQWdCLE1BQU0sY0FBYyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7Ozs7Ozs7OztJQ0RwRSxBQURGLDRCQUEyRCxjQUNyQjtJQUFBLHNCQUFNO0lBQUEsaUJBQU87SUFBQSxZQUNuRDtJQUFBLGlCQUFJOzs7SUFEK0MsZUFDbkQ7SUFEbUQseURBQ25EOzs7SUFTTSxBQURGLDRCQUFxRixjQUMvQztJQUFBLHNCQUFNO0lBQUEsaUJBQU87SUFBQSxZQUNuRDtJQUFBLGlCQUFJOzs7SUFEK0MsZUFDbkQ7SUFEbUQsMkRBQ25EOzs7SUFjSSxBQURGLDRCQUFtRSxjQUM3QjtJQUFBLHNCQUFNO0lBQUEsaUJBQU87SUFBQSxZQUNuRDtJQUFBLGlCQUFJOzs7SUFEK0MsZUFDbkQ7SUFEbUQseURBQ25EOzs7SUFHRSxrQ0FBcUY7SUFDbkYsWUFDRjtJQUFBLGlCQUFTOzs7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eUI7WUFBekIsOENBQXlCO1lBR25ELGNBQTZCO1lBQTdCLGtEQUE2QjtZQXVDaEMsY0FBNkY7WUFBN0YsOEhBQTZGO1lBc0JsRSxjQUF1RTtZQUF2RSxvR0FBdUU7OztpRkR2RDFGLDBCQUEwQjtjQUx0QyxTQUFTOzJCQUNFLDRCQUE0QjsrQ0FPL0IsU0FBUztrQkFEZixLQUFLO1lBR0MsaUJBQWlCO2tCQUR2QixLQUFLO1lBR0MsZUFBZTtrQkFEckIsS0FBSztZQUdDLG1CQUFtQjtrQkFEekIsS0FBSztZQUdDLG9CQUFvQjtrQkFEMUIsS0FBSztZQUdDLGFBQWE7a0JBRG5CLEtBQUs7WUFHVyxzQkFBc0I7a0JBQXRDLE1BQU07WUFDVSxzQkFBc0I7a0JBQXRDLE1BQU07WUFDVSx1QkFBdUI7a0JBQXZDLE1BQU07WUFFVSxnQkFBZ0I7a0JBQWhDLE1BQU07WUFHVSxlQUFlO2tCQUEvQixNQUFNOztrRkF0QkksMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWRkcmVzc01lc3NhZ2VFbnVtLCBBZGRyZXNzTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHsgQWRkcmVzc09wdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9hZGRyZXNzLW9wdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBBZGRyZXNzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FkZHJlc3MvYWRkcmVzcy5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAneHVpbGliLXdyaXRlLWFkZHJlc3MtZmllbGQnLFxuICBzdHlsZVVybHM6IFsnLi93cml0ZS1hZGRyZXNzLmNvbXBvbmVudC5zY3NzJ10sXG4gIHRlbXBsYXRlVXJsOiAnLi93cml0ZS1hZGRyZXNzLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBXcml0ZUFkZHJlc3NGaWVsZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZm9ybUdyb3VwOiBGb3JtR3JvdXA7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBpbnRlcm5hdGlvbmFsTW9kZSA9IGZhbHNlO1xuICBASW5wdXQoKVxuICBwdWJsaWMgaXNJbnRlcm5hdGlvbmFsOiBib29sZWFuO1xuICBASW5wdXQoKVxuICBwdWJsaWMgc3VibWlzc2lvbkF0dGVtcHRlZCA9IGZhbHNlO1xuICBASW5wdXQoKVxuICBwdWJsaWMgc3RhcnRlZEludGVybmF0aW9uYWw6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhZGRyZXNzQ2hvc2VuID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIHB1YmxpYyBwb3N0Y29kZU9wdGlvblNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgcHVibGljIGludGVybmF0aW9uYWxNb2RlU3RhcnQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgdWtBZGRyZXNzT3B0aW9uU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIC8vIGluZGljYXRlZCB3aGF0IGVycm9yIHRvIGRpc3BsYXkgdG8gdXNlclxuICBAT3V0cHV0KCkgcHVibGljIGNhblNlbGVjdEFkZHJlc3MgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIC8vIHRlbGxzIHBhcmVudCB0byByZXNldCBzdWJtaXNzaW9uIGF0dGVtcHRlZCBmaWVsZFxuICAvLyBvbmx5IHJlbGV2YW50IHRvIHdoZW4gdXNlciByZS1jbGlja3MgZmluZCBhZGRyZXNzXG4gIEBPdXRwdXQoKSBwdWJsaWMgcmVzZXRTdWJtaXNzaW9uID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIHB1YmxpYyBhZGRyZXNzRmllbGQ6IEFkZHJlc3NNb2RlbCA9IHtcbiAgICBhZGRyZXNzTGluZTE6ICcnLFxuICAgIGFkZHJlc3NMaW5lMjogJycsXG4gICAgYWRkcmVzc0xpbmUzOiAnJyxcbiAgICBwb3N0Q29kZTogJycsXG4gICAgcG9zdFRvd246ICcnLFxuICAgIGNvdW50cnk6ICcnLFxuICAgIGNvdW50eTogJydcbiAgfTtcblxuICBwdWJsaWMgb3B0aW9uRXJyb3JzUHJlc2VudCA9IGZhbHNlO1xuICBwdWJsaWMgYWRkcmVzc1NlbGVjdGFibGUgPSBmYWxzZTtcblxuICBwdWJsaWMgYWRkcmVzc0Zvcm1Hcm91cDogRm9ybUdyb3VwO1xuXG4gIHB1YmxpYyBhZGRyZXNzT3B0aW9uczogQWRkcmVzc09wdGlvbltdO1xuXG4gIHB1YmxpYyBtaXNzaW5nUG9zdGNvZGUgPSBmYWxzZTtcblxuICBwdWJsaWMgb3B0aW9uRXJyb3JNZXNzYWdlID0gQWRkcmVzc01lc3NhZ2VFbnVtLk5PX09QVElPTl9TRUxFQ1RFRDtcbiAgcHVibGljIHBvc3Rjb2RlRXJyb3JNZXNzYWdlID0gQWRkcmVzc01lc3NhZ2VFbnVtLk5PX1BPU1RDT0RFX1NFTEVDVEVEO1xuICBwdWJsaWMgc2VsZWN0RXJyb3JNZXNzYWdlID0gQWRkcmVzc01lc3NhZ2VFbnVtLlNFTEVDVF9BRERSRVNTO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgYWRkcmVzc2VzU2VydmljZTogQWRkcmVzc1NlcnZpY2UpIHtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZm9ybUdyb3VwLmdldCgnYWRkcmVzcycpKSB7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5hZGRDb250cm9sKCdhZGRyZXNzJywgbmV3IEZvcm1Db250cm9sKHt9KSk7XG4gICAgfVxuICAgIC8vIHNldCB0aGUgZm9ybSBncm91cCByZWxldmFudCB0byBvbmx5IHRoZSBleHRlcm5hbCBwYXJlbnQgY29tcG9uZW50XG4gICAgdGhpcy5hZGRyZXNzRm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgICAvLyByZWxldmFudCB0byBpbnRlcm5hdGlvbmFsIG1vZGVcbiAgICAgIHVrQWRkcmVzczogbmV3IEZvcm1Db250cm9sKHRoaXMuaXNJbnRlcm5hdGlvbmFsICE9PSB1bmRlZmluZWQgPyAodGhpcy5pc0ludGVybmF0aW9uYWwgPyAnbm8nIDogJ3llcycpIDogbnVsbCksXG4gICAgICAvLyByZWxldmFudCB0byBwb3N0b2NvZGUgbG9va3VwXG4gICAgICBwb3N0Y29kZTogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICAgIGFkZHJlc3NMaXN0OiBuZXcgRm9ybUNvbnRyb2woJycpXG4gICAgfSk7XG4gICAgdGhpcy5zZXRQb3N0Y29kZUZvcm0oKTtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kQWRkcmVzcygpIHtcbiAgICB0aGlzLnJlc2V0U3VibWlzc2lvbi5lbWl0KCk7XG4gICAgaWYgKCF0aGlzLmFkZHJlc3NGb3JtR3JvdXAuZ2V0KCdwb3N0Y29kZScpLnZhbHVlKSB7XG4gICAgICB0aGlzLm1pc3NpbmdQb3N0Y29kZSA9IHRydWU7XG4gICAgICB0aGlzLmNhblNlbGVjdEFkZHJlc3MuZW1pdChmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWlzc2luZ1Bvc3Rjb2RlID0gZmFsc2U7XG4gICAgICB0aGlzLmFkZHJlc3NGaWVsZCA9IG51bGw7XG4gICAgICBjb25zdCBwb3N0Y29kZSA9IHRoaXMuYWRkcmVzc0Zvcm1Hcm91cC5nZXQoJ3Bvc3Rjb2RlJykudmFsdWU7XG4gICAgICB0aGlzLmFkZHJlc3NPcHRpb25zID0gW107XG4gICAgICB0aGlzLmFkZHJlc3Nlc1NlcnZpY2UuZ2V0QWRkcmVzc2VzRm9yUG9zdGNvZGUocG9zdGNvZGUucmVwbGFjZSgnICcsICcnKS50b1VwcGVyQ2FzZSgpKS5zdWJzY3JpYmUoXG4gICAgICAgIHJlc3VsdCA9PiB7XG4gICAgICAgICAgcmVzdWx0LmZvckVhY2goXG4gICAgICAgICAgICBhZGRyZXNzID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5hZGRyZXNzT3B0aW9ucy5wdXNoKG5ldyBBZGRyZXNzT3B0aW9uKGFkZHJlc3MsIG51bGwpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuYWRkcmVzc09wdGlvbnMudW5zaGlmdChcbiAgICAgICAgICAgIG5ldyBBZGRyZXNzT3B0aW9uKHVuZGVmaW5lZCwgdGhpcy5kZWZhdWx0TGFiZWwodGhpcy5hZGRyZXNzT3B0aW9ucy5sZW5ndGgpKVxuICAgICAgICAgICk7XG4gICAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICAgIC8vIEVkaXRlZCB0aGlzIHNvIHRoYXQgZXJyb3JzIG5vdCBwcm9kdWNlZCBpZiB0aGVyZSBhcmUgbm8gcmVzdWx0cyBmb3IgYSBwb3N0Y29kZVxuICAgICAgICAgIGNvbnNvbGUubG9nKGBBbiBlcnJvciBvY2N1cnJlZCByZXRyaWV2aW5nIGFkZHJlc3NlcyBmb3IgcG9zdGNvZGUgJHtwb3N0Y29kZX0uICR7ZXJyb3J9YCk7XG4gICAgICAgICAgdGhpcy5hZGRyZXNzT3B0aW9ucy51bnNoaWZ0KFxuICAgICAgICAgICAgbmV3IEFkZHJlc3NPcHRpb24odW5kZWZpbmVkLCB0aGlzLmRlZmF1bHRMYWJlbCh0aGlzLmFkZHJlc3NPcHRpb25zLmxlbmd0aCkpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB0aGlzLmFkZHJlc3NGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzTGlzdCcpLnNldFZhbHVlKHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGJsYW5rQWRkcmVzcygpIHtcbiAgICB0aGlzLnNldEZvcm1WYWx1ZSgpO1xuICAgIHRoaXMucmVzZXRTdWJtaXNzaW9uLmVtaXQoKTtcbiAgICBpZiAodGhpcy5pbnRlcm5hdGlvbmFsTW9kZSkge1xuICAgICAgdGhpcy5pbnRlcm5hdGlvbmFsTW9kZVN0YXJ0LmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2hvdWxkU2hvd0RldGFpbEZpZWxkcygpIHtcbiAgICBpZiAoIXRoaXMuZm9ybUdyb3VwLmdldCgnYWRkcmVzcycpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGFkZHJlc3MgPSB0aGlzLmZvcm1Hcm91cC5nZXQoJ2FkZHJlc3MnKS52YWx1ZTtcbiAgICBsZXQgaGFzQWRkcmVzcyA9IGZhbHNlO1xuICAgIGlmIChhZGRyZXNzKSB7XG4gICAgICBPYmplY3Qua2V5cyhhZGRyZXNzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgaWYgKGFkZHJlc3Nba2V5XSAhPT0gbnVsbCkge1xuICAgICAgICAgIGhhc0FkZHJlc3MgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGhhc0FkZHJlc3M7XG4gIH1cblxuICBwdWJsaWMgYWRkcmVzc1NlbGVjdGVkKCkge1xuICAgIHRoaXMubWlzc2luZ1Bvc3Rjb2RlID0gZmFsc2U7XG4gICAgdGhpcy5hZGRyZXNzRmllbGQgPSB0aGlzLmFkZHJlc3NGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzTGlzdCcpLnZhbHVlO1xuICAgIHRoaXMuYWRkcmVzc0Nob3NlbiA9IHRydWU7XG4gICAgdGhpcy5zZXRGb3JtVmFsdWUoKTtcbiAgICB0aGlzLnBvc3Rjb2RlT3B0aW9uU2VsZWN0ZWQuZW1pdCgpO1xuICB9XG5cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBjb25zdCBhZGRyZXNzQ2hhbmdlID0gY2hhbmdlc1snYWRkcmVzc0ZpZWxkJ107XG4gICAgY29uc3QgaW50ZXJuYXRpb25hbENoYW5nZSA9IGNoYW5nZXNbJ2lzSW50ZXJuYXRpb25hbCddO1xuICAgIGlmIChhZGRyZXNzQ2hhbmdlKSB7XG4gICAgICB0aGlzLnNldEZvcm1WYWx1ZSgpO1xuICAgIH1cbiAgICBpZiAoaW50ZXJuYXRpb25hbENoYW5nZSAmJiB0aGlzLmFkZHJlc3NGb3JtR3JvdXAgJiYgdGhpcy5hZGRyZXNzRm9ybUdyb3VwLmdldCgndWtBZGRyZXNzJykpIHtcbiAgICAgIHRoaXMuYWRkcmVzc0Zvcm1Hcm91cC5nZXQoJ3VrQWRkcmVzcycpLnBhdGNoVmFsdWUodGhpcy5pc0ludGVybmF0aW9uYWwgPyAnbm8nIDogJ3llcycpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuYWRkcmVzc0Nob3NlbiAmJiB0aGlzLmFkZHJlc3NGb3JtR3JvdXAgJiYgdGhpcy5hZGRyZXNzRm9ybUdyb3VwLmdldCgnYWRkcmVzc0xpc3QnKSkge1xuICAgICAgLy8gcmVzZXRzIGFkZHJlc3Mgb3B0aW9ucyBvbiBpbnRlcm5hbCBiYWNrXG4gICAgICB0aGlzLmFkZHJlc3NGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzTGlzdCcpLnBhdGNoVmFsdWUodW5kZWZpbmVkKTtcbiAgICB9XG4gICAgdGhpcy5jaGVja0lmRXJyb3JzTmVlZGVkKCk7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrSWZFcnJvcnNOZWVkZWQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3VibWlzc2lvbkF0dGVtcHRlZCAmJiB0aGlzLmludGVybmF0aW9uYWxNb2RlICYmICF0aGlzLnBvc3Rjb2RlTG9va3VwVmlzaWJsZSgpKSB7XG4gICAgICAvLyBlbnN1cmUgZXJyb3JzIHByZXNlbnQgd2hlbiBzdWJtaXNzaW9uIGF0dG1lbXB0ZWQgb24gaW50ZXJuYXRpb25hbCByYWRpbyBidXR0b25zXG4gICAgICB0aGlzLm9wdGlvbkVycm9yc1ByZXNlbnQgPSB0cnVlO1xuICAgICAgdGhpcy5vcHRpb25FcnJvck1lc3NhZ2UgPSBBZGRyZXNzTWVzc2FnZUVudW0uTk9fT1BUSU9OX1NFTEVDVEVEO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMub3B0aW9uRXJyb3JzUHJlc2VudCA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25FcnJvcnNQcmVzZW50ICYmICh0aGlzLmFkZHJlc3NDaG9zZW4gfHwgdGhpcy5pc0ludGVybmF0aW9uYWwgIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgIC8vIGVuc3VyZSBwYXJlbnQgZXJyb3JzIG5vdCBwcmVzZW50IHdoZW4gdGhlIGNoaWxkIGZvcm0gZ3JvdXAgaXMgcHJlc2VudFxuICAgICAgdGhpcy5vcHRpb25FcnJvcnNQcmVzZW50ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldEludGVybmF0aW9uYWxBZGRyZXNzKGlzSW50ZXJuYXRpb25hbDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuaXNJbnRlcm5hdGlvbmFsID0gaXNJbnRlcm5hdGlvbmFsO1xuICAgIHRoaXMudWtBZGRyZXNzT3B0aW9uU2VsZWN0ZWQuZW1pdCh0aGlzLmlzSW50ZXJuYXRpb25hbCk7XG4gIH1cblxuICBwdWJsaWMgcG9zdGNvZGVFcnJvclByZXNlbnQoaXNQb3N0Y29kZUZpZWxkOiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY2hlY2tGb3JGaWVsZCA9IGlzUG9zdGNvZGVGaWVsZCA/ICF0aGlzLmFkZHJlc3NTZWxlY3RhYmxlIDogdGhpcy5hZGRyZXNzU2VsZWN0YWJsZTtcbiAgICByZXR1cm4gdGhpcy5zdWJtaXNzaW9uQXR0ZW1wdGVkICYmIGNoZWNrRm9yRmllbGQ7XG4gIH1cblxuICBwdWJsaWMgcG9zdGNvZGVMb29rdXBWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5zaG91bGRTaG93RGV0YWlsRmllbGRzKCkgfHwgKCF0aGlzLnN0YXJ0ZWRJbnRlcm5hdGlvbmFsICYmICF0aGlzLmFkZHJlc3NDaG9zZW4pO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWZhdWx0TGFiZWwobnVtYmVyT2ZBZGRyZXNzZXM6IG51bWJlcikge1xuICAgIHRoaXMuYWRkcmVzc1NlbGVjdGFibGUgPSBudW1iZXJPZkFkZHJlc3NlcyA+IDAgPyB0cnVlIDogZmFsc2U7XG4gICAgdGhpcy5jYW5TZWxlY3RBZGRyZXNzLmVtaXQodGhpcy5hZGRyZXNzU2VsZWN0YWJsZSk7XG4gICAgcmV0dXJuIG51bWJlck9mQWRkcmVzc2VzID09PSAwID8gJ05vIGFkZHJlc3MgZm91bmQnXG4gICAgICA6IGAke251bWJlck9mQWRkcmVzc2VzfSR7bnVtYmVyT2ZBZGRyZXNzZXMgPT09IDEgPyAnIGFkZHJlc3MgJyA6ICcgYWRkcmVzc2VzICd9Zm91bmRgO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRGb3JtVmFsdWUoKSB7XG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwKSB7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoJ2FkZHJlc3MnKS5wYXRjaFZhbHVlKFxuICAgICAgICB0aGlzLmFkZHJlc3NGaWVsZFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFBvc3Rjb2RlRm9ybSgpOiB2b2lkIHtcbiAgICBjb25zdCBwb3N0Y29kZU5lZWRlZCA9IHRoaXMuaXNJbnRlcm5hdGlvbmFsID09PSB1bmRlZmluZWQgJiYgdGhpcy5mb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJykgJiYgdGhpcy5mb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJykuZ2V0KCdwb3N0Q29kZScpO1xuICAgIHRoaXMuYWRkcmVzc0Zvcm1Hcm91cC5nZXQoJ3Bvc3Rjb2RlJykucGF0Y2hWYWx1ZShwb3N0Y29kZU5lZWRlZCA/IHRoaXMuZm9ybUdyb3VwLmdldCgnYWRkcmVzcycpLmdldCgncG9zdENvZGUnKS52YWx1ZSA6ICcnKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImdvdnVrLWZvcm0tZ3JvdXBcIiBbZm9ybUdyb3VwXT1cImFkZHJlc3NGb3JtR3JvdXBcIlxuICBbbmdDbGFzc109XCJ7J2dvdnVrLWZvcm0tZ3JvdXAtLWVycm9yJzogb3B0aW9uRXJyb3JzUHJlc2VudH1cIj5cbiAgPHAgY2xhc3M9XCJnb3Z1ay1lcnJvci1tZXNzYWdlXCIgKm5nSWY9XCJvcHRpb25FcnJvcnNQcmVzZW50XCI+XG4gICAgPHNwYW4gY2xhc3M9XCJnb3Z1ay12aXN1YWxseS1oaWRkZW5cIj5FcnJvcjo8L3NwYW4+e3tvcHRpb25FcnJvck1lc3NhZ2V9fVxuICA8L3A+XG4gIDxkaXYgKm5nSWY9XCJwb3N0Y29kZUxvb2t1cFZpc2libGUoKVwiPlxuICAgIDxzcGFuIGNsYXNzPVwiZ292dWstbGFiZWxcIj48c3Ryb25nPlByb3ZpZGUgYWRkcmVzcyBkZXRhaWxzPC9zdHJvbmc+PC9zcGFuPlxuICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ib2R5IHBvc3Rjb2RlLWxvb2t1cFwiIGlkPVwiYWRkcmVzc0xvb2t1cFwiXG4gICAgICBbbmdDbGFzc109XCJ7J2dvdnVrLWZvcm0tZ3JvdXAtLWVycm9yJzogbWlzc2luZ1Bvc3Rjb2RlIHx8IHBvc3Rjb2RlRXJyb3JQcmVzZW50KHRydWUpfVwiPlxuICAgICAgPGxhYmVsIGZvcj1cInBvc3Rjb2RlSW5wdXRcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJnb3Z1ay1oaW50XCI+RW50ZXIgYSBVSyBwb3N0Y29kZTwvc3Bhbj5cbiAgICAgIDwvbGFiZWw+XG4gICAgICA8cCBjbGFzcz1cImdvdnVrLWVycm9yLW1lc3NhZ2VcIiAqbmdJZj1cIm1pc3NpbmdQb3N0Y29kZSB8fCBwb3N0Y29kZUVycm9yUHJlc2VudCh0cnVlKVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImdvdnVrLXZpc3VhbGx5LWhpZGRlblwiPkVycm9yOjwvc3Bhbj57e3Bvc3Rjb2RlRXJyb3JNZXNzYWdlfX1cbiAgICAgIDwvcD5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ib2R5XCI+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFtuZ0NsYXNzXT1cInsnZ292dWstaW5wdXQtLWVycm9yJzogbWlzc2luZ1Bvc3Rjb2RlfVwiIGlkPVwicG9zdGNvZGVJbnB1dFwiIG5hbWU9XCJwb3N0Y29kZVwiXG4gICAgICAgICAgY2xhc3M9XCJnb3Z1ay1pbnB1dCBnb3Z1ay0hLXdpZHRoLW9uZS10aGlyZCBwb3N0Y29kZWlucHV0IGlubGluZS1ibG9ja1wiIGZvcm1Db250cm9sTmFtZT1cInBvc3Rjb2RlXCI+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiZ292dWstYnV0dG9uIGZpbmQtYWRkcmVzc1wiIChjbGljayk9XCJmaW5kQWRkcmVzcygpXCI+RmluZCBhZGRyZXNzPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ib2R5XCIgKm5nSWY9XCJhZGRyZXNzT3B0aW9uc1wiIGlkPVwic2VsZWN0QWRkcmVzc1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWJvZHlcIiBbbmdDbGFzc109XCJ7J2dvdnVrLWZvcm0tZ3JvdXAtLWVycm9yJzogcG9zdGNvZGVFcnJvclByZXNlbnQoZmFsc2UpfVwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJnb3Z1ay1sYWJlbFwiIGZvcj1cImFkZHJlc3NMaXN0XCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWxhYmVsXCI+U2VsZWN0IGFuIGFkZHJlc3M8L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxwIGNsYXNzPVwiZ292dWstZXJyb3ItbWVzc2FnZVwiICpuZ0lmPVwicG9zdGNvZGVFcnJvclByZXNlbnQoZmFsc2UpXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJnb3Z1ay12aXN1YWxseS1oaWRkZW5cIj5FcnJvcjo8L3NwYW4+e3tzZWxlY3RFcnJvck1lc3NhZ2V9fVxuICAgICAgICA8L3A+XG4gICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZ292dWstc2VsZWN0IGNjZC1kcm9wZG93biBhZGRyZXNzTGlzdFwiIGlkPVwiYWRkcmVzc0xpc3RcIiBuYW1lPVwiYWRkcmVzc1wiXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiYWRkcmVzc0xpc3RcIiAoY2hhbmdlKT1cImFkZHJlc3NTZWxlY3RlZCgpXCIgZm9jdXNFbGVtZW50PlxuICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGFkZHJlc3NPcHRpb24gb2YgYWRkcmVzc09wdGlvbnNcIiBbbmdWYWx1ZV09XCJhZGRyZXNzT3B0aW9uLnZhbHVlXCI+XG4gICAgICAgICAgICB7e2FkZHJlc3NPcHRpb24uZGVzY3JpcHRpb259fVxuICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICA8L3NlbGVjdD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGEgY2xhc3M9XCJtYW51YWwtbGluayBnb3Z1ay1saW5rXCIgKm5nSWY9XCIhc2hvdWxkU2hvd0RldGFpbEZpZWxkcygpIHx8ICghc3RhcnRlZEludGVybmF0aW9uYWwgJiYgIWFkZHJlc3NDaG9zZW4pXCJcbiAgICAgIChjbGljayk9XCJibGFua0FkZHJlc3MoKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIiBocmVmPVwiI1wiPkkgY2FuJ3QgZW50ZXIgYSBVSyBwb3N0Y29kZTwvYT5cbiAgPC9kaXY+XG5cbiAgPGRpdiBpZD1cImdvdnVrLXJhZGlvc1wiIGNsYXNzPVwiZ292dWstcmFkaW9zXCIgZGF0YS1tb2R1bGU9XCJnb3Z1ay1yYWRpb3NcIlxuICAgICpuZ0lmPVwic2hvdWxkU2hvd0RldGFpbEZpZWxkcygpICYmIGludGVybmF0aW9uYWxNb2RlICYmIHN0YXJ0ZWRJbnRlcm5hdGlvbmFsICYmICFhZGRyZXNzQ2hvc2VuXCI+XG4gICAgPGRpdiBjbGFzcz1cImdvdnVrLXJhZGlvc19faXRlbVwiPlxuICAgICAgPGlucHV0IGNsYXNzPVwiZ292dWstcmFkaW9zX19pbnB1dFwiIGlkPVwieWVzXCIgdmFsdWU9XCJ5ZXNcIiBuYW1lPVwidWtBZGRyZXNzXCIgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgZGF0YS1hcmlhLWNvbnRyb2xzPVwiYWRkcmVzcy1maWVsZHNcIiAoY2xpY2spPVwic2V0SW50ZXJuYXRpb25hbEFkZHJlc3MoZmFsc2UpXCIgZm9ybUNvbnRyb2xOYW1lPVwidWtBZGRyZXNzXCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJnb3Z1ay1sYWJlbCBnb3Z1ay1yYWRpb3NfX2xhYmVsXCIgZm9yPVwieWVzXCI+XG4gICAgICAgIFllc1xuICAgICAgPC9sYWJlbD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZ292dWstcmFkaW9zX19pdGVtXCI+XG4gICAgICA8aW5wdXQgY2xhc3M9XCJnb3Z1ay1yYWRpb3NfX2lucHV0XCIgaWQ9XCJub1wiIHZhbHVlPVwibm9cIiBuYW1lPVwidWtBZGRyZXNzXCIgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgZGF0YS1hcmlhLWNvbnRyb2xzPVwiYWRkcmVzcy1maWVsZHNcIiAoY2xpY2spPVwic2V0SW50ZXJuYXRpb25hbEFkZHJlc3ModHJ1ZSlcIiBmb3JtQ29udHJvbE5hbWU9XCJ1a0FkZHJlc3NcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImdvdnVrLWxhYmVsIGdvdnVrLXJhZGlvc19fbGFiZWxcIiBmb3I9XCJub1wiPlxuICAgICAgICBOb1xuICAgICAgPC9sYWJlbD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZ292dWstcmFkaW9zX19jb25kaXRpb25hbFwiIGlkPVwiYWRkcmVzcy1maWVsZHNcIj5cbiAgICAgIDx4dWlsaWItd3JpdGUtYWRkcmVzcy1pbnB1dHMgKm5nSWY9XCJpc0ludGVybmF0aW9uYWwgIT09IHVuZGVmaW5lZFwiIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCJcbiAgICAgICAgW2lzSW50ZXJuYXRpb25hbF09XCJpc0ludGVybmF0aW9uYWxcIiBbc3VibWlzc2lvbkF0dGVtcHRlZF09XCJzdWJtaXNzaW9uQXR0ZW1wdGVkXCI+XG4gICAgICA8L3h1aWxpYi13cml0ZS1hZGRyZXNzLWlucHV0cz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPHh1aWxpYi13cml0ZS1hZGRyZXNzLWlucHV0cyAqbmdJZj1cInNob3VsZFNob3dEZXRhaWxGaWVsZHMoKSAmJiAoYWRkcmVzc0Nob3NlbiB8fCAhaW50ZXJuYXRpb25hbE1vZGUpXCJcbiAgICBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiIFtpc0ludGVybmF0aW9uYWxdPVwiZmFsc2VcIiBbc3VibWlzc2lvbkF0dGVtcHRlZF09XCJzdWJtaXNzaW9uQXR0ZW1wdGVkXCI+XG4gIDwveHVpbGliLXdyaXRlLWFkZHJlc3MtaW5wdXRzPlxuXG48L2Rpdj4iXX0=
342
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGUtYWRkcmVzcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9leHVpLWNvbW1vbi1saWIvc3JjL2xpYi9jb21wb25lbnRzL3dyaXRlLWFkZHJlc3Mvd3JpdGUtYWRkcmVzcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9leHVpLWNvbW1vbi1saWIvc3JjL2xpYi9jb21wb25lbnRzL3dyaXRlLWFkZHJlc3Mvd3JpdGUtYWRkcmVzcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDekcsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsa0JBQWtCLEVBQWdCLE1BQU0sY0FBYyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7Ozs7Ozs7OztJQ0RwRSxBQURGLDRCQUEyRCxjQUNyQjtJQUFBLHNCQUFNO0lBQUEsaUJBQU87SUFBQSxZQUNuRDtJQUFBLGlCQUFJOzs7SUFEK0MsZUFDbkQ7SUFEbUQseURBQ25EOzs7SUFTTSxBQURGLDRCQUFxRixjQUMvQztJQUFBLHNCQUFNO0lBQUEsaUJBQU87SUFBQSxZQUNuRDtJQUFBLGlCQUFJOzs7SUFEK0MsZUFDbkQ7SUFEbUQsMkRBQ25EOzs7SUFjSSxBQURGLDRCQUFtRSxjQUM3QjtJQUFBLHNCQUFNO0lBQUEsaUJBQU87SUFBQSxZQUNuRDtJQUFBLGlCQUFJOzs7SUFEK0MsZUFDbkQ7SUFEbUQseURBQ25EOzs7SUFHRSxrQ0FBcUY7SUFDbkYsWUFDRjtJQUFBLGlCQUFTOzs7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QXlCO1lBR25ELGNBQTZCO1lBQTdCLGtEQUE2QjtZQXVDaEMsY0FBNkY7WUFBN0YsOEhBQTZGO1lBc0JsRSxjQUF1RTtZQUF2RSxvR0FBdUU7OztpRkR2RDFGLDBCQUEwQjtjQUx0QyxTQUFTOzJCQUNFLDRCQUE0QjsrQ0FPL0IsU0FBUztrQkFEZixLQUFLO1lBR0MsaUJBQWlCO2tCQUR2QixLQUFLO1lBR0MsZUFBZTtrQkFEckIsS0FBSztZQUdDLG1CQUFtQjtrQkFEekIsS0FBSztZQUdDLG9CQUFvQjtrQkFEMUIsS0FBSztZQUdDLGFBQWE7a0JBRG5CLEtBQUs7WUFHVyxzQkFBc0I7a0JBQXRDLE1BQU07WUFDVSxzQkFBc0I7a0JBQXRDLE1BQU07WUFDVSx1QkFBdUI7a0JBQXZDLE1BQU07WUFFVSxnQkFBZ0I7a0JBQWhDLE1BQU07WUFHVSxlQUFlO2tCQUEvQixNQUFNOztrRkF0QkksMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWRkcmVzc01lc3NhZ2VFbnVtLCBBZGRyZXNzTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHsgQWRkcmVzc09wdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9hZGRyZXNzLW9wdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBBZGRyZXNzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FkZHJlc3MvYWRkcmVzcy5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAneHVpbGliLXdyaXRlLWFkZHJlc3MtZmllbGQnLFxuICBzdHlsZVVybHM6IFsnLi93cml0ZS1hZGRyZXNzLmNvbXBvbmVudC5zY3NzJ10sXG4gIHRlbXBsYXRlVXJsOiAnLi93cml0ZS1hZGRyZXNzLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBXcml0ZUFkZHJlc3NGaWVsZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZm9ybUdyb3VwOiBGb3JtR3JvdXA7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBpbnRlcm5hdGlvbmFsTW9kZSA9IGZhbHNlO1xuICBASW5wdXQoKVxuICBwdWJsaWMgaXNJbnRlcm5hdGlvbmFsOiBib29sZWFuO1xuICBASW5wdXQoKVxuICBwdWJsaWMgc3VibWlzc2lvbkF0dGVtcHRlZCA9IGZhbHNlO1xuICBASW5wdXQoKVxuICBwdWJsaWMgc3RhcnRlZEludGVybmF0aW9uYWw6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhZGRyZXNzQ2hvc2VuID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIHB1YmxpYyBwb3N0Y29kZU9wdGlvblNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgcHVibGljIGludGVybmF0aW9uYWxNb2RlU3RhcnQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgdWtBZGRyZXNzT3B0aW9uU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIC8vIGluZGljYXRlZCB3aGF0IGVycm9yIHRvIGRpc3BsYXkgdG8gdXNlclxuICBAT3V0cHV0KCkgcHVibGljIGNhblNlbGVjdEFkZHJlc3MgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIC8vIHRlbGxzIHBhcmVudCB0byByZXNldCBzdWJtaXNzaW9uIGF0dGVtcHRlZCBmaWVsZFxuICAvLyBvbmx5IHJlbGV2YW50IHRvIHdoZW4gdXNlciByZS1jbGlja3MgZmluZCBhZGRyZXNzXG4gIEBPdXRwdXQoKSBwdWJsaWMgcmVzZXRTdWJtaXNzaW9uID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIHB1YmxpYyBhZGRyZXNzRmllbGQ6IEFkZHJlc3NNb2RlbCA9IHtcbiAgICBhZGRyZXNzTGluZTE6ICcnLFxuICAgIGFkZHJlc3NMaW5lMjogJycsXG4gICAgYWRkcmVzc0xpbmUzOiAnJyxcbiAgICBwb3N0Q29kZTogJycsXG4gICAgcG9zdFRvd246ICcnLFxuICAgIGNvdW50cnk6ICcnLFxuICAgIGNvdW50eTogJydcbiAgfTtcblxuICBwdWJsaWMgb3B0aW9uRXJyb3JzUHJlc2VudCA9IGZhbHNlO1xuICBwdWJsaWMgYWRkcmVzc1NlbGVjdGFibGUgPSBmYWxzZTtcblxuICBwdWJsaWMgYWRkcmVzc0Zvcm1Hcm91cDogRm9ybUdyb3VwO1xuXG4gIHB1YmxpYyBhZGRyZXNzT3B0aW9uczogQWRkcmVzc09wdGlvbltdO1xuXG4gIHB1YmxpYyBtaXNzaW5nUG9zdGNvZGUgPSBmYWxzZTtcblxuICBwdWJsaWMgb3B0aW9uRXJyb3JNZXNzYWdlID0gQWRkcmVzc01lc3NhZ2VFbnVtLk5PX09QVElPTl9TRUxFQ1RFRDtcbiAgcHVibGljIHBvc3Rjb2RlRXJyb3JNZXNzYWdlID0gQWRkcmVzc01lc3NhZ2VFbnVtLk5PX1BPU1RDT0RFX1NFTEVDVEVEO1xuICBwdWJsaWMgc2VsZWN0RXJyb3JNZXNzYWdlID0gQWRkcmVzc01lc3NhZ2VFbnVtLlNFTEVDVF9BRERSRVNTO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgYWRkcmVzc2VzU2VydmljZTogQWRkcmVzc1NlcnZpY2UpIHtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZm9ybUdyb3VwLmdldCgnYWRkcmVzcycpKSB7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5hZGRDb250cm9sKCdhZGRyZXNzJywgbmV3IEZvcm1Db250cm9sKHt9KSk7XG4gICAgfVxuICAgIC8vIHNldCB0aGUgZm9ybSBncm91cCByZWxldmFudCB0byBvbmx5IHRoZSBleHRlcm5hbCBwYXJlbnQgY29tcG9uZW50XG4gICAgdGhpcy5hZGRyZXNzRm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgICAvLyByZWxldmFudCB0byBpbnRlcm5hdGlvbmFsIG1vZGVcbiAgICAgIHVrQWRkcmVzczogbmV3IEZvcm1Db250cm9sKHRoaXMuaXNJbnRlcm5hdGlvbmFsICE9PSB1bmRlZmluZWQgPyAodGhpcy5pc0ludGVybmF0aW9uYWwgPyAnbm8nIDogJ3llcycpIDogbnVsbCksXG4gICAgICAvLyByZWxldmFudCB0byBwb3N0b2NvZGUgbG9va3VwXG4gICAgICBwb3N0Y29kZTogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICAgIGFkZHJlc3NMaXN0OiBuZXcgRm9ybUNvbnRyb2woJycpXG4gICAgfSk7XG4gICAgdGhpcy5zZXRQb3N0Y29kZUZvcm0oKTtcbiAgfVxuXG4gIHB1YmxpYyBmaW5kQWRkcmVzcygpIHtcbiAgICB0aGlzLnJlc2V0U3VibWlzc2lvbi5lbWl0KCk7XG4gICAgaWYgKCF0aGlzLmFkZHJlc3NGb3JtR3JvdXAuZ2V0KCdwb3N0Y29kZScpLnZhbHVlKSB7XG4gICAgICB0aGlzLm1pc3NpbmdQb3N0Y29kZSA9IHRydWU7XG4gICAgICB0aGlzLmNhblNlbGVjdEFkZHJlc3MuZW1pdChmYWxzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWlzc2luZ1Bvc3Rjb2RlID0gZmFsc2U7XG4gICAgICB0aGlzLmFkZHJlc3NGaWVsZCA9IG51bGw7XG4gICAgICBjb25zdCBwb3N0Y29kZSA9IHRoaXMuYWRkcmVzc0Zvcm1Hcm91cC5nZXQoJ3Bvc3Rjb2RlJykudmFsdWU7XG4gICAgICB0aGlzLmFkZHJlc3NPcHRpb25zID0gW107XG4gICAgICB0aGlzLmFkZHJlc3Nlc1NlcnZpY2UuZ2V0QWRkcmVzc2VzRm9yUG9zdGNvZGUocG9zdGNvZGUucmVwbGFjZSgnICcsICcnKS50b1VwcGVyQ2FzZSgpKS5zdWJzY3JpYmUoXG4gICAgICAgIHJlc3VsdCA9PiB7XG4gICAgICAgICAgcmVzdWx0LmZvckVhY2goXG4gICAgICAgICAgICBhZGRyZXNzID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5hZGRyZXNzT3B0aW9ucy5wdXNoKG5ldyBBZGRyZXNzT3B0aW9uKGFkZHJlc3MsIG51bGwpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuYWRkcmVzc09wdGlvbnMudW5zaGlmdChcbiAgICAgICAgICAgIG5ldyBBZGRyZXNzT3B0aW9uKHVuZGVmaW5lZCwgdGhpcy5kZWZhdWx0TGFiZWwodGhpcy5hZGRyZXNzT3B0aW9ucy5sZW5ndGgpKVxuICAgICAgICAgICk7XG4gICAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICAgIC8vIEVkaXRlZCB0aGlzIHNvIHRoYXQgZXJyb3JzIG5vdCBwcm9kdWNlZCBpZiB0aGVyZSBhcmUgbm8gcmVzdWx0cyBmb3IgYSBwb3N0Y29kZVxuICAgICAgICAgIGNvbnNvbGUubG9nKGBBbiBlcnJvciBvY2N1cnJlZCByZXRyaWV2aW5nIGFkZHJlc3NlcyBmb3IgcG9zdGNvZGUgJHtwb3N0Y29kZX0uICR7ZXJyb3J9YCk7XG4gICAgICAgICAgdGhpcy5hZGRyZXNzT3B0aW9ucy51bnNoaWZ0KFxuICAgICAgICAgICAgbmV3IEFkZHJlc3NPcHRpb24odW5kZWZpbmVkLCB0aGlzLmRlZmF1bHRMYWJlbCh0aGlzLmFkZHJlc3NPcHRpb25zLmxlbmd0aCkpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB0aGlzLmFkZHJlc3NGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzTGlzdCcpLnNldFZhbHVlKHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGJsYW5rQWRkcmVzcygpIHtcbiAgICB0aGlzLnNldEZvcm1WYWx1ZSgpO1xuICAgIHRoaXMucmVzZXRTdWJtaXNzaW9uLmVtaXQoKTtcbiAgICBpZiAodGhpcy5pbnRlcm5hdGlvbmFsTW9kZSkge1xuICAgICAgdGhpcy5pbnRlcm5hdGlvbmFsTW9kZVN0YXJ0LmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2hvdWxkU2hvd0RldGFpbEZpZWxkcygpIHtcbiAgICBpZiAoIXRoaXMuZm9ybUdyb3VwLmdldCgnYWRkcmVzcycpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGFkZHJlc3MgPSB0aGlzLmZvcm1Hcm91cC5nZXQoJ2FkZHJlc3MnKS52YWx1ZTtcbiAgICBsZXQgaGFzQWRkcmVzcyA9IGZhbHNlO1xuICAgIGlmIChhZGRyZXNzKSB7XG4gICAgICBPYmplY3Qua2V5cyhhZGRyZXNzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgaWYgKGFkZHJlc3Nba2V5XSAhPT0gbnVsbCkge1xuICAgICAgICAgIGhhc0FkZHJlc3MgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGhhc0FkZHJlc3M7XG4gIH1cblxuICBwdWJsaWMgYWRkcmVzc1NlbGVjdGVkKCkge1xuICAgIHRoaXMubWlzc2luZ1Bvc3Rjb2RlID0gZmFsc2U7XG4gICAgdGhpcy5hZGRyZXNzRmllbGQgPSB0aGlzLmFkZHJlc3NGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzTGlzdCcpLnZhbHVlO1xuICAgIHRoaXMuYWRkcmVzc0Nob3NlbiA9IHRydWU7XG4gICAgdGhpcy5zZXRGb3JtVmFsdWUoKTtcbiAgICB0aGlzLnBvc3Rjb2RlT3B0aW9uU2VsZWN0ZWQuZW1pdCgpO1xuICB9XG5cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBjb25zdCBhZGRyZXNzQ2hhbmdlID0gY2hhbmdlc1snYWRkcmVzc0ZpZWxkJ107XG4gICAgY29uc3QgaW50ZXJuYXRpb25hbENoYW5nZSA9IGNoYW5nZXNbJ2lzSW50ZXJuYXRpb25hbCddO1xuICAgIGlmIChhZGRyZXNzQ2hhbmdlKSB7XG4gICAgICB0aGlzLnNldEZvcm1WYWx1ZSgpO1xuICAgIH1cbiAgICBpZiAoaW50ZXJuYXRpb25hbENoYW5nZSAmJiB0aGlzLmFkZHJlc3NGb3JtR3JvdXAgJiYgdGhpcy5hZGRyZXNzRm9ybUdyb3VwLmdldCgndWtBZGRyZXNzJykpIHtcbiAgICAgIHRoaXMuYWRkcmVzc0Zvcm1Hcm91cC5nZXQoJ3VrQWRkcmVzcycpLnBhdGNoVmFsdWUodGhpcy5pc0ludGVybmF0aW9uYWwgPyAnbm8nIDogJ3llcycpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuYWRkcmVzc0Nob3NlbiAmJiB0aGlzLmFkZHJlc3NGb3JtR3JvdXAgJiYgdGhpcy5hZGRyZXNzRm9ybUdyb3VwLmdldCgnYWRkcmVzc0xpc3QnKSkge1xuICAgICAgLy8gcmVzZXRzIGFkZHJlc3Mgb3B0aW9ucyBvbiBpbnRlcm5hbCBiYWNrXG4gICAgICB0aGlzLmFkZHJlc3NGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzTGlzdCcpLnBhdGNoVmFsdWUodW5kZWZpbmVkKTtcbiAgICB9XG4gICAgdGhpcy5jaGVja0lmRXJyb3JzTmVlZGVkKCk7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrSWZFcnJvcnNOZWVkZWQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3VibWlzc2lvbkF0dGVtcHRlZCAmJiB0aGlzLmludGVybmF0aW9uYWxNb2RlICYmICF0aGlzLnBvc3Rjb2RlTG9va3VwVmlzaWJsZSgpKSB7XG4gICAgICAvLyBlbnN1cmUgZXJyb3JzIHByZXNlbnQgd2hlbiBzdWJtaXNzaW9uIGF0dG1lbXB0ZWQgb24gaW50ZXJuYXRpb25hbCByYWRpbyBidXR0b25zXG4gICAgICB0aGlzLm9wdGlvbkVycm9yc1ByZXNlbnQgPSB0cnVlO1xuICAgICAgdGhpcy5vcHRpb25FcnJvck1lc3NhZ2UgPSBBZGRyZXNzTWVzc2FnZUVudW0uTk9fT1BUSU9OX1NFTEVDVEVEO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMub3B0aW9uRXJyb3JzUHJlc2VudCA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhpcy5vcHRpb25FcnJvcnNQcmVzZW50ICYmICh0aGlzLmFkZHJlc3NDaG9zZW4gfHwgdGhpcy5pc0ludGVybmF0aW9uYWwgIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgIC8vIGVuc3VyZSBwYXJlbnQgZXJyb3JzIG5vdCBwcmVzZW50IHdoZW4gdGhlIGNoaWxkIGZvcm0gZ3JvdXAgaXMgcHJlc2VudFxuICAgICAgdGhpcy5vcHRpb25FcnJvcnNQcmVzZW50ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldEludGVybmF0aW9uYWxBZGRyZXNzKGlzSW50ZXJuYXRpb25hbDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuaXNJbnRlcm5hdGlvbmFsID0gaXNJbnRlcm5hdGlvbmFsO1xuICAgIHRoaXMudWtBZGRyZXNzT3B0aW9uU2VsZWN0ZWQuZW1pdCh0aGlzLmlzSW50ZXJuYXRpb25hbCk7XG4gIH1cblxuICBwdWJsaWMgcG9zdGNvZGVFcnJvclByZXNlbnQoaXNQb3N0Y29kZUZpZWxkOiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY2hlY2tGb3JGaWVsZCA9IGlzUG9zdGNvZGVGaWVsZCA/ICF0aGlzLmFkZHJlc3NTZWxlY3RhYmxlIDogdGhpcy5hZGRyZXNzU2VsZWN0YWJsZTtcbiAgICByZXR1cm4gdGhpcy5zdWJtaXNzaW9uQXR0ZW1wdGVkICYmIGNoZWNrRm9yRmllbGQ7XG4gIH1cblxuICBwdWJsaWMgcG9zdGNvZGVMb29rdXBWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5zaG91bGRTaG93RGV0YWlsRmllbGRzKCkgfHwgKCF0aGlzLnN0YXJ0ZWRJbnRlcm5hdGlvbmFsICYmICF0aGlzLmFkZHJlc3NDaG9zZW4pO1xuICB9XG5cbiAgcHJpdmF0ZSBkZWZhdWx0TGFiZWwobnVtYmVyT2ZBZGRyZXNzZXM6IG51bWJlcikge1xuICAgIHRoaXMuYWRkcmVzc1NlbGVjdGFibGUgPSBudW1iZXJPZkFkZHJlc3NlcyA+IDAgPyB0cnVlIDogZmFsc2U7XG4gICAgdGhpcy5jYW5TZWxlY3RBZGRyZXNzLmVtaXQodGhpcy5hZGRyZXNzU2VsZWN0YWJsZSk7XG4gICAgcmV0dXJuIG51bWJlck9mQWRkcmVzc2VzID09PSAwID8gJ05vIGFkZHJlc3MgZm91bmQnXG4gICAgICA6IGAke251bWJlck9mQWRkcmVzc2VzfSR7bnVtYmVyT2ZBZGRyZXNzZXMgPT09IDEgPyAnIGFkZHJlc3MgJyA6ICcgYWRkcmVzc2VzICd9Zm91bmRgO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRGb3JtVmFsdWUoKSB7XG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwKSB7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoJ2FkZHJlc3MnKS5wYXRjaFZhbHVlKFxuICAgICAgICB0aGlzLmFkZHJlc3NGaWVsZFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFBvc3Rjb2RlRm9ybSgpOiB2b2lkIHtcbiAgICBjb25zdCBwb3N0Y29kZU5lZWRlZCA9IHRoaXMuaXNJbnRlcm5hdGlvbmFsID09PSB1bmRlZmluZWQgJiYgdGhpcy5mb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJykgJiYgdGhpcy5mb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJykuZ2V0KCdwb3N0Q29kZScpO1xuICAgIHRoaXMuYWRkcmVzc0Zvcm1Hcm91cC5nZXQoJ3Bvc3Rjb2RlJykucGF0Y2hWYWx1ZShwb3N0Y29kZU5lZWRlZCA/IHRoaXMuZm9ybUdyb3VwLmdldCgnYWRkcmVzcycpLmdldCgncG9zdENvZGUnKS52YWx1ZSA6ICcnKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImdvdnVrLWZvcm0tZ3JvdXBcIiBbZm9ybUdyb3VwXT1cImFkZHJlc3NGb3JtR3JvdXBcIlxuICBbbmdDbGFzc109XCJ7J2dvdnVrLWZvcm0tZ3JvdXAtLWVycm9yJzogb3B0aW9uRXJyb3JzUHJlc2VudH1cIj5cbiAgPHAgY2xhc3M9XCJnb3Z1ay1lcnJvci1tZXNzYWdlXCIgKm5nSWY9XCJvcHRpb25FcnJvcnNQcmVzZW50XCI+XG4gICAgPHNwYW4gY2xhc3M9XCJnb3Z1ay12aXN1YWxseS1oaWRkZW5cIj5FcnJvcjo8L3NwYW4+e3tvcHRpb25FcnJvck1lc3NhZ2V9fVxuICA8L3A+XG4gIDxkaXYgKm5nSWY9XCJwb3N0Y29kZUxvb2t1cFZpc2libGUoKVwiPlxuICAgIDxzcGFuIGNsYXNzPVwiZ292dWstbGFiZWxcIj48c3Ryb25nPlByb3ZpZGUgYWRkcmVzcyBkZXRhaWxzPC9zdHJvbmc+PC9zcGFuPlxuICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ib2R5IHBvc3Rjb2RlLWxvb2t1cFwiIGlkPVwiYWRkcmVzc0xvb2t1cFwiXG4gICAgICBbbmdDbGFzc109XCJ7J2dvdnVrLWZvcm0tZ3JvdXAtLWVycm9yJzogbWlzc2luZ1Bvc3Rjb2RlIHx8IHBvc3Rjb2RlRXJyb3JQcmVzZW50KHRydWUpfVwiPlxuICAgICAgPGxhYmVsIGZvcj1cInBvc3Rjb2RlSW5wdXRcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJnb3Z1ay1oaW50XCI+RW50ZXIgYSBVSyBwb3N0Y29kZTwvc3Bhbj5cbiAgICAgIDwvbGFiZWw+XG4gICAgICA8cCBjbGFzcz1cImdvdnVrLWVycm9yLW1lc3NhZ2VcIiAqbmdJZj1cIm1pc3NpbmdQb3N0Y29kZSB8fCBwb3N0Y29kZUVycm9yUHJlc2VudCh0cnVlKVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImdvdnVrLXZpc3VhbGx5LWhpZGRlblwiPkVycm9yOjwvc3Bhbj57e3Bvc3Rjb2RlRXJyb3JNZXNzYWdlfX1cbiAgICAgIDwvcD5cbiAgICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ib2R5XCI+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFtuZ0NsYXNzXT1cInsnZ292dWstaW5wdXQtLWVycm9yJzogbWlzc2luZ1Bvc3Rjb2RlfVwiIGlkPVwicG9zdGNvZGVJbnB1dFwiIG5hbWU9XCJwb3N0Y29kZVwiXG4gICAgICAgICAgY2xhc3M9XCJnb3Z1ay1pbnB1dCBnb3Z1ay0hLXdpZHRoLW9uZS10aGlyZCBwb3N0Y29kZWlucHV0IGlubGluZS1ibG9ja1wiIGZvcm1Db250cm9sTmFtZT1cInBvc3Rjb2RlXCI+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiZ292dWstYnV0dG9uIGZpbmQtYWRkcmVzc1wiIChjbGljayk9XCJmaW5kQWRkcmVzcygpXCI+RmluZCBhZGRyZXNzPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1ib2R5XCIgKm5nSWY9XCJhZGRyZXNzT3B0aW9uc1wiIGlkPVwic2VsZWN0QWRkcmVzc1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImdvdnVrLWJvZHlcIiBbbmdDbGFzc109XCJ7J2dvdnVrLWZvcm0tZ3JvdXAtLWVycm9yJzogcG9zdGNvZGVFcnJvclByZXNlbnQoZmFsc2UpfVwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJnb3Z1ay1sYWJlbFwiIGZvcj1cImFkZHJlc3NMaXN0XCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWxhYmVsXCI+U2VsZWN0IGFuIGFkZHJlc3M8L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxwIGNsYXNzPVwiZ292dWstZXJyb3ItbWVzc2FnZVwiICpuZ0lmPVwicG9zdGNvZGVFcnJvclByZXNlbnQoZmFsc2UpXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJnb3Z1ay12aXN1YWxseS1oaWRkZW5cIj5FcnJvcjo8L3NwYW4+e3tzZWxlY3RFcnJvck1lc3NhZ2V9fVxuICAgICAgICA8L3A+XG4gICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZ292dWstc2VsZWN0IGNjZC1kcm9wZG93biBhZGRyZXNzTGlzdFwiIGlkPVwiYWRkcmVzc0xpc3RcIiBuYW1lPVwiYWRkcmVzc1wiXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiYWRkcmVzc0xpc3RcIiAoY2hhbmdlKT1cImFkZHJlc3NTZWxlY3RlZCgpXCIgZm9jdXNFbGVtZW50PlxuICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGFkZHJlc3NPcHRpb24gb2YgYWRkcmVzc09wdGlvbnNcIiBbbmdWYWx1ZV09XCJhZGRyZXNzT3B0aW9uLnZhbHVlXCI+XG4gICAgICAgICAgICB7e2FkZHJlc3NPcHRpb24uZGVzY3JpcHRpb259fVxuICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICA8L3NlbGVjdD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGEgY2xhc3M9XCJtYW51YWwtbGluayBnb3Z1ay1saW5rXCIgKm5nSWY9XCIhc2hvdWxkU2hvd0RldGFpbEZpZWxkcygpIHx8ICghc3RhcnRlZEludGVybmF0aW9uYWwgJiYgIWFkZHJlc3NDaG9zZW4pXCJcbiAgICAgIChjbGljayk9XCJibGFua0FkZHJlc3MoKVwiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIj5JIGNhbid0IGVudGVyIGEgVUsgcG9zdGNvZGU8L2E+XG4gIDwvZGl2PlxuXG4gIDxkaXYgaWQ9XCJnb3Z1ay1yYWRpb3NcIiBjbGFzcz1cImdvdnVrLXJhZGlvc1wiIGRhdGEtbW9kdWxlPVwiZ292dWstcmFkaW9zXCJcbiAgICAqbmdJZj1cInNob3VsZFNob3dEZXRhaWxGaWVsZHMoKSAmJiBpbnRlcm5hdGlvbmFsTW9kZSAmJiBzdGFydGVkSW50ZXJuYXRpb25hbCAmJiAhYWRkcmVzc0Nob3NlblwiPlxuICAgIDxkaXYgY2xhc3M9XCJnb3Z1ay1yYWRpb3NfX2l0ZW1cIj5cbiAgICAgIDxpbnB1dCBjbGFzcz1cImdvdnVrLXJhZGlvc19faW5wdXRcIiBpZD1cInllc1wiIHZhbHVlPVwieWVzXCIgbmFtZT1cInVrQWRkcmVzc1wiIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgIGRhdGEtYXJpYS1jb250cm9scz1cImFkZHJlc3MtZmllbGRzXCIgKGNsaWNrKT1cInNldEludGVybmF0aW9uYWxBZGRyZXNzKGZhbHNlKVwiIGZvcm1Db250cm9sTmFtZT1cInVrQWRkcmVzc1wiPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiZ292dWstbGFiZWwgZ292dWstcmFkaW9zX19sYWJlbFwiIGZvcj1cInllc1wiPlxuICAgICAgICBZZXNcbiAgICAgIDwvbGFiZWw+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImdvdnVrLXJhZGlvc19faXRlbVwiPlxuICAgICAgPGlucHV0IGNsYXNzPVwiZ292dWstcmFkaW9zX19pbnB1dFwiIGlkPVwibm9cIiB2YWx1ZT1cIm5vXCIgbmFtZT1cInVrQWRkcmVzc1wiIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgIGRhdGEtYXJpYS1jb250cm9scz1cImFkZHJlc3MtZmllbGRzXCIgKGNsaWNrKT1cInNldEludGVybmF0aW9uYWxBZGRyZXNzKHRydWUpXCIgZm9ybUNvbnRyb2xOYW1lPVwidWtBZGRyZXNzXCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJnb3Z1ay1sYWJlbCBnb3Z1ay1yYWRpb3NfX2xhYmVsXCIgZm9yPVwibm9cIj5cbiAgICAgICAgTm9cbiAgICAgIDwvbGFiZWw+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImdvdnVrLXJhZGlvc19fY29uZGl0aW9uYWxcIiBpZD1cImFkZHJlc3MtZmllbGRzXCI+XG4gICAgICA8eHVpbGliLXdyaXRlLWFkZHJlc3MtaW5wdXRzICpuZ0lmPVwiaXNJbnRlcm5hdGlvbmFsICE9PSB1bmRlZmluZWRcIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiXG4gICAgICAgIFtpc0ludGVybmF0aW9uYWxdPVwiaXNJbnRlcm5hdGlvbmFsXCIgW3N1Ym1pc3Npb25BdHRlbXB0ZWRdPVwic3VibWlzc2lvbkF0dGVtcHRlZFwiPlxuICAgICAgPC94dWlsaWItd3JpdGUtYWRkcmVzcy1pbnB1dHM+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDx4dWlsaWItd3JpdGUtYWRkcmVzcy1pbnB1dHMgKm5nSWY9XCJzaG91bGRTaG93RGV0YWlsRmllbGRzKCkgJiYgKGFkZHJlc3NDaG9zZW4gfHwgIWludGVybmF0aW9uYWxNb2RlKVwiXG4gICAgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIiBbaXNJbnRlcm5hdGlvbmFsXT1cImZhbHNlXCIgW3N1Ym1pc3Npb25BdHRlbXB0ZWRdPVwic3VibWlzc2lvbkF0dGVtcHRlZFwiPlxuICA8L3h1aWxpYi13cml0ZS1hZGRyZXNzLWlucHV0cz5cblxuPC9kaXY+Il19