monkey-front-components 0.0.667 → 0.0.669

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 (180) hide show
  1. package/README.md +24 -24
  2. package/esm2020/lib/components/base/base-component.mjs +335 -335
  3. package/esm2020/lib/components/base/base-dynamic-array.mjs +235 -235
  4. package/esm2020/lib/components/base/base-dynamic.mjs +117 -117
  5. package/esm2020/lib/components/base/base-scroll-component.mjs +55 -55
  6. package/esm2020/lib/components/base/base-validators.mjs +20 -20
  7. package/esm2020/lib/components/base/index.mjs +6 -6
  8. package/esm2020/lib/components/dynamic/button/button.component.mjs +52 -52
  9. package/esm2020/lib/components/dynamic/button/index.mjs +2 -2
  10. package/esm2020/lib/components/dynamic/dynamic-directive.mjs +95 -95
  11. package/esm2020/lib/components/dynamic/dynamic.module.mjs +84 -84
  12. package/esm2020/lib/components/dynamic/file-upload/file-upload.component.mjs +53 -53
  13. package/esm2020/lib/components/dynamic/file-upload/index.mjs +2 -2
  14. package/esm2020/lib/components/dynamic/form/dynamic-form-array.component.mjs +72 -72
  15. package/esm2020/lib/components/dynamic/form/dynamic-form.component.mjs +46 -46
  16. package/esm2020/lib/components/dynamic/form/index.mjs +3 -3
  17. package/esm2020/lib/components/dynamic/index.mjs +9 -9
  18. package/esm2020/lib/components/dynamic/input/index.mjs +2 -2
  19. package/esm2020/lib/components/dynamic/input/input.component.mjs +65 -65
  20. package/esm2020/lib/components/dynamic/input-phone/index.mjs +2 -2
  21. package/esm2020/lib/components/dynamic/input-phone/input-phone.component.mjs +65 -65
  22. package/esm2020/lib/components/dynamic/radio/index.mjs +2 -2
  23. package/esm2020/lib/components/dynamic/radio/radio.component.mjs +33 -33
  24. package/esm2020/lib/components/dynamic/select/index.mjs +2 -2
  25. package/esm2020/lib/components/dynamic/select/select.component.mjs +85 -85
  26. package/esm2020/lib/components/dynamic/select-search/index.mjs +2 -2
  27. package/esm2020/lib/components/dynamic/select-search/select-search.component.mjs +92 -92
  28. package/esm2020/lib/components/index.mjs +4 -4
  29. package/esm2020/lib/components/shared/filter/filter.component.mjs +144 -144
  30. package/esm2020/lib/components/shared/filter/filter.module.mjs +67 -67
  31. package/esm2020/lib/components/shared/filter/index.mjs +3 -3
  32. package/esm2020/lib/components/shared/filter/menu/index.mjs +2 -2
  33. package/esm2020/lib/components/shared/filter/menu/menu.component.mjs +120 -120
  34. package/esm2020/lib/components/shared/filter/menu/menu.module.mjs +70 -70
  35. package/esm2020/lib/components/shared/filter/options/children/children.component.mjs +50 -50
  36. package/esm2020/lib/components/shared/filter/options/children/index.mjs +2 -2
  37. package/esm2020/lib/components/shared/filter/options/currency/currency.component.mjs +46 -46
  38. package/esm2020/lib/components/shared/filter/options/currency/index.mjs +2 -2
  39. package/esm2020/lib/components/shared/filter/options/date-range/date-range.component.mjs +65 -65
  40. package/esm2020/lib/components/shared/filter/options/date-range/index.mjs +2 -2
  41. package/esm2020/lib/components/shared/filter/options/index.mjs +2 -2
  42. package/esm2020/lib/components/shared/filter/options/input/index.mjs +2 -2
  43. package/esm2020/lib/components/shared/filter/options/input/input.component.mjs +46 -46
  44. package/esm2020/lib/components/shared/filter/options/options.component.mjs +102 -102
  45. package/esm2020/lib/components/shared/filter/options/options.module.mjs +103 -103
  46. package/esm2020/lib/components/shared/filter/options/status/index.mjs +2 -2
  47. package/esm2020/lib/components/shared/filter/options/status/status.component.mjs +66 -66
  48. package/esm2020/lib/components/shared/filter/options/status-radio/index.mjs +2 -2
  49. package/esm2020/lib/components/shared/filter/options/status-radio/status-radio.component.mjs +37 -37
  50. package/esm2020/lib/components/shared/filter/selected/index.mjs +2 -2
  51. package/esm2020/lib/components/shared/filter/selected/item/children/children.component.mjs +57 -57
  52. package/esm2020/lib/components/shared/filter/selected/item/children/index.mjs +2 -2
  53. package/esm2020/lib/components/shared/filter/selected/item/currency/currency.component.mjs +28 -28
  54. package/esm2020/lib/components/shared/filter/selected/item/currency/index.mjs +2 -2
  55. package/esm2020/lib/components/shared/filter/selected/item/date-range/date-range.component.mjs +42 -42
  56. package/esm2020/lib/components/shared/filter/selected/item/date-range/index.mjs +2 -2
  57. package/esm2020/lib/components/shared/filter/selected/item/date-with-action/date-with-action.component.mjs +32 -32
  58. package/esm2020/lib/components/shared/filter/selected/item/date-with-action/index.mjs +2 -2
  59. package/esm2020/lib/components/shared/filter/selected/item/index.mjs +9 -9
  60. package/esm2020/lib/components/shared/filter/selected/item/input/index.mjs +2 -2
  61. package/esm2020/lib/components/shared/filter/selected/item/input/input.component.mjs +27 -27
  62. package/esm2020/lib/components/shared/filter/selected/item/item.component.mjs +75 -75
  63. package/esm2020/lib/components/shared/filter/selected/item/status/index.mjs +2 -2
  64. package/esm2020/lib/components/shared/filter/selected/item/status/status.component.mjs +38 -38
  65. package/esm2020/lib/components/shared/filter/selected/item/status-radio/index.mjs +2 -2
  66. package/esm2020/lib/components/shared/filter/selected/item/status-radio/status-radio.component.mjs +29 -29
  67. package/esm2020/lib/components/shared/filter/selected/selected.component.mjs +85 -85
  68. package/esm2020/lib/components/shared/filter/selected/selected.module.mjs +92 -92
  69. package/esm2020/lib/components/shared/index.mjs +5 -5
  70. package/esm2020/lib/components/shared/password-strength/index.mjs +3 -3
  71. package/esm2020/lib/components/shared/password-strength/password-strength.component.mjs +85 -85
  72. package/esm2020/lib/components/shared/password-strength/password-strength.mjs +2 -2
  73. package/esm2020/lib/components/shared/password-strength/password-strength.module.mjs +50 -50
  74. package/esm2020/lib/components/shared/products/filter/filter.component.mjs +36 -36
  75. package/esm2020/lib/components/shared/products/index.mjs +3 -3
  76. package/esm2020/lib/components/shared/products/products.component.mjs +91 -91
  77. package/esm2020/lib/components/shared/products/products.module.mjs +22 -22
  78. package/esm2020/lib/components/shared/products/providers/index.mjs +2 -2
  79. package/esm2020/lib/components/shared/products/providers/products.model.mjs +38 -38
  80. package/esm2020/lib/components/shared/progress-bar/index.mjs +4 -4
  81. package/esm2020/lib/components/shared/progress-bar/progress-bar.component.mjs +28 -28
  82. package/esm2020/lib/components/shared/progress-bar/progress-bar.module.mjs +18 -18
  83. package/esm2020/lib/components/shared/progress-bar/progress-bar.service.mjs +49 -49
  84. package/esm2020/lib/interfaces/field-config.mjs +2 -2
  85. package/esm2020/lib/interfaces/index.mjs +2 -2
  86. package/esm2020/monkey-front-components.mjs +4 -4
  87. package/esm2020/public-api.mjs +5 -5
  88. package/fesm2015/monkey-front-components.mjs +2960 -2960
  89. package/fesm2015/monkey-front-components.mjs.map +1 -1
  90. package/fesm2020/monkey-front-components.mjs +2936 -2936
  91. package/fesm2020/monkey-front-components.mjs.map +1 -1
  92. package/lib/components/base/base-component.d.ts +54 -54
  93. package/lib/components/base/base-dynamic-array.d.ts +36 -36
  94. package/lib/components/base/base-dynamic.d.ts +27 -27
  95. package/lib/components/base/base-scroll-component.d.ts +16 -16
  96. package/lib/components/base/base-validators.d.ts +1 -1
  97. package/lib/components/base/index.d.ts +5 -5
  98. package/lib/components/dynamic/button/button.component.d.ts +17 -17
  99. package/lib/components/dynamic/button/index.d.ts +1 -1
  100. package/lib/components/dynamic/dynamic-directive.d.ts +22 -22
  101. package/lib/components/dynamic/dynamic.module.d.ts +20 -20
  102. package/lib/components/dynamic/file-upload/file-upload.component.d.ts +17 -17
  103. package/lib/components/dynamic/file-upload/index.d.ts +1 -1
  104. package/lib/components/dynamic/form/dynamic-form-array.component.d.ts +16 -16
  105. package/lib/components/dynamic/form/dynamic-form.component.d.ts +14 -14
  106. package/lib/components/dynamic/form/index.d.ts +2 -2
  107. package/lib/components/dynamic/index.d.ts +8 -8
  108. package/lib/components/dynamic/input/index.d.ts +1 -1
  109. package/lib/components/dynamic/input/input.component.d.ts +20 -20
  110. package/lib/components/dynamic/input-phone/index.d.ts +1 -1
  111. package/lib/components/dynamic/input-phone/input-phone.component.d.ts +20 -20
  112. package/lib/components/dynamic/radio/index.d.ts +1 -1
  113. package/lib/components/dynamic/radio/radio.component.d.ts +11 -11
  114. package/lib/components/dynamic/select/index.d.ts +1 -1
  115. package/lib/components/dynamic/select/select.component.d.ts +17 -17
  116. package/lib/components/dynamic/select-search/index.d.ts +1 -1
  117. package/lib/components/dynamic/select-search/select-search.component.d.ts +19 -19
  118. package/lib/components/index.d.ts +3 -3
  119. package/lib/components/shared/filter/filter.component.d.ts +41 -41
  120. package/lib/components/shared/filter/filter.module.d.ts +14 -14
  121. package/lib/components/shared/filter/index.d.ts +2 -2
  122. package/lib/components/shared/filter/menu/index.d.ts +1 -1
  123. package/lib/components/shared/filter/menu/menu.component.d.ts +24 -24
  124. package/lib/components/shared/filter/menu/menu.module.d.ts +14 -14
  125. package/lib/components/shared/filter/options/children/children.component.d.ts +17 -17
  126. package/lib/components/shared/filter/options/children/index.d.ts +1 -1
  127. package/lib/components/shared/filter/options/currency/currency.component.d.ts +17 -17
  128. package/lib/components/shared/filter/options/currency/index.d.ts +1 -1
  129. package/lib/components/shared/filter/options/date-range/date-range.component.d.ts +24 -24
  130. package/lib/components/shared/filter/options/date-range/index.d.ts +1 -1
  131. package/lib/components/shared/filter/options/index.d.ts +1 -1
  132. package/lib/components/shared/filter/options/input/index.d.ts +1 -1
  133. package/lib/components/shared/filter/options/input/input.component.d.ts +17 -17
  134. package/lib/components/shared/filter/options/options.component.d.ts +28 -28
  135. package/lib/components/shared/filter/options/options.module.d.ts +19 -19
  136. package/lib/components/shared/filter/options/status/index.d.ts +1 -1
  137. package/lib/components/shared/filter/options/status/status.component.d.ts +19 -19
  138. package/lib/components/shared/filter/options/status-radio/index.d.ts +1 -1
  139. package/lib/components/shared/filter/options/status-radio/status-radio.component.d.ts +15 -15
  140. package/lib/components/shared/filter/selected/index.d.ts +1 -1
  141. package/lib/components/shared/filter/selected/item/children/children.component.d.ts +16 -16
  142. package/lib/components/shared/filter/selected/item/children/index.d.ts +1 -1
  143. package/lib/components/shared/filter/selected/item/currency/currency.component.d.ts +11 -11
  144. package/lib/components/shared/filter/selected/item/currency/index.d.ts +1 -1
  145. package/lib/components/shared/filter/selected/item/date-range/date-range.component.d.ts +12 -12
  146. package/lib/components/shared/filter/selected/item/date-range/index.d.ts +1 -1
  147. package/lib/components/shared/filter/selected/item/date-with-action/date-with-action.component.d.ts +11 -11
  148. package/lib/components/shared/filter/selected/item/date-with-action/index.d.ts +1 -1
  149. package/lib/components/shared/filter/selected/item/index.d.ts +8 -8
  150. package/lib/components/shared/filter/selected/item/input/index.d.ts +1 -1
  151. package/lib/components/shared/filter/selected/item/input/input.component.d.ts +11 -11
  152. package/lib/components/shared/filter/selected/item/item.component.d.ts +20 -20
  153. package/lib/components/shared/filter/selected/item/status/index.d.ts +1 -1
  154. package/lib/components/shared/filter/selected/item/status/status.component.d.ts +13 -13
  155. package/lib/components/shared/filter/selected/item/status-radio/index.d.ts +1 -1
  156. package/lib/components/shared/filter/selected/item/status-radio/status-radio.component.d.ts +11 -11
  157. package/lib/components/shared/filter/selected/selected.component.d.ts +19 -19
  158. package/lib/components/shared/filter/selected/selected.module.d.ts +22 -22
  159. package/lib/components/shared/index.d.ts +4 -4
  160. package/lib/components/shared/password-strength/index.d.ts +2 -2
  161. package/lib/components/shared/password-strength/password-strength.component.d.ts +23 -23
  162. package/lib/components/shared/password-strength/password-strength.d.ts +5 -5
  163. package/lib/components/shared/password-strength/password-strength.module.d.ts +12 -12
  164. package/lib/components/shared/products/filter/filter.component.d.ts +12 -12
  165. package/lib/components/shared/products/index.d.ts +2 -2
  166. package/lib/components/shared/products/products.component.d.ts +20 -20
  167. package/lib/components/shared/products/products.module.d.ts +11 -11
  168. package/lib/components/shared/products/providers/index.d.ts +1 -1
  169. package/lib/components/shared/products/providers/products.model.d.ts +13 -13
  170. package/lib/components/shared/progress-bar/index.d.ts +3 -3
  171. package/lib/components/shared/progress-bar/progress-bar.component.d.ts +12 -12
  172. package/lib/components/shared/progress-bar/progress-bar.module.d.ts +8 -8
  173. package/lib/components/shared/progress-bar/progress-bar.service.d.ts +14 -14
  174. package/lib/interfaces/field-config.d.ts +55 -55
  175. package/lib/interfaces/index.d.ts +1 -1
  176. package/monkey-front-components-0.0.669.tgz +0 -0
  177. package/monkey-front-components.d.ts +5 -5
  178. package/package.json +5 -5
  179. package/public-api.d.ts +1 -1
  180. package/monkey-front-components-0.0.667.tgz +0 -0
@@ -1,235 +1,235 @@
1
- import { Directive, EventEmitter, Input, Output } from '@angular/core';
2
- import { Validators } from '@angular/forms';
3
- import { MonkeyUtils } from 'monkey-style-guide';
4
- import { Subject } from 'rxjs';
5
- import { debounceTime, takeUntil } from 'rxjs/operators';
6
- import { BaseComponent } from './base-component';
7
- import { validators } from './base-validators';
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "@angular/forms";
10
- export class BaseDynamicArray extends BaseComponent {
11
- constructor(fb) {
12
- super();
13
- this.fb = fb;
14
- this.onHandleSubmit = new EventEmitter();
15
- this.onHandleUpdateForm = new EventEmitter();
16
- this.onHandleSubmitFormReady = new EventEmitter();
17
- this.fields = [];
18
- this.qtd = 1;
19
- this.disabled = false;
20
- this.enableListenerFormChange = false;
21
- this.onFormChange = new EventEmitter();
22
- this._form = null;
23
- // eslint-disable-next-line object-curly-newline
24
- this._plusValidations = [];
25
- this.changesUnsubscribe = new Subject();
26
- this.formBase = () => {
27
- // return this.fb.group(this.createControl());
28
- return this.createControl();
29
- };
30
- }
31
- handleInternalPlusValidation(mainField, data) {
32
- const { operator, field, value } = mainField;
33
- const validators = {
34
- e: (val1, val2) => { return val1 === val2; },
35
- lt: (val1, val2) => { return val1 < val2; },
36
- gt: (val1, val2) => { return val1 > val2; }
37
- };
38
- return validators[operator](data?.[field] || data, value);
39
- }
40
- makeInternalPlusValidation(data, sourceField, settings, rowIndex) {
41
- const changeFields = (show) => {
42
- const saved = [...this.fields];
43
- saved.map((val) => {
44
- const valSaved = {
45
- ...val
46
- };
47
- if (val.name === sourceField) {
48
- this._plusValidations[rowIndex] = {
49
- [sourceField]: {
50
- ...valSaved,
51
- alwaysShow: show
52
- }
53
- };
54
- this.createOneControl(val.name, this.formValues?.controls[rowIndex], show);
55
- }
56
- else {
57
- this._plusValidations[rowIndex] = {
58
- ...valSaved
59
- };
60
- }
61
- return null;
62
- });
63
- };
64
- const validated = this.handleInternalPlusValidation(settings, data);
65
- changeFields(validated);
66
- }
67
- createOneControl(fieldName, ctrl, create = true) {
68
- const { fields } = this;
69
- if (!fields)
70
- return;
71
- fields.forEach((field) => {
72
- const { fieldType, validations, name, disabled } = field;
73
- if (name !== fieldName)
74
- return;
75
- let { value } = field;
76
- if (fieldType === 'button')
77
- return;
78
- if (fieldType === 'radiobutton' || fieldType === 'checkbox' || fieldType === 'select') {
79
- value = '';
80
- }
81
- if (create) {
82
- const control = this.fb.control(value, this.bindValidations(validations || []));
83
- if (disabled || this.disabled)
84
- control.disable();
85
- ctrl.addControl(name, control);
86
- }
87
- else {
88
- ctrl.removeControl(name);
89
- }
90
- });
91
- }
92
- createControl(data) {
93
- const { fields } = this;
94
- if (!fields)
95
- return null;
96
- // eslint-disable-next-line object-curly-newline
97
- const group = this.fb.group({});
98
- fields.forEach((field) => {
99
- const { fieldType, validations, name, disabled, alwaysShow } = field;
100
- let { value } = field;
101
- if (field.alwaysShowPlusValidation) {
102
- if (!this.handleInternalPlusValidation(field.alwaysShowPlusValidation, data))
103
- return;
104
- }
105
- else if (!alwaysShow)
106
- return;
107
- if (fieldType === 'button')
108
- return;
109
- if (fieldType === 'radiobutton' || fieldType === 'checkbox' || fieldType === 'select') {
110
- value = '';
111
- }
112
- const control = this.fb.control(value, this.bindValidations(validations || []));
113
- if (disabled || this.disabled)
114
- control.disable();
115
- group.addControl(name, control);
116
- });
117
- return group;
118
- }
119
- bindValidations(validations) {
120
- if (validations.length > 0) {
121
- const validList = [];
122
- validations.forEach((valid) => {
123
- const validated = valid.param
124
- ? validators[valid.name](valid.param)
125
- : validators[valid.name];
126
- validList.push(validated);
127
- });
128
- return Validators.compose(validList);
129
- }
130
- return null;
131
- }
132
- buildForm() {
133
- const form = this.fb.group({
134
- fields: this.fb.array([])
135
- });
136
- form?.controls.fields?.valueChanges.subscribe((_) => {
137
- this.watchForChanges();
138
- });
139
- return form;
140
- }
141
- watchForChanges() {
142
- const { fields, changesUnsubscribe } = this;
143
- changesUnsubscribe.next();
144
- this.formValues?.controls?.map((control, index) => {
145
- fields.forEach((fieldConfig) => {
146
- const { name, alwaysShowPlusValidation } = fieldConfig;
147
- if (!alwaysShowPlusValidation)
148
- return;
149
- const { field } = alwaysShowPlusValidation;
150
- if (field) {
151
- control.controls[field]?.valueChanges.pipe(takeUntil(changesUnsubscribe)).subscribe((_) => {
152
- this.makeInternalPlusValidation(_, name, alwaysShowPlusValidation, index);
153
- });
154
- }
155
- });
156
- return null;
157
- });
158
- }
159
- get formValues() {
160
- return this._form ? this._form.get('fields') : null;
161
- }
162
- fillValues() {
163
- const { data, qtd } = this;
164
- if ((!this._form) && qtd)
165
- return;
166
- if (qtd > 0) {
167
- Array(qtd)
168
- .fill(null)
169
- .map((_, index) => {
170
- let form = this.createControl();
171
- if (data && data[index]) {
172
- form = this.createControl(data[index]);
173
- const handledData = data[index];
174
- Object.entries(handledData).forEach(([key, value]) => {
175
- if (MonkeyUtils.persistNullEmptyUndefined(value) && form?.controls[key]) {
176
- form?.controls[key].setValue(value);
177
- }
178
- });
179
- }
180
- this.formValues?.push(form);
181
- return null;
182
- });
183
- }
184
- }
185
- ngOnInit() {
186
- this._form = this.buildForm();
187
- this.fillValues();
188
- this.onHandleUpdateForm.subscribe(() => {
189
- this.fillValues();
190
- });
191
- if (this.enableListenerFormChange) {
192
- this._form.markAsUntouched();
193
- this._form.valueChanges
194
- .pipe(debounceTime(800), takeUntil(this.__unsubscribeAll))
195
- .subscribe(() => {
196
- this.onFormChange.next(this._form);
197
- });
198
- }
199
- }
200
- ngOnChanges() {
201
- if (!this._form) {
202
- this._form = this.buildForm();
203
- }
204
- this.fillValues();
205
- }
206
- }
207
- BaseDynamicArray.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BaseDynamicArray, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Directive });
208
- BaseDynamicArray.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.1.1", type: BaseDynamicArray, selector: "[baseDynamicArray]", inputs: { onHandleSubmit: "onHandleSubmit", onHandleUpdateForm: "onHandleUpdateForm", self: "self", fields: "fields", data: "data", qtd: "qtd", disabled: "disabled", enableListenerFormChange: "enableListenerFormChange" }, outputs: { onHandleSubmitFormReady: "onHandleSubmitFormReady", onFormChange: "onFormChange" }, usesInheritance: true, usesOnChanges: true, ngImport: i0 });
209
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BaseDynamicArray, decorators: [{
210
- type: Directive,
211
- args: [{
212
- selector: '[baseDynamicArray]'
213
- }]
214
- }], ctorParameters: function () { return [{ type: i1.FormBuilder }]; }, propDecorators: { onHandleSubmit: [{
215
- type: Input
216
- }], onHandleUpdateForm: [{
217
- type: Input
218
- }], onHandleSubmitFormReady: [{
219
- type: Output
220
- }], self: [{
221
- type: Input
222
- }], fields: [{
223
- type: Input
224
- }], data: [{
225
- type: Input
226
- }], qtd: [{
227
- type: Input
228
- }], disabled: [{
229
- type: Input
230
- }], enableListenerFormChange: [{
231
- type: Input
232
- }], onFormChange: [{
233
- type: Output
234
- }] } });
235
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1keW5hbWljLWFycmF5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW9ua2V5LWZyb250LWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2Jhc2UvYmFzZS1keW5hbWljLWFycmF5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBcUMsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7QUFLL0MsTUFBTSxPQUFnQixnQkFBaUIsU0FBUSxhQUFhO0lBNEIxRCxZQUFvQixFQUFlO1FBQ2pDLEtBQUssRUFBRSxDQUFDO1FBRFUsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQTNCMUIsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBRXpDLHVCQUFrQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFNUMsNEJBQXVCLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFJdEUsV0FBTSxHQUFzQixFQUFFLENBQUM7UUFJL0IsUUFBRyxHQUFXLENBQUMsQ0FBQztRQUVoQixhQUFRLEdBQVksS0FBSyxDQUFDO1FBRTFCLDZCQUF3QixHQUFHLEtBQUssQ0FBQztRQUVoQyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFakQsVUFB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R0FFVSxjQUFjO3NCQUF0QixLQUFLO2dCQUVHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFFSSx1QkFBdUI7c0JBQWhDLE1BQU07Z0JBRUUsSUFBSTtzQkFBWixLQUFLO2dCQUVHLE1BQU07c0JBQWQsS0FBSztnQkFFRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRUcsR0FBRztzQkFBWCxLQUFLO2dCQUVHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUVJLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUFycmF5LCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNb25rZXlVdGlscyB9IGZyb20gJ21vbmtleS1zdHlsZS1ndWlkZSc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IE1FQ1hGaWVsZENvbmZpZywgTUVDWEZpZWxkQ29uZmlnVmFsaWRhdG9yIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IEJhc2VDb21wb25lbnQgfSBmcm9tICcuL2Jhc2UtY29tcG9uZW50JztcclxuaW1wb3J0IHsgdmFsaWRhdG9ycyB9IGZyb20gJy4vYmFzZS12YWxpZGF0b3JzJztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW2Jhc2VEeW5hbWljQXJyYXldJ1xyXG59KVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUR5bmFtaWNBcnJheSBleHRlbmRzIEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcbiAgQElucHV0KCkgb25IYW5kbGVTdWJtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgQElucHV0KCkgb25IYW5kbGVVcGRhdGVGb3JtID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBPdXRwdXQoKSBvbkhhbmRsZVN1Ym1pdEZvcm1SZWFkeTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgQElucHV0KCkgc2VsZjogYW55O1xyXG5cclxuICBASW5wdXQoKSBmaWVsZHM6IE1FQ1hGaWVsZENvbmZpZ1tdID0gW107XHJcblxyXG4gIEBJbnB1dCgpIGRhdGE6IGFueTtcclxuXHJcbiAgQElucHV0KCkgcXRkOiBudW1iZXIgPSAxO1xyXG5cclxuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBlbmFibGVMaXN0ZW5lckZvcm1DaGFuZ2UgPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpIG9uRm9ybUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBfZm9ybTogRm9ybUdyb3VwIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBvYmplY3QtY3VybHktbmV3bGluZVxyXG4gIF9wbHVzVmFsaWRhdGlvbnM6IGFueVtdID0gW107XHJcblxyXG4gIHByaXZhdGUgY2hhbmdlc1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUludGVybmFsUGx1c1ZhbGlkYXRpb24oXHJcbiAgICBtYWluRmllbGQ6IGFueSxcclxuICAgIGRhdGE6IGFueVxyXG4gICkge1xyXG4gICAgY29uc3QgeyBvcGVyYXRvciwgZmllbGQsIHZhbHVlIH0gPSBtYWluRmllbGQ7XHJcbiAgICBjb25zdCB2YWxpZGF0b3JzOiBhbnkgPSB7XHJcbiAgICAgIGU6ICh2YWwxOiBhbnksIHZhbDI6IHN0cmluZykgPT4geyByZXR1cm4gdmFsMSA9PT0gdmFsMjsgfSxcclxuICAgICAgbHQ6ICh2YWwxOiBhbnksIHZhbDI6IHN0cmluZykgPT4geyByZXR1cm4gdmFsMSA8IHZhbDI7IH0sXHJcbiAgICAgIGd0OiAodmFsMTogYW55LCB2YWwyOiBzdHJpbmcpID0+IHsgcmV0dXJuIHZhbDEgPiB2YWwyOyB9XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB2YWxpZGF0b3JzW29wZXJhdG9yXShkYXRhPy5bZmllbGRdIHx8IGRhdGEsIHZhbHVlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbWFrZUludGVybmFsUGx1c1ZhbGlkYXRpb24oXHJcbiAgICBkYXRhOiBhbnksXHJcbiAgICBzb3VyY2VGaWVsZDogc3RyaW5nLFxyXG4gICAgc2V0dGluZ3M6IGFueSxcclxuICAgIHJvd0luZGV4OiBudW1iZXJcclxuICApIHtcclxuICAgIGNvbnN0IGNoYW5nZUZpZWxkcyA9IChzaG93OiBib29sZWFuKSA9PiB7XHJcbiAgICAgIGNvbnN0IHNhdmVkID0gWy4uLnRoaXMuZmllbGRzXTtcclxuXHJcbiAgICAgIHNhdmVkLm1hcCgodmFsKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdmFsU2F2ZWQgPSB7XHJcbiAgICAgICAgICAuLi52YWxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmICh2YWwubmFtZSA9PT0gc291cmNlRmllbGQpIHtcclxuICAgICAgICAgIHRoaXMuX3BsdXNWYWxpZGF0aW9uc1tyb3dJbmRleF0gPSB7XHJcbiAgICAgICAgICAgIFtzb3VyY2VGaWVsZF06IHtcclxuICAgICAgICAgICAgICAuLi52YWxTYXZlZCxcclxuICAgICAgICAgICAgICBhbHdheXNTaG93OiBzaG93XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB0aGlzLmNyZWF0ZU9uZUNvbnRyb2wodmFsLm5hbWUsIHRoaXMuZm9ybVZhbHVlcz8uY29udHJvbHNbcm93SW5kZXhdLCBzaG93KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5fcGx1c1ZhbGlkYXRpb25zW3Jvd0luZGV4XSA9IHtcclxuICAgICAgICAgICAgLi4udmFsU2F2ZWRcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9KTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgdmFsaWRhdGVkID0gdGhpcy5oYW5kbGVJbnRlcm5hbFBsdXNWYWxpZGF0aW9uKHNldHRpbmdzLCBkYXRhKTtcclxuICAgIGNoYW5nZUZpZWxkcyh2YWxpZGF0ZWQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVPbmVDb250cm9sKGZpZWxkTmFtZTogc3RyaW5nLCBjdHJsOiBhbnksIGNyZWF0ZSA9IHRydWUpIHtcclxuICAgIGNvbnN0IHsgZmllbGRzIH0gPSB0aGlzO1xyXG4gICAgaWYgKCFmaWVsZHMpIHJldHVybjtcclxuXHJcbiAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGQ6IE1FQ1hGaWVsZENvbmZpZykgPT4ge1xyXG4gICAgICBjb25zdCB7IGZpZWxkVHlwZSwgdmFsaWRhdGlvbnMsIG5hbWUsIGRpc2FibGVkIH0gPSBmaWVsZDtcclxuICAgICAgaWYgKG5hbWUgIT09IGZpZWxkTmFtZSkgcmV0dXJuO1xyXG4gICAgICBsZXQgeyB2YWx1ZSB9ID0gZmllbGQ7XHJcbiAgICAgIGlmIChmaWVsZFR5cGUgPT09ICdidXR0b24nKSByZXR1cm47XHJcbiAgICAgIGlmIChmaWVsZFR5cGUgPT09ICdyYWRpb2J1dHRvbicgfHwgZmllbGRUeXBlID09PSAnY2hlY2tib3gnIHx8IGZpZWxkVHlwZSA9PT0gJ3NlbGVjdCcpIHtcclxuICAgICAgICB2YWx1ZSA9ICcnO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjcmVhdGUpIHtcclxuICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5mYi5jb250cm9sKHZhbHVlLCB0aGlzLmJpbmRWYWxpZGF0aW9ucyh2YWxpZGF0aW9ucyB8fCBbXSkpO1xyXG4gICAgICAgIGlmIChkaXNhYmxlZCB8fCB0aGlzLmRpc2FibGVkKSBjb250cm9sLmRpc2FibGUoKTtcclxuICAgICAgICBjdHJsLmFkZENvbnRyb2wobmFtZSwgY29udHJvbCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY3RybC5yZW1vdmVDb250cm9sKG5hbWUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlQ29udHJvbChkYXRhPzogYW55KSB7XHJcbiAgICBjb25zdCB7IGZpZWxkcyB9ID0gdGhpcztcclxuICAgIGlmICghZmllbGRzKSByZXR1cm4gbnVsbDtcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBvYmplY3QtY3VybHktbmV3bGluZVxyXG4gICAgY29uc3QgZ3JvdXAgPSB0aGlzLmZiLmdyb3VwKHt9KTtcclxuICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZDogTUVDWEZpZWxkQ29uZmlnKSA9PiB7XHJcbiAgICAgIGNvbnN0IHsgZmllbGRUeXBlLCB2YWxpZGF0aW9ucywgbmFtZSwgZGlzYWJsZWQsIGFsd2F5c1Nob3cgfSA9IGZpZWxkO1xyXG4gICAgICBsZXQgeyB2YWx1ZSB9ID0gZmllbGQ7XHJcbiAgICAgIGlmIChmaWVsZC5hbHdheXNTaG93UGx1c1ZhbGlkYXRpb24pIHtcclxuICAgICAgICBpZiAoIXRoaXMuaGFuZGxlSW50ZXJuYWxQbHVzVmFsaWRhdGlvbihmaWVsZC5hbHdheXNTaG93UGx1c1ZhbGlkYXRpb24sIGRhdGEpKSByZXR1cm47XHJcbiAgICAgIH0gZWxzZSBpZiAoIWFsd2F5c1Nob3cpIHJldHVybjtcclxuICAgICAgaWYgKGZpZWxkVHlwZSA9PT0gJ2J1dHRvbicpIHJldHVybjtcclxuICAgICAgaWYgKGZpZWxkVHlwZSA9PT0gJ3JhZGlvYnV0dG9uJyB8fCBmaWVsZFR5cGUgPT09ICdjaGVja2JveCcgfHwgZmllbGRUeXBlID09PSAnc2VsZWN0Jykge1xyXG4gICAgICAgIHZhbHVlID0gJyc7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZmIuY29udHJvbCh2YWx1ZSwgdGhpcy5iaW5kVmFsaWRhdGlvbnModmFsaWRhdGlvbnMgfHwgW10pKTtcclxuICAgICAgaWYgKGRpc2FibGVkIHx8IHRoaXMuZGlzYWJsZWQpIGNvbnRyb2wuZGlzYWJsZSgpO1xyXG4gICAgICBncm91cC5hZGRDb250cm9sKG5hbWUgYXMgc3RyaW5nLCBjb250cm9sKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBncm91cDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYmluZFZhbGlkYXRpb25zKHZhbGlkYXRpb25zOiBNRUNYRmllbGRDb25maWdWYWxpZGF0b3JbXSkge1xyXG4gICAgaWYgKHZhbGlkYXRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3QgdmFsaWRMaXN0OiBhbnlbXSA9IFtdO1xyXG4gICAgICB2YWxpZGF0aW9ucy5mb3JFYWNoKCh2YWxpZDogTUVDWEZpZWxkQ29uZmlnVmFsaWRhdG9yKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdmFsaWRhdGVkID0gdmFsaWQucGFyYW1cclxuICAgICAgICAgID8gdmFsaWRhdG9yc1t2YWxpZC5uYW1lXSh2YWxpZC5wYXJhbSlcclxuICAgICAgICAgIDogdmFsaWRhdG9yc1t2YWxpZC5uYW1lXTtcclxuICAgICAgICB2YWxpZExpc3QucHVzaCh2YWxpZGF0ZWQpO1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIFZhbGlkYXRvcnMuY29tcG9zZSh2YWxpZExpc3QpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkRm9ybSgpOiBGb3JtR3JvdXAge1xyXG4gICAgY29uc3QgZm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBmaWVsZHM6IHRoaXMuZmIuYXJyYXkoW10pXHJcbiAgICB9KTtcclxuXHJcbiAgICBmb3JtPy5jb250cm9scy5maWVsZHM/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKF8pID0+IHtcclxuICAgICAgdGhpcy53YXRjaEZvckNoYW5nZXMoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBmb3JtO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB3YXRjaEZvckNoYW5nZXMoKSB7XHJcbiAgICBjb25zdCB7IGZpZWxkcywgY2hhbmdlc1Vuc3Vic2NyaWJlIH0gPSB0aGlzO1xyXG4gICAgY2hhbmdlc1Vuc3Vic2NyaWJlLm5leHQoKTtcclxuXHJcbiAgICB0aGlzLmZvcm1WYWx1ZXM/LmNvbnRyb2xzPy5tYXAoKGNvbnRyb2w6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGRDb25maWc6IE1FQ1hGaWVsZENvbmZpZykgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsgbmFtZSwgYWx3YXlzU2hvd1BsdXNWYWxpZGF0aW9uIH0gPSBmaWVsZENvbmZpZztcclxuICAgICAgICBpZiAoIWFsd2F5c1Nob3dQbHVzVmFsaWRhdGlvbikgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IHsgZmllbGQgfSA9IGFsd2F5c1Nob3dQbHVzVmFsaWRhdGlvbjtcclxuICAgICAgICBpZiAoZmllbGQpIHtcclxuICAgICAgICAgIGNvbnRyb2wuY29udHJvbHNbZmllbGRdPy52YWx1ZUNoYW5nZXMucGlwZShcclxuICAgICAgICAgICAgdGFrZVVudGlsKGNoYW5nZXNVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgoXzogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubWFrZUludGVybmFsUGx1c1ZhbGlkYXRpb24oXHJcbiAgICAgICAgICAgICAgXyxcclxuICAgICAgICAgICAgICBuYW1lIGFzIHN0cmluZyxcclxuICAgICAgICAgICAgICBhbHdheXNTaG93UGx1c1ZhbGlkYXRpb24sXHJcbiAgICAgICAgICAgICAgaW5kZXhcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZm9ybUJhc2UgPSAoKSA9PiB7XHJcbiAgICAvLyByZXR1cm4gdGhpcy5mYi5ncm91cCh0aGlzLmNyZWF0ZUNvbnRyb2woKSk7XHJcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVDb250cm9sKCk7XHJcbiAgfTtcclxuXHJcbiAgcHVibGljIGdldCBmb3JtVmFsdWVzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Zvcm0gPyAodGhpcy5fZm9ybS5nZXQoJ2ZpZWxkcycpIGFzIEZvcm1BcnJheSkgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGZpbGxWYWx1ZXMoKSB7XHJcbiAgICBjb25zdCB7IGRhdGEsIHF0ZCB9ID0gdGhpcztcclxuICAgIGlmICgoIXRoaXMuX2Zvcm0pICYmIHF0ZCkgcmV0dXJuO1xyXG4gICAgaWYgKHF0ZCA+IDApIHtcclxuICAgICAgQXJyYXk8YW55PihxdGQpXHJcbiAgICAgICAgLmZpbGwobnVsbClcclxuICAgICAgICAubWFwKChfLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgbGV0IGZvcm0gPSB0aGlzLmNyZWF0ZUNvbnRyb2woKTtcclxuICAgICAgICAgIGlmIChkYXRhICYmIGRhdGFbaW5kZXhdKSB7XHJcbiAgICAgICAgICAgIGZvcm0gPSB0aGlzLmNyZWF0ZUNvbnRyb2woZGF0YVtpbmRleF0pO1xyXG4gICAgICAgICAgICBjb25zdCBoYW5kbGVkRGF0YSA9IGRhdGFbaW5kZXhdO1xyXG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhoYW5kbGVkRGF0YSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKE1vbmtleVV0aWxzLnBlcnNpc3ROdWxsRW1wdHlVbmRlZmluZWQodmFsdWUpICYmIGZvcm0/LmNvbnRyb2xzW2tleV0pIHtcclxuICAgICAgICAgICAgICAgIGZvcm0/LmNvbnRyb2xzW2tleV0uc2V0VmFsdWUodmFsdWUpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmZvcm1WYWx1ZXM/LnB1c2goZm9ybSBhcyBhbnkpO1xyXG5cclxuICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLl9mb3JtID0gdGhpcy5idWlsZEZvcm0oKTtcclxuICAgIHRoaXMuZmlsbFZhbHVlcygpO1xyXG5cclxuICAgIHRoaXMub25IYW5kbGVVcGRhdGVGb3JtLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuZmlsbFZhbHVlcygpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuZW5hYmxlTGlzdGVuZXJGb3JtQ2hhbmdlKSB7XHJcbiAgICAgIHRoaXMuX2Zvcm0ubWFya0FzVW50b3VjaGVkKCk7XHJcbiAgICAgIHRoaXMuX2Zvcm0udmFsdWVDaGFuZ2VzXHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoODAwKSxcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9fdW5zdWJzY3JpYmVBbGwpXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5vbkZvcm1DaGFuZ2UubmV4dCh0aGlzLl9mb3JtKVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoKSB7XHJcbiAgICBpZiAoIXRoaXMuX2Zvcm0pIHtcclxuICAgICAgdGhpcy5fZm9ybSA9IHRoaXMuYnVpbGRGb3JtKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmZpbGxWYWx1ZXMoKTtcclxuICB9XHJcbn1cclxuIl19
1
+ import { Directive, EventEmitter, Input, Output } from '@angular/core';
2
+ import { Validators } from '@angular/forms';
3
+ import { MonkeyUtils } from 'monkey-style-guide';
4
+ import { Subject } from 'rxjs';
5
+ import { debounceTime, takeUntil } from 'rxjs/operators';
6
+ import { BaseComponent } from './base-component';
7
+ import { validators } from './base-validators';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@angular/forms";
10
+ export class BaseDynamicArray extends BaseComponent {
11
+ constructor(fb) {
12
+ super();
13
+ this.fb = fb;
14
+ this.onHandleSubmit = new EventEmitter();
15
+ this.onHandleUpdateForm = new EventEmitter();
16
+ this.onHandleSubmitFormReady = new EventEmitter();
17
+ this.fields = [];
18
+ this.qtd = 1;
19
+ this.disabled = false;
20
+ this.enableListenerFormChange = false;
21
+ this.onFormChange = new EventEmitter();
22
+ this._form = null;
23
+ // eslint-disable-next-line object-curly-newline
24
+ this._plusValidations = [];
25
+ this.changesUnsubscribe = new Subject();
26
+ this.formBase = () => {
27
+ // return this.fb.group(this.createControl());
28
+ return this.createControl();
29
+ };
30
+ }
31
+ handleInternalPlusValidation(mainField, data) {
32
+ const { operator, field, value } = mainField;
33
+ const validators = {
34
+ e: (val1, val2) => { return val1 === val2; },
35
+ lt: (val1, val2) => { return val1 < val2; },
36
+ gt: (val1, val2) => { return val1 > val2; }
37
+ };
38
+ return validators[operator](data?.[field] || data, value);
39
+ }
40
+ makeInternalPlusValidation(data, sourceField, settings, rowIndex) {
41
+ const changeFields = (show) => {
42
+ const saved = [...this.fields];
43
+ saved.map((val) => {
44
+ const valSaved = {
45
+ ...val
46
+ };
47
+ if (val.name === sourceField) {
48
+ this._plusValidations[rowIndex] = {
49
+ [sourceField]: {
50
+ ...valSaved,
51
+ alwaysShow: show
52
+ }
53
+ };
54
+ this.createOneControl(val.name, this.formValues?.controls[rowIndex], show);
55
+ }
56
+ else {
57
+ this._plusValidations[rowIndex] = {
58
+ ...valSaved
59
+ };
60
+ }
61
+ return null;
62
+ });
63
+ };
64
+ const validated = this.handleInternalPlusValidation(settings, data);
65
+ changeFields(validated);
66
+ }
67
+ createOneControl(fieldName, ctrl, create = true) {
68
+ const { fields } = this;
69
+ if (!fields)
70
+ return;
71
+ fields.forEach((field) => {
72
+ const { fieldType, validations, name, disabled } = field;
73
+ if (name !== fieldName)
74
+ return;
75
+ let { value } = field;
76
+ if (fieldType === 'button')
77
+ return;
78
+ if (fieldType === 'radiobutton' || fieldType === 'checkbox' || fieldType === 'select') {
79
+ value = '';
80
+ }
81
+ if (create) {
82
+ const control = this.fb.control(value, this.bindValidations(validations || []));
83
+ if (disabled || this.disabled)
84
+ control.disable();
85
+ ctrl.addControl(name, control);
86
+ }
87
+ else {
88
+ ctrl.removeControl(name);
89
+ }
90
+ });
91
+ }
92
+ createControl(data) {
93
+ const { fields } = this;
94
+ if (!fields)
95
+ return null;
96
+ // eslint-disable-next-line object-curly-newline
97
+ const group = this.fb.group({});
98
+ fields.forEach((field) => {
99
+ const { fieldType, validations, name, disabled, alwaysShow } = field;
100
+ let { value } = field;
101
+ if (field.alwaysShowPlusValidation) {
102
+ if (!this.handleInternalPlusValidation(field.alwaysShowPlusValidation, data))
103
+ return;
104
+ }
105
+ else if (!alwaysShow)
106
+ return;
107
+ if (fieldType === 'button')
108
+ return;
109
+ if (fieldType === 'radiobutton' || fieldType === 'checkbox' || fieldType === 'select') {
110
+ value = '';
111
+ }
112
+ const control = this.fb.control(value, this.bindValidations(validations || []));
113
+ if (disabled || this.disabled)
114
+ control.disable();
115
+ group.addControl(name, control);
116
+ });
117
+ return group;
118
+ }
119
+ bindValidations(validations) {
120
+ if (validations.length > 0) {
121
+ const validList = [];
122
+ validations.forEach((valid) => {
123
+ const validated = valid.param
124
+ ? validators[valid.name](valid.param)
125
+ : validators[valid.name];
126
+ validList.push(validated);
127
+ });
128
+ return Validators.compose(validList);
129
+ }
130
+ return null;
131
+ }
132
+ buildForm() {
133
+ const form = this.fb.group({
134
+ fields: this.fb.array([])
135
+ });
136
+ form?.controls.fields?.valueChanges.subscribe((_) => {
137
+ this.watchForChanges();
138
+ });
139
+ return form;
140
+ }
141
+ watchForChanges() {
142
+ const { fields, changesUnsubscribe } = this;
143
+ changesUnsubscribe.next();
144
+ this.formValues?.controls?.map((control, index) => {
145
+ fields.forEach((fieldConfig) => {
146
+ const { name, alwaysShowPlusValidation } = fieldConfig;
147
+ if (!alwaysShowPlusValidation)
148
+ return;
149
+ const { field } = alwaysShowPlusValidation;
150
+ if (field) {
151
+ control.controls[field]?.valueChanges.pipe(takeUntil(changesUnsubscribe)).subscribe((_) => {
152
+ this.makeInternalPlusValidation(_, name, alwaysShowPlusValidation, index);
153
+ });
154
+ }
155
+ });
156
+ return null;
157
+ });
158
+ }
159
+ get formValues() {
160
+ return this._form ? this._form.get('fields') : null;
161
+ }
162
+ fillValues() {
163
+ const { data, qtd } = this;
164
+ if ((!this._form) && qtd)
165
+ return;
166
+ if (qtd > 0) {
167
+ Array(qtd)
168
+ .fill(null)
169
+ .map((_, index) => {
170
+ let form = this.createControl();
171
+ if (data && data[index]) {
172
+ form = this.createControl(data[index]);
173
+ const handledData = data[index];
174
+ Object.entries(handledData).forEach(([key, value]) => {
175
+ if (MonkeyUtils.persistNullEmptyUndefined(value) && form?.controls[key]) {
176
+ form?.controls[key].setValue(value);
177
+ }
178
+ });
179
+ }
180
+ this.formValues?.push(form);
181
+ return null;
182
+ });
183
+ }
184
+ }
185
+ ngOnInit() {
186
+ this._form = this.buildForm();
187
+ this.fillValues();
188
+ this.onHandleUpdateForm.subscribe(() => {
189
+ this.fillValues();
190
+ });
191
+ if (this.enableListenerFormChange) {
192
+ this._form.markAsUntouched();
193
+ this._form.valueChanges
194
+ .pipe(debounceTime(800), takeUntil(this.__unsubscribeAll))
195
+ .subscribe(() => {
196
+ this.onFormChange.next(this._form);
197
+ });
198
+ }
199
+ }
200
+ ngOnChanges() {
201
+ if (!this._form) {
202
+ this._form = this.buildForm();
203
+ }
204
+ this.fillValues();
205
+ }
206
+ }
207
+ BaseDynamicArray.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BaseDynamicArray, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Directive });
208
+ BaseDynamicArray.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.1.1", type: BaseDynamicArray, selector: "[baseDynamicArray]", inputs: { onHandleSubmit: "onHandleSubmit", onHandleUpdateForm: "onHandleUpdateForm", self: "self", fields: "fields", data: "data", qtd: "qtd", disabled: "disabled", enableListenerFormChange: "enableListenerFormChange" }, outputs: { onHandleSubmitFormReady: "onHandleSubmitFormReady", onFormChange: "onFormChange" }, usesInheritance: true, usesOnChanges: true, ngImport: i0 });
209
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BaseDynamicArray, decorators: [{
210
+ type: Directive,
211
+ args: [{
212
+ selector: '[baseDynamicArray]'
213
+ }]
214
+ }], ctorParameters: function () { return [{ type: i1.FormBuilder }]; }, propDecorators: { onHandleSubmit: [{
215
+ type: Input
216
+ }], onHandleUpdateForm: [{
217
+ type: Input
218
+ }], onHandleSubmitFormReady: [{
219
+ type: Output
220
+ }], self: [{
221
+ type: Input
222
+ }], fields: [{
223
+ type: Input
224
+ }], data: [{
225
+ type: Input
226
+ }], qtd: [{
227
+ type: Input
228
+ }], disabled: [{
229
+ type: Input
230
+ }], enableListenerFormChange: [{
231
+ type: Input
232
+ }], onFormChange: [{
233
+ type: Output
234
+ }] } });
235
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1keW5hbWljLWFycmF5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW9ua2V5LWZyb250LWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2Jhc2UvYmFzZS1keW5hbWljLWFycmF5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBcUMsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7QUFLL0MsTUFBTSxPQUFnQixnQkFBaUIsU0FBUSxhQUFhO0lBNEIxRCxZQUFvQixFQUFlO1FBQ2pDLEtBQUssRUFBRSxDQUFDO1FBRFUsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQTNCMUIsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBRXpDLHVCQUFrQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFNUMsNEJBQXVCLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFJdEUsV0FBTSxHQUFzQixFQUFFLENBQUM7UUFJL0IsUUFBRyxHQUFXLENBQUMsQ0FBQztRQUVoQixhQUFRLEdBQVksS0FBSyxDQUFDO1FBRTFCLDZCQUF3QixHQUFHLEtBQUssQ0FBQztRQUVoQyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFakQsVUFB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R0FFVSxjQUFjO3NCQUF0QixLQUFLO2dCQUVHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFFSSx1QkFBdUI7c0JBQWhDLE1BQU07Z0JBRUUsSUFBSTtzQkFBWixLQUFLO2dCQUVHLE1BQU07c0JBQWQsS0FBSztnQkFFRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRUcsR0FBRztzQkFBWCxLQUFLO2dCQUVHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUVJLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1vbmtleVV0aWxzIH0gZnJvbSAnbW9ua2V5LXN0eWxlLWd1aWRlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTUVDWEZpZWxkQ29uZmlnLCBNRUNYRmllbGRDb25maWdWYWxpZGF0b3IgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEJhc2VDb21wb25lbnQgfSBmcm9tICcuL2Jhc2UtY29tcG9uZW50JztcbmltcG9ydCB7IHZhbGlkYXRvcnMgfSBmcm9tICcuL2Jhc2UtdmFsaWRhdG9ycyc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tiYXNlRHluYW1pY0FycmF5XSdcbn0pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUR5bmFtaWNBcnJheSBleHRlbmRzIEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIG9uSGFuZGxlU3VibWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQElucHV0KCkgb25IYW5kbGVVcGRhdGVGb3JtID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQE91dHB1dCgpIG9uSGFuZGxlU3VibWl0Rm9ybVJlYWR5OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBJbnB1dCgpIHNlbGY6IGFueTtcblxuICBASW5wdXQoKSBmaWVsZHM6IE1FQ1hGaWVsZENvbmZpZ1tdID0gW107XG5cbiAgQElucHV0KCkgZGF0YTogYW55O1xuXG4gIEBJbnB1dCgpIHF0ZDogbnVtYmVyID0gMTtcblxuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIGVuYWJsZUxpc3RlbmVyRm9ybUNoYW5nZSA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSBvbkZvcm1DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBfZm9ybTogRm9ybUdyb3VwIHwgbnVsbCA9IG51bGw7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9iamVjdC1jdXJseS1uZXdsaW5lXG4gIF9wbHVzVmFsaWRhdGlvbnM6IGFueVtdID0gW107XG5cbiAgcHJpdmF0ZSBjaGFuZ2VzVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdCgpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlSW50ZXJuYWxQbHVzVmFsaWRhdGlvbihcbiAgICBtYWluRmllbGQ6IGFueSxcbiAgICBkYXRhOiBhbnlcbiAgKSB7XG4gICAgY29uc3QgeyBvcGVyYXRvciwgZmllbGQsIHZhbHVlIH0gPSBtYWluRmllbGQ7XG4gICAgY29uc3QgdmFsaWRhdG9yczogYW55ID0ge1xuICAgICAgZTogKHZhbDE6IGFueSwgdmFsMjogc3RyaW5nKSA9PiB7IHJldHVybiB2YWwxID09PSB2YWwyOyB9LFxuICAgICAgbHQ6ICh2YWwxOiBhbnksIHZhbDI6IHN0cmluZykgPT4geyByZXR1cm4gdmFsMSA8IHZhbDI7IH0sXG4gICAgICBndDogKHZhbDE6IGFueSwgdmFsMjogc3RyaW5nKSA9PiB7IHJldHVybiB2YWwxID4gdmFsMjsgfVxuICAgIH07XG5cbiAgICByZXR1cm4gdmFsaWRhdG9yc1tvcGVyYXRvcl0oZGF0YT8uW2ZpZWxkXSB8fCBkYXRhLCB2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIG1ha2VJbnRlcm5hbFBsdXNWYWxpZGF0aW9uKFxuICAgIGRhdGE6IGFueSxcbiAgICBzb3VyY2VGaWVsZDogc3RyaW5nLFxuICAgIHNldHRpbmdzOiBhbnksXG4gICAgcm93SW5kZXg6IG51bWJlclxuICApIHtcbiAgICBjb25zdCBjaGFuZ2VGaWVsZHMgPSAoc2hvdzogYm9vbGVhbikgPT4ge1xuICAgICAgY29uc3Qgc2F2ZWQgPSBbLi4udGhpcy5maWVsZHNdO1xuXG4gICAgICBzYXZlZC5tYXAoKHZhbCkgPT4ge1xuICAgICAgICBjb25zdCB2YWxTYXZlZCA9IHtcbiAgICAgICAgICAuLi52YWxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHZhbC5uYW1lID09PSBzb3VyY2VGaWVsZCkge1xuICAgICAgICAgIHRoaXMuX3BsdXNWYWxpZGF0aW9uc1tyb3dJbmRleF0gPSB7XG4gICAgICAgICAgICBbc291cmNlRmllbGRdOiB7XG4gICAgICAgICAgICAgIC4uLnZhbFNhdmVkLFxuICAgICAgICAgICAgICBhbHdheXNTaG93OiBzaG93XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLmNyZWF0ZU9uZUNvbnRyb2wodmFsLm5hbWUsIHRoaXMuZm9ybVZhbHVlcz8uY29udHJvbHNbcm93SW5kZXhdLCBzaG93KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9wbHVzVmFsaWRhdGlvbnNbcm93SW5kZXhdID0ge1xuICAgICAgICAgICAgLi4udmFsU2F2ZWRcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNvbnN0IHZhbGlkYXRlZCA9IHRoaXMuaGFuZGxlSW50ZXJuYWxQbHVzVmFsaWRhdGlvbihzZXR0aW5ncywgZGF0YSk7XG4gICAgY2hhbmdlRmllbGRzKHZhbGlkYXRlZCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU9uZUNvbnRyb2woZmllbGROYW1lOiBzdHJpbmcsIGN0cmw6IGFueSwgY3JlYXRlID0gdHJ1ZSkge1xuICAgIGNvbnN0IHsgZmllbGRzIH0gPSB0aGlzO1xuICAgIGlmICghZmllbGRzKSByZXR1cm47XG5cbiAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGQ6IE1FQ1hGaWVsZENvbmZpZykgPT4ge1xuICAgICAgY29uc3QgeyBmaWVsZFR5cGUsIHZhbGlkYXRpb25zLCBuYW1lLCBkaXNhYmxlZCB9ID0gZmllbGQ7XG4gICAgICBpZiAobmFtZSAhPT0gZmllbGROYW1lKSByZXR1cm47XG4gICAgICBsZXQgeyB2YWx1ZSB9ID0gZmllbGQ7XG4gICAgICBpZiAoZmllbGRUeXBlID09PSAnYnV0dG9uJykgcmV0dXJuO1xuICAgICAgaWYgKGZpZWxkVHlwZSA9PT0gJ3JhZGlvYnV0dG9uJyB8fCBmaWVsZFR5cGUgPT09ICdjaGVja2JveCcgfHwgZmllbGRUeXBlID09PSAnc2VsZWN0Jykge1xuICAgICAgICB2YWx1ZSA9ICcnO1xuICAgICAgfVxuICAgICAgaWYgKGNyZWF0ZSkge1xuICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5mYi5jb250cm9sKHZhbHVlLCB0aGlzLmJpbmRWYWxpZGF0aW9ucyh2YWxpZGF0aW9ucyB8fCBbXSkpO1xuICAgICAgICBpZiAoZGlzYWJsZWQgfHwgdGhpcy5kaXNhYmxlZCkgY29udHJvbC5kaXNhYmxlKCk7XG4gICAgICAgIGN0cmwuYWRkQ29udHJvbChuYW1lLCBjb250cm9sKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGN0cmwucmVtb3ZlQ29udHJvbChuYW1lKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ29udHJvbChkYXRhPzogYW55KSB7XG4gICAgY29uc3QgeyBmaWVsZHMgfSA9IHRoaXM7XG4gICAgaWYgKCFmaWVsZHMpIHJldHVybiBudWxsO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBvYmplY3QtY3VybHktbmV3bGluZVxuICAgIGNvbnN0IGdyb3VwID0gdGhpcy5mYi5ncm91cCh7fSk7XG4gICAgZmllbGRzLmZvckVhY2goKGZpZWxkOiBNRUNYRmllbGRDb25maWcpID0+IHtcbiAgICAgIGNvbnN0IHsgZmllbGRUeXBlLCB2YWxpZGF0aW9ucywgbmFtZSwgZGlzYWJsZWQsIGFsd2F5c1Nob3cgfSA9IGZpZWxkO1xuICAgICAgbGV0IHsgdmFsdWUgfSA9IGZpZWxkO1xuICAgICAgaWYgKGZpZWxkLmFsd2F5c1Nob3dQbHVzVmFsaWRhdGlvbikge1xuICAgICAgICBpZiAoIXRoaXMuaGFuZGxlSW50ZXJuYWxQbHVzVmFsaWRhdGlvbihmaWVsZC5hbHdheXNTaG93UGx1c1ZhbGlkYXRpb24sIGRhdGEpKSByZXR1cm47XG4gICAgICB9IGVsc2UgaWYgKCFhbHdheXNTaG93KSByZXR1cm47XG4gICAgICBpZiAoZmllbGRUeXBlID09PSAnYnV0dG9uJykgcmV0dXJuO1xuICAgICAgaWYgKGZpZWxkVHlwZSA9PT0gJ3JhZGlvYnV0dG9uJyB8fCBmaWVsZFR5cGUgPT09ICdjaGVja2JveCcgfHwgZmllbGRUeXBlID09PSAnc2VsZWN0Jykge1xuICAgICAgICB2YWx1ZSA9ICcnO1xuICAgICAgfVxuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZmIuY29udHJvbCh2YWx1ZSwgdGhpcy5iaW5kVmFsaWRhdGlvbnModmFsaWRhdGlvbnMgfHwgW10pKTtcbiAgICAgIGlmIChkaXNhYmxlZCB8fCB0aGlzLmRpc2FibGVkKSBjb250cm9sLmRpc2FibGUoKTtcbiAgICAgIGdyb3VwLmFkZENvbnRyb2wobmFtZSBhcyBzdHJpbmcsIGNvbnRyb2wpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGdyb3VwO1xuICB9XG5cbiAgcHJpdmF0ZSBiaW5kVmFsaWRhdGlvbnModmFsaWRhdGlvbnM6IE1FQ1hGaWVsZENvbmZpZ1ZhbGlkYXRvcltdKSB7XG4gICAgaWYgKHZhbGlkYXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHZhbGlkTGlzdDogYW55W10gPSBbXTtcbiAgICAgIHZhbGlkYXRpb25zLmZvckVhY2goKHZhbGlkOiBNRUNYRmllbGRDb25maWdWYWxpZGF0b3IpID0+IHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVkID0gdmFsaWQucGFyYW1cbiAgICAgICAgICA/IHZhbGlkYXRvcnNbdmFsaWQubmFtZV0odmFsaWQucGFyYW0pXG4gICAgICAgICAgOiB2YWxpZGF0b3JzW3ZhbGlkLm5hbWVdO1xuICAgICAgICB2YWxpZExpc3QucHVzaCh2YWxpZGF0ZWQpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gVmFsaWRhdG9ycy5jb21wb3NlKHZhbGlkTGlzdCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEZvcm0oKTogRm9ybUdyb3VwIHtcbiAgICBjb25zdCBmb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBmaWVsZHM6IHRoaXMuZmIuYXJyYXkoW10pXG4gICAgfSk7XG5cbiAgICBmb3JtPy5jb250cm9scy5maWVsZHM/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgIHRoaXMud2F0Y2hGb3JDaGFuZ2VzKCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZm9ybTtcbiAgfVxuXG4gIHByaXZhdGUgd2F0Y2hGb3JDaGFuZ2VzKCkge1xuICAgIGNvbnN0IHsgZmllbGRzLCBjaGFuZ2VzVW5zdWJzY3JpYmUgfSA9IHRoaXM7XG4gICAgY2hhbmdlc1Vuc3Vic2NyaWJlLm5leHQoKTtcblxuICAgIHRoaXMuZm9ybVZhbHVlcz8uY29udHJvbHM/Lm1hcCgoY29udHJvbDogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGRDb25maWc6IE1FQ1hGaWVsZENvbmZpZykgPT4ge1xuICAgICAgICBjb25zdCB7IG5hbWUsIGFsd2F5c1Nob3dQbHVzVmFsaWRhdGlvbiB9ID0gZmllbGRDb25maWc7XG4gICAgICAgIGlmICghYWx3YXlzU2hvd1BsdXNWYWxpZGF0aW9uKSByZXR1cm47XG4gICAgICAgIGNvbnN0IHsgZmllbGQgfSA9IGFsd2F5c1Nob3dQbHVzVmFsaWRhdGlvbjtcbiAgICAgICAgaWYgKGZpZWxkKSB7XG4gICAgICAgICAgY29udHJvbC5jb250cm9sc1tmaWVsZF0/LnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsKGNoYW5nZXNVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgoXzogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1ha2VJbnRlcm5hbFBsdXNWYWxpZGF0aW9uKFxuICAgICAgICAgICAgICBfLFxuICAgICAgICAgICAgICBuYW1lIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgYWx3YXlzU2hvd1BsdXNWYWxpZGF0aW9uLFxuICAgICAgICAgICAgICBpbmRleFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBmb3JtQmFzZSA9ICgpID0+IHtcbiAgICAvLyByZXR1cm4gdGhpcy5mYi5ncm91cCh0aGlzLmNyZWF0ZUNvbnRyb2woKSk7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlQ29udHJvbCgpO1xuICB9O1xuXG4gIHB1YmxpYyBnZXQgZm9ybVZhbHVlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybSA/ICh0aGlzLl9mb3JtLmdldCgnZmllbGRzJykgYXMgRm9ybUFycmF5KSA6IG51bGw7XG4gIH1cblxuICBwdWJsaWMgZmlsbFZhbHVlcygpIHtcbiAgICBjb25zdCB7IGRhdGEsIHF0ZCB9ID0gdGhpcztcbiAgICBpZiAoKCF0aGlzLl9mb3JtKSAmJiBxdGQpIHJldHVybjtcbiAgICBpZiAocXRkID4gMCkge1xuICAgICAgQXJyYXk8YW55PihxdGQpXG4gICAgICAgIC5maWxsKG51bGwpXG4gICAgICAgIC5tYXAoKF8sIGluZGV4KSA9PiB7XG4gICAgICAgICAgbGV0IGZvcm0gPSB0aGlzLmNyZWF0ZUNvbnRyb2woKTtcbiAgICAgICAgICBpZiAoZGF0YSAmJiBkYXRhW2luZGV4XSkge1xuICAgICAgICAgICAgZm9ybSA9IHRoaXMuY3JlYXRlQ29udHJvbChkYXRhW2luZGV4XSk7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVkRGF0YSA9IGRhdGFbaW5kZXhdO1xuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoaGFuZGxlZERhdGEpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoTW9ua2V5VXRpbHMucGVyc2lzdE51bGxFbXB0eVVuZGVmaW5lZCh2YWx1ZSkgJiYgZm9ybT8uY29udHJvbHNba2V5XSkge1xuICAgICAgICAgICAgICAgIGZvcm0/LmNvbnRyb2xzW2tleV0uc2V0VmFsdWUodmFsdWUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5mb3JtVmFsdWVzPy5wdXNoKGZvcm0gYXMgYW55KTtcblxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLl9mb3JtID0gdGhpcy5idWlsZEZvcm0oKTtcbiAgICB0aGlzLmZpbGxWYWx1ZXMoKTtcblxuICAgIHRoaXMub25IYW5kbGVVcGRhdGVGb3JtLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmZpbGxWYWx1ZXMoKTtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmVuYWJsZUxpc3RlbmVyRm9ybUNoYW5nZSkge1xuICAgICAgdGhpcy5fZm9ybS5tYXJrQXNVbnRvdWNoZWQoKTtcbiAgICAgIHRoaXMuX2Zvcm0udmFsdWVDaGFuZ2VzXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGRlYm91bmNlVGltZSg4MDApLFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9fdW5zdWJzY3JpYmVBbGwpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5vbkZvcm1DaGFuZ2UubmV4dCh0aGlzLl9mb3JtKVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcygpIHtcbiAgICBpZiAoIXRoaXMuX2Zvcm0pIHtcbiAgICAgIHRoaXMuX2Zvcm0gPSB0aGlzLmJ1aWxkRm9ybSgpO1xuICAgIH1cbiAgICB0aGlzLmZpbGxWYWx1ZXMoKTtcbiAgfVxufVxuIl19