@universis/ngx-tables 0.8.5 → 15.0.2

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 (163) hide show
  1. package/esm2020/lib/actions/table.actions.mjs +27 -0
  2. package/esm2020/lib/advanced-aggregator.mjs +2 -0
  3. package/esm2020/lib/components/add-items/add-items.component.mjs +138 -0
  4. package/esm2020/lib/components/advanced-aggregator/advanced-aggregator.component.mjs +126 -0
  5. package/esm2020/lib/components/advanced-aggregator-list/advanced-aggregator-list.component.mjs +53 -0
  6. package/esm2020/lib/components/advanced-list/advanced-list.component.mjs +184 -0
  7. package/esm2020/lib/components/advanced-row-action/advanced-row-action.component.mjs +178 -0
  8. package/esm2020/lib/components/advanced-search-form/advanced-search-form.component.mjs +154 -0
  9. package/esm2020/lib/components/advanced-select/advanced-select.component.mjs +42 -0
  10. package/esm2020/lib/components/advanced-select/advanced-select.service.mjs +38 -0
  11. package/esm2020/lib/components/advanced-table/advanced-filter-value-provider.service.mjs +31 -0
  12. package/esm2020/lib/components/advanced-table/advanced-table-resolvers.mjs +40 -0
  13. package/esm2020/lib/components/advanced-table/advanced-table-search-base.mjs +31 -0
  14. package/esm2020/lib/components/advanced-table/advanced-table-search.component.mjs +525 -0
  15. package/esm2020/lib/components/advanced-table/advanced-table-settings.component.mjs +108 -0
  16. package/esm2020/lib/components/advanced-table/advanced-table.component.mjs +1599 -0
  17. package/esm2020/lib/components/advanced-table/advanced-table.formatters.interface.mjs +17 -0
  18. package/esm2020/lib/components/advanced-table/advanced-table.formatters.mjs +429 -0
  19. package/esm2020/lib/components/advanced-table/advanced-table.interfaces.mjs +2 -0
  20. package/esm2020/lib/components/advanced-table-modal/advanced-table-modal-base.component.mjs +420 -0
  21. package/esm2020/lib/components/column-selector/column-selector.component.mjs +205 -0
  22. package/esm2020/lib/components/column-selector/column-selector.service.mjs +45 -0
  23. package/esm2020/lib/components/table-simple-header/table-simple-header.component.mjs +52 -0
  24. package/esm2020/lib/directives/advance-search-state.directive.mjs +111 -0
  25. package/esm2020/lib/directives/advance-table-state.directive.mjs +63 -0
  26. package/esm2020/lib/directives/advanced-search-router-state.directive.mjs +64 -0
  27. package/esm2020/lib/directives/advanced-table-editor.directive.mjs +154 -0
  28. package/esm2020/lib/directives/btnexp.directive.mjs +222 -0
  29. package/esm2020/lib/i18n/tables.el.mjs +129 -0
  30. package/esm2020/lib/i18n/tables.en.mjs +128 -0
  31. package/esm2020/lib/pipes/advanced-aggregator.pipe.mjs +38 -0
  32. package/esm2020/lib/pipes/advansed-aggregator-list-title-parse.pipe.mjs +45 -0
  33. package/esm2020/lib/reducers/index.mjs +37 -0
  34. package/esm2020/lib/services/advanced-aggregator/advanced-aggregator.service.mjs +119 -0
  35. package/esm2020/lib/tables.activated-table.service.mjs +46 -0
  36. package/esm2020/lib/tables.module.mjs +218 -0
  37. package/esm2020/public_api.mjs +37 -0
  38. package/esm2020/universis-ngx-tables.mjs +5 -0
  39. package/fesm2015/{universis-ngx-tables.js → universis-ngx-tables.mjs} +2927 -2729
  40. package/fesm2015/universis-ngx-tables.mjs.map +1 -0
  41. package/fesm2020/universis-ngx-tables.mjs +5609 -0
  42. package/fesm2020/universis-ngx-tables.mjs.map +1 -0
  43. package/index.d.ts +5 -0
  44. package/lib/actions/table.actions.d.ts +4 -4
  45. package/lib/components/add-items/add-items.component.d.ts +14 -21
  46. package/lib/components/advanced-aggregator/advanced-aggregator.component.d.ts +15 -9
  47. package/lib/components/advanced-aggregator-list/advanced-aggregator-list.component.d.ts +4 -1
  48. package/lib/components/advanced-list/advanced-list.component.d.ts +17 -14
  49. package/lib/components/advanced-row-action/advanced-row-action.component.d.ts +20 -23
  50. package/lib/components/advanced-search-form/advanced-search-form.component.d.ts +7 -4
  51. package/lib/components/advanced-select/advanced-select.component.d.ts +3 -1
  52. package/lib/components/advanced-select/advanced-select.service.d.ts +3 -0
  53. package/lib/components/advanced-table/advanced-filter-value-provider.service.d.ts +3 -0
  54. package/lib/components/advanced-table/advanced-table-resolvers.d.ts +5 -0
  55. package/lib/components/advanced-table/advanced-table-search-base.d.ts +6 -2
  56. package/lib/components/advanced-table/advanced-table-search.component.d.ts +11 -7
  57. package/lib/components/advanced-table/advanced-table-settings.component.d.ts +8 -6
  58. package/lib/components/advanced-table/advanced-table.component.d.ts +33 -25
  59. package/lib/components/advanced-table/advanced-table.formatters.d.ts +11 -11
  60. package/lib/components/advanced-table-modal/advanced-table-modal-base.component.d.ts +15 -12
  61. package/lib/components/column-selector/column-selector.component.d.ts +9 -6
  62. package/lib/components/column-selector/column-selector.service.d.ts +3 -0
  63. package/lib/components/table-simple-header/table-simple-header.component.d.ts +8 -3
  64. package/lib/directives/advance-search-state.directive.d.ts +6 -3
  65. package/lib/directives/advance-table-state.directive.d.ts +4 -1
  66. package/lib/directives/advanced-search-router-state.directive.d.ts +9 -6
  67. package/lib/directives/advanced-table-editor.directive.d.ts +4 -1
  68. package/lib/directives/btnexp.directive.d.ts +12 -9
  69. package/lib/i18n/tables.el.d.ts +107 -107
  70. package/lib/i18n/tables.en.d.ts +106 -106
  71. package/lib/pipes/advanced-aggregator.pipe.d.ts +7 -4
  72. package/lib/pipes/advansed-aggregator-list-title-parse.pipe.d.ts +9 -6
  73. package/lib/reducers/index.d.ts +5 -3
  74. package/lib/services/advanced-aggregator/advanced-aggregator.service.d.ts +11 -8
  75. package/lib/tables.activated-table.service.d.ts +10 -6
  76. package/lib/tables.module.d.ts +36 -0
  77. package/package.json +44 -36
  78. package/public_api.d.ts +3 -0
  79. package/bundles/universis-ngx-tables.umd.js +0 -6101
  80. package/bundles/universis-ngx-tables.umd.js.map +0 -1
  81. package/bundles/universis-ngx-tables.umd.min.js +0 -2
  82. package/bundles/universis-ngx-tables.umd.min.js.map +0 -1
  83. package/esm2015/lib/actions/table.actions.js +0 -28
  84. package/esm2015/lib/advanced-aggregator.js +0 -2
  85. package/esm2015/lib/components/add-items/add-items.component.js +0 -142
  86. package/esm2015/lib/components/advanced-aggregator/advanced-aggregator.component.js +0 -120
  87. package/esm2015/lib/components/advanced-aggregator-list/advanced-aggregator-list.component.js +0 -53
  88. package/esm2015/lib/components/advanced-list/advanced-list.component.js +0 -173
  89. package/esm2015/lib/components/advanced-row-action/advanced-row-action.component.js +0 -184
  90. package/esm2015/lib/components/advanced-search-form/advanced-search-form.component.js +0 -142
  91. package/esm2015/lib/components/advanced-select/advanced-select.component.js +0 -65
  92. package/esm2015/lib/components/advanced-select/advanced-select.service.js +0 -40
  93. package/esm2015/lib/components/advanced-table/advanced-filter-value-provider.service.js +0 -37
  94. package/esm2015/lib/components/advanced-table/advanced-table-resolvers.js +0 -44
  95. package/esm2015/lib/components/advanced-table/advanced-table-search-base.js +0 -28
  96. package/esm2015/lib/components/advanced-table/advanced-table-search.component.js +0 -526
  97. package/esm2015/lib/components/advanced-table/advanced-table-settings.component.js +0 -109
  98. package/esm2015/lib/components/advanced-table/advanced-table.component.js +0 -1523
  99. package/esm2015/lib/components/advanced-table/advanced-table.formatters.interface.js +0 -18
  100. package/esm2015/lib/components/advanced-table/advanced-table.formatters.js +0 -429
  101. package/esm2015/lib/components/advanced-table/advanced-table.interfaces.js +0 -2
  102. package/esm2015/lib/components/advanced-table-modal/advanced-table-modal-base.component.js +0 -397
  103. package/esm2015/lib/components/column-selector/column-selector.component.js +0 -202
  104. package/esm2015/lib/components/column-selector/column-selector.service.js +0 -47
  105. package/esm2015/lib/components/table-simple-header/table-simple-header.component.js +0 -52
  106. package/esm2015/lib/directives/advance-search-state.directive.js +0 -108
  107. package/esm2015/lib/directives/advance-table-state.directive.js +0 -63
  108. package/esm2015/lib/directives/advanced-search-router-state.directive.js +0 -63
  109. package/esm2015/lib/directives/advanced-table-editor.directive.js +0 -156
  110. package/esm2015/lib/directives/btnexp.directive.js +0 -229
  111. package/esm2015/lib/i18n/tables.el.js +0 -130
  112. package/esm2015/lib/i18n/tables.en.js +0 -129
  113. package/esm2015/lib/pipes/advanced-aggregator.pipe.js +0 -35
  114. package/esm2015/lib/pipes/advansed-aggregator-list-title-parse.pipe.js +0 -46
  115. package/esm2015/lib/reducers/index.js +0 -32
  116. package/esm2015/lib/services/advanced-aggregator/advanced-aggregator.service.js +0 -120
  117. package/esm2015/lib/tables.activated-table.service.js +0 -50
  118. package/esm2015/lib/tables.module.js +0 -149
  119. package/esm2015/public_api.js +0 -33
  120. package/esm2015/universis-ngx-tables.js +0 -9
  121. package/esm5/lib/actions/table.actions.js +0 -34
  122. package/esm5/lib/advanced-aggregator.js +0 -2
  123. package/esm5/lib/components/add-items/add-items.component.js +0 -153
  124. package/esm5/lib/components/advanced-aggregator/advanced-aggregator.component.js +0 -169
  125. package/esm5/lib/components/advanced-aggregator-list/advanced-aggregator-list.component.js +0 -56
  126. package/esm5/lib/components/advanced-list/advanced-list.component.js +0 -185
  127. package/esm5/lib/components/advanced-row-action/advanced-row-action.component.js +0 -188
  128. package/esm5/lib/components/advanced-search-form/advanced-search-form.component.js +0 -145
  129. package/esm5/lib/components/advanced-select/advanced-select.component.js +0 -71
  130. package/esm5/lib/components/advanced-select/advanced-select.service.js +0 -43
  131. package/esm5/lib/components/advanced-table/advanced-filter-value-provider.service.js +0 -50
  132. package/esm5/lib/components/advanced-table/advanced-table-resolvers.js +0 -48
  133. package/esm5/lib/components/advanced-table/advanced-table-search-base.js +0 -34
  134. package/esm5/lib/components/advanced-table/advanced-table-search.component.js +0 -563
  135. package/esm5/lib/components/advanced-table/advanced-table-settings.component.js +0 -115
  136. package/esm5/lib/components/advanced-table/advanced-table.component.js +0 -1548
  137. package/esm5/lib/components/advanced-table/advanced-table.formatters.interface.js +0 -18
  138. package/esm5/lib/components/advanced-table/advanced-table.formatters.js +0 -480
  139. package/esm5/lib/components/advanced-table/advanced-table.interfaces.js +0 -2
  140. package/esm5/lib/components/advanced-table-modal/advanced-table-modal-base.component.js +0 -314
  141. package/esm5/lib/components/column-selector/column-selector.component.js +0 -270
  142. package/esm5/lib/components/column-selector/column-selector.service.js +0 -50
  143. package/esm5/lib/components/table-simple-header/table-simple-header.component.js +0 -58
  144. package/esm5/lib/directives/advance-search-state.directive.js +0 -116
  145. package/esm5/lib/directives/advance-table-state.directive.js +0 -65
  146. package/esm5/lib/directives/advanced-search-router-state.directive.js +0 -71
  147. package/esm5/lib/directives/advanced-table-editor.directive.js +0 -196
  148. package/esm5/lib/directives/btnexp.directive.js +0 -257
  149. package/esm5/lib/i18n/tables.el.js +0 -130
  150. package/esm5/lib/i18n/tables.en.js +0 -129
  151. package/esm5/lib/pipes/advanced-aggregator.pipe.js +0 -39
  152. package/esm5/lib/pipes/advansed-aggregator-list-title-parse.pipe.js +0 -49
  153. package/esm5/lib/reducers/index.js +0 -34
  154. package/esm5/lib/services/advanced-aggregator/advanced-aggregator.service.js +0 -134
  155. package/esm5/lib/tables.activated-table.service.js +0 -57
  156. package/esm5/lib/tables.module.js +0 -154
  157. package/esm5/public_api.js +0 -33
  158. package/esm5/universis-ngx-tables.js +0 -9
  159. package/fesm2015/universis-ngx-tables.js.map +0 -1
  160. package/fesm5/universis-ngx-tables.js +0 -5737
  161. package/fesm5/universis-ngx-tables.js.map +0 -1
  162. package/universis-ngx-tables.d.ts +0 -8
  163. package/universis-ngx-tables.metadata.json +0 -1
@@ -1,156 +0,0 @@
1
- import { Directive, Output, EventEmitter, } from '@angular/core';
2
- import { AdvancedTableComponent } from '../components/advanced-table/advanced-table.component';
3
- export class AdvancedTableNotNullError extends Error {
4
- constructor() {
5
- super('Advanced table component cannot be empty at this context.');
6
- }
7
- }
8
- export class AdvancedTableEditorDirective {
9
- constructor(table) {
10
- this.table = table;
11
- this.dirty = false;
12
- this.dirtyChange = new EventEmitter(false);
13
- //
14
- }
15
- /**
16
- * Add rows to table and mark them as added rows
17
- */
18
- add(...addItems) {
19
- if (this.table == null) {
20
- throw new AdvancedTableNotNullError();
21
- }
22
- // decorate items
23
- const key = this.table.config.columns[0].property || this.table.config.columns[0].name;
24
- for (const element of addItems) {
25
- let tr = this.table.dataTable.rows(':has(input[data-id="' + element[key] + '"])').nodes().to$();
26
- if (tr.hasClass('removed')) {
27
- tr.toggleClass('removed text-gray-400 text-decoration-line-through');
28
- }
29
- else {
30
- this.table.dataTable.rows.add([element]);
31
- tr = this.table.dataTable.rows(':has(input[data-id="' + element[key] + '"])').nodes().to$();
32
- tr.toggleClass('added font-weight-bold text-success');
33
- }
34
- }
35
- this.table.dataTable.draw();
36
- // find removed
37
- const removedLength = this.table.dataTable.rows('.removed')[0].length;
38
- // find added
39
- const addedLength = this.table.dataTable.rows('.added')[0].length;
40
- // and emit event
41
- const items = this.table.dataTable.rows().data();
42
- this.table.load.emit({
43
- data: items,
44
- recordsFiltered: items.length - removedLength,
45
- recordsTotal: items.length - removedLength,
46
- });
47
- this.dirty = (removedLength > 0 || addedLength > 0);
48
- this.dirtyChange.emit(this.dirty);
49
- }
50
- /**
51
- * Marks rows as removed rows
52
- */
53
- remove(...removeItems) {
54
- if (this.table == null) {
55
- throw new AdvancedTableNotNullError();
56
- }
57
- // get key
58
- const key = this.table.config.columns[0].property || this.table.config.columns[0].name;
59
- // loop items
60
- for (const element of removeItems) {
61
- const tr = this.table.dataTable.rows(':has(input[data-id="' + element[key] + '"])').nodes().to$();
62
- // if row is marked as added
63
- if (tr.hasClass('added')) {
64
- // remove this dirty row
65
- this.table.dataTable.rows(tr).remove();
66
- }
67
- else {
68
- // otherwise unmarked row
69
- tr.toggleClass('removed text-gray-400 text-decoration-line-through');
70
- }
71
- // check if item is selected
72
- const selectedIndex = this.table.selected.findIndex((item) => {
73
- return item[key] === element[key];
74
- });
75
- // and remove it from selected collection
76
- if (selectedIndex >= 0) {
77
- this.table.selected.splice(selectedIndex, 1);
78
- }
79
- }
80
- // re-draw table
81
- this.table.dataTable.draw();
82
- // get number of table items
83
- const items = this.table.dataTable.rows().data();
84
- // get number of removed items
85
- const removedLength = this.table.dataTable.rows('.removed')[0].length;
86
- // get number of added items
87
- const addedLength = this.table.dataTable.rows('.added')[0].length;
88
- // refresh
89
- this.table.load.emit({
90
- data: items,
91
- recordsFiltered: items.length - removedLength,
92
- recordsTotal: items.length - removedLength,
93
- });
94
- this.dirty = (removedLength > 0 || addedLength > 0);
95
- this.dirtyChange.emit(this.dirty);
96
- }
97
- set(items) {
98
- if (this.table == null) {
99
- throw new AdvancedTableNotNullError();
100
- }
101
- // clear rows
102
- this.table.selected = [];
103
- this.table.dataTable.clear();
104
- // set items
105
- this.table.dataTable.rows.add(items).draw();
106
- this.table.load.emit({
107
- data: items,
108
- recordsFiltered: items.length,
109
- recordsTotal: items.length,
110
- });
111
- }
112
- /**
113
- * Undo changes
114
- */
115
- undo() {
116
- if (this.table == null) {
117
- throw new AdvancedTableNotNullError();
118
- }
119
- // reset removed rows
120
- this.table.dataTable.rows('.removed').nodes().to$().toggleClass('removed text-gray-400 text-decoration-line-through');
121
- // remove added rows
122
- this.table.dataTable.rows('.added').remove();
123
- // clear selected items
124
- this.table.selected = [];
125
- const items = this.table.dataTable.rows().data();
126
- this.table.dataTable.draw();
127
- this.table.load.emit({
128
- data: items,
129
- recordsFiltered: items.length,
130
- recordsTotal: items.length,
131
- });
132
- this.dirty = false;
133
- this.dirtyChange.emit(this.dirty);
134
- }
135
- rows() {
136
- if (this.table == null) {
137
- throw new AdvancedTableNotNullError();
138
- }
139
- return Array.from(this.table.dataTable.rows(':not(.removed)').data());
140
- }
141
- }
142
- AdvancedTableEditorDirective.decorators = [
143
- { type: Directive, args: [{
144
- // tslint:disable-next-line: directive-selector
145
- selector: '[tableEditor]',
146
- },] }
147
- ];
148
- /** @nocollapse */
149
- AdvancedTableEditorDirective.ctorParameters = () => [
150
- { type: AdvancedTableComponent }
151
- ];
152
- AdvancedTableEditorDirective.propDecorators = {
153
- dirtyChange: [{ type: Output }]
154
- };
155
-
156
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtdGFibGUtZWRpdG9yLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy8iLCJzb3VyY2VzIjpbImxpYi9kaXJlY3RpdmVzL2FkdmFuY2VkLXRhYmxlLWVkaXRvci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFBRSxNQUFNLEVBQUUsWUFBWSxHQUNoQyxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUUvRixNQUFNLGdDQUFpQyxTQUFRLEtBQUs7SUFDbEQ7UUFDRSxLQUFLLENBQUMsMkRBQTJELENBQUMsQ0FBQztJQUNyRSxDQUFDO0NBQ0Y7QUFRRCxNQUFNO0lBS0osWUFBb0IsS0FBNkI7UUFBN0IsVUFBSyxHQUFMLEtBQUssQ0FBd0I7UUFIMUMsVUFBSyxHQUFHLEtBQUssQ0FBQztRQUNKLGdCQUFXLEdBQTBCLElBQUksWUFBWSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBR3JGLEVBQUU7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSSxHQUFHLENBQUMsR0FBRyxRQUFlO1FBQzNCLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLEVBQUU7WUFDdEIsTUFBTSxJQUFJLHlCQUF5QixFQUFFLENBQUM7U0FDdkM7UUFDRCxpQkFBaUI7UUFDakIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3ZGLEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFO1lBQzlCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxz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QUFFLENBQUM7UUFDN0MsdUJBQXVCO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUN6QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNqRCxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDbkIsSUFBSSxFQUFFLEtBQUs7WUFDWCxlQUFlLEVBQUUsS0FBSyxDQUFDLE1BQU07WUFDN0IsWUFBWSxFQUFFLEtBQUssQ0FBQyxNQUFNO1NBQzNCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRU0sSUFBSTtRQUNULElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLEVBQUU7WUFDdEIsTUFBTSxJQUFJLHlCQUF5QixFQUFFLENBQUM7U0FDdkM7UUFDRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN4RSxDQUFDOzs7WUE5SUYsU0FBUyxTQUNUO2dCQUNFLCtDQUErQztnQkFDL0MsUUFBUSxFQUFFLGVBQWU7YUFDMUI7Ozs7WUFaTyxzQkFBc0I7OzswQkFpQjVCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEaXJlY3RpdmUsIE91dHB1dCwgRXZlbnRFbWl0dGVyLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFkdmFuY2VkVGFibGVDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFRhYmxlTm90TnVsbEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcignQWR2YW5jZWQgdGFibGUgY29tcG9uZW50IGNhbm5vdCBiZSBlbXB0eSBhdCB0aGlzIGNvbnRleHQuJyk7XG4gIH1cbn1cblxuQERpcmVjdGl2ZShcbiB7XG4gICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGRpcmVjdGl2ZS1zZWxlY3RvclxuICAgc2VsZWN0b3I6ICdbdGFibGVFZGl0b3JdJyxcbiB9LFxuKVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkVGFibGVFZGl0b3JEaXJlY3RpdmUge1xuXG4gIHB1YmxpYyBkaXJ0eSA9IGZhbHNlO1xuICBAT3V0cHV0KCkgcHVibGljIGRpcnR5Q2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KGZhbHNlKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRhYmxlOiBBZHZhbmNlZFRhYmxlQ29tcG9uZW50KSB7XG4gICAgLy9cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgcm93cyB0byB0YWJsZSBhbmQgbWFyayB0aGVtIGFzIGFkZGVkIHJvd3NcbiAgICovXG4gIHB1YmxpYyBhZGQoLi4uYWRkSXRlbXM6IGFueVtdKSB7XG4gICAgaWYgKHRoaXMudGFibGUgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEFkdmFuY2VkVGFibGVOb3ROdWxsRXJyb3IoKTtcbiAgICB9XG4gICAgLy8gZGVjb3JhdGUgaXRlbXNcbiAgICBjb25zdCBrZXkgPSB0aGlzLnRhYmxlLmNvbmZpZy5jb2x1bW5zWzBdLnByb3BlcnR5IHx8IHRoaXMudGFibGUuY29uZmlnLmNvbHVtbnNbMF0ubmFtZTtcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgYWRkSXRlbXMpIHtcbiAgICAgIGxldCB0ciA9IHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3MoJzpoYXMoaW5wdXRbZGF0YS1pZD1cIicgKyBlbGVtZW50W2tleV0gKyAnXCJdKScpLm5vZGVzKCkudG8kKCk7XG4gICAgICBpZiAodHIuaGFzQ2xhc3MoJ3JlbW92ZWQnKSkge1xuICAgICAgICB0ci50b2dnbGVDbGFzcygncmVtb3ZlZCB0ZXh0LWdyYXktNDAwIHRleHQtZGVjb3JhdGlvbi1saW5lLXRocm91Z2gnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3MuYWRkKFtlbGVtZW50XSk7XG4gICAgICAgIHRyID0gdGhpcy50YWJsZS5kYXRhVGFibGUucm93cygnOmhhcyhpbnB1dFtkYXRhLWlkPVwiJyArIGVsZW1lbnRba2V5XSArICdcIl0pJykubm9kZXMoKS50byQoKTtcbiAgICAgICAgdHIudG9nZ2xlQ2xhc3MoJ2FkZGVkIGZvbnQtd2VpZ2h0LWJvbGQgdGV4dC1zdWNjZXNzJyk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMudGFibGUuZGF0YVRhYmxlLmRyYXcoKTtcbiAgICAvLyBmaW5kIHJlbW92ZWRcbiAgICBjb25zdCByZW1vdmVkTGVuZ3RoID0gdGhpcy50YWJsZS5kYXRhVGFibGUucm93cygnLnJlbW92ZWQnKVswXS5sZW5ndGg7XG4gICAgLy8gZmluZCBhZGRlZFxuICAgIGNvbnN0IGFkZGVkTGVuZ3RoID0gdGhpcy50YWJsZS5kYXRhVGFibGUucm93cygnLmFkZGVkJylbMF0ubGVuZ3RoO1xuICAgIC8vIGFuZCBlbWl0IGV2ZW50XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzKCkuZGF0YSgpO1xuICAgIHRoaXMudGFibGUubG9hZC5lbWl0KHtcbiAgICAgIGRhdGE6IGl0ZW1zLFxuICAgICAgcmVjb3Jkc0ZpbHRlcmVkOiBpdGVtcy5sZW5ndGggLSByZW1vdmVkTGVuZ3RoLFxuICAgICAgcmVjb3Jkc1RvdGFsOiBpdGVtcy5sZW5ndGggLSByZW1vdmVkTGVuZ3RoLFxuICAgIH0pO1xuICAgIHRoaXMuZGlydHkgPSAocmVtb3ZlZExlbmd0aCA+IDAgfHwgYWRkZWRMZW5ndGggPiAwKTtcbiAgICB0aGlzLmRpcnR5Q2hhbmdlLmVtaXQodGhpcy5kaXJ0eSk7XG4gIH1cblxuICAvKipcbiAgICogTWFya3Mgcm93cyBhcyByZW1vdmVkIHJvd3NcbiAgICovXG4gIHB1YmxpYyByZW1vdmUoLi4ucmVtb3ZlSXRlbXM6IGFueVtdKSB7XG4gICAgaWYgKHRoaXMudGFibGUgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEFkdmFuY2VkVGFibGVOb3ROdWxsRXJyb3IoKTtcbiAgICB9XG4gICAgLy8gZ2V0IGtleVxuICAgIGNvbnN0IGtleSA9IHRoaXMudGFibGUuY29uZmlnLmNvbHVtbnNbMF0ucHJvcGVydHkgfHwgdGhpcy50YWJsZS5jb25maWcuY29sdW1uc1swXS5uYW1lO1xuICAgIC8vIGxvb3AgaXRlbXNcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgcmVtb3ZlSXRlbXMpIHtcbiAgICAgICAgY29uc3QgdHIgPSB0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzKCc6aGFzKGlucHV0W2RhdGEtaWQ9XCInICsgZWxlbWVudFtrZXldICsgJ1wiXSknKS5ub2RlcygpLnRvJCgpO1xuICAgICAgICAvLyBpZiByb3cgaXMgbWFya2VkIGFzIGFkZGVkXG4gICAgICAgIGlmICh0ci5oYXNDbGFzcygnYWRkZWQnKSkge1xuICAgICAgICAgIC8vIHJlbW92ZSB0aGlzIGRpcnR5IHJvd1xuICAgICAgICAgIHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3ModHIpLnJlbW92ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIG90aGVyd2lzZSB1bm1hcmtlZCByb3dcbiAgICAgICAgICB0ci50b2dnbGVDbGFzcygncmVtb3ZlZCB0ZXh0LWdyYXktNDAwIHRleHQtZGVjb3JhdGlvbi1saW5lLXRocm91Z2gnKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjaGVjayBpZiBpdGVtIGlzIHNlbGVjdGVkXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSW5kZXggPSB0aGlzLnRhYmxlLnNlbGVjdGVkLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xuICAgICAgICAgIHJldHVybiBpdGVtW2tleV0gPT09IGVsZW1lbnRba2V5XTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGFuZCByZW1vdmUgaXQgZnJvbSBzZWxlY3RlZCBjb2xsZWN0aW9uXG4gICAgICAgIGlmIChzZWxlY3RlZEluZGV4ID49IDApIHtcbiAgICAgICAgICB0aGlzLnRhYmxlLnNlbGVjdGVkLnNwbGljZShzZWxlY3RlZEluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gcmUtZHJhdyB0YWJsZVxuICAgIHRoaXMudGFibGUuZGF0YVRhYmxlLmRyYXcoKTtcbiAgICAgIC8vIGdldCBudW1iZXIgb2YgdGFibGUgaXRlbXNcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3MoKS5kYXRhKCk7XG4gICAgICAvLyBnZXQgbnVtYmVyIG9mIHJlbW92ZWQgaXRlbXNcbiAgICBjb25zdCByZW1vdmVkTGVuZ3RoID0gdGhpcy50YWJsZS5kYXRhVGFibGUucm93cygnLnJlbW92ZWQnKVswXS5sZW5ndGg7XG4gICAgICAvLyBnZXQgbnVtYmVyIG9mIGFkZGVkIGl0ZW1zXG4gICAgY29uc3QgYWRkZWRMZW5ndGggPSB0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzKCcuYWRkZWQnKVswXS5sZW5ndGg7XG4gICAgICAvLyByZWZyZXNoXG4gICAgdGhpcy50YWJsZS5sb2FkLmVtaXQoe1xuICAgICAgICBkYXRhOiBpdGVtcyxcbiAgICAgICAgcmVjb3Jkc0ZpbHRlcmVkOiBpdGVtcy5sZW5ndGggLSByZW1vdmVkTGVuZ3RoLFxuICAgICAgICByZWNvcmRzVG90YWw6IGl0ZW1zLmxlbmd0aCAtIHJlbW92ZWRMZW5ndGgsXG4gICAgICB9KTtcbiAgICB0aGlzLmRpcnR5ID0gKHJlbW92ZWRMZW5ndGggPiAwIHx8IGFkZGVkTGVuZ3RoID4gMCk7XG4gICAgdGhpcy5kaXJ0eUNoYW5nZS5lbWl0KHRoaXMuZGlydHkpO1xuICB9XG5cbiAgcHVibGljIHNldChpdGVtczogYW55W10pIHtcbiAgICBpZiAodGhpcy50YWJsZSA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgQWR2YW5jZWRUYWJsZU5vdE51bGxFcnJvcigpO1xuICAgIH1cbiAgICAvLyBjbGVhciByb3dzXG4gICAgdGhpcy50YWJsZS5zZWxlY3RlZCA9IFtdO1xuICAgIHRoaXMudGFibGUuZGF0YVRhYmxlLmNsZWFyKCk7XG4gICAgLy8gc2V0IGl0ZW1zXG4gICAgdGhpcy50YWJsZS5kYXRhVGFibGUucm93cy5hZGQoaXRlbXMpLmRyYXcoKTtcbiAgICB0aGlzLnRhYmxlLmxvYWQuZW1pdCh7XG4gICAgICBkYXRhOiBpdGVtcyxcbiAgICAgIHJlY29yZHNGaWx0ZXJlZDogaXRlbXMubGVuZ3RoLFxuICAgICAgcmVjb3Jkc1RvdGFsOiBpdGVtcy5sZW5ndGgsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVW5kbyBjaGFuZ2VzXG4gICAqL1xuICBwdWJsaWMgdW5kbygpIHtcbiAgICBpZiAodGhpcy50YWJsZSA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgQWR2YW5jZWRUYWJsZU5vdE51bGxFcnJvcigpO1xuICAgIH1cbiAgICAvLyByZXNldCByZW1vdmVkIHJvd3NcbiAgICB0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzKCcucmVtb3ZlZCcpLm5vZGVzKCkudG8kKCkudG9nZ2xlQ2xhc3MoJ3JlbW92ZWQgdGV4dC1ncmF5LTQwMCB0ZXh0LWRlY29yYXRpb24tbGluZS10aHJvdWdoJyk7XG4gICAgLy8gcmVtb3ZlIGFkZGVkIHJvd3NcbiAgICB0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzKCcuYWRkZWQnKS5yZW1vdmUoKTtcbiAgICAvLyBjbGVhciBzZWxlY3RlZCBpdGVtc1xuICAgIHRoaXMudGFibGUuc2VsZWN0ZWQgPSBbXTtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3MoKS5kYXRhKCk7XG4gICAgdGhpcy50YWJsZS5kYXRhVGFibGUuZHJhdygpO1xuICAgIHRoaXMudGFibGUubG9hZC5lbWl0KHtcbiAgICAgIGRhdGE6IGl0ZW1zLFxuICAgICAgcmVjb3Jkc0ZpbHRlcmVkOiBpdGVtcy5sZW5ndGgsXG4gICAgICByZWNvcmRzVG90YWw6IGl0ZW1zLmxlbmd0aCxcbiAgICB9KTtcbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgdGhpcy5kaXJ0eUNoYW5nZS5lbWl0KHRoaXMuZGlydHkpO1xuICB9XG5cbiAgcHVibGljIHJvd3MoKSB7XG4gICAgaWYgKHRoaXMudGFibGUgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEFkdmFuY2VkVGFibGVOb3ROdWxsRXJyb3IoKTtcbiAgICB9XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy50YWJsZS5kYXRhVGFibGUucm93cygnOm5vdCgucmVtb3ZlZCknKS5kYXRhKCkpO1xuICB9XG5cbn1cbiJdfQ==
@@ -1,229 +0,0 @@
1
- import * as tslib_1 from "tslib";
2
- import { Directive, HostListener } from '@angular/core';
3
- import { ActivatedTableService } from '../tables.activated-table.service';
4
- import { AngularDataContext } from '@themost/angular';
5
- import { ConfigurationService, ErrorService, LoadingService } from '@universis/common';
6
- import { TranslateService } from '@ngx-translate/core';
7
- import { ResponseError } from '@themost/client';
8
- export const MAX_EXPORT_ITEMS = 500;
9
- export class BtnExpDirective {
10
- constructor(_activatedTable, _context, _config, _translate, _loadingService, _errorService) {
11
- this._activatedTable = _activatedTable;
12
- this._context = _context;
13
- this._config = _config;
14
- this._translate = _translate;
15
- this._loadingService = _loadingService;
16
- this._errorService = _errorService;
17
- }
18
- clickEvent(event) {
19
- return tslib_1.__awaiter(this, void 0, void 0, function* () {
20
- event.preventDefault();
21
- event.stopPropagation();
22
- if (this._activatedTable.activeTable) {
23
- return this._activatedTable.activeTable.exportView();
24
- /*
25
- const lastQuery = this._activatedTable.activeTable.lastQuery;
26
- const tableConfig = this._activatedTable.activeTable.config;
27
- const serviceHeaders = this._context.getService().getHeaders();
28
- const queryModel = lastQuery.getModel();
29
- let query = this._context.model(queryModel).asQueryable();
30
- const queryParams = lastQuery.getParams();
31
- query = this.constructQuery(query, queryParams, tableConfig, serviceHeaders);
32
- // get export settings
33
- const exportSettings = this._config.settings as ExportLimitConfiguration;
34
- // get export limit
35
- const maxExportItems = exportSettings && exportSettings.tables && exportSettings.tables.exportLimit;
36
- if (maxExportItems && typeof maxExportItems === 'number' && maxExportItems > 0) {
37
- query.skip(0).take(maxExportItems);
38
- } else {
39
- query.skip(0).take(MAX_EXPORT_ITEMS);
40
- }
41
- // This constructs the URI based on the way @themost does
42
- const url = this.constructURL(query);
43
- this.downloadFile(url, query.getService().getHeaders(), query.getModel()); */
44
- }
45
- });
46
- }
47
- /**
48
- * Sets the parameters to the query based on
49
- * the active filters of the activated table
50
- * @param {ClientDataQueryable} query
51
- * @param params: The filters of the last query of the activated table
52
- * @return ClientDataQueryable
53
- */
54
- setParams(query, params) {
55
- if (params && typeof params === 'object') {
56
- Object.keys(params).forEach((key) => {
57
- query.setParam(key, params[key]);
58
- });
59
- }
60
- return query;
61
- }
62
- /**
63
- * Sets the headers to the query based on
64
- * the default headers of the DataContext
65
- * and appending the accept header to get
66
- * an xlsx file from the API
67
- * @param {ClientDataQueryable} query
68
- * @param {Headers} headers: The headers to append to the query
69
- * @return ClientDataQueryable
70
- */
71
- setHeaders(query, headers) {
72
- Object.keys(headers).forEach((key) => {
73
- if (headers.hasOwnProperty(key)) {
74
- query.getService().setHeader(key, headers[key]);
75
- }
76
- });
77
- // sets a header to accept xlsx files
78
- query.getService().setHeader('Accept', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
79
- return query;
80
- }
81
- /**
82
- * Constructs the select parameter of the
83
- * ClientDataQuery by replacing the target name
84
- * of the field based on the localized translation
85
- * of that property on the advanced tabled
86
- * @param {ClientDataQueryable} query
87
- * @param tableConfig: The configuration of the activated table
88
- * @return ClientDataQueryable
89
- */
90
- constructQueryParam(query, tableConfig) {
91
- let selectQuery = query.getParams().$select;
92
- let selectQueryArray = selectQuery.split(',');
93
- selectQueryArray = selectQueryArray.map((select) => {
94
- const words = select.split(' ');
95
- if (words.length === 3) {
96
- if (tableConfig && tableConfig.columns) {
97
- for (const column of tableConfig.columns) {
98
- if (column.property === words[2] && column.title) {
99
- words[2] = `"${this._translate.instant(column.title)}"`;
100
- }
101
- else if (column.property === words[2]) {
102
- words[2] = `"${this._translate.instant(words[2])}"`;
103
- }
104
- }
105
- }
106
- }
107
- if (words.length === 1) {
108
- if (tableConfig && tableConfig.columns) {
109
- for (const column of tableConfig.columns) {
110
- if (column.name === words[0] && column.title) {
111
- words[0] = `${words[0]} as "${this._translate.instant(column.title)}"`;
112
- break;
113
- }
114
- else if (column.name === words[0] && column.property) {
115
- words[0] = `${words[0]} as "${this._translate.instant(column.property)}"`;
116
- break;
117
- }
118
- else if (words[0] === column.name && words[0] === "id" && column.hidden) {
119
- break;
120
- }
121
- else if (words[0] == column.name || words[0] === column.property) {
122
- words[0] = `${words[0]} as "${this._translate.instant(words[0])}"`;
123
- }
124
- }
125
- }
126
- return words[0];
127
- }
128
- return words.join(' ');
129
- });
130
- selectQuery = selectQueryArray.join(',');
131
- query.setParam('$select', selectQuery);
132
- return query;
133
- }
134
- /**
135
- * Constructs the fetch URL based the query parameters
136
- * @param {ClientDataQueryable} query
137
- * @return String
138
- */
139
- constructURL(query) {
140
- const baseURL = query.getService().getBase();
141
- let url = baseURL.endsWith('/') ? (baseURL + query.getModel() + '?') : (baseURL + '/' + query.getModel() + '?');
142
- Object.keys(query.getParams()).forEach((key, index) => {
143
- if (index === 0) {
144
- url += key + '=' + query.getParams()[key];
145
- }
146
- else {
147
- url += '&' + key + '=' + query.getParams()[key];
148
- }
149
- });
150
- return url;
151
- }
152
- /**
153
- * Constructs the query by setting the parameters of the
154
- * advanced table's active filters, sets the necessary headers
155
- * and build the select parameter of the query
156
- * @param {ClientDataQueryable} query
157
- * @param params: The filters of the last query of the activated table
158
- * @param tableConfig: The configuration of the activated table
159
- * @param {Headers} headers: The headers to append to the query
160
- * @return ClientDataQueryable
161
- */
162
- constructQuery(query, params, tableConfig, headers) {
163
- let _query = this.setParams(query, params);
164
- _query = this.setHeaders(_query, headers);
165
- _query = this.constructQueryParam(_query, tableConfig);
166
- return _query;
167
- }
168
- /**
169
- * Fetches and saves the xlsx file
170
- * @param {String} url
171
- * @param {Headers} serviceHeaders: The headers to append to the query
172
- * @param modelName: The model name of the advanced table
173
- */
174
- downloadFile(url, serviceHeaders, modelName) {
175
- this._loadingService.showLoading();
176
- fetch(encodeURI(url), {
177
- headers: serviceHeaders,
178
- credentials: 'include'
179
- }).then(response => {
180
- if (response && !response.ok) {
181
- throw new ResponseError(response.statusText, response.status);
182
- }
183
- return response.blob();
184
- }).then(blob => {
185
- const objectUrl = window.URL.createObjectURL(blob);
186
- const a = document.createElement('a');
187
- document.body.appendChild(a);
188
- a.setAttribute('style', 'display: none');
189
- a.href = objectUrl;
190
- const downloadName = `${modelName}.xlsx`;
191
- a.download = downloadName;
192
- // this adds support for IE and MS Edge (up to version 44.19041)
193
- if (window.navigator && window.navigator.msSaveOrOpenBlob) {
194
- window.navigator.msSaveOrOpenBlob(blob, downloadName);
195
- }
196
- else {
197
- // for all other browsers
198
- a.click();
199
- }
200
- window.URL.revokeObjectURL(objectUrl);
201
- a.remove();
202
- this._loadingService.hideLoading();
203
- }).catch(err => {
204
- this._loadingService.hideLoading();
205
- this._errorService.showError(err, {
206
- continueLink: '.'
207
- });
208
- });
209
- }
210
- }
211
- BtnExpDirective.decorators = [
212
- { type: Directive, args: [{
213
- selector: '.universis-btn-export'
214
- },] }
215
- ];
216
- /** @nocollapse */
217
- BtnExpDirective.ctorParameters = () => [
218
- { type: ActivatedTableService },
219
- { type: AngularDataContext },
220
- { type: ConfigurationService },
221
- { type: TranslateService },
222
- { type: LoadingService },
223
- { type: ErrorService }
224
- ];
225
- BtnExpDirective.propDecorators = {
226
- clickEvent: [{ type: HostListener, args: ['click', ['$event'],] }]
227
- };
228
-
229
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnRuZXhwLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy8iLCJzb3VyY2VzIjpbImxpYi9kaXJlY3RpdmVzL2J0bmV4cC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBQ3hFLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxvQkFBb0IsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDckYsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFzQixhQUFhLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUduRSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUM7QUFXcEMsTUFBTTtJQUNKLFlBQW9CLGVBQXNDLEVBQ3RDLFFBQTRCLEVBQzVCLE9BQTZCLEVBQzdCLFVBQTRCLEVBQzVCLGVBQStCLEVBQy9CLGFBQTJCO1FBTDNCLG9CQUFlLEdBQWYsZUFBZSxDQUF1QjtRQUN0QyxhQUFRLEdBQVIsUUFBUSxDQUFvQjtRQUM1QixZQUFPLEdBQVAsT0FBTyxDQUFzQjtRQUM3QixlQUFVLEdBQVYsVUFBVSxDQUFrQjtRQUM1QixvQkFBZSxHQUFmLGVBQWUsQ0FBZ0I7UUFDL0Isa0JBQWEsR0FBYixhQUFhLENBQWM7SUFDL0MsQ0FBQztJQUdLLFVBQVUsQ0FBQyxLQUFLOztZQUNwQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3hCLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUU7Z0JBQ3BDLE9BQU8sSUFBSSxD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TUFBTSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7YUFDdkQ7aUJBQU07Z0JBQ0wseUJBQXlCO2dCQUN6QixDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDWDtZQUNELE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3RDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNYLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2hDLFlBQVksRUFBRSxHQUFHO2FBQ2xCLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7O1lBMU1GLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsdUJBQXVCO2FBQ2xDOzs7O1lBakJPLHFCQUFxQjtZQUNyQixrQkFBa0I7WUFDbEIsb0JBQW9CO1lBQ3BCLGdCQUFnQjtZQURvQixjQUFjO1lBQTVCLFlBQVk7Ozt5QkF5QnZDLFlBQVksU0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RpcmVjdGl2ZSwgSG9zdExpc3RlbmVyfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkVGFibGVTZXJ2aWNlfSBmcm9tICcuLi90YWJsZXMuYWN0aXZhdGVkLXRhYmxlLnNlcnZpY2UnO1xuaW1wb3J0IHtBbmd1bGFyRGF0YUNvbnRleHR9IGZyb20gJ0B0aGVtb3N0L2FuZ3VsYXInO1xuaW1wb3J0IHtDb25maWd1cmF0aW9uU2VydmljZSwgRXJyb3JTZXJ2aWNlLCBMb2FkaW5nU2VydmljZX0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24nO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7Q2xpZW50RGF0YVF1ZXJ5YWJsZSwgUmVzcG9uc2VFcnJvcn0gZnJvbSAnQHRoZW1vc3QvY2xpZW50JztcbmltcG9ydCB7IFRhYmxlQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUuaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBjb25zdCBNQVhfRVhQT1JUX0lURU1TID0gNTAwO1xuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgRXhwb3J0TGltaXRDb25maWd1cmF0aW9uIHtcbiAgdGFibGVzPzoge1xuICAgIGV4cG9ydExpbWl0PzogbnVtYmVyXG4gIH07XG59XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJy51bml2ZXJzaXMtYnRuLWV4cG9ydCdcbn0pXG5leHBvcnQgY2xhc3MgQnRuRXhwRGlyZWN0aXZlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfYWN0aXZhdGVkVGFibGU6IEFjdGl2YXRlZFRhYmxlU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfY29udGV4dDogQW5ndWxhckRhdGFDb250ZXh0LFxuICAgICAgICAgICAgICBwcml2YXRlIF9jb25maWc6IENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF90cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2xvYWRpbmdTZXJ2aWNlOiBMb2FkaW5nU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfZXJyb3JTZXJ2aWNlOiBFcnJvclNlcnZpY2UpIHtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgYXN5bmMgY2xpY2tFdmVudChldmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKHRoaXMuX2FjdGl2YXRlZFRhYmxlLmFjdGl2ZVRhYmxlKSB7XG4gICAgICByZXR1cm4gdGhpcy5fYWN0aXZhdGVkVGFibGUuYWN0aXZlVGFibGUuZXhwb3J0VmlldygpO1xuICAgICAgLypcbiAgICAgIGNvbnN0IGxhc3RRdWVyeSA9IHRoaXMuX2FjdGl2YXRlZFRhYmxlLmFjdGl2ZVRhYmxlLmxhc3RRdWVyeTtcbiAgICAgIGNvbnN0IHRhYmxlQ29uZmlnID0gdGhpcy5fYWN0aXZhdGVkVGFibGUuYWN0aXZlVGFibGUuY29uZmlnO1xuICAgICAgY29uc3Qgc2VydmljZUhlYWRlcnMgPSB0aGlzLl9jb250ZXh0LmdldFNlcnZpY2UoKS5nZXRIZWFkZXJzKCk7XG4gICAgICBjb25zdCBxdWVyeU1vZGVsID0gbGFzdFF1ZXJ5LmdldE1vZGVsKCk7XG4gICAgICBsZXQgcXVlcnkgPSB0aGlzLl9jb250ZXh0Lm1vZGVsKHF1ZXJ5TW9kZWwpLmFzUXVlcnlhYmxlKCk7XG4gICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IGxhc3RRdWVyeS5nZXRQYXJhbXMoKTtcbiAgICAgIHF1ZXJ5ID0gdGhpcy5jb25zdHJ1Y3RRdWVyeShxdWVyeSwgcXVlcnlQYXJhbXMsIHRhYmxlQ29uZmlnLCBzZXJ2aWNlSGVhZGVycyk7XG4gICAgICAvLyBnZXQgZXhwb3J0IHNldHRpbmdzXG4gICAgICBjb25zdCBleHBvcnRTZXR0aW5ncyA9IHRoaXMuX2NvbmZpZy5zZXR0aW5ncyBhcyBFeHBvcnRMaW1pdENvbmZpZ3VyYXRpb247XG4gICAgICAvLyBnZXQgZXhwb3J0IGxpbWl0XG4gICAgICBjb25zdCBtYXhFeHBvcnRJdGVtcyA9IGV4cG9ydFNldHRpbmdzICYmIGV4cG9ydFNldHRpbmdzLnRhYmxlcyAmJiBleHBvcnRTZXR0aW5ncy50YWJsZXMuZXhwb3J0TGltaXQ7XG4gICAgICBpZiAobWF4RXhwb3J0SXRlbXMgJiYgdHlwZW9mIG1heEV4cG9ydEl0ZW1zID09PSAnbnVtYmVyJyAmJiBtYXhFeHBvcnRJdGVtcyA+IDApIHtcbiAgICAgICAgcXVlcnkuc2tpcCgwKS50YWtlKG1heEV4cG9ydEl0ZW1zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXJ5LnNraXAoMCkudGFrZShNQVhfRVhQT1JUX0lURU1TKTtcbiAgICAgIH1cbiAgICAgIC8vIFRoaXMgY29uc3RydWN0cyB0aGUgVVJJIGJhc2VkIG9uIHRoZSB3YXkgQHRoZW1vc3QgZG9lc1xuICAgICAgY29uc3QgdXJsID0gdGhpcy5jb25zdHJ1Y3RVUkwocXVlcnkpO1xuICAgICAgdGhpcy5kb3dubG9hZEZpbGUodXJsLCBxdWVyeS5nZXRTZXJ2aWNlKCkuZ2V0SGVhZGVycygpLCBxdWVyeS5nZXRNb2RlbCgpKTsgKi9cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgcGFyYW1ldGVycyB0byB0aGUgcXVlcnkgYmFzZWQgb25cbiAgICogdGhlIGFjdGl2ZSBmaWx0ZXJzIG9mIHRoZSBhY3RpdmF0ZWQgdGFibGVcbiAgICogQHBhcmFtIHtDbGllbnREYXRhUXVlcnlhYmxlfSBxdWVyeVxuICAgKiBAcGFyYW0gcGFyYW1zOiBUaGUgZmlsdGVycyBvZiB0aGUgbGFzdCBxdWVyeSBvZiB0aGUgYWN0aXZhdGVkIHRhYmxlXG4gICAqIEByZXR1cm4gQ2xpZW50RGF0YVF1ZXJ5YWJsZVxuICAgKi9cbiAgc2V0UGFyYW1zKHF1ZXJ5OiBDbGllbnREYXRhUXVlcnlhYmxlLCBwYXJhbXMpOiBDbGllbnREYXRhUXVlcnlhYmxlIHtcbiAgICBpZiAocGFyYW1zICYmIHR5cGVvZiBwYXJhbXMgPT09ICdvYmplY3QnKSB7XG4gICAgICBPYmplY3Qua2V5cyhwYXJhbXMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBxdWVyeS5zZXRQYXJhbShrZXksIHBhcmFtc1trZXldKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgaGVhZGVycyB0byB0aGUgcXVlcnkgYmFzZWQgb25cbiAgICogdGhlIGRlZmF1bHQgaGVhZGVycyBvZiB0aGUgRGF0YUNvbnRleHRcbiAgICogYW5kIGFwcGVuZGluZyB0aGUgYWNjZXB0IGhlYWRlciB0byBnZXRcbiAgICogYW4geGxzeCBmaWxlIGZyb20gdGhlIEFQSVxuICAgKiBAcGFyYW0ge0NsaWVudERhdGFRdWVyeWFibGV9IHF1ZXJ5XG4gICAqIEBwYXJhbSB7SGVhZGVyc30gaGVhZGVyczogVGhlIGhlYWRlcnMgdG8gYXBwZW5kIHRvIHRoZSBxdWVyeVxuICAgKiBAcmV0dXJuIENsaWVudERhdGFRdWVyeWFibGVcbiAgICovXG4gIHNldEhlYWRlcnMocXVlcnk6IENsaWVudERhdGFRdWVyeWFibGUsIGhlYWRlcnM6IEhlYWRlcnMpOiBDbGllbnREYXRhUXVlcnlhYmxlIHtcbiAgICBPYmplY3Qua2V5cyhoZWFkZXJzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGlmIChoZWFkZXJzLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgcXVlcnkuZ2V0U2VydmljZSgpLnNldEhlYWRlcihrZXksIGhlYWRlcnNba2V5XSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgLy8gc2V0cyBhIGhlYWRlciB0byBhY2NlcHQgeGxzeCBmaWxlc1xuICAgIHF1ZXJ5LmdldFNlcnZpY2UoKS5zZXRIZWFkZXIoJ0FjY2VwdCcsICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldCcpO1xuICAgIHJldHVybiBxdWVyeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIHRoZSBzZWxlY3QgcGFyYW1ldGVyIG9mIHRoZVxuICAgKiBDbGllbnREYXRhUXVlcnkgYnkgcmVwbGFjaW5nIHRoZSB0YXJnZXQgbmFtZVxuICAgKiBvZiB0aGUgZmllbGQgYmFzZWQgb24gdGhlIGxvY2FsaXplZCB0cmFuc2xhdGlvblxuICAgKiBvZiB0aGF0IHByb3BlcnR5IG9uIHRoZSBhZHZhbmNlZCB0YWJsZWRcbiAgICogQHBhcmFtIHtDbGllbnREYXRhUXVlcnlhYmxlfSBxdWVyeVxuICAgKiBAcGFyYW0gdGFibGVDb25maWc6IFRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBhY3RpdmF0ZWQgdGFibGVcbiAgICogQHJldHVybiBDbGllbnREYXRhUXVlcnlhYmxlXG4gICAqL1xuICBjb25zdHJ1Y3RRdWVyeVBhcmFtKHF1ZXJ5OiBDbGllbnREYXRhUXVlcnlhYmxlLCB0YWJsZUNvbmZpZzogVGFibGVDb25maWd1cmF0aW9uKTogQ2xpZW50RGF0YVF1ZXJ5YWJsZSB7XG4gICAgbGV0IHNlbGVjdFF1ZXJ5ID0gcXVlcnkuZ2V0UGFyYW1zKCkuJHNlbGVjdDtcbiAgICBsZXQgc2VsZWN0UXVlcnlBcnJheSA9IHNlbGVjdFF1ZXJ5LnNwbGl0KCcsJyk7XG4gICAgc2VsZWN0UXVlcnlBcnJheSA9IHNlbGVjdFF1ZXJ5QXJyYXkubWFwKChzZWxlY3QpID0+IHtcbiAgICAgIGNvbnN0IHdvcmRzID0gc2VsZWN0LnNwbGl0KCcgJyk7XG4gICAgICBpZiAod29yZHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgIGlmICh0YWJsZUNvbmZpZyAmJiB0YWJsZUNvbmZpZy5jb2x1bW5zKSB7XG4gICAgICAgICAgZm9yKGNvbnN0IGNvbHVtbiBvZiB0YWJsZUNvbmZpZy5jb2x1bW5zKSB7XG4gICAgICAgICAgICBpZiAoY29sdW1uLnByb3BlcnR5ID09PSB3b3Jkc1syXSAmJiBjb2x1bW4udGl0bGUpIHtcbiAgICAgICAgICAgICAgd29yZHNbMl0gPSBgXCIke3RoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KGNvbHVtbi50aXRsZSl9XCJgO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4ucHJvcGVydHkgPT09IHdvcmRzWzJdKSB7XG4gICAgICAgICAgICAgIHdvcmRzWzJdID0gYFwiJHt0aGlzLl90cmFuc2xhdGUuaW5zdGFudCh3b3Jkc1syXSl9XCJgXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAod29yZHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGlmICh0YWJsZUNvbmZpZyAmJiB0YWJsZUNvbmZpZy5jb2x1bW5zKSB7XG4gICAgICAgICAgZm9yKGNvbnN0IGNvbHVtbiBvZiB0YWJsZUNvbmZpZy5jb2x1bW5zKXtcbiAgICAgICAgICAgIGlmIChjb2x1bW4ubmFtZSA9PT0gd29yZHNbMF0gJiYgY29sdW1uLnRpdGxlKSB7XG4gICAgICAgICAgICAgIHdvcmRzWzBdID0gYCR7d29yZHNbMF19IGFzIFwiJHt0aGlzLl90cmFuc2xhdGUuaW5zdGFudChjb2x1bW4udGl0bGUpfVwiYDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi5uYW1lID09PSB3b3Jkc1swXSAmJiBjb2x1bW4ucHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgd29yZHNbMF0gPSBgJHt3b3Jkc1swXX0gYXMgXCIke3RoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KGNvbHVtbi5wcm9wZXJ0eSl9XCJgO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAod29yZHNbMF0gPT09IGNvbHVtbi5uYW1lICYmIHdvcmRzWzBdPT09IFwiaWRcIiAmJiBjb2x1bW4uaGlkZGVuKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSBlbHNlIGlmKHdvcmRzWzBdID09IGNvbHVtbi5uYW1lIHx8IHdvcmRzWzBdPT09IGNvbHVtbi5wcm9wZXJ0eSkge1xuICAgICAgICAgICAgICB3b3Jkc1swXSA9IGAke3dvcmRzWzBdfSBhcyBcIiR7dGhpcy5fdHJhbnNsYXRlLmluc3RhbnQod29yZHNbMF0pfVwiYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHdvcmRzWzBdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdvcmRzLmpvaW4oJyAnKTtcbiAgICB9KTtcbiAgICBzZWxlY3RRdWVyeSA9IHNlbGVjdFF1ZXJ5QXJyYXkuam9pbignLCcpO1xuICAgIHF1ZXJ5LnNldFBhcmFtKCckc2VsZWN0Jywgc2VsZWN0UXVlcnkgKTtcbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0cyB0aGUgZmV0Y2ggVVJMIGJhc2VkIHRoZSBxdWVyeSBwYXJhbWV0ZXJzXG4gICAqIEBwYXJhbSB7Q2xpZW50RGF0YVF1ZXJ5YWJsZX0gcXVlcnlcbiAgICogQHJldHVybiBTdHJpbmdcbiAgICovXG4gIGNvbnN0cnVjdFVSTChxdWVyeSk6IFN0cmluZyB7XG4gICAgY29uc3QgYmFzZVVSTCA9IHF1ZXJ5LmdldFNlcnZpY2UoKS5nZXRCYXNlKCk7XG4gICAgbGV0IHVybCA9IGJhc2VVUkwuZW5kc1dpdGgoJy8nKSA/IChiYXNlVVJMICsgcXVlcnkuZ2V0TW9kZWwoKSArICc/JykgOiAoYmFzZVVSTCArICcvJyArIHF1ZXJ5LmdldE1vZGVsKCkgKyAnPycpO1xuICAgIE9iamVjdC5rZXlzKHF1ZXJ5LmdldFBhcmFtcygpKS5mb3JFYWNoKChrZXksIGluZGV4KSA9PiB7XG4gICAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgdXJsICs9IGtleSArICc9JyArIHF1ZXJ5LmdldFBhcmFtcygpW2tleV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1cmwgKz0gJyYnICsga2V5ICsgJz0nICsgcXVlcnkuZ2V0UGFyYW1zKClba2V5XTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdXJsO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgdGhlIHF1ZXJ5IGJ5IHNldHRpbmcgdGhlIHBhcmFtZXRlcnMgb2YgdGhlXG4gICAqIGFkdmFuY2VkIHRhYmxlJ3MgYWN0aXZlIGZpbHRlcnMsIHNldHMgdGhlIG5lY2Vzc2FyeSBoZWFkZXJzXG4gICAqIGFuZCBidWlsZCB0aGUgc2VsZWN0IHBhcmFtZXRlciBvZiB0aGUgcXVlcnlcbiAgICogQHBhcmFtIHtDbGllbnREYXRhUXVlcnlhYmxlfSBxdWVyeVxuICAgKiBAcGFyYW0gcGFyYW1zOiBUaGUgZmlsdGVycyBvZiB0aGUgbGFzdCBxdWVyeSBvZiB0aGUgYWN0aXZhdGVkIHRhYmxlXG4gICAqIEBwYXJhbSB0YWJsZUNvbmZpZzogVGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGFjdGl2YXRlZCB0YWJsZVxuICAgKiBAcGFyYW0ge0hlYWRlcnN9IGhlYWRlcnM6IFRoZSBoZWFkZXJzIHRvIGFwcGVuZCB0byB0aGUgcXVlcnlcbiAgICogQHJldHVybiBDbGllbnREYXRhUXVlcnlhYmxlXG4gICAqL1xuICBjb25zdHJ1Y3RRdWVyeShxdWVyeSwgcGFyYW1zLCB0YWJsZUNvbmZpZywgaGVhZGVyczogSGVhZGVycykge1xuICAgIGxldCBfcXVlcnkgPSB0aGlzLnNldFBhcmFtcyhxdWVyeSwgcGFyYW1zKTtcbiAgICBfcXVlcnkgPSB0aGlzLnNldEhlYWRlcnMoX3F1ZXJ5LCBoZWFkZXJzKTtcbiAgICBfcXVlcnkgPSB0aGlzLmNvbnN0cnVjdFF1ZXJ5UGFyYW0oX3F1ZXJ5LCB0YWJsZUNvbmZpZyk7XG4gICAgcmV0dXJuIF9xdWVyeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIGFuZCBzYXZlcyB0aGUgeGxzeCBmaWxlXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB1cmxcbiAgICogQHBhcmFtIHtIZWFkZXJzfSBzZXJ2aWNlSGVhZGVyczogVGhlIGhlYWRlcnMgdG8gYXBwZW5kIHRvIHRoZSBxdWVyeVxuICAgKiBAcGFyYW0gbW9kZWxOYW1lOiBUaGUgbW9kZWwgbmFtZSBvZiB0aGUgYWR2YW5jZWQgdGFibGVcbiAgICovXG4gIGRvd25sb2FkRmlsZSh1cmwsIHNlcnZpY2VIZWFkZXJzOiBIZWFkZXJzLCBtb2RlbE5hbWUpIHtcbiAgICB0aGlzLl9sb2FkaW5nU2VydmljZS5zaG93TG9hZGluZygpO1xuICAgIGZldGNoKGVuY29kZVVSSSh1cmwpLCB7XG4gICAgICBoZWFkZXJzOiBzZXJ2aWNlSGVhZGVycyxcbiAgICAgIGNyZWRlbnRpYWxzOiAnaW5jbHVkZSdcbiAgICB9KS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgIGlmIChyZXNwb25zZSAmJiAhcmVzcG9uc2Uub2spIHtcbiAgICAgICAgdGhyb3cgbmV3IFJlc3BvbnNlRXJyb3IocmVzcG9uc2Uuc3RhdHVzVGV4dCwgcmVzcG9uc2Uuc3RhdHVzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNwb25zZS5ibG9iKCk7XG4gICAgfSkudGhlbihibG9iID0+IHtcbiAgICAgIGNvbnN0IG9iamVjdFVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7XG4gICAgICBhLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCAnZGlzcGxheTogbm9uZScpO1xuICAgICAgYS5ocmVmID0gb2JqZWN0VXJsO1xuICAgICAgY29uc3QgZG93bmxvYWROYW1lID0gYCR7bW9kZWxOYW1lfS54bHN4YDtcbiAgICAgIGEuZG93bmxvYWQgPSBkb3dubG9hZE5hbWU7XG4gICAgICAvLyB0aGlzIGFkZHMgc3VwcG9ydCBmb3IgSUUgYW5kIE1TIEVkZ2UgKHVwIHRvIHZlcnNpb24gNDQuMTkwNDEpXG4gICAgICBpZiAod2luZG93Lm5hdmlnYXRvciAmJiB3aW5kb3cubmF2aWdhdG9yLm1zU2F2ZU9yT3BlbkJsb2IpIHtcbiAgICAgICAgd2luZG93Lm5hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9iKGJsb2IsIGRvd25sb2FkTmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBmb3IgYWxsIG90aGVyIGJyb3dzZXJzXG4gICAgICAgIGEuY2xpY2soKTtcbiAgICAgIH1cbiAgICAgIHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKG9iamVjdFVybCk7XG4gICAgICBhLnJlbW92ZSgpO1xuICAgICAgdGhpcy5fbG9hZGluZ1NlcnZpY2UuaGlkZUxvYWRpbmcoKTtcbiAgICB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAgdGhpcy5fbG9hZGluZ1NlcnZpY2UuaGlkZUxvYWRpbmcoKTtcbiAgICAgIHRoaXMuX2Vycm9yU2VydmljZS5zaG93RXJyb3IoZXJyLCB7XG4gICAgICAgIGNvbnRpbnVlTGluazogJy4nXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG59XG4iXX0=
@@ -1,130 +0,0 @@
1
- // tslint:disable: quotemark
2
- // tslint:disable: max-line-length
3
- export const TABLES_EL = {
4
- "Tables": {
5
- "Export": "Εξαγωγή",
6
- "More": "Περισσότερα",
7
- "Search": "Αναζήτηση",
8
- "SearchPlaceholder": "Αναζήτηση...",
9
- "GroupBy": "Ομαδοποίηση ανά",
10
- "NotDefined": "Μη προσδιορισμένο",
11
- "DataTable": {
12
- "paginate": {
13
- "first": "Πρώτη σελίδα",
14
- "last": "Τελεταία σελίδα",
15
- "next": "Επόμενη",
16
- "previous": "Προηγούμενη"
17
- },
18
- "info": "Εμφάνιση _START_ έως _END_ από _TOTAL_ εγγραφές",
19
- "infoEmpty": "Δεν βρέθηκαν εγγραφές",
20
- "loading": "Εμφάνιση δεδομένων...",
21
- "processing": "Παραλαβή δεδομένων...",
22
- "emptyTable": "Δεν βρέθηκαν αποτελέσματα."
23
- },
24
- "ColumnDisplay": "Επιλογή Εμφάνισης στηλών",
25
- "ColumnDisplayInfo": "Επιλέξτε τις στήλες που θέλετε να εμφανίζονται.",
26
- "Save": "Εφαρμογή",
27
- "Apply": "Εφαρμογή",
28
- "Cancel": "Ακύρωση",
29
- "RecordsPerPage": "Εγγραφές ανά σελίδα",
30
- "PageInfo": "{{start}}-{{end}} από {{recordsTotal}}",
31
- "SearchListPlaceholder": "Αναζητήστε στη λίστα...",
32
- "Filters": "Φίλτρα",
33
- "All": "Όλα",
34
- "AddItem": "Προσθήκη στοιχείου",
35
- "EmptyTableTitle": "Δεν βρέθηκαν αποτελέσματα.",
36
- "EmptyTableMessage": "Προσπαθήστε να χρησιμοποιήσετε άλλες λέξεις κλειδιά.",
37
- "RemoveItem": "Διαγραφή στοιχείου",
38
- "Items": "στοιχεία",
39
- "Item": "στοιχείο",
40
- "AddItemMessage": {
41
- "title": "Προσθήκη στοιχείων",
42
- "one": "Ένα νέο στοιχείο προστέθηκε με επιτυχία.",
43
- "many": "{{value}} νέα στοιχεία προστέθηκαν με επιτυχία."
44
- },
45
- "RemoveItemMessage": {
46
- "title": "Αφαίρεση στοιχείων",
47
- "one": "Ένα στοιχείο αφαιρέθηκε με επιτυχία.",
48
- "many": "{{value}} στοιχεία αφαιρέθηκαν με επιτυχία."
49
- },
50
- "RemoveItemsTitle": "Διαγραφή στοιχείου",
51
- "RemoveItemsMessage": "Πρόκειται να διαγράψετε ένα ή περισσότερα στοιχεία. Θέλετε να προχωρήσετε?",
52
- "SelectAll": "Επιλογή όλων",
53
- "ClearSelection": "Αναίρεση επιλογής",
54
- "Actions": {
55
- "Label": "Επεξεργασία",
56
- "Start": "Έναρξη",
57
- "ActionMessage": {
58
- "None": "Δεν έχετε επιλέξει κανένα στοιχείο που να ακολουθεί τις προϋποθέσεις της ενέργειας.",
59
- "One": "Έχετε επιλέξει ένα στοιχείο που ακολουθεί τις προϋποθέσεις της ενέργειας. Πατήστε το πλήκτρο Έναρξη για να ξεκινήσει η διαδικασία.",
60
- "Many": "Έχετε επιλέξει {{length}} στοιχεία που ακολουθούν τις προϋποθέσεις της ενέργειας. Πατήστε το πλήκτρο Έναρξη για να ξεκινήσει η διαδικασία."
61
- },
62
- "CompletedWithErrors": {
63
- "Title": "Η διαδικασία ολοκληρώθηκε με σφάλματα.",
64
- "Description": {
65
- "One": "Ένα στοιχείο δεν ανανεώθηκε λόγω ενός σφάλματος που συνέβη κατά την εκτέλεση της διαδικασίας.",
66
- "Many": "{{errors}} στοιχεία δεν ανανεώθηκαν λόγω ενός σφάλματος που συνέβη κατά την εκτέλεση της διαδικασίας."
67
- }
68
- },
69
- "CompletedWithSuccess": {
70
- "Title": "Η διαδικασία ολοκληρώθηκε με επιτυχία."
71
- }
72
- },
73
- "SelectColumns": "Επιλογή στηλών",
74
- "MoveUp": "Επάνω",
75
- "MoveDown": "Κάτω",
76
- "AddColumn": "Επιλογή",
77
- "RemoveColumn": "Αφαίρεση",
78
- "SelectColumnHelp": "Επιλέξτε μία ή περισσότερες από τις διαθέσιμες στήλες και πατήστε το πλήκτρο 'Επιλογή' για να τις εμφανίσετε. Χρησιμοποιήστε το πλήκτρο 'Αφαίρεση' για να αφαιρέσετε τις επιλεγμένες στήλες.",
79
- "MoveColumnHelp": "Χρησιμοποιήστε τα πλήκτρα 'Επάνω' και 'Κάτω' για να αλλάξετε την σειρά εμφάνισης των στηλών του πίνακα.",
80
- "UnknownColumn": "Άγνωστο",
81
- "SelectColumn": "Επιλογή",
82
- "ActionLinkColumn": "Ενέργειες",
83
- "DataError": {
84
- "Title": "Σφάλμα κατά την παραλαβή των δεδομένων",
85
- "Message": "Συνέβη σφάλμα κατά την παραλαβή των δεδομένων. Προσπαθήστε ξανά ή τροποποιήστε τα στοιχεία αναζήτησης."
86
- },
87
- "ExportList": "Εξαγωγή λίστας",
88
- "ExportLimitExceeded": "Το πλήθος των στοιχείων προς εξαγωγή ({{dataLength}}) ξεπερνάει το μέγιστο επιτρεπτό ({{exportLimit}}). Παρακαλούμε προσαρμόστε τα φίλτρα της αναζήτησης και προσπαθήστε ξανά.",
89
- "ExportResults": "Δεδομένα λίστας"
90
- },
91
- "TrueFalse": {
92
- "long": {
93
- "Yes": "Ναι",
94
- "No": "Όχι"
95
- }
96
- },
97
- "Settings": {
98
- "OperationCompleted": "Η διαδικασία ολοκληρώθηκε με επιτυχία."
99
- },
100
- "AdvancedSearch": {
101
- "Choose": "<Επιλέξτε μια αναζήτηση>",
102
- "ChooseDate": "Επιλογή ημερομηνίας",
103
- "SavedSearches": "Αποθηκευμένες αναζητήσεις",
104
- "ToggleDropdown": "Εμφάνιση λίστας",
105
- "SaveCurrentSearch": "Αποθήκευση αναζήτησης",
106
- "SaveAs": "Αποθήκευση ως",
107
- "Save": "Αποθήκευση",
108
- "Delete": "Διαγραφή",
109
- "More": "Περισσότερα",
110
- "Less": "Λιγότερα",
111
- "Modal": {
112
- "Title": "Αποθήκευση κριτηρίων αναζήτησης",
113
- "Help": "Ορίστε έναν τίτλο για τα επιλεγμένα κριτήρια αναζήτησης. Αυτός ο τίτλος θα σας βοηθήσει να τα χρησιμοποιήσετε ξανά στο μέλλον.",
114
- "TitleOnUserError": "Παρακαλώ εισάγετε έναν τίτλο",
115
- "TitleOnListAlreadyCreated": "Το όνομα αυτό χρησιμοποιείται ήδη. Διαλέξτε ένα διαφορετικό.",
116
- "NoListDefined": "Δεν έχει οριστεί το σημείο αποθήκευσης της λίστας",
117
- "EmptyCriteriaList": "Δεν έχετε καθορίσει κανένα κριτήριο για αποθήκευση",
118
- "SaveNameLabel": "Ονομασία λίστας",
119
- "SaveNamePlaceholder": "Εισάγετε έναν τίτλο",
120
- "Accept": "Αποθήκευση",
121
- "Decline": "Απόρριψη",
122
- "Close": "Κλείσιμο"
123
- }
124
- },
125
- "AddItems": {
126
- "SelectItems": "Επιλέξτε στοιχεία",
127
- }
128
- };
129
-
130
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGVzLmVsLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzLyIsInNvdXJjZXMiOlsibGliL2kxOG4vdGFibGVzLmVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDRCQUE0QjtBQUM1QixrQ0FBa0M7QUFDbEMsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHO0lBQ3JCLFFBQVEsRUFBRTtRQUNOLFFBQVEsRUFBRSxTQUFTO1FBQ25CLE1BQU0sRUFBRSxhQUFhO1FBQ3JCLFFBQVEsRUFBRSxXQUFXO1FBQ3JCLG1CQUFtQixFQUFFLGNBQWM7UUFDbkMsU0FBUyxFQUFFLGlCQUFpQjtRQUM1QixZQUFZLEVBQUUsbUJBQW1CO1FBQ2pDLFdBQVcsRUFBRTtZQUNULFVBQVUsRUFBRTtnQkFDUixPQUFPLEVBQUUsY0FBYztnQkFDdkIsTUFBTSxFQUFFLGlCQUFpQjtnQkFDekIsTUFBTSxFQUFFLFNBQVM7Z0JBQ2pCLFVBQVUsRUFBRSxhQUFhO2FBQzVCO1lBQ0QsTUFBTSxFQUFFLGlEQUFpRDtZQUN6RCxXQUFXLEVBQUUsdUJBQXVCO1lBQ3BDLFNBQVMsRUFBRSx1QkFBdUI7WUFDbEMsWUFBWSxFQUFFLHVCQUF1QjtZQUNyQyxZQUFZLEVBQUUsNEJBQTRCO1NBQzdDO1FBQ0gsZUFBZSxFQUFFLDBCQUEwQjtRQUMzQyxtQkFBbUIsRUFBRSxpREFBaUQ7UUFDdEUsTUFBTSxFQUFFLFVBQVU7UUFDbEIsT0FBTyxFQUFFLFVBQVU7UUFDbkIsUUFBUSxFQUFFLFNBQVM7UUFDbkIsZ0JBQWdCLEVBQUUscUJBQXFCO1FBQ3ZDLFVBQVUsRUFBRSx3Q0FBd0M7UUFDcEQsdUJBQXVCLEVBQUUseUJBQXlCO1FBQ2xELFNBQVMsRUFBRSxRQUFRO1FBQ25CLEtBQUssRUFBRSxLQUFLO1FBQ1YsU0FBUyxFQUFFLG9CQUFvQjtRQUMvQixpQkFBaUIsRUFBRSw0QkFBNEI7UUFDL0MsbUJBQW1CLEVBQUUsc0RBQXNEO1FBQzNFLFlBQVksRUFBRSxvQkFBb0I7UUFDbEMsT0FBTyxFQUFFLFVBQVU7UUFDbkIsTUFBTSxFQUFFLFVBQVU7UUFDbEIsZ0JBQWdCLEVBQUU7WUFDZCxPQUFPLEVBQUUsb0JBQW9CO1lBQzdCLEtBQUssRUFBRSwwQ0FBMEM7WUFDakQsTUFBTSxFQUFFLGlEQUFpRDtTQUMxRDtRQUNILG1CQUFtQixFQUFFO1lBQ2pCLE9BQU8sRUFBRSxvQkFBb0I7WUFDN0IsS0FBSyxFQUFFLHNDQUFzQztZQUM3QyxNQUFNLEVBQUUsNkNBQTZDO1NBQ3hEO1FBQ0Qsa0JBQWtCLEVBQUUsb0JBQW9CO1FBQ3hDLG9CQUFvQixFQUFFLDRFQUE0RTtRQUNsRyxXQUFXLEVBQUUsY0FBYztRQUMzQixnQkFBZ0IsRUFBRSxtQkFBbUI7UUFDdkMsU0FBUyxFQUFFO1lBQ1QsT0FBTyxFQUFFLGFBQWE7WUFDdEIsT0FBTyxFQUFFLFFBQVE7WUFDakIsZUFBZSxFQUFFO2dCQUNmLE1BQU0sRUFBRSxxRkFBcUY7Z0JBQzdGLEtBQUssRUFBRSxvSUFBb0k7Z0JBQzNJLE1BQU0sRUFBRSw0SUFBNEk7YUFDcko7WUFDRCxxQkFBcUIsRUFBRTtnQkFDckIsT0FBTyxFQUFFLHdDQUF3QztnQkFDakQsYUFBYSxFQUFFO29CQUNiLEtBQUssRUFBRSwrRkFBK0Y7b0JBQ3RHLE1BQU0sRUFBRSx1R0FBdUc7aUJBQ2hIO2FBQ0Y7WUFDRCxzQkFBc0IsRUFBRTtnQkFDdEIsT0FBTyxFQUFFLHdDQUF3QzthQUNsRDtTQUNGO1FBQ0QsZUFBZSxFQUFFLGdCQUFnQjtRQUNqQyxRQUFRLEVBQUUsT0FBTztRQUNqQixVQUFVLEVBQUUsTUFBTTtRQUNsQixXQUFXLEVBQUUsU0FBUztRQUN0QixjQUFjLEVBQUUsVUFBVTtRQUMxQixrQkFBa0IsRUFBRSw4TEFBOEw7UUFDbE4sZ0JBQWdCLEVBQUUseUdBQXlHO1FBQzNILGVBQWUsRUFBRSxTQUFTO1FBQzFCLGNBQWMsRUFBRSxTQUFTO1FBQ3pCLGtCQUFrQixFQUFFLFdBQVc7UUFDL0IsV0FBVyxFQUFFO1lBQ1gsT0FBTyxFQUFFLHdDQUF3QztZQUNqRCxTQUFTLEVBQUUsd0dBQXdHO1NBQ3BIO1FBQ0QsWUFBWSxFQUFFLGdCQUFnQjtRQUM5QixxQkFBcUIsRUFBRSxnTEFBZ0w7UUFDdk0sZUFBZSxFQUFFLGlCQUFpQjtLQUNuQztJQUNELFdBQVcsRUFBRTtRQUNULE1BQU0sRUFBRTtZQUNKLEtBQUssRUFBRSxLQUFLO1lBQ1osSUFBSSxFQUFFLEtBQUs7U0FDZDtLQUNKO0lBQ0QsVUFBVSxFQUFFO1FBQ1Ysb0JBQW9CLEVBQUUsd0NBQXdDO0tBQy9EO0lBQ0QsZ0JBQWdCLEVBQUU7UUFDZCxRQUFRLEVBQUUsMEJBQTBCO1FBQ3BDLFlBQVksRUFBRSxxQkFBcUI7UUFDbkMsZUFBZSxFQUFFLDJCQUEyQjtRQUM1QyxnQkFBZ0IsRUFBRyxpQkFBaUI7UUFDcEMsbUJBQW1CLEVBQUUsdUJBQXVCO1FBQzVDLFFBQVEsRUFBRyxlQUFlO1FBQzFCLE1BQU0sRUFBRyxZQUFZO1FBQ3JCLFFBQVEsRUFBRyxVQUFVO1FBQ3JCLE1BQU0sRUFBRSxhQUFhO1FBQ3JCLE1BQU0sRUFBRSxVQUFVO1FBQ2xCLE9BQU8sRUFBRztZQUNOLE9BQU8sRUFBRyxpQ0FBaUM7WUFDM0MsTUFBTSxFQUFHLGdJQUFnSTtZQUN6SSxrQkFBa0IsRUFBRyw4QkFBOEI7WUFDbkQsMkJBQTJCLEVBQUcsOERBQThEO1lBQzVGLGVBQWUsRUFBRyxtREFBbUQ7WUFDckUsbUJBQW1CLEVBQUcsb0RBQW9EO1lBQzFFLGVBQWUsRUFBRyxpQkFBaUI7WUFDbkMscUJBQXFCLEVBQUcscUJBQXFCO1lBQzdDLFFBQVEsRUFBRyxZQUFZO1lBQ3ZCLFNBQVMsRUFBRyxVQUFVO1lBQ3RCLE9BQU8sRUFBRyxVQUFVO1NBQ3ZCO0tBQ0o7SUFDRCxVQUFVLEVBQUc7UUFDWCxhQUFhLEVBQUUsbUJBQW1CO0tBQ25DO0NBQ0osQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8vIHRzbGludDpkaXNhYmxlOiBxdW90ZW1hcmtcbi8vIHRzbGludDpkaXNhYmxlOiBtYXgtbGluZS1sZW5ndGhcbmV4cG9ydCBjb25zdCBUQUJMRVNfRUwgPSB7XG4gICAgXCJUYWJsZXNcIjoge1xuICAgICAgICBcIkV4cG9ydFwiOiBcIs6Vzr7Osc6zz4nOs86uXCIsXG4gICAgICAgIFwiTW9yZVwiOiBcIs6gzrXPgc65z4PPg8+Mz4TOtc+BzrFcIixcbiAgICAgICAgXCJTZWFyY2hcIjogXCLOkc69zrHOts6uz4TOt8+DzrdcIixcbiAgICAgICAgXCJTZWFyY2hQbGFjZWhvbGRlclwiOiBcIs6Rzr3Osc62zq7PhM63z4POty4uLlwiLFxuICAgICAgICBcIkdyb3VwQnlcIjogXCLOn868zrHOtM6/z4DOv86vzrfPg863IM6xzr3OrFwiLFxuICAgICAgICBcIk5vdERlZmluZWRcIjogXCLOnM63IM+Az4HOv8+DzrTOuc6/z4HOuc+DzrzOrc69zr9cIixcbiAgICAgICAgXCJEYXRhVGFibGVcIjoge1xuICAgICAgICAgICAgXCJwYWdpbmF0ZVwiOiB7XG4gICAgICAgICAgICAgICAgXCJmaXJzdFwiOiBcIs6gz4HPjs+Ezrcgz4POtc67zq/OtM6xXCIsXG4gICAgICAgICAgICAgICAgXCJsYXN0XCI6IFwizqTOtc67zrXPhM6xzq/OsSDPg861zrvOr860zrFcIixcbiAgICAgICAgICAgICAgICBcIm5leHRcIjogXCLOlc+Az4zOvM61zr3Ot1wiLFxuICAgICAgICAgICAgICAgIFwicHJldmlvdXNcIjogXCLOoM+Bzr/Ot86zzr/Pjc68zrXOvc63XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImluZm9cIjogXCLOlc68z4bOrM69zrnPg863IF9TVEFSVF8gzq3Pic+CIF9FTkRfIM6xz4DPjCBfVE9UQUxfIM61zrPOs8+BzrHPhs6tz4JcIixcbiAgICAgICAgICAgIFwiaW5mb0VtcHR5XCI6IFwizpTOtc69IM6yz4HOrc64zrfOus6xzr0gzrXOs86zz4HOsc+Gzq3PglwiLFxuICAgICAgICAgICAgXCJsb2FkaW5nXCI6IFwizpXOvM+GzqzOvc65z4POtyDOtM61zrTOv868zq3Ovc+Jzr0uLi5cIixcbiAgICAgICAgICAgIFwicHJvY2Vzc2luZ1wiOiBcIs6gzrHPgc6xzrvOsc6yzq4gzrTOtc60zr/OvM6tzr3Pic69Li4uXCIsXG4gICAgICAgICAgICBcImVtcHR5VGFibGVcIjogXCLOlM61zr0gzrLPgc6tzrjOt866zrHOvSDOsc+Azr/PhM61zrvOrc+DzrzOsc+EzrEuXCJcbiAgICAgICAgfSxcbiAgICAgIFwiQ29sdW1uRGlzcGxheVwiOiBcIs6Vz4DOuc67zr/Os86uIM6VzrzPhs6szr3Ouc+DzrfPgiDPg8+EzrfOu8+Ozr1cIixcbiAgICAgIFwiQ29sdW1uRGlzcGxheUluZm9cIjogXCLOlc+AzrnOu86tzr7PhM61IM+EzrnPgiDPg8+Ezq7Ou861z4Igz4DOv8+FIM64zq3Ou861z4TOtSDOvc6xIM61zrzPhs6xzr3Or862zr/Ovc+EzrHOuS5cIixcbiAgICAgIFwiU2F2ZVwiOiBcIs6Vz4bOsc+BzrzOv86zzq5cIixcbiAgICAgIFwiQXBwbHlcIjogXCLOlc+GzrHPgc68zr/Os86uXCIsXG4gICAgICBcIkNhbmNlbFwiOiBcIs6RzrrPjc+Bz4nPg863XCIsXG4gICAgICBcIlJlY29yZHNQZXJQYWdlXCI6IFwizpXOs86zz4HOsc+Gzq3PgiDOsc69zqwgz4POtc67zq/OtM6xXCIsXG4gICAgICBcIlBhZ2VJbmZvXCI6IFwie3tzdGFydH19LXt7ZW5kfX0gzrHPgM+MIHt7cmVjb3Jkc1RvdGFsfX1cIixcbiAgICAgIFwiU2VhcmNoTGlzdFBsYWNlaG9sZGVyXCI6IFwizpHOvc6xzrbOt8+Ezq7Pg8+EzrUgz4PPhM63IM67zq/Pg8+EzrEuLi5cIixcbiAgICAgIFwiRmlsdGVyc1wiOiBcIs6mzq/Ou8+Ez4HOsVwiLFxuICAgICAgXCJBbGxcIjogXCLOjM67zrFcIixcbiAgICAgICAgXCJBZGRJdGVtXCI6IFwizqDPgc6/z4POuM6uzrrOtyDPg8+Ezr/Ouc+HzrXOr86/z4VcIixcbiAgICAgICAgXCJFbXB0eVRhYmxlVGl0bGVcIjogXCLOlM61zr0gzrLPgc6tzrjOt866zrHOvSDOsc+Azr/PhM61zrvOrc+DzrzOsc+EzrEuXCIsXG4gICAgICAgIFwiRW1wdHlUYWJsZU1lc3NhZ2VcIjogXCLOoM+Bzr/Pg8+AzrHOuM6uz4PPhM61IM69zrEgz4fPgc63z4POuc68zr/PgM6/zrnOrs+DzrXPhM61IM6szrvOu861z4IgzrvOrc6+zrXOuc+CIM66zrvOtc65zrTOuc6sLlwiLFxuICAgICAgICBcIlJlbW92ZUl0ZW1cIjogXCLOlM65zrHOs8+BzrHPhs6uIM+Dz4TOv865z4fOtc6vzr/PhVwiLFxuICAgICAgICBcIkl0ZW1zXCI6IFwiz4PPhM6/zrnPh861zq/OsVwiLFxuICAgICAgICBcIkl0ZW1cIjogXCLPg8+Ezr/Ouc+HzrXOr86/XCIsXG4gICAgICAgIFwiQWRkSXRlbU1lc3NhZ2VcIjoge1xuICAgICAgICAgICAgXCJ0aXRsZVwiOiBcIs6gz4HOv8+DzrjOrs66zrcgz4PPhM6/zrnPh861zq/Pic69XCIsXG4gICAgICAgICAgICBcIm9uZVwiOiBcIs6Izr3OsSDOvc6tzr8gz4PPhM6/zrnPh861zq/OvyDPgM+Bzr/Pg8+Ezq3OuM63zrrOtSDOvM61IM61z4DOuc+Ez4XPh86vzrEuXCIsXG4gICAgICAgICAgICBcIm1hbnlcIjogXCJ7e3ZhbHVlfX0gzr3Orc6xIM+Dz4TOv865z4fOtc6vzrEgz4DPgc6/z4PPhM6tzrjOt866zrHOvSDOvM61IM61z4DOuc+Ez4XPh86vzrEuXCJcbiAgICAgICAgICB9LFxuICAgICAgICBcIlJlbW92ZUl0ZW1NZXNzYWdlXCI6IHtcbiAgICAgICAgICAgIFwidGl0bGVcIjogXCLOkc+GzrHOr8+BzrXPg863IM+Dz4TOv865z4fOtc6vz4nOvVwiLFxuICAgICAgICAgICAgXCJvbmVcIjogXCLOiM69zrEgz4PPhM6/zrnPh861zq/OvyDOsc+GzrHOuc+Bzq3OuM63zrrOtSDOvM61IM61z4DOuc+Ez4XPh86vzrEuXCIsXG4gICAgICAgICAgICBcIm1hbnlcIjogXCJ7e3ZhbHVlfX0gz4PPhM6/zrnPh861zq/OsSDOsc+GzrHOuc+Bzq3OuM63zrrOsc69IM68zrUgzrXPgM65z4TPhc+Hzq/OsS5cIlxuICAgICAgICB9LFxuICAgICAgICBcIlJlbW92ZUl0ZW1zVGl0bGVcIjogXCLOlM65zrHOs8+BzrHPhs6uIM+Dz4TOv865z4fOtc6vzr/PhVwiLFxuICAgICAgICBcIlJlbW92ZUl0ZW1zTWVzc2FnZVwiOiBcIs6gz4HPjM66zrXOuc+EzrHOuSDOvc6xIM60zrnOsc6zz4HOrM+IzrXPhM61IM6tzr3OsSDOriDPgM61z4HOuc+Dz4PPjM+EzrXPgc6xIM+Dz4TOv865z4fOtc6vzrEuIM6Yzq3Ou861z4TOtSDOvc6xIM+Az4HOv8+Hz4nPgc6uz4POtc+EzrU/XCIsXG4gICAgICAgIFwiU2VsZWN0QWxsXCI6IFwizpXPgM65zrvOv86zzq4gz4zOu8+Jzr1cIixcbiAgICAgICAgXCJDbGVhclNlbGVjdGlvblwiOiBcIs6Rzr3Osc6vz4HOtc+DzrcgzrXPgM65zrvOv86zzq7PglwiLFxuICAgICAgXCJBY3Rpb25zXCI6IHtcbiAgICAgICAgXCJMYWJlbFwiOiBcIs6Vz4DOtc6+zrXPgc6zzrHPg86vzrFcIixcbiAgICAgICAgXCJTdGFydFwiOiBcIs6Izr3Osc+Bzr7Ot1wiLFxuICAgICAgICBcIkFjdGlvbk1lc3NhZ2VcIjoge1xuICAgICAgICAgIFwiTm9uZVwiOiBcIs6UzrXOvSDOrc+HzrXPhM61IM61z4DOuc67zq3Ovs61zrkgzrrOsc69zq3Ovc6xIM+Dz4TOv865z4fOtc6vzr8gz4DOv8+FIM69zrEgzrHOus6/zrvOv8+FzrjOtc6vIM+EzrnPgiDPgM+Bzr/Pi8+Azr/OuM6tz4POtc65z4Igz4TOt8+CIM61zr3Orc+BzrPOtc65zrHPgi5cIixcbiAgICAgICAgICBcIk9uZVwiOiBcIs6Iz4fOtc+EzrUgzrXPgM65zrvOrc6+zrXOuSDOrc69zrEgz4PPhM6/zrnPh861zq/OvyDPgM6/z4UgzrHOus6/zrvOv8+FzrjOtc6vIM+EzrnPgiDPgM+Bzr/Pi8+Azr/OuM6tz4POtc65z4Igz4TOt8+CIM61zr3Orc+BzrPOtc65zrHPgi4gzqDOsc+Ezq7Pg8+EzrUgz4TOvyDPgM67zq7Ous+Ez4HOvyDOiM69zrHPgc6+zrcgzrPOuc6xIM69zrEgzr7Otc66zrnOvc6uz4POtc65IM63IM60zrnOsc60zrnOus6xz4POr86xLlwiLFxuICAgICAgICAgIFwiTWFueVwiOiBcIs6Iz4fOtc+EzrUgzrXPgM65zrvOrc6+zrXOuSB7e2xlbmd0aH19IM+Dz4TOv865z4fOtc6vzrEgz4DOv8+FIM6xzrrOv867zr/Phc64zr/Pjc69IM+EzrnPgiDPgM+Bzr/Pi8+Azr/OuM6tz4POtc65z4Igz4TOt8+CIM61zr3Orc+BzrPOtc65zrHPgi4gzqDOsc+Ezq7Pg8+EzrUgz4TOvyDPgM67zq7Ous+Ez4HOvyDOiM69zrHPgc6+zrcgzrPOuc6xIM69zrEgzr7Otc66zrnOvc6uz4POtc65IM63IM60zrnOsc60zrnOus6xz4POr86xLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiQ29tcGxldGVkV2l0aEVycm9yc1wiOiB7XG4gICAgICAgICAgXCJUaXRsZVwiOiBcIs6XIM60zrnOsc60zrnOus6xz4POr86xIM6/zrvOv866zrvOt8+Bz47OuM63zrrOtSDOvM61IM+Dz4bOrM67zrzOsc+EzrEuXCIsXG4gICAgICAgICAgXCJEZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgICBcIk9uZVwiOiBcIs6Izr3OsSDPg8+Ezr/Ouc+HzrXOr86/IM60zrXOvSDOsc69zrHOvc61z47OuM63zrrOtSDOu8+MzrPPiSDOtc69z4zPgiDPg8+GzqzOu868zrHPhM6/z4Igz4DOv8+FIM+Dz4XOvc6tzrLOtyDOus6xz4TOrCDPhM63zr0gzrXOus+Ezq3Ou861z4POtyDPhM63z4IgzrTOuc6xzrTOuc66zrHPg86vzrHPgi5cIixcbiAgICAgICAgICAgIFwiTWFueVwiOiBcInt7ZXJyb3JzfX0gz4PPhM6/zrnPh861zq/OsSDOtM61zr0gzrHOvc6xzr3Otc+OzrjOt866zrHOvSDOu8+MzrPPiSDOtc69z4zPgiDPg8+GzqzOu868zrHPhM6/z4Igz4DOv8+FIM+Dz4XOvc6tzrLOtyDOus6xz4TOrCDPhM63zr0gzrXOus+Ezq3Ou861z4POtyDPhM63z4IgzrTOuc6xzrTOuc66zrHPg86vzrHPgi5cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJDb21wbGV0ZWRXaXRoU3VjY2Vzc1wiOiB7XG4gICAgICAgICAgXCJUaXRsZVwiOiBcIs6XIM60zrnOsc60zrnOus6xz4POr86xIM6/zrvOv866zrvOt8+Bz47OuM63zrrOtSDOvM61IM61z4DOuc+Ez4XPh86vzrEuXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwiU2VsZWN0Q29sdW1uc1wiOiBcIs6Vz4DOuc67zr/Os86uIM+Dz4TOt867z47OvVwiLFxuICAgICAgXCJNb3ZlVXBcIjogXCLOlc+AzqzOvc+JXCIsXG4gICAgICBcIk1vdmVEb3duXCI6IFwizprOrM+Ez4lcIixcbiAgICAgIFwiQWRkQ29sdW1uXCI6IFwizpXPgM65zrvOv86zzq5cIixcbiAgICAgIFwiUmVtb3ZlQ29sdW1uXCI6IFwizpHPhs6xzq/Pgc61z4POt1wiLFxuICAgICAgXCJTZWxlY3RDb2x1bW5IZWxwXCI6IFwizpXPgM65zrvOrc6+z4TOtSDOvM6vzrEgzq4gz4DOtc+BzrnPg8+Dz4zPhM61z4HOtc+CIM6xz4DPjCDPhM65z4IgzrTOuc6xzrjOrc+DzrnOvM61z4Igz4PPhM6uzrvOtc+CIM66zrHOuSDPgM6xz4TOrs+Dz4TOtSDPhM6/IM+AzrvOrs66z4TPgc6/ICfOlc+AzrnOu86/zrPOricgzrPOuc6xIM69zrEgz4TOuc+CIM61zrzPhs6xzr3Or8+DzrXPhM61LiDOp8+BzrfPg865zrzOv8+Azr/Ouc6uz4PPhM61IM+Ezr8gz4DOu86uzrrPhM+Bzr8gJ86Rz4bOsc6vz4HOtc+DzrcnIM6zzrnOsSDOvc6xIM6xz4bOsc65z4HOrc+DzrXPhM61IM+EzrnPgiDOtc+AzrnOu861zrPOvM6tzr3Otc+CIM+Dz4TOrs67zrXPgi5cIixcbiAgICAgIFwiTW92ZUNvbHVtbkhlbHBcIjogXCLOp8+BzrfPg865zrzOv8+Azr/Ouc6uz4PPhM61IM+EzrEgz4DOu86uzrrPhM+BzrEgJ86Vz4DOrM69z4knIM66zrHOuSAnzprOrM+Ez4knIM6zzrnOsSDOvc6xIM6xzrvOu86szr7Otc+EzrUgz4TOt869IM+DzrXOuc+BzqwgzrXOvM+GzqzOvc65z4POt8+CIM+Ez4nOvSDPg8+EzrfOu8+Ozr0gz4TOv8+FIM+Azq/Ovc6xzrrOsS5cIixcbiAgICAgIFwiVW5rbm93bkNvbHVtblwiOiBcIs6GzrPOvc+Jz4PPhM6/XCIsXG4gICAgICBcIlNlbGVjdENvbHVtblwiOiBcIs6Vz4DOuc67zr/Os86uXCIsXG4gICAgICBcIkFjdGlvbkxpbmtDb2x1bW5cIjogXCLOlc69zq3Pgc6zzrXOuc61z4JcIixcbiAgICAgIFwiRGF0YUVycm9yXCI6IHtcbiAgICAgICAgXCJUaXRsZVwiOiBcIs6jz4bOrM67zrzOsSDOus6xz4TOrCDPhM63zr0gz4DOsc+BzrHOu86xzrLOriDPhM+Jzr0gzrTOtc60zr/OvM6tzr3Pic69XCIsXG4gICAgICAgIFwiTWVzc2FnZVwiOiBcIs6jz4XOvc6tzrLOtyDPg8+GzqzOu868zrEgzrrOsc+Ezqwgz4TOt869IM+AzrHPgc6xzrvOsc6yzq4gz4TPic69IM60zrXOtM6/zrzOrc69z4nOvS4gzqDPgc6/z4PPgM6xzrjOrs+Dz4TOtSDOvs6xzr3OrCDOriDPhM+Bzr/PgM6/z4DOv865zq7Pg8+EzrUgz4TOsSDPg8+Ezr/Ouc+HzrXOr86xIM6xzr3Osc62zq7PhM63z4POt8+CLlwiXG4gICAgICB9LFxuICAgICAgXCJFeHBvcnRMaXN0XCI6IFwizpXOvs6xzrPPic6zzq4gzrvOr8+Dz4TOsc+CXCIsXG4gICAgICBcIkV4cG9ydExpbWl0RXhjZWVkZWRcIjogXCLOpM6/IM+AzrvOrs64zr/PgiDPhM+Jzr0gz4PPhM6/zrnPh861zq/Pic69IM+Az4HOv8+CIM61zr7Osc6zz4nOs86uICh7e2RhdGFMZW5ndGh9fSkgzr7Otc+AzrXPgc69zqzOtc65IM+Ezr8gzrzOrc6zzrnPg8+Ezr8gzrXPgM65z4TPgc61z4DPhM+MICh7e2V4cG9ydExpbWl0fX0pLiDOoM6xz4HOsc66zrHOu86/z43OvM61IM+Az4HOv8+DzrHPgc68z4zPg8+EzrUgz4TOsSDPhs6vzrvPhM+BzrEgz4TOt8+CIM6xzr3Osc62zq7PhM63z4POt8+CIM66zrHOuSDPgM+Bzr/Pg8+AzrHOuM6uz4PPhM61IM6+zrHOvc6sLlwiLFxuICAgICAgXCJFeHBvcnRSZXN1bHRzXCI6IFwizpTOtc60zr/OvM6tzr3OsSDOu86vz4PPhM6xz4JcIlxuICAgIH0sXG4gICAgXCJUcnVlRmFsc2VcIjoge1xuICAgICAgICBcImxvbmdcIjoge1xuICAgICAgICAgICAgXCJZZXNcIjogXCLOnc6xzrlcIixcbiAgICAgICAgICAgIFwiTm9cIjogXCLOjM+HzrlcIlxuICAgICAgICB9XG4gICAgfSxcbiAgICBcIlNldHRpbmdzXCI6IHtcbiAgICAgIFwiT3BlcmF0aW9uQ29tcGxldGVkXCI6IFwizpcgzrTOuc6xzrTOuc66zrHPg86vzrEgzr/Ou86/zrrOu863z4HPjs64zrfOus61IM68zrUgzrXPgM65z4TPhc+Hzq/OsS5cIlxuICAgIH0sXG4gICAgXCJBZHZhbmNlZFNlYXJjaFwiOiB7XG4gICAgICAgIFwiQ2hvb3NlXCI6IFwiPM6Vz4DOuc67zq3Ovs+EzrUgzrzOuc6xIM6xzr3Osc62zq7PhM63z4POtz5cIixcbiAgICAgICAgXCJDaG9vc2VEYXRlXCI6IFwizpXPgM65zrvOv86zzq4gzrfOvM61z4HOv868zrfOvc6vzrHPglwiLFxuICAgICAgICBcIlNhdmVkU2VhcmNoZXNcIjogXCLOkc+Azr/OuM63zrrOtc+FzrzOrc69zrXPgiDOsc69zrHOts63z4TOrs+DzrXOuc+CXCIsXG4gICAgICAgIFwiVG9nZ2xlRHJvcGRvd25cIiA6IFwizpXOvM+GzqzOvc65z4POtyDOu86vz4PPhM6xz4JcIixcbiAgICAgICAgXCJTYXZlQ3VycmVudFNlYXJjaFwiOiBcIs6Rz4DOv864zq7Ous61z4XPg863IM6xzr3Osc62zq7PhM63z4POt8+CXCIsXG4gICAgICAgIFwiU2F2ZUFzXCIgOiBcIs6Rz4DOv864zq7Ous61z4XPg863IM+Jz4JcIixcbiAgICAgICAgXCJTYXZlXCIgOiBcIs6Rz4DOv864zq7Ous61z4XPg863XCIsXG4gICAgICAgIFwiRGVsZXRlXCIgOiBcIs6UzrnOsc6zz4HOsc+Gzq5cIixcbiAgICAgICAgXCJNb3JlXCI6IFwizqDOtc+BzrnPg8+Dz4zPhM61z4HOsVwiLFxuICAgICAgICBcIkxlc3NcIjogXCLOm865zrPPjM+EzrXPgc6xXCIsXG4gICAgICAgIFwiTW9kYWxcIiA6IHtcbiAgICAgICAgICAgIFwiVGl0bGVcIiA6IFwizpHPgM6/zrjOrs66zrXPhc+DzrcgzrrPgc65z4TOt8+Bzq/Pic69IM6xzr3Osc62zq7PhM63z4POt8+CXCIsXG4gICAgICAgICAgICBcIkhlbHBcIiA6IFwizp/Pgc6vz4PPhM61IM6tzr3Osc69IM+Ezq/PhM67zr8gzrPOuc6xIM+EzrEgzrXPgM65zrvOtc6zzrzOrc69zrEgzrrPgc65z4TOrs+BzrnOsSDOsc69zrHOts6uz4TOt8+DzrfPgi4gzpHPhc+Ez4zPgiDOvyDPhM6vz4TOu86/z4IgzrjOsSDPg86xz4IgzrLOv863zrjOrs+DzrXOuSDOvc6xIM+EzrEgz4fPgc63z4POuc68zr/PgM6/zrnOrs+DzrXPhM61IM6+zrHOvc6sIM+Dz4TOvyDOvM6tzrvOu86/zr0uXCIsXG4gICAgICAgICAgICBcIlRpdGxlT25Vc2VyRXJyb3JcIiA6IFwizqDOsc+BzrHOus6xzrvPjiDOtc65z4POrM6zzrXPhM61IM6tzr3Osc69IM+Ezq/PhM67zr9cIixcbiAgICAgICAgICAgIFwiVGl0bGVPbkxpc3RBbHJlYWR5Q3JlYXRlZFwiIDogXCLOpM6/IM+Mzr3Ov868zrEgzrHPhc+Ez4wgz4fPgc63z4POuc68zr/PgM6/zrnOtc6vz4TOsc65IM6uzrTOty4gzpTOuc6xzrvOrc6+z4TOtSDOrc69zrEgzrTOuc6xz4bOv8+BzrXPhM65zrrPjC5cIixcbiAgICAgICAgICAgIFwiTm9MaXN0RGVmaW5lZFwiIDogXCLOlM61zr0gzq3Ph861zrkgzr/Pgc65z4PPhM61zq8gz4TOvyDPg863zrzOtc6vzr8gzrHPgM6/zrjOrs66zrXPhc+DzrfPgiDPhM63z4IgzrvOr8+Dz4TOsc+CXCIsXG4gICAgICAgICAgICBcIkVtcHR5Q3JpdGVyaWFMaXN0XCIgOiBcIs6UzrXOvSDOrc+HzrXPhM61IM66zrHOuM6/z4HOr8+DzrXOuSDOus6xzr3Orc69zrEgzrrPgc65z4TOrs+BzrnOvyDOs865zrEgzrHPgM6/zrjOrs66zrXPhc+DzrdcIixcbiAgICAgICAgICAgIFwiU2F2ZU5hbWVMYWJlbFwiIDogXCLOn869zr/OvM6xz4POr86xIM67zq/Pg8+EzrHPglwiLFxuICAgICAgICAgICAgXCJTYXZlTmFtZVBsYWNlaG9sZGVyXCIgOiBcIs6VzrnPg86szrPOtc+EzrUgzq3Ovc6xzr0gz4TOr8+EzrvOv1wiLFxuICAgICAgICAgICAgXCJBY2NlcHRcIiA6IFwizpHPgM6/zrjOrs66zrXPhc+DzrdcIixcbiAgICAgICAgICAgIFwiRGVjbGluZVwiIDogXCLOkc+Az4zPgc+BzrnPiM63XCIsXG4gICAgICAgICAgICBcIkNsb3NlXCIgOiBcIs6azrvOtc6vz4POuc68zr9cIlxuICAgICAgICB9XG4gICAgfSxcbiAgICBcIkFkZEl0ZW1zXCIgOiB7XG4gICAgICBcIlNlbGVjdEl0ZW1zXCI6IFwizpXPgM65zrvOrc6+z4TOtSDPg8+Ezr/Ouc+HzrXOr86xXCIsXG4gICAgfVxufVxuIl19