ets-fe-ng-sdk 17.0.366 → 17.0.367

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.
Files changed (178) hide show
  1. package/esm2022/lib/Reusables/reusable-comps/find-item/find-item.component.mjs +21 -12
  2. package/esm2022/lib/Reusables/reusable-comps/find-item/find-item.module.mjs +4 -4
  3. package/esm2022/lib/Reusables/reusable-comps/watermark/watermark.component.mjs +3 -3
  4. package/esm2022/lib/Reusables/reusable-pages/extra-pages/extra-pages-routing.module.mjs +4 -4
  5. package/esm2022/lib/Reusables/reusable-pages/extra-pages/extra-pages.module.mjs +4 -4
  6. package/esm2022/lib/Reusables/reusable-pages/logger/logger-routing.module.mjs +4 -4
  7. package/esm2022/lib/Reusables/reusable-pages/logger/logger.component.mjs +3 -3
  8. package/esm2022/lib/Reusables/reusable-pages/logger/logger.module.mjs +4 -4
  9. package/esm2022/lib/Reusables/reusable-pages/logger/logger.service.mjs +3 -3
  10. package/esm2022/lib/Reusables/reusable-pages/page-not-found/page-not-found.component.mjs +3 -3
  11. package/esm2022/lib/Reusables/reusable-pages/reset/reset-routing.module.mjs +4 -4
  12. package/esm2022/lib/Reusables/reusable-pages/reset/reset.component.mjs +3 -3
  13. package/esm2022/lib/Reusables/reusable-pages/reset/reset.module.mjs +4 -4
  14. package/esm2022/lib/Reusables/reusable-pages/robot/robot-routing.module.mjs +4 -4
  15. package/esm2022/lib/Reusables/reusable-pages/robot/robot.component.mjs +3 -3
  16. package/esm2022/lib/Reusables/reusable-pages/robot/robot.module.mjs +4 -4
  17. package/esm2022/lib/Reusables/reusable-pages/timeout-tester/timeout-tester-routing.module.mjs +4 -4
  18. package/esm2022/lib/Reusables/reusable-pages/timeout-tester/timeout-tester.component.mjs +3 -3
  19. package/esm2022/lib/Reusables/reusable-pages/timeout-tester/timeout-tester.module.mjs +4 -4
  20. package/esm2022/lib/Reusables/reusable-pages/user-activity/ua-extras/user-activity.service.mjs +3 -3
  21. package/esm2022/lib/Reusables/reusable-pages/version/version-routing.module.mjs +4 -4
  22. package/esm2022/lib/Reusables/reusable-pages/version/version.component.mjs +3 -3
  23. package/esm2022/lib/Reusables/reusable-pages/version/version.module.mjs +4 -4
  24. package/esm2022/lib/Reusables/reusable-pages/version/version.service.mjs +3 -3
  25. package/esm2022/lib/Services/Interceptors/authentication-interceptor.service.mjs +3 -3
  26. package/esm2022/lib/Services/Interceptors/global-error-handler.service.mjs +3 -3
  27. package/esm2022/lib/Services/Interceptors/logger-interceptor.service.mjs +3 -3
  28. package/esm2022/lib/Services/Interceptors/request-loader-interceptor.service.mjs +3 -3
  29. package/esm2022/lib/Services/Interceptors/request-timeout.service.mjs +3 -3
  30. package/esm2022/lib/Services/api.service.mjs +3 -3
  31. package/esm2022/lib/Services/app.service.mjs +3 -3
  32. package/esm2022/lib/Services/base.effect.mjs +3 -3
  33. package/esm2022/lib/Services/base.service.mjs +3 -3
  34. package/esm2022/lib/Services/cache/cache-updater.service.mjs +3 -3
  35. package/esm2022/lib/Services/cache/cache.service.mjs +3 -3
  36. package/esm2022/lib/Services/cache/local-cache.service.mjs +3 -3
  37. package/esm2022/lib/Services/cache/saver.service.mjs +3 -3
  38. package/esm2022/lib/Services/debouncer.service.mjs +3 -3
  39. package/esm2022/lib/Services/htmler.service.mjs +3 -3
  40. package/esm2022/lib/Services/input.service.mjs +3 -3
  41. package/esm2022/lib/Services/page-loader.service.mjs +6 -6
  42. package/esm2022/lib/Services/page.service.mjs +3 -3
  43. package/esm2022/lib/Services/route.service.mjs +3 -3
  44. package/esm2022/lib/Services/service-worker/check-for-update.service.mjs +3 -3
  45. package/esm2022/lib/Services/service-worker/handle-unrecoverable-state.service.mjs +3 -3
  46. package/esm2022/lib/Services/service-worker/log-update.service.mjs +3 -3
  47. package/esm2022/lib/Services/service-worker/prompt-update.service.mjs +3 -3
  48. package/esm2022/lib/Services/service-worker/service-worker.service.mjs +3 -3
  49. package/esm2022/lib/Services/storage.service.mjs +3 -3
  50. package/esm2022/lib/Services/theme.service.mjs +3 -3
  51. package/esm2022/lib/Services/translation.service.mjs +3 -3
  52. package/esm2022/lib/Services/utility.service.mjs +3 -3
  53. package/esm2022/lib/Services/window-security.service.mjs +3 -3
  54. package/esm2022/lib/Shared/components/add-item/add-item.component.mjs +3 -3
  55. package/esm2022/lib/Shared/components/autocomplete/autocomplete-td-rf/autocomplete-td-rf.component.mjs +3 -3
  56. package/esm2022/lib/Shared/components/autocomplete/autocomplete.component.mjs +3 -3
  57. package/esm2022/lib/Shared/components/autocomplete/autocomplete.service.mjs +3 -3
  58. package/esm2022/lib/Shared/components/btn/btn-lg/btn-lg.component.mjs +3 -3
  59. package/esm2022/lib/Shared/components/btn/btn-link/btn-link.component.mjs +3 -3
  60. package/esm2022/lib/Shared/components/btn/btn.component.mjs +3 -3
  61. package/esm2022/lib/Shared/components/btn/btn.service.mjs +3 -3
  62. package/esm2022/lib/Shared/components/btn/details-btn/details-btn.component.mjs +3 -3
  63. package/esm2022/lib/Shared/components/card/card.component.mjs +3 -3
  64. package/esm2022/lib/Shared/components/confirm-dialog/confirm-dialog.component.mjs +3 -3
  65. package/esm2022/lib/Shared/components/confirm-dialog/confirm-dialog.service.mjs +3 -3
  66. package/esm2022/lib/Shared/components/core/button/button.component.mjs +3 -3
  67. package/esm2022/lib/Shared/components/documents-name-display/documents-name-display.component.mjs +3 -3
  68. package/esm2022/lib/Shared/components/editable-text-case/editable-text-case.component.mjs +3 -3
  69. package/esm2022/lib/Shared/components/export-table/export-table.component.mjs +3 -3
  70. package/esm2022/lib/Shared/components/fields-to-display/fields-to-display.component.mjs +3 -3
  71. package/esm2022/lib/Shared/components/file-upload/file-upload.component.mjs +30 -24
  72. package/esm2022/lib/Shared/components/form-error/form-error.component.mjs +3 -3
  73. package/esm2022/lib/Shared/components/form-generator/form-generated-value/form-generated-value.component.mjs +6 -6
  74. package/esm2022/lib/Shared/components/form-generator/form-generator.base.component.mjs +1 -1
  75. package/esm2022/lib/Shared/components/form-generator/form-generator.component.mjs +5 -5
  76. package/esm2022/lib/Shared/components/form-generator/form-generator.service.mjs +3 -3
  77. package/esm2022/lib/Shared/components/form-link/form-link.component.mjs +3 -3
  78. package/esm2022/lib/Shared/components/form-tab-headers/form-tab-headers.component.mjs +3 -3
  79. package/esm2022/lib/Shared/components/index-comp-layout/index-comp-layout.component.mjs +6 -6
  80. package/esm2022/lib/Shared/components/info-dialog/info-dialog.component.mjs +3 -3
  81. package/esm2022/lib/Shared/components/info-dialog/info-dialog.service.mjs +3 -3
  82. package/esm2022/lib/Shared/components/info-icon/info-icon.component.mjs +3 -3
  83. package/esm2022/lib/Shared/components/input/date-input/date-input.component.mjs +4 -4
  84. package/esm2022/lib/Shared/components/input/day-hour-min-input/day-hour-min-input.component.mjs +3 -3
  85. package/esm2022/lib/Shared/components/input/input-base.component.mjs +3 -3
  86. package/esm2022/lib/Shared/components/input/input-basic.component.mjs +3 -3
  87. package/esm2022/lib/Shared/components/input/input-control.component.mjs +3 -3
  88. package/esm2022/lib/Shared/components/input/input-label/input-label.component.mjs +3 -3
  89. package/esm2022/lib/Shared/components/input/input-td-rf.component.mjs +3 -3
  90. package/esm2022/lib/Shared/components/input/input.component.mjs +3 -3
  91. package/esm2022/lib/Shared/components/input/input.service.mjs +3 -3
  92. package/esm2022/lib/Shared/components/input/inputs-pipes.pipe.mjs +25 -25
  93. package/esm2022/lib/Shared/components/input/validation-message/validation-message.component.mjs +6 -6
  94. package/esm2022/lib/Shared/components/input/validation-message/validation-message.service.mjs +3 -3
  95. package/esm2022/lib/Shared/components/input/year-month-td-rf/year-month-td-rf.component.mjs +3 -3
  96. package/esm2022/lib/Shared/components/input-NgModel/input-ngmodel.component.mjs +3 -3
  97. package/esm2022/lib/Shared/components/input-NgModel/validation-message-ngmodel/validation-message-ngmodel.component.mjs +3 -3
  98. package/esm2022/lib/Shared/components/input-table/input-table.component.mjs +3 -3
  99. package/esm2022/lib/Shared/components/input-table/input-table.service.mjs +3 -3
  100. package/esm2022/lib/Shared/components/label/label.component.mjs +3 -3
  101. package/esm2022/lib/Shared/components/loader/loader-animations/blinking-blocks/blinking-blocks.component.mjs +3 -3
  102. package/esm2022/lib/Shared/components/loader/loader-animations/bouncing-ball/bouncing-ball.component.mjs +3 -3
  103. package/esm2022/lib/Shared/components/loader/loader-animations/fading-bars/fading-bars.component.mjs +3 -3
  104. package/esm2022/lib/Shared/components/loader/loader-animations/fading-circles/fading-circles.component.mjs +3 -3
  105. package/esm2022/lib/Shared/components/loader/loader-animations/ring-ripples/ring-ripples.component.mjs +3 -3
  106. package/esm2022/lib/Shared/components/loader/loader.component.mjs +3 -3
  107. package/esm2022/lib/Shared/components/loader/spinner.component.mjs +3 -3
  108. package/esm2022/lib/Shared/components/modal/modal-body.directive.mjs +3 -3
  109. package/esm2022/lib/Shared/components/modal/modal-footer.directive.mjs +3 -3
  110. package/esm2022/lib/Shared/components/modal/modal.component.mjs +3 -3
  111. package/esm2022/lib/Shared/components/modal-form/modal-form.component.mjs +3 -3
  112. package/esm2022/lib/Shared/components/modal-header/modal-header.component.mjs +3 -3
  113. package/esm2022/lib/Shared/components/narration-history-comp/narration-history-comp.component.mjs +3 -3
  114. package/esm2022/lib/Shared/components/notifications/notifications.component.mjs +3 -3
  115. package/esm2022/lib/Shared/components/notifications/notifications.service.mjs +3 -3
  116. package/esm2022/lib/Shared/components/page-center-body/page-center-body.component.mjs +3 -3
  117. package/esm2022/lib/Shared/components/page-template/page-template.component.mjs +3 -3
  118. package/esm2022/lib/Shared/components/page-to-component/page-to-component.component.mjs +6 -6
  119. package/esm2022/lib/Shared/components/page-to-component/page-to-component.directive.mjs +3 -3
  120. package/esm2022/lib/Shared/components/page-to-component/page-to-component.service.mjs +3 -3
  121. package/esm2022/lib/Shared/components/paginator/paginator.component.mjs +3 -3
  122. package/esm2022/lib/Shared/components/phone-number/phone-number.component.mjs +3 -3
  123. package/esm2022/lib/Shared/components/phone-number/phone-number.service.mjs +3 -3
  124. package/esm2022/lib/Shared/components/rich-text-editor/rich-text-editor.component.mjs +3 -3
  125. package/esm2022/lib/Shared/components/rich-text-editor-rf/rich-text-editor-rf.component.mjs +3 -3
  126. package/esm2022/lib/Shared/components/row-actions/row-actions.component.mjs +3 -3
  127. package/esm2022/lib/Shared/components/svg-icon/svg-icon.component.mjs +3 -3
  128. package/esm2022/lib/Shared/components/svg-icon/svg-icon.service.mjs +3 -3
  129. package/esm2022/lib/Shared/components/table-https/table-https.component.mjs +4 -4
  130. package/esm2022/lib/Shared/components/table-input/table-input-row/table-input-row.component.mjs +3 -3
  131. package/esm2022/lib/Shared/components/table-input/table-input.component.mjs +3 -3
  132. package/esm2022/lib/Shared/components/table-plain/table-base.component.mjs +3 -3
  133. package/esm2022/lib/Shared/components/table-plain/table-plain.component.mjs +4 -4
  134. package/esm2022/lib/Shared/components/table-plain/table-plain.service.mjs +3 -3
  135. package/esm2022/lib/Shared/components/table-plain/table.pipe.mjs +19 -19
  136. package/esm2022/lib/Shared/components/text/text.component.mjs +3 -3
  137. package/esm2022/lib/Shared/components/text-area-modal/text-area-modal.component.mjs +3 -3
  138. package/esm2022/lib/Shared/components/text-area-modal/text-area-modal.service.mjs +3 -3
  139. package/esm2022/lib/Shared/components/text-case-1/text-case-1.component.mjs +3 -3
  140. package/esm2022/lib/Shared/components/text-case-2/text-case-2.component.mjs +3 -3
  141. package/esm2022/lib/Shared/components/text-case-2/text-case.service.mjs +3 -3
  142. package/esm2022/lib/Shared/components/text-case-input/text-case-input.component.mjs +3 -3
  143. package/esm2022/lib/Shared/components/toggle-input-form/toggle-input-form.component.mjs +3 -3
  144. package/esm2022/lib/Shared/components/translator-case/translator-case.component.mjs +3 -3
  145. package/esm2022/lib/Shared/components/vertical-nav/vertical-nav.component.mjs +3 -3
  146. package/esm2022/lib/Shared/components/view-form-buttons/view-form-buttons.component.mjs +3 -3
  147. package/esm2022/lib/Shared/components/webcam-media/webcam-media.component.mjs +3 -3
  148. package/esm2022/lib/Shared/directives/commafy-number.directive.mjs +3 -3
  149. package/esm2022/lib/Shared/directives/drag-drop-file-upload.directive.mjs +3 -3
  150. package/esm2022/lib/Shared/directives/form-invalid-class.directive.mjs +3 -3
  151. package/esm2022/lib/Shared/directives/index.directive.mjs +22 -22
  152. package/esm2022/lib/Shared/directives/input-formatter.directive.mjs +13 -13
  153. package/esm2022/lib/Shared/directives/integer-only.directive.mjs +3 -3
  154. package/esm2022/lib/Shared/directives/mHref.directive.mjs +3 -3
  155. package/esm2022/lib/Shared/directives/negative-number-only.directive.mjs +3 -3
  156. package/esm2022/lib/Shared/directives/responsiveness.directive.mjs +19 -19
  157. package/esm2022/lib/Shared/directives/translator.directive.mjs +3 -3
  158. package/esm2022/lib/Shared/pipes/form-invalid-class.pipe.mjs +3 -3
  159. package/esm2022/lib/Shared/pipes/paginator.pipe.mjs +3 -3
  160. package/esm2022/lib/Shared/pipes/translate.pipe.mjs +7 -7
  161. package/esm2022/lib/Shared/pipes/utility.pipe.mjs +133 -133
  162. package/esm2022/lib/Shared/shared.module.mjs +4 -4
  163. package/esm2022/lib/authentication/web-user/web-user-authentication.service.mjs +3 -3
  164. package/esm2022/lib/authentication/web-user/web-user-forgot-password.component.mjs +3 -3
  165. package/esm2022/lib/authentication/web-user/web-user-login.component.mjs +3 -3
  166. package/esm2022/lib/authentication/web-user/web-user-reset-password.component.mjs +3 -3
  167. package/fesm2022/ets-fe-ng-sdk.mjs +780 -765
  168. package/fesm2022/ets-fe-ng-sdk.mjs.map +1 -1
  169. package/lib/Reusables/reusable-comps/find-item/find-item.component.d.ts +1 -1
  170. package/lib/Services/utility.service.d.ts +1 -1
  171. package/lib/Shared/components/btn/btn.component.d.ts +3 -3
  172. package/lib/Shared/components/file-upload/file-upload.component.d.ts +6 -6
  173. package/lib/Shared/components/form-generator/form-generated-value/form-generated-value.component.d.ts +2 -1
  174. package/lib/Shared/components/form-generator/form-generator.base.component.d.ts +1 -0
  175. package/lib/Shared/components/index-comp-layout/index-comp-layout.component.d.ts +1 -1
  176. package/lib/Shared/components/page-template/page-template.component.d.ts +1 -1
  177. package/lib/Shared/components/table-https/table-https.component.d.ts +3 -3
  178. package/package.json +1 -1
@@ -1,8 +1,8 @@
1
- import { Component, Input, Output, EventEmitter, ViewChild, signal, computed, input, inject, viewChild } from '@angular/core';
2
- import { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';
3
- import { Subject, debounce, debounceTime, filter, lastValueFrom, map, tap, timer } from 'rxjs';
1
+ import { Component, Input, Output, EventEmitter, ViewChild, signal, computed, input, inject, viewChild, } from '@angular/core';
2
+ import { FormControl, FormGroup, FormsModule, ReactiveFormsModule, } from '@angular/forms';
3
+ import { Subject, debounce, debounceTime, filter, lastValueFrom, map, tap, timer, } from 'rxjs';
4
4
  import { UserActivityService } from '../../../Reusables/reusable-pages/user-activity/ua-extras/user-activity.service';
5
- import { TableHttpsComponent } from '../../../Shared/components/table-https/table-https.component';
5
+ import { TableHttpsComponent, } from '../../../Shared/components/table-https/table-https.component';
6
6
  import { EUA } from '../../reusable-pages/user-activity/ua-extras/user-activity.model';
7
7
  import { FunctionCaller2, ToAnyPipe } from '../../../Shared/pipes/utility.pipe';
8
8
  import { TablePlainComponent } from '../../../Shared/components/table-plain/table-plain.component';
@@ -16,7 +16,7 @@ import { LoaderComponent } from '../../../Shared/components/loader/loader.compon
16
16
  import { cloneDeep, isEqual } from 'lodash-es';
17
17
  import { Config } from '../../../configs/index.config';
18
18
  import { ActivatedRoute, Router, RouterLink } from '@angular/router';
19
- import { BaseFormGenerator } from '../../../Shared/components/form-generator/form-generator.base.component';
19
+ import { BaseFormGenerator, } from '../../../Shared/components/form-generator/form-generator.base.component';
20
20
  import { toSignal } from '@angular/core/rxjs-interop';
21
21
  import * as i0 from "@angular/core";
22
22
  import * as i1 from "@angular/forms";
@@ -89,7 +89,9 @@ export class FindItemComponent extends BaseFormGenerator {
89
89
  this.searchTrigger = new Subject();
90
90
  this.computedFormSchema = computed(() => {
91
91
  const formSchema = this.formSchema() || [], standaloneForm = this.standaloneForm(), searchForm = this.searchForm();
92
- return formSchema.filter(x => !x.hidden).map((scheme) => {
92
+ return formSchema
93
+ .filter((x) => !x.hidden)
94
+ .map((scheme) => {
93
95
  scheme.form = scheme.standalone ? standaloneForm : searchForm;
94
96
  return scheme;
95
97
  });
@@ -100,7 +102,10 @@ export class FindItemComponent extends BaseFormGenerator {
100
102
  this.subs2 = this.utilityService.createSubscriptionManager();
101
103
  this.searchFormValue = toSignal(this.searchForm().valueChanges.pipe(map(() => this.utilityService.deleteNull(this.searchForm()?.getRawValue()))));
102
104
  this.standaloneFormValue = toSignal(this.standaloneForm().valueChanges);
103
- this.allSearchFormValue = computed(() => ({ ...this.searchFormValue(), ...this.standaloneFormValue() }));
105
+ this.allSearchFormValue = computed(() => ({
106
+ ...this.searchFormValue(),
107
+ ...this.standaloneFormValue(),
108
+ }));
104
109
  this.trackByRowID = (index, item) => {
105
110
  return item?.value?.__rowID;
106
111
  };
@@ -117,7 +122,11 @@ export class FindItemComponent extends BaseFormGenerator {
117
122
  // this.fetchSavedQuery()
118
123
  let searchDebounceTime = 500, searchCount = 0;
119
124
  this.subs2.push(this.searchTrigger
120
- .pipe(debounce(() => timer(searchDebounceTime)), tap((r) => this._search()), filter(() => searchDebounceTime != 0), tap(() => {
125
+ .pipe(
126
+ // tap(() => {
127
+ // debugger;
128
+ // }),
129
+ debounce(() => timer(searchDebounceTime)), tap((r) => this._search()), filter(() => searchDebounceTime != 0), tap(() => {
121
130
  if (++searchCount == 1)
122
131
  searchDebounceTime = 0;
123
132
  }))
@@ -307,10 +316,10 @@ export class FindItemComponent extends BaseFormGenerator {
307
316
  setSelection() {
308
317
  this.selectionSignal.set(this.tableHTTPSREF?.selectedItemsSignal() || this.tablePlainRef?.selectedItemsSignal());
309
318
  }
310
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: FindItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
311
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.3", type: FindItemComponent, isStandalone: true, selector: "app-find-item,find-item", inputs: { autoFormatSchema: { classPropertyName: "autoFormatSchema", publicName: "autoFormatSchema", isSignal: true, isRequired: false, transformFunction: null }, autoOrder: { classPropertyName: "autoOrder", publicName: "autoOrder", isSignal: true, isRequired: false, transformFunction: null }, centerCells: { classPropertyName: "centerCells", publicName: "centerCells", isSignal: true, isRequired: false, transformFunction: null }, displayedColumns: { classPropertyName: "displayedColumns", publicName: "displayedColumns", isSignal: true, isRequired: false, transformFunction: null }, gridClass: { classPropertyName: "gridClass", publicName: "gridClass", isSignal: true, isRequired: false, transformFunction: null }, hideForm: { classPropertyName: "hideForm", publicName: "hideForm", isSignal: true, isRequired: false, transformFunction: null }, expandedRowTemplate: { classPropertyName: "expandedRowTemplate", publicName: "expandedRowTemplate", isSignal: true, isRequired: false, transformFunction: null }, isTablePaginated: { classPropertyName: "isTablePaginated", publicName: "isTablePaginated", isSignal: true, isRequired: false, transformFunction: null }, isExpandable: { classPropertyName: "isExpandable", publicName: "isExpandable", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, nowrap: { classPropertyName: "nowrap", publicName: "nowrap", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "rowOptions", isSignal: true, isRequired: false, transformFunction: null }, orderDirection: { classPropertyName: "orderDirection", publicName: "orderDirection", isSignal: true, isRequired: false, transformFunction: null }, orderField: { classPropertyName: "orderField", publicName: "orderField", isSignal: true, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, searchFunction: { classPropertyName: "searchFunction", publicName: "searchFunction", isSignal: true, isRequired: false, transformFunction: null }, showData: { classPropertyName: "showData", publicName: "showData", isSignal: true, isRequired: false, transformFunction: null }, searchIfNoQuery: { classPropertyName: "searchIfNoQuery", publicName: "searchIfNoQuery", isSignal: true, isRequired: false, transformFunction: null }, showExport: { classPropertyName: "showExport", publicName: "showExport", isSignal: true, isRequired: false, transformFunction: null }, showFilter: { classPropertyName: "showFilter", publicName: "showFilter", isSignal: true, isRequired: false, transformFunction: null }, showRefreshBtn: { classPropertyName: "showRefreshBtn", publicName: "showRefreshBtn", isSignal: true, isRequired: false, transformFunction: null }, startSectionTemplate: { classPropertyName: "startSectionTemplate", publicName: "startSectionTemplate", isSignal: true, isRequired: false, transformFunction: null }, showSearchBtn: { classPropertyName: "showSearchBtn", publicName: "showSearchBtn", isSignal: true, isRequired: false, transformFunction: null }, showClearBtn: { classPropertyName: "showClearBtn", publicName: "showClearBtn", isSignal: true, isRequired: false, transformFunction: null }, showValidationMsg: { classPropertyName: "showValidationMsg", publicName: "showValidationMsg", isSignal: true, isRequired: false, transformFunction: null }, createBtnRoute: { classPropertyName: "createBtnRoute", publicName: "createBtnRoute", isSignal: true, isRequired: false, transformFunction: null }, showAdditionalColumns: { classPropertyName: "showAdditionalColumns", publicName: "showAdditionalColumns", isSignal: true, isRequired: false, transformFunction: null }, smallerFonts: { classPropertyName: "smallerFonts", publicName: "smallerFonts", isSignal: true, isRequired: false, transformFunction: null }, useSelection: { classPropertyName: "useSelection", publicName: "useSelection", isSignal: true, isRequired: false, transformFunction: null }, createButton: { classPropertyName: "createButton", publicName: "createButton", isSignal: true, isRequired: false, transformFunction: null }, _formSchema: { classPropertyName: "_formSchema", publicName: "formSchema", isSignal: false, isRequired: false, transformFunction: null }, searchObservableFunc: { classPropertyName: "searchObservableFunc", publicName: "searchObservableFunc", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { _rowClick: "rowClick", clickedCreate: "clickedCreate" }, viewQueries: [{ propertyName: "tableHTTPSREFSignal", first: true, predicate: TableHttpsComponent, descendants: true, isSignal: true }, { propertyName: "tablePlainRefSignal", first: true, predicate: TablePlainComponent, descendants: true, isSignal: true }, { propertyName: "tableHTTPSREF", first: true, predicate: TableHttpsComponent, descendants: true }, { propertyName: "tablePlainRef", first: true, predicate: TablePlainComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<loader [loading]=\"loading()\">\n @if (!hideForm() && searchForm()) {\n <form [formGroup]=\"searchForm()\" (ngSubmit)=\"search()\">\n <div class=\"row align-items-center\">\n @for (scheme of computedFormSchema(); track scheme) {\n <div class=\"{{ gridClass() }} \">\n <div class=\"row align-items-end\">\n @switch (true) {\n @case (scheme.type == 'tel') {\n <div class=\"col\">\n <app-phone-number\n [form]=\"scheme.form\"\n [label]=\"scheme.label\"\n [name]=\"scheme.field\"\n [showLabel]=\"false\"\n [showValidation]=\"scheme.showValidation\"\n [showValidationIcon]=\"scheme.showValidationIcon\"\n [countryCode3]=\"scheme.countryCode3\"\n [disabled]=\"scheme.disabledIf | functionCaller2: searchFormValue() : (scheme.field | toAny)\"\n #inputTag />\n @if (showValidationMsg()) {\n <app-validation-message [input]=\"inputTag\" />\n }\n </div>\n }\n @case (scheme.type == 'autocomplete') {\n <div class=\"col\">\n <app-autocomplete\n [form]=\"scheme.form\"\n [label]=\"scheme.label\"\n [labelField]=\"scheme.labelField\"\n [autoPickValueField]=\"scheme.autoPickValueField\"\n [labelType]=\"scheme.labelType | toAny\"\n [optionsFunc]=\"scheme.optionsFunc\"\n [name]=\"scheme.field\"\n [optionFormatter]=\"scheme.optionFormatter\"\n [valueField]=\"scheme.valueField\"\n [options]=\"scheme.options\"\n [hint]=\"scheme.hint\"\n [disabled]=\"scheme.disabledIf | functionCaller2: searchFormValue : (scheme.field | toAny)\"\n #inputTag />\n @if (showValidationMsg()) {\n <app-validation-message [input]=\"inputTag\" />\n }\n </div>\n }\n @default {\n <div class=\"col\">\n <form>\n <div class=\"gx-2 row align-items-end\">\n <div class=\"col\">\n <app-input-basic\n #formField\n [name]=\"scheme.field\"\n [form]=\"scheme.form\"\n [type]=\"scheme.type\"\n [autoPickValueField]=\"scheme.autoPickValueField\"\n [valueField]=\"scheme.valueField\"\n [labelType]=\"scheme.labelType | toAny\"\n [checkedSignal]=\"scheme.checked\"\n [showValidation]=\"!!scheme.asyncValidators\"\n [showValidationIcon]=\"!!scheme.asyncValidators\"\n [noFormat]=\"true\"\n [labelField]=\"scheme.labelField\"\n [optionFormatter]=\"scheme.optionFormatter\"\n [options]=\"scheme.options\"\n [decimalPoints]=\"scheme.decimalPoints\"\n [hint]=\"scheme.hint\"\n [max]=\"scheme.max\"\n [min]=\"scheme.min\"\n [placeholder]=\"scheme.placeholder\"\n [label]=\"scheme.label\"\n [disabled]=\"scheme.disabledIf | functionCaller2: searchFormValue : (scheme.field | toAny)\" />\n </div>\n @if (scheme.standalone && scheme.action) {\n <div class=\"col-auto\">\n <app-btn\n group=\"show\"\n [disabled]=\"!formField?.validSignal()\"\n actionType=\"submit\"\n (mclick)=\"scheme.action(allSearchFormValue(), formField.valueSignal(), standaloneForm())\" />\n </div>\n }\n @if (scheme.action && !scheme.standalone) {\n <div class=\"col-auto\">\n <app-btn\n [icon]=\"scheme.icon\"\n [iconBtn]=\"true\"\n actionType=\"submit\"\n (mclick)=\"scheme.action(allSearchFormValue(), formField.valueSignal(), searchForm())\" />\n </div>\n }\n </div>\n </form>\n </div>\n @if (showValidationMsg()) {\n <app-validation-message [input]=\"formField\" />\n }\n }\n }\n </div>\n </div>\n }\n <div class=\"col-md justify-content-end d-flex\">\n @if (showClearBtn()) {\n <app-btn type=\"danger-outline\" text=\"Clear\" icon=\"delete\" (mclick)=\"clearFilters()\" />\n }\n <span class=\"mx-1\"></span>\n @if (showSearchBtn()) {\n <app-btn\n [group]=\"'search'\"\n [iconBtn]=\"true\"\n text=\"Search\"\n actionType=\"submit\"\n [excludeLogging]=\"true\"\n [disabled]=\"!searchFunction() && !isTablePaginated()\"\n (mclick)=\"search()\" />\n }\n @if (createButton()) {\n <span class=\"mx-1\"></span>\n @if (createBtnRoute()) {\n <app-btn type=\"outline\" text=\"Create\" icon=\"add\" (mclick)=\"clickedCreate.emit()\" routerLink=\"{{ createBtnRoute() }}\" />\n } @else {\n <app-btn type=\"outline\" text=\"Create\" icon=\"add\" (mclick)=\"clickedCreate.emit()\" />\n }\n }\n </div>\n </div>\n </form>\n }\n\n <ng-content select=\"[tablePanel]\"></ng-content>\n\n @if (displayedColumns()?.length) {\n <div class=\"mt-3\" [hidden]=\"!showData() || (!data() && !isTablePaginated())\">\n <ng-container>\n @if (isTablePaginated()) {\n <table-https\n #tableHTTPS\n [searchIfNoQuery]=\"searchIfNoQuery()\"\n [displayedColumns]=\"displayedColumns()\"\n [observableFunc]=\"searchObservableFunc()\"\n (rowClick)=\"rowClick($event)\"\n (selectionChanged)=\"setSelection()\"\n [centerCells]=\"centerCells()\"\n [expandedRowTemplate]=\"expandedRowTemplate()\"\n [isExpandable]=\"isExpandable()\"\n [label]=\"label()\"\n [nowrap]=\"nowrap()\"\n [orderDirection]=\"orderDirection()\"\n [orderField]=\"orderField()\"\n [pageSize]=\"pageSize()\"\n [rowOptions]=\"options()\"\n [showAdditionalColumns]=\"showAdditionalColumns()\"\n [showExport]=\"showExport()\"\n [showRefreshBtn]=\"showRefreshBtn()\"\n [smallerFonts]=\"smallerFonts()\"\n [startSectionTemplate]=\"startSectionTemplate()\"\n [useSelection]=\"useSelection()\"\n noItemTxt=\"No results found\" />\n } @else {\n <table-plain\n [distinct]=\"true\"\n [showPager]=\"true\"\n [pageSize]=\"pageSize()\"\n [centerCells]=\"false\"\n [startSectionTemplate]=\"startSectionTemplate()\"\n [smallerFonts]=\"smallerFonts()\"\n [nowrap]=\"nowrap()\"\n [showFilter]=\"showFilter()\"\n [showExport]=\"showExport()\"\n [isExpandable]=\"isExpandable()\"\n [expandedRowTemplate]=\"expandedRowTemplate()\"\n [label]=\"label()\"\n noItemTxt=\"No results found\"\n (rowClick)=\"rowClick($event)\"\n [orderField]=\"orderField()\"\n [rowOptions]=\"options()\"\n [showAdditionalColumns]=\"showAdditionalColumns()\"\n [orderDirection]=\"orderDirection()\"\n [displayedColumns]=\"displayedColumns()\"\n (selectionChanged)=\"setSelection()\"\n [data]=\"data()\" />\n }\n </ng-container>\n </div>\n }\n</loader>\n", styles: [""], dependencies: [{ kind: "component", type: LoaderComponent, selector: "loader", inputs: ["class", "text", "loading", "height", "width", "ratioHW"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: PhoneNumberComponent, selector: "app-phone-number", inputs: ["showLabel", "countryCode3", "config"], outputs: ["onCountrySelect"] }, { kind: "component", type: ValidationMessageComponent, selector: "app-validation-message", inputs: ["debug", "label", "hideOverflow", "minLength", "maxLength", "ignoreDirtiness", "customMessage", "control", "input"], outputs: ["labelChange"] }, { kind: "component", type: AutocompleteComponent, selector: "app-autocomplete,autocomplete", inputs: ["showRequiredTag", "validate", "options"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: InputBasicComponent, selector: "app-input-basic,app-input", inputs: ["accept", "autocomplete", "input", "contextData", "decimalPoints", "files", "hide", "hint", "labelLink", "lblCl", "light", "loading", "multiple", "optionsFunc", "theme", "vms", "xsmall", "setCurrentDate", "options"], outputs: ["mSelectOptionChange", "mSelectedOptionLabel"] }, { kind: "component", type: BtnComponent, selector: "app-btn", inputs: ["formSchema", "debug", "centerBtn", "danger", "warning", "loading", "icon", "rightIcon", "leftIcon", "type", "group", "actionType", "animate", "excludeLogging", "loggingValue", "badge", "class", "customIcon", "form", "forms", "help", "iconBtn", "mclass", "showHelpIcon", "rightCustomIcon", "leftCustomIcon", "text", "valid", "mini", "onFormInvalid", "disabled"], outputs: ["loadingChange", "leftCustomIconChange", "mclick", "disabledChange"] }, { kind: "component", type: TableHttpsComponent, selector: "table-https", inputs: ["observableFunc", "pageNumber", "queryData", "searchIfNoQuery", "showRefreshBtn"], outputs: ["queryDataChange", "dataFetched"] }, { kind: "component", type: TablePlainComponent, selector: "table-plain", inputs: ["customSelectClass", "idField", "obsDataSource", "showFilter", "showPager", "disableSelectionByField", "data", "filterFields", "filterFieldsMap", "selectionPerPage"], outputs: ["view", "dataChanged", "filterChange", "listMutated"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "pipe", type: FunctionCaller2, name: "functionCaller2" }, { kind: "pipe", type: ToAnyPipe, name: "toAny" }] }); }
319
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: FindItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
320
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.0", type: FindItemComponent, isStandalone: true, selector: "app-find-item,find-item", inputs: { autoFormatSchema: { classPropertyName: "autoFormatSchema", publicName: "autoFormatSchema", isSignal: true, isRequired: false, transformFunction: null }, autoOrder: { classPropertyName: "autoOrder", publicName: "autoOrder", isSignal: true, isRequired: false, transformFunction: null }, centerCells: { classPropertyName: "centerCells", publicName: "centerCells", isSignal: true, isRequired: false, transformFunction: null }, displayedColumns: { classPropertyName: "displayedColumns", publicName: "displayedColumns", isSignal: true, isRequired: false, transformFunction: null }, gridClass: { classPropertyName: "gridClass", publicName: "gridClass", isSignal: true, isRequired: false, transformFunction: null }, hideForm: { classPropertyName: "hideForm", publicName: "hideForm", isSignal: true, isRequired: false, transformFunction: null }, expandedRowTemplate: { classPropertyName: "expandedRowTemplate", publicName: "expandedRowTemplate", isSignal: true, isRequired: false, transformFunction: null }, isTablePaginated: { classPropertyName: "isTablePaginated", publicName: "isTablePaginated", isSignal: true, isRequired: false, transformFunction: null }, isExpandable: { classPropertyName: "isExpandable", publicName: "isExpandable", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, nowrap: { classPropertyName: "nowrap", publicName: "nowrap", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "rowOptions", isSignal: true, isRequired: false, transformFunction: null }, orderDirection: { classPropertyName: "orderDirection", publicName: "orderDirection", isSignal: true, isRequired: false, transformFunction: null }, orderField: { classPropertyName: "orderField", publicName: "orderField", isSignal: true, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, searchFunction: { classPropertyName: "searchFunction", publicName: "searchFunction", isSignal: true, isRequired: false, transformFunction: null }, showData: { classPropertyName: "showData", publicName: "showData", isSignal: true, isRequired: false, transformFunction: null }, searchIfNoQuery: { classPropertyName: "searchIfNoQuery", publicName: "searchIfNoQuery", isSignal: true, isRequired: false, transformFunction: null }, showExport: { classPropertyName: "showExport", publicName: "showExport", isSignal: true, isRequired: false, transformFunction: null }, showFilter: { classPropertyName: "showFilter", publicName: "showFilter", isSignal: true, isRequired: false, transformFunction: null }, showRefreshBtn: { classPropertyName: "showRefreshBtn", publicName: "showRefreshBtn", isSignal: true, isRequired: false, transformFunction: null }, startSectionTemplate: { classPropertyName: "startSectionTemplate", publicName: "startSectionTemplate", isSignal: true, isRequired: false, transformFunction: null }, showSearchBtn: { classPropertyName: "showSearchBtn", publicName: "showSearchBtn", isSignal: true, isRequired: false, transformFunction: null }, showClearBtn: { classPropertyName: "showClearBtn", publicName: "showClearBtn", isSignal: true, isRequired: false, transformFunction: null }, showValidationMsg: { classPropertyName: "showValidationMsg", publicName: "showValidationMsg", isSignal: true, isRequired: false, transformFunction: null }, createBtnRoute: { classPropertyName: "createBtnRoute", publicName: "createBtnRoute", isSignal: true, isRequired: false, transformFunction: null }, showAdditionalColumns: { classPropertyName: "showAdditionalColumns", publicName: "showAdditionalColumns", isSignal: true, isRequired: false, transformFunction: null }, smallerFonts: { classPropertyName: "smallerFonts", publicName: "smallerFonts", isSignal: true, isRequired: false, transformFunction: null }, useSelection: { classPropertyName: "useSelection", publicName: "useSelection", isSignal: true, isRequired: false, transformFunction: null }, createButton: { classPropertyName: "createButton", publicName: "createButton", isSignal: true, isRequired: false, transformFunction: null }, _formSchema: { classPropertyName: "_formSchema", publicName: "formSchema", isSignal: false, isRequired: false, transformFunction: null }, searchObservableFunc: { classPropertyName: "searchObservableFunc", publicName: "searchObservableFunc", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { _rowClick: "rowClick", clickedCreate: "clickedCreate" }, viewQueries: [{ propertyName: "tableHTTPSREFSignal", first: true, predicate: TableHttpsComponent, descendants: true, isSignal: true }, { propertyName: "tablePlainRefSignal", first: true, predicate: TablePlainComponent, descendants: true, isSignal: true }, { propertyName: "tableHTTPSREF", first: true, predicate: TableHttpsComponent, descendants: true }, { propertyName: "tablePlainRef", first: true, predicate: TablePlainComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<loader [loading]=\"loading()\">\n @if (!hideForm() && searchForm()) {\n <form [formGroup]=\"searchForm()\" (ngSubmit)=\"search()\">\n <div class=\"row align-items-center\">\n @for (scheme of computedFormSchema(); track scheme) {\n <div class=\"{{ gridClass() }} \">\n <div class=\"row align-items-end\">\n @switch (true) {\n @case (scheme.type == 'tel') {\n <div class=\"col\">\n <app-phone-number\n [form]=\"scheme.form\"\n [label]=\"scheme.label\"\n [name]=\"scheme.field\"\n [showLabel]=\"false\"\n [showValidation]=\"scheme.showValidation\"\n [showValidationIcon]=\"scheme.showValidationIcon\"\n [countryCode3]=\"scheme.countryCode3\"\n [disabled]=\"scheme.disabledIf | functionCaller2: searchFormValue() : (scheme.field | toAny)\"\n #inputTag />\n @if (showValidationMsg()) {\n <app-validation-message [input]=\"inputTag\" />\n }\n </div>\n }\n @case (scheme.type == 'autocomplete') {\n <div class=\"col\">\n <app-autocomplete\n [form]=\"scheme.form\"\n [label]=\"scheme.label\"\n [labelField]=\"scheme.labelField\"\n [autoPickValueField]=\"scheme.autoPickValueField\"\n [labelType]=\"scheme.labelType | toAny\"\n [optionsFunc]=\"scheme.optionsFunc\"\n [name]=\"scheme.field\"\n [optionFormatter]=\"scheme.optionFormatter\"\n [valueField]=\"scheme.valueField\"\n [options]=\"scheme.options\"\n [hint]=\"scheme.hint\"\n [disabled]=\"scheme.disabledIf | functionCaller2: searchFormValue : (scheme.field | toAny)\"\n #inputTag />\n @if (showValidationMsg()) {\n <app-validation-message [input]=\"inputTag\" />\n }\n </div>\n }\n @default {\n <div class=\"col\">\n <form>\n <div class=\"gx-2 row align-items-end\">\n <div class=\"col\">\n <app-input-basic\n #formField\n [name]=\"scheme.field\"\n [form]=\"scheme.form\"\n [type]=\"scheme.type\"\n [autoPickValueField]=\"scheme.autoPickValueField\"\n [valueField]=\"scheme.valueField\"\n [labelType]=\"scheme.labelType | toAny\"\n [checkedSignal]=\"scheme.checked\"\n [showValidation]=\"!!scheme.asyncValidators\"\n [showValidationIcon]=\"!!scheme.asyncValidators\"\n [noFormat]=\"true\"\n [labelField]=\"scheme.labelField\"\n [optionFormatter]=\"scheme.optionFormatter\"\n [options]=\"scheme.options\"\n [decimalPoints]=\"scheme.decimalPoints\"\n [hint]=\"scheme.hint\"\n [max]=\"scheme.max\"\n [min]=\"scheme.min\"\n [placeholder]=\"scheme.placeholder\"\n [label]=\"scheme.label\"\n [disabled]=\"scheme.disabledIf | functionCaller2: searchFormValue : (scheme.field | toAny)\" />\n </div>\n @if (scheme.standalone && scheme.action) {\n <div class=\"col-auto\">\n <app-btn\n group=\"show\"\n [disabled]=\"!formField?.validSignal()\"\n actionType=\"submit\"\n (mclick)=\"scheme.action(allSearchFormValue(), formField.valueSignal(), standaloneForm())\" />\n </div>\n }\n @if (scheme.action && !scheme.standalone) {\n <div class=\"col-auto\">\n <app-btn\n [icon]=\"scheme.icon\"\n [iconBtn]=\"true\"\n actionType=\"submit\"\n (mclick)=\"scheme.action(allSearchFormValue(), formField.valueSignal(), searchForm())\" />\n </div>\n }\n </div>\n </form>\n </div>\n @if (showValidationMsg()) {\n <app-validation-message [input]=\"formField\" />\n }\n }\n }\n </div>\n </div>\n }\n <div class=\"col-md justify-content-end d-flex\">\n @if (showClearBtn()) {\n <app-btn type=\"danger-outline\" text=\"Clear\" icon=\"delete\" (mclick)=\"clearFilters()\" />\n }\n <span class=\"mx-1\"></span>\n @if (showSearchBtn()) {\n <app-btn\n [group]=\"'search'\"\n [iconBtn]=\"true\"\n text=\"Search\"\n actionType=\"submit\"\n [excludeLogging]=\"true\"\n [disabled]=\"!searchFunction() && !isTablePaginated()\"\n (mclick)=\"search()\" />\n }\n @if (createButton()) {\n <span class=\"mx-1\"></span>\n @if (createBtnRoute()) {\n <app-btn type=\"outline\" text=\"Create\" icon=\"add\" (mclick)=\"clickedCreate.emit()\" routerLink=\"{{ createBtnRoute() }}\" />\n } @else {\n <app-btn type=\"outline\" text=\"Create\" icon=\"add\" (mclick)=\"clickedCreate.emit()\" />\n }\n }\n </div>\n </div>\n </form>\n }\n\n <ng-content select=\"[tablePanel]\"></ng-content>\n\n @if (displayedColumns()?.length) {\n <div class=\"mt-3\" [hidden]=\"!showData() || (!data() && !isTablePaginated())\">\n <ng-container>\n @if (isTablePaginated()) {\n <table-https\n #tableHTTPS\n [searchIfNoQuery]=\"searchIfNoQuery()\"\n [displayedColumns]=\"displayedColumns()\"\n [observableFunc]=\"searchObservableFunc()\"\n (rowClick)=\"rowClick($event)\"\n (selectionChanged)=\"setSelection()\"\n [centerCells]=\"centerCells()\"\n [expandedRowTemplate]=\"expandedRowTemplate()\"\n [isExpandable]=\"isExpandable()\"\n [label]=\"label()\"\n [nowrap]=\"nowrap()\"\n [orderDirection]=\"orderDirection()\"\n [orderField]=\"orderField()\"\n [pageSize]=\"pageSize()\"\n [rowOptions]=\"options()\"\n [showAdditionalColumns]=\"showAdditionalColumns()\"\n [showExport]=\"showExport()\"\n [showRefreshBtn]=\"showRefreshBtn()\"\n [smallerFonts]=\"smallerFonts()\"\n [startSectionTemplate]=\"startSectionTemplate()\"\n [useSelection]=\"useSelection()\"\n noItemTxt=\"No results found\" />\n } @else {\n <table-plain\n [distinct]=\"true\"\n [showPager]=\"true\"\n [pageSize]=\"pageSize()\"\n [centerCells]=\"false\"\n [startSectionTemplate]=\"startSectionTemplate()\"\n [smallerFonts]=\"smallerFonts()\"\n [nowrap]=\"nowrap()\"\n [showFilter]=\"showFilter()\"\n [showExport]=\"showExport()\"\n [isExpandable]=\"isExpandable()\"\n [expandedRowTemplate]=\"expandedRowTemplate()\"\n [label]=\"label()\"\n noItemTxt=\"No results found\"\n (rowClick)=\"rowClick($event)\"\n [orderField]=\"orderField()\"\n [rowOptions]=\"options()\"\n [showAdditionalColumns]=\"showAdditionalColumns()\"\n [orderDirection]=\"orderDirection()\"\n [displayedColumns]=\"displayedColumns()\"\n (selectionChanged)=\"setSelection()\"\n [data]=\"data()\" />\n }\n </ng-container>\n </div>\n }\n</loader>\n", styles: [""], dependencies: [{ kind: "component", type: LoaderComponent, selector: "loader", inputs: ["class", "text", "loading", "height", "width", "ratioHW"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: PhoneNumberComponent, selector: "app-phone-number", inputs: ["showLabel", "countryCode3", "config"], outputs: ["onCountrySelect"] }, { kind: "component", type: ValidationMessageComponent, selector: "app-validation-message", inputs: ["debug", "label", "hideOverflow", "minLength", "maxLength", "ignoreDirtiness", "customMessage", "control", "input"], outputs: ["labelChange"] }, { kind: "component", type: AutocompleteComponent, selector: "app-autocomplete,autocomplete", inputs: ["showRequiredTag", "validate", "options"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: InputBasicComponent, selector: "app-input-basic,app-input", inputs: ["accept", "autocomplete", "input", "contextData", "decimalPoints", "files", "hide", "hint", "labelLink", "lblCl", "light", "loading", "multiple", "optionsFunc", "theme", "vms", "xsmall", "setCurrentDate", "options"], outputs: ["mSelectOptionChange", "mSelectedOptionLabel"] }, { kind: "component", type: BtnComponent, selector: "app-btn", inputs: ["formSchema", "debug", "centerBtn", "danger", "warning", "loading", "icon", "rightIcon", "leftIcon", "type", "group", "actionType", "animate", "excludeLogging", "loggingValue", "badge", "class", "customIcon", "form", "forms", "help", "iconBtn", "mclass", "showHelpIcon", "rightCustomIcon", "leftCustomIcon", "text", "valid", "mini", "onFormInvalid", "disabled"], outputs: ["loadingChange", "leftCustomIconChange", "mclick", "disabledChange"] }, { kind: "component", type: TableHttpsComponent, selector: "table-https", inputs: ["observableFunc", "pageNumber", "queryData", "searchIfNoQuery", "showRefreshBtn"], outputs: ["queryDataChange", "dataFetched"] }, { kind: "component", type: TablePlainComponent, selector: "table-plain", inputs: ["customSelectClass", "idField", "obsDataSource", "showFilter", "showPager", "disableSelectionByField", "data", "filterFields", "filterFieldsMap", "selectionPerPage"], outputs: ["view", "dataChanged", "filterChange", "listMutated"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "pipe", type: FunctionCaller2, name: "functionCaller2" }, { kind: "pipe", type: ToAnyPipe, name: "toAny" }] }); }
312
321
  }
313
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: FindItemComponent, decorators: [{
322
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: FindItemComponent, decorators: [{
314
323
  type: Component,
315
324
  args: [{ selector: 'app-find-item,find-item', standalone: true, imports: [
316
325
  LoaderComponent,
@@ -348,4 +357,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
348
357
  type: Input,
349
358
  args: ['formSchema']
350
359
  }] } });
351
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluZC1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9SZXVzYWJsZXMvcmV1c2FibGUtY29tcHMvZmluZC1pdGVtL2ZpbmQtaXRlbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ldHMtZmUtbmctc2RrL3NyYy9saWIvUmV1c2FibGVzL3JldXNhYmxlLWNvbXBzL2ZpbmQtaXRlbS9maW5kLWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQWUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuSixPQUFPLEVBQW1CLFdBQVcsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0csT0FBTyxFQUErQixPQUFPLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBd0IsTUFBTSxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsSixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpRkFBaUYsQ0FBQztBQUN0SCxPQUFPLEVBQW9CLG1CQUFtQixFQUFFLE1BQU0sOERBQThELENBQUM7QUFFckgsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGtFQUFrRSxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDaEYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOERBQThELENBQUM7QUFDbkcsT0FBTyxFQUFFLFlBQVksRUFBRSxN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Q25CLFlBQVk7d0JBQ1osbUJBQW1CO3dCQUNuQixtQkFBbUI7d0JBQ25CLFNBQVM7d0JBQ1QsbUJBQW1CO3dCQUNuQixlQUFlO3dCQUNmLFNBQVM7cUJBQ1Y7OEJBd0RtQixTQUFTO3NCQUE1QixNQUFNO3VCQUFDLFVBQVU7Z0JBQ1IsYUFBYTtzQkFBdEIsTUFBTTtnQkFDeUIsYUFBYTtzQkFBNUMsU0FBUzt1QkFBQyxtQkFBbUI7Z0JBQ0UsYUFBYTtzQkFBNUMsU0FBUzt1QkFBQyxtQkFBbUI7Z0JBWUwsV0FBVztzQkFBbkMsS0FBSzt1QkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgVmlld0NoaWxkLCBUZW1wbGF0ZVJlZiwgc2lnbmFsLCBjb21wdXRlZCwgaW5wdXQsIGluamVjdCwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBkZWJvdW5jZSwgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBsYXN0VmFsdWVGcm9tLCBtYXAsIHRhcCwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFVzZXJBY3Rpdml0eVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9SZXVzYWJsZXMvcmV1c2FibGUtcGFnZXMvdXNlci1hY3Rpdml0eS91YS1leHRyYXMvdXNlci1hY3Rpdml0eS5zZXJ2aWNlJztcbmltcG9ydCB7IElUYWJsZVNlYXJjaFJlc3AsIFRhYmxlSHR0cHNDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9TaGFyZWQvY29tcG9uZW50cy90YWJsZS1odHRwcy90YWJsZS1odHRwcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgSU9iamVjdExpdGVyYWwsIElSb3dPcHRpb24sIElTdHJpY3RGb3JtR3JvdXAsIFNvcnRUeXBlLCBUYWJsZUNvbCB9IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9tb2RlbHMvaW5kZXgubW9kZWwnO1xuaW1wb3J0IHsgRVVBIH0gZnJvbSAnLi4vLi4vcmV1c2FibGUtcGFnZXMvdXNlci1hY3Rpdml0eS91YS1leHRyYXMvdXNlci1hY3Rpdml0eS5tb2RlbCc7XG5pbXBvcnQgeyBGdW5jdGlvbkNhbGxlcjIsIFRvQW55UGlwZSB9IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9waXBlcy91dGlsaXR5LnBpcGUnO1xuaW1wb3J0IHsgVGFibGVQbGFpbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9jb21wb25lbnRzL3RhYmxlLXBsYWluL3RhYmxlLXBsYWluLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCdG5Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9TaGFyZWQvY29tcG9uZW50cy9idG4vYnRuLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJbnB1dEJhc2ljQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL2NvbXBvbmVudHMvaW5wdXQvaW5wdXQtYmFzaWMuY29tcG9uZW50JztcbmltcG9ydCB7IEF1dG9jb21wbGV0ZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9jb21wb25lbnRzL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUuY29tcG9uZW50JztcbmltcG9ydCB7IFZhbGlkYXRpb25NZXNzYWdlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL2NvbXBvbmVudHMvaW5wdXQvdmFsaWRhdGlvbi1tZXNzYWdlL3ZhbGlkYXRpb24tbWVzc2FnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGhvbmVOdW1iZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9TaGFyZWQvY29tcG9uZW50cy9waG9uZS1udW1iZXIvcGhvbmUtbnVtYmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOZ0lmLCBOZ0ZvciwgTmdTd2l0Y2gsIE5nU3dpdGNoQ2FzZSwgTmdTd2l0Y2hEZWZhdWx0LCBBc3luY1BpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL2NvbXBvbmVudHMvbG9hZGVyL2xvYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCBpc0VxdWFsIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IENvbmZpZyB9IGZyb20gJy4uLy4uLy4uL2NvbmZpZ3MvaW5kZXguY29uZmlnJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIsIFJvdXRlckxpbmsgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQmFzZUZvcm1HZW5lcmF0b3IsIElCYXNlRm9ybVNjaGVtYSB9IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9jb21wb25lbnRzL2Zvcm0tZ2VuZXJhdG9yL2Zvcm0tZ2VuZXJhdG9yLmJhc2UuY29tcG9uZW50JztcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZmluZC1pdGVtLGZpbmQtaXRlbScsXG4gIHRlbXBsYXRlVXJsOiAnLi9maW5kLWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9maW5kLWl0ZW0uY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIExvYWRlckNvbXBvbmVudCxcbiAgICBOZ0lmLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIE5nRm9yLFxuICAgIE5nU3dpdGNoLFxuICAgIE5nU3dpdGNoQ2FzZSxcbiAgICBQaG9uZU51bWJlckNvbXBvbmVudCxcbiAgICBWYWxpZGF0aW9uTWVzc2FnZUNvbXBvbmVudCxcbiAgICBBdXRvY29tcGxldGVDb21wb25lbnQsXG4gICAgUm91dGVyTGluayxcbiAgICBOZ1N3aXRjaERlZmF1bHQsXG4gICAgSW5wdXRCYXNpY0NvbXBvbmVudCxcbiAgICBCdG5Db21wb25lbnQsXG4gICAgVGFibGVIdHRwc0NvbXBvbmVudCxcbiAgICBUYWJsZVBsYWluQ29tcG9uZW50LFxuICAgIEFzeW5jUGlwZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIEZ1bmN0aW9uQ2FsbGVyMixcbiAgICBUb0FueVBpcGUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEZpbmRJdGVtQ29tcG9uZW50PFRRdWVyeSBleHRlbmRzIElPYmplY3RMaXRlcmFsID0gYW55LCBUUm93IGV4dGVuZHMgSU9iamVjdExpdGVyYWwgPSBhbnk+XG4gIGV4dGVuZHMgQmFzZUZvcm1HZW5lcmF0b3I8VFF1ZXJ5LCBJU2VhcmNoRm9ybVNjaGVtYTxUUXVlcnksIFRSb3c+PlxuICBpbXBsZW1lbnRzIE9uSW5pdFxue1xuICAvKipcbiAgICogV2hldGhlciB0byBzb3J0IHNjaGVtYVxuICAgKi9cbiAgYXV0b0Zvcm1hdFNjaGVtYSA9IGlucHV0KHRydWUpO1xuICBhdXRvT3JkZXIgPSBpbnB1dCh0cnVlKTtcbiAgY2VudGVyQ2VsbHMgPSBpbnB1dDxib29sZWFuPigpO1xuICBkaXNwbGF5ZWRDb2x1bW5zID0gaW5wdXQ8VGFibGVDb2xbXT4oKTtcbiAgLyoqXG4gICAqIFJvdyBncmlkIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIGdyaWRDbGFzcyA9IGlucHV0KCdjb2wtbWQtNCBjb2wteHhsLTMnKTtcbiAgaGlkZUZvcm0gPSBpbnB1dChmYWxzZSk7XG4gIGV4cGFuZGVkUm93VGVtcGxhdGUgPSBpbnB1dDxUZW1wbGF0ZVJlZjxhbnk+PigpO1xuICBpc1RhYmxlUGFnaW5hdGVkID0gaW5wdXQoZmFsc2UpO1xuICBpc0V4cGFuZGFibGUgPSBpbnB1dChmYWxzZSk7XG4gIGxhYmVsID0gaW5wdXQ8c3RyaW5nPigpO1xuICBub3dyYXAgPSBpbnB1dChmYWxzZSk7XG4gIG9wdGlvbnMgPSBpbnB1dDxJUm93T3B0aW9uPFRSb3c+W10+KHVuZGVmaW5lZCwgeyBhbGlhczogJ3Jvd09wdGlvbnMnIH0pO1xuICBvcmRlckRpcmVjdGlvbiA9IGlucHV0PFNvcnRUeXBlPignYXNjJyk7XG4gIG9yZGVyRmllbGQgPSBpbnB1dDxrZXlvZiBUUm93PigpO1xuICBwYWdlU2l6ZSA9IGlucHV0KDEwKTtcbiAgc2VhcmNoRnVuY3Rpb24gPSBpbnB1dDwoZGF0YTogYW55KSA9PiBPYnNlcnZhYmxlPFRSb3dbXSB8IHsgY29udGVudDogVFJvd1tdIH0+PigpO1xuICBzaG93RGF0YSA9IGlucHV0KHRydWUpO1xuICBzZWFyY2hJZk5vUXVlcnkgPSBpbnB1dCh0cnVlKTtcbiAgc2hvd0V4cG9ydCA9IGlucHV0KHRydWUpO1xuICBzaG93RmlsdGVyID0gaW5wdXQoZmFsc2UpO1xuICBzaG93UmVmcmVzaEJ0biA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHN0YXJ0U2VjdGlvblRlbXBsYXRlID0gaW5wdXQ8VGVtcGxhdGVSZWY8SFRNTEVsZW1lbnQ+PigpO1xuICBmb3JtOiBGb3JtR3JvdXA7XG4gIC8qKlxuICAgKiBVc2VkIHRvIHNwZWNpZnkgaWYgdGhlIHNlYXJjaCBidXR0b24gc2hvdWxkIGJlIHNob3duXG4gICAqL1xuICBzaG93U2VhcmNoQnRuID0gaW5wdXQodHJ1ZSk7XG4gIC8qKlxuICAgKiBVc2VkIHRvIHNwZWNpZnkgaWYgdGhlIGNsZWFyIGZvcm0gYnV0dG9uIHNob3VsZCBiZSBzaG93blxuICAgKi9cbiAgc2hvd0NsZWFyQnRuID0gaW5wdXQodHJ1ZSk7XG4gIC8qKlxuICAgKiBVc2VkIHRvIHNwZWNpZnkgaWYgdmFsaWRhdGlvbiBtZXNzYWdlcyBzaG91bGQgYmUgc2hvd25cbiAgICovXG4gIHNob3dWYWxpZGF0aW9uTXNnID0gaW5wdXQodHJ1ZSk7XG4gIGNyZWF0ZUJ0blJvdXRlID0gaW5wdXQoJy4uL2NyZWF0ZScpO1xuICAvKipcbiAgICogVXNlZCB0byBzcGVjaWZ5IGlmIHNob3cgYWRkaXRpb25hbCBjb2x1bW4gYnV0dG9uIHdpaWwgYmUgZGlzcGxheWVkIG9yIG5vdC5cbiAgICovXG4gIHNob3dBZGRpdGlvbmFsQ29sdW1ucyA9IGlucHV0KHRydWUpO1xuICBzbWFsbGVyRm9udHMgPSBpbnB1dChmYWxzZSk7XG4gIC8qKiBVc2UgY2hlY2tib3hlcyAqL1xuICB1c2VTZWxlY3Rpb24gPSBpbnB1dChmYWxzZSk7XG5cbiAgQE91dHB1dCgncm93Q2xpY2snKSBfcm93Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGNsaWNrZWRDcmVhdGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBWaWV3Q2hpbGQoVGFibGVIdHRwc0NvbXBvbmVudCkgdGFibGVIVFRQU1JFRjogVGFibGVIdHRwc0NvbXBvbmVudDxUUm93PjtcbiAgQFZpZXdDaGlsZChUYWJsZVBsYWluQ29tcG9uZW50KSB0YWJsZVBsYWluUmVmOiBUYWJsZVBsYWluQ29tcG9uZW50PFRSb3c+O1xuICB0YWJsZUhUVFBTUkVGU2lnbmFsID0gdmlld0NoaWxkPFRhYmxlSHR0cHNDb21wb25lbnQ8VFJvdz4+KFRhYmxlSHR0cHNDb21wb25lbnQpO1xuICB0YWJsZVBsYWluUmVmU2lnbmFsID0gdmlld0NoaWxkPFRhYmxlUGxhaW5Db21wb25lbnQ8VFJvdz4+KFRhYmxlUGxhaW5Db21wb25lbnQpO1xuICBkYXRhID0gc2lnbmFsPFRSb3dbXT4oW10pO1xuICBsb2FkaW5nID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgc2VhcmNoRm9ybSA9IHNpZ25hbDxGb3JtR3JvdXAgfCB1bmRlZmluZWQ+KG5ldyBGb3JtR3JvdXAoe30pKTtcbiAgc3RhbmRhbG9uZUZvcm0gPSBzaWduYWw8Rm9ybUdyb3VwIHwgdW5kZWZpbmVkPihuZXcgRm9ybUdyb3VwKHt9KSk7XG4gIC8qKlxuICAgKiBVc2VkIHRvIHNwZWNpZnkgaWYgc2hvdyBjcmVhdGUgYnV0dG9uIGlzIG5lZWRlZC5cbiAgICovXG4gIGNyZWF0ZUJ1dHRvbiA9IGlucHV0KGZhbHNlKTtcblxuICBASW5wdXQoJ2Zvcm1TY2hlbWEnKSBzZXQgX2Zvcm1TY2hlbWEodjogSVNlYXJjaEZvcm1TY2hlbWE8VFF1ZXJ5LCBUUm93PltdKSB7XG4gICAgdGhpcy5pbml0KGNsb25lRGVlcCh2Py5maWx0ZXIoKHgpID0+IHgpKSk7XG4gIH1cblxuICBzZWFyY2hPYnNlcnZhYmxlRnVuYyA9IGlucHV0PChkYXRhOiBhbnkpID0+IE9ic2VydmFibGU8SVRhYmxlU2VhcmNoUmVzcDxUUm93Pj4+KCk7XG4gIHJlYWRvbmx5IGRlbGltaXRlckZpZWxkID0gJ35+fic7XG4gIHJlYWRvbmx5IGRlbGltaXRlcldvcmQgPSAnfn4nO1xuICBwcm90ZWN0ZWQgc2VhcmNoVHJpZ2dlciA9IG5ldyBTdWJqZWN0PElPYmplY3RMaXRlcmFsPigpO1xuXG4gIGNvbXB1dGVkRm9ybVNjaGVtYSA9IGNvbXB1dGVkPElTZWFyY2hGb3JtU2NoZW1hPFRRdWVyeSwgVFJvdz5bXT4oXG4gICAgKCkgPT4ge1xuICAgICAgY29uc3QgZm9ybVNjaGVtYSA9IHRoaXMuZm9ybVNjaGVtYSgpIHx8IFtdLFxuICAgICAgICBzdGFuZGFsb25lRm9ybSA9IHRoaXMuc3RhbmRhbG9uZUZvcm0oKSxcbiAgICAgICAgc2VhcmNoRm9ybSA9IHRoaXMuc2VhcmNoRm9ybSgpO1xuXG4gICAgICByZXR1cm4gZm9ybVNjaGVtYS5maWx0ZXIoeD0+IXguaGlkZGVuKS5tYXAoKHNjaGVtZSkgPT4ge1xuICAgICAgICBzY2hlbWUuZm9ybSA9IHNjaGVtZS5zdGFuZGFsb25lID8gc3RhbmRhbG9uZUZvcm0gOiBzZWFyY2hGb3JtO1xuICAgICAgICByZXR1cm4gc2NoZW1lO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICB7IGVxdWFsOiBpc0VxdWFsIH0sXG4gICk7XG5cbiAgcHVibGljIHVhUyA9IGluamVjdChVc2VyQWN0aXZpdHlTZXJ2aWNlKTtcbiAgcHVibGljIHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICBwdWJsaWMgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuXG4gIHByb3RlY3RlZCBzdWJzMiA9IHRoaXMudXRpbGl0eVNlcnZpY2UuY3JlYXRlU3Vic2NyaXB0aW9uTWFuYWdlcigpO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vICB0aGlzLmZldGNoU2F2ZWRRdWVyeSgpXG4gICAgbGV0IHNlYXJjaERlYm91bmNlVGltZSA9IDUwMCxcbiAgICAgIHNlYXJjaENvdW50ID0gMDtcbiAgICB0aGlzLnN1YnMyLnB1c2goXG4gICAgICB0aGlzLnNlYXJjaFRyaWdnZXJcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZGVib3VuY2UoKCkgPT4gdGltZXIoc2VhcmNoRGVib3VuY2VUaW1lKSksXG4gICAgICAgICAgdGFwKChyKSA9PiB0aGlzLl9zZWFyY2goKSksXG4gICAgICAgICAgZmlsdGVyKCgpID0+IHNlYXJjaERlYm91bmNlVGltZSAhPSAwKSxcbiAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCsrc2VhcmNoQ291bnQgPT0gMSkgc2VhcmNoRGVib3VuY2VUaW1lID0gMDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChyKSA9PiB7XG4gICAgICAgICAgLy8gZGVidWdnZXI7XG4gICAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBvdmVycmlkZSBvbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zdWJzMj8uY2xlYXIoKTtcbiAgICByZXR1cm4gc3VwZXIub25EZXN0cm95KCk7XG4gIH1cblxuICBmZXRjaFNhdmVkUXVlcnkoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHByZXZRdWVyeVN0cmluZyA9IHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbU1hcC5nZXQoJ3EnKTtcbiAgICAgIGlmIChwcmV2UXVlcnlTdHJpbmcpIHtcbiAgICAgICAgY29uc3QgcHJldlF1ZXJ5OiB7IFtmOiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICAgICAgICBjb25zdCBmaWVsZHMgPSBwcmV2UXVlcnlTdHJpbmcuc3BsaXQodGhpcy5kZWxpbWl0ZXJGaWVsZCk7XG4gICAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgZmllbGRzKSB7XG4gICAgICAgICAgY29uc3QgZiA9IGZpZWxkLnNwbGl0KHRoaXMuZGVsaW1pdGVyV29yZCk7XG4gICAgICAgICAgLy8gZGVidWdnZXI7XG4gICAgICAgICAgaWYgKGZbMV0gPT0gbnVsbCB8fCBmWzFdID09ICdudWxsJykgY29udGludWU7XG4gICAgICAgICAgcHJldlF1ZXJ5W2ZbMF1dID0gZlsxXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlYXJjaEZvcm0oKT8ucGF0Y2hWYWx1ZShwcmV2UXVlcnkpO1xuICAgICAgICBpZiAoT2JqZWN0LnZhbHVlcyhwcmV2UXVlcnkpLnNvbWUoKHgpID0+IHggIT0gbnVsbCkpIHRoaXMuc2VhcmNoKCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGluaXQoc2NoZW1hOiBJU2VhcmNoRm9ybVNjaGVtYTxUUXVlcnksIFRSb3c+W10pIHtcbiAgICB0aGlzLm9uRGVzdHJveSgpO1xuICAgIGlmICghc2NoZW1hPy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX3NldEZvcm1TY2hlbWFzKHNjaGVtYSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGRlYnVnZ2VyO1xuICAgIHRoaXMuaGFuZGxlQWxsU2NoZW1hKHNjaGVtYSk7XG4gICAgZm9yIChjb25zdCBzY2hlbWUgb2YgdGhpcy5mb3JtU2NoZW1hKCkpIHRoaXMuaGFuZGxlRm9ybVNjaGVtZShzY2hlbWUpO1xuICAgIGZvciAoY29uc3Qgc2NoZW1lIG9mIHRoaXMuZm9ybVNjaGVtYSgpKVxuICAgICAgaWYgKHNjaGVtZS50cmlnZ2VyT25DaGFuZ2VPbkluaXQpIHNjaGVtZS5vbkNoYW5nZUZ1bmModGhpcy5mb3JtLmdldFJhd1ZhbHVlKCksIHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpW3NjaGVtZS5maWVsZF0sIHRoaXMpO1xuICB9XG5cbiAgaGFuZGxlQWxsU2NoZW1hKHNjaGVtYTogSVNlYXJjaEZvcm1TY2hlbWE8VFF1ZXJ5LCBUUm93PltdKSB7XG4gICAgc2NoZW1hLmZvckVhY2goKHgpID0+ICh4LnR5cGUgPSB4LnR5cGUgfHwgJ3RleHQnKSk7XG4gICAgaWYgKHRoaXMuYXV0b0Zvcm1hdFNjaGVtYSgpIHx8IHRoaXMuYXV0b09yZGVyKCkpIHtcbiAgICAgIGlmICh0aGlzLmF1dG9Gb3JtYXRTY2hlbWEoKSkge1xuICAgICAgICBzY2hlbWFcbiAgICAgICAgICAuZmlsdGVyKCh4KSA9PiB4LnR5cGUgPT0gJ3NlbGVjdCcpXG4gICAgICAgICAgLmZvckVhY2goKHgpID0+IHtcbiAgICAgICAgICAgIGlmICh4Lm9wdGlvbnM/Lmxlbmd0aCA+IDUgfHwgIXgub3B0aW9ucykgeC50eXBlID0gJ2F1dG9jb21wbGV0ZSc7XG4gICAgICAgICAgfSk7XG4gICAgICAgIHNjaGVtYVxuICAgICAgICAgIC5maWx0ZXIoKHgpID0+IHgudHlwZSA9PSAnY2hlY2tib3gnKVxuICAgICAgICAgIC5mb3JFYWNoKCh4KSA9PiB7XG4gICAgICAgICAgICB4LnR5cGUgPSAnc2VsZWN0JztcbiAgICAgICAgICAgIHgub3B0aW9ucyA9IENvbmZpZy5ib29sTGlzdDtcbiAgICAgICAgICAgIHgubGFiZWxGaWVsZCA9ICd0aXRsZSc7XG4gICAgICAgICAgICB4LnZhbHVlRmllbGQgPSAnY29kZSc7XG4gICAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX3NldEZvcm1TY2hlbWFzKHNjaGVtYSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5hdXRvT3JkZXIoKSkge1xuICAgICAgICBzY2hlbWEgPSBzY2hlbWEuc29ydDIoJ2xhYmVsJywgdHJ1ZSk7XG4gICAgICAgIHRoaXMuX3NldEZvcm1TY2hlbWFzKFtcbiAgICAgICAgICAuLi5zY2hlbWE/LmZpbHRlcigoeCkgPT4geC5hY3Rpb24gJiYgeC50eXBlICE9ICdjaGVja2JveCcpLFxuICAgICAgICAgIC4uLnNjaGVtYT8uZmlsdGVyKCh4KSA9PiAheC5hY3Rpb24gJiYgeC50eXBlICE9ICdjaGVja2JveCcpLFxuICAgICAgICAgIC4uLnNjaGVtYT8uZmlsdGVyKCh4KSA9PiB4LnR5cGUgPT0gJ2NoZWNrYm94JyksXG4gICAgICAgIF0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB0aGlzLl9zZXRGb3JtU2NoZW1hcyhzY2hlbWEpO1xuXG4gICAgc2NoZW1hLmZvckVhY2goKHMpID0+IHtcbiAgICAgIGlmIChzLnN0YW5kYWxvbmUpIHRoaXMuc3RhbmRhbG9uZUZvcm0oKS5yZWdpc3RlckNvbnRyb2wocy5maWVsZC50b1N0cmluZygpLCBuZXcgRm9ybUNvbnRyb2wobnVsbCwgcy52YWxpZGF0b3JzLCBzLmFzeW5jVmFsaWRhdG9ycykpO1xuICAgICAgZWxzZSB0aGlzLnNlYXJjaEZvcm0oKS5yZWdpc3RlckNvbnRyb2wocy5maWVsZC50b1N0cmluZygpLCBuZXcgRm9ybUNvbnRyb2wocy52YWx1ZSwgcy52YWxpZGF0b3JzLCBzLmFzeW5jVmFsaWRhdG9ycykpO1xuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlRm9ybVNjaGVtZShzY2hlbWU6IElTZWFyY2hGb3JtU2NoZW1hPFRRdWVyeSwgVFJvdz4pIHtcbiAgICBzY2hlbWUuaWQgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdlbmVyYXRlVVVJRCgpO1xuICAgIHRoaXMudXBkYXRlRm9ybVNjaGVtYShzY2hlbWUuZmllbGQsIHNjaGVtZSk7XG5cbiAgICBpZiAoc2NoZW1lLm9wdGlvbnNJbml0RnVuYylcbiAgICAgIHNjaGVtZS5vcHRpb25zSW5pdEZ1bmMuc3Vic2NyaWJlKChyKSA9PiB7XG4gICAgICAgIHNjaGVtZS5vcHRpb25zID0gcjtcbiAgICAgICAgdGhpcy51cGRhdGVGb3JtU2NoZW1hKHNjaGVtZS5maWVsZCwgeyBvcHRpb25zOiByIH0pO1xuICAgICAgICAvLyB0aGlzLm9wdGlvbnNNYXBbc2NoZW1lLmZpZWxkXSA9IHI7XG4gICAgICB9KTtcblxuICAgIGlmIChzY2hlbWUub3B0aW9uc0luaXRGdW5jMilcbiAgICAgIHNjaGVtZS5vcHRpb25zSW5pdEZ1bmMyKCkuc3Vic2NyaWJlKChyKSA9PiB7XG4gICAgICAgIHNjaGVtZS5vcHRpb25zID0gcjtcbiAgICAgICAgdGhpcy51cGRhdGVGb3JtU2NoZW1hKHNjaGVtZS5maWVsZCwgeyBvcHRpb25zOiByIH0pO1xuICAgICAgICAvLyB0aGlzLm9wdGlvbnNNYXBbc2NoZW1lLmZpZWxkXSA9IHI7XG4gICAgICB9KTtcblxuICAgIGlmIChzY2hlbWUub25DaGFuZ2VGdW5jKSB7XG4gICAgICBjb25zdCBzdWIgPSB0aGlzLnNlYXJjaEZvcm0oKVxuICAgICAgICA/LmNvbnRyb2xzW3NjaGVtZS5maWVsZD8udG9TdHJpbmcoKV0/LnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSgwKSlcbiAgICAgICAgLnN1YnNjcmliZSgocikgPT4gc2NoZW1lLm9uQ2hhbmdlRnVuYyh0aGlzLnNlYXJjaEZvcm0oKT8uZ2V0UmF3VmFsdWUoKSwgciwgdGhpcykpO1xuICAgICAgdGhpcy5zdWJzW3NjaGVtZS5maWVsZCBhcyBzdHJpbmddID0gc3ViO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUZvcm1TY2hlbWEoZmllbGROYW1lOiBrZXlvZiBUUXVlcnksIHNjaGVtZTogUGFydGlhbDxJU2VhcmNoRm9ybVNjaGVtYTx7IFtrIGluIGtleW9mIFRRdWVyeV06IEFic3RyYWN0Q29udHJvbDxhbnksIGFueT4gfCBhbnkgfT4+KSB7XG4gICAgcmV0dXJuIHN1cGVyLl91cGRhdGVGb3JtU2NoZW1hKGZpZWxkTmFtZSBhcyBzdHJpbmcsIHNjaGVtZSk7XG4gIH1cblxuICB1cGRhdGVBbGxGb3JtU2NoZW1hKG1hcDogKGZvcm1GaWVsZDogSVNlYXJjaEZvcm1TY2hlbWE8VFF1ZXJ5LCBUUm93PikgPT4gSVNlYXJjaEZvcm1TY2hlbWE8VFF1ZXJ5LCBUUm93Pikge1xuICAgIHJldHVybiBzdXBlci5fdXBkYXRlQWxsRm9ybVNjaGVtYShtYXApO1xuICB9XG5cbiAgZGV0YWNoRm9ybVNjaGVtZShmaWVsZE5hbWU/OiBrZXlvZiBUUXVlcnkpIHtcbiAgICB0aGlzLnN1YnNbZmllbGROYW1lIGFzIHN0cmluZ10/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBzZWFyY2hGb3JtVmFsdWUgPSB0b1NpZ25hbCh0aGlzLnNlYXJjaEZvcm0oKS52YWx1ZUNoYW5nZXMucGlwZShtYXAoKCkgPT4gdGhpcy51dGlsaXR5U2VydmljZS5kZWxldGVOdWxsKHRoaXMuc2VhcmNoRm9ybSgpPy5nZXRSYXdWYWx1ZSgpKSkpKTtcbiAgc3RhbmRhbG9uZUZvcm1WYWx1ZSA9IHRvU2lnbmFsKHRoaXMuc3RhbmRhbG9uZUZvcm0oKS52YWx1ZUNoYW5nZXMpO1xuICBhbGxTZWFyY2hGb3JtVmFsdWUgPSBjb21wdXRlZCgoKSA9PiAoeyAuLi50aGlzLnNlYXJjaEZvcm1WYWx1ZSgpLCAuLi50aGlzLnN0YW5kYWxvbmVGb3JtVmFsdWUoKSB9KSk7XG5cbiAgdHJhY2tCeVJvd0lEID0gKGluZGV4LCBpdGVtKSA9PiB7XG4gICAgcmV0dXJuIGl0ZW0/LnZhbHVlPy5fX3Jvd0lEO1xuICB9O1xuXG4gIGNsZWFyRmlsdGVycygpIHtcbiAgICB0aGlzLnNlYXJjaEZvcm0oKT8ucmVzZXQoKTtcbiAgICB0aGlzLnNlYXJjaCgpO1xuICB9XG5cbiAgcmVmcmVzaCgpIHtcbiAgICB0aGlzLnNlYXJjaCgpO1xuICB9XG5cbiAgc2VhcmNoKCkge1xuICAgIHRoaXMuc2VhcmNoVHJpZ2dlci5uZXh0KHRoaXMuc2VhcmNoRm9ybSgpLmdldFJhd1ZhbHVlKCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIF9zZWFyY2goKSB7XG4gICAgLy8gZGVidWdnZXI7XG4gICAgaWYgKCF0aGlzLnNlYXJjaEZvcm0pIHJldHVybjtcbiAgICBjb25zdCByZXEgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmRlbGV0ZU51bGwoY2xvbmVEZWVwKHRoaXMuc2VhcmNoRm9ybSgpPy5nZXRSYXdWYWx1ZSgpKSk7XG4gICAgLy8gZGVidWdnZXI7XG4gICAgaWYgKHRoaXMuaXNUYWJsZVBhZ2luYXRlZCgpKSB7XG4gICAgICBpZiAoIXRoaXMuZGF0YSgpKSB0aGlzLmxvYWRpbmcuc2V0KHRydWUpO1xuICAgICAgdGhpcy5kYXRhLnNldChbXSk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy50YWJsZUhUVFBTUkVGPy5zZWFyY2gocmVxKTtcbiAgICAgICAgdGhpcy5sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICB9LCAwKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VhcmNoRnVuY3Rpb24pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMubG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBsYXN0VmFsdWVGcm9tKFxuICAgICAgICAgIHRoaXMuc2VhcmNoRnVuY3Rpb24oKSh7XG4gICAgICAgICAgICAuLi5yZXEsXG4gICAgICAgICAgICBzb3J0Qnk6IHRoaXMub3JkZXJGaWVsZCgpIHx8ICdjcmVhdGVkT24nLFxuICAgICAgICAgICAgc29ydERpcmVjdGlvbjogdGhpcy5vcmRlckRpcmVjdGlvbigpPy50b1VwcGVyQ2FzZSgpIHx8ICdERVNDJyxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5kYXRhLnNldChkYXRhPy5bJ2NvbnRlbnQnXSB8fCBkYXRhKTtcbiAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKEVycm9yKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgdGhpcy51YVMuYWRkKHtcbiAgICAgICAgY29kZTogRVVBLnNlYXJjaGVkLFxuICAgICAgICBhY3Rpdml0eURlc2NyaXB0aW9uOiB0aGlzLmxhYmVsKCkgKyAnICcgKyBKU09OLnN0cmluZ2lmeShyZXEpLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGRlYnVnZ2VyO1xuICAgIH1cbiAgfVxuXG4gIHNhdmVRdWVyeShxdWVyeSA9IHRoaXMuc2VhcmNoRm9ybVZhbHVlKCkpIHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgcXVlcnlQYXJhbXM6IHtcbiAgICAgICAgcTogT2JqZWN0LmtleXMocXVlcnkpXG4gICAgICAgICAgLmZpbHRlcigoeCkgPT4gcXVlcnlbeF0gIT0gbnVsbClcbiAgICAgICAgICAubWFwKChrKSA9PiBgJHtrfSR7dGhpcy5kZWxpbWl0ZXJXb3JkfSR7cXVlcnlba119YClcbiAgICAgICAgICAuam9pbih0aGlzLmRlbGltaXRlckZpZWxkKSxcbiAgICAgIH0sXG4gICAgICByZXBsYWNlVXJsOiB0cnVlLFxuICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSxcbiAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScsXG4gICAgfSk7XG4gIH1cbiAgcm93Q2xpY2soZSkge1xuICAgIHRoaXMuX3Jvd0NsaWNrLmVtaXQoZSk7XG4gIH1cblxuICBnZXQgc2VsZWN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRhYmxlSFRUUFNSRUY/LnNlbGVjdGVkSXRlbXMgfHwgdGhpcy50YWJsZVBsYWluUmVmPy5zZWxlY3RlZEl0ZW1zO1xuICB9XG4gIHNlbGVjdGlvblNpZ25hbCA9IHNpZ25hbDxUUm93W10+KFtdKTtcblxuICBpc0FueVNlbGVjdGVkID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHRoID0gdGhpcy50YWJsZUhUVFBTUkVGU2lnbmFsKCk/LmlzQW55U2VsZWN0ZWQoKSxcbiAgICAgIHRwID0gdGhpcy50YWJsZVBsYWluUmVmU2lnbmFsKCk/LmlzQW55U2VsZWN0ZWQoKTtcbiAgICByZXR1cm4gdGggfHwgdHA7XG4gIH0pO1xuICBwcm90ZWN0ZWQgc2V0U2VsZWN0aW9uKCkge1xuICAgIHRoaXMuc2VsZWN0aW9uU2lnbmFsLnNldCh0aGlzLnRhYmxlSFRUUFNSRUY/LnNlbGVjdGVkSXRlbXNTaWduYWwoKSB8fCB0aGlzLnRhYmxlUGxhaW5SZWY/LnNlbGVjdGVkSXRlbXNTaWduYWwoKSk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU2VhcmNoRm9ybVNjaGVtYTxUUXVlcnkgZXh0ZW5kcyBJT2JqZWN0TGl0ZXJhbCA9IGFueSwgVFJvdyBleHRlbmRzIElPYmplY3RMaXRlcmFsID0gYW55PlxuICBleHRlbmRzIElCYXNlRm9ybVNjaGVtYTxcbiAgICBUUXVlcnksXG4gICAgRmluZEl0ZW1Db21wb25lbnQ8VFF1ZXJ5LCBUUm93PixcbiAgICB7XG4gICAgICBbSyBpbiBrZXlvZiBUUXVlcnldOiBBYnN0cmFjdENvbnRyb2w8YW55LCBhbnk+O1xuICAgIH1cbiAgPiB7XG4gIHN0YW5kYWxvbmU/OiBib29sZWFuO1xuICBhY3Rpb24/OiAocm93OiBUUm93LCBjZWxsOiBhbnksIGZvcm0/OiBGb3JtR3JvdXA8SVN0cmljdEZvcm1Hcm91cDxUUXVlcnk+PikgPT4gYW55O1xufVxuIiwiPGxvYWRlciBbbG9hZGluZ109XCJsb2FkaW5nKClcIj5cbiAgQGlmICghaGlkZUZvcm0oKSAmJiBzZWFyY2hGb3JtKCkpIHtcbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cInNlYXJjaEZvcm0oKVwiIChuZ1N1Ym1pdCk9XCJzZWFyY2goKVwiPlxuICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgQGZvciAoc2NoZW1lIG9mIGNvbXB1dGVkRm9ybVNjaGVtYSgpOyB0cmFjayBzY2hlbWUpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwie3sgZ3JpZENsYXNzKCkgfX0gXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWVuZFwiPlxuICAgICAgICAgICAgICBAc3dpdGNoICh0cnVlKSB7XG4gICAgICAgICAgICAgICAgQGNhc2UgKHNjaGVtZS50eXBlID09ICd0ZWwnKSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtcGhvbmUtbnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICAgW2Zvcm1dPVwic2NoZW1lLmZvcm1cIlxuICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJzY2hlbWUubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cInNjaGVtZS5maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgW3Nob3dMYWJlbF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3Nob3dWYWxpZGF0aW9uXT1cInNjaGVtZS5zaG93VmFsaWRhdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgW3Nob3dWYWxpZGF0aW9uSWNvbl09XCJzY2hlbWUuc2hvd1ZhbGlkYXRpb25JY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY291bnRyeUNvZGUzXT1cInNjaGVtZS5jb3VudHJ5Q29kZTNcIlxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzY2hlbWUuZGlzYWJsZWRJZiB8IGZ1bmN0aW9uQ2FsbGVyMjogc2VhcmNoRm9ybVZhbHVlKCkgOiAoc2NoZW1lLmZpZWxkIHwgdG9BbnkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAjaW5wdXRUYWcgLz5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChzaG93VmFsaWRhdGlvbk1zZygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPGFwcC12YWxpZGF0aW9uLW1lc3NhZ2UgW2lucHV0XT1cImlucHV0VGFnXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBjYXNlIChzY2hlbWUudHlwZSA9PSAnYXV0b2NvbXBsZXRlJykge1xuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxuICAgICAgICAgICAgICAgICAgICA8YXBwLWF1dG9jb21wbGV0ZVxuICAgICAgICAgICAgICAgICAgICAgIFtmb3JtXT1cInNjaGVtZS5mb3JtXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwic2NoZW1lLmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxGaWVsZF09XCJzY2hlbWUubGFiZWxGaWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2F1dG9QaWNrVmFsdWVGaWVsZF09XCJzY2hlbWUuYXV0b1BpY2tWYWx1ZUZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxUeXBlXT1cInNjaGVtZS5sYWJlbFR5cGUgfCB0b0FueVwiXG4gICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNGdW5jXT1cInNjaGVtZS5vcHRpb25zRnVuY1wiXG4gICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwic2NoZW1lLmZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uRm9ybWF0dGVyXT1cInNjaGVtZS5vcHRpb25Gb3JtYXR0ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZUZpZWxkXT1cInNjaGVtZS52YWx1ZUZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJzY2hlbWUub3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2hpbnRdPVwic2NoZW1lLmhpbnRcIlxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzY2hlbWUuZGlzYWJsZWRJZiB8IGZ1bmN0aW9uQ2FsbGVyMjogc2VhcmNoRm9ybVZhbHVlIDogKHNjaGVtZS5maWVsZCB8IHRvQW55KVwiXG4gICAgICAgICAgICAgICAgICAgICAgI2lucHV0VGFnIC8+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoc2hvd1ZhbGlkYXRpb25Nc2coKSkge1xuICAgICAgICAgICAgICAgICAgICAgIDxhcHAtdmFsaWRhdGlvbi1tZXNzYWdlIFtpbnB1dF09XCJpbnB1dFRhZ1wiIC8+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAZGVmYXVsdCB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XG4gICAgICAgICAgICAgICAgICAgIDxmb3JtPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJneC0yIHJvdyBhbGlnbi1pdGVtcy1lbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1pbnB1dC1iYXNpY1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICNmb3JtRmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJzY2hlbWUuZmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtXT1cInNjaGVtZS5mb3JtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJzY2hlbWUudHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F1dG9QaWNrVmFsdWVGaWVsZF09XCJzY2hlbWUuYXV0b1BpY2tWYWx1ZUZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVGaWVsZF09XCJzY2hlbWUudmFsdWVGaWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsVHlwZV09XCJzY2hlbWUubGFiZWxUeXBlIHwgdG9BbnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkU2lnbmFsXT1cInNjaGVtZS5jaGVja2VkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1ZhbGlkYXRpb25dPVwiISFzY2hlbWUuYXN5bmNWYWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1ZhbGlkYXRpb25JY29uXT1cIiEhc2NoZW1lLmFzeW5jVmFsaWRhdG9yc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25vRm9ybWF0XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbEZpZWxkXT1cInNjaGVtZS5sYWJlbEZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uRm9ybWF0dGVyXT1cInNjaGVtZS5vcHRpb25Gb3JtYXR0ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInNjaGVtZS5vcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGVjaW1hbFBvaW50c109XCJzY2hlbWUuZGVjaW1hbFBvaW50c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpbnRdPVwic2NoZW1lLmhpbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXhdPVwic2NoZW1lLm1heFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21pbl09XCJzY2hlbWUubWluXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwic2NoZW1lLnBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwic2NoZW1lLmxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic2NoZW1lLmRpc2FibGVkSWYgfCBmdW5jdGlvbkNhbGxlcjI6IHNlYXJjaEZvcm1WYWx1ZSA6IChzY2hlbWUuZmllbGQgfCB0b0FueSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHNjaGVtZS5zdGFuZGFsb25lICYmIHNjaGVtZS5hY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1idG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwPVwic2hvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWZvcm1GaWVsZD8udmFsaWRTaWduYWwoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25UeXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtY2xpY2spPVwic2NoZW1lLmFjdGlvbihhbGxTZWFyY2hGb3JtVmFsdWUoKSwgZm9ybUZpZWxkLnZhbHVlU2lnbmFsKCksIHN0YW5kYWxvbmVGb3JtKCkpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHNjaGVtZS5hY3Rpb24gJiYgIXNjaGVtZS5zdGFuZGFsb25lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtYXV0b1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtYnRuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJzY2hlbWUuaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvbkJ0bl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvblR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1jbGljayk9XCJzY2hlbWUuYWN0aW9uKGFsbFNlYXJjaEZvcm1WYWx1ZSgpLCBmb3JtRmllbGQudmFsdWVTaWduYWwoKSwgc2VhcmNoRm9ybSgpKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIEBpZiAoc2hvd1ZhbGlkYXRpb25Nc2coKSkge1xuICAgICAgICAgICAgICAgICAgICA8YXBwLXZhbGlkYXRpb24tbWVzc2FnZSBbaW5wdXRdPVwiZm9ybUZpZWxkXCIgLz5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQganVzdGlmeS1jb250ZW50LWVuZCBkLWZsZXhcIj5cbiAgICAgICAgICBAaWYgKHNob3dDbGVhckJ0bigpKSB7XG4gICAgICAgICAgICA8YXBwLWJ0biB0eXBlPVwiZGFuZ2VyLW91dGxpbmVcIiB0ZXh0PVwiQ2xlYXJcIiBpY29uPVwiZGVsZXRlXCIgKG1jbGljayk9XCJjbGVhckZpbHRlcnMoKVwiIC8+XG4gICAgICAgICAgfVxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXgtMVwiPjwvc3Bhbj5cbiAgICAgICAgICBAaWYgKHNob3dTZWFyY2hCdG4oKSkge1xuICAgICAgICAgICAgPGFwcC1idG5cbiAgICAgICAgICAgICAgW2dyb3VwXT1cIidzZWFyY2gnXCJcbiAgICAgICAgICAgICAgW2ljb25CdG5dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIHRleHQ9XCJTZWFyY2hcIlxuICAgICAgICAgICAgICBhY3Rpb25UeXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgW2V4Y2x1ZGVMb2dnaW5nXT1cInRydWVcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXNlYXJjaEZ1bmN0aW9uKCkgJiYgIWlzVGFibGVQYWdpbmF0ZWQoKVwiXG4gICAgICAgICAgICAgIChtY2xpY2spPVwic2VhcmNoKClcIiAvPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKGNyZWF0ZUJ1dHRvbigpKSB7XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm14LTFcIj48L3NwYW4+XG4gICAgICAgICAgICBAaWYgKGNyZWF0ZUJ0blJvdXRlKCkpIHtcbiAgICAgICAgICAgICAgPGFwcC1idG4gdHlwZT1cIm91dGxpbmVcIiB0ZXh0PVwiQ3JlYXRlXCIgaWNvbj1cImFkZFwiIChtY2xpY2spPVwiY2xpY2tlZENyZWF0ZS5lbWl0KClcIiByb3V0ZXJMaW5rPVwie3sgY3JlYXRlQnRuUm91dGUoKSB9fVwiIC8+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgPGFwcC1idG4gdHlwZT1cIm91dGxpbmVcIiB0ZXh0PVwiQ3JlYXRlXCIgaWNvbj1cImFkZFwiIChtY2xpY2spPVwiY2xpY2tlZENyZWF0ZS5lbWl0KClcIiAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Zvcm0+XG4gIH1cblxuICA8bmctY29udGVudCBzZWxlY3Q9XCJbdGFibGVQYW5lbF1cIj48L25nLWNvbnRlbnQ+XG5cbiAgQGlmIChkaXNwbGF5ZWRDb2x1bW5zKCk/Lmxlbmd0aCkge1xuICAgIDxkaXYgY2xhc3M9XCJtdC0zXCIgW2hpZGRlbl09XCIhc2hvd0RhdGEoKSB8fCAoIWRhdGEoKSAmJiAhaXNUYWJsZVBhZ2luYXRlZCgpKVwiPlxuICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgQGlmIChpc1RhYmxlUGFnaW5hdGVkKCkpIHtcbiAgICAgICAgICA8dGFibGUtaHR0cHNcbiAgICAgICAgICAgICN0YWJsZUhUVFBTXG4gICAgICAgICAgICBbc2VhcmNoSWZOb1F1ZXJ5XT1cInNlYXJjaElmTm9RdWVyeSgpXCJcbiAgICAgICAgICAgIFtkaXNwbGF5ZWRDb2x1bW5zXT1cImRpc3BsYXllZENvbHVtbnMoKVwiXG4gICAgICAgICAgICBbb2JzZXJ2YWJsZUZ1bmNdPVwic2VhcmNoT2JzZXJ2YWJsZUZ1bmMoKVwiXG4gICAgICAgICAgICAocm93Q2xpY2spPVwicm93Q2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlZCk9XCJzZXRTZWxlY3Rpb24oKVwiXG4gICAgICAgICAgICBbY2VudGVyQ2VsbHNdPVwiY2VudGVyQ2VsbHMoKVwiXG4gICAgICAgICAgICBbZXhwYW5kZWRSb3dUZW1wbGF0ZV09XCJleHBhbmRlZFJvd1RlbXBsYXRlKClcIlxuICAgICAgICAgICAgW2lzRXhwYW5kYWJsZV09XCJpc0V4cGFuZGFibGUoKVwiXG4gICAgICAgICAgICBbbGFiZWxdPVwibGFiZWwoKVwiXG4gICAgICAgICAgICBbbm93cmFwXT1cIm5vd3JhcCgpXCJcbiAgICAgICAgICAgIFtvcmRlckRpcmVjdGlvbl09XCJvcmRlckRpcmVjdGlvbigpXCJcbiAgICAgICAgICAgIFtvcmRlckZpZWxkXT1cIm9yZGVyRmllbGQoKVwiXG4gICAgICAgICAgICBbcGFnZVNpemVdPVwicGFnZVNpemUoKVwiXG4gICAgICAgICAgICBbcm93T3B0aW9uc109XCJvcHRpb25zKClcIlxuICAgICAgICAgICAgW3Nob3dBZGRpdGlvbmFsQ29sdW1uc109XCJzaG93QWRkaXRpb25hbENvbHVtbnMoKVwiXG4gICAgICAgICAgICBbc2hvd0V4cG9ydF09XCJzaG93RXhwb3J0KClcIlxuICAgICAgICAgICAgW3Nob3dSZWZyZXNoQnRuXT1cInNob3dSZWZyZXNoQnRuKClcIlxuICAgICAgICAgICAgW3NtYWxsZXJGb250c109XCJzbWFsbGVyRm9udHMoKVwiXG4gICAgICAgICAgICBbc3RhcnRTZWN0aW9uVGVtcGxhdGVdPVwic3RhcnRTZWN0aW9uVGVtcGxhdGUoKVwiXG4gICAgICAgICAgICBbdXNlU2VsZWN0aW9uXT1cInVzZVNlbGVjdGlvbigpXCJcbiAgICAgICAgICAgIG5vSXRlbVR4dD1cIk5vIHJlc3VsdHMgZm91bmRcIiAvPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICA8dGFibGUtcGxhaW5cbiAgICAgICAgICAgIFtkaXN0aW5jdF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtzaG93UGFnZXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbcGFnZVNpemVdPVwicGFnZVNpemUoKVwiXG4gICAgICAgICAgICBbY2VudGVyQ2VsbHNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW3N0YXJ0U2VjdGlvblRlbXBsYXRlXT1cInN0YXJ0U2VjdGlvblRlbXBsYXRlKClcIlxuICAgICAgICAgICAgW3NtYWxsZXJGb250c109XCJzbWFsbGVyRm9udHMoKVwiXG4gICAgICAgICAgICBbbm93cmFwXT1cIm5vd3JhcCgpXCJcbiAgICAgICAgICAgIFtzaG93RmlsdGVyXT1cInNob3dGaWx0ZXIoKVwiXG4gICAgICAgICAgICBbc2hvd0V4cG9ydF09XCJzaG93RXhwb3J0KClcIlxuICAgICAgICAgICAgW2lzRXhwYW5kYWJsZV09XCJpc0V4cGFuZGFibGUoKVwiXG4gICAgICAgICAgICBbZXhwYW5kZWRSb3dUZW1wbGF0ZV09XCJleHBhbmRlZFJvd1RlbXBsYXRlKClcIlxuICAgICAgICAgICAgW2xhYmVsXT1cImxhYmVsKClcIlxuICAgICAgICAgICAgbm9JdGVtVHh0PVwiTm8gcmVzdWx0cyBmb3VuZFwiXG4gICAgICAgICAgICAocm93Q2xpY2spPVwicm93Q2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICBbb3JkZXJGaWVsZF09XCJvcmRlckZpZWxkKClcIlxuICAgICAgICAgICAgW3Jvd09wdGlvbnNdPVwib3B0aW9ucygpXCJcbiAgICAgICAgICAgIFtzaG93QWRkaXRpb25hbENvbHVtbnNdPVwic2hvd0FkZGl0aW9uYWxDb2x1bW5zKClcIlxuICAgICAgICAgICAgW29yZGVyRGlyZWN0aW9uXT1cIm9yZGVyRGlyZWN0aW9uKClcIlxuICAgICAgICAgICAgW2Rpc3BsYXllZENvbHVtbnNdPVwiZGlzcGxheWVkQ29sdW1ucygpXCJcbiAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2VkKT1cInNldFNlbGVjdGlvbigpXCJcbiAgICAgICAgICAgIFtkYXRhXT1cImRhdGEoKVwiIC8+XG4gICAgICAgIH1cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICB9XG48L2xvYWRlcj5cbiJdfQ==
360
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluZC1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V0cy1mZS1uZy1zZGsvc3JjL2xpYi9SZXVzYWJsZXMvcmV1c2FibGUtY29tcHMvZmluZC1pdGVtL2ZpbmQtaXRlbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ldHMtZmUtbmctc2RrL3NyYy9saWIvUmV1c2FibGVzL3JldXNhYmxlLWNvbXBzL2ZpbmQtaXRlbS9maW5kLWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFFVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixTQUFTLEVBRVQsTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUwsV0FBVyxFQUNYLFNBQVMsRUFDVCxXQUFXLEVBQ1gsbUJBQW1CLEdBQ3BCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUdMLE9BQU8sRUFDUCxRQUFRLEVBQ1IsWUFBWSxFQUVaLE1BQU0sRUFDTixhQUFhLEVBQ2IsR0FBRyxFQUNILEdBQUcsRUFDSCxLQUFLLEdBQ04sTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpRkFBaUYsQ0FBQztBQUN0SCxPQUFPLEVBRUwsbUJBQW1CLEdBQ3BCLE1BQU0sOERBQThELENBQUM7QUFRdEUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGtFQUFrRSxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDaEYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOERBQThELENBQUM7QUFDbkcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFN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LHFCQUFxQjt3QkFDckIsVUFBVTt3QkFDVixlQUFlO3dCQUNmLG1CQUFtQjt3QkFDbkIsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLG1CQUFtQjt3QkFDbkIsU0FBUzt3QkFDVCxtQkFBbUI7d0JBQ25CLGVBQWU7d0JBQ2YsU0FBUztxQkFDVjs4QkEyRG1CLFNBQVM7c0JBQTVCLE1BQU07dUJBQUMsVUFBVTtnQkFDUixhQUFhO3NCQUF0QixNQUFNO2dCQUN5QixhQUFhO3NCQUE1QyxTQUFTO3VCQUFDLG1CQUFtQjtnQkFDRSxhQUFhO3NCQUE1QyxTQUFTO3VCQUFDLG1CQUFtQjtnQkFZTCxXQUFXO3NCQUFuQyxLQUFLO3VCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIE9uSW5pdCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBWaWV3Q2hpbGQsXG4gIFRlbXBsYXRlUmVmLFxuICBzaWduYWwsXG4gIGNvbXB1dGVkLFxuICBpbnB1dCxcbiAgaW5qZWN0LFxuICB2aWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBGb3JtQ29udHJvbCxcbiAgRm9ybUdyb3VwLFxuICBGb3Jtc01vZHVsZSxcbiAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBPYnNlcnZhYmxlLFxuICBTdWJqZWN0LFxuICBkZWJvdW5jZSxcbiAgZGVib3VuY2VUaW1lLFxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgZmlsdGVyLFxuICBsYXN0VmFsdWVGcm9tLFxuICBtYXAsXG4gIHRhcCxcbiAgdGltZXIsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVXNlckFjdGl2aXR5U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL1JldXNhYmxlcy9yZXVzYWJsZS1wYWdlcy91c2VyLWFjdGl2aXR5L3VhLWV4dHJhcy91c2VyLWFjdGl2aXR5LnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgSVRhYmxlU2VhcmNoUmVzcCxcbiAgVGFibGVIdHRwc0NvbXBvbmVudCxcbn0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL2NvbXBvbmVudHMvdGFibGUtaHR0cHMvdGFibGUtaHR0cHMuY29tcG9uZW50JztcbmltcG9ydCB7XG4gIElPYmplY3RMaXRlcmFsLFxuICBJUm93T3B0aW9uLFxuICBJU3RyaWN0Rm9ybUdyb3VwLFxuICBTb3J0VHlwZSxcbiAgVGFibGVDb2wsXG59IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9tb2RlbHMvaW5kZXgubW9kZWwnO1xuaW1wb3J0IHsgRVVBIH0gZnJvbSAnLi4vLi4vcmV1c2FibGUtcGFnZXMvdXNlci1hY3Rpdml0eS91YS1leHRyYXMvdXNlci1hY3Rpdml0eS5tb2RlbCc7XG5pbXBvcnQgeyBGdW5jdGlvbkNhbGxlcjIsIFRvQW55UGlwZSB9IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9waXBlcy91dGlsaXR5LnBpcGUnO1xuaW1wb3J0IHsgVGFibGVQbGFpbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9jb21wb25lbnRzL3RhYmxlLXBsYWluL3RhYmxlLXBsYWluLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBCdG5Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9TaGFyZWQvY29tcG9uZW50cy9idG4vYnRuLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJbnB1dEJhc2ljQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL2NvbXBvbmVudHMvaW5wdXQvaW5wdXQtYmFzaWMuY29tcG9uZW50JztcbmltcG9ydCB7IEF1dG9jb21wbGV0ZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL1NoYXJlZC9jb21wb25lbnRzL2F1dG9jb21wbGV0ZS9hdXRvY29tcGxldGUuY29tcG9uZW50JztcbmltcG9ydCB7IFZhbGlkYXRpb25NZXNzYWdlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL2NvbXBvbmVudHMvaW5wdXQvdmFsaWRhdGlvbi1tZXNzYWdlL3ZhbGlkYXRpb24tbWVzc2FnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGhvbmVOdW1iZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9TaGFyZWQvY29tcG9uZW50cy9waG9uZS1udW1iZXIvcGhvbmUtbnVtYmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOZ0lmLCBOZ0ZvciwgTmdTd2l0Y2gsIE5nU3dpdGNoQ2FzZSwgTmdTd2l0Y2hEZWZhdWx0LCBBc3luY1BpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTG9hZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL2NvbXBvbmVudHMvbG9hZGVyL2xvYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgY2xvbmVEZWVwLCBpc0VxdWFsIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IENvbmZpZyB9IGZyb20gJy4uLy4uLy4uL2NvbmZpZ3MvaW5kZXguY29uZmlnJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIsIFJvdXRlckxpbmsgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtcbiAgQmFzZUZvcm1HZW5lcmF0b3IsXG4gIElCYXNlRm9ybVNjaGVtYSxcbn0gZnJvbSAnLi4vLi4vLi4vU2hhcmVkL2NvbXBvbmVudHMvZm9ybS1nZW5lcmF0b3IvZm9ybS1nZW5lcmF0b3IuYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1maW5kLWl0ZW0sZmluZC1pdGVtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpbmQtaXRlbS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ZpbmQtaXRlbS5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgTG9hZGVyQ29tcG9uZW50LFxuICAgIE5nSWYsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgTmdGb3IsXG4gICAgTmdTd2l0Y2gsXG4gICAgTmdTd2l0Y2hDYXNlLFxuICAgIFBob25lTnVtYmVyQ29tcG9uZW50LFxuICAgIFZhbGlkYXRpb25NZXNzYWdlQ29tcG9uZW50LFxuICAgIEF1dG9jb21wbGV0ZUNvbXBvbmVudCxcbiAgICBSb3V0ZXJMaW5rLFxuICAgIE5nU3dpdGNoRGVmYXVsdCxcbiAgICBJbnB1dEJhc2ljQ29tcG9uZW50LFxuICAgIEJ0bkNvbXBvbmVudCxcbiAgICBUYWJsZUh0dHBzQ29tcG9uZW50LFxuICAgIFRhYmxlUGxhaW5Db21wb25lbnQsXG4gICAgQXN5bmNQaXBlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgRnVuY3Rpb25DYWxsZXIyLFxuICAgIFRvQW55UGlwZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRmluZEl0ZW1Db21wb25lbnQ8XG4gICAgVFF1ZXJ5IGV4dGVuZHMgSU9iamVjdExpdGVyYWwgPSBhbnksXG4gICAgVFJvdyBleHRlbmRzIElPYmplY3RMaXRlcmFsID0gYW55LFxuICA+XG4gIGV4dGVuZHMgQmFzZUZvcm1HZW5lcmF0b3I8VFF1ZXJ5LCBJU2VhcmNoRm9ybVNjaGVtYTxUUXVlcnksIFRSb3c+PlxuICBpbXBsZW1lbnRzIE9uSW5pdFxue1xuICAvKipcbiAgICogV2hldGhlciB0byBzb3J0IHNjaGVtYVxuICAgKi9cbiAgYXV0b0Zvcm1hdFNjaGVtYSA9IGlucHV0KHRydWUpO1xuICBhdXRvT3JkZXIgPSBpbnB1dCh0cnVlKTtcbiAgY2VudGVyQ2VsbHMgPSBpbnB1dDxib29sZWFuPigpO1xuICBkaXNwbGF5ZWRDb2x1bW5zID0gaW5wdXQ8VGFibGVDb2xbXT4oKTtcbiAgLyoqXG4gICAqIFJvdyBncmlkIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIGdyaWRDbGFzcyA9IGlucHV0KCdjb2wtbWQtNCBjb2wteHhsLTMnKTtcbiAgaGlkZUZvcm0gPSBpbnB1dChmYWxzZSk7XG4gIGV4cGFuZGVkUm93VGVtcGxhdGUgPSBpbnB1dDxUZW1wbGF0ZVJlZjxhbnk+PigpO1xuICBpc1RhYmxlUGFnaW5hdGVkID0gaW5wdXQoZmFsc2UpO1xuICBpc0V4cGFuZGFibGUgPSBpbnB1dChmYWxzZSk7XG4gIGxhYmVsID0gaW5wdXQ8c3RyaW5nPigpO1xuICBub3dyYXAgPSBpbnB1dChmYWxzZSk7XG4gIG9wdGlvbnMgPSBpbnB1dDxJUm93T3B0aW9uPFRSb3c+W10+KHVuZGVmaW5lZCwgeyBhbGlhczogJ3Jvd09wdGlvbnMnIH0pO1xuICBvcmRlckRpcmVjdGlvbiA9IGlucHV0PFNvcnRUeXBlPignYXNjJyk7XG4gIG9yZGVyRmllbGQgPSBpbnB1dDxrZXlvZiBUUm93PigpO1xuICBwYWdlU2l6ZSA9IGlucHV0KDEwKTtcbiAgc2VhcmNoRnVuY3Rpb24gPSBpbnB1dDwoZGF0YTogYW55KSA9PiBPYnNlcnZhYmxlPFRSb3dbXSB8IHsgY29udGVudDogVFJvd1tdIH0+PigpO1xuICBzaG93RGF0YSA9IGlucHV0KHRydWUpO1xuICBzZWFyY2hJZk5vUXVlcnkgPSBpbnB1dCh0cnVlKTtcbiAgc2hvd0V4cG9ydCA9IGlucHV0KHRydWUpO1xuICBzaG93RmlsdGVyID0gaW5wdXQoZmFsc2UpO1xuICBzaG93UmVmcmVzaEJ0biA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHN0YXJ0U2VjdGlvblRlbXBsYXRlID0gaW5wdXQ8VGVtcGxhdGVSZWY8SFRNTEVsZW1lbnQ+PigpO1xuICBmb3JtOiBGb3JtR3JvdXA7XG4gIC8qKlxuICAgKiBVc2VkIHRvIHNwZWNpZnkgaWYgdGhlIHNlYXJjaCBidXR0b24gc2hvdWxkIGJlIHNob3duXG4gICAqL1xuICBzaG93U2VhcmNoQnRuID0gaW5wdXQodHJ1ZSk7XG4gIC8qKlxuICAgKiBVc2VkIHRvIHNwZWNpZnkgaWYgdGhlIGNsZWFyIGZvcm0gYnV0dG9uIHNob3VsZCBiZSBzaG93blxuICAgKi9cbiAgc2hvd0NsZWFyQnRuID0gaW5wdXQodHJ1ZSk7XG4gIC8qKlxuICAgKiBVc2VkIHRvIHNwZWNpZnkgaWYgdmFsaWRhdGlvbiBtZXNzYWdlcyBzaG91bGQgYmUgc2hvd25cbiAgICovXG4gIHNob3dWYWxpZGF0aW9uTXNnID0gaW5wdXQodHJ1ZSk7XG4gIGNyZWF0ZUJ0blJvdXRlID0gaW5wdXQoJy4uL2NyZWF0ZScpO1xuICAvKipcbiAgICogVXNlZCB0byBzcGVjaWZ5IGlmIHNob3cgYWRkaXRpb25hbCBjb2x1bW4gYnV0dG9uIHdpaWwgYmUgZGlzcGxheWVkIG9yIG5vdC5cbiAgICovXG4gIHNob3dBZGRpdGlvbmFsQ29sdW1ucyA9IGlucHV0KHRydWUpO1xuICBzbWFsbGVyRm9udHMgPSBpbnB1dChmYWxzZSk7XG4gIC8qKiBVc2UgY2hlY2tib3hlcyAqL1xuICB1c2VTZWxlY3Rpb24gPSBpbnB1dChmYWxzZSk7XG5cbiAgQE91dHB1dCgncm93Q2xpY2snKSBfcm93Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGNsaWNrZWRDcmVhdGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBWaWV3Q2hpbGQoVGFibGVIdHRwc0NvbXBvbmVudCkgdGFibGVIVFRQU1JFRjogVGFibGVIdHRwc0NvbXBvbmVudDxUUm93PjtcbiAgQFZpZXdDaGlsZChUYWJsZVBsYWluQ29tcG9uZW50KSB0YWJsZVBsYWluUmVmOiBUYWJsZVBsYWluQ29tcG9uZW50PFRSb3c+O1xuICB0YWJsZUhUVFBTUkVGU2lnbmFsID0gdmlld0NoaWxkPFRhYmxlSHR0cHNDb21wb25lbnQ8VFJvdz4+KFRhYmxlSHR0cHNDb21wb25lbnQpO1xuICB0YWJsZVBsYWluUmVmU2lnbmFsID0gdmlld0NoaWxkPFRhYmxlUGxhaW5Db21wb25lbnQ8VFJvdz4+KFRhYmxlUGxhaW5Db21wb25lbnQpO1xuICBkYXRhID0gc2lnbmFsPFRSb3dbXT4oW10pO1xuICBsb2FkaW5nID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgc2VhcmNoRm9ybSA9IHNpZ25hbDxGb3JtR3JvdXAgfCB1bmRlZmluZWQ+KG5ldyBGb3JtR3JvdXAoe30pKTtcbiAgc3RhbmRhbG9uZUZvcm0gPSBzaWduYWw8Rm9ybUdyb3VwIHwgdW5kZWZpbmVkPihuZXcgRm9ybUdyb3VwKHt9KSk7XG4gIC8qKlxuICAgKiBVc2VkIHRvIHNwZWNpZnkgaWYgc2hvdyBjcmVhdGUgYnV0dG9uIGlzIG5lZWRlZC5cbiAgICovXG4gIGNyZWF0ZUJ1dHRvbiA9IGlucHV0KGZhbHNlKTtcblxuICBASW5wdXQoJ2Zvcm1TY2hlbWEnKSBzZXQgX2Zvcm1TY2hlbWEodjogSVNlYXJjaEZvcm1TY2hlbWE8VFF1ZXJ5LCBUUm93PltdKSB7XG4gICAgdGhpcy5pbml0KGNsb25lRGVlcCh2Py5maWx0ZXIoKHgpID0+IHgpKSk7XG4gIH1cblxuICBzZWFyY2hPYnNlcnZhYmxlRnVuYyA9IGlucHV0PChkYXRhOiBhbnkpID0+IE9ic2VydmFibGU8SVRhYmxlU2VhcmNoUmVzcDxUUm93Pj4+KCk7XG4gIHJlYWRvbmx5IGRlbGltaXRlckZpZWxkID0gJ35+fic7XG4gIHJlYWRvbmx5IGRlbGltaXRlcldvcmQgPSAnfn4nO1xuICBwcm90ZWN0ZWQgc2VhcmNoVHJpZ2dlciA9IG5ldyBTdWJqZWN0PElPYmplY3RMaXRlcmFsPigpO1xuXG4gIGNvbXB1dGVkRm9ybVNjaGVtYSA9IGNvbXB1dGVkPElTZWFyY2hGb3JtU2NoZW1hPFRRdWVyeSwgVFJvdz5bXT4oXG4gICAgKCkgPT4ge1xuICAgICAgY29uc3QgZm9ybVNjaGVtYSA9IHRoaXMuZm9ybVNjaGVtYSgpIHx8IFtdLFxuICAgICAgICBzdGFuZGFsb25lRm9ybSA9IHRoaXMuc3RhbmRhbG9uZUZvcm0oKSxcbiAgICAgICAgc2VhcmNoRm9ybSA9IHRoaXMuc2VhcmNoRm9ybSgpO1xuXG4gICAgICByZXR1cm4gZm9ybVNjaGVtYVxuICAgICAgICAuZmlsdGVyKCh4KSA9PiAheC5oaWRkZW4pXG4gICAgICAgIC5tYXAoKHNjaGVtZSkgPT4ge1xuICAgICAgICAgIHNjaGVtZS5mb3JtID0gc2NoZW1lLnN0YW5kYWxvbmUgPyBzdGFuZGFsb25lRm9ybSA6IHNlYXJjaEZvcm07XG4gICAgICAgICAgcmV0dXJuIHNjaGVtZTtcbiAgICAgICAgfSk7XG4gICAgfSxcbiAgICB7IGVxdWFsOiBpc0VxdWFsIH0sXG4gICk7XG5cbiAgcHVibGljIHVhUyA9IGluamVjdChVc2VyQWN0aXZpdHlTZXJ2aWNlKTtcbiAgcHVibGljIHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICBwdWJsaWMgcm91dGUgPSBpbmplY3QoQWN0aXZhdGVkUm91dGUpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBzdWJzMiA9IHRoaXMudXRpbGl0eVNlcnZpY2UuY3JlYXRlU3Vic2NyaXB0aW9uTWFuYWdlcigpO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vICB0aGlzLmZldGNoU2F2ZWRRdWVyeSgpXG4gICAgbGV0IHNlYXJjaERlYm91bmNlVGltZSA9IDUwMCxcbiAgICAgIHNlYXJjaENvdW50ID0gMDtcbiAgICB0aGlzLnN1YnMyLnB1c2goXG4gICAgICB0aGlzLnNlYXJjaFRyaWdnZXJcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgLy8gdGFwKCgpID0+IHtcbiAgICAgICAgICAvLyAgIGRlYnVnZ2VyO1xuICAgICAgICAgIC8vIH0pLFxuICAgICAgICAgIGRlYm91bmNlKCgpID0+IHRpbWVyKHNlYXJjaERlYm91bmNlVGltZSkpLFxuICAgICAgICAgIHRhcCgocikgPT4gdGhpcy5fc2VhcmNoKCkpLFxuICAgICAgICAgIGZpbHRlcigoKSA9PiBzZWFyY2hEZWJvdW5jZVRpbWUgIT0gMCksXG4gICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgIGlmICgrK3NlYXJjaENvdW50ID09IDEpIHNlYXJjaERlYm91bmNlVGltZSA9IDA7XG4gICAgICAgICAgfSksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgocikgPT4ge1xuICAgICAgICAgIC8vIGRlYnVnZ2VyO1xuICAgICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgb3ZlcnJpZGUgb25EZXN0cm95KCkge1xuICAgIHRoaXMuc3ViczI/LmNsZWFyKCk7XG4gICAgcmV0dXJuIHN1cGVyLm9uRGVzdHJveSgpO1xuICB9XG5cbiAgZmV0Y2hTYXZlZFF1ZXJ5KCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwcmV2UXVlcnlTdHJpbmcgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1NYXAuZ2V0KCdxJyk7XG4gICAgICBpZiAocHJldlF1ZXJ5U3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHByZXZRdWVyeTogeyBbZjogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICAgICAgY29uc3QgZmllbGRzID0gcHJldlF1ZXJ5U3RyaW5nLnNwbGl0KHRoaXMuZGVsaW1pdGVyRmllbGQpO1xuICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgICAgIGNvbnN0IGYgPSBmaWVsZC5zcGxpdCh0aGlzLmRlbGltaXRlcldvcmQpO1xuICAgICAgICAgIC8vIGRlYnVnZ2VyO1xuICAgICAgICAgIGlmIChmWzFdID09IG51bGwgfHwgZlsxXSA9PSAnbnVsbCcpIGNvbnRpbnVlO1xuICAgICAgICAgIHByZXZRdWVyeVtmWzBdXSA9IGZbMV07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWFyY2hGb3JtKCk/LnBhdGNoVmFsdWUocHJldlF1ZXJ5KTtcbiAgICAgICAgaWYgKE9iamVjdC52YWx1ZXMocHJldlF1ZXJ5KS5zb21lKCh4KSA9PiB4ICE9IG51bGwpKSB0aGlzLnNlYXJjaCgpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBpbml0KHNjaGVtYTogSVNlYXJjaEZvcm1TY2hlbWE8VFF1ZXJ5LCBUUm93PltdKSB7XG4gICAgdGhpcy5vbkRlc3Ryb3koKTtcbiAgICBpZiAoIXNjaGVtYT8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLl9zZXRGb3JtU2NoZW1hcyhzY2hlbWEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBkZWJ1Z2dlcjtcbiAgICB0aGlzLmhhbmRsZUFsbFNjaGVtYShzY2hlbWEpO1xuICAgIGZvciAoY29uc3Qgc2NoZW1lIG9mIHRoaXMuZm9ybVNjaGVtYSgpKSB0aGlzLmhhbmRsZUZvcm1TY2hlbWUoc2NoZW1lKTtcbiAgICBmb3IgKGNvbnN0IHNjaGVtZSBvZiB0aGlzLmZvcm1TY2hlbWEoKSlcbiAgICAgIGlmIChzY2hlbWUudHJpZ2dlck9uQ2hhbmdlT25Jbml0KVxuICAgICAgICBzY2hlbWUub25DaGFuZ2VGdW5jKHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpLCB0aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKVtzY2hlbWUuZmllbGRdLCB0aGlzKTtcbiAgfVxuXG4gIGhhbmRsZUFsbFNjaGVtYShzY2hlbWE6IElTZWFyY2hGb3JtU2NoZW1hPFRRdWVyeSwgVFJvdz5bXSkge1xuICAgIHNjaGVtYS5mb3JFYWNoKCh4KSA9PiAoeC50eXBlID0geC50eXBlIHx8ICd0ZXh0JykpO1xuICAgIGlmICh0aGlzLmF1dG9Gb3JtYXRTY2hlbWEoKSB8fCB0aGlzLmF1dG9PcmRlcigpKSB7XG4gICAgICBpZiAodGhpcy5hdXRvRm9ybWF0U2NoZW1hKCkpIHtcbiAgICAgICAgc2NoZW1hXG4gICAgICAgICAgLmZpbHRlcigoeCkgPT4geC50eXBlID09ICdzZWxlY3QnKVxuICAgICAgICAgIC5mb3JFYWNoKCh4KSA9PiB7XG4gICAgICAgICAgICBpZiAoeC5vcHRpb25zPy5sZW5ndGggPiA1IHx8ICF4Lm9wdGlvbnMpIHgudHlwZSA9ICdhdXRvY29tcGxldGUnO1xuICAgICAgICAgIH0pO1xuICAgICAgICBzY2hlbWFcbiAgICAgICAgICAuZmlsdGVyKCh4KSA9PiB4LnR5cGUgPT0gJ2NoZWNrYm94JylcbiAgICAgICAgICAuZm9yRWFjaCgoeCkgPT4ge1xuICAgICAgICAgICAgeC50eXBlID0gJ3NlbGVjdCc7XG4gICAgICAgICAgICB4Lm9wdGlvbnMgPSBDb25maWcuYm9vbExpc3Q7XG4gICAgICAgICAgICB4LmxhYmVsRmllbGQgPSAndGl0bGUnO1xuICAgICAgICAgICAgeC52YWx1ZUZpZWxkID0gJ2NvZGUnO1xuICAgICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9zZXRGb3JtU2NoZW1hcyhzY2hlbWEpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuYXV0b09yZGVyKCkpIHtcbiAgICAgICAgc2NoZW1hID0gc2NoZW1hLnNvcnQyKCdsYWJlbCcsIHRydWUpO1xuICAgICAgICB0aGlzLl9zZXRGb3JtU2NoZW1hcyhbXG4gICAgICAgICAgLi4uc2NoZW1hPy5maWx0ZXIoKHgpID0+IHguYWN0aW9uICYmIHgudHlwZSAhPSAnY2hlY2tib3gnKSxcbiAgICAgICAgICAuLi5zY2hlbWE/LmZpbHRlcigoeCkgPT4gIXguYWN0aW9uICYmIHgudHlwZSAhPSAnY2hlY2tib3gnKSxcbiAgICAgICAgICAuLi5zY2hlbWE/LmZpbHRlcigoeCkgPT4geC50eXBlID09ICdjaGVja2JveCcpLFxuICAgICAgICBdKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgdGhpcy5fc2V0Rm9ybVNjaGVtYXMoc2NoZW1hKTtcblxuICAgIHNjaGVtYS5mb3JFYWNoKChzKSA9PiB7XG4gICAgICBpZiAocy5zdGFuZGFsb25lKVxuICAgICAgICB0aGlzLnN0YW5kYWxvbmVGb3JtKCkucmVnaXN0ZXJDb250cm9sKFxuICAgICAgICAgIHMuZmllbGQudG9TdHJpbmcoKSxcbiAgICAgICAgICBuZXcgRm9ybUNvbnRyb2wobnVsbCwgcy52YWxpZGF0b3JzLCBzLmFzeW5jVmFsaWRhdG9ycyksXG4gICAgICAgICk7XG4gICAgICBlbHNlXG4gICAgICAgIHRoaXMuc2VhcmNoRm9ybSgpLnJlZ2lzdGVyQ29udHJvbChcbiAgICAgICAgICBzLmZpZWxkLnRvU3RyaW5nKCksXG4gICAgICAgICAgbmV3IEZvcm1Db250cm9sKHMudmFsdWUsIHMudmFsaWRhdG9ycywgcy5hc3luY1ZhbGlkYXRvcnMpLFxuICAgICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgaGFuZGxlRm9ybVNjaGVtZShzY2hlbWU6IElTZWFyY2hGb3JtU2NoZW1hPFRRdWVyeSwgVFJvdz4pIHtcbiAgICBzY2hlbWUuaWQgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdlbmVyYXRlVVVJRCgpO1xuICAgIHRoaXMudXBkYXRlRm9ybVNjaGVtYShzY2hlbWUuZmllbGQsIHNjaGVtZSk7XG5cbiAgICBpZiAoc2NoZW1lLm9wdGlvbnNJbml0RnVuYylcbiAgICAgIHNjaGVtZS5vcHRpb25zSW5pdEZ1bmMuc3Vic2NyaWJlKChyKSA9PiB7XG4gICAgICAgIHNjaGVtZS5vcHRpb25zID0gcjtcbiAgICAgICAgdGhpcy51cGRhdGVGb3JtU2NoZW1hKHNjaGVtZS5maWVsZCwgeyBvcHRpb25zOiByIH0pO1xuICAgICAgICAvLyB0aGlzLm9wdGlvbnNNYXBbc2NoZW1lLmZpZWxkXSA9IHI7XG4gICAgICB9KTtcblxuICAgIGlmIChzY2hlbWUub3B0aW9uc0luaXRGdW5jMilcbiAgICAgIHNjaGVtZS5vcHRpb25zSW5pdEZ1bmMyKCkuc3Vic2NyaWJlKChyKSA9PiB7XG4gICAgICAgIHNjaGVtZS5vcHRpb25zID0gcjtcbiAgICAgICAgdGhpcy51cGRhdGVGb3JtU2NoZW1hKHNjaGVtZS5maWVsZCwgeyBvcHRpb25zOiByIH0pO1xuICAgICAgICAvLyB0aGlzLm9wdGlvbnNNYXBbc2NoZW1lLmZpZWxkXSA9IHI7XG4gICAgICB9KTtcblxuICAgIGlmIChzY2hlbWUub25DaGFuZ2VGdW5jKSB7XG4gICAgICBjb25zdCBzdWIgPSB0aGlzLnNlYXJjaEZvcm0oKVxuICAgICAgICA/LmNvbnRyb2xzW3NjaGVtZS5maWVsZD8udG9TdHJpbmcoKV0/LnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSgwKSlcbiAgICAgICAgLnN1YnNjcmliZSgocikgPT4gc2NoZW1lLm9uQ2hhbmdlRnVuYyh0aGlzLnNlYXJjaEZvcm0oKT8uZ2V0UmF3VmFsdWUoKSwgciwgdGhpcykpO1xuICAgICAgdGhpcy5zdWJzW3NjaGVtZS5maWVsZCBhcyBzdHJpbmddID0gc3ViO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUZvcm1TY2hlbWEoXG4gICAgZmllbGROYW1lOiBrZXlvZiBUUXVlcnksXG4gICAgc2NoZW1lOiBQYXJ0aWFsPElTZWFyY2hGb3JtU2NoZW1hPHsgW2sgaW4ga2V5b2YgVFF1ZXJ5XTogQWJzdHJhY3RDb250cm9sPGFueSwgYW55PiB8IGFueSB9Pj4sXG4gICkge1xuICAgIHJldHVybiBzdXBlci5fdXBkYXRlRm9ybVNjaGVtYShmaWVsZE5hbWUgYXMgc3RyaW5nLCBzY2hlbWUpO1xuICB9XG5cbiAgdXBkYXRlQWxsRm9ybVNjaGVtYShcbiAgICBtYXA6IChmb3JtRmllbGQ6IElTZWFyY2hGb3JtU2NoZW1hPFRRdWVyeSwgVFJvdz4pID0+IElTZWFyY2hGb3JtU2NoZW1hPFRRdWVyeSwgVFJvdz4sXG4gICkge1xuICAgIHJldHVybiBzdXBlci5fdXBkYXRlQWxsRm9ybVNjaGVtYShtYXApO1xuICB9XG5cbiAgZGV0YWNoRm9ybVNjaGVtZShmaWVsZE5hbWU/OiBrZXlvZiBUUXVlcnkpIHtcbiAgICB0aGlzLnN1YnNbZmllbGROYW1lIGFzIHN0cmluZ10/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBzZWFyY2hGb3JtVmFsdWUgPSB0b1NpZ25hbChcbiAgICB0aGlzLnNlYXJjaEZvcm0oKS52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgIG1hcCgoKSA9PiB0aGlzLnV0aWxpdHlTZXJ2aWNlLmRlbGV0ZU51bGwodGhpcy5zZWFyY2hGb3JtKCk/LmdldFJhd1ZhbHVlKCkpKSxcbiAgICApLFxuICApO1xuICBzdGFuZGFsb25lRm9ybVZhbHVlID0gdG9TaWduYWwodGhpcy5zdGFuZGFsb25lRm9ybSgpLnZhbHVlQ2hhbmdlcyk7XG4gIGFsbFNlYXJjaEZvcm1WYWx1ZSA9IGNvbXB1dGVkKCgpID0+ICh7XG4gICAgLi4udGhpcy5zZWFyY2hGb3JtVmFsdWUoKSxcbiAgICAuLi50aGlzLnN0YW5kYWxvbmVGb3JtVmFsdWUoKSxcbiAgfSkpO1xuXG4gIHRyYWNrQnlSb3dJRCA9IChpbmRleCwgaXRlbSkgPT4ge1xuICAgIHJldHVybiBpdGVtPy52YWx1ZT8uX19yb3dJRDtcbiAgfTtcblxuICBjbGVhckZpbHRlcnMoKSB7XG4gICAgdGhpcy5zZWFyY2hGb3JtKCk/LnJlc2V0KCk7XG4gICAgdGhpcy5zZWFyY2goKTtcbiAgfVxuXG4gIHJlZnJlc2goKSB7XG4gICAgdGhpcy5zZWFyY2goKTtcbiAgfVxuXG4gIHNlYXJjaCgpIHtcbiAgICB0aGlzLnNlYXJjaFRyaWdnZXIubmV4dCh0aGlzLnNlYXJjaEZvcm0oKS5nZXRSYXdWYWx1ZSgpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBfc2VhcmNoKCkge1xuICAgIC8vIGRlYnVnZ2VyO1xuICAgIGlmICghdGhpcy5zZWFyY2hGb3JtKSByZXR1cm47XG4gICAgY29uc3QgcmVxID0gdGhpcy51dGlsaXR5U2VydmljZS5kZWxldGVOdWxsKGNsb25lRGVlcCh0aGlzLnNlYXJjaEZvcm0oKT8uZ2V0UmF3VmFsdWUoKSkpO1xuICAgIC8vIGRlYnVnZ2VyO1xuICAgIGlmICh0aGlzLmlzVGFibGVQYWdpbmF0ZWQoKSkge1xuICAgICAgaWYgKCF0aGlzLmRhdGEoKSkgdGhpcy5sb2FkaW5nLnNldCh0cnVlKTtcbiAgICAgIHRoaXMuZGF0YS5zZXQoW10pO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMudGFibGVIVFRQU1JFRj8uc2VhcmNoKHJlcSk7XG4gICAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgfSwgMCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlYXJjaEZ1bmN0aW9uKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmxvYWRpbmcuc2V0KHRydWUpO1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgbGFzdFZhbHVlRnJvbShcbiAgICAgICAgICB0aGlzLnNlYXJjaEZ1bmN0aW9uKCkoe1xuICAgICAgICAgICAgLi4ucmVxLFxuICAgICAgICAgICAgc29ydEJ5OiB0aGlzLm9yZGVyRmllbGQoKSB8fCAnY3JlYXRlZE9uJyxcbiAgICAgICAgICAgIHNvcnREaXJlY3Rpb246IHRoaXMub3JkZXJEaXJlY3Rpb24oKT8udG9VcHBlckNhc2UoKSB8fCAnREVTQycsXG4gICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuZGF0YS5zZXQoZGF0YT8uWydjb250ZW50J10gfHwgZGF0YSk7XG4gICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihFcnJvcik7XG4gICAgICB9XG4gICAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMudWFTLmFkZCh7XG4gICAgICAgIGNvZGU6IEVVQS5zZWFyY2hlZCxcbiAgICAgICAgYWN0aXZpdHlEZXNjcmlwdGlvbjogdGhpcy5sYWJlbCgpICsgJyAnICsgSlNPTi5zdHJpbmdpZnkocmVxKSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBkZWJ1Z2dlcjtcbiAgICB9XG4gIH1cblxuICBzYXZlUXVlcnkocXVlcnkgPSB0aGlzLnNlYXJjaEZvcm1WYWx1ZSgpKSB7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHtcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgIHE6IE9iamVjdC5rZXlzKHF1ZXJ5KVxuICAgICAgICAgIC5maWx0ZXIoKHgpID0+IHF1ZXJ5W3hdICE9IG51bGwpXG4gICAgICAgICAgLm1hcCgoaykgPT4gYCR7a30ke3RoaXMuZGVsaW1pdGVyV29yZH0ke3F1ZXJ5W2tdfWApXG4gICAgICAgICAgLmpvaW4odGhpcy5kZWxpbWl0ZXJGaWVsZCksXG4gICAgICB9LFxuICAgICAgcmVwbGFjZVVybDogdHJ1ZSxcbiAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUsXG4gICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxuICAgIH0pO1xuICB9XG4gIHJvd0NsaWNrKGUpIHtcbiAgICB0aGlzLl9yb3dDbGljay5lbWl0KGUpO1xuICB9XG5cbiAgZ2V0IHNlbGVjdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZUhUVFBTUkVGPy5zZWxlY3RlZEl0ZW1zIHx8IHRoaXMudGFibGVQbGFpblJlZj8uc2VsZWN0ZWRJdGVtcztcbiAgfVxuICBzZWxlY3Rpb25TaWduYWwgPSBzaWduYWw8VFJvd1tdPihbXSk7XG5cbiAgaXNBbnlTZWxlY3RlZCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB0aCA9IHRoaXMudGFibGVIVFRQU1JFRlNpZ25hbCgpPy5pc0FueVNlbGVjdGVkKCksXG4gICAgICB0cCA9IHRoaXMudGFibGVQbGFpblJlZlNpZ25hbCgpPy5pc0FueVNlbGVjdGVkKCk7XG4gICAgcmV0dXJuIHRoIHx8IHRwO1xuICB9KTtcbiAgcHJvdGVjdGVkIHNldFNlbGVjdGlvbigpIHtcbiAgICB0aGlzLnNlbGVjdGlvblNpZ25hbC5zZXQoXG4gICAgICB0aGlzLnRhYmxlSFRUUFNSRUY/LnNlbGVjdGVkSXRlbXNTaWduYWwoKSB8fCB0aGlzLnRhYmxlUGxhaW5SZWY/LnNlbGVjdGVkSXRlbXNTaWduYWwoKSxcbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNlYXJjaEZvcm1TY2hlbWE8XG4gIFRRdWVyeSBleHRlbmRzIElPYmplY3RMaXRlcmFsID0gYW55LFxuICBUUm93IGV4dGVuZHMgSU9iamVjdExpdGVyYWwgPSBhbnksXG4+IGV4dGVuZHMgSUJhc2VGb3JtU2NoZW1hPFxuICAgIFRRdWVyeSxcbiAgICBGaW5kSXRlbUNvbXBvbmVudDxUUXVlcnksIFRSb3c+LFxuICAgIHtcbiAgICAgIFtLIGluIGtleW9mIFRRdWVyeV06IEFic3RyYWN0Q29udHJvbDxhbnksIGFueT47XG4gICAgfVxuICA+IHtcbiAgc3RhbmRhbG9uZT86IGJvb2xlYW47XG4gIGFjdGlvbj86IChyb3c6IFRSb3csIGNlbGw6IGFueSwgZm9ybT86IEZvcm1Hcm91cDxJU3RyaWN0Rm9ybUdyb3VwPFRRdWVyeT4+KSA9PiBhbnk7XG59XG4iLCI8bG9hZGVyIFtsb2FkaW5nXT1cImxvYWRpbmcoKVwiPlxuICBAaWYgKCFoaWRlRm9ybSgpICYmIHNlYXJjaEZvcm0oKSkge1xuICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwic2VhcmNoRm9ybSgpXCIgKG5nU3VibWl0KT1cInNlYXJjaCgpXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICBAZm9yIChzY2hlbWUgb2YgY29tcHV0ZWRGb3JtU2NoZW1hKCk7IHRyYWNrIHNjaGVtZSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ7eyBncmlkQ2xhc3MoKSB9fSBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtZW5kXCI+XG4gICAgICAgICAgICAgIEBzd2l0Y2ggKHRydWUpIHtcbiAgICAgICAgICAgICAgICBAY2FzZSAoc2NoZW1lLnR5cGUgPT0gJ3RlbCcpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgPGFwcC1waG9uZS1udW1iZXJcbiAgICAgICAgICAgICAgICAgICAgICBbZm9ybV09XCJzY2hlbWUuZm9ybVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cInNjaGVtZS5sYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgW25hbWVdPVwic2NoZW1lLmZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICBbc2hvd0xhYmVsXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbc2hvd1ZhbGlkYXRpb25dPVwic2NoZW1lLnNob3dWYWxpZGF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICBbc2hvd1ZhbGlkYXRpb25JY29uXT1cInNjaGVtZS5zaG93VmFsaWRhdGlvbkljb25cIlxuICAgICAgICAgICAgICAgICAgICAgIFtjb3VudHJ5Q29kZTNdPVwic2NoZW1lLmNvdW50cnlDb2RlM1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInNjaGVtZS5kaXNhYmxlZElmIHwgZnVuY3Rpb25DYWxsZXIyOiBzZWFyY2hGb3JtVmFsdWUoKSA6IChzY2hlbWUuZmllbGQgfCB0b0FueSlcIlxuICAgICAgICAgICAgICAgICAgICAgICNpbnB1dFRhZyAvPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKHNob3dWYWxpZGF0aW9uTXNnKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8YXBwLXZhbGlkYXRpb24tbWVzc2FnZSBbaW5wdXRdPVwiaW5wdXRUYWdcIiAvPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGNhc2UgKHNjaGVtZS50eXBlID09ICdhdXRvY29tcGxldGUnKSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtYXV0b2NvbXBsZXRlXG4gICAgICAgICAgICAgICAgICAgICAgW2Zvcm1dPVwic2NoZW1lLmZvcm1cIlxuICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJzY2hlbWUubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbEZpZWxkXT1cInNjaGVtZS5sYWJlbEZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXV0b1BpY2tWYWx1ZUZpZWxkXT1cInNjaGVtZS5hdXRvUGlja1ZhbHVlRmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbFR5cGVdPVwic2NoZW1lLmxhYmVsVHlwZSB8IHRvQW55XCJcbiAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc0Z1bmNdPVwic2NoZW1lLm9wdGlvbnNGdW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJzY2hlbWUuZmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25Gb3JtYXR0ZXJdPVwic2NoZW1lLm9wdGlvbkZvcm1hdHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlRmllbGRdPVwic2NoZW1lLnZhbHVlRmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInNjaGVtZS5vcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICBbaGludF09XCJzY2hlbWUuaGludFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInNjaGVtZS5kaXNhYmxlZElmIHwgZnVuY3Rpb25DYWxsZXIyOiBzZWFyY2hGb3JtVmFsdWUgOiAoc2NoZW1lLmZpZWxkIHwgdG9BbnkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAjaW5wdXRUYWcgLz5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChzaG93VmFsaWRhdGlvbk1zZygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPGFwcC12YWxpZGF0aW9uLW1lc3NhZ2UgW2lucHV0XT1cImlucHV0VGFnXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBkZWZhdWx0IHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgPGZvcm0+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImd4LTIgcm93IGFsaWduLWl0ZW1zLWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWlucHV0LWJhc2ljXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgI2Zvcm1GaWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cInNjaGVtZS5maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1dPVwic2NoZW1lLmZvcm1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cInNjaGVtZS50eXBlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b1BpY2tWYWx1ZUZpZWxkXT1cInNjaGVtZS5hdXRvUGlja1ZhbHVlRmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZUZpZWxkXT1cInNjaGVtZS52YWx1ZUZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxUeXBlXT1cInNjaGVtZS5sYWJlbFR5cGUgfCB0b0FueVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRTaWduYWxdPVwic2NoZW1lLmNoZWNrZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93VmFsaWRhdGlvbl09XCIhIXNjaGVtZS5hc3luY1ZhbGlkYXRvcnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93VmFsaWRhdGlvbkljb25dPVwiISFzY2hlbWUuYXN5bmNWYWxpZGF0b3JzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbm9Gb3JtYXRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsRmllbGRdPVwic2NoZW1lLmxhYmVsRmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25Gb3JtYXR0ZXJdPVwic2NoZW1lLm9wdGlvbkZvcm1hdHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwic2NoZW1lLm9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkZWNpbWFsUG9pbnRzXT1cInNjaGVtZS5kZWNpbWFsUG9pbnRzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGludF09XCJzY2hlbWUuaGludFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21heF09XCJzY2hlbWUubWF4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWluXT1cInNjaGVtZS5taW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJzY2hlbWUucGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJzY2hlbWUubGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzY2hlbWUuZGlzYWJsZWRJZiB8IGZ1bmN0aW9uQ2FsbGVyMjogc2VhcmNoRm9ybVZhbHVlIDogKHNjaGVtZS5maWVsZCB8IHRvQW55KVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoc2NoZW1lLnN0YW5kYWxvbmUgJiYgc2NoZW1lLmFjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWJ0blxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXA9XCJzaG93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhZm9ybUZpZWxkPy52YWxpZFNpZ25hbCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvblR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1jbGljayk9XCJzY2hlbWUuYWN0aW9uKGFsbFNlYXJjaEZvcm1WYWx1ZSgpLCBmb3JtRmllbGQudmFsdWVTaWduYWwoKSwgc3RhbmRhbG9uZUZvcm0oKSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoc2NoZW1lLmFjdGlvbiAmJiAhc2NoZW1lLnN0YW5kYWxvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1idG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uXT1cInNjaGVtZS5pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uQnRuXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uVHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWNsaWNrKT1cInNjaGVtZS5hY3Rpb24oYWxsU2VhcmNoRm9ybVZhbHVlKCksIGZvcm1GaWVsZC52YWx1ZVNpZ25hbCgpLCBzZWFyY2hGb3JtKCkpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgQGlmIChzaG93VmFsaWRhdGlvbk1zZygpKSB7XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtdmFsaWRhdGlvbi1tZXNzYWdlIFtpbnB1dF09XCJmb3JtRmllbGRcIiAvPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGQtZmxleFwiPlxuICAgICAgICAgIEBpZiAoc2hvd0NsZWFyQnRuKCkpIHtcbiAgICAgICAgICAgIDxhcHAtYnRuIHR5cGU9XCJkYW5nZXItb3V0bGluZVwiIHRleHQ9XCJDbGVhclwiIGljb249XCJkZWxldGVcIiAobWNsaWNrKT1cImNsZWFyRmlsdGVycygpXCIgLz5cbiAgICAgICAgICB9XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJteC0xXCI+PC9zcGFuPlxuICAgICAgICAgIEBpZiAoc2hvd1NlYXJjaEJ0bigpKSB7XG4gICAgICAgICAgICA8YXBwLWJ0blxuICAgICAgICAgICAgICBbZ3JvdXBdPVwiJ3NlYXJjaCdcIlxuICAgICAgICAgICAgICBbaWNvbkJ0bl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgdGV4dD1cIlNlYXJjaFwiXG4gICAgICAgICAgICAgIGFjdGlvblR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgICBbZXhjbHVkZUxvZ2dpbmddPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhc2VhcmNoRnVuY3Rpb24oKSAmJiAhaXNUYWJsZVBhZ2luYXRlZCgpXCJcbiAgICAgICAgICAgICAgKG1jbGljayk9XCJzZWFyY2goKVwiIC8+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAoY3JlYXRlQnV0dG9uKCkpIHtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXgtMVwiPjwvc3Bhbj5cbiAgICAgICAgICAgIEBpZiAoY3JlYXRlQnRuUm91dGUoKSkge1xuICAgICAgICAgICAgICA8YXBwLWJ0biB0eXBlPVwib3V0bGluZVwiIHRleHQ9XCJDcmVhdGVcIiBpY29uPVwiYWRkXCIgKG1jbGljayk9XCJjbGlja2VkQ3JlYXRlLmVtaXQoKVwiIHJvdXRlckxpbms9XCJ7eyBjcmVhdGVCdG5Sb3V0ZSgpIH19XCIgLz5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICA8YXBwLWJ0biB0eXBlPVwib3V0bGluZVwiIHRleHQ9XCJDcmVhdGVcIiBpY29uPVwiYWRkXCIgKG1jbGljayk9XCJjbGlja2VkQ3JlYXRlLmVtaXQoKVwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZm9ybT5cbiAgfVxuXG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIlt0YWJsZVBhbmVsXVwiPjwvbmctY29udGVudD5cblxuICBAaWYgKGRpc3BsYXllZENvbHVtbnMoKT8ubGVuZ3RoKSB7XG4gICAgPGRpdiBjbGFzcz1cIm10LTNcIiBbaGlkZGVuXT1cIiFzaG93RGF0YSgpIHx8ICghZGF0YSgpICYmICFpc1RhYmxlUGFnaW5hdGVkKCkpXCI+XG4gICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICBAaWYgKGlzVGFibGVQYWdpbmF0ZWQoKSkge1xuICAgICAgICAgIDx0YWJsZS1odHRwc1xuICAgICAgICAgICAgI3RhYmxlSFRUUFNcbiAgICAgICAgICAgIFtzZWFyY2hJZk5vUXVlcnldPVwic2VhcmNoSWZOb1F1ZXJ5KClcIlxuICAgICAgICAgICAgW2Rpc3BsYXllZENvbHVtbnNdPVwiZGlzcGxheWVkQ29sdW1ucygpXCJcbiAgICAgICAgICAgIFtvYnNlcnZhYmxlRnVuY109XCJzZWFyY2hPYnNlcnZhYmxlRnVuYygpXCJcbiAgICAgICAgICAgIChyb3dDbGljayk9XCJyb3dDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2VkKT1cInNldFNlbGVjdGlvbigpXCJcbiAgICAgICAgICAgIFtjZW50ZXJDZWxsc109XCJjZW50ZXJDZWxscygpXCJcbiAgICAgICAgICAgIFtleHBhbmRlZFJvd1RlbXBsYXRlXT1cImV4cGFuZGVkUm93VGVtcGxhdGUoKVwiXG4gICAgICAgICAgICBbaXNFeHBhbmRhYmxlXT1cImlzRXhwYW5kYWJsZSgpXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCJsYWJlbCgpXCJcbiAgICAgICAgICAgIFtub3dyYXBdPVwibm93cmFwKClcIlxuICAgICAgICAgICAgW29yZGVyRGlyZWN0aW9uXT1cIm9yZGVyRGlyZWN0aW9uKClcIlxuICAgICAgICAgICAgW29yZGVyRmllbGRdPVwib3JkZXJGaWVsZCgpXCJcbiAgICAgICAgICAgIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZSgpXCJcbiAgICAgICAgICAgIFtyb3dPcHRpb25zXT1cIm9wdGlvbnMoKVwiXG4gICAgICAgICAgICBbc2hvd0FkZGl0aW9uYWxDb2x1bW5zXT1cInNob3dBZGRpdGlvbmFsQ29sdW1ucygpXCJcbiAgICAgICAgICAgIFtzaG93RXhwb3J0XT1cInNob3dFeHBvcnQoKVwiXG4gICAgICAgICAgICBbc2hvd1JlZnJlc2hCdG5dPVwic2hvd1JlZnJlc2hCdG4oKVwiXG4gICAgICAgICAgICBbc21hbGxlckZvbnRzXT1cInNtYWxsZXJGb250cygpXCJcbiAgICAgICAgICAgIFtzdGFydFNlY3Rpb25UZW1wbGF0ZV09XCJzdGFydFNlY3Rpb25UZW1wbGF0ZSgpXCJcbiAgICAgICAgICAgIFt1c2VTZWxlY3Rpb25dPVwidXNlU2VsZWN0aW9uKClcIlxuICAgICAgICAgICAgbm9JdGVtVHh0PVwiTm8gcmVzdWx0cyBmb3VuZFwiIC8+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDx0YWJsZS1wbGFpblxuICAgICAgICAgICAgW2Rpc3RpbmN0XT1cInRydWVcIlxuICAgICAgICAgICAgW3Nob3dQYWdlcl09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZSgpXCJcbiAgICAgICAgICAgIFtjZW50ZXJDZWxsc109XCJmYWxzZVwiXG4gICAgICAgICAgICBbc3RhcnRTZWN0aW9uVGVtcGxhdGVdPVwic3RhcnRTZWN0aW9uVGVtcGxhdGUoKVwiXG4gICAgICAgICAgICBbc21hbGxlckZvbnRzXT1cInNtYWxsZXJGb250cygpXCJcbiAgICAgICAgICAgIFtub3dyYXBdPVwibm93cmFwKClcIlxuICAgICAgICAgICAgW3Nob3dGaWx0ZXJdPVwic2hvd0ZpbHRlcigpXCJcbiAgICAgICAgICAgIFtzaG93RXhwb3J0XT1cInNob3dFeHBvcnQoKVwiXG4gICAgICAgICAgICBbaXNFeHBhbmRhYmxlXT1cImlzRXhwYW5kYWJsZSgpXCJcbiAgICAgICAgICAgIFtleHBhbmRlZFJvd1RlbXBsYXRlXT1cImV4cGFuZGVkUm93VGVtcGxhdGUoKVwiXG4gICAgICAgICAgICBbbGFiZWxdPVwibGFiZWwoKVwiXG4gICAgICAgICAgICBub0l0ZW1UeHQ9XCJObyByZXN1bHRzIGZvdW5kXCJcbiAgICAgICAgICAgIChyb3dDbGljayk9XCJyb3dDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgIFtvcmRlckZpZWxkXT1cIm9yZGVyRmllbGQoKVwiXG4gICAgICAgICAgICBbcm93T3B0aW9uc109XCJvcHRpb25zKClcIlxuICAgICAgICAgICAgW3Nob3dBZGRpdGlvbmFsQ29sdW1uc109XCJzaG93QWRkaXRpb25hbENvbHVtbnMoKVwiXG4gICAgICAgICAgICBbb3JkZXJEaXJlY3Rpb25dPVwib3JkZXJEaXJlY3Rpb24oKVwiXG4gICAgICAgICAgICBbZGlzcGxheWVkQ29sdW1uc109XCJkaXNwbGF5ZWRDb2x1bW5zKClcIlxuICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZWQpPVwic2V0U2VsZWN0aW9uKClcIlxuICAgICAgICAgICAgW2RhdGFdPVwiZGF0YSgpXCIgLz5cbiAgICAgICAgfVxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIH1cbjwvbG9hZGVyPlxuIl19
@@ -6,13 +6,13 @@ import { TablePlainModule } from '../../../Shared/components/table-plain/table-p
6
6
  import { SharedModule } from '../../../Shared/shared.module';
7
7
  import * as i0 from "@angular/core";
8
8
  export class FindItemModule {
9
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: FindItemModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
10
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.2.3", ngImport: i0, type: FindItemModule, imports: [CommonModule, TablePlainModule, TableHttpsModule, SharedModule,
9
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: FindItemModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
10
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.0", ngImport: i0, type: FindItemModule, imports: [CommonModule, TablePlainModule, TableHttpsModule, SharedModule,
11
11
  FindItemComponent], exports: [FindItemComponent] }); }
12
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: FindItemModule, imports: [CommonModule, TablePlainModule, TableHttpsModule, SharedModule,
12
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: FindItemModule, imports: [CommonModule, TablePlainModule, TableHttpsModule, SharedModule,
13
13
  FindItemComponent] }); }
14
14
  }
15
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: FindItemModule, decorators: [{
15
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: FindItemModule, decorators: [{
16
16
  type: NgModule,
17
17
  args: [{
18
18
  imports: [
@@ -6,10 +6,10 @@ export class WatermarkComponent {
6
6
  constructor() {
7
7
  this.imgPath = model(environment.images.watermark);
8
8
  }
9
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: WatermarkComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
10
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "17.2.3", type: WatermarkComponent, isStandalone: true, selector: "watermark", inputs: { imgPath: { classPropertyName: "imgPath", publicName: "imgPath", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { imgPath: "imgPathChange" }, ngImport: i0, template: "<div class=\"watermark\" [ngStyle]=\"{'background-image':'url('+imgPath()+')'}\">\n<!-- <img [src]=\"img\" alt=\"\"> -->\n</div>", styles: [".watermark{width:200px;height:200px;opacity:.4;position:fixed;bottom:10px;left:10px;z-index:-1;object-fit:contain;object-position:bottom;background-position:bottom;background-size:contain;background-repeat:no-repeat}\n"], dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] }); }
9
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: WatermarkComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
10
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "17.3.0", type: WatermarkComponent, isStandalone: true, selector: "watermark", inputs: { imgPath: { classPropertyName: "imgPath", publicName: "imgPath", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { imgPath: "imgPathChange" }, ngImport: i0, template: "<div class=\"watermark\" [ngStyle]=\"{'background-image':'url('+imgPath()+')'}\">\n<!-- <img [src]=\"img\" alt=\"\"> -->\n</div>", styles: [".watermark{width:200px;height:200px;opacity:.4;position:fixed;bottom:10px;left:10px;z-index:-1;object-fit:contain;object-position:bottom;background-position:bottom;background-size:contain;background-repeat:no-repeat}\n"], dependencies: [{ kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] }); }
11
11
  }
12
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: WatermarkComponent, decorators: [{
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: WatermarkComponent, decorators: [{
13
13
  type: Component,
14
14
  args: [{ selector: 'watermark', standalone: true, imports: [NgStyle], template: "<div class=\"watermark\" [ngStyle]=\"{'background-image':'url('+imgPath()+')'}\">\n<!-- <img [src]=\"img\" alt=\"\"> -->\n</div>", styles: [".watermark{width:200px;height:200px;opacity:.4;position:fixed;bottom:10px;left:10px;z-index:-1;object-fit:contain;object-position:bottom;background-position:bottom;background-size:contain;background-repeat:no-repeat}\n"] }]
15
15
  }], ctorParameters: () => [] });
@@ -49,11 +49,11 @@ const routes = [
49
49
  },
50
50
  ];
51
51
  export class ExtraPagesRoutingModule {
52
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: ExtraPagesRoutingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
53
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.2.3", ngImport: i0, type: ExtraPagesRoutingModule, imports: [i1.RouterModule], exports: [RouterModule] }); }
54
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: ExtraPagesRoutingModule, imports: [RouterModule.forChild(routes), RouterModule] }); }
52
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: ExtraPagesRoutingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
53
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.0", ngImport: i0, type: ExtraPagesRoutingModule, imports: [i1.RouterModule], exports: [RouterModule] }); }
54
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: ExtraPagesRoutingModule, imports: [RouterModule.forChild(routes), RouterModule] }); }
55
55
  }
56
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: ExtraPagesRoutingModule, decorators: [{
56
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: ExtraPagesRoutingModule, decorators: [{
57
57
  type: NgModule,
58
58
  args: [{
59
59
  imports: [RouterModule.forChild(routes)],
@@ -3,13 +3,13 @@ import { CommonModule } from '@angular/common';
3
3
  import { ExtraPagesRoutingModule } from './extra-pages-routing.module';
4
4
  import * as i0 from "@angular/core";
5
5
  export class ETSExtraPagesModule {
6
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: ETSExtraPagesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
7
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.2.3", ngImport: i0, type: ETSExtraPagesModule, imports: [CommonModule,
6
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: ETSExtraPagesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
7
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.0", ngImport: i0, type: ETSExtraPagesModule, imports: [CommonModule,
8
8
  ExtraPagesRoutingModule] }); }
9
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: ETSExtraPagesModule, imports: [CommonModule,
9
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: ETSExtraPagesModule, imports: [CommonModule,
10
10
  ExtraPagesRoutingModule] }); }
11
11
  }
12
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: ETSExtraPagesModule, decorators: [{
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: ETSExtraPagesModule, decorators: [{
13
13
  type: NgModule,
14
14
  args: [{
15
15
  declarations: [],
@@ -5,11 +5,11 @@ import * as i0 from "@angular/core";
5
5
  import * as i1 from "@angular/router";
6
6
  const routes = [{ path: '', component: LoggerComponent }];
7
7
  export class LoggerRoutingModule {
8
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: LoggerRoutingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
9
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.2.3", ngImport: i0, type: LoggerRoutingModule, imports: [i1.RouterModule], exports: [RouterModule] }); }
10
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: LoggerRoutingModule, imports: [RouterModule.forChild(routes), RouterModule] }); }
8
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: LoggerRoutingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
9
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.0", ngImport: i0, type: LoggerRoutingModule, imports: [i1.RouterModule], exports: [RouterModule] }); }
10
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: LoggerRoutingModule, imports: [RouterModule.forChild(routes), RouterModule] }); }
11
11
  }
12
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: LoggerRoutingModule, decorators: [{
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: LoggerRoutingModule, decorators: [{
13
13
  type: NgModule,
14
14
  args: [{
15
15
  imports: [RouterModule.forChild(routes)],
@@ -52,10 +52,10 @@ export class LoggerComponent {
52
52
  downloaded() {
53
53
  this.uS.notify('Downloaded');
54
54
  }
55
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: LoggerComponent, deps: [{ token: i1.LoggerService }, { token: i2.UtilityService }], target: i0.ɵɵFactoryTarget.Component }); }
56
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.3", type: LoggerComponent, isStandalone: true, selector: "app-logger", ngImport: i0, template: " <div class=\"container-fluid py-5\">\n <div class=\"d-flex justify-content-between align-items-center\">\n <h3 class=\"text-center text-primary mb-4\">Logged Select Requests</h3>\n <div class=\"d-flex\">\n <app-btn help=\"Refresh\" [showHelpIcon]=\"false\" [iconBtn]=\"true\" icon=\"renew\" (mclick)=\"ngOnInit()\" ></app-btn>\n </div>\n </div>\n @if (this.lS.isAuthed()) {\n <div class=\"\">\n <table class=\"table border table-bordered\">\n <thead>\n <th></th>\n <th width=\"30%\">Payload</th>\n <th width=\"30%\">Response</th>\n <th>Page Route</th>\n <th>Endpoint</th>\n <th>Files</th>\n <th>Status</th>\n <th>Time</th>\n <th> </th>\n </thead>\n <tbody>\n <tr *ngFor=\"let item of logs();let i=index; trackBy:trackByID\"\n [ngClass]=\"{failure:!item?.isSuccess,success:item?.isSuccess}\">\n <!-- <td>{{item?.title}}</td> -->\n <td>{{i+1}}</td>\n <td>\n <div class=\"payload\" PSBox>{{item?.payload|json|trimText:200}}</div>\n </td>\n <td>\n <div class=\"payload\" PSBox>{{(item?.response||item?.error)|json|trimText:200}}</div>\n </td>\n <td><a routerLink=\"{{item.route}}\" target=\"_blank\">{{item?.route}}</a></td>\n <td>{{item?.endpoint}}</td>\n <td>\n <div class=\"\">\n <div class=\"\" *ngFor=\"let file of item?.files\">\n <div>Title: {{file.title}}</div>\n <div>Size: {{file.size}}</div>\n <div>Type: {{file.type}}</div>\n </div>\n </div>\n </td>\n <td>{{item?.isSuccess?'Success':'Failure'}}</td>\n <td>{{item?.time|date:'long'}}</td>\n <td>\n <div class=\" \">\n <app-btn icon=\"clone\" [cdkCopyToClipboard]=\"item?.payload|json\" (mclick)=\"copied()\" [iconBtn]=\"true\" type=\"outline\" help=\"Copy paylod to clipboard\" [showHelpIcon]=\"false\"></app-btn>\n <div class=\"my-1\"></div>\n <app-btn icon=\"download\" [iconBtn]=\"true\" type=\"outline\" help=\"Download payload\" (mclick)=\"makeTextFile(item)\" [showHelpIcon]=\"false\"></app-btn>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n <app-btn icon=\"lock\" type=\"secondary\" (click)=\"lock()\">Lock Logs</app-btn>\n </div>\n }\n @else {\n <app-btn icon=\"unlock\" type=\"secondary\" (click)=\"ngOnInit()\">Unlock Logs</app-btn>\n }\n\n\n </div>\n", styles: ["td{height:50px!important;overflow:auto!important}td{text-align:left!important}.failure{background-color:#fe9f9f}.success{background-color:#caffca}.payload{max-height:100px;position:relative}\n"], dependencies: [{ kind: "component", type: BtnComponent, selector: "app-btn", inputs: ["formSchema", "debug", "centerBtn", "danger", "warning", "loading", "icon", "rightIcon", "leftIcon", "type", "group", "actionType", "animate", "excludeLogging", "loggingValue", "badge", "class", "customIcon", "form", "forms", "help", "iconBtn", "mclass", "showHelpIcon", "rightCustomIcon", "leftCustomIcon", "text", "valid", "mini", "onFormInvalid", "disabled"], outputs: ["loadingChange", "leftCustomIconChange", "mclick", "disabledChange"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: PSDirective, selector: "[PSBox]", inputs: ["PSBox", "PSBoxNoHorizontal", "PSBoxNoVertical"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: ClipboardModule }, { kind: "directive", type: i3.CdkCopyToClipboard, selector: "[cdkCopyToClipboard]", inputs: ["cdkCopyToClipboard", "cdkCopyToClipboardAttempts"], outputs: ["cdkCopyToClipboardCopied"] }, { kind: "pipe", type: JsonPipe, name: "json" }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: TrimTextPipe, name: "trimText" }] }); }
55
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: LoggerComponent, deps: [{ token: i1.LoggerService }, { token: i2.UtilityService }], target: i0.ɵɵFactoryTarget.Component }); }
56
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.0", type: LoggerComponent, isStandalone: true, selector: "app-logger", ngImport: i0, template: " <div class=\"container-fluid py-5\">\n <div class=\"d-flex justify-content-between align-items-center\">\n <h3 class=\"text-center text-primary mb-4\">Logged Select Requests</h3>\n <div class=\"d-flex\">\n <app-btn help=\"Refresh\" [showHelpIcon]=\"false\" [iconBtn]=\"true\" icon=\"renew\" (mclick)=\"ngOnInit()\" ></app-btn>\n </div>\n </div>\n @if (this.lS.isAuthed()) {\n <div class=\"\">\n <table class=\"table border table-bordered\">\n <thead>\n <th></th>\n <th width=\"30%\">Payload</th>\n <th width=\"30%\">Response</th>\n <th>Page Route</th>\n <th>Endpoint</th>\n <th>Files</th>\n <th>Status</th>\n <th>Time</th>\n <th> </th>\n </thead>\n <tbody>\n <tr *ngFor=\"let item of logs();let i=index; trackBy:trackByID\"\n [ngClass]=\"{failure:!item?.isSuccess,success:item?.isSuccess}\">\n <!-- <td>{{item?.title}}</td> -->\n <td>{{i+1}}</td>\n <td>\n <div class=\"payload\" PSBox>{{item?.payload|json|trimText:200}}</div>\n </td>\n <td>\n <div class=\"payload\" PSBox>{{(item?.response||item?.error)|json|trimText:200}}</div>\n </td>\n <td><a routerLink=\"{{item.route}}\" target=\"_blank\">{{item?.route}}</a></td>\n <td>{{item?.endpoint}}</td>\n <td>\n <div class=\"\">\n <div class=\"\" *ngFor=\"let file of item?.files\">\n <div>Title: {{file.title}}</div>\n <div>Size: {{file.size}}</div>\n <div>Type: {{file.type}}</div>\n </div>\n </div>\n </td>\n <td>{{item?.isSuccess?'Success':'Failure'}}</td>\n <td>{{item?.time|date:'long'}}</td>\n <td>\n <div class=\" \">\n <app-btn icon=\"clone\" [cdkCopyToClipboard]=\"item?.payload|json\" (mclick)=\"copied()\" [iconBtn]=\"true\" type=\"outline\" help=\"Copy paylod to clipboard\" [showHelpIcon]=\"false\"></app-btn>\n <div class=\"my-1\"></div>\n <app-btn icon=\"download\" [iconBtn]=\"true\" type=\"outline\" help=\"Download payload\" (mclick)=\"makeTextFile(item)\" [showHelpIcon]=\"false\"></app-btn>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n <app-btn icon=\"lock\" type=\"secondary\" (click)=\"lock()\">Lock Logs</app-btn>\n </div>\n }\n @else {\n <app-btn icon=\"unlock\" type=\"secondary\" (click)=\"ngOnInit()\">Unlock Logs</app-btn>\n }\n\n\n </div>\n", styles: ["td{height:50px!important;overflow:auto!important}td{text-align:left!important}.failure{background-color:#fe9f9f}.success{background-color:#caffca}.payload{max-height:100px;position:relative}\n"], dependencies: [{ kind: "component", type: BtnComponent, selector: "app-btn", inputs: ["formSchema", "debug", "centerBtn", "danger", "warning", "loading", "icon", "rightIcon", "leftIcon", "type", "group", "actionType", "animate", "excludeLogging", "loggingValue", "badge", "class", "customIcon", "form", "forms", "help", "iconBtn", "mclass", "showHelpIcon", "rightCustomIcon", "leftCustomIcon", "text", "valid", "mini", "onFormInvalid", "disabled"], outputs: ["loadingChange", "leftCustomIconChange", "mclick", "disabledChange"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: PSDirective, selector: "[PSBox]", inputs: ["PSBox", "PSBoxNoHorizontal", "PSBoxNoVertical"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: ClipboardModule }, { kind: "directive", type: i3.CdkCopyToClipboard, selector: "[cdkCopyToClipboard]", inputs: ["cdkCopyToClipboard", "cdkCopyToClipboardAttempts"], outputs: ["cdkCopyToClipboardCopied"] }, { kind: "pipe", type: JsonPipe, name: "json" }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "pipe", type: TrimTextPipe, name: "trimText" }] }); }
57
57
  }
58
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: LoggerComponent, decorators: [{
58
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: LoggerComponent, decorators: [{
59
59
  type: Component,
60
60
  args: [{ selector: 'app-logger', standalone: true, imports: [
61
61
  BtnComponent,
@@ -6,11 +6,11 @@ import { SharedModule } from '../../../Shared/shared.module';
6
6
  import { ClipboardModule } from '@angular/cdk/clipboard';
7
7
  import * as i0 from "@angular/core";
8
8
  export class ETSLoggerModule {
9
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: ETSLoggerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
10
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.2.3", ngImport: i0, type: ETSLoggerModule, imports: [CommonModule, LoggerRoutingModule, SharedModule, ClipboardModule, LoggerComponent] }); }
11
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: ETSLoggerModule, imports: [CommonModule, LoggerRoutingModule, SharedModule, ClipboardModule, LoggerComponent] }); }
9
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: ETSLoggerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
10
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.0", ngImport: i0, type: ETSLoggerModule, imports: [CommonModule, LoggerRoutingModule, SharedModule, ClipboardModule, LoggerComponent] }); }
11
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: ETSLoggerModule, imports: [CommonModule, LoggerRoutingModule, SharedModule, ClipboardModule, LoggerComponent] }); }
12
12
  }
13
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: ETSLoggerModule, decorators: [{
13
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: ETSLoggerModule, decorators: [{
14
14
  type: NgModule,
15
15
  args: [{
16
16
  imports: [CommonModule, LoggerRoutingModule, SharedModule, ClipboardModule, LoggerComponent],
@@ -58,10 +58,10 @@ export class LoggerService {
58
58
  // console.log('_newLogs', cloneDeep(this._newLogs()));
59
59
  // console.log('_logs', cloneDeep(this.logs()));
60
60
  }
61
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: LoggerService, deps: [{ token: i1.ETSStorageService }], target: i0.ɵɵFactoryTarget.Injectable }); }
62
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: LoggerService, providedIn: 'root' }); }
61
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: LoggerService, deps: [{ token: i1.ETSStorageService }], target: i0.ɵɵFactoryTarget.Injectable }); }
62
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: LoggerService, providedIn: 'root' }); }
63
63
  }
64
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: LoggerService, decorators: [{
64
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: LoggerService, decorators: [{
65
65
  type: Injectable,
66
66
  args: [{
67
67
  providedIn: 'root',