@jooler/inputs 0.0.52 → 0.0.54

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 (56) hide show
  1. package/esm2022/lib/choose-enum/choose-enum.component.mjs +2 -2
  2. package/esm2022/lib/choose-general-item/choose-general-item.component.mjs +222 -45
  3. package/esm2022/lib/choose-general-item/choose-general-item.service.mjs +24 -3
  4. package/esm2022/lib/choose-general-item/choose-object-basic-template-label-field.enum.mjs +7 -0
  5. package/esm2022/lib/choose-general-item/choose-object-basic-template.model.mjs +67 -0
  6. package/esm2022/lib/choose-general-item/choose-object-template-type.enum.mjs +7 -0
  7. package/esm2022/lib/choose-general-item-renderer/choose-general-item-renderer.component.mjs +3 -3
  8. package/esm2022/lib/custom-colors/bom-production-type.enum.mjs +11 -0
  9. package/esm2022/lib/custom-colors/enum-custom-color-mapping.mjs +32 -0
  10. package/esm2022/lib/custom-colors/enum-custom-colors.mjs +21 -0
  11. package/esm2022/lib/custom-colors/sales-order-status.enum.mjs +27 -0
  12. package/esm2022/lib/custom-theme.mjs +104 -0
  13. package/esm2022/lib/dictionary-to-params-converter.mjs +15 -0
  14. package/esm2022/lib/enum-custom-label-mapping.mjs +32 -0
  15. package/esm2022/lib/enum-helper-functions.mjs +85 -0
  16. package/esm2022/lib/enum-models/bill-status.model.mjs +25 -0
  17. package/esm2022/lib/enum-models/charge-level.enum.mjs +6 -0
  18. package/esm2022/lib/enum-models/custom-order-request-status.enum.mjs +29 -0
  19. package/esm2022/lib/enum-models/invitation-status.model.mjs +15 -0
  20. package/esm2022/lib/enum-models/invoice-status.model.mjs +15 -0
  21. package/esm2022/lib/enum-models/locker-transfer-status.enum.mjs +11 -0
  22. package/esm2022/lib/enum-models/priority.model.mjs +13 -0
  23. package/esm2022/lib/enum-models/quotation-status.model.mjs +19 -0
  24. package/esm2022/lib/enum-models/request-status.model.mjs +15 -0
  25. package/esm2022/lib/enum-string-class-map.mjs +26 -0
  26. package/esm2022/lib/json/enum-custom-label-mappings.json +10 -0
  27. package/esm2022/lib/models/choose-item-full-object-control-config.enum.mjs +6 -0
  28. package/esm2022/lib/primary-colors.mjs +9 -1
  29. package/fesm2022/inputs.mjs +844 -137
  30. package/fesm2022/inputs.mjs.map +1 -1
  31. package/lib/choose-general-item/choose-general-item.component.d.ts +44 -15
  32. package/lib/choose-general-item/choose-general-item.service.d.ts +5 -1
  33. package/lib/choose-general-item/choose-object-basic-template-label-field.enum.d.ts +5 -0
  34. package/lib/choose-general-item/choose-object-basic-template.model.d.ts +15 -0
  35. package/lib/choose-general-item/choose-object-template-type.enum.d.ts +5 -0
  36. package/lib/custom-colors/bom-production-type.enum.d.ts +5 -0
  37. package/lib/custom-colors/enum-custom-color-mapping.d.ts +11 -0
  38. package/lib/custom-colors/enum-custom-colors.d.ts +2 -0
  39. package/lib/custom-colors/sales-order-status.enum.d.ts +13 -0
  40. package/lib/custom-theme.d.ts +8 -0
  41. package/lib/dictionary-to-params-converter.d.ts +4 -0
  42. package/lib/enum-custom-label-mapping.d.ts +7 -0
  43. package/lib/enum-helper-functions.d.ts +7 -0
  44. package/lib/enum-models/bill-status.model.d.ts +12 -0
  45. package/lib/enum-models/charge-level.enum.d.ts +4 -0
  46. package/lib/enum-models/custom-order-request-status.enum.d.ts +14 -0
  47. package/lib/enum-models/invitation-status.model.d.ts +7 -0
  48. package/lib/enum-models/invoice-status.model.d.ts +13 -0
  49. package/lib/enum-models/locker-transfer-status.enum.d.ts +5 -0
  50. package/lib/enum-models/priority.model.d.ts +6 -0
  51. package/lib/enum-models/quotation-status.model.d.ts +9 -0
  52. package/lib/enum-models/request-status.model.d.ts +7 -0
  53. package/lib/enum-string-class-map.d.ts +3 -0
  54. package/lib/models/choose-item-full-object-control-config.enum.d.ts +4 -0
  55. package/lib/primary-colors.d.ts +8 -0
  56. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  import { Component, EventEmitter, forwardRef, Input, Output, } from '@angular/core';
2
2
  import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
- import { EnumHelperBaseClass } from '@jooler/shared-general-components';
3
+ import { EnumHelperBaseClass } from '../enum-helper-functions';
4
4
  import * as i0 from "@angular/core";
5
5
  import * as i1 from "@angular/common";
6
6
  import * as i2 from "@ng-select/ng-select";
@@ -202,4 +202,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
202
202
  }], close: [{
203
203
  type: Output
204
204
  }] } });
205
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hvb3NlLWVudW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW5wdXRzL3NyYy9saWIvY2hvb3NlLWVudW0vY2hvb3NlLWVudW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW5wdXRzL3NyYy9saWIvY2hvb3NlLWVudW0vY2hvb3NlLWVudW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFHTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDOzs7Ozs7QUFleEUsTUFBTSxPQUFPLG1CQUFtQjtJQUM5QixLQUFLLENBQWU7SUFDWCxRQUFRLEdBQVcsTUFBTSxDQUFDO0lBQzFCLGtCQUFrQixHQUFZLEtBQUssQ0FBQztJQUNwQyxTQUFTLEdBQVksSUFBSSxDQUFDO0lBQzFCLFlBQVksQ0FBVztJQUN2QixXQUFXLENBQU07SUFDakIsc0JBQXNCLEdBQWEsbUJBQW1CLENBQUMsMkJBQTJCLENBQUM7SUFDbkYsZUFBZSxHQUFhLEVBQUUsQ0FBQztJQUMvQixZQUFZLEdBQWEsRUFBRSxDQUFDO0lBQzVCLE1BQU0sR0FBWSxJQUFJLENBQUM7SUFDdkIsa0JBQWtCLEdBQVksS0FBSyxDQUFDO0lBQ3BDLFVBQVUsQ0FBVTtJQUNwQixLQUFLLEdBQVcsT0FBTyxDQUFDO0lBQ3hCLGNBQWMsR0FBVyxNQUFNLENBQUM7SUFDaEMsbUJBQW1CLENBQVM7SUFDNUIsaUJBQWlCLENBQVM7SUFDMUIsVUFBVSxDQUFTO0lBQ25CLFdBQVcsQ0FBUztJQUNwQixZQUFZLEdBQVksS0FBSyxDQUFDO0lBQzlCLFlB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QixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNJLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxLQUFLO3NCQUFkLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgZm9yd2FyZFJlZixcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBFbnVtSGVscGVyQmFzZUNsYXNzIH0gZnJvbSAnQGpvb2xlci9zaGFyZWQtZ2VuZXJhbC1jb21wb25lbnRzJztcclxuaW1wb3J0IHsgRW51bU9wdGlvbiB9IGZyb20gJy4uL2VudW0taGVscGVyLm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY2hvb3NlLWVudW0nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jaG9vc2UtZW51bS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY2hvb3NlLWVudW0uY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IENob29zZUVudW1Db21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgIH0sXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIENob29zZUVudW1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG4gIGl0ZW1zOiBFbnVtT3B0aW9uW107XHJcbiAgQElucHV0KCkgYXBwZW5kVG86IHN0cmluZyA9ICdib2R5JztcclxuICBASW5wdXQoKSBhbGxvd0FsbENhcHNWYWx1ZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBjbGVhcmFibGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGN1c3RvbUNvbG9yczogc3RyaW5nW107XHJcbiAgQElucHV0KCkgZW51bUNob2ljZXM6IGFueTtcclxuICBASW5wdXQoKSBnZXRWYWx1ZXNBcnJheUZyb21FbnVtOiBGdW5jdGlvbiA9IEVudW1IZWxwZXJCYXNlQ2xhc3MuZ2V0RW51bU9wdGlvbnNGcm9tRW51bUNsYXNzO1xyXG4gIEBJbnB1dCgpIHZhbHVlc1RvRGlzYWJsZTogbnVtYmVyW10gPSBbXTtcclxuICBASW5wdXQoKSB2YWx1ZXNUb0hpZGU6IG51bWJlcltdID0gW107XHJcbiAgQElucHV0KCkgaXNDaGlwOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBpc0Ryb3Bkb3duRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBpc011bHRpcGxlOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmcgPSAnbGFiZWwnO1xyXG4gIEBJbnB1dCgpIGxhYmVsVGV4dEFsaWduOiBzdHJpbmcgPSAnbGVmdCc7XHJcbiAgQElucHV0KCkgbGFiZWxUZXh0Rm9udFdlaWdodDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGxhYmVsVGV4dEZvbnRTaXplOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgcGFkZGluZ1RvcDogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgcGVyY2VudFdpZHRoOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2VsZWN0ZWRJdGVtOiBhbnk7XHJcbiAgQElucHV0KCkgd2lkdGg6IG51bWJlcjtcclxuICBASW5wdXQoKSBpc1JlYWRPbmx5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgdmlydHVhbFNjcm9sbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBPdXRwdXQoKSBjaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmICh0aGlzLmdldFZhbHVlc0FycmF5RnJvbUVudW0gIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLml0ZW1zID0gdGhpcy5nZXRWYWx1ZXNBcnJheUZyb21FbnVtKFxyXG4gICAgICAgIHRoaXMuZW51bUNob2ljZXMsXHJcbiAgICAgICAgdGhpcy5jdXN0b21Db2xvcnMsXHJcbiAgICAgICAgdGhpcy5hbGxvd0FsbENhcHNWYWx1ZXNcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnZhbHVlc1RvRGlzYWJsZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuZGlzYWJsZWRJdGVtcygpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudmFsdWVzVG9IaWRlLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5oaWRlSXRlbXMoKTtcclxuICAgIH1cclxuICAgIHRoaXMuc29ydEFuZFJlb3JkZXJJdGVtcygpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoKSB7XHJcbiAgICBpZiAodGhpcy5nZXRWYWx1ZXNBcnJheUZyb21FbnVtICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5pdGVtcyA9IHRoaXMuZ2V0VmFsdWVzQXJyYXlGcm9tRW51bShcclxuICAgICAgICB0aGlzLmVudW1DaG9pY2VzLFxyXG4gICAgICAgIHRoaXMuY3VzdG9tQ29sb3JzLFxyXG4gICAgICAgIHRoaXMuYWxsb3dBbGxDYXBzVmFsdWVzXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy52YWx1ZXNUb0Rpc2FibGUubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmRpc2FibGVkSXRlbXMoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnZhbHVlc1RvSGlkZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuaGlkZUl0ZW1zKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNvcnRBbmRSZW9yZGVySXRlbXMoKTtcclxuICB9XHJcblxyXG4gIGRpc2FibGVkSXRlbXMoKSB7XHJcbiAgICBmb3IgKGxldCB2YWx1ZSBvZiB0aGlzLnZhbHVlc1RvRGlzYWJsZSkge1xyXG4gICAgICBsZXQgaW5kZXg6IG51bWJlciA9IHRoaXMuaXRlbXMuZmluZEluZGV4KGVudW1PcHRpb24gPT4gZW51bU9wdGlvbi52YWx1ZSA9PSB2YWx1ZSk7XHJcbiAgICAgIGlmIChpbmRleCA+PSAwKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtc1tpbmRleF0uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRocm93IEVycm9yKFxyXG4gICAgICAgICAgJ0luZGV4IHdhcyBub3QgZm91bmQgZm9yIGFuIGVudW0gZWxlbWVudCBpbiB0aGUgdmFsdWVzVG9EaXNhYmxlIGFycmF5IHByb3ZpZGVkLidcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoaWRlSXRlbXMoKSB7XHJcbiAgICBmb3IgKGxldCB2YWx1ZSBvZiB0aGlzLnZhbHVlc1RvSGlkZSkge1xyXG4gICAgICBsZXQgaW5kZXg6IG51bWJlciA9IHRoaXMuaXRlbXMuZmluZEluZGV4KGVudW1PcHRpb24gPT4gZW51bU9wdGlvbi52YWx1ZSA9PSB2YWx1ZSk7XHJcbiAgICAgIGlmIChpbmRleCA+PSAwKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRocm93IEVycm9yKCdJbmRleCB3YXMgbm90IGZvdW5kIGZvciBhbiBlbnVtIGVsZW1lbnQgaW4gdGhlIHZhbHVlc1RvSGlkZSBhcnJheSBwcm92aWRlZC4nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc29ydEFuZFJlb3JkZXJJdGVtcygpOiB2b2lkIHtcclxuICAgIGNvbnN0IG5vbkRpc2FibGVkSXRlbXMgPSB0aGlzLml0ZW1zLmZpbHRlcihpdGVtID0+ICFpdGVtLmRpc2FibGVkKTtcclxuICAgIGNvbnN0IGRpc2FibGVkSXRlbXMgPSB0aGlzLml0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0uZGlzYWJsZWQpO1xyXG4gICAgbm9uRGlzYWJsZWRJdGVtcy5zb3J0KChhLCBiKSA9PiBhLmxhYmVsLmxvY2FsZUNvbXBhcmUoYi5sYWJlbCkpO1xyXG4gICAgdGhpcy5pdGVtcyA9IFsuLi5ub25EaXNhYmxlZEl0ZW1zLCAuLi5kaXNhYmxlZEl0ZW1zXTtcclxuICB9XHJcblxyXG4gIHdyaXRlVmFsdWUodHlwZTogbnVtYmVyKSB7XHJcbiAgICBpZiAodHlwZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSB0eXBlO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlID09IG51bGwpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSB0eXBlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xyXG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XHJcbiAgICB0aGlzLnByb3BvZ2F0ZVRvdWNoID0gZm47XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHByb3BhZ2F0ZUNoYW5nZSA9IChfOiBhbnkpID0+IHsgfTtcclxuICBwcml2YXRlIHByb3BvZ2F0ZVRvdWNoID0gKCkgPT4geyB9O1xyXG5cclxuICB1cGRhdGVCbHVyKCkge1xyXG4gICAgdGhpcy5wcm9wb2dhdGVUb3VjaCgpO1xyXG4gICAgdGhpcy5jbG9zZS5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdGVkSXRlbUNoYW5nZWQoKSB7XHJcbiAgICB0aGlzLnByb3BvZ2F0ZVRvdWNoKCk7XHJcbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLnNlbGVjdGVkSXRlbSk7XHJcbiAgICB0aGlzLmNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRJdGVtKTtcclxuICB9XHJcblxyXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5pc0Ryb3Bkb3duRGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IG51bGw7XHJcbiAgICB0aGlzLnByb3BvZ2F0ZVRvdWNoKCk7XHJcbiAgfVxyXG5cclxuICBzZXRTdHlsZXMoKSB7XHJcbiAgICBsZXQgc3R5bGUgPSB7XHJcbiAgICAgIHBhZGRpbmdUb3A6IHRoaXMucGFkZGluZ1RvcCArICdyZW0nLFxyXG4gICAgfTtcclxuICAgIGlmICh0aGlzLndpZHRoKSB7XHJcbiAgICAgIHN0eWxlWyd3aWR0aCddID0gdGhpcy53aWR0aCArICdyZW0nO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0eWxlO1xyXG4gIH1cclxuXHJcbiAgc2V0TGFiZWxTdHlsZSgpIHtcclxuICAgIGxldCBzdHlsZSA9IHtcclxuICAgICAgdGV4dEFsaWduOiB0aGlzLmxhYmVsVGV4dEFsaWduLFxyXG4gICAgICBmb250V2VpZ2h0OiB0aGlzLmxhYmVsVGV4dEZvbnRXZWlnaHQsXHJcbiAgICAgIGZvbnRTaXplOiB0aGlzLmxhYmVsVGV4dEZvbnRTaXplICsgJ3JlbScsXHJcbiAgICAgIHBhZGRpbmc6ICcwLjRyZW0nLFxyXG4gICAgfTtcclxuICAgIHJldHVybiBzdHlsZTtcclxuICB9XHJcbn1cclxuIiwiPGRpdj5cclxuICA8bmctc2VsZWN0IFtuZ1N0eWxlXT1cInNldFN0eWxlcygpXCIgKGJsdXIpPVwidXBkYXRlQmx1cigpXCIgYmluZExhYmVsPVwibGFiZWxcIiBiaW5kVmFsdWU9XCJ2YWx1ZVwiIFtpdGVtc109XCJpdGVtc1wiXHJcbiAgICBbdmlydHVhbFNjcm9sbF09XCJ2aXJ0dWFsU2Nyb2xsXCIgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCIgKGNoYW5nZSk9XCJvblNlbGVjdGVkSXRlbUNoYW5nZWQoKVwiXHJcbiAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkSXRlbVwiIFttdWx0aXBsZV09XCJpc011bHRpcGxlXCIgW2Rpc2FibGVkXT1cImlzRHJvcGRvd25EaXNhYmxlZFwiIFtyZWFkb25seV09XCJpc1JlYWRPbmx5XCJcclxuICAgIFtjbGVhcmFibGVdPVwiY2xlYXJhYmxlXCIgKGNsZWFyKT1cImNsZWFyKClcIiBbYXBwZW5kVG9dPVwiYXBwZW5kVG9cIiBkcm9wZG93blBvc2l0aW9uPVwiYm90dG9tXCI+XHJcbiAgICA8bmctdGVtcGxhdGUgbmctbGFiZWwtdG1wIGxldC1pdGVtPVwiaXRlbVwiIGxldC1jbGVhcj1cImNsZWFyXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0NoaXBcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNoaXBcIlxyXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgaXRlbTogaXRlbSwgc2hvd0Nyb3NzOiBjbGVhcmFibGUsIGNsZWFyOiBjbGVhciB9XCI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8ZGl2IFtuZ1N0eWxlXT1cInNldExhYmVsU3R5bGUoKVwiICpuZ0lmPVwiIWlzQ2hpcFwiPnt7IGl0ZW0ubGFiZWwgfX08L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgbmctb3B0aW9uLXRtcCBsZXQtaXRlbT1cIml0ZW1cIiBsZXQtaW5kZXg9XCJpbmRleFwiIGxldC1zZWFyY2g9XCJzZWFyY2hUZXJtXCIgbGV0LWNsZWFyPVwiY2xlYXJcIj5cclxuICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IGRpc2FibGVkOiBpdGVtLmRpc2FibGVkIH1cIj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNDaGlwXCIgY2xhc3M9XCJjaGlwXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNoaXBcIlxyXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBpdGVtOiBpdGVtLCBzaG93Q3Jvc3M6IGZhbHNlLCBjbGVhcjogY2xlYXIgfVwiPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBbbmdTdHlsZV09XCJzZXRMYWJlbFN0eWxlKClcIiAqbmdJZj1cIiFpc0NoaXBcIj57eyBpdGVtLmxhYmVsIH19PC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L25nLXNlbGVjdD5cclxuPC9kaXY+XHJcblxyXG48bmctdGVtcGxhdGUgI2NoaXAgbGV0LXNob3dDcm9zcz1cInNob3dDcm9zc1wiIGxldC1pdGVtPVwiaXRlbVwiIGxldC1jbGVhcj1cImNsZWFyXCI+XHJcbiAgPG5nLWNoaXAgW2VudW1DbGFzc109XCJlbnVtQ2hvaWNlc1wiIFt3aXRoQ3Jvc3NdPVwic2hvd0Nyb3NzXCIgW2VudW1WYWx1ZV09XCJpdGVtLnZhbHVlXCIgW2N1c3RvbUNvbG9yc109XCJjdXN0b21Db2xvcnNcIlxyXG4gICAgW2l0ZW1dPVwiaXRlbVwiIFtjbGVhcl09XCJjbGVhclwiPlxyXG4gIDwvbmctY2hpcD5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=
205
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hvb3NlLWVudW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW5wdXRzL3NyYy9saWIvY2hvb3NlLWVudW0vY2hvb3NlLWVudW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW5wdXRzL3NyYy9saWIvY2hvb3NlLWVudW0vY2hvb3NlLWVudW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFHTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7QUFjL0QsTUFBTSxPQUFPLG1CQUFtQjtJQUM5QixLQUFLLENBQWU7SUFDWCxRQUFRLEdBQVcsTUFBTSxDQUFDO0lBQzFCLGtCQUFrQixHQUFZLEtBQUssQ0FBQztJQUNwQyxTQUFTLEdBQVksSUFBSSxDQUFDO0lBQzFCLFlBQVksQ0FBVztJQUN2QixXQUFXLENBQU07SUFDakIsc0JBQXNCLEdBQWEsbUJBQW1CLENBQUMsMkJBQTJCLENBQUM7SUFDbkYsZUFBZSxHQUFhLEVBQUUsQ0FBQztJQUMvQixZQUFZLEdBQWEsRUFBRSxDQUFDO0lBQzVCLE1BQU0sR0FBWSxJQUFJLENBQUM7SUFDdkIsa0JBQWtCLEdBQVksS0FBSyxDQUFDO0lBQ3BDLFVBQVUsQ0FBVTtJQUNwQixLQUFLLEdBQVcsT0FBTyxDQUFDO0lBQ3hCLGNBQWMsR0FBVyxNQUFNLENBQUM7SUFDaEMsbUJBQW1CLENBQVM7SUFDNUIsaUJBQWlCLENBQVM7SUFDMUIsVUFBVSxDQUFTO0lBQ25CLFdBQVcsQ0FBUztJQUNwQixZQUFZLEdBQVksS0FBSyxDQUFDO0lBQzlCLFlB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QixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNJLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxLQUFLO3NCQUFkLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgZm9yd2FyZFJlZixcclxuICBJbnB1dCxcclxuICBPbkNoYW5nZXMsXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBFbnVtT3B0aW9uIH0gZnJvbSAnLi4vZW51bS1oZWxwZXIubW9kZWwnO1xyXG5pbXBvcnQgeyBFbnVtSGVscGVyQmFzZUNsYXNzIH0gZnJvbSAnLi4vZW51bS1oZWxwZXItZnVuY3Rpb25zJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY2hvb3NlLWVudW0nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jaG9vc2UtZW51bS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY2hvb3NlLWVudW0uY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IENob29zZUVudW1Db21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgIH0sXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIENob29zZUVudW1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG4gIGl0ZW1zOiBFbnVtT3B0aW9uW107XHJcbiAgQElucHV0KCkgYXBwZW5kVG86IHN0cmluZyA9ICdib2R5JztcclxuICBASW5wdXQoKSBhbGxvd0FsbENhcHNWYWx1ZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBjbGVhcmFibGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGN1c3RvbUNvbG9yczogc3RyaW5nW107XHJcbiAgQElucHV0KCkgZW51bUNob2ljZXM6IGFueTtcclxuICBASW5wdXQoKSBnZXRWYWx1ZXNBcnJheUZyb21FbnVtOiBGdW5jdGlvbiA9IEVudW1IZWxwZXJCYXNlQ2xhc3MuZ2V0RW51bU9wdGlvbnNGcm9tRW51bUNsYXNzO1xyXG4gIEBJbnB1dCgpIHZhbHVlc1RvRGlzYWJsZTogbnVtYmVyW10gPSBbXTtcclxuICBASW5wdXQoKSB2YWx1ZXNUb0hpZGU6IG51bWJlcltdID0gW107XHJcbiAgQElucHV0KCkgaXNDaGlwOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBpc0Ryb3Bkb3duRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBpc011bHRpcGxlOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmcgPSAnbGFiZWwnO1xyXG4gIEBJbnB1dCgpIGxhYmVsVGV4dEFsaWduOiBzdHJpbmcgPSAnbGVmdCc7XHJcbiAgQElucHV0KCkgbGFiZWxUZXh0Rm9udFdlaWdodDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGxhYmVsVGV4dEZvbnRTaXplOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgcGFkZGluZ1RvcDogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgcGVyY2VudFdpZHRoOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2VsZWN0ZWRJdGVtOiBhbnk7XHJcbiAgQElucHV0KCkgd2lkdGg6IG51bWJlcjtcclxuICBASW5wdXQoKSBpc1JlYWRPbmx5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgdmlydHVhbFNjcm9sbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBPdXRwdXQoKSBjaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmICh0aGlzLmdldFZhbHVlc0FycmF5RnJvbUVudW0gIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLml0ZW1zID0gdGhpcy5nZXRWYWx1ZXNBcnJheUZyb21FbnVtKFxyXG4gICAgICAgIHRoaXMuZW51bUNob2ljZXMsXHJcbiAgICAgICAgdGhpcy5jdXN0b21Db2xvcnMsXHJcbiAgICAgICAgdGhpcy5hbGxvd0FsbENhcHNWYWx1ZXNcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnZhbHVlc1RvRGlzYWJsZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuZGlzYWJsZWRJdGVtcygpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudmFsdWVzVG9IaWRlLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5oaWRlSXRlbXMoKTtcclxuICAgIH1cclxuICAgIHRoaXMuc29ydEFuZFJlb3JkZXJJdGVtcygpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoKSB7XHJcbiAgICBpZiAodGhpcy5nZXRWYWx1ZXNBcnJheUZyb21FbnVtICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5pdGVtcyA9IHRoaXMuZ2V0VmFsdWVzQXJyYXlGcm9tRW51bShcclxuICAgICAgICB0aGlzLmVudW1DaG9pY2VzLFxyXG4gICAgICAgIHRoaXMuY3VzdG9tQ29sb3JzLFxyXG4gICAgICAgIHRoaXMuYWxsb3dBbGxDYXBzVmFsdWVzXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy52YWx1ZXNUb0Rpc2FibGUubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLmRpc2FibGVkSXRlbXMoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnZhbHVlc1RvSGlkZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuaGlkZUl0ZW1zKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNvcnRBbmRSZW9yZGVySXRlbXMoKTtcclxuICB9XHJcblxyXG4gIGRpc2FibGVkSXRlbXMoKSB7XHJcbiAgICBmb3IgKGxldCB2YWx1ZSBvZiB0aGlzLnZhbHVlc1RvRGlzYWJsZSkge1xyXG4gICAgICBsZXQgaW5kZXg6IG51bWJlciA9IHRoaXMuaXRlbXMuZmluZEluZGV4KGVudW1PcHRpb24gPT4gZW51bU9wdGlvbi52YWx1ZSA9PSB2YWx1ZSk7XHJcbiAgICAgIGlmIChpbmRleCA+PSAwKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtc1tpbmRleF0uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRocm93IEVycm9yKFxyXG4gICAgICAgICAgJ0luZGV4IHdhcyBub3QgZm91bmQgZm9yIGFuIGVudW0gZWxlbWVudCBpbiB0aGUgdmFsdWVzVG9EaXNhYmxlIGFycmF5IHByb3ZpZGVkLidcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoaWRlSXRlbXMoKSB7XHJcbiAgICBmb3IgKGxldCB2YWx1ZSBvZiB0aGlzLnZhbHVlc1RvSGlkZSkge1xyXG4gICAgICBsZXQgaW5kZXg6IG51bWJlciA9IHRoaXMuaXRlbXMuZmluZEluZGV4KGVudW1PcHRpb24gPT4gZW51bU9wdGlvbi52YWx1ZSA9PSB2YWx1ZSk7XHJcbiAgICAgIGlmIChpbmRleCA+PSAwKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRocm93IEVycm9yKCdJbmRleCB3YXMgbm90IGZvdW5kIGZvciBhbiBlbnVtIGVsZW1lbnQgaW4gdGhlIHZhbHVlc1RvSGlkZSBhcnJheSBwcm92aWRlZC4nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc29ydEFuZFJlb3JkZXJJdGVtcygpOiB2b2lkIHtcclxuICAgIGNvbnN0IG5vbkRpc2FibGVkSXRlbXMgPSB0aGlzLml0ZW1zLmZpbHRlcihpdGVtID0+ICFpdGVtLmRpc2FibGVkKTtcclxuICAgIGNvbnN0IGRpc2FibGVkSXRlbXMgPSB0aGlzLml0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0uZGlzYWJsZWQpO1xyXG4gICAgbm9uRGlzYWJsZWRJdGVtcy5zb3J0KChhLCBiKSA9PiBhLmxhYmVsLmxvY2FsZUNvbXBhcmUoYi5sYWJlbCkpO1xyXG4gICAgdGhpcy5pdGVtcyA9IFsuLi5ub25EaXNhYmxlZEl0ZW1zLCAuLi5kaXNhYmxlZEl0ZW1zXTtcclxuICB9XHJcblxyXG4gIHdyaXRlVmFsdWUodHlwZTogbnVtYmVyKSB7XHJcbiAgICBpZiAodHlwZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSB0eXBlO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlID09IG51bGwpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSB0eXBlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xyXG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XHJcbiAgICB0aGlzLnByb3BvZ2F0ZVRvdWNoID0gZm47XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHByb3BhZ2F0ZUNoYW5nZSA9IChfOiBhbnkpID0+IHsgfTtcclxuICBwcml2YXRlIHByb3BvZ2F0ZVRvdWNoID0gKCkgPT4geyB9O1xyXG5cclxuICB1cGRhdGVCbHVyKCkge1xyXG4gICAgdGhpcy5wcm9wb2dhdGVUb3VjaCgpO1xyXG4gICAgdGhpcy5jbG9zZS5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdGVkSXRlbUNoYW5nZWQoKSB7XHJcbiAgICB0aGlzLnByb3BvZ2F0ZVRvdWNoKCk7XHJcbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLnNlbGVjdGVkSXRlbSk7XHJcbiAgICB0aGlzLmNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRJdGVtKTtcclxuICB9XHJcblxyXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5pc0Ryb3Bkb3duRGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IG51bGw7XHJcbiAgICB0aGlzLnByb3BvZ2F0ZVRvdWNoKCk7XHJcbiAgfVxyXG5cclxuICBzZXRTdHlsZXMoKSB7XHJcbiAgICBsZXQgc3R5bGUgPSB7XHJcbiAgICAgIHBhZGRpbmdUb3A6IHRoaXMucGFkZGluZ1RvcCArICdyZW0nLFxyXG4gICAgfTtcclxuICAgIGlmICh0aGlzLndpZHRoKSB7XHJcbiAgICAgIHN0eWxlWyd3aWR0aCddID0gdGhpcy53aWR0aCArICdyZW0nO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0eWxlO1xyXG4gIH1cclxuXHJcbiAgc2V0TGFiZWxTdHlsZSgpIHtcclxuICAgIGxldCBzdHlsZSA9IHtcclxuICAgICAgdGV4dEFsaWduOiB0aGlzLmxhYmVsVGV4dEFsaWduLFxyXG4gICAgICBmb250V2VpZ2h0OiB0aGlzLmxhYmVsVGV4dEZvbnRXZWlnaHQsXHJcbiAgICAgIGZvbnRTaXplOiB0aGlzLmxhYmVsVGV4dEZvbnRTaXplICsgJ3JlbScsXHJcbiAgICAgIHBhZGRpbmc6ICcwLjRyZW0nLFxyXG4gICAgfTtcclxuICAgIHJldHVybiBzdHlsZTtcclxuICB9XHJcbn1cclxuIiwiPGRpdj5cclxuICA8bmctc2VsZWN0IFtuZ1N0eWxlXT1cInNldFN0eWxlcygpXCIgKGJsdXIpPVwidXBkYXRlQmx1cigpXCIgYmluZExhYmVsPVwibGFiZWxcIiBiaW5kVmFsdWU9XCJ2YWx1ZVwiIFtpdGVtc109XCJpdGVtc1wiXHJcbiAgICBbdmlydHVhbFNjcm9sbF09XCJ2aXJ0dWFsU2Nyb2xsXCIgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCIgKGNoYW5nZSk9XCJvblNlbGVjdGVkSXRlbUNoYW5nZWQoKVwiXHJcbiAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkSXRlbVwiIFttdWx0aXBsZV09XCJpc011bHRpcGxlXCIgW2Rpc2FibGVkXT1cImlzRHJvcGRvd25EaXNhYmxlZFwiIFtyZWFkb25seV09XCJpc1JlYWRPbmx5XCJcclxuICAgIFtjbGVhcmFibGVdPVwiY2xlYXJhYmxlXCIgKGNsZWFyKT1cImNsZWFyKClcIiBbYXBwZW5kVG9dPVwiYXBwZW5kVG9cIiBkcm9wZG93blBvc2l0aW9uPVwiYm90dG9tXCI+XHJcbiAgICA8bmctdGVtcGxhdGUgbmctbGFiZWwtdG1wIGxldC1pdGVtPVwiaXRlbVwiIGxldC1jbGVhcj1cImNsZWFyXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0NoaXBcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNoaXBcIlxyXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgaXRlbTogaXRlbSwgc2hvd0Nyb3NzOiBjbGVhcmFibGUsIGNsZWFyOiBjbGVhciB9XCI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8ZGl2IFtuZ1N0eWxlXT1cInNldExhYmVsU3R5bGUoKVwiICpuZ0lmPVwiIWlzQ2hpcFwiPnt7IGl0ZW0ubGFiZWwgfX08L2Rpdj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8bmctdGVtcGxhdGUgbmctb3B0aW9uLXRtcCBsZXQtaXRlbT1cIml0ZW1cIiBsZXQtaW5kZXg9XCJpbmRleFwiIGxldC1zZWFyY2g9XCJzZWFyY2hUZXJtXCIgbGV0LWNsZWFyPVwiY2xlYXJcIj5cclxuICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IGRpc2FibGVkOiBpdGVtLmRpc2FibGVkIH1cIj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNDaGlwXCIgY2xhc3M9XCJjaGlwXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNoaXBcIlxyXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBpdGVtOiBpdGVtLCBzaG93Q3Jvc3M6IGZhbHNlLCBjbGVhcjogY2xlYXIgfVwiPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBbbmdTdHlsZV09XCJzZXRMYWJlbFN0eWxlKClcIiAqbmdJZj1cIiFpc0NoaXBcIj57eyBpdGVtLmxhYmVsIH19PC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L25nLXNlbGVjdD5cclxuPC9kaXY+XHJcblxyXG48bmctdGVtcGxhdGUgI2NoaXAgbGV0LXNob3dDcm9zcz1cInNob3dDcm9zc1wiIGxldC1pdGVtPVwiaXRlbVwiIGxldC1jbGVhcj1cImNsZWFyXCI+XHJcbiAgPG5nLWNoaXAgW2VudW1DbGFzc109XCJlbnVtQ2hvaWNlc1wiIFt3aXRoQ3Jvc3NdPVwic2hvd0Nyb3NzXCIgW2VudW1WYWx1ZV09XCJpdGVtLnZhbHVlXCIgW2N1c3RvbUNvbG9yc109XCJjdXN0b21Db2xvcnNcIlxyXG4gICAgW2l0ZW1dPVwiaXRlbVwiIFtjbGVhcl09XCJjbGVhclwiPlxyXG4gIDwvbmctY2hpcD5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=
@@ -1,27 +1,35 @@
1
- import { Component, EventEmitter, forwardRef, Input, Output } from '@angular/core';
2
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
1
+ import { Component, ContentChild, EventEmitter, forwardRef, Input, Output, } from '@angular/core';
2
+ import { NG_VALIDATORS, NG_VALUE_ACCESSOR, } from '@angular/forms';
3
+ import { PrimaryColors } from '../primary-colors';
4
+ import { ChooseObjectTemplateType } from './choose-object-template-type.enum';
5
+ import { ChooseItemFullObjectControlConfig } from '../models/choose-item-full-object-control-config.enum';
6
+ import { ChipInputType } from '@jooler/shared-general-components';
3
7
  import * as i0 from "@angular/core";
4
8
  import * as i1 from "./choose-general-item.service";
5
- import * as i2 from "@angular/common";
6
- import * as i3 from "@ng-select/ng-select";
7
- import * as i4 from "@angular/forms";
8
- import * as i5 from "@jooler/shared-general-components";
9
+ import * as i2 from "@angular/material/dialog";
10
+ import * as i3 from "@angular/common";
11
+ import * as i4 from "@ng-select/ng-select";
12
+ import * as i5 from "@angular/forms";
13
+ import * as i6 from "@angular/material/card";
14
+ import * as i7 from "@jooler/shared-general-components";
15
+ import * as i8 from "../dropdown-actions/dropdown-actions.component";
9
16
  export class ChooseGeneralItemComponent {
10
17
  _ChooseGeneralItemService;
11
- change = new EventEmitter();
18
+ dialog;
19
+ _cdr;
20
+ primaryRed = PrimaryColors.$primaryRedColor;
21
+ isLoading = false;
12
22
  items;
13
- label;
14
- appendTo;
23
+ label = 'label';
24
+ appendTo = 'body';
15
25
  placeholder;
16
26
  apiPath;
17
- isMultiple;
27
+ isMultiple = false;
18
28
  hideSelectedItem;
19
29
  objects;
20
- showLabel;
30
+ showLabel = false;
21
31
  separator;
22
- width = 20;
23
- fontWeight;
24
- fontSize;
32
+ width;
25
33
  isChip = false;
26
34
  isTypeDate;
27
35
  chipColor = 'black';
@@ -29,20 +37,81 @@ export class ChooseGeneralItemComponent {
29
37
  chipWidth = 11;
30
38
  selectedItemId;
31
39
  disabled;
40
+ readOnly;
32
41
  useFullObject = false;
33
- constructor(_ChooseGeneralItemService) {
42
+ showAdd = false;
43
+ dialogComponentClass;
44
+ showDialogDefaultButtons = false;
45
+ dialogComponentInputs = {
46
+ isDialog: true,
47
+ };
48
+ bindValueKey = 'id'; // or null for full object
49
+ addRoute;
50
+ canActionsRoute;
51
+ dialogTitle;
52
+ clearable = true;
53
+ filterParams;
54
+ templateType = ChooseObjectTemplateType.DEFAULT;
55
+ basicTemplateData;
56
+ contentProjectionLabelKey;
57
+ fullObjectControlConfig = ChooseItemFullObjectControlConfig.ID;
58
+ change = new EventEmitter();
59
+ blur = new EventEmitter();
60
+ customOptionTemplate;
61
+ ChooseObjectTemplateType = ChooseObjectTemplateType;
62
+ chipInputTypes = ChipInputType;
63
+ constructor(_ChooseGeneralItemService, dialog, _cdr) {
34
64
  this._ChooseGeneralItemService = _ChooseGeneralItemService;
65
+ this.dialog = dialog;
66
+ this._cdr = _cdr;
35
67
  }
36
68
  ngOnInit() {
37
- if (!this.items)
69
+ if (this.templateType == ChooseObjectTemplateType.BASIC) {
70
+ this.setupBasicTemplate();
71
+ }
72
+ }
73
+ setupBasicTemplate() { }
74
+ ngOnChanges(changes) {
75
+ if (changes['items'] && !changes.items) {
76
+ this.items = undefined;
77
+ }
78
+ if (changes['apiPath'] && !changes.apiPath) {
79
+ this.apiPath = undefined;
80
+ }
81
+ this.validateInputs(changes);
82
+ if (this.showAdd) {
83
+ this.validateAddConfiguration();
84
+ }
85
+ if (!changes['items'] || !changes['items'].currentValue) {
86
+ this.isLoading = true;
38
87
  this.getData();
88
+ }
89
+ else {
90
+ this.isLoading = false;
91
+ }
92
+ }
93
+ validateAddConfiguration() {
94
+ if ((this.addRoute == '' || this.addRoute == null || this.addRoute == undefined) &&
95
+ (this.dialogComponentClass == null || this.dialogComponentClass == undefined)) {
96
+ throw Error('Showing the add button requires either a route for the add button to route to, or a component class for a dialog to open up with that component.');
97
+ }
39
98
  }
40
99
  writeValue(item) {
41
- if (item != undefined) {
42
- this.selectedItemId = item;
100
+ if (item != undefined || item != null) {
101
+ if (!this.useFullObject) {
102
+ this.selectedItemId = item;
103
+ }
104
+ else {
105
+ if (Array.isArray(item)) {
106
+ this.selectedItemId = item.map(item => item.id);
107
+ }
108
+ else {
109
+ this.selectedItemId = item.id;
110
+ }
111
+ }
43
112
  }
44
- else if (item == null) {
45
- this.selectedItemId = item;
113
+ else {
114
+ this.selectedItemId = null;
46
115
  }
47
116
  }
48
117
  registerOnChange(fn) {
@@ -53,44 +122,116 @@ export class ChooseGeneralItemComponent {
53
122
  }
54
123
  propagateChange = (_) => { };
55
124
  propogateTouch = () => { };
125
+ onValidationChange = () => { };
56
126
  updateBlur() {
57
127
  this.propogateTouch();
128
+ this.blur.emit();
58
129
  }
59
130
  onSelectedItemChanged($event) {
60
- this.propagateChange(this.useFullObject ? $event : this.selectedItemId);
61
- this.change.emit(this.useFullObject ? $event : this.selectedItemId);
131
+ let valueToPropagate;
132
+ if (this.fullObjectControlConfig == ChooseItemFullObjectControlConfig.ID) {
133
+ valueToPropagate = this.selectedItemId;
134
+ }
135
+ else if (this.fullObjectControlConfig == ChooseItemFullObjectControlConfig.OBJECT) {
136
+ valueToPropagate = $event;
137
+ }
138
+ else {
139
+ throw Error('ChooseItemFullObjectControlConfig is not recognized.');
140
+ }
141
+ this.propagateChange(valueToPropagate);
142
+ this.change.emit($event);
143
+ this.onValidationChange();
144
+ }
145
+ validateInputs(changes) {
146
+ if (changes.apiPath &&
147
+ changes.apiPath.currentValue &&
148
+ changes.items &&
149
+ changes.items.currentValue) {
150
+ throw Error('Both an API path and an items list was provided.');
151
+ }
62
152
  }
63
153
  getData() {
64
154
  if (this.apiPath) {
65
- this._ChooseGeneralItemService.getData(this.apiPath).subscribe({
155
+ this._ChooseGeneralItemService.getData(this.apiPath, this.filterParams).subscribe({
66
156
  next: (response) => {
67
157
  this.items = response;
158
+ this.isLoading = false;
159
+ this._cdr.markForCheck();
160
+ console.log("response: items from '", this.apiPath, "' found: ", this.items);
68
161
  },
69
- error: (error) => console.error("error", error)
162
+ error: error => console.error('error', error),
70
163
  });
71
164
  }
72
165
  }
73
166
  setWidth() {
74
- let style = {
75
- width: this.width + "rem"
76
- };
167
+ let style = {};
168
+ if (this.width) {
169
+ style = {
170
+ width: this.width + 'rem',
171
+ };
172
+ }
173
+ else {
174
+ style = {
175
+ width: '100%',
176
+ };
177
+ }
77
178
  return style;
78
179
  }
79
- setFontStyles() {
80
- let fontStyle = {
81
- fontWeight: this.fontWeight,
82
- fontSize: this.fontSize + "rem",
83
- };
84
- return fontStyle;
180
+ onClickAddNew() {
181
+ console.log('DYNAMIC DIALOG NOT IMPLEMENTED IN LIBRARY YET');
182
+ // Add dynamic dialog later
183
+ // let dialogRef = this.dialog.open(DynamicDialogComponent, {
184
+ // panelClass: 'custom-dialog-padding',
185
+ // width: '90%',
186
+ // minWidth: '90%',
187
+ // maxHeight: '90vh',
188
+ // data: {
189
+ // component: this.dialogComponentClass,
190
+ // showDefaultButtons: this.showDialogDefaultButtons,
191
+ // title: this.dialogTitle,
192
+ // inputs: this.dialogComponentInputs,
193
+ // },
194
+ // });
195
+ // dialogRef.afterClosed().subscribe((data: any) => {
196
+ // if (data) {
197
+ // console.log('New item Added: ', data);
198
+ // this.items.push(data);
199
+ // this.items = [...this.items];
200
+ // }
201
+ // });
85
202
  }
86
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ChooseGeneralItemComponent, deps: [{ token: i1.ChooseGeneralItemService }], target: i0.ɵɵFactoryTarget.Component });
87
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ChooseGeneralItemComponent, selector: "choose-general-item", inputs: { items: "items", label: "label", appendTo: "appendTo", placeholder: "placeholder", apiPath: "apiPath", isMultiple: "isMultiple", hideSelectedItem: "hideSelectedItem", objects: "objects", showLabel: "showLabel", separator: "separator", width: "width", fontWeight: "fontWeight", fontSize: "fontSize", isChip: "isChip", isTypeDate: "isTypeDate", chipColor: "chipColor", chipTextColor: "chipTextColor", chipWidth: "chipWidth", selectedItemId: "selectedItemId", disabled: "disabled", useFullObject: "useFullObject" }, outputs: { change: "change" }, providers: [
203
+ setDisabledState(isDisabled) {
204
+ this.disabled = isDisabled;
205
+ }
206
+ registerOnValidatorChange(fn) {
207
+ this.onValidationChange = fn;
208
+ }
209
+ validate(control) {
210
+ return null;
211
+ if (control) {
212
+ const errors = control.errors;
213
+ if (errors) {
214
+ console.log('errorssss: ', errors);
215
+ return errors;
216
+ }
217
+ else {
218
+ return null;
219
+ }
220
+ }
221
+ }
222
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ChooseGeneralItemComponent, deps: [{ token: i1.ChooseGeneralItemService }, { token: i2.MatDialog }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
223
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ChooseGeneralItemComponent, selector: "choose-general-item", inputs: { items: "items", label: "label", appendTo: "appendTo", placeholder: "placeholder", apiPath: "apiPath", isMultiple: "isMultiple", hideSelectedItem: "hideSelectedItem", objects: "objects", showLabel: "showLabel", separator: "separator", width: "width", isChip: "isChip", isTypeDate: "isTypeDate", chipColor: "chipColor", chipTextColor: "chipTextColor", chipWidth: "chipWidth", selectedItemId: "selectedItemId", disabled: "disabled", readOnly: "readOnly", useFullObject: "useFullObject", showAdd: "showAdd", dialogComponentClass: "dialogComponentClass", showDialogDefaultButtons: "showDialogDefaultButtons", dialogComponentInputs: "dialogComponentInputs", bindValueKey: "bindValueKey", addRoute: "addRoute", canActionsRoute: "canActionsRoute", dialogTitle: "dialogTitle", clearable: "clearable", filterParams: "filterParams", templateType: "templateType", basicTemplateData: "basicTemplateData", contentProjectionLabelKey: "contentProjectionLabelKey", fullObjectControlConfig: "fullObjectControlConfig" }, outputs: { change: "change", blur: "blur" }, providers: [
88
224
  {
89
225
  provide: NG_VALUE_ACCESSOR,
90
226
  useExisting: forwardRef(() => ChooseGeneralItemComponent),
91
227
  multi: true,
92
228
  },
93
- ], ngImport: i0, template: "<div class=\"select\">\r\n <ng-select [hideSelected]=\"hideSelectedItem\" [closeOnSelect]=\"!isMultiple\" [ngStyle]=\"setWidth()\" class=\"component\"\r\n [disabled]=\"disabled\" [appendTo]=\"appendTo\" dropdownPosition=\"bottom\" (blur)=\"updateBlur()\" [bindLabel]=\"label\"\r\n bindValue=\"id\" [compareWith]=\"\" [items]=\"items\" [placeholder]=\"placeholder\"\r\n (change)=\"onSelectedItemChanged($event)\" [(ngModel)]=\"selectedItemId\" [multiple]=\"isMultiple\">\r\n <ng-template *ngIf=\"!isChip\" class=\"template\" ng-option-tmp ng-label-tmp let-item=\"item\" let-index=\"index\"\r\n let-search=\"searchTerm\">\r\n <span [ngStyle]=\"setFontStyles()\" *ngFor=\"let object of objects let isLast = last\">\r\n <span *ngIf=\"showLabel && !isTypeDate\">\r\n {{object.label}}: {{item[object.field]}} {{isLast ? \"\" : separator}}\r\n </span>\r\n <span *ngIf=\"showLabel && isTypeDate\">\r\n {{object.label}}: {{item[object.field]| date: 'mediumDate'}} {{isLast ? \"\" : separator}}\r\n </span>\r\n <span *ngIf=\"!showLabel && isTypeDate\">\r\n {{item[object.field]| date: 'mediumDate'}} {{isLast ? \"\" : separator}}\r\n </span>\r\n <span *ngIf=\"!showLabel && !isTypeDate\">{{item[object.field]}}{{isLast ? \"\" : separator}}\r\n </span>\r\n </span>\r\n </ng-template>\r\n <ng-template *ngIf=\"isChip\" ng-label-tmp let-item=\"item\" let-clear=\"clear\">\r\n <ng-chip (mousedown)=\"$event.stopPropagation()\" [clear]=\"clear\" [withCross]=\"isMultiple\" [item]=\"item\"\r\n class=\"chip\" [backgroundColor]=\"chipColor\" [label]=\"item[objects[0].field]\"\r\n [width]=\"chipWidth\">\r\n </ng-chip>\r\n </ng-template>\r\n <ng-template *ngIf=\"isChip\" ng-option-tmp let-clear=\"clear\" let-item=\"item\">\r\n <ng-chip (mousedown)=\"$event.stopPropagation()\" [clear]=\"clear\" [withCross]=\"false\" [item]=\"item\"\r\n class=\"chip\" [backgroundColor]=\"chipColor\" [label]=\"item[objects[0].field]\"\r\n [width]=\"chipWidth\">\r\n </ng-chip>\r\n </ng-template>\r\n </ng-select>\r\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i3.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd", "deselectOnClick"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "directive", type: i3.NgOptionTemplateDirective, selector: "[ng-option-tmp]" }, { kind: "directive", type: i3.NgLabelTemplateDirective, selector: "[ng-label-tmp]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.NgChipComponent, selector: "ng-chip", inputs: ["backgroundColor", "size", "clear", "customColors", "enumClass", "enumValue", "inputType", "item", "isClickable", "label", "width", "withCross"] }, { kind: "pipe", type: i2.DatePipe, name: "date" }] });
229
+ {
230
+ provide: NG_VALIDATORS,
231
+ useExisting: ChooseGeneralItemComponent,
232
+ multi: true,
233
+ },
234
+ ], queries: [{ propertyName: "customOptionTemplate", first: true, predicate: ["customOption"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"select\">\r\n <ng-select [readonly]=\"readOnly\" [loading]=\"isLoading\" [hideSelected]=\"hideSelectedItem\"\r\n [closeOnSelect]=\"!isMultiple\" [ngStyle]=\"setWidth()\" class=\"component\" [disabled]=\"disabled\"\r\n [appendTo]=\"appendTo\" dropdownPosition=\"bottom\" (blur)=\"updateBlur()\" [bindLabel]=\"label\"\r\n [bindValue]=\"bindValueKey\" [compareWith]=\"\" [items]=\"items\" [placeholder]=\"placeholder\"\r\n (change)=\"onSelectedItemChanged($event)\" [(ngModel)]=\"selectedItemId\" [clearable]=\"clearable\"\r\n [multiple]=\"isMultiple\">\r\n <ng-container *ngIf=\"templateType == ChooseObjectTemplateType.DEFAULT\">\r\n <ng-template *ngIf=\"isLoading\" ng-label-tmp let-item=\"item\" let-clear=\"clear\"> </ng-template>\r\n\r\n <ng-template ng-label-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\r\n <ng-container *ngIf=\"objects; else nonObjectLabelTemplate\">\r\n <span class=\"template\" *ngFor=\"let object of objects; let isLast = last\">\r\n <span class=\"template-item\">\r\n {{ showLabel ? object.label + ': ' : ''\r\n }}{{\r\n isTypeDate ? (item[object.field] | date: 'mediumDate') : item[object.field]\r\n }}</span>\r\n </span>\r\n </ng-container>\r\n <ng-template #nonObjectLabelTemplate>{{ item }} </ng-template>\r\n </ng-template>\r\n\r\n <!-- Option Template -->\r\n <ng-template ng-option-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\r\n <ng-container *ngIf=\"objects; else nonObjectOptionTemplate\">\r\n <span *ngFor=\"let object of objects; let isLast = last\">\r\n {{ showLabel ? object.label + ': ' : ''\r\n }}{{ isTypeDate ? (item[object.field] | date: 'mediumDate') : item[object.field] }}\r\n </span>\r\n </ng-container>\r\n <ng-template #nonObjectOptionTemplate>{{ item }} </ng-template>\r\n </ng-template>\r\n\r\n <ng-template *ngIf=\"isChip && !isLoading\" ng-label-tmp let-item=\"item\" let-clear=\"clear\">\r\n <ng-chip (mousedown)=\"$event.stopPropagation()\" [clear]=\"clear\" [withCross]=\"isMultiple\"\r\n [inputType]=\"chipInputTypes.CUSTOM\"\r\n [backgroundColor]=\"item.disabled == true ? primaryRed : chipColor\" [label]=\"item[objects[0].field]\"\r\n [item]=\"item\">\r\n </ng-chip>\r\n </ng-template>\r\n <ng-template *ngIf=\"isChip && !isLoading\" ng-option-tmp let-clear=\"clear\" let-item=\"item\">\r\n <ng-chip (mousedown)=\"$event.stopPropagation()\" [withCross]=\"false\" [inputType]=\"chipInputTypes.CUSTOM\"\r\n [backgroundColor]=\"item.disabled == true ? primaryRed : chipColor\" [label]=\"item[objects[0].field]\">\r\n </ng-chip>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"templateType == ChooseObjectTemplateType.BASIC\">\r\n <ng-template ng-label-tmp let-item=\"item\" let-clear=\"clear\">\r\n {{ item[basicTemplateData.label] }}\r\n </ng-template>\r\n <ng-template ng-option-tmp let-clear=\"clear\" let-item=\"item\">\r\n <mat-card class=\"basic-template-card\" [ngClass]=\"{\r\n 'with-image': basicTemplateData.hasImage,\r\n 'without-image': !basicTemplateData.hasImage,\r\n }\">\r\n <div class=\"image-cont\" *ngIf=\"basicTemplateData.hasImage\">\r\n <img class=\"main-image\" [src]=\"item[basicTemplateData.image]\"\r\n onerror=\"this.src='../../../assets/images/defaultImage.jpg';\" />\r\n </div>\r\n\r\n <div class=\"info\">\r\n <div class=\"title\">\r\n {{ item[basicTemplateData.title] }}\r\n </div>\r\n <div class=\"subtitle-style\" *ngIf=\"basicTemplateData.hasSubtitleOne\">\r\n <span>{{ item[basicTemplateData.subtitleOne] }}</span>\r\n <ng-container *ngIf=\"basicTemplateData.hasSubtitleTwo\">\r\n <span class=\"col-divider\"> | </span>\r\n <span>{{ item[basicTemplateData.subtitleTwo] }}</span>\r\n </ng-container>\r\n </div>\r\n <div class=\"description\" *ngIf=\"basicTemplateData.hasDescription\">\r\n {{ item[basicTemplateData.description] }}\r\n </div>\r\n </div>\r\n </mat-card>\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngIf=\"templateType == ChooseObjectTemplateType.CONTENT_PROJECTION\">\r\n <ng-template *ngIf=\"isLoading\" ng-label-tmp let-item=\"item\" let-clear=\"clear\"> </ng-template>\r\n\r\n <ng-template ng-label-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\r\n <span class=\"template\">\r\n <span class=\"template-item\"> {{ item[contentProjectionLabelKey] }} </span>\r\n </span>\r\n </ng-template>\r\n\r\n <!-- Option Template -->\r\n <ng-template ng-option-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\r\n <ng-container [ngTemplateOutlet]=\"customOptionTemplate\" [ngTemplateOutletContext]=\"{ $implicit: item }\">\r\n </ng-container>\r\n </ng-template>\r\n </ng-container>\r\n </ng-select>\r\n <dropdown-actions *ngIf=\"showAdd\" [canRoute]=\"canActionsRoute\" [route]=\"addRoute\"\r\n (addClicked)=\"onClickAddNew()\"></dropdown-actions>\r\n</div>\r\n ", styles: [".template{background-color:#f0f2f4;border-radius:1.6rem;height:2.6rem;line-height:2.6rem;display:inline-block}.template-item{padding:.8rem 1.2rem}.basic-template-card{display:grid;row-gap:.4rem}.basic-template-card .image-cont,.basic-template-card .image-cont .main-image{max-width:100%;max-height:100%}.basic-template-card .info{display:flex;flex-direction:column;row-gap:.4rem;padding:.6rem;white-space:normal}.basic-template-card .info .title{font-weight:600;color:#155ed4}.basic-template-card .info .subtitle-style{font-weight:400}.basic-template-card .info .description{color:#676767;font-style:italic;font-size:1.1rem}.basic-template-card .info .col-divider{color:#12957e}.with-image{grid-template-columns:8rem auto}.without-image{grid-template-columns:auto}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i4.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd", "deselectOnClick"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "directive", type: i4.NgOptionTemplateDirective, selector: "[ng-option-tmp]" }, { kind: "directive", type: i4.NgLabelTemplateDirective, selector: "[ng-label-tmp]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: i7.NgChipComponent, selector: "ng-chip", inputs: ["backgroundColor", "size", "clear", "customColors", "enumClass", "enumValue", "inputType", "item", "isClickable", "label", "width", "withCross"] }, { kind: "component", type: i8.DropdownActionsComponent, selector: "dropdown-actions", inputs: ["canRoute", "disabled", "labelsAndRoutes", "route", "dropdownActionType"], outputs: ["addClicked"] }, { kind: "pipe", type: i3.DatePipe, name: "date" }] });
94
235
  }
95
236
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ChooseGeneralItemComponent, decorators: [{
96
237
  type: Component,
@@ -100,10 +241,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
100
241
  useExisting: forwardRef(() => ChooseGeneralItemComponent),
101
242
  multi: true,
102
243
  },
103
- ], template: "<div class=\"select\">\r\n <ng-select [hideSelected]=\"hideSelectedItem\" [closeOnSelect]=\"!isMultiple\" [ngStyle]=\"setWidth()\" class=\"component\"\r\n [disabled]=\"disabled\" [appendTo]=\"appendTo\" dropdownPosition=\"bottom\" (blur)=\"updateBlur()\" [bindLabel]=\"label\"\r\n bindValue=\"id\" [compareWith]=\"\" [items]=\"items\" [placeholder]=\"placeholder\"\r\n (change)=\"onSelectedItemChanged($event)\" [(ngModel)]=\"selectedItemId\" [multiple]=\"isMultiple\">\r\n <ng-template *ngIf=\"!isChip\" class=\"template\" ng-option-tmp ng-label-tmp let-item=\"item\" let-index=\"index\"\r\n let-search=\"searchTerm\">\r\n <span [ngStyle]=\"setFontStyles()\" *ngFor=\"let object of objects let isLast = last\">\r\n <span *ngIf=\"showLabel && !isTypeDate\">\r\n {{object.label}}: {{item[object.field]}} {{isLast ? \"\" : separator}}\r\n </span>\r\n <span *ngIf=\"showLabel && isTypeDate\">\r\n {{object.label}}: {{item[object.field]| date: 'mediumDate'}} {{isLast ? \"\" : separator}}\r\n </span>\r\n <span *ngIf=\"!showLabel && isTypeDate\">\r\n {{item[object.field]| date: 'mediumDate'}} {{isLast ? \"\" : separator}}\r\n </span>\r\n <span *ngIf=\"!showLabel && !isTypeDate\">{{item[object.field]}}{{isLast ? \"\" : separator}}\r\n </span>\r\n </span>\r\n </ng-template>\r\n <ng-template *ngIf=\"isChip\" ng-label-tmp let-item=\"item\" let-clear=\"clear\">\r\n <ng-chip (mousedown)=\"$event.stopPropagation()\" [clear]=\"clear\" [withCross]=\"isMultiple\" [item]=\"item\"\r\n class=\"chip\" [backgroundColor]=\"chipColor\" [label]=\"item[objects[0].field]\"\r\n [width]=\"chipWidth\">\r\n </ng-chip>\r\n </ng-template>\r\n <ng-template *ngIf=\"isChip\" ng-option-tmp let-clear=\"clear\" let-item=\"item\">\r\n <ng-chip (mousedown)=\"$event.stopPropagation()\" [clear]=\"clear\" [withCross]=\"false\" [item]=\"item\"\r\n class=\"chip\" [backgroundColor]=\"chipColor\" [label]=\"item[objects[0].field]\"\r\n [width]=\"chipWidth\">\r\n </ng-chip>\r\n </ng-template>\r\n </ng-select>\r\n</div>" }]
104
- }], ctorParameters: function () { return [{ type: i1.ChooseGeneralItemService }]; }, propDecorators: { change: [{
105
- type: Output
106
- }], items: [{
244
+ {
245
+ provide: NG_VALIDATORS,
246
+ useExisting: ChooseGeneralItemComponent,
247
+ multi: true,
248
+ },
249
+ ], template: "<div class=\"select\">\r\n <ng-select [readonly]=\"readOnly\" [loading]=\"isLoading\" [hideSelected]=\"hideSelectedItem\"\r\n [closeOnSelect]=\"!isMultiple\" [ngStyle]=\"setWidth()\" class=\"component\" [disabled]=\"disabled\"\r\n [appendTo]=\"appendTo\" dropdownPosition=\"bottom\" (blur)=\"updateBlur()\" [bindLabel]=\"label\"\r\n [bindValue]=\"bindValueKey\" [compareWith]=\"\" [items]=\"items\" [placeholder]=\"placeholder\"\r\n (change)=\"onSelectedItemChanged($event)\" [(ngModel)]=\"selectedItemId\" [clearable]=\"clearable\"\r\n [multiple]=\"isMultiple\">\r\n <ng-container *ngIf=\"templateType == ChooseObjectTemplateType.DEFAULT\">\r\n <ng-template *ngIf=\"isLoading\" ng-label-tmp let-item=\"item\" let-clear=\"clear\"> </ng-template>\r\n\r\n <ng-template ng-label-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\r\n <ng-container *ngIf=\"objects; else nonObjectLabelTemplate\">\r\n <span class=\"template\" *ngFor=\"let object of objects; let isLast = last\">\r\n <span class=\"template-item\">\r\n {{ showLabel ? object.label + ': ' : ''\r\n }}{{\r\n isTypeDate ? (item[object.field] | date: 'mediumDate') : item[object.field]\r\n }}</span>\r\n </span>\r\n </ng-container>\r\n <ng-template #nonObjectLabelTemplate>{{ item }} </ng-template>\r\n </ng-template>\r\n\r\n <!-- Option Template -->\r\n <ng-template ng-option-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\r\n <ng-container *ngIf=\"objects; else nonObjectOptionTemplate\">\r\n <span *ngFor=\"let object of objects; let isLast = last\">\r\n {{ showLabel ? object.label + ': ' : ''\r\n }}{{ isTypeDate ? (item[object.field] | date: 'mediumDate') : item[object.field] }}\r\n </span>\r\n </ng-container>\r\n <ng-template #nonObjectOptionTemplate>{{ item }} </ng-template>\r\n </ng-template>\r\n\r\n <ng-template *ngIf=\"isChip && !isLoading\" ng-label-tmp let-item=\"item\" let-clear=\"clear\">\r\n <ng-chip (mousedown)=\"$event.stopPropagation()\" [clear]=\"clear\" [withCross]=\"isMultiple\"\r\n [inputType]=\"chipInputTypes.CUSTOM\"\r\n [backgroundColor]=\"item.disabled == true ? primaryRed : chipColor\" [label]=\"item[objects[0].field]\"\r\n [item]=\"item\">\r\n </ng-chip>\r\n </ng-template>\r\n <ng-template *ngIf=\"isChip && !isLoading\" ng-option-tmp let-clear=\"clear\" let-item=\"item\">\r\n <ng-chip (mousedown)=\"$event.stopPropagation()\" [withCross]=\"false\" [inputType]=\"chipInputTypes.CUSTOM\"\r\n [backgroundColor]=\"item.disabled == true ? primaryRed : chipColor\" [label]=\"item[objects[0].field]\">\r\n </ng-chip>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"templateType == ChooseObjectTemplateType.BASIC\">\r\n <ng-template ng-label-tmp let-item=\"item\" let-clear=\"clear\">\r\n {{ item[basicTemplateData.label] }}\r\n </ng-template>\r\n <ng-template ng-option-tmp let-clear=\"clear\" let-item=\"item\">\r\n <mat-card class=\"basic-template-card\" [ngClass]=\"{\r\n 'with-image': basicTemplateData.hasImage,\r\n 'without-image': !basicTemplateData.hasImage,\r\n }\">\r\n <div class=\"image-cont\" *ngIf=\"basicTemplateData.hasImage\">\r\n <img class=\"main-image\" [src]=\"item[basicTemplateData.image]\"\r\n onerror=\"this.src='../../../assets/images/defaultImage.jpg';\" />\r\n </div>\r\n\r\n <div class=\"info\">\r\n <div class=\"title\">\r\n {{ item[basicTemplateData.title] }}\r\n </div>\r\n <div class=\"subtitle-style\" *ngIf=\"basicTemplateData.hasSubtitleOne\">\r\n <span>{{ item[basicTemplateData.subtitleOne] }}</span>\r\n <ng-container *ngIf=\"basicTemplateData.hasSubtitleTwo\">\r\n <span class=\"col-divider\"> | </span>\r\n <span>{{ item[basicTemplateData.subtitleTwo] }}</span>\r\n </ng-container>\r\n </div>\r\n <div class=\"description\" *ngIf=\"basicTemplateData.hasDescription\">\r\n {{ item[basicTemplateData.description] }}\r\n </div>\r\n </div>\r\n </mat-card>\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngIf=\"templateType == ChooseObjectTemplateType.CONTENT_PROJECTION\">\r\n <ng-template *ngIf=\"isLoading\" ng-label-tmp let-item=\"item\" let-clear=\"clear\"> </ng-template>\r\n\r\n <ng-template ng-label-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\r\n <span class=\"template\">\r\n <span class=\"template-item\"> {{ item[contentProjectionLabelKey] }} </span>\r\n </span>\r\n </ng-template>\r\n\r\n <!-- Option Template -->\r\n <ng-template ng-option-tmp let-item=\"item\" let-index=\"index\" let-search=\"searchTerm\">\r\n <ng-container [ngTemplateOutlet]=\"customOptionTemplate\" [ngTemplateOutletContext]=\"{ $implicit: item }\">\r\n </ng-container>\r\n </ng-template>\r\n </ng-container>\r\n </ng-select>\r\n <dropdown-actions *ngIf=\"showAdd\" [canRoute]=\"canActionsRoute\" [route]=\"addRoute\"\r\n (addClicked)=\"onClickAddNew()\"></dropdown-actions>\r\n</div>\r\n ", styles: [".template{background-color:#f0f2f4;border-radius:1.6rem;height:2.6rem;line-height:2.6rem;display:inline-block}.template-item{padding:.8rem 1.2rem}.basic-template-card{display:grid;row-gap:.4rem}.basic-template-card .image-cont,.basic-template-card .image-cont .main-image{max-width:100%;max-height:100%}.basic-template-card .info{display:flex;flex-direction:column;row-gap:.4rem;padding:.6rem;white-space:normal}.basic-template-card .info .title{font-weight:600;color:#155ed4}.basic-template-card .info .subtitle-style{font-weight:400}.basic-template-card .info .description{color:#676767;font-style:italic;font-size:1.1rem}.basic-template-card .info .col-divider{color:#12957e}.with-image{grid-template-columns:8rem auto}.without-image{grid-template-columns:auto}\n"] }]
250
+ }], ctorParameters: function () { return [{ type: i1.ChooseGeneralItemService }, { type: i2.MatDialog }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { items: [{
107
251
  type: Input
108
252
  }], label: [{
109
253
  type: Input
@@ -125,10 +269,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
125
269
  type: Input
126
270
  }], width: [{
127
271
  type: Input
128
- }], fontWeight: [{
129
- type: Input
130
- }], fontSize: [{
131
- type: Input
132
272
  }], isChip: [{
133
273
  type: Input
134
274
  }], isTypeDate: [{
@@ -143,7 +283,44 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
143
283
  type: Input
144
284
  }], disabled: [{
145
285
  type: Input
286
+ }], readOnly: [{
287
+ type: Input
146
288
  }], useFullObject: [{
147
289
  type: Input
290
+ }], showAdd: [{
291
+ type: Input
292
+ }], dialogComponentClass: [{
293
+ type: Input
294
+ }], showDialogDefaultButtons: [{
295
+ type: Input
296
+ }], dialogComponentInputs: [{
297
+ type: Input
298
+ }], bindValueKey: [{
299
+ type: Input
300
+ }], addRoute: [{
301
+ type: Input
302
+ }], canActionsRoute: [{
303
+ type: Input
304
+ }], dialogTitle: [{
305
+ type: Input
306
+ }], clearable: [{
307
+ type: Input
308
+ }], filterParams: [{
309
+ type: Input
310
+ }], templateType: [{
311
+ type: Input
312
+ }], basicTemplateData: [{
313
+ type: Input
314
+ }], contentProjectionLabelKey: [{
315
+ type: Input
316
+ }], fullObjectControlConfig: [{
317
+ type: Input
318
+ }], change: [{
319
+ type: Output
320
+ }], blur: [{
321
+ type: Output
322
+ }], customOptionTemplate: [{
323
+ type: ContentChild,
324
+ args: ['customOption']
148
325
  }] } });
149
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hvb3NlLWdlbmVyYWwtaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnB1dHMvc3JjL2xpYi9jaG9vc2UtZ2VuZXJhbC1pdGVtL2Nob29zZS1nZW5lcmFsLWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW5wdXRzL3NyYy9saWIvY2hvb3NlLWdlbmVyYWwtaXRlbS9jaG9vc2UtZ2VuZXJhbC1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNGLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7OztBQWdCekUsTUFBTSxPQUFPLDBCQUEwQjtJQXlCM0I7SUF4QkEsTUFBTSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFDN0IsS0FBSyxDQUFRO0lBQ2IsS0FBSyxDQUFTO0lBQ2QsUUFBUSxDQUFTO0lBQ2pCLFdBQVcsQ0FBUztJQUNwQixPQUFPLENBQVM7SUFDaEIsVUFBVSxDQUFVO0lBQ3BCLGdCQUFnQixDQUFVO0lBQzFCLE9BQU8sQ0FBa0I7SUFDekIsU0FBUyxDQUFVO0lBQ25CLFNBQVMsQ0FBUztJQUNsQixLQUFLLEdBQVcsRUFBRSxDQUFDO0lBQ25CLFVBQVUsQ0FBUztJQUNuQixRQUFRLENBQVM7SUFDakIsTUFBTSxHQUFZLEtBQUssQ0FBQztJQUN4QixVQUFVLENBQVU7SUFDcEIsU0FBUyxHQUFXLE9BQU8sQ0FBQztJQUM1QixhQUFhLEdBQVcsT0FBTyxDQUFDO0lBQ2hDLFNBQVMsR0FBVyxFQUFFLENBQUM7SUFDdkIsY0FBYyxDQUFvQjtJQUNsQyxRQUFRLENBQVU7SUFDbEIsYUFBYSxHQUFZLEtBQUssQ0FBQztJQUV4QyxZ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c0JBQWhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIGZvcndhcmRSZWYsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IExhYmVsQW5kRmllbGQgfSBmcm9tICcuLi9tb2RlbHMvbGFiZWwtYW5kLWZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgQ2hvb3NlR2VuZXJhbEl0ZW1TZXJ2aWNlIH0gZnJvbSAnLi9jaG9vc2UtZ2VuZXJhbC1pdGVtLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjaG9vc2UtZ2VuZXJhbC1pdGVtJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY2hvb3NlLWdlbmVyYWwtaXRlbS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY2hvb3NlLWdlbmVyYWwtaXRlbS5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ2hvb3NlR2VuZXJhbEl0ZW1Db21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgIH0sXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIENob29zZUdlbmVyYWxJdGVtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcbiAgQE91dHB1dCgpIGNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBASW5wdXQoKSBpdGVtczogYW55W107XHJcbiAgQElucHV0KCkgbGFiZWw6IHN0cmluZztcclxuICBASW5wdXQoKSBhcHBlbmRUbzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgYXBpUGF0aDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGlzTXVsdGlwbGU6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgaGlkZVNlbGVjdGVkSXRlbTogYm9vbGVhbjtcclxuICBASW5wdXQoKSBvYmplY3RzOiBMYWJlbEFuZEZpZWxkW107XHJcbiAgQElucHV0KCkgc2hvd0xhYmVsOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHNlcGFyYXRvcjogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHdpZHRoOiBudW1iZXIgPSAyMDtcclxuICBASW5wdXQoKSBmb250V2VpZ2h0OiBudW1iZXI7XHJcbiAgQElucHV0KCkgZm9udFNpemU6IG51bWJlcjtcclxuICBASW5wdXQoKSBpc0NoaXA6IEJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBpc1R5cGVEYXRlOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGNoaXBDb2xvcjogc3RyaW5nID0gJ2JsYWNrJztcclxuICBASW5wdXQoKSBjaGlwVGV4dENvbG9yOiBzdHJpbmcgPSAnd2hpdGUnO1xyXG4gIEBJbnB1dCgpIGNoaXBXaWR0aDogbnVtYmVyID0gMTE7XHJcbiAgQElucHV0KCkgc2VsZWN0ZWRJdGVtSWQ6IG51bWJlciB8IG51bWJlcltdO1xyXG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHVzZUZ1bGxPYmplY3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9DaG9vc2VHZW5lcmFsSXRlbVNlcnZpY2U6IENob29zZUdlbmVyYWxJdGVtU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLml0ZW1zKVxyXG4gICAgICB0aGlzLmdldERhdGEoKTtcclxuICB9XHJcblxyXG4gIHdyaXRlVmFsdWUoaXRlbTogYW55KSB7XHJcbiAgICBpZiAoaXRlbSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1JZCA9IGl0ZW07XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChpdGVtID09IG51bGwpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1JZCA9IGl0ZW07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KSB7XHJcbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpIHtcclxuICAgIHRoaXMucHJvcG9nYXRlVG91Y2ggPSBmbjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcHJvcGFnYXRlQ2hhbmdlID0gKF86IGFueSkgPT4geyB9O1xyXG4gIHByaXZhdGUgcHJvcG9nYXRlVG91Y2ggPSAoKSA9PiB7IH07XHJcblxyXG4gIHVwZGF0ZUJsdXIoKSB7XHJcbiAgICB0aGlzLnByb3BvZ2F0ZVRvdWNoKCk7XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdGVkSXRlbUNoYW5nZWQoJGV2ZW50KSB7XHJcbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLnVzZUZ1bGxPYmplY3QgPyAkZXZlbnQgOiB0aGlzLnNlbGVjdGVkSXRlbUlkKTtcclxuICAgIHRoaXMuY2hhbmdlLmVtaXQodGhpcy51c2VGdWxsT2JqZWN0ID8gJGV2ZW50IDogdGhpcy5zZWxlY3RlZEl0ZW1JZCk7XHJcbiAgfVxyXG5cclxuICBnZXREYXRhKCkge1xyXG4gICAgaWYgKHRoaXMuYXBpUGF0aCkge1xyXG4gICAgICB0aGlzLl9DaG9vc2VHZW5lcmFsSXRlbVNlcnZpY2UuZ2V0RGF0YSh0aGlzLmFwaVBhdGgpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlOiBhbnlbXSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pdGVtcyA9IHJlc3BvbnNlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4gY29uc29sZS5lcnJvcihcImVycm9yXCIsIGVycm9yKVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0V2lkdGgoKSB7XHJcbiAgICBsZXQgc3R5bGUgPSB7XHJcbiAgICAgIHdpZHRoOiB0aGlzLndpZHRoICsgXCJyZW1cIlxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0eWxlO1xyXG4gIH1cclxuXHJcbiAgc2V0Rm9udFN0eWxlcygpIHtcclxuICAgIGxldCBmb250U3R5bGUgPSB7XHJcbiAgICAgIGZvbnRXZWlnaHQ6IHRoaXMuZm9udFdlaWdodCxcclxuICAgICAgZm9udFNpemU6IHRoaXMuZm9udFNpemUgKyBcInJlbVwiLFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZvbnRTdHlsZTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInNlbGVjdFwiPlxyXG4gICAgPG5nLXNlbGVjdCBbaGlkZVNlbGVjdGVkXT1cImhpZGVTZWxlY3RlZEl0ZW1cIiBbY2xvc2VPblNlbGVjdF09XCIhaXNNdWx0aXBsZVwiIFtuZ1N0eWxlXT1cInNldFdpZHRoKClcIiBjbGFzcz1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgW2FwcGVuZFRvXT1cImFwcGVuZFRvXCIgZHJvcGRvd25Qb3NpdGlvbj1cImJvdHRvbVwiIChibHVyKT1cInVwZGF0ZUJsdXIoKVwiIFtiaW5kTGFiZWxdPVwibGFiZWxcIlxyXG4gICAgICAgIGJpbmRWYWx1ZT1cImlkXCIgW2NvbXBhcmVXaXRoXT1cIlwiIFtpdGVtc109XCJpdGVtc1wiIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXHJcbiAgICAgICAgKGNoYW5nZSk9XCJvblNlbGVjdGVkSXRlbUNoYW5nZWQoJGV2ZW50KVwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRJdGVtSWRcIiBbbXVsdGlwbGVdPVwiaXNNdWx0aXBsZVwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cIiFpc0NoaXBcIiBjbGFzcz1cInRlbXBsYXRlXCIgbmctb3B0aW9uLXRtcCBuZy1sYWJlbC10bXAgbGV0LWl0ZW09XCJpdGVtXCIgbGV0LWluZGV4PVwiaW5kZXhcIlxyXG4gICAgICAgICAgICBsZXQtc2VhcmNoPVwic2VhcmNoVGVybVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBbbmdTdHlsZV09XCJzZXRGb250U3R5bGVzKClcIiAqbmdGb3I9XCJsZXQgb2JqZWN0IG9mIG9iamVjdHMgbGV0IGlzTGFzdCA9IGxhc3RcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2hvd0xhYmVsICYmICFpc1R5cGVEYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3tvYmplY3QubGFiZWx9fToge3tpdGVtW29iamVjdC5maWVsZF19fSB7e2lzTGFzdCA/IFwiXCIgOiBzZXBhcmF0b3J9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzaG93TGFiZWwgJiYgaXNUeXBlRGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7b2JqZWN0LmxhYmVsfX06IHt7aXRlbVtvYmplY3QuZmllbGRdfCBkYXRlOiAnbWVkaXVtRGF0ZSd9fSB7e2lzTGFzdCA/IFwiXCIgOiBzZXBhcmF0b3J9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhc2hvd0xhYmVsICYmIGlzVHlwZURhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICB7e2l0ZW1bb2JqZWN0LmZpZWxkXXwgZGF0ZTogJ21lZGl1bURhdGUnfX0ge3tpc0xhc3QgPyBcIlwiIDogc2VwYXJhdG9yfX1cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIXNob3dMYWJlbCAmJiAhaXNUeXBlRGF0ZVwiPnt7aXRlbVtvYmplY3QuZmllbGRdfX17e2lzTGFzdCA/IFwiXCIgOiBzZXBhcmF0b3J9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJpc0NoaXBcIiBuZy1sYWJlbC10bXAgbGV0LWl0ZW09XCJpdGVtXCIgbGV0LWNsZWFyPVwiY2xlYXJcIj5cclxuICAgICAgICAgICAgPG5nLWNoaXAgKG1vdXNlZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiBbY2xlYXJdPVwiY2xlYXJcIiBbd2l0aENyb3NzXT1cImlzTXVsdGlwbGVcIiBbaXRlbV09XCJpdGVtXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpcFwiIFtiYWNrZ3JvdW5kQ29sb3JdPVwiY2hpcENvbG9yXCIgW2xhYmVsXT1cIml0ZW1bb2JqZWN0c1swXS5maWVsZF1cIlxyXG4gICAgICAgICAgICAgICAgW3dpZHRoXT1cImNoaXBXaWR0aFwiPlxyXG4gICAgICAgICAgICA8L25nLWNoaXA+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJpc0NoaXBcIiBuZy1vcHRpb24tdG1wIGxldC1jbGVhcj1cImNsZWFyXCIgbGV0LWl0ZW09XCJpdGVtXCI+XHJcbiAgICAgICAgICAgIDxuZy1jaGlwIChtb3VzZWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgW2NsZWFyXT1cImNsZWFyXCIgW3dpdGhDcm9zc109XCJmYWxzZVwiIFtpdGVtXT1cIml0ZW1cIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlwXCIgW2JhY2tncm91bmRDb2xvcl09XCJjaGlwQ29sb3JcIiBbbGFiZWxdPVwiaXRlbVtvYmplY3RzWzBdLmZpZWxkXVwiXHJcbiAgICAgICAgICAgICAgICBbd2lkdGhdPVwiY2hpcFdpZHRoXCI+XHJcbiAgICAgICAgICAgIDwvbmctY2hpcD5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9uZy1zZWxlY3Q+XHJcbjwvZGl2PiJdfQ==
326
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hvb3NlLWdlbmVyYWwtaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnB1dHMvc3JjL2xpYi9jaG9vc2UtZ2VuZXJhbC1pdGVtL2Nob29zZS1nZW5lcmFsLWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW5wdXRzL3NyYy9saWIvY2hvb3NlLWdlbmVyYWwtaXRlbS9jaG9vc2UtZ2VuZXJhbC1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixVQUFVLEVBQ1YsS0FBSyxFQUdMLE1BQU0sR0FHUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBR0wsYUFBYSxFQUNiLGlCQUFpQixHQUdsQixNQUFNLGdCQUFnQixDQUFDO0FBSXhCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUU5RSxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUMxRyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7Ozs7Ozs7Ozs7QUFtQmxFLE1BQU0sT0FBTywwQkFBMEI7SUFrRDNCO0lBQ0E7SUFDQTtJQWpEVixVQUFVLEdBQVcsYUFBYSxDQUFDLGdCQUFnQixDQUFDO0lBQ3BELFNBQVMsR0FBWSxLQUFLLENBQUM7SUFDbEIsS0FBSyxDQUFRO0lBQ2IsS0FBSyxHQUFXLE9BQU8sQ0FBQztJQUN4QixRQUFRLEdBQVcsTUFBTSxDQUFDO0lBQzFCLFdBQVcsQ0FBUztJQUNwQixPQUFPLENBQVM7SUFDaEIsVUFBVSxHQUFZLEtBQUssQ0FBQztJQUM1QixnQkFBZ0IsQ0FBVTtJQUMxQixPQUFPLENBQWtCO0lBQ3pCLFNB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VTtzQkFBbEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFHRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyx5QkFBeUI7c0JBQWpDLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUVJLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxJQUFJO3NCQUFiLE1BQU07Z0JBQ3VCLG9CQUFvQjtzQkFBakQsWUFBWTt1QkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgQ29udGVudENoaWxkLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBmb3J3YXJkUmVmLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgQWJzdHJhY3RDb250cm9sLFxyXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxyXG4gIE5HX1ZBTElEQVRPUlMsXHJcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgVmFsaWRhdGlvbkVycm9ycyxcclxuICBWYWxpZGF0b3IsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBMYWJlbEFuZEZpZWxkIH0gZnJvbSAnLi4vbW9kZWxzL2xhYmVsLWFuZC1maWVsZC5tb2RlbCc7XHJcbmltcG9ydCB7IENob29zZUdlbmVyYWxJdGVtU2VydmljZSB9IGZyb20gJy4vY2hvb3NlLWdlbmVyYWwtaXRlbS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUHJpbWFyeUNvbG9ycyB9IGZyb20gJy4uL3ByaW1hcnktY29sb3JzJztcclxuaW1wb3J0IHsgQ2hvb3NlT2JqZWN0VGVtcGxhdGVUeXBlIH0gZnJvbSAnLi9jaG9vc2Utb2JqZWN0LXRlbXBsYXRlLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7IENob29zZU9iamVjdEJhc2ljVGVtcGxhdGUgfSBmcm9tICcuL2Nob29zZS1vYmplY3QtYmFzaWMtdGVtcGxhdGUubW9kZWwnO1xyXG5pbXBvcnQgeyBDaG9vc2VJdGVtRnVsbE9iamVjdENvbnRyb2xDb25maWcgfSBmcm9tICcuLi9tb2RlbHMvY2hvb3NlLWl0ZW0tZnVsbC1vYmplY3QtY29udHJvbC1jb25maWcuZW51bSc7XHJcbmltcG9ydCB7IENoaXBJbnB1dFR5cGUgfSBmcm9tICdAam9vbGVyL3NoYXJlZC1nZW5lcmFsLWNvbXBvbmVudHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjaG9vc2UtZ2VuZXJhbC1pdGVtJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY2hvb3NlLWdlbmVyYWwtaXRlbS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY2hvb3NlLWdlbmVyYWwtaXRlbS5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ2hvb3NlR2VuZXJhbEl0ZW1Db21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBDaG9vc2VHZW5lcmFsSXRlbUNvbXBvbmVudCxcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICB9LFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDaG9vc2VHZW5lcmFsSXRlbUNvbXBvbmVudFxyXG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIFZhbGlkYXRvciwgQ29udHJvbFZhbHVlQWNjZXNzb3Jcclxue1xyXG4gIHByaW1hcnlSZWQ6IHN0cmluZyA9IFByaW1hcnlDb2xvcnMuJHByaW1hcnlSZWRDb2xvcjtcclxuICBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBpdGVtczogYW55W107XHJcbiAgQElucHV0KCkgbGFiZWw6IHN0cmluZyA9ICdsYWJlbCc7XHJcbiAgQElucHV0KCkgYXBwZW5kVG86IHN0cmluZyA9ICdib2R5JztcclxuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGFwaVBhdGg6IHN0cmluZztcclxuICBASW5wdXQoKSBpc011bHRpcGxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgaGlkZVNlbGVjdGVkSXRlbTogYm9vbGVhbjtcclxuICBASW5wdXQoKSBvYmplY3RzOiBMYWJlbEFuZEZpZWxkW107XHJcbiAgQElucHV0KCkgc2hvd0xhYmVsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2VwYXJhdG9yOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgd2lkdGg6IG51bWJlcjtcclxuICBASW5wdXQoKSBpc0NoaXA6IEJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBpc1R5cGVEYXRlOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGNoaXBDb2xvcjogc3RyaW5nID0gJ2JsYWNrJztcclxuICBASW5wdXQoKSBjaGlwVGV4dENvbG9yOiBzdHJpbmcgPSAnd2hpdGUnO1xyXG4gIEBJbnB1dCgpIGNoaXBXaWR0aDogbnVtYmVyID0gMTE7XHJcbiAgQElucHV0KCkgc2VsZWN0ZWRJdGVtSWQ6IG51bWJlciB8IG51bWJlcltdO1xyXG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHJlYWRPbmx5OiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHVzZUZ1bGxPYmplY3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93QWRkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZGlhbG9nQ29tcG9uZW50Q2xhc3M6IGFueTtcclxuICBASW5wdXQoKSBzaG93RGlhbG9nRGVmYXVsdEJ1dHRvbnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBkaWFsb2dDb21wb25lbnRJbnB1dHM6IGFueSA9IHtcclxuICAgIGlzRGlhbG9nOiB0cnVlLFxyXG4gIH07XHJcbiAgQElucHV0KCkgYmluZFZhbHVlS2V5OiBzdHJpbmcgfCBudWxsID0gJ2lkJzsgLy8gb3IgbnVsbCBmb3IgZnVsbCBvYmplY3RcclxuICBASW5wdXQoKSBhZGRSb3V0ZTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGNhbkFjdGlvbnNSb3V0ZTogYm9vbGVhbjtcclxuICBASW5wdXQoKSBkaWFsb2dUaXRsZTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGNsZWFyYWJsZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgZmlsdGVyUGFyYW1zOiBhbnk7XHJcbiAgQElucHV0KCkgdGVtcGxhdGVUeXBlOiBDaG9vc2VPYmplY3RUZW1wbGF0ZVR5cGUgPSBDaG9vc2VPYmplY3RUZW1wbGF0ZVR5cGUuREVGQVVMVDtcclxuICBASW5wdXQoKSBiYXNpY1RlbXBsYXRlRGF0YTogQ2hvb3NlT2JqZWN0QmFzaWNUZW1wbGF0ZTtcclxuICBASW5wdXQoKSBjb250ZW50UHJvamVjdGlvbkxhYmVsS2V5OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZnVsbE9iamVjdENvbnRyb2xDb25maWc6IENob29zZUl0ZW1GdWxsT2JqZWN0Q29udHJvbENvbmZpZyA9XHJcbiAgICBDaG9vc2VJdGVtRnVsbE9iamVjdENvbnRyb2xDb25maWcuSUQ7XHJcbiAgQE91dHB1dCgpIGNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgYmx1ciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAQ29udGVudENoaWxkKCdjdXN0b21PcHRpb24nKSBjdXN0b21PcHRpb25UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgQ2hvb3NlT2JqZWN0VGVtcGxhdGVUeXBlID0gQ2hvb3NlT2JqZWN0VGVtcGxhdGVUeXBlO1xyXG4gIGNoaXBJbnB1dFR5cGVzID0gQ2hpcElucHV0VHlwZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9DaG9vc2VHZW5lcmFsSXRlbVNlcnZpY2U6IENob29zZUdlbmVyYWxJdGVtU2VydmljZSxcclxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICBwcml2YXRlIF9jZHI6IENoYW5nZURldGVjdG9yUmVmXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnRlbXBsYXRlVHlwZSA9PSBDaG9vc2VPYmplY3RUZW1wbGF0ZVR5cGUuQkFTSUMpIHtcclxuICAgICAgdGhpcy5zZXR1cEJhc2ljVGVtcGxhdGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldHVwQmFzaWNUZW1wbGF0ZSgpIHt9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzWydpdGVtcyddICYmICFjaGFuZ2VzLml0ZW1zKSB7XHJcbiAgICAgIHRoaXMuaXRlbXMgPSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1snYXBpUGF0aCddICYmICFjaGFuZ2VzLmFwaVBhdGgpIHtcclxuICAgICAgdGhpcy5hcGlQYXRoID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgdGhpcy52YWxpZGF0ZUlucHV0cyhjaGFuZ2VzKTtcclxuXHJcbiAgICBpZiAodGhpcy5zaG93QWRkKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGVBZGRDb25maWd1cmF0aW9uKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoIWNoYW5nZXNbJ2l0ZW1zJ10gfHwgIWNoYW5nZXNbJ2l0ZW1zJ10uY3VycmVudFZhbHVlKSB7XHJcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGVBZGRDb25maWd1cmF0aW9uKCkge1xyXG4gICAgaWYgKFxyXG4gICAgICAodGhpcy5hZGRSb3V0ZSA9PSAnJyB8fCB0aGlzLmFkZFJvdXRlID09IG51bGwgfHwgdGhpcy5hZGRSb3V0ZSA9PSB1bmRlZmluZWQpICYmXHJcbiAgICAgICh0aGlzLmRpYWxvZ0NvbXBvbmVudENsYXNzID09IG51bGwgfHwgdGhpcy5kaWFsb2dDb21wb25lbnRDbGFzcyA9PSB1bmRlZmluZWQpXHJcbiAgICApIHtcclxuICAgICAgdGhyb3cgRXJyb3IoXHJcbiAgICAgICAgJ1Nob3dpbmcgdGhlIGFkZCBidXR0b24gcmVxdWlyZXMgZWl0aGVyIGEgcm91dGUgZm9yIHRoZSBhZGQgYnV0dG9uIHRvIHJvdXRlIHRvLCBvciBhIGNvbXBvbmVudCBjbGFzcyBmb3IgYSBkaWFsb2cgdG8gb3BlbiB1cCB3aXRoIHRoYXQgY29tcG9uZW50LidcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHdyaXRlVmFsdWUoaXRlbTogYW55KSB7XHJcbiAgICBpZiAoaXRlbSAhPSB1bmRlZmluZWQgfHwgaXRlbSAhPSBudWxsKSB7XHJcbiAgICAgIGlmICghdGhpcy51c2VGdWxsT2JqZWN0KSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1JZCA9IGl0ZW07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbSkpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtSWQgPSBpdGVtLm1hcChpdGVtID0+IGl0ZW0uaWQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUlkID0gaXRlbS5pZDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtSWQgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xyXG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XHJcbiAgICB0aGlzLnByb3BvZ2F0ZVRvdWNoID0gZm47XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHByb3BhZ2F0ZUNoYW5nZSA9IChfOiBhbnkpID0+IHt9O1xyXG4gIHByaXZhdGUgcHJvcG9nYXRlVG91Y2ggPSAoKSA9PiB7fTtcclxuICBwcml2YXRlIG9uVmFsaWRhdGlvbkNoYW5nZTogYW55ID0gKCkgPT4ge307XHJcblxyXG4gIHVwZGF0ZUJsdXIoKSB7XHJcbiAgICB0aGlzLnByb3BvZ2F0ZVRvdWNoKCk7XHJcbiAgICB0aGlzLmJsdXIuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3RlZEl0ZW1DaGFuZ2VkKCRldmVudCkge1xyXG4gICAgbGV0IHZhbHVlVG9Qcm9wYWdhdGU6IGFueTtcclxuICAgIGlmICh0aGlzLmZ1bGxPYmplY3RDb250cm9sQ29uZmlnID09IENob29zZUl0ZW1GdWxsT2JqZWN0Q29udHJvbENvbmZpZy5JRCkge1xyXG4gICAgICB2YWx1ZVRvUHJvcGFnYXRlID0gdGhpcy5zZWxlY3RlZEl0ZW1JZDtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5mdWxsT2JqZWN0Q29udHJvbENvbmZpZyA9PSBDaG9vc2VJdGVtRnVsbE9iamVjdENvbnRyb2xDb25maWcuT0JKRUNUKSB7XHJcbiAgICAgIHZhbHVlVG9Qcm9wYWdhdGUgPSAkZXZlbnQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBFcnJvcignQ2hvb3NlSXRlbUZ1bGxPYmplY3RDb250cm9sQ29uZmlnIGlzIG5vdCByZWNvZ25pemVkLicpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UodmFsdWVUb1Byb3BhZ2F0ZSk7XHJcbiAgICB0aGlzLmNoYW5nZS5lbWl0KCRldmVudCk7XHJcbiAgICB0aGlzLm9uVmFsaWRhdGlvbkNoYW5nZSgpO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGVJbnB1dHMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgaWYgKFxyXG4gICAgICBjaGFuZ2VzLmFwaVBhdGggJiZcclxuICAgICAgY2hhbmdlcy5hcGlQYXRoLmN1cnJlbnRWYWx1ZSAmJlxyXG4gICAgICBjaGFuZ2VzLml0ZW1zICYmXHJcbiAgICAgIGNoYW5nZXMuaXRlbXMuY3VycmVudFZhbHVlXHJcbiAgICApIHtcclxuICAgICAgdGhyb3cgRXJyb3IoJ0JvdGggYW4gQVBJIHBhdGggYW5kIGFuIGl0ZW1zIGxpc3Qgd2FzIHByb3ZpZGVkLicpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0RGF0YSgpIHtcclxuICAgIGlmICh0aGlzLmFwaVBhdGgpIHtcclxuICAgICAgdGhpcy5fQ2hvb3NlR2VuZXJhbEl0ZW1TZXJ2aWNlLmdldERhdGEodGhpcy5hcGlQYXRoLCB0aGlzLmZpbHRlclBhcmFtcykuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzcG9uc2U6IGFueVtdKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLml0ZW1zID0gcmVzcG9uc2U7XHJcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJyZXNwb25zZTogaXRlbXMgZnJvbSAnXCIsIHRoaXMuYXBpUGF0aCwgXCInIGZvdW5kOiBcIiwgdGhpcy5pdGVtcyk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogZXJyb3IgPT4gY29uc29sZS5lcnJvcignZXJyb3InLCBlcnJvciksXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0V2lkdGgoKSB7XHJcbiAgICBsZXQgc3R5bGUgPSB7fTtcclxuICAgIGlmICh0aGlzLndpZHRoKSB7XHJcbiAgICAgIHN0eWxlID0ge1xyXG4gICAgICAgIHdpZHRoOiB0aGlzLndpZHRoICsgJ3JlbScsXHJcbiAgICAgIH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzdHlsZSA9IHtcclxuICAgICAgICB3aWR0aDogJzEwMCUnLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0eWxlO1xyXG4gIH1cclxuXHJcbiAgb25DbGlja0FkZE5ldygpIHtcclxuICAgIGNvbnNvbGUubG9nKCdEWU5BTUlDIERJQUxPRyBOT1QgSU1QTEVNRU5URUQgSU4gTElCUkFSWSBZRVQnKTtcclxuICAgIFxyXG4gICAgLy8gQWRkIGR5bmFtaWMgZGlhbG9nIGxhdGVyXHJcbiAgICAvLyBsZXQgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihEeW5hbWljRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAvLyAgIHBhbmVsQ2xhc3M6ICdjdXN0b20tZGlhbG9nLXBhZGRpbmcnLFxyXG4gICAgLy8gICB3aWR0aDogJzkwJScsXHJcbiAgICAvLyAgIG1pbldpZHRoOiAnOTAlJyxcclxuICAgIC8vICAgbWF4SGVpZ2h0OiAnOTB2aCcsXHJcbiAgICAvLyAgIGRhdGE6IHtcclxuICAgIC8vICAgICBjb21wb25lbnQ6IHRoaXMuZGlhbG9nQ29tcG9uZW50Q2xhc3MsXHJcbiAgICAvLyAgICAgc2hvd0RlZmF1bHRCdXR0b25zOiB0aGlzLnNob3dEaWFsb2dEZWZhdWx0QnV0dG9ucyxcclxuICAgIC8vICAgICB0aXRsZTogdGhpcy5kaWFsb2dUaXRsZSxcclxuICAgIC8vICAgICBpbnB1dHM6IHRoaXMuZGlhbG9nQ29tcG9uZW50SW5wdXRzLFxyXG4gICAgLy8gICB9LFxyXG4gICAgLy8gfSk7XHJcblxyXG4gICAgLy8gZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgIC8vICAgaWYgKGRhdGEpIHtcclxuICAgIC8vICAgICBjb25zb2xlLmxvZygnTmV3IGl0ZW0gQWRkZWQ6ICcsIGRhdGEpO1xyXG4gICAgLy8gICAgIHRoaXMuaXRlbXMucHVzaChkYXRhKTtcclxuICAgIC8vICAgICB0aGlzLml0ZW1zID0gWy4uLnRoaXMuaXRlbXNdO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9KTtcclxuICB9XHJcblxyXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlPyhmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgdGhpcy5vblZhbGlkYXRpb25DaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcclxuICAgIHJldHVybiBudWxsO1xyXG4gICAgaWYgKGNvbnRyb2wpIHtcclxuICAgICAgY29uc3QgZXJyb3JzID0gY29udHJvbC5lcnJvcnM7XHJcbiAgICAgIGlmIChlcnJvcnMpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnZXJyb3Jzc3NzOiAnLCBlcnJvcnMpO1xyXG4gICAgICAgIHJldHVybiBlcnJvcnM7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInNlbGVjdFwiPlxyXG4gICAgPG5nLXNlbGVjdCBbcmVhZG9ubHldPVwicmVhZE9ubHlcIiBbbG9hZGluZ109XCJpc0xvYWRpbmdcIiBbaGlkZVNlbGVjdGVkXT1cImhpZGVTZWxlY3RlZEl0ZW1cIlxyXG4gICAgICAgIFtjbG9zZU9uU2VsZWN0XT1cIiFpc011bHRpcGxlXCIgW25nU3R5bGVdPVwic2V0V2lkdGgoKVwiIGNsYXNzPVwiY29tcG9uZW50XCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICAgICBbYXBwZW5kVG9dPVwiYXBwZW5kVG9cIiBkcm9wZG93blBvc2l0aW9uPVwiYm90dG9tXCIgKGJsdXIpPVwidXBkYXRlQmx1cigpXCIgW2JpbmRMYWJlbF09XCJsYWJlbFwiXHJcbiAgICAgICAgW2JpbmRWYWx1ZV09XCJiaW5kVmFsdWVLZXlcIiBbY29tcGFyZVdpdGhdPVwiXCIgW2l0ZW1zXT1cIml0ZW1zXCIgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcclxuICAgICAgICAoY2hhbmdlKT1cIm9uU2VsZWN0ZWRJdGVtQ2hhbmdlZCgkZXZlbnQpXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEl0ZW1JZFwiIFtjbGVhcmFibGVdPVwiY2xlYXJhYmxlXCJcclxuICAgICAgICBbbXVsdGlwbGVdPVwiaXNNdWx0aXBsZVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0ZW1wbGF0ZVR5cGUgPT0gQ2hvb3NlT2JqZWN0VGVtcGxhdGVUeXBlLkRFRkFVTFRcIj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwiaXNMb2FkaW5nXCIgbmctbGFiZWwtdG1wIGxldC1pdGVtPVwiaXRlbVwiIGxldC1jbGVhcj1cImNsZWFyXCI+IDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgbmctbGFiZWwtdG1wIGxldC1pdGVtPVwiaXRlbVwiIGxldC1pbmRleD1cImluZGV4XCIgbGV0LXNlYXJjaD1cInNlYXJjaFRlcm1cIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvYmplY3RzOyBlbHNlIG5vbk9iamVjdExhYmVsVGVtcGxhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRlbXBsYXRlXCIgKm5nRm9yPVwibGV0IG9iamVjdCBvZiBvYmplY3RzOyBsZXQgaXNMYXN0ID0gbGFzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRlbXBsYXRlLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHNob3dMYWJlbCA/IG9iamVjdC5sYWJlbCArICc6ICcgOiAnJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX17e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNUeXBlRGF0ZSA/IChpdGVtW29iamVjdC5maWVsZF0gfCBkYXRlOiAnbWVkaXVtRGF0ZScpIDogaXRlbVtvYmplY3QuZmllbGRdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9uT2JqZWN0TGFiZWxUZW1wbGF0ZT57eyBpdGVtIH19IDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICA8IS0tIE9wdGlvbiBUZW1wbGF0ZSAtLT5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nLW9wdGlvbi10bXAgbGV0LWl0ZW09XCJpdGVtXCIgbGV0LWluZGV4PVwiaW5kZXhcIiBsZXQtc2VhcmNoPVwic2VhcmNoVGVybVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm9iamVjdHM7IGVsc2Ugbm9uT2JqZWN0T3B0aW9uVGVtcGxhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgb2JqZWN0IG9mIG9iamVjdHM7IGxldCBpc0xhc3QgPSBsYXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHNob3dMYWJlbCA/IG9iamVjdC5sYWJlbCArICc6ICcgOiAnJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9fXt7IGlzVHlwZURhdGUgPyAoaXRlbVtvYmplY3QuZmllbGRdIHwgZGF0ZTogJ21lZGl1bURhdGUnKSA6IGl0ZW1bb2JqZWN0LmZpZWxkXSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub25PYmplY3RPcHRpb25UZW1wbGF0ZT57eyBpdGVtIH19IDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJpc0NoaXAgJiYgIWlzTG9hZGluZ1wiIG5nLWxhYmVsLXRtcCBsZXQtaXRlbT1cIml0ZW1cIiBsZXQtY2xlYXI9XCJjbGVhclwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNoaXAgKG1vdXNlZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiBbY2xlYXJdPVwiY2xlYXJcIiBbd2l0aENyb3NzXT1cImlzTXVsdGlwbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtpbnB1dFR5cGVdPVwiY2hpcElucHV0VHlwZXMuQ1VTVE9NXCJcclxuICAgICAgICAgICAgICAgICAgICBbYmFja2dyb3VuZENvbG9yXT1cIml0ZW0uZGlzYWJsZWQgPT0gdHJ1ZSA/IHByaW1hcnlSZWQgOiBjaGlwQ29sb3JcIiBbbGFiZWxdPVwiaXRlbVtvYmplY3RzWzBdLmZpZWxkXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1dPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jaGlwPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJpc0NoaXAgJiYgIWlzTG9hZGluZ1wiIG5nLW9wdGlvbi10bXAgbGV0LWNsZWFyPVwiY2xlYXJcIiBsZXQtaXRlbT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jaGlwIChtb3VzZWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgW3dpdGhDcm9zc109XCJmYWxzZVwiIFtpbnB1dFR5cGVdPVwiY2hpcElucHV0VHlwZXMuQ1VTVE9NXCJcclxuICAgICAgICAgICAgICAgICAgICBbYmFja2dyb3VuZENvbG9yXT1cIml0ZW0uZGlzYWJsZWQgPT0gdHJ1ZSA/IHByaW1hcnlSZWQgOiBjaGlwQ29sb3JcIiBbbGFiZWxdPVwiaXRlbVtvYmplY3RzWzBdLmZpZWxkXVwiPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jaGlwPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGVtcGxhdGVUeXBlID09IENob29zZU9iamVjdFRlbXBsYXRlVHlwZS5CQVNJQ1wiPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgbmctbGFiZWwtdG1wIGxldC1pdGVtPVwiaXRlbVwiIGxldC1jbGVhcj1cImNsZWFyXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBpdGVtW2Jhc2ljVGVtcGxhdGVEYXRhLmxhYmVsXSB9fVxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgbmctb3B0aW9uLXRtcCBsZXQtY2xlYXI9XCJjbGVhclwiIGxldC1pdGVtPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1jYXJkIGNsYXNzPVwiYmFzaWMtdGVtcGxhdGUtY2FyZFwiIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAnd2l0aC1pbWFnZSc6IGJhc2ljVGVtcGxhdGVEYXRhLmhhc0ltYWdlLFxyXG4gICAgICAgICAgICAgICd3aXRob3V0LWltYWdlJzogIWJhc2ljVGVtcGxhdGVEYXRhLmhhc0ltYWdlLFxyXG4gICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltYWdlLWNvbnRcIiAqbmdJZj1cImJhc2ljVGVtcGxhdGVEYXRhLmhhc0ltYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJtYWluLWltYWdlXCIgW3NyY109XCJpdGVtW2Jhc2ljVGVtcGxhdGVEYXRhLmltYWdlXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmVycm9yPVwidGhpcy5zcmM9Jy4uLy4uLy4uL2Fzc2V0cy9pbWFnZXMvZGVmYXVsdEltYWdlLmpwZyc7XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtW2Jhc2ljVGVtcGxhdGVEYXRhLnRpdGxlXSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1YnRpdGxlLXN0eWxlXCIgKm5nSWY9XCJiYXNpY1RlbXBsYXRlRGF0YS5oYXNTdWJ0aXRsZU9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgaXRlbVtiYXNpY1RlbXBsYXRlRGF0YS5zdWJ0aXRsZU9uZV0gfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYmFzaWNUZW1wbGF0ZURhdGEuaGFzU3VidGl0bGVUd29cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbC1kaXZpZGVyXCI+IHwgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGl0ZW1bYmFzaWNUZW1wbGF0ZURhdGEuc3VidGl0bGVUd29dIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzY3JpcHRpb25cIiAqbmdJZj1cImJhc2ljVGVtcGxhdGVEYXRhLmhhc0Rlc2NyaXB0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtW2Jhc2ljVGVtcGxhdGVEYXRhLmRlc2NyaXB0aW9uXSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWNhcmQ+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRlbXBsYXRlVHlwZSA9PSBDaG9vc2VPYmplY3RUZW1wbGF0ZVR5cGUuQ09OVEVOVF9QUk9KRUNUSU9OXCI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cImlzTG9hZGluZ1wiIG5nLWxhYmVsLXRtcCBsZXQtaXRlbT1cIml0ZW1cIiBsZXQtY2xlYXI9XCJjbGVhclwiPiA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nLWxhYmVsLXRtcCBsZXQtaXRlbT1cIml0ZW1cIiBsZXQtaW5kZXg9XCJpbmRleFwiIGxldC1zZWFyY2g9XCJzZWFyY2hUZXJtXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZW1wbGF0ZS1pdGVtXCI+IHt7IGl0ZW1bY29udGVudFByb2plY3Rpb25MYWJlbEtleV0gfX0gPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgPCEtLSBPcHRpb24gVGVtcGxhdGUgLS0+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZy1vcHRpb24tdG1wIGxldC1pdGVtPVwiaXRlbVwiIGxldC1pbmRleD1cImluZGV4XCIgbGV0LXNlYXJjaD1cInNlYXJjaFRlcm1cIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY3VzdG9tT3B0aW9uVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGl0ZW0gfVwiPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLXNlbGVjdD5cclxuICAgIDxkcm9wZG93bi1hY3Rpb25zICpuZ0lmPVwic2hvd0FkZFwiIFtjYW5Sb3V0ZV09XCJjYW5BY3Rpb25zUm91dGVcIiBbcm91dGVdPVwiYWRkUm91dGVcIlxyXG4gICAgICAgIChhZGRDbGlja2VkKT1cIm9uQ2xpY2tBZGROZXcoKVwiPjwvZHJvcGRvd24tYWN0aW9ucz5cclxuPC9kaXY+XHJcbiAgIl19