bc-deeplib 2.2.0 → 2.4.0

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.
package/dist/deeplib.js CHANGED
@@ -231,7 +231,9 @@ var BaseModule = class {
231
231
  if (!modStorage.playerStorage) {
232
232
  Player[modName] = {};
233
233
  this.registerDefaultSettings();
234
- } else if (!modStorage.playerStorage[this.settingsStorage]) this.registerDefaultSettings();
234
+ } else if (!modStorage.playerStorage[this.settingsStorage]) {
235
+ this.registerDefaultSettings();
236
+ }
235
237
  return modStorage.playerStorage[this.settingsStorage];
236
238
  }
237
239
  /**
@@ -245,7 +247,9 @@ var BaseModule = class {
245
247
  if (!storage.playerStorage) {
246
248
  Player[modName] = {};
247
249
  this.registerDefaultSettings();
248
- } else if (!storage.playerStorage[this.settingsStorage]) this.registerDefaultSettings();
250
+ } else if (!storage.playerStorage[this.settingsStorage]) {
251
+ this.registerDefaultSettings();
252
+ }
249
253
  storage.playerStorage[this.settingsStorage] = value;
250
254
  }
251
255
  /**
@@ -254,7 +258,6 @@ var BaseModule = class {
254
258
  * Subclasses can override to perform additional setup.
255
259
  */
256
260
  init() {
257
- this.registerDefaultSettings();
258
261
  }
259
262
  /**
260
263
  * Registers default settings for this module in persistent storage.
@@ -264,10 +267,11 @@ var BaseModule = class {
264
267
  * Existing values will NOT be overwritten.
265
268
  */
266
269
  registerDefaultSettings() {
267
- const storage = this.settingsStorage;
268
- const defaults = this.defaultSettings;
269
- if (!storage || !defaults) return;
270
- Player[ModSdkManager.ModInfo.name][storage] = Object.assign(defaults, Player[ModSdkManager.ModInfo.name][storage] ?? {});
270
+ if (this.defaultSettings && hasGetter(this, "defaultSettings") && this.settings && hasSetter(this, "settings")) {
271
+ if (!this.defaultSettings || !this.settings) return;
272
+ if (Object.entries(this.defaultSettings).length === 0) return;
273
+ this.settings = deepMerge(this.defaultSettings, this.settings, { concatArrays: false });
274
+ }
271
275
  }
272
276
  /**
273
277
  * Provides default settings for this module.
@@ -331,6 +335,8 @@ var BaseSubscreen = class _BaseSubscreen {
331
335
  settingsWidth: 1e3,
332
336
  forceUpCharacter: false
333
337
  };
338
+ /** The menu at the top of the subscreen */
339
+ static menu = null;
334
340
  constructor(module) {
335
341
  if (module) this.module = module;
336
342
  const ctor = this.constructor;
@@ -422,14 +428,14 @@ var BaseSubscreen = class _BaseSubscreen {
422
428
  load() {
423
429
  for (const module of modules()) {
424
430
  if (!module.settingsScreen) continue;
425
- if (!module.settings || !Object.keys(module.settings).length) module.registerDefaultSettings();
431
+ if (!module.settings || !Object.keys(module.settings).length) module.registerDefaultSettings(modStorage.playerStorage);
426
432
  }
427
433
  _BaseSubscreen.currentPage = 1;
428
434
  layout.getSubscreen();
429
435
  const settingsElement = layout.getSettingsDiv();
430
436
  layout.appendToSubscreen(settingsElement);
431
- const menu = ElementMenu.Create("deeplib-nav-menu", []);
432
- layout.appendToSubscreen(menu);
437
+ _BaseSubscreen.menu = ElementMenu.Create("deeplib-nav-menu", []);
438
+ layout.appendToSubscreen(_BaseSubscreen.menu);
433
439
  if (this.pageStructure.length > 1) {
434
440
  const backNext = advElement.createBackNext({
435
441
  id: "deeplib-page-back-next",
@@ -439,7 +445,7 @@ var BaseSubscreen = class _BaseSubscreen {
439
445
  initialPrevTooltip: getText("settings.button.prev_button_hint"),
440
446
  initialLabel: this.getPageLabel()
441
447
  });
442
- ElementMenu.PrependItem(menu, backNext);
448
+ _BaseSubscreen.menu.prepend(backNext);
443
449
  }
444
450
  if (this.options.help) {
445
451
  const onClick = this.options.help.onClick;
@@ -463,7 +469,7 @@ var BaseSubscreen = class _BaseSubscreen {
463
469
  tooltip: this.options.help.tooltip
464
470
  }
465
471
  });
466
- ElementMenu.AppendButton(menu, helpButton);
472
+ _BaseSubscreen.menu.append(helpButton);
467
473
  }
468
474
  if (this.options.doShowTitle) {
469
475
  const subscreenTitle = advElement.createLabel({
@@ -484,7 +490,7 @@ var BaseSubscreen = class _BaseSubscreen {
484
490
  tooltip: getText("settings.button.back_button_hint")
485
491
  }
486
492
  });
487
- ElementMenu.AppendButton(menu, exitButton);
493
+ _BaseSubscreen.menu.append(exitButton);
488
494
  }
489
495
  const tooltip = advElement.createTooltip();
490
496
  layout.appendToSubscreen(tooltip);
@@ -568,8 +574,10 @@ var BaseSubscreen = class _BaseSubscreen {
568
574
  ElementSetFontSize(subscreen, "auto");
569
575
  ElementSetPosition(settingsDiv, 530 - offset, 170);
570
576
  ElementSetSize(settingsDiv, this.options.settingsWidth ?? 1e3 + offset, 660);
571
- ElementSetPosition("deeplib-subscreen-title", 530 - offset, 75);
572
- ElementSetSize("deeplib-subscreen-title", 800, 60);
577
+ if (this.options.doShowTitle) {
578
+ ElementSetPosition("deeplib-subscreen-title", 530 - offset, 75);
579
+ ElementSetSize("deeplib-subscreen-title", 800, 60);
580
+ }
573
581
  ElementSetPosition("deeplib-nav-menu", 1905, 75, "top-right");
574
582
  ElementSetSize("deeplib-nav-menu", null, 90);
575
583
  ElementSetPosition(advElement.getTooltip() || "", 250, 850);
@@ -622,12 +630,9 @@ var styles_default = `.deeplib-subscreen,
622
630
  width: 100%;
623
631
  height: 100%;
624
632
  }
625
-
626
- .deeplib-button.button-styling,
627
- .deeplib-button.button-styling::before {
633
+ .deeplib-button.button-styling, .deeplib-button.button-styling::before {
628
634
  border-radius: min(1dvh, 0.5dvw);
629
635
  }
630
-
631
636
  .deeplib-button img {
632
637
  position: absolute;
633
638
  top: 0%;
@@ -647,17 +652,15 @@ var styles_default = `.deeplib-subscreen,
647
652
  mask-image: var(--image);
648
653
  pointer-events: none;
649
654
  }
650
-
651
655
  .deeplib-button:hover img {
652
656
  background-color: var(--deeplib-icon-hover-color);
653
657
  }
654
-
655
658
  .deeplib-button .button-label {
656
659
  background-color: transparent !important;
657
660
  color: var(--deeplib-text-color);
658
661
  font-size: min(3.6dvh, 1.8dvw);
662
+ display: contents;
659
663
  }
660
-
661
664
  .deeplib-button .button-tooltip {
662
665
  border-radius: min(1dvh, 0.5dvw);
663
666
  }
@@ -666,11 +669,14 @@ var styles_default = `.deeplib-subscreen,
666
669
  display: flex;
667
670
  align-items: center;
668
671
  justify-content: center;
672
+ pointer-events: none;
669
673
  }
670
674
 
671
675
  #deeplib-subscreen-title {
672
676
  text-align: left;
673
677
  color: var(--deeplib-text-color);
678
+ user-select: none;
679
+ pointer-events: none;
674
680
  }
675
681
 
676
682
  .deeplib-text {
@@ -740,12 +746,17 @@ var styles_default = `.deeplib-subscreen,
740
746
  }
741
747
  .deeplib-prev-next .deeplib-prev-next-label {
742
748
  white-space: nowrap;
749
+ user-select: none;
743
750
  }
744
751
 
745
752
  #deeplib-nav-menu {
746
753
  display: flex;
747
754
  flex-direction: row;
748
755
  gap: min(2dvh, 1dvw);
756
+ z-index: 1;
757
+ }
758
+ #deeplib-nav-menu > .deeplib-button {
759
+ flex: 1 0 auto;
749
760
  }
750
761
 
751
762
  #deeplib-storage-meter {
@@ -760,8 +771,7 @@ var styles_default = `.deeplib-subscreen,
760
771
  border-radius: var(--deeplib-border-radius);
761
772
  z-index: -1;
762
773
  }
763
-
764
- #deeplib-storage-bar {
774
+ #deeplib-storage-meter #deeplib-storage-bar {
765
775
  height: 100%;
766
776
  width: 0%;
767
777
  background: var(--deeplib-accent-color);
@@ -772,9 +782,12 @@ var styles_default = `.deeplib-subscreen,
772
782
  flex-direction: row;
773
783
  align-items: center;
774
784
  gap: 0.3em;
785
+ width: fit-content;
775
786
  }
776
-
777
- .deeplib-checkbox-container input.deeplib-input {
787
+ .deeplib-checkbox-container span {
788
+ user-select: none;
789
+ }
790
+ .deeplib-checkbox-container .deeplib-input {
778
791
  width: min(5vh, 2.5vw);
779
792
  height: min(5vh, 2.5vw);
780
793
  width: min(5dvh, 2.5dvw);
@@ -782,8 +795,7 @@ var styles_default = `.deeplib-subscreen,
782
795
  border-radius: min(1vh, 0.5vw);
783
796
  border-radius: min(1dvh, 0.5dvw);
784
797
  }
785
-
786
- .deeplib-checkbox-container input.deeplib-input[type=checkbox]:checked::before {
798
+ .deeplib-checkbox-container .deeplib-input[type=checkbox]:checked::before {
787
799
  width: 80%;
788
800
  height: 80%;
789
801
  }
@@ -793,14 +805,16 @@ var styles_default = `.deeplib-subscreen,
793
805
  flex-direction: row;
794
806
  align-items: center;
795
807
  gap: 0.3em;
808
+ width: fit-content;
796
809
  }
797
-
798
- .deeplib-input-container:has(label.deeplib-text) {
810
+ .deeplib-input-container span {
811
+ user-select: none;
812
+ }
813
+ .deeplib-input-container:has(.deeplib-text) {
799
814
  margin-top: min(1vh, 0.5vw);
800
815
  margin-top: min(1dvh, 0.5dvw);
801
816
  }
802
-
803
- .deeplib-input-container input.deeplib-input {
817
+ .deeplib-input-container .deeplib-input {
804
818
  font-size: 0.6em;
805
819
  padding: min(1vh, 0.5vw);
806
820
  padding: min(1dvh, 0.5dvw);
@@ -811,8 +825,7 @@ var styles_default = `.deeplib-subscreen,
811
825
  border-radius: min(1vh, 0.5vw);
812
826
  border-radius: min(1dvh, 0.5dvw);
813
827
  }
814
-
815
- .deeplib-input-container input.deeplib-input[type=color] {
828
+ .deeplib-input-container .deeplib-input[type=color] {
816
829
  padding: 0px;
817
830
  width: min(5vh, 2.5vw);
818
831
  height: min(5vh, 2.5vw);
@@ -820,8 +833,7 @@ var styles_default = `.deeplib-subscreen,
820
833
  height: min(5dvh, 2.5dvw);
821
834
  border-radius: 0px;
822
835
  }
823
-
824
- .deeplib-input-container input.deeplib-input[type=color]:disabled {
836
+ .deeplib-input-container .deeplib-input[type=color]:disabled {
825
837
  border: var(--deeplib-blocked-color) solid var(--deeplib-border-width);
826
838
  cursor: not-allowed;
827
839
  }
@@ -833,6 +845,7 @@ var styles_default = `.deeplib-subscreen,
833
845
  gap: min(2vh, 1vw);
834
846
  gap: min(2dvh, 1dvw);
835
847
  color: var(--deeplib-text-color);
848
+ width: fit-content;
836
849
  }
837
850
  .deeplib-dropdown-container select {
838
851
  padding: 0 min(1vh, 0.5vw);
@@ -840,6 +853,9 @@ var styles_default = `.deeplib-subscreen,
840
853
  border-radius: min(1vh, 0.5vw);
841
854
  border-radius: min(1dvh, 0.5dvw);
842
855
  }
856
+ .deeplib-dropdown-container span {
857
+ user-select: none;
858
+ }
843
859
 
844
860
  .deeplib-highlight-text {
845
861
  font-weight: bold;
@@ -933,21 +949,23 @@ var styles_default = `.deeplib-subscreen,
933
949
  height: 100dvh;
934
950
  background-color: rgba(0, 0, 0, 0.5);
935
951
  }
936
- /*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiL21udC9zaGluZG93cy9TdHVmZi9Db2RlL2JjL0JDLURlZXBMaWIvc3JjL3N0eWxlcyIsInNvdXJjZXMiOlsidmFycy5zY3NzIiwiYnV0dG9ucy5zY3NzIiwiZWxlbWVudHMuc2NzcyIsImlucHV0cy5zY3NzIiwibWVzc2FnZXMuc2NzcyIsIm1vZGFsLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtFQUVFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7QUNkRjtFQUNFO0VBQ0E7RUFDQTs7O0FBR0Y7QUFBQTtFQUVFOzs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFFQTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7OztBQUdGO0VBQ0U7RUFDQTtFQUNBOzs7QUFHRjtFQUNFOzs7QUMzQ0Y7RUFDRTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTs7O0FBR0Y7RUFDRTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBR0U7RUFDRTtFQUNBOztBQUhKO0VBTUU7RUFDQTs7QUFHRjtFQUNFOzs7QUFJSjtFQUNFO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7OztBQ3pHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNFO0VBQ0E7RUFDQTtFQUNBOzs7QUN2RUo7RUFDRTtFQUNBOzs7QUFHRjtBQUFBO0VBRUU7RUFDQTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0Y7QUFBQTtFQUVFOzs7QUFHRjtFQUNFO0VBQ0E7RUFDQTs7O0FDN0JGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNFO0VBQ0E7RUFDQTtFQUNBOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUVBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDRTs7QUFLTjtFQUNFO0VBQ0E7RUFDQTtFQUNBOzs7QUFJSjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBIiwic291cmNlc0NvbnRlbnQiOlsiLmRlZXBsaWItc3Vic2NyZWVuLFxuLmRlZXBsaWItbW9kYWwge1xuICAtLWRlZXBsaWItYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdG1kLW1haW4sIHdoaXRlKTtcbiAgLS1kZWVwbGliLWVsZW1lbnQtY29sb3I6IHZhcigtLXRtZC1lbGVtZW50LCB3aGl0ZSk7XG4gIC0tZGVlcGxpYi1lbGVtZW50LWhvdmVyLWNvbG9yOiB2YXIoLS10bWQtZWxlbWVudC1ob3ZlciwgY3lhbik7XG4gIC0tZGVlcGxpYi1hY2NlbnQtY29sb3I6IHZhcigtLXRtZC1hY2NlbnQsICNGRkZGODgpO1xuICAtLWRlZXBsaWItYmxvY2tlZC1jb2xvcjogdmFyKC0tdG1kLWJsb2NrZWQsIHJlZCk7XG4gIC0tZGVlcGxpYi10ZXh0LWNvbG9yOiB2YXIoLS10bWQtdGV4dCwgYmxhY2spO1xuICAtLWRlZXBsaWItaWNvbi1jb2xvcjogdmFyKC0tdG1kLWFjY2VudCwgYmxhY2spO1xuICAtLWRlZXBsaWItaWNvbi1ob3Zlci1jb2xvcjogdmFyKC0tdG1kLWFjY2VudC1ob3ZlciwgYmxhY2spO1xuICAtLWRlZXBsaWItYm9yZGVyLWNvbG9yOiB2YXIoLS10bWQtYWNjZW50LCBibGFjayk7XG4gIC0tZGVlcGxpYi1ib3JkZXItd2lkdGg6IG1pbigwLjJ2aCwgMC4xdncpO1xuICAtLWRlZXBsaWItYm9yZGVyLXdpZHRoOiBtaW4oMC4yZHZoLCAwLjFkdncpO1xuICAtLWRlZXBsaWItYm9yZGVyLXJhZGl1czogbWluKDF2aCwgMC41dncpO1xuICAtLWRlZXBsaWItYm9yZGVyLXJhZGl1czogbWluKDFkdmgsIDAuNWR2dyk7XG59XG4iLCIuZGVlcGxpYi1idXR0b24ge1xuICBjb2xvcjogdmFyKC0tZGVlcGxpYi10ZXh0LWNvbG9yKTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbn1cblxuLmRlZXBsaWItYnV0dG9uLmJ1dHRvbi1zdHlsaW5nLFxuLmRlZXBsaWItYnV0dG9uLmJ1dHRvbi1zdHlsaW5nOjpiZWZvcmUge1xuICBib3JkZXItcmFkaXVzOiBtaW4oMS4wZHZoLCAwLjVkdncpO1xufVxuXG4uZGVlcGxpYi1idXR0b24gaW1nIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDAlO1xuICBsZWZ0OiAwJTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdDtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZGVlcGxpYi1pY29uLWNvbG9yKTtcbiAgYmFja2dyb3VuZC1ibGVuZC1tb2RlOiBtdWx0aXBseTtcbiAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xuICBtYXNrLXBvc2l0aW9uOiBsZWZ0O1xuICBtYXNrLXNpemU6IGNvbnRhaW47XG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gIG1hc2stcmVwZWF0OiBuby1yZXBlYXQ7XG4gIGNvbG9yOiB0cmFuc3BhcmVudDtcblxuICBiYWNrZ3JvdW5kLWltYWdlOiB2YXIoLS1pbWFnZSk7XG4gIG1hc2staW1hZ2U6IHZhcigtLWltYWdlKTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi5kZWVwbGliLWJ1dHRvbjpob3ZlciBpbWcge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1kZWVwbGliLWljb24taG92ZXItY29sb3IpO1xufVxuXG4uZGVlcGxpYi1idXR0b24gLmJ1dHRvbi1sYWJlbCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gIGNvbG9yOiB2YXIoLS1kZWVwbGliLXRleHQtY29sb3IpO1xuICBmb250LXNpemU6IG1pbigzLjZkdmgsIDEuOGR2dyk7XG59XG5cbi5kZWVwbGliLWJ1dHRvbiAuYnV0dG9uLXRvb2x0aXAge1xuICBib3JkZXItcmFkaXVzOiBtaW4oMS4wZHZoLCAwLjVkdncpO1xufVxuIiwiI2RlZXBsaWItcGFnZS1sYWJlbCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuXG4jZGVlcGxpYi1zdWJzY3JlZW4tdGl0bGUge1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBjb2xvcjogdmFyKC0tZGVlcGxpYi10ZXh0LWNvbG9yKTtcbn1cblxuLmRlZXBsaWItdGV4dCB7XG4gIGNvbG9yOiB2YXIoLS1kZWVwbGliLXRleHQtY29sb3IpO1xufVxuXG4uZGVlcGxpYi1zdWJzY3JlZW4ge1xuICBwYWRkaW5nOiAwO1xuICBtYXJnaW46IDA7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG4uZGVlcGxpYi1zdWJzY3JlZW4gKiB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHBvaW50ZXItZXZlbnRzOiBhbGw7XG59XG5cbi5kZWVwbGliLXNldHRpbmdzIHtcbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC1hdXRvLXJvd3M6IG1pbi1jb250ZW50O1xuICBwYWRkaW5nOiBtaW4oMS4wZHZoLCAwLjVkdncpO1xuICBnYXA6IDAuM2VtO1xufVxuXG4uZGVlcGxpYi1taXNjIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xuICBnYXA6IG1pbigxdmgsIDAuNXZ3KTtcbn1cblxuLmRlZXBsaWItdG9vbHRpcCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWRlZXBsaWItZWxlbWVudC1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1kZWVwbGliLXRleHQtY29sb3IpO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYm9yZGVyLXJhZGl1czogbWluKDEuMGR2aCwgMC41ZHZ3KTtcbiAgcGFkZGluZzogbWluKDF2aCwgMC41dncpO1xuICBmb250LXNpemU6IDAuOGVtO1xuICBib3JkZXI6IG1pbigwLjJ2aCwgMC4xdncpIHNvbGlkIHZhcigtLWRlZXBsaWItYm9yZGVyLWNvbG9yKTtcbiAgei1pbmRleDogMTtcbn1cblxuLmRlZXBsaWItb3ZlcmZsb3ctYm94IHtcbiAgYm9yZGVyOiB2YXIoLS1kZWVwbGliLWJvcmRlci1jb2xvcikgc29saWQgdmFyKC0tZGVlcGxpYi1ib3JkZXItd2lkdGgpO1xufVxuXG4uZGVlcGxpYi1wcmV2LW5leHQge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGdhcDogbWluKDJkdmgsIDFkdncpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1kZWVwbGliLWVsZW1lbnQtY29sb3IpO1xuICBjb2xvcjogdmFyKC0tZGVlcGxpYi10ZXh0LWNvbG9yKTtcbiAgYm9yZGVyLXJhZGl1czogbWluKDEuMGR2aCwgMC41ZHZ3KTtcbiAgYm9yZGVyOiBtaW4oMC4ydmgsIDAuMXZ3KSBzb2xpZCB2YXIoLS1kZWVwbGliLWJvcmRlci1jb2xvcik7XG5cbiAgLmRlZXBsaWItcHJldi1uZXh0LWJ1dHRvbiB7XG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1kZWVwbGliLWVsZW1lbnQtaG92ZXItY29sb3IpO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tZGVlcGxpYi1ib3JkZXItcmFkaXVzKTtcbiAgICB9XG4gICAgXG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGFzcGVjdC1yYXRpbzogMTtcbiAgfVxuXG4gIC5kZWVwbGliLXByZXYtbmV4dC1sYWJlbCB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgfVxufVxuXG4jZGVlcGxpYi1uYXYtbWVudSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGdhcDogbWluKDJkdmgsIDFkdncpO1xufVxuXG4jZGVlcGxpYi1zdG9yYWdlLW1ldGVyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDBweDtcbiAgbGVmdDogMHB4O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1kZWVwbGliLWVsZW1lbnQtY29sb3IpO1xuICBib3JkZXI6IHZhcigtLWRlZXBsaWItYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1kZWVwbGliLWJvcmRlci1jb2xvcik7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWRlZXBsaWItYm9yZGVyLXJhZGl1cyk7XG4gIHotaW5kZXg6IC0xO1xufVxuXG4jZGVlcGxpYi1zdG9yYWdlLWJhciB7XG4gIGhlaWdodDogMTAwJTtcbiAgd2lkdGg6IDAlO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1kZWVwbGliLWFjY2VudC1jb2xvcik7XG59XG4iLCIuZGVlcGxpYi1jaGVja2JveC1jb250YWluZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDAuM2VtO1xufVxuXG4uZGVlcGxpYi1jaGVja2JveC1jb250YWluZXIgaW5wdXQuZGVlcGxpYi1pbnB1dCB7XG4gIHdpZHRoOiBtaW4oNXZoLCAyLjV2dyk7XG4gIGhlaWdodDogbWluKDV2aCwgMi41dncpO1xuICB3aWR0aDogbWluKDVkdmgsIDIuNWR2dyk7XG4gIGhlaWdodDogbWluKDVkdmgsIDIuNWR2dyk7XG4gIGJvcmRlci1yYWRpdXM6IG1pbigxLjB2aCwgMC41dncpO1xuICBib3JkZXItcmFkaXVzOiBtaW4oMS4wZHZoLCAwLjVkdncpO1xufVxuXG4uZGVlcGxpYi1jaGVja2JveC1jb250YWluZXIgaW5wdXQuZGVlcGxpYi1pbnB1dFt0eXBlPVwiY2hlY2tib3hcIl06Y2hlY2tlZDo6YmVmb3JlIHtcbiAgd2lkdGg6IDgwJTtcbiAgaGVpZ2h0OiA4MCU7XG59XG5cbi5kZWVwbGliLWlucHV0LWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogMC4zZW07XG59XG5cbi5kZWVwbGliLWlucHV0LWNvbnRhaW5lcjpoYXMobGFiZWwuZGVlcGxpYi10ZXh0KSB7XG4gIG1hcmdpbi10b3A6IG1pbigxdmgsIDAuNXZ3KTtcbiAgbWFyZ2luLXRvcDogbWluKDFkdmgsIDAuNWR2dyk7XG59XG5cbi5kZWVwbGliLWlucHV0LWNvbnRhaW5lciBpbnB1dC5kZWVwbGliLWlucHV0IHtcbiAgZm9udC1zaXplOiAwLjZlbTtcbiAgcGFkZGluZzogbWluKDF2aCwgMC41dncpO1xuICBwYWRkaW5nOiBtaW4oMWR2aCwgMC41ZHZ3KTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIG91dGxpbmU6IG5vbmU7XG4gIG1pbi1oZWlnaHQ6IG1pbig1dmgsIDIuNXZ3KTtcbiAgbWluLWhlaWdodDogbWluKDVkdmgsIDIuNWR2dyk7XG4gIGJvcmRlci1yYWRpdXM6IG1pbigxLjB2aCwgMC41dncpO1xuICBib3JkZXItcmFkaXVzOiBtaW4oMS4wZHZoLCAwLjVkdncpO1xufVxuXG4uZGVlcGxpYi1pbnB1dC1jb250YWluZXIgaW5wdXQuZGVlcGxpYi1pbnB1dFt0eXBlPVwiY29sb3JcIl0ge1xuICBwYWRkaW5nOiAwcHg7XG4gIHdpZHRoOiBtaW4oNXZoLCAyLjV2dyk7XG4gIGhlaWdodDogbWluKDV2aCwgMi41dncpO1xuICB3aWR0aDogbWluKDVkdmgsIDIuNWR2dyk7XG4gIGhlaWdodDogbWluKDVkdmgsIDIuNWR2dyk7XG4gIGJvcmRlci1yYWRpdXM6IDBweDtcbn1cblxuLmRlZXBsaWItaW5wdXQtY29udGFpbmVyIGlucHV0LmRlZXBsaWItaW5wdXRbdHlwZT1cImNvbG9yXCJdOmRpc2FibGVkIHtcbiAgYm9yZGVyOiB2YXIoLS1kZWVwbGliLWJsb2NrZWQtY29sb3IpIHNvbGlkIHZhcigtLWRlZXBsaWItYm9yZGVyLXdpZHRoKTtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cblxuLmRlZXBsaWItZHJvcGRvd24tY29udGFpbmVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiBtaW4oMnZoLCAxdncpO1xuICBnYXA6IG1pbigyZHZoLCAxZHZ3KTtcbiAgY29sb3I6IHZhcigtLWRlZXBsaWItdGV4dC1jb2xvcik7XG5cbiAgc2VsZWN0IHtcbiAgICBwYWRkaW5nOiAwIG1pbigxdmgsIDAuNXZ3KTtcbiAgICBwYWRkaW5nOiAwIG1pbigxZHZoLCAwLjVkdncpO1xuICAgIGJvcmRlci1yYWRpdXM6IG1pbigxdmgsIDAuNXZ3KTtcbiAgICBib3JkZXItcmFkaXVzOiBtaW4oMWR2aCwgMC41ZHZ3KTtcbiAgfVxufSIsIi5kZWVwbGliLWhpZ2hsaWdodC10ZXh0IHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGNvbG9yOiByZ2IoMjAzLCAxODUsIDIzKTtcbn1cblxuI1RleHRBcmVhQ2hhdExvZ1tkYXRhLWNvbG9ydGhlbWU9J2RhcmsnXSBkaXYuQ2hhdE1lc3NhZ2UuZGVlcGxpYi1tZXNzYWdlLFxuI1RleHRBcmVhQ2hhdExvZ1tkYXRhLWNvbG9ydGhlbWU9J2RhcmsyJ10gZGl2LkNoYXRNZXNzYWdlLmRlZXBsaWItbWVzc2FnZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWRlZXBsaWItZWxlbWVudC1jb2xvcik7XG4gIGJvcmRlcjogbWluKDAuMmR2aCwgMC4xZHZ3KSBzb2xpZCB2YXIoLS1kZWVwbGliLWJvcmRlci1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1kZWVwbGliLXRleHQtY29sb3IpO1xufVxuXG4jVGV4dEFyZWFDaGF0TG9nIGRpdi5DaGF0TWVzc2FnZS5kZWVwbGliLW1lc3NhZ2Uge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlO1xuICBib3JkZXI6IG1pbigwLjJkdmgsIDAuMWR2dykgc29saWQgIzQ0MDE3MTtcbiAgY29sb3I6ICMxMTE7XG4gIHBhZGRpbmctbGVmdDogbWluKDAuNmR2aCwgMC4zZHZ3KTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XG59XG5cbiNUZXh0QXJlYUNoYXRMb2dbZGF0YS1jb2xvcnRoZW1lPSdkYXJrJ10gZGl2LkNoYXRNZXNzYWdlLmRlZXBsaWItbWVzc2FnZSBhLFxuI1RleHRBcmVhQ2hhdExvZ1tkYXRhLWNvbG9ydGhlbWU9J2RhcmsyJ10gZGl2LkNoYXRNZXNzYWdlLmRlZXBsaWItbWVzc2FnZSBhIHtcbiAgY29sb3I6IHZhcigtLWRlZXBsaWItdGV4dC1jb2xvcik7XG59XG5cbiNUZXh0QXJlYUNoYXRMb2cgZGl2LkNoYXRNZXNzYWdlLmRlZXBsaWItbWVzc2FnZSBhIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgY29sb3I6ICMxMTE7XG59XG4iLCIuZGVlcGxpYi1tb2RhbCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAxMCU7XG4gIGxlZnQ6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICB6LWluZGV4OiAxMDAxO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiAwLjVlbTtcbiAgd2lkdGg6IG1heCg1MGR2dywgMjVkdmgpO1xuICBmb250LXNpemU6IG1pbig0ZHZoLCAyZHZ3KTtcbiAgcGFkZGluZzogbWluKDJkdmgsIDFkdncpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1kZWVwbGliLWVsZW1lbnQtY29sb3IpO1xuICBib3JkZXItcmFkaXVzOiBtaW4oMS4yZHZoLCAwLjZkdncpO1xuICBib3JkZXI6IG1pbigwLjJkdmgsIDAuMWR2dykgc29saWQgdmFyKC0tZGVlcGxpYi1ib3JkZXItY29sb3IpO1xuICBjb2xvcjogdmFyKC0tZGVlcGxpYi10ZXh0LWNvbG9yKTtcblxuICAuZGVlcGxpYi1tb2RhbC1pbnB1dCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgZm9udC1zaXplOiBtaW4oMi42ZHZoLCAxLjhkdncpO1xuICAgIGJvcmRlci1yYWRpdXM6IG1pbigxLjBkdmgsIDAuNWR2dyk7XG4gICAgcGFkZGluZzogbWluKDFkdmgsIDAuNWR2dyk7XG4gIH1cblxuICBpbnB1dC5kZWVwbGliLW1vZGFsLWlucHV0IHtcbiAgICBtYXgtd2lkdGg6IG1heCg1MGR2aCwgMjVkdncpO1xuICB9XG5cbiAgLmRlZXBsaWItbW9kYWwtYnV0dG9uLWNvbnRhaW5lciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgZ2FwOiAwLjVlbTtcbiAgICB3aWR0aDogMTAwJTtcblxuICAgIC5kZWVwbGliLWJ1dHRvbiB7XG4gICAgICBmb250LXNpemU6IDAuOGVtO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIHdpZHRoOiBhdXRvO1xuICAgICAgcGFkZGluZzogbWluKDAuNHZoLCAwLjJ2dykgbWluKDJ2aCwgMXZ3KTtcblxuICAgICAgLmJ1dHRvbi1sYWJlbCB7XG4gICAgICAgIGRpc3BsYXk6IGNvbnRlbnRzO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5kZWVwbGliLW1vZGFsLXByb21wdC1jb250YWluZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICB9XG59XG5cbi5kZWVwbGliLW1vZGFsLWJsb2NrZXIge1xuICB6LWluZGV4OiAxMDAwO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMGR2dztcbiAgaGVpZ2h0OiAxMDBkdmg7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTtcbn1cbiJdfQ== */`;
952
+ /*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiL21udC9zaGluZG93cy9TdHVmZi9Db2RlL2JjL0JDLURlZXBMaWIvc3JjL3N0eWxlcyIsInNvdXJjZXMiOlsidmFycy5zY3NzIiwiYnV0dG9ucy5zY3NzIiwiZWxlbWVudHMuc2NzcyIsImlucHV0cy5zY3NzIiwibWVzc2FnZXMuc2NzcyIsIm1vZGFsLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtFQUVFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7QUNkRjtFQUNFO0VBQ0E7RUFDQTs7QUFFQTtFQUVFOztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUVBO0VBQ0E7RUFDQTs7QUFHRjtFQUNFOztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7O0FBR0Y7RUFDRTs7O0FDM0NKO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7OztBQUdGO0VBQ0U7RUFDQTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7OztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUdFO0VBQ0U7RUFDQTs7QUFISjtFQU1FO0VBQ0E7O0FBR0Y7RUFDRTtFQUNBOzs7QUFJSjtFQUNFO0VBQ0E7RUFDQTtFQUNBOztBQUVBO0VBQ0U7OztBQUlKO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDRTtFQUNBO0VBQ0E7OztBQ2pISjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDRTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNFO0VBQ0E7OztBQUtOO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNFOztBQUdGO0VBQ0U7RUFDQTs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNFO0VBQ0E7OztBQU9SO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7QUFHRjtFQUNFOzs7QUN2Rko7RUFDRTtFQUNBOzs7QUFHRjtBQUFBO0VBRUU7RUFDQTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0Y7QUFBQTtFQUVFOzs7QUFHRjtFQUNFO0VBQ0E7RUFDQTs7O0FDN0JGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNFO0VBQ0E7RUFDQTtFQUNBOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUVBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDRTs7QUFLTjtFQUNFO0VBQ0E7RUFDQTtFQUNBOzs7QUFJSjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBIiwic291cmNlc0NvbnRlbnQiOlsiLmRlZXBsaWItc3Vic2NyZWVuLFxuLmRlZXBsaWItbW9kYWwge1xuICAtLWRlZXBsaWItYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdG1kLW1haW4sIHdoaXRlKTtcbiAgLS1kZWVwbGliLWVsZW1lbnQtY29sb3I6IHZhcigtLXRtZC1lbGVtZW50LCB3aGl0ZSk7XG4gIC0tZGVlcGxpYi1lbGVtZW50LWhvdmVyLWNvbG9yOiB2YXIoLS10bWQtZWxlbWVudC1ob3ZlciwgY3lhbik7XG4gIC0tZGVlcGxpYi1hY2NlbnQtY29sb3I6IHZhcigtLXRtZC1hY2NlbnQsICNGRkZGODgpO1xuICAtLWRlZXBsaWItYmxvY2tlZC1jb2xvcjogdmFyKC0tdG1kLWJsb2NrZWQsIHJlZCk7XG4gIC0tZGVlcGxpYi10ZXh0LWNvbG9yOiB2YXIoLS10bWQtdGV4dCwgYmxhY2spO1xuICAtLWRlZXBsaWItaWNvbi1jb2xvcjogdmFyKC0tdG1kLWFjY2VudCwgYmxhY2spO1xuICAtLWRlZXBsaWItaWNvbi1ob3Zlci1jb2xvcjogdmFyKC0tdG1kLWFjY2VudC1ob3ZlciwgYmxhY2spO1xuICAtLWRlZXBsaWItYm9yZGVyLWNvbG9yOiB2YXIoLS10bWQtYWNjZW50LCBibGFjayk7XG4gIC0tZGVlcGxpYi1ib3JkZXItd2lkdGg6IG1pbigwLjJ2aCwgMC4xdncpO1xuICAtLWRlZXBsaWItYm9yZGVyLXdpZHRoOiBtaW4oMC4yZHZoLCAwLjFkdncpO1xuICAtLWRlZXBsaWItYm9yZGVyLXJhZGl1czogbWluKDF2aCwgMC41dncpO1xuICAtLWRlZXBsaWItYm9yZGVyLXJhZGl1czogbWluKDFkdmgsIDAuNWR2dyk7XG59XG4iLCIuZGVlcGxpYi1idXR0b24ge1xuICBjb2xvcjogdmFyKC0tZGVlcGxpYi10ZXh0LWNvbG9yKTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcblxuICAmLmJ1dHRvbi1zdHlsaW5nLFxuICAmLmJ1dHRvbi1zdHlsaW5nOjpiZWZvcmUge1xuICAgIGJvcmRlci1yYWRpdXM6IG1pbigxLjBkdmgsIDAuNWR2dyk7XG4gIH1cblxuICBpbWcge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDAlO1xuICAgIGxlZnQ6IDAlO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0O1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWRlZXBsaWItaWNvbi1jb2xvcik7XG4gICAgYmFja2dyb3VuZC1ibGVuZC1tb2RlOiBtdWx0aXBseTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gICAgbWFzay1wb3NpdGlvbjogbGVmdDtcbiAgICBtYXNrLXNpemU6IGNvbnRhaW47XG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICBtYXNrLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIGNvbG9yOiB0cmFuc3BhcmVudDtcblxuICAgIGJhY2tncm91bmQtaW1hZ2U6IHZhcigtLWltYWdlKTtcbiAgICBtYXNrLWltYWdlOiB2YXIoLS1pbWFnZSk7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIH1cblxuICAmOmhvdmVyIGltZyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZGVlcGxpYi1pY29uLWhvdmVyLWNvbG9yKTtcbiAgfVxuXG4gIC5idXR0b24tbGFiZWwge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gICAgY29sb3I6IHZhcigtLWRlZXBsaWItdGV4dC1jb2xvcik7XG4gICAgZm9udC1zaXplOiBtaW4oMy42ZHZoLCAxLjhkdncpO1xuICAgIGRpc3BsYXk6IGNvbnRlbnRzO1xuICB9XG5cbiAgLmJ1dHRvbi10b29sdGlwIHtcbiAgICBib3JkZXItcmFkaXVzOiBtaW4oMS4wZHZoLCAwLjVkdncpO1xuICB9XG59IiwiI2RlZXBsaWItcGFnZS1sYWJlbCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuI2RlZXBsaWItc3Vic2NyZWVuLXRpdGxlIHtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgY29sb3I6IHZhcigtLWRlZXBsaWItdGV4dC1jb2xvcik7XG4gIHVzZXItc2VsZWN0OiBub25lO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuLmRlZXBsaWItdGV4dCB7XG4gIGNvbG9yOiB2YXIoLS1kZWVwbGliLXRleHQtY29sb3IpO1xufVxuXG4uZGVlcGxpYi1zdWJzY3JlZW4ge1xuICBwYWRkaW5nOiAwO1xuICBtYXJnaW46IDA7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG4uZGVlcGxpYi1zdWJzY3JlZW4gKiB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHBvaW50ZXItZXZlbnRzOiBhbGw7XG59XG5cbi5kZWVwbGliLXNldHRpbmdzIHtcbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC1hdXRvLXJvd3M6IG1pbi1jb250ZW50O1xuICBwYWRkaW5nOiBtaW4oMS4wZHZoLCAwLjVkdncpO1xuICBnYXA6IDAuM2VtO1xufVxuXG4uZGVlcGxpYi1taXNjIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xuICBnYXA6IG1pbigxdmgsIDAuNXZ3KTtcbn1cblxuLmRlZXBsaWItdG9vbHRpcCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWRlZXBsaWItZWxlbWVudC1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1kZWVwbGliLXRleHQtY29sb3IpO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYm9yZGVyLXJhZGl1czogbWluKDEuMGR2aCwgMC41ZHZ3KTtcbiAgcGFkZGluZzogbWluKDF2aCwgMC41dncpO1xuICBmb250LXNpemU6IDAuOGVtO1xuICBib3JkZXI6IG1pbigwLjJ2aCwgMC4xdncpIHNvbGlkIHZhcigtLWRlZXBsaWItYm9yZGVyLWNvbG9yKTtcbiAgei1pbmRleDogMTtcbn1cblxuLmRlZXBsaWItb3ZlcmZsb3ctYm94IHtcbiAgYm9yZGVyOiB2YXIoLS1kZWVwbGliLWJvcmRlci1jb2xvcikgc29saWQgdmFyKC0tZGVlcGxpYi1ib3JkZXItd2lkdGgpO1xufVxuXG4uZGVlcGxpYi1wcmV2LW5leHQge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGdhcDogbWluKDJkdmgsIDFkdncpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1kZWVwbGliLWVsZW1lbnQtY29sb3IpO1xuICBjb2xvcjogdmFyKC0tZGVlcGxpYi10ZXh0LWNvbG9yKTtcbiAgYm9yZGVyLXJhZGl1czogbWluKDEuMGR2aCwgMC41ZHZ3KTtcbiAgYm9yZGVyOiBtaW4oMC4ydmgsIDAuMXZ3KSBzb2xpZCB2YXIoLS1kZWVwbGliLWJvcmRlci1jb2xvcik7XG5cbiAgLmRlZXBsaWItcHJldi1uZXh0LWJ1dHRvbiB7XG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1kZWVwbGliLWVsZW1lbnQtaG92ZXItY29sb3IpO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tZGVlcGxpYi1ib3JkZXItcmFkaXVzKTtcbiAgICB9XG5cbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgYXNwZWN0LXJhdGlvOiAxO1xuICB9XG5cbiAgLmRlZXBsaWItcHJldi1uZXh0LWxhYmVsIHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIHVzZXItc2VsZWN0OiBub25lO1xuICB9XG59XG5cbiNkZWVwbGliLW5hdi1tZW51IHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgZ2FwOiBtaW4oMmR2aCwgMWR2dyk7XG4gIHotaW5kZXg6IDE7XG5cbiAgJj4uZGVlcGxpYi1idXR0b24ge1xuICAgIGZsZXg6IDEgMCBhdXRvO1xuICB9XG59XG5cbiNkZWVwbGliLXN0b3JhZ2UtbWV0ZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMHB4O1xuICBsZWZ0OiAwcHg7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWRlZXBsaWItZWxlbWVudC1jb2xvcik7XG4gIGJvcmRlcjogdmFyKC0tZGVlcGxpYi1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWRlZXBsaWItYm9yZGVyLWNvbG9yKTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tZGVlcGxpYi1ib3JkZXItcmFkaXVzKTtcbiAgei1pbmRleDogLTE7XG5cbiAgI2RlZXBsaWItc3RvcmFnZS1iYXIge1xuICAgIGhlaWdodDogMTAwJTtcbiAgICB3aWR0aDogMCU7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tZGVlcGxpYi1hY2NlbnQtY29sb3IpO1xuICB9XG59IiwiLmRlZXBsaWItY2hlY2tib3gtY29udGFpbmVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiAwLjNlbTtcbiAgd2lkdGg6IGZpdC1jb250ZW50O1xuXG4gIHNwYW4ge1xuICAgIHVzZXItc2VsZWN0OiBub25lO1xuICB9XG5cbiAgLmRlZXBsaWItaW5wdXQge1xuICAgIHdpZHRoOiBtaW4oNXZoLCAyLjV2dyk7XG4gICAgaGVpZ2h0OiBtaW4oNXZoLCAyLjV2dyk7XG4gICAgd2lkdGg6IG1pbig1ZHZoLCAyLjVkdncpO1xuICAgIGhlaWdodDogbWluKDVkdmgsIDIuNWR2dyk7XG4gICAgYm9yZGVyLXJhZGl1czogbWluKDEuMHZoLCAwLjV2dyk7XG4gICAgYm9yZGVyLXJhZGl1czogbWluKDEuMGR2aCwgMC41ZHZ3KTtcblxuICAgICZbdHlwZT1cImNoZWNrYm94XCJdOmNoZWNrZWQ6OmJlZm9yZSB7XG4gICAgICB3aWR0aDogODAlO1xuICAgICAgaGVpZ2h0OiA4MCU7XG4gICAgfVxuICB9XG59XG5cbi5kZWVwbGliLWlucHV0LWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogMC4zZW07XG4gIHdpZHRoOiBmaXQtY29udGVudDtcblxuICBzcGFuIHtcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgfVxuXG4gICY6aGFzKC5kZWVwbGliLXRleHQpIHtcbiAgICBtYXJnaW4tdG9wOiBtaW4oMXZoLCAwLjV2dyk7XG4gICAgbWFyZ2luLXRvcDogbWluKDFkdmgsIDAuNWR2dyk7XG4gIH1cblxuICAuZGVlcGxpYi1pbnB1dCB7XG4gICAgZm9udC1zaXplOiAwLjZlbTtcbiAgICBwYWRkaW5nOiBtaW4oMXZoLCAwLjV2dyk7XG4gICAgcGFkZGluZzogbWluKDFkdmgsIDAuNWR2dyk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgICBtaW4taGVpZ2h0OiBtaW4oNXZoLCAyLjV2dyk7XG4gICAgbWluLWhlaWdodDogbWluKDVkdmgsIDIuNWR2dyk7XG4gICAgYm9yZGVyLXJhZGl1czogbWluKDEuMHZoLCAwLjV2dyk7XG4gICAgYm9yZGVyLXJhZGl1czogbWluKDEuMGR2aCwgMC41ZHZ3KTtcblxuICAgICZbdHlwZT1cImNvbG9yXCJdIHtcbiAgICAgIHBhZGRpbmc6IDBweDtcbiAgICAgIHdpZHRoOiBtaW4oNXZoLCAyLjV2dyk7XG4gICAgICBoZWlnaHQ6IG1pbig1dmgsIDIuNXZ3KTtcbiAgICAgIHdpZHRoOiBtaW4oNWR2aCwgMi41ZHZ3KTtcbiAgICAgIGhlaWdodDogbWluKDVkdmgsIDIuNWR2dyk7XG4gICAgICBib3JkZXItcmFkaXVzOiAwcHg7XG5cbiAgICAgICY6ZGlzYWJsZWQge1xuICAgICAgICBib3JkZXI6IHZhcigtLWRlZXBsaWItYmxvY2tlZC1jb2xvcikgc29saWQgdmFyKC0tZGVlcGxpYi1ib3JkZXItd2lkdGgpO1xuICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5cbi5kZWVwbGliLWRyb3Bkb3duLWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogbWluKDJ2aCwgMXZ3KTtcbiAgZ2FwOiBtaW4oMmR2aCwgMWR2dyk7XG4gIGNvbG9yOiB2YXIoLS1kZWVwbGliLXRleHQtY29sb3IpO1xuICB3aWR0aDogZml0LWNvbnRlbnQ7XG5cbiAgc2VsZWN0IHtcbiAgICBwYWRkaW5nOiAwIG1pbigxdmgsIDAuNXZ3KTtcbiAgICBwYWRkaW5nOiAwIG1pbigxZHZoLCAwLjVkdncpO1xuICAgIGJvcmRlci1yYWRpdXM6IG1pbigxdmgsIDAuNXZ3KTtcbiAgICBib3JkZXItcmFkaXVzOiBtaW4oMWR2aCwgMC41ZHZ3KTtcbiAgfVxuXG4gIHNwYW4ge1xuICAgIHVzZXItc2VsZWN0OiBub25lO1xuICB9XG59IiwiLmRlZXBsaWItaGlnaGxpZ2h0LXRleHQge1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgY29sb3I6IHJnYigyMDMsIDE4NSwgMjMpO1xufVxuXG4jVGV4dEFyZWFDaGF0TG9nW2RhdGEtY29sb3J0aGVtZT0nZGFyayddIGRpdi5DaGF0TWVzc2FnZS5kZWVwbGliLW1lc3NhZ2UsXG4jVGV4dEFyZWFDaGF0TG9nW2RhdGEtY29sb3J0aGVtZT0nZGFyazInXSBkaXYuQ2hhdE1lc3NhZ2UuZGVlcGxpYi1tZXNzYWdlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZGVlcGxpYi1lbGVtZW50LWNvbG9yKTtcbiAgYm9yZGVyOiBtaW4oMC4yZHZoLCAwLjFkdncpIHNvbGlkIHZhcigtLWRlZXBsaWItYm9yZGVyLWNvbG9yKTtcbiAgY29sb3I6IHZhcigtLWRlZXBsaWItdGV4dC1jb2xvcik7XG59XG5cbiNUZXh0QXJlYUNoYXRMb2cgZGl2LkNoYXRNZXNzYWdlLmRlZXBsaWItbWVzc2FnZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNlZWU7XG4gIGJvcmRlcjogbWluKDAuMmR2aCwgMC4xZHZ3KSBzb2xpZCAjNDQwMTcxO1xuICBjb2xvcjogIzExMTtcbiAgcGFkZGluZy1sZWZ0OiBtaW4oMC42ZHZoLCAwLjNkdncpO1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbn1cblxuI1RleHRBcmVhQ2hhdExvZ1tkYXRhLWNvbG9ydGhlbWU9J2RhcmsnXSBkaXYuQ2hhdE1lc3NhZ2UuZGVlcGxpYi1tZXNzYWdlIGEsXG4jVGV4dEFyZWFDaGF0TG9nW2RhdGEtY29sb3J0aGVtZT0nZGFyazInXSBkaXYuQ2hhdE1lc3NhZ2UuZGVlcGxpYi1tZXNzYWdlIGEge1xuICBjb2xvcjogdmFyKC0tZGVlcGxpYi10ZXh0LWNvbG9yKTtcbn1cblxuI1RleHRBcmVhQ2hhdExvZyBkaXYuQ2hhdE1lc3NhZ2UuZGVlcGxpYi1tZXNzYWdlIGEge1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBjb2xvcjogIzExMTtcbn1cbiIsIi5kZWVwbGliLW1vZGFsIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDEwJTtcbiAgbGVmdDogNTAlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gIHotaW5kZXg6IDEwMDE7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDAuNWVtO1xuICB3aWR0aDogbWF4KDUwZHZ3LCAyNWR2aCk7XG4gIGZvbnQtc2l6ZTogbWluKDRkdmgsIDJkdncpO1xuICBwYWRkaW5nOiBtaW4oMmR2aCwgMWR2dyk7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWRlZXBsaWItZWxlbWVudC1jb2xvcik7XG4gIGJvcmRlci1yYWRpdXM6IG1pbigxLjJkdmgsIDAuNmR2dyk7XG4gIGJvcmRlcjogbWluKDAuMmR2aCwgMC4xZHZ3KSBzb2xpZCB2YXIoLS1kZWVwbGliLWJvcmRlci1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1kZWVwbGliLXRleHQtY29sb3IpO1xuXG4gIC5kZWVwbGliLW1vZGFsLWlucHV0IHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBmb250LXNpemU6IG1pbigyLjZkdmgsIDEuOGR2dyk7XG4gICAgYm9yZGVyLXJhZGl1czogbWluKDEuMGR2aCwgMC41ZHZ3KTtcbiAgICBwYWRkaW5nOiBtaW4oMWR2aCwgMC41ZHZ3KTtcbiAgfVxuXG4gIGlucHV0LmRlZXBsaWItbW9kYWwtaW5wdXQge1xuICAgIG1heC13aWR0aDogbWF4KDUwZHZoLCAyNWR2dyk7XG4gIH1cblxuICAuZGVlcGxpYi1tb2RhbC1idXR0b24tY29udGFpbmVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICBnYXA6IDAuNWVtO1xuICAgIHdpZHRoOiAxMDAlO1xuXG4gICAgLmRlZXBsaWItYnV0dG9uIHtcbiAgICAgIGZvbnQtc2l6ZTogMC44ZW07XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgd2lkdGg6IGF1dG87XG4gICAgICBwYWRkaW5nOiBtaW4oMC40dmgsIDAuMnZ3KSBtaW4oMnZoLCAxdncpO1xuXG4gICAgICAuYnV0dG9uLWxhYmVsIHtcbiAgICAgICAgZGlzcGxheTogY29udGVudHM7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmRlZXBsaWItbW9kYWwtcHJvbXB0LWNvbnRhaW5lciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIH1cbn1cblxuLmRlZXBsaWItbW9kYWwtYmxvY2tlciB7XG4gIHotaW5kZXg6IDEwMDA7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwZHZ3O1xuICBoZWlnaHQ6IDEwMGR2aDtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpO1xufVxuIl19 */`;
937
953
 
938
954
  // src/base/initialization.ts
939
955
  var modStorage;
940
956
  var sdk;
957
+ var logger;
941
958
  function initMod(options) {
942
959
  sdk = new ModSdkManager(options.modInfo.info, options.modInfo.options);
943
960
  const MOD_NAME = ModSdkManager.ModInfo.name;
944
961
  modStorage = new ModStorage(ModSdkManager.ModInfo.name);
962
+ logger = new Logger(MOD_NAME);
945
963
  Style.injectInline("deeplib-style", styles_default);
946
- deepLibLogger.debug(`Init wait for ${MOD_NAME}`);
964
+ logger.debug("Init wait");
947
965
  if (CurrentScreen == null || CurrentScreen === "Login") {
948
966
  options.beforeLogin?.();
949
967
  const removeHook = sdk.hookFunction("LoginResponse", 0, (args, next) => {
950
- deepLibLogger.debug(`Init for ${MOD_NAME}! LoginResponse caught: `, args);
968
+ logger.debug("Init! LoginResponse caught: ", args);
951
969
  next(args);
952
970
  const response = args[0];
953
971
  if (response === "InvalidNamePassword") return next(args);
@@ -957,7 +975,7 @@ function initMod(options) {
957
975
  }
958
976
  });
959
977
  } else {
960
- deepLibLogger.debug(`Already logged in, initing ${MOD_NAME}`);
978
+ logger.debug(`Already logged in, initing ${MOD_NAME}`);
961
979
  init(options);
962
980
  }
963
981
  }
@@ -972,26 +990,14 @@ async function init(options) {
972
990
  unloadMod();
973
991
  return;
974
992
  }
975
- if (options.migrators) {
976
- for (const m of options.migrators) {
977
- VersionModule.registerMigrator(m);
978
- }
979
- }
980
993
  await options.initFunction?.();
981
994
  if (options.mainMenuOptions)
982
995
  MainMenu.setOptions(options.mainMenuOptions);
983
- for (const m of modules()) {
984
- if (m.defaultSettings && hasGetter(m, "defaultSettings") && m.settings && hasSetter(m, "settings")) {
985
- if (Object.entries(m.defaultSettings).length === 0) continue;
986
- m.settings = deepMergeMatchingProperties(m.defaultSettings, m.settings);
987
- }
988
- }
989
996
  window[MOD_NAME + "Loaded"] = true;
990
- deepLibLogger.log(`Loaded ${MOD_NAME}! Version: ${MOD_VERSION}`);
997
+ logger.log(`Loaded! Version: ${MOD_VERSION}`);
991
998
  }
992
999
  __name(init, "init");
993
1000
  function initModules(modulesToRegister) {
994
- const MOD_NAME = ModSdkManager.ModInfo.name;
995
1001
  for (const module of modulesToRegister) {
996
1002
  registerModule(module);
997
1003
  }
@@ -1004,7 +1010,10 @@ function initModules(modulesToRegister) {
1004
1010
  for (const module of modules()) {
1005
1011
  module.run();
1006
1012
  }
1007
- deepLibLogger.debug(`Modules Loaded for ${MOD_NAME}.`);
1013
+ for (const module of modules()) {
1014
+ module.registerDefaultSettings();
1015
+ }
1016
+ logger.debug("Modules Loaded.");
1008
1017
  return true;
1009
1018
  }
1010
1019
  __name(initModules, "initModules");
@@ -1012,7 +1021,7 @@ function unloadMod() {
1012
1021
  const MOD_NAME = ModSdkManager.ModInfo.name;
1013
1022
  unloadModules();
1014
1023
  delete window[MOD_NAME + "Loaded"];
1015
- deepLibLogger.debug(`Unloaded ${MOD_NAME}.`);
1024
+ logger.debug("Unloaded.");
1016
1025
  return true;
1017
1026
  }
1018
1027
  __name(unloadMod, "unloadMod");
@@ -1040,7 +1049,7 @@ function getModule(moduleType) {
1040
1049
  __name(getModule, "getModule");
1041
1050
 
1042
1051
  // src/migrators/base_migrator.ts
1043
- var BaseMigrator2 = class {
1052
+ var BaseMigrator = class {
1044
1053
  static {
1045
1054
  __name(this, "BaseMigrator");
1046
1055
  }
@@ -1125,21 +1134,20 @@ var VersionModule = class _VersionModule extends BaseModule {
1125
1134
  static isItNewVersion = false;
1126
1135
  /** The current mod version (retrieved from `ModSdkManager.ModInfo.version`) */
1127
1136
  static version;
1128
- /** Message to display when a new version is detected */
1129
1137
  static newVersionMessage = "";
1130
1138
  /** List of registered migration handlers, sorted by version */
1131
1139
  static migrators = [];
1132
- /** Optional lifecycle hook. Runs before each migration */
1133
1140
  static beforeEach;
1134
- /** Optional lifecycle hook. Runs after each migration */
1135
1141
  static afterEach;
1136
- /** Optional lifecycle hook. Runs before all migrations */
1137
1142
  static beforeAll;
1138
- /** Optional lifecycle hook. Runs after all migrations */
1139
1143
  static afterAll;
1140
1144
  constructor(options) {
1141
1145
  super();
1142
1146
  _VersionModule.newVersionMessage = options.newVersionMessage;
1147
+ if (options.migrators) {
1148
+ _VersionModule.migrators = options.migrators;
1149
+ _VersionModule.migrators.sort((a, b) => a.migrationVersion.localeCompare(b.migrationVersion));
1150
+ }
1143
1151
  _VersionModule.beforeEach = options.beforeEach;
1144
1152
  _VersionModule.afterEach = options.afterEach;
1145
1153
  _VersionModule.beforeAll = options.beforeAll;
@@ -1196,14 +1204,6 @@ var VersionModule = class _VersionModule extends BaseModule {
1196
1204
  }
1197
1205
  _VersionModule.afterAll?.();
1198
1206
  }
1199
- /**
1200
- * Registers a new migrator for handling version-specific changes.
1201
- * Migrators are sorted by their `MigrationVersion` in ascending order.
1202
- */
1203
- static registerMigrator(migrator) {
1204
- _VersionModule.migrators.push(migrator);
1205
- _VersionModule.migrators.sort((a, b) => a.migrationVersion.localeCompare(b.migrationVersion));
1206
- }
1207
1207
  /** Sends the currently configured "new version" message to the local player. */
1208
1208
  static sendNewVersionMessage() {
1209
1209
  if (!_VersionModule.newVersionMessage) return;
@@ -1436,13 +1436,13 @@ var GuiDebug = class extends BaseSubscreen {
1436
1436
 
1437
1437
  // src/utilities/common.ts
1438
1438
  function isPlainObject(value) {
1439
- return value !== null && typeof value === "object" && Object.getPrototypeOf(value) === Object.prototype;
1439
+ return value !== null && typeof value === "object" && Object.getPrototypeOf(value) === Object.prototype && !Array.isArray(value);
1440
1440
  }
1441
1441
  __name(isPlainObject, "isPlainObject");
1442
- function deepMerge(target, source) {
1442
+ function deepMerge(target, source, options = { concatArrays: true }) {
1443
1443
  if (target === void 0) return source;
1444
1444
  if (source === void 0) return target;
1445
- if (Array.isArray(target) && Array.isArray(source)) {
1445
+ if (Array.isArray(target) && Array.isArray(source) && options.concatArrays) {
1446
1446
  return [...target, ...source];
1447
1447
  }
1448
1448
  if (isPlainObject(target) && isPlainObject(source)) {
@@ -1451,7 +1451,7 @@ function deepMerge(target, source) {
1451
1451
  if (key === "__proto__" || key === "constructor" || key === "prototype") {
1452
1452
  continue;
1453
1453
  }
1454
- result[key] = key in target ? deepMerge(target[key], source[key]) : source[key];
1454
+ result[key] = key in target ? deepMerge(target[key], source[key], options) : source[key];
1455
1455
  }
1456
1456
  return result;
1457
1457
  }
@@ -1481,18 +1481,6 @@ function exportToGlobal(name, value) {
1481
1481
  current[keys[keys.length - 1]] = value;
1482
1482
  }
1483
1483
  __name(exportToGlobal, "exportToGlobal");
1484
- function deepMergeMatchingProperties(mergeTo, mergeFrom) {
1485
- const mergedObject = { ...mergeTo };
1486
- for (const key in mergeFrom) {
1487
- if (mergeFrom[key] !== null && typeof mergeFrom[key] === "object") {
1488
- mergedObject[key] = deepMergeMatchingProperties(mergedObject[key] || {}, mergeFrom[key]);
1489
- } else if (key in mergedObject) {
1490
- mergedObject[key] = mergeFrom[key];
1491
- }
1492
- }
1493
- return mergedObject;
1494
- }
1495
- __name(deepMergeMatchingProperties, "deepMergeMatchingProperties");
1496
1484
  function hasGetter(obj, prop) {
1497
1485
  while (obj && obj !== Object.prototype) {
1498
1486
  const descriptor = Object.getOwnPropertyDescriptor(obj, prop);
@@ -1579,10 +1567,11 @@ function elementCreateCheckbox(options) {
1579
1567
  options.type = "checkbox";
1580
1568
  const disabled = typeof options?.disabled === "function" ? options?.disabled() : options?.disabled;
1581
1569
  const retElem = ElementCreate(deepMerge({
1582
- tag: "div",
1570
+ tag: "label",
1583
1571
  classList: ["deeplib-checkbox-container"],
1584
1572
  attributes: {
1585
- id: `${options.id}-container`
1573
+ id: `${options.id}-container`,
1574
+ for: options.id
1586
1575
  },
1587
1576
  children: [
1588
1577
  deepMerge({
@@ -1601,10 +1590,10 @@ function elementCreateCheckbox(options) {
1601
1590
  }
1602
1591
  }, options.htmlOptions?.checkbox),
1603
1592
  deepMerge({
1604
- tag: "label",
1593
+ tag: "span",
1605
1594
  classList: ["deeplib-text"],
1606
1595
  attributes: {
1607
- for: options.id
1596
+ id: `${options.id}-label`
1608
1597
  },
1609
1598
  children: [options.label]
1610
1599
  }, options.htmlOptions?.label)
@@ -1639,10 +1628,11 @@ function elementCreateInput(options) {
1639
1628
  if (elem) return elem;
1640
1629
  const disabled = typeof options?.disabled === "function" ? options?.disabled() : options?.disabled;
1641
1630
  const retElem = ElementCreate(deepMerge({
1642
- tag: "div",
1631
+ tag: "label",
1643
1632
  classList: ["deeplib-input-container"],
1644
1633
  attributes: {
1645
- id: `${options.id}-container`
1634
+ id: `${options.id}-container`,
1635
+ for: options.id
1646
1636
  },
1647
1637
  children: [
1648
1638
  deepMerge({
@@ -1662,10 +1652,10 @@ function elementCreateInput(options) {
1662
1652
  }
1663
1653
  }, options.htmlOptions?.input),
1664
1654
  options.label ? deepMerge({
1665
- tag: "label",
1655
+ tag: "span",
1666
1656
  classList: ["deeplib-text"],
1667
1657
  attributes: {
1668
- for: options.id
1658
+ id: `${options.id}-label`
1669
1659
  },
1670
1660
  children: [options.label]
1671
1661
  }, options.htmlOptions?.label) : void 0
@@ -1688,7 +1678,7 @@ function elementCreateLabel(options) {
1688
1678
  if (elem) return elem;
1689
1679
  options.type = "label";
1690
1680
  const retElem = ElementCreate(deepMerge({
1691
- tag: "span",
1681
+ tag: "label",
1692
1682
  classList: ["deeplib-label", "deeplib-text"],
1693
1683
  attributes: {
1694
1684
  id: options.id
@@ -1715,17 +1705,18 @@ function elementCreateDropdown(options) {
1715
1705
  if (elem) return elem;
1716
1706
  options.type = "dropdown";
1717
1707
  const retElem = ElementCreate(deepMerge({
1718
- tag: "div",
1708
+ tag: "label",
1719
1709
  classList: ["deeplib-dropdown-container"],
1720
1710
  attributes: {
1721
- id: `${options.id}-container`
1711
+ id: `${options.id}-container`,
1712
+ for: options.id
1722
1713
  },
1723
1714
  children: [
1724
1715
  options.label ? deepMerge({
1725
- tag: "label",
1716
+ tag: "span",
1726
1717
  classList: ["deeplib-text"],
1727
1718
  attributes: {
1728
- for: options.id
1719
+ id: `${options.id}-label`
1729
1720
  },
1730
1721
  children: [options.label]
1731
1722
  }, options.htmlOptions?.label) : void 0,
@@ -2184,7 +2175,7 @@ var MainMenu = class _MainMenu extends BaseSubscreen {
2184
2175
  }
2185
2176
  if (_MainMenu.options.storageFullnessIndicator) {
2186
2177
  const maxStorageCapacityKB = 180;
2187
- const currentStorageCapacityKB = byteToKB(ModStorage.measureSize(Player.OnlineSettings));
2178
+ const currentStorageCapacityKB = byteToKB(ModStorage.measureSize(modStorage.extensionStorage));
2188
2179
  const fullness = (currentStorageCapacityKB / maxStorageCapacityKB * 100).toFixed(1);
2189
2180
  const storageFullnessWrapper = advElement.createButton({
2190
2181
  id: CommonGenerateUniqueID(),
@@ -2250,7 +2241,7 @@ var MainMenu = class _MainMenu extends BaseSubscreen {
2250
2241
  PreferenceSubscreenExtensionsClear();
2251
2242
  });
2252
2243
  } else if (returnScreen instanceof BaseSubscreen) {
2253
- setSubscreen(returnScreen ?? null).then(() => {
2244
+ setSubscreen(returnScreen).then(() => {
2254
2245
  });
2255
2246
  } else if (Array.isArray(returnScreen)) {
2256
2247
  CommonSetScreen(...returnScreen);
@@ -2340,7 +2331,10 @@ var GuiImportExport = class extends BaseSubscreen {
2340
2331
  if (transferMethod === "clipboard") {
2341
2332
  await this.exportToClipboard(data);
2342
2333
  } else if (transferMethod === "file") {
2343
- await this.exportToFile(data, "themed_settings");
2334
+ if (!await this.exportToFile(data, "settings")) {
2335
+ return;
2336
+ }
2337
+ ;
2344
2338
  }
2345
2339
  this.importExportOptions.onExport?.();
2346
2340
  ToastManager.success("Data exported successfully.");
@@ -2365,6 +2359,9 @@ var GuiImportExport = class extends BaseSubscreen {
2365
2359
  if (!data) {
2366
2360
  throw new Error("Invalid data.");
2367
2361
  }
2362
+ for (const module of modules()) {
2363
+ module.registerDefaultSettings(data);
2364
+ }
2368
2365
  modStorage.playerStorage = data;
2369
2366
  this.importExportOptions.onImport?.();
2370
2367
  ToastManager.success("Data imported successfully.");
@@ -2391,13 +2388,14 @@ var GuiImportExport = class extends BaseSubscreen {
2391
2388
  const writable = await handle.createWritable();
2392
2389
  await writable.write(data);
2393
2390
  await writable.close();
2391
+ return true;
2394
2392
  } catch (error) {
2395
2393
  throw new Error("File save cancelled or failed: " + error.message);
2396
2394
  }
2397
2395
  } else {
2398
2396
  const fileName = await Modal.prompt("Enter file name", suggestedName);
2399
2397
  if (fileName === null) {
2400
- return;
2398
+ return false;
2401
2399
  } else if (fileName === "") {
2402
2400
  throw new Error("File name cannot be empty.");
2403
2401
  }
@@ -2411,6 +2409,7 @@ var GuiImportExport = class extends BaseSubscreen {
2411
2409
  });
2412
2410
  link.click();
2413
2411
  URL.revokeObjectURL(link.href);
2412
+ return true;
2414
2413
  }
2415
2414
  }
2416
2415
  /** Opens a file picker and reads the selected file's contents, importing the data. */
@@ -3132,7 +3131,7 @@ var EventChannel = class {
3132
3131
  }
3133
3132
  };
3134
3133
  export {
3135
- BaseMigrator2 as BaseMigrator,
3134
+ BaseMigrator,
3136
3135
  BaseModule,
3137
3136
  BaseSubscreen,
3138
3137
  EventChannel,
@@ -3152,7 +3151,6 @@ export {
3152
3151
  byteToKB,
3153
3152
  deepLibLogger,
3154
3153
  deepMerge,
3155
- deepMergeMatchingProperties,
3156
3154
  domUtil,
3157
3155
  exportToGlobal,
3158
3156
  getModule,
@@ -3161,6 +3159,7 @@ export {
3161
3159
  hasSetter,
3162
3160
  initMod,
3163
3161
  layout,
3162
+ logger,
3164
3163
  modStorage,
3165
3164
  modules,
3166
3165
  modulesMap,