@pepperi-addons/ngx-lib 0.4.1-beta.49 → 0.4.1-beta.50

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 (27) hide show
  1. package/core/common/services/utilities.service.d.ts +4 -4
  2. package/esm2020/core/common/services/utilities.service.mjs +15 -26
  3. package/esm2020/quantity-selector/quantity-selector-validation.directive.mjs +2 -2
  4. package/esm2020/quantity-selector/quantity-selector.component.mjs +30 -23
  5. package/esm2020/smart-filters/common/model/base-filter-component.mjs +5 -4
  6. package/esm2020/smart-filters/number-filter/number-filter.component.mjs +11 -3
  7. package/esm2020/textbox/textbox-validation.directive.mjs +4 -4
  8. package/esm2020/textbox/textbox.component.mjs +50 -39
  9. package/fesm2015/pepperi-addons-ngx-lib-quantity-selector.mjs +30 -23
  10. package/fesm2015/pepperi-addons-ngx-lib-quantity-selector.mjs.map +1 -1
  11. package/fesm2015/pepperi-addons-ngx-lib-smart-filters.mjs +14 -5
  12. package/fesm2015/pepperi-addons-ngx-lib-smart-filters.mjs.map +1 -1
  13. package/fesm2015/pepperi-addons-ngx-lib-textbox.mjs +52 -41
  14. package/fesm2015/pepperi-addons-ngx-lib-textbox.mjs.map +1 -1
  15. package/fesm2015/pepperi-addons-ngx-lib.mjs +14 -25
  16. package/fesm2015/pepperi-addons-ngx-lib.mjs.map +1 -1
  17. package/fesm2020/pepperi-addons-ngx-lib-quantity-selector.mjs +30 -23
  18. package/fesm2020/pepperi-addons-ngx-lib-quantity-selector.mjs.map +1 -1
  19. package/fesm2020/pepperi-addons-ngx-lib-smart-filters.mjs +14 -5
  20. package/fesm2020/pepperi-addons-ngx-lib-smart-filters.mjs.map +1 -1
  21. package/fesm2020/pepperi-addons-ngx-lib-textbox.mjs +52 -41
  22. package/fesm2020/pepperi-addons-ngx-lib-textbox.mjs.map +1 -1
  23. package/fesm2020/pepperi-addons-ngx-lib.mjs +14 -25
  24. package/fesm2020/pepperi-addons-ngx-lib.mjs.map +1 -1
  25. package/package.json +1 -1
  26. package/quantity-selector/quantity-selector.component.d.ts +0 -1
  27. package/smart-filters/common/model/base-filter-component.d.ts +3 -2
@@ -15,9 +15,9 @@ export declare class PepUtilitiesService {
15
15
  isJsonString(str: string): boolean;
16
16
  getSvgElementFromString(document: any, svgContent: string): SVGElement;
17
17
  formatPercent(value: any, minFractionDigits?: number, maxFractionDigits?: number): string;
18
- formatCurrency(value: any, currencySign?: string, minFractionDigits?: number, maxFractionDigits?: number): string;
19
- formatDecimal(value: any, minFractionDigits?: number, maxFractionDigits?: number): string;
20
- formatNumber(value: any): string;
18
+ formatCurrency(value: any, currencySign?: string, minFractionDigits?: number, maxFractionDigits?: number, useGrouping?: boolean): string;
19
+ formatDecimal(value: any, minFractionDigits?: number, maxFractionDigits?: number, useGrouping?: boolean): string;
20
+ formatNumber(value: any, useGrouping?: boolean): string;
21
21
  /**
22
22
  * Convert a number in milliseconds to a standard duration string.
23
23
  * @param {number} value - duration in milliseconds
@@ -32,7 +32,7 @@ export declare class PepUtilitiesService {
32
32
  incrementNumber(value: any): string;
33
33
  decrementNumber(value: any): string;
34
34
  getDecimalSeparator(): string;
35
- changeDecimalSeperatorWhenItsComma(value: string, reverse?: boolean): string;
35
+ changeDecimalSeparatorWhenItsComma(value: string, reverse?: boolean): string;
36
36
  isEqualNumber(numberAsString: string, numberAsString2: string): boolean;
37
37
  static ɵfac: i0.ɵɵFactoryDeclaration<PepUtilitiesService, [{ optional: true; }]>;
38
38
  static ɵprov: i0.ɵɵInjectableDeclaration<PepUtilitiesService>;
@@ -15,8 +15,8 @@ export class PepUtilitiesService {
15
15
  // If the decimal separator is ',' change it to '.'
16
16
  if (value?.length > 0) {
17
17
  // If the decimal separator is ',' change it to '.' for let the formatting works.
18
- value = this.changeDecimalSeperatorWhenItsComma(value);
19
- // console.log('coerceNumberProperty after change decimal seperator value is', value);
18
+ value = this.changeDecimalSeparatorWhenItsComma(value);
19
+ // console.log('coerceNumberProperty after change decimal separator value is', value);
20
20
  }
21
21
  return coerceNumberProperty(value, fallbackValue);
22
22
  }
@@ -61,13 +61,13 @@ export class PepUtilitiesService {
61
61
  cutValueByFractionDigits(value, maxFractionDigits) {
62
62
  let res = value;
63
63
  maxFractionDigits = maxFractionDigits || 2;
64
- const decimalSeperator = this.getDecimalSeparator();
65
- if (value.includes(decimalSeperator)) {
66
- const valueArr = value.split(decimalSeperator);
64
+ const decimalSeparator = this.getDecimalSeparator();
65
+ if (value.includes(decimalSeparator)) {
66
+ const valueArr = value.split(decimalSeparator);
67
67
  // if (valueArr[1].length < maxFractionDigits) {
68
68
  valueArr[1] = valueArr[1].padEnd(maxFractionDigits, '0');
69
69
  // }
70
- res = `${valueArr[0]}${decimalSeperator}${valueArr[1].slice(0, maxFractionDigits)}`;
70
+ res = `${valueArr[0]}${decimalSeparator}${valueArr[1].slice(0, maxFractionDigits)}`;
71
71
  }
72
72
  return res;
73
73
  }
@@ -157,11 +157,11 @@ export class PepUtilitiesService {
157
157
  }
158
158
  }
159
159
  // formatCurrency(value: any, currencySign = '', digitsInfo = '1.2-2') {
160
- formatCurrency(value, currencySign = '', minFractionDigits = 2, maxFractionDigits = 2) {
160
+ formatCurrency(value, currencySign = '', minFractionDigits = 2, maxFractionDigits = 2, useGrouping = true) {
161
161
  minFractionDigits = coerceNumberProperty(minFractionDigits, null);
162
162
  maxFractionDigits = coerceNumberProperty(maxFractionDigits, null);
163
163
  let res = '';
164
- // If the decimal seperator is the last digit
164
+ // If the decimal separator is the last digit
165
165
  // if (value.length > 0 && value.indexOf(this.getDecimalSeparator()) === value.length -1) {
166
166
  // res = value;
167
167
  // } else {
@@ -170,6 +170,7 @@ export class PepUtilitiesService {
170
170
  const styleOptions = {
171
171
  // style: 'currency',
172
172
  // currencySign: currencySign,
173
+ useGrouping: useGrouping,
173
174
  minimumFractionDigits: minFractionDigits || Math.min(2, maxFractionDigits || 2),
174
175
  maximumFractionDigits: maxFractionDigits || Math.max(2, minFractionDigits),
175
176
  };
@@ -188,7 +189,7 @@ export class PepUtilitiesService {
188
189
  return res;
189
190
  }
190
191
  // formatDecimal(value: any, digitsInfo = '1.2-2') {
191
- formatDecimal(value, minFractionDigits = 2, maxFractionDigits = 2) {
192
+ formatDecimal(value, minFractionDigits = 2, maxFractionDigits = 2, useGrouping = true) {
192
193
  minFractionDigits = coerceNumberProperty(minFractionDigits, null);
193
194
  // console.log('formatDecimal minFractionDigits value is', minFractionDigits);
194
195
  maxFractionDigits = coerceNumberProperty(maxFractionDigits, null);
@@ -202,6 +203,7 @@ export class PepUtilitiesService {
202
203
  else {
203
204
  // return formatNumber(value, this.culture, digitsInfo);
204
205
  const res = new Intl.NumberFormat(this.culture, {
206
+ useGrouping: useGrouping,
205
207
  minimumFractionDigits: minFractionDigits || Math.min(2, maxFractionDigits || 2),
206
208
  maximumFractionDigits: maxFractionDigits || Math.max(2, minFractionDigits),
207
209
  }).format(number);
@@ -210,7 +212,7 @@ export class PepUtilitiesService {
210
212
  }
211
213
  }
212
214
  // formatNumber(value: any, digitsInfo = '1.0-0'): string {
213
- formatNumber(value) {
215
+ formatNumber(value, useGrouping = true) {
214
216
  const number = this.prepareNumberToFormat(value);
215
217
  if (number === 0) {
216
218
  return '0';
@@ -218,6 +220,7 @@ export class PepUtilitiesService {
218
220
  else {
219
221
  // return formatNumber(value, this.culture, digitsInfo);
220
222
  return new Intl.NumberFormat(this.culture, {
223
+ useGrouping: useGrouping,
221
224
  minimumFractionDigits: 0,
222
225
  maximumFractionDigits: 0,
223
226
  }).format(number);
@@ -258,24 +261,10 @@ export class PepUtilitiesService {
258
261
  incrementNumber(value) {
259
262
  let numberValue = coerceNumberProperty(value, 0);
260
263
  return (++numberValue).toString();
261
- // // Change value to be with dot ('.') decimal seperator.
262
- // let valueWithDotDecimalSeperator = this.changeDecimalSeperatorWhenItsComma(value);
263
- // // let numberValue = this.changeToNumberWithDefaultSettings(valueWithDotDecimalSeperator);
264
- // let numberValue = coerceNumberProperty(valueWithDotDecimalSeperator, 0);
265
- // // Change value back to Culture decimal seperator.
266
- // const newNumber = this.changeDecimalSeperatorWhenItsComma((++numberValue).toString(), true);
267
- // return newNumber;
268
264
  }
269
265
  decrementNumber(value) {
270
266
  let numberValue = coerceNumberProperty(value, 0);
271
267
  return (--numberValue).toString();
272
- // // Change value to be with dot ('.') decimal seperator.
273
- // let valueWithDotDecimalSeperator = this.changeDecimalSeperatorWhenItsComma(value);
274
- // // let numberValue = this.changeToNumberWithDefaultSettings(valueWithDotDecimalSeperator);
275
- // let numberValue = coerceNumberProperty(valueWithDotDecimalSeperator, 0);
276
- // // Change value back to Culture decimal seperator.
277
- // const newNumber = this.changeDecimalSeperatorWhenItsComma((--numberValue).toString(), true);
278
- // return newNumber;
279
268
  }
280
269
  getDecimalSeparator() {
281
270
  const numberWithDecimalSeparator = 1.1;
@@ -283,7 +272,7 @@ export class PepUtilitiesService {
283
272
  .toLocaleString(this.culture)
284
273
  .substring(1, 2);
285
274
  }
286
- changeDecimalSeperatorWhenItsComma(value, reverse = false) {
275
+ changeDecimalSeparatorWhenItsComma(value, reverse = false) {
287
276
  // If the decimal separator is ','
288
277
  if (this.getDecimalSeparator() === ',') {
289
278
  // If reverse change the number from '.' to ',' else do the opposite.
@@ -307,4 +296,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
307
296
  }], ctorParameters: function () { return [{ type: i1.TranslateService, decorators: [{
308
297
  type: Optional
309
298
  }] }]; } });
310
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0aWVzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL3NyYy9jb3JlL2NvbW1vbi9zZXJ2aWNlcy91dGlsaXRpZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFN0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQU1yRCxNQUFNLE9BQU8sbUJBQW1CO0lBRzVCLFlBQWdDLFlBQThCLElBQUk7UUFBbEMsY0FBUyxHQUFULFNBQVMsQ0FBeUI7UUFGMUQsWUFBTyxHQUFHLE9BQU8sQ0FBQztRQUd0QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUscUJBQXFCLEVBQUUsSUFBSSxPQUFPLENBQUM7UUFFbEUsUUFBUTtRQUNSLGdFQUFnRTtRQUNoRSxhQUFhO0lBQ2pCLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxLQUFhLEVBQUUsYUFBYSxHQUFHLENBQUM7UUFDMUQsbURBQW1EO1FBQ25ELElBQUksS0FBSyxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDbkIsaUZBQWlGO1lBQ2pGLEtBQUssR0FBRyxJQUFJLENBQUMsa0NBQWtDLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkQsc0ZBQXNGO1NBQ3pGO1FBRUQsT0FBTyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELHlEQUF5RDtJQUN6RCwrREFBK0Q7SUFDdkQsT0FBTyxDQUFDLFlBQW9CO1FBQ2hDLElBQUksT0FBTyxZQUFZLEtBQUssUUFBUSxFQUFFO1lBQ2xDLE1BQU0sSUFBSSxTQUFTLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtTQUMzQztRQUVELE9BQU87WUFDSCxJQUFJLEVBQUUsSUFB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O2lCQUNyQjs7MEJBSWdCLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2VyY2VOdW1iZXJQcm9wZXJ0eSwgX2lzTnVtYmVyVmFsdWUgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgZm9ybWF0Q3VycmVuY3ksIGZvcm1hdE51bWJlciwgZm9ybWF0UGVyY2VudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBQZXBVdGlsaXRpZXNTZXJ2aWNlIHtcbiAgICBwcml2YXRlIGN1bHR1cmUgPSAnZW4tVVMnO1xuXG4gICAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UgPSBudWxsKSB7XG4gICAgICAgIHRoaXMuY3VsdHVyZSA9IHRoaXMudHJhbnNsYXRlPy5nZXRCcm93c2VyQ3VsdHVyZUxhbmcoKSB8fCAnZW4tVVMnO1xuXG4gICAgICAgIC8vIHRyeSB7XG4gICAgICAgIC8vICAgICBpbXBvcnQoYEBhbmd1bGFyL2NvbW1vbi9sb2NhbGVzL2dsb2JhbC8ke3RoaXMuY3VsdHVyZX1gKTtcbiAgICAgICAgLy8gfSBjYXRjaCB7fVxuICAgIH1cblxuICAgIHByaXZhdGUgcHJlcGFyZU51bWJlclRvRm9ybWF0KHZhbHVlOiBzdHJpbmcsIGZhbGxiYWNrVmFsdWUgPSAwKTogbnVtYmVyIHtcbiAgICAgICAgLy8gSWYgdGhlIGRlY2ltYWwgc2VwYXJhdG9yIGlzICcsJyBjaGFuZ2UgaXQgdG8gJy4nXG4gICAgICAgIGlmICh2YWx1ZT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgLy8gSWYgdGhlIGRlY2ltYWwgc2VwYXJhdG9yIGlzICcsJyBjaGFuZ2UgaXQgdG8gJy4nIGZvciBsZXQgdGhlIGZvcm1hdHRpbmcgd29ya3MuXG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMuY2hhbmdlRGVjaW1hbFNlcGVyYXRvcldoZW5JdHNDb21tYSh2YWx1ZSk7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnY29lcmNlTnVtYmVyUHJvcGVydHkgYWZ0ZXIgY2hhbmdlIGRlY2ltYWwgc2VwZXJhdG9yIHZhbHVlIGlzJywgdmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlLCBmYWxsYmFja1ZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBhZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9wYXJzZS1tcy5cbiAgICAvLyBtb3ZlZCB0byBpbnRlcm5hbCBmdW5jdGlvbiBiZWNhdXNlIHBhcnNlLW1zIGlzIG5vdyBwdXJlIEVTTS5cbiAgICBwcml2YXRlIHBhcnNlTXMobWlsbGlzZWNvbmRzOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBtaWxsaXNlY29uZHMgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBhIG51bWJlcicpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF5czogTWF0aC50cnVuYyhtaWxsaXNlY29uZHMgLyA4NjQwMDAwMCksXG4gICAgICAgICAgICBob3VyczogTWF0aC50cnVuYyhtaWxsaXNlY29uZHMgLyAzNjAwMDAwKSAlIDI0LFxuICAgICAgICAgICAgbWludXRlczogTWF0aC50cnVuYyhtaWxsaXNlY29uZHMgLyA2MDAwMCkgJSA2MCxcbiAgICAgICAgICAgIHNlY29uZHM6IE1hdGgudHJ1bmMobWlsbGlzZWNvbmRzIC8gMTAwMCkgJSA2MCxcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kczogTWF0aC50cnVuYyhtaWxsaXNlY29uZHMpICUgMTAwMFxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gYWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9yYWZhZWxyaW5hbGRpL2FkZC16ZXJvLlxuICAgIC8vIG1vdmVkIHRvIGludGVybmFsIGZ1bmN0aW9uIGIvYyBhZGRaZXJvIGlzIHVubWFpbnRhaW5lZCAoNysgeWVhcnMpLlxuICAgIC8vIHN0cmlwcGVkIG91dCBuZWdhdGl2ZSBzaWduIGxvZ2ljIHNpbmNlIHdlJ3JlIGFscmVhZHkgZG9pbmcgaXQgZWxzZXdoZXJlLlxuICAgIHByaXZhdGUgYWRkWmVybyh2YWx1ZTogbnVtYmVyLCBkaWdpdHMgPSAyKSB7XG4gICAgICAgIGRpZ2l0cyA9IGRpZ2l0cyB8fCAyXG5cbiAgICAgICAgbGV0IHN0ciA9IHZhbHVlLnRvU3RyaW5nKClcbiAgICAgICAgbGV0IHNpemUgPSAwXG5cbiAgICAgICAgc2l6ZSA9IGRpZ2l0cyAtIHN0ci5sZW5ndGggKyAxXG4gICAgICAgIHN0ciA9IG5ldyBBcnJheShzaXplKS5qb2luKCcwJykuY29uY2F0KHN0cilcblxuICAgICAgICByZXR1cm4gc3RyXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0N1cnJlbmN5U2hvdWxkQmVPblJpZ2h0KGN1cnJlbmN5U3ltYm9sOiBzdHJpbmcpIHtcbiAgICAgICAgbGV0IHJlcyA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChjdXJyZW5jeVN5bWJvbCA9PSBcIuKCrFwiIHx8XG4gICAgICAgICAgICBjdXJyZW5jeVN5bWJvbCA9PSBcIuKCqlwiIHx8XG4gICAgICAgICAgICBjdXJyZW5jeVN5bWJvbCA9PSBcIkZ0XCIgfHxcbiAgICAgICAgICAgIGN1cnJlbmN5U3ltYm9sID09IFwiS8SNXCIgfHxcbiAgICAgICAgICAgIGN1cnJlbmN5U3ltYm9sID09IFwi0YDRg9CxXCIgfHxcbiAgICAgICAgICAgIGN1cnJlbmN5U3ltYm9sID09IFwiesWCXCIgfHxcbiAgICAgICAgICAgIGN1cnJlbmN5U3ltYm9sID09IFwia3IuXCIpIHtcbiAgICAgICAgICAgIHJlcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3V0VmFsdWVCeUZyYWN0aW9uRGlnaXRzKHZhbHVlOiBzdHJpbmcsIG1heEZyYWN0aW9uRGlnaXRzOiBudW1iZXIpOiBzdHJpbmcge1xuICAgICAgICBsZXQgcmVzID0gdmFsdWU7XG4gICAgICAgIG1heEZyYWN0aW9uRGlnaXRzID0gbWF4RnJhY3Rpb25EaWdpdHMgfHwgMjtcbiAgICAgICAgY29uc3QgZGVjaW1hbFNlcGVyYXRvciA9IHRoaXMuZ2V0RGVjaW1hbFNlcGFyYXRvcigpO1xuXG4gICAgICAgIGlmICh2YWx1ZS5pbmNsdWRlcyhkZWNpbWFsU2VwZXJhdG9yKSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVBcnIgPSB2YWx1ZS5zcGxpdChkZWNpbWFsU2VwZXJhdG9yKTtcblxuICAgICAgICAgICAgLy8gaWYgKHZhbHVlQXJyWzFdLmxlbmd0aCA8IG1heEZyYWN0aW9uRGlnaXRzKSB7XG4gICAgICAgICAgICB2YWx1ZUFyclsxXSA9IHZhbHVlQXJyWzFdLnBhZEVuZChtYXhGcmFjdGlvbkRpZ2l0cywgJzAnKTtcbiAgICAgICAgICAgIC8vIH1cblxuICAgICAgICAgICAgcmVzID0gYCR7dmFsdWVBcnJbMF19JHtkZWNpbWFsU2VwZXJhdG9yfSR7dmFsdWVBcnJbMV0uc2xpY2UoMCwgbWF4RnJhY3Rpb25EaWdpdHMpfWA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIHBhcnNlRGF0ZShkYXRlU3RyOiBzdHJpbmcsIHNob3dUaW1lID0gZmFsc2UpOiBEYXRlIHtcbiAgICAgICAgbGV0IHJldFZhbDogRGF0ZSA9IG51bGw7XG4gICAgICAgIGlmIChkYXRlU3RyICE9PSAnJykge1xuICAgICAgICAgICAgcmV0VmFsID0gbmV3IERhdGUoZGF0ZVN0cik7XG5cbiAgICAgICAgICAgIC8vIENvbnZlcnQgdG8gZGF0ZSB3aXRoIG5vIG9mZnNldC5cbiAgICAgICAgICAgIGlmICghc2hvd1RpbWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGRhdGVTdHIuaW5kZXhPZignVCcpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBkYXRlU3RyID0gZGF0ZVN0ci5zdWJzdHJpbmcoMCwgaW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVUZXh0ID0gZGF0ZVN0ci5zcGxpdCgnLScpO1xuICAgICAgICAgICAgICAgIGlmIChkYXRlVGV4dC5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeWVhciA9IE51bWJlcihkYXRlVGV4dFswXSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vbnRoID0gTnVtYmVyKGRhdGVUZXh0WzFdKSAtIDE7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRheSA9IE51bWJlcihkYXRlVGV4dFsyXSk7XG4gICAgICAgICAgICAgICAgICAgIHJldFZhbCA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCBkYXksIDAsIHJldFZhbC5nZXRUaW1lem9uZU9mZnNldCgpICogLTEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0VmFsID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgIHJldFZhbC5nZXRGdWxsWWVhcigpLCByZXRWYWwuZ2V0TW9udGgoKSwgcmV0VmFsLmdldERhdGUoKSwgcmV0VmFsLmdldEhvdXJzKCksXG4gICAgICAgICAgICAgICAgICAgIHJldFZhbC5nZXRNaW51dGVzKCkgKyByZXRWYWwuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIC0xLCByZXRWYWwuZ2V0U2Vjb25kcygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocmV0VmFsICYmIGlzTmFOKHJldFZhbC5nZXRUaW1lKCkpKSB7XG4gICAgICAgICAgICByZXRWYWwgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXRWYWw7XG4gICAgfVxuXG4gICAgc3RyaW5naWZ5RGF0ZShkYXRlOiBEYXRlLCBzaG93VGltZSA9IGZhbHNlKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKGRhdGUpIHtcbiAgICAgICAgICAgIGlmIChzaG93VGltZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkYXRlLnRvSVNPU3RyaW5nKCk7IC8vIGluY2x1ZGUgLSBvZmZzZXRcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZVRleHQgPSBbXTtcbiAgICAgICAgICAgICAgICBkYXRlVGV4dC5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBkYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgICAgICAgICAgICAgICctJyxcbiAgICAgICAgICAgICAgICAgICAgZGF0ZS5nZXRNb250aCgpICsgMSxcbiAgICAgICAgICAgICAgICAgICAgJy0nLFxuICAgICAgICAgICAgICAgICAgICBkYXRlLmdldERhdGUoKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGVUZXh0LmpvaW4oJycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNWYWx1ZUh0bWwodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBsZXQgcmVzID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IFJFR0VYUCA9IC88XFwvP1thLXpdW1xcc1xcU10qPi9pO1xuICAgICAgICByZXMgPSBSRUdFWFAudGVzdCh2YWx1ZSk7XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBpc0pzb25TdHJpbmcoc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIEpTT04ucGFyc2Uoc3RyKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGdldFN2Z0VsZW1lbnRGcm9tU3RyaW5nKGRvY3VtZW50LCBzdmdDb250ZW50OiBzdHJpbmcpOiBTVkdFbGVtZW50IHtcbiAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnRElWJyk7XG4gICAgICAgIC8vIGRpdi5jbGFzc05hbWUgPSAnc3ZnLWljb24nO1xuICAgICAgICAvLyBBZGQgY2xhc3Mgc3ZnLWljb25cbiAgICAgICAgaWYgKHN2Z0NvbnRlbnQ/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSBzdmdDb250ZW50LnJlcGxhY2UoJzxzdmcgJywgJzxzdmcgY2xhc3M9XCJzdmctaWNvblwiICcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBkaXYucXVlcnlTZWxlY3Rvcignc3ZnJykgfHxcbiAgICAgICAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAncGF0aCcpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gZm9ybWF0UGVyY2VudCh2YWx1ZTogYW55LCBkaWdpdHNJbmZvID0gJzEuMC0yJykge1xuICAgIGZvcm1hdFBlcmNlbnQodmFsdWU6IGFueSwgbWluRnJhY3Rpb25EaWdpdHMgPSAwLCBtYXhGcmFjdGlvbkRpZ2l0cyA9IDIpIHtcbiAgICAgICAgbWluRnJhY3Rpb25EaWdpdHMgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eShtaW5GcmFjdGlvbkRpZ2l0cywgbnVsbCk7XG4gICAgICAgIG1heEZyYWN0aW9uRGlnaXRzID0gY29lcmNlTnVtYmVyUHJvcGVydHkobWF4RnJhY3Rpb25EaWdpdHMsIG51bGwpO1xuXG4gICAgICAgIHZhbHVlID0gdGhpcy5jdXRWYWx1ZUJ5RnJhY3Rpb25EaWdpdHModmFsdWUsIG1heEZyYWN0aW9uRGlnaXRzKTtcbiAgICAgICAgY29uc3QgbnVtYmVyID0gdGhpcy5wcmVwYXJlTnVtYmVyVG9Gb3JtYXQodmFsdWUpO1xuXG4gICAgICAgIGlmIChudW1iZXIgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAnMCUnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcmV0dXJuIGZvcm1hdFBlcmNlbnQobnVtYmVyIC8gMTAwLCB0aGlzLmN1bHR1cmUsIGRpZ2l0c0luZm8pO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnRsLk51bWJlckZvcm1hdCh0aGlzLmN1bHR1cmUsIHtcbiAgICAgICAgICAgICAgICBzdHlsZTogJ3BlcmNlbnQnLFxuICAgICAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogbWluRnJhY3Rpb25EaWdpdHMgfHwgMCxcbiAgICAgICAgICAgICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IG1heEZyYWN0aW9uRGlnaXRzIHx8IE1hdGgubWF4KDIsIG1pbkZyYWN0aW9uRGlnaXRzKSxcbiAgICAgICAgICAgIH0pLmZvcm1hdChudW1iZXIgLyAxMDApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZm9ybWF0Q3VycmVuY3kodmFsdWU6IGFueSwgY3VycmVuY3lTaWduID0gJycsIGRpZ2l0c0luZm8gPSAnMS4yLTInKSB7XG4gICAgZm9ybWF0Q3VycmVuY3kodmFsdWU6IGFueSwgY3VycmVuY3lTaWduID0gJycsIG1pbkZyYWN0aW9uRGlnaXRzID0gMiwgbWF4RnJhY3Rpb25EaWdpdHMgPSAyKSB7XG4gICAgICAgIG1pbkZyYWN0aW9uRGlnaXRzID0gY29lcmNlTnVtYmVyUHJvcGVydHkobWluRnJhY3Rpb25EaWdpdHMsIG51bGwpO1xuICAgICAgICBtYXhGcmFjdGlvbkRpZ2l0cyA9IGNvZXJjZU51bWJlclByb3BlcnR5KG1heEZyYWN0aW9uRGlnaXRzLCBudWxsKTtcblxuICAgICAgICBsZXQgcmVzID0gJyc7XG5cbiAgICAgICAgLy8gSWYgdGhlIGRlY2ltYWwgc2VwZXJhdG9yIGlzIHRoZSBsYXN0IGRpZ2l0XG4gICAgICAgIC8vIGlmICh2YWx1ZS5sZW5ndGggPiAwICYmIHZhbHVlLmluZGV4T2YodGhpcy5nZXREZWNpbWFsU2VwYXJhdG9yKCkpID09PSB2YWx1ZS5sZW5ndGggLTEpIHtcbiAgICAgICAgLy8gICAgIHJlcyA9IHZhbHVlO1xuICAgICAgICAvLyB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmN1dFZhbHVlQnlGcmFjdGlvbkRpZ2l0cyh2YWx1ZSwgbWF4RnJhY3Rpb25EaWdpdHMpO1xuICAgICAgICAgICAgY29uc3QgbnVtYmVyID0gdGhpcy5wcmVwYXJlTnVtYmVyVG9Gb3JtYXQodmFsdWUpO1xuICAgICAgICAgICAgY29uc3Qgc3R5bGVPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIC8vIHN0eWxlOiAnY3VycmVuY3knLFxuICAgICAgICAgICAgICAgIC8vIGN1cnJlbmN5U2lnbjogY3VycmVuY3lTaWduLFxuICAgICAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogbWluRnJhY3Rpb25EaWdpdHMgfHwgTWF0aC5taW4oMiwgbWF4RnJhY3Rpb25EaWdpdHMgfHwgMiksXG4gICAgICAgICAgICAgICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiBtYXhGcmFjdGlvbkRpZ2l0cyB8fCBNYXRoLm1heCgyLCBtaW5GcmFjdGlvbkRpZ2l0cyksXG4gICAgICAgICAgICB9O1xuICAgIFxuICAgICAgICAgICAgaWYgKG51bWJlciA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIHJldHVybiBmb3JtYXRDdXJyZW5jeSgwLCB0aGlzLmN1bHR1cmUsIGN1cnJlbmN5U2lnbiwgdW5kZWZpbmVkLCBkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgICAgICByZXMgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQodGhpcy5jdWx0dXJlLCBzdHlsZU9wdGlvbnMpLmZvcm1hdCgwKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gcmV0dXJuIGZvcm1hdEN1cnJlbmN5KHZhbHVlLCB0aGlzLmN1bHR1cmUsIGN1cnJlbmN5U2lnbiwgdW5kZWZpbmVkLCBkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgICAgICByZXMgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQodGhpcy5jdWx0dXJlLCBzdHlsZU9wdGlvbnMpLmZvcm1hdChudW1iZXIpO1xuICAgICAgICAgICAgfVxuICAgIFxuICAgICAgICAgICAgaWYgKGN1cnJlbmN5U2lnbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcmVzID0gdGhpcy5pc0N1cnJlbmN5U2hvdWxkQmVPblJpZ2h0KGN1cnJlbmN5U2lnbikgPyBgJHtyZXN9ICR7Y3VycmVuY3lTaWdufWAgOiBgJHtjdXJyZW5jeVNpZ259ICR7cmVzfWBcbiAgICAgICAgICAgIH1cbiAgICAgICAgLy8gfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgLy8gZm9ybWF0RGVjaW1hbCh2YWx1ZTogYW55LCBkaWdpdHNJbmZvID0gJzEuMi0yJykge1xuICAgIGZvcm1hdERlY2ltYWwodmFsdWU6IGFueSwgbWluRnJhY3Rpb25EaWdpdHMgPSAyLCBtYXhGcmFjdGlvbkRpZ2l0cyA9IDIpIHtcbiAgICAgICAgbWluRnJhY3Rpb25EaWdpdHMgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eShtaW5GcmFjdGlvbkRpZ2l0cywgbnVsbCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdmb3JtYXREZWNpbWFsIG1pbkZyYWN0aW9uRGlnaXRzIHZhbHVlIGlzJywgbWluRnJhY3Rpb25EaWdpdHMpO1xuICAgICAgICBtYXhGcmFjdGlvbkRpZ2l0cyA9IGNvZXJjZU51bWJlclByb3BlcnR5KG1heEZyYWN0aW9uRGlnaXRzLCBudWxsKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ2Zvcm1hdERlY2ltYWwgbWluRnJhY3Rpb25EaWdpdHMgdmFsdWUgaXMnLCBtYXhGcmFjdGlvbkRpZ2l0cyk7XG5cbiAgICAgICAgdmFsdWUgPSB0aGlzLmN1dFZhbHVlQnlGcmFjdGlvbkRpZ2l0cyh2YWx1ZSwgbWF4RnJhY3Rpb25EaWdpdHMpO1xuICAgICAgICBjb25zdCBudW1iZXIgPSB0aGlzLnByZXBhcmVOdW1iZXJUb0Zvcm1hdCh2YWx1ZSk7XG4gICAgICAgIFxuICAgICAgICAvLyBjb25zb2xlLmxvZygnbnVtYmVyIHZhbHVlIGlzJywgbnVtYmVyKTtcblxuICAgICAgICBpZiAobnVtYmVyID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gJzAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcmV0dXJuIGZvcm1hdE51bWJlcih2YWx1ZSwgdGhpcy5jdWx0dXJlLCBkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IG5ldyBJbnRsLk51bWJlckZvcm1hdCh0aGlzLmN1bHR1cmUsIHtcbiAgICAgICAgICAgICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IG1pbkZyYWN0aW9uRGlnaXRzIHx8IE1hdGgubWluKDIsIG1heEZyYWN0aW9uRGlnaXRzIHx8IDIpLFxuICAgICAgICAgICAgICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0czogbWF4RnJhY3Rpb25EaWdpdHMgfHwgTWF0aC5tYXgoMiwgbWluRnJhY3Rpb25EaWdpdHMpLFxuICAgICAgICAgICAgfSkuZm9ybWF0KG51bWJlcik7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdJbnRsLk51bWJlckZvcm1hdCB2YWx1ZSBpcycsIHJlcyk7XG5cbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBmb3JtYXROdW1iZXIodmFsdWU6IGFueSwgZGlnaXRzSW5mbyA9ICcxLjAtMCcpOiBzdHJpbmcge1xuICAgIGZvcm1hdE51bWJlcih2YWx1ZTogYW55KTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgbnVtYmVyID0gdGhpcy5wcmVwYXJlTnVtYmVyVG9Gb3JtYXQodmFsdWUpO1xuXG4gICAgICAgIGlmIChudW1iZXIgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAnMCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gZm9ybWF0TnVtYmVyKHZhbHVlLCB0aGlzLmN1bHR1cmUsIGRpZ2l0c0luZm8pO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnRsLk51bWJlckZvcm1hdCh0aGlzLmN1bHR1cmUsIHtcbiAgICAgICAgICAgICAgICBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IDAsXG4gICAgICAgICAgICAgICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiAwLFxuICAgICAgICAgICAgfSkuZm9ybWF0KG51bWJlcilcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgYSBudW1iZXIgaW4gbWlsbGlzZWNvbmRzIHRvIGEgc3RhbmRhcmQgZHVyYXRpb24gc3RyaW5nLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSAtIGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kc1xuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0gZm9ybWF0RHVyYXRpb24gb3B0aW9ucyBvYmplY3RcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmxlYWRpbmc9ZmFsc2VdIC0gYWRkIGxlYWRpbmcgemVyb1xuICAgICAqIEByZXR1cm5zIHN0cmluZyAtIGZvcm1hdHRlZCBkdXJhdGlvbiBzdHJpbmdcbiAgICAqL1xuICAgIGZvcm1hdER1cmF0aW9uKHZhbHVlLCBvcHRpb25zOiB7IGxlYWRpbmc/OiBib29sZWFuLCBkdXJhdGlvbj86ICdtaWxsaXNlY29uZHMnIHwgJ3NlY29uZHMnIH0gPSB7fSk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGlzTnVtYmVyID0gX2lzTnVtYmVyVmFsdWUodmFsdWUpO1xuXG4gICAgICAgIGlmICghaXNOdW1iZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBudW1iZXIgPSB0aGlzLnByZXBhcmVOdW1iZXJUb0Zvcm1hdCh2YWx1ZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGxlYWRpbmcgPSBvcHRpb25zPy5sZWFkaW5nIHx8IHRydWU7XG4gICAgICAgICAgICBjb25zdCBkdXJhdGlvbiA9IG9wdGlvbnM/LmR1cmF0aW9uIHx8ICdtaWxsaXNlY29uZHMnO1xuICAgICAgICAgICAgaWYgKGR1cmF0aW9uID09PSAnc2Vjb25kcycpIHtcbiAgICAgICAgICAgICAgICBudW1iZXIgPSBudW1iZXIgKiAxMDAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB1bnNpZ25lZE1zID0gbnVtYmVyIDwgMCA/IC1udW1iZXIgOiBudW1iZXI7XG4gICAgICAgICAgICBjb25zdCBzaWduID0gbnVtYmVyIDw9IC0xMDAwID8gJy0nIDogJyc7XG4gICAgICAgICAgICBjb25zdCB0ID0gdGhpcy5wYXJzZU1zKHVuc2lnbmVkTXMpO1xuICAgICAgICAgICAgY29uc3Qgc2Vjb25kcyA9IHRoaXMuYWRkWmVybyh0LnNlY29uZHMpO1xuXG4gICAgICAgICAgICBpZiAodC5kYXlzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNpZ24gKyB0LmRheXMgKyAnOicgKyB0aGlzLmFkZFplcm8odC5ob3VycykgKyAnOicgKyB0aGlzLmFkZFplcm8odC5taW51dGVzKSArICc6JyArIHNlY29uZHNcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHQuaG91cnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2lnbiArIChsZWFkaW5nID8gdGhpcy5hZGRaZXJvKHQuaG91cnMpIDogdC5ob3VycykgKyAnOicgKyB0aGlzLmFkZFplcm8odC5taW51dGVzKSArICc6JyArIHNlY29uZHNcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHNpZ24gKyAobGVhZGluZyA/IHRoaXMuYWRkWmVybyh0Lm1pbnV0ZXMpIDogdC5taW51dGVzKSArICc6JyArIHNlY29uZHNcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluY3JlbWVudE51bWJlcih2YWx1ZTogYW55KTogc3RyaW5nIHtcbiAgICAgICAgbGV0IG51bWJlclZhbHVlID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUsIDApO1xuICAgICAgICByZXR1cm4gKCsrbnVtYmVyVmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgLy8gLy8gQ2hhbmdlIHZhbHVlIHRvIGJlIHdpdGggZG90ICgnLicpIGRlY2ltYWwgc2VwZXJhdG9yLlxuICAgICAgICAvLyBsZXQgdmFsdWVXaXRoRG90RGVjaW1hbFNlcGVyYXRvciA9IHRoaXMuY2hhbmdlRGVjaW1hbFNlcGVyYXRvcldoZW5JdHNDb21tYSh2YWx1ZSk7XG4gICAgICAgIC8vIC8vIGxldCBudW1iZXJWYWx1ZSA9IHRoaXMuY2hhbmdlVG9OdW1iZXJXaXRoRGVmYXVsdFNldHRpbmdzKHZhbHVlV2l0aERvdERlY2ltYWxTZXBlcmF0b3IpO1xuICAgICAgICAvLyBsZXQgbnVtYmVyVmFsdWUgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZVdpdGhEb3REZWNpbWFsU2VwZXJhdG9yLCAwKTtcbiAgICAgICAgLy8gLy8gQ2hhbmdlIHZhbHVlIGJhY2sgdG8gQ3VsdHVyZSBkZWNpbWFsIHNlcGVyYXRvci5cbiAgICAgICAgLy8gY29uc3QgbmV3TnVtYmVyID0gdGhpcy5jaGFuZ2VEZWNpbWFsU2VwZXJhdG9yV2hlbkl0c0NvbW1hKCgrK251bWJlclZhbHVlKS50b1N0cmluZygpLCB0cnVlKTtcblxuICAgICAgICAvLyByZXR1cm4gbmV3TnVtYmVyO1xuICAgIH1cblxuICAgIGRlY3JlbWVudE51bWJlcih2YWx1ZTogYW55KTogc3RyaW5nIHtcbiAgICAgICAgbGV0IG51bWJlclZhbHVlID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUsIDApO1xuICAgICAgICByZXR1cm4gKC0tbnVtYmVyVmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgLy8gLy8gQ2hhbmdlIHZhbHVlIHRvIGJlIHdpdGggZG90ICgnLicpIGRlY2ltYWwgc2VwZXJhdG9yLlxuICAgICAgICAvLyBsZXQgdmFsdWVXaXRoRG90RGVjaW1hbFNlcGVyYXRvciA9IHRoaXMuY2hhbmdlRGVjaW1hbFNlcGVyYXRvcldoZW5JdHNDb21tYSh2YWx1ZSk7XG4gICAgICAgIC8vIC8vIGxldCBudW1iZXJWYWx1ZSA9IHRoaXMuY2hhbmdlVG9OdW1iZXJXaXRoRGVmYXVsdFNldHRpbmdzKHZhbHVlV2l0aERvdERlY2ltYWxTZXBlcmF0b3IpO1xuICAgICAgICAvLyBsZXQgbnVtYmVyVmFsdWUgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZVdpdGhEb3REZWNpbWFsU2VwZXJhdG9yLCAwKTtcbiAgICAgICAgLy8gLy8gQ2hhbmdlIHZhbHVlIGJhY2sgdG8gQ3VsdHVyZSBkZWNpbWFsIHNlcGVyYXRvci5cbiAgICAgICAgLy8gY29uc3QgbmV3TnVtYmVyID0gdGhpcy5jaGFuZ2VEZWNpbWFsU2VwZXJhdG9yV2hlbkl0c0NvbW1hKCgtLW51bWJlclZhbHVlKS50b1N0cmluZygpLCB0cnVlKTtcblxuICAgICAgICAvLyByZXR1cm4gbmV3TnVtYmVyO1xuICAgIH1cblxuICAgIGdldERlY2ltYWxTZXBhcmF0b3IoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgbnVtYmVyV2l0aERlY2ltYWxTZXBhcmF0b3IgPSAxLjE7XG5cbiAgICAgICAgcmV0dXJuIG51bWJlcldpdGhEZWNpbWFsU2VwYXJhdG9yXG4gICAgICAgICAgICAudG9Mb2NhbGVTdHJpbmcodGhpcy5jdWx0dXJlKVxuICAgICAgICAgICAgLnN1YnN0cmluZygxLCAyKTtcbiAgICB9XG5cbiAgICBjaGFuZ2VEZWNpbWFsU2VwZXJhdG9yV2hlbkl0c0NvbW1hKHZhbHVlOiBzdHJpbmcsIHJldmVyc2UgPSBmYWxzZSk6IHN0cmluZyB7XG4gICAgICAgIC8vIElmIHRoZSBkZWNpbWFsIHNlcGFyYXRvciBpcyAnLCdcbiAgICAgICAgaWYgKHRoaXMuZ2V0RGVjaW1hbFNlcGFyYXRvcigpID09PSAnLCcpIHtcbiAgICAgICAgICAgIC8vIElmIHJldmVyc2UgY2hhbmdlIHRoZSBudW1iZXIgZnJvbSAnLicgdG8gJywnIGVsc2UgZG8gdGhlIG9wcG9zaXRlLlxuICAgICAgICAgICAgdmFsdWUgPSByZXZlcnNlID8gdmFsdWUucmVwbGFjZSgnLicsICcsJykgOiB2YWx1ZS5yZXBsYWNlKCcsJywgJy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBpc0VxdWFsTnVtYmVyKG51bWJlckFzU3RyaW5nOiBzdHJpbmcsIG51bWJlckFzU3RyaW5nMjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IG51bWJlciA9IHRoaXMucHJlcGFyZU51bWJlclRvRm9ybWF0KG51bWJlckFzU3RyaW5nKTtcbiAgICAgICAgY29uc3QgbnVtYmVyMiA9IHRoaXMucHJlcGFyZU51bWJlclRvRm9ybWF0KG51bWJlckFzU3RyaW5nMik7XG5cbiAgICAgICAgcmV0dXJuIG51bWJlciA9PT0gbnVtYmVyMjtcbiAgICB9XG59XG4iXX0=
299
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0aWVzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL3NyYy9jb3JlL2NvbW1vbi9zZXJ2aWNlcy91dGlsaXRpZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFN0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQU1yRCxNQUFNLE9BQU8sbUJBQW1CO0lBRzVCLFlBQWdDLFlBQThCLElBQUk7UUFBbEMsY0FBUyxHQUFULFNBQVMsQ0FBeUI7UUFGMUQsWUFBTyxHQUFHLE9BQU8sQ0FBQztRQUd0QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUscUJBQXFCLEVBQUUsSUFBSSxPQUFPLENBQUM7UUFFbEUsUUFBUTtRQUNSLGdFQUFnRTtRQUNoRSxhQUFhO0lBQ2pCLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxLQUFhLEVBQUUsYUFBYSxHQUFHLENBQUM7UUFDMUQsbURBQW1EO1FBQ25ELElBQUksS0FBSyxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDbkIsaUZBQWlGO1lBQ2pGLEtBQUssR0FBRyxJQUFJLENBQUMsa0NBQWtDLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkQsc0ZBQXNGO1NBQ3pGO1FBRUQsT0FBTyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELHlEQUF5RDtJQUN6RCwrREFBK0Q7SUFDdkQsT0FBTyxDQUFDLFlBQW9CO1FBQ2hDLElBQUksT0FBTyxZQUFZLEtBQUssUUFBUSxFQUFFO1lBQ2xDLE1BQU0sSUFBSSxTQUFTLENBQUMsbUJBQW1CLENBQUMsQ0FBQTtTQUMzQztRQUVELE9BQU87WUFDSCxJQUFJLEVBQUUsSUFB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clByb3BlcnR5LCBfaXNOdW1iZXJWYWx1ZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBmb3JtYXRDdXJyZW5jeSwgZm9ybWF0TnVtYmVyLCBmb3JtYXRQZXJjZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFBlcFV0aWxpdGllc1NlcnZpY2Uge1xuICAgIHByaXZhdGUgY3VsdHVyZSA9ICdlbi1VUyc7XG5cbiAgICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSA9IG51bGwpIHtcbiAgICAgICAgdGhpcy5jdWx0dXJlID0gdGhpcy50cmFuc2xhdGU/LmdldEJyb3dzZXJDdWx0dXJlTGFuZygpIHx8ICdlbi1VUyc7XG5cbiAgICAgICAgLy8gdHJ5IHtcbiAgICAgICAgLy8gICAgIGltcG9ydChgQGFuZ3VsYXIvY29tbW9uL2xvY2FsZXMvZ2xvYmFsLyR7dGhpcy5jdWx0dXJlfWApO1xuICAgICAgICAvLyB9IGNhdGNoIHt9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcmVwYXJlTnVtYmVyVG9Gb3JtYXQodmFsdWU6IHN0cmluZywgZmFsbGJhY2tWYWx1ZSA9IDApOiBudW1iZXIge1xuICAgICAgICAvLyBJZiB0aGUgZGVjaW1hbCBzZXBhcmF0b3IgaXMgJywnIGNoYW5nZSBpdCB0byAnLidcbiAgICAgICAgaWYgKHZhbHVlPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgZGVjaW1hbCBzZXBhcmF0b3IgaXMgJywnIGNoYW5nZSBpdCB0byAnLicgZm9yIGxldCB0aGUgZm9ybWF0dGluZyB3b3Jrcy5cbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5jaGFuZ2VEZWNpbWFsU2VwYXJhdG9yV2hlbkl0c0NvbW1hKHZhbHVlKTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdjb2VyY2VOdW1iZXJQcm9wZXJ0eSBhZnRlciBjaGFuZ2UgZGVjaW1hbCBzZXBhcmF0b3IgdmFsdWUgaXMnLCB2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUsIGZhbGxiYWNrVmFsdWUpO1xuICAgIH1cblxuICAgIC8vIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL3BhcnNlLW1zLlxuICAgIC8vIG1vdmVkIHRvIGludGVybmFsIGZ1bmN0aW9uIGJlY2F1c2UgcGFyc2UtbXMgaXMgbm93IHB1cmUgRVNNLlxuICAgIHByaXZhdGUgcGFyc2VNcyhtaWxsaXNlY29uZHM6IG51bWJlcikge1xuICAgICAgICBpZiAodHlwZW9mIG1pbGxpc2Vjb25kcyAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGEgbnVtYmVyJylcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXlzOiBNYXRoLnRydW5jKG1pbGxpc2Vjb25kcyAvIDg2NDAwMDAwKSxcbiAgICAgICAgICAgIGhvdXJzOiBNYXRoLnRydW5jKG1pbGxpc2Vjb25kcyAvIDM2MDAwMDApICUgMjQsXG4gICAgICAgICAgICBtaW51dGVzOiBNYXRoLnRydW5jKG1pbGxpc2Vjb25kcyAvIDYwMDAwKSAlIDYwLFxuICAgICAgICAgICAgc2Vjb25kczogTWF0aC50cnVuYyhtaWxsaXNlY29uZHMgLyAxMDAwKSAlIDYwLFxuICAgICAgICAgICAgbWlsbGlzZWNvbmRzOiBNYXRoLnRydW5jKG1pbGxpc2Vjb25kcykgJSAxMDAwXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3JhZmFlbHJpbmFsZGkvYWRkLXplcm8uXG4gICAgLy8gbW92ZWQgdG8gaW50ZXJuYWwgZnVuY3Rpb24gYi9jIGFkZFplcm8gaXMgdW5tYWludGFpbmVkICg3KyB5ZWFycykuXG4gICAgLy8gc3RyaXBwZWQgb3V0IG5lZ2F0aXZlIHNpZ24gbG9naWMgc2luY2Ugd2UncmUgYWxyZWFkeSBkb2luZyBpdCBlbHNld2hlcmUuXG4gICAgcHJpdmF0ZSBhZGRaZXJvKHZhbHVlOiBudW1iZXIsIGRpZ2l0cyA9IDIpIHtcbiAgICAgICAgZGlnaXRzID0gZGlnaXRzIHx8IDJcblxuICAgICAgICBsZXQgc3RyID0gdmFsdWUudG9TdHJpbmcoKVxuICAgICAgICBsZXQgc2l6ZSA9IDBcblxuICAgICAgICBzaXplID0gZGlnaXRzIC0gc3RyLmxlbmd0aCArIDFcbiAgICAgICAgc3RyID0gbmV3IEFycmF5KHNpemUpLmpvaW4oJzAnKS5jb25jYXQoc3RyKVxuXG4gICAgICAgIHJldHVybiBzdHJcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzQ3VycmVuY3lTaG91bGRCZU9uUmlnaHQoY3VycmVuY3lTeW1ib2w6IHN0cmluZykge1xuICAgICAgICBsZXQgcmVzID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKGN1cnJlbmN5U3ltYm9sID09IFwi4oKsXCIgfHxcbiAgICAgICAgICAgIGN1cnJlbmN5U3ltYm9sID09IFwi4oKqXCIgfHxcbiAgICAgICAgICAgIGN1cnJlbmN5U3ltYm9sID09IFwiRnRcIiB8fFxuICAgICAgICAgICAgY3VycmVuY3lTeW1ib2wgPT0gXCJLxI1cIiB8fFxuICAgICAgICAgICAgY3VycmVuY3lTeW1ib2wgPT0gXCLRgNGD0LFcIiB8fFxuICAgICAgICAgICAgY3VycmVuY3lTeW1ib2wgPT0gXCJ6xYJcIiB8fFxuICAgICAgICAgICAgY3VycmVuY3lTeW1ib2wgPT0gXCJrci5cIikge1xuICAgICAgICAgICAgcmVzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjdXRWYWx1ZUJ5RnJhY3Rpb25EaWdpdHModmFsdWU6IHN0cmluZywgbWF4RnJhY3Rpb25EaWdpdHM6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIGxldCByZXMgPSB2YWx1ZTtcbiAgICAgICAgbWF4RnJhY3Rpb25EaWdpdHMgPSBtYXhGcmFjdGlvbkRpZ2l0cyB8fCAyO1xuICAgICAgICBjb25zdCBkZWNpbWFsU2VwYXJhdG9yID0gdGhpcy5nZXREZWNpbWFsU2VwYXJhdG9yKCk7XG5cbiAgICAgICAgaWYgKHZhbHVlLmluY2x1ZGVzKGRlY2ltYWxTZXBhcmF0b3IpKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZUFyciA9IHZhbHVlLnNwbGl0KGRlY2ltYWxTZXBhcmF0b3IpO1xuXG4gICAgICAgICAgICAvLyBpZiAodmFsdWVBcnJbMV0ubGVuZ3RoIDwgbWF4RnJhY3Rpb25EaWdpdHMpIHtcbiAgICAgICAgICAgIHZhbHVlQXJyWzFdID0gdmFsdWVBcnJbMV0ucGFkRW5kKG1heEZyYWN0aW9uRGlnaXRzLCAnMCcpO1xuICAgICAgICAgICAgLy8gfVxuXG4gICAgICAgICAgICByZXMgPSBgJHt2YWx1ZUFyclswXX0ke2RlY2ltYWxTZXBhcmF0b3J9JHt2YWx1ZUFyclsxXS5zbGljZSgwLCBtYXhGcmFjdGlvbkRpZ2l0cyl9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgcGFyc2VEYXRlKGRhdGVTdHI6IHN0cmluZywgc2hvd1RpbWUgPSBmYWxzZSk6IERhdGUge1xuICAgICAgICBsZXQgcmV0VmFsOiBEYXRlID0gbnVsbDtcbiAgICAgICAgaWYgKGRhdGVTdHIgIT09ICcnKSB7XG4gICAgICAgICAgICByZXRWYWwgPSBuZXcgRGF0ZShkYXRlU3RyKTtcblxuICAgICAgICAgICAgLy8gQ29udmVydCB0byBkYXRlIHdpdGggbm8gb2Zmc2V0LlxuICAgICAgICAgICAgaWYgKCFzaG93VGltZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gZGF0ZVN0ci5pbmRleE9mKCdUJyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGVTdHIgPSBkYXRlU3RyLnN1YnN0cmluZygwLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZVRleHQgPSBkYXRlU3RyLnNwbGl0KCctJyk7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGVUZXh0Lmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB5ZWFyID0gTnVtYmVyKGRhdGVUZXh0WzBdKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbW9udGggPSBOdW1iZXIoZGF0ZVRleHRbMV0pIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF5ID0gTnVtYmVyKGRhdGVUZXh0WzJdKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0VmFsID0gbmV3IERhdGUoeWVhciwgbW9udGgsIGRheSwgMCwgcmV0VmFsLmdldFRpbWV6b25lT2Zmc2V0KCkgKiAtMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXRWYWwgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmdldEZ1bGxZZWFyKCksIHJldFZhbC5nZXRNb250aCgpLCByZXRWYWwuZ2V0RGF0ZSgpLCByZXRWYWwuZ2V0SG91cnMoKSxcbiAgICAgICAgICAgICAgICAgICAgcmV0VmFsLmdldE1pbnV0ZXMoKSArIHJldFZhbC5nZXRUaW1lem9uZU9mZnNldCgpICogLTEsIHJldFZhbC5nZXRTZWNvbmRzKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChyZXRWYWwgJiYgaXNOYU4ocmV0VmFsLmdldFRpbWUoKSkpIHtcbiAgICAgICAgICAgIHJldFZhbCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldFZhbDtcbiAgICB9XG5cbiAgICBzdHJpbmdpZnlEYXRlKGRhdGU6IERhdGUsIHNob3dUaW1lID0gZmFsc2UpOiBzdHJpbmcge1xuICAgICAgICBpZiAoZGF0ZSkge1xuICAgICAgICAgICAgaWYgKHNob3dUaW1lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGUudG9JU09TdHJpbmcoKTsgLy8gaW5jbHVkZSAtIG9mZnNldFxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlVGV4dCA9IFtdO1xuICAgICAgICAgICAgICAgIGRhdGVUZXh0LnB1c2goXG4gICAgICAgICAgICAgICAgICAgIGRhdGUuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgJy0nLFxuICAgICAgICAgICAgICAgICAgICBkYXRlLmdldE1vbnRoKCkgKyAxLFxuICAgICAgICAgICAgICAgICAgICAnLScsXG4gICAgICAgICAgICAgICAgICAgIGRhdGUuZ2V0RGF0ZSgpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0ZVRleHQuam9pbignJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc1ZhbHVlSHRtbCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGxldCByZXMgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgUkVHRVhQID0gLzxcXC8/W2Etel1bXFxzXFxTXSo+L2k7XG4gICAgICAgIHJlcyA9IFJFR0VYUC50ZXN0KHZhbHVlKTtcblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGlzSnNvblN0cmluZyhzdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgSlNPTi5wYXJzZShzdHIpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZ2V0U3ZnRWxlbWVudEZyb21TdHJpbmcoZG9jdW1lbnQsIHN2Z0NvbnRlbnQ6IHN0cmluZyk6IFNWR0VsZW1lbnQge1xuICAgICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdESVYnKTtcbiAgICAgICAgLy8gZGl2LmNsYXNzTmFtZSA9ICdzdmctaWNvbic7XG4gICAgICAgIC8vIEFkZCBjbGFzcyBzdmctaWNvblxuICAgICAgICBpZiAoc3ZnQ29udGVudD8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZGl2LmlubmVySFRNTCA9IHN2Z0NvbnRlbnQucmVwbGFjZSgnPHN2ZyAnLCAnPHN2ZyBjbGFzcz1cInN2Zy1pY29uXCIgJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGRpdi5xdWVyeVNlbGVjdG9yKCdzdmcnKSB8fFxuICAgICAgICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdwYXRoJylcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBmb3JtYXRQZXJjZW50KHZhbHVlOiBhbnksIGRpZ2l0c0luZm8gPSAnMS4wLTInKSB7XG4gICAgZm9ybWF0UGVyY2VudCh2YWx1ZTogYW55LCBtaW5GcmFjdGlvbkRpZ2l0cyA9IDAsIG1heEZyYWN0aW9uRGlnaXRzID0gMikge1xuICAgICAgICBtaW5GcmFjdGlvbkRpZ2l0cyA9IGNvZXJjZU51bWJlclByb3BlcnR5KG1pbkZyYWN0aW9uRGlnaXRzLCBudWxsKTtcbiAgICAgICAgbWF4RnJhY3Rpb25EaWdpdHMgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eShtYXhGcmFjdGlvbkRpZ2l0cywgbnVsbCk7XG5cbiAgICAgICAgdmFsdWUgPSB0aGlzLmN1dFZhbHVlQnlGcmFjdGlvbkRpZ2l0cyh2YWx1ZSwgbWF4RnJhY3Rpb25EaWdpdHMpO1xuICAgICAgICBjb25zdCBudW1iZXIgPSB0aGlzLnByZXBhcmVOdW1iZXJUb0Zvcm1hdCh2YWx1ZSk7XG5cbiAgICAgICAgaWYgKG51bWJlciA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuICcwJSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gZm9ybWF0UGVyY2VudChudW1iZXIgLyAxMDAsIHRoaXMuY3VsdHVyZSwgZGlnaXRzSW5mbyk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEludGwuTnVtYmVyRm9ybWF0KHRoaXMuY3VsdHVyZSwge1xuICAgICAgICAgICAgICAgIHN0eWxlOiAncGVyY2VudCcsXG4gICAgICAgICAgICAgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiBtaW5GcmFjdGlvbkRpZ2l0cyB8fCAwLFxuICAgICAgICAgICAgICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0czogbWF4RnJhY3Rpb25EaWdpdHMgfHwgTWF0aC5tYXgoMiwgbWluRnJhY3Rpb25EaWdpdHMpLFxuICAgICAgICAgICAgfSkuZm9ybWF0KG51bWJlciAvIDEwMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBmb3JtYXRDdXJyZW5jeSh2YWx1ZTogYW55LCBjdXJyZW5jeVNpZ24gPSAnJywgZGlnaXRzSW5mbyA9ICcxLjItMicpIHtcbiAgICBmb3JtYXRDdXJyZW5jeSh2YWx1ZTogYW55LCBjdXJyZW5jeVNpZ24gPSAnJywgbWluRnJhY3Rpb25EaWdpdHMgPSAyLCBtYXhGcmFjdGlvbkRpZ2l0cyA9IDIsIHVzZUdyb3VwaW5nID0gdHJ1ZSkge1xuICAgICAgICBtaW5GcmFjdGlvbkRpZ2l0cyA9IGNvZXJjZU51bWJlclByb3BlcnR5KG1pbkZyYWN0aW9uRGlnaXRzLCBudWxsKTtcbiAgICAgICAgbWF4RnJhY3Rpb25EaWdpdHMgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eShtYXhGcmFjdGlvbkRpZ2l0cywgbnVsbCk7XG5cbiAgICAgICAgbGV0IHJlcyA9ICcnO1xuXG4gICAgICAgIC8vIElmIHRoZSBkZWNpbWFsIHNlcGFyYXRvciBpcyB0aGUgbGFzdCBkaWdpdFxuICAgICAgICAvLyBpZiAodmFsdWUubGVuZ3RoID4gMCAmJiB2YWx1ZS5pbmRleE9mKHRoaXMuZ2V0RGVjaW1hbFNlcGFyYXRvcigpKSA9PT0gdmFsdWUubGVuZ3RoIC0xKSB7XG4gICAgICAgIC8vICAgICByZXMgPSB2YWx1ZTtcbiAgICAgICAgLy8gfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5jdXRWYWx1ZUJ5RnJhY3Rpb25EaWdpdHModmFsdWUsIG1heEZyYWN0aW9uRGlnaXRzKTtcbiAgICAgICAgICAgIGNvbnN0IG51bWJlciA9IHRoaXMucHJlcGFyZU51bWJlclRvRm9ybWF0KHZhbHVlKTtcbiAgICAgICAgICAgIGNvbnN0IHN0eWxlT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAvLyBzdHlsZTogJ2N1cnJlbmN5JyxcbiAgICAgICAgICAgICAgICAvLyBjdXJyZW5jeVNpZ246IGN1cnJlbmN5U2lnbixcbiAgICAgICAgICAgICAgICB1c2VHcm91cGluZzogdXNlR3JvdXBpbmcsXG4gICAgICAgICAgICAgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiBtaW5GcmFjdGlvbkRpZ2l0cyB8fCBNYXRoLm1pbigyLCBtYXhGcmFjdGlvbkRpZ2l0cyB8fCAyKSxcbiAgICAgICAgICAgICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IG1heEZyYWN0aW9uRGlnaXRzIHx8IE1hdGgubWF4KDIsIG1pbkZyYWN0aW9uRGlnaXRzKSxcbiAgICAgICAgICAgIH07XG4gICAgXG4gICAgICAgICAgICBpZiAobnVtYmVyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gcmV0dXJuIGZvcm1hdEN1cnJlbmN5KDAsIHRoaXMuY3VsdHVyZSwgY3VycmVuY3lTaWduLCB1bmRlZmluZWQsIGRpZ2l0c0luZm8pO1xuICAgICAgICAgICAgICAgIHJlcyA9IG5ldyBJbnRsLk51bWJlckZvcm1hdCh0aGlzLmN1bHR1cmUsIHN0eWxlT3B0aW9ucykuZm9ybWF0KDApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyByZXR1cm4gZm9ybWF0Q3VycmVuY3kodmFsdWUsIHRoaXMuY3VsdHVyZSwgY3VycmVuY3lTaWduLCB1bmRlZmluZWQsIGRpZ2l0c0luZm8pO1xuICAgICAgICAgICAgICAgIHJlcyA9IG5ldyBJbnRsLk51bWJlckZvcm1hdCh0aGlzLmN1bHR1cmUsIHN0eWxlT3B0aW9ucykuZm9ybWF0KG51bWJlcik7XG4gICAgICAgICAgICB9XG4gICAgXG4gICAgICAgICAgICBpZiAoY3VycmVuY3lTaWduLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICByZXMgPSB0aGlzLmlzQ3VycmVuY3lTaG91bGRCZU9uUmlnaHQoY3VycmVuY3lTaWduKSA/IGAke3Jlc30gJHtjdXJyZW5jeVNpZ259YCA6IGAke2N1cnJlbmN5U2lnbn0gJHtyZXN9YFxuICAgICAgICAgICAgfVxuICAgICAgICAvLyB9XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICAvLyBmb3JtYXREZWNpbWFsKHZhbHVlOiBhbnksIGRpZ2l0c0luZm8gPSAnMS4yLTInKSB7XG4gICAgZm9ybWF0RGVjaW1hbCh2YWx1ZTogYW55LCBtaW5GcmFjdGlvbkRpZ2l0cyA9IDIsIG1heEZyYWN0aW9uRGlnaXRzID0gMiwgdXNlR3JvdXBpbmc6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgICAgIG1pbkZyYWN0aW9uRGlnaXRzID0gY29lcmNlTnVtYmVyUHJvcGVydHkobWluRnJhY3Rpb25EaWdpdHMsIG51bGwpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnZm9ybWF0RGVjaW1hbCBtaW5GcmFjdGlvbkRpZ2l0cyB2YWx1ZSBpcycsIG1pbkZyYWN0aW9uRGlnaXRzKTtcbiAgICAgICAgbWF4RnJhY3Rpb25EaWdpdHMgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eShtYXhGcmFjdGlvbkRpZ2l0cywgbnVsbCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdmb3JtYXREZWNpbWFsIG1pbkZyYWN0aW9uRGlnaXRzIHZhbHVlIGlzJywgbWF4RnJhY3Rpb25EaWdpdHMpO1xuXG4gICAgICAgIHZhbHVlID0gdGhpcy5jdXRWYWx1ZUJ5RnJhY3Rpb25EaWdpdHModmFsdWUsIG1heEZyYWN0aW9uRGlnaXRzKTtcbiAgICAgICAgY29uc3QgbnVtYmVyID0gdGhpcy5wcmVwYXJlTnVtYmVyVG9Gb3JtYXQodmFsdWUpO1xuICAgICAgICBcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ251bWJlciB2YWx1ZSBpcycsIG51bWJlcik7XG5cbiAgICAgICAgaWYgKG51bWJlciA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuICcwJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHJldHVybiBmb3JtYXROdW1iZXIodmFsdWUsIHRoaXMuY3VsdHVyZSwgZGlnaXRzSW5mbyk7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQodGhpcy5jdWx0dXJlLCB7XG4gICAgICAgICAgICAgICAgdXNlR3JvdXBpbmc6IHVzZUdyb3VwaW5nLFxuICAgICAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogbWluRnJhY3Rpb25EaWdpdHMgfHwgTWF0aC5taW4oMiwgbWF4RnJhY3Rpb25EaWdpdHMgfHwgMiksXG4gICAgICAgICAgICAgICAgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiBtYXhGcmFjdGlvbkRpZ2l0cyB8fCBNYXRoLm1heCgyLCBtaW5GcmFjdGlvbkRpZ2l0cyksXG4gICAgICAgICAgICB9KS5mb3JtYXQobnVtYmVyKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0ludGwuTnVtYmVyRm9ybWF0IHZhbHVlIGlzJywgcmVzKTtcblxuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGZvcm1hdE51bWJlcih2YWx1ZTogYW55LCBkaWdpdHNJbmZvID0gJzEuMC0wJyk6IHN0cmluZyB7XG4gICAgZm9ybWF0TnVtYmVyKHZhbHVlOiBhbnksIHVzZUdyb3VwaW5nID0gdHJ1ZSk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IG51bWJlciA9IHRoaXMucHJlcGFyZU51bWJlclRvRm9ybWF0KHZhbHVlKTtcblxuICAgICAgICBpZiAobnVtYmVyID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gJzAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcmV0dXJuIGZvcm1hdE51bWJlcih2YWx1ZSwgdGhpcy5jdWx0dXJlLCBkaWdpdHNJbmZvKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgSW50bC5OdW1iZXJGb3JtYXQodGhpcy5jdWx0dXJlLCB7XG4gICAgICAgICAgICAgICAgdXNlR3JvdXBpbmc6IHVzZUdyb3VwaW5nLFxuICAgICAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMCxcbiAgICAgICAgICAgICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IDAsXG4gICAgICAgICAgICB9KS5mb3JtYXQobnVtYmVyKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBhIG51bWJlciBpbiBtaWxsaXNlY29uZHMgdG8gYSBzdGFuZGFyZCBkdXJhdGlvbiBzdHJpbmcuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gZHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBmb3JtYXREdXJhdGlvbiBvcHRpb25zIG9iamVjdFxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubGVhZGluZz1mYWxzZV0gLSBhZGQgbGVhZGluZyB6ZXJvXG4gICAgICogQHJldHVybnMgc3RyaW5nIC0gZm9ybWF0dGVkIGR1cmF0aW9uIHN0cmluZ1xuICAgICovXG4gICAgZm9ybWF0RHVyYXRpb24odmFsdWUsIG9wdGlvbnM6IHsgbGVhZGluZz86IGJvb2xlYW4sIGR1cmF0aW9uPzogJ21pbGxpc2Vjb25kcycgfCAnc2Vjb25kcycgfSA9IHt9KTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgaXNOdW1iZXIgPSBfaXNOdW1iZXJWYWx1ZSh2YWx1ZSk7XG5cbiAgICAgICAgaWYgKCFpc051bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG51bWJlciA9IHRoaXMucHJlcGFyZU51bWJlclRvRm9ybWF0KHZhbHVlKTtcblxuICAgICAgICAgICAgY29uc3QgbGVhZGluZyA9IG9wdGlvbnM/LmxlYWRpbmcgfHwgdHJ1ZTtcbiAgICAgICAgICAgIGNvbnN0IGR1cmF0aW9uID0gb3B0aW9ucz8uZHVyYXRpb24gfHwgJ21pbGxpc2Vjb25kcyc7XG4gICAgICAgICAgICBpZiAoZHVyYXRpb24gPT09ICdzZWNvbmRzJykge1xuICAgICAgICAgICAgICAgIG51bWJlciA9IG51bWJlciAqIDEwMDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkTXMgPSBudW1iZXIgPCAwID8gLW51bWJlciA6IG51bWJlcjtcbiAgICAgICAgICAgIGNvbnN0IHNpZ24gPSBudW1iZXIgPD0gLTEwMDAgPyAnLScgOiAnJztcbiAgICAgICAgICAgIGNvbnN0IHQgPSB0aGlzLnBhcnNlTXModW5zaWduZWRNcyk7XG4gICAgICAgICAgICBjb25zdCBzZWNvbmRzID0gdGhpcy5hZGRaZXJvKHQuc2Vjb25kcyk7XG5cbiAgICAgICAgICAgIGlmICh0LmRheXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2lnbiArIHQuZGF5cyArICc6JyArIHRoaXMuYWRkWmVybyh0LmhvdXJzKSArICc6JyArIHRoaXMuYWRkWmVybyh0Lm1pbnV0ZXMpICsgJzonICsgc2Vjb25kc1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodC5ob3Vycykge1xuICAgICAgICAgICAgICAgIHJldHVybiBzaWduICsgKGxlYWRpbmcgPyB0aGlzLmFkZFplcm8odC5ob3VycykgOiB0LmhvdXJzKSArICc6JyArIHRoaXMuYWRkWmVybyh0Lm1pbnV0ZXMpICsgJzonICsgc2Vjb25kc1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gc2lnbiArIChsZWFkaW5nID8gdGhpcy5hZGRaZXJvKHQubWludXRlcykgOiB0Lm1pbnV0ZXMpICsgJzonICsgc2Vjb25kc1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5jcmVtZW50TnVtYmVyKHZhbHVlOiBhbnkpOiBzdHJpbmcge1xuICAgICAgICBsZXQgbnVtYmVyVmFsdWUgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSwgMCk7XG4gICAgICAgIHJldHVybiAoKytudW1iZXJWYWx1ZSkudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBkZWNyZW1lbnROdW1iZXIodmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgICAgIGxldCBudW1iZXJWYWx1ZSA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlLCAwKTtcbiAgICAgICAgcmV0dXJuICgtLW51bWJlclZhbHVlKS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGdldERlY2ltYWxTZXBhcmF0b3IoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgbnVtYmVyV2l0aERlY2ltYWxTZXBhcmF0b3IgPSAxLjE7XG5cbiAgICAgICAgcmV0dXJuIG51bWJlcldpdGhEZWNpbWFsU2VwYXJhdG9yXG4gICAgICAgICAgICAudG9Mb2NhbGVTdHJpbmcodGhpcy5jdWx0dXJlKVxuICAgICAgICAgICAgLnN1YnN0cmluZygxLCAyKTtcbiAgICB9XG5cbiAgICBjaGFuZ2VEZWNpbWFsU2VwYXJhdG9yV2hlbkl0c0NvbW1hKHZhbHVlOiBzdHJpbmcsIHJldmVyc2UgPSBmYWxzZSk6IHN0cmluZyB7XG4gICAgICAgIC8vIElmIHRoZSBkZWNpbWFsIHNlcGFyYXRvciBpcyAnLCdcbiAgICAgICAgaWYgKHRoaXMuZ2V0RGVjaW1hbFNlcGFyYXRvcigpID09PSAnLCcpIHtcbiAgICAgICAgICAgIC8vIElmIHJldmVyc2UgY2hhbmdlIHRoZSBudW1iZXIgZnJvbSAnLicgdG8gJywnIGVsc2UgZG8gdGhlIG9wcG9zaXRlLlxuICAgICAgICAgICAgdmFsdWUgPSByZXZlcnNlID8gdmFsdWUucmVwbGFjZSgnLicsICcsJykgOiB2YWx1ZS5yZXBsYWNlKCcsJywgJy4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBpc0VxdWFsTnVtYmVyKG51bWJlckFzU3RyaW5nOiBzdHJpbmcsIG51bWJlckFzU3RyaW5nMjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IG51bWJlciA9IHRoaXMucHJlcGFyZU51bWJlclRvRm9ybWF0KG51bWJlckFzU3RyaW5nKTtcbiAgICAgICAgY29uc3QgbnVtYmVyMiA9IHRoaXMucHJlcGFyZU51bWJlclRvRm9ybWF0KG51bWJlckFzU3RyaW5nMik7XG5cbiAgICAgICAgcmV0dXJuIG51bWJlciA9PT0gbnVtYmVyMjtcbiAgICB9XG59XG4iXX0=
@@ -27,7 +27,7 @@ export class PepQuantitySelectorValidationDirective {
27
27
  validateValue(value) {
28
28
  const newValue = this.validatorService.validateNumber(value, this.allowDecimal);
29
29
  // this.hostElement.nativeElement['value'] = newValue ? newValue : 0;
30
- this.hostElement.nativeElement['value'] = newValue ? this.utilitiesService.changeDecimalSeperatorWhenItsComma(newValue) : 0;
30
+ this.hostElement.nativeElement['value'] = newValue ? this.utilitiesService.changeDecimalSeparatorWhenItsComma(newValue) : 0;
31
31
  }
32
32
  }
33
33
  PepQuantitySelectorValidationDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: PepQuantitySelectorValidationDirective, deps: [{ token: i0.ElementRef }, { token: i1.PepUtilitiesService }, { token: i1.PepValidatorService }], target: i0.ɵɵFactoryTarget.Directive });
@@ -46,4 +46,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImpor
46
46
  type: HostListener,
47
47
  args: ['keydown', ['$event']]
48
48
  }] } });
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVhbnRpdHktc2VsZWN0b3ItdmFsaWRhdGlvbi5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL3F1YW50aXR5LXNlbGVjdG9yL3F1YW50aXR5LXNlbGVjdG9yLXZhbGlkYXRpb24uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDSCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssR0FFUixNQUFNLGVBQWUsQ0FBQzs7O0FBTXZCLE1BQU0sT0FBTyxzQ0FBc0M7SUFLL0MsWUFDWSxXQUF1QixFQUN2QixnQkFBcUMsRUFDckMsZ0JBQXFDO1FBRnJDLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQ3ZCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBcUI7UUFDckMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFxQjtRQUxqRCxrQkFBYSxHQUFHLEVBQUUsQ0FBQztJQU1oQixDQUFDO0lBRUosUUFBUTtRQUNKLEVBQUU7SUFDTixDQUFDO0lBR0QsUUFBUSxDQUFDLENBQUM7UUFDTixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFHRCxTQUFTLENBQUMsQ0FBZ0I7UUFDdEIsTUFBTSxhQUFhLEdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVoRCxrQ0FBa0M7UUFDbEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFFbkMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3RFLElBQUksUUFBUTtZQUFFLE9BQU87O1lBQ2hCLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQWE7UUFDdkIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FDakQsS0FBSyxFQUNMLElBQUksQ0FBQyxZQUFZLENBQ3BCLENBQUM7UUFDRixxRUFBcUU7UUFDckUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsa0NBQWtDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoSSxDQUFDOzttSUF2Q1Esc0NBQXNDO3VIQUF0QyxzQ0FBc0M7MkZBQXRDLHNDQUFzQztrQkFIbEQsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsbUJBQW1CO2lCQUNoQztxS0FFWSxZQUFZO3NCQUFwQixLQUFLO2dCQWVOLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBTWxDLFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRMb2NhbGVOdW1iZXJTeW1ib2wsIE51bWJlclN5bWJvbCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbnB1dCxcbiAgICBPbkluaXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUGVwVXRpbGl0aWVzU2VydmljZSwgUGVwVmFsaWRhdG9yU2VydmljZSB9IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9uZ3gtbGliJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbcGVwUXNWYWxpZGF0aW9uXScsXG59KVxuZXhwb3J0IGNsYXNzIFBlcFF1YW50aXR5U2VsZWN0b3JWYWxpZGF0aW9uRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBASW5wdXQoKSBhbGxvd0RlY2ltYWw6IGJvb2xlYW47XG5cbiAgICBwcmV2aW91c1ZhbHVlID0gJyc7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBob3N0RWxlbWVudDogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSB1dGlsaXRpZXNTZXJ2aWNlOiBQZXBVdGlsaXRpZXNTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHZhbGlkYXRvclNlcnZpY2U6IFBlcFZhbGlkYXRvclNlcnZpY2VcbiAgICApIHt9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgLy9cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdjaGFuZ2UnLCBbJyRldmVudCddKVxuICAgIG9uQ2hhbmdlKGUpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZVZhbHVlKHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gICAgb25LZXlEb3duKGU6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxWYWx1ZTogc3RyaW5nID0gZS50YXJnZXRbJ3ZhbHVlJ107XG5cbiAgICAgICAgLy8gc2F2ZSB2YWx1ZSBiZWZvcmUga2V5ZG93biBldmVudFxuICAgICAgICB0aGlzLnByZXZpb3VzVmFsdWUgPSBvcmlnaW5hbFZhbHVlO1xuXG4gICAgICAgIGNvbnN0IGlzTnVtYmVyID0gdGhpcy52YWxpZGF0b3JTZXJ2aWNlLmlzTnVtYmVyKGUsIHRoaXMuYWxsb3dEZWNpbWFsKTtcbiAgICAgICAgaWYgKGlzTnVtYmVyKSByZXR1cm47XG4gICAgICAgIGVsc2UgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhbGlkYXRlVmFsdWUodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMudmFsaWRhdG9yU2VydmljZS52YWxpZGF0ZU51bWJlcihcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgdGhpcy5hbGxvd0RlY2ltYWxcbiAgICAgICAgKTtcbiAgICAgICAgLy8gdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50Wyd2YWx1ZSddID0gbmV3VmFsdWUgPyBuZXdWYWx1ZSA6IDA7XG4gICAgICAgIHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudFsndmFsdWUnXSA9IG5ld1ZhbHVlID8gdGhpcy51dGlsaXRpZXNTZXJ2aWNlLmNoYW5nZURlY2ltYWxTZXBlcmF0b3JXaGVuSXRzQ29tbWEobmV3VmFsdWUpIDogMDtcbiAgICB9XG59XG4iXX0=
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVhbnRpdHktc2VsZWN0b3ItdmFsaWRhdGlvbi5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGliL3F1YW50aXR5LXNlbGVjdG9yL3F1YW50aXR5LXNlbGVjdG9yLXZhbGlkYXRpb24uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDSCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssR0FFUixNQUFNLGVBQWUsQ0FBQzs7O0FBTXZCLE1BQU0sT0FBTyxzQ0FBc0M7SUFLL0MsWUFDWSxXQUF1QixFQUN2QixnQkFBcUMsRUFDckMsZ0JBQXFDO1FBRnJDLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQ3ZCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBcUI7UUFDckMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFxQjtRQUxqRCxrQkFBYSxHQUFHLEVBQUUsQ0FBQztJQU1oQixDQUFDO0lBRUosUUFBUTtRQUNKLEVBQUU7SUFDTixDQUFDO0lBR0QsUUFBUSxDQUFDLENBQUM7UUFDTixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFHRCxTQUFTLENBQUMsQ0FBZ0I7UUFDdEIsTUFBTSxhQUFhLEdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVoRCxrQ0FBa0M7UUFDbEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFFbkMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3RFLElBQUksUUFBUTtZQUFFLE9BQU87O1lBQ2hCLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQWE7UUFDdkIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FDakQsS0FBSyxFQUNMLElBQUksQ0FBQyxZQUFZLENBQ3BCLENBQUM7UUFDRixxRUFBcUU7UUFDckUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsa0NBQWtDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoSSxDQUFDOzttSUF2Q1Esc0NBQXNDO3VIQUF0QyxzQ0FBc0M7MkZBQXRDLHNDQUFzQztrQkFIbEQsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsbUJBQW1CO2lCQUNoQztxS0FFWSxZQUFZO3NCQUFwQixLQUFLO2dCQWVOLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBTWxDLFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRMb2NhbGVOdW1iZXJTeW1ib2wsIE51bWJlclN5bWJvbCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbnB1dCxcbiAgICBPbkluaXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUGVwVXRpbGl0aWVzU2VydmljZSwgUGVwVmFsaWRhdG9yU2VydmljZSB9IGZyb20gJ0BwZXBwZXJpLWFkZG9ucy9uZ3gtbGliJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbcGVwUXNWYWxpZGF0aW9uXScsXG59KVxuZXhwb3J0IGNsYXNzIFBlcFF1YW50aXR5U2VsZWN0b3JWYWxpZGF0aW9uRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBASW5wdXQoKSBhbGxvd0RlY2ltYWw6IGJvb2xlYW47XG5cbiAgICBwcmV2aW91c1ZhbHVlID0gJyc7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBob3N0RWxlbWVudDogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSB1dGlsaXRpZXNTZXJ2aWNlOiBQZXBVdGlsaXRpZXNTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHZhbGlkYXRvclNlcnZpY2U6IFBlcFZhbGlkYXRvclNlcnZpY2VcbiAgICApIHt9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgLy9cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdjaGFuZ2UnLCBbJyRldmVudCddKVxuICAgIG9uQ2hhbmdlKGUpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZVZhbHVlKHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gICAgb25LZXlEb3duKGU6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxWYWx1ZTogc3RyaW5nID0gZS50YXJnZXRbJ3ZhbHVlJ107XG5cbiAgICAgICAgLy8gc2F2ZSB2YWx1ZSBiZWZvcmUga2V5ZG93biBldmVudFxuICAgICAgICB0aGlzLnByZXZpb3VzVmFsdWUgPSBvcmlnaW5hbFZhbHVlO1xuXG4gICAgICAgIGNvbnN0IGlzTnVtYmVyID0gdGhpcy52YWxpZGF0b3JTZXJ2aWNlLmlzTnVtYmVyKGUsIHRoaXMuYWxsb3dEZWNpbWFsKTtcbiAgICAgICAgaWYgKGlzTnVtYmVyKSByZXR1cm47XG4gICAgICAgIGVsc2UgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHZhbGlkYXRlVmFsdWUodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMudmFsaWRhdG9yU2VydmljZS52YWxpZGF0ZU51bWJlcihcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgdGhpcy5hbGxvd0RlY2ltYWxcbiAgICAgICAgKTtcbiAgICAgICAgLy8gdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50Wyd2YWx1ZSddID0gbmV3VmFsdWUgPyBuZXdWYWx1ZSA6IDA7XG4gICAgICAgIHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudFsndmFsdWUnXSA9IG5ld1ZhbHVlID8gdGhpcy51dGlsaXRpZXNTZXJ2aWNlLmNoYW5nZURlY2ltYWxTZXBhcmF0b3JXaGVuSXRzQ29tbWEobmV3VmFsdWUpIDogMDtcbiAgICB9XG59XG4iXX0=