ng-prime-tools 1.0.5 → 1.0.7

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 (230) hide show
  1. package/README.md +285 -0
  2. package/esm2022/lib/enums/button-color.enum.mjs +10 -0
  3. package/esm2022/lib/enums/form-input-type.enum.mjs +14 -0
  4. package/esm2022/lib/enums/index.mjs +2 -6
  5. package/esm2022/lib/enums/input-validation.enum.mjs +8 -0
  6. package/esm2022/lib/enums/public-api.mjs +7 -0
  7. package/esm2022/lib/enums/{search-criteria-type-enum.mjs → search-criteria-type.enum.mjs} +1 -1
  8. package/esm2022/lib/enums/{table-type-enum.mjs → table-type.enum.mjs} +1 -1
  9. package/esm2022/lib/models/filter-option.model.mjs +2 -0
  10. package/esm2022/lib/models/form-button.model.mjs +2 -0
  11. package/esm2022/lib/models/form-check-field.model.mjs +2 -0
  12. package/esm2022/lib/models/form-date-field.model.mjs +2 -0
  13. package/esm2022/lib/models/form-drop-down-field.model.mjs +2 -0
  14. package/esm2022/lib/models/form-field-group.model.mjs +2 -0
  15. package/esm2022/lib/models/form-field.model.mjs +2 -0
  16. package/esm2022/lib/models/form-multi-select.model.mjs +2 -0
  17. package/esm2022/lib/models/form-number-field.model.mjs +2 -0
  18. package/esm2022/lib/models/form-switch-field.model.mjs +2 -0
  19. package/esm2022/lib/models/form-text-area-field.model.mjs +2 -0
  20. package/esm2022/lib/models/form-text-field.model.mjs +2 -0
  21. package/esm2022/lib/models/index.mjs +2 -2
  22. package/esm2022/lib/models/public-api.mjs +15 -0
  23. package/esm2022/lib/models/search-criteria.model.mjs +2 -0
  24. package/esm2022/lib/models/table-column.model.mjs +2 -0
  25. package/esm2022/lib/multi-search-criteria/multi-search-criteria.component.mjs +1 -1
  26. package/esm2022/lib/ng-advanced-prime-table/ng-advanced-prime-table.component.mjs +21 -3
  27. package/esm2022/lib/ng-prime-tools.module.mjs +66 -6
  28. package/esm2022/lib/pt-check-box-input/index.mjs +2 -0
  29. package/esm2022/lib/pt-check-box-input/pt-check-box-input.component.mjs +61 -0
  30. package/esm2022/lib/pt-check-box-input/pt-check-box-input.module.mjs +20 -0
  31. package/esm2022/lib/pt-check-box-input/public-api.mjs +3 -0
  32. package/esm2022/lib/pt-date-input/index.mjs +2 -0
  33. package/esm2022/lib/pt-date-input/pt-date-input.component.mjs +85 -0
  34. package/esm2022/lib/pt-date-input/pt-date-input.module.mjs +20 -0
  35. package/esm2022/lib/pt-date-input/pt-date.service.mjs +62 -0
  36. package/esm2022/lib/pt-date-input/public-api.mjs +3 -0
  37. package/esm2022/lib/pt-dropdown/index.mjs +2 -0
  38. package/esm2022/lib/pt-dropdown/pt-dropdown.component.mjs +57 -0
  39. package/esm2022/lib/pt-dropdown/pt-dropdown.module.mjs +20 -0
  40. package/esm2022/lib/pt-dropdown/public-api.mjs +3 -0
  41. package/esm2022/lib/pt-form-builder/index.mjs +2 -0
  42. package/esm2022/lib/pt-form-builder/pt-dynamic-form-field/pt-dynamic-form-field-module.mjs +59 -0
  43. package/esm2022/lib/pt-form-builder/pt-dynamic-form-field/pt-dynamic-form-field.component.mjs +55 -0
  44. package/esm2022/lib/pt-form-builder/pt-form-builder.component.mjs +77 -0
  45. package/esm2022/lib/pt-form-builder/pt-form-builder.module.mjs +32 -0
  46. package/esm2022/lib/pt-form-builder/public-api.mjs +3 -0
  47. package/esm2022/lib/pt-multi-select/index.mjs +2 -0
  48. package/esm2022/lib/pt-multi-select/pt-multi-select.component.mjs +57 -0
  49. package/esm2022/lib/pt-multi-select/pt-multi-select.module.mjs +20 -0
  50. package/esm2022/lib/pt-multi-select/public-api.mjs +3 -0
  51. package/esm2022/lib/pt-number-input/index.mjs +2 -0
  52. package/esm2022/lib/pt-number-input/pt-number-input.component.mjs +88 -0
  53. package/esm2022/lib/pt-number-input/pt-number-input.module.mjs +43 -0
  54. package/esm2022/lib/pt-number-input/public-api.mjs +3 -0
  55. package/esm2022/lib/pt-switch-input/index.mjs +2 -0
  56. package/esm2022/lib/pt-switch-input/pt-switch-input.component.mjs +62 -0
  57. package/esm2022/lib/pt-switch-input/pt-switch-input.module.mjs +20 -0
  58. package/esm2022/lib/pt-switch-input/public-api.mjs +3 -0
  59. package/esm2022/lib/pt-text-area-input/index.mjs +2 -0
  60. package/esm2022/lib/pt-text-area-input/pt-text-area-input.component.mjs +83 -0
  61. package/esm2022/lib/pt-text-area-input/pt-text-area-input.module.mjs +36 -0
  62. package/esm2022/lib/pt-text-area-input/public-api.mjs +3 -0
  63. package/esm2022/lib/pt-text-input/index.mjs +2 -0
  64. package/esm2022/lib/pt-text-input/pt-text-input.component.mjs +86 -0
  65. package/esm2022/lib/pt-text-input/pt-text-input.module.mjs +36 -0
  66. package/esm2022/lib/pt-text-input/public-api.mjs +3 -0
  67. package/esm2022/lib/types/date-format.type.mjs +2 -0
  68. package/esm2022/lib/types/date-input.type.mjs +2 -0
  69. package/esm2022/lib/types/index.mjs +2 -0
  70. package/esm2022/lib/types/public-api.mjs +2 -0
  71. package/esm2022/lib/utils/date.util.mjs +69 -0
  72. package/esm2022/public-api.mjs +11 -2
  73. package/fesm2022/ng-prime-tools.mjs +1119 -20
  74. package/fesm2022/ng-prime-tools.mjs.map +1 -1
  75. package/lib/enums/button-color.enum.d.ts +9 -0
  76. package/lib/enums/button-color.enum.d.ts.map +1 -0
  77. package/lib/enums/form-input-type.enum.d.ts +13 -0
  78. package/lib/enums/form-input-type.enum.d.ts.map +1 -0
  79. package/lib/enums/index.d.ts +1 -5
  80. package/lib/enums/index.d.ts.map +1 -1
  81. package/lib/enums/input-validation.enum.d.ts +7 -0
  82. package/lib/enums/input-validation.enum.d.ts.map +1 -0
  83. package/lib/enums/public-api.d.ts +6 -0
  84. package/lib/enums/public-api.d.ts.map +1 -0
  85. package/lib/enums/{search-criteria-type-enum.d.ts → search-criteria-type.enum.d.ts} +1 -1
  86. package/lib/enums/search-criteria-type.enum.d.ts.map +1 -0
  87. package/lib/enums/{table-type-enum.d.ts → table-type.enum.d.ts} +1 -1
  88. package/lib/enums/table-type.enum.d.ts.map +1 -0
  89. package/lib/models/{filter-option.d.ts → filter-option.model.d.ts} +1 -1
  90. package/lib/models/filter-option.model.d.ts.map +1 -0
  91. package/lib/models/form-button.model.d.ts +10 -0
  92. package/lib/models/form-button.model.d.ts.map +1 -0
  93. package/lib/models/form-check-field.model.d.ts +4 -0
  94. package/lib/models/form-check-field.model.d.ts.map +1 -0
  95. package/lib/models/form-date-field.model.d.ts +11 -0
  96. package/lib/models/form-date-field.model.d.ts.map +1 -0
  97. package/lib/models/form-drop-down-field.model.d.ts +5 -0
  98. package/lib/models/form-drop-down-field.model.d.ts.map +1 -0
  99. package/lib/models/form-field-group.model.d.ts +7 -0
  100. package/lib/models/form-field-group.model.d.ts.map +1 -0
  101. package/lib/models/form-field.model.d.ts +16 -0
  102. package/lib/models/form-field.model.d.ts.map +1 -0
  103. package/lib/models/form-multi-select.model.d.ts +5 -0
  104. package/lib/models/form-multi-select.model.d.ts.map +1 -0
  105. package/lib/models/form-number-field.model.d.ts +11 -0
  106. package/lib/models/form-number-field.model.d.ts.map +1 -0
  107. package/lib/models/form-switch-field.model.d.ts +4 -0
  108. package/lib/models/form-switch-field.model.d.ts.map +1 -0
  109. package/lib/models/form-text-area-field.model.d.ts +11 -0
  110. package/lib/models/form-text-area-field.model.d.ts.map +1 -0
  111. package/lib/models/form-text-field.model.d.ts +8 -0
  112. package/lib/models/form-text-field.model.d.ts.map +1 -0
  113. package/lib/models/index.d.ts +1 -1
  114. package/lib/models/public-api.d.ts +15 -0
  115. package/lib/models/public-api.d.ts.map +1 -0
  116. package/lib/models/{search-criteria.d.ts → search-criteria.model.d.ts} +3 -3
  117. package/lib/models/search-criteria.model.d.ts.map +1 -0
  118. package/lib/models/{table-column.d.ts → table-column.model.d.ts} +2 -2
  119. package/lib/models/table-column.model.d.ts.map +1 -0
  120. package/lib/multi-search-criteria/multi-search-criteria.component.d.ts +2 -2
  121. package/lib/multi-search-criteria/multi-search-criteria.component.d.ts.map +1 -1
  122. package/lib/ng-advanced-prime-table/ng-advanced-prime-table.component.d.ts +7 -1
  123. package/lib/ng-advanced-prime-table/ng-advanced-prime-table.component.d.ts.map +1 -1
  124. package/lib/ng-prime-tools.module.d.ts +8 -1
  125. package/lib/ng-prime-tools.module.d.ts.map +1 -1
  126. package/lib/pt-check-box-input/index.d.ts +2 -0
  127. package/lib/pt-check-box-input/index.d.ts.map +1 -0
  128. package/lib/pt-check-box-input/pt-check-box-input.component.d.ts +16 -0
  129. package/lib/pt-check-box-input/pt-check-box-input.component.d.ts.map +1 -0
  130. package/lib/pt-check-box-input/pt-check-box-input.module.d.ts +11 -0
  131. package/lib/pt-check-box-input/pt-check-box-input.module.d.ts.map +1 -0
  132. package/lib/pt-check-box-input/public-api.d.ts +3 -0
  133. package/lib/pt-check-box-input/public-api.d.ts.map +1 -0
  134. package/lib/pt-date-input/index.d.ts +2 -0
  135. package/lib/pt-date-input/index.d.ts.map +1 -0
  136. package/lib/pt-date-input/pt-date-input.component.d.ts +24 -0
  137. package/lib/pt-date-input/pt-date-input.component.d.ts.map +1 -0
  138. package/lib/pt-date-input/pt-date-input.module.d.ts +11 -0
  139. package/lib/pt-date-input/pt-date-input.module.d.ts.map +1 -0
  140. package/lib/pt-date-input/pt-date.service.d.ts +11 -0
  141. package/lib/pt-date-input/pt-date.service.d.ts.map +1 -0
  142. package/lib/pt-date-input/public-api.d.ts +3 -0
  143. package/lib/pt-date-input/public-api.d.ts.map +1 -0
  144. package/lib/pt-dropdown/index.d.ts +2 -0
  145. package/lib/pt-dropdown/index.d.ts.map +1 -0
  146. package/lib/pt-dropdown/pt-dropdown.component.d.ts +15 -0
  147. package/lib/pt-dropdown/pt-dropdown.component.d.ts.map +1 -0
  148. package/lib/pt-dropdown/pt-dropdown.module.d.ts +11 -0
  149. package/lib/pt-dropdown/pt-dropdown.module.d.ts.map +1 -0
  150. package/lib/pt-dropdown/public-api.d.ts +3 -0
  151. package/lib/pt-dropdown/public-api.d.ts.map +1 -0
  152. package/lib/pt-form-builder/index.d.ts +2 -0
  153. package/lib/pt-form-builder/index.d.ts.map +1 -0
  154. package/lib/pt-form-builder/pt-dynamic-form-field/pt-dynamic-form-field-module.d.ts +18 -0
  155. package/lib/pt-form-builder/pt-dynamic-form-field/pt-dynamic-form-field-module.d.ts.map +1 -0
  156. package/lib/pt-form-builder/pt-dynamic-form-field/pt-dynamic-form-field.component.d.ts +29 -0
  157. package/lib/pt-form-builder/pt-dynamic-form-field/pt-dynamic-form-field.component.d.ts.map +1 -0
  158. package/lib/pt-form-builder/pt-form-builder.component.d.ts +33 -0
  159. package/lib/pt-form-builder/pt-form-builder.component.d.ts.map +1 -0
  160. package/lib/pt-form-builder/pt-form-builder.module.d.ts +12 -0
  161. package/lib/pt-form-builder/pt-form-builder.module.d.ts.map +1 -0
  162. package/lib/pt-form-builder/public-api.d.ts +3 -0
  163. package/lib/pt-form-builder/public-api.d.ts.map +1 -0
  164. package/lib/pt-multi-select/index.d.ts +2 -0
  165. package/lib/pt-multi-select/index.d.ts.map +1 -0
  166. package/lib/pt-multi-select/pt-multi-select.component.d.ts +15 -0
  167. package/lib/pt-multi-select/pt-multi-select.component.d.ts.map +1 -0
  168. package/lib/pt-multi-select/pt-multi-select.module.d.ts +11 -0
  169. package/lib/pt-multi-select/pt-multi-select.module.d.ts.map +1 -0
  170. package/lib/pt-multi-select/public-api.d.ts +3 -0
  171. package/lib/pt-multi-select/public-api.d.ts.map +1 -0
  172. package/lib/pt-number-input/index.d.ts +2 -0
  173. package/lib/pt-number-input/index.d.ts.map +1 -0
  174. package/lib/pt-number-input/pt-number-input.component.d.ts +16 -0
  175. package/lib/pt-number-input/pt-number-input.component.d.ts.map +1 -0
  176. package/lib/pt-number-input/pt-number-input.module.d.ts +14 -0
  177. package/lib/pt-number-input/pt-number-input.module.d.ts.map +1 -0
  178. package/lib/pt-number-input/public-api.d.ts +3 -0
  179. package/lib/pt-number-input/public-api.d.ts.map +1 -0
  180. package/lib/pt-switch-input/index.d.ts +2 -0
  181. package/lib/pt-switch-input/index.d.ts.map +1 -0
  182. package/lib/pt-switch-input/pt-switch-input.component.d.ts +16 -0
  183. package/lib/pt-switch-input/pt-switch-input.component.d.ts.map +1 -0
  184. package/lib/pt-switch-input/pt-switch-input.module.d.ts +11 -0
  185. package/lib/pt-switch-input/pt-switch-input.module.d.ts.map +1 -0
  186. package/lib/pt-switch-input/public-api.d.ts +3 -0
  187. package/lib/pt-switch-input/public-api.d.ts.map +1 -0
  188. package/lib/pt-text-area-input/index.d.ts +2 -0
  189. package/lib/pt-text-area-input/index.d.ts.map +1 -0
  190. package/lib/pt-text-area-input/pt-text-area-input.component.d.ts +17 -0
  191. package/lib/pt-text-area-input/pt-text-area-input.component.d.ts.map +1 -0
  192. package/lib/pt-text-area-input/pt-text-area-input.module.d.ts +13 -0
  193. package/lib/pt-text-area-input/pt-text-area-input.module.d.ts.map +1 -0
  194. package/lib/pt-text-area-input/public-api.d.ts +3 -0
  195. package/lib/pt-text-area-input/public-api.d.ts.map +1 -0
  196. package/lib/pt-text-input/index.d.ts +2 -0
  197. package/lib/pt-text-input/index.d.ts.map +1 -0
  198. package/lib/pt-text-input/pt-text-input.component.d.ts +18 -0
  199. package/lib/pt-text-input/pt-text-input.component.d.ts.map +1 -0
  200. package/lib/pt-text-input/pt-text-input.module.d.ts +13 -0
  201. package/lib/pt-text-input/pt-text-input.module.d.ts.map +1 -0
  202. package/lib/pt-text-input/public-api.d.ts +3 -0
  203. package/lib/pt-text-input/public-api.d.ts.map +1 -0
  204. package/lib/types/date-format.type.d.ts +2 -0
  205. package/lib/types/date-format.type.d.ts.map +1 -0
  206. package/lib/types/date-input.type.d.ts +2 -0
  207. package/lib/types/date-input.type.d.ts.map +1 -0
  208. package/lib/types/index.d.ts +2 -0
  209. package/lib/types/index.d.ts.map +1 -0
  210. package/lib/types/public-api.d.ts +2 -0
  211. package/lib/types/public-api.d.ts.map +1 -0
  212. package/lib/utils/date.util.d.ts +7 -0
  213. package/lib/utils/date.util.d.ts.map +1 -0
  214. package/package.json +1 -1
  215. package/public-api.d.ts +9 -0
  216. package/public-api.d.ts.map +1 -1
  217. package/esm2022/lib/enums/public_api.mjs +0 -4
  218. package/esm2022/lib/models/filter-option.mjs +0 -2
  219. package/esm2022/lib/models/public_api.mjs +0 -5
  220. package/esm2022/lib/models/search-criteria.mjs +0 -2
  221. package/esm2022/lib/models/table-column.mjs +0 -2
  222. package/lib/enums/public_api.d.ts +0 -3
  223. package/lib/enums/public_api.d.ts.map +0 -1
  224. package/lib/enums/search-criteria-type-enum.d.ts.map +0 -1
  225. package/lib/enums/table-type-enum.d.ts.map +0 -1
  226. package/lib/models/filter-option.d.ts.map +0 -1
  227. package/lib/models/public_api.d.ts +0 -4
  228. package/lib/models/public_api.d.ts.map +0 -1
  229. package/lib/models/search-criteria.d.ts.map +0 -1
  230. package/lib/models/table-column.d.ts.map +0 -1
@@ -23,6 +23,8 @@ export class NgAdvancedPrimeTableComponent {
23
23
  this.totalRecords = 0;
24
24
  this.rowsPerPage = [];
25
25
  this.hasSearchFilter = false;
26
+ this.hasExportExcel = false;
27
+ this.hasExportPDF = false;
26
28
  this.hasColumnFilter = false;
27
29
  this.isPaginated = false;
28
30
  this.actions = [];
@@ -30,6 +32,8 @@ export class NgAdvancedPrimeTableComponent {
30
32
  // Outputs: Events emitted to the parent component
31
33
  this.filter = new EventEmitter();
32
34
  this.search = new EventEmitter();
35
+ this.exportExcelEvent = new EventEmitter();
36
+ this.exportPdfEvent = new EventEmitter();
33
37
  this.searchValue = '';
34
38
  this.validCurrencyCodes = ['USD', 'EUR', 'MAD'];
35
39
  // Component state properties
@@ -273,12 +277,18 @@ export class NgAdvancedPrimeTableComponent {
273
277
  }
274
278
  return '';
275
279
  }
280
+ exportExcel() {
281
+ this.exportExcelEvent.emit();
282
+ }
283
+ exportPdf() {
284
+ this.exportPdfEvent.emit();
285
+ }
276
286
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: NgAdvancedPrimeTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
277
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: NgAdvancedPrimeTableComponent, selector: "ng-advanced-prime-table", inputs: { data: "data", columns: "columns", totalRecords: "totalRecords", rowsPerPage: "rowsPerPage", hasSearchFilter: "hasSearchFilter", hasColumnFilter: "hasColumnFilter", isPaginated: "isPaginated", actions: "actions", isSortable: "isSortable" }, outputs: { filter: "filter", search: "search" }, viewQueries: [{ propertyName: "dt", first: true, predicate: ["dt"], descendants: true }], ngImport: i0, template: "<div class=\"table-container\">\n <div>\n <p-table\n #dt\n [value]=\"data\"\n [rows]=\"rows\"\n [paginator]=\"isPaginated\"\n [globalFilterFields]=\"globalFilterFields\"\n [rowsPerPageOptions]=\"rowsPerPage\"\n dataKey=\"id\"\n styleClass=\"p-datatable-gridlines\"\n styleClass=\"p-datatable-striped\"\n editMode=\"row\"\n >\n <ng-template pTemplate=\"caption\">\n <div class=\"flex\">\n <div>\n <h3>Total: {{ totalRecords }}</h3>\n </div>\n\n <div>\n <p-button\n label=\"Clear\"\n [outlined]=\"true\"\n icon=\"pi pi-filter-slash\"\n (click)=\"clear(dt)\"\n class=\"bt-filter-btn\"\n />\n </div>\n <div class=\"ml-auto\" *ngIf=\"hasSearchFilter\">\n <!-- Add this wrapper div with ml-auto class -->\n <p-iconField iconPosition=\"left\" class=\"ml-auto\">\n <p-inputIcon>\n <i class=\"pi pi-search\"></i>\n </p-inputIcon>\n <input\n pInputText\n type=\"text\"\n [(ngModel)]=\"searchValue\"\n (input)=\"filterGlobal($event)\"\n placeholder=\"Search keyword\"\n />\n </p-iconField>\n </div>\n </div>\n </ng-template>\n\n <ng-template pTemplate=\"header\">\n <tr>\n <th *ngFor=\"let col of columns\">\n <ng-container\n *ngIf=\"isSortable && col.isSortable !== false; else noSortHeader\"\n >\n <th pSortableColumn=\"{{ col.code }}\" style=\"width: 20%\">\n <div class=\"header-container\">\n <span>{{ col.title }}</span>\n <p-sortIcon field=\"{{ col.code }}\" />\n <ng-container *ngIf=\"col.isFilter !== false\">\n <p-columnFilter\n *ngIf=\"col.type === 'AMOUNT'\"\n display=\"menu\"\n [field]=\"col.code\"\n [type]=\"getColumnFilterType(col)\"\n [currency]=\"getCurrencySymbol(col)\"\n ></p-columnFilter>\n\n <p-columnFilter\n *ngIf=\"col.type !== 'AMOUNT'\"\n display=\"menu\"\n [field]=\"col.code\"\n display=\"menu\"\n [type]=\"getColumnFilterType(col)\"\n [type]=\"getColumnFilterType(col)\"\n >\n <ng-template\n pTemplate=\"filter\"\n let-value\n let-filterCallback=\"filterCallback\"\n *ngIf=\"getColumnFilterType(col) === 'date'\"\n >\n <p-calendar\n [ngModel]=\"value\"\n (ngModelChange)=\"filterCallback($event)\"\n [dateFormat]=\"'dd/mm/yy'\"\n ></p-calendar>\n </ng-template>\n\n <ng-template\n pTemplate=\"filter\"\n let-value\n let-filterCallback=\"filterCallback\"\n *ngIf=\"getColumnFilterType(col) === 'multiSelect'\"\n >\n <p-multiSelect\n [options]=\"col.filterOptions\"\n [ngModel]=\"value\"\n (ngModelChange)=\"filterCallback($event)\"\n [display]=\"'chip'\"\n placeholder=\"Select\"\n class=\"custom-multiselect\"\n ></p-multiSelect>\n </ng-template>\n </p-columnFilter>\n </ng-container>\n </div>\n </th>\n </ng-container>\n <ng-template #noSortHeader>\n <th>\n <div class=\"header-container\">\n <span>{{ col.title }}</span>\n <ng-container *ngIf=\"col.isFilter !== false\">\n <p-columnFilter\n *ngIf=\"col.type === 'AMOUNT'\"\n display=\"menu\"\n [field]=\"col.code\"\n [type]=\"getColumnFilterType(col)\"\n [currency]=\"getCurrencySymbol(col)\"\n ></p-columnFilter>\n\n <p-columnFilter\n *ngIf=\"col.type !== 'AMOUNT'\"\n display=\"menu\"\n [field]=\"col.code\"\n [type]=\"getColumnFilterType(col)\"\n >\n <ng-template\n pTemplate=\"filter\"\n let-value\n let-filterCallback=\"filterCallback\"\n *ngIf=\"getColumnFilterType(col) === 'date'\"\n >\n <p-calendar\n [ngModel]=\"value\"\n (ngModelChange)=\"filterCallback($event)\"\n [dateFormat]=\"'dd/mm/yy'\"\n ></p-calendar>\n </ng-template>\n\n <ng-template\n pTemplate=\"filter\"\n let-value\n let-filterCallback=\"filterCallback\"\n *ngIf=\"getColumnFilterType(col) === 'multiSelect'\"\n >\n <p-multiSelect\n [options]=\"col.filterOptions\"\n [ngModel]=\"value\"\n (ngModelChange)=\"filterCallback($event)\"\n [display]=\"'chip'\"\n placeholder=\"Select\"\n class=\"custom-multiselect\"\n ></p-multiSelect>\n </ng-template>\n </p-columnFilter>\n </ng-container>\n </div>\n </th>\n </ng-template>\n </th>\n </tr>\n </ng-template>\n\n <ng-template\n pTemplate=\"body\"\n let-data\n let-editing=\"editing\"\n let-ri=\"rowIndex\"\n >\n <!-- Render a table row and make it editable if `isEdit` is true -->\n <tr [pEditableRow]=\"isEdit ? data : null\">\n <!-- Loop through each column and render corresponding table cells -->\n <ng-container *ngFor=\"let col of columns\">\n <ng-container *ngIf=\"col.code !== undefined\">\n <!-- Check if the data for the column exists -->\n <ng-container *ngIf=\"data[col.code] !== undefined\">\n <!-- Render an editable cell if the column is editable -->\n <td *ngIf=\"isEditable(col.code); else normalTD\">\n <!-- Multi-select input for columns that are multi-selectable -->\n <ng-container\n *ngIf=\"isMultiSelect(col.code); else datePicker\"\n >\n <p-cellEditor>\n <ng-template pTemplate=\"input\">\n <p-multiSelect\n appendTo=\"body\"\n [ngModel]=\"data[col.code]\"\n [style]=\"{ width: '100%' }\"\n (ngModelChange)=\"\n changeHandler(data.id, col.code, $event)\n \"\n [options]=\"optionValues\"\n ></p-multiSelect>\n </ng-template>\n <ng-template pTemplate=\"output\">\n <div class=\"multi-select-container\">\n <ng-container *ngFor=\"let rec of data[col.code]\">\n <p-tag [value]=\"rec\"></p-tag>\n </ng-container>\n </div>\n </ng-template>\n </p-cellEditor>\n </ng-container>\n\n <!-- Date picker input for columns that require date selection -->\n <ng-template #datePicker>\n <ng-container\n *ngIf=\"isDatePicker(col.code); else normalInput\"\n >\n <p-cellEditor>\n <ng-template pTemplate=\"input\">\n <p-calendar\n [inputId]=\"data[col.code]\"\n [ngModel]=\"data[col.code]\"\n (ngModelChange)=\"\n changeHandler(data.id, col.code, $event)\n \"\n [dateFormat]=\"'dd/mm/yy'\"\n ></p-calendar>\n </ng-template>\n <ng-template pTemplate=\"output\">\n {{ data[col.code] | customDate }}\n </ng-template>\n </p-cellEditor>\n </ng-container>\n </ng-template>\n\n <!-- Normal text input for other columns -->\n <ng-template #normalInput>\n <p-cellEditor>\n <ng-template pTemplate=\"input\">\n <input\n pInputText\n type=\"text\"\n [ngModel]=\"data[col.code]\"\n (change)=\"onChange($event, data.id, col.code)\"\n />\n </ng-template>\n <ng-template pTemplate=\"output\">\n <!-- Use currency pipe to format the output for AMOUNT type -->\n <ng-container\n *ngIf=\"col.type === 'AMOUNT'; else normalOutput\"\n >\n {{\n data[col.code]\n | customCurrency\n : getCurrencySymbol(col)\n : col.decimalPlaces\n : col.thousandSeparator\n : col.decimalSeparator\n }}\n </ng-container>\n <ng-template #normalOutput>\n {{ data[col.code] }}\n </ng-template>\n </ng-template>\n </p-cellEditor>\n </ng-template>\n </td>\n\n <!-- Render a normal table cell if the column is not editable -->\n <ng-template #normalTD>\n <td>\n <!-- Use customCurrency pipe to format the output for AMOUNT type with optional decimal places -->\n <ng-container\n *ngIf=\"col.type === 'AMOUNT'; else normalText\"\n >\n >\n {{\n data[col.code]\n | customCurrency\n : getCurrencySymbol(col)\n : col.decimalPlaces\n : col.thousandSeparator\n : col.decimalSeparator\n }}\n </ng-container>\n <ng-template #normalText>\n {{ data[col.code] }}\n </ng-template>\n </td>\n </ng-template>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <!-- Render action buttons if there are any actions defined -->\n <td *ngIf=\"actions?.length\">\n <div class=\"action-buttons-container\">\n <!-- Delete button if deletion is allowed -->\n <div *ngIf=\"isDelete\">\n <button\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-trash\"\n (click)=\"Delete(data.id)\"\n class=\"p-button-rounded p-button-text\"\n ></button>\n </div>\n <!-- Edit, save, and cancel buttons for row editing -->\n <div>\n <button\n pInitEditableRow\n *ngIf=\"!editing\"\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-pencil\"\n (click)=\"initEditableRow(data)\"\n class=\"p-button-rounded p-button-text\"\n ></button>\n <button\n *ngIf=\"editing\"\n pSaveEditableRow\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-check\"\n (click)=\"saveEditableRow(data)\"\n class=\"p-button-rounded p-button-text\"\n ></button>\n <button\n *ngIf=\"editing\"\n pCancelEditableRow\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-times\"\n (click)=\"cancelEditableRow(data)\"\n class=\"p-button-rounded p-button-text\"\n ></button>\n </div>\n </div>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n</div>\n", styles: [".date{width:100%;height:5rem;display:grid;justify-items:start;align-items:center}.filter-container{width:100%;display:flex;justify-content:space-between;align-items:center}.settings{display:flex;gap:1rem}.multi-select-container{display:flex;justify-content:center;align-items:center;gap:.3rem}::ng-deep p-table{min-width:50rem}.table-container{display:flex;flex-direction:column;gap:.5rem}::ng-deep .custom-multiselect .p-hidden-accessible input{display:none}::ng-deep .p-datatable .p-sortable-column.p-highlight:hover{background:none}::ng-deep .p-datatable .p-sortable-column:focus{box-shadow:none;outline:0 none}::ng-deep .header-container{display:flex;align-items:center}::ng-deep .header-container span{margin-right:.5em}::ng-deep p-columnfilter.p-element.ng-star-inserted{margin-top:4px}.flex{display:flex;justify-content:space-between;align-items:center}.ml-auto{margin-left:auto}::ng-deep p-inputicon{margin-right:-1.5rem;z-index:2;position:relative}::ng-deep .p-inputtext{padding-left:1.7rem}::ng-deep .bt-filter-btn button{cursor:pointer;margin-left:1rem}::ng-deep .p-icon-field-left .p-input-icon:first-of-type{left:-1rem}.table-row{text-align:center;display:flex;gap:1rem;justify-content:center}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i2.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i2.CellEditor, selector: "p-cellEditor" }, { kind: "component", type: i2.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "directive", type: i2.EditableRow, selector: "[pEditableRow]", inputs: ["pEditableRow", "pEditableRowDisabled"] }, { kind: "directive", type: i2.InitEditableRow, selector: "[pInitEditableRow]" }, { kind: "directive", type: i2.SaveEditableRow, selector: "[pSaveEditableRow]" }, { kind: "directive", type: i2.CancelEditableRow, selector: "[pCancelEditableRow]" }, { kind: "component", type: i2.ColumnFilter, selector: "p-columnFilter", inputs: ["field", "type", "display", "showMenu", "matchMode", "operator", "showOperator", "showClearButton", "showApplyButton", "showMatchModes", "showAddButton", "hideOnClear", "placeholder", "matchModeOptions", "maxConstraints", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "locale", "localeMatcher", "currency", "currencyDisplay", "useGrouping", "showButtons", "ariaLabel"], outputs: ["onShow", "onHide"] }, { kind: "directive", type: i4.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "directive", type: i5.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "component", type: i5.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i6.Calendar, selector: "p-calendar", inputs: ["iconDisplay", "style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepYearPicker", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "variant", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale", "view", "defaultDate"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.MultiSelect, selector: "p-multiSelect", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "variant", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "component", type: i9.Tag, selector: "p-tag", inputs: ["style", "styleClass", "severity", "value", "icon", "rounded"] }, { kind: "component", type: i10.IconField, selector: "p-iconField", inputs: ["iconPosition"] }, { kind: "component", type: i11.InputIcon, selector: "p-inputIcon", inputs: ["styleClass"] }, { kind: "pipe", type: i12.CustomCurrencyPipe, name: "customCurrency" }, { kind: "pipe", type: i13.CustomDatePipe, name: "customDate" }] }); }
287
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: NgAdvancedPrimeTableComponent, selector: "ng-advanced-prime-table", inputs: { data: "data", columns: "columns", totalRecords: "totalRecords", rowsPerPage: "rowsPerPage", hasSearchFilter: "hasSearchFilter", hasExportExcel: "hasExportExcel", hasExportPDF: "hasExportPDF", hasColumnFilter: "hasColumnFilter", isPaginated: "isPaginated", actions: "actions", isSortable: "isSortable" }, outputs: { filter: "filter", search: "search", exportExcelEvent: "exportExcelEvent", exportPdfEvent: "exportPdfEvent" }, viewQueries: [{ propertyName: "dt", first: true, predicate: ["dt"], descendants: true }], ngImport: i0, template: "<div class=\"table-container\">\n <div>\n <p-table\n #dt\n [value]=\"data\"\n [rows]=\"rows\"\n [paginator]=\"isPaginated\"\n [globalFilterFields]=\"globalFilterFields\"\n [rowsPerPageOptions]=\"rowsPerPage\"\n dataKey=\"id\"\n styleClass=\"p-datatable-gridlines\"\n styleClass=\"p-datatable-striped\"\n editMode=\"row\"\n >\n <ng-template pTemplate=\"caption\">\n <div class=\"flex\">\n <div>\n <h3>Total: {{ totalRecords }}</h3>\n </div>\n\n <div>\n <!-- Clear filters -->\n <button\n *ngIf=\"hasSearchFilter\"\n pButton\n icon=\"pi pi-filter-slash\"\n class=\"p-button-rounded p-button-text fa-lg\"\n (click)=\"clear(dt)\"\n title=\"Clear filters\"\n ></button>\n\n <!-- Export to Excel Button -->\n <button\n *ngIf=\"hasExportExcel\"\n pButton\n icon=\"pi pi-file-excel\"\n class=\"p-button-rounded p-button-text fa-lg\"\n (click)=\"exportExcel()\"\n title=\"Export to Excel\"\n ></button>\n\n <!-- Export to PDF Button -->\n <button\n *ngIf=\"hasExportPDF\"\n pButton\n icon=\"pi pi-file-pdf\"\n class=\"p-button-rounded p-button-text fa-lg\"\n (click)=\"exportPdf()\"\n title=\"Export to PDF\"\n ></button>\n </div>\n <div class=\"ml-auto\" *ngIf=\"hasSearchFilter\">\n <!-- Add this wrapper div with ml-auto class -->\n <p-iconField iconPosition=\"left\" class=\"ml-auto\">\n <p-inputIcon>\n <i class=\"pi pi-search\"></i>\n </p-inputIcon>\n <input\n pInputText\n type=\"text\"\n [(ngModel)]=\"searchValue\"\n (input)=\"filterGlobal($event)\"\n placeholder=\"Search keyword\"\n />\n </p-iconField>\n </div>\n </div>\n </ng-template>\n\n <ng-template pTemplate=\"header\">\n <tr>\n <th *ngFor=\"let col of columns\">\n <ng-container\n *ngIf=\"isSortable && col.isSortable !== false; else noSortHeader\"\n >\n <th pSortableColumn=\"{{ col.code }}\" style=\"width: 20%\">\n <div class=\"header-container\">\n <span>{{ col.title }}</span>\n <p-sortIcon field=\"{{ col.code }}\" />\n <ng-container *ngIf=\"col.isFilter !== false\">\n <p-columnFilter\n *ngIf=\"col.type === 'AMOUNT'\"\n display=\"menu\"\n [field]=\"col.code\"\n [type]=\"getColumnFilterType(col)\"\n [currency]=\"getCurrencySymbol(col)\"\n ></p-columnFilter>\n\n <p-columnFilter\n *ngIf=\"col.type !== 'AMOUNT'\"\n display=\"menu\"\n [field]=\"col.code\"\n display=\"menu\"\n [type]=\"getColumnFilterType(col)\"\n [type]=\"getColumnFilterType(col)\"\n >\n <ng-template\n pTemplate=\"filter\"\n let-value\n let-filterCallback=\"filterCallback\"\n *ngIf=\"getColumnFilterType(col) === 'date'\"\n >\n <p-calendar\n [ngModel]=\"value\"\n (ngModelChange)=\"filterCallback($event)\"\n [dateFormat]=\"'dd/mm/yy'\"\n ></p-calendar>\n </ng-template>\n\n <ng-template\n pTemplate=\"filter\"\n let-value\n let-filterCallback=\"filterCallback\"\n *ngIf=\"getColumnFilterType(col) === 'multiSelect'\"\n >\n <p-multiSelect\n [options]=\"col.filterOptions\"\n [ngModel]=\"value\"\n (ngModelChange)=\"filterCallback($event)\"\n [display]=\"'chip'\"\n placeholder=\"Select\"\n class=\"custom-multiselect\"\n ></p-multiSelect>\n </ng-template>\n </p-columnFilter>\n </ng-container>\n </div>\n </th>\n </ng-container>\n <ng-template #noSortHeader>\n <th>\n <div class=\"header-container\">\n <span>{{ col.title }}</span>\n <ng-container *ngIf=\"col.isFilter !== false\">\n <p-columnFilter\n *ngIf=\"col.type === 'AMOUNT'\"\n display=\"menu\"\n [field]=\"col.code\"\n [type]=\"getColumnFilterType(col)\"\n [currency]=\"getCurrencySymbol(col)\"\n ></p-columnFilter>\n\n <p-columnFilter\n *ngIf=\"col.type !== 'AMOUNT'\"\n display=\"menu\"\n [field]=\"col.code\"\n [type]=\"getColumnFilterType(col)\"\n >\n <ng-template\n pTemplate=\"filter\"\n let-value\n let-filterCallback=\"filterCallback\"\n *ngIf=\"getColumnFilterType(col) === 'date'\"\n >\n <p-calendar\n [ngModel]=\"value\"\n (ngModelChange)=\"filterCallback($event)\"\n [dateFormat]=\"'dd/mm/yy'\"\n ></p-calendar>\n </ng-template>\n\n <ng-template\n pTemplate=\"filter\"\n let-value\n let-filterCallback=\"filterCallback\"\n *ngIf=\"getColumnFilterType(col) === 'multiSelect'\"\n >\n <p-multiSelect\n [options]=\"col.filterOptions\"\n [ngModel]=\"value\"\n (ngModelChange)=\"filterCallback($event)\"\n [display]=\"'chip'\"\n placeholder=\"Select\"\n class=\"custom-multiselect\"\n ></p-multiSelect>\n </ng-template>\n </p-columnFilter>\n </ng-container>\n </div>\n </th>\n </ng-template>\n </th>\n </tr>\n </ng-template>\n\n <ng-template\n pTemplate=\"body\"\n let-data\n let-editing=\"editing\"\n let-ri=\"rowIndex\"\n >\n <!-- Render a table row and make it editable if `isEdit` is true -->\n <tr [pEditableRow]=\"isEdit ? data : null\">\n <!-- Loop through each column and render corresponding table cells -->\n <ng-container *ngFor=\"let col of columns\">\n <ng-container *ngIf=\"col.code !== undefined\">\n <!-- Check if the data for the column exists -->\n <ng-container *ngIf=\"data[col.code] !== undefined\">\n <!-- Render an editable cell if the column is editable -->\n <td *ngIf=\"isEditable(col.code); else normalTD\">\n <!-- Multi-select input for columns that are multi-selectable -->\n <ng-container\n *ngIf=\"isMultiSelect(col.code); else datePicker\"\n >\n <p-cellEditor>\n <ng-template pTemplate=\"input\">\n <p-multiSelect\n appendTo=\"body\"\n [ngModel]=\"data[col.code]\"\n [style]=\"{ width: '100%' }\"\n (ngModelChange)=\"\n changeHandler(data.id, col.code, $event)\n \"\n [options]=\"optionValues\"\n ></p-multiSelect>\n </ng-template>\n <ng-template pTemplate=\"output\">\n <div class=\"multi-select-container\">\n <ng-container *ngFor=\"let rec of data[col.code]\">\n <p-tag [value]=\"rec\"></p-tag>\n </ng-container>\n </div>\n </ng-template>\n </p-cellEditor>\n </ng-container>\n\n <!-- Date picker input for columns that require date selection -->\n <ng-template #datePicker>\n <ng-container\n *ngIf=\"isDatePicker(col.code); else normalInput\"\n >\n <p-cellEditor>\n <ng-template pTemplate=\"input\">\n <p-calendar\n [inputId]=\"data[col.code]\"\n [ngModel]=\"data[col.code]\"\n (ngModelChange)=\"\n changeHandler(data.id, col.code, $event)\n \"\n [dateFormat]=\"'dd/mm/yy'\"\n ></p-calendar>\n </ng-template>\n <ng-template pTemplate=\"output\">\n {{ data[col.code] | customDate }}\n </ng-template>\n </p-cellEditor>\n </ng-container>\n </ng-template>\n\n <!-- Normal text input for other columns -->\n <ng-template #normalInput>\n <p-cellEditor>\n <ng-template pTemplate=\"input\">\n <input\n pInputText\n type=\"text\"\n [ngModel]=\"data[col.code]\"\n (change)=\"onChange($event, data.id, col.code)\"\n />\n </ng-template>\n <ng-template pTemplate=\"output\">\n <!-- Use currency pipe to format the output for AMOUNT type -->\n <ng-container\n *ngIf=\"col.type === 'AMOUNT'; else normalOutput\"\n >\n {{\n data[col.code]\n | customCurrency\n : getCurrencySymbol(col)\n : col.decimalPlaces\n : col.thousandSeparator\n : col.decimalSeparator\n }}\n </ng-container>\n <ng-template #normalOutput>\n {{ data[col.code] }}\n </ng-template>\n </ng-template>\n </p-cellEditor>\n </ng-template>\n </td>\n\n <!-- Render a normal table cell if the column is not editable -->\n <ng-template #normalTD>\n <td>\n <!-- Use customCurrency pipe to format the output for AMOUNT type with optional decimal places -->\n <ng-container\n *ngIf=\"col.type === 'AMOUNT'; else normalText\"\n >\n >\n {{\n data[col.code]\n | customCurrency\n : getCurrencySymbol(col)\n : col.decimalPlaces\n : col.thousandSeparator\n : col.decimalSeparator\n }}\n </ng-container>\n <ng-template #normalText>\n {{ data[col.code] }}\n </ng-template>\n </td>\n </ng-template>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <!-- Render action buttons if there are any actions defined -->\n <td *ngIf=\"actions?.length\">\n <div class=\"action-buttons-container\">\n <!-- Delete button if deletion is allowed -->\n <div *ngIf=\"isDelete\">\n <button\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-trash\"\n (click)=\"Delete(data.id)\"\n class=\"p-button-rounded p-button-text\"\n ></button>\n </div>\n <!-- Edit, save, and cancel buttons for row editing -->\n <div>\n <button\n pInitEditableRow\n *ngIf=\"!editing\"\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-pencil\"\n (click)=\"initEditableRow(data)\"\n class=\"p-button-rounded p-button-text\"\n ></button>\n <button\n *ngIf=\"editing\"\n pSaveEditableRow\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-check\"\n (click)=\"saveEditableRow(data)\"\n class=\"p-button-rounded p-button-text\"\n ></button>\n <button\n *ngIf=\"editing\"\n pCancelEditableRow\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-times\"\n (click)=\"cancelEditableRow(data)\"\n class=\"p-button-rounded p-button-text\"\n ></button>\n </div>\n </div>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n</div>\n", styles: [".date{width:100%;height:5rem;display:grid;justify-items:start;align-items:center}.filter-container{width:100%;display:flex;justify-content:space-between;align-items:center}.settings{display:flex;gap:1rem}.multi-select-container{display:flex;justify-content:center;align-items:center;gap:.3rem}::ng-deep p-table{min-width:50rem}.table-container{display:flex;flex-direction:column;gap:.5rem}::ng-deep .custom-multiselect .p-hidden-accessible input{display:none}::ng-deep .p-datatable .p-sortable-column.p-highlight:hover{background:none}::ng-deep .p-datatable .p-sortable-column:focus{box-shadow:none;outline:0 none}::ng-deep .header-container{display:flex;align-items:center}::ng-deep .header-container span{margin-right:.5em}::ng-deep p-columnfilter.p-element.ng-star-inserted{margin-top:4px}.flex{display:flex;justify-content:space-between;align-items:center}.ml-auto{margin-left:auto}::ng-deep p-inputicon{margin-right:-1.5rem;z-index:2;position:relative}::ng-deep .p-inputtext{padding-left:1.7rem}::ng-deep .bt-filter-btn button{cursor:pointer;margin-left:1rem}::ng-deep .p-icon-field-left .p-input-icon:first-of-type{left:-1rem}.table-row{text-align:center;display:flex;gap:1rem;justify-content:center}::ng-deep span.p-button-icon.pi.pi-file-excel{font-size:1.25em;color:green}::ng-deep span.p-button-icon.pi.pi-file-pdf{font-size:1.25em;color:red}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i2.SortableColumn, selector: "[pSortableColumn]", inputs: ["pSortableColumn", "pSortableColumnDisabled"] }, { kind: "component", type: i2.CellEditor, selector: "p-cellEditor" }, { kind: "component", type: i2.SortIcon, selector: "p-sortIcon", inputs: ["field"] }, { kind: "directive", type: i2.EditableRow, selector: "[pEditableRow]", inputs: ["pEditableRow", "pEditableRowDisabled"] }, { kind: "directive", type: i2.InitEditableRow, selector: "[pInitEditableRow]" }, { kind: "directive", type: i2.SaveEditableRow, selector: "[pSaveEditableRow]" }, { kind: "directive", type: i2.CancelEditableRow, selector: "[pCancelEditableRow]" }, { kind: "component", type: i2.ColumnFilter, selector: "p-columnFilter", inputs: ["field", "type", "display", "showMenu", "matchMode", "operator", "showOperator", "showClearButton", "showApplyButton", "showMatchModes", "showAddButton", "hideOnClear", "placeholder", "matchModeOptions", "maxConstraints", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "locale", "localeMatcher", "currency", "currencyDisplay", "useGrouping", "showButtons", "ariaLabel"], outputs: ["onShow", "onHide"] }, { kind: "directive", type: i4.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "directive", type: i5.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "component", type: i6.Calendar, selector: "p-calendar", inputs: ["iconDisplay", "style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepYearPicker", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "variant", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale", "view", "defaultDate"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.MultiSelect, selector: "p-multiSelect", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "variant", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "component", type: i9.Tag, selector: "p-tag", inputs: ["style", "styleClass", "severity", "value", "icon", "rounded"] }, { kind: "component", type: i10.IconField, selector: "p-iconField", inputs: ["iconPosition"] }, { kind: "component", type: i11.InputIcon, selector: "p-inputIcon", inputs: ["styleClass"] }, { kind: "pipe", type: i12.CustomCurrencyPipe, name: "customCurrency" }, { kind: "pipe", type: i13.CustomDatePipe, name: "customDate" }] }); }
278
288
  }
279
289
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: NgAdvancedPrimeTableComponent, decorators: [{
280
290
  type: Component,
281
- args: [{ selector: 'ng-advanced-prime-table', template: "<div class=\"table-container\">\n <div>\n <p-table\n #dt\n [value]=\"data\"\n [rows]=\"rows\"\n [paginator]=\"isPaginated\"\n [globalFilterFields]=\"globalFilterFields\"\n [rowsPerPageOptions]=\"rowsPerPage\"\n dataKey=\"id\"\n styleClass=\"p-datatable-gridlines\"\n styleClass=\"p-datatable-striped\"\n editMode=\"row\"\n >\n <ng-template pTemplate=\"caption\">\n <div class=\"flex\">\n <div>\n <h3>Total: {{ totalRecords }}</h3>\n </div>\n\n <div>\n <p-button\n label=\"Clear\"\n [outlined]=\"true\"\n icon=\"pi pi-filter-slash\"\n (click)=\"clear(dt)\"\n class=\"bt-filter-btn\"\n />\n </div>\n <div class=\"ml-auto\" *ngIf=\"hasSearchFilter\">\n <!-- Add this wrapper div with ml-auto class -->\n <p-iconField iconPosition=\"left\" class=\"ml-auto\">\n <p-inputIcon>\n <i class=\"pi pi-search\"></i>\n </p-inputIcon>\n <input\n pInputText\n type=\"text\"\n [(ngModel)]=\"searchValue\"\n (input)=\"filterGlobal($event)\"\n placeholder=\"Search keyword\"\n />\n </p-iconField>\n </div>\n </div>\n </ng-template>\n\n <ng-template pTemplate=\"header\">\n <tr>\n <th *ngFor=\"let col of columns\">\n <ng-container\n *ngIf=\"isSortable && col.isSortable !== false; else noSortHeader\"\n >\n <th pSortableColumn=\"{{ col.code }}\" style=\"width: 20%\">\n <div class=\"header-container\">\n <span>{{ col.title }}</span>\n <p-sortIcon field=\"{{ col.code }}\" />\n <ng-container *ngIf=\"col.isFilter !== false\">\n <p-columnFilter\n *ngIf=\"col.type === 'AMOUNT'\"\n display=\"menu\"\n [field]=\"col.code\"\n [type]=\"getColumnFilterType(col)\"\n [currency]=\"getCurrencySymbol(col)\"\n ></p-columnFilter>\n\n <p-columnFilter\n *ngIf=\"col.type !== 'AMOUNT'\"\n display=\"menu\"\n [field]=\"col.code\"\n display=\"menu\"\n [type]=\"getColumnFilterType(col)\"\n [type]=\"getColumnFilterType(col)\"\n >\n <ng-template\n pTemplate=\"filter\"\n let-value\n let-filterCallback=\"filterCallback\"\n *ngIf=\"getColumnFilterType(col) === 'date'\"\n >\n <p-calendar\n [ngModel]=\"value\"\n (ngModelChange)=\"filterCallback($event)\"\n [dateFormat]=\"'dd/mm/yy'\"\n ></p-calendar>\n </ng-template>\n\n <ng-template\n pTemplate=\"filter\"\n let-value\n let-filterCallback=\"filterCallback\"\n *ngIf=\"getColumnFilterType(col) === 'multiSelect'\"\n >\n <p-multiSelect\n [options]=\"col.filterOptions\"\n [ngModel]=\"value\"\n (ngModelChange)=\"filterCallback($event)\"\n [display]=\"'chip'\"\n placeholder=\"Select\"\n class=\"custom-multiselect\"\n ></p-multiSelect>\n </ng-template>\n </p-columnFilter>\n </ng-container>\n </div>\n </th>\n </ng-container>\n <ng-template #noSortHeader>\n <th>\n <div class=\"header-container\">\n <span>{{ col.title }}</span>\n <ng-container *ngIf=\"col.isFilter !== false\">\n <p-columnFilter\n *ngIf=\"col.type === 'AMOUNT'\"\n display=\"menu\"\n [field]=\"col.code\"\n [type]=\"getColumnFilterType(col)\"\n [currency]=\"getCurrencySymbol(col)\"\n ></p-columnFilter>\n\n <p-columnFilter\n *ngIf=\"col.type !== 'AMOUNT'\"\n display=\"menu\"\n [field]=\"col.code\"\n [type]=\"getColumnFilterType(col)\"\n >\n <ng-template\n pTemplate=\"filter\"\n let-value\n let-filterCallback=\"filterCallback\"\n *ngIf=\"getColumnFilterType(col) === 'date'\"\n >\n <p-calendar\n [ngModel]=\"value\"\n (ngModelChange)=\"filterCallback($event)\"\n [dateFormat]=\"'dd/mm/yy'\"\n ></p-calendar>\n </ng-template>\n\n <ng-template\n pTemplate=\"filter\"\n let-value\n let-filterCallback=\"filterCallback\"\n *ngIf=\"getColumnFilterType(col) === 'multiSelect'\"\n >\n <p-multiSelect\n [options]=\"col.filterOptions\"\n [ngModel]=\"value\"\n (ngModelChange)=\"filterCallback($event)\"\n [display]=\"'chip'\"\n placeholder=\"Select\"\n class=\"custom-multiselect\"\n ></p-multiSelect>\n </ng-template>\n </p-columnFilter>\n </ng-container>\n </div>\n </th>\n </ng-template>\n </th>\n </tr>\n </ng-template>\n\n <ng-template\n pTemplate=\"body\"\n let-data\n let-editing=\"editing\"\n let-ri=\"rowIndex\"\n >\n <!-- Render a table row and make it editable if `isEdit` is true -->\n <tr [pEditableRow]=\"isEdit ? data : null\">\n <!-- Loop through each column and render corresponding table cells -->\n <ng-container *ngFor=\"let col of columns\">\n <ng-container *ngIf=\"col.code !== undefined\">\n <!-- Check if the data for the column exists -->\n <ng-container *ngIf=\"data[col.code] !== undefined\">\n <!-- Render an editable cell if the column is editable -->\n <td *ngIf=\"isEditable(col.code); else normalTD\">\n <!-- Multi-select input for columns that are multi-selectable -->\n <ng-container\n *ngIf=\"isMultiSelect(col.code); else datePicker\"\n >\n <p-cellEditor>\n <ng-template pTemplate=\"input\">\n <p-multiSelect\n appendTo=\"body\"\n [ngModel]=\"data[col.code]\"\n [style]=\"{ width: '100%' }\"\n (ngModelChange)=\"\n changeHandler(data.id, col.code, $event)\n \"\n [options]=\"optionValues\"\n ></p-multiSelect>\n </ng-template>\n <ng-template pTemplate=\"output\">\n <div class=\"multi-select-container\">\n <ng-container *ngFor=\"let rec of data[col.code]\">\n <p-tag [value]=\"rec\"></p-tag>\n </ng-container>\n </div>\n </ng-template>\n </p-cellEditor>\n </ng-container>\n\n <!-- Date picker input for columns that require date selection -->\n <ng-template #datePicker>\n <ng-container\n *ngIf=\"isDatePicker(col.code); else normalInput\"\n >\n <p-cellEditor>\n <ng-template pTemplate=\"input\">\n <p-calendar\n [inputId]=\"data[col.code]\"\n [ngModel]=\"data[col.code]\"\n (ngModelChange)=\"\n changeHandler(data.id, col.code, $event)\n \"\n [dateFormat]=\"'dd/mm/yy'\"\n ></p-calendar>\n </ng-template>\n <ng-template pTemplate=\"output\">\n {{ data[col.code] | customDate }}\n </ng-template>\n </p-cellEditor>\n </ng-container>\n </ng-template>\n\n <!-- Normal text input for other columns -->\n <ng-template #normalInput>\n <p-cellEditor>\n <ng-template pTemplate=\"input\">\n <input\n pInputText\n type=\"text\"\n [ngModel]=\"data[col.code]\"\n (change)=\"onChange($event, data.id, col.code)\"\n />\n </ng-template>\n <ng-template pTemplate=\"output\">\n <!-- Use currency pipe to format the output for AMOUNT type -->\n <ng-container\n *ngIf=\"col.type === 'AMOUNT'; else normalOutput\"\n >\n {{\n data[col.code]\n | customCurrency\n : getCurrencySymbol(col)\n : col.decimalPlaces\n : col.thousandSeparator\n : col.decimalSeparator\n }}\n </ng-container>\n <ng-template #normalOutput>\n {{ data[col.code] }}\n </ng-template>\n </ng-template>\n </p-cellEditor>\n </ng-template>\n </td>\n\n <!-- Render a normal table cell if the column is not editable -->\n <ng-template #normalTD>\n <td>\n <!-- Use customCurrency pipe to format the output for AMOUNT type with optional decimal places -->\n <ng-container\n *ngIf=\"col.type === 'AMOUNT'; else normalText\"\n >\n >\n {{\n data[col.code]\n | customCurrency\n : getCurrencySymbol(col)\n : col.decimalPlaces\n : col.thousandSeparator\n : col.decimalSeparator\n }}\n </ng-container>\n <ng-template #normalText>\n {{ data[col.code] }}\n </ng-template>\n </td>\n </ng-template>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <!-- Render action buttons if there are any actions defined -->\n <td *ngIf=\"actions?.length\">\n <div class=\"action-buttons-container\">\n <!-- Delete button if deletion is allowed -->\n <div *ngIf=\"isDelete\">\n <button\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-trash\"\n (click)=\"Delete(data.id)\"\n class=\"p-button-rounded p-button-text\"\n ></button>\n </div>\n <!-- Edit, save, and cancel buttons for row editing -->\n <div>\n <button\n pInitEditableRow\n *ngIf=\"!editing\"\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-pencil\"\n (click)=\"initEditableRow(data)\"\n class=\"p-button-rounded p-button-text\"\n ></button>\n <button\n *ngIf=\"editing\"\n pSaveEditableRow\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-check\"\n (click)=\"saveEditableRow(data)\"\n class=\"p-button-rounded p-button-text\"\n ></button>\n <button\n *ngIf=\"editing\"\n pCancelEditableRow\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-times\"\n (click)=\"cancelEditableRow(data)\"\n class=\"p-button-rounded p-button-text\"\n ></button>\n </div>\n </div>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n</div>\n", styles: [".date{width:100%;height:5rem;display:grid;justify-items:start;align-items:center}.filter-container{width:100%;display:flex;justify-content:space-between;align-items:center}.settings{display:flex;gap:1rem}.multi-select-container{display:flex;justify-content:center;align-items:center;gap:.3rem}::ng-deep p-table{min-width:50rem}.table-container{display:flex;flex-direction:column;gap:.5rem}::ng-deep .custom-multiselect .p-hidden-accessible input{display:none}::ng-deep .p-datatable .p-sortable-column.p-highlight:hover{background:none}::ng-deep .p-datatable .p-sortable-column:focus{box-shadow:none;outline:0 none}::ng-deep .header-container{display:flex;align-items:center}::ng-deep .header-container span{margin-right:.5em}::ng-deep p-columnfilter.p-element.ng-star-inserted{margin-top:4px}.flex{display:flex;justify-content:space-between;align-items:center}.ml-auto{margin-left:auto}::ng-deep p-inputicon{margin-right:-1.5rem;z-index:2;position:relative}::ng-deep .p-inputtext{padding-left:1.7rem}::ng-deep .bt-filter-btn button{cursor:pointer;margin-left:1rem}::ng-deep .p-icon-field-left .p-input-icon:first-of-type{left:-1rem}.table-row{text-align:center;display:flex;gap:1rem;justify-content:center}\n"] }]
291
+ args: [{ selector: 'ng-advanced-prime-table', template: "<div class=\"table-container\">\n <div>\n <p-table\n #dt\n [value]=\"data\"\n [rows]=\"rows\"\n [paginator]=\"isPaginated\"\n [globalFilterFields]=\"globalFilterFields\"\n [rowsPerPageOptions]=\"rowsPerPage\"\n dataKey=\"id\"\n styleClass=\"p-datatable-gridlines\"\n styleClass=\"p-datatable-striped\"\n editMode=\"row\"\n >\n <ng-template pTemplate=\"caption\">\n <div class=\"flex\">\n <div>\n <h3>Total: {{ totalRecords }}</h3>\n </div>\n\n <div>\n <!-- Clear filters -->\n <button\n *ngIf=\"hasSearchFilter\"\n pButton\n icon=\"pi pi-filter-slash\"\n class=\"p-button-rounded p-button-text fa-lg\"\n (click)=\"clear(dt)\"\n title=\"Clear filters\"\n ></button>\n\n <!-- Export to Excel Button -->\n <button\n *ngIf=\"hasExportExcel\"\n pButton\n icon=\"pi pi-file-excel\"\n class=\"p-button-rounded p-button-text fa-lg\"\n (click)=\"exportExcel()\"\n title=\"Export to Excel\"\n ></button>\n\n <!-- Export to PDF Button -->\n <button\n *ngIf=\"hasExportPDF\"\n pButton\n icon=\"pi pi-file-pdf\"\n class=\"p-button-rounded p-button-text fa-lg\"\n (click)=\"exportPdf()\"\n title=\"Export to PDF\"\n ></button>\n </div>\n <div class=\"ml-auto\" *ngIf=\"hasSearchFilter\">\n <!-- Add this wrapper div with ml-auto class -->\n <p-iconField iconPosition=\"left\" class=\"ml-auto\">\n <p-inputIcon>\n <i class=\"pi pi-search\"></i>\n </p-inputIcon>\n <input\n pInputText\n type=\"text\"\n [(ngModel)]=\"searchValue\"\n (input)=\"filterGlobal($event)\"\n placeholder=\"Search keyword\"\n />\n </p-iconField>\n </div>\n </div>\n </ng-template>\n\n <ng-template pTemplate=\"header\">\n <tr>\n <th *ngFor=\"let col of columns\">\n <ng-container\n *ngIf=\"isSortable && col.isSortable !== false; else noSortHeader\"\n >\n <th pSortableColumn=\"{{ col.code }}\" style=\"width: 20%\">\n <div class=\"header-container\">\n <span>{{ col.title }}</span>\n <p-sortIcon field=\"{{ col.code }}\" />\n <ng-container *ngIf=\"col.isFilter !== false\">\n <p-columnFilter\n *ngIf=\"col.type === 'AMOUNT'\"\n display=\"menu\"\n [field]=\"col.code\"\n [type]=\"getColumnFilterType(col)\"\n [currency]=\"getCurrencySymbol(col)\"\n ></p-columnFilter>\n\n <p-columnFilter\n *ngIf=\"col.type !== 'AMOUNT'\"\n display=\"menu\"\n [field]=\"col.code\"\n display=\"menu\"\n [type]=\"getColumnFilterType(col)\"\n [type]=\"getColumnFilterType(col)\"\n >\n <ng-template\n pTemplate=\"filter\"\n let-value\n let-filterCallback=\"filterCallback\"\n *ngIf=\"getColumnFilterType(col) === 'date'\"\n >\n <p-calendar\n [ngModel]=\"value\"\n (ngModelChange)=\"filterCallback($event)\"\n [dateFormat]=\"'dd/mm/yy'\"\n ></p-calendar>\n </ng-template>\n\n <ng-template\n pTemplate=\"filter\"\n let-value\n let-filterCallback=\"filterCallback\"\n *ngIf=\"getColumnFilterType(col) === 'multiSelect'\"\n >\n <p-multiSelect\n [options]=\"col.filterOptions\"\n [ngModel]=\"value\"\n (ngModelChange)=\"filterCallback($event)\"\n [display]=\"'chip'\"\n placeholder=\"Select\"\n class=\"custom-multiselect\"\n ></p-multiSelect>\n </ng-template>\n </p-columnFilter>\n </ng-container>\n </div>\n </th>\n </ng-container>\n <ng-template #noSortHeader>\n <th>\n <div class=\"header-container\">\n <span>{{ col.title }}</span>\n <ng-container *ngIf=\"col.isFilter !== false\">\n <p-columnFilter\n *ngIf=\"col.type === 'AMOUNT'\"\n display=\"menu\"\n [field]=\"col.code\"\n [type]=\"getColumnFilterType(col)\"\n [currency]=\"getCurrencySymbol(col)\"\n ></p-columnFilter>\n\n <p-columnFilter\n *ngIf=\"col.type !== 'AMOUNT'\"\n display=\"menu\"\n [field]=\"col.code\"\n [type]=\"getColumnFilterType(col)\"\n >\n <ng-template\n pTemplate=\"filter\"\n let-value\n let-filterCallback=\"filterCallback\"\n *ngIf=\"getColumnFilterType(col) === 'date'\"\n >\n <p-calendar\n [ngModel]=\"value\"\n (ngModelChange)=\"filterCallback($event)\"\n [dateFormat]=\"'dd/mm/yy'\"\n ></p-calendar>\n </ng-template>\n\n <ng-template\n pTemplate=\"filter\"\n let-value\n let-filterCallback=\"filterCallback\"\n *ngIf=\"getColumnFilterType(col) === 'multiSelect'\"\n >\n <p-multiSelect\n [options]=\"col.filterOptions\"\n [ngModel]=\"value\"\n (ngModelChange)=\"filterCallback($event)\"\n [display]=\"'chip'\"\n placeholder=\"Select\"\n class=\"custom-multiselect\"\n ></p-multiSelect>\n </ng-template>\n </p-columnFilter>\n </ng-container>\n </div>\n </th>\n </ng-template>\n </th>\n </tr>\n </ng-template>\n\n <ng-template\n pTemplate=\"body\"\n let-data\n let-editing=\"editing\"\n let-ri=\"rowIndex\"\n >\n <!-- Render a table row and make it editable if `isEdit` is true -->\n <tr [pEditableRow]=\"isEdit ? data : null\">\n <!-- Loop through each column and render corresponding table cells -->\n <ng-container *ngFor=\"let col of columns\">\n <ng-container *ngIf=\"col.code !== undefined\">\n <!-- Check if the data for the column exists -->\n <ng-container *ngIf=\"data[col.code] !== undefined\">\n <!-- Render an editable cell if the column is editable -->\n <td *ngIf=\"isEditable(col.code); else normalTD\">\n <!-- Multi-select input for columns that are multi-selectable -->\n <ng-container\n *ngIf=\"isMultiSelect(col.code); else datePicker\"\n >\n <p-cellEditor>\n <ng-template pTemplate=\"input\">\n <p-multiSelect\n appendTo=\"body\"\n [ngModel]=\"data[col.code]\"\n [style]=\"{ width: '100%' }\"\n (ngModelChange)=\"\n changeHandler(data.id, col.code, $event)\n \"\n [options]=\"optionValues\"\n ></p-multiSelect>\n </ng-template>\n <ng-template pTemplate=\"output\">\n <div class=\"multi-select-container\">\n <ng-container *ngFor=\"let rec of data[col.code]\">\n <p-tag [value]=\"rec\"></p-tag>\n </ng-container>\n </div>\n </ng-template>\n </p-cellEditor>\n </ng-container>\n\n <!-- Date picker input for columns that require date selection -->\n <ng-template #datePicker>\n <ng-container\n *ngIf=\"isDatePicker(col.code); else normalInput\"\n >\n <p-cellEditor>\n <ng-template pTemplate=\"input\">\n <p-calendar\n [inputId]=\"data[col.code]\"\n [ngModel]=\"data[col.code]\"\n (ngModelChange)=\"\n changeHandler(data.id, col.code, $event)\n \"\n [dateFormat]=\"'dd/mm/yy'\"\n ></p-calendar>\n </ng-template>\n <ng-template pTemplate=\"output\">\n {{ data[col.code] | customDate }}\n </ng-template>\n </p-cellEditor>\n </ng-container>\n </ng-template>\n\n <!-- Normal text input for other columns -->\n <ng-template #normalInput>\n <p-cellEditor>\n <ng-template pTemplate=\"input\">\n <input\n pInputText\n type=\"text\"\n [ngModel]=\"data[col.code]\"\n (change)=\"onChange($event, data.id, col.code)\"\n />\n </ng-template>\n <ng-template pTemplate=\"output\">\n <!-- Use currency pipe to format the output for AMOUNT type -->\n <ng-container\n *ngIf=\"col.type === 'AMOUNT'; else normalOutput\"\n >\n {{\n data[col.code]\n | customCurrency\n : getCurrencySymbol(col)\n : col.decimalPlaces\n : col.thousandSeparator\n : col.decimalSeparator\n }}\n </ng-container>\n <ng-template #normalOutput>\n {{ data[col.code] }}\n </ng-template>\n </ng-template>\n </p-cellEditor>\n </ng-template>\n </td>\n\n <!-- Render a normal table cell if the column is not editable -->\n <ng-template #normalTD>\n <td>\n <!-- Use customCurrency pipe to format the output for AMOUNT type with optional decimal places -->\n <ng-container\n *ngIf=\"col.type === 'AMOUNT'; else normalText\"\n >\n >\n {{\n data[col.code]\n | customCurrency\n : getCurrencySymbol(col)\n : col.decimalPlaces\n : col.thousandSeparator\n : col.decimalSeparator\n }}\n </ng-container>\n <ng-template #normalText>\n {{ data[col.code] }}\n </ng-template>\n </td>\n </ng-template>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <!-- Render action buttons if there are any actions defined -->\n <td *ngIf=\"actions?.length\">\n <div class=\"action-buttons-container\">\n <!-- Delete button if deletion is allowed -->\n <div *ngIf=\"isDelete\">\n <button\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-trash\"\n (click)=\"Delete(data.id)\"\n class=\"p-button-rounded p-button-text\"\n ></button>\n </div>\n <!-- Edit, save, and cancel buttons for row editing -->\n <div>\n <button\n pInitEditableRow\n *ngIf=\"!editing\"\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-pencil\"\n (click)=\"initEditableRow(data)\"\n class=\"p-button-rounded p-button-text\"\n ></button>\n <button\n *ngIf=\"editing\"\n pSaveEditableRow\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-check\"\n (click)=\"saveEditableRow(data)\"\n class=\"p-button-rounded p-button-text\"\n ></button>\n <button\n *ngIf=\"editing\"\n pCancelEditableRow\n pButton\n pRipple\n type=\"button\"\n icon=\"pi pi-times\"\n (click)=\"cancelEditableRow(data)\"\n class=\"p-button-rounded p-button-text\"\n ></button>\n </div>\n </div>\n </td>\n </tr>\n </ng-template>\n </p-table>\n </div>\n</div>\n", styles: [".date{width:100%;height:5rem;display:grid;justify-items:start;align-items:center}.filter-container{width:100%;display:flex;justify-content:space-between;align-items:center}.settings{display:flex;gap:1rem}.multi-select-container{display:flex;justify-content:center;align-items:center;gap:.3rem}::ng-deep p-table{min-width:50rem}.table-container{display:flex;flex-direction:column;gap:.5rem}::ng-deep .custom-multiselect .p-hidden-accessible input{display:none}::ng-deep .p-datatable .p-sortable-column.p-highlight:hover{background:none}::ng-deep .p-datatable .p-sortable-column:focus{box-shadow:none;outline:0 none}::ng-deep .header-container{display:flex;align-items:center}::ng-deep .header-container span{margin-right:.5em}::ng-deep p-columnfilter.p-element.ng-star-inserted{margin-top:4px}.flex{display:flex;justify-content:space-between;align-items:center}.ml-auto{margin-left:auto}::ng-deep p-inputicon{margin-right:-1.5rem;z-index:2;position:relative}::ng-deep .p-inputtext{padding-left:1.7rem}::ng-deep .bt-filter-btn button{cursor:pointer;margin-left:1rem}::ng-deep .p-icon-field-left .p-input-icon:first-of-type{left:-1rem}.table-row{text-align:center;display:flex;gap:1rem;justify-content:center}::ng-deep span.p-button-icon.pi.pi-file-excel{font-size:1.25em;color:green}::ng-deep span.p-button-icon.pi.pi-file-pdf{font-size:1.25em;color:red}\n"] }]
282
292
  }], ctorParameters: () => [], propDecorators: { data: [{
283
293
  type: Input
284
294
  }], columns: [{
@@ -289,6 +299,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
289
299
  type: Input
290
300
  }], hasSearchFilter: [{
291
301
  type: Input
302
+ }], hasExportExcel: [{
303
+ type: Input
304
+ }], hasExportPDF: [{
305
+ type: Input
292
306
  }], hasColumnFilter: [{
293
307
  type: Input
294
308
  }], isPaginated: [{
@@ -301,8 +315,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
301
315
  type: Output
302
316
  }], search: [{
303
317
  type: Output
318
+ }], exportExcelEvent: [{
319
+ type: Output
320
+ }], exportPdfEvent: [{
321
+ type: Output
304
322
  }], dt: [{
305
323
  type: ViewChild,
306
324
  args: ['dt', { static: false }]
307
325
  }] } });
308
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctYWR2YW5jZWQtcHJpbWUtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctcHJpbWUtdG9vbHMvc3JjL2xpYi9uZy1hZHZhbmNlZC1wcmltZS10YWJsZS9uZy1hZHZhbmNlZC1wcmltZS10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1wcmltZS10b29scy9zcmMvbGliL25nLWFkdmFuY2VkLXByaW1lLXRhYmxlL25nLWFkdmFuY2VkLXByaW1lLXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU3QyxPQUFPLEVBQWUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQU85RCxNQUFNLE9BQU8sNkJBQTZCO0lBd0N4QztRQXZDQSxTQUFTO1FBQ0EsU0FBSSxHQUFVLEVBQUUsQ0FBQztRQUNqQixZQUFPLEdBQWtCLEVBQUUsQ0FBQztRQUM1QixpQkFBWSxHQUFXLENBQUMsQ0FBQztRQUN6QixnQkFBVyxHQUFhLEVBQUUsQ0FBQztRQUMzQixvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUNqQyxvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUNqQyxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM3QixZQUFPLEdBQVUsRUFBRSxDQUFDO1FBQ3BCLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFFckMsa0RBQWtEO1FBQ3hDLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzVCLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBSTNDLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBRWpCLHVCQUFrQixHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUVuRCw2QkFBNkI7UUFDN0IsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixXQUFNLEdBQVksS0FBSyxDQUFDO1FBQ3hCLFNBQUksR0FBVyxDQUFDLENBQUM7UUFFakIsNkJBQTZCO1FBQzdCLFlBQU8sR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLFFBQUcsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLGtCQUFhLEdBQUcsSUFBSSxHQUFHLEVBQWlCLENBQUM7UUFDekMsaUJBQVksR0FBVSxFQUFFLENBQUM7UUFDekIsdUJBQWtCLEdBQWEsRUFBRSxDQUFDO1FBRWxDLDBCQUEwQjtRQUMxQixXQUFNLEdBQXlCLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztRQUN4QyxvQkFBZSxHQUF3QixHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7UUFDaEQsb0JBQWUsR0FBd0IsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO1FBQ2hELHNCQUFpQixHQUF3QixHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7SUFFbkMsQ0FBQztJQUVoQixRQUFRO1FBQ04scURBQXFEO1FBQ3JELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxPQUFPO2FBQ25DLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksR0FBRyxDQUFDLFFBQVEsS0FBSyxLQUFLLENBQUM7YUFDakUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBYyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFFekIsbUNBQW1DO1FBQ25DLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDM0IsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDdEMsR0FBRyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7Z0JBQ3ZCLEdBQUcsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO2dCQUNyQixHQUFHLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztZQUN6QixDQUFDO1lBRUQsSUFBSSxHQUFHLENBQUMsVUFBVSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUNqQyxHQUFHLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUN4QixDQUFDO1lBRUQsSUFBSSxHQUFHLENBQUMsVUFBVSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUNqQyxHQUFHLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUN4QixDQUFDO1lBRUQsSUFBSSxHQUFHLENBQUMsUUFBUSxLQUFLLEtBQUssSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUNyRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6QyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQseUJBQXlCO0lBQ2pCLG1CQUFtQjtRQUN6QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDNUIsTUFBTSxlQUFlLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQzlCLElBQ0UsTUFBTSxDQUFDLElBQUksS0FBSyxhQUFhLENBQUMsSUFBSTtvQkFDbEMsTUFBTSxDQUFDLElBQUksS0FBSyxTQUFTO29CQUN6QixlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLFNBQVMsRUFDMUMsQ0FBQztvQkFDRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztvQkFDL0QsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUM5RCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDSCxPQUFPLGVBQWUsQ0FBQztRQUN6QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBWTtRQUNoQixLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDZCxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRU8sU0FBUyxDQUFDLFVBQWtCO1FBQ2xDLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLHFDQUFxQztZQUNyQyxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ25DLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDcEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN4QyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDN0MsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVPLG9CQUFvQjtRQUMxQixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyQixzREFBc0Q7WUFDdEQsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZELElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2xDLENBQUM7WUFDRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEMsQ0FBQztJQUNILENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDOUIsUUFBUSxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ3BCLEtBQUssUUFBUTt3QkFDWCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQzt3QkFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDbkQsTUFBTTtvQkFDUixLQUFLLE1BQU07d0JBQ1QsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUNuQyxNQUFNO29CQUNSO3dCQUNFLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO3dCQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztnQkFDeEIsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxNQUFXO1FBQ3ZDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxJQUFTLEVBQUUsRUFBRTtZQUNuQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDckMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdkIsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxRQUFRLENBQUMsS0FBWSxFQUFFLEVBQVUsRUFBRSxHQUFRO1FBQ3pDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUEwQixDQUFDO1FBQ2hELElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELGFBQWEsQ0FBQyxFQUFVLEVBQUUsR0FBUSxFQUFFLEtBQVU7UUFDNUMsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDdEIsSUFBSSxNQUFNLEVBQUUsSUFBSSxLQUFLLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDeEMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDakMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzlCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDL0IsQ0FBQztZQUNELElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUMxQyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQy9CLElBQUksTUFBTSxFQUFFLElBQUksS0FBSyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3hDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2pDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3pCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMxQixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxNQUFtQjtRQUNyQyxRQUFRLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNwQixLQUFLLGFBQWEsQ0FBQyxNQUFNO2dCQUN2QixPQUFPLE1BQU0sQ0FBQztZQUNoQixLQUFLLGFBQWEsQ0FBQyxNQUFNO2dCQUN2QixPQUFPLFNBQVMsQ0FBQztZQUNuQixLQUFLLGFBQWEsQ0FBQyxNQUFNO2dCQUN2QixPQUFPLFNBQVMsQ0FBQztZQUNuQixLQUFLLGFBQWEsQ0FBQyxJQUFJO2dCQUNyQixPQUFPLE1BQU0sQ0FBQztZQUNoQixLQUFLLGFBQWEsQ0FBQyxXQUFXO2dCQUM1QixPQUFPLGFBQWEsQ0FBQztZQUN2QixLQUFLLGFBQWEsQ0FBQyxPQUFPO2dCQUN4QixPQUFPLFNBQVMsQ0FBQztZQUNuQjtnQkFDRSxPQUFPLE1BQU0sQ0FBQztRQUNsQixDQUFDO0lBQ0gsQ0FBQztJQUVELHNCQUFzQjtJQUN0QixVQUFVLENBQUMsR0FBVztRQUNwQixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztRQUM1RCxPQUFPLE1BQU0sRUFBRSxVQUFVLEtBQUssS0FBSyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxhQUFhLENBQUMsR0FBUTtRQUNwQixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztRQUM1RCxJQUNFLE1BQU0sRUFBRSxJQUFJLEtBQUssYUFBYSxDQUFDLFdBQVc7WUFDMUMsTUFBTSxDQUFDLE9BQU87WUFDZCxNQUFNLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFDekIsQ0FBQztZQUNELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxHQUFHLENBQUM7Z0JBQzNCLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUM3QyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN0RCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxZQUFZLENBQUMsR0FBUTtRQUNuQixPQUFPLENBQ0wsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsSUFBSTtZQUNwRCxhQUFhLENBQUMsSUFBSSxDQUNuQixDQUFDO0lBQ0osQ0FBQztJQUVELGtCQUFrQjtJQUNsQixhQUFhLENBQUMsS0FBVTtRQUN0QixPQUFPLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxNQUFtQjtRQUNuQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssYUFBYSxDQUFDLE1BQU07WUFDekMsTUFBTSxDQUFDLFFBQVE7WUFDZixJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztZQUN6QyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVE7WUFDakIsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNoQixDQUFDO0lBRU8sbUJBQW1CLENBQUMsWUFBb0I7UUFDOUMsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxZQUFZLENBQUMsS0FBWTtRQUN2QixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBMEIsQ0FBQztRQUNoRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRXpDLGdDQUFnQztRQUNoQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQzdDLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUM1QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQztnQkFDOUQsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNaLE9BQU8sS0FBSyxDQUFDO2dCQUNmLENBQUM7Z0JBRUQsZ0NBQWdDO2dCQUNoQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUN2QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO29CQUM5QyxPQUFPLFFBQVEsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM5QyxDQUFDO3FCQUFNLElBQ0wsTUFBTSxDQUFDLElBQUksS0FBSyxhQUFhLENBQUMsTUFBTTtvQkFDcEMsTUFBTSxDQUFDLElBQUksS0FBSyxhQUFhLENBQUMsTUFBTSxFQUNwQyxDQUFDO29CQUNELE9BQU8sQ0FDTCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FDcEUsQ0FBQztnQkFDSixDQUFDO3FCQUFNLENBQUM7b0JBQ04sT0FBTyxDQUNMLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUNwRSxDQUFDO2dCQUNKLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsMkJBQTJCO1FBQzNCLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHLFlBQVksQ0FBQztJQUMvQixDQUFDO0lBRU8sVUFBVSxDQUFDLElBQVM7UUFDMUIsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUNyQixJQUFJLElBQUksWUFBWSxJQUFJLEVBQUUsQ0FBQztZQUN6QixxQkFBcUI7WUFDckIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDdkQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNoRSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDM0MsT0FBTyxHQUFHLEdBQUcsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7UUFDbkMsQ0FBQzthQUFNLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDcEMscUJBQXFCO1lBQ3JCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDOUIsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUN2QixPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMvQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sdUJBQXVCO2dCQUN2QixPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDOytHQXRTVSw2QkFBNkI7bUdBQTdCLDZCQUE2QixvY0NWMUMsMm9iQW9WQTs7NEZEMVVhLDZCQUE2QjtrQkFMekMsU0FBUzsrQkFDRSx5QkFBeUI7d0RBTTFCLElBQUk7c0JBQVosS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUdJLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBRTZCLEVBQUU7c0JBQXJDLFNBQVM7dUJBQUMsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGFibGUgfSBmcm9tICdwcmltZW5nL3RhYmxlJztcbmltcG9ydCB7IFRhYmxlQ29sdW1uLCBUYWJsZVR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vcHVibGljLWFwaSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25nLWFkdmFuY2VkLXByaW1lLXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL25nLWFkdmFuY2VkLXByaW1lLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL25nLWFkdmFuY2VkLXByaW1lLXRhYmxlLmNvbXBvbmVudC5jc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBOZ0FkdmFuY2VkUHJpbWVUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8vIElucHV0c1xuICBASW5wdXQoKSBkYXRhOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoKSBjb2x1bW5zOiBUYWJsZUNvbHVtbltdID0gW107XG4gIEBJbnB1dCgpIHRvdGFsUmVjb3JkczogbnVtYmVyID0gMDtcbiAgQElucHV0KCkgcm93c1BlclBhZ2U6IG51bWJlcltdID0gW107XG4gIEBJbnB1dCgpIGhhc1NlYXJjaEZpbHRlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBoYXNDb2x1bW5GaWx0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaXNQYWdpbmF0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgYWN0aW9uczogYW55W10gPSBbXTtcbiAgQElucHV0KCkgaXNTb3J0YWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIE91dHB1dHM6IEV2ZW50cyBlbWl0dGVkIHRvIHRoZSBwYXJlbnQgY29tcG9uZW50XG4gIEBPdXRwdXQoKSBmaWx0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBzZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAVmlld0NoaWxkKCdkdCcsIHsgc3RhdGljOiBmYWxzZSB9KSBkdCE6IFRhYmxlO1xuXG4gIHNlYXJjaFZhbHVlOiBzdHJpbmcgPSAnJztcblxuICBwcml2YXRlIHZhbGlkQ3VycmVuY3lDb2RlcyA9IFsnVVNEJywgJ0VVUicsICdNQUQnXTtcblxuICAvLyBDb21wb25lbnQgc3RhdGUgcHJvcGVydGllc1xuICBpc0RlbGV0ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0VkaXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcm93czogbnVtYmVyID0gMDtcblxuICAvLyBEYXRhIG1hbmFnZW1lbnQgcHJvcGVydGllc1xuICBkYXRhTWFwID0gbmV3IE1hcCgpO1xuICBtYXAgPSBuZXcgTWFwKCk7XG4gIG9wdGlvbkVudHJpZXMgPSBuZXcgTWFwPHN0cmluZywgYW55W10+KCk7XG4gIG9wdGlvblZhbHVlczogYW55W10gPSBbXTtcbiAgZ2xvYmFsRmlsdGVyRmllbGRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8vIENSVUQgb3BlcmF0aW9uIGhhbmRsZXJzXG4gIERlbGV0ZTogKHZhbHVlOiBhbnkpID0+IHZvaWQgPSAoKSA9PiB7fTtcbiAgaW5pdEVkaXRhYmxlUm93OiAoZGF0YTogYW55KSA9PiB2b2lkID0gKCkgPT4ge307XG4gIHNhdmVFZGl0YWJsZVJvdzogKGRhdGE6IGFueSkgPT4gdm9pZCA9ICgpID0+IHt9O1xuICBjYW5jZWxFZGl0YWJsZVJvdzogKGl0ZW06IGFueSkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBUcmFuc2Zvcm0gdGhlIGRhdGUgZmllbGRzIGJhc2VkIG9uIGNvbHVtbiBtZXRhZGF0YVxuICAgIHRoaXMuZGF0YSA9IHRoaXMuZm9ybWF0aW5nRGF0ZUZpZWxkcygpO1xuICAgIHRoaXMuZ2xvYmFsRmlsdGVyRmllbGRzID0gdGhpcy5jb2x1bW5zXG4gICAgICAuZmlsdGVyKChjb2wpID0+IGNvbC5jb2RlICE9PSB1bmRlZmluZWQgJiYgY29sLmlzRmlsdGVyICE9PSBmYWxzZSlcbiAgICAgIC5tYXAoKGNvbCkgPT4gY29sLmNvZGUgYXMgc3RyaW5nKTtcbiAgICB0aGlzLmluaXRpYWxpemVQYWdpbmF0aW9uKCk7XG4gICAgdGhpcy5pbml0aWFsaXplQWN0aW9ucygpO1xuXG4gICAgLy8gU2V0IGRlZmF1bHQgdmFsdWUgZm9yIGlzU29ydGFibGVcbiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICBpZiAoY29sLnR5cGUgPT09IFRhYmxlVHlwZUVudW0uQUNUSU9OKSB7XG4gICAgICAgIGNvbC5pc0VkaXRhYmxlID0gZmFsc2U7XG4gICAgICAgIGNvbC5pc0ZpbHRlciA9IGZhbHNlO1xuICAgICAgICBjb2wuaXNTb3J0YWJsZSA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29sLmlzU29ydGFibGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb2wuaXNTb3J0YWJsZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb2wuaXNFZGl0YWJsZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbC5pc0VkaXRhYmxlID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbC5pc0ZpbHRlciAhPT0gZmFsc2UgJiYgY29sLmNvZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmdsb2JhbEZpbHRlckZpZWxkcy5wdXNoKGNvbC5jb2RlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIEluaXRpYWxpemF0aW9uIE1ldGhvZHNcbiAgcHJpdmF0ZSBmb3JtYXRpbmdEYXRlRmllbGRzKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5tYXAoKGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IHRyYW5zZm9ybWVkSXRlbSA9IHsgLi4uaXRlbSB9O1xuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY29sdW1uLnR5cGUgPT09IFRhYmxlVHlwZUVudW0uREFURSAmJlxuICAgICAgICAgIGNvbHVtbi5jb2RlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICB0cmFuc2Zvcm1lZEl0ZW1bY29sdW1uLmNvZGVdICE9PSB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZVZhbHVlID0gdGhpcy5wYXJzZURhdGUodHJhbnNmb3JtZWRJdGVtW2NvbHVtbi5jb2RlXSk7XG4gICAgICAgICAgdHJhbnNmb3JtZWRJdGVtW2NvbHVtbi5jb2RlXSA9IGRhdGVWYWx1ZSA/IGRhdGVWYWx1ZSA6IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRyYW5zZm9ybWVkSXRlbTtcbiAgICB9KTtcbiAgfVxuXG4gIGNsZWFyKHRhYmxlOiBUYWJsZSkge1xuICAgIHRhYmxlLmNsZWFyKCk7XG4gICAgdGhpcy5zZWFyY2hWYWx1ZSA9ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZURhdGUoZGF0ZVN0cmluZzogc3RyaW5nKTogRGF0ZSB8IG51bGwge1xuICAgIGNvbnN0IHBhcnRzID0gZGF0ZVN0cmluZy5zcGxpdCgnLycpO1xuICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDMpIHtcbiAgICAgIC8vIEFzc3VtaW5nIGRhdGUgZm9ybWF0IGlzIEREL01NL1lZWVlcbiAgICAgIGNvbnN0IGRheSA9IHBhcnNlSW50KHBhcnRzWzBdLCAxMCk7XG4gICAgICBjb25zdCBtb250aCA9IHBhcnNlSW50KHBhcnRzWzFdLCAxMCkgLSAxO1xuICAgICAgY29uc3QgeWVhciA9IHBhcnNlSW50KHBhcnRzWzJdLCAxMCk7XG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGgsIGRheSk7XG4gICAgICByZXR1cm4gaXNOYU4oZGF0ZS5nZXRUaW1lKCkpID8gbnVsbCA6IGRhdGU7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplUGFnaW5hdGlvbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc1BhZ2luYXRlZCkge1xuICAgICAgLy8gQ2hlY2sgaWYgcm93c1BlclBhZ2UgaXMgdW5kZWZpbmVkIG9yIGFuIGVtcHR5IGFycmF5XG4gICAgICBpZiAoIXRoaXMucm93c1BlclBhZ2UgfHwgdGhpcy5yb3dzUGVyUGFnZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5yb3dzUGVyUGFnZSA9IFsyMCwgMzAsIDQwXTtcbiAgICAgIH1cbiAgICAgIHRoaXMucm93cyA9IHRoaXMucm93c1BlclBhZ2VbMF07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplQWN0aW9ucygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hY3Rpb25zKSB7XG4gICAgICB0aGlzLmFjdGlvbnMuZm9yRWFjaCgoYWN0aW9uKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoYWN0aW9uLmNvZGUpIHtcbiAgICAgICAgICBjYXNlICdkZWxldGUnOlxuICAgICAgICAgICAgdGhpcy5pc0RlbGV0ZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLkRlbGV0ZSA9ICh2YWx1ZTogYW55KSA9PiBhY3Rpb24uYWN0aW9uKHZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2VkaXQnOlxuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplRWRpdEFjdGlvbnMoYWN0aW9uKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aGlzLmlzRGVsZXRlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmlzRWRpdCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVFZGl0QWN0aW9ucyhhY3Rpb246IGFueSk6IHZvaWQge1xuICAgIHRoaXMuaXNFZGl0ID0gdHJ1ZTtcbiAgICB0aGlzLmluaXRFZGl0YWJsZVJvdyA9IChkYXRhOiBhbnkpID0+IGFjdGlvbi5hY3Rpb24uaW5pdChkYXRhKTtcbiAgICB0aGlzLnNhdmVFZGl0YWJsZVJvdyA9IChkYXRhOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHJlY29yZCA9IHRoaXMubWFwLmdldChkYXRhLmlkKTtcbiAgICAgIGFjdGlvbi5hY3Rpb24uc2F2ZShkYXRhLCByZWNvcmQpO1xuICAgICAgdGhpcy5kYXRhTWFwLmNsZWFyKCk7XG4gICAgfTtcbiAgICB0aGlzLmNhbmNlbEVkaXRhYmxlUm93ID0gKGl0ZW06IGFueSkgPT4gY29uc29sZS5sb2coaXRlbSk7XG4gIH1cblxuICBvbkNoYW5nZShldmVudDogRXZlbnQsIGlkOiBudW1iZXIsIGtleTogYW55KSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgdGhpcy5jaGFuZ2VIYW5kbGVyKGlkLCBrZXksIHRhcmdldC52YWx1ZSk7XG4gIH1cblxuICBjaGFuZ2VIYW5kbGVyKGlkOiBudW1iZXIsIGtleTogYW55LCB2YWx1ZTogYW55KSB7XG4gICAgbGV0IGNvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKChpdGVtKSA9PiBpdGVtLmNvZGUgPT09IGtleSk7XG4gICAgaWYgKCF0aGlzLm1hcC5nZXQoaWQpKSB7XG4gICAgICBpZiAoY29sdW1uPy50eXBlID09PSBUYWJsZVR5cGVFbnVtLkRBVEUpIHtcbiAgICAgICAgbGV0IGRhdGUgPSB0aGlzLnBhcnNlRGF0ZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMuZGF0YU1hcC5zZXQoa2V5LCBkYXRlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGF0YU1hcC5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgICB0aGlzLm1hcC5zZXQoaWQsIG5ldyBNYXAodGhpcy5kYXRhTWFwKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBtYXBJdGVtID0gdGhpcy5tYXAuZ2V0KGlkKTtcbiAgICAgIGlmIChjb2x1bW4/LnR5cGUgPT09IFRhYmxlVHlwZUVudW0uREFURSkge1xuICAgICAgICBsZXQgZGF0ZSA9IHRoaXMucGFyc2VEYXRlKHZhbHVlKTtcbiAgICAgICAgbWFwSXRlbS5zZXQoa2V5LCBkYXRlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1hcEl0ZW0uc2V0KGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldENvbHVtbkZpbHRlclR5cGUoY29sdW1uOiBUYWJsZUNvbHVtbik6IHN0cmluZyB7XG4gICAgc3dpdGNoIChjb2x1bW4udHlwZSkge1xuICAgICAgY2FzZSBUYWJsZVR5cGVFbnVtLlNUUklORzpcbiAgICAgICAgcmV0dXJuICd0ZXh0JztcbiAgICAgIGNhc2UgVGFibGVUeXBlRW51bS5BTU9VTlQ6XG4gICAgICAgIHJldHVybiAnbnVtZXJpYyc7XG4gICAgICBjYXNlIFRhYmxlVHlwZUVudW0uTlVNQkVSOlxuICAgICAgICByZXR1cm4gJ251bWVyaWMnO1xuICAgICAgY2FzZSBUYWJsZVR5cGVFbnVtLkRBVEU6XG4gICAgICAgIHJldHVybiAnZGF0ZSc7XG4gICAgICBjYXNlIFRhYmxlVHlwZUVudW0uTVVMVElTRUxFQ1Q6XG4gICAgICAgIHJldHVybiAnbXVsdGlTZWxlY3QnO1xuICAgICAgY2FzZSBUYWJsZVR5cGVFbnVtLkJPT0xFQU46XG4gICAgICAgIHJldHVybiAnYm9vbGVhbic7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ3RleHQnO1xuICAgIH1cbiAgfVxuXG4gIC8vIFN0YXRlIENoZWNrIE1ldGhvZHNcbiAgaXNFZGl0YWJsZShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGxldCBjb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZCgoaXRlbSkgPT4gaXRlbS5jb2RlID09PSBrZXkpO1xuICAgIHJldHVybiBjb2x1bW4/LmlzRWRpdGFibGUgIT09IGZhbHNlO1xuICB9XG5cbiAgaXNNdWx0aVNlbGVjdChrZXk6IGFueSk6IGJvb2xlYW4ge1xuICAgIGxldCBjb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZCgoaXRlbSkgPT4gaXRlbS5jb2RlID09PSBrZXkpO1xuICAgIGlmIChcbiAgICAgIGNvbHVtbj8udHlwZSA9PT0gVGFibGVUeXBlRW51bS5NVUxUSVNFTEVDVCAmJlxuICAgICAgY29sdW1uLm9wdGlvbnMgJiZcbiAgICAgIGNvbHVtbi5jb2RlICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIHRoaXMub3B0aW9uRW50cmllcyA9IG5ldyBNYXAoW1xuICAgICAgICBbY29sdW1uLmNvZGUsIE9iamVjdC52YWx1ZXMoY29sdW1uLm9wdGlvbnMpXSxcbiAgICAgIF0pO1xuICAgICAgdGhpcy5vcHRpb25WYWx1ZXMgPSB0aGlzLm9wdGlvbkVudHJpZXMuZ2V0KGtleSkgfHwgW107XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaXNEYXRlUGlja2VyKGtleTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY29sdW1ucy5maW5kKChpdGVtKSA9PiBpdGVtLmNvZGUgPT09IGtleSk/LnR5cGUgPT09XG4gICAgICBUYWJsZVR5cGVFbnVtLkRBVEVcbiAgICApO1xuICB9XG5cbiAgLy8gVXRpbGl0eSBNZXRob2RzXG4gIGRhdGVDb252ZXJ0ZXIodmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKS50b0xvY2FsZURhdGVTdHJpbmcoJ2VuLVVTJyk7XG4gIH1cblxuICBnZXRDdXJyZW5jeVN5bWJvbChjb2x1bW46IFRhYmxlQ29sdW1uKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gY29sdW1uLnR5cGUgPT09IFRhYmxlVHlwZUVudW0uQU1PVU5UICYmXG4gICAgICBjb2x1bW4uY3VycmVuY3kgJiZcbiAgICAgIHRoaXMuaXNWYWxpZEN1cnJlbmN5Q29kZShjb2x1bW4uY3VycmVuY3kpXG4gICAgICA/IGNvbHVtbi5jdXJyZW5jeVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGlzVmFsaWRDdXJyZW5jeUNvZGUoY3VycmVuY3lDb2RlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy52YWxpZEN1cnJlbmN5Q29kZXMuaW5jbHVkZXMoY3VycmVuY3lDb2RlKTtcbiAgfVxuXG4gIGZpbHRlckdsb2JhbChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBjb25zdCB2YWx1ZSA9IHRhcmdldC52YWx1ZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgLy8gQ3JlYXRlIGEgbmV3IGZpbHRlcmVkIGRhdGFzZXRcbiAgICBjb25zdCBmaWx0ZXJlZERhdGEgPSB0aGlzLmRhdGEuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5nbG9iYWxGaWx0ZXJGaWVsZHMuc29tZSgoZmllbGQpID0+IHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5zLmZpbmQoKGNvbCkgPT4gY29sLmNvZGUgPT09IGZpZWxkKTtcbiAgICAgICAgaWYgKCFjb2x1bW4pIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBIYW5kbGUgZGlmZmVyZW50IGNvbHVtbiB0eXBlc1xuICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IFRhYmxlVHlwZUVudW0uREFURSkge1xuICAgICAgICAgIGNvbnN0IGl0ZW1EYXRlID0gdGhpcy5mb3JtYXREYXRlKGl0ZW1bZmllbGRdKTtcbiAgICAgICAgICByZXR1cm4gaXRlbURhdGUgJiYgaXRlbURhdGUuaW5jbHVkZXModmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIGNvbHVtbi50eXBlID09PSBUYWJsZVR5cGVFbnVtLkFNT1VOVCB8fFxuICAgICAgICAgIGNvbHVtbi50eXBlID09PSBUYWJsZVR5cGVFbnVtLk5VTUJFUlxuICAgICAgICApIHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaXRlbVtmaWVsZF0gJiYgaXRlbVtmaWVsZF0udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHZhbHVlKVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGl0ZW1bZmllbGRdICYmIGl0ZW1bZmllbGRdLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh2YWx1ZSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIFVwZGF0ZSB0aGUgdGFibGUncyB2YWx1ZVxuICAgIHRoaXMuZHQudmFsdWUgPSBmaWx0ZXJlZERhdGE7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdERhdGUoZGF0ZTogYW55KTogc3RyaW5nIHtcbiAgICBpZiAoIWRhdGUpIHJldHVybiAnJztcbiAgICBpZiAoZGF0ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIC8vIEhhbmRsZSBEYXRlIG9iamVjdFxuICAgICAgY29uc3QgZGF5ID0gZGF0ZS5nZXREYXRlKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgICAgY29uc3QgbW9udGggPSAoZGF0ZS5nZXRNb250aCgpICsgMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgICAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpO1xuICAgICAgcmV0dXJuIGAke2RheX0vJHttb250aH0vJHt5ZWFyfWA7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIEhhbmRsZSBzdHJpbmcgZGF0ZVxuICAgICAgY29uc3QgcGFydHMgPSBkYXRlLnNwbGl0KCcvJyk7XG4gICAgICBpZiAocGFydHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgIHJldHVybiBgJHtwYXJ0c1swXX0vJHtwYXJ0c1sxXX0vJHtwYXJ0c1syXX1gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSGFuZGxlIHBhcnRpYWwgZGF0ZXNcbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInRhYmxlLWNvbnRhaW5lclwiPlxuICA8ZGl2PlxuICAgIDxwLXRhYmxlXG4gICAgICAjZHRcbiAgICAgIFt2YWx1ZV09XCJkYXRhXCJcbiAgICAgIFtyb3dzXT1cInJvd3NcIlxuICAgICAgW3BhZ2luYXRvcl09XCJpc1BhZ2luYXRlZFwiXG4gICAgICBbZ2xvYmFsRmlsdGVyRmllbGRzXT1cImdsb2JhbEZpbHRlckZpZWxkc1wiXG4gICAgICBbcm93c1BlclBhZ2VPcHRpb25zXT1cInJvd3NQZXJQYWdlXCJcbiAgICAgIGRhdGFLZXk9XCJpZFwiXG4gICAgICBzdHlsZUNsYXNzPVwicC1kYXRhdGFibGUtZ3JpZGxpbmVzXCJcbiAgICAgIHN0eWxlQ2xhc3M9XCJwLWRhdGF0YWJsZS1zdHJpcGVkXCJcbiAgICAgIGVkaXRNb2RlPVwicm93XCJcbiAgICA+XG4gICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY2FwdGlvblwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8aDM+VG90YWw6IHt7IHRvdGFsUmVjb3JkcyB9fTwvaDM+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgICAgIGxhYmVsPVwiQ2xlYXJcIlxuICAgICAgICAgICAgICBbb3V0bGluZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIGljb249XCJwaSBwaS1maWx0ZXItc2xhc2hcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXIoZHQpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJidC1maWx0ZXItYnRuXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1sLWF1dG9cIiAqbmdJZj1cImhhc1NlYXJjaEZpbHRlclwiPlxuICAgICAgICAgICAgPCEtLSBBZGQgdGhpcyB3cmFwcGVyIGRpdiB3aXRoIG1sLWF1dG8gY2xhc3MgLS0+XG4gICAgICAgICAgICA8cC1pY29uRmllbGQgaWNvblBvc2l0aW9uPVwibGVmdFwiIGNsYXNzPVwibWwtYXV0b1wiPlxuICAgICAgICAgICAgICA8cC1pbnB1dEljb24+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1zZWFyY2hcIj48L2k+XG4gICAgICAgICAgICAgIDwvcC1pbnB1dEljb24+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHBJbnB1dFRleHRcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hWYWx1ZVwiXG4gICAgICAgICAgICAgICAgKGlucHV0KT1cImZpbHRlckdsb2JhbCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBrZXl3b3JkXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvcC1pY29uRmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdJZj1cImlzU29ydGFibGUgJiYgY29sLmlzU29ydGFibGUgIT09IGZhbHNlOyBlbHNlIG5vU29ydEhlYWRlclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDx0aCBwU29ydGFibGVDb2x1bW49XCJ7eyBjb2wuY29kZSB9fVwiIHN0eWxlPVwid2lkdGg6IDIwJVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57eyBjb2wudGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8cC1zb3J0SWNvbiBmaWVsZD1cInt7IGNvbC5jb2RlIH19XCIgLz5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wuaXNGaWx0ZXIgIT09IGZhbHNlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwLWNvbHVtbkZpbHRlclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLnR5cGUgPT09ICdBTU9VTlQnXCJcbiAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5PVwibWVudVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2ZpZWxkXT1cImNvbC5jb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJnZXRDb2x1bW5GaWx0ZXJUeXBlKGNvbClcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjdXJyZW5jeV09XCJnZXRDdXJyZW5jeVN5bWJvbChjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvcC1jb2x1bW5GaWx0ZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgPHAtY29sdW1uRmlsdGVyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wudHlwZSAhPT0gJ0FNT1VOVCdcIlxuICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk9XCJtZW51XCJcbiAgICAgICAgICAgICAgICAgICAgICBbZmllbGRdPVwiY29sLmNvZGVcIlxuICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk9XCJtZW51XCJcbiAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJnZXRDb2x1bW5GaWx0ZXJUeXBlKGNvbClcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cImdldENvbHVtbkZpbHRlclR5cGUoY29sKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIHBUZW1wbGF0ZT1cImZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQtdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldC1maWx0ZXJDYWxsYmFjaz1cImZpbHRlckNhbGxiYWNrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0Q29sdW1uRmlsdGVyVHlwZShjb2wpID09PSAnZGF0ZSdcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwLWNhbGVuZGFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiZmlsdGVyQ2FsbGJhY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRlRm9ybWF0XT1cIidkZC9tbS95eSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvcC1jYWxlbmRhcj5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICBwVGVtcGxhdGU9XCJmaWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0LXZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQtZmlsdGVyQ2FsbGJhY2s9XCJmaWx0ZXJDYWxsYmFja1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImdldENvbHVtbkZpbHRlclR5cGUoY29sKSA9PT0gJ211bHRpU2VsZWN0J1wiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAtbXVsdGlTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiY29sLmZpbHRlck9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlckNhbGxiYWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzcGxheV09XCInY2hpcCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3VzdG9tLW11bHRpc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3AtbXVsdGlTZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9wLWNvbHVtbkZpbHRlcj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vU29ydEhlYWRlcj5cbiAgICAgICAgICAgICAgPHRoPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57eyBjb2wudGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLmlzRmlsdGVyICE9PSBmYWxzZVwiPlxuICAgICAgICAgICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbC50eXBlID09PSAnQU1PVU5UJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgZGlzcGxheT1cIm1lbnVcIlxuICAgICAgICAgICAgICAgICAgICAgIFtmaWVsZF09XCJjb2wuY29kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwiZ2V0Q29sdW1uRmlsdGVyVHlwZShjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY3VycmVuY3ldPVwiZ2V0Q3VycmVuY3lTeW1ib2woY29sKVwiXG4gICAgICAgICAgICAgICAgICAgID48L3AtY29sdW1uRmlsdGVyPlxuXG4gICAgICAgICAgICAgICAgICAgIDxwLWNvbHVtbkZpbHRlclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLnR5cGUgIT09ICdBTU9VTlQnXCJcbiAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5PVwibWVudVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2ZpZWxkXT1cImNvbC5jb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJnZXRDb2x1bW5GaWx0ZXJUeXBlKGNvbClcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICBwVGVtcGxhdGU9XCJmaWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0LXZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQtZmlsdGVyQ2FsbGJhY2s9XCJmaWx0ZXJDYWxsYmFja1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImdldENvbHVtbkZpbHRlclR5cGUoY29sKSA9PT0gJ2RhdGUnXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cC1jYWxlbmRhclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlckNhbGxiYWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0ZUZvcm1hdF09XCInZGQvbW0veXknXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3AtY2FsZW5kYXI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgcFRlbXBsYXRlPVwiZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldC12YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0LWZpbHRlckNhbGxiYWNrPVwiZmlsdGVyQ2FsbGJhY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRDb2x1bW5GaWx0ZXJUeXBlKGNvbCkgPT09ICdtdWx0aVNlbGVjdCdcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwLW11bHRpU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cImNvbC5maWx0ZXJPcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJDYWxsYmFjaygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc3BsYXldPVwiJ2NoaXAnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImN1c3RvbS1tdWx0aXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9wLW11bHRpU2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvcC1jb2x1bW5GaWx0ZXI+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICBwVGVtcGxhdGU9XCJib2R5XCJcbiAgICAgICAgbGV0LWRhdGFcbiAgICAgICAgbGV0LWVkaXRpbmc9XCJlZGl0aW5nXCJcbiAgICAgICAgbGV0LXJpPVwicm93SW5kZXhcIlxuICAgICAgPlxuICAgICAgICA8IS0tIFJlbmRlciBhIHRhYmxlIHJvdyBhbmQgbWFrZSBpdCBlZGl0YWJsZSBpZiBgaXNFZGl0YCBpcyB0cnVlIC0tPlxuICAgICAgICA8dHIgW3BFZGl0YWJsZVJvd109XCJpc0VkaXQgPyBkYXRhIDogbnVsbFwiPlxuICAgICAgICAgIDwhLS0gTG9vcCB0aHJvdWdoIGVhY2ggY29sdW1uIGFuZCByZW5kZXIgY29ycmVzcG9uZGluZyB0YWJsZSBjZWxscyAtLT5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC5jb2RlICE9PSB1bmRlZmluZWRcIj5cbiAgICAgICAgICAgICAgPCEtLSBDaGVjayBpZiB0aGUgZGF0YSBmb3IgdGhlIGNvbHVtbiBleGlzdHMgLS0+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhW2NvbC5jb2RlXSAhPT0gdW5kZWZpbmVkXCI+XG4gICAgICAgICAgICAgICAgPCEtLSBSZW5kZXIgYW4gZWRpdGFibGUgY2VsbCBpZiB0aGUgY29sdW1uIGlzIGVkaXRhYmxlIC0tPlxuICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cImlzRWRpdGFibGUoY29sLmNvZGUpOyBlbHNlIG5vcm1hbFREXCI+XG4gICAgICAgICAgICAgICAgICA8IS0tIE11bHRpLXNlbGVjdCBpbnB1dCBmb3IgY29sdW1ucyB0aGF0IGFyZSBtdWx0aS1zZWxlY3RhYmxlIC0tPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImlzTXVsdGlTZWxlY3QoY29sLmNvZGUpOyBlbHNlIGRhdGVQaWNrZXJcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8cC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAtbXVsdGlTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG89XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZGF0YVtjb2wuY29kZV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwieyB3aWR0aDogJzEwMCUnIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VIYW5kbGVyKGRhdGEuaWQsIGNvbC5jb2RlLCAkZXZlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIm9wdGlvblZhbHVlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9wLW11bHRpU2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm11bHRpLXNlbGVjdC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcmVjIG9mIGRhdGFbY29sLmNvZGVdXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAtdGFnIFt2YWx1ZV09XCJyZWNcIj48L3AtdGFnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgIDwhLS0gRGF0ZSBwaWNrZXIgaW5wdXQgZm9yIGNvbHVtbnMgdGhhdCByZXF1aXJlIGRhdGUgc2VsZWN0aW9uIC0tPlxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkYXRlUGlja2VyPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc0RhdGVQaWNrZXIoY29sLmNvZGUpOyBlbHNlIG5vcm1hbElucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxwLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHAtY2FsZW5kYXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRJZF09XCJkYXRhW2NvbC5jb2RlXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZGF0YVtjb2wuY29kZV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlSGFuZGxlcihkYXRhLmlkLCBjb2wuY29kZSwgJGV2ZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGVGb3JtYXRdPVwiJ2RkL21tL3l5J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID48L3AtY2FsZW5kYXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBkYXRhW2NvbC5jb2RlXSB8IGN1c3RvbURhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9wLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgICAgICAgPCEtLSBOb3JtYWwgdGV4dCBpbnB1dCBmb3Igb3RoZXIgY29sdW1ucyAtLT5cbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9ybWFsSW5wdXQ+XG4gICAgICAgICAgICAgICAgICAgIDxwLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImlucHV0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcElucHV0VGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImRhdGFbY29sLmNvZGVdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQsIGRhdGEuaWQsIGNvbC5jb2RlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBVc2UgY3VycmVuY3kgcGlwZSB0byBmb3JtYXQgdGhlIG91dHB1dCBmb3IgQU1PVU5UIHR5cGUgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLnR5cGUgPT09ICdBTU9VTlQnOyBlbHNlIG5vcm1hbE91dHB1dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtjb2wuY29kZV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY3VzdG9tQ3VycmVuY3lcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBnZXRDdXJyZW5jeVN5bWJvbChjb2wpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY29sLmRlY2ltYWxQbGFjZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjb2wudGhvdXNhbmRTZXBhcmF0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjb2wuZGVjaW1hbFNlcGFyYXRvclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vcm1hbE91dHB1dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZGF0YVtjb2wuY29kZV0gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9wLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvdGQ+XG5cbiAgICAgICAgICAgICAgICA8IS0tIFJlbmRlciBhIG5vcm1hbCB0YWJsZSBjZWxsIGlmIHRoZSBjb2x1bW4gaXMgbm90IGVkaXRhYmxlIC0tPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9ybWFsVEQ+XG4gICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gVXNlIGN1c3RvbUN1cnJlbmN5IHBpcGUgdG8gZm9ybWF0IHRoZSBvdXRwdXQgZm9yIEFNT1VOVCB0eXBlIHdpdGggb3B0aW9uYWwgZGVjaW1hbCBwbGFjZXMgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbC50eXBlID09PSAnQU1PVU5UJzsgZWxzZSBub3JtYWxUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtjb2wuY29kZV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjdXN0b21DdXJyZW5jeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZ2V0Q3VycmVuY3lTeW1ib2woY29sKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY29sLmRlY2ltYWxQbGFjZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNvbC50aG91c2FuZFNlcGFyYXRvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY29sLmRlY2ltYWxTZXBhcmF0b3JcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub3JtYWxUZXh0PlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGRhdGFbY29sLmNvZGVdIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8IS0tIFJlbmRlciBhY3Rpb24gYnV0dG9ucyBpZiB0aGVyZSBhcmUgYW55IGFjdGlvbnMgZGVmaW5lZCAtLT5cbiAgICAgICAgICA8dGQgKm5nSWY9XCJhY3Rpb25zPy5sZW5ndGhcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tYnV0dG9ucy1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgPCEtLSBEZWxldGUgYnV0dG9uIGlmIGRlbGV0aW9uIGlzIGFsbG93ZWQgLS0+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0RlbGV0ZVwiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHBCdXR0b25cbiAgICAgICAgICAgICAgICAgIHBSaXBwbGVcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXRyYXNoXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJEZWxldGUoZGF0YS5pZClcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHRcIlxuICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwhLS0gRWRpdCwgc2F2ZSwgYW5kIGNhbmNlbCBidXR0b25zIGZvciByb3cgZWRpdGluZyAtLT5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBwSW5pdEVkaXRhYmxlUm93XG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIiFlZGl0aW5nXCJcbiAgICAgICAgICAgICAgICAgIHBCdXR0b25cbiAgICAgICAgICAgICAgICAgIHBSaXBwbGVcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXBlbmNpbFwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaW5pdEVkaXRhYmxlUm93KGRhdGEpXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi10ZXh0XCJcbiAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJlZGl0aW5nXCJcbiAgICAgICAgICAgICAgICAgIHBTYXZlRWRpdGFibGVSb3dcbiAgICAgICAgICAgICAgICAgIHBCdXR0b25cbiAgICAgICAgICAgICAgICAgIHBSaXBwbGVcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLWNoZWNrXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzYXZlRWRpdGFibGVSb3coZGF0YSlcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHRcIlxuICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImVkaXRpbmdcIlxuICAgICAgICAgICAgICAgICAgcENhbmNlbEVkaXRhYmxlUm93XG4gICAgICAgICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICAgICAgICBwUmlwcGxlXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS10aW1lc1wiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2FuY2VsRWRpdGFibGVSb3coZGF0YSlcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHRcIlxuICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L3AtdGFibGU+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
326
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctYWR2YW5jZWQtcHJpbWUtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctcHJpbWUtdG9vbHMvc3JjL2xpYi9uZy1hZHZhbmNlZC1wcmltZS10YWJsZS9uZy1hZHZhbmNlZC1wcmltZS10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1wcmltZS10b29scy9zcmMvbGliL25nLWFkdmFuY2VkLXByaW1lLXRhYmxlL25nLWFkdmFuY2VkLXByaW1lLXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU3QyxPQUFPLEVBQWUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQU85RCxNQUFNLE9BQU8sNkJBQTZCO0lBNEN4QztRQTNDQSxTQUFTO1FBQ0EsU0FBSSxHQUFVLEVBQUUsQ0FBQztRQUNqQixZQUFPLEdBQWtCLEVBQUUsQ0FBQztRQUM1QixpQkFBWSxHQUFXLENBQUMsQ0FBQztRQUN6QixnQkFBVyxHQUFhLEVBQUUsQ0FBQztRQUMzQixvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUNqQyxtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUNoQyxpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUM5QixvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUNqQyxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM3QixZQUFPLEdBQVUsRUFBRSxDQUFDO1FBQ3BCLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFFckMsa0RBQWtEO1FBQ3hDLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzVCLFdBQU0sR0FBRyxJ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NkJBQTZCO21HQUE3Qiw2QkFBNkIsNGtCQ1YxQywrNGNBMFdBOzs0RkRoV2EsNkJBQTZCO2tCQUx6QyxTQUFTOytCQUNFLHlCQUF5Qjt3REFNMUIsSUFBSTtzQkFBWixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUdJLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBRTZCLEVBQUU7c0JBQXJDLFNBQVM7dUJBQUMsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGFibGUgfSBmcm9tICdwcmltZW5nL3RhYmxlJztcbmltcG9ydCB7IFRhYmxlQ29sdW1uLCBUYWJsZVR5cGVFbnVtIH0gZnJvbSAnLi4vLi4vcHVibGljLWFwaSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25nLWFkdmFuY2VkLXByaW1lLXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL25nLWFkdmFuY2VkLXByaW1lLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL25nLWFkdmFuY2VkLXByaW1lLXRhYmxlLmNvbXBvbmVudC5jc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBOZ0FkdmFuY2VkUHJpbWVUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8vIElucHV0c1xuICBASW5wdXQoKSBkYXRhOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoKSBjb2x1bW5zOiBUYWJsZUNvbHVtbltdID0gW107XG4gIEBJbnB1dCgpIHRvdGFsUmVjb3JkczogbnVtYmVyID0gMDtcbiAgQElucHV0KCkgcm93c1BlclBhZ2U6IG51bWJlcltdID0gW107XG4gIEBJbnB1dCgpIGhhc1NlYXJjaEZpbHRlcjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBoYXNFeHBvcnRFeGNlbDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBoYXNFeHBvcnRQREY6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaGFzQ29sdW1uRmlsdGVyOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGlzUGFnaW5hdGVkOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGFjdGlvbnM6IGFueVtdID0gW107XG4gIEBJbnB1dCgpIGlzU29ydGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBPdXRwdXRzOiBFdmVudHMgZW1pdHRlZCB0byB0aGUgcGFyZW50IGNvbXBvbmVudFxuICBAT3V0cHV0KCkgZmlsdGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgc2VhcmNoID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBleHBvcnRFeGNlbEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgZXhwb3J0UGRmRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQFZpZXdDaGlsZCgnZHQnLCB7IHN0YXRpYzogZmFsc2UgfSkgZHQhOiBUYWJsZTtcblxuICBzZWFyY2hWYWx1ZTogc3RyaW5nID0gJyc7XG5cbiAgcHJpdmF0ZSB2YWxpZEN1cnJlbmN5Q29kZXMgPSBbJ1VTRCcsICdFVVInLCAnTUFEJ107XG5cbiAgLy8gQ29tcG9uZW50IHN0YXRlIHByb3BlcnRpZXNcbiAgaXNEZWxldGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNFZGl0OiBib29sZWFuID0gZmFsc2U7XG4gIHJvd3M6IG51bWJlciA9IDA7XG5cbiAgLy8gRGF0YSBtYW5hZ2VtZW50IHByb3BlcnRpZXNcbiAgZGF0YU1hcCA9IG5ldyBNYXAoKTtcbiAgbWFwID0gbmV3IE1hcCgpO1xuICBvcHRpb25FbnRyaWVzID0gbmV3IE1hcDxzdHJpbmcsIGFueVtdPigpO1xuICBvcHRpb25WYWx1ZXM6IGFueVtdID0gW107XG4gIGdsb2JhbEZpbHRlckZpZWxkczogc3RyaW5nW10gPSBbXTtcblxuICAvLyBDUlVEIG9wZXJhdGlvbiBoYW5kbGVyc1xuICBEZWxldGU6ICh2YWx1ZTogYW55KSA9PiB2b2lkID0gKCkgPT4ge307XG4gIGluaXRFZGl0YWJsZVJvdzogKGRhdGE6IGFueSkgPT4gdm9pZCA9ICgpID0+IHt9O1xuICBzYXZlRWRpdGFibGVSb3c6IChkYXRhOiBhbnkpID0+IHZvaWQgPSAoKSA9PiB7fTtcbiAgY2FuY2VsRWRpdGFibGVSb3c6IChpdGVtOiBhbnkpID0+IHZvaWQgPSAoKSA9PiB7fTtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gVHJhbnNmb3JtIHRoZSBkYXRlIGZpZWxkcyBiYXNlZCBvbiBjb2x1bW4gbWV0YWRhdGFcbiAgICB0aGlzLmRhdGEgPSB0aGlzLmZvcm1hdGluZ0RhdGVGaWVsZHMoKTtcbiAgICB0aGlzLmdsb2JhbEZpbHRlckZpZWxkcyA9IHRoaXMuY29sdW1uc1xuICAgICAgLmZpbHRlcigoY29sKSA9PiBjb2wuY29kZSAhPT0gdW5kZWZpbmVkICYmIGNvbC5pc0ZpbHRlciAhPT0gZmFsc2UpXG4gICAgICAubWFwKChjb2wpID0+IGNvbC5jb2RlIGFzIHN0cmluZyk7XG4gICAgdGhpcy5pbml0aWFsaXplUGFnaW5hdGlvbigpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZUFjdGlvbnMoKTtcblxuICAgIC8vIFNldCBkZWZhdWx0IHZhbHVlIGZvciBpc1NvcnRhYmxlXG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgaWYgKGNvbC50eXBlID09PSBUYWJsZVR5cGVFbnVtLkFDVElPTikge1xuICAgICAgICBjb2wuaXNFZGl0YWJsZSA9IGZhbHNlO1xuICAgICAgICBjb2wuaXNGaWx0ZXIgPSBmYWxzZTtcbiAgICAgICAgY29sLmlzU29ydGFibGUgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbC5pc1NvcnRhYmxlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29sLmlzU29ydGFibGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29sLmlzRWRpdGFibGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb2wuaXNFZGl0YWJsZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb2wuaXNGaWx0ZXIgIT09IGZhbHNlICYmIGNvbC5jb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5nbG9iYWxGaWx0ZXJGaWVsZHMucHVzaChjb2wuY29kZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBJbml0aWFsaXphdGlvbiBNZXRob2RzXG4gIHByaXZhdGUgZm9ybWF0aW5nRGF0ZUZpZWxkcygpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmRhdGEubWFwKChpdGVtKSA9PiB7XG4gICAgICBjb25zdCB0cmFuc2Zvcm1lZEl0ZW0gPSB7IC4uLml0ZW0gfTtcbiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNvbHVtbi50eXBlID09PSBUYWJsZVR5cGVFbnVtLkRBVEUgJiZcbiAgICAgICAgICBjb2x1bW4uY29kZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgdHJhbnNmb3JtZWRJdGVtW2NvbHVtbi5jb2RlXSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IGRhdGVWYWx1ZSA9IHRoaXMucGFyc2VEYXRlKHRyYW5zZm9ybWVkSXRlbVtjb2x1bW4uY29kZV0pO1xuICAgICAgICAgIHRyYW5zZm9ybWVkSXRlbVtjb2x1bW4uY29kZV0gPSBkYXRlVmFsdWUgPyBkYXRlVmFsdWUgOiBudWxsO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0cmFuc2Zvcm1lZEl0ZW07XG4gICAgfSk7XG4gIH1cblxuICBjbGVhcih0YWJsZTogVGFibGUpIHtcbiAgICB0YWJsZS5jbGVhcigpO1xuICAgIHRoaXMuc2VhcmNoVmFsdWUgPSAnJztcbiAgfVxuXG4gIHByaXZhdGUgcGFyc2VEYXRlKGRhdGVTdHJpbmc6IHN0cmluZyk6IERhdGUgfCBudWxsIHtcbiAgICBjb25zdCBwYXJ0cyA9IGRhdGVTdHJpbmcuc3BsaXQoJy8nKTtcbiAgICBpZiAocGFydHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAvLyBBc3N1bWluZyBkYXRlIGZvcm1hdCBpcyBERC9NTS9ZWVlZXG4gICAgICBjb25zdCBkYXkgPSBwYXJzZUludChwYXJ0c1swXSwgMTApO1xuICAgICAgY29uc3QgbW9udGggPSBwYXJzZUludChwYXJ0c1sxXSwgMTApIC0gMTtcbiAgICAgIGNvbnN0IHllYXIgPSBwYXJzZUludChwYXJ0c1syXSwgMTApO1xuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCBkYXkpO1xuICAgICAgcmV0dXJuIGlzTmFOKGRhdGUuZ2V0VGltZSgpKSA/IG51bGwgOiBkYXRlO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVBhZ2luYXRpb24oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNQYWdpbmF0ZWQpIHtcbiAgICAgIC8vIENoZWNrIGlmIHJvd3NQZXJQYWdlIGlzIHVuZGVmaW5lZCBvciBhbiBlbXB0eSBhcnJheVxuICAgICAgaWYgKCF0aGlzLnJvd3NQZXJQYWdlIHx8IHRoaXMucm93c1BlclBhZ2UubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMucm93c1BlclBhZ2UgPSBbMjAsIDMwLCA0MF07XG4gICAgICB9XG4gICAgICB0aGlzLnJvd3MgPSB0aGlzLnJvd3NQZXJQYWdlWzBdO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUFjdGlvbnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYWN0aW9ucykge1xuICAgICAgdGhpcy5hY3Rpb25zLmZvckVhY2goKGFjdGlvbikgPT4ge1xuICAgICAgICBzd2l0Y2ggKGFjdGlvbi5jb2RlKSB7XG4gICAgICAgICAgY2FzZSAnZGVsZXRlJzpcbiAgICAgICAgICAgIHRoaXMuaXNEZWxldGUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5EZWxldGUgPSAodmFsdWU6IGFueSkgPT4gYWN0aW9uLmFjdGlvbih2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdlZGl0JzpcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZUVkaXRBY3Rpb25zKGFjdGlvbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhpcy5pc0RlbGV0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5pc0VkaXQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplRWRpdEFjdGlvbnMoYWN0aW9uOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmlzRWRpdCA9IHRydWU7XG4gICAgdGhpcy5pbml0RWRpdGFibGVSb3cgPSAoZGF0YTogYW55KSA9PiBhY3Rpb24uYWN0aW9uLmluaXQoZGF0YSk7XG4gICAgdGhpcy5zYXZlRWRpdGFibGVSb3cgPSAoZGF0YTogYW55KSA9PiB7XG4gICAgICBjb25zdCByZWNvcmQgPSB0aGlzLm1hcC5nZXQoZGF0YS5pZCk7XG4gICAgICBhY3Rpb24uYWN0aW9uLnNhdmUoZGF0YSwgcmVjb3JkKTtcbiAgICAgIHRoaXMuZGF0YU1hcC5jbGVhcigpO1xuICAgIH07XG4gICAgdGhpcy5jYW5jZWxFZGl0YWJsZVJvdyA9IChpdGVtOiBhbnkpID0+IGNvbnNvbGUubG9nKGl0ZW0pO1xuICB9XG5cbiAgb25DaGFuZ2UoZXZlbnQ6IEV2ZW50LCBpZDogbnVtYmVyLCBrZXk6IGFueSkge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIHRoaXMuY2hhbmdlSGFuZGxlcihpZCwga2V5LCB0YXJnZXQudmFsdWUpO1xuICB9XG5cbiAgY2hhbmdlSGFuZGxlcihpZDogbnVtYmVyLCBrZXk6IGFueSwgdmFsdWU6IGFueSkge1xuICAgIGxldCBjb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZCgoaXRlbSkgPT4gaXRlbS5jb2RlID09PSBrZXkpO1xuICAgIGlmICghdGhpcy5tYXAuZ2V0KGlkKSkge1xuICAgICAgaWYgKGNvbHVtbj8udHlwZSA9PT0gVGFibGVUeXBlRW51bS5EQVRFKSB7XG4gICAgICAgIGxldCBkYXRlID0gdGhpcy5wYXJzZURhdGUodmFsdWUpO1xuICAgICAgICB0aGlzLmRhdGFNYXAuc2V0KGtleSwgZGF0ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRhdGFNYXAuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgICAgdGhpcy5tYXAuc2V0KGlkLCBuZXcgTWFwKHRoaXMuZGF0YU1hcCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgbWFwSXRlbSA9IHRoaXMubWFwLmdldChpZCk7XG4gICAgICBpZiAoY29sdW1uPy50eXBlID09PSBUYWJsZVR5cGVFbnVtLkRBVEUpIHtcbiAgICAgICAgbGV0IGRhdGUgPSB0aGlzLnBhcnNlRGF0ZSh2YWx1ZSk7XG4gICAgICAgIG1hcEl0ZW0uc2V0KGtleSwgZGF0ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtYXBJdGVtLnNldChrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRDb2x1bW5GaWx0ZXJUeXBlKGNvbHVtbjogVGFibGVDb2x1bW4pOiBzdHJpbmcge1xuICAgIHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcbiAgICAgIGNhc2UgVGFibGVUeXBlRW51bS5TVFJJTkc6XG4gICAgICAgIHJldHVybiAndGV4dCc7XG4gICAgICBjYXNlIFRhYmxlVHlwZUVudW0uQU1PVU5UOlxuICAgICAgICByZXR1cm4gJ251bWVyaWMnO1xuICAgICAgY2FzZSBUYWJsZVR5cGVFbnVtLk5VTUJFUjpcbiAgICAgICAgcmV0dXJuICdudW1lcmljJztcbiAgICAgIGNhc2UgVGFibGVUeXBlRW51bS5EQVRFOlxuICAgICAgICByZXR1cm4gJ2RhdGUnO1xuICAgICAgY2FzZSBUYWJsZVR5cGVFbnVtLk1VTFRJU0VMRUNUOlxuICAgICAgICByZXR1cm4gJ211bHRpU2VsZWN0JztcbiAgICAgIGNhc2UgVGFibGVUeXBlRW51bS5CT09MRUFOOlxuICAgICAgICByZXR1cm4gJ2Jvb2xlYW4nO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICd0ZXh0JztcbiAgICB9XG4gIH1cblxuICAvLyBTdGF0ZSBDaGVjayBNZXRob2RzXG4gIGlzRWRpdGFibGUoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBsZXQgY29sdW1uID0gdGhpcy5jb2x1bW5zLmZpbmQoKGl0ZW0pID0+IGl0ZW0uY29kZSA9PT0ga2V5KTtcbiAgICByZXR1cm4gY29sdW1uPy5pc0VkaXRhYmxlICE9PSBmYWxzZTtcbiAgfVxuXG4gIGlzTXVsdGlTZWxlY3Qoa2V5OiBhbnkpOiBib29sZWFuIHtcbiAgICBsZXQgY29sdW1uID0gdGhpcy5jb2x1bW5zLmZpbmQoKGl0ZW0pID0+IGl0ZW0uY29kZSA9PT0ga2V5KTtcbiAgICBpZiAoXG4gICAgICBjb2x1bW4/LnR5cGUgPT09IFRhYmxlVHlwZUVudW0uTVVMVElTRUxFQ1QgJiZcbiAgICAgIGNvbHVtbi5vcHRpb25zICYmXG4gICAgICBjb2x1bW4uY29kZSAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICB0aGlzLm9wdGlvbkVudHJpZXMgPSBuZXcgTWFwKFtcbiAgICAgICAgW2NvbHVtbi5jb2RlLCBPYmplY3QudmFsdWVzKGNvbHVtbi5vcHRpb25zKV0sXG4gICAgICBdKTtcbiAgICAgIHRoaXMub3B0aW9uVmFsdWVzID0gdGhpcy5vcHRpb25FbnRyaWVzLmdldChrZXkpIHx8IFtdO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlzRGF0ZVBpY2tlcihrZXk6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmNvbHVtbnMuZmluZCgoaXRlbSkgPT4gaXRlbS5jb2RlID09PSBrZXkpPy50eXBlID09PVxuICAgICAgVGFibGVUeXBlRW51bS5EQVRFXG4gICAgKTtcbiAgfVxuXG4gIC8vIFV0aWxpdHkgTWV0aG9kc1xuICBkYXRlQ29udmVydGVyKHZhbHVlOiBhbnkpOiBzdHJpbmcge1xuICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZSkudG9Mb2NhbGVEYXRlU3RyaW5nKCdlbi1VUycpO1xuICB9XG5cbiAgZ2V0Q3VycmVuY3lTeW1ib2woY29sdW1uOiBUYWJsZUNvbHVtbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIGNvbHVtbi50eXBlID09PSBUYWJsZVR5cGVFbnVtLkFNT1VOVCAmJlxuICAgICAgY29sdW1uLmN1cnJlbmN5ICYmXG4gICAgICB0aGlzLmlzVmFsaWRDdXJyZW5jeUNvZGUoY29sdW1uLmN1cnJlbmN5KVxuICAgICAgPyBjb2x1bW4uY3VycmVuY3lcbiAgICAgIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1ZhbGlkQ3VycmVuY3lDb2RlKGN1cnJlbmN5Q29kZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudmFsaWRDdXJyZW5jeUNvZGVzLmluY2x1ZGVzKGN1cnJlbmN5Q29kZSk7XG4gIH1cblxuICBmaWx0ZXJHbG9iYWwoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgY29uc3QgdmFsdWUgPSB0YXJnZXQudmFsdWUudG9Mb3dlckNhc2UoKTtcblxuICAgIC8vIENyZWF0ZSBhIG5ldyBmaWx0ZXJlZCBkYXRhc2V0XG4gICAgY29uc3QgZmlsdGVyZWREYXRhID0gdGhpcy5kYXRhLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuZ2xvYmFsRmlsdGVyRmllbGRzLnNvbWUoKGZpZWxkKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKChjb2wpID0+IGNvbC5jb2RlID09PSBmaWVsZCk7XG4gICAgICAgIGlmICghY29sdW1uKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSGFuZGxlIGRpZmZlcmVudCBjb2x1bW4gdHlwZXNcbiAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBUYWJsZVR5cGVFbnVtLkRBVEUpIHtcbiAgICAgICAgICBjb25zdCBpdGVtRGF0ZSA9IHRoaXMuZm9ybWF0RGF0ZShpdGVtW2ZpZWxkXSk7XG4gICAgICAgICAgcmV0dXJuIGl0ZW1EYXRlICYmIGl0ZW1EYXRlLmluY2x1ZGVzKHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICBjb2x1bW4udHlwZSA9PT0gVGFibGVUeXBlRW51bS5BTU9VTlQgfHxcbiAgICAgICAgICBjb2x1bW4udHlwZSA9PT0gVGFibGVUeXBlRW51bS5OVU1CRVJcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGl0ZW1bZmllbGRdICYmIGl0ZW1bZmllbGRdLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh2YWx1ZSlcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpdGVtW2ZpZWxkXSAmJiBpdGVtW2ZpZWxkXS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModmFsdWUpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBVcGRhdGUgdGhlIHRhYmxlJ3MgdmFsdWVcbiAgICB0aGlzLmR0LnZhbHVlID0gZmlsdGVyZWREYXRhO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXREYXRlKGRhdGU6IGFueSk6IHN0cmluZyB7XG4gICAgaWYgKCFkYXRlKSByZXR1cm4gJyc7XG4gICAgaWYgKGRhdGUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAvLyBIYW5kbGUgRGF0ZSBvYmplY3RcbiAgICAgIGNvbnN0IGRheSA9IGRhdGUuZ2V0RGF0ZSgpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgIGNvbnN0IG1vbnRoID0gKGRhdGUuZ2V0TW9udGgoKSArIDEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgIGNvbnN0IHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKTtcbiAgICAgIHJldHVybiBgJHtkYXl9LyR7bW9udGh9LyR7eWVhcn1gO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRhdGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBIYW5kbGUgc3RyaW5nIGRhdGVcbiAgICAgIGNvbnN0IHBhcnRzID0gZGF0ZS5zcGxpdCgnLycpO1xuICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICByZXR1cm4gYCR7cGFydHNbMF19LyR7cGFydHNbMV19LyR7cGFydHNbMl19YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEhhbmRsZSBwYXJ0aWFsIGRhdGVzXG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBleHBvcnRFeGNlbCgpIHtcbiAgICB0aGlzLmV4cG9ydEV4Y2VsRXZlbnQuZW1pdCgpO1xuICB9XG5cbiAgZXhwb3J0UGRmKCkge1xuICAgIHRoaXMuZXhwb3J0UGRmRXZlbnQuZW1pdCgpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwidGFibGUtY29udGFpbmVyXCI+XG4gIDxkaXY+XG4gICAgPHAtdGFibGVcbiAgICAgICNkdFxuICAgICAgW3ZhbHVlXT1cImRhdGFcIlxuICAgICAgW3Jvd3NdPVwicm93c1wiXG4gICAgICBbcGFnaW5hdG9yXT1cImlzUGFnaW5hdGVkXCJcbiAgICAgIFtnbG9iYWxGaWx0ZXJGaWVsZHNdPVwiZ2xvYmFsRmlsdGVyRmllbGRzXCJcbiAgICAgIFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwicm93c1BlclBhZ2VcIlxuICAgICAgZGF0YUtleT1cImlkXCJcbiAgICAgIHN0eWxlQ2xhc3M9XCJwLWRhdGF0YWJsZS1ncmlkbGluZXNcIlxuICAgICAgc3R5bGVDbGFzcz1cInAtZGF0YXRhYmxlLXN0cmlwZWRcIlxuICAgICAgZWRpdE1vZGU9XCJyb3dcIlxuICAgID5cbiAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJjYXB0aW9uXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4XCI+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxoMz5Ub3RhbDoge3sgdG90YWxSZWNvcmRzIH19PC9oMz5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8IS0tIENsZWFyIGZpbHRlcnMgLS0+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICpuZ0lmPVwiaGFzU2VhcmNoRmlsdGVyXCJcbiAgICAgICAgICAgICAgcEJ1dHRvblxuICAgICAgICAgICAgICBpY29uPVwicGkgcGktZmlsdGVyLXNsYXNoXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHQgZmEtbGdcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXIoZHQpXCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJDbGVhciBmaWx0ZXJzXCJcbiAgICAgICAgICAgID48L2J1dHRvbj5cblxuICAgICAgICAgICAgPCEtLSBFeHBvcnQgdG8gRXhjZWwgQnV0dG9uIC0tPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAqbmdJZj1cImhhc0V4cG9ydEV4Y2VsXCJcbiAgICAgICAgICAgICAgcEJ1dHRvblxuICAgICAgICAgICAgICBpY29uPVwicGkgcGktZmlsZS1leGNlbFwiXG4gICAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi10ZXh0IGZhLWxnXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImV4cG9ydEV4Y2VsKClcIlxuICAgICAgICAgICAgICB0aXRsZT1cIkV4cG9ydCB0byBFeGNlbFwiXG4gICAgICAgICAgICA+PC9idXR0b24+XG5cbiAgICAgICAgICAgIDwhLS0gRXhwb3J0IHRvIFBERiBCdXR0b24gLS0+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICpuZ0lmPVwiaGFzRXhwb3J0UERGXCJcbiAgICAgICAgICAgICAgcEJ1dHRvblxuICAgICAgICAgICAgICBpY29uPVwicGkgcGktZmlsZS1wZGZcIlxuICAgICAgICAgICAgICBjbGFzcz1cInAtYnV0dG9uLXJvdW5kZWQgcC1idXR0b24tdGV4dCBmYS1sZ1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJleHBvcnRQZGYoKVwiXG4gICAgICAgICAgICAgIHRpdGxlPVwiRXhwb3J0IHRvIFBERlwiXG4gICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1sLWF1dG9cIiAqbmdJZj1cImhhc1NlYXJjaEZpbHRlclwiPlxuICAgICAgICAgICAgPCEtLSBBZGQgdGhpcyB3cmFwcGVyIGRpdiB3aXRoIG1sLWF1dG8gY2xhc3MgLS0+XG4gICAgICAgICAgICA8cC1pY29uRmllbGQgaWNvblBvc2l0aW9uPVwibGVmdFwiIGNsYXNzPVwibWwtYXV0b1wiPlxuICAgICAgICAgICAgICA8cC1pbnB1dEljb24+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJwaSBwaS1zZWFyY2hcIj48L2k+XG4gICAgICAgICAgICAgIDwvcC1pbnB1dEljb24+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHBJbnB1dFRleHRcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hWYWx1ZVwiXG4gICAgICAgICAgICAgICAgKGlucHV0KT1cImZpbHRlckdsb2JhbCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBrZXl3b3JkXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvcC1pY29uRmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdJZj1cImlzU29ydGFibGUgJiYgY29sLmlzU29ydGFibGUgIT09IGZhbHNlOyBlbHNlIG5vU29ydEhlYWRlclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDx0aCBwU29ydGFibGVDb2x1bW49XCJ7eyBjb2wuY29kZSB9fVwiIHN0eWxlPVwid2lkdGg6IDIwJVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57eyBjb2wudGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8cC1zb3J0SWNvbiBmaWVsZD1cInt7IGNvbC5jb2RlIH19XCIgLz5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2wuaXNGaWx0ZXIgIT09IGZhbHNlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwLWNvbHVtbkZpbHRlclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLnR5cGUgPT09ICdBTU9VTlQnXCJcbiAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5PVwibWVudVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2ZpZWxkXT1cImNvbC5jb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJnZXRDb2x1bW5GaWx0ZXJUeXBlKGNvbClcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjdXJyZW5jeV09XCJnZXRDdXJyZW5jeVN5bWJvbChjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvcC1jb2x1bW5GaWx0ZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgPHAtY29sdW1uRmlsdGVyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wudHlwZSAhPT0gJ0FNT1VOVCdcIlxuICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk9XCJtZW51XCJcbiAgICAgICAgICAgICAgICAgICAgICBbZmllbGRdPVwiY29sLmNvZGVcIlxuICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXk9XCJtZW51XCJcbiAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJnZXRDb2x1bW5GaWx0ZXJUeXBlKGNvbClcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cImdldENvbHVtbkZpbHRlclR5cGUoY29sKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIHBUZW1wbGF0ZT1cImZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQtdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldC1maWx0ZXJDYWxsYmFjaz1cImZpbHRlckNhbGxiYWNrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0Q29sdW1uRmlsdGVyVHlwZShjb2wpID09PSAnZGF0ZSdcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwLWNhbGVuZGFyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiZmlsdGVyQ2FsbGJhY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRlRm9ybWF0XT1cIidkZC9tbS95eSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvcC1jYWxlbmRhcj5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICBwVGVtcGxhdGU9XCJmaWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0LXZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQtZmlsdGVyQ2FsbGJhY2s9XCJmaWx0ZXJDYWxsYmFja1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImdldENvbHVtbkZpbHRlclR5cGUoY29sKSA9PT0gJ211bHRpU2VsZWN0J1wiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAtbXVsdGlTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiY29sLmZpbHRlck9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlckNhbGxiYWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzcGxheV09XCInY2hpcCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3VzdG9tLW11bHRpc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3AtbXVsdGlTZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9wLWNvbHVtbkZpbHRlcj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vU29ydEhlYWRlcj5cbiAgICAgICAgICAgICAgPHRoPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57eyBjb2wudGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLmlzRmlsdGVyICE9PSBmYWxzZVwiPlxuICAgICAgICAgICAgICAgICAgICA8cC1jb2x1bW5GaWx0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbC50eXBlID09PSAnQU1PVU5UJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgZGlzcGxheT1cIm1lbnVcIlxuICAgICAgICAgICAgICAgICAgICAgIFtmaWVsZF09XCJjb2wuY29kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwiZ2V0Q29sdW1uRmlsdGVyVHlwZShjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY3VycmVuY3ldPVwiZ2V0Q3VycmVuY3lTeW1ib2woY29sKVwiXG4gICAgICAgICAgICAgICAgICAgID48L3AtY29sdW1uRmlsdGVyPlxuXG4gICAgICAgICAgICAgICAgICAgIDxwLWNvbHVtbkZpbHRlclxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLnR5cGUgIT09ICdBTU9VTlQnXCJcbiAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5PVwibWVudVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2ZpZWxkXT1cImNvbC5jb2RlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJnZXRDb2x1bW5GaWx0ZXJUeXBlKGNvbClcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICBwVGVtcGxhdGU9XCJmaWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0LXZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQtZmlsdGVyQ2FsbGJhY2s9XCJmaWx0ZXJDYWxsYmFja1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImdldENvbHVtbkZpbHRlclR5cGUoY29sKSA9PT0gJ2RhdGUnXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cC1jYWxlbmRhclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlckNhbGxiYWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0ZUZvcm1hdF09XCInZGQvbW0veXknXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3AtY2FsZW5kYXI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgcFRlbXBsYXRlPVwiZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldC12YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0LWZpbHRlckNhbGxiYWNrPVwiZmlsdGVyQ2FsbGJhY2tcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRDb2x1bW5GaWx0ZXJUeXBlKGNvbCkgPT09ICdtdWx0aVNlbGVjdCdcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwLW11bHRpU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cImNvbC5maWx0ZXJPcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJDYWxsYmFjaygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc3BsYXldPVwiJ2NoaXAnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImN1c3RvbS1tdWx0aXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9wLW11bHRpU2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvcC1jb2x1bW5GaWx0ZXI+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICBwVGVtcGxhdGU9XCJib2R5XCJcbiAgICAgICAgbGV0LWRhdGFcbiAgICAgICAgbGV0LWVkaXRpbmc9XCJlZGl0aW5nXCJcbiAgICAgICAgbGV0LXJpPVwicm93SW5kZXhcIlxuICAgICAgPlxuICAgICAgICA8IS0tIFJlbmRlciBhIHRhYmxlIHJvdyBhbmQgbWFrZSBpdCBlZGl0YWJsZSBpZiBgaXNFZGl0YCBpcyB0cnVlIC0tPlxuICAgICAgICA8dHIgW3BFZGl0YWJsZVJvd109XCJpc0VkaXQgPyBkYXRhIDogbnVsbFwiPlxuICAgICAgICAgIDwhLS0gTG9vcCB0aHJvdWdoIGVhY2ggY29sdW1uIGFuZCByZW5kZXIgY29ycmVzcG9uZGluZyB0YWJsZSBjZWxscyAtLT5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2wgb2YgY29sdW1uc1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC5jb2RlICE9PSB1bmRlZmluZWRcIj5cbiAgICAgICAgICAgICAgPCEtLSBDaGVjayBpZiB0aGUgZGF0YSBmb3IgdGhlIGNvbHVtbiBleGlzdHMgLS0+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhW2NvbC5jb2RlXSAhPT0gdW5kZWZpbmVkXCI+XG4gICAgICAgICAgICAgICAgPCEtLSBSZW5kZXIgYW4gZWRpdGFibGUgY2VsbCBpZiB0aGUgY29sdW1uIGlzIGVkaXRhYmxlIC0tPlxuICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cImlzRWRpdGFibGUoY29sLmNvZGUpOyBlbHNlIG5vcm1hbFREXCI+XG4gICAgICAgICAgICAgICAgICA8IS0tIE11bHRpLXNlbGVjdCBpbnB1dCBmb3IgY29sdW1ucyB0aGF0IGFyZSBtdWx0aS1zZWxlY3RhYmxlIC0tPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImlzTXVsdGlTZWxlY3QoY29sLmNvZGUpOyBlbHNlIGRhdGVQaWNrZXJcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8cC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJpbnB1dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHAtbXVsdGlTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG89XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZGF0YVtjb2wuY29kZV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwieyB3aWR0aDogJzEwMCUnIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VIYW5kbGVyKGRhdGEuaWQsIGNvbC5jb2RlLCAkZXZlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIm9wdGlvblZhbHVlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9wLW11bHRpU2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm11bHRpLXNlbGVjdC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcmVjIG9mIGRhdGFbY29sLmNvZGVdXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAtdGFnIFt2YWx1ZV09XCJyZWNcIj48L3AtdGFnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvcC1jZWxsRWRpdG9yPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgIDwhLS0gRGF0ZSBwaWNrZXIgaW5wdXQgZm9yIGNvbHVtbnMgdGhhdCByZXF1aXJlIGRhdGUgc2VsZWN0aW9uIC0tPlxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkYXRlUGlja2VyPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc0RhdGVQaWNrZXIoY29sLmNvZGUpOyBlbHNlIG5vcm1hbElucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxwLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHAtY2FsZW5kYXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRJZF09XCJkYXRhW2NvbC5jb2RlXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZGF0YVtjb2wuY29kZV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlSGFuZGxlcihkYXRhLmlkLCBjb2wuY29kZSwgJGV2ZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGVGb3JtYXRdPVwiJ2RkL21tL3l5J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID48L3AtY2FsZW5kYXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBkYXRhW2NvbC5jb2RlXSB8IGN1c3RvbURhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9wLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgICAgICAgPCEtLSBOb3JtYWwgdGV4dCBpbnB1dCBmb3Igb3RoZXIgY29sdW1ucyAtLT5cbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9ybWFsSW5wdXQ+XG4gICAgICAgICAgICAgICAgICAgIDxwLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImlucHV0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcElucHV0VGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImRhdGFbY29sLmNvZGVdXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQsIGRhdGEuaWQsIGNvbC5jb2RlKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIm91dHB1dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBVc2UgY3VycmVuY3kgcGlwZSB0byBmb3JtYXQgdGhlIG91dHB1dCBmb3IgQU1PVU5UIHR5cGUgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLnR5cGUgPT09ICdBTU9VTlQnOyBlbHNlIG5vcm1hbE91dHB1dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtjb2wuY29kZV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY3VzdG9tQ3VycmVuY3lcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBnZXRDdXJyZW5jeVN5bWJvbChjb2wpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY29sLmRlY2ltYWxQbGFjZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjb2wudGhvdXNhbmRTZXBhcmF0b3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjb2wuZGVjaW1hbFNlcGFyYXRvclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vcm1hbE91dHB1dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZGF0YVtjb2wuY29kZV0gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9wLWNlbGxFZGl0b3I+XG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvdGQ+XG5cbiAgICAgICAgICAgICAgICA8IS0tIFJlbmRlciBhIG5vcm1hbCB0YWJsZSBjZWxsIGlmIHRoZSBjb2x1bW4gaXMgbm90IGVkaXRhYmxlIC0tPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9ybWFsVEQ+XG4gICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gVXNlIGN1c3RvbUN1cnJlbmN5IHBpcGUgdG8gZm9ybWF0IHRoZSBvdXRwdXQgZm9yIEFNT1VOVCB0eXBlIHdpdGggb3B0aW9uYWwgZGVjaW1hbCBwbGFjZXMgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbC50eXBlID09PSAnQU1PVU5UJzsgZWxzZSBub3JtYWxUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtjb2wuY29kZV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjdXN0b21DdXJyZW5jeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZ2V0Q3VycmVuY3lTeW1ib2woY29sKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY29sLmRlY2ltYWxQbGFjZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNvbC50aG91c2FuZFNlcGFyYXRvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY29sLmRlY2ltYWxTZXBhcmF0b3JcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub3JtYWxUZXh0PlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGRhdGFbY29sLmNvZGVdIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8IS0tIFJlbmRlciBhY3Rpb24gYnV0dG9ucyBpZiB0aGVyZSBhcmUgYW55IGFjdGlvbnMgZGVmaW5lZCAtLT5cbiAgICAgICAgICA8dGQgKm5nSWY9XCJhY3Rpb25zPy5sZW5ndGhcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tYnV0dG9ucy1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgPCEtLSBEZWxldGUgYnV0dG9uIGlmIGRlbGV0aW9uIGlzIGFsbG93ZWQgLS0+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0RlbGV0ZVwiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHBCdXR0b25cbiAgICAgICAgICAgICAgICAgIHBSaXBwbGVcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXRyYXNoXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJEZWxldGUoZGF0YS5pZClcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHRcIlxuICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwhLS0gRWRpdCwgc2F2ZSwgYW5kIGNhbmNlbCBidXR0b25zIGZvciByb3cgZWRpdGluZyAtLT5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBwSW5pdEVkaXRhYmxlUm93XG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIiFlZGl0aW5nXCJcbiAgICAgICAgICAgICAgICAgIHBCdXR0b25cbiAgICAgICAgICAgICAgICAgIHBSaXBwbGVcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXBlbmNpbFwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaW5pdEVkaXRhYmxlUm93KGRhdGEpXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwicC1idXR0b24tcm91bmRlZCBwLWJ1dHRvbi10ZXh0XCJcbiAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJlZGl0aW5nXCJcbiAgICAgICAgICAgICAgICAgIHBTYXZlRWRpdGFibGVSb3dcbiAgICAgICAgICAgICAgICAgIHBCdXR0b25cbiAgICAgICAgICAgICAgICAgIHBSaXBwbGVcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLWNoZWNrXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzYXZlRWRpdGFibGVSb3coZGF0YSlcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHRcIlxuICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImVkaXRpbmdcIlxuICAgICAgICAgICAgICAgICAgcENhbmNlbEVkaXRhYmxlUm93XG4gICAgICAgICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICAgICAgICBwUmlwcGxlXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS10aW1lc1wiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2FuY2VsRWRpdGFibGVSb3coZGF0YSlcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLXRleHRcIlxuICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L3AtdGFibGU+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -1,19 +1,60 @@
1
1
  import { NgModule } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import { FormsModule } from '@angular/forms';
4
- import { NgAdvancedPrimeTableModule } from './ng-advanced-prime-table/ng-advanced-prime-table.module';
5
- import { MultiSearchCriteriaModule } from './multi-search-criteria/multi-search-criteria.module';
4
+ import { NgAdvancedPrimeTableModule } from './ng-advanced-prime-table';
5
+ import { MultiSearchCriteriaModule } from './multi-search-criteria';
6
+ import { PTFormBuilderModule } from './pt-form-builder';
7
+ import { PTTextInputModule } from './pt-text-input';
8
+ import { PTTextAreaInputModule } from './pt-text-area-input';
9
+ import { PTSwitchInputModule } from './pt-switch-input';
10
+ import { PTNumberInputModule } from './pt-number-input';
11
+ import { PTCheckBoxInputModule } from './pt-check-box-input';
12
+ import { PTDateInputModule } from './pt-date-input';
6
13
  import * as i0 from "@angular/core";
7
14
  export class NgPrimeToolsModule {
8
15
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: NgPrimeToolsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
9
16
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.11", ngImport: i0, type: NgPrimeToolsModule, imports: [CommonModule,
10
17
  FormsModule,
11
18
  NgAdvancedPrimeTableModule,
12
- MultiSearchCriteriaModule], exports: [NgAdvancedPrimeTableModule, MultiSearchCriteriaModule] }); }
19
+ MultiSearchCriteriaModule,
20
+ // Inputs
21
+ PTCheckBoxInputModule,
22
+ PTDateInputModule,
23
+ PTFormBuilderModule,
24
+ PTNumberInputModule,
25
+ PTSwitchInputModule,
26
+ PTTextAreaInputModule,
27
+ PTTextInputModule], exports: [NgAdvancedPrimeTableModule,
28
+ MultiSearchCriteriaModule,
29
+ // Inputs
30
+ PTCheckBoxInputModule,
31
+ PTDateInputModule,
32
+ PTFormBuilderModule,
33
+ PTNumberInputModule,
34
+ PTSwitchInputModule,
35
+ PTTextAreaInputModule,
36
+ PTTextInputModule] }); }
13
37
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: NgPrimeToolsModule, imports: [CommonModule,
14
38
  FormsModule,
15
39
  NgAdvancedPrimeTableModule,
16
- MultiSearchCriteriaModule, NgAdvancedPrimeTableModule, MultiSearchCriteriaModule] }); }
40
+ MultiSearchCriteriaModule,
41
+ // Inputs
42
+ PTCheckBoxInputModule,
43
+ PTDateInputModule,
44
+ PTFormBuilderModule,
45
+ PTNumberInputModule,
46
+ PTSwitchInputModule,
47
+ PTTextAreaInputModule,
48
+ PTTextInputModule, NgAdvancedPrimeTableModule,
49
+ MultiSearchCriteriaModule,
50
+ // Inputs
51
+ PTCheckBoxInputModule,
52
+ PTDateInputModule,
53
+ PTFormBuilderModule,
54
+ PTNumberInputModule,
55
+ PTSwitchInputModule,
56
+ PTTextAreaInputModule,
57
+ PTTextInputModule] }); }
17
58
  }
18
59
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: NgPrimeToolsModule, decorators: [{
19
60
  type: NgModule,
@@ -23,8 +64,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
23
64
  FormsModule,
24
65
  NgAdvancedPrimeTableModule,
25
66
  MultiSearchCriteriaModule,
67
+ // Inputs
68
+ PTCheckBoxInputModule,
69
+ PTDateInputModule,
70
+ PTFormBuilderModule,
71
+ PTNumberInputModule,
72
+ PTSwitchInputModule,
73
+ PTTextAreaInputModule,
74
+ PTTextInputModule,
75
+ ],
76
+ exports: [
77
+ NgAdvancedPrimeTableModule,
78
+ MultiSearchCriteriaModule,
79
+ // Inputs
80
+ PTCheckBoxInputModule,
81
+ PTDateInputModule,
82
+ PTFormBuilderModule,
83
+ PTNumberInputModule,
84
+ PTSwitchInputModule,
85
+ PTTextAreaInputModule,
86
+ PTTextInputModule,
26
87
  ],
27
- exports: [NgAdvancedPrimeTableModule, MultiSearchCriteriaModule],
28
88
  }]
29
89
  }] });
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctcHJpbWUtdG9vbHMubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctcHJpbWUtdG9vbHMvc3JjL2xpYi9uZy1wcmltZS10b29scy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQ3RHLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHNEQUFzRCxDQUFDOztBQVdqRyxNQUFNLE9BQU8sa0JBQWtCOytHQUFsQixrQkFBa0I7Z0hBQWxCLGtCQUFrQixZQVAzQixZQUFZO1lBQ1osV0FBVztZQUNYLDBCQUEwQjtZQUMxQix5QkFBeUIsYUFFakIsMEJBQTBCLEVBQUUseUJBQXlCO2dIQUVwRCxrQkFBa0IsWUFQM0IsWUFBWTtZQUNaLFdBQVc7WUFDWCwwQkFBMEI7WUFDMUIseUJBQXlCLEVBRWpCLDBCQUEwQixFQUFFLHlCQUF5Qjs7NEZBRXBELGtCQUFrQjtrQkFUOUIsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixXQUFXO3dCQUNYLDBCQUEwQjt3QkFDMUIseUJBQXlCO3FCQUMxQjtvQkFDRCxPQUFPLEVBQUUsQ0FBQywwQkFBMEIsRUFBRSx5QkFBeUIsQ0FBQztpQkFDakUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTmdBZHZhbmNlZFByaW1lVGFibGVNb2R1bGUgfSBmcm9tICcuL25nLWFkdmFuY2VkLXByaW1lLXRhYmxlL25nLWFkdmFuY2VkLXByaW1lLXRhYmxlLm1vZHVsZSc7XG5pbXBvcnQgeyBNdWx0aVNlYXJjaENyaXRlcmlhTW9kdWxlIH0gZnJvbSAnLi9tdWx0aS1zZWFyY2gtY3JpdGVyaWEvbXVsdGktc2VhcmNoLWNyaXRlcmlhLm1vZHVsZSc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgTmdBZHZhbmNlZFByaW1lVGFibGVNb2R1bGUsXG4gICAgTXVsdGlTZWFyY2hDcml0ZXJpYU1vZHVsZSxcbiAgXSxcbiAgZXhwb3J0czogW05nQWR2YW5jZWRQcmltZVRhYmxlTW9kdWxlLCBNdWx0aVNlYXJjaENyaXRlcmlhTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgTmdQcmltZVRvb2xzTW9kdWxlIHt9XG4iXX0=
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctcHJpbWUtdG9vbHMubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctcHJpbWUtdG9vbHMvc3JjL2xpYi9uZy1wcmltZS10b29scy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzdELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQWdDcEQsTUFBTSxPQUFPLGtCQUFrQjsrR0FBbEIsa0JBQWtCO2dIQUFsQixrQkFBa0IsWUE1QjNCLFlBQVk7WUFDWixXQUFXO1lBQ1gsMEJBQTBCO1lBQzFCLHlCQUF5QjtZQUV6QixTQUFTO1lBQ1QscUJBQXFCO1lBQ3JCLGlCQUFpQjtZQUNqQixtQkFBbUI7WUFDbkIsbUJBQW1CO1lBQ25CLG1CQUFtQjtZQUNuQixxQkFBcUI7WUFDckIsaUJBQWlCLGFBR2pCLDBCQUEwQjtZQUMxQix5QkFBeUI7WUFFekIsU0FBUztZQUNULHFCQUFxQjtZQUNyQixpQkFBaUI7WUFDakIsbUJBQW1CO1lBQ25CLG1CQUFtQjtZQUNuQixtQkFBbUI7WUFDbkIscUJBQXFCO1lBQ3JCLGlCQUFpQjtnSEFHUixrQkFBa0IsWUE1QjNCLFlBQVk7WUFDWixXQUFXO1lBQ1gsMEJBQTBCO1lBQzFCLHlCQUF5QjtZQUV6QixTQUFTO1lBQ1QscUJBQXFCO1lBQ3JCLGlCQUFpQjtZQUNqQixtQkFBbUI7WUFDbkIsbUJBQW1CO1lBQ25CLG1CQUFtQjtZQUNuQixxQkFBcUI7WUFDckIsaUJBQWlCLEVBR2pCLDBCQUEwQjtZQUMxQix5QkFBeUI7WUFFekIsU0FBUztZQUNULHFCQUFxQjtZQUNyQixpQkFBaUI7WUFDakIsbUJBQW1CO1lBQ25CLG1CQUFtQjtZQUNuQixtQkFBbUI7WUFDbkIscUJBQXFCO1lBQ3JCLGlCQUFpQjs7NEZBR1Isa0JBQWtCO2tCQTlCOUIsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixXQUFXO3dCQUNYLDBCQUEwQjt3QkFDMUIseUJBQXlCO3dCQUV6QixTQUFTO3dCQUNULHFCQUFxQjt3QkFDckIsaUJBQWlCO3dCQUNqQixtQkFBbUI7d0JBQ25CLG1CQUFtQjt3QkFDbkIsbUJBQW1CO3dCQUNuQixxQkFBcUI7d0JBQ3JCLGlCQUFpQjtxQkFDbEI7b0JBQ0QsT0FBTyxFQUFFO3dCQUNQLDBCQUEwQjt3QkFDMUIseUJBQXlCO3dCQUV6QixTQUFTO3dCQUNULHFCQUFxQjt3QkFDckIsaUJBQWlCO3dCQUNqQixtQkFBbUI7d0JBQ25CLG1CQUFtQjt3QkFDbkIsbUJBQW1CO3dCQUNuQixxQkFBcUI7d0JBQ3JCLGlCQUFpQjtxQkFDbEI7aUJBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTmdBZHZhbmNlZFByaW1lVGFibGVNb2R1bGUgfSBmcm9tICcuL25nLWFkdmFuY2VkLXByaW1lLXRhYmxlJztcbmltcG9ydCB7IE11bHRpU2VhcmNoQ3JpdGVyaWFNb2R1bGUgfSBmcm9tICcuL211bHRpLXNlYXJjaC1jcml0ZXJpYSc7XG5pbXBvcnQgeyBQVEZvcm1CdWlsZGVyTW9kdWxlIH0gZnJvbSAnLi9wdC1mb3JtLWJ1aWxkZXInO1xuaW1wb3J0IHsgUFRUZXh0SW5wdXRNb2R1bGUgfSBmcm9tICcuL3B0LXRleHQtaW5wdXQnO1xuaW1wb3J0IHsgUFRUZXh0QXJlYUlucHV0TW9kdWxlIH0gZnJvbSAnLi9wdC10ZXh0LWFyZWEtaW5wdXQnO1xuaW1wb3J0IHsgUFRTd2l0Y2hJbnB1dE1vZHVsZSB9IGZyb20gJy4vcHQtc3dpdGNoLWlucHV0JztcbmltcG9ydCB7IFBUTnVtYmVySW5wdXRNb2R1bGUgfSBmcm9tICcuL3B0LW51bWJlci1pbnB1dCc7XG5pbXBvcnQgeyBQVENoZWNrQm94SW5wdXRNb2R1bGUgfSBmcm9tICcuL3B0LWNoZWNrLWJveC1pbnB1dCc7XG5pbXBvcnQgeyBQVERhdGVJbnB1dE1vZHVsZSB9IGZyb20gJy4vcHQtZGF0ZS1pbnB1dCc7XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgTmdBZHZhbmNlZFByaW1lVGFibGVNb2R1bGUsXG4gICAgTXVsdGlTZWFyY2hDcml0ZXJpYU1vZHVsZSxcblxuICAgIC8vIElucHV0c1xuICAgIFBUQ2hlY2tCb3hJbnB1dE1vZHVsZSxcbiAgICBQVERhdGVJbnB1dE1vZHVsZSxcbiAgICBQVEZvcm1CdWlsZGVyTW9kdWxlLFxuICAgIFBUTnVtYmVySW5wdXRNb2R1bGUsXG4gICAgUFRTd2l0Y2hJbnB1dE1vZHVsZSxcbiAgICBQVFRleHRBcmVhSW5wdXRNb2R1bGUsXG4gICAgUFRUZXh0SW5wdXRNb2R1bGUsXG4gIF0sXG4gIGV4cG9ydHM6IFtcbiAgICBOZ0FkdmFuY2VkUHJpbWVUYWJsZU1vZHVsZSxcbiAgICBNdWx0aVNlYXJjaENyaXRlcmlhTW9kdWxlLFxuXG4gICAgLy8gSW5wdXRzXG4gICAgUFRDaGVja0JveElucHV0TW9kdWxlLFxuICAgIFBURGF0ZUlucHV0TW9kdWxlLFxuICAgIFBURm9ybUJ1aWxkZXJNb2R1bGUsXG4gICAgUFROdW1iZXJJbnB1dE1vZHVsZSxcbiAgICBQVFN3aXRjaElucHV0TW9kdWxlLFxuICAgIFBUVGV4dEFyZWFJbnB1dE1vZHVsZSxcbiAgICBQVFRleHRJbnB1dE1vZHVsZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTmdQcmltZVRvb2xzTW9kdWxlIHt9XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export * from './public-api';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1wcmltZS10b29scy9zcmMvbGliL3B0LWNoZWNrLWJveC1pbnB1dC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG4iXX0=