ets-fe-ng-sdk 17.0.430 → 18.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/Reusables/reusable-comps/find-item/find-item.component.mjs +4 -4
- package/esm2022/lib/Reusables/reusable-comps/find-item/find-item.module.mjs +4 -4
- package/esm2022/lib/Reusables/reusable-comps/watermark/watermark.component.mjs +3 -3
- package/esm2022/lib/Reusables/reusable-pages/extra-pages/extra-pages-routing.module.mjs +4 -4
- package/esm2022/lib/Reusables/reusable-pages/extra-pages/extra-pages.module.mjs +4 -4
- package/esm2022/lib/Reusables/reusable-pages/logger/logger-routing.module.mjs +4 -4
- package/esm2022/lib/Reusables/reusable-pages/logger/logger.component.mjs +4 -4
- package/esm2022/lib/Reusables/reusable-pages/logger/logger.interface.mjs +1 -1
- package/esm2022/lib/Reusables/reusable-pages/logger/logger.module.mjs +4 -4
- package/esm2022/lib/Reusables/reusable-pages/logger/logger.service.mjs +3 -3
- package/esm2022/lib/Reusables/reusable-pages/page-not-found/page-not-found.component.mjs +3 -3
- package/esm2022/lib/Reusables/reusable-pages/reset/reset-routing.module.mjs +4 -4
- package/esm2022/lib/Reusables/reusable-pages/reset/reset.component.mjs +4 -4
- package/esm2022/lib/Reusables/reusable-pages/reset/reset.module.mjs +4 -4
- package/esm2022/lib/Reusables/reusable-pages/robot/robot-routing.module.mjs +4 -4
- package/esm2022/lib/Reusables/reusable-pages/robot/robot.component.mjs +3 -3
- package/esm2022/lib/Reusables/reusable-pages/robot/robot.module.mjs +4 -4
- package/esm2022/lib/Reusables/reusable-pages/timeout-tester/timeout-tester-routing.module.mjs +4 -4
- package/esm2022/lib/Reusables/reusable-pages/timeout-tester/timeout-tester.component.mjs +4 -4
- package/esm2022/lib/Reusables/reusable-pages/timeout-tester/timeout-tester.module.mjs +4 -4
- package/esm2022/lib/Reusables/reusable-pages/user-activity/ua-extras/user-activity.service.mjs +3 -3
- package/esm2022/lib/Reusables/reusable-pages/version/version-routing.module.mjs +4 -4
- package/esm2022/lib/Reusables/reusable-pages/version/version.component.mjs +3 -3
- package/esm2022/lib/Reusables/reusable-pages/version/version.module.mjs +4 -4
- package/esm2022/lib/Reusables/reusable-pages/version/version.service.mjs +4 -4
- package/esm2022/lib/Services/Interceptors/authentication-interceptor.service.mjs +5 -5
- package/esm2022/lib/Services/Interceptors/global-error-handler.service.mjs +3 -3
- package/esm2022/lib/Services/Interceptors/logger-interceptor.service.mjs +5 -5
- package/esm2022/lib/Services/Interceptors/request-loader-interceptor.service.mjs +5 -5
- package/esm2022/lib/Services/Interceptors/request-timeout.service.mjs +4 -4
- package/esm2022/lib/Services/api.service.mjs +4 -4
- package/esm2022/lib/Services/app.service.mjs +3 -3
- package/esm2022/lib/Services/base.effect.mjs +3 -3
- package/esm2022/lib/Services/base.facade.service.mjs +1 -1
- package/esm2022/lib/Services/base.service.mjs +4 -4
- package/esm2022/lib/Services/cache/cache-updater.service.mjs +3 -3
- package/esm2022/lib/Services/cache/cache.service.mjs +4 -4
- package/esm2022/lib/Services/cache/local-cache.service.mjs +4 -4
- package/esm2022/lib/Services/cache/saver.service.mjs +3 -3
- package/esm2022/lib/Services/debouncer.service.mjs +4 -4
- package/esm2022/lib/Services/htmler.service.mjs +3 -3
- package/esm2022/lib/Services/input.service.mjs +4 -4
- package/esm2022/lib/Services/page-loader.service.mjs +7 -7
- package/esm2022/lib/Services/page.service.mjs +3 -3
- package/esm2022/lib/Services/route.service.mjs +4 -4
- package/esm2022/lib/Services/service-worker/check-for-update.service.mjs +4 -4
- package/esm2022/lib/Services/service-worker/handle-unrecoverable-state.service.mjs +3 -3
- package/esm2022/lib/Services/service-worker/log-update.service.mjs +4 -4
- package/esm2022/lib/Services/service-worker/prompt-update.service.mjs +3 -3
- package/esm2022/lib/Services/service-worker/service-worker.service.mjs +4 -4
- package/esm2022/lib/Services/storage.service.mjs +4 -4
- package/esm2022/lib/Services/theme.service.mjs +3 -3
- package/esm2022/lib/Services/translation.service.mjs +4 -4
- package/esm2022/lib/Services/utility.service.mjs +4 -4
- package/esm2022/lib/Services/window-security.service.mjs +4 -4
- package/esm2022/lib/Shared/classes/page-loader.class.mjs +1 -1
- package/esm2022/lib/Shared/components/add-item/add-item.component.mjs +3 -3
- package/esm2022/lib/Shared/components/autocomplete/autocomplete-td-rf/autocomplete-td-rf.component.mjs +4 -4
- package/esm2022/lib/Shared/components/autocomplete/autocomplete.component.mjs +4 -4
- package/esm2022/lib/Shared/components/autocomplete/autocomplete.service.mjs +4 -4
- package/esm2022/lib/Shared/components/btn/btn-lg/btn-lg.component.mjs +3 -3
- package/esm2022/lib/Shared/components/btn/btn-link/btn-link.component.mjs +3 -3
- package/esm2022/lib/Shared/components/btn/btn.component.mjs +4 -4
- package/esm2022/lib/Shared/components/btn/btn.service.mjs +4 -4
- package/esm2022/lib/Shared/components/btn/details-btn/details-btn.component.mjs +3 -3
- package/esm2022/lib/Shared/components/card/card.component.mjs +3 -3
- package/esm2022/lib/Shared/components/confirm-dialog/confirm-dialog.component.mjs +3 -3
- package/esm2022/lib/Shared/components/confirm-dialog/confirm-dialog.service.mjs +4 -4
- package/esm2022/lib/Shared/components/core/button/button.component.mjs +3 -3
- package/esm2022/lib/Shared/components/documents-name-display/documents-name-display.component.mjs +4 -4
- package/esm2022/lib/Shared/components/editable-text-case/editable-text-case.component.mjs +4 -4
- package/esm2022/lib/Shared/components/export-table/export-table.component.mjs +4 -4
- package/esm2022/lib/Shared/components/fields-to-display/fields-to-display.component.mjs +4 -4
- package/esm2022/lib/Shared/components/file-upload/file-upload.component.mjs +4 -4
- package/esm2022/lib/Shared/components/form-error/form-error.component.mjs +4 -4
- package/esm2022/lib/Shared/components/form-generator/form-generated-value/form-generated-value.component.mjs +6 -6
- package/esm2022/lib/Shared/components/form-generator/form-generator.base.component.mjs +11 -2
- package/esm2022/lib/Shared/components/form-generator/form-generator.component.mjs +4 -4
- package/esm2022/lib/Shared/components/form-generator/form-generator.service.mjs +3 -3
- package/esm2022/lib/Shared/components/form-link/form-link.component.mjs +3 -3
- package/esm2022/lib/Shared/components/form-tab-headers/form-tab-headers.component.mjs +3 -3
- package/esm2022/lib/Shared/components/index-comp-layout/index-comp-layout.component.mjs +7 -7
- package/esm2022/lib/Shared/components/info-dialog/info-dialog.component.mjs +4 -4
- package/esm2022/lib/Shared/components/info-dialog/info-dialog.service.mjs +4 -4
- package/esm2022/lib/Shared/components/info-icon/info-icon.component.mjs +3 -3
- package/esm2022/lib/Shared/components/input/date-input/date-input.component.mjs +5 -5
- package/esm2022/lib/Shared/components/input/day-hour-min-input/day-hour-min-input.component.mjs +4 -4
- package/esm2022/lib/Shared/components/input/input-base.component.mjs +4 -4
- package/esm2022/lib/Shared/components/input/input-basic.component.mjs +4 -4
- package/esm2022/lib/Shared/components/input/input-control.component.mjs +3 -3
- package/esm2022/lib/Shared/components/input/input-label/input-label.component.mjs +3 -3
- package/esm2022/lib/Shared/components/input/input-td-rf.component.mjs +4 -4
- package/esm2022/lib/Shared/components/input/input.component.mjs +3 -3
- package/esm2022/lib/Shared/components/input/input.service.mjs +4 -4
- package/esm2022/lib/Shared/components/input/inputs-pipes.pipe.mjs +26 -26
- package/esm2022/lib/Shared/components/input/validation-message/validation-message.component.mjs +6 -6
- package/esm2022/lib/Shared/components/input/validation-message/validation-message.service.mjs +3 -3
- package/esm2022/lib/Shared/components/input/year-month-td-rf/year-month-td-rf.component.mjs +3 -3
- package/esm2022/lib/Shared/components/input-NgModel/input-ngmodel.component.mjs +4 -4
- package/esm2022/lib/Shared/components/input-NgModel/validation-message-ngmodel/validation-message-ngmodel.component.mjs +3 -3
- package/esm2022/lib/Shared/components/input-table/input-table.component.mjs +4 -4
- package/esm2022/lib/Shared/components/input-table/input-table.service.mjs +3 -3
- package/esm2022/lib/Shared/components/label/label.component.mjs +3 -3
- package/esm2022/lib/Shared/components/loader/loader-animations/blinking-blocks/blinking-blocks.component.mjs +3 -3
- package/esm2022/lib/Shared/components/loader/loader-animations/bouncing-ball/bouncing-ball.component.mjs +3 -3
- package/esm2022/lib/Shared/components/loader/loader-animations/fading-bars/fading-bars.component.mjs +3 -3
- package/esm2022/lib/Shared/components/loader/loader-animations/fading-circles/fading-circles.component.mjs +3 -3
- package/esm2022/lib/Shared/components/loader/loader-animations/ring-ripples/ring-ripples.component.mjs +3 -3
- package/esm2022/lib/Shared/components/loader/loader.component.mjs +3 -3
- package/esm2022/lib/Shared/components/loader/spinner.component.mjs +3 -3
- package/esm2022/lib/Shared/components/modal/modal-body.directive.mjs +3 -3
- package/esm2022/lib/Shared/components/modal/modal-footer.directive.mjs +3 -3
- package/esm2022/lib/Shared/components/modal/modal.component.mjs +3 -3
- package/esm2022/lib/Shared/components/modal-form/modal-form.component.mjs +3 -3
- package/esm2022/lib/Shared/components/modal-header/modal-header.component.mjs +3 -3
- package/esm2022/lib/Shared/components/narration-history-comp/narration-history-comp.component.mjs +4 -4
- package/esm2022/lib/Shared/components/notifications/notifications.component.mjs +3 -3
- package/esm2022/lib/Shared/components/notifications/notifications.service.mjs +3 -3
- package/esm2022/lib/Shared/components/page-center-body/page-center-body.component.mjs +3 -3
- package/esm2022/lib/Shared/components/page-template/page-template.component.mjs +4 -4
- package/esm2022/lib/Shared/components/page-to-component/page-to-component.component.mjs +6 -6
- package/esm2022/lib/Shared/components/page-to-component/page-to-component.directive.mjs +3 -3
- package/esm2022/lib/Shared/components/page-to-component/page-to-component.service.mjs +3 -3
- package/esm2022/lib/Shared/components/paginator/paginator.component.mjs +4 -4
- package/esm2022/lib/Shared/components/phone-number/phone-number.component.mjs +4 -4
- package/esm2022/lib/Shared/components/phone-number/phone-number.model.mjs +1 -1
- package/esm2022/lib/Shared/components/phone-number/phone-number.service.mjs +3 -3
- package/esm2022/lib/Shared/components/rich-text-editor/rich-text-editor.component.mjs +12 -12
- package/esm2022/lib/Shared/components/rich-text-editor-rf/rich-text-editor-rf.component.mjs +12 -12
- package/esm2022/lib/Shared/components/row-actions/row-actions.component.mjs +3 -3
- package/esm2022/lib/Shared/components/svg-icon/svg-icon.component.mjs +3 -3
- package/esm2022/lib/Shared/components/svg-icon/svg-icon.service.mjs +3 -3
- package/esm2022/lib/Shared/components/table-https/table-https.component.mjs +4 -4
- package/esm2022/lib/Shared/components/table-input/table-input-row/table-input-row.component.mjs +3 -3
- package/esm2022/lib/Shared/components/table-input/table-input.component.mjs +4 -4
- package/esm2022/lib/Shared/components/table-plain/table-base.component.mjs +4 -4
- package/esm2022/lib/Shared/components/table-plain/table-plain.component.mjs +4 -4
- package/esm2022/lib/Shared/components/table-plain/table-plain.service.mjs +3 -3
- package/esm2022/lib/Shared/components/table-plain/table.pipe.mjs +20 -20
- package/esm2022/lib/Shared/components/text/text.component.mjs +3 -3
- package/esm2022/lib/Shared/components/text-area-modal/text-area-modal.component.mjs +3 -3
- package/esm2022/lib/Shared/components/text-area-modal/text-area-modal.service.mjs +3 -3
- package/esm2022/lib/Shared/components/text-case-1/text-case-1.component.mjs +4 -4
- package/esm2022/lib/Shared/components/text-case-2/text-case-2.component.mjs +3 -3
- package/esm2022/lib/Shared/components/text-case-2/text-case.service.mjs +4 -4
- package/esm2022/lib/Shared/components/text-case-input/text-case-input.component.mjs +3 -3
- package/esm2022/lib/Shared/components/toggle-input-form/toggle-input-form.component.mjs +3 -3
- package/esm2022/lib/Shared/components/translator-case/translator-case.component.mjs +3 -3
- package/esm2022/lib/Shared/components/vertical-nav/vertical-nav.component.mjs +4 -4
- package/esm2022/lib/Shared/components/view-form-buttons/view-form-buttons.component.mjs +3 -3
- package/esm2022/lib/Shared/components/webcam-media/webcam-media.component.mjs +4 -4
- package/esm2022/lib/Shared/directives/commafy-number.directive.mjs +3 -3
- package/esm2022/lib/Shared/directives/drag-drop-file-upload.directive.mjs +4 -4
- package/esm2022/lib/Shared/directives/form-invalid-class.directive.mjs +3 -3
- package/esm2022/lib/Shared/directives/index.directive.mjs +23 -23
- package/esm2022/lib/Shared/directives/input-formatter.directive.mjs +14 -14
- package/esm2022/lib/Shared/directives/integer-only.directive.mjs +4 -4
- package/esm2022/lib/Shared/directives/mHref.directive.mjs +3 -3
- package/esm2022/lib/Shared/directives/negative-number-only.directive.mjs +4 -4
- package/esm2022/lib/Shared/directives/responsiveness.directive.mjs +20 -20
- package/esm2022/lib/Shared/directives/translator.directive.mjs +4 -4
- package/esm2022/lib/Shared/models/form.class.mjs +1 -1
- package/esm2022/lib/Shared/pipes/form-invalid-class.pipe.mjs +3 -3
- package/esm2022/lib/Shared/pipes/paginator.pipe.mjs +3 -3
- package/esm2022/lib/Shared/pipes/translate.pipe.mjs +7 -7
- package/esm2022/lib/Shared/pipes/utility.pipe.mjs +134 -134
- package/esm2022/lib/Shared/prototypes/prototypes.mjs +1 -1
- package/esm2022/lib/Shared/shared.module.mjs +4 -4
- package/esm2022/lib/authentication/web-user/web-user-authentication.guard.mjs +1 -1
- package/esm2022/lib/authentication/web-user/web-user-authentication.interceptor.mjs +1 -1
- package/esm2022/lib/authentication/web-user/web-user-authentication.service.mjs +3 -3
- package/esm2022/lib/authentication/web-user/web-user-forgot-password.component.mjs +4 -4
- package/esm2022/lib/authentication/web-user/web-user-login.component.mjs +4 -4
- package/esm2022/lib/authentication/web-user/web-user-reset-password.component.mjs +4 -4
- package/esm2022/lib/configs/base-functions.mjs +1 -1
- package/fesm2022/ets-fe-ng-sdk.mjs +766 -758
- package/fesm2022/ets-fe-ng-sdk.mjs.map +1 -1
- package/lib/Services/utility.service.d.ts +5 -5
- package/lib/Shared/components/btn/btn.component.d.ts +3 -3
- package/lib/Shared/components/form-generator/form-generated-value/form-generated-value.component.d.ts +1 -1
- package/lib/Shared/components/form-generator/form-generator.base.component.d.ts +3 -0
- package/lib/Shared/components/index-comp-layout/index-comp-layout.component.d.ts +1 -1
- package/lib/Shared/components/input/input-base.component.d.ts +3 -7
- package/lib/Shared/components/table-https/table-https.component.d.ts +3 -3
- package/lib/Shared/components/text-case-2/text-case.service.d.ts +1 -1
- package/package.json +1 -1
|
@@ -18,10 +18,10 @@ export class ArraySplitter {
|
|
|
18
18
|
transform(arr, arrLength, startIndex, endIndex) {
|
|
19
19
|
return arr ? arr.slice(startIndex, endIndex) : [];
|
|
20
20
|
}
|
|
21
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
22
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
21
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ArraySplitter, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
22
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: ArraySplitter, isStandalone: true, name: "arraySplitter" }); }
|
|
23
23
|
}
|
|
24
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
24
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ArraySplitter, decorators: [{
|
|
25
25
|
type: Pipe,
|
|
26
26
|
args: [{
|
|
27
27
|
name: 'arraySplitter',
|
|
@@ -32,10 +32,10 @@ export class GenderPipe {
|
|
|
32
32
|
transform(value) {
|
|
33
33
|
return value == 'M' ? 'Male' : value == 'F' ? 'Female' : value;
|
|
34
34
|
}
|
|
35
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
36
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
35
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: GenderPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
36
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: GenderPipe, isStandalone: true, name: "gender" }); }
|
|
37
37
|
}
|
|
38
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
38
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: GenderPipe, decorators: [{
|
|
39
39
|
type: Pipe,
|
|
40
40
|
args: [{
|
|
41
41
|
name: 'gender',
|
|
@@ -49,10 +49,10 @@ export class RoundPipe {
|
|
|
49
49
|
transform(value) {
|
|
50
50
|
return Math.round(value);
|
|
51
51
|
}
|
|
52
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
53
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
52
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: RoundPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
53
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: RoundPipe, isStandalone: true, name: "round" }); }
|
|
54
54
|
}
|
|
55
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
55
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: RoundPipe, decorators: [{
|
|
56
56
|
type: Pipe,
|
|
57
57
|
args: [{
|
|
58
58
|
name: 'round',
|
|
@@ -68,10 +68,10 @@ export class SecondsToTimePipe {
|
|
|
68
68
|
constructor(uS) {
|
|
69
69
|
this.uS = uS;
|
|
70
70
|
}
|
|
71
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
72
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
71
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: SecondsToTimePipe, deps: [{ token: i1.UtilityService }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
72
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: SecondsToTimePipe, isStandalone: true, name: "secondsToTime" }); }
|
|
73
73
|
}
|
|
74
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
74
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: SecondsToTimePipe, decorators: [{
|
|
75
75
|
type: Pipe,
|
|
76
76
|
args: [{
|
|
77
77
|
name: 'secondsToTime',
|
|
@@ -89,10 +89,10 @@ export class CustomDatePipe {
|
|
|
89
89
|
constructor(datePipe) {
|
|
90
90
|
this.datePipe = datePipe;
|
|
91
91
|
}
|
|
92
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
93
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
92
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: CustomDatePipe, deps: [{ token: i2.DatePipe }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
93
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: CustomDatePipe, isStandalone: true, name: "customDate" }); }
|
|
94
94
|
}
|
|
95
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
95
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: CustomDatePipe, decorators: [{
|
|
96
96
|
type: Pipe,
|
|
97
97
|
args: [{ name: 'customDate', standalone: true }]
|
|
98
98
|
}], ctorParameters: () => [{ type: i2.DatePipe }] });
|
|
@@ -104,10 +104,10 @@ export class HasValuePipe {
|
|
|
104
104
|
// debugger;
|
|
105
105
|
return fieldsToCheckFor?.length ? fieldsToCheckFor.some((x) => !!value[x]) : !isEmpty(value);
|
|
106
106
|
}
|
|
107
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
108
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
107
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: HasValuePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
108
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: HasValuePipe, isStandalone: true, name: "hasValue" }); }
|
|
109
109
|
}
|
|
110
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
110
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: HasValuePipe, decorators: [{
|
|
111
111
|
type: Pipe,
|
|
112
112
|
args: [{
|
|
113
113
|
name: 'hasValue',
|
|
@@ -121,10 +121,10 @@ export class CodeTitleDescPipe {
|
|
|
121
121
|
let foundObj = codeTitleArray?.find((x) => x.code === code);
|
|
122
122
|
return EVFunctions.strConcatenator2(code, foundObj?.description || foundObj?.title, ' - ');
|
|
123
123
|
}
|
|
124
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
125
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
124
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: CodeTitleDescPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
125
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: CodeTitleDescPipe, isStandalone: true, name: "codeTitleDesc" }); }
|
|
126
126
|
}
|
|
127
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
127
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: CodeTitleDescPipe, decorators: [{
|
|
128
128
|
type: Pipe,
|
|
129
129
|
args: [{
|
|
130
130
|
name: 'codeTitleDesc',
|
|
@@ -142,10 +142,10 @@ export class HasFormValuePipe {
|
|
|
142
142
|
const val = formGroup.getRawValue();
|
|
143
143
|
return (fieldsToCheckFor?.length ? fieldsToCheckFor : Object.keys(val)).some((x) => val[x] != null);
|
|
144
144
|
}
|
|
145
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
146
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
145
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: HasFormValuePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
146
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: HasFormValuePipe, isStandalone: true, name: "hasFormValue" }); }
|
|
147
147
|
}
|
|
148
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
148
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: HasFormValuePipe, decorators: [{
|
|
149
149
|
type: Pipe,
|
|
150
150
|
args: [{
|
|
151
151
|
name: 'hasFormValue',
|
|
@@ -176,10 +176,10 @@ export class ObjectToLabelsPipe {
|
|
|
176
176
|
constructor(uS) {
|
|
177
177
|
this.uS = uS;
|
|
178
178
|
}
|
|
179
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
180
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
179
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ObjectToLabelsPipe, deps: [{ token: i1.UtilityService }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
180
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: ObjectToLabelsPipe, isStandalone: true, name: "objectToLabels" }); }
|
|
181
181
|
}
|
|
182
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
182
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ObjectToLabelsPipe, decorators: [{
|
|
183
183
|
type: Pipe,
|
|
184
184
|
args: [{
|
|
185
185
|
name: 'objectToLabels',
|
|
@@ -205,10 +205,10 @@ export class GetValueLabel {
|
|
|
205
205
|
return value;
|
|
206
206
|
return value + ' - ' + item[labelField] || item['title'];
|
|
207
207
|
}
|
|
208
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
209
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
208
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: GetValueLabel, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
209
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: GetValueLabel, isStandalone: true, name: "getValueLabel" }); }
|
|
210
210
|
}
|
|
211
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
211
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: GetValueLabel, decorators: [{
|
|
212
212
|
type: Pipe,
|
|
213
213
|
args: [{
|
|
214
214
|
name: 'getValueLabel',
|
|
@@ -219,10 +219,10 @@ export class ValueFormatterPipe {
|
|
|
219
219
|
async transform(val, formatter) {
|
|
220
220
|
return formatter ? formatter(val) : val;
|
|
221
221
|
}
|
|
222
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
223
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
222
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ValueFormatterPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
223
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: ValueFormatterPipe, isStandalone: true, name: "valueFormatter" }); }
|
|
224
224
|
}
|
|
225
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
225
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ValueFormatterPipe, decorators: [{
|
|
226
226
|
type: Pipe,
|
|
227
227
|
args: [{
|
|
228
228
|
name: 'valueFormatter',
|
|
@@ -233,10 +233,10 @@ class CFunctionCaller {
|
|
|
233
233
|
transform(func, param1, param2, param3) {
|
|
234
234
|
return func ? func(param1, param2, param3) : null;
|
|
235
235
|
}
|
|
236
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
237
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
236
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: CFunctionCaller, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
237
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: CFunctionCaller, providedIn: 'root' }); }
|
|
238
238
|
}
|
|
239
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
239
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: CFunctionCaller, decorators: [{
|
|
240
240
|
type: Injectable,
|
|
241
241
|
args: [{ providedIn: 'root' }]
|
|
242
242
|
}] });
|
|
@@ -275,10 +275,10 @@ export class FunctionCaller {
|
|
|
275
275
|
// const fs = ( ) => {};
|
|
276
276
|
// this.transform(fs);
|
|
277
277
|
}
|
|
278
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
279
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
278
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FunctionCaller, deps: [{ token: CFunctionCaller }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
279
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: FunctionCaller, isStandalone: true, name: "functionCaller" }); }
|
|
280
280
|
}
|
|
281
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
281
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FunctionCaller, decorators: [{
|
|
282
282
|
type: Pipe,
|
|
283
283
|
args: [{
|
|
284
284
|
name: 'functionCaller',
|
|
@@ -290,10 +290,10 @@ export class FunctionCaller1 {
|
|
|
290
290
|
this.f = f;
|
|
291
291
|
this.transform = this.f.transform;
|
|
292
292
|
}
|
|
293
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
294
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
293
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FunctionCaller1, deps: [{ token: CFunctionCaller }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
294
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: FunctionCaller1, isStandalone: true, name: "functionCaller1" }); }
|
|
295
295
|
}
|
|
296
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
296
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FunctionCaller1, decorators: [{
|
|
297
297
|
type: Pipe,
|
|
298
298
|
args: [{
|
|
299
299
|
name: 'functionCaller1',
|
|
@@ -305,10 +305,10 @@ export class FunctionCaller2 {
|
|
|
305
305
|
this.f = f;
|
|
306
306
|
this.transform = this.f.transform;
|
|
307
307
|
}
|
|
308
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
309
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
308
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FunctionCaller2, deps: [{ token: CFunctionCaller }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
309
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: FunctionCaller2, isStandalone: true, name: "functionCaller2" }); }
|
|
310
310
|
}
|
|
311
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
311
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FunctionCaller2, decorators: [{
|
|
312
312
|
type: Pipe,
|
|
313
313
|
args: [{
|
|
314
314
|
name: 'functionCaller2',
|
|
@@ -320,10 +320,10 @@ export class FunctionCaller3 {
|
|
|
320
320
|
this.f = f;
|
|
321
321
|
this.transform = this.f.transform;
|
|
322
322
|
}
|
|
323
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
324
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
323
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FunctionCaller3, deps: [{ token: CFunctionCaller }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
324
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: FunctionCaller3, isStandalone: true, name: "functionCaller3" }); }
|
|
325
325
|
}
|
|
326
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
326
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FunctionCaller3, decorators: [{
|
|
327
327
|
type: Pipe,
|
|
328
328
|
args: [{
|
|
329
329
|
name: 'functionCaller3',
|
|
@@ -336,10 +336,10 @@ export class HttpListCaller {
|
|
|
336
336
|
// console.log('ran functionCaller', httpObservable);
|
|
337
337
|
return httpObservable();
|
|
338
338
|
}
|
|
339
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
340
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
339
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: HttpListCaller, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
340
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: HttpListCaller, isStandalone: true, name: "httpListCaller" }); }
|
|
341
341
|
}
|
|
342
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
342
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: HttpListCaller, decorators: [{
|
|
343
343
|
type: Pipe,
|
|
344
344
|
args: [{
|
|
345
345
|
name: 'httpListCaller',
|
|
@@ -352,10 +352,10 @@ export class HttpListCaller1 {
|
|
|
352
352
|
return httpObservable(param);
|
|
353
353
|
// return param ? httpObservable(param) : null;
|
|
354
354
|
}
|
|
355
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
356
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
355
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: HttpListCaller1, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
356
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: HttpListCaller1, isStandalone: true, name: "httpListCaller1" }); }
|
|
357
357
|
}
|
|
358
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
358
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: HttpListCaller1, decorators: [{
|
|
359
359
|
type: Pipe,
|
|
360
360
|
args: [{
|
|
361
361
|
name: 'httpListCaller1',
|
|
@@ -368,10 +368,10 @@ export class HttpListCaller2 {
|
|
|
368
368
|
return httpObservable(param1, param2);
|
|
369
369
|
// return param1 ? (param2 ? httpObservable(param1, param2) : null) : null;
|
|
370
370
|
}
|
|
371
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
372
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
371
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: HttpListCaller2, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
372
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: HttpListCaller2, isStandalone: true, name: "httpListCaller2" }); }
|
|
373
373
|
}
|
|
374
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
374
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: HttpListCaller2, decorators: [{
|
|
375
375
|
type: Pipe,
|
|
376
376
|
args: [{
|
|
377
377
|
name: 'httpListCaller2',
|
|
@@ -382,10 +382,10 @@ export class IsShowPage {
|
|
|
382
382
|
transform(type) {
|
|
383
383
|
return type == EPageType.showPage ? true : false;
|
|
384
384
|
}
|
|
385
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
386
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
385
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: IsShowPage, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
386
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: IsShowPage, isStandalone: true, name: "isShowPage" }); }
|
|
387
387
|
}
|
|
388
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
388
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: IsShowPage, decorators: [{
|
|
389
389
|
type: Pipe,
|
|
390
390
|
args: [{
|
|
391
391
|
name: 'isShowPage',
|
|
@@ -396,10 +396,10 @@ export class IsClonePage {
|
|
|
396
396
|
transform(type) {
|
|
397
397
|
return type == EPageType.clonePage ? true : null;
|
|
398
398
|
}
|
|
399
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
400
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
399
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: IsClonePage, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
400
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: IsClonePage, isStandalone: true, name: "isClonePage" }); }
|
|
401
401
|
}
|
|
402
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
402
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: IsClonePage, decorators: [{
|
|
403
403
|
type: Pipe,
|
|
404
404
|
args: [{
|
|
405
405
|
name: 'isClonePage',
|
|
@@ -447,10 +447,10 @@ export class FilterArrayPipe {
|
|
|
447
447
|
return res;
|
|
448
448
|
// });
|
|
449
449
|
}
|
|
450
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
451
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
450
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FilterArrayPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
451
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: FilterArrayPipe, isStandalone: true, name: "filterArray" }); }
|
|
452
452
|
}
|
|
453
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
453
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FilterArrayPipe, decorators: [{
|
|
454
454
|
type: Pipe,
|
|
455
455
|
args: [{
|
|
456
456
|
name: 'filterArray',
|
|
@@ -505,10 +505,10 @@ export class FilterFormArrayGroupPipe {
|
|
|
505
505
|
return res;
|
|
506
506
|
// });
|
|
507
507
|
}
|
|
508
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
509
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
508
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FilterFormArrayGroupPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
509
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: FilterFormArrayGroupPipe, isStandalone: true, name: "filterFormArrayGroup" }); }
|
|
510
510
|
}
|
|
511
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
511
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FilterFormArrayGroupPipe, decorators: [{
|
|
512
512
|
type: Pipe,
|
|
513
513
|
args: [{
|
|
514
514
|
name: 'filterFormArrayGroup',
|
|
@@ -531,10 +531,10 @@ export class FilterFormArrayControlPipe {
|
|
|
531
531
|
constructor(uS) {
|
|
532
532
|
this.uS = uS;
|
|
533
533
|
}
|
|
534
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
535
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
534
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FilterFormArrayControlPipe, deps: [{ token: i1.UtilityService }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
535
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: FilterFormArrayControlPipe, isStandalone: true, name: "filterFormArrayControl" }); }
|
|
536
536
|
}
|
|
537
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
537
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FilterFormArrayControlPipe, decorators: [{
|
|
538
538
|
type: Pipe,
|
|
539
539
|
args: [{
|
|
540
540
|
name: 'filterFormArrayControl',
|
|
@@ -570,10 +570,10 @@ export class SortPipe {
|
|
|
570
570
|
return arr.sort((x, y) => (direction ? y - x : x - y));
|
|
571
571
|
}
|
|
572
572
|
}
|
|
573
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
574
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
573
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: SortPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
574
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: SortPipe, isStandalone: true, name: "sort" }); }
|
|
575
575
|
}
|
|
576
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
576
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: SortPipe, decorators: [{
|
|
577
577
|
type: Pipe,
|
|
578
578
|
args: [{
|
|
579
579
|
name: 'sort',
|
|
@@ -590,10 +590,10 @@ export class RefresherPipe {
|
|
|
590
590
|
transform(value, refresher) {
|
|
591
591
|
return value;
|
|
592
592
|
}
|
|
593
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
594
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
593
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: RefresherPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
594
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: RefresherPipe, isStandalone: true, name: "refresher" }); }
|
|
595
595
|
}
|
|
596
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
596
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: RefresherPipe, decorators: [{
|
|
597
597
|
type: Pipe,
|
|
598
598
|
args: [{
|
|
599
599
|
name: 'refresher',
|
|
@@ -604,10 +604,10 @@ export class ToAnyPipe {
|
|
|
604
604
|
transform(value, isArray = false) {
|
|
605
605
|
return isArray ? value : value;
|
|
606
606
|
}
|
|
607
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
608
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
607
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ToAnyPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
608
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: ToAnyPipe, isStandalone: true, name: "toAny" }); }
|
|
609
609
|
}
|
|
610
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
610
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ToAnyPipe, decorators: [{
|
|
611
611
|
type: Pipe,
|
|
612
612
|
args: [{
|
|
613
613
|
name: 'toAny',
|
|
@@ -618,10 +618,10 @@ export class ToAnyArrayPipe {
|
|
|
618
618
|
transform(value) {
|
|
619
619
|
return value;
|
|
620
620
|
}
|
|
621
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
622
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
621
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ToAnyArrayPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
622
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: ToAnyArrayPipe, isStandalone: true, name: "toAnyArray" }); }
|
|
623
623
|
}
|
|
624
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
624
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ToAnyArrayPipe, decorators: [{
|
|
625
625
|
type: Pipe,
|
|
626
626
|
args: [{
|
|
627
627
|
name: 'toAnyArray',
|
|
@@ -637,10 +637,10 @@ export class TrimPipe {
|
|
|
637
637
|
transform(value) {
|
|
638
638
|
return value?.trim();
|
|
639
639
|
}
|
|
640
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
641
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
640
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: TrimPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
641
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: TrimPipe, isStandalone: true, name: "trim" }); }
|
|
642
642
|
}
|
|
643
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
643
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: TrimPipe, decorators: [{
|
|
644
644
|
type: Pipe,
|
|
645
645
|
args: [{
|
|
646
646
|
name: 'trim',
|
|
@@ -657,10 +657,10 @@ export class TrimTextPipe {
|
|
|
657
657
|
transform(value, length) {
|
|
658
658
|
return !value || length == null || value.length < length ? value : value.substring(0, length) + '...';
|
|
659
659
|
}
|
|
660
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
661
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
660
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: TrimTextPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
661
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: TrimTextPipe, isStandalone: true, name: "trimText" }); }
|
|
662
662
|
}
|
|
663
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
663
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: TrimTextPipe, decorators: [{
|
|
664
664
|
type: Pipe,
|
|
665
665
|
args: [{
|
|
666
666
|
name: 'trimText',
|
|
@@ -674,10 +674,10 @@ export class XOrYPipe {
|
|
|
674
674
|
constructor(uS) {
|
|
675
675
|
this.uS = uS;
|
|
676
676
|
}
|
|
677
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
678
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
677
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: XOrYPipe, deps: [{ token: i1.UtilityService }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
678
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: XOrYPipe, isStandalone: true, name: "xOrY" }); }
|
|
679
679
|
}
|
|
680
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
680
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: XOrYPipe, decorators: [{
|
|
681
681
|
type: Pipe,
|
|
682
682
|
args: [{
|
|
683
683
|
name: 'xOrY',
|
|
@@ -688,10 +688,10 @@ export class ReplaceAllPipe {
|
|
|
688
688
|
transform(text, search, replacement) {
|
|
689
689
|
return text ? text.split(search).join(replacement) : text;
|
|
690
690
|
}
|
|
691
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
692
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
691
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ReplaceAllPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
692
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: ReplaceAllPipe, isStandalone: true, name: "replaceAll" }); }
|
|
693
693
|
}
|
|
694
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
694
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ReplaceAllPipe, decorators: [{
|
|
695
695
|
type: Pipe,
|
|
696
696
|
args: [{
|
|
697
697
|
name: 'replaceAll',
|
|
@@ -709,10 +709,10 @@ export class ValueOrXPipe {
|
|
|
709
709
|
// console.log(value)
|
|
710
710
|
return value == null || value == undefined ? replacement : value;
|
|
711
711
|
}
|
|
712
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
713
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
712
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ValueOrXPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
713
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: ValueOrXPipe, isStandalone: true, name: "valueOrX" }); }
|
|
714
714
|
}
|
|
715
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
715
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ValueOrXPipe, decorators: [{
|
|
716
716
|
type: Pipe,
|
|
717
717
|
args: [{
|
|
718
718
|
name: 'valueOrX',
|
|
@@ -723,10 +723,10 @@ export class StrConcatenatorPipe {
|
|
|
723
723
|
transform(text1, text2, joiner = ' - ') {
|
|
724
724
|
return EVFunctions.strConcatenator2(text1, text2, joiner);
|
|
725
725
|
}
|
|
726
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
727
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
726
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: StrConcatenatorPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
727
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: StrConcatenatorPipe, isStandalone: true, name: "strConcatenator" }); }
|
|
728
728
|
}
|
|
729
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
729
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: StrConcatenatorPipe, decorators: [{
|
|
730
730
|
type: Pipe,
|
|
731
731
|
args: [{
|
|
732
732
|
name: 'strConcatenator',
|
|
@@ -754,10 +754,10 @@ export class FormValuePipe {
|
|
|
754
754
|
constructor(uS) {
|
|
755
755
|
this.uS = uS;
|
|
756
756
|
}
|
|
757
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
758
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
757
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FormValuePipe, deps: [{ token: i1.UtilityService }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
758
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: FormValuePipe, isStandalone: true, name: "formValue" }); }
|
|
759
759
|
}
|
|
760
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
760
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FormValuePipe, decorators: [{
|
|
761
761
|
type: Pipe,
|
|
762
762
|
args: [{
|
|
763
763
|
name: 'formValue',
|
|
@@ -772,10 +772,10 @@ export class FieldToLabelPipe {
|
|
|
772
772
|
constructor(uS) {
|
|
773
773
|
this.uS = uS;
|
|
774
774
|
}
|
|
775
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
776
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
775
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FieldToLabelPipe, deps: [{ token: i1.UtilityService }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
776
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: FieldToLabelPipe, isStandalone: true, name: "fieldToLabel" }); }
|
|
777
777
|
}
|
|
778
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
778
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FieldToLabelPipe, decorators: [{
|
|
779
779
|
type: Pipe,
|
|
780
780
|
args: [{
|
|
781
781
|
name: 'fieldToLabel',
|
|
@@ -786,10 +786,10 @@ export class TyperPipe {
|
|
|
786
786
|
transform(value, sample) {
|
|
787
787
|
return value;
|
|
788
788
|
}
|
|
789
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
790
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
789
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: TyperPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
790
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: TyperPipe, isStandalone: true, name: "typer" }); }
|
|
791
791
|
}
|
|
792
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
792
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: TyperPipe, decorators: [{
|
|
793
793
|
type: Pipe,
|
|
794
794
|
args: [{ name: 'typer', standalone: true }]
|
|
795
795
|
}] });
|
|
@@ -840,10 +840,10 @@ export class FilterArrayByStringPipe {
|
|
|
840
840
|
return ret;
|
|
841
841
|
}
|
|
842
842
|
}
|
|
843
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
844
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
843
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FilterArrayByStringPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
844
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: FilterArrayByStringPipe, isStandalone: true, name: "filterArrayByString" }); }
|
|
845
845
|
}
|
|
846
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
846
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FilterArrayByStringPipe, decorators: [{
|
|
847
847
|
type: Pipe,
|
|
848
848
|
args: [{
|
|
849
849
|
name: 'filterArrayByString',
|
|
@@ -863,10 +863,10 @@ export class RemoveUsedOptionsPipe {
|
|
|
863
863
|
else
|
|
864
864
|
return arr.filter((x) => formArray.some((f) => f == x));
|
|
865
865
|
}
|
|
866
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
867
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
866
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: RemoveUsedOptionsPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
867
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: RemoveUsedOptionsPipe, isStandalone: true, name: "removeUsedOptions" }); }
|
|
868
868
|
}
|
|
869
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
869
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: RemoveUsedOptionsPipe, decorators: [{
|
|
870
870
|
type: Pipe,
|
|
871
871
|
args: [{ name: 'removeUsedOptions', standalone: true }]
|
|
872
872
|
}] });
|
|
@@ -883,10 +883,10 @@ export class RemoveUsedOptionsReactivePipe {
|
|
|
883
883
|
else
|
|
884
884
|
return arr.filter((x) => formArray.some((f) => f == x));
|
|
885
885
|
}
|
|
886
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
887
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
886
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: RemoveUsedOptionsReactivePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
887
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: RemoveUsedOptionsReactivePipe, isStandalone: true, name: "removeUsedOptionsReactive" }); }
|
|
888
888
|
}
|
|
889
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
889
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: RemoveUsedOptionsReactivePipe, decorators: [{
|
|
890
890
|
type: Pipe,
|
|
891
891
|
args: [{ name: 'removeUsedOptionsReactive', standalone: true }]
|
|
892
892
|
}] });
|
|
@@ -894,10 +894,10 @@ export class ObjectToArrayPipe {
|
|
|
894
894
|
transform(value) {
|
|
895
895
|
return Object.values(value);
|
|
896
896
|
}
|
|
897
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
898
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
897
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ObjectToArrayPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
898
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: ObjectToArrayPipe, isStandalone: true, name: "objectToArray" }); }
|
|
899
899
|
}
|
|
900
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
900
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ObjectToArrayPipe, decorators: [{
|
|
901
901
|
type: Pipe,
|
|
902
902
|
args: [{ name: 'objectToArray', standalone: true }]
|
|
903
903
|
}] });
|
|
@@ -905,10 +905,10 @@ export class FormSchemaToTableColumnsPipe {
|
|
|
905
905
|
transform(value) {
|
|
906
906
|
return value?.map((x) => ({ f: x.field, t: x.label })) || [];
|
|
907
907
|
}
|
|
908
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
909
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
908
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FormSchemaToTableColumnsPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
909
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: FormSchemaToTableColumnsPipe, isStandalone: true, name: "formSchemaToCols" }); }
|
|
910
910
|
}
|
|
911
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
911
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: FormSchemaToTableColumnsPipe, decorators: [{
|
|
912
912
|
type: Pipe,
|
|
913
913
|
args: [{ name: 'formSchemaToCols', standalone: true }]
|
|
914
914
|
}] });
|
|
@@ -932,10 +932,10 @@ export class ResponsiveValPipe {
|
|
|
932
932
|
constructor(responsive) {
|
|
933
933
|
this.responsive = responsive;
|
|
934
934
|
}
|
|
935
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
936
|
-
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "
|
|
935
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ResponsiveValPipe, deps: [{ token: i3.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
936
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: ResponsiveValPipe, isStandalone: true, name: "responsiveVal" }); }
|
|
937
937
|
}
|
|
938
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
938
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: ResponsiveValPipe, decorators: [{
|
|
939
939
|
type: Pipe,
|
|
940
940
|
args: [{
|
|
941
941
|
name: 'responsiveVal',
|
|
@@ -986,11 +986,11 @@ const comps = [
|
|
|
986
986
|
];
|
|
987
987
|
const modules = [];
|
|
988
988
|
export class UtilityPipesModule {
|
|
989
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
990
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
|
|
991
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
989
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: UtilityPipesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
990
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.0.0", ngImport: i0, type: UtilityPipesModule, imports: [CommonModule, ArraySplitter, CustomDatePipe, FieldToLabelPipe, FilterArrayByStringPipe, FilterArrayPipe, FilterFormArrayGroupPipe, FormInvalidClassPipe, FormSchemaToTableColumnsPipe, FormValuePipe, FunctionCaller, FunctionCaller1, FunctionCaller2, FunctionCaller3, GenderPipe, GetValueLabel, HasFormValuePipe, HasValuePipe, CodeTitleDescPipe, HttpListCaller, HttpListCaller1, HttpListCaller2, IsClonePage, IsShowPage, ObjectToArrayPipe, RefresherPipe, RemoveUsedOptionsPipe, ReplaceAllPipe, ResponsiveValPipe, RoundPipe, SecondsToTimePipe, SortPipe, StrConcatenatorPipe, ToAnyArrayPipe, ToAnyPipe, SDKTranslatePipe, TrimPipe, TrimTextPipe, ValueFormatterPipe, ValueOrXPipe, XOrYPipe], exports: [ArraySplitter, CustomDatePipe, FieldToLabelPipe, FilterArrayByStringPipe, FilterArrayPipe, FilterFormArrayGroupPipe, FormInvalidClassPipe, FormSchemaToTableColumnsPipe, FormValuePipe, FunctionCaller, FunctionCaller1, FunctionCaller2, FunctionCaller3, GenderPipe, GetValueLabel, HasFormValuePipe, HasValuePipe, CodeTitleDescPipe, HttpListCaller, HttpListCaller1, HttpListCaller2, IsClonePage, IsShowPage, ObjectToArrayPipe, RefresherPipe, RemoveUsedOptionsPipe, ReplaceAllPipe, ResponsiveValPipe, RoundPipe, SecondsToTimePipe, SortPipe, StrConcatenatorPipe, ToAnyArrayPipe, ToAnyPipe, SDKTranslatePipe, TrimPipe, TrimTextPipe, ValueFormatterPipe, ValueOrXPipe, XOrYPipe] }); }
|
|
991
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: UtilityPipesModule, imports: [CommonModule, modules] }); }
|
|
992
992
|
}
|
|
993
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
993
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.0", ngImport: i0, type: UtilityPipesModule, decorators: [{
|
|
994
994
|
type: NgModule,
|
|
995
995
|
args: [{
|
|
996
996
|
imports: [CommonModule, ...modules, ...comps],
|
|
@@ -998,4 +998,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImpor
|
|
|
998
998
|
providers: [],
|
|
999
999
|
}]
|
|
1000
1000
|
}] });
|
|
1001
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0eS5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXRzLWZlLW5nLXNkay9zcmMvbGliL1NoYXJlZC9waXBlcy91dGlsaXR5LnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFJMUUsT0FBTyxFQUFFLFNBQVMsRUFBcUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRixPQUFPLEVBQXNCLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRFLE9BQU8sT0FBTyxNQUFNLHFCQUFxQixDQUFDO0FBRTFDLFdBQVc7QUFDWCxPQUFPLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXBDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7QUFFakUsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBSzdCLE1BQU0sT0FBTyxhQUFhO0lBQ3hCLFNBQVMsQ0FBSSxHQUFRLEVBQUUsU0FBaUIsRUFBRSxVQUFrQixFQUFFLFFBQWlCO1FBQzdFLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3BELENBQUM7OEdBSFUsYUFBYTs0R0FBYixhQUFhOzsyRkFBYixhQUFhO2tCQUp6QixJQUFJO21CQUFDO29CQUNKLElB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UUFBUSxFQXlJUixtQkFBbUIsRUEvRW5CLGNBQWMsRUFWZCxTQUFTLEVBK1RwQixnQkFBZ0IsRUEzU0wsUUFBUSxFQWVSLFlBQVksRUExWFosa0JBQWtCLEVBK1psQixZQUFZLEVBckJaLFFBQVEsYUF0aUJSLGFBQWEsRUF5Q2IsY0FBYyxFQXlrQmQsZ0JBQWdCLEVBbUJoQix1QkFBdUIsRUF0VnZCLGVBQWUsRUF1RGYsd0JBQXdCLEVBZ2JuQyxvQkFBb0IsRUFwRFQsNEJBQTRCLEVBNUk1QixhQUFhLEVBNVpiLGNBQWMsRUF3Q2QsZUFBZSxFQVFmLGVBQWUsRUFRZixlQUFlLEVBeE9mLFVBQVUsRUE0SFYsYUFBYSxFQTdDYixnQkFBZ0IsRUFsQ2hCLFlBQVksRUFjWixpQkFBaUIsRUFxTGpCLGNBQWMsRUFZZCxlQUFlLEVBV2YsZUFBZSxFQW9CZixXQUFXLEVBVFgsVUFBVSxFQStiVixpQkFBaUIsRUF2UGpCLGFBQWEsRUErTWIscUJBQXFCLEVBbElyQixjQUFjLEVBMkxkLGlCQUFpQixFQXp0QmpCLFNBQVMsRUFZVCxpQkFBaUIsRUFvYWpCLFFBQVEsRUF5SVIsbUJBQW1CLEVBL0VuQixjQUFjLEVBVmQsU0FBUyxFQStUcEIsZ0JBQWdCLEVBM1NMLFFBQVEsRUFlUixZQUFZLEVBMVhaLGtCQUFrQixFQStabEIsWUFBWSxFQXJCWixRQUFROytHQXlSUixrQkFBa0IsWUFKbkIsWUFBWSxFQUFLLE9BQU87OzJGQUl2QixrQkFBa0I7a0JBTDlCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsWUFBWSxFQUFFLEdBQUcsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFDO29CQUM3QyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxHQUFHLE9BQU8sQ0FBQztvQkFDL0IsU0FBUyxFQUFFLEVBQUU7aUJBQ2QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUsIERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEluamVjdGFibGUsIE5nTW9kdWxlLCBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vU2VydmljZXMvdXRpbGl0eS5zZXJ2aWNlJztcbmltcG9ydCB7IEVQYWdlVHlwZSwgSU9iamVjdExpdGVyYWwsIElUYWJsZUNvbCwgVHlwZU9mIH0gZnJvbSAnLi4vbW9kZWxzL2luZGV4Lm1vZGVsJztcbmltcG9ydCB7IEJyZWFrcG9pbnRPYnNlcnZlciwgQnJlYWtwb2ludHMgfSBmcm9tICdAYW5ndWxhci9jZGsvbGF5b3V0JztcbmltcG9ydCB7IElGb3JtU2NoZW1hIH0gZnJvbSAnLi4vbW9kZWxzL2Zvcm0tc2NoZW1hLm1vZGVsJztcbmltcG9ydCBUaW1lQWdvIGZyb20gJ2phdmFzY3JpcHQtdGltZS1hZ28nO1xuXG4vLyBFbmdsaXNoLlxuaW1wb3J0IGVuIGZyb20gJ2phdmFzY3JpcHQtdGltZS1hZ28vbG9jYWxlL2VuJztcbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgSVRleHRDYXNlMiB9IGZyb20gJy4uL2NvbXBvbmVudHMvdGV4dC1jYXNlLTIvdGV4dC1jYXNlLTIuY29tcG9uZW50JztcbmltcG9ydCB7IFNES1RyYW5zbGF0ZVBpcGUgfSBmcm9tICcuL3RyYW5zbGF0ZS5waXBlJztcbmltcG9ydCB7IEVWRnVuY3Rpb25zIH0gZnJvbSAnLi4vLi4vY29uZmlncy9iYXNlLWZ1bmN0aW9ucyc7XG5pbXBvcnQgeyBGb3JtSW52YWxpZENsYXNzUGlwZSB9IGZyb20gJy4vZm9ybS1pbnZhbGlkLWNsYXNzLnBpcGUnO1xuXG5UaW1lQWdvLmFkZERlZmF1bHRMb2NhbGUoZW4pO1xuQFBpcGUoe1xuICBuYW1lOiAnYXJyYXlTcGxpdHRlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEFycmF5U3BsaXR0ZXIgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtPFQ+KGFycjogVFtdLCBhcnJMZW5ndGg6IG51bWJlciwgc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleD86IG51bWJlcikge1xuICAgIHJldHVybiBhcnIgPyBhcnIuc2xpY2Uoc3RhcnRJbmRleCwgZW5kSW5kZXgpIDogW107XG4gIH1cbn1cblxuQFBpcGUoe1xuICBuYW1lOiAnZ2VuZGVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgR2VuZGVyUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0odmFsdWU6IHN0cmluZykge1xuICAgIHJldHVybiB2YWx1ZSA9PSAnTScgPyAnTWFsZScgOiB2YWx1ZSA9PSAnRicgPyAnRmVtYWxlJyA6IHZhbHVlO1xuICB9XG59XG5AUGlwZSh7XG4gIG5hbWU6ICdyb3VuZCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFJvdW5kUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAvKipcbiAgICogVXNlIHRoZSBNYXRoLnJvdW5kIGZ1bmN0aW9uXG4gICAqL1xuICB0cmFuc2Zvcm0odmFsdWU6IG51bWJlcikge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKHZhbHVlKTtcbiAgfVxufVxuQFBpcGUoe1xuICBuYW1lOiAnc2Vjb25kc1RvVGltZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFNlY29uZHNUb1RpbWVQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgY29uc3QgdGltZUxlZnQgPSB0aGlzLnVTLnNlY29uZHNUb0hvdXJNaW5TZWModmFsdWUpO1xuICAgIHJldHVybiBgJHt0aW1lTGVmdC5ob3VycyA/IHRpbWVMZWZ0LmhvdXJzICsgJ2hycycgOiAnJ31cbiAgJHt0aW1lTGVmdC5taW5zID8gdGltZUxlZnQubWlucyArICdtaW4nIDogJyd9ICR7dGltZUxlZnQuc2VjcyA/IHRpbWVMZWZ0LnNlY3MgKyAncycgOiAnJ31gO1xuICB9XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB1UzogVXRpbGl0eVNlcnZpY2UpIHt9XG59XG5jb25zdCB0aW1lQWdvID0gbmV3IFRpbWVBZ28oJ2VuLVVTJyk7XG5AUGlwZSh7IG5hbWU6ICdjdXN0b21EYXRlJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIEN1c3RvbURhdGVQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybShkYXRlOiBzdHJpbmcsIHNob3dUaW1lID0gZmFsc2UpIHtcbiAgICByZXR1cm4gdGltZUFnby5mb3JtYXQobmV3IERhdGUoZGF0ZSkpO1xuICB9XG4gIHRyYW5zZm9ybTIoZGF0ZTogc3RyaW5nLCBmb3JtYXRTdHI6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRlLCBmb3JtYXRTdHIpO1xuICB9XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBkYXRlUGlwZTogRGF0ZVBpcGUpIHt9XG59XG5cbkBQaXBlKHtcbiAgbmFtZTogJ2hhc1ZhbHVlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgSGFzVmFsdWVQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGZpZWxkcyBpbiBhIG9iamVjdCBoYXMgYW55IHZhbHVlXG4gICAqL1xuICB0cmFuc2Zvcm08VD4odmFsdWU6IFQsIGZpZWxkc1RvQ2hlY2tGb3I/OiAoa2V5b2YgVClbXSk6IGJvb2xlYW4ge1xuICAgIC8vIGRlYnVnZ2VyO1xuICAgIHJldHVybiBmaWVsZHNUb0NoZWNrRm9yPy5sZW5ndGggPyBmaWVsZHNUb0NoZWNrRm9yLnNvbWUoKHgpID0+ICEhdmFsdWVbeF0pIDogIWlzRW1wdHkodmFsdWUpO1xuICB9XG59XG5cbkBQaXBlKHtcbiAgbmFtZTogJ2NvZGVUaXRsZURlc2MnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBDb2RlVGl0bGVEZXNjUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0oXG4gICAgY29kZVRpdGxlQXJyYXk6IHtcbiAgICAgIGNvZGU6IHN0cmluZztcbiAgICAgIHRpdGxlPzogc3RyaW5nO1xuICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgfVtdLFxuICAgIGNvZGU6IHN0cmluZyxcbiAgKTogc3RyaW5nIHtcbiAgICBpZiAoIWNvZGUpIHJldHVybiAnJztcbiAgICBsZXQgZm91bmRPYmogPSBjb2RlVGl0bGVBcnJheT8uZmluZCgoeCkgPT4geC5jb2RlID09PSBjb2RlKTtcblxuICAgIHJldHVybiBFVkZ1bmN0aW9ucy5zdHJDb25jYXRlbmF0b3IyKGNvZGUsIGZvdW5kT2JqPy5kZXNjcmlwdGlvbiB8fCBmb3VuZE9iaj8udGl0bGUsICcgLSAnKTtcbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdoYXNGb3JtVmFsdWUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBIYXNGb3JtVmFsdWVQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhlIGZpZWxkcyBpbiBhIGZvcm1ncm91cCBvYmplY3QgaGFzIGFueSB2YWx1ZVxuICAgKi9cbiAgdHJhbnNmb3JtPFRWYWx1ZSwgVEZvcm0gZXh0ZW5kcyB7IGdldFJhd1ZhbHVlOiAoKSA9PiBUVmFsdWUgfT4oZm9ybUdyb3VwOiBURm9ybSwgZmllbGRzVG9DaGVja0Zvcj86IChrZXlvZiBUVmFsdWUpW10sIHJlZnJlc2hlcj8pOiBib29sZWFuIHtcbiAgICAvLyBjb25zb2xlLmxvZygndmFsJyk7XG4gICAgaWYgKCFmb3JtR3JvdXApIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCB2YWwgPSBmb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKTtcbiAgICByZXR1cm4gKGZpZWxkc1RvQ2hlY2tGb3I/Lmxlbmd0aCA/IGZpZWxkc1RvQ2hlY2tGb3IgOiBPYmplY3Qua2V5cyh2YWwpKS5zb21lKCh4KSA9PiB2YWxbeF0gIT0gbnVsbCk7XG4gIH1cbn1cblxuQFBpcGUoe1xuICBuYW1lOiAnb2JqZWN0VG9MYWJlbHMnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBPYmplY3RUb0xhYmVsc1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgb2JqZWN0IHRvIGFuIGFycmF5IG9mIGxhYmVsc1xuICAgKiBAcGFyYW0gdmFsdWVcbiAgICogQHBhcmFtIGN1c3RvbUZpZWxkTWFwXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICB0cmFuc2Zvcm08VD4odmFsdWU6IFQsIGN1c3RvbUZpZWxkTWFwPzogeyBbayBpbiBrZXlvZiBUXTogUGFydGlhbDxJVGV4dENhc2UyPiB9LCBleGNsdXNpb25MaXN0PzogeyBbeDogc3RyaW5nXTogYm9vbGVhbiB9KTogSVRleHRDYXNlMltdIHtcbiAgICAvLyBkZWJ1Z2dlcjtcbiAgICBjb25zdCBfZXhjbHVzaW9uTGlzdDogeyBbeDogc3RyaW5nXTogYm9vbGVhbiB9ID0ge1xuICAgICAgaWQ6IHRydWUsXG4gICAgICAuLi5leGNsdXNpb25MaXN0LFxuICAgIH07XG5cbiAgICByZXR1cm4gT2JqZWN0LmtleXModmFsdWUgfHwge30pXG4gICAgICAuZmlsdGVyKCh4KSA9PiAhX2V4Y2x1c2lvbkxpc3RbeF0pXG4gICAgICAubWFwKChmKSA9PiAoe1xuICAgICAgICAuLi5jdXN0b21GaWVsZE1hcD8uW2ZdLFxuICAgICAgICBsYWJlbDogY3VzdG9tRmllbGRNYXA/LltmXT8ubGFiZWwgfHwgdGhpcy51Uy5mb3JtYXRGaWVsZChmKSxcbiAgICAgICAgdmFsdWU6IHZhbHVlW2ZdLFxuICAgICAgfSkpO1xuICB9XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB1UzogVXRpbGl0eVNlcnZpY2UpIHt9XG59XG5cbkBQaXBlKHtcbiAgbmFtZTogJ2dldFZhbHVlTGFiZWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBHZXRWYWx1ZUxhYmVsIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIHN0cmluZyBpbnRvIGEgU2VsZWN0IG9wdGlvblxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlYXJjaCBmb3IgaW4gdGhlIG9wdGlvbnMgbGlzdFxuICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgbGlzdCBvZiBpdGVtcyB0byBzZWFyY2ggaW5cbiAgICogQHBhcmFtIGxhYmVsRmllbGQgVGhlIGZpZWxkIHRoYXQgaG9sZHMgdGhlIGRlc2NyaXB0aW9uIGZpZWxkXG4gICAqIEBwYXJhbSB2YWx1ZUZpZWxkIFRoZSBmaWVsZCB0aGF0IGhvbGRzIHRoZSB2YWx1ZSBmaWVsZFxuICAgKiBAcmV0dXJucyBBIGNvbmNhdGVuYXRpb24gb2YgdGhlIHZhbHVlIGFuZCBkZXNjcmlwdGlvbiAodmFsdWUgLSBkZXNjcmlwdGlvbilcbiAgICovXG4gIHRyYW5zZm9ybSh2YWx1ZTogc3RyaW5nLCBvcHRpb25zOiBhbnlbXSwgbGFiZWxGaWVsZCA9ICdkZXNjcmlwdGlvbicsIHZhbHVlRmllbGQgPSAnY29kZScpOiBzdHJpbmcge1xuICAgIGlmICghdmFsdWUpIHJldHVybiAnJztcbiAgICBpZiAoIW9wdGlvbnMpIHJldHVybiB2YWx1ZTtcbiAgICBjb25zdCBpdGVtID0gb3B0aW9ucy5maW5kKCh4KSA9PiB4W3ZhbHVlRmllbGRdID09IHZhbHVlKTtcbiAgICBpZiAoIWl0ZW0pIHJldHVybiB2YWx1ZTtcbiAgICByZXR1cm4gdmFsdWUgKyAnIC0gJyArIGl0ZW1bbGFiZWxGaWVsZF0gfHwgaXRlbVsndGl0bGUnXTtcbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICd2YWx1ZUZvcm1hdHRlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFZhbHVlRm9ybWF0dGVyUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICBhc3luYyB0cmFuc2Zvcm08VCwgUiA9IHN0cmluZz4odmFsOiBULCBmb3JtYXR0ZXI6ICh2YWx1ZTogVCkgPT4gUiB8IFByb21pc2U8Uj4gfCBPYnNlcnZhYmxlPFI+KSB7XG4gICAgcmV0dXJuIGZvcm1hdHRlciA/IGZvcm1hdHRlcih2YWwpIDogdmFsO1xuICB9XG59XG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuY2xhc3MgQ0Z1bmN0aW9uQ2FsbGVyIHtcbiAgLy8gdHJhbnNmb3JtPFQsIFA+KGZ1bmM6ICguLi5hcmdzOiBQW10pID0+IFQsIC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIGZ1bmM+KSB7XG4gIC8vICAgcmV0dXJuIGZ1bmMgPyBmdW5jKC4uLmFyZ3MpIDogbnVsbDtcbiAgLy8gfVxuXG4gIC8qKlxuICAgKiBDYWxscyBhIGZ1bmN0aW9uIGluIHRoZSB0ZW1wbGF0ZVxuICAgKiBAcGFyYW0gZnVuYyBGdW5jdGlvbiB0byBiZSBjYWxsZWRcbiAgICogQHBhcmFtIGFyZ3NcbiAgICogQHJldHVybnNcbiAgICovXG4gIHRyYW5zZm9ybTxUPihmdW5jOiAoKSA9PiBUKTogVDtcbiAgdHJhbnNmb3JtPFQsIFAxPihmdW5jOiAocGFyYW0xPzogUDEpID0+IFQsIHBhcmFtMTogUDEpOiBUO1xuICB0cmFuc2Zvcm08VCwgUDEsIFAyPihmdW5jOiAocGFyYW0xPzogUDEsIHBhcmFtMj86IFAyKSA9PiBULCBwYXJhbTE6IFAxLCBwYXJhbTI6IFAyKTogVDtcbiAgdHJhbnNmb3JtPFQsIFAxLCBQMiwgUDM+KGZ1bmM6IChwYXJhbTE/OiBQMSwgcGFyYW0yPzogUDIsIHBhcmFtMz86IFAzKSA9PiBULCBwYXJhbTE6IFAxLCBwYXJhbTI6IFAyLCBwYXJhbTM6IFAzKTogVDtcbiAgdHJhbnNmb3JtPFQsIFAxLCBQMiwgUDM+KGZ1bmM6IChwYXJhbTE/OiBQMSwgcGFyYW0yPzogUDIsIHBhcmFtMz86IFAzKSA9PiBULCBwYXJhbTE/OiBQMSwgcGFyYW0yPzogUDIsIHBhcmFtMz86IFAzKSB7XG4gICAgcmV0dXJuIGZ1bmMgPyBmdW5jKHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMpIDogbnVsbDtcbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdmdW5jdGlvbkNhbGxlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEZ1bmN0aW9uQ2FsbGVyIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIC8vIC8qKlxuICAvLyAgKiBDYWxscyBhIGZ1bmN0aW9uIGluIHRoZSB0ZW1wbGF0ZVxuICAvLyAgKiBAcGFyYW0gZnVuYyBGdW5jdGlvbiB0byBiZSBjYWxsZWRcbiAgLy8gICogQHBhcmFtIGFyZ3NcbiAgLy8gICogQHJldHVybnNcbiAgLy8gICovXG4gIC8vIHRyYW5zZm9ybTxUPihmdW5jOiAoKSA9PiBUKTogVDtcbiAgLy8gdHJhbnNmb3JtPFQsIFAxPihmdW5jOiAocGFyYW0xPzogUDEpID0+IFQsIHBhcmFtMTogUDEpOiBUO1xuICAvLyB0cmFuc2Zvcm08VCwgUDEsIFAyPihmdW5jOiAocGFyYW0xPzogUDEsIHBhcmFtMj86IFAyKSA9PiBULCBwYXJhbTE6IFAxLCBwYXJhbTI6IFAyKTogVDtcbiAgLy8gdHJhbnNmb3JtPFQsIFAxLCBQMiwgUDM+KFxuICAvLyAgIGZ1bmM6IChwYXJhbTE/OiBQMSwgcGFyYW0yPzogUDIsIHBhcmFtMz86IFAzKSA9PiBULFxuICAvLyAgIHBhcmFtMTogUDEsXG4gIC8vICAgcGFyYW0yOiBQMixcbiAgLy8gICBwYXJhbTM6IFAzXG4gIC8vICk6IFQ7XG4gIC8vIHRyYW5zZm9ybTxULCBQMSwgUDIsIFAzPihcbiAgLy8gICBmdW5jOiAocGFyYW0xPzogUDEsIHBhcmFtMj86IFAyLCBwYXJhbTM/OiBQMykgPT4gVCxcbiAgLy8gICBwYXJhbTE/OiBQMSxcbiAgLy8gICBwYXJhbTI/OiBQMixcbiAgLy8gICBwYXJhbTM/OiBQM1xuICAvLyApIHtcbiAgLy8gLy8gdHJhbnNmb3JtPFQsIFA+KGZ1bmM6ICguLi5hcmdzOiBQW10pID0+IFQsIC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIGZ1bmM+KSB7XG4gIC8vICAgcmV0dXJuIGZ1bmMgPyBmdW5jKC4uLmFyZ3MpIDogbnVsbDtcbiAgLy8gfVxuICAvLyBjb25zdHJ1Y3RvcigpIHtcbiAgLy8gICBjb25zdCBmID0gKGE6IHN0cmluZywgYjpudW1iZXIpID0+IHt9O1xuICAvLyAgIHRoaXMudHJhbnNmb3JtKGYsICB7IGQ6NDQgfSwnZGRkJywpO1xuICAvLyB9XG5cbiAgY29uc3RydWN0b3IocHVibGljIGY6IENGdW5jdGlvbkNhbGxlcikge1xuICAgIC8vIGNvbnN0IGZzID0gKCApID0+IHt9O1xuICAgIC8vIHRoaXMudHJhbnNmb3JtKGZzKTtcbiAgfVxuICB0cmFuc2Zvcm0gPSB0aGlzLmYudHJhbnNmb3JtO1xufVxuQFBpcGUoe1xuICBuYW1lOiAnZnVuY3Rpb25DYWxsZXIxJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgRnVuY3Rpb25DYWxsZXIxIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBmOiBDRnVuY3Rpb25DYWxsZXIpIHt9XG4gIHRyYW5zZm9ybSA9IHRoaXMuZi50cmFuc2Zvcm07XG59XG5AUGlwZSh7XG4gIG5hbWU6ICdmdW5jdGlvbkNhbGxlcjInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBGdW5jdGlvbkNhbGxlcjIgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgY29uc3RydWN0b3IocHVibGljIGY6IENGdW5jdGlvbkNhbGxlcikge31cbiAgdHJhbnNmb3JtID0gdGhpcy5mLnRyYW5zZm9ybTtcbn1cbkBQaXBlKHtcbiAgbmFtZTogJ2Z1bmN0aW9uQ2FsbGVyMycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEZ1bmN0aW9uQ2FsbGVyMyBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgZjogQ0Z1bmN0aW9uQ2FsbGVyKSB7fVxuICB0cmFuc2Zvcm0gPSB0aGlzLmYudHJhbnNmb3JtO1xufVxuQFBpcGUoe1xuICBuYW1lOiAnaHR0cExpc3RDYWxsZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBIdHRwTGlzdENhbGxlciBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAvLyB0cmFuc2Zvcm08VD4oaHR0cE9ic2VydmFibGU6IGFueSkge1xuICB0cmFuc2Zvcm08VD4oaHR0cE9ic2VydmFibGU6ICgpID0+IE9ic2VydmFibGU8VD4pIHtcbiAgICAvLyBjb25zb2xlLmxvZygncmFuIGZ1bmN0aW9uQ2FsbGVyJywgaHR0cE9ic2VydmFibGUpO1xuICAgIHJldHVybiBodHRwT2JzZXJ2YWJsZSgpO1xuICB9XG59XG5cbkBQaXBlKHtcbiAgbmFtZTogJ2h0dHBMaXN0Q2FsbGVyMScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEh0dHBMaXN0Q2FsbGVyMSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm08VD4oaHR0cE9ic2VydmFibGU6IChwYXJhbTogYW55KSA9PiBPYnNlcnZhYmxlPFQ+LCBwYXJhbTogYW55KSB7XG4gICAgLy8gY29uc29sZS5sb2coJ3JhbiBmdW5jdGlvbkNhbGxlcjEnLCBodHRwT2JzZXJ2YWJsZSk7XG4gICAgcmV0dXJuIGh0dHBPYnNlcnZhYmxlKHBhcmFtKTtcbiAgICAvLyByZXR1cm4gcGFyYW0gPyBodHRwT2JzZXJ2YWJsZShwYXJhbSkgOiBudWxsO1xuICB9XG59XG5AUGlwZSh7XG4gIG5hbWU6ICdodHRwTGlzdENhbGxlcjInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBIdHRwTGlzdENhbGxlcjIgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtPFQ+KGh0dHBPYnNlcnZhYmxlOiAocGFyYW0xOiBzdHJpbmcsIHBhcmFtMjogc3RyaW5nKSA9PiBPYnNlcnZhYmxlPFQ+LCBwYXJhbTE6IHN0cmluZywgcGFyYW0yOiBzdHJpbmcpIHtcbiAgICAvLyBjb25zb2xlLmxvZygncmFuIGh0dHBMaXN0Q2FsbGVyMicsIGh0dHBPYnNlcnZhYmxlKTtcbiAgICByZXR1cm4gaHR0cE9ic2VydmFibGUocGFyYW0xLCBwYXJhbTIpO1xuICAgIC8vIHJldHVybiBwYXJhbTEgPyAocGFyYW0yID8gaHR0cE9ic2VydmFibGUocGFyYW0xLCBwYXJhbTIpIDogbnVsbCkgOiBudWxsO1xuICB9XG59XG5AUGlwZSh7XG4gIG5hbWU6ICdpc1Nob3dQYWdlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgSXNTaG93UGFnZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0odHlwZTogRVBhZ2VUeXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgPT0gRVBhZ2VUeXBlLnNob3dQYWdlID8gdHJ1ZSA6IGZhbHNlO1xuICB9XG59XG5AUGlwZSh7XG4gIG5hbWU6ICdpc0Nsb25lUGFnZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIElzQ2xvbmVQYWdlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybSh0eXBlOiBFUGFnZVR5cGUpIHtcbiAgICByZXR1cm4gdHlwZSA9PSBFUGFnZVR5cGUuY2xvbmVQYWdlID8gdHJ1ZSA6IG51bGw7XG4gIH1cbn1cblxuQFBpcGUoe1xuICBuYW1lOiAnZmlsdGVyQXJyYXknLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBGaWx0ZXJBcnJheVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBhcnIgQXJyYXkgb2YgaXRlbXMgdG8gZmlsdGVyXG4gICAqIEBwYXJhbSB2YWx1ZSBGaWx0ZXIgdmFsdWVcbiAgICogQHBhcmFtIGZpbHRlckZ1bmN0aW9uIEZpbHRlciBmdW5jdGlvbiB0byBwYXNzIGluIGl0ZXJhdG9yXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICB0cmFuc2Zvcm08VCBleHRlbmRzIHsgW3g6IHN0cmluZ106IGFueSB9PihcbiAgICBhcnI6IFRbXSxcbiAgICB2YWx1ZTogeyBbeCBpbiBrZXlvZiBQYXJ0aWFsPFQ+XTogYW55IH0sXG4gICAgZmlsdGVyRnVuY3Rpb24/OiAodmFsdWU6IFQsIGluZGV4PzogbnVtYmVyLCBhcnJheT86IFRbXSkgPT4gYm9vbGVhbixcbiAgKSB7XG4gICAgLy8gcmV0dXJuIHRoaXMudVMudGltZUNvZGVCbG9jaygnaW5saW5lIGNvbXBhcmlzb24nLCAoKSA9PiB7XG4gICAgaWYgKHZhbHVlID09IG51bGwgfHwgIU9iamVjdC52YWx1ZXModmFsdWUpLmZpbHRlcigoeCkgPT4geCkubGVuZ3RoIHx8ICFhcnIgfHwgIWFyci5sZW5ndGgpIHJldHVybiBhcnI7XG4gICAgLy8gZGVidWdnZXI7XG4gICAgaWYgKGZpbHRlckZ1bmN0aW9uKSByZXR1cm4gYXJyLmZpbHRlcihmaWx0ZXJGdW5jdGlvbik7XG5cbiAgICAvLyNyZWdpb24gaGFuZGxlIGZpbHRlciB2YWx1ZVxuICAgIGNvbnN0IHZhbHVlTWFwOiB7XG4gICAgICBrZXk6IHN0cmluZztcbiAgICAgIHZhbHVlOiBzdHJpbmcgfCBib29sZWFuIHwgbnVtYmVyO1xuICAgICAgdHlwZTogVHlwZU9mO1xuICAgIH1bXSA9IFtdO1xuICAgIGZvciAoY29uc3Qga2V5IGluIHZhbHVlKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpICYmIHZhbHVlW2tleV0gIT0gbnVsbCkge1xuICAgICAgICBjb25zdCB2YWwgPSB7IGtleSwgdmFsdWU6IHZhbHVlW2tleV0sIHR5cGU6IHR5cGVvZiB2YWx1ZVtrZXldIH07XG4gICAgICAgIGlmICh2YWwudHlwZSA9PSAnZnVuY3Rpb24nIHx8IHZhbC50eXBlID09ICdvYmplY3QnKSBjb250aW51ZTtcbiAgICAgICAgaWYgKHZhbC50eXBlID09ICdzdHJpbmcnKSB2YWwudmFsdWUgPSAodmFsLnZhbHVlIGFzIHN0cmluZyk/LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIHZhbHVlTWFwLnB1c2godmFsKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICBjb25zdCByZXMgPSBhcnIuZmlsdGVyKCh4KSA9PiB7XG4gICAgICBjb25zdCBmb3JtR29ydXBWYWx1ZSA9IHg7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiB2YWx1ZU1hcCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKGtleS50eXBlID09ICdzdHJpbmcnICYmIChmb3JtR29ydXBWYWx1ZVtrZXkua2V5XSBhcyBzdHJpbmcpPy50b0xvd2VyQ2FzZSgpPy5pbmNsdWRlcyhrZXkudmFsdWUgYXMgc3RyaW5nKSkgfHxcbiAgICAgICAgICBmb3JtR29ydXBWYWx1ZVtrZXkua2V5XSA9PSBrZXkudmFsdWVcbiAgICAgICAgKVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICAgIC8vIGNvbnNvbGUubG9nKHJlcylcbiAgICByZXR1cm4gcmVzO1xuICAgIC8vIH0pO1xuICB9XG59XG5cbkBQaXBlKHtcbiAgbmFtZTogJ2ZpbHRlckZvcm1BcnJheUdyb3VwJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgRmlsdGVyRm9ybUFycmF5R3JvdXBQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gYXJyIEFycmF5IG9mIEZvcm1Hcm91cHMgdG8gZmlsdGVyXG4gICAqIEBwYXJhbSBxdWVyeU9iamVjdCBGaWx0ZXIgdmFsdWVcbiAgICogQHBhcmFtIGZpbHRlckZ1bmN0aW9uIEZpbHRlciBmdW5jdGlvbiB0byBwYXNzIGluIGl0ZXJhdG9yXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICB0cmFuc2Zvcm08VEdyb3VwIGV4dGVuZHMgRm9ybUdyb3VwPihcbiAgICBhcnI6IFRHcm91cFtdLFxuICAgIHF1ZXJ5T2JqZWN0OiB7IFt4OiBzdHJpbmddOiBzdHJpbmcgfCBib29sZWFuIHwgbnVtYmVyIH0sXG4gICAgZmlsdGVyRnVuY3Rpb24/OiAodmFsdWU6IFRHcm91cCwgaW5kZXg/OiBudW1iZXIsIGFycmF5PzogVEdyb3VwW10pID0+IGJvb2xlYW4sXG4gICkge1xuICAgIC8vIHJldHVybiB0aGlzLnVTLnRpbWVDb2RlQmxvY2soJ2lubGluZSBjb21wYXJpc29uJywgKCkgPT4ge1xuICAgIGlmIChxdWVyeU9iamVjdCA9PSBudWxsIHx8ICFPYmplY3QudmFsdWVzKHF1ZXJ5T2JqZWN0KS5maWx0ZXIoKHgpID0+IHgpLmxlbmd0aCB8fCAhYXJyIHx8ICFhcnIubGVuZ3RoKVxuICAgICAgcmV0dXJuIGFycjtcbiAgICAvLyBkZWJ1Z2dlcjtcbiAgICBpZiAoZmlsdGVyRnVuY3Rpb24pIHJldHVybiBhcnIuZmlsdGVyKGZpbHRlckZ1bmN0aW9uKTtcblxuICAgIGNvbnN0IHZhbHVlTWFwOiB7XG4gICAgICBrZXk6IHN0cmluZztcbiAgICAgIHZhbHVlOiBzdHJpbmcgfCBib29sZWFuIHwgbnVtYmVyO1xuICAgICAgdHlwZTogVHlwZU9mO1xuICAgIH1bXSA9IHRoaXMucXVlcnlNYXBwZXIocXVlcnlPYmplY3QpO1xuXG4gICAgY29uc3QgcmVzID0gYXJyLmZpbHRlcih0aGlzLmZpbHRlckZ1bmModmFsdWVNYXApKTtcbiAgICAvLyBjb25zb2xlLmxvZyhyZXMpXG4gICAgcmV0dXJuIHJlcztcbiAgICAvLyB9KTtcbiAgfVxuICBxdWVyeU1hcHBlciA9IChxdWVyeTogSU9iamVjdExpdGVyYWwpID0+IHtcbiAgICBpZiAocXVlcnkgPT0gbnVsbCB8fCAhT2JqZWN0LnZhbHVlcyhxdWVyeSkuZmlsdGVyKCh4KSA9PiB4KS5sZW5ndGgpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHF1ZXJ5T2JqZWN0OiB7XG4gICAgICBrZXk6IHN0cmluZztcbiAgICAgIHZhbHVlOiBzdHJpbmcgfCBib29sZWFuIHwgbnVtYmVyO1xuICAgICAgdHlwZTogVHlwZU9mO1xuICAgIH1bXSA9IFtdO1xuICAgIGZvciAoY29uc3Qga2V5IGluIHF1ZXJ5KVxuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChxdWVyeSwga2V5KSAmJiBxdWVyeVtrZXldICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgdmFsID0geyBrZXksIHZhbHVlOiBxdWVyeVtrZXldLCB0eXBlOiB0eXBlb2YgcXVlcnlba2V5XSB9O1xuICAgICAgICBpZiAodmFsLnR5cGUgPT0gJ2Z1bmN0aW9uJyB8fCB2YWwudHlwZSA9PSAnb2JqZWN0JykgY29udGludWU7XG4gICAgICAgIGlmICh2YWwudHlwZSA9PSAnc3RyaW5nJykgdmFsLnZhbHVlID0gKHZhbC52YWx1ZSBhcyBzdHJpbmcpPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBxdWVyeU9iamVjdC5wdXNoKHZhbCk7XG4gICAgICB9XG4gICAgcmV0dXJuIHF1ZXJ5T2JqZWN0O1xuICB9O1xuXG4gIGZpbHRlckZ1bmMgPVxuICAgIChcbiAgICAgIHF1ZXJ5T2JqZWN0OiB7XG4gICAgICAgIGtleTogc3RyaW5nO1xuICAgICAgICB2YWx1ZTogc3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlcjtcbiAgICAgICAgdHlwZTogVHlwZU9mO1xuICAgICAgfVtdLFxuICAgICkgPT5cbiAgICA8VEdyb3VwIGV4dGVuZHMgRm9ybUdyb3VwPihncm91cDogVEdyb3VwKTogYm9vbGVhbiA9PiB7XG4gICAgICBjb25zdCBmb3JtR29ydXBWYWx1ZSA9IGdyb3VwLmdldFJhd1ZhbHVlKCk7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBxdWVyeU9iamVjdCB8fCBbXSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKGtleS50eXBlID09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAoZm9ybUdvcnVwVmFsdWVba2V5LmtleV0gYXMgc3RyaW5nKT8udG9Mb3dlckNhc2UoKT8uaW5jbHVkZXMoa2V5LnZhbHVlIGFzIHN0cmluZykpIHx8XG4gICAgICAgICAgZm9ybUdvcnVwVmFsdWVba2V5LmtleV0gPT0ga2V5LnZhbHVlXG4gICAgICAgIClcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdmaWx0ZXJGb3JtQXJyYXlDb250cm9sJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgRmlsdGVyRm9ybUFycmF5Q29udHJvbFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBhcnIgQXJyYXkgb2YgRm9ybUdyb3VwcyB0byBmaWx0ZXJcbiAgICogQHBhcmFtIHZhbHVlIEZpbHRlciB2YWx1ZVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgdHJhbnNmb3JtPFRDb250cm9sIGV4dGVuZHMgQWJzdHJhY3RDb250cm9sPGFueT4gPSBhbnk+KGFycjogVENvbnRyb2xbXSwgdmFsdWU6IHN0cmluZyB8IGJvb2xlYW4gfCBudW1iZXIpIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCAhYXJyIHx8ICFhcnIubGVuZ3RoKSByZXR1cm4gYXJyO1xuICAgIC8vIGRlYnVnZ2VyO1xuICAgIHJldHVybiBhcnIuZmlsdGVyKCh4KSA9PiB4LnZhbHVlID09IHZhbHVlKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB1UzogVXRpbGl0eVNlcnZpY2UpIHt9XG59XG5cbkBQaXBlKHtcbiAgbmFtZTogJ3NvcnQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBTb3J0UGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGFyclxuICAgKiBAcGFyYW0gZGlyZWN0aW9uIDAgLSBhc2NlbmRpbmcgb3JkZXIuIDEgLSBkZXNjZW5kaW5nIG9yZGVyXG4gICAqIEBwYXJhbSBzb3J0RmllbGRcbiAgICogQHJldHVybnNcbiAgICovXG4gIHRyYW5zZm9ybTxUPihhcnI6IFRbXSwgZGlyZWN0aW9uOiAwIHwgMSA9IDAsIHNvcnRGaWVsZD86IGtleW9mIFQpIHtcbiAgICAvLyAgICBjb25zb2xlLmxvZygnU09SVFRFUicsIGFyciwgZGlyZWN0aW9uLCBzb3J0RmllbGQpO1xuICAgIC8vIGRlYnVnZ2VyO1xuICAgIGlmICghYXJyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKGRpcmVjdGlvbiA+IC0xICYmIGRpcmVjdGlvbiA8IDIpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvcnQoYXJyLCBkaXJlY3Rpb24sIHNvcnRGaWVsZCBhcyBhbnkpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYXJyO1xuICAgIH1cbiAgfVxuICBzb3J0PFQ+KGFycjogVFtdLCBkaXJlY3Rpb246IDAgfCAxLCBzb3J0RmllbGQ/OiBzdHJpbmcpIHtcbiAgICBpZiAoc29ydEZpZWxkKSB7XG4gICAgICByZXR1cm4gYXJyLnNvcnQzKHNvcnRGaWVsZCBhcyBhbnksIGRpcmVjdGlvbiA/IHRydWUgOiBmYWxzZSkgYXMgVFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYXJyLnNvcnQoKHg6IGFueSwgeTogYW55KSA9PiAoZGlyZWN0aW9uID8geSAtIHggOiB4IC0geSkpO1xuICAgIH1cbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdyZWZyZXNoZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBSZWZyZXNoZXJQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgdmFsdWUgd2hlbiB0aGUgcmVmcmVzaGVyIHZhbHVlIGNoYW5nZXNcbiAgICogQHBhcmFtIHZhbHVlIFZhbHVlIHRvIGJlIHJldHVybmVkXG4gICAqIEBwYXJhbSByZWZyZXNoZXIgUmVmcmVzaGVyIHZhbHVlIGZvciB1cGRhdGluZyB0aGUgdmFsdWVcbiAgICogQHJldHVybnNcbiAgICovXG4gIHRyYW5zZm9ybTxUPih2YWx1ZTogVCwgcmVmcmVzaGVyPzogYW55KSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG5AUGlwZSh7XG4gIG5hbWU6ICd0b0FueScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFRvQW55UGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0odmFsdWU6IGFueSwgaXNBcnJheSA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIGlzQXJyYXkgPyAodmFsdWUgYXMgYW55W10pIDogdmFsdWU7XG4gIH1cbn1cblxuQFBpcGUoe1xuICBuYW1lOiAndG9BbnlBcnJheScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFRvQW55QXJyYXlQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybSh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIHZhbHVlIGFzIGFueVtdO1xuICB9XG59XG5cbkBQaXBlKHtcbiAgbmFtZTogJ3RyaW0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBUcmltUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAvKipcbiAgICogVHJpbXMgYSBzdHJpbmdcbiAgICogQHBhcmFtIHZhbHVlIFN0cmluZyB0byB0cmltXG4gICAqIEByZXR1cm5zIFRyaW1tZWQgc3RyaW5nXG4gICAqL1xuICB0cmFuc2Zvcm0odmFsdWU6IHN0cmluZykge1xuICAgIHJldHVybiB2YWx1ZT8udHJpbSgpO1xuICB9XG59XG5cbkBQaXBlKHtcbiAgbmFtZTogJ3RyaW1UZXh0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgVHJpbVRleHRQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIC8qKlxuICAgKiBUcmltcyBhIHN0cmluZyBiYXNlZCBvbiBhIHNwZWNpZmllZCBsZW5ndGhcbiAgICogQHBhcmFtIHZhbHVlIFN0cmluZyB0byB0cmltXG4gICAqIEBwYXJhbSBsZW5ndGggTGVuZ3RoIHRvIGJlZ2luIHRyaW1taW5nXG4gICAqIEByZXR1cm5zIFRyaW1tZWQgc3RyaW5nXG4gICAqL1xuICB0cmFuc2Zvcm0odmFsdWU6IHN0cmluZywgbGVuZ3RoOiBudW1iZXIpIHtcbiAgICByZXR1cm4gIXZhbHVlIHx8IGxlbmd0aCA9PSBudWxsIHx8IHZhbHVlLmxlbmd0aCA8IGxlbmd0aCA/IHZhbHVlIDogdmFsdWUuc3Vic3RyaW5nKDAsIGxlbmd0aCkgKyAnLi4uJztcbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICd4T3JZJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgWE9yWVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtKHg6IHN0cmluZywgeSA9ICctJykge1xuICAgIHJldHVybiB0aGlzLnVTLnhPclkoeCwgeSk7XG4gIH1cbiAgY29uc3RydWN0b3IocHJpdmF0ZSB1UzogVXRpbGl0eVNlcnZpY2UpIHt9XG59XG5cbkBQaXBlKHtcbiAgbmFtZTogJ3JlcGxhY2VBbGwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBSZXBsYWNlQWxsUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0odGV4dDogc3RyaW5nLCBzZWFyY2g6IHN0cmluZywgcmVwbGFjZW1lbnQ6IHN0cmluZykge1xuICAgIHJldHVybiB0ZXh0ID8gdGV4dC5zcGxpdChzZWFyY2gpLmpvaW4ocmVwbGFjZW1lbnQpIDogdGV4dDtcbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICd2YWx1ZU9yWCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFZhbHVlT3JYUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIFZhcmlhYmxlIHRoYXQgaG9sZHMgdGhlIHZhbHVlIHRvIGJlIGNoZWNrZWQgZm9yIGVtcHRpbmVzc1xuICAgKiBAcGFyYW0gcmVwbGFjZW1lbnQgVGhpcyBpcyB0aGUgdmFsdWUgdGhhdCB3aWxsIGJlIHNldCBpZiB0aGUgc3ViamVjdCBmaWVsZCBpcyBlbXB0eVxuICAgKiBAcmV0dXJucyBSZXR1cm4gdGhlIHZhbHVlIG9yIHRoZSByZXBsYWNlbWVudCB2YWx1ZSBpZiB2YWx1ZSBpcyBlbXB0eVxuICAgKi9cbiAgdHJhbnNmb3JtPFQ+KHZhbHVlOiBULCByZXBsYWNlbWVudDogc3RyaW5nID0gJy0nKSB7XG4gICAgLy8gY29uc29sZS5sb2codmFsdWUpXG4gICAgcmV0dXJuIHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT0gdW5kZWZpbmVkID8gcmVwbGFjZW1lbnQgOiB2YWx1ZTtcbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdzdHJDb25jYXRlbmF0b3InLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBTdHJDb25jYXRlbmF0b3JQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybTxUPih0ZXh0MT86IHN0cmluZyB8IG51bGwsIHRleHQyPzogc3RyaW5nIHwgbnVsbCwgam9pbmVyOiBzdHJpbmcgPSAnIC0gJykge1xuICAgIHJldHVybiBFVkZ1bmN0aW9ucy5zdHJDb25jYXRlbmF0b3IyKHRleHQxLCB0ZXh0Miwgam9pbmVyKTtcbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdmb3JtVmFsdWUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBGb3JtVmFsdWVQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybShmb3JtVmFsdWUsIGZvcm1TY2hlbWE/OiBJRm9ybVNjaGVtYVtdKTogc3RyaW5nO1xuICB0cmFuc2Zvcm08VD4oZm9ybVZhbHVlOiBULCBmb3JtU2NoZW1hPzogKGtleW9mIFQpW10pOiBzdHJpbmc7XG4gIHRyYW5zZm9ybTxUPihmb3JtVmFsdWU6IFQsIGZvcm1TY2hlbWE/OiAoSUZvcm1TY2hlbWEgfCBrZXlvZiBUKVtdKTogc3RyaW5nIHtcbiAgICAvLyBkZWJ1Z2dlcjtcbiAgICByZXR1cm4gZm9ybVZhbHVlXG4gICAgICA/IChmb3JtU2NoZW1hPy5sZW5ndGggJiYgdHlwZW9mIGZvcm1TY2hlbWFbMF0gIT0gJ3N0cmluZydcbiAgICAgICAgICA/IGZvcm1TY2hlbWEubWFwKChmaWVsZDogSUZvcm1TY2hlbWEpID0+IHtcbiAgICAgICAgICAgICAgLy8gZGVidWdnZXI7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbCA9XG4gICAgICAgICAgICAgICAgZmllbGQudHlwZSA9PSAnc2VsZWN0JyB8fCBmaWVsZC50eXBlID09ICdhdXRvY29tcGxldGUnID8gZmllbGQuc2VsZWN0ZWRPcHRpb25MYWJlbCB8fCBmb3JtVmFsdWVbZmllbGQuZmllbGRdIDogZm9ybVZhbHVlW2ZpZWxkLmZpZWxkXTtcbiAgICAgICAgICAgICAgcmV0dXJuIHZhbCAhPSBudWxsID8gYCR7ZmllbGQubGFiZWx9OiAke3ZhbH1gIDogbnVsbDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiAoZm9ybVNjaGVtYSB8fCBPYmplY3Qua2V5cyhmb3JtVmFsdWUpKS5tYXAoKHgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsID0gZm9ybVZhbHVlW3hdO1xuICAgICAgICAgICAgICByZXR1cm4gYCR7dGhpcy51Uy5mb3JtYXRGaWVsZCh4KX06ICR7dmFsICE9IG51bGwgPyB2YWwgOiAnLSd9YDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgICAuZmlsdGVyKCh4KSA9PiB4KVxuICAgICAgICAgIC5qb2luKCdcXG4nKVxuICAgICAgOiAnJztcbiAgfVxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdVM6IFV0aWxpdHlTZXJ2aWNlKSB7fVxufVxuQFBpcGUoe1xuICBuYW1lOiAnZmllbGRUb0xhYmVsJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgRmllbGRUb0xhYmVsUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0oZmllbGROYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIGRlYnVnZ2VyO1xuICAgIHJldHVybiB0aGlzLnVTLmZvcm1hdEZpZWxkKGZpZWxkTmFtZSk7XG4gIH1cbiAgY29uc3RydWN0b3IocHVibGljIHVTOiBVdGlsaXR5U2VydmljZSkge31cbn1cblxuQFBpcGUoeyBuYW1lOiAndHlwZXInLCBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgVHlwZXJQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybTxUPih2YWx1ZTogYW55LCBzYW1wbGU6IFQpIHtcbiAgICByZXR1cm4gdmFsdWUgYXMgVDtcbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdmaWx0ZXJBcnJheUJ5U3RyaW5nJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgRmlsdGVyQXJyYXlCeVN0cmluZ1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgLyoqXG4gICAqIEZpbHRlciBhcnJheSB1c2luZyBhIHBpcGVcbiAgICogQHBhcmFtIGFyciBBcnJheSB0byBmaWx0ZXJcbiAgICogQHBhcmFtIHZhbHVlIFZhbHVlIHRvIGZpbHRlciBmb3JcbiAgICogQHBhcmFtIGtleXMgRmllbGRzIHRvIGNoZWNrIGZvciBtYXRjaCBpblxuICAgKiBAcGFyYW0gZmlsdGVyRnVuY3Rpb24gRml0bGVyIGZ1bmN0aW9uIHRvIHVzZSBpbnN0ZWFkIG9mIHZhbHVlIGFuZCBrZXlzXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICB0cmFuc2Zvcm08VD4oYXJyOiBUW10sIHZhbHVlOiBzdHJpbmcsIGtleXM6IChrZXlvZiBUKVtdLCBmaWx0ZXJGdW5jdGlvbj86ICh2YWx1ZTogVCwgaW5kZXg/OiBudW1iZXIsIGFycmF5PzogVFtdKSA9PiBib29sZWFuKSB7XG4gICAgaWYgKCFhcnIpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIGFycjtcbiAgICBpZiAoZmlsdGVyRnVuY3Rpb24pIHJldHVybiBhcnIuZmlsdGVyKGZpbHRlckZ1bmN0aW9uKTtcbiAgICBlbHNlIHtcbiAgICAgIC8vIGRlYnVnZ2VyO1xuICAgICAgY29uc3QgdmwgPSB2YWx1ZT8udG9TdHJpbmcoKT8udHJpbSgpPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgcmV0OiBUW10gPSBbXTtcbiAgICAgIGNvbnN0IGFkZGVkTWFwOiB7IFtpZDogc3RyaW5nXTogYm9vbGVhbiB9ID0ge307XG4gICAgICBjb25zdCBpZEZpZWxkID0ga2V5c1swXSBhcyBzdHJpbmc7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBhcnIpIHtcbiAgICAgICAgICBpZiAoYWRkZWRNYXBbaXRlbVtpZEZpZWxkXV0pIGNvbnRpbnVlO1xuICAgICAgICAgIGlmICgoPHN0cmluZz5pdGVtW2tleV0pPy50b1N0cmluZygpPy50b0xvd2VyQ2FzZSgpPy5zdGFydHNXaXRoKHZsKSkge1xuICAgICAgICAgICAgcmV0LnB1c2goaXRlbSk7XG4gICAgICAgICAgICBhZGRlZE1hcFtpdGVtW2lkRmllbGRdXSA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBhcnIpIHtcbiAgICAgICAgICBpZiAoYWRkZWRNYXBbaXRlbVtpZEZpZWxkXV0pIGNvbnRpbnVlO1xuICAgICAgICAgIGlmICgoPHN0cmluZz5pdGVtW2tleV0pPy50b1N0cmluZygpPy50b0xvd2VyQ2FzZSgpPy5pbmNsdWRlcyh2bCkpIHtcbiAgICAgICAgICAgIHJldC5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgYWRkZWRNYXBbaXRlbVtpZEZpZWxkXV0gPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc29sZS5sb2coJ2ZpbHRlciByZXN1bHQnLCByZXQpO1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gIH1cbn1cblxuQFBpcGUoeyBuYW1lOiAncmVtb3ZlVXNlZE9wdGlvbnMnLCBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgUmVtb3ZlVXNlZE9wdGlvbnNQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybTxUT3B0aW9uLCBURm9ybUFycmF5PihcbiAgICBhcnI6IFRPcHRpb25bXSxcbiAgICBmb3JtQXJyYXk6IFRGb3JtQXJyYXlbXSxcbiAgICBmb3JtOiBURm9ybUFycmF5LFxuICAgIGFyckZpZWxkTmFtZT86IGtleW9mIFRPcHRpb24sXG4gICAgZm9ybUZpZWxkTmFtZT86IGtleW9mIFRGb3JtQXJyYXksXG4gICk6IFRPcHRpb25bXSB7XG4gICAgaWYgKCFhcnI/Lmxlbmd0aCB8fCAhZm9ybUFycmF5Py5sZW5ndGgpIHJldHVybiBbXTtcbiAgICBpZiAoYXJyRmllbGROYW1lICYmIGZvcm1GaWVsZE5hbWUpXG4gICAgICByZXR1cm4gYXJyLmZpbHRlcihcbiAgICAgICAgKHgpID0+ICFmb3JtQXJyYXkuc29tZSgoZikgPT4gZm9ybVtmb3JtRmllbGROYW1lXSAhPSAoeFthcnJGaWVsZE5hbWVdIGFzIGFueSkgJiYgZltmb3JtRmllbGROYW1lXSA9PSAoeFthcnJGaWVsZE5hbWVdIGFzIGFueSkpLFxuICAgICAgKTtcbiAgICBlbHNlIGlmIChhcnJGaWVsZE5hbWUgJiYgIWZvcm1GaWVsZE5hbWUpIHJldHVybiBhcnIuZmlsdGVyKCh4KSA9PiAhZm9ybUFycmF5LnNvbWUoKGYpID0+IGYgPT0gKHhbYXJyRmllbGROYW1lXSBhcyBhbnkpKSk7XG4gICAgZWxzZSBpZiAoIWFyckZpZWxkTmFtZSAmJiBmb3JtRmllbGROYW1lKSByZXR1cm4gYXJyLmZpbHRlcigoeCkgPT4gIWZvcm1BcnJheS5zb21lKChmKSA9PiBmW2Zvcm1GaWVsZE5hbWVdID09ICh4IGFzIGFueSkpKTtcbiAgICBlbHNlIHJldHVybiBhcnIuZmlsdGVyKCh4KSA9PiBmb3JtQXJyYXkuc29tZSgoZikgPT4gZiA9PSAoeCBhcyBhbnkpKSk7XG4gIH1cbn1cblxuQFBpcGUoeyBuYW1lOiAncmVtb3ZlVXNlZE9wdGlvbnNSZWFjdGl2ZScsIHN0YW5kYWxvbmU6IHRydWUgfSlcbmV4cG9ydCBjbGFzcyBSZW1vdmVVc2VkT3B0aW9uc1JlYWN0aXZlUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm08VE9wdGlvbiwgVEZvcm1BcnJheSBleHRlbmRzIHsgdmFsdWU/OiBhbnkgfVtdPihcbiAgICBhcnI6IFRPcHRpb25bXSxcbiAgICBmb3JtQXJyYXk6IFRGb3JtQXJyYXlbXSxcbiAgICBmb3JtOiBURm9ybUFycmF5LFxuICAgIGFyckZpZWxkTmFtZT86IGtleW9mIFRPcHRpb24sXG4gICAgZm9ybUZpZWxkTmFtZT86IGtleW9mIFRGb3JtQXJyYXksXG4gICk6IFRPcHRpb25bXSB7XG4gICAgaWYgKCFhcnI/Lmxlbmd0aCB8fCAhZm9ybUFycmF5Py5sZW5ndGgpIHJldHVybiBbXTtcbiAgICBpZiAoYXJyRmllbGROYW1lICYmIGZvcm1GaWVsZE5hbWUpXG4gICAgICByZXR1cm4gYXJyLmZpbHRlcihcbiAgICAgICAgKHgpID0+ICFmb3JtQXJyYXkuc29tZSgoZikgPT4gZm9ybVtmb3JtRmllbGROYW1lXSAhPSAoeFthcnJGaWVsZE5hbWVdIGFzIGFueSkgJiYgZltmb3JtRmllbGROYW1lXSA9PSAoeFthcnJGaWVsZE5hbWVdIGFzIGFueSkpLFxuICAgICAgKTtcbiAgICBlbHNlIGlmIChhcnJGaWVsZE5hbWUgJiYgIWZvcm1GaWVsZE5hbWUpIHJldHVybiBhcnIuZmlsdGVyKCh4KSA9PiAhZm9ybUFycmF5LnNvbWUoKGYpID0+IGYgPT0gKHhbYXJyRmllbGROYW1lXSBhcyBhbnkpKSk7XG4gICAgZWxzZSBpZiAoIWFyckZpZWxkTmFtZSAmJiBmb3JtRmllbGROYW1lKSByZXR1cm4gYXJyLmZpbHRlcigoeCkgPT4gIWZvcm1BcnJheS5zb21lKChmKSA9PiBmW2Zvcm1GaWVsZE5hbWVdID09ICh4IGFzIGFueSkpKTtcbiAgICBlbHNlIHJldHVybiBhcnIuZmlsdGVyKCh4KSA9PiBmb3JtQXJyYXkuc29tZSgoZikgPT4gZiA9PSAoeCBhcyBhbnkpKSk7XG4gIH1cbn1cblxuQFBpcGUoeyBuYW1lOiAnb2JqZWN0VG9BcnJheScsIHN0YW5kYWxvbmU6IHRydWUgfSlcbmV4cG9ydCBjbGFzcyBPYmplY3RUb0FycmF5UGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm08VD4odmFsdWU6IHsgW3g6IHN0cmluZ106IFQgfSk6IFRbXSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModmFsdWUpO1xuICB9XG59XG5cbkBQaXBlKHsgbmFtZTogJ2Zvcm1TY2hlbWFUb0NvbHMnLCBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgRm9ybVNjaGVtYVRvVGFibGVDb2x1bW5zUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0odmFsdWU6IElGb3JtU2NoZW1hW10pOiBJVGFibGVDb2xbXSB7XG4gICAgcmV0dXJuIHZhbHVlPy5tYXAoKHgpID0+ICh7IGY6IHguZmllbGQsIHQ6IHgubGFiZWwgfSkpIHx8IFtdO1xuICB9XG59XG5cbkBQaXBlKHtcbiAgbmFtZTogJ3Jlc3BvbnNpdmVWYWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBSZXNwb25zaXZlVmFsUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAvLyBzdWI6U3Vic2NyaXB0aW9uXG4gIHRyYW5zZm9ybTxUPihjb25maWc6IHtcbiAgICBYU21hbGw/OiBUO1xuICAgIFNtYWxsPzogVDtcbiAgICBNZWRpdW0/OiBUO1xuICAgIExhcmdlPzogVDtcbiAgICBYTGFyZ2U/OiBUO1xuICAgIEhhbmRzZXQ/OiBUO1xuICAgIFRhYmxldD86IFQ7XG4gICAgV2ViPzogVDtcbiAgICBIYW5kc2V0UG9ydHJhaXQ/OiBUO1xuICAgIFRhYmxldFBvcnRyYWl0PzogVDtcbiAgICBXZWJQb3J0cmFpdD86IFQ7XG4gICAgSGFuZHNldExhbmRzY2FwZT86IFQ7XG4gICAgVGFibGV0TGFuZHNjYXBlPzogVDtcbiAgICBXZWJMYW5kc2NhcGU/OiBUO1xuICB9KTogVCB7XG4gICAgLy8gZGVidWdnZXI7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gY29uZmlnKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywga2V5KSkge1xuICAgICAgICBpZiAodGhpcy5yZXNwb25zaXZlLmlzTWF0Y2hlZChCcmVha3BvaW50c1trZXldKSkgcmV0dXJuIGNvbmZpZ1trZXldO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhjb25maWcpWzBdO1xuICAgIC8vICB0aGlzLnN1Yj0gdGhpcy5yZXNwb25zaXZlLm9ic2VydmUocj0+e1xuXG4gICAgLy8gIH0pXG4gIH1cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgLy8gdGhpcy5zdWIuXG4gIH1cbiAgY29uc3RydWN0b3IocHVibGljIHJlc3BvbnNpdmU6IEJyZWFrcG9pbnRPYnNlcnZlcikge31cbn1cblxuY29uc3QgY29tcHMgPSBbXG4gIEFycmF5U3BsaXR0ZXIsXG4gIEN1c3RvbURhdGVQaXBlLFxuICBGaWVsZFRvTGFiZWxQaXBlLFxuICBGaWx0ZXJBcnJheUJ5U3RyaW5nUGlwZSxcbiAgRmlsdGVyQXJyYXlQaXBlLFxuICBGaWx0ZXJGb3JtQXJyYXlHcm91cFBpcGUsXG4gIEZvcm1JbnZhbGlkQ2xhc3NQaXBlLFxuICBGb3JtU2NoZW1hVG9UYWJsZUNvbHVtbnNQaXBlLFxuICBGb3JtVmFsdWVQaXBlLFxuICBGdW5jdGlvbkNhbGxlcixcbiAgRnVuY3Rpb25DYWxsZXIxLFxuICBGdW5jdGlvbkNhbGxlcjIsXG4gIEZ1bmN0aW9uQ2FsbGVyMyxcbiAgR2VuZGVyUGlwZSxcbiAgR2V0VmFsdWVMYWJlbCxcbiAgSGFzRm9ybVZhbHVlUGlwZSxcbiAgSGFzVmFsdWVQaXBlLFxuICBDb2RlVGl0bGVEZXNjUGlwZSxcbiAgSHR0cExpc3RDYWxsZXIsXG4gIEh0dHBMaXN0Q2FsbGVyMSxcbiAgSHR0cExpc3RDYWxsZXIyLFxuICBJc0Nsb25lUGFnZSxcbiAgSXNTaG93UGFnZSxcbiAgT2JqZWN0VG9BcnJheVBpcGUsXG4gIFJlZnJlc2hlclBpcGUsXG4gIFJlbW92ZVVzZWRPcHRpb25zUGlwZSxcbiAgUmVwbGFjZUFsbFBpcGUsXG4gIFJlc3BvbnNpdmVWYWxQaXBlLFxuICBSb3VuZFBpcGUsXG4gIFNlY29uZHNUb1RpbWVQaXBlLFxuICBTb3J0UGlwZSxcbiAgU3RyQ29uY2F0ZW5hdG9yUGlwZSxcbiAgVG9BbnlBcnJheVBpcGUsXG4gIFRvQW55UGlwZSxcbiAgU0RLVHJhbnNsYXRlUGlwZSxcbiAgVHJpbVBpcGUsXG4gIFRyaW1UZXh0UGlwZSxcbiAgVmFsdWVGb3JtYXR0ZXJQaXBlLFxuICBWYWx1ZU9yWFBpcGUsXG4gIFhPcllQaXBlLFxuXTtcbmNvbnN0IG1vZHVsZXMgPSBbXTtcbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIC4uLm1vZHVsZXMsIC4uLmNvbXBzXSxcbiAgZXhwb3J0czogWy4uLmNvbXBzLCAuLi5tb2R1bGVzXSxcbiAgcHJvdmlkZXJzOiBbXSxcbn0pXG5leHBvcnQgY2xhc3MgVXRpbGl0eVBpcGVzTW9kdWxlIHt9XG4iXX0=
|
|
1001
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0eS5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXRzLWZlLW5nLXNkay9zcmMvbGliL1NoYXJlZC9waXBlcy91dGlsaXR5LnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFJMUUsT0FBTyxFQUFFLFNBQVMsRUFBcUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRixPQUFPLEVBQXNCLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRFLE9BQU8sT0FBTyxNQUFNLHFCQUFxQixDQUFDO0FBRTFDLFdBQVc7QUFDWCxPQUFPLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXBDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7QUFFakUsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBSzdCLE1BQU0sT0FBTyxhQUFhO0lBQ3hCLFNBQVMsQ0FBSSxHQUFRLEVBQUUsU0FBaUIsRUFBRSxVQUFrQixFQUFFLFFBQWlCO1FBQzdFLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3BELENBQUM7OEdBSFUsYUFBYTs0R0FBYixhQUFhOzsyRkFBYixhQUFhO2tCQUp6QixJQUFJO21CQUFDO29CQUNKLElB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RSxHQUFHLEtBQUssQ0FBQztvQkFDN0MsT0FBTyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsR0FBRyxPQUFPLENBQUM7b0JBQy9CLFNBQVMsRUFBRSxFQUFFO2lCQUNkIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBOZ01vZHVsZSwgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBVdGlsaXR5U2VydmljZSB9IGZyb20gJy4uLy4uL1NlcnZpY2VzL3V0aWxpdHkuc2VydmljZSc7XG5pbXBvcnQgeyBFUGFnZVR5cGUsIElPYmplY3RMaXRlcmFsLCBJVGFibGVDb2wsIFR5cGVPZiB9IGZyb20gJy4uL21vZGVscy9pbmRleC5tb2RlbCc7XG5pbXBvcnQgeyBCcmVha3BvaW50T2JzZXJ2ZXIsIEJyZWFrcG9pbnRzIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XG5pbXBvcnQgeyBJRm9ybVNjaGVtYSB9IGZyb20gJy4uL21vZGVscy9mb3JtLXNjaGVtYS5tb2RlbCc7XG5pbXBvcnQgVGltZUFnbyBmcm9tICdqYXZhc2NyaXB0LXRpbWUtYWdvJztcblxuLy8gRW5nbGlzaC5cbmltcG9ydCBlbiBmcm9tICdqYXZhc2NyaXB0LXRpbWUtYWdvL2xvY2FsZS9lbic7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IElUZXh0Q2FzZTIgfSBmcm9tICcuLi9jb21wb25lbnRzL3RleHQtY2FzZS0yL3RleHQtY2FzZS0yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTREtUcmFuc2xhdGVQaXBlIH0gZnJvbSAnLi90cmFuc2xhdGUucGlwZSc7XG5pbXBvcnQgeyBFVkZ1bmN0aW9ucyB9IGZyb20gJy4uLy4uL2NvbmZpZ3MvYmFzZS1mdW5jdGlvbnMnO1xuaW1wb3J0IHsgRm9ybUludmFsaWRDbGFzc1BpcGUgfSBmcm9tICcuL2Zvcm0taW52YWxpZC1jbGFzcy5waXBlJztcblxuVGltZUFnby5hZGREZWZhdWx0TG9jYWxlKGVuKTtcbkBQaXBlKHtcbiAgbmFtZTogJ2FycmF5U3BsaXR0ZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBBcnJheVNwbGl0dGVyIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybTxUPihhcnI6IFRbXSwgYXJyTGVuZ3RoOiBudW1iZXIsIHN0YXJ0SW5kZXg6IG51bWJlciwgZW5kSW5kZXg/OiBudW1iZXIpIHtcbiAgICByZXR1cm4gYXJyID8gYXJyLnNsaWNlKHN0YXJ0SW5kZXgsIGVuZEluZGV4KSA6IFtdO1xuICB9XG59XG5cbkBQaXBlKHtcbiAgbmFtZTogJ2dlbmRlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEdlbmRlclBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtKHZhbHVlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdmFsdWUgPT0gJ00nID8gJ01hbGUnIDogdmFsdWUgPT0gJ0YnID8gJ0ZlbWFsZScgOiB2YWx1ZTtcbiAgfVxufVxuQFBpcGUoe1xuICBuYW1lOiAncm91bmQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBSb3VuZFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgLyoqXG4gICAqIFVzZSB0aGUgTWF0aC5yb3VuZCBmdW5jdGlvblxuICAgKi9cbiAgdHJhbnNmb3JtKHZhbHVlOiBudW1iZXIpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZCh2YWx1ZSk7XG4gIH1cbn1cbkBQaXBlKHtcbiAgbmFtZTogJ3NlY29uZHNUb1RpbWUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBTZWNvbmRzVG9UaW1lUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0odmFsdWU6IG51bWJlcikge1xuICAgIGNvbnN0IHRpbWVMZWZ0ID0gdGhpcy51Uy5zZWNvbmRzVG9Ib3VyTWluU2VjKHZhbHVlKTtcbiAgICByZXR1cm4gYCR7dGltZUxlZnQuaG91cnMgPyB0aW1lTGVmdC5ob3VycyArICdocnMnIDogJyd9XG4gICR7dGltZUxlZnQubWlucyA/IHRpbWVMZWZ0Lm1pbnMgKyAnbWluJyA6ICcnfSAke3RpbWVMZWZ0LnNlY3MgPyB0aW1lTGVmdC5zZWNzICsgJ3MnIDogJyd9YDtcbiAgfVxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdVM6IFV0aWxpdHlTZXJ2aWNlKSB7fVxufVxuY29uc3QgdGltZUFnbyA9IG5ldyBUaW1lQWdvKCdlbi1VUycpO1xuQFBpcGUoeyBuYW1lOiAnY3VzdG9tRGF0ZScsIHN0YW5kYWxvbmU6IHRydWUgfSlcbmV4cG9ydCBjbGFzcyBDdXN0b21EYXRlUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0oZGF0ZTogc3RyaW5nLCBzaG93VGltZSA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIHRpbWVBZ28uZm9ybWF0KG5ldyBEYXRlKGRhdGUpKTtcbiAgfVxuICB0cmFuc2Zvcm0yKGRhdGU6IHN0cmluZywgZm9ybWF0U3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZSwgZm9ybWF0U3RyKTtcbiAgfVxuICBjb25zdHJ1Y3RvcihwdWJsaWMgZGF0ZVBpcGU6IERhdGVQaXBlKSB7fVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdoYXNWYWx1ZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEhhc1ZhbHVlUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBmaWVsZHMgaW4gYSBvYmplY3QgaGFzIGFueSB2YWx1ZVxuICAgKi9cbiAgdHJhbnNmb3JtPFQ+KHZhbHVlOiBULCBmaWVsZHNUb0NoZWNrRm9yPzogKGtleW9mIFQpW10pOiBib29sZWFuIHtcbiAgICAvLyBkZWJ1Z2dlcjtcbiAgICByZXR1cm4gZmllbGRzVG9DaGVja0Zvcj8ubGVuZ3RoID8gZmllbGRzVG9DaGVja0Zvci5zb21lKCh4KSA9PiAhIXZhbHVlW3hdKSA6ICFpc0VtcHR5KHZhbHVlKTtcbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdjb2RlVGl0bGVEZXNjJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgQ29kZVRpdGxlRGVzY1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtKFxuICAgIGNvZGVUaXRsZUFycmF5OiB7XG4gICAgICBjb2RlOiBzdHJpbmc7XG4gICAgICB0aXRsZT86IHN0cmluZztcbiAgICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgIH1bXSxcbiAgICBjb2RlOiBzdHJpbmcsXG4gICk6IHN0cmluZyB7XG4gICAgaWYgKCFjb2RlKSByZXR1cm4gJyc7XG4gICAgbGV0IGZvdW5kT2JqID0gY29kZVRpdGxlQXJyYXk/LmZpbmQoKHgpID0+IHguY29kZSA9PT0gY29kZSk7XG5cbiAgICByZXR1cm4gRVZGdW5jdGlvbnMuc3RyQ29uY2F0ZW5hdG9yMihjb2RlLCBmb3VuZE9iaj8uZGVzY3JpcHRpb24gfHwgZm91bmRPYmo/LnRpdGxlLCAnIC0gJyk7XG4gIH1cbn1cblxuQFBpcGUoe1xuICBuYW1lOiAnaGFzRm9ybVZhbHVlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgSGFzRm9ybVZhbHVlUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBmaWVsZHMgaW4gYSBmb3JtZ3JvdXAgb2JqZWN0IGhhcyBhbnkgdmFsdWVcbiAgICovXG4gIHRyYW5zZm9ybTxUVmFsdWUsIFRGb3JtIGV4dGVuZHMgeyBnZXRSYXdWYWx1ZTogKCkgPT4gVFZhbHVlIH0+KGZvcm1Hcm91cDogVEZvcm0sIGZpZWxkc1RvQ2hlY2tGb3I/OiAoa2V5b2YgVFZhbHVlKVtdLCByZWZyZXNoZXI/KTogYm9vbGVhbiB7XG4gICAgLy8gY29uc29sZS5sb2coJ3ZhbCcpO1xuICAgIGlmICghZm9ybUdyb3VwKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgdmFsID0gZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XG4gICAgcmV0dXJuIChmaWVsZHNUb0NoZWNrRm9yPy5sZW5ndGggPyBmaWVsZHNUb0NoZWNrRm9yIDogT2JqZWN0LmtleXModmFsKSkuc29tZSgoeCkgPT4gdmFsW3hdICE9IG51bGwpO1xuICB9XG59XG5cbkBQaXBlKHtcbiAgbmFtZTogJ29iamVjdFRvTGFiZWxzJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgT2JqZWN0VG9MYWJlbHNQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIG9iamVjdCB0byBhbiBhcnJheSBvZiBsYWJlbHNcbiAgICogQHBhcmFtIHZhbHVlXG4gICAqIEBwYXJhbSBjdXN0b21GaWVsZE1hcFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgdHJhbnNmb3JtPFQ+KHZhbHVlOiBULCBjdXN0b21GaWVsZE1hcD86IHsgW2sgaW4ga2V5b2YgVF06IFBhcnRpYWw8SVRleHRDYXNlMj4gfSwgZXhjbHVzaW9uTGlzdD86IHsgW3g6IHN0cmluZ106IGJvb2xlYW4gfSk6IElUZXh0Q2FzZTJbXSB7XG4gICAgLy8gZGVidWdnZXI7XG4gICAgY29uc3QgX2V4Y2x1c2lvbkxpc3Q6IHsgW3g6IHN0cmluZ106IGJvb2xlYW4gfSA9IHtcbiAgICAgIGlkOiB0cnVlLFxuICAgICAgLi4uZXhjbHVzaW9uTGlzdCxcbiAgICB9O1xuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHZhbHVlIHx8IHt9KVxuICAgICAgLmZpbHRlcigoeCkgPT4gIV9leGNsdXNpb25MaXN0W3hdKVxuICAgICAgLm1hcCgoZikgPT4gKHtcbiAgICAgICAgLi4uY3VzdG9tRmllbGRNYXA/LltmXSxcbiAgICAgICAgbGFiZWw6IGN1c3RvbUZpZWxkTWFwPy5bZl0/LmxhYmVsIHx8IHRoaXMudVMuZm9ybWF0RmllbGQoZiksXG4gICAgICAgIHZhbHVlOiB2YWx1ZVtmXSxcbiAgICAgIH0pKTtcbiAgfVxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdVM6IFV0aWxpdHlTZXJ2aWNlKSB7fVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdnZXRWYWx1ZUxhYmVsJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgR2V0VmFsdWVMYWJlbCBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAvKipcbiAgICogQ29udmVydHMgYSBzdHJpbmcgaW50byBhIFNlbGVjdCBvcHRpb25cbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yIGluIHRoZSBvcHRpb25zIGxpc3RcbiAgICogQHBhcmFtIG9wdGlvbnMgVGhlIGxpc3Qgb2YgaXRlbXMgdG8gc2VhcmNoIGluXG4gICAqIEBwYXJhbSBsYWJlbEZpZWxkIFRoZSBmaWVsZCB0aGF0IGhvbGRzIHRoZSBkZXNjcmlwdGlvbiBmaWVsZFxuICAgKiBAcGFyYW0gdmFsdWVGaWVsZCBUaGUgZmllbGQgdGhhdCBob2xkcyB0aGUgdmFsdWUgZmllbGRcbiAgICogQHJldHVybnMgQSBjb25jYXRlbmF0aW9uIG9mIHRoZSB2YWx1ZSBhbmQgZGVzY3JpcHRpb24gKHZhbHVlIC0gZGVzY3JpcHRpb24pXG4gICAqL1xuICB0cmFuc2Zvcm0odmFsdWU6IHN0cmluZywgb3B0aW9uczogYW55W10sIGxhYmVsRmllbGQgPSAnZGVzY3JpcHRpb24nLCB2YWx1ZUZpZWxkID0gJ2NvZGUnKTogc3RyaW5nIHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gJyc7XG4gICAgaWYgKCFvcHRpb25zKSByZXR1cm4gdmFsdWU7XG4gICAgY29uc3QgaXRlbSA9IG9wdGlvbnMuZmluZCgoeCkgPT4geFt2YWx1ZUZpZWxkXSA9PSB2YWx1ZSk7XG4gICAgaWYgKCFpdGVtKSByZXR1cm4gdmFsdWU7XG4gICAgcmV0dXJuIHZhbHVlICsgJyAtICcgKyBpdGVtW2xhYmVsRmllbGRdIHx8IGl0ZW1bJ3RpdGxlJ107XG4gIH1cbn1cblxuQFBpcGUoe1xuICBuYW1lOiAndmFsdWVGb3JtYXR0ZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBWYWx1ZUZvcm1hdHRlclBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgYXN5bmMgdHJhbnNmb3JtPFQsIFIgPSBzdHJpbmc+KHZhbDogVCwgZm9ybWF0dGVyOiAodmFsdWU6IFQpID0+IFIgfCBQcm9taXNlPFI+IHwgT2JzZXJ2YWJsZTxSPikge1xuICAgIHJldHVybiBmb3JtYXR0ZXIgPyBmb3JtYXR0ZXIodmFsKSA6IHZhbDtcbiAgfVxufVxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmNsYXNzIENGdW5jdGlvbkNhbGxlciB7XG4gIC8vIHRyYW5zZm9ybTxULCBQPihmdW5jOiAoLi4uYXJnczogUFtdKSA9PiBULCAuLi5hcmdzOiBQYXJhbWV0ZXJzPHR5cGVvZiBmdW5jPikge1xuICAvLyAgIHJldHVybiBmdW5jID8gZnVuYyguLi5hcmdzKSA6IG51bGw7XG4gIC8vIH1cblxuICAvKipcbiAgICogQ2FsbHMgYSBmdW5jdGlvbiBpbiB0aGUgdGVtcGxhdGVcbiAgICogQHBhcmFtIGZ1bmMgRnVuY3Rpb24gdG8gYmUgY2FsbGVkXG4gICAqIEBwYXJhbSBhcmdzXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICB0cmFuc2Zvcm08VD4oZnVuYzogKCkgPT4gVCk6IFQ7XG4gIHRyYW5zZm9ybTxULCBQMT4oZnVuYzogKHBhcmFtMT86IFAxKSA9PiBULCBwYXJhbTE6IFAxKTogVDtcbiAgdHJhbnNmb3JtPFQsIFAxLCBQMj4oZnVuYzogKHBhcmFtMT86IFAxLCBwYXJhbTI/OiBQMikgPT4gVCwgcGFyYW0xOiBQMSwgcGFyYW0yOiBQMik6IFQ7XG4gIHRyYW5zZm9ybTxULCBQMSwgUDIsIFAzPihmdW5jOiAocGFyYW0xPzogUDEsIHBhcmFtMj86IFAyLCBwYXJhbTM/OiBQMykgPT4gVCwgcGFyYW0xOiBQMSwgcGFyYW0yOiBQMiwgcGFyYW0zOiBQMyk6IFQ7XG4gIHRyYW5zZm9ybTxULCBQMSwgUDIsIFAzPihmdW5jOiAocGFyYW0xPzogUDEsIHBhcmFtMj86IFAyLCBwYXJhbTM/OiBQMykgPT4gVCwgcGFyYW0xPzogUDEsIHBhcmFtMj86IFAyLCBwYXJhbTM/OiBQMykge1xuICAgIHJldHVybiBmdW5jID8gZnVuYyhwYXJhbTEsIHBhcmFtMiwgcGFyYW0zKSA6IG51bGw7XG4gIH1cbn1cblxuQFBpcGUoe1xuICBuYW1lOiAnZnVuY3Rpb25DYWxsZXInLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBGdW5jdGlvbkNhbGxlciBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAvLyAvKipcbiAgLy8gICogQ2FsbHMgYSBmdW5jdGlvbiBpbiB0aGUgdGVtcGxhdGVcbiAgLy8gICogQHBhcmFtIGZ1bmMgRnVuY3Rpb24gdG8gYmUgY2FsbGVkXG4gIC8vICAqIEBwYXJhbSBhcmdzXG4gIC8vICAqIEByZXR1cm5zXG4gIC8vICAqL1xuICAvLyB0cmFuc2Zvcm08VD4oZnVuYzogKCkgPT4gVCk6IFQ7XG4gIC8vIHRyYW5zZm9ybTxULCBQMT4oZnVuYzogKHBhcmFtMT86IFAxKSA9PiBULCBwYXJhbTE6IFAxKTogVDtcbiAgLy8gdHJhbnNmb3JtPFQsIFAxLCBQMj4oZnVuYzogKHBhcmFtMT86IFAxLCBwYXJhbTI/OiBQMikgPT4gVCwgcGFyYW0xOiBQMSwgcGFyYW0yOiBQMik6IFQ7XG4gIC8vIHRyYW5zZm9ybTxULCBQMSwgUDIsIFAzPihcbiAgLy8gICBmdW5jOiAocGFyYW0xPzogUDEsIHBhcmFtMj86IFAyLCBwYXJhbTM/OiBQMykgPT4gVCxcbiAgLy8gICBwYXJhbTE6IFAxLFxuICAvLyAgIHBhcmFtMjogUDIsXG4gIC8vICAgcGFyYW0zOiBQM1xuICAvLyApOiBUO1xuICAvLyB0cmFuc2Zvcm08VCwgUDEsIFAyLCBQMz4oXG4gIC8vICAgZnVuYzogKHBhcmFtMT86IFAxLCBwYXJhbTI/OiBQMiwgcGFyYW0zPzogUDMpID0+IFQsXG4gIC8vICAgcGFyYW0xPzogUDEsXG4gIC8vICAgcGFyYW0yPzogUDIsXG4gIC8vICAgcGFyYW0zPzogUDNcbiAgLy8gKSB7XG4gIC8vIC8vIHRyYW5zZm9ybTxULCBQPihmdW5jOiAoLi4uYXJnczogUFtdKSA9PiBULCAuLi5hcmdzOiBQYXJhbWV0ZXJzPHR5cGVvZiBmdW5jPikge1xuICAvLyAgIHJldHVybiBmdW5jID8gZnVuYyguLi5hcmdzKSA6IG51bGw7XG4gIC8vIH1cbiAgLy8gY29uc3RydWN0b3IoKSB7XG4gIC8vICAgY29uc3QgZiA9IChhOiBzdHJpbmcsIGI6bnVtYmVyKSA9PiB7fTtcbiAgLy8gICB0aGlzLnRyYW5zZm9ybShmLCAgeyBkOjQ0IH0sJ2RkZCcsKTtcbiAgLy8gfVxuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBmOiBDRnVuY3Rpb25DYWxsZXIpIHtcbiAgICAvLyBjb25zdCBmcyA9ICggKSA9PiB7fTtcbiAgICAvLyB0aGlzLnRyYW5zZm9ybShmcyk7XG4gIH1cbiAgdHJhbnNmb3JtID0gdGhpcy5mLnRyYW5zZm9ybTtcbn1cbkBQaXBlKHtcbiAgbmFtZTogJ2Z1bmN0aW9uQ2FsbGVyMScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEZ1bmN0aW9uQ2FsbGVyMSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgZjogQ0Z1bmN0aW9uQ2FsbGVyKSB7fVxuICB0cmFuc2Zvcm0gPSB0aGlzLmYudHJhbnNmb3JtO1xufVxuQFBpcGUoe1xuICBuYW1lOiAnZnVuY3Rpb25DYWxsZXIyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgRnVuY3Rpb25DYWxsZXIyIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBmOiBDRnVuY3Rpb25DYWxsZXIpIHt9XG4gIHRyYW5zZm9ybSA9IHRoaXMuZi50cmFuc2Zvcm07XG59XG5AUGlwZSh7XG4gIG5hbWU6ICdmdW5jdGlvbkNhbGxlcjMnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBGdW5jdGlvbkNhbGxlcjMgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgY29uc3RydWN0b3IocHVibGljIGY6IENGdW5jdGlvbkNhbGxlcikge31cbiAgdHJhbnNmb3JtID0gdGhpcy5mLnRyYW5zZm9ybTtcbn1cbkBQaXBlKHtcbiAgbmFtZTogJ2h0dHBMaXN0Q2FsbGVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgSHR0cExpc3RDYWxsZXIgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgLy8gdHJhbnNmb3JtPFQ+KGh0dHBPYnNlcnZhYmxlOiBhbnkpIHtcbiAgdHJhbnNmb3JtPFQ+KGh0dHBPYnNlcnZhYmxlOiAoKSA9PiBPYnNlcnZhYmxlPFQ+KSB7XG4gICAgLy8gY29uc29sZS5sb2coJ3JhbiBmdW5jdGlvbkNhbGxlcicsIGh0dHBPYnNlcnZhYmxlKTtcbiAgICByZXR1cm4gaHR0cE9ic2VydmFibGUoKTtcbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdodHRwTGlzdENhbGxlcjEnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBIdHRwTGlzdENhbGxlcjEgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtPFQ+KGh0dHBPYnNlcnZhYmxlOiAocGFyYW06IGFueSkgPT4gT2JzZXJ2YWJsZTxUPiwgcGFyYW06IGFueSkge1xuICAgIC8vIGNvbnNvbGUubG9nKCdyYW4gZnVuY3Rpb25DYWxsZXIxJywgaHR0cE9ic2VydmFibGUpO1xuICAgIHJldHVybiBodHRwT2JzZXJ2YWJsZShwYXJhbSk7XG4gICAgLy8gcmV0dXJuIHBhcmFtID8gaHR0cE9ic2VydmFibGUocGFyYW0pIDogbnVsbDtcbiAgfVxufVxuQFBpcGUoe1xuICBuYW1lOiAnaHR0cExpc3RDYWxsZXIyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgSHR0cExpc3RDYWxsZXIyIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybTxUPihodHRwT2JzZXJ2YWJsZTogKHBhcmFtMTogc3RyaW5nLCBwYXJhbTI6IHN0cmluZykgPT4gT2JzZXJ2YWJsZTxUPiwgcGFyYW0xOiBzdHJpbmcsIHBhcmFtMjogc3RyaW5nKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ3JhbiBodHRwTGlzdENhbGxlcjInLCBodHRwT2JzZXJ2YWJsZSk7XG4gICAgcmV0dXJuIGh0dHBPYnNlcnZhYmxlKHBhcmFtMSwgcGFyYW0yKTtcbiAgICAvLyByZXR1cm4gcGFyYW0xID8gKHBhcmFtMiA/IGh0dHBPYnNlcnZhYmxlKHBhcmFtMSwgcGFyYW0yKSA6IG51bGwpIDogbnVsbDtcbiAgfVxufVxuQFBpcGUoe1xuICBuYW1lOiAnaXNTaG93UGFnZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIElzU2hvd1BhZ2UgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtKHR5cGU6IEVQYWdlVHlwZSkge1xuICAgIHJldHVybiB0eXBlID09IEVQYWdlVHlwZS5zaG93UGFnZSA/IHRydWUgOiBmYWxzZTtcbiAgfVxufVxuQFBpcGUoe1xuICBuYW1lOiAnaXNDbG9uZVBhZ2UnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBJc0Nsb25lUGFnZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0odHlwZTogRVBhZ2VUeXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgPT0gRVBhZ2VUeXBlLmNsb25lUGFnZSA/IHRydWUgOiBudWxsO1xuICB9XG59XG5cbkBQaXBlKHtcbiAgbmFtZTogJ2ZpbHRlckFycmF5JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgRmlsdGVyQXJyYXlQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gYXJyIEFycmF5IG9mIGl0ZW1zIHRvIGZpbHRlclxuICAgKiBAcGFyYW0gdmFsdWUgRmlsdGVyIHZhbHVlXG4gICAqIEBwYXJhbSBmaWx0ZXJGdW5jdGlvbiBGaWx0ZXIgZnVuY3Rpb24gdG8gcGFzcyBpbiBpdGVyYXRvclxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgdHJhbnNmb3JtPFQgZXh0ZW5kcyB7IFt4OiBzdHJpbmddOiBhbnkgfT4oXG4gICAgYXJyOiBUW10sXG4gICAgdmFsdWU6IHsgW3ggaW4ga2V5b2YgUGFydGlhbDxUPl06IGFueSB9LFxuICAgIGZpbHRlckZ1bmN0aW9uPzogKHZhbHVlOiBULCBpbmRleD86IG51bWJlciwgYXJyYXk/OiBUW10pID0+IGJvb2xlYW4sXG4gICkge1xuICAgIC8vIHJldHVybiB0aGlzLnVTLnRpbWVDb2RlQmxvY2soJ2lubGluZSBjb21wYXJpc29uJywgKCkgPT4ge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8ICFPYmplY3QudmFsdWVzKHZhbHVlKS5maWx0ZXIoKHgpID0+IHgpLmxlbmd0aCB8fCAhYXJyIHx8ICFhcnIubGVuZ3RoKSByZXR1cm4gYXJyO1xuICAgIC8vIGRlYnVnZ2VyO1xuICAgIGlmIChmaWx0ZXJGdW5jdGlvbikgcmV0dXJuIGFyci5maWx0ZXIoZmlsdGVyRnVuY3Rpb24pO1xuXG4gICAgLy8jcmVnaW9uIGhhbmRsZSBmaWx0ZXIgdmFsdWVcbiAgICBjb25zdCB2YWx1ZU1hcDoge1xuICAgICAga2V5OiBzdHJpbmc7XG4gICAgICB2YWx1ZTogc3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlcjtcbiAgICAgIHR5cGU6IFR5cGVPZjtcbiAgICB9W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiB2YWx1ZSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwga2V5KSAmJiB2YWx1ZVtrZXldICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgdmFsID0geyBrZXksIHZhbHVlOiB2YWx1ZVtrZXldLCB0eXBlOiB0eXBlb2YgdmFsdWVba2V5XSB9O1xuICAgICAgICBpZiAodmFsLnR5cGUgPT0gJ2Z1bmN0aW9uJyB8fCB2YWwudHlwZSA9PSAnb2JqZWN0JykgY29udGludWU7XG4gICAgICAgIGlmICh2YWwudHlwZSA9PSAnc3RyaW5nJykgdmFsLnZhbHVlID0gKHZhbC52YWx1ZSBhcyBzdHJpbmcpPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB2YWx1ZU1hcC5wdXNoKHZhbCk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vI2VuZHJlZ2lvblxuXG4gICAgY29uc3QgcmVzID0gYXJyLmZpbHRlcigoeCkgPT4ge1xuICAgICAgY29uc3QgZm9ybUdvcnVwVmFsdWUgPSB4O1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgdmFsdWVNYXApIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChrZXkudHlwZSA9PSAnc3RyaW5nJyAmJiAoZm9ybUdvcnVwVmFsdWVba2V5LmtleV0gYXMgc3RyaW5nKT8udG9Mb3dlckNhc2UoKT8uaW5jbHVkZXMoa2V5LnZhbHVlIGFzIHN0cmluZykpIHx8XG4gICAgICAgICAgZm9ybUdvcnVwVmFsdWVba2V5LmtleV0gPT0ga2V5LnZhbHVlXG4gICAgICAgIClcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbiAgICAvLyBjb25zb2xlLmxvZyhyZXMpXG4gICAgcmV0dXJuIHJlcztcbiAgICAvLyB9KTtcbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdmaWx0ZXJGb3JtQXJyYXlHcm91cCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEZpbHRlckZvcm1BcnJheUdyb3VwUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGFyciBBcnJheSBvZiBGb3JtR3JvdXBzIHRvIGZpbHRlclxuICAgKiBAcGFyYW0gcXVlcnlPYmplY3QgRmlsdGVyIHZhbHVlXG4gICAqIEBwYXJhbSBmaWx0ZXJGdW5jdGlvbiBGaWx0ZXIgZnVuY3Rpb24gdG8gcGFzcyBpbiBpdGVyYXRvclxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgdHJhbnNmb3JtPFRHcm91cCBleHRlbmRzIEZvcm1Hcm91cD4oXG4gICAgYXJyOiBUR3JvdXBbXSxcbiAgICBxdWVyeU9iamVjdDogeyBbeDogc3RyaW5nXTogc3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlciB9LFxuICAgIGZpbHRlckZ1bmN0aW9uPzogKHZhbHVlOiBUR3JvdXAsIGluZGV4PzogbnVtYmVyLCBhcnJheT86IFRHcm91cFtdKSA9PiBib29sZWFuLFxuICApIHtcbiAgICAvLyByZXR1cm4gdGhpcy51Uy50aW1lQ29kZUJsb2NrKCdpbmxpbmUgY29tcGFyaXNvbicsICgpID0+IHtcbiAgICBpZiAocXVlcnlPYmplY3QgPT0gbnVsbCB8fCAhT2JqZWN0LnZhbHVlcyhxdWVyeU9iamVjdCkuZmlsdGVyKCh4KSA9PiB4KS5sZW5ndGggfHwgIWFyciB8fCAhYXJyLmxlbmd0aClcbiAgICAgIHJldHVybiBhcnI7XG4gICAgLy8gZGVidWdnZXI7XG4gICAgaWYgKGZpbHRlckZ1bmN0aW9uKSByZXR1cm4gYXJyLmZpbHRlcihmaWx0ZXJGdW5jdGlvbik7XG5cbiAgICBjb25zdCB2YWx1ZU1hcDoge1xuICAgICAga2V5OiBzdHJpbmc7XG4gICAgICB2YWx1ZTogc3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlcjtcbiAgICAgIHR5cGU6IFR5cGVPZjtcbiAgICB9W10gPSB0aGlzLnF1ZXJ5TWFwcGVyKHF1ZXJ5T2JqZWN0KTtcblxuICAgIGNvbnN0IHJlcyA9IGFyci5maWx0ZXIodGhpcy5maWx0ZXJGdW5jKHZhbHVlTWFwKSk7XG4gICAgLy8gY29uc29sZS5sb2cocmVzKVxuICAgIHJldHVybiByZXM7XG4gICAgLy8gfSk7XG4gIH1cbiAgcXVlcnlNYXBwZXIgPSAocXVlcnk6IElPYmplY3RMaXRlcmFsKSA9PiB7XG4gICAgaWYgKHF1ZXJ5ID09IG51bGwgfHwgIU9iamVjdC52YWx1ZXMocXVlcnkpLmZpbHRlcigoeCkgPT4geCkubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBxdWVyeU9iamVjdDoge1xuICAgICAga2V5OiBzdHJpbmc7XG4gICAgICB2YWx1ZTogc3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlcjtcbiAgICAgIHR5cGU6IFR5cGVPZjtcbiAgICB9W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBxdWVyeSlcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocXVlcnksIGtleSkgJiYgcXVlcnlba2V5XSAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHZhbCA9IHsga2V5LCB2YWx1ZTogcXVlcnlba2V5XSwgdHlwZTogdHlwZW9mIHF1ZXJ5W2tleV0gfTtcbiAgICAgICAgaWYgKHZhbC50eXBlID09ICdmdW5jdGlvbicgfHwgdmFsLnR5cGUgPT0gJ29iamVjdCcpIGNvbnRpbnVlO1xuICAgICAgICBpZiAodmFsLnR5cGUgPT0gJ3N0cmluZycpIHZhbC52YWx1ZSA9ICh2YWwudmFsdWUgYXMgc3RyaW5nKT8udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgcXVlcnlPYmplY3QucHVzaCh2YWwpO1xuICAgICAgfVxuICAgIHJldHVybiBxdWVyeU9iamVjdDtcbiAgfTtcblxuICBmaWx0ZXJGdW5jID1cbiAgICAoXG4gICAgICBxdWVyeU9iamVjdDoge1xuICAgICAgICBrZXk6IHN0cmluZztcbiAgICAgICAgdmFsdWU6IHN0cmluZyB8IGJvb2xlYW4gfCBudW1iZXI7XG4gICAgICAgIHR5cGU6IFR5cGVPZjtcbiAgICAgIH1bXSxcbiAgICApID0+XG4gICAgPFRHcm91cCBleHRlbmRzIEZvcm1Hcm91cD4oZ3JvdXA6IFRHcm91cCk6IGJvb2xlYW4gPT4ge1xuICAgICAgY29uc3QgZm9ybUdvcnVwVmFsdWUgPSBncm91cC5nZXRSYXdWYWx1ZSgpO1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgcXVlcnlPYmplY3QgfHwgW10pIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChrZXkudHlwZSA9PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgKGZvcm1Hb3J1cFZhbHVlW2tleS5rZXldIGFzIHN0cmluZyk/LnRvTG93ZXJDYXNlKCk/LmluY2x1ZGVzKGtleS52YWx1ZSBhcyBzdHJpbmcpKSB8fFxuICAgICAgICAgIGZvcm1Hb3J1cFZhbHVlW2tleS5rZXldID09IGtleS52YWx1ZVxuICAgICAgICApXG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbn1cblxuQFBpcGUoe1xuICBuYW1lOiAnZmlsdGVyRm9ybUFycmF5Q29udHJvbCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEZpbHRlckZvcm1BcnJheUNvbnRyb2xQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gYXJyIEFycmF5IG9mIEZvcm1Hcm91cHMgdG8gZmlsdGVyXG4gICAqIEBwYXJhbSB2YWx1ZSBGaWx0ZXIgdmFsdWVcbiAgICogQHJldHVybnNcbiAgICovXG4gIHRyYW5zZm9ybTxUQ29udHJvbCBleHRlbmRzIEFic3RyYWN0Q29udHJvbDxhbnk+ID0gYW55PihhcnI6IFRDb250cm9sW10sIHZhbHVlOiBzdHJpbmcgfCBib29sZWFuIHwgbnVtYmVyKSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwgfHwgIWFyciB8fCAhYXJyLmxlbmd0aCkgcmV0dXJuIGFycjtcbiAgICAvLyBkZWJ1Z2dlcjtcbiAgICByZXR1cm4gYXJyLmZpbHRlcigoeCkgPT4geC52YWx1ZSA9PSB2YWx1ZSk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdVM6IFV0aWxpdHlTZXJ2aWNlKSB7fVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdzb3J0JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgU29ydFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBhcnJcbiAgICogQHBhcmFtIGRpcmVjdGlvbiAwIC0gYXNjZW5kaW5nIG9yZGVyLiAxIC0gZGVzY2VuZGluZyBvcmRlclxuICAgKiBAcGFyYW0gc29ydEZpZWxkXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICB0cmFuc2Zvcm08VD4oYXJyOiBUW10sIGRpcmVjdGlvbjogMCB8IDEgPSAwLCBzb3J0RmllbGQ/OiBrZXlvZiBUKSB7XG4gICAgLy8gICAgY29uc29sZS5sb2coJ1NPUlRURVInLCBhcnIsIGRpcmVjdGlvbiwgc29ydEZpZWxkKTtcbiAgICAvLyBkZWJ1Z2dlcjtcbiAgICBpZiAoIWFycikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChkaXJlY3Rpb24gPiAtMSAmJiBkaXJlY3Rpb24gPCAyKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb3J0KGFyciwgZGlyZWN0aW9uLCBzb3J0RmllbGQgYXMgYW55KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGFycjtcbiAgICB9XG4gIH1cbiAgc29ydDxUPihhcnI6IFRbXSwgZGlyZWN0aW9uOiAwIHwgMSwgc29ydEZpZWxkPzogc3RyaW5nKSB7XG4gICAgaWYgKHNvcnRGaWVsZCkge1xuICAgICAgcmV0dXJuIGFyci5zb3J0Myhzb3J0RmllbGQgYXMgYW55LCBkaXJlY3Rpb24gPyB0cnVlIDogZmFsc2UpIGFzIFRbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGFyci5zb3J0KCh4OiBhbnksIHk6IGFueSkgPT4gKGRpcmVjdGlvbiA/IHkgLSB4IDogeCAtIHkpKTtcbiAgICB9XG4gIH1cbn1cblxuQFBpcGUoe1xuICBuYW1lOiAncmVmcmVzaGVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgUmVmcmVzaGVyUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAvKipcbiAgICogUmV0dXJucyBhIHZhbHVlIHdoZW4gdGhlIHJlZnJlc2hlciB2YWx1ZSBjaGFuZ2VzXG4gICAqIEBwYXJhbSB2YWx1ZSBWYWx1ZSB0byBiZSByZXR1cm5lZFxuICAgKiBAcGFyYW0gcmVmcmVzaGVyIFJlZnJlc2hlciB2YWx1ZSBmb3IgdXBkYXRpbmcgdGhlIHZhbHVlXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICB0cmFuc2Zvcm08VD4odmFsdWU6IFQsIHJlZnJlc2hlcj86IGFueSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuQFBpcGUoe1xuICBuYW1lOiAndG9BbnknLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBUb0FueVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtKHZhbHVlOiBhbnksIGlzQXJyYXkgPSBmYWxzZSkge1xuICAgIHJldHVybiBpc0FycmF5ID8gKHZhbHVlIGFzIGFueVtdKSA6IHZhbHVlO1xuICB9XG59XG5cbkBQaXBlKHtcbiAgbmFtZTogJ3RvQW55QXJyYXknLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBUb0FueUFycmF5UGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0odmFsdWU6IGFueSkge1xuICAgIHJldHVybiB2YWx1ZSBhcyBhbnlbXTtcbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICd0cmltJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgVHJpbVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgLyoqXG4gICAqIFRyaW1zIGEgc3RyaW5nXG4gICAqIEBwYXJhbSB2YWx1ZSBTdHJpbmcgdG8gdHJpbVxuICAgKiBAcmV0dXJucyBUcmltbWVkIHN0cmluZ1xuICAgKi9cbiAgdHJhbnNmb3JtKHZhbHVlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdmFsdWU/LnRyaW0oKTtcbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICd0cmltVGV4dCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFRyaW1UZXh0UGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAvKipcbiAgICogVHJpbXMgYSBzdHJpbmcgYmFzZWQgb24gYSBzcGVjaWZpZWQgbGVuZ3RoXG4gICAqIEBwYXJhbSB2YWx1ZSBTdHJpbmcgdG8gdHJpbVxuICAgKiBAcGFyYW0gbGVuZ3RoIExlbmd0aCB0byBiZWdpbiB0cmltbWluZ1xuICAgKiBAcmV0dXJucyBUcmltbWVkIHN0cmluZ1xuICAgKi9cbiAgdHJhbnNmb3JtKHZhbHVlOiBzdHJpbmcsIGxlbmd0aDogbnVtYmVyKSB7XG4gICAgcmV0dXJuICF2YWx1ZSB8fCBsZW5ndGggPT0gbnVsbCB8fCB2YWx1ZS5sZW5ndGggPCBsZW5ndGggPyB2YWx1ZSA6IHZhbHVlLnN1YnN0cmluZygwLCBsZW5ndGgpICsgJy4uLic7XG4gIH1cbn1cblxuQFBpcGUoe1xuICBuYW1lOiAneE9yWScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFhPcllQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybSh4OiBzdHJpbmcsIHkgPSAnLScpIHtcbiAgICByZXR1cm4gdGhpcy51Uy54T3JZKHgsIHkpO1xuICB9XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdVM6IFV0aWxpdHlTZXJ2aWNlKSB7fVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdyZXBsYWNlQWxsJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgUmVwbGFjZUFsbFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtKHRleHQ6IHN0cmluZywgc2VhcmNoOiBzdHJpbmcsIHJlcGxhY2VtZW50OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGV4dCA/IHRleHQuc3BsaXQoc2VhcmNoKS5qb2luKHJlcGxhY2VtZW50KSA6IHRleHQ7XG4gIH1cbn1cblxuQFBpcGUoe1xuICBuYW1lOiAndmFsdWVPclgnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBWYWx1ZU9yWFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSBWYXJpYWJsZSB0aGF0IGhvbGRzIHRoZSB2YWx1ZSB0byBiZSBjaGVja2VkIGZvciBlbXB0aW5lc3NcbiAgICogQHBhcmFtIHJlcGxhY2VtZW50IFRoaXMgaXMgdGhlIHZhbHVlIHRoYXQgd2lsbCBiZSBzZXQgaWYgdGhlIHN1YmplY3QgZmllbGQgaXMgZW1wdHlcbiAgICogQHJldHVybnMgUmV0dXJuIHRoZSB2YWx1ZSBvciB0aGUgcmVwbGFjZW1lbnQgdmFsdWUgaWYgdmFsdWUgaXMgZW1wdHlcbiAgICovXG4gIHRyYW5zZm9ybTxUPih2YWx1ZTogVCwgcmVwbGFjZW1lbnQ6IHN0cmluZyA9ICctJykge1xuICAgIC8vIGNvbnNvbGUubG9nKHZhbHVlKVxuICAgIHJldHVybiB2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09IHVuZGVmaW5lZCA/IHJlcGxhY2VtZW50IDogdmFsdWU7XG4gIH1cbn1cblxuQFBpcGUoe1xuICBuYW1lOiAnc3RyQ29uY2F0ZW5hdG9yJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgU3RyQ29uY2F0ZW5hdG9yUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm08VD4odGV4dDE/OiBzdHJpbmcgfCBudWxsLCB0ZXh0Mj86IHN0cmluZyB8IG51bGwsIGpvaW5lcjogc3RyaW5nID0gJyAtICcpIHtcbiAgICByZXR1cm4gRVZGdW5jdGlvbnMuc3RyQ29uY2F0ZW5hdG9yMih0ZXh0MSwgdGV4dDIsIGpvaW5lcik7XG4gIH1cbn1cblxuQFBpcGUoe1xuICBuYW1lOiAnZm9ybVZhbHVlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybVZhbHVlUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0oZm9ybVZhbHVlLCBmb3JtU2NoZW1hPzogSUZvcm1TY2hlbWFbXSk6IHN0cmluZztcbiAgdHJhbnNmb3JtPFQ+KGZvcm1WYWx1ZTogVCwgZm9ybVNjaGVtYT86IChrZXlvZiBUKVtdKTogc3RyaW5nO1xuICB0cmFuc2Zvcm08VD4oZm9ybVZhbHVlOiBULCBmb3JtU2NoZW1hPzogKElGb3JtU2NoZW1hIHwga2V5b2YgVClbXSk6IHN0cmluZyB7XG4gICAgLy8gZGVidWdnZXI7XG4gICAgcmV0dXJuIGZvcm1WYWx1ZVxuICAgICAgPyAoZm9ybVNjaGVtYT8ubGVuZ3RoICYmIHR5cGVvZiBmb3JtU2NoZW1hWzBdICE9ICdzdHJpbmcnXG4gICAgICAgICAgPyBmb3JtU2NoZW1hLm1hcCgoZmllbGQ6IElGb3JtU2NoZW1hKSA9PiB7XG4gICAgICAgICAgICAgIC8vIGRlYnVnZ2VyO1xuICAgICAgICAgICAgICBjb25zdCB2YWwgPVxuICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPT0gJ3NlbGVjdCcgfHwgZmllbGQudHlwZSA9PSAnYXV0b2NvbXBsZXRlJyA/IGZpZWxkLnNlbGVjdGVkT3B0aW9uTGFiZWwgfHwgZm9ybVZhbHVlW2ZpZWxkLmZpZWxkXSA6IGZvcm1WYWx1ZVtmaWVsZC5maWVsZF07XG4gICAgICAgICAgICAgIHJldHVybiB2YWwgIT0gbnVsbCA/IGAke2ZpZWxkLmxhYmVsfTogJHt2YWx9YCA6IG51bGw7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogKGZvcm1TY2hlbWEgfHwgT2JqZWN0LmtleXMoZm9ybVZhbHVlKSkubWFwKCh4KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbCA9IGZvcm1WYWx1ZVt4XTtcbiAgICAgICAgICAgICAgcmV0dXJuIGAke3RoaXMudVMuZm9ybWF0RmllbGQoeCl9OiAke3ZhbCAhPSBudWxsID8gdmFsIDogJy0nfWA7XG4gICAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgICAgLmZpbHRlcigoeCkgPT4geClcbiAgICAgICAgICAuam9pbignXFxuJylcbiAgICAgIDogJyc7XG4gIH1cbiAgY29uc3RydWN0b3IocHVibGljIHVTOiBVdGlsaXR5U2VydmljZSkge31cbn1cbkBQaXBlKHtcbiAgbmFtZTogJ2ZpZWxkVG9MYWJlbCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEZpZWxkVG9MYWJlbFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtKGZpZWxkTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBkZWJ1Z2dlcjtcbiAgICByZXR1cm4gdGhpcy51Uy5mb3JtYXRGaWVsZChmaWVsZE5hbWUpO1xuICB9XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB1UzogVXRpbGl0eVNlcnZpY2UpIHt9XG59XG5cbkBQaXBlKHsgbmFtZTogJ3R5cGVyJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIFR5cGVyUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm08VD4odmFsdWU6IGFueSwgc2FtcGxlOiBUKSB7XG4gICAgcmV0dXJuIHZhbHVlIGFzIFQ7XG4gIH1cbn1cblxuQFBpcGUoe1xuICBuYW1lOiAnZmlsdGVyQXJyYXlCeVN0cmluZycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEZpbHRlckFycmF5QnlTdHJpbmdQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIC8qKlxuICAgKiBGaWx0ZXIgYXJyYXkgdXNpbmcgYSBwaXBlXG4gICAqIEBwYXJhbSBhcnIgQXJyYXkgdG8gZmlsdGVyXG4gICAqIEBwYXJhbSB2YWx1ZSBWYWx1ZSB0byBmaWx0ZXIgZm9yXG4gICAqIEBwYXJhbSBrZXlzIEZpZWxkcyB0byBjaGVjayBmb3IgbWF0Y2ggaW5cbiAgICogQHBhcmFtIGZpbHRlckZ1bmN0aW9uIEZpdGxlciBmdW5jdGlvbiB0byB1c2UgaW5zdGVhZCBvZiB2YWx1ZSBhbmQga2V5c1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgdHJhbnNmb3JtPFQ+KGFycjogVFtdLCB2YWx1ZTogc3RyaW5nLCBrZXlzOiAoa2V5b2YgVClbXSwgZmlsdGVyRnVuY3Rpb24/OiAodmFsdWU6IFQsIGluZGV4PzogbnVtYmVyLCBhcnJheT86IFRbXSkgPT4gYm9vbGVhbikge1xuICAgIGlmICghYXJyKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGlmICghdmFsdWUpIHJldHVybiBhcnI7XG4gICAgaWYgKGZpbHRlckZ1bmN0aW9uKSByZXR1cm4gYXJyLmZpbHRlcihmaWx0ZXJGdW5jdGlvbik7XG4gICAgZWxzZSB7XG4gICAgICAvLyBkZWJ1Z2dlcjtcbiAgICAgIGNvbnN0IHZsID0gdmFsdWU/LnRvU3RyaW5nKCk/LnRyaW0oKT8udG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IHJldDogVFtdID0gW107XG4gICAgICBjb25zdCBhZGRlZE1hcDogeyBbaWQ6IHN0cmluZ106IGJvb2xlYW4gfSA9IHt9O1xuICAgICAgY29uc3QgaWRGaWVsZCA9IGtleXNbMF0gYXMgc3RyaW5nO1xuICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXJyKSB7XG4gICAgICAgICAgaWYgKGFkZGVkTWFwW2l0ZW1baWRGaWVsZF1dKSBjb250aW51ZTtcbiAgICAgICAgICBpZiAoKDxzdHJpbmc+aXRlbVtrZXldKT8udG9TdHJpbmcoKT8udG9Mb3dlckNhc2UoKT8uc3RhcnRzV2l0aCh2bCkpIHtcbiAgICAgICAgICAgIHJldC5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgYWRkZWRNYXBbaXRlbVtpZEZpZWxkXV0gPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgYXJyKSB7XG4gICAgICAgICAgaWYgKGFkZGVkTWFwW2l0ZW1baWRGaWVsZF1dKSBjb250aW51ZTtcbiAgICAgICAgICBpZiAoKDxzdHJpbmc+aXRlbVtrZXldKT8udG9TdHJpbmcoKT8udG9Mb3dlckNhc2UoKT8uaW5jbHVkZXModmwpKSB7XG4gICAgICAgICAgICByZXQucHVzaChpdGVtKTtcbiAgICAgICAgICAgIGFkZGVkTWFwW2l0ZW1baWRGaWVsZF1dID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnNvbGUubG9nKCdmaWx0ZXIgcmVzdWx0JywgcmV0KTtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICB9XG59XG5cbkBQaXBlKHsgbmFtZTogJ3JlbW92ZVVzZWRPcHRpb25zJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIFJlbW92ZVVzZWRPcHRpb25zUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm08VE9wdGlvbiwgVEZvcm1BcnJheT4oXG4gICAgYXJyOiBUT3B0aW9uW10sXG4gICAgZm9ybUFycmF5OiBURm9ybUFycmF5W10sXG4gICAgZm9ybTogVEZvcm1BcnJheSxcbiAgICBhcnJGaWVsZE5hbWU/OiBrZXlvZiBUT3B0aW9uLFxuICAgIGZvcm1GaWVsZE5hbWU/OiBrZXlvZiBURm9ybUFycmF5LFxuICApOiBUT3B0aW9uW10ge1xuICAgIGlmICghYXJyPy5sZW5ndGggfHwgIWZvcm1BcnJheT8ubGVuZ3RoKSByZXR1cm4gW107XG4gICAgaWYgKGFyckZpZWxkTmFtZSAmJiBmb3JtRmllbGROYW1lKVxuICAgICAgcmV0dXJuIGFyci5maWx0ZXIoXG4gICAgICAgICh4KSA9PiAhZm9ybUFycmF5LnNvbWUoKGYpID0+IGZvcm1bZm9ybUZpZWxkTmFtZV0gIT0gKHhbYXJyRmllbGROYW1lXSBhcyBhbnkpICYmIGZbZm9ybUZpZWxkTmFtZV0gPT0gKHhbYXJyRmllbGROYW1lXSBhcyBhbnkpKSxcbiAgICAgICk7XG4gICAgZWxzZSBpZiAoYXJyRmllbGROYW1lICYmICFmb3JtRmllbGROYW1lKSByZXR1cm4gYXJyLmZpbHRlcigoeCkgPT4gIWZvcm1BcnJheS5zb21lKChmKSA9PiBmID09ICh4W2FyckZpZWxkTmFtZV0gYXMgYW55KSkpO1xuICAgIGVsc2UgaWYgKCFhcnJGaWVsZE5hbWUgJiYgZm9ybUZpZWxkTmFtZSkgcmV0dXJuIGFyci5maWx0ZXIoKHgpID0+ICFmb3JtQXJyYXkuc29tZSgoZikgPT4gZltmb3JtRmllbGROYW1lXSA9PSAoeCBhcyBhbnkpKSk7XG4gICAgZWxzZSByZXR1cm4gYXJyLmZpbHRlcigoeCkgPT4gZm9ybUFycmF5LnNvbWUoKGYpID0+IGYgPT0gKHggYXMgYW55KSkpO1xuICB9XG59XG5cbkBQaXBlKHsgbmFtZTogJ3JlbW92ZVVzZWRPcHRpb25zUmVhY3RpdmUnLCBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgUmVtb3ZlVXNlZE9wdGlvbnNSZWFjdGl2ZVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtPFRPcHRpb24sIFRGb3JtQXJyYXkgZXh0ZW5kcyB7IHZhbHVlPzogYW55IH1bXT4oXG4gICAgYXJyOiBUT3B0aW9uW10sXG4gICAgZm9ybUFycmF5OiBURm9ybUFycmF5W10sXG4gICAgZm9ybTogVEZvcm1BcnJheSxcbiAgICBhcnJGaWVsZE5hbWU/OiBrZXlvZiBUT3B0aW9uLFxuICAgIGZvcm1GaWVsZE5hbWU/OiBrZXlvZiBURm9ybUFycmF5LFxuICApOiBUT3B0aW9uW10ge1xuICAgIGlmICghYXJyPy5sZW5ndGggfHwgIWZvcm1BcnJheT8ubGVuZ3RoKSByZXR1cm4gW107XG4gICAgaWYgKGFyckZpZWxkTmFtZSAmJiBmb3JtRmllbGROYW1lKVxuICAgICAgcmV0dXJuIGFyci5maWx0ZXIoXG4gICAgICAgICh4KSA9PiAhZm9ybUFycmF5LnNvbWUoKGYpID0+IGZvcm1bZm9ybUZpZWxkTmFtZV0gIT0gKHhbYXJyRmllbGROYW1lXSBhcyBhbnkpICYmIGZbZm9ybUZpZWxkTmFtZV0gPT0gKHhbYXJyRmllbGROYW1lXSBhcyBhbnkpKSxcbiAgICAgICk7XG4gICAgZWxzZSBpZiAoYXJyRmllbGROYW1lICYmICFmb3JtRmllbGROYW1lKSByZXR1cm4gYXJyLmZpbHRlcigoeCkgPT4gIWZvcm1BcnJheS5zb21lKChmKSA9PiBmID09ICh4W2FyckZpZWxkTmFtZV0gYXMgYW55KSkpO1xuICAgIGVsc2UgaWYgKCFhcnJGaWVsZE5hbWUgJiYgZm9ybUZpZWxkTmFtZSkgcmV0dXJuIGFyci5maWx0ZXIoKHgpID0+ICFmb3JtQXJyYXkuc29tZSgoZikgPT4gZltmb3JtRmllbGROYW1lXSA9PSAoeCBhcyBhbnkpKSk7XG4gICAgZWxzZSByZXR1cm4gYXJyLmZpbHRlcigoeCkgPT4gZm9ybUFycmF5LnNvbWUoKGYpID0+IGYgPT0gKHggYXMgYW55KSkpO1xuICB9XG59XG5cbkBQaXBlKHsgbmFtZTogJ29iamVjdFRvQXJyYXknLCBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgT2JqZWN0VG9BcnJheVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtPFQ+KHZhbHVlOiB7IFt4OiBzdHJpbmddOiBUIH0pOiBUW10ge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHZhbHVlKTtcbiAgfVxufVxuXG5AUGlwZSh7IG5hbWU6ICdmb3JtU2NoZW1hVG9Db2xzJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIEZvcm1TY2hlbWFUb1RhYmxlQ29sdW1uc1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgdHJhbnNmb3JtKHZhbHVlOiBJRm9ybVNjaGVtYVtdKTogSVRhYmxlQ29sW10ge1xuICAgIHJldHVybiB2YWx1ZT8ubWFwKCh4KSA9PiAoeyBmOiB4LmZpZWxkLCB0OiB4LmxhYmVsIH0pKSB8fCBbXTtcbiAgfVxufVxuXG5AUGlwZSh7XG4gIG5hbWU6ICdyZXNwb25zaXZlVmFsJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgUmVzcG9uc2l2ZVZhbFBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgLy8gc3ViOlN1YnNjcmlwdGlvblxuICB0cmFuc2Zvcm08VD4oY29uZmlnOiB7XG4gICAgWFNtYWxsPzogVDtcbiAgICBTbWFsbD86IFQ7XG4gICAgTWVkaXVtPzogVDtcbiAgICBMYXJnZT86IFQ7XG4gICAgWExhcmdlPzogVDtcbiAgICBIYW5kc2V0PzogVDtcbiAgICBUYWJsZXQ/OiBUO1xuICAgIFdlYj86IFQ7XG4gICAgSGFuZHNldFBvcnRyYWl0PzogVDtcbiAgICBUYWJsZXRQb3J0cmFpdD86IFQ7XG4gICAgV2ViUG9ydHJhaXQ/OiBUO1xuICAgIEhhbmRzZXRMYW5kc2NhcGU/OiBUO1xuICAgIFRhYmxldExhbmRzY2FwZT86IFQ7XG4gICAgV2ViTGFuZHNjYXBlPzogVDtcbiAgfSk6IFQge1xuICAgIC8vIGRlYnVnZ2VyO1xuICAgIGZvciAoY29uc3Qga2V5IGluIGNvbmZpZykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsIGtleSkpIHtcbiAgICAgICAgaWYgKHRoaXMucmVzcG9uc2l2ZS5pc01hdGNoZWQoQnJlYWtwb2ludHNba2V5XSkpIHJldHVybiBjb25maWdba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoY29uZmlnKVswXTtcbiAgICAvLyAgdGhpcy5zdWI9IHRoaXMucmVzcG9uc2l2ZS5vYnNlcnZlKHI9PntcblxuICAgIC8vICB9KVxuICB9XG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIC8vIHRoaXMuc3ViLlxuICB9XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZXNwb25zaXZlOiBCcmVha3BvaW50T2JzZXJ2ZXIpIHt9XG59XG5cbmNvbnN0IGNvbXBzID0gW1xuICBBcnJheVNwbGl0dGVyLFxuICBDdXN0b21EYXRlUGlwZSxcbiAgRmllbGRUb0xhYmVsUGlwZSxcbiAgRmlsdGVyQXJyYXlCeVN0cmluZ1BpcGUsXG4gIEZpbHRlckFycmF5UGlwZSxcbiAgRmlsdGVyRm9ybUFycmF5R3JvdXBQaXBlLFxuICBGb3JtSW52YWxpZENsYXNzUGlwZSxcbiAgRm9ybVNjaGVtYVRvVGFibGVDb2x1bW5zUGlwZSxcbiAgRm9ybVZhbHVlUGlwZSxcbiAgRnVuY3Rpb25DYWxsZXIsXG4gIEZ1bmN0aW9uQ2FsbGVyMSxcbiAgRnVuY3Rpb25DYWxsZXIyLFxuICBGdW5jdGlvbkNhbGxlcjMsXG4gIEdlbmRlclBpcGUsXG4gIEdldFZhbHVlTGFiZWwsXG4gIEhhc0Zvcm1WYWx1ZVBpcGUsXG4gIEhhc1ZhbHVlUGlwZSxcbiAgQ29kZVRpdGxlRGVzY1BpcGUsXG4gIEh0dHBMaXN0Q2FsbGVyLFxuICBIdHRwTGlzdENhbGxlcjEsXG4gIEh0dHBMaXN0Q2FsbGVyMixcbiAgSXNDbG9uZVBhZ2UsXG4gIElzU2hvd1BhZ2UsXG4gIE9iamVjdFRvQXJyYXlQaXBlLFxuICBSZWZyZXNoZXJQaXBlLFxuICBSZW1vdmVVc2VkT3B0aW9uc1BpcGUsXG4gIFJlcGxhY2VBbGxQaXBlLFxuICBSZXNwb25zaXZlVmFsUGlwZSxcbiAgUm91bmRQaXBlLFxuICBTZWNvbmRzVG9UaW1lUGlwZSxcbiAgU29ydFBpcGUsXG4gIFN0ckNvbmNhdGVuYXRvclBpcGUsXG4gIFRvQW55QXJyYXlQaXBlLFxuICBUb0FueVBpcGUsXG4gIFNES1RyYW5zbGF0ZVBpcGUsXG4gIFRyaW1QaXBlLFxuICBUcmltVGV4dFBpcGUsXG4gIFZhbHVlRm9ybWF0dGVyUGlwZSxcbiAgVmFsdWVPclhQaXBlLFxuICBYT3JZUGlwZSxcbl07XG5jb25zdCBtb2R1bGVzID0gW107XG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCAuLi5tb2R1bGVzLCAuLi5jb21wc10sXG4gIGV4cG9ydHM6IFsuLi5jb21wcywgLi4ubW9kdWxlc10sXG4gIHByb3ZpZGVyczogW10sXG59KVxuZXhwb3J0IGNsYXNzIFV0aWxpdHlQaXBlc01vZHVsZSB7fVxuIl19
|