ato-water-lib 0.0.89 → 0.0.90

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. package/{esm2020 → esm2022}/lib/ato-water-lib.component.mjs +5 -5
  2. package/{esm2020 → esm2022}/lib/ato-water-lib.module.mjs +15 -15
  3. package/{esm2020 → esm2022}/lib/ato-water-lib.service.mjs +5 -5
  4. package/esm2022/lib/components/asset-flow/asset-flow.component.mjs +174 -0
  5. package/{esm2020 → esm2022}/lib/components/asset-params-view/asset-params-view.component.mjs +7 -9
  6. package/esm2022/lib/components/flow-diagram-lib/flow-diagram-lib.component.mjs +55 -0
  7. package/esm2022/lib/directive/ato-loading.directive.mjs +59 -0
  8. package/esm2022/lib/directive/ng-var.directive.mjs +33 -0
  9. package/esm2022/lib/models/default-gojs-editor.model.mjs +3582 -0
  10. package/esm2022/lib/models/gojs-data.model.mjs +10 -0
  11. package/esm2022/lib/models/gojs-editor.model.mjs +1799 -0
  12. package/esm2022/lib/services/utils/utils.service.mjs +133 -0
  13. package/{fesm2020 → fesm2022}/ato-water-lib.mjs +193 -168
  14. package/fesm2022/ato-water-lib.mjs.map +1 -0
  15. package/lib/components/asset-flow/asset-flow.component.d.ts +1 -1
  16. package/lib/components/asset-params-view/asset-params-view.component.d.ts +1 -1
  17. package/lib/components/flow-diagram-lib/flow-diagram-lib.component.d.ts +1 -1
  18. package/lib/constants/components-group-const.d.ts +1 -1
  19. package/lib/directive/ato-loading.directive.d.ts +1 -1
  20. package/lib/directive/ng-var.directive.d.ts +1 -1
  21. package/lib/models/default-gojs-editor.model.d.ts +2 -2
  22. package/lib/models/gojs-editor.model.d.ts +4 -4
  23. package/package.json +7 -13
  24. package/esm2020/lib/components/asset-flow/asset-flow.component.mjs +0 -165
  25. package/esm2020/lib/components/flow-diagram-lib/flow-diagram-lib.component.mjs +0 -54
  26. package/esm2020/lib/directive/ato-loading.directive.mjs +0 -55
  27. package/esm2020/lib/directive/ng-var.directive.mjs +0 -31
  28. package/esm2020/lib/models/default-gojs-editor.model.mjs +0 -3573
  29. package/esm2020/lib/models/gojs-data.model.mjs +0 -6
  30. package/esm2020/lib/models/gojs-editor.model.mjs +0 -1797
  31. package/esm2020/lib/services/utils/utils.service.mjs +0 -133
  32. package/fesm2015/ato-water-lib.mjs +0 -9055
  33. package/fesm2015/ato-water-lib.mjs.map +0 -1
  34. package/fesm2020/ato-water-lib.mjs.map +0 -1
  35. /package/{esm2020 → esm2022}/ato-water-lib.mjs +0 -0
  36. /package/{esm2020 → esm2022}/lib/constants/applicable-prefixes-const.mjs +0 -0
  37. /package/{esm2020 → esm2022}/lib/constants/base64.const.mjs +0 -0
  38. /package/{esm2020 → esm2022}/lib/constants/components-group-const.mjs +0 -0
  39. /package/{esm2020 → esm2022}/lib/constants/icon-base64.const.mjs +0 -0
  40. /package/{esm2020 → esm2022}/lib/constants/key.const.mjs +0 -0
  41. /package/{esm2020 → esm2022}/lib/constants/plant.constant.mjs +0 -0
  42. /package/{esm2020 → esm2022}/lib/constants/value.const.mjs +0 -0
  43. /package/{esm2020 → esm2022}/lib/models/ato-asset-flow.model.mjs +0 -0
  44. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
@@ -0,0 +1,133 @@
1
+ import { DecimalPipe } from '@angular/common';
2
+ import { Injectable } from '@angular/core';
3
+ import { ATO_ABBREVIATION, APPLICABLE_PREFIXES, ROUNDED_NUMBER, } from '../../constants/applicable-prefixes-const';
4
+ import { v4 as uuidV4 } from 'uuid';
5
+ import _ from 'lodash';
6
+ import * as i0 from "@angular/core";
7
+ export class UtilsService {
8
+ static convertPrefixesData(data) {
9
+ if (!data?.unit || (!+data?.value && data?.value !== '0')) {
10
+ return {
11
+ shortenedNumber: data?.value ?? '0',
12
+ unitPrefixes: '',
13
+ };
14
+ }
15
+ const [unitToConvert, suffixUnit] = data?.unit?.split('/');
16
+ if (unitToConvert === ATO_ABBREVIATION.kWh) {
17
+ return this.getDataFormatSpecialKwh(data?.value, data?.isChangeUnitKwh);
18
+ }
19
+ return this.getDataFormatUnit(data?.value, unitToConvert);
20
+ }
21
+ static getDataFormatSpecialKwh(value, isChangeUnitKwh) {
22
+ const _DecimalPipe = new DecimalPipe('en');
23
+ if (!!isChangeUnitKwh) {
24
+ // 1.000.000 KWh => 1 GWh
25
+ if (Math.abs(value) >= ROUNDED_NUMBER.MILLION) {
26
+ return {
27
+ shortenedNumber: _DecimalPipe.transform(+(value / ROUNDED_NUMBER.MILLION) ?? 0, '1.0-2'),
28
+ unitPrefixes: APPLICABLE_PREFIXES?.[ATO_ABBREVIATION.kWh]?.[ROUNDED_NUMBER.BILLION],
29
+ };
30
+ }
31
+ // 1000 KWh => 1 MWh
32
+ if (Math.abs(value) >= ROUNDED_NUMBER.THOUSAND) {
33
+ return {
34
+ shortenedNumber: _DecimalPipe.transform(+(value / ROUNDED_NUMBER.THOUSAND) ?? 0, '1.0-2'),
35
+ unitPrefixes: APPLICABLE_PREFIXES?.[ATO_ABBREVIATION.kWh]?.[ROUNDED_NUMBER.MILLION],
36
+ };
37
+ }
38
+ }
39
+ if (Math.abs(value) >= ROUNDED_NUMBER.BILLION) {
40
+ return {
41
+ shortenedNumber: _DecimalPipe.transform(+(value / ROUNDED_NUMBER.MILLION) ?? 0, '1.0-2'),
42
+ unitPrefixes: APPLICABLE_PREFIXES?.[ATO_ABBREVIATION.kWh]?.[ROUNDED_NUMBER.BILLION],
43
+ };
44
+ }
45
+ if (Math.abs(value) >= ROUNDED_NUMBER.MILLION) {
46
+ return {
47
+ shortenedNumber: _DecimalPipe.transform(+(value / ROUNDED_NUMBER.MILLION) ?? 0, '1.0-2'),
48
+ unitPrefixes: APPLICABLE_PREFIXES?.[ATO_ABBREVIATION.kWh]?.[ROUNDED_NUMBER.MILLION],
49
+ };
50
+ }
51
+ if (Math.abs(value) >= ROUNDED_NUMBER.THOUSAND) {
52
+ return {
53
+ shortenedNumber: _DecimalPipe.transform(+(value / ROUNDED_NUMBER.THOUSAND) ?? 0, '1.0-2'),
54
+ unitPrefixes: APPLICABLE_PREFIXES?.[ATO_ABBREVIATION.kWh]?.[ROUNDED_NUMBER.THOUSAND],
55
+ };
56
+ }
57
+ return {
58
+ shortenedNumber: _DecimalPipe.transform(+value ?? 0, '1.0-2') ?? '0',
59
+ unitPrefixes: '',
60
+ };
61
+ }
62
+ static getDataFormatUnit(value, unit) {
63
+ const _DecimalPipe = new DecimalPipe('en');
64
+ if (Math.abs(value) >= ROUNDED_NUMBER.BILLION) {
65
+ return {
66
+ shortenedNumber: _DecimalPipe.transform(+(value / ROUNDED_NUMBER.BILLION) ?? 0, '1.0-2'),
67
+ unitPrefixes: APPLICABLE_PREFIXES?.[unit]?.[ROUNDED_NUMBER.BILLION],
68
+ };
69
+ }
70
+ if (Math.abs(value) >= ROUNDED_NUMBER.MILLION) {
71
+ return {
72
+ shortenedNumber: _DecimalPipe.transform(+(value / ROUNDED_NUMBER.MILLION) ?? 0, '1.0-2'),
73
+ unitPrefixes: APPLICABLE_PREFIXES?.[unit]?.[ROUNDED_NUMBER.MILLION],
74
+ };
75
+ }
76
+ if (Math.abs(value) >= ROUNDED_NUMBER.THOUSAND) {
77
+ return {
78
+ shortenedNumber: _DecimalPipe.transform(+(value / ROUNDED_NUMBER.THOUSAND) ?? 0, '1.0-2'),
79
+ unitPrefixes: APPLICABLE_PREFIXES?.[unit]?.[ROUNDED_NUMBER.THOUSAND],
80
+ };
81
+ }
82
+ return {
83
+ shortenedNumber: _DecimalPipe.transform(+value ?? 0, '1.0-2') ?? '0',
84
+ unitPrefixes: '',
85
+ };
86
+ }
87
+ static convertSpecialUnit(unit, unitPrefixes) {
88
+ switch (unit) {
89
+ case ATO_ABBREVIATION.kWh: {
90
+ return unitPrefixes ? ATO_ABBREVIATION.Wh : ATO_ABBREVIATION.kWh;
91
+ }
92
+ case ATO_ABBREVIATION.m3: {
93
+ return ATO_ABBREVIATION.m3_Special;
94
+ }
95
+ case ATO_ABBREVIATION.m3_unit: {
96
+ return ATO_ABBREVIATION.m3_unit_Special;
97
+ }
98
+ case ATO_ABBREVIATION.degC: {
99
+ return ATO_ABBREVIATION.degC_unit_Special;
100
+ }
101
+ case ATO_ABBREVIATION.degF: {
102
+ return ATO_ABBREVIATION.degF_unit_Special;
103
+ }
104
+ default: {
105
+ unit = UtilsService.replaceAll(unit ?? '', ATO_ABBREVIATION.m3, ATO_ABBREVIATION.m3_Special);
106
+ return UtilsService.replaceAll(unit ?? '', ATO_ABBREVIATION.CO2, ATO_ABBREVIATION.CO2_Special);
107
+ }
108
+ }
109
+ }
110
+ static generateUUID() {
111
+ const id = UtilsService.replaceAll(uuidV4(), '-', '').toUpperCase();
112
+ const randomPosition = _.random(0, 32);
113
+ const randomNumber = _.random(0, 9).toString();
114
+ const leftChar = id.slice(0, randomPosition);
115
+ const rightChar = id.slice(randomPosition);
116
+ return `${leftChar}${randomNumber}${rightChar}`;
117
+ }
118
+ static replaceAll(text, find, replace) {
119
+ function escapeRegExp(str) {
120
+ return str.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, '\\$1');
121
+ }
122
+ return text.replace(new RegExp(escapeRegExp(find), 'g'), replace);
123
+ }
124
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: UtilsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
125
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: UtilsService, providedIn: 'root' });
126
+ }
127
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: UtilsService, decorators: [{
128
+ type: Injectable,
129
+ args: [{
130
+ providedIn: 'root',
131
+ }]
132
+ }] });
133
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F0by13YXRlci1saWIvc3JjL2xpYi9zZXJ2aWNlcy91dGlscy91dGlscy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEdBQUcsTUFBTSwyQ0FBMkMsQ0FBQztBQUNuSCxPQUFPLEVBQUUsRUFBRSxJQUFJLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLENBQUMsTUFBTSxRQUFRLENBQUM7O0FBS3ZCLE1BQU0sT0FBTyxZQUFZO0lBQ3JCLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxJQUFxRjtRQUk1RyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxJQUFJLElBQUksRUFBRSxLQUFLLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN4RCxPQUFPO2dCQUNILGVBQWUsRUFBRSxJQUFJLEVBQUUsS0FBSyxJQUFJLEdBQUc7Z0JBQ25DLFlBQVksRUFBRSxFQUFFO2FBQ25CLENBQUM7UUFDTixDQUFDO1FBRUQsTUFBTSxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsR0FBRyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUzRCxJQUFJLGFBQWEsS0FBSyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN6QyxPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztRQUM1RSxDQUFDO1FBRUQsT0FBTyxJ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ZW50IjpbImltcG9ydCB7IERlY2ltYWxQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFUT19BQkJSRVZJQVRJT04sIEFQUExJQ0FCTEVfUFJFRklYRVMsIFJPVU5ERURfTlVNQkVSLCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9hcHBsaWNhYmxlLXByZWZpeGVzLWNvbnN0JztcbmltcG9ydCB7IHY0IGFzIHV1aWRWNCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgVXRpbHNTZXJ2aWNlIHtcbiAgICBzdGF0aWMgY29udmVydFByZWZpeGVzRGF0YShkYXRhOiB7IHZhbHVlOiBudW1iZXIgfCBzdHJpbmcgfCBhbnk7IHVuaXQ6IHN0cmluZyB8IGFueTsgaXNDaGFuZ2VVbml0S3doPzogYm9vbGVhbiB9KToge1xuICAgICAgICBzaG9ydGVuZWROdW1iZXI6IG51bWJlciB8IHN0cmluZyB8IG51bGw7XG4gICAgICAgIHVuaXRQcmVmaXhlczogbnVtYmVyIHwgbnVsbCB8IHN0cmluZztcbiAgICB9IHtcbiAgICAgICAgaWYgKCFkYXRhPy51bml0IHx8ICghK2RhdGE/LnZhbHVlICYmIGRhdGE/LnZhbHVlICE9PSAnMCcpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHNob3J0ZW5lZE51bWJlcjogZGF0YT8udmFsdWUgPz8gJzAnLFxuICAgICAgICAgICAgICAgIHVuaXRQcmVmaXhlczogJycsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgW3VuaXRUb0NvbnZlcnQsIHN1ZmZpeFVuaXRdID0gZGF0YT8udW5pdD8uc3BsaXQoJy8nKTtcblxuICAgICAgICBpZiAodW5pdFRvQ29udmVydCA9PT0gQVRPX0FCQlJFVklBVElPTi5rV2gpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldERhdGFGb3JtYXRTcGVjaWFsS3doKGRhdGE/LnZhbHVlLCBkYXRhPy5pc0NoYW5nZVVuaXRLd2gpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0YUZvcm1hdFVuaXQoZGF0YT8udmFsdWUsIHVuaXRUb0NvbnZlcnQpO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXREYXRhRm9ybWF0U3BlY2lhbEt3aCh2YWx1ZTogYW55LCBpc0NoYW5nZVVuaXRLd2g6IGFueSkge1xuICAgICAgICBjb25zdCBfRGVjaW1hbFBpcGUgPSBuZXcgRGVjaW1hbFBpcGUoJ2VuJyk7XG5cbiAgICAgICAgaWYgKCEhaXNDaGFuZ2VVbml0S3doKSB7XG4gICAgICAgICAgICAvLyAxLjAwMC4wMDAgS1doID0+IDEgR1doXG4gICAgICAgICAgICBpZiAoTWF0aC5hYnModmFsdWUpID49IFJPVU5ERURfTlVNQkVSLk1JTExJT04pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBzaG9ydGVuZWROdW1iZXI6IF9EZWNpbWFsUGlwZS50cmFuc2Zvcm0oKyh2YWx1ZSAvIFJPVU5ERURfTlVNQkVSLk1JTExJT04pID8/IDAsICcxLjAtMicpLFxuICAgICAgICAgICAgICAgICAgICB1bml0UHJlZml4ZXM6IEFQUExJQ0FCTEVfUFJFRklYRVM/LltBVE9fQUJCUkVWSUFUSU9OLmtXaF0/LltST1VOREVEX05VTUJFUi5CSUxMSU9OXSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gMTAwMCBLV2ggPT4gMSBNV2hcbiAgICAgICAgICAgIGlmIChNYXRoLmFicyh2YWx1ZSkgPj0gUk9VTkRFRF9OVU1CRVIuVEhPVVNBTkQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBzaG9ydGVuZWROdW1iZXI6IF9EZWNpbWFsUGlwZS50cmFuc2Zvcm0oKyh2YWx1ZSAvIFJPVU5ERURfTlVNQkVSLlRIT1VTQU5EKSA/PyAwLCAnMS4wLTInKSxcbiAgICAgICAgICAgICAgICAgICAgdW5pdFByZWZpeGVzOiBBUFBMSUNBQkxFX1BSRUZJWEVTPy5bQVRPX0FCQlJFVklBVElPTi5rV2hdPy5bUk9VTkRFRF9OVU1CRVIuTUlMTElPTl0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoTWF0aC5hYnModmFsdWUpID49IFJPVU5ERURfTlVNQkVSLkJJTExJT04pIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc2hvcnRlbmVkTnVtYmVyOiBfRGVjaW1hbFBpcGUudHJhbnNmb3JtKCsodmFsdWUgLyBST1VOREVEX05VTUJFUi5NSUxMSU9OKSA/PyAwLCAnMS4wLTInKSxcbiAgICAgICAgICAgICAgICB1bml0UHJlZml4ZXM6IEFQUExJQ0FCTEVfUFJFRklYRVM/LltBVE9fQUJCUkVWSUFUSU9OLmtXaF0/LltST1VOREVEX05VTUJFUi5CSUxMSU9OXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE1hdGguYWJzKHZhbHVlKSA+PSBST1VOREVEX05VTUJFUi5NSUxMSU9OKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHNob3J0ZW5lZE51bWJlcjogX0RlY2ltYWxQaXBlLnRyYW5zZm9ybSgrKHZhbHVlIC8gUk9VTkRFRF9OVU1CRVIuTUlMTElPTikgPz8gMCwgJzEuMC0yJyksXG4gICAgICAgICAgICAgICAgdW5pdFByZWZpeGVzOiBBUFBMSUNBQkxFX1BSRUZJWEVTPy5bQVRPX0FCQlJFVklBVElPTi5rV2hdPy5bUk9VTkRFRF9OVU1CRVIuTUlMTElPTl0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChNYXRoLmFicyh2YWx1ZSkgPj0gUk9VTkRFRF9OVU1CRVIuVEhPVVNBTkQpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc2hvcnRlbmVkTnVtYmVyOiBfRGVjaW1hbFBpcGUudHJhbnNmb3JtKCsodmFsdWUgLyBST1VOREVEX05VTUJFUi5USE9VU0FORCkgPz8gMCwgJzEuMC0yJyksXG4gICAgICAgICAgICAgICAgdW5pdFByZWZpeGVzOiBBUFBMSUNBQkxFX1BSRUZJWEVTPy5bQVRPX0FCQlJFVklBVElPTi5rV2hdPy5bUk9VTkRFRF9OVU1CRVIuVEhPVVNBTkRdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzaG9ydGVuZWROdW1iZXI6IF9EZWNpbWFsUGlwZS50cmFuc2Zvcm0oK3ZhbHVlID8/IDAsICcxLjAtMicpID8/ICcwJyxcbiAgICAgICAgICAgIHVuaXRQcmVmaXhlczogJycsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgc3RhdGljIGdldERhdGFGb3JtYXRVbml0KHZhbHVlOiBhbnksIHVuaXQ6IHN0cmluZykge1xuICAgICAgICBjb25zdCBfRGVjaW1hbFBpcGUgPSBuZXcgRGVjaW1hbFBpcGUoJ2VuJyk7XG5cbiAgICAgICAgaWYgKE1hdGguYWJzKHZhbHVlKSA+PSBST1VOREVEX05VTUJFUi5CSUxMSU9OKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHNob3J0ZW5lZE51bWJlcjogX0RlY2ltYWxQaXBlLnRyYW5zZm9ybSgrKHZhbHVlIC8gUk9VTkRFRF9OVU1CRVIuQklMTElPTikgPz8gMCwgJzEuMC0yJyksXG4gICAgICAgICAgICAgICAgdW5pdFByZWZpeGVzOiAoQVBQTElDQUJMRV9QUkVGSVhFUyBhcyBhbnkpPy5bdW5pdF0/LltST1VOREVEX05VTUJFUi5CSUxMSU9OXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE1hdGguYWJzKHZhbHVlKSA+PSBST1VOREVEX05VTUJFUi5NSUxMSU9OKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHNob3J0ZW5lZE51bWJlcjogX0RlY2ltYWxQaXBlLnRyYW5zZm9ybSgrKHZhbHVlIC8gUk9VTkRFRF9OVU1CRVIuTUlMTElPTikgPz8gMCwgJzEuMC0yJyksXG4gICAgICAgICAgICAgICAgdW5pdFByZWZpeGVzOiAoQVBQTElDQUJMRV9QUkVGSVhFUyBhcyBhbnkpPy5bdW5pdF0/LltST1VOREVEX05VTUJFUi5NSUxMSU9OXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE1hdGguYWJzKHZhbHVlKSA+PSBST1VOREVEX05VTUJFUi5USE9VU0FORCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzaG9ydGVuZWROdW1iZXI6IF9EZWNpbWFsUGlwZS50cmFuc2Zvcm0oKyh2YWx1ZSAvIFJPVU5ERURfTlVNQkVSLlRIT1VTQU5EKSA/PyAwLCAnMS4wLTInKSxcbiAgICAgICAgICAgICAgICB1bml0UHJlZml4ZXM6IChBUFBMSUNBQkxFX1BSRUZJWEVTIGFzIGFueSk/Llt1bml0XT8uW1JPVU5ERURfTlVNQkVSLlRIT1VTQU5EXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNob3J0ZW5lZE51bWJlcjogX0RlY2ltYWxQaXBlLnRyYW5zZm9ybSgrdmFsdWUgPz8gMCwgJzEuMC0yJykgPz8gJzAnLFxuICAgICAgICAgICAgdW5pdFByZWZpeGVzOiAnJyxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY29udmVydFNwZWNpYWxVbml0KHVuaXQ6IHN0cmluZywgdW5pdFByZWZpeGVzPzogYW55KSB7XG4gICAgICAgIHN3aXRjaCAodW5pdCkge1xuICAgICAgICAgICAgY2FzZSBBVE9fQUJCUkVWSUFUSU9OLmtXaDoge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bml0UHJlZml4ZXMgPyBBVE9fQUJCUkVWSUFUSU9OLldoIDogQVRPX0FCQlJFVklBVElPTi5rV2g7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEFUT19BQkJSRVZJQVRJT04ubTM6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gQVRPX0FCQlJFVklBVElPTi5tM19TcGVjaWFsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBBVE9fQUJCUkVWSUFUSU9OLm0zX3VuaXQ6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gQVRPX0FCQlJFVklBVElPTi5tM191bml0X1NwZWNpYWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEFUT19BQkJSRVZJQVRJT04uZGVnQzoge1xuICAgICAgICAgICAgICAgIHJldHVybiBBVE9fQUJCUkVWSUFUSU9OLmRlZ0NfdW5pdF9TcGVjaWFsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBBVE9fQUJCUkVWSUFUSU9OLmRlZ0Y6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gQVRPX0FCQlJFVklBVElPTi5kZWdGX3VuaXRfU3BlY2lhbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICB1bml0ID0gVXRpbHNTZXJ2aWNlLnJlcGxhY2VBbGwodW5pdCA/PyAnJywgQVRPX0FCQlJFVklBVElPTi5tMywgQVRPX0FCQlJFVklBVElPTi5tM19TcGVjaWFsKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gVXRpbHNTZXJ2aWNlLnJlcGxhY2VBbGwodW5pdCA/PyAnJywgQVRPX0FCQlJFVklBVElPTi5DTzIsIEFUT19BQkJSRVZJQVRJT04uQ08yX1NwZWNpYWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGdlbmVyYXRlVVVJRCgpIHtcbiAgICAgICAgY29uc3QgaWQgPSBVdGlsc1NlcnZpY2UucmVwbGFjZUFsbCh1dWlkVjQoKSwgJy0nLCAnJykudG9VcHBlckNhc2UoKTtcbiAgICAgICAgY29uc3QgcmFuZG9tUG9zaXRpb24gPSBfLnJhbmRvbSgwLCAzMik7XG4gICAgICAgIGNvbnN0IHJhbmRvbU51bWJlciA9IF8ucmFuZG9tKDAsIDkpLnRvU3RyaW5nKCk7XG4gICAgICAgIGNvbnN0IGxlZnRDaGFyID0gaWQuc2xpY2UoMCwgcmFuZG9tUG9zaXRpb24pO1xuICAgICAgICBjb25zdCByaWdodENoYXIgPSBpZC5zbGljZShyYW5kb21Qb3NpdGlvbik7XG4gICAgICAgIHJldHVybiBgJHtsZWZ0Q2hhcn0ke3JhbmRvbU51bWJlcn0ke3JpZ2h0Q2hhcn1gO1xuICAgIH1cblxuICAgIHN0YXRpYyByZXBsYWNlQWxsKHRleHQ6IGFueSwgZmluZDogYW55LCByZXBsYWNlOiBhbnkpOiBzdHJpbmcge1xuICAgICAgICBmdW5jdGlvbiBlc2NhcGVSZWdFeHAoc3RyOiBhbnkpIHtcbiAgICAgICAgICAgIHJldHVybiBzdHIucmVwbGFjZSgvKFsuKis/Xj0hOiR7fSgpfFxcW1xcXVxcL1xcXFxdKS9nLCAnXFxcXCQxJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRleHQucmVwbGFjZShuZXcgUmVnRXhwKGVzY2FwZVJlZ0V4cChmaW5kKSwgJ2cnKSwgcmVwbGFjZSk7XG4gICAgfVxufVxuIl19