-
Notifications
You must be signed in to change notification settings - Fork 7
/
afcfile.js
2002 lines (1844 loc) · 167 KB
/
afcfile.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
const xml2js = require('xml2js');
const ArcticFoxEncryption = require('arcticfox-encryption');
const enumClickAction = {
0: 'None',
1: 'Edit',
2: 'ProfileSelector',
3: 'TemperatureDominant',
4: 'MainScreenClock',
5: 'OnOff',
6: 'LslOnOff',
7: 'MainMenu',
8: 'PreheatEdit',
9: 'ProfileEdit',
10: 'SmartOnOff',
11: 'InfoScreen',
12: 'ResetCounters',
13: 'StealthOnOff',
14: 'KeyLock',
15: 'LockResistance',
16: 'PowerBank',
17: 'DeviceLock',
18: 'ReReadResistanceAndSaveToProfile',
19: 'ReReadResistanceAndSmart'
};
const enumClassicLineContent = {
/*
internal enum ClassicLineContent : byte
{
NonDominant = 0,
Volt = 0x10,
Resistance = 0x20,
Amps = 0x30,
Puffs = 0x31,
Time = 0x32,
BatteryVolts = 0x33,
Vout = 0x34,
BoardTemperature = 0x35,
RealResistance = 0x36,
DateTime = 0x37,
LastPuff = 0x38,
LastTemperature = 0x39,
LastPower = 0x3A,
CoilTemperature = 0x3B,
Battery = 0x40,
BatteryWithPercents = 0x41,
BatteryWithVolts = 0x42,
FireTimeMask = 0x80
}
*/
0: 'NonDominant',
16: 'Volt',
32: 'Resistance',
48: 'Amps',
49: 'Puffs',
50: 'Time',
51: 'BatteryVolts',
52: 'Vout',
53: 'BoardTemperature',
54: 'RealResistance',
55: 'DateTime',
56: 'LastPuff',
57: 'LastTemperature',
58: 'LastPower',
59: 'CoilTemperature',
60: 'BatteryPercents',
64: 'Battery',
65: 'BatteryWithPercents',
66: 'BatteryWithVolts',
};
const enumCircleLineContent = {
/*
internal enum CircleLineContent : byte
{
Resistance = 0x20,
Amps = 0x30,
Puffs = 0x31,
Time = 0x32,
BatteryVolts = 0x33,
Vout = 0x34,
BoardTemperature = 0x35,
RealResistance = 0x36,
DateTime = 0x37,
LastPuff = 0x38,
LastTemperature = 0x39,
LastPower = 0x3A,
CoilTemperature = 0x3B,
Battery = 0x40,
BatteryWithPercents = 0x41,
BatteryWithVolts = 0x42,
FireTimeMask = 0x80
}
*/
16: 'Volt',
32: 'Resistance',
48: 'Amps',
49: 'Puffs',
50: 'Time',
51: 'BatteryVolts',
52: 'Vout',
53: 'BoardTemperature',
54: 'RealResistance',
55: 'DateTime',
56: 'LastPuff',
57: 'LastTemperature',
58: 'LastPower',
59: 'CoilTemperature',
64: 'Battery',
65: 'BatteryWithPercents',
66: 'BatteryWithVolts',
};
const enumSmallLineContent = {
/*
internal enum SmallLineContent : byte
{
Resistance = 0x20,
Amps = 0x30,
Puffs = 0x31,
Time = 0x32,
BatteryVolts = 0x33,
Vout = 0x34,
BoardTemperature = 0x35,
RealResistance = 0x36,
DateTime = 0x37,
LastPuff = 0x38,
LastTemperature = 0x39,
LastPower = 0x3A,
BatteryPercents = 0x3B,
CoilTemperature = 0x3C,
FireTimeMask = 0x80
}
*/
32: 'Resistance',
48: 'Amps',
49: 'Puffs',
50: 'Time',
51: 'BatteryVolts',
52: 'Vout',
53: 'BoardTemperature',
54: 'RealResistance',
55: 'DateTime',
56: 'LastPuff',
57: 'LastTemperature',
58: 'LastPower',
59: 'CoilTemperature',
};
const enumFoxyLineContent = {
/*
internal enum FoxyLineContent : byte
{
Amps = 0x30,
Puffs = 0x31,
Time = 0x32,
BatteryVolts = 0x33,
Vout = 0x34,
RealResistance = 0x35,
DateTime = 0x36,
LastPuff = 0x37,
LastTemperature = 0x38,
LastPower = 0x39,
CoilTemperature = 0x3A,
FireTimeMask = 0x80
}
*/
48: 'Amps',
49: 'Puffs',
50: 'Time',
51: 'BatteryVolts',
52: 'Vout',
53: 'RealResistance',
54: 'DateTime',
55: 'LastPuff',
56: 'LastTemperature',
57: 'LastPower',
58: 'CoilTemperature'
};
const enumMaterial = {
0: 'VariWatt',
1: 'Nickel',
2: 'Titanium',
3: 'StainlessSteel',
4: 'TCR',
5: 'TFR1',
6: 'TFR2',
7: 'TFR3',
8: 'TFR4',
9: 'TFR5',
10: 'TFR6',
11: 'TFR7',
12: 'TFR8'
};
const enumShortcutsInEdit = {
0: 'None',
1: 'ResetCounters'
};
const enumShortcutsInSelector = {
0: 'None',
1: 'ResetResistance'
};
const enumShortcutsInMenu = {
0: 'None',
1: 'Back',
2: 'Exit'
};
const enumDeepSleepMode = {
0: 'Standart',
1: 'DeviceOff',
2: 'DeviceLock'
};
const enumChargeScreenType = {
0: 'Classic',
1: 'Extended'
};
const enumChargeExtraType = {
0: 'None',
1: 'AnalogClock',
2: 'DigitalClock',
3: 'Logo'
};
const enumFiveClicks = {
0: 'OnOff',
1: 'LockUnlock'
};
const enumClockType = {
0: 'Analog',
1: 'Digital'
};
const enumPuffsTimeFormat = {
0: 'Seconds',
1: 'HourMinuteSeconds'
};
const enumSkin = {
0: 'Classic',
1: 'Circle',
2: 'Foxy'
};
const enumBatteryModel = {
0: 'Generic',
1: 'Custom1',
2: 'Custom2',
3: 'Custom3'
};
const enumDisplaySize = {
0: 'W64H128',
1: 'W96H16'
};
const enumRtcMode = {
0: 'Lxt',
1: 'Lirc',
2: 'Lsl'
};
const enumPreheatType = {
0: 'Watts',
1: 'Percents',
2: 'Curve'
};
const enumSmartMode = {
0: 'Off',
1: 'On',
2: 'Lazy'
};
const enumScreenProtectionTime = {
0: 'Off',
1: 'Min1',
2: 'Min2',
5: 'Min5',
10: 'Min10',
15: 'Min15',
20: 'Min20',
30: 'Min30'
};
const enumTemperatureUnits = {
0: 'Fahrenheit',
1: 'Celsius'
};
const enumDateFormat = {
0: 'DDMMYY',
1: 'MMDDYY'
};
const enumTimeFormat = {
0: 'H24',
1: 'H12'
};
class AfcFile {
decodeAfc(buf) {
return (new ArcticFoxEncryption()).decode(buf).toString();
}
encodeAfc(str) {
return (new ArcticFoxEncryption().encode(Buffer.from(str)));
}
conf2xml(config) {
function smallLineContent(attr) {
return enumSmallLineContent[config[attr]] + (config[attr + 'Puff'] ? ', FireTimeMask' : '');
}
function circleLineContent(attr) {
return enumCircleLineContent[config[attr]] + (config[attr + 'Puff'] ? ', FireTimeMask' : '');
}
function classicLineContent(attr) {
return enumClassicLineContent[config[attr]] + (config[attr + 'Puff'] ? ', FireTimeMask' : '');
}
function foxyLineContent(attr) {
return enumFoxyLineContent[config[attr]] + (config[attr + 'Puff'] ? ', FireTimeMask' : '');
}
const map = {
'Model.Info.SettingsVersion': config.SettingsVersion,
'Model.Info.ProductId': config.ProductId,
'Model.Info.HardwareVersion': config.HardwareVersion,
'Model.Info.MaxDevicePower': config.MaxDevicePower,
'Model.Info.NumberOfBatteries': config.NumberOfBatteries,
'Model.Info.MaxChargingCurrent': config.MaxChargingCurrent,
'Model.Info.DisplaySize': enumDisplaySize[config.DisplaySize],
'Model.Info.FirmwareVersion': config.FirmwareVersion,
'Model.Info.FirmwareBuild': config.FirmwareBuild,
'Model.General.Profiles[0].Name': config.profiles[0].Name,
'Model.General.Profiles[0].Flags.Material': enumMaterial[config.profiles[0].Material],
'Model.General.Profiles[0].Flags.IsTemperatureDominant': config.profiles[0].IsTemperatureDominant,
'Model.General.Profiles[0].Flags.IsResistanceLocked': config.profiles[0].IsResistanceLocked,
'Model.General.Profiles[0].Flags.IsEnabled': config.profiles[0].IsEnabled,
'Model.General.Profiles[0].Flags2.IsPIEnabled': config.profiles[0].IsPIEnabled,
'Model.General.Profiles[0].Flags2.IsPowerStep1W': config.profiles[0].IsPowerStep1W,
'Model.General.Profiles[0].Flags2.IsTemperatureStep1C2F': config.profiles[0].IsTemperatureStep1C2F,
'Model.General.Profiles[0].Power': Math.round(config.profiles[0].Power * 10),
'Model.General.Profiles[0].PreheatType': enumPreheatType[config.profiles[0].PreheatType],
'Model.General.Profiles[0].SelectedCurve': config.profiles[0].SelectedCurve,
'Model.General.Profiles[0].PreheatTime': config.profiles[0].PreheatTime,
'Model.General.Profiles[0].PreheatDelay': config.profiles[0].PreheatDelay,
'Model.General.Profiles[0].PreheatPower': config.profiles[0].PreheatPower,
'Model.General.Profiles[0].Temperature': config.profiles[0].Temperature,
'Model.General.Profiles[0].Resistance': config.profiles[0].Resistance,
'Model.General.Profiles[0].TCR': config.profiles[0].TCR,
'Model.General.Profiles[0].PIRegulator.Range': config.profiles[0].PIRegulatorRange,
'Model.General.Profiles[0].PIRegulator.PValue': config.profiles[0].PIRegulatorPValue,
'Model.General.Profiles[0].PIRegulator.IValue': config.profiles[0].PIRegulatorIValue,
'Model.General.Profiles[1].Name': config.profiles[1].Name,
'Model.General.Profiles[1].Flags.Material': enumMaterial[config.profiles[1].Material],
'Model.General.Profiles[1].Flags.IsTemperatureDominant': config.profiles[1].IsTemperatureDominant,
'Model.General.Profiles[1].Flags.IsResistanceLocked': config.profiles[1].IsResistanceLocked,
'Model.General.Profiles[1].Flags.IsEnabled': config.profiles[1].IsEnabled,
'Model.General.Profiles[1].Flags2.IsPIEnabled': config.profiles[1].IsPIEnabled,
'Model.General.Profiles[1].Flags2.IsPowerStep1W': config.profiles[1].IsPowerStep1W,
'Model.General.Profiles[1].Flags2.IsTemperatureStep1C2F': config.profiles[1].IsTemperatureStep1C2F,
'Model.General.Profiles[1].Power': Math.round(config.profiles[1].Power * 10),
'Model.General.Profiles[1].PreheatType': enumPreheatType[config.profiles[1].PreheatType],
'Model.General.Profiles[1].SelectedCurve': config.profiles[1].SelectedCurve,
'Model.General.Profiles[1].PreheatTime': config.profiles[1].PreheatTime,
'Model.General.Profiles[1].PreheatDelay': config.profiles[1].PreheatDelay,
'Model.General.Profiles[1].PreheatPower': config.profiles[1].PreheatPower,
'Model.General.Profiles[1].Temperature': config.profiles[1].Temperature,
'Model.General.Profiles[1].Resistance': config.profiles[1].Resistance,
'Model.General.Profiles[1].TCR': config.profiles[1].TCR,
'Model.General.Profiles[1].PIRegulator.Range': config.profiles[1].PIRegulatorRange,
'Model.General.Profiles[1].PIRegulator.PValue': config.profiles[1].PIRegulatorPValue,
'Model.General.Profiles[1].PIRegulator.IValue': config.profiles[1].PIRegulatorIValue,
'Model.General.Profiles[2].Name': config.profiles[2].Name,
'Model.General.Profiles[2].Flags.Material': enumMaterial[config.profiles[2].Material],
'Model.General.Profiles[2].Flags.IsTemperatureDominant': config.profiles[2].IsTemperatureDominant,
'Model.General.Profiles[2].Flags.IsResistanceLocked': config.profiles[2].IsResistanceLocked,
'Model.General.Profiles[2].Flags.IsEnabled': config.profiles[2].IsEnabled,
'Model.General.Profiles[2].Flags2.IsPIEnabled': config.profiles[2].IsPIEnabled,
'Model.General.Profiles[2].Flags2.IsPowerStep1W': config.profiles[2].IsPowerStep1W,
'Model.General.Profiles[2].Flags2.IsTemperatureStep1C2F': config.profiles[2].IsTemperatureStep1C2F,
'Model.General.Profiles[2].Power': Math.round(config.profiles[2].Power * 10),
'Model.General.Profiles[2].PreheatType': enumPreheatType[config.profiles[2].PreheatType],
'Model.General.Profiles[2].SelectedCurve': config.profiles[2].SelectedCurve,
'Model.General.Profiles[2].PreheatTime': config.profiles[2].PreheatTime,
'Model.General.Profiles[2].PreheatDelay': config.profiles[2].PreheatDelay,
'Model.General.Profiles[2].PreheatPower': config.profiles[2].PreheatPower,
'Model.General.Profiles[2].Temperature': config.profiles[2].Temperature,
'Model.General.Profiles[2].Resistance': config.profiles[2].Resistance,
'Model.General.Profiles[2].TCR': config.profiles[2].TCR,
'Model.General.Profiles[2].PIRegulator.Range': config.profiles[2].PIRegulatorRange,
'Model.General.Profiles[2].PIRegulator.PValue': config.profiles[2].PIRegulatorPValue,
'Model.General.Profiles[2].PIRegulator.IValue': config.profiles[2].PIRegulatorIValue,
'Model.General.Profiles[3].Name': config.profiles[3].Name,
'Model.General.Profiles[3].Flags.Material': enumMaterial[config.profiles[3].Material],
'Model.General.Profiles[3].Flags.IsTemperatureDominant': config.profiles[3].IsTemperatureDominant,
'Model.General.Profiles[3].Flags.IsResistanceLocked': config.profiles[3].IsResistanceLocked,
'Model.General.Profiles[3].Flags.IsEnabled': config.profiles[3].IsEnabled,
'Model.General.Profiles[3].Flags2.IsPIEnabled': config.profiles[3].IsPIEnabled,
'Model.General.Profiles[3].Flags2.IsPowerStep1W': config.profiles[3].IsPowerStep1W,
'Model.General.Profiles[3].Flags2.IsTemperatureStep1C2F': config.profiles[3].IsTemperatureStep1C2F,
'Model.General.Profiles[3].Power': Math.round(config.profiles[3].Power * 10),
'Model.General.Profiles[3].PreheatType': enumPreheatType[config.profiles[3].PreheatType],
'Model.General.Profiles[3].SelectedCurve': config.profiles[3].SelectedCurve,
'Model.General.Profiles[3].PreheatTime': config.profiles[3].PreheatTime,
'Model.General.Profiles[3].PreheatDelay': config.profiles[3].PreheatDelay,
'Model.General.Profiles[3].PreheatPower': config.profiles[3].PreheatPower,
'Model.General.Profiles[3].Temperature': config.profiles[3].Temperature,
'Model.General.Profiles[3].Resistance': config.profiles[3].Resistance,
'Model.General.Profiles[3].TCR': config.profiles[3].TCR,
'Model.General.Profiles[3].PIRegulator.Range': config.profiles[3].PIRegulatorRange,
'Model.General.Profiles[3].PIRegulator.PValue': config.profiles[3].PIRegulatorPValue,
'Model.General.Profiles[3].PIRegulator.IValue': config.profiles[3].PIRegulatorIValue,
'Model.General.Profiles[4].Name': config.profiles[4].Name,
'Model.General.Profiles[4].Flags.Material': enumMaterial[config.profiles[4].Material],
'Model.General.Profiles[4].Flags.IsTemperatureDominant': config.profiles[4].IsTemperatureDominant,
'Model.General.Profiles[4].Flags.IsResistanceLocked': config.profiles[4].IsResistanceLocked,
'Model.General.Profiles[4].Flags.IsEnabled': config.profiles[4].IsEnabled,
'Model.General.Profiles[4].Flags2.IsPIEnabled': config.profiles[4].IsPIEnabled,
'Model.General.Profiles[4].Flags2.IsPowerStep1W': config.profiles[4].IsPowerStep1W,
'Model.General.Profiles[4].Flags2.IsTemperatureStep1C2F': config.profiles[4].IsTemperatureStep1C2F,
'Model.General.Profiles[4].Power': Math.round(config.profiles[4].Power * 10),
'Model.General.Profiles[4].PreheatType': enumPreheatType[config.profiles[4].PreheatType],
'Model.General.Profiles[4].SelectedCurve': config.profiles[4].SelectedCurve,
'Model.General.Profiles[4].PreheatTime': config.profiles[4].PreheatTime,
'Model.General.Profiles[4].PreheatDelay': config.profiles[4].PreheatDelay,
'Model.General.Profiles[4].PreheatPower': config.profiles[4].PreheatPower,
'Model.General.Profiles[4].Temperature': config.profiles[4].Temperature,
'Model.General.Profiles[4].Resistance': config.profiles[4].Resistance,
'Model.General.Profiles[4].TCR': config.profiles[4].TCR,
'Model.General.Profiles[4].PIRegulator.Range': config.profiles[4].PIRegulatorRange,
'Model.General.Profiles[4].PIRegulator.PValue': config.profiles[4].PIRegulatorPValue,
'Model.General.Profiles[4].PIRegulator.IValue': config.profiles[4].PIRegulatorIValue,
'Model.General.Profiles[5].Name': config.profiles[5].Name,
'Model.General.Profiles[5].Flags.Material': enumMaterial[config.profiles[5].Material],
'Model.General.Profiles[5].Flags.IsTemperatureDominant': config.profiles[5].IsTemperatureDominant,
'Model.General.Profiles[5].Flags.IsResistanceLocked': config.profiles[5].IsResistanceLocked,
'Model.General.Profiles[5].Flags.IsEnabled': config.profiles[5].IsEnabled,
'Model.General.Profiles[5].Flags2.IsPIEnabled': config.profiles[5].IsPIEnabled,
'Model.General.Profiles[5].Flags2.IsPowerStep1W': config.profiles[5].IsPowerStep1W,
'Model.General.Profiles[5].Flags2.IsTemperatureStep1C2F': config.profiles[5].IsTemperatureStep1C2F,
'Model.General.Profiles[5].Power': Math.round(config.profiles[5].Power * 10),
'Model.General.Profiles[5].PreheatType': enumPreheatType[config.profiles[5].PreheatType],
'Model.General.Profiles[5].SelectedCurve': config.profiles[5].SelectedCurve,
'Model.General.Profiles[5].PreheatTime': config.profiles[5].PreheatTime,
'Model.General.Profiles[5].PreheatDelay': config.profiles[5].PreheatDelay,
'Model.General.Profiles[5].PreheatPower': config.profiles[5].PreheatPower,
'Model.General.Profiles[5].Temperature': config.profiles[5].Temperature,
'Model.General.Profiles[5].Resistance': config.profiles[5].Resistance,
'Model.General.Profiles[5].TCR': config.profiles[5].TCR,
'Model.General.Profiles[5].PIRegulator.Range': config.profiles[5].PIRegulatorRange,
'Model.General.Profiles[5].PIRegulator.PValue': config.profiles[5].PIRegulatorPValue,
'Model.General.Profiles[5].PIRegulator.IValue': config.profiles[5].PIRegulatorIValue,
'Model.General.Profiles[6].Name': config.profiles[6].Name,
'Model.General.Profiles[6].Flags.Material': enumMaterial[config.profiles[6].Material],
'Model.General.Profiles[6].Flags.IsTemperatureDominant': config.profiles[6].IsTemperatureDominant,
'Model.General.Profiles[6].Flags.IsResistanceLocked': config.profiles[6].IsResistanceLocked,
'Model.General.Profiles[6].Flags.IsEnabled': config.profiles[6].IsEnabled,
'Model.General.Profiles[6].Flags2.IsPIEnabled': config.profiles[6].IsPIEnabled,
'Model.General.Profiles[6].Flags2.IsPowerStep1W': config.profiles[6].IsPowerStep1W,
'Model.General.Profiles[6].Flags2.IsTemperatureStep1C2F': config.profiles[6].IsTemperatureStep1C2F,
'Model.General.Profiles[6].Power': Math.round(config.profiles[6].Power * 10),
'Model.General.Profiles[6].PreheatType': enumPreheatType[config.profiles[6].PreheatType],
'Model.General.Profiles[6].SelectedCurve': config.profiles[6].SelectedCurve,
'Model.General.Profiles[6].PreheatTime': config.profiles[6].PreheatTime,
'Model.General.Profiles[6].PreheatDelay': config.profiles[6].PreheatDelay,
'Model.General.Profiles[6].PreheatPower': config.profiles[6].PreheatPower,
'Model.General.Profiles[6].Temperature': config.profiles[6].Temperature,
'Model.General.Profiles[6].Resistance': config.profiles[6].Resistance,
'Model.General.Profiles[6].TCR': config.profiles[6].TCR,
'Model.General.Profiles[6].PIRegulator.Range': config.profiles[6].PIRegulatorRange,
'Model.General.Profiles[6].PIRegulator.PValue': config.profiles[6].PIRegulatorPValue,
'Model.General.Profiles[6].PIRegulator.IValue': config.profiles[6].PIRegulatorIValue,
'Model.General.Profiles[7].Name': config.profiles[7].Name,
'Model.General.Profiles[7].Flags.Material': enumMaterial[config.profiles[7].Material],
'Model.General.Profiles[7].Flags.IsTemperatureDominant': config.profiles[7].IsTemperatureDominant,
'Model.General.Profiles[7].Flags.IsResistanceLocked': config.profiles[7].IsResistanceLocked,
'Model.General.Profiles[7].Flags.IsEnabled': config.profiles[7].IsEnabled,
'Model.General.Profiles[7].Flags2.IsPIEnabled': config.profiles[7].IsPIEnabled,
'Model.General.Profiles[7].Flags2.IsPowerStep1W': config.profiles[7].IsPowerStep1W,
'Model.General.Profiles[7].Flags2.IsTemperatureStep1C2F': config.profiles[7].IsTemperatureStep1C2F,
'Model.General.Profiles[7].Power': Math.round(config.profiles[7].Power * 10),
'Model.General.Profiles[7].PreheatType': enumPreheatType[config.profiles[7].PreheatType],
'Model.General.Profiles[7].SelectedCurve': config.profiles[7].SelectedCurve,
'Model.General.Profiles[7].PreheatTime': config.profiles[7].PreheatTime,
'Model.General.Profiles[7].PreheatDelay': config.profiles[7].PreheatDelay,
'Model.General.Profiles[7].PreheatPower': config.profiles[7].PreheatPower,
'Model.General.Profiles[7].Temperature': config.profiles[7].Temperature,
'Model.General.Profiles[7].Resistance': config.profiles[7].Resistance,
'Model.General.Profiles[7].TCR': config.profiles[7].TCR,
'Model.General.Profiles[7].PIRegulator.Range': config.profiles[7].PIRegulatorRange,
'Model.General.Profiles[7].PIRegulator.PValue': config.profiles[7].PIRegulatorPValue,
'Model.General.Profiles[7].PIRegulator.IValue': config.profiles[7].PIRegulatorIValue,
'Model.General.SelectedProfile': config.SelectedProfile,
'Model.General.SmartMode': enumSmartMode[config.SmartMode],
'Model.General.SmartRange': config.SmartRange,
'Model.Interface.Brightness': Math.round(config.Brightness * 2.55),
'Model.Interface.IsFlipped': config.IsFlipped,
'Model.Interface.IsLogoEnabled': config.IsLogoEnabled,
'Model.Interface.IsClockOnMainScreen': config.IsClockOnMainScreen,
'Model.Interface.ClockType': enumClockType[config.ClockType],
'Model.Interface.DimTimeout': config.DimTimeout,
'Model.Interface.DimTimeoutLocked': config.DimTimeoutLocked,
'Model.Interface.DimTimeoutCharging': config.DimTimeoutCharging,
'Model.Interface.ShowLogoDelay': config.ShowLogoDelay,
'Model.Interface.ShowClockDelay': config.ShowClockDelay,
'Model.Interface.ScreensaveDuration': config.ScreensaveDuration,
'Model.Interface.PuffScreenDelay': Math.round(config.PuffScreenDelay * 10),
'Model.Interface.ClicksVW[0]': enumClickAction[config.ClicksVW0],
'Model.Interface.ClicksVW[1]': enumClickAction[config.ClicksVW1],
'Model.Interface.ClicksVW[2]': enumClickAction[config.ClicksVW2],
'Model.Interface.ClicksTC[0]': enumClickAction[config.ClicksTC0],
'Model.Interface.ClicksTC[1]': enumClickAction[config.ClicksTC1],
'Model.Interface.ClicksTC[2]': enumClickAction[config.ClicksTC2],
'Model.Interface.FiveClicks': enumFiveClicks[config.FiveClicks],
'Model.Interface.ShortcutsVW[0].InStandby': enumClickAction[config.ShortcutsVW0InStandby],
'Model.Interface.ShortcutsVW[0].InEditMain': enumShortcutsInEdit[config.ShortcutsVW0InEditMain],
'Model.Interface.ShortcutsVW[0].InSelector': enumShortcutsInSelector[config.ShortcutsVW0InSelector],
'Model.Interface.ShortcutsVW[0].InMenu': enumShortcutsInMenu[config.ShortcutsVW0InMenu],
'Model.Interface.ShortcutsVW[1].InStandby': enumClickAction[config.ShortcutsVW1InStandby],
'Model.Interface.ShortcutsVW[1].InEditMain': enumShortcutsInEdit[config.ShortcutsVW1InEditMain],
'Model.Interface.ShortcutsVW[1].InSelector': enumShortcutsInSelector[config.ShortcutsVW1InSelector],
'Model.Interface.ShortcutsVW[1].InMenu': enumShortcutsInMenu[config.ShortcutsVW1InMenu],
'Model.Interface.ShortcutsVW[2].InStandby': enumClickAction[config.ShortcutsVW2InStandby],
'Model.Interface.ShortcutsVW[2].InEditMain': enumShortcutsInEdit[config.ShortcutsVW2InEditMain],
'Model.Interface.ShortcutsVW[2].InSelector': enumShortcutsInSelector[config.ShortcutsVW2InSelector],
'Model.Interface.ShortcutsVW[2].InMenu': enumShortcutsInMenu[config.ShortcutsVW2InMenu],
'Model.Interface.ShortcutsTC[0].InStandby': enumClickAction[config.ShortcutsTC0InStandby],
'Model.Interface.ShortcutsTC[0].InEditMain': enumShortcutsInEdit[config.ShortcutsTC0InEditMain],
'Model.Interface.ShortcutsTC[0].InSelector': enumShortcutsInSelector[config.ShortcutsTC0InSelector],
'Model.Interface.ShortcutsTC[0].InMenu': enumShortcutsInMenu[config.ShortcutsTC0InMenu],
'Model.Interface.ShortcutsTC[1].InStandby': enumClickAction[config.ShortcutsTC1InStandby],
'Model.Interface.ShortcutsTC[1].InEditMain': enumShortcutsInEdit[config.ShortcutsTC1InEditMain],
'Model.Interface.ShortcutsTC[1].InSelector': enumShortcutsInSelector[config.ShortcutsTC1InSelector],
'Model.Interface.ShortcutsTC[1].InMenu': enumShortcutsInMenu[config.ShortcutsTC1InMenu],
'Model.Interface.ShortcutsTC[2].InStandby': enumClickAction[config.ShortcutsTC2InStandby],
'Model.Interface.ShortcutsTC[2].InEditMain': enumShortcutsInEdit[config.ShortcutsTC2InEditMain],
'Model.Interface.ShortcutsTC[2].InSelector': enumShortcutsInSelector[config.ShortcutsTC2InSelector],
'Model.Interface.ShortcutsTC[2].InMenu': enumShortcutsInMenu[config.ShortcutsTC2InMenu],
'Model.Interface.WakeUpByPlusMinus': config.WakeUpByPlusMinus,
'Model.Interface.IsUpDownSwapped': config.IsUpDownSwapped,
'Model.Interface.MainScreenSkin': enumSkin[config.MainScreenSkin],
'Model.Interface.ClassicSkinVWLines.Line1': () => classicLineContent('ClassicSkinVWLine1'),
'Model.Interface.ClassicSkinVWLines.Line2': () => classicLineContent('ClassicSkinVWLine2'),
'Model.Interface.ClassicSkinVWLines.Line3': () => classicLineContent('ClassicSkinVWLine3'),
'Model.Interface.ClassicSkinVWLines.Line4': () => classicLineContent('ClassicSkinVWLine4'),
'Model.Interface.ClassicSkinTCLines.Line1': () => classicLineContent('ClassicSkinTCLine1'),
'Model.Interface.ClassicSkinTCLines.Line2': () => classicLineContent('ClassicSkinTCLine2'),
'Model.Interface.ClassicSkinTCLines.Line3': () => classicLineContent('ClassicSkinTCLine3'),
'Model.Interface.ClassicSkinTCLines.Line4': () => classicLineContent('ClassicSkinTCLine4'),
'Model.Interface.CircleSkinVWLines.Line1': () => circleLineContent('CircleSkinVWLine1'),
'Model.Interface.CircleSkinVWLines.Line2': () => circleLineContent('CircleSkinVWLine2'),
'Model.Interface.CircleSkinVWLines.Line3': () => circleLineContent('CircleSkinVWLine3'),
'Model.Interface.CircleSkinTCLines.Line1': () => circleLineContent('CircleSkinTCLine1'),
'Model.Interface.CircleSkinTCLines.Line2': () => circleLineContent('CircleSkinTCLine2'),
'Model.Interface.CircleSkinTCLines.Line3': () => circleLineContent('CircleSkinTCLine3'),
'Model.Interface.FoxySkinVWLines.Line1': () => foxyLineContent('FoxySkinVWLine1'),
'Model.Interface.FoxySkinVWLines.Line2': () => foxyLineContent('FoxySkinVWLine2'),
'Model.Interface.FoxySkinVWLines.Line3': () => foxyLineContent('FoxySkinVWLine3'),
'Model.Interface.FoxySkinTCLines.Line1': () => foxyLineContent('FoxySkinTCLine1'),
'Model.Interface.FoxySkinTCLines.Line2': () => foxyLineContent('FoxySkinTCLine2'),
'Model.Interface.FoxySkinTCLines.Line3': () => foxyLineContent('FoxySkinTCLine3'),
'Model.Interface.SmallSkinVWLines.Line1': () => smallLineContent('SmallSkinVWLine1'),
'Model.Interface.SmallSkinVWLines.Line2': () => smallLineContent('SmallSkinVWLine2'),
'Model.Interface.SmallSkinTCLines.Line1': () => smallLineContent('SmallSkinTCLine1'),
'Model.Interface.SmallSkinTCLines.Line2': () => smallLineContent('SmallSkinTCLine2'),
'Model.Interface.MediumSkinVWLines.Line1': () => classicLineContent('MediumSkinVWLine1'),
'Model.Interface.MediumSkinVWLines.Line2': () => classicLineContent('MediumSkinVWLine2'),
'Model.Interface.MediumSkinVWLines.Line3': () => classicLineContent('MediumSkinVWLine3'),
'Model.Interface.MediumSkinTCLines.Line1': () => classicLineContent('MediumSkinTCLine1'),
'Model.Interface.MediumSkinTCLines.Line2': () => classicLineContent('MediumSkinTCLine2'),
'Model.Interface.MediumSkinTCLines.Line3': () => classicLineContent('MediumSkinTCLine3'),
'Model.Interface.TemperatureUnits': enumTemperatureUnits[config.TemperatureUnits],
'Model.Interface.DateFormat': enumDateFormat[config.DateFormat],
'Model.Interface.TimeFormat': enumTimeFormat[config.TimeFormat],
'Model.Interface.PuffsTimeFormat': enumPuffsTimeFormat[config.PuffsTimeFormat],
'Model.Interface.ChargeScreenType': enumChargeScreenType[config.ChargeScreenType],
'Model.Interface.ChargeExtraType': enumChargeExtraType[config.ChargeExtraType],
'Model.Interface.IsStealthMode': config.IsStealthMode,
'Model.Interface.ShowChargingInStealth': config.ShowChargingInStealth,
'Model.Interface.ShowScreensaverInStealth': config.ShowScreensaverInStealth,
'Model.Interface.ClockOnClickInStealth': config.ClockOnClickInStealth,
'Model.Counters.PuffsCount': config.PuffsCount,
'Model.Counters.PuffsTime': config.PuffsTime,
'Model.Counters.DateTime.Year': config.Year,
'Model.Counters.DateTime.Month': config.Month,
'Model.Counters.DateTime.Day': config.Day,
'Model.Counters.DateTime.Hour': config.Hour,
'Model.Counters.DateTime.Minute': config.Minute,
'Model.Counters.DateTime.Second': config.Second,
'Model.Advanced.PowerLimit': Math.round(config.PowerLimit * 10),
'Model.Advanced.PuffCutOff': Math.round(config.PuffCutOff * 10),
'Model.Advanced.BatteryVoltageOffsets[0]': config.BatteryVoltageOffset1,
'Model.Advanced.BatteryVoltageOffsets[1]': config.BatteryVoltageOffset2,
'Model.Advanced.BatteryVoltageOffsets[2]': config.BatteryVoltageOffset3,
'Model.Advanced.BatteryVoltageOffsets[3]': config.BatteryVoltageOffset4,
'Model.Advanced.RtcMode': enumRtcMode[config.RtcMode],
'Model.Advanced.IsUsbCharge': config.IsUsbCharge,
'Model.Advanced.UsbNoSleep': config.UsbNoSleep,
'Model.Advanced.ChargingCurrent': config.ChargingCurrent,
'Model.Advanced.ResetCountersOnStartup': config.ResetCountersOnStartup,
'Model.Advanced.ShuntCorrection': config.ShuntCorrection,
'Model.Advanced.InternalResistance': config.InternalResistance,
'Model.Advanced.BatteryModel': enumBatteryModel[config.BatteryModel],
'Model.Advanced.CustomBatteryProfiles[0].Name': config.CustomBatteryProfiles[0].Name,
'Model.Advanced.CustomBatteryProfiles[0].Data[0].Percents': config.CustomBatteryProfiles[0].PercentsVoltage[0].Percents,
'Model.Advanced.CustomBatteryProfiles[0].Data[0].Voltage': Math.round(config.CustomBatteryProfiles[0].PercentsVoltage[0].Voltage * 100),
'Model.Advanced.CustomBatteryProfiles[0].Data[1].Percents': config.CustomBatteryProfiles[0].PercentsVoltage[1].Percents,
'Model.Advanced.CustomBatteryProfiles[0].Data[1].Voltage': Math.round(config.CustomBatteryProfiles[0].PercentsVoltage[1].Voltage * 100),
'Model.Advanced.CustomBatteryProfiles[0].Data[2].Percents': config.CustomBatteryProfiles[0].PercentsVoltage[2].Percents,
'Model.Advanced.CustomBatteryProfiles[0].Data[2].Voltage': Math.round(config.CustomBatteryProfiles[0].PercentsVoltage[2].Voltage * 100),
'Model.Advanced.CustomBatteryProfiles[0].Data[3].Percents': config.CustomBatteryProfiles[0].PercentsVoltage[3].Percents,
'Model.Advanced.CustomBatteryProfiles[0].Data[3].Voltage': Math.round(config.CustomBatteryProfiles[0].PercentsVoltage[3].Voltage * 100),
'Model.Advanced.CustomBatteryProfiles[0].Data[4].Percents': config.CustomBatteryProfiles[0].PercentsVoltage[4].Percents,
'Model.Advanced.CustomBatteryProfiles[0].Data[4].Voltage': Math.round(config.CustomBatteryProfiles[0].PercentsVoltage[4].Voltage * 100),
'Model.Advanced.CustomBatteryProfiles[0].Data[5].Percents': config.CustomBatteryProfiles[0].PercentsVoltage[5].Percents,
'Model.Advanced.CustomBatteryProfiles[0].Data[5].Voltage': Math.round(config.CustomBatteryProfiles[0].PercentsVoltage[5].Voltage * 100),
'Model.Advanced.CustomBatteryProfiles[0].Data[6].Percents': config.CustomBatteryProfiles[0].PercentsVoltage[6].Percents,
'Model.Advanced.CustomBatteryProfiles[0].Data[6].Voltage': Math.round(config.CustomBatteryProfiles[0].PercentsVoltage[6].Voltage * 100),
'Model.Advanced.CustomBatteryProfiles[0].Data[7].Percents': config.CustomBatteryProfiles[0].PercentsVoltage[7].Percents,
'Model.Advanced.CustomBatteryProfiles[0].Data[7].Voltage': Math.round(config.CustomBatteryProfiles[0].PercentsVoltage[7].Voltage * 100),
'Model.Advanced.CustomBatteryProfiles[0].Data[8].Percents': config.CustomBatteryProfiles[0].PercentsVoltage[8].Percents,
'Model.Advanced.CustomBatteryProfiles[0].Data[8].Voltage': Math.round(config.CustomBatteryProfiles[0].PercentsVoltage[8].Voltage * 100),
'Model.Advanced.CustomBatteryProfiles[0].Data[9].Percents': config.CustomBatteryProfiles[0].PercentsVoltage[9].Percents,
'Model.Advanced.CustomBatteryProfiles[0].Data[9].Voltage': Math.round(config.CustomBatteryProfiles[0].PercentsVoltage[9].Voltage * 100),
'Model.Advanced.CustomBatteryProfiles[0].Data[10].Percents': config.CustomBatteryProfiles[0].PercentsVoltage[10].Percents,
'Model.Advanced.CustomBatteryProfiles[0].Data[10].Voltage': Math.round(config.CustomBatteryProfiles[0].PercentsVoltage[10].Voltage * 100),
'Model.Advanced.CustomBatteryProfiles[0].Cutoff': Math.round(config.CustomBatteryProfiles[0].Cutoff * 100),
'Model.Advanced.CustomBatteryProfiles[1].Name': config.CustomBatteryProfiles[1].Name,
'Model.Advanced.CustomBatteryProfiles[1].Data[0].Percents': config.CustomBatteryProfiles[1].PercentsVoltage[0].Percents,
'Model.Advanced.CustomBatteryProfiles[1].Data[0].Voltage': Math.round(config.CustomBatteryProfiles[1].PercentsVoltage[0].Voltage * 100),
'Model.Advanced.CustomBatteryProfiles[1].Data[1].Percents': config.CustomBatteryProfiles[1].PercentsVoltage[1].Percents,
'Model.Advanced.CustomBatteryProfiles[1].Data[1].Voltage': Math.round(config.CustomBatteryProfiles[1].PercentsVoltage[1].Voltage * 100),
'Model.Advanced.CustomBatteryProfiles[1].Data[2].Percents': config.CustomBatteryProfiles[1].PercentsVoltage[2].Percents,
'Model.Advanced.CustomBatteryProfiles[1].Data[2].Voltage': Math.round(config.CustomBatteryProfiles[1].PercentsVoltage[2].Voltage * 100),
'Model.Advanced.CustomBatteryProfiles[1].Data[3].Percents': config.CustomBatteryProfiles[1].PercentsVoltage[3].Percents,
'Model.Advanced.CustomBatteryProfiles[1].Data[3].Voltage': Math.round(config.CustomBatteryProfiles[1].PercentsVoltage[3].Voltage * 100),
'Model.Advanced.CustomBatteryProfiles[1].Data[4].Percents': config.CustomBatteryProfiles[1].PercentsVoltage[4].Percents,
'Model.Advanced.CustomBatteryProfiles[1].Data[4].Voltage': Math.round(config.CustomBatteryProfiles[1].PercentsVoltage[4].Voltage * 100),
'Model.Advanced.CustomBatteryProfiles[1].Data[5].Percents': config.CustomBatteryProfiles[1].PercentsVoltage[5].Percents,
'Model.Advanced.CustomBatteryProfiles[1].Data[5].Voltage': Math.round(config.CustomBatteryProfiles[1].PercentsVoltage[5].Voltage * 100),
'Model.Advanced.CustomBatteryProfiles[1].Data[6].Percents': config.CustomBatteryProfiles[1].PercentsVoltage[6].Percents,
'Model.Advanced.CustomBatteryProfiles[1].Data[6].Voltage': Math.round(config.CustomBatteryProfiles[1].PercentsVoltage[6].Voltage * 100),
'Model.Advanced.CustomBatteryProfiles[1].Data[7].Percents': config.CustomBatteryProfiles[1].PercentsVoltage[7].Percents,
'Model.Advanced.CustomBatteryProfiles[1].Data[7].Voltage': Math.round(config.CustomBatteryProfiles[1].PercentsVoltage[7].Voltage * 100),
'Model.Advanced.CustomBatteryProfiles[1].Data[8].Percents': config.CustomBatteryProfiles[1].PercentsVoltage[8].Percents,
'Model.Advanced.CustomBatteryProfiles[1].Data[8].Voltage': Math.round(config.CustomBatteryProfiles[1].PercentsVoltage[8].Voltage * 100),
'Model.Advanced.CustomBatteryProfiles[1].Data[9].Percents': config.CustomBatteryProfiles[1].PercentsVoltage[9].Percents,
'Model.Advanced.CustomBatteryProfiles[1].Data[9].Voltage': Math.round(config.CustomBatteryProfiles[1].PercentsVoltage[9].Voltage * 100),
'Model.Advanced.CustomBatteryProfiles[1].Data[10].Percents': config.CustomBatteryProfiles[1].PercentsVoltage[10].Percents,
'Model.Advanced.CustomBatteryProfiles[1].Data[10].Voltage': Math.round(config.CustomBatteryProfiles[1].PercentsVoltage[10].Voltage * 100),
'Model.Advanced.CustomBatteryProfiles[1].Cutoff': Math.round(config.CustomBatteryProfiles[1].Cutoff * 100),
'Model.Advanced.CustomBatteryProfiles[2].Name': config.CustomBatteryProfiles[2].Name,
'Model.Advanced.CustomBatteryProfiles[2].Data[0].Percents': config.CustomBatteryProfiles[2].PercentsVoltage[0].Percents,
'Model.Advanced.CustomBatteryProfiles[2].Data[0].Voltage': Math.round(config.CustomBatteryProfiles[2].PercentsVoltage[0].Voltage * 100),
'Model.Advanced.CustomBatteryProfiles[2].Data[1].Percents': config.CustomBatteryProfiles[2].PercentsVoltage[1].Percents,
'Model.Advanced.CustomBatteryProfiles[2].Data[1].Voltage': Math.round(config.CustomBatteryProfiles[2].PercentsVoltage[1].Voltage * 100),
'Model.Advanced.CustomBatteryProfiles[2].Data[2].Percents': config.CustomBatteryProfiles[2].PercentsVoltage[2].Percents,
'Model.Advanced.CustomBatteryProfiles[2].Data[2].Voltage': Math.round(config.CustomBatteryProfiles[2].PercentsVoltage[2].Voltage * 100),
'Model.Advanced.CustomBatteryProfiles[2].Data[3].Percents': config.CustomBatteryProfiles[2].PercentsVoltage[3].Percents,
'Model.Advanced.CustomBatteryProfiles[2].Data[3].Voltage': Math.round(config.CustomBatteryProfiles[2].PercentsVoltage[3].Voltage * 100),
'Model.Advanced.CustomBatteryProfiles[2].Data[4].Percents': config.CustomBatteryProfiles[2].PercentsVoltage[4].Percents,
'Model.Advanced.CustomBatteryProfiles[2].Data[4].Voltage': Math.round(config.CustomBatteryProfiles[2].PercentsVoltage[4].Voltage * 100),
'Model.Advanced.CustomBatteryProfiles[2].Data[5].Percents': config.CustomBatteryProfiles[2].PercentsVoltage[5].Percents,
'Model.Advanced.CustomBatteryProfiles[2].Data[5].Voltage': Math.round(config.CustomBatteryProfiles[2].PercentsVoltage[5].Voltage * 100),
'Model.Advanced.CustomBatteryProfiles[2].Data[6].Percents': config.CustomBatteryProfiles[2].PercentsVoltage[6].Percents,
'Model.Advanced.CustomBatteryProfiles[2].Data[6].Voltage': Math.round(config.CustomBatteryProfiles[2].PercentsVoltage[6].Voltage * 100),
'Model.Advanced.CustomBatteryProfiles[2].Data[7].Percents': config.CustomBatteryProfiles[2].PercentsVoltage[7].Percents,
'Model.Advanced.CustomBatteryProfiles[2].Data[7].Voltage': Math.round(config.CustomBatteryProfiles[2].PercentsVoltage[7].Voltage * 100),
'Model.Advanced.CustomBatteryProfiles[2].Data[8].Percents': config.CustomBatteryProfiles[2].PercentsVoltage[8].Percents,
'Model.Advanced.CustomBatteryProfiles[2].Data[8].Voltage': Math.round(config.CustomBatteryProfiles[2].PercentsVoltage[8].Voltage * 100),
'Model.Advanced.CustomBatteryProfiles[2].Data[9].Percents': config.CustomBatteryProfiles[2].PercentsVoltage[9].Percents,
'Model.Advanced.CustomBatteryProfiles[2].Data[9].Voltage': Math.round(config.CustomBatteryProfiles[2].PercentsVoltage[9].Voltage * 100),
'Model.Advanced.CustomBatteryProfiles[2].Data[10].Percents': config.CustomBatteryProfiles[2].PercentsVoltage[10].Percents,
'Model.Advanced.CustomBatteryProfiles[2].Data[10].Voltage': Math.round(config.CustomBatteryProfiles[2].PercentsVoltage[10].Voltage * 100),
'Model.Advanced.CustomBatteryProfiles[2].Cutoff': Math.round(config.CustomBatteryProfiles[2].Cutoff * 100),
'Model.Advanced.TFRTables[0].Name': config.TFRTables[0].Name,
'Model.Advanced.TFRTables[0].Points[0].Temperature': config.TFRTables[0].Points[0].Temperature,
'Model.Advanced.TFRTables[0].Points[0].Factor': Math.round(config.TFRTables[0].Points[0].Factor * 10000),
'Model.Advanced.TFRTables[0].Points[1].Temperature': config.TFRTables[0].Points[1].Temperature,
'Model.Advanced.TFRTables[0].Points[1].Factor': Math.round(config.TFRTables[0].Points[1].Factor * 10000),
'Model.Advanced.TFRTables[0].Points[2].Temperature': config.TFRTables[0].Points[2].Temperature,
'Model.Advanced.TFRTables[0].Points[2].Factor': Math.round(config.TFRTables[0].Points[2].Factor * 10000),
'Model.Advanced.TFRTables[0].Points[3].Temperature': config.TFRTables[0].Points[3].Temperature,
'Model.Advanced.TFRTables[0].Points[3].Factor': Math.round(config.TFRTables[0].Points[3].Factor * 10000),
'Model.Advanced.TFRTables[0].Points[4].Temperature': config.TFRTables[0].Points[4].Temperature,
'Model.Advanced.TFRTables[0].Points[4].Factor': Math.round(config.TFRTables[0].Points[4].Factor * 10000),
'Model.Advanced.TFRTables[0].Points[5].Temperature': config.TFRTables[0].Points[5].Temperature,
'Model.Advanced.TFRTables[0].Points[5].Factor': Math.round(config.TFRTables[0].Points[5].Factor * 10000),
'Model.Advanced.TFRTables[0].Points[6].Temperature': config.TFRTables[0].Points[6].Temperature,
'Model.Advanced.TFRTables[0].Points[6].Factor': Math.round(config.TFRTables[0].Points[6].Factor * 10000),
'Model.Advanced.TFRTables[1].Name': config.TFRTables[1].Name,
'Model.Advanced.TFRTables[1].Points[0].Temperature': config.TFRTables[1].Points[0].Temperature,
'Model.Advanced.TFRTables[1].Points[0].Factor': Math.round(config.TFRTables[1].Points[0].Factor * 10000),
'Model.Advanced.TFRTables[1].Points[1].Temperature': config.TFRTables[1].Points[1].Temperature,
'Model.Advanced.TFRTables[1].Points[1].Factor': Math.round(config.TFRTables[1].Points[1].Factor * 10000),
'Model.Advanced.TFRTables[1].Points[2].Temperature': config.TFRTables[1].Points[2].Temperature,
'Model.Advanced.TFRTables[1].Points[2].Factor': Math.round(config.TFRTables[1].Points[2].Factor * 10000),
'Model.Advanced.TFRTables[1].Points[3].Temperature': config.TFRTables[1].Points[3].Temperature,
'Model.Advanced.TFRTables[1].Points[3].Factor': Math.round(config.TFRTables[1].Points[3].Factor * 10000),
'Model.Advanced.TFRTables[1].Points[4].Temperature': config.TFRTables[1].Points[4].Temperature,
'Model.Advanced.TFRTables[1].Points[4].Factor': Math.round(config.TFRTables[1].Points[4].Factor * 10000),
'Model.Advanced.TFRTables[1].Points[5].Temperature': config.TFRTables[1].Points[5].Temperature,
'Model.Advanced.TFRTables[1].Points[5].Factor': Math.round(config.TFRTables[1].Points[5].Factor * 10000),
'Model.Advanced.TFRTables[1].Points[6].Temperature': config.TFRTables[1].Points[6].Temperature,
'Model.Advanced.TFRTables[1].Points[6].Factor': Math.round(config.TFRTables[1].Points[6].Factor * 10000),
'Model.Advanced.TFRTables[2].Name': config.TFRTables[2].Name,
'Model.Advanced.TFRTables[2].Points[0].Temperature': config.TFRTables[2].Points[0].Temperature,
'Model.Advanced.TFRTables[2].Points[0].Factor': Math.round(config.TFRTables[2].Points[0].Factor * 10000),
'Model.Advanced.TFRTables[2].Points[1].Temperature': config.TFRTables[2].Points[1].Temperature,
'Model.Advanced.TFRTables[2].Points[1].Factor': Math.round(config.TFRTables[2].Points[1].Factor * 10000),
'Model.Advanced.TFRTables[2].Points[2].Temperature': config.TFRTables[2].Points[2].Temperature,
'Model.Advanced.TFRTables[2].Points[2].Factor': Math.round(config.TFRTables[2].Points[2].Factor * 10000),
'Model.Advanced.TFRTables[2].Points[3].Temperature': config.TFRTables[2].Points[3].Temperature,
'Model.Advanced.TFRTables[2].Points[3].Factor': Math.round(config.TFRTables[2].Points[3].Factor * 10000),
'Model.Advanced.TFRTables[2].Points[4].Temperature': config.TFRTables[2].Points[4].Temperature,
'Model.Advanced.TFRTables[2].Points[4].Factor': Math.round(config.TFRTables[2].Points[4].Factor * 10000),
'Model.Advanced.TFRTables[2].Points[5].Temperature': config.TFRTables[2].Points[5].Temperature,
'Model.Advanced.TFRTables[2].Points[5].Factor': Math.round(config.TFRTables[2].Points[5].Factor * 10000),
'Model.Advanced.TFRTables[2].Points[6].Temperature': config.TFRTables[2].Points[6].Temperature,
'Model.Advanced.TFRTables[2].Points[6].Factor': Math.round(config.TFRTables[2].Points[6].Factor * 10000),
'Model.Advanced.TFRTables[3].Name': config.TFRTables[3].Name,
'Model.Advanced.TFRTables[3].Points[0].Temperature': config.TFRTables[3].Points[0].Temperature,
'Model.Advanced.TFRTables[3].Points[0].Factor': Math.round(config.TFRTables[3].Points[0].Factor * 10000),
'Model.Advanced.TFRTables[3].Points[1].Temperature': config.TFRTables[3].Points[1].Temperature,
'Model.Advanced.TFRTables[3].Points[1].Factor': Math.round(config.TFRTables[3].Points[1].Factor * 10000),
'Model.Advanced.TFRTables[3].Points[2].Temperature': config.TFRTables[3].Points[2].Temperature,
'Model.Advanced.TFRTables[3].Points[2].Factor': Math.round(config.TFRTables[3].Points[2].Factor * 10000),
'Model.Advanced.TFRTables[3].Points[3].Temperature': config.TFRTables[3].Points[3].Temperature,
'Model.Advanced.TFRTables[3].Points[3].Factor': Math.round(config.TFRTables[3].Points[3].Factor * 10000),
'Model.Advanced.TFRTables[3].Points[4].Temperature': config.TFRTables[3].Points[4].Temperature,
'Model.Advanced.TFRTables[3].Points[4].Factor': Math.round(config.TFRTables[3].Points[4].Factor * 10000),
'Model.Advanced.TFRTables[3].Points[5].Temperature': config.TFRTables[3].Points[5].Temperature,
'Model.Advanced.TFRTables[3].Points[5].Factor': Math.round(config.TFRTables[3].Points[5].Factor * 10000),
'Model.Advanced.TFRTables[3].Points[6].Temperature': config.TFRTables[3].Points[6].Temperature,
'Model.Advanced.TFRTables[3].Points[6].Factor': Math.round(config.TFRTables[3].Points[6].Factor * 10000),
'Model.Advanced.TFRTables[4].Name': config.TFRTables[4].Name,
'Model.Advanced.TFRTables[4].Points[0].Temperature': config.TFRTables[4].Points[0].Temperature,
'Model.Advanced.TFRTables[4].Points[0].Factor': Math.round(config.TFRTables[4].Points[0].Factor * 10000),
'Model.Advanced.TFRTables[4].Points[1].Temperature': config.TFRTables[4].Points[1].Temperature,
'Model.Advanced.TFRTables[4].Points[1].Factor': Math.round(config.TFRTables[4].Points[1].Factor * 10000),
'Model.Advanced.TFRTables[4].Points[2].Temperature': config.TFRTables[4].Points[2].Temperature,
'Model.Advanced.TFRTables[4].Points[2].Factor': Math.round(config.TFRTables[4].Points[2].Factor * 10000),
'Model.Advanced.TFRTables[4].Points[3].Temperature': config.TFRTables[4].Points[3].Temperature,
'Model.Advanced.TFRTables[4].Points[3].Factor': Math.round(config.TFRTables[4].Points[3].Factor * 10000),
'Model.Advanced.TFRTables[4].Points[4].Temperature': config.TFRTables[4].Points[4].Temperature,
'Model.Advanced.TFRTables[4].Points[4].Factor': Math.round(config.TFRTables[4].Points[4].Factor * 10000),
'Model.Advanced.TFRTables[4].Points[5].Temperature': config.TFRTables[4].Points[5].Temperature,
'Model.Advanced.TFRTables[4].Points[5].Factor': Math.round(config.TFRTables[4].Points[5].Factor * 10000),
'Model.Advanced.TFRTables[4].Points[6].Temperature': config.TFRTables[4].Points[6].Temperature,
'Model.Advanced.TFRTables[4].Points[6].Factor': Math.round(config.TFRTables[4].Points[6].Factor * 10000),
'Model.Advanced.TFRTables[5].Name': config.TFRTables[5].Name,
'Model.Advanced.TFRTables[5].Points[0].Temperature': config.TFRTables[5].Points[0].Temperature,
'Model.Advanced.TFRTables[5].Points[0].Factor': Math.round(config.TFRTables[5].Points[0].Factor * 10000),
'Model.Advanced.TFRTables[5].Points[1].Temperature': config.TFRTables[5].Points[1].Temperature,
'Model.Advanced.TFRTables[5].Points[1].Factor': Math.round(config.TFRTables[5].Points[1].Factor * 10000),
'Model.Advanced.TFRTables[5].Points[2].Temperature': config.TFRTables[5].Points[2].Temperature,
'Model.Advanced.TFRTables[5].Points[2].Factor': Math.round(config.TFRTables[5].Points[2].Factor * 10000),
'Model.Advanced.TFRTables[5].Points[3].Temperature': config.TFRTables[5].Points[3].Temperature,
'Model.Advanced.TFRTables[5].Points[3].Factor': Math.round(config.TFRTables[5].Points[3].Factor * 10000),
'Model.Advanced.TFRTables[5].Points[4].Temperature': config.TFRTables[5].Points[4].Temperature,
'Model.Advanced.TFRTables[5].Points[4].Factor': Math.round(config.TFRTables[5].Points[4].Factor * 10000),
'Model.Advanced.TFRTables[5].Points[5].Temperature': config.TFRTables[5].Points[5].Temperature,
'Model.Advanced.TFRTables[5].Points[5].Factor': Math.round(config.TFRTables[5].Points[5].Factor * 10000),
'Model.Advanced.TFRTables[5].Points[6].Temperature': config.TFRTables[5].Points[6].Temperature,
'Model.Advanced.TFRTables[5].Points[6].Factor': Math.round(config.TFRTables[5].Points[6].Factor * 10000),
'Model.Advanced.TFRTables[6].Name': config.TFRTables[6].Name,
'Model.Advanced.TFRTables[6].Points[0].Temperature': config.TFRTables[6].Points[0].Temperature,
'Model.Advanced.TFRTables[6].Points[0].Factor': Math.round(config.TFRTables[6].Points[0].Factor * 10000),
'Model.Advanced.TFRTables[6].Points[1].Temperature': config.TFRTables[6].Points[1].Temperature,
'Model.Advanced.TFRTables[6].Points[1].Factor': Math.round(config.TFRTables[6].Points[1].Factor * 10000),
'Model.Advanced.TFRTables[6].Points[2].Temperature': config.TFRTables[6].Points[2].Temperature,
'Model.Advanced.TFRTables[6].Points[2].Factor': Math.round(config.TFRTables[6].Points[2].Factor * 10000),
'Model.Advanced.TFRTables[6].Points[3].Temperature': config.TFRTables[6].Points[3].Temperature,
'Model.Advanced.TFRTables[6].Points[3].Factor': Math.round(config.TFRTables[6].Points[3].Factor * 10000),
'Model.Advanced.TFRTables[6].Points[4].Temperature': config.TFRTables[6].Points[4].Temperature,
'Model.Advanced.TFRTables[6].Points[4].Factor': Math.round(config.TFRTables[6].Points[4].Factor * 10000),
'Model.Advanced.TFRTables[6].Points[5].Temperature': config.TFRTables[6].Points[5].Temperature,
'Model.Advanced.TFRTables[6].Points[5].Factor': Math.round(config.TFRTables[6].Points[5].Factor * 10000),
'Model.Advanced.TFRTables[6].Points[6].Temperature': config.TFRTables[6].Points[6].Temperature,
'Model.Advanced.TFRTables[6].Points[6].Factor': Math.round(config.TFRTables[6].Points[6].Factor * 10000),
'Model.Advanced.TFRTables[7].Name': config.TFRTables[7].Name,
'Model.Advanced.TFRTables[7].Points[0].Temperature': config.TFRTables[7].Points[0].Temperature,
'Model.Advanced.TFRTables[7].Points[0].Factor': Math.round(config.TFRTables[7].Points[0].Factor * 10000),
'Model.Advanced.TFRTables[7].Points[1].Temperature': config.TFRTables[7].Points[1].Temperature,
'Model.Advanced.TFRTables[7].Points[1].Factor': Math.round(config.TFRTables[7].Points[1].Factor * 10000),
'Model.Advanced.TFRTables[7].Points[2].Temperature': config.TFRTables[7].Points[2].Temperature,
'Model.Advanced.TFRTables[7].Points[2].Factor': Math.round(config.TFRTables[7].Points[2].Factor * 10000),
'Model.Advanced.TFRTables[7].Points[3].Temperature': config.TFRTables[7].Points[3].Temperature,
'Model.Advanced.TFRTables[7].Points[3].Factor': Math.round(config.TFRTables[7].Points[3].Factor * 10000),
'Model.Advanced.TFRTables[7].Points[4].Temperature': config.TFRTables[7].Points[4].Temperature,
'Model.Advanced.TFRTables[7].Points[4].Factor': Math.round(config.TFRTables[7].Points[4].Factor * 10000),
'Model.Advanced.TFRTables[7].Points[5].Temperature': config.TFRTables[7].Points[5].Temperature,
'Model.Advanced.TFRTables[7].Points[5].Factor': Math.round(config.TFRTables[7].Points[5].Factor * 10000),
'Model.Advanced.TFRTables[7].Points[6].Temperature': config.TFRTables[7].Points[6].Temperature,
'Model.Advanced.TFRTables[7].Points[6].Factor': Math.round(config.TFRTables[7].Points[6].Factor * 10000),
'Model.Advanced.PowerCurves[0].Name': config.PowerCurves[0].Name,
'Model.Advanced.PowerCurves[0].Points[0].Time': Math.round(config.PowerCurves[0].Points[0].Time * 10),
'Model.Advanced.PowerCurves[0].Points[0].Percent': config.PowerCurves[0].Points[0].Percent,
'Model.Advanced.PowerCurves[0].Points[1].Time': Math.round(config.PowerCurves[0].Points[1].Time * 10),
'Model.Advanced.PowerCurves[0].Points[1].Percent': config.PowerCurves[0].Points[1].Percent,
'Model.Advanced.PowerCurves[0].Points[2].Time': Math.round(config.PowerCurves[0].Points[2].Time * 10),
'Model.Advanced.PowerCurves[0].Points[2].Percent': config.PowerCurves[0].Points[2].Percent,
'Model.Advanced.PowerCurves[0].Points[3].Time': Math.round(config.PowerCurves[0].Points[3].Time * 10),
'Model.Advanced.PowerCurves[0].Points[3].Percent': config.PowerCurves[0].Points[3].Percent,
'Model.Advanced.PowerCurves[0].Points[4].Time': Math.round(config.PowerCurves[0].Points[4].Time * 10),
'Model.Advanced.PowerCurves[0].Points[4].Percent': config.PowerCurves[0].Points[4].Percent,
'Model.Advanced.PowerCurves[0].Points[5].Time': Math.round(config.PowerCurves[0].Points[5].Time * 10),
'Model.Advanced.PowerCurves[0].Points[5].Percent': config.PowerCurves[0].Points[5].Percent,
'Model.Advanced.PowerCurves[0].Points[6].Time': Math.round(config.PowerCurves[0].Points[6].Time * 10),
'Model.Advanced.PowerCurves[0].Points[6].Percent': config.PowerCurves[0].Points[6].Percent,
'Model.Advanced.PowerCurves[0].Points[7].Time': Math.round(config.PowerCurves[0].Points[7].Time * 10),
'Model.Advanced.PowerCurves[0].Points[7].Percent': config.PowerCurves[0].Points[7].Percent,
'Model.Advanced.PowerCurves[0].Points[8].Time': Math.round(config.PowerCurves[0].Points[8].Time * 10),
'Model.Advanced.PowerCurves[0].Points[8].Percent': config.PowerCurves[0].Points[8].Percent,
'Model.Advanced.PowerCurves[0].Points[9].Time': Math.round(config.PowerCurves[0].Points[9].Time * 10),
'Model.Advanced.PowerCurves[0].Points[9].Percent': config.PowerCurves[0].Points[9].Percent,
'Model.Advanced.PowerCurves[0].Points[10].Time': Math.round(config.PowerCurves[0].Points[10].Time * 10),
'Model.Advanced.PowerCurves[0].Points[10].Percent': config.PowerCurves[0].Points[10].Percent,
'Model.Advanced.PowerCurves[0].Points[11].Time': Math.round(config.PowerCurves[0].Points[11].Time * 10),
'Model.Advanced.PowerCurves[0].Points[11].Percent': config.PowerCurves[0].Points[11].Percent,
'Model.Advanced.PowerCurves[1].Name': config.PowerCurves[1].Name,
'Model.Advanced.PowerCurves[1].Points[0].Time': Math.round(config.PowerCurves[1].Points[0].Time * 10),
'Model.Advanced.PowerCurves[1].Points[0].Percent': config.PowerCurves[1].Points[0].Percent,
'Model.Advanced.PowerCurves[1].Points[1].Time': Math.round(config.PowerCurves[1].Points[1].Time * 10),
'Model.Advanced.PowerCurves[1].Points[1].Percent': config.PowerCurves[1].Points[1].Percent,
'Model.Advanced.PowerCurves[1].Points[2].Time': Math.round(config.PowerCurves[1].Points[2].Time * 10),
'Model.Advanced.PowerCurves[1].Points[2].Percent': config.PowerCurves[1].Points[2].Percent,
'Model.Advanced.PowerCurves[1].Points[3].Time': Math.round(config.PowerCurves[1].Points[3].Time * 10),
'Model.Advanced.PowerCurves[1].Points[3].Percent': config.PowerCurves[1].Points[3].Percent,
'Model.Advanced.PowerCurves[1].Points[4].Time': Math.round(config.PowerCurves[1].Points[4].Time * 10),
'Model.Advanced.PowerCurves[1].Points[4].Percent': config.PowerCurves[1].Points[4].Percent,
'Model.Advanced.PowerCurves[1].Points[5].Time': Math.round(config.PowerCurves[1].Points[5].Time * 10),
'Model.Advanced.PowerCurves[1].Points[5].Percent': config.PowerCurves[1].Points[5].Percent,
'Model.Advanced.PowerCurves[1].Points[6].Time': Math.round(config.PowerCurves[1].Points[6].Time * 10),
'Model.Advanced.PowerCurves[1].Points[6].Percent': config.PowerCurves[1].Points[6].Percent,
'Model.Advanced.PowerCurves[1].Points[7].Time': Math.round(config.PowerCurves[1].Points[7].Time * 10),
'Model.Advanced.PowerCurves[1].Points[7].Percent': config.PowerCurves[1].Points[7].Percent,
'Model.Advanced.PowerCurves[1].Points[8].Time': Math.round(config.PowerCurves[1].Points[8].Time * 10),
'Model.Advanced.PowerCurves[1].Points[8].Percent': config.PowerCurves[1].Points[8].Percent,
'Model.Advanced.PowerCurves[1].Points[9].Time': Math.round(config.PowerCurves[1].Points[9].Time * 10),
'Model.Advanced.PowerCurves[1].Points[9].Percent': config.PowerCurves[1].Points[9].Percent,
'Model.Advanced.PowerCurves[1].Points[10].Time': Math.round(config.PowerCurves[1].Points[10].Time * 10),
'Model.Advanced.PowerCurves[1].Points[10].Percent': config.PowerCurves[1].Points[10].Percent,
'Model.Advanced.PowerCurves[1].Points[11].Time': Math.round(config.PowerCurves[1].Points[11].Time * 10),
'Model.Advanced.PowerCurves[1].Points[11].Percent': config.PowerCurves[1].Points[11].Percent,
'Model.Advanced.PowerCurves[2].Name': config.PowerCurves[2].Name,
'Model.Advanced.PowerCurves[2].Points[0].Time': Math.round(config.PowerCurves[2].Points[0].Time * 10),
'Model.Advanced.PowerCurves[2].Points[0].Percent': config.PowerCurves[2].Points[0].Percent,
'Model.Advanced.PowerCurves[2].Points[1].Time': Math.round(config.PowerCurves[2].Points[1].Time * 10),
'Model.Advanced.PowerCurves[2].Points[1].Percent': config.PowerCurves[2].Points[1].Percent,
'Model.Advanced.PowerCurves[2].Points[2].Time': Math.round(config.PowerCurves[2].Points[2].Time * 10),
'Model.Advanced.PowerCurves[2].Points[2].Percent': config.PowerCurves[2].Points[2].Percent,
'Model.Advanced.PowerCurves[2].Points[3].Time': Math.round(config.PowerCurves[2].Points[3].Time * 10),
'Model.Advanced.PowerCurves[2].Points[3].Percent': config.PowerCurves[2].Points[3].Percent,
'Model.Advanced.PowerCurves[2].Points[4].Time': Math.round(config.PowerCurves[2].Points[4].Time * 10),
'Model.Advanced.PowerCurves[2].Points[4].Percent': config.PowerCurves[2].Points[4].Percent,
'Model.Advanced.PowerCurves[2].Points[5].Time': Math.round(config.PowerCurves[2].Points[5].Time * 10),
'Model.Advanced.PowerCurves[2].Points[5].Percent': config.PowerCurves[2].Points[5].Percent,
'Model.Advanced.PowerCurves[2].Points[6].Time': Math.round(config.PowerCurves[2].Points[6].Time * 10),
'Model.Advanced.PowerCurves[2].Points[6].Percent': config.PowerCurves[2].Points[6].Percent,
'Model.Advanced.PowerCurves[2].Points[7].Time': Math.round(config.PowerCurves[2].Points[7].Time * 10),
'Model.Advanced.PowerCurves[2].Points[7].Percent': config.PowerCurves[2].Points[7].Percent,
'Model.Advanced.PowerCurves[2].Points[8].Time': Math.round(config.PowerCurves[2].Points[8].Time * 10),
'Model.Advanced.PowerCurves[2].Points[8].Percent': config.PowerCurves[2].Points[8].Percent,
'Model.Advanced.PowerCurves[2].Points[9].Time': Math.round(config.PowerCurves[2].Points[9].Time * 10),
'Model.Advanced.PowerCurves[2].Points[9].Percent': config.PowerCurves[2].Points[9].Percent,
'Model.Advanced.PowerCurves[2].Points[10].Time': Math.round(config.PowerCurves[2].Points[10].Time * 10),
'Model.Advanced.PowerCurves[2].Points[10].Percent': config.PowerCurves[2].Points[10].Percent,
'Model.Advanced.PowerCurves[2].Points[11].Time': Math.round(config.PowerCurves[2].Points[11].Time * 10),
'Model.Advanced.PowerCurves[2].Points[11].Percent': config.PowerCurves[2].Points[11].Percent,
'Model.Advanced.PowerCurves[3].Name': config.PowerCurves[3].Name,
'Model.Advanced.PowerCurves[3].Points[0].Time': Math.round(config.PowerCurves[3].Points[0].Time * 10),
'Model.Advanced.PowerCurves[3].Points[0].Percent': config.PowerCurves[3].Points[0].Percent,
'Model.Advanced.PowerCurves[3].Points[1].Time': Math.round(config.PowerCurves[3].Points[1].Time * 10),
'Model.Advanced.PowerCurves[3].Points[1].Percent': config.PowerCurves[3].Points[1].Percent,
'Model.Advanced.PowerCurves[3].Points[2].Time': Math.round(config.PowerCurves[3].Points[2].Time * 10),
'Model.Advanced.PowerCurves[3].Points[2].Percent': config.PowerCurves[3].Points[2].Percent,
'Model.Advanced.PowerCurves[3].Points[3].Time': Math.round(config.PowerCurves[3].Points[3].Time * 10),
'Model.Advanced.PowerCurves[3].Points[3].Percent': config.PowerCurves[3].Points[3].Percent,
'Model.Advanced.PowerCurves[3].Points[4].Time': Math.round(config.PowerCurves[3].Points[4].Time * 10),
'Model.Advanced.PowerCurves[3].Points[4].Percent': config.PowerCurves[3].Points[4].Percent,
'Model.Advanced.PowerCurves[3].Points[5].Time': Math.round(config.PowerCurves[3].Points[5].Time * 10),
'Model.Advanced.PowerCurves[3].Points[5].Percent': config.PowerCurves[3].Points[5].Percent,
'Model.Advanced.PowerCurves[3].Points[6].Time': Math.round(config.PowerCurves[3].Points[6].Time * 10),
'Model.Advanced.PowerCurves[3].Points[6].Percent': config.PowerCurves[3].Points[6].Percent,
'Model.Advanced.PowerCurves[3].Points[7].Time': Math.round(config.PowerCurves[3].Points[7].Time * 10),
'Model.Advanced.PowerCurves[3].Points[7].Percent': config.PowerCurves[3].Points[7].Percent,
'Model.Advanced.PowerCurves[3].Points[8].Time': Math.round(config.PowerCurves[3].Points[8].Time * 10),
'Model.Advanced.PowerCurves[3].Points[8].Percent': config.PowerCurves[3].Points[8].Percent,
'Model.Advanced.PowerCurves[3].Points[9].Time': Math.round(config.PowerCurves[3].Points[9].Time * 10),
'Model.Advanced.PowerCurves[3].Points[9].Percent': config.PowerCurves[3].Points[9].Percent,
'Model.Advanced.PowerCurves[3].Points[10].Time': Math.round(config.PowerCurves[3].Points[10].Time * 10),
'Model.Advanced.PowerCurves[3].Points[10].Percent': config.PowerCurves[3].Points[10].Percent,
'Model.Advanced.PowerCurves[3].Points[11].Time': Math.round(config.PowerCurves[3].Points[11].Time * 10),
'Model.Advanced.PowerCurves[3].Points[11].Percent': config.PowerCurves[3].Points[11].Percent,
'Model.Advanced.PowerCurves[4].Name': config.PowerCurves[4].Name,
'Model.Advanced.PowerCurves[4].Points[0].Time': Math.round(config.PowerCurves[4].Points[0].Time * 10),
'Model.Advanced.PowerCurves[4].Points[0].Percent': config.PowerCurves[4].Points[0].Percent,
'Model.Advanced.PowerCurves[4].Points[1].Time': Math.round(config.PowerCurves[4].Points[1].Time * 10),
'Model.Advanced.PowerCurves[4].Points[1].Percent': config.PowerCurves[4].Points[1].Percent,
'Model.Advanced.PowerCurves[4].Points[2].Time': Math.round(config.PowerCurves[4].Points[2].Time * 10),
'Model.Advanced.PowerCurves[4].Points[2].Percent': config.PowerCurves[4].Points[2].Percent,
'Model.Advanced.PowerCurves[4].Points[3].Time': Math.round(config.PowerCurves[4].Points[3].Time * 10),
'Model.Advanced.PowerCurves[4].Points[3].Percent': config.PowerCurves[4].Points[3].Percent,
'Model.Advanced.PowerCurves[4].Points[4].Time': Math.round(config.PowerCurves[4].Points[4].Time * 10),
'Model.Advanced.PowerCurves[4].Points[4].Percent': config.PowerCurves[4].Points[4].Percent,
'Model.Advanced.PowerCurves[4].Points[5].Time': Math.round(config.PowerCurves[4].Points[5].Time * 10),
'Model.Advanced.PowerCurves[4].Points[5].Percent': config.PowerCurves[4].Points[5].Percent,
'Model.Advanced.PowerCurves[4].Points[6].Time': Math.round(config.PowerCurves[4].Points[6].Time * 10),
'Model.Advanced.PowerCurves[4].Points[6].Percent': config.PowerCurves[4].Points[6].Percent,
'Model.Advanced.PowerCurves[4].Points[7].Time': Math.round(config.PowerCurves[4].Points[7].Time * 10),
'Model.Advanced.PowerCurves[4].Points[7].Percent': config.PowerCurves[4].Points[7].Percent,
'Model.Advanced.PowerCurves[4].Points[8].Time': Math.round(config.PowerCurves[4].Points[8].Time * 10),
'Model.Advanced.PowerCurves[4].Points[8].Percent': config.PowerCurves[4].Points[8].Percent,
'Model.Advanced.PowerCurves[4].Points[9].Time': Math.round(config.PowerCurves[4].Points[9].Time * 10),
'Model.Advanced.PowerCurves[4].Points[9].Percent': config.PowerCurves[4].Points[9].Percent,
'Model.Advanced.PowerCurves[4].Points[10].Time': Math.round(config.PowerCurves[4].Points[10].Time * 10),
'Model.Advanced.PowerCurves[4].Points[10].Percent': config.PowerCurves[4].Points[10].Percent,
'Model.Advanced.PowerCurves[4].Points[11].Time': Math.round(config.PowerCurves[4].Points[11].Time * 10),
'Model.Advanced.PowerCurves[4].Points[11].Percent': config.PowerCurves[4].Points[11].Percent,
'Model.Advanced.PowerCurves[5].Name': config.PowerCurves[5].Name,
'Model.Advanced.PowerCurves[5].Points[0].Time': Math.round(config.PowerCurves[5].Points[0].Time * 10),
'Model.Advanced.PowerCurves[5].Points[0].Percent': config.PowerCurves[5].Points[0].Percent,
'Model.Advanced.PowerCurves[5].Points[1].Time': Math.round(config.PowerCurves[5].Points[1].Time * 10),
'Model.Advanced.PowerCurves[5].Points[1].Percent': config.PowerCurves[5].Points[1].Percent,
'Model.Advanced.PowerCurves[5].Points[2].Time': Math.round(config.PowerCurves[5].Points[2].Time * 10),
'Model.Advanced.PowerCurves[5].Points[2].Percent': config.PowerCurves[5].Points[2].Percent,
'Model.Advanced.PowerCurves[5].Points[3].Time': Math.round(config.PowerCurves[5].Points[3].Time * 10),
'Model.Advanced.PowerCurves[5].Points[3].Percent': config.PowerCurves[5].Points[3].Percent,