bc-deeplib 2.1.0 → 2.3.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.d.ts +26 -22
- package/dist/deeplib.js +50 -55
- package/dist/deeplib.js.map +3 -3
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
package/dist/deeplib.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
declare module 'bc-deeplib/base/base_module' {
|
|
2
|
-
import { BaseSettingsModel, Subscreen } from 'bc-deeplib/deeplib';
|
|
2
|
+
import { BaseSettingsModel, SettingsModel, Subscreen } from 'bc-deeplib/deeplib';
|
|
3
3
|
/**
|
|
4
4
|
* An abstract foundation for modular systems that require:
|
|
5
5
|
* - Optional settings screens
|
|
@@ -57,7 +57,7 @@ declare module 'bc-deeplib/base/base_module' {
|
|
|
57
57
|
* If some settings already exist, they will be merged with defaults.
|
|
58
58
|
* Existing values will NOT be overwritten.
|
|
59
59
|
*/
|
|
60
|
-
registerDefaultSettings(): void;
|
|
60
|
+
registerDefaultSettings(target: SettingsModel): void;
|
|
61
61
|
/**
|
|
62
62
|
* Provides default settings for this module.
|
|
63
63
|
* Subclasses should override this getter to return their defaults.
|
|
@@ -140,6 +140,10 @@ declare module 'bc-deeplib/base/base_subscreen' {
|
|
|
140
140
|
* Defaults to 1000.
|
|
141
141
|
*/
|
|
142
142
|
settingsWidth?: number;
|
|
143
|
+
/**
|
|
144
|
+
* If `true`, the character will be forced to the top of the screen.
|
|
145
|
+
*/
|
|
146
|
+
forceUpCharacter?: boolean;
|
|
143
147
|
};
|
|
144
148
|
/**
|
|
145
149
|
* Represents a constructor type for a subscreen.
|
|
@@ -148,7 +152,7 @@ declare module 'bc-deeplib/base/base_subscreen' {
|
|
|
148
152
|
*/
|
|
149
153
|
export type Subscreen = new (module?: BaseModule) => BaseSubscreen;
|
|
150
154
|
/** Switches the active subscreen in the global `GUI` instance. */
|
|
151
|
-
export function setSubscreen(subscreen: BaseSubscreen | string
|
|
155
|
+
export function setSubscreen(subscreen: BaseSubscreen | string): Promise<void>;
|
|
152
156
|
/**
|
|
153
157
|
* Abstract base class for creating settings/configuration subscreens in a module.
|
|
154
158
|
*
|
|
@@ -180,7 +184,7 @@ declare module 'bc-deeplib/base/base_subscreen' {
|
|
|
180
184
|
protected static readonly subscreenOptions: SubscreenOptions;
|
|
181
185
|
constructor(module?: BaseModule);
|
|
182
186
|
/** Changes the currently active subscreen. */
|
|
183
|
-
setSubscreen(screen: BaseSubscreen | string
|
|
187
|
+
setSubscreen(screen: BaseSubscreen | string): Promise<void>;
|
|
184
188
|
/** Gets this subscreen's settings object from its parent module. */
|
|
185
189
|
get settings(): BaseSettingsModel;
|
|
186
190
|
/** Updates this subscreen's settings in its parent module. */
|
|
@@ -306,7 +310,7 @@ declare module 'bc-deeplib/base/elements_typings' {
|
|
|
306
310
|
|
|
307
311
|
}
|
|
308
312
|
declare module 'bc-deeplib/base/initialization' {
|
|
309
|
-
import { BaseModule, ModSdkManager,
|
|
313
|
+
import { BaseModule, ModSdkManager, ModStorage, MainMenuOptions, TranslationOptions, Logger } from 'bc-deeplib/deeplib';
|
|
310
314
|
/** Configuration object for initializing a mod via `initMod`. */
|
|
311
315
|
interface InitOptions {
|
|
312
316
|
/**
|
|
@@ -323,11 +327,6 @@ declare module 'bc-deeplib/base/initialization' {
|
|
|
323
327
|
* Modules are initialized, loaded, and run in order.
|
|
324
328
|
*/
|
|
325
329
|
modules?: BaseModule[];
|
|
326
|
-
/**
|
|
327
|
-
* List of data migration handlers to register with the `VersionModule`.
|
|
328
|
-
* Each `BaseMigrator` handles upgrading data from one version to another.
|
|
329
|
-
*/
|
|
330
|
-
migrators?: BaseMigrator[];
|
|
331
330
|
/** Configuration for customizing the main menu when the mod is active. */
|
|
332
331
|
mainMenuOptions?: MainMenuOptions;
|
|
333
332
|
/**
|
|
@@ -353,6 +352,11 @@ declare module 'bc-deeplib/base/initialization' {
|
|
|
353
352
|
* Initialized by `initMod()`.
|
|
354
353
|
*/
|
|
355
354
|
export let sdk: ModSdkManager;
|
|
355
|
+
/**
|
|
356
|
+
* Mod specific logger instance.
|
|
357
|
+
* Initialized by `initMod()`.
|
|
358
|
+
*/
|
|
359
|
+
export let logger: Logger;
|
|
356
360
|
/**
|
|
357
361
|
* Entry point for initializing a mod. Handles:
|
|
358
362
|
* - Setting up the Mod SDK
|
|
@@ -580,10 +584,20 @@ declare module 'bc-deeplib/modules/gui' {
|
|
|
580
584
|
declare module 'bc-deeplib/modules/version' {
|
|
581
585
|
import { BaseMigrator, BaseModule } from 'bc-deeplib/deeplib';
|
|
582
586
|
export type VersionModuleOptions = {
|
|
587
|
+
/**
|
|
588
|
+
* List of data migration handlers to register with the `VersionModule`.
|
|
589
|
+
* Each `BaseMigrator` handles upgrading data from one version to another.
|
|
590
|
+
*/
|
|
591
|
+
migrators?: BaseMigrator[];
|
|
592
|
+
/** Message to display when a new version is detected */
|
|
583
593
|
newVersionMessage?: string;
|
|
594
|
+
/** Optional lifecycle hook. Runs before each migration */
|
|
584
595
|
beforeEach?: () => void;
|
|
596
|
+
/** Optional lifecycle hook. Runs after each migration */
|
|
585
597
|
afterEach?: () => void;
|
|
598
|
+
/** Optional lifecycle hook. Runs before all migrations */
|
|
586
599
|
beforeAll?: () => void;
|
|
600
|
+
/** Optional lifecycle hook. Runs after all migrations */
|
|
587
601
|
afterAll?: () => void;
|
|
588
602
|
};
|
|
589
603
|
/**
|
|
@@ -602,17 +616,12 @@ declare module 'bc-deeplib/modules/version' {
|
|
|
602
616
|
private static isItNewVersion;
|
|
603
617
|
/** The current mod version (retrieved from `ModSdkManager.ModInfo.version`) */
|
|
604
618
|
private static version;
|
|
605
|
-
/** Message to display when a new version is detected */
|
|
606
619
|
private static newVersionMessage?;
|
|
607
620
|
/** List of registered migration handlers, sorted by version */
|
|
608
621
|
private static migrators;
|
|
609
|
-
/** Optional lifecycle hook. Runs before each migration */
|
|
610
622
|
private static beforeEach?;
|
|
611
|
-
/** Optional lifecycle hook. Runs after each migration */
|
|
612
623
|
private static afterEach?;
|
|
613
|
-
/** Optional lifecycle hook. Runs before all migrations */
|
|
614
624
|
private static beforeAll?;
|
|
615
|
-
/** Optional lifecycle hook. Runs after all migrations */
|
|
616
625
|
private static afterAll?;
|
|
617
626
|
constructor(options: VersionModuleOptions);
|
|
618
627
|
/**
|
|
@@ -635,11 +644,6 @@ declare module 'bc-deeplib/modules/version' {
|
|
|
635
644
|
* is newer than the previously stored version.
|
|
636
645
|
*/
|
|
637
646
|
private static checkVersionMigration;
|
|
638
|
-
/**
|
|
639
|
-
* Registers a new migrator for handling version-specific changes.
|
|
640
|
-
* Migrators are sorted by their `MigrationVersion` in ascending order.
|
|
641
|
-
*/
|
|
642
|
-
static registerMigrator(migrator: BaseMigrator): void;
|
|
643
647
|
/** Sends the currently configured "new version" message to the local player. */
|
|
644
648
|
static sendNewVersionMessage(): void;
|
|
645
649
|
/**
|
|
@@ -701,7 +705,7 @@ declare module 'bc-deeplib/screens/import_export' {
|
|
|
701
705
|
/** Imports mod data using the specified method. */
|
|
702
706
|
dataImport(transferMethod: DataTransferMethod): Promise<void>;
|
|
703
707
|
/** Saves data to a file using the browser's save dialog. */
|
|
704
|
-
exportToFile(data: string, defaultFileName: string): Promise<
|
|
708
|
+
exportToFile(data: string, defaultFileName: string): Promise<boolean>;
|
|
705
709
|
/** Opens a file picker and reads the selected file's contents, importing the data. */
|
|
706
710
|
importFromFile(): Promise<string | null>;
|
|
707
711
|
/** Copies the given data to the clipboard. */
|
|
@@ -846,7 +850,7 @@ declare module 'bc-deeplib/utilities/elements/elements' {
|
|
|
846
850
|
};
|
|
847
851
|
function elementCreateButton(options: Omit<Button, 'type'>): HTMLButtonElement;
|
|
848
852
|
function elementCreateCheckbox(options: Omit<Checkbox, 'type'>): HTMLElement;
|
|
849
|
-
function elementCreateCustom(options: Omit<Custom, 'type'>):
|
|
853
|
+
function elementCreateCustom(options: Omit<Custom, 'type'>): HTMLHeadElement;
|
|
850
854
|
function elementCreateInput(options: Input): HTMLElement;
|
|
851
855
|
function elementCreateLabel(options: Omit<Label, 'type'>): HTMLElement;
|
|
852
856
|
function elementCreateDropdown(options: Omit<Dropdown, 'type'>): HTMLDivElement;
|
package/dist/deeplib.js
CHANGED
|
@@ -230,8 +230,10 @@ var BaseModule = class {
|
|
|
230
230
|
if (!this.settingsStorage) return {};
|
|
231
231
|
if (!modStorage.playerStorage) {
|
|
232
232
|
Player[modName] = {};
|
|
233
|
-
this.registerDefaultSettings();
|
|
234
|
-
} else if (!modStorage.playerStorage[this.settingsStorage])
|
|
233
|
+
this.registerDefaultSettings(modStorage.playerStorage);
|
|
234
|
+
} else if (!modStorage.playerStorage[this.settingsStorage]) {
|
|
235
|
+
this.registerDefaultSettings(modStorage.playerStorage);
|
|
236
|
+
}
|
|
235
237
|
return modStorage.playerStorage[this.settingsStorage];
|
|
236
238
|
}
|
|
237
239
|
/**
|
|
@@ -244,8 +246,10 @@ var BaseModule = class {
|
|
|
244
246
|
if (!this.settingsStorage) return;
|
|
245
247
|
if (!storage.playerStorage) {
|
|
246
248
|
Player[modName] = {};
|
|
247
|
-
this.registerDefaultSettings();
|
|
248
|
-
} else if (!storage.playerStorage[this.settingsStorage])
|
|
249
|
+
this.registerDefaultSettings(modStorage.playerStorage);
|
|
250
|
+
} else if (!storage.playerStorage[this.settingsStorage]) {
|
|
251
|
+
this.registerDefaultSettings(modStorage.playerStorage);
|
|
252
|
+
}
|
|
249
253
|
storage.playerStorage[this.settingsStorage] = value;
|
|
250
254
|
}
|
|
251
255
|
/**
|
|
@@ -254,7 +258,7 @@ var BaseModule = class {
|
|
|
254
258
|
* Subclasses can override to perform additional setup.
|
|
255
259
|
*/
|
|
256
260
|
init() {
|
|
257
|
-
this.registerDefaultSettings();
|
|
261
|
+
this.registerDefaultSettings(modStorage.playerStorage);
|
|
258
262
|
}
|
|
259
263
|
/**
|
|
260
264
|
* Registers default settings for this module in persistent storage.
|
|
@@ -263,11 +267,11 @@ var BaseModule = class {
|
|
|
263
267
|
* If some settings already exist, they will be merged with defaults.
|
|
264
268
|
* Existing values will NOT be overwritten.
|
|
265
269
|
*/
|
|
266
|
-
registerDefaultSettings() {
|
|
270
|
+
registerDefaultSettings(target) {
|
|
267
271
|
const storage = this.settingsStorage;
|
|
268
272
|
const defaults = this.defaultSettings;
|
|
269
273
|
if (!storage || !defaults) return;
|
|
270
|
-
|
|
274
|
+
target[storage] = Object.assign(defaults, target[storage] ?? {});
|
|
271
275
|
}
|
|
272
276
|
/**
|
|
273
277
|
* Provides default settings for this module.
|
|
@@ -328,7 +332,8 @@ var BaseSubscreen = class _BaseSubscreen {
|
|
|
328
332
|
background: "Sheet",
|
|
329
333
|
doShowExitButton: true,
|
|
330
334
|
doShowTitle: true,
|
|
331
|
-
settingsWidth: 1e3
|
|
335
|
+
settingsWidth: 1e3,
|
|
336
|
+
forceUpCharacter: false
|
|
332
337
|
};
|
|
333
338
|
constructor(module) {
|
|
334
339
|
if (module) this.module = module;
|
|
@@ -421,7 +426,7 @@ var BaseSubscreen = class _BaseSubscreen {
|
|
|
421
426
|
load() {
|
|
422
427
|
for (const module of modules()) {
|
|
423
428
|
if (!module.settingsScreen) continue;
|
|
424
|
-
if (!module.settings || !Object.keys(module.settings).length) module.registerDefaultSettings();
|
|
429
|
+
if (!module.settings || !Object.keys(module.settings).length) module.registerDefaultSettings(modStorage.playerStorage);
|
|
425
430
|
}
|
|
426
431
|
_BaseSubscreen.currentPage = 1;
|
|
427
432
|
layout.getSubscreen();
|
|
@@ -516,7 +521,11 @@ var BaseSubscreen = class _BaseSubscreen {
|
|
|
516
521
|
})
|
|
517
522
|
);
|
|
518
523
|
this.managePageElementsVisibility();
|
|
519
|
-
|
|
524
|
+
if (this.options.drawCharacter && this.options.forceUpCharacter) {
|
|
525
|
+
CharacterAppearanceForceUpCharacter = Player.MemberNumber;
|
|
526
|
+
} else {
|
|
527
|
+
CharacterAppearanceForceUpCharacter = -1;
|
|
528
|
+
}
|
|
520
529
|
}
|
|
521
530
|
/**
|
|
522
531
|
* Called each frame while this subscreen is active.
|
|
@@ -563,8 +572,10 @@ var BaseSubscreen = class _BaseSubscreen {
|
|
|
563
572
|
ElementSetFontSize(subscreen, "auto");
|
|
564
573
|
ElementSetPosition(settingsDiv, 530 - offset, 170);
|
|
565
574
|
ElementSetSize(settingsDiv, this.options.settingsWidth ?? 1e3 + offset, 660);
|
|
566
|
-
|
|
567
|
-
|
|
575
|
+
if (this.options.doShowTitle) {
|
|
576
|
+
ElementSetPosition("deeplib-subscreen-title", 530 - offset, 75);
|
|
577
|
+
ElementSetSize("deeplib-subscreen-title", 800, 60);
|
|
578
|
+
}
|
|
568
579
|
ElementSetPosition("deeplib-nav-menu", 1905, 75, "top-right");
|
|
569
580
|
ElementSetSize("deeplib-nav-menu", null, 90);
|
|
570
581
|
ElementSetPosition(advElement.getTooltip() || "", 250, 850);
|
|
@@ -928,21 +939,23 @@ var styles_default = `.deeplib-subscreen,
|
|
|
928
939
|
height: 100dvh;
|
|
929
940
|
background-color: rgba(0, 0, 0, 0.5);
|
|
930
941
|
}
|
|
931
|
-
/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiL21lZGlhL05WTUUvU3R1ZmYvQ29kZS9iYy9CQy1EZWVwTGliL3NyYy9zdHlsZXMiLCJzb3VyY2VzIjpbInZhcnMuc2NzcyIsImJ1dHRvbnMuc2NzcyIsImVsZW1lbnRzLnNjc3MiLCJpbnB1dHMuc2NzcyIsIm1lc3NhZ2VzLnNjc3MiLCJtb2RhbC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7RUFFRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FDZEY7RUFDRTtFQUNBO0VBQ0E7OztBQUdGO0FBQUE7RUFFRTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBRUE7RUFDQTtFQUNBOzs7QUFHRjtFQUNFOzs7QUFHRjtFQUNFO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTs7O0FDM0NGO0VBQ0U7RUFDQTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7OztBQUdGO0VBQ0U7OztBQUdGO0VBQ0U7RUFDQTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7OztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUdFO0VBQ0U7RUFDQTs7QUFISjtFQU1FO0VBQ0E7O0FBR0Y7RUFDRTs7O0FBSUo7RUFDRTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTtFQUNBOzs7QUN6R0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7O0FDdkVKO0VBQ0U7RUFDQTs7O0FBR0Y7QUFBQTtFQUVFO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7OztBQUdGO0FBQUE7RUFFRTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7OztBQzdCRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7QUFHRjtFQUNFOztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNFO0VBQ0E7RUFDQTtFQUNBOztBQUVBO0VBQ0U7O0FBS047RUFDRTtFQUNBO0VBQ0E7RUFDQTs7O0FBSUo7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQSIsInNvdXJjZXNDb250ZW50IjpbIi5kZWVwbGliLXN1YnNjcmVlbixcbi5kZWVwbGliLW1vZGFsIHtcbiAgLS1kZWVwbGliLWJhY2tncm91bmQtY29sb3I6IHZhcigtLXRtZC1tYWluLCB3aGl0ZSk7XG4gIC0tZGVlcGxpYi1lbGVtZW50LWNvbG9yOiB2YXIoLS10bWQtZWxlbWVudCwgd2hpdGUpO1xuICAtLWRlZXBsaWItZWxlbWVudC1ob3Zlci1jb2xvcjogdmFyKC0tdG1kLWVsZW1lbnQtaG92ZXIsIGN5YW4pO1xuICAtLWRlZXBsaWItYWNjZW50LWNvbG9yOiB2YXIoLS10bWQtYWNjZW50LCAjRkZGRjg4KTtcbiAgLS1kZWVwbGliLWJsb2NrZWQtY29sb3I6IHZhcigtLXRtZC1ibG9ja2VkLCByZWQpO1xuICAtLWRlZXBsaWItdGV4dC1jb2xvcjogdmFyKC0tdG1kLXRleHQsIGJsYWNrKTtcbiAgLS1kZWVwbGliLWljb24tY29sb3I6IHZhcigtLXRtZC1hY2NlbnQsIGJsYWNrKTtcbiAgLS1kZWVwbGliLWljb24taG92ZXItY29sb3I6IHZhcigtLXRtZC1hY2NlbnQtaG92ZXIsIGJsYWNrKTtcbiAgLS1kZWVwbGliLWJvcmRlci1jb2xvcjogdmFyKC0tdG1kLWFjY2VudCwgYmxhY2spO1xuICAtLWRlZXBsaWItYm9yZGVyLXdpZHRoOiBtaW4oMC4ydmgsIDAuMXZ3KTtcbiAgLS1kZWVwbGliLWJvcmRlci13aWR0aDogbWluKDAuMmR2aCwgMC4xZHZ3KTtcbiAgLS1kZWVwbGliLWJvcmRlci1yYWRpdXM6IG1pbigxdmgsIDAuNXZ3KTtcbiAgLS1kZWVwbGliLWJvcmRlci1yYWRpdXM6IG1pbigxZHZoLCAwLjVkdncpO1xufVxuIiwiLmRlZXBsaWItYnV0dG9uIHtcbiAgY29sb3I6IHZhcigtLWRlZXBsaWItdGV4dC1jb2xvcik7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG59XG5cbi5kZWVwbGliLWJ1dHRvbi5idXR0b24tc3R5bGluZyxcbi5kZWVwbGliLWJ1dHRvbi5idXR0b24tc3R5bGluZzo6YmVmb3JlIHtcbiAgYm9yZGVyLXJhZGl1czogbWluKDEuMGR2aCwgMC41ZHZ3KTtcbn1cblxuLmRlZXBsaWItYnV0dG9uIGltZyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwJTtcbiAgbGVmdDogMCU7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQ7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWRlZXBsaWItaWNvbi1jb2xvcik7XG4gIGJhY2tncm91bmQtYmxlbmQtbW9kZTogbXVsdGlwbHk7XG4gIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcbiAgbWFzay1wb3NpdGlvbjogbGVmdDtcbiAgbWFzay1zaXplOiBjb250YWluO1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICBtYXNrLXJlcGVhdDogbm8tcmVwZWF0O1xuICBjb2xvcjogdHJhbnNwYXJlbnQ7XG5cbiAgYmFja2dyb3VuZC1pbWFnZTogdmFyKC0taW1hZ2UpO1xuICBtYXNrLWltYWdlOiB2YXIoLS1pbWFnZSk7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG4uZGVlcGxpYi1idXR0b246aG92ZXIgaW1nIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZGVlcGxpYi1pY29uLWhvdmVyLWNvbG9yKTtcbn1cblxuLmRlZXBsaWItYnV0dG9uIC5idXR0b24tbGFiZWwge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xuICBjb2xvcjogdmFyKC0tZGVlcGxpYi10ZXh0LWNvbG9yKTtcbiAgZm9udC1zaXplOiBtaW4oMy42ZHZoLCAxLjhkdncpO1xufVxuXG4uZGVlcGxpYi1idXR0b24gLmJ1dHRvbi10b29sdGlwIHtcbiAgYm9yZGVyLXJhZGl1czogbWluKDEuMGR2aCwgMC41ZHZ3KTtcbn1cbiIsIiNkZWVwbGliLXBhZ2UtbGFiZWwge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cblxuI2RlZXBsaWItc3Vic2NyZWVuLXRpdGxlIHtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgY29sb3I6IHZhcigtLWRlZXBsaWItdGV4dC1jb2xvcik7XG59XG5cbi5kZWVwbGliLXRleHQge1xuICBjb2xvcjogdmFyKC0tZGVlcGxpYi10ZXh0LWNvbG9yKTtcbn1cblxuLmRlZXBsaWItc3Vic2NyZWVuIHtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luOiAwO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuLmRlZXBsaWItc3Vic2NyZWVuICoge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBwb2ludGVyLWV2ZW50czogYWxsO1xufVxuXG4uZGVlcGxpYi1zZXR0aW5ncyB7XG4gIGRpc3BsYXk6IGdyaWQ7XG4gIGdyaWQtYXV0by1yb3dzOiBtaW4tY29udGVudDtcbiAgcGFkZGluZzogbWluKDEuMGR2aCwgMC41ZHZ3KTtcbiAgZ2FwOiAwLjNlbTtcbn1cblxuLmRlZXBsaWItbWlzYyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTtcbiAgZ2FwOiBtaW4oMXZoLCAwLjV2dyk7XG59XG5cbi5kZWVwbGliLXRvb2x0aXAge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1kZWVwbGliLWVsZW1lbnQtY29sb3IpO1xuICBjb2xvcjogdmFyKC0tZGVlcGxpYi10ZXh0LWNvbG9yKTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGJvcmRlci1yYWRpdXM6IG1pbigxLjBkdmgsIDAuNWR2dyk7XG4gIHBhZGRpbmc6IG1pbigxdmgsIDAuNXZ3KTtcbiAgZm9udC1zaXplOiAwLjhlbTtcbiAgYm9yZGVyOiBtaW4oMC4ydmgsIDAuMXZ3KSBzb2xpZCB2YXIoLS1kZWVwbGliLWJvcmRlci1jb2xvcik7XG4gIHotaW5kZXg6IDE7XG59XG5cbi5kZWVwbGliLW92ZXJmbG93LWJveCB7XG4gIGJvcmRlcjogdmFyKC0tZGVlcGxpYi1ib3JkZXItY29sb3IpIHNvbGlkIHZhcigtLWRlZXBsaWItYm9yZGVyLXdpZHRoKTtcbn1cblxuLmRlZXBsaWItcHJldi1uZXh0IHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBnYXA6IG1pbigyZHZoLCAxZHZ3KTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZGVlcGxpYi1lbGVtZW50LWNvbG9yKTtcbiAgY29sb3I6IHZhcigtLWRlZXBsaWItdGV4dC1jb2xvcik7XG4gIGJvcmRlci1yYWRpdXM6IG1pbigxLjBkdmgsIDAuNWR2dyk7XG4gIGJvcmRlcjogbWluKDAuMnZoLCAwLjF2dykgc29saWQgdmFyKC0tZGVlcGxpYi1ib3JkZXItY29sb3IpO1xuXG4gIC5kZWVwbGliLXByZXYtbmV4dC1idXR0b24ge1xuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZGVlcGxpYi1lbGVtZW50LWhvdmVyLWNvbG9yKTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWRlZXBsaWItYm9yZGVyLXJhZGl1cyk7XG4gICAgfVxuICAgIFxuICAgIGhlaWdodDogMTAwJTtcbiAgICBhc3BlY3QtcmF0aW86IDE7XG4gIH1cblxuICAuZGVlcGxpYi1wcmV2LW5leHQtbGFiZWwge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIH1cbn1cblxuI2RlZXBsaWItbmF2LW1lbnUge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBnYXA6IG1pbigyZHZoLCAxZHZ3KTtcbn1cblxuI2RlZXBsaWItc3RvcmFnZS1tZXRlciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwcHg7XG4gIGxlZnQ6IDBweDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZGVlcGxpYi1lbGVtZW50LWNvbG9yKTtcbiAgYm9yZGVyOiB2YXIoLS1kZWVwbGliLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tZGVlcGxpYi1ib3JkZXItY29sb3IpO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1kZWVwbGliLWJvcmRlci1yYWRpdXMpO1xuICB6LWluZGV4OiAtMTtcbn1cblxuI2RlZXBsaWItc3RvcmFnZS1iYXIge1xuICBoZWlnaHQ6IDEwMCU7XG4gIHdpZHRoOiAwJTtcbiAgYmFja2dyb3VuZDogdmFyKC0tZGVlcGxpYi1hY2NlbnQtY29sb3IpO1xufVxuIiwiLmRlZXBsaWItY2hlY2tib3gtY29udGFpbmVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiAwLjNlbTtcbn1cblxuLmRlZXBsaWItY2hlY2tib3gtY29udGFpbmVyIGlucHV0LmRlZXBsaWItaW5wdXQge1xuICB3aWR0aDogbWluKDV2aCwgMi41dncpO1xuICBoZWlnaHQ6IG1pbig1dmgsIDIuNXZ3KTtcbiAgd2lkdGg6IG1pbig1ZHZoLCAyLjVkdncpO1xuICBoZWlnaHQ6IG1pbig1ZHZoLCAyLjVkdncpO1xuICBib3JkZXItcmFkaXVzOiBtaW4oMS4wdmgsIDAuNXZ3KTtcbiAgYm9yZGVyLXJhZGl1czogbWluKDEuMGR2aCwgMC41ZHZ3KTtcbn1cblxuLmRlZXBsaWItY2hlY2tib3gtY29udGFpbmVyIGlucHV0LmRlZXBsaWItaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdOmNoZWNrZWQ6OmJlZm9yZSB7XG4gIHdpZHRoOiA4MCU7XG4gIGhlaWdodDogODAlO1xufVxuXG4uZGVlcGxpYi1pbnB1dC1jb250YWluZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDAuM2VtO1xufVxuXG4uZGVlcGxpYi1pbnB1dC1jb250YWluZXI6aGFzKGxhYmVsLmRlZXBsaWItdGV4dCkge1xuICBtYXJnaW4tdG9wOiBtaW4oMXZoLCAwLjV2dyk7XG4gIG1hcmdpbi10b3A6IG1pbigxZHZoLCAwLjVkdncpO1xufVxuXG4uZGVlcGxpYi1pbnB1dC1jb250YWluZXIgaW5wdXQuZGVlcGxpYi1pbnB1dCB7XG4gIGZvbnQtc2l6ZTogMC42ZW07XG4gIHBhZGRpbmc6IG1pbigxdmgsIDAuNXZ3KTtcbiAgcGFkZGluZzogbWluKDFkdmgsIDAuNWR2dyk7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBvdXRsaW5lOiBub25lO1xuICBtaW4taGVpZ2h0OiBtaW4oNXZoLCAyLjV2dyk7XG4gIG1pbi1oZWlnaHQ6IG1pbig1ZHZoLCAyLjVkdncpO1xuICBib3JkZXItcmFkaXVzOiBtaW4oMS4wdmgsIDAuNXZ3KTtcbiAgYm9yZGVyLXJhZGl1czogbWluKDEuMGR2aCwgMC41ZHZ3KTtcbn1cblxuLmRlZXBsaWItaW5wdXQtY29udGFpbmVyIGlucHV0LmRlZXBsaWItaW5wdXRbdHlwZT1cImNvbG9yXCJdIHtcbiAgcGFkZGluZzogMHB4O1xuICB3aWR0aDogbWluKDV2aCwgMi41dncpO1xuICBoZWlnaHQ6IG1pbig1dmgsIDIuNXZ3KTtcbiAgd2lkdGg6IG1pbig1ZHZoLCAyLjVkdncpO1xuICBoZWlnaHQ6IG1pbig1ZHZoLCAyLjVkdncpO1xuICBib3JkZXItcmFkaXVzOiAwcHg7XG59XG5cbi5kZWVwbGliLWlucHV0LWNvbnRhaW5lciBpbnB1dC5kZWVwbGliLWlucHV0W3R5cGU9XCJjb2xvclwiXTpkaXNhYmxlZCB7XG4gIGJvcmRlcjogdmFyKC0tZGVlcGxpYi1ibG9ja2VkLWNvbG9yKSBzb2xpZCB2YXIoLS1kZWVwbGliLWJvcmRlci13aWR0aCk7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG5cbi5kZWVwbGliLWRyb3Bkb3duLWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogbWluKDJ2aCwgMXZ3KTtcbiAgZ2FwOiBtaW4oMmR2aCwgMWR2dyk7XG4gIGNvbG9yOiB2YXIoLS1kZWVwbGliLXRleHQtY29sb3IpO1xuXG4gIHNlbGVjdCB7XG4gICAgcGFkZGluZzogMCBtaW4oMXZoLCAwLjV2dyk7XG4gICAgcGFkZGluZzogMCBtaW4oMWR2aCwgMC41ZHZ3KTtcbiAgICBib3JkZXItcmFkaXVzOiBtaW4oMXZoLCAwLjV2dyk7XG4gICAgYm9yZGVyLXJhZGl1czogbWluKDFkdmgsIDAuNWR2dyk7XG4gIH1cbn0iLCIuZGVlcGxpYi1oaWdobGlnaHQtdGV4dCB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBjb2xvcjogcmdiKDIwMywgMTg1LCAyMyk7XG59XG5cbiNUZXh0QXJlYUNoYXRMb2dbZGF0YS1jb2xvcnRoZW1lPSdkYXJrJ10gZGl2LkNoYXRNZXNzYWdlLmRlZXBsaWItbWVzc2FnZSxcbiNUZXh0QXJlYUNoYXRMb2dbZGF0YS1jb2xvcnRoZW1lPSdkYXJrMiddIGRpdi5DaGF0TWVzc2FnZS5kZWVwbGliLW1lc3NhZ2Uge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1kZWVwbGliLWVsZW1lbnQtY29sb3IpO1xuICBib3JkZXI6IG1pbigwLjJkdmgsIDAuMWR2dykgc29saWQgdmFyKC0tZGVlcGxpYi1ib3JkZXItY29sb3IpO1xuICBjb2xvcjogdmFyKC0tZGVlcGxpYi10ZXh0LWNvbG9yKTtcbn1cblxuI1RleHRBcmVhQ2hhdExvZyBkaXYuQ2hhdE1lc3NhZ2UuZGVlcGxpYi1tZXNzYWdlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTtcbiAgYm9yZGVyOiBtaW4oMC4yZHZoLCAwLjFkdncpIHNvbGlkICM0NDAxNzE7XG4gIGNvbG9yOiAjMTExO1xuICBwYWRkaW5nLWxlZnQ6IG1pbigwLjZkdmgsIDAuM2R2dyk7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xufVxuXG4jVGV4dEFyZWFDaGF0TG9nW2RhdGEtY29sb3J0aGVtZT0nZGFyayddIGRpdi5DaGF0TWVzc2FnZS5kZWVwbGliLW1lc3NhZ2UgYSxcbiNUZXh0QXJlYUNoYXRMb2dbZGF0YS1jb2xvcnRoZW1lPSdkYXJrMiddIGRpdi5DaGF0TWVzc2FnZS5kZWVwbGliLW1lc3NhZ2UgYSB7XG4gIGNvbG9yOiB2YXIoLS1kZWVwbGliLXRleHQtY29sb3IpO1xufVxuXG4jVGV4dEFyZWFDaGF0TG9nIGRpdi5DaGF0TWVzc2FnZS5kZWVwbGliLW1lc3NhZ2UgYSB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGNvbG9yOiAjMTExO1xufVxuIiwiLmRlZXBsaWItbW9kYWwge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMTAlO1xuICBsZWZ0OiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgei1pbmRleDogMTAwMTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogMC41ZW07XG4gIHdpZHRoOiBtYXgoNTBkdncsIDI1ZHZoKTtcbiAgZm9udC1zaXplOiBtaW4oNGR2aCwgMmR2dyk7XG4gIHBhZGRpbmc6IG1pbigyZHZoLCAxZHZ3KTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZGVlcGxpYi1lbGVtZW50LWNvbG9yKTtcbiAgYm9yZGVyLXJhZGl1czogbWluKDEuMmR2aCwgMC42ZHZ3KTtcbiAgYm9yZGVyOiBtaW4oMC4yZHZoLCAwLjFkdncpIHNvbGlkIHZhcigtLWRlZXBsaWItYm9yZGVyLWNvbG9yKTtcbiAgY29sb3I6IHZhcigtLWRlZXBsaWItdGV4dC1jb2xvcik7XG5cbiAgLmRlZXBsaWItbW9kYWwtaW5wdXQge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGZvbnQtc2l6ZTogbWluKDIuNmR2aCwgMS44ZHZ3KTtcbiAgICBib3JkZXItcmFkaXVzOiBtaW4oMS4wZHZoLCAwLjVkdncpO1xuICAgIHBhZGRpbmc6IG1pbigxZHZoLCAwLjVkdncpO1xuICB9XG5cbiAgaW5wdXQuZGVlcGxpYi1tb2RhbC1pbnB1dCB7XG4gICAgbWF4LXdpZHRoOiBtYXgoNTBkdmgsIDI1ZHZ3KTtcbiAgfVxuXG4gIC5kZWVwbGliLW1vZGFsLWJ1dHRvbi1jb250YWluZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAgIGdhcDogMC41ZW07XG4gICAgd2lkdGg6IDEwMCU7XG5cbiAgICAuZGVlcGxpYi1idXR0b24ge1xuICAgICAgZm9udC1zaXplOiAwLjhlbTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICB3aWR0aDogYXV0bztcbiAgICAgIHBhZGRpbmc6IG1pbigwLjR2aCwgMC4ydncpIG1pbigydmgsIDF2dyk7XG5cbiAgICAgIC5idXR0b24tbGFiZWwge1xuICAgICAgICBkaXNwbGF5OiBjb250ZW50cztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuZGVlcGxpYi1tb2RhbC1wcm9tcHQtY29udGFpbmVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgfVxufVxuXG4uZGVlcGxpYi1tb2RhbC1ibG9ja2VyIHtcbiAgei1pbmRleDogMTAwMDtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDBkdnc7XG4gIGhlaWdodDogMTAwZHZoO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNSk7XG59XG4iXX0= */`;
|
|
942
|
+
/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiL21udC9zaGluZG93cy9TdHVmZi9Db2RlL2JjL0JDLURlZXBMaWIvc3JjL3N0eWxlcyIsInNvdXJjZXMiOlsidmFycy5zY3NzIiwiYnV0dG9ucy5zY3NzIiwiZWxlbWVudHMuc2NzcyIsImlucHV0cy5zY3NzIiwibWVzc2FnZXMuc2NzcyIsIm1vZGFsLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtFQUVFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7QUNkRjtFQUNFO0VBQ0E7RUFDQTs7O0FBR0Y7QUFBQTtFQUVFOzs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFFQTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7OztBQUdGO0VBQ0U7RUFDQTtFQUNBOzs7QUFHRjtFQUNFOzs7QUMzQ0Y7RUFDRTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTs7O0FBR0Y7RUFDRTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0FBR0U7RUFDRTtFQUNBOztBQUhKO0VBTUU7RUFDQTs7QUFHRjtFQUNFOzs7QUFJSjtFQUNFO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7OztBQ3pHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7OztBQUdGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0Y7RUFDRTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNFO0VBQ0E7RUFDQTtFQUNBOzs7QUN2RUo7RUFDRTtFQUNBOzs7QUFHRjtBQUFBO0VBRUU7RUFDQTtFQUNBOzs7QUFHRjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7O0FBR0Y7QUFBQTtFQUVFOzs7QUFHRjtFQUNFO0VBQ0E7RUFDQTs7O0FDN0JGO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNFO0VBQ0E7RUFDQTtFQUNBOztBQUdGO0VBQ0U7O0FBR0Y7RUFDRTtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBQUVBO0VBQ0U7RUFDQTtFQUNBO0VBQ0E7O0FBRUE7RUFDRTs7QUFLTjtFQUNFO0VBQ0E7RUFDQTtFQUNBOzs7QUFJSjtFQUNFO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBIiwic291cmNlc0NvbnRlbnQiOlsiLmRlZXBsaWItc3Vic2NyZWVuLFxuLmRlZXBsaWItbW9kYWwge1xuICAtLWRlZXBsaWItYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tdG1kLW1haW4sIHdoaXRlKTtcbiAgLS1kZWVwbGliLWVsZW1lbnQtY29sb3I6IHZhcigtLXRtZC1lbGVtZW50LCB3aGl0ZSk7XG4gIC0tZGVlcGxpYi1lbGVtZW50LWhvdmVyLWNvbG9yOiB2YXIoLS10bWQtZWxlbWVudC1ob3ZlciwgY3lhbik7XG4gIC0tZGVlcGxpYi1hY2NlbnQtY29sb3I6IHZhcigtLXRtZC1hY2NlbnQsICNGRkZGODgpO1xuICAtLWRlZXBsaWItYmxvY2tlZC1jb2xvcjogdmFyKC0tdG1kLWJsb2NrZWQsIHJlZCk7XG4gIC0tZGVlcGxpYi10ZXh0LWNvbG9yOiB2YXIoLS10bWQtdGV4dCwgYmxhY2spO1xuICAtLWRlZXBsaWItaWNvbi1jb2xvcjogdmFyKC0tdG1kLWFjY2VudCwgYmxhY2spO1xuICAtLWRlZXBsaWItaWNvbi1ob3Zlci1jb2xvcjogdmFyKC0tdG1kLWFjY2VudC1ob3ZlciwgYmxhY2spO1xuICAtLWRlZXBsaWItYm9yZGVyLWNvbG9yOiB2YXIoLS10bWQtYWNjZW50LCBibGFjayk7XG4gIC0tZGVlcGxpYi1ib3JkZXItd2lkdGg6IG1pbigwLjJ2aCwgMC4xdncpO1xuICAtLWRlZXBsaWItYm9yZGVyLXdpZHRoOiBtaW4oMC4yZHZoLCAwLjFkdncpO1xuICAtLWRlZXBsaWItYm9yZGVyLXJhZGl1czogbWluKDF2aCwgMC41dncpO1xuICAtLWRlZXBsaWItYm9yZGVyLXJhZGl1czogbWluKDFkdmgsIDAuNWR2dyk7XG59XG4iLCIuZGVlcGxpYi1idXR0b24ge1xuICBjb2xvcjogdmFyKC0tZGVlcGxpYi10ZXh0LWNvbG9yKTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbn1cblxuLmRlZXBsaWItYnV0dG9uLmJ1dHRvbi1zdHlsaW5nLFxuLmRlZXBsaWItYnV0dG9uLmJ1dHRvbi1zdHlsaW5nOjpiZWZvcmUge1xuICBib3JkZXItcmFkaXVzOiBtaW4oMS4wZHZoLCAwLjVkdncpO1xufVxuXG4uZGVlcGxpYi1idXR0b24gaW1nIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDAlO1xuICBsZWZ0OiAwJTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdDtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZGVlcGxpYi1pY29uLWNvbG9yKTtcbiAgYmFja2dyb3VuZC1ibGVuZC1tb2RlOiBtdWx0aXBseTtcbiAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xuICBtYXNrLXBvc2l0aW9uOiBsZWZ0O1xuICBtYXNrLXNpemU6IGNvbnRhaW47XG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gIG1hc2stcmVwZWF0OiBuby1yZXBlYXQ7XG4gIGNvbG9yOiB0cmFuc3BhcmVudDtcblxuICBiYWNrZ3JvdW5kLWltYWdlOiB2YXIoLS1pbWFnZSk7XG4gIG1hc2staW1hZ2U6IHZhcigtLWltYWdlKTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi5kZWVwbGliLWJ1dHRvbjpob3ZlciBpbWcge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1kZWVwbGliLWljb24taG92ZXItY29sb3IpO1xufVxuXG4uZGVlcGxpYi1idXR0b24gLmJ1dHRvbi1sYWJlbCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG4gIGNvbG9yOiB2YXIoLS1kZWVwbGliLXRleHQtY29sb3IpO1xuICBmb250LXNpemU6IG1pbigzLjZkdmgsIDEuOGR2dyk7XG59XG5cbi5kZWVwbGliLWJ1dHRvbiAuYnV0dG9uLXRvb2x0aXAge1xuICBib3JkZXItcmFkaXVzOiBtaW4oMS4wZHZoLCAwLjVkdncpO1xufVxuIiwiI2RlZXBsaWItcGFnZS1sYWJlbCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuXG4jZGVlcGxpYi1zdWJzY3JlZW4tdGl0bGUge1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBjb2xvcjogdmFyKC0tZGVlcGxpYi10ZXh0LWNvbG9yKTtcbn1cblxuLmRlZXBsaWItdGV4dCB7XG4gIGNvbG9yOiB2YXIoLS1kZWVwbGliLXRleHQtY29sb3IpO1xufVxuXG4uZGVlcGxpYi1zdWJzY3JlZW4ge1xuICBwYWRkaW5nOiAwO1xuICBtYXJnaW46IDA7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG4uZGVlcGxpYi1zdWJzY3JlZW4gKiB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHBvaW50ZXItZXZlbnRzOiBhbGw7XG59XG5cbi5kZWVwbGliLXNldHRpbmdzIHtcbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC1hdXRvLXJvd3M6IG1pbi1jb250ZW50O1xuICBwYWRkaW5nOiBtaW4oMS4wZHZoLCAwLjVkdncpO1xuICBnYXA6IDAuM2VtO1xufVxuXG4uZGVlcGxpYi1taXNjIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xuICBnYXA6IG1pbigxdmgsIDAuNXZ3KTtcbn1cblxuLmRlZXBsaWItdG9vbHRpcCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWRlZXBsaWItZWxlbWVudC1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1kZWVwbGliLXRleHQtY29sb3IpO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYm9yZGVyLXJhZGl1czogbWluKDEuMGR2aCwgMC41ZHZ3KTtcbiAgcGFkZGluZzogbWluKDF2aCwgMC41dncpO1xuICBmb250LXNpemU6IDAuOGVtO1xuICBib3JkZXI6IG1pbigwLjJ2aCwgMC4xdncpIHNvbGlkIHZhcigtLWRlZXBsaWItYm9yZGVyLWNvbG9yKTtcbiAgei1pbmRleDogMTtcbn1cblxuLmRlZXBsaWItb3ZlcmZsb3ctYm94IHtcbiAgYm9yZGVyOiB2YXIoLS1kZWVwbGliLWJvcmRlci1jb2xvcikgc29saWQgdmFyKC0tZGVlcGxpYi1ib3JkZXItd2lkdGgpO1xufVxuXG4uZGVlcGxpYi1wcmV2LW5leHQge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGdhcDogbWluKDJkdmgsIDFkdncpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1kZWVwbGliLWVsZW1lbnQtY29sb3IpO1xuICBjb2xvcjogdmFyKC0tZGVlcGxpYi10ZXh0LWNvbG9yKTtcbiAgYm9yZGVyLXJhZGl1czogbWluKDEuMGR2aCwgMC41ZHZ3KTtcbiAgYm9yZGVyOiBtaW4oMC4ydmgsIDAuMXZ3KSBzb2xpZCB2YXIoLS1kZWVwbGliLWJvcmRlci1jb2xvcik7XG5cbiAgLmRlZXBsaWItcHJldi1uZXh0LWJ1dHRvbiB7XG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1kZWVwbGliLWVsZW1lbnQtaG92ZXItY29sb3IpO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tZGVlcGxpYi1ib3JkZXItcmFkaXVzKTtcbiAgICB9XG4gICAgXG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGFzcGVjdC1yYXRpbzogMTtcbiAgfVxuXG4gIC5kZWVwbGliLXByZXYtbmV4dC1sYWJlbCB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgfVxufVxuXG4jZGVlcGxpYi1uYXYtbWVudSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGdhcDogbWluKDJkdmgsIDFkdncpO1xufVxuXG4jZGVlcGxpYi1zdG9yYWdlLW1ldGVyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDBweDtcbiAgbGVmdDogMHB4O1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1kZWVwbGliLWVsZW1lbnQtY29sb3IpO1xuICBib3JkZXI6IHZhcigtLWRlZXBsaWItYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1kZWVwbGliLWJvcmRlci1jb2xvcik7XG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWRlZXBsaWItYm9yZGVyLXJhZGl1cyk7XG4gIHotaW5kZXg6IC0xO1xufVxuXG4jZGVlcGxpYi1zdG9yYWdlLWJhciB7XG4gIGhlaWdodDogMTAwJTtcbiAgd2lkdGg6IDAlO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1kZWVwbGliLWFjY2VudC1jb2xvcik7XG59XG4iLCIuZGVlcGxpYi1jaGVja2JveC1jb250YWluZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDAuM2VtO1xufVxuXG4uZGVlcGxpYi1jaGVja2JveC1jb250YWluZXIgaW5wdXQuZGVlcGxpYi1pbnB1dCB7XG4gIHdpZHRoOiBtaW4oNXZoLCAyLjV2dyk7XG4gIGhlaWdodDogbWluKDV2aCwgMi41dncpO1xuICB3aWR0aDogbWluKDVkdmgsIDIuNWR2dyk7XG4gIGhlaWdodDogbWluKDVkdmgsIDIuNWR2dyk7XG4gIGJvcmRlci1yYWRpdXM6IG1pbigxLjB2aCwgMC41dncpO1xuICBib3JkZXItcmFkaXVzOiBtaW4oMS4wZHZoLCAwLjVkdncpO1xufVxuXG4uZGVlcGxpYi1jaGVja2JveC1jb250YWluZXIgaW5wdXQuZGVlcGxpYi1pbnB1dFt0eXBlPVwiY2hlY2tib3hcIl06Y2hlY2tlZDo6YmVmb3JlIHtcbiAgd2lkdGg6IDgwJTtcbiAgaGVpZ2h0OiA4MCU7XG59XG5cbi5kZWVwbGliLWlucHV0LWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogMC4zZW07XG59XG5cbi5kZWVwbGliLWlucHV0LWNvbnRhaW5lcjpoYXMobGFiZWwuZGVlcGxpYi10ZXh0KSB7XG4gIG1hcmdpbi10b3A6IG1pbigxdmgsIDAuNXZ3KTtcbiAgbWFyZ2luLXRvcDogbWluKDFkdmgsIDAuNWR2dyk7XG59XG5cbi5kZWVwbGliLWlucHV0LWNvbnRhaW5lciBpbnB1dC5kZWVwbGliLWlucHV0IHtcbiAgZm9udC1zaXplOiAwLjZlbTtcbiAgcGFkZGluZzogbWluKDF2aCwgMC41dncpO1xuICBwYWRkaW5nOiBtaW4oMWR2aCwgMC41ZHZ3KTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIG91dGxpbmU6IG5vbmU7XG4gIG1pbi1oZWlnaHQ6IG1pbig1dmgsIDIuNXZ3KTtcbiAgbWluLWhlaWdodDogbWluKDVkdmgsIDIuNWR2dyk7XG4gIGJvcmRlci1yYWRpdXM6IG1pbigxLjB2aCwgMC41dncpO1xuICBib3JkZXItcmFkaXVzOiBtaW4oMS4wZHZoLCAwLjVkdncpO1xufVxuXG4uZGVlcGxpYi1pbnB1dC1jb250YWluZXIgaW5wdXQuZGVlcGxpYi1pbnB1dFt0eXBlPVwiY29sb3JcIl0ge1xuICBwYWRkaW5nOiAwcHg7XG4gIHdpZHRoOiBtaW4oNXZoLCAyLjV2dyk7XG4gIGhlaWdodDogbWluKDV2aCwgMi41dncpO1xuICB3aWR0aDogbWluKDVkdmgsIDIuNWR2dyk7XG4gIGhlaWdodDogbWluKDVkdmgsIDIuNWR2dyk7XG4gIGJvcmRlci1yYWRpdXM6IDBweDtcbn1cblxuLmRlZXBsaWItaW5wdXQtY29udGFpbmVyIGlucHV0LmRlZXBsaWItaW5wdXRbdHlwZT1cImNvbG9yXCJdOmRpc2FibGVkIHtcbiAgYm9yZGVyOiB2YXIoLS1kZWVwbGliLWJsb2NrZWQtY29sb3IpIHNvbGlkIHZhcigtLWRlZXBsaWItYm9yZGVyLXdpZHRoKTtcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbn1cblxuLmRlZXBsaWItZHJvcGRvd24tY29udGFpbmVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiBtaW4oMnZoLCAxdncpO1xuICBnYXA6IG1pbigyZHZoLCAxZHZ3KTtcbiAgY29sb3I6IHZhcigtLWRlZXBsaWItdGV4dC1jb2xvcik7XG5cbiAgc2VsZWN0IHtcbiAgICBwYWRkaW5nOiAwIG1pbigxdmgsIDAuNXZ3KTtcbiAgICBwYWRkaW5nOiAwIG1pbigxZHZoLCAwLjVkdncpO1xuICAgIGJvcmRlci1yYWRpdXM6IG1pbigxdmgsIDAuNXZ3KTtcbiAgICBib3JkZXItcmFkaXVzOiBtaW4oMWR2aCwgMC41ZHZ3KTtcbiAgfVxufSIsIi5kZWVwbGliLWhpZ2hsaWdodC10ZXh0IHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGNvbG9yOiByZ2IoMjAzLCAxODUsIDIzKTtcbn1cblxuI1RleHRBcmVhQ2hhdExvZ1tkYXRhLWNvbG9ydGhlbWU9J2RhcmsnXSBkaXYuQ2hhdE1lc3NhZ2UuZGVlcGxpYi1tZXNzYWdlLFxuI1RleHRBcmVhQ2hhdExvZ1tkYXRhLWNvbG9ydGhlbWU9J2RhcmsyJ10gZGl2LkNoYXRNZXNzYWdlLmRlZXBsaWItbWVzc2FnZSB7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWRlZXBsaWItZWxlbWVudC1jb2xvcik7XG4gIGJvcmRlcjogbWluKDAuMmR2aCwgMC4xZHZ3KSBzb2xpZCB2YXIoLS1kZWVwbGliLWJvcmRlci1jb2xvcik7XG4gIGNvbG9yOiB2YXIoLS1kZWVwbGliLXRleHQtY29sb3IpO1xufVxuXG4jVGV4dEFyZWFDaGF0TG9nIGRpdi5DaGF0TWVzc2FnZS5kZWVwbGliLW1lc3NhZ2Uge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlO1xuICBib3JkZXI6IG1pbigwLjJkdmgsIDAuMWR2dykgc29saWQgIzQ0MDE3MTtcbiAgY29sb3I6ICMxMTE7XG4gIHBhZGRpbmctbGVmdDogbWluKDAuNmR2aCwgMC4zZHZ3KTtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XG59XG5cbiNUZXh0QXJlYUNoYXRMb2dbZGF0YS1jb2xvcnRoZW1lPSdkYXJrJ10gZGl2LkNoYXRNZXNzYWdlLmRlZXBsaWItbWVzc2FnZSBhLFxuI1RleHRBcmVhQ2hhdExvZ1tkYXRhLWNvbG9ydGhlbWU9J2RhcmsyJ10gZGl2LkNoYXRNZXNzYWdlLmRlZXBsaWItbWVzc2FnZSBhIHtcbiAgY29sb3I6IHZhcigtLWRlZXBsaWItdGV4dC1jb2xvcik7XG59XG5cbiNUZXh0QXJlYUNoYXRMb2cgZGl2LkNoYXRNZXNzYWdlLmRlZXBsaWItbWVzc2FnZSBhIHtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgY29sb3I6ICMxMTE7XG59XG4iLCIuZGVlcGxpYi1tb2RhbCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAxMCU7XG4gIGxlZnQ6IDUwJTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICB6LWluZGV4OiAxMDAxO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiAwLjVlbTtcbiAgd2lkdGg6IG1heCg1MGR2dywgMjVkdmgpO1xuICBmb250LXNpemU6IG1pbig0ZHZoLCAyZHZ3KTtcbiAgcGFkZGluZzogbWluKDJkdmgsIDFkdncpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1kZWVwbGliLWVsZW1lbnQtY29sb3IpO1xuICBib3JkZXItcmFkaXVzOiBtaW4oMS4yZHZoLCAwLjZkdncpO1xuICBib3JkZXI6IG1pbigwLjJkdmgsIDAuMWR2dykgc29saWQgdmFyKC0tZGVlcGxpYi1ib3JkZXItY29sb3IpO1xuICBjb2xvcjogdmFyKC0tZGVlcGxpYi10ZXh0LWNvbG9yKTtcblxuICAuZGVlcGxpYi1tb2RhbC1pbnB1dCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgZm9udC1zaXplOiBtaW4oMi42ZHZoLCAxLjhkdncpO1xuICAgIGJvcmRlci1yYWRpdXM6IG1pbigxLjBkdmgsIDAuNWR2dyk7XG4gICAgcGFkZGluZzogbWluKDFkdmgsIDAuNWR2dyk7XG4gIH1cblxuICBpbnB1dC5kZWVwbGliLW1vZGFsLWlucHV0IHtcbiAgICBtYXgtd2lkdGg6IG1heCg1MGR2aCwgMjVkdncpO1xuICB9XG5cbiAgLmRlZXBsaWItbW9kYWwtYnV0dG9uLWNvbnRhaW5lciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgZ2FwOiAwLjVlbTtcbiAgICB3aWR0aDogMTAwJTtcblxuICAgIC5kZWVwbGliLWJ1dHRvbiB7XG4gICAgICBmb250LXNpemU6IDAuOGVtO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIHdpZHRoOiBhdXRvO1xuICAgICAgcGFkZGluZzogbWluKDAuNHZoLCAwLjJ2dykgbWluKDJ2aCwgMXZ3KTtcblxuICAgICAgLmJ1dHRvbi1sYWJlbCB7XG4gICAgICAgIGRpc3BsYXk6IGNvbnRlbnRzO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5kZWVwbGliLW1vZGFsLXByb21wdC1jb250YWluZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICB9XG59XG5cbi5kZWVwbGliLW1vZGFsLWJsb2NrZXIge1xuICB6LWluZGV4OiAxMDAwO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMGR2dztcbiAgaGVpZ2h0OiAxMDBkdmg7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTtcbn1cbiJdfQ== */`;
|
|
932
943
|
|
|
933
944
|
// src/base/initialization.ts
|
|
934
945
|
var modStorage;
|
|
935
946
|
var sdk;
|
|
947
|
+
var logger;
|
|
936
948
|
function initMod(options) {
|
|
937
949
|
sdk = new ModSdkManager(options.modInfo.info, options.modInfo.options);
|
|
938
950
|
const MOD_NAME = ModSdkManager.ModInfo.name;
|
|
939
951
|
modStorage = new ModStorage(ModSdkManager.ModInfo.name);
|
|
952
|
+
logger = new Logger(MOD_NAME);
|
|
940
953
|
Style.injectInline("deeplib-style", styles_default);
|
|
941
|
-
|
|
954
|
+
logger.debug("Init wait");
|
|
942
955
|
if (CurrentScreen == null || CurrentScreen === "Login") {
|
|
943
956
|
options.beforeLogin?.();
|
|
944
957
|
const removeHook = sdk.hookFunction("LoginResponse", 0, (args, next) => {
|
|
945
|
-
|
|
958
|
+
logger.debug("Init! LoginResponse caught: ", args);
|
|
946
959
|
next(args);
|
|
947
960
|
const response = args[0];
|
|
948
961
|
if (response === "InvalidNamePassword") return next(args);
|
|
@@ -952,7 +965,7 @@ function initMod(options) {
|
|
|
952
965
|
}
|
|
953
966
|
});
|
|
954
967
|
} else {
|
|
955
|
-
|
|
968
|
+
logger.debug(`Already logged in, initing ${MOD_NAME}`);
|
|
956
969
|
init(options);
|
|
957
970
|
}
|
|
958
971
|
}
|
|
@@ -967,11 +980,6 @@ async function init(options) {
|
|
|
967
980
|
unloadMod();
|
|
968
981
|
return;
|
|
969
982
|
}
|
|
970
|
-
if (options.migrators) {
|
|
971
|
-
for (const m of options.migrators) {
|
|
972
|
-
VersionModule.registerMigrator(m);
|
|
973
|
-
}
|
|
974
|
-
}
|
|
975
983
|
await options.initFunction?.();
|
|
976
984
|
if (options.mainMenuOptions)
|
|
977
985
|
MainMenu.setOptions(options.mainMenuOptions);
|
|
@@ -982,11 +990,10 @@ async function init(options) {
|
|
|
982
990
|
}
|
|
983
991
|
}
|
|
984
992
|
window[MOD_NAME + "Loaded"] = true;
|
|
985
|
-
|
|
993
|
+
logger.log(`Loaded! Version: ${MOD_VERSION}`);
|
|
986
994
|
}
|
|
987
995
|
__name(init, "init");
|
|
988
996
|
function initModules(modulesToRegister) {
|
|
989
|
-
const MOD_NAME = ModSdkManager.ModInfo.name;
|
|
990
997
|
for (const module of modulesToRegister) {
|
|
991
998
|
registerModule(module);
|
|
992
999
|
}
|
|
@@ -999,7 +1006,7 @@ function initModules(modulesToRegister) {
|
|
|
999
1006
|
for (const module of modules()) {
|
|
1000
1007
|
module.run();
|
|
1001
1008
|
}
|
|
1002
|
-
|
|
1009
|
+
logger.debug("Modules Loaded.");
|
|
1003
1010
|
return true;
|
|
1004
1011
|
}
|
|
1005
1012
|
__name(initModules, "initModules");
|
|
@@ -1007,7 +1014,7 @@ function unloadMod() {
|
|
|
1007
1014
|
const MOD_NAME = ModSdkManager.ModInfo.name;
|
|
1008
1015
|
unloadModules();
|
|
1009
1016
|
delete window[MOD_NAME + "Loaded"];
|
|
1010
|
-
|
|
1017
|
+
logger.debug("Unloaded.");
|
|
1011
1018
|
return true;
|
|
1012
1019
|
}
|
|
1013
1020
|
__name(unloadMod, "unloadMod");
|
|
@@ -1035,7 +1042,7 @@ function getModule(moduleType) {
|
|
|
1035
1042
|
__name(getModule, "getModule");
|
|
1036
1043
|
|
|
1037
1044
|
// src/migrators/base_migrator.ts
|
|
1038
|
-
var
|
|
1045
|
+
var BaseMigrator = class {
|
|
1039
1046
|
static {
|
|
1040
1047
|
__name(this, "BaseMigrator");
|
|
1041
1048
|
}
|
|
@@ -1120,21 +1127,20 @@ var VersionModule = class _VersionModule extends BaseModule {
|
|
|
1120
1127
|
static isItNewVersion = false;
|
|
1121
1128
|
/** The current mod version (retrieved from `ModSdkManager.ModInfo.version`) */
|
|
1122
1129
|
static version;
|
|
1123
|
-
/** Message to display when a new version is detected */
|
|
1124
1130
|
static newVersionMessage = "";
|
|
1125
1131
|
/** List of registered migration handlers, sorted by version */
|
|
1126
1132
|
static migrators = [];
|
|
1127
|
-
/** Optional lifecycle hook. Runs before each migration */
|
|
1128
1133
|
static beforeEach;
|
|
1129
|
-
/** Optional lifecycle hook. Runs after each migration */
|
|
1130
1134
|
static afterEach;
|
|
1131
|
-
/** Optional lifecycle hook. Runs before all migrations */
|
|
1132
1135
|
static beforeAll;
|
|
1133
|
-
/** Optional lifecycle hook. Runs after all migrations */
|
|
1134
1136
|
static afterAll;
|
|
1135
1137
|
constructor(options) {
|
|
1136
1138
|
super();
|
|
1137
1139
|
_VersionModule.newVersionMessage = options.newVersionMessage;
|
|
1140
|
+
if (options.migrators) {
|
|
1141
|
+
_VersionModule.migrators = options.migrators;
|
|
1142
|
+
_VersionModule.migrators.sort((a, b) => a.migrationVersion.localeCompare(b.migrationVersion));
|
|
1143
|
+
}
|
|
1138
1144
|
_VersionModule.beforeEach = options.beforeEach;
|
|
1139
1145
|
_VersionModule.afterEach = options.afterEach;
|
|
1140
1146
|
_VersionModule.beforeAll = options.beforeAll;
|
|
@@ -1191,14 +1197,6 @@ var VersionModule = class _VersionModule extends BaseModule {
|
|
|
1191
1197
|
}
|
|
1192
1198
|
_VersionModule.afterAll?.();
|
|
1193
1199
|
}
|
|
1194
|
-
/**
|
|
1195
|
-
* Registers a new migrator for handling version-specific changes.
|
|
1196
|
-
* Migrators are sorted by their `MigrationVersion` in ascending order.
|
|
1197
|
-
*/
|
|
1198
|
-
static registerMigrator(migrator) {
|
|
1199
|
-
_VersionModule.migrators.push(migrator);
|
|
1200
|
-
_VersionModule.migrators.sort((a, b) => a.migrationVersion.localeCompare(b.migrationVersion));
|
|
1201
|
-
}
|
|
1202
1200
|
/** Sends the currently configured "new version" message to the local player. */
|
|
1203
1201
|
static sendNewVersionMessage() {
|
|
1204
1202
|
if (!_VersionModule.newVersionMessage) return;
|
|
@@ -2245,7 +2243,7 @@ var MainMenu = class _MainMenu extends BaseSubscreen {
|
|
|
2245
2243
|
PreferenceSubscreenExtensionsClear();
|
|
2246
2244
|
});
|
|
2247
2245
|
} else if (returnScreen instanceof BaseSubscreen) {
|
|
2248
|
-
setSubscreen(returnScreen
|
|
2246
|
+
setSubscreen(returnScreen).then(() => {
|
|
2249
2247
|
});
|
|
2250
2248
|
} else if (Array.isArray(returnScreen)) {
|
|
2251
2249
|
CommonSetScreen(...returnScreen);
|
|
@@ -2260,18 +2258,6 @@ var MainMenu = class _MainMenu extends BaseSubscreen {
|
|
|
2260
2258
|
_MainMenu.options = mainMenuOptions;
|
|
2261
2259
|
}
|
|
2262
2260
|
};
|
|
2263
|
-
async function PreferenceOpenSubscreen(subscreen, page = 1) {
|
|
2264
|
-
if (CurrentModule !== "Character" || CurrentScreen !== "Preference") {
|
|
2265
|
-
await CommonSetScreen("Character", "Preference");
|
|
2266
|
-
}
|
|
2267
|
-
PreferenceSubscreen?.unload?.();
|
|
2268
|
-
PreferenceSubscreen = PreferenceSubscreens.find((s) => s.name === subscreen) ?? null;
|
|
2269
|
-
if (!CommonIsNonNegativeInteger(page)) page = 1;
|
|
2270
|
-
PreferencePageCurrent = page;
|
|
2271
|
-
PreferenceMessage = "";
|
|
2272
|
-
PreferenceSubscreen?.load?.();
|
|
2273
|
-
}
|
|
2274
|
-
__name(PreferenceOpenSubscreen, "PreferenceOpenSubscreen");
|
|
2275
2261
|
|
|
2276
2262
|
// src/screens/import_export.ts
|
|
2277
2263
|
var GuiImportExport = class extends BaseSubscreen {
|
|
@@ -2347,7 +2333,10 @@ var GuiImportExport = class extends BaseSubscreen {
|
|
|
2347
2333
|
if (transferMethod === "clipboard") {
|
|
2348
2334
|
await this.exportToClipboard(data);
|
|
2349
2335
|
} else if (transferMethod === "file") {
|
|
2350
|
-
await this.exportToFile(data, "
|
|
2336
|
+
if (!await this.exportToFile(data, "settings")) {
|
|
2337
|
+
return;
|
|
2338
|
+
}
|
|
2339
|
+
;
|
|
2351
2340
|
}
|
|
2352
2341
|
this.importExportOptions.onExport?.();
|
|
2353
2342
|
ToastManager.success("Data exported successfully.");
|
|
@@ -2372,6 +2361,9 @@ var GuiImportExport = class extends BaseSubscreen {
|
|
|
2372
2361
|
if (!data) {
|
|
2373
2362
|
throw new Error("Invalid data.");
|
|
2374
2363
|
}
|
|
2364
|
+
for (const module of modules()) {
|
|
2365
|
+
module.registerDefaultSettings(data);
|
|
2366
|
+
}
|
|
2375
2367
|
modStorage.playerStorage = data;
|
|
2376
2368
|
this.importExportOptions.onImport?.();
|
|
2377
2369
|
ToastManager.success("Data imported successfully.");
|
|
@@ -2398,13 +2390,14 @@ var GuiImportExport = class extends BaseSubscreen {
|
|
|
2398
2390
|
const writable = await handle.createWritable();
|
|
2399
2391
|
await writable.write(data);
|
|
2400
2392
|
await writable.close();
|
|
2393
|
+
return true;
|
|
2401
2394
|
} catch (error) {
|
|
2402
2395
|
throw new Error("File save cancelled or failed: " + error.message);
|
|
2403
2396
|
}
|
|
2404
2397
|
} else {
|
|
2405
2398
|
const fileName = await Modal.prompt("Enter file name", suggestedName);
|
|
2406
2399
|
if (fileName === null) {
|
|
2407
|
-
return;
|
|
2400
|
+
return false;
|
|
2408
2401
|
} else if (fileName === "") {
|
|
2409
2402
|
throw new Error("File name cannot be empty.");
|
|
2410
2403
|
}
|
|
@@ -2418,6 +2411,7 @@ var GuiImportExport = class extends BaseSubscreen {
|
|
|
2418
2411
|
});
|
|
2419
2412
|
link.click();
|
|
2420
2413
|
URL.revokeObjectURL(link.href);
|
|
2414
|
+
return true;
|
|
2421
2415
|
}
|
|
2422
2416
|
}
|
|
2423
2417
|
/** Opens a file picker and reads the selected file's contents, importing the data. */
|
|
@@ -3139,7 +3133,7 @@ var EventChannel = class {
|
|
|
3139
3133
|
}
|
|
3140
3134
|
};
|
|
3141
3135
|
export {
|
|
3142
|
-
|
|
3136
|
+
BaseMigrator,
|
|
3143
3137
|
BaseModule,
|
|
3144
3138
|
BaseSubscreen,
|
|
3145
3139
|
EventChannel,
|
|
@@ -3168,6 +3162,7 @@ export {
|
|
|
3168
3162
|
hasSetter,
|
|
3169
3163
|
initMod,
|
|
3170
3164
|
layout,
|
|
3165
|
+
logger,
|
|
3171
3166
|
modStorage,
|
|
3172
3167
|
modules,
|
|
3173
3168
|
modulesMap,
|