@senior-agronegocio/angular-components 0.0.9866 → 0.0.9868

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 (37) hide show
  1. package/bundles/senior-agronegocio-angular-components.umd.js +446 -66
  2. package/bundles/senior-agronegocio-angular-components.umd.js.map +1 -1
  3. package/bundles/senior-agronegocio-angular-components.umd.min.js +2 -2
  4. package/bundles/senior-agronegocio-angular-components.umd.min.js.map +1 -1
  5. package/common/agro-array-utils.class.d.ts +13 -0
  6. package/common/agro-logics.class.d.ts +5 -0
  7. package/common/agro-object-utils.class.d.ts +3 -1
  8. package/common/agro-unit-converter.class.d.ts +23 -0
  9. package/common/index.d.ts +1 -0
  10. package/components/event-control-board/event-control-board.component.d.ts +4 -5
  11. package/components/event-control-board/service/event-control/event-control.service.d.ts +0 -20
  12. package/enums/index.d.ts +1 -0
  13. package/enums/unit-measurement.enum.d.ts +49 -0
  14. package/esm2015/common/agro-array-utils.class.js +19 -1
  15. package/esm2015/common/agro-logics.class.js +11 -6
  16. package/esm2015/common/agro-object-utils.class.js +28 -2
  17. package/esm2015/common/agro-unit-converter.class.js +256 -0
  18. package/esm2015/common/index.js +2 -1
  19. package/esm2015/components/event-control-board/event-control-board.component.js +77 -58
  20. package/esm2015/components/event-control-board/service/event-control/event-control.service.js +1 -5
  21. package/esm2015/enums/index.js +2 -1
  22. package/esm2015/enums/unit-measurement.enum.js +60 -0
  23. package/esm5/common/agro-array-utils.class.js +19 -1
  24. package/esm5/common/agro-logics.class.js +10 -4
  25. package/esm5/common/agro-object-utils.class.js +28 -2
  26. package/esm5/common/agro-unit-converter.class.js +259 -0
  27. package/esm5/common/index.js +2 -1
  28. package/esm5/components/event-control-board/event-control-board.component.js +77 -59
  29. package/esm5/components/event-control-board/service/event-control/event-control.service.js +1 -5
  30. package/esm5/enums/index.js +2 -1
  31. package/esm5/enums/unit-measurement.enum.js +60 -0
  32. package/fesm2015/senior-agronegocio-angular-components.js +445 -68
  33. package/fesm2015/senior-agronegocio-angular-components.js.map +1 -1
  34. package/fesm5/senior-agronegocio-angular-components.js +446 -67
  35. package/fesm5/senior-agronegocio-angular-components.js.map +1 -1
  36. package/package.json +1 -1
  37. package/senior-agronegocio-angular-components.metadata.json +1 -1
@@ -0,0 +1,256 @@
1
+ import { UnitOfMeasurement } from "../enums/unit-measurement.enum";
2
+ import { AGRO_NUMBERS } from "../enums";
3
+ const TWO_HUNDRED_SEVENTY_THREE_POINT_ONE_FIVE = 273.15;
4
+ export class AgroUnitConverter {
5
+ constructor() {
6
+ // 🔹 Comprimento
7
+ this.LENGTH_UNITS = [
8
+ UnitOfMeasurement.METRO,
9
+ UnitOfMeasurement.CENTIMETRO,
10
+ UnitOfMeasurement.MILIMETRO,
11
+ UnitOfMeasurement.QUILOMETRO,
12
+ UnitOfMeasurement.POLEGADA,
13
+ UnitOfMeasurement.PE,
14
+ ];
15
+ // 🔹 Massa
16
+ this.MASS_UNITS = [
17
+ UnitOfMeasurement.GRAMA,
18
+ UnitOfMeasurement.QUILOGRAMA,
19
+ UnitOfMeasurement.TONELADA,
20
+ UnitOfMeasurement.LIBRA,
21
+ UnitOfMeasurement.SACA,
22
+ ];
23
+ // 🔹 Área
24
+ this.AREA_UNITS = [
25
+ UnitOfMeasurement.METRO_QUADRADO,
26
+ UnitOfMeasurement.CENTIMETRO_QUADRADO,
27
+ UnitOfMeasurement.HECTARE,
28
+ UnitOfMeasurement.ALQUEIRE_50x50,
29
+ UnitOfMeasurement.ALQUEIRE_50x75,
30
+ UnitOfMeasurement.ALQUEIRE_DO_NORTE,
31
+ UnitOfMeasurement.ALQUEIRE_75x80,
32
+ UnitOfMeasurement.ALQUEIRE_79x79,
33
+ UnitOfMeasurement.ALQUEIRE_80x80,
34
+ UnitOfMeasurement.ALQUEIRE_75x100,
35
+ UnitOfMeasurement.ALQUEIRE_100x150,
36
+ UnitOfMeasurement.ALQUEIRE_BAIANO,
37
+ UnitOfMeasurement.ALQUEIRAO,
38
+ UnitOfMeasurement.ALQUEIRE_PAULISTA,
39
+ UnitOfMeasurement.ALQUEIRE_MINEIRO,
40
+ ];
41
+ // 🔹 Volume
42
+ this.VOLUME_UNITS = [UnitOfMeasurement.LITRO, UnitOfMeasurement.MILILITRO, UnitOfMeasurement.METRO_CUBICO];
43
+ // 🔹 Tempo
44
+ this.TIME_UNITS = [
45
+ UnitOfMeasurement.SEGUNDO,
46
+ UnitOfMeasurement.MINUTO,
47
+ UnitOfMeasurement.HORA,
48
+ UnitOfMeasurement.DIA,
49
+ ];
50
+ // 🔹 Temperatura
51
+ this.TEMPERATURE_UNITS = [UnitOfMeasurement.CELSIUS, UnitOfMeasurement.FAHRENHEIT, UnitOfMeasurement.KELVIN];
52
+ // 🔹 Energia
53
+ this.ENERGY_UNITS = [UnitOfMeasurement.JOULE, UnitOfMeasurement.CALORIA, UnitOfMeasurement.QUILOWATT_HORA];
54
+ // 🔹 Eletricidade
55
+ this.ELECTRICITY_UNITS = [UnitOfMeasurement.VOLT, UnitOfMeasurement.AMPERE, UnitOfMeasurement.WATT];
56
+ // 🔹 Dados digitais
57
+ this.DATA_UNITS = [
58
+ UnitOfMeasurement.BYTE,
59
+ UnitOfMeasurement.KILOBYTE,
60
+ UnitOfMeasurement.MEGABYTE,
61
+ UnitOfMeasurement.GIGABYTE,
62
+ UnitOfMeasurement.TERABYTE,
63
+ ];
64
+ this.conversionUnits = [
65
+ {
66
+ units: this.LENGTH_UNITS,
67
+ factorTable: {
68
+ [UnitOfMeasurement.METRO]: AGRO_NUMBERS.ONE,
69
+ [UnitOfMeasurement.CENTIMETRO]: 0.01,
70
+ [UnitOfMeasurement.MILIMETRO]: 0.001,
71
+ [UnitOfMeasurement.QUILOMETRO]: AGRO_NUMBERS.ONETHOUSAND,
72
+ [UnitOfMeasurement.POLEGADA]: 0.0254,
73
+ [UnitOfMeasurement.PE]: 0.3048,
74
+ },
75
+ },
76
+ {
77
+ units: this.MASS_UNITS,
78
+ factorTable: {
79
+ [UnitOfMeasurement.GRAMA]: 0.001,
80
+ [UnitOfMeasurement.QUILOGRAMA]: AGRO_NUMBERS.ONE,
81
+ [UnitOfMeasurement.TONELADA]: AGRO_NUMBERS.ONETHOUSAND,
82
+ [UnitOfMeasurement.LIBRA]: 0.453592,
83
+ [UnitOfMeasurement.SACA]: 60,
84
+ },
85
+ },
86
+ {
87
+ units: this.AREA_UNITS,
88
+ factorTable: {
89
+ [UnitOfMeasurement.METRO_QUADRADO]: AGRO_NUMBERS.ONE,
90
+ [UnitOfMeasurement.CENTIMETRO_QUADRADO]: 0.0001,
91
+ [UnitOfMeasurement.HECTARE]: 10000,
92
+ [UnitOfMeasurement.ALQUEIRE_50x50]: 12100,
93
+ [UnitOfMeasurement.ALQUEIRE_50x75]: 18200,
94
+ [UnitOfMeasurement.ALQUEIRE_DO_NORTE]: 27200,
95
+ [UnitOfMeasurement.ALQUEIRE_75x80]: 29000,
96
+ [UnitOfMeasurement.ALQUEIRE_79x79]: 30200,
97
+ [UnitOfMeasurement.ALQUEIRE_80x80]: 31900,
98
+ [UnitOfMeasurement.ALQUEIRE_75x100]: 36300,
99
+ [UnitOfMeasurement.ALQUEIRE_100x150]: 72600,
100
+ [UnitOfMeasurement.ALQUEIRE_BAIANO]: 96800,
101
+ [UnitOfMeasurement.ALQUEIRAO]: 193600,
102
+ [UnitOfMeasurement.ALQUEIRE_PAULISTA]: 24200,
103
+ [UnitOfMeasurement.ALQUEIRE_MINEIRO]: 48400,
104
+ },
105
+ },
106
+ {
107
+ units: this.VOLUME_UNITS,
108
+ factorTable: {
109
+ [UnitOfMeasurement.LITRO]: AGRO_NUMBERS.ONE,
110
+ [UnitOfMeasurement.MILILITRO]: 0.001,
111
+ [UnitOfMeasurement.METRO_CUBICO]: AGRO_NUMBERS.ONETHOUSAND,
112
+ },
113
+ },
114
+ {
115
+ units: this.TIME_UNITS,
116
+ factorTable: {
117
+ [UnitOfMeasurement.SEGUNDO]: AGRO_NUMBERS.ONE,
118
+ [UnitOfMeasurement.MINUTO]: AGRO_NUMBERS.SIXTY_,
119
+ [UnitOfMeasurement.HORA]: 3600,
120
+ [UnitOfMeasurement.DIA]: 86400,
121
+ },
122
+ },
123
+ {
124
+ units: this.ENERGY_UNITS,
125
+ factorTable: {
126
+ [UnitOfMeasurement.JOULE]: AGRO_NUMBERS.ONE,
127
+ [UnitOfMeasurement.CALORIA]: 4.184,
128
+ [UnitOfMeasurement.QUILOWATT_HORA]: 3600000,
129
+ },
130
+ },
131
+ {
132
+ units: this.DATA_UNITS,
133
+ factorTable: {
134
+ [UnitOfMeasurement.BYTE]: AGRO_NUMBERS.ONE,
135
+ [UnitOfMeasurement.KILOBYTE]: 1024,
136
+ [UnitOfMeasurement.MEGABYTE]: Math.pow(1024, AGRO_NUMBERS.TWO),
137
+ [UnitOfMeasurement.GIGABYTE]: Math.pow(1024, AGRO_NUMBERS.THREE),
138
+ [UnitOfMeasurement.TERABYTE]: Math.pow(1024, AGRO_NUMBERS.FOUR),
139
+ },
140
+ },
141
+ ];
142
+ }
143
+ // 🔹 Métodos de conversão
144
+ convertTemperatureUnit(valor, de, para) {
145
+ if (de === para) {
146
+ return valor;
147
+ }
148
+ let celsius;
149
+ switch (de) {
150
+ case UnitOfMeasurement.CELSIUS:
151
+ celsius = valor;
152
+ break;
153
+ case UnitOfMeasurement.FAHRENHEIT:
154
+ celsius = ((valor - AGRO_NUMBERS.THIRTY_TWO) * AGRO_NUMBERS.FIVE) / AGRO_NUMBERS.NINE;
155
+ break;
156
+ case UnitOfMeasurement.KELVIN:
157
+ celsius = valor - TWO_HUNDRED_SEVENTY_THREE_POINT_ONE_FIVE;
158
+ break;
159
+ default:
160
+ throw new Error("Unidade inválida");
161
+ }
162
+ switch (para) {
163
+ case UnitOfMeasurement.CELSIUS:
164
+ return celsius;
165
+ case UnitOfMeasurement.FAHRENHEIT:
166
+ return (celsius * AGRO_NUMBERS.NINE) / AGRO_NUMBERS.FIVE + AGRO_NUMBERS.THIRTY_TWO;
167
+ case UnitOfMeasurement.KELVIN:
168
+ return celsius + TWO_HUNDRED_SEVENTY_THREE_POINT_ONE_FIVE;
169
+ default:
170
+ throw new Error("Unidade inválida");
171
+ }
172
+ }
173
+ isTemperatureUnit(unit) {
174
+ console.log(this.TEMPERATURE_UNITS.includes(unit));
175
+ return this.TEMPERATURE_UNITS.includes(unit);
176
+ }
177
+ convertScalableUnits(valor, from, to) {
178
+ var _a;
179
+ if (from === to) {
180
+ return valor;
181
+ }
182
+ if (this.isTemperatureUnit(from) || this.isTemperatureUnit(to)) {
183
+ return this.convertTemperatureUnit(valor, from, to);
184
+ }
185
+ const unitCategory = this.conversionUnits.find((u) => u.units.includes(from));
186
+ if (!((_a = unitCategory === null || unitCategory === void 0 ? void 0 : unitCategory.units) === null || _a === void 0 ? void 0 : _a.includes(to))) {
187
+ throw new Error(`Não é possível converter de ${from} para ${to}: categorias diferentes ou unidade não escalável.`);
188
+ }
189
+ const fatorDe = unitCategory.factorTable[from];
190
+ const fatorPara = unitCategory.factorTable[to];
191
+ const emBase = valor * fatorDe;
192
+ return emBase / fatorPara;
193
+ }
194
+ convertLitersPerArea(valor, from, to) {
195
+ var _a;
196
+ const areaCategory = this.conversionUnits.find((u) => u.units.includes(from));
197
+ if (!((_a = areaCategory === null || areaCategory === void 0 ? void 0 : areaCategory.units) === null || _a === void 0 ? void 0 : _a.includes(to))) {
198
+ throw new Error(`Unidade de área inválida: ${from} ou ${to}`);
199
+ }
200
+ const fatorFrom = areaCategory.factorTable[from];
201
+ const fatorTo = areaCategory.factorTable[to];
202
+ return (valor / fatorFrom) * fatorTo;
203
+ }
204
+ convertKgPerArea(valor, from, to) {
205
+ return this.convertLitersPerArea(valor, from, to);
206
+ }
207
+ convertBushelToKg(bushel, factor) {
208
+ if (factor <= 0) {
209
+ throw new Error("Fator de conversão inválido");
210
+ }
211
+ return bushel * factor;
212
+ }
213
+ convertKgToBushel(kg, factor) {
214
+ if (factor <= 0) {
215
+ throw new Error("Fator de conversão inválido");
216
+ }
217
+ return kg / factor;
218
+ }
219
+ calculateAreaFromVolume(totalVolume, rate, rateUnit, areaUnit) {
220
+ if (rate <= 0) {
221
+ throw new Error("Taxa de aplicação inválida");
222
+ }
223
+ const rateInDesiredUnit = this.convertLitersPerArea(rate, rateUnit, areaUnit);
224
+ return totalVolume / rateInDesiredUnit;
225
+ }
226
+ convertElectricityUnit(valor, voltage, from, to) {
227
+ if (from === to) {
228
+ return valor;
229
+ }
230
+ const toWatt = (v, unit) => {
231
+ switch (unit) {
232
+ case UnitOfMeasurement.VOLT:
233
+ case UnitOfMeasurement.AMPERE:
234
+ return voltage * v; // P = V * I
235
+ case UnitOfMeasurement.WATT:
236
+ return v;
237
+ default:
238
+ throw new Error(`A unidade ${unit} não é escalável diretamente.`);
239
+ }
240
+ };
241
+ const fromWatt = (w, unit) => {
242
+ switch (unit) {
243
+ case UnitOfMeasurement.VOLT:
244
+ case UnitOfMeasurement.AMPERE:
245
+ return w / voltage;
246
+ case UnitOfMeasurement.WATT:
247
+ return w;
248
+ default:
249
+ throw new Error(`A unidade ${unit} não é escalável diretamente.`);
250
+ }
251
+ };
252
+ const wattValue = toWatt(valor, from);
253
+ return fromWatt(wattValue, to);
254
+ }
255
+ }
256
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdyby11bml0LWNvbnZlcnRlci5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzZW5pb3ItYWdyb25lZ29jaW8vYW5ndWxhci1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY29tbW9uL2Fncm8tdW5pdC1jb252ZXJ0ZXIuY2xhc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFVBQVUsQ0FBQztBQU94QyxNQUFNLHdDQUF3QyxHQUFHLE1BQU0sQ0FBQztBQUV4RCxNQUFNLE9BQU8saUJBQWlCO0lBc0UxQjtRQXJFQSxpQkFBaUI7UUFDUixpQkFBWSxHQUF3QjtZQUN6QyxpQkFBaUIsQ0FBQyxLQUFLO1lBQ3ZCLGlCQUFpQixDQUFDLFVBQVU7WUFDNUIsaUJBQWlCLENBQUMsU0FBUztZQUMzQixpQkFBaUIsQ0FBQyxVQUFVO1lBQzVCLGlCQUFpQixDQUFDLFFBQVE7WUFDMUIsaUJBQWlCLENBQUMsRUFBRTtTQUN2QixDQUFDO1FBRUYsV0FBVztRQUNGLGVBQVUsR0FBd0I7WUFDdkMsaUJBQWlCLENBQUMsS0FBSztZQUN2QixpQkFBaUIsQ0FBQyxVQUFVO1lBQzVCLGlCQUFpQixDQUFDLFFBQVE7WUFDMUIsaUJBQWlCLENBQUMsS0FBSztZQUN2QixpQkFBaUIsQ0FBQyxJQUFJO1NBQ3pCLENBQUM7UUFFRixVQUFVO1FBQ0QsZUFBVSxHQUF3QjtZQUN2QyxpQkFBaUIsQ0FBQyxjQUFjO1lBQ2hDLGlCQUFpQixDQUFDLG1CQUFtQjtZQUNyQyxpQkFBaUIsQ0FBQyxPQUFPO1lBQ3pCLGlCQUFpQixDQUFDLGNBQWM7WUFDaEMsaUJBQWlCLENBQUMsY0FBYztZQUNoQyxpQkFBaUIsQ0FBQyxpQkFBaUI7WUFDbkMsaUJBQWlCLENBQUMsY0FBYztZQUNoQyxpQkFBaUIsQ0FBQyxjQUFjO1lBQ2hDLGlCQUFpQixDQUFDLGNBQWM7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QUUsSUFBdUIsRUFBRSxFQUFxQjtRQUNqRyxJQUFJLElBQUksS0FBSyxFQUFFLEVBQUU7WUFDYixPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUVELE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBUyxFQUFFLElBQXVCLEVBQVUsRUFBRTtZQUMxRCxRQUFRLElBQUksRUFBRTtnQkFDVixLQUFLLGlCQUFpQixDQUFDLElBQUksQ0FBQztnQkFDNUIsS0FBSyxpQkFBaUIsQ0FBQyxNQUFNO29CQUN6QixPQUFPLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxZQUFZO2dCQUNwQyxLQUFLLGlCQUFpQixDQUFDLElBQUk7b0JBQ3ZCLE9BQU8sQ0FBQyxDQUFDO2dCQUNiO29CQUNJLE1BQU0sSUFBSSxLQUFLLENBQUMsYUFBYSxJQUFJLCtCQUErQixDQUFDLENBQUM7YUFDekU7UUFDTCxDQUFDLENBQUM7UUFFRixNQUFNLFFBQVEsR0FBRyxDQUFDLENBQVMsRUFBRSxJQUF1QixFQUFVLEVBQUU7WUFDNUQsUUFBUSxJQUFJLEVBQUU7Z0JBQ1YsS0FBSyxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7Z0JBQzVCLEtBQUssaUJBQWlCLENBQUMsTUFBTTtvQkFDekIsT0FBTyxDQUFDLEdBQUcsT0FBTyxDQUFDO2dCQUN2QixLQUFLLGlCQUFpQixDQUFDLElBQUk7b0JBQ3ZCLE9BQU8sQ0FBQyxDQUFDO2dCQUNiO29CQUNJLE1BQU0sSUFBSSxLQUFLLENBQUMsYUFBYSxJQUFJLCtCQUErQixDQUFDLENBQUM7YUFDekU7UUFDTCxDQUFDLENBQUM7UUFFRixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3RDLE9BQU8sUUFBUSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNuQyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBVbml0T2ZNZWFzdXJlbWVudCB9IGZyb20gXCIuLi9lbnVtcy91bml0LW1lYXN1cmVtZW50LmVudW1cIjtcclxuaW1wb3J0IHsgQUdST19OVU1CRVJTIH0gZnJvbSBcIi4uL2VudW1zXCI7XHJcblxyXG50eXBlIENvbnZlcnNpb25Vbml0ID0ge1xyXG4gICAgdW5pdHM6IFVuaXRPZk1lYXN1cmVtZW50W107XHJcbiAgICBmYWN0b3JUYWJsZTogeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfTtcclxufTtcclxuXHJcbmNvbnN0IFRXT19IVU5EUkVEX1NFVkVOVFlfVEhSRUVfUE9JTlRfT05FX0ZJVkUgPSAyNzMuMTU7XHJcblxyXG5leHBvcnQgY2xhc3MgQWdyb1VuaXRDb252ZXJ0ZXIge1xyXG4gICAgLy8g8J+UuSBDb21wcmltZW50b1xyXG4gICAgcmVhZG9ubHkgTEVOR1RIX1VOSVRTOiBVbml0T2ZNZWFzdXJlbWVudFtdID0gW1xyXG4gICAgICAgIFVuaXRPZk1lYXN1cmVtZW50Lk1FVFJPLFxyXG4gICAgICAgIFVuaXRPZk1lYXN1cmVtZW50LkNFTlRJTUVUUk8sXHJcbiAgICAgICAgVW5pdE9mTWVhc3VyZW1lbnQuTUlMSU1FVFJPLFxyXG4gICAgICAgIFVuaXRPZk1lYXN1cmVtZW50LlFVSUxPTUVUUk8sXHJcbiAgICAgICAgVW5pdE9mTWVhc3VyZW1lbnQuUE9MRUdBREEsXHJcbiAgICAgICAgVW5pdE9mTWVhc3VyZW1lbnQuUEUsXHJcbiAgICBdO1xyXG5cclxuICAgIC8vIPCflLkgTWFzc2FcclxuICAgIHJlYWRvbmx5IE1BU1NfVU5JVFM6IFVuaXRPZk1lYXN1cmVtZW50W10gPSBbXHJcbiAgICAgICAgVW5pdE9mTWVhc3VyZW1lbnQuR1JBTUEsXHJcbiAgICAgICAgVW5pdE9mTWVhc3VyZW1lbnQuUVVJTE9HUkFNQSxcclxuICAgICAgICBVbml0T2ZNZWFzdXJlbWVudC5UT05FTEFEQSxcclxuICAgICAgICBVbml0T2ZNZWFzdXJlbWVudC5MSUJSQSxcclxuICAgICAgICBVbml0T2ZNZWFzdXJlbWVudC5TQUNBLFxyXG4gICAgXTtcclxuXHJcbiAgICAvLyDwn5S5IMOBcmVhXHJcbiAgICByZWFkb25seSBBUkVBX1VOSVRTOiBVbml0T2ZNZWFzdXJlbWVudFtdID0gW1xyXG4gICAgICAgIFVuaXRPZk1lYXN1cmVtZW50Lk1FVFJPX1FVQURSQURPLFxyXG4gICAgICAgIFVuaXRPZk1lYXN1cmVtZW50LkNFTlRJTUVUUk9fUVVBRFJBRE8sXHJcbiAgICAgICAgVW5pdE9mTWVhc3VyZW1lbnQuSEVDVEFSRSxcclxuICAgICAgICBVbml0T2ZNZWFzdXJlbWVudC5BTFFVRUlSRV81MHg1MCxcclxuICAgICAgICBVbml0T2ZNZWFzdXJlbWVudC5BTFFVRUlSRV81MHg3NSxcclxuICAgICAgICBVbml0T2ZNZWFzdXJlbWVudC5BTFFVRUlSRV9ET19OT1JURSxcclxuICAgICAgICBVbml0T2ZNZWFzdXJlbWVudC5BTFFVRUlSRV83NXg4MCxcclxuICAgICAgICBVbml0T2ZNZWFzdXJlbWVudC5BTFFVRUlSRV83OXg3OSxcclxuICAgICAgICBVbml0T2ZNZWFzdXJlbWVudC5BTFFVRUlSRV84MHg4MCxcclxuICAgICAgICBVbml0T2ZNZWFzdXJlbWVudC5BTFFVRUlSRV83NXgxMDAsXHJcbiAgICAgICAgVW5pdE9mTWVhc3VyZW1lbnQuQUxRVUVJUkVfMTAweDE1MCxcclxuICAgICAgICBVbml0T2ZNZWFzdXJlbWVudC5BTFFVRUlSRV9CQUlBTk8sXHJcbiAgICAgICAgVW5pdE9mTWVhc3VyZW1lbnQuQUxRVUVJUkFPLFxyXG4gICAgICAgIFVuaXRPZk1lYXN1cmVtZW50LkFMUVVFSVJFX1BBVUxJU1RBLFxyXG4gICAgICAgIFVuaXRPZk1lYXN1cmVtZW50LkFMUVVFSVJFX01JTkVJUk8sXHJcbiAgICBdO1xyXG5cclxuICAgIC8vIPCflLkgVm9sdW1lXHJcbiAgICByZWFkb25seSBWT0xVTUVfVU5JVFM6IFVuaXRPZk1lYXN1cmVtZW50W10gPSBbVW5pdE9mTWVhc3VyZW1lbnQuTElUUk8sIFVuaXRPZk1lYXN1cmVtZW50Lk1JTElMSVRSTywgVW5pdE9mTWVhc3VyZW1lbnQuTUVUUk9fQ1VCSUNPXTtcclxuXHJcbiAgICAvLyDwn5S5IFRlbXBvXHJcbiAgICByZWFkb25seSBUSU1FX1VOSVRTOiBVbml0T2ZNZWFzdXJlbWVudFtdID0gW1xyXG4gICAgICAgIFVuaXRPZk1lYXN1cmVtZW50LlNFR1VORE8sXHJcbiAgICAgICAgVW5pdE9mTWVhc3VyZW1lbnQuTUlOVVRPLFxyXG4gICAgICAgIFVuaXRPZk1lYXN1cmVtZW50LkhPUkEsXHJcbiAgICAgICAgVW5pdE9mTWVhc3VyZW1lbnQuRElBLFxyXG4gICAgXTtcclxuXHJcbiAgICAvLyDwn5S5IFRlbXBlcmF0dXJhXHJcbiAgICByZWFkb25seSBURU1QRVJBVFVSRV9VTklUUzogVW5pdE9mTWVhc3VyZW1lbnRbXSA9IFtVbml0T2ZNZWFzdXJlbWVudC5DRUxTSVVTLCBVbml0T2ZNZWFzdXJlbWVudC5GQUhSRU5IRUlULCBVbml0T2ZNZWFzdXJlbWVudC5LRUxWSU5dO1xyXG5cclxuICAgIC8vIPCflLkgRW5lcmdpYVxyXG4gICAgcmVhZG9ubHkgRU5FUkdZX1VOSVRTOiBVbml0T2ZNZWFzdXJlbWVudFtdID0gW1VuaXRPZk1lYXN1cmVtZW50LkpPVUxFLCBVbml0T2ZNZWFzdXJlbWVudC5DQUxPUklBLCBVbml0T2ZNZWFzdXJlbWVudC5RVUlMT1dBVFRfSE9SQV07XHJcblxyXG4gICAgLy8g8J+UuSBFbGV0cmljaWRhZGVcclxuICAgIHJlYWRvbmx5IEVMRUNUUklDSVRZX1VOSVRTOiBVbml0T2ZNZWFzdXJlbWVudFtdID0gW1VuaXRPZk1lYXN1cmVtZW50LlZPTFQsIFVuaXRPZk1lYXN1cmVtZW50LkFNUEVSRSwgVW5pdE9mTWVhc3VyZW1lbnQuV0FUVF07XHJcblxyXG4gICAgLy8g8J+UuSBEYWRvcyBkaWdpdGFpc1xyXG4gICAgcmVhZG9ubHkgREFUQV9VTklUUzogVW5pdE9mTWVhc3VyZW1lbnRbXSA9IFtcclxuICAgICAgICBVbml0T2ZNZWFzdXJlbWVudC5CWVRFLFxyXG4gICAgICAgIFVuaXRPZk1lYXN1cmVtZW50LktJTE9CWVRFLFxyXG4gICAgICAgIFVuaXRPZk1lYXN1cmVtZW50Lk1FR0FCWVRFLFxyXG4gICAgICAgIFVuaXRPZk1lYXN1cmVtZW50LkdJR0FCWVRFLFxyXG4gICAgICAgIFVuaXRPZk1lYXN1cmVtZW50LlRFUkFCWVRFLFxyXG4gICAgXTtcclxuXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbnZlcnNpb25Vbml0czogQ29udmVyc2lvblVuaXRbXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLmNvbnZlcnNpb25Vbml0cyA9IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdW5pdHM6IHRoaXMuTEVOR1RIX1VOSVRTLFxyXG4gICAgICAgICAgICAgICAgZmFjdG9yVGFibGU6IHtcclxuICAgICAgICAgICAgICAgICAgICBbVW5pdE9mTWVhc3VyZW1lbnQuTUVUUk9dOiBBR1JPX05VTUJFUlMuT05FLFxyXG4gICAgICAgICAgICAgICAgICAgIFtVbml0T2ZNZWFzdXJlbWVudC5DRU5USU1FVFJPXTogMC4wMSxcclxuICAgICAgICAgICAgICAgICAgICBbVW5pdE9mTWVhc3VyZW1lbnQuTUlMSU1FVFJPXTogMC4wMDEsXHJcbiAgICAgICAgICAgICAgICAgICAgW1VuaXRPZk1lYXN1cmVtZW50LlFVSUxPTUVUUk9dOiBBR1JPX05VTUJFUlMuT05FVEhPVVNBTkQsXHJcbiAgICAgICAgICAgICAgICAgICAgW1VuaXRPZk1lYXN1cmVtZW50LlBPTEVHQURBXTogMC4wMjU0LFxyXG4gICAgICAgICAgICAgICAgICAgIFtVbml0T2ZNZWFzdXJlbWVudC5QRV06IDAuMzA0OCxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHVuaXRzOiB0aGlzLk1BU1NfVU5JVFMsXHJcbiAgICAgICAgICAgICAgICBmYWN0b3JUYWJsZToge1xyXG4gICAgICAgICAgICAgICAgICAgIFtVbml0T2ZNZWFzdXJlbWVudC5HUkFNQV06IDAuMDAxLFxyXG4gICAgICAgICAgICAgICAgICAgIFtVbml0T2ZNZWFzdXJlbWVudC5RVUlMT0dSQU1BXTogQUdST19OVU1CRVJTLk9ORSxcclxuICAgICAgICAgICAgICAgICAgICBbVW5pdE9mTWVhc3VyZW1lbnQuVE9ORUxBREFdOiBBR1JPX05VTUJFUlMuT05FVEhPVVNBTkQsXHJcbiAgICAgICAgICAgICAgICAgICAgW1VuaXRPZk1lYXN1cmVtZW50LkxJQlJBXTogMC40NTM1OTIsXHJcbiAgICAgICAgICAgICAgICAgICAgW1VuaXRPZk1lYXN1cmVtZW50LlNBQ0FdOiA2MCxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHVuaXRzOiB0aGlzLkFSRUFfVU5JVFMsXHJcbiAgICAgICAgICAgICAgICBmYWN0b3JUYWJsZToge1xyXG4gICAgICAgICAgICAgICAgICAgIFtVbml0T2ZNZWFzdXJlbWVudC5NRVRST19RVUFEUkFET106IEFHUk9fTlVNQkVSUy5PTkUsXHJcbiAgICAgICAgICAgICAgICAgICAgW1VuaXRPZk1lYXN1cmVtZW50LkNFTlRJTUVUUk9fUVVBRFJBRE9dOiAwLjAwMDEsXHJcbiAgICAgICAgICAgICAgICAgICAgW1VuaXRPZk1lYXN1cmVtZW50LkhFQ1RBUkVdOiAxMDAwMCxcclxuICAgICAgICAgICAgICAgICAgICBbVW5pdE9mTWVhc3VyZW1lbnQuQUxRVUVJUkVfNTB4NTBdOiAxMjEwMCxcclxuICAgICAgICAgICAgICAgICAgICBbVW5pdE9mTWVhc3VyZW1lbnQuQUxRVUVJUkVfNTB4NzVdOiAxODIwMCxcclxuICAgICAgICAgICAgICAgICAgICBbVW5pdE9mTWVhc3VyZW1lbnQuQUxRVUVJUkVfRE9fTk9SVEVdOiAyNzIwMCxcclxuICAgICAgICAgICAgICAgICAgICBbVW5pdE9mTWVhc3VyZW1lbnQuQUxRVUVJUkVfNzV4ODBdOiAyOTAwMCxcclxuICAgICAgICAgICAgICAgICAgICBbVW5pdE9mTWVhc3VyZW1lbnQuQUxRVUVJUkVfNzl4NzldOiAzMDIwMCxcclxuICAgICAgICAgICAgICAgICAgICBbVW5pdE9mTWVhc3VyZW1lbnQuQUxRVUVJUkVfODB4ODBdOiAzMTkwMCxcclxuICAgICAgICAgICAgICAgICAgICBbVW5pdE9mTWVhc3VyZW1lbnQuQUxRVUVJUkVfNzV4MTAwXTogMzYzMDAsXHJcbiAgICAgICAgICAgICAgICAgICAgW1VuaXRPZk1lYXN1cmVtZW50LkFMUVVFSVJFXzEwMHgxNTBdOiA3MjYwMCxcclxuICAgICAgICAgICAgICAgICAgICBbVW5pdE9mTWVhc3VyZW1lbnQuQUxRVUVJUkVfQkFJQU5PXTogOTY4MDAsXHJcbiAgICAgICAgICAgICAgICAgICAgW1VuaXRPZk1lYXN1cmVtZW50LkFMUVVFSVJBT106IDE5MzYwMCxcclxuICAgICAgICAgICAgICAgICAgICBbVW5pdE9mTWVhc3VyZW1lbnQuQUxRVUVJUkVfUEFVTElTVEFdOiAyNDIwMCxcclxuICAgICAgICAgICAgICAgICAgICBbVW5pdE9mTWVhc3VyZW1lbnQuQUxRVUVJUkVfTUlORUlST106IDQ4NDAwLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdW5pdHM6IHRoaXMuVk9MVU1FX1VOSVRTLFxyXG4gICAgICAgICAgICAgICAgZmFjdG9yVGFibGU6IHtcclxuICAgICAgICAgICAgICAgICAgICBbVW5pdE9mTWVhc3VyZW1lbnQuTElUUk9dOiBBR1JPX05VTUJFUlMuT05FLFxyXG4gICAgICAgICAgICAgICAgICAgIFtVbml0T2ZNZWFzdXJlbWVudC5NSUxJTElUUk9dOiAwLjAwMSxcclxuICAgICAgICAgICAgICAgICAgICBbVW5pdE9mTWVhc3VyZW1lbnQuTUVUUk9fQ1VCSUNPXTogQUdST19OVU1CRVJTLk9ORVRIT1VTQU5ELFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdW5pdHM6IHRoaXMuVElNRV9VTklUUyxcclxuICAgICAgICAgICAgICAgIGZhY3RvclRhYmxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgW1VuaXRPZk1lYXN1cmVtZW50LlNFR1VORE9dOiBBR1JPX05VTUJFUlMuT05FLFxyXG4gICAgICAgICAgICAgICAgICAgIFtVbml0T2ZNZWFzdXJlbWVudC5NSU5VVE9dOiBBR1JPX05VTUJFUlMuU0lYVFlfLFxyXG4gICAgICAgICAgICAgICAgICAgIFtVbml0T2ZNZWFzdXJlbWVudC5IT1JBXTogMzYwMCxcclxuICAgICAgICAgICAgICAgICAgICBbVW5pdE9mTWVhc3VyZW1lbnQuRElBXTogODY0MDAsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB1bml0czogdGhpcy5FTkVSR1lfVU5JVFMsXHJcbiAgICAgICAgICAgICAgICBmYWN0b3JUYWJsZToge1xyXG4gICAgICAgICAgICAgICAgICAgIFtVbml0T2ZNZWFzdXJlbWVudC5KT1VMRV06IEFHUk9fTlVNQkVSUy5PTkUsXHJcbiAgICAgICAgICAgICAgICAgICAgW1VuaXRPZk1lYXN1cmVtZW50LkNBTE9SSUFdOiA0LjE4NCxcclxuICAgICAgICAgICAgICAgICAgICBbVW5pdE9mTWVhc3VyZW1lbnQuUVVJTE9XQVRUX0hPUkFdOiAzXzYwMF8wMDAsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB1bml0czogdGhpcy5EQVRBX1VOSVRTLFxyXG4gICAgICAgICAgICAgICAgZmFjdG9yVGFibGU6IHtcclxuICAgICAgICAgICAgICAgICAgICBbVW5pdE9mTWVhc3VyZW1lbnQuQllURV06IEFHUk9fTlVNQkVSUy5PTkUsXHJcbiAgICAgICAgICAgICAgICAgICAgW1VuaXRPZk1lYXN1cmVtZW50LktJTE9CWVRFXTogMTAyNCxcclxuICAgICAgICAgICAgICAgICAgICBbVW5pdE9mTWVhc3VyZW1lbnQuTUVHQUJZVEVdOiAxMDI0ICoqIEFHUk9fTlVNQkVSUy5UV08sXHJcbiAgICAgICAgICAgICAgICAgICAgW1VuaXRPZk1lYXN1cmVtZW50LkdJR0FCWVRFXTogMTAyNCAqKiBBR1JPX05VTUJFUlMuVEhSRUUsXHJcbiAgICAgICAgICAgICAgICAgICAgW1VuaXRPZk1lYXN1cmVtZW50LlRFUkFCWVRFXTogMTAyNCAqKiBBR1JPX05VTUJFUlMuRk9VUixcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICAvLyDwn5S5IE3DqXRvZG9zIGRlIGNvbnZlcnPDo29cclxuICAgIGNvbnZlcnRUZW1wZXJhdHVyZVVuaXQodmFsb3I6IG51bWJlciwgZGU6IFVuaXRPZk1lYXN1cmVtZW50LCBwYXJhOiBVbml0T2ZNZWFzdXJlbWVudCk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKGRlID09PSBwYXJhKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWxvcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBjZWxzaXVzOiBudW1iZXI7XHJcbiAgICAgICAgc3dpdGNoIChkZSkge1xyXG4gICAgICAgICAgICBjYXNlIFVuaXRPZk1lYXN1cmVtZW50LkNFTFNJVVM6XHJcbiAgICAgICAgICAgICAgICBjZWxzaXVzID0gdmFsb3I7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBVbml0T2ZNZWFzdXJlbWVudC5GQUhSRU5IRUlUOlxyXG4gICAgICAgICAgICAgICAgY2Vsc2l1cyA9ICgodmFsb3IgLSBBR1JPX05VTUJFUlMuVEhJUlRZX1RXTykgKiBBR1JPX05VTUJFUlMuRklWRSkgLyBBR1JPX05VTUJFUlMuTklORTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFVuaXRPZk1lYXN1cmVtZW50LktFTFZJTjpcclxuICAgICAgICAgICAgICAgIGNlbHNpdXMgPSB2YWxvciAtIFRXT19IVU5EUkVEX1NFVkVOVFlfVEhSRUVfUE9JTlRfT05FX0ZJVkU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuaWRhZGUgaW52w6FsaWRhXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3dpdGNoIChwYXJhKSB7XHJcbiAgICAgICAgICAgIGNhc2UgVW5pdE9mTWVhc3VyZW1lbnQuQ0VMU0lVUzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBjZWxzaXVzO1xyXG4gICAgICAgICAgICBjYXNlIFVuaXRPZk1lYXN1cmVtZW50LkZBSFJFTkhFSVQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKGNlbHNpdXMgKiBBR1JPX05VTUJFUlMuTklORSkgLyBBR1JPX05VTUJFUlMuRklWRSArIEFHUk9fTlVNQkVSUy5USElSVFlfVFdPO1xyXG4gICAgICAgICAgICBjYXNlIFVuaXRPZk1lYXN1cmVtZW50LktFTFZJTjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBjZWxzaXVzICsgVFdPX0hVTkRSRURfU0VWRU5UWV9USFJFRV9QT0lOVF9PTkVfRklWRTtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuaWRhZGUgaW52w6FsaWRhXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzVGVtcGVyYXR1cmVVbml0KHVuaXQ6IFVuaXRPZk1lYXN1cmVtZW50KTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcy5URU1QRVJBVFVSRV9VTklUUy5pbmNsdWRlcyh1bml0KSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuVEVNUEVSQVRVUkVfVU5JVFMuaW5jbHVkZXModW5pdCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29udmVydFNjYWxhYmxlVW5pdHModmFsb3I6IG51bWJlciwgZnJvbTogVW5pdE9mTWVhc3VyZW1lbnQsIHRvOiBVbml0T2ZNZWFzdXJlbWVudCk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKGZyb20gPT09IHRvKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWxvcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzVGVtcGVyYXR1cmVVbml0KGZyb20pIHx8IHRoaXMuaXNUZW1wZXJhdHVyZVVuaXQodG8pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRUZW1wZXJhdHVyZVVuaXQodmFsb3IsIGZyb20sIHRvKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBjb25zdCB1bml0Q2F0ZWdvcnkgPSB0aGlzLmNvbnZlcnNpb25Vbml0cy5maW5kKCh1KSA9PiB1LnVuaXRzLmluY2x1ZGVzKGZyb20pKTtcclxuICAgICAgICBpZiAoIXVuaXRDYXRlZ29yeT8udW5pdHM/LmluY2x1ZGVzKHRvKSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE7Do28gw6kgcG9zc8OtdmVsIGNvbnZlcnRlciBkZSAke2Zyb219IHBhcmEgJHt0b306IGNhdGVnb3JpYXMgZGlmZXJlbnRlcyBvdSB1bmlkYWRlIG7Do28gZXNjYWzDoXZlbC5gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGZhdG9yRGUgPSB1bml0Q2F0ZWdvcnkuZmFjdG9yVGFibGVbZnJvbV07XHJcbiAgICAgICAgY29uc3QgZmF0b3JQYXJhID0gdW5pdENhdGVnb3J5LmZhY3RvclRhYmxlW3RvXTtcclxuXHJcbiAgICAgICAgY29uc3QgZW1CYXNlID0gdmFsb3IgKiBmYXRvckRlO1xyXG4gICAgICAgIHJldHVybiBlbUJhc2UgLyBmYXRvclBhcmE7XHJcbiAgICB9XHJcblxyXG4gICAgY29udmVydExpdGVyc1BlckFyZWEodmFsb3I6IG51bWJlciwgZnJvbTogVW5pdE9mTWVhc3VyZW1lbnQsIHRvOiBVbml0T2ZNZWFzdXJlbWVudCk6IG51bWJlciB7XHJcbiAgICAgICAgY29uc3QgYXJlYUNhdGVnb3J5ID0gdGhpcy5jb252ZXJzaW9uVW5pdHMuZmluZCgodSkgPT4gdS51bml0cy5pbmNsdWRlcyhmcm9tKSk7XHJcbiAgICAgICAgaWYgKCFhcmVhQ2F0ZWdvcnk/LnVuaXRzPy5pbmNsdWRlcyh0bykpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmlkYWRlIGRlIMOhcmVhIGludsOhbGlkYTogJHtmcm9tfSBvdSAke3RvfWApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZmF0b3JGcm9tID0gYXJlYUNhdGVnb3J5LmZhY3RvclRhYmxlW2Zyb21dO1xyXG4gICAgICAgIGNvbnN0IGZhdG9yVG8gPSBhcmVhQ2F0ZWdvcnkuZmFjdG9yVGFibGVbdG9dO1xyXG5cclxuICAgICAgICByZXR1cm4gKHZhbG9yIC8gZmF0b3JGcm9tKSAqIGZhdG9yVG87XHJcbiAgICB9XHJcblxyXG4gICAgY29udmVydEtnUGVyQXJlYSh2YWxvcjogbnVtYmVyLCBmcm9tOiBVbml0T2ZNZWFzdXJlbWVudCwgdG86IFVuaXRPZk1lYXN1cmVtZW50KTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0TGl0ZXJzUGVyQXJlYSh2YWxvciwgZnJvbSwgdG8pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnZlcnRCdXNoZWxUb0tnKGJ1c2hlbDogbnVtYmVyLCBmYWN0b3I6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKGZhY3RvciA8PSAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkZhdG9yIGRlIGNvbnZlcnPDo28gaW52w6FsaWRvXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYnVzaGVsICogZmFjdG9yO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnZlcnRLZ1RvQnVzaGVsKGtnOiBudW1iZXIsIGZhY3RvcjogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAoZmFjdG9yIDw9IDApIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmF0b3IgZGUgY29udmVyc8OjbyBpbnbDoWxpZG9cIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBrZyAvIGZhY3RvcjtcclxuICAgIH1cclxuXHJcbiAgICBjYWxjdWxhdGVBcmVhRnJvbVZvbHVtZSh0b3RhbFZvbHVtZTogbnVtYmVyLCByYXRlOiBudW1iZXIsIHJhdGVVbml0OiBVbml0T2ZNZWFzdXJlbWVudCwgYXJlYVVuaXQ6IFVuaXRPZk1lYXN1cmVtZW50KTogbnVtYmVyIHtcclxuICAgICAgICBpZiAocmF0ZSA8PSAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRheGEgZGUgYXBsaWNhw6fDo28gaW52w6FsaWRhXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByYXRlSW5EZXNpcmVkVW5pdCA9IHRoaXMuY29udmVydExpdGVyc1BlckFyZWEocmF0ZSwgcmF0ZVVuaXQsIGFyZWFVbml0KTtcclxuICAgICAgICByZXR1cm4gdG90YWxWb2x1bWUgLyByYXRlSW5EZXNpcmVkVW5pdDtcclxuICAgIH1cclxuXHJcbiAgICBjb252ZXJ0RWxlY3RyaWNpdHlVbml0KHZhbG9yOiBudW1iZXIsIHZvbHRhZ2U6IG51bWJlciwgZnJvbTogVW5pdE9mTWVhc3VyZW1lbnQsIHRvOiBVbml0T2ZNZWFzdXJlbWVudCk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKGZyb20gPT09IHRvKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWxvcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHRvV2F0dCA9ICh2OiBudW1iZXIsIHVuaXQ6IFVuaXRPZk1lYXN1cmVtZW50KTogbnVtYmVyID0+IHtcclxuICAgICAgICAgICAgc3dpdGNoICh1bml0KSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFVuaXRPZk1lYXN1cmVtZW50LlZPTFQ6XHJcbiAgICAgICAgICAgICAgICBjYXNlIFVuaXRPZk1lYXN1cmVtZW50LkFNUEVSRTpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdm9sdGFnZSAqIHY7IC8vIFAgPSBWICogSVxyXG4gICAgICAgICAgICAgICAgY2FzZSBVbml0T2ZNZWFzdXJlbWVudC5XQVRUOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2O1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEEgdW5pZGFkZSAke3VuaXR9IG7Do28gw6kgZXNjYWzDoXZlbCBkaXJldGFtZW50ZS5gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IGZyb21XYXR0ID0gKHc6IG51bWJlciwgdW5pdDogVW5pdE9mTWVhc3VyZW1lbnQpOiBudW1iZXIgPT4ge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHVuaXQpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgVW5pdE9mTWVhc3VyZW1lbnQuVk9MVDpcclxuICAgICAgICAgICAgICAgIGNhc2UgVW5pdE9mTWVhc3VyZW1lbnQuQU1QRVJFOlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB3IC8gdm9sdGFnZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgVW5pdE9mTWVhc3VyZW1lbnQuV0FUVDpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdztcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBIHVuaWRhZGUgJHt1bml0fSBuw6NvIMOpIGVzY2Fsw6F2ZWwgZGlyZXRhbWVudGUuYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCB3YXR0VmFsdWUgPSB0b1dhdHQodmFsb3IsIGZyb20pO1xyXG4gICAgICAgIHJldHVybiBmcm9tV2F0dCh3YXR0VmFsdWUsIHRvKTtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -8,5 +8,6 @@ export { Colors } from './colors.class';
8
8
  export { AgroNameUtils } from './agro-name-utils.class';
9
9
  export { AgroArrayUtils } from './agro-array-utils.class';
10
10
  export { AgroLogics } from "./agro-logics.class";
11
+ export { AgroUnitConverter } from './agro-unit-converter.class';
11
12
  export { AGRO_REGEX } from './agro-regex.constant';
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yLWFncm9uZWdvY2lvL2FuZ3VsYXItY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImNvbW1vbi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzVELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUFrQixNQUFNLDJCQUEyQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsVUFBVSxFQUFzQixNQUFNLHFCQUFxQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IEFncm9Db29raWVVdGlscyB9IGZyb20gJy4vYWdyby1jb29raWUtdXRpbHMuY2xhc3MnO1xyXG5leHBvcnQgeyBBZ3JvT2JqZWN0VXRpbHMgfSBmcm9tICcuL2Fncm8tb2JqZWN0LXV0aWxzLmNsYXNzJztcclxuZXhwb3J0IHsgQWdyb0RhdGVVdGlscyB9IGZyb20gJy4vYWdyby1kYXRlLXV0aWxzLmNsYXNzJztcclxuZXhwb3J0IHsgQWdyb1BsYXRmb3JtVXRpbHMgfSBmcm9tICcuL2Fncm8tcGxhdGZvcm0tdXRpbHMuY2xhc3MnO1xyXG5leHBvcnQgeyBBZ3JvU3RyaW5nVXRpbHMsIE51bGxhYmxlU3RyaW5nIH0gZnJvbSAnLi9hZ3JvLXN0cmluZy11dGlscy5jbGFzcyc7XHJcbmV4cG9ydCB7IEFncm9OdW1iZXJVdGlscyB9IGZyb20gJy4vYWdyby1udW1iZXItdXRpbHMuY2xhc3MnO1xyXG5leHBvcnQgeyBDb2xvcnMgfSBmcm9tICcuL2NvbG9ycy5jbGFzcyc7XHJcbmV4cG9ydCB7IEFncm9OYW1lVXRpbHMgfSBmcm9tICcuL2Fncm8tbmFtZS11dGlscy5jbGFzcyc7XHJcbmV4cG9ydCB7IEFncm9BcnJheVV0aWxzIH0gZnJvbSAnLi9hZ3JvLWFycmF5LXV0aWxzLmNsYXNzJztcclxuZXhwb3J0IHsgQWdyb0xvZ2ljcywgRGlzdHJpYnV0aW9uUmVzdWx0IH0gZnJvbSBcIi4vYWdyby1sb2dpY3MuY2xhc3NcIjtcclxuZXhwb3J0IHsgQUdST19SRUdFWCB9IGZyb20gJy4vYWdyby1yZWdleC5jb25zdGFudCc7XHJcbiJdfQ==
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yLWFncm9uZWdvY2lvL2FuZ3VsYXItY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImNvbW1vbi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzVELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUFrQixNQUFNLDJCQUEyQixDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsVUFBVSxFQUFzQixNQUFNLHFCQUFxQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IEFncm9Db29raWVVdGlscyB9IGZyb20gJy4vYWdyby1jb29raWUtdXRpbHMuY2xhc3MnO1xyXG5leHBvcnQgeyBBZ3JvT2JqZWN0VXRpbHMgfSBmcm9tICcuL2Fncm8tb2JqZWN0LXV0aWxzLmNsYXNzJztcclxuZXhwb3J0IHsgQWdyb0RhdGVVdGlscyB9IGZyb20gJy4vYWdyby1kYXRlLXV0aWxzLmNsYXNzJztcclxuZXhwb3J0IHsgQWdyb1BsYXRmb3JtVXRpbHMgfSBmcm9tICcuL2Fncm8tcGxhdGZvcm0tdXRpbHMuY2xhc3MnO1xyXG5leHBvcnQgeyBBZ3JvU3RyaW5nVXRpbHMsIE51bGxhYmxlU3RyaW5nIH0gZnJvbSAnLi9hZ3JvLXN0cmluZy11dGlscy5jbGFzcyc7XHJcbmV4cG9ydCB7IEFncm9OdW1iZXJVdGlscyB9IGZyb20gJy4vYWdyby1udW1iZXItdXRpbHMuY2xhc3MnO1xyXG5leHBvcnQgeyBDb2xvcnMgfSBmcm9tICcuL2NvbG9ycy5jbGFzcyc7XHJcbmV4cG9ydCB7IEFncm9OYW1lVXRpbHMgfSBmcm9tICcuL2Fncm8tbmFtZS11dGlscy5jbGFzcyc7XHJcbmV4cG9ydCB7IEFncm9BcnJheVV0aWxzIH0gZnJvbSAnLi9hZ3JvLWFycmF5LXV0aWxzLmNsYXNzJztcclxuZXhwb3J0IHsgQWdyb0xvZ2ljcywgRGlzdHJpYnV0aW9uUmVzdWx0IH0gZnJvbSBcIi4vYWdyby1sb2dpY3MuY2xhc3NcIjtcclxuZXhwb3J0IHsgQWdyb1VuaXRDb252ZXJ0ZXIgfSBmcm9tICcuL2Fncm8tdW5pdC1jb252ZXJ0ZXIuY2xhc3MnO1xyXG5leHBvcnQgeyBBR1JPX1JFR0VYIH0gZnJvbSAnLi9hZ3JvLXJlZ2V4LmNvbnN0YW50JztcclxuIl19