@openmrs/esm-app-shell 10.0.1-pre.5738 → 10.0.1-pre.5741
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/.turbo/turbo-build.log +3 -3
- package/dist/{a8f8e29e2acde5a1.js → ac7eb7c25df2b462.js} +6 -6
- package/dist/ac7eb7c25df2b462.js.map +1 -0
- package/dist/b54834c7cf00760e.js +1 -0
- package/dist/b54834c7cf00760e.js.map +1 -0
- package/dist/index.html +1 -1
- package/dist/{openmrs.16d3c1ffcdfc8d88.js → openmrs.0e3a1f8710d0dcb3.js} +3 -3
- package/dist/{openmrs.16d3c1ffcdfc8d88.js.map → openmrs.0e3a1f8710d0dcb3.js.map} +1 -1
- package/lib/{055442ffb33ac9cf.js → 8f3676e9cd4dfc66.js} +5 -5
- package/lib/{676ef589eb5f276a.js → a8eb6366799b605a.js} +1 -1
- package/lib/index.html +1 -1
- package/lib/openmrs.js +6 -6
- package/package.json +3 -3
- package/src/locale.test.ts +53 -0
- package/src/locale.ts +65 -4
- package/dist/5d3d1738fa723a2e.js +0 -1
- package/dist/5d3d1738fa723a2e.js.map +0 -1
- package/dist/a8f8e29e2acde5a1.js.map +0 -1
|
@@ -4471,17 +4471,17 @@ eval("{__webpack_require__.r(__webpack_exports__);\n\n\n//# sourceMappingURL=dat
|
|
|
4471
4471
|
},
|
|
4472
4472
|
"../../framework/esm-config/dist/index.js"(__unused_rspack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
4473
4473
|
"use strict";
|
|
4474
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n__webpack_require__.d(__webpack_exports__, {\n Type: () => (/* reexport safe */ _types_js__rspack_import_4.Type),\n clearConfigDerivationError: () => (/* reexport safe */ _module_config_state_js__rspack_import_1.clearConfigDerivationError),\n clearConfigErrors: () => (/* reexport safe */ _module_config_module_config_js__rspack_import_0.clearConfigErrors),\n configExtensionStore: () => (/* reexport safe */ _module_config_state_js__rspack_import_1.configExtensionStore),\n configInternalStore: () => (/* reexport safe */ _module_config_state_js__rspack_import_1.configInternalStore),\n defineConfigSchema: () => (/* reexport safe */ _module_config_module_config_js__rspack_import_0.defineConfigSchema),\n defineExtensionConfigSchema: () => (/* reexport safe */ _module_config_module_config_js__rspack_import_0.defineExtensionConfigSchema),\n getConfig: () => (/* reexport safe */ _module_config_module_config_js__rspack_import_0.getConfig),\n getConfigStore: () => (/* reexport safe */ _module_config_state_js__rspack_import_1.getConfigStore),\n
|
|
4474
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n__webpack_require__.d(__webpack_exports__, {\n Type: () => (/* reexport safe */ _types_js__rspack_import_4.Type),\n clearConfigDerivationError: () => (/* reexport safe */ _module_config_state_js__rspack_import_1.clearConfigDerivationError),\n clearConfigErrors: () => (/* reexport safe */ _module_config_module_config_js__rspack_import_0.clearConfigErrors),\n configExtensionStore: () => (/* reexport safe */ _module_config_state_js__rspack_import_1.configExtensionStore),\n configInternalStore: () => (/* reexport safe */ _module_config_state_js__rspack_import_1.configInternalStore),\n defineConfigSchema: () => (/* reexport safe */ _module_config_module_config_js__rspack_import_0.defineConfigSchema),\n defineExtensionConfigSchema: () => (/* reexport safe */ _module_config_module_config_js__rspack_import_0.defineExtensionConfigSchema),\n getConfig: () => (/* reexport safe */ _module_config_module_config_js__rspack_import_0.getConfig),\n getConfigStore: () => (/* reexport safe */ _module_config_state_js__rspack_import_1.getConfigStore),\n getExtensionConfigFromExtensionSlotStore: () => (/* reexport safe */ _module_config_state_js__rspack_import_1.getExtensionConfigFromExtensionSlotStore),\n getExtensionConfigFromStore: () => (/* reexport safe */ _module_config_state_js__rspack_import_1.getExtensionConfigFromStore),\n getExtensionSlotConfig: () => (/* reexport safe */ _module_config_state_js__rspack_import_1.getExtensionSlotConfig),\n getExtensionSlotConfigFromStore: () => (/* reexport safe */ _module_config_state_js__rspack_import_1.getExtensionSlotConfigFromStore),\n getExtensionSlotsConfigStore: () => (/* reexport safe */ _module_config_state_js__rspack_import_1.getExtensionSlotsConfigStore),\n getExtensionsConfigStore: () => (/* reexport safe */ _module_config_state_js__rspack_import_1.getExtensionsConfigStore),\n getTranslationOverrides: () => (/* reexport safe */ _module_config_module_config_js__rspack_import_0.getTranslationOverrides),\n implementerToolsConfigStore: () => (/* reexport safe */ _module_config_state_js__rspack_import_1.implementerToolsConfigStore),\n inRange: () => (/* reexport safe */ _validators_validators_js__rspack_import_3.inRange),\n invalidateImplementerToolsConfig: () => (/* reexport safe */ _module_config_state_js__rspack_import_1.invalidateImplementerToolsConfig),\n isUrl: () => (/* reexport safe */ _validators_validators_js__rspack_import_3.isUrl),\n isUrlWithTemplateParameters: () => (/* reexport safe */ _validators_validators_js__rspack_import_3.isUrlWithTemplateParameters),\n oneOf: () => (/* reexport safe */ _validators_validators_js__rspack_import_3.oneOf),\n processConfig: () => (/* reexport safe */ _module_config_module_config_js__rspack_import_0.processConfig),\n provide: () => (/* reexport safe */ _module_config_module_config_js__rspack_import_0.provide),\n recordConfigDerivationError: () => (/* reexport safe */ _module_config_state_js__rspack_import_1.recordConfigDerivationError),\n registerModuleLoad: () => (/* reexport safe */ _module_config_module_config_js__rspack_import_0.registerModuleLoad),\n registerModuleWithConfigSystem: () => (/* reexport safe */ _module_config_module_config_js__rspack_import_0.registerModuleWithConfigSystem),\n registerTranslationNamespace: () => (/* reexport safe */ _module_config_module_config_js__rspack_import_0.registerTranslationNamespace),\n resetConfigSystem: () => (/* reexport safe */ _module_config_module_config_js__rspack_import_0.resetConfigSystem),\n setImplementerToolsConfigRecomputer: () => (/* reexport safe */ _module_config_state_js__rspack_import_1.setImplementerToolsConfigRecomputer),\n temporaryConfigStore: () => (/* reexport safe */ _module_config_state_js__rspack_import_1.temporaryConfigStore),\n validator: () => (/* reexport safe */ _validators_validator_js__rspack_import_2.validator),\n validators: () => (/* reexport safe */ _validators_validators_js__rspack_import_3.validators)\n});\n/* import */ var _module_config_module_config_js__rspack_import_0 = __webpack_require__(\"../../framework/esm-config/dist/module-config/module-config.js\");\n/* import */ var _module_config_state_js__rspack_import_1 = __webpack_require__(\"../../framework/esm-config/dist/module-config/state.js\");\n/* import */ var _validators_validator_js__rspack_import_2 = __webpack_require__(\"../../framework/esm-config/dist/validators/validator.js\");\n/* import */ var _validators_validators_js__rspack_import_3 = __webpack_require__(\"../../framework/esm-config/dist/validators/validators.js\");\n/* import */ var _types_js__rspack_import_4 = __webpack_require__(\"../../framework/esm-config/dist/types.js\");\n\n\n\n\n\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YXNjcmlwdC9lc218YnVpbHRpbjpzd2MtbG9hZGVyPz9ydWxlU2V0WzFdLnJ1bGVzWzVdLnVzZVswXSEvaG9tZS9ydW5uZXIvd29yay9vcGVubXJzLWVzbS1jb3JlL29wZW5tcnMtZXNtLWNvcmUvcGFja2FnZXMvZnJhbWV3b3JrL2VzbS1jb25maWcvZGlzdC9pbmRleC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL0BvcGVubXJzL2VzbS1hcHAtc2hlbGwvLi4vLi4vZnJhbWV3b3JrL2VzbS1jb25maWcvZGlzdC9pbmRleC5qcz8xOGNhIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL21vZHVsZS1jb25maWcvbW9kdWxlLWNvbmZpZy5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vbW9kdWxlLWNvbmZpZy9zdGF0ZS5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdmFsaWRhdG9ycy92YWxpZGF0b3IuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3ZhbGlkYXRvcnMvdmFsaWRhdG9ycy5qc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vdHlwZXMuanNcIjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFpRDtBQUNSO0FBQ0M7QUFDQztBQUNoQiJ9\n//# sourceURL=webpack-internal:///../../framework/esm-config/dist/index.js\n\n}");
|
|
4475
4475
|
|
|
4476
4476
|
},
|
|
4477
4477
|
"../../framework/esm-config/dist/module-config/module-config.js"(__unused_rspack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
4478
4478
|
"use strict";
|
|
4479
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n__webpack_require__.d(__webpack_exports__, {\n clearConfigErrors: () => (clearConfigErrors),\n defineConfigSchema: () => (defineConfigSchema),\n defineExtensionConfigSchema: () => (defineExtensionConfigSchema),\n getConfig: () => (getConfig),\n getTranslationOverrides: () => (getTranslationOverrides),\n processConfig: () => (processConfig),\n provide: () => (provide),\n registerModuleLoad: () => (registerModuleLoad),\n registerModuleWithConfigSystem: () => (registerModuleWithConfigSystem),\n registerTranslationNamespace: () => (registerTranslationNamespace),\n resetConfigSystem: () => (resetConfigSystem)\n});\n/* import */ var lodash_es__rspack_import_4 = __webpack_require__(\"../../../node_modules/lodash-es/mergeWith.js\");\n/* import */ var lodash_es__rspack_import_5 = __webpack_require__(\"../../../node_modules/lodash-es/isEqual.js\");\n/* import */ var lodash_es__rspack_import_6 = __webpack_require__(\"../../../node_modules/lodash-es/omit.js\");\n/* import */ var lodash_es__rspack_import_7 = __webpack_require__(\"../../../node_modules/lodash-es/cloneDeep.js\");\n/* import */ var _types_js__rspack_import_0 = __webpack_require__(\"../../framework/esm-config/dist/types.js\");\n/* import */ var _validators_type_validators_js__rspack_import_1 = __webpack_require__(\"../../framework/esm-config/dist/validators/type-validators.js\");\n/* import */ var _validators_validator_js__rspack_import_2 = __webpack_require__(\"../../framework/esm-config/dist/validators/validator.js\");\n/* import */ var _state_js__rspack_import_3 = __webpack_require__(\"../../framework/esm-config/dist/module-config/state.js\");\n/** @module @category Config */ \n\n\n\n\n/**\n * Deep merge two objects, with right-side values taking precedence.\n * Arrays are replaced entirely (not merged by index), matching the\n * behavior of ramda's mergeDeepRight.\n */ function replaceArrays(_objValue, srcValue) {\n if (Array.isArray(srcValue)) {\n return srcValue;\n }\n}\nfunction mergeDeepReplace(left, right) {\n return (0,lodash_es__rspack_import_4[\"default\"])({}, left, right, replaceArrays);\n}\n/**\n * Store setup\n *\n *\n * Set up stores and subscriptions so that inputs get processed appropriately.\n *\n * There are *input* stores and *output* stores. The *input* stores\n * are configInternalStore, temporaryConfigStore, and configExtensionStore. The\n * output stores are set in the `compute...` functions. They are the module\n * config stores, the extension slot config stores (by module), the extension\n * config stores, and the implementer tools config store.\n *\n * This code sets up the subscriptions so that when an input store changes,\n * the correct set of output stores are updated.\n *\n * All `compute...` functions except `computeExtensionConfigs` are pure\n * (or are supposed to be), other than the fact that they all `setState`\n * store values at the end. `computeExtensionConfigs` calls `getGlobalStore`,\n * which creates stores.\n */ // Store unsubscribe functions to allow cleanup (e.g., in tests or hot module reloading)\nconst configSubscriptions = [];\n/**\n * Recomputes all configuration derived stores based on current state of input stores.\n * Called whenever any input store (configInternalStore, temporaryConfigStore, configExtensionStore) changes.\n */ function recomputeAllConfigs() {\n const configState = _state_js__rspack_import_3.configInternalStore.getState();\n const tempConfigState = _state_js__rspack_import_3.temporaryConfigStore.getState();\n const extensionState = _state_js__rspack_import_3.configExtensionStore.getState();\n // Mounting an extension changes only `configExtensionStore`, which only the extension configs\n // depend on, so the rest of the last derivation is reused.\n const configInputsUnchanged = lastDerivation?.configState === configState && lastDerivation.tempConfigState === tempConfigState;\n if (configInputsUnchanged) {\n computeExtensionConfigs(configState, extensionState, tempConfigState, lastDerivation.slotConfigs, true);\n return;\n }\n computeModuleConfig(configState, tempConfigState);\n const slotConfigs = getExtensionSlotConfigs(configState, tempConfigState);\n computeExtensionSlotConfigs(slotConfigs);\n computeExtensionConfigs(configState, extensionState, tempConfigState, slotConfigs, false);\n // Recorded only after the outputs above are written, so a failure forces a full derivation next time.\n lastDerivation = {\n configState,\n tempConfigState,\n slotConfigs\n };\n // Last, because a failure here must not skip the outputs above. Only kept current while the\n // implementer tools are watching it; otherwise derived on read.\n (0,_state_js__rspack_import_3.invalidateImplementerToolsConfig)();\n}\n/** The inputs the outputs were last fully derived from, compared by identity. */ let lastDerivation = null;\n/**\n * The mounted extension each extension config entry was derived for. An extension ID can be\n * mounted under a different module while its slot and ID stay the same, so an entry is only\n * current if its modules match too.\n */ let entryOrigins = new WeakMap();\nfunction setupConfigSubscriptions() {\n // Registered here rather than at module load so that `resetConfigSystem` restores it.\n (0,_state_js__rspack_import_3.setImplementerToolsConfigRecomputer)(()=>computeImplementerToolsConfig(_state_js__rspack_import_3.configInternalStore.getState(), _state_js__rspack_import_3.temporaryConfigStore.getState()));\n // Initial computation\n recomputeAllConfigs();\n // Subscribe to all input stores with a single handler\n // This ensures we only recompute once even if multiple stores change simultaneously\n configSubscriptions.push(_state_js__rspack_import_3.configInternalStore.subscribe(recomputeAllConfigsSafely), _state_js__rspack_import_3.temporaryConfigStore.subscribe(recomputeAllConfigsSafely), _state_js__rspack_import_3.configExtensionStore.subscribe(recomputeAllConfigsSafely));\n}\n/** Ensure that we do not throw during a store subscription */ function recomputeAllConfigsSafely() {\n (0,_state_js__rspack_import_3.clearConfigDerivationError)();\n try {\n recomputeAllConfigs();\n } catch (e) {\n (0,_state_js__rspack_import_3.recordConfigDerivationError)(e);\n console.error('Failed to recompute the configuration', e);\n }\n}\n// Set up subscriptions at module load time\nsetupConfigSubscriptions();\nconst moduleConfigCache = new Map();\nfunction computeModuleConfig(state, tempState) {\n for (let moduleName of Object.keys(state.schemas)){\n // At this point the schema could be either just the implicit schema or the actually\n // defined schema. We run with just the implicit schema because we want to populate\n // the config store with the translation overrides as soon as possible. In fact, the\n // translation system will throw for Suspense until the translation overrides are\n // available, which as of this writing blocks the schema definition from occurring\n // for modules loaded based on their extensions.\n const moduleStore = (0,_state_js__rspack_import_3.getConfigStore)(moduleName);\n const schema = state.schemas[moduleName];\n const moduleLoaded = Boolean(state.moduleLoaded[moduleName]);\n const cached = moduleConfigCache.get(moduleName);\n let newState;\n if (cached && cached.schema === schema && cached.moduleLoaded === moduleLoaded && cached.providedConfigs === state.providedConfigs && cached.temporaryConfig === tempState.config) {\n newState = cached.state;\n } else {\n const config = moduleLoaded ? getConfigForModule(moduleName, state, tempState) : getConfigForModuleImplicitSchema(moduleName, state, tempState);\n newState = {\n translationOverridesLoaded: true,\n loaded: moduleLoaded,\n config\n };\n moduleConfigCache.set(moduleName, {\n schema,\n moduleLoaded,\n providedConfigs: state.providedConfigs,\n temporaryConfig: tempState.config,\n state: newState\n });\n }\n // Writing unconditionally would hand every `useConfig` consumer in the application a new\n // object — and a re-render — whenever any module or extension anywhere is loaded.\n const oldState = moduleStore.getState();\n if (oldState.loaded !== newState.loaded || oldState.translationOverridesLoaded !== newState.translationOverridesLoaded || !(0,lodash_es__rspack_import_5[\"default\"])(oldState.config, newState.config)) {\n moduleStore.setState(newState);\n }\n }\n}\nfunction computeExtensionSlotConfigs(slotConfigs) {\n const slotStore = (0,_state_js__rspack_import_3.getExtensionSlotsConfigStore)();\n const oldSlots = slotStore.getState().slots;\n const slots = {};\n let changed = false;\n for (const [slotName, config] of Object.entries(slotConfigs)){\n const previous = oldSlots[slotName];\n // Entries keep their identity when the configuration behind them hasn't changed, so that\n // changing one slot's configuration doesn't invalidate every other configured slot.\n if (previous?.loaded && (0,lodash_es__rspack_import_5[\"default\"])(previous.config, config)) {\n slots[slotName] = previous;\n } else {\n slots[slotName] = {\n loaded: true,\n config\n };\n changed = true;\n }\n }\n // Built from scratch rather than merged over the previous state: a slot whose configuration\n // has been removed — clearing the temporary config, say — has to lose its entry, or the old\n // configuration stays in force until the page is reloaded.\n if (changed || Object.keys(oldSlots).length !== Object.keys(slots).length) {\n slotStore.setState({\n slots\n });\n }\n}\nfunction computeImplementerToolsConfig(state, tempConfigState) {\n const oldState = _state_js__rspack_import_3.implementerToolsConfigStore.getState();\n const config = getImplementerToolsConfig(state, tempConfigState);\n const newState = {\n config\n };\n // Use deep equality on the actual config content, not the wrapper object\n if (!(0,lodash_es__rspack_import_5[\"default\"])(oldState.config, newState.config)) {\n _state_js__rspack_import_3.implementerToolsConfigStore.setState(newState);\n }\n}\nfunction computeExtensionConfigs(configState, extensionState, tempConfigState, slotConfigs, configInputsUnchanged) {\n const extensionsConfigStore = (0,_state_js__rspack_import_3.getExtensionsConfigStore)();\n const oldConfigs = extensionsConfigStore.getState().configs;\n const configs = {};\n let changed = false;\n let entryCount = 0;\n // We assume that the module schema has already been defined, since the extension\n // it contains is mounted.\n for (let extension of extensionState.mountedExtensions){\n const previous = oldConfigs[extension.slotName]?.[extension.extensionId];\n let entry;\n const origin = previous && entryOrigins.get(previous);\n if (configInputsUnchanged && previous?.loaded && origin?.slotModuleName === extension.slotModuleName && origin.extensionModuleName === extension.extensionModuleName) {\n // Derived from these same inputs by the previous run, so it is still current.\n entry = previous;\n } else {\n const config = computeExtensionConfig(extension.slotModuleName, extension.extensionModuleName, extension.slotName, extension.extensionId, configState, tempConfigState, slotConfigs[extension.slotName]);\n // Entries keep their identity when the configuration behind them hasn't changed, so that\n // mounting one extension doesn't hand every other mounted extension a new config object.\n entry = previous?.loaded && (0,lodash_es__rspack_import_5[\"default\"])(previous.config, config) ? previous : {\n config,\n loaded: true\n };\n }\n entryOrigins.set(entry, extension);\n if (entry !== previous) {\n changed = true;\n }\n if (!configs[extension.slotName]) {\n configs[extension.slotName] = {};\n }\n configs[extension.slotName][extension.extensionId] = entry;\n entryCount++;\n }\n // Slots keep their identity too when none of their entries changed. Subscribers compare these\n // per-slot objects to work out which slots to re-derive, so handing out a fresh one for every\n // slot on every write would mark every slot with a mounted extension dirty.\n for (const [slotName, slotConfigs] of Object.entries(configs)){\n const previousSlot = oldConfigs[slotName];\n if (previousSlot && Object.keys(previousSlot).length === Object.keys(slotConfigs).length && Object.entries(slotConfigs).every(([extensionId, entry])=>previousSlot[extensionId] === entry)) {\n configs[slotName] = previousSlot;\n }\n }\n if (!changed) {\n // Nothing was added or altered, but an extension may have unmounted, which only shows up as a\n // missing entry.\n changed = Object.keys(oldConfigs).length !== Object.keys(configs).length || Object.values(oldConfigs).reduce((total, slot)=>total + Object.keys(slot).length, 0) !== entryCount;\n }\n if (changed) {\n extensionsConfigStore.setState({\n configs\n });\n }\n}\n/*\n * API\n *\n */ /**\n * This defines a configuration schema for a module. The schema tells the\n * configuration system how the module can be configured. It specifies\n * what makes configuration valid or invalid.\n *\n * See [Configuration System](https://o3-docs.openmrs.org/en-US/docs/configuration-system)\n * for more information about defining a config schema.\n *\n * @param moduleName Name of the module the schema is being defined for. Generally\n * should be the one in which the `defineConfigSchema` call takes place.\n * @param schema The config schema for the module\n */ function defineConfigSchema(moduleName, schema) {\n validateConfigSchema(moduleName, schema);\n const enhancedSchema = mergeDeepReplace(schema, implicitConfigSchema);\n _state_js__rspack_import_3.configInternalStore.setState((state)=>({\n ...state,\n schemas: {\n ...state.schemas,\n [moduleName]: enhancedSchema\n },\n moduleLoaded: {\n ...state.moduleLoaded,\n [moduleName]: true\n }\n }));\n}\n/**\n * This alerts the configuration system that a module exists. This allows config to be\n * processed, while still allowing the extension system to know whether the module has\n * actually had its front bundle executed yet.\n *\n * This should only be used in esm-app-shell.\n *\n * @internal\n * @param moduleName\n */ function registerModuleWithConfigSystem(moduleName) {\n _state_js__rspack_import_3.configInternalStore.setState((state)=>({\n ...state,\n schemas: {\n ...state.schemas,\n [moduleName]: implicitConfigSchema\n }\n }));\n}\n/**\n * This alerts the configuration system that a module has been loaded.\n *\n * This should only be used in esm-app-shell.\n *\n * @internal\n * @param moduleName\n */ function registerModuleLoad(moduleName) {\n _state_js__rspack_import_3.configInternalStore.setState((state)=>({\n ...state,\n moduleLoaded: {\n ...state.moduleLoaded,\n [moduleName]: true\n }\n }));\n}\n/**\n * This allows the config system to support translation overrides for namespaces that\n * do not correspond to modules.\n *\n * This should only be used in esm-app-shell.\n *\n * @internal\n * @param namespace\n */ function registerTranslationNamespace(namespace) {\n _state_js__rspack_import_3.configInternalStore.setState((state)=>({\n ...state,\n schemas: {\n ...state.schemas,\n [namespace]: translationOverridesSchema\n }\n }));\n}\n/**\n * This defines a configuration schema for an extension. When a schema is defined\n * for an extension, that extension will receive the configuration corresponding\n * to that schema, rather than the configuration corresponding to the module\n * in which it is defined.\n *\n * The schema tells the configuration system how the module can be configured.\n * It specifies what makes configuration valid or invalid.\n *\n * See [Configuration System](https://o3-docs.openmrs.org/en-US/docs/configuration-system)\n * for more information about defining a config schema.\n *\n * @param extensionName Name of the extension the schema is being defined for.\n * Should match the `name` of one of the `extensions` entries defined in\n * the app's `routes.json` file.\n * @param schema The config schema for the extension\n */ function defineExtensionConfigSchema(extensionName, schema) {\n validateConfigSchema(extensionName, schema);\n const enhancedSchema = mergeDeepReplace(schema, implicitConfigSchema);\n const state = _state_js__rspack_import_3.configInternalStore.getState();\n if (state.schemas[extensionName]) {\n console.error(`Config schema for extension ${extensionName} already exists. If there are multiple extensions with this same name, one will probably crash.`);\n }\n _state_js__rspack_import_3.configInternalStore.setState((state)=>({\n ...state,\n schemas: {\n ...state.schemas,\n [extensionName]: enhancedSchema\n }\n }));\n}\n/**\n * Provides configuration values programmatically. This is an alternative to\n * providing configuration through the config-file. Configuration provided this\n * way will be merged with configuration from other sources.\n *\n * @param config A configuration object to merge into the existing configuration.\n * @param sourceName An optional name to identify the source of this configuration,\n * used for debugging purposes. Defaults to 'provided'.\n */ function provide(config, sourceName = 'provided') {\n _state_js__rspack_import_3.configInternalStore.setState((state)=>({\n ...state,\n providedConfigs: [\n ...state.providedConfigs,\n {\n source: sourceName,\n config\n }\n ]\n }));\n}\n/**\n * Resolves with `select(state)` as soon as the store's state satisfies `ready`, leaving no\n * subscription behind: nothing subscribes at all when the store is already ready. That matters\n * because `getConfig` runs on every HTTP request, and a subscription that outlives its promise\n * both retains its closure forever and slows down every later write to that store.\n */ function whenStoreReady(store, ready, select) {\n return new Promise((resolve)=>{\n let unsubscribe;\n let resolved = false;\n function update(state) {\n if (!resolved && ready(state)) {\n resolved = true;\n resolve(select(state));\n unsubscribe?.();\n }\n }\n update(store.getState());\n if (!resolved) {\n unsubscribe = store.subscribe(update);\n }\n });\n}\n/**\n * A promise-based way to access the config as soon as it is fully loaded.\n * If it is already loaded, resolves the config in its present state.\n *\n * This is a useful function if you need to get the config in the course\n * of the execution of a function.\n *\n * @param moduleName The name of the module for which to look up the config\n */ function getConfig(moduleName) {\n return whenStoreReady((0,_state_js__rspack_import_3.getConfigStore)(moduleName), (state)=>Boolean(state.loaded && state.config), (state)=>(0,lodash_es__rspack_import_6[\"default\"])(state.config, [\n 'Display conditions',\n 'Translation overrides'\n ]));\n}\n/**\n * Retrieves translation overrides for an extension, optionally scoped to a specific\n * extension slot. When called with only a module name, retrieves module-level overrides.\n * Translation overrides allow customizing translated strings without modifying the\n * original translation files.\n *\n * @param moduleName The name of the module providing the translation context.\n * @param slotName Optional extension slot name to include slot-specific overrides.\n * @param extensionId Optional extension ID to include extension-specific overrides.\n * @returns A Promise resolving to an array of translation override objects.\n *\n * @internal\n */ function getTranslationOverrides(moduleName, slotName, extensionId) {\n const promises = [\n whenStoreReady((0,_state_js__rspack_import_3.getConfigStore)(moduleName), (state)=>Boolean(state.translationOverridesLoaded && state.config), (state)=>state.config['Translation overrides'] ?? {})\n ];\n if (slotName && extensionId) {\n promises.push(whenStoreReady((0,_state_js__rspack_import_3.getExtensionConfig)(slotName, extensionId), (state)=>Boolean(state.loaded && state.config), (state)=>state.config['Translation overrides'] ?? {}));\n }\n return Promise.all(promises);\n}\n/**\n * Validate and interpolate defaults for `providedConfig` according to `schema`\n *\n * @param schema a configuration schema\n * @param providedConfig an object of config values (without the top-level module name)\n * @param keyPathContext a dot-separated string which helps the user figure out where\n * the provided config came from\n * @returns The validated and processed configuration object with defaults applied.\n * @internal\n */ function processConfig(schema, providedConfig, keyPathContext) {\n validateStructure(schema, providedConfig, keyPathContext);\n const config = setDefaults(schema, providedConfig);\n runAllValidatorsInConfigTree(schema, config, keyPathContext);\n return config;\n}\nconst extensionConfigCache = new Map();\n/**\n * Returns the configuration for an extension. This configuration is specific\n * to the slot in which it is mounted, and its ID within that slot.\n *\n * The schema for that configuration is the extension schema. If no extension\n * schema has been provided, the schema used is the schema of the module in\n * which the extension is defined.\n *\n * @param slotModuleName The name of the module which defines the extension slot\n * @param extensionModuleName The name of the module which defines the extension (and therefore the config schema)\n * @param slotName The name of the extension slot where the extension is mounted\n * @param extensionId The ID of the extension in its slot\n * @param slotConfig The slot's configuration, gathered from every module that configures it\n */ function computeExtensionConfig(slotModuleName, extensionModuleName, slotName, extensionId, configState, tempConfigState, slotConfig) {\n const extensionName = getExtensionNameFromId(extensionId);\n const extensionConfigSchema = configState.schemas[extensionName];\n // JSON string of these elements should be unique-per-extension\n const cacheKey = JSON.stringify([\n slotName,\n extensionId,\n slotModuleName,\n extensionModuleName\n ]);\n const cached = extensionConfigCache.get(cacheKey);\n if (cached && cached.extensionSchema === extensionConfigSchema && cached.extensionModuleSchema === configState.schemas[extensionModuleName] && cached.providedConfigs === configState.providedConfigs && cached.temporaryConfig === tempConfigState.config) {\n return cached.config;\n }\n const nameOfSchemaSource = extensionConfigSchema ? extensionName : extensionModuleName;\n const providedConfigs = getProvidedConfigs(configState, tempConfigState);\n const sharedOverride = slotConfig?.configure?.[extensionId] ?? {};\n const slotModuleConfig = mergeConfigsFor(slotModuleName, providedConfigs);\n const configOverride = slotModuleConfig?.extensionSlots?.[slotName]?.configure?.[extensionId] ?? {};\n const extensionConfig = mergeConfigsFor(nameOfSchemaSource, providedConfigs);\n const combinedConfig = mergeConfigs([\n extensionConfig,\n sharedOverride,\n configOverride\n ]);\n const schema = extensionConfigSchema ?? configState.schemas[extensionModuleName];\n validateStructure(schema, combinedConfig, nameOfSchemaSource);\n const config = setDefaults(schema, combinedConfig);\n runAllValidatorsInConfigTree(schema, config, nameOfSchemaSource);\n delete config.extensionSlots;\n extensionConfigCache.set(cacheKey, {\n extensionSchema: extensionConfigSchema,\n extensionModuleSchema: configState.schemas[extensionModuleName],\n providedConfigs: configState.providedConfigs,\n temporaryConfig: tempConfigState.config,\n config\n });\n return config;\n}\nconst implementerToolsModuleCache = new Map();\nfunction getImplementerToolsConfig(configState, tempConfigState) {\n const annotatedSchemas = getAllSchemasWithValuesAndSources(configState.schemas);\n const configsAndSources = [\n ...configState.providedConfigs.map((c)=>[\n c.config,\n c.source\n ]),\n [\n tempConfigState.config,\n 'temporary config'\n ]\n ];\n // A module can be configured without having declared a schema, so the module list is the union\n // of both rather than just the schemas.\n const moduleNames = new Set(Object.keys(annotatedSchemas));\n for (const [config] of configsAndSources){\n for (const moduleName of Object.keys(config)){\n moduleNames.add(moduleName);\n }\n }\n const result = {};\n for (const moduleName of moduleNames){\n const annotatedSchema = annotatedSchemas[moduleName];\n const configSlices = configsAndSources.map(([config])=>config[moduleName]);\n const sources = configsAndSources.map(([, source])=>source);\n const cached = implementerToolsModuleCache.get(moduleName);\n if (cached && cached.annotatedSchema === annotatedSchema && cached.configSlices.length === configSlices.length && cached.configSlices.every((slice, i)=>slice === configSlices[i]) && cached.sources.every((source, i)=>source === sources[i])) {\n result[moduleName] = cached.result;\n continue;\n }\n let merged = annotatedSchema ?? {};\n configsAndSources.forEach(([, source], i)=>{\n const slice = configSlices[i];\n if (slice !== undefined) {\n merged = mergeDeepReplace(merged, createValuesAndSourcesTree(slice, source));\n }\n });\n implementerToolsModuleCache.set(moduleName, {\n annotatedSchema,\n configSlices,\n sources,\n result: merged\n });\n result[moduleName] = merged;\n }\n return result;\n}\n/**\n * Caching per module is what stops the walk being quadratic: defining one module's schema\n * recomputes every module.\n *\n * A module with no configuration of its own is published straight from this cache, so nothing may\n * mutate a tree it reads out of the implementer tools config — it is the cache entry.\n */ const schemaValuesAndSourcesCache = new Map();\nfunction getAllSchemasWithValuesAndSources(schemas) {\n const result = {};\n for (const [moduleName, schema] of Object.entries(schemas)){\n const cached = schemaValuesAndSourcesCache.get(moduleName);\n if (cached && cached.schema === schema) {\n result[moduleName] = cached.annotated;\n } else {\n const annotated = getSchemaWithValuesAndSources((0,lodash_es__rspack_import_7[\"default\"])(schema));\n schemaValuesAndSourcesCache.set(moduleName, {\n schema,\n annotated\n });\n result[moduleName] = annotated;\n }\n }\n return result;\n}\nfunction getSchemaWithValuesAndSources(schema) {\n if (schema.hasOwnProperty('_default')) {\n return {\n ...schema,\n _value: schema._default,\n _source: 'default'\n };\n } else if (isOrdinaryObject(schema)) {\n return Object.keys(schema).reduce((obj, key)=>{\n obj[key] = getSchemaWithValuesAndSources(schema[key]);\n return obj;\n }, {});\n } else {\n // at this point, the schema is bad and an error will have been logged during schema validation\n return {};\n }\n}\nfunction createValuesAndSourcesTree(config, source) {\n if (isOrdinaryObject(config)) {\n return Object.keys(config).reduce((obj, key)=>{\n obj[key] = createValuesAndSourcesTree(config[key], source);\n return obj;\n }, {});\n } else {\n return {\n _value: config,\n _source: source\n };\n }\n}\nfunction getExtensionSlotConfigs(configState, tempConfigState) {\n const allConfigs = mergeConfigs(getProvidedConfigs(configState, tempConfigState));\n const slotConfigPerModule = Object.keys(allConfigs).reduce((obj, key)=>{\n if (allConfigs[key]?.extensionSlots) {\n obj[key] = allConfigs[key]?.extensionSlots;\n }\n return obj;\n }, {});\n validateAllExtensionSlotConfigs(slotConfigPerModule);\n const slotConfigs = {};\n const configureBlocks = {};\n for (const configBySlotName of Object.values(slotConfigPerModule)){\n for (const [slotName, config] of Object.entries(configBySlotName)){\n slotConfigs[slotName] = config;\n if (config.configure) {\n var _configureBlocks, _slotName;\n ((_configureBlocks = configureBlocks)[_slotName = slotName] ?? (_configureBlocks[_slotName] = [])).push(config.configure);\n }\n }\n }\n for (const [slotName, blocks] of Object.entries(configureBlocks)){\n const configure = blocks.length === 1 ? blocks[0] : mergeConfigs(blocks);\n if (slotConfigs[slotName].configure !== configure) {\n slotConfigs[slotName] = {\n ...slotConfigs[slotName],\n configure\n };\n }\n }\n return slotConfigs;\n}\nfunction validateAllExtensionSlotConfigs(slotConfigPerModule) {\n for (let [moduleName, configBySlotName] of Object.entries(slotConfigPerModule)){\n for (let [slotName, config] of Object.entries(configBySlotName)){\n validateExtensionSlotConfig(config, moduleName, slotName);\n }\n }\n}\nfunction validateExtensionSlotConfig(config, moduleName, slotName) {\n const keyPath = `${moduleName}.extensionSlots.${slotName}`;\n const errorPrefix = `Extension slot config '${keyPath}'`;\n const invalidKeys = Object.keys(config).filter((k)=>![\n 'add',\n 'remove',\n 'order',\n 'configure'\n ].includes(k));\n if (invalidKeys.length) {\n logError(keyPath, errorPrefix + `' contains invalid keys '${invalidKeys.join(\"', '\")}'`);\n }\n if (config.add) {\n if (!Array.isArray(config.add) || !config.add.every((n)=>typeof n === 'string')) {\n logError(keyPath, errorPrefix + `.add' is invalid. Must be an array of strings (extension IDs)`);\n }\n }\n if (config.remove) {\n if (!Array.isArray(config.remove) || !config.remove.every((n)=>typeof n === 'string')) {\n logError(keyPath, errorPrefix + `.remove' is invalid. Must be an array of strings (extension IDs)`);\n }\n }\n if (config.order) {\n if (!Array.isArray(config.order) || !config.order.every((n)=>typeof n === 'string')) {\n logError(keyPath, errorPrefix + `.order' is invalid. Must be an array of strings (extension IDs)`);\n }\n }\n if (config.configure) {\n if (!isOrdinaryObject(config.configure)) {\n logError(keyPath, errorPrefix + `.configure' is invalid. Must be an object with extension IDs for keys`);\n }\n }\n}\nfunction getProvidedConfigs(configState, tempConfigState) {\n return [\n ...configState.providedConfigs.map((c)=>c.config),\n tempConfigState.config\n ];\n}\n/**\n * Validates the config schema for a module. Since problems identified here are programming errors\n * that hopefully will be caught during development, this function logs errors to the console directly;\n * it's fine if we spam the user with these errors.\n */ function validateConfigSchema(moduleName, schema, keyPath = '') {\n const updateMessage = `Please verify that you are running the latest version and, if so, alert the maintainer.`;\n for (const key of Object.keys(schema).filter((k)=>!k.startsWith('_'))){\n const thisKeyPath = keyPath + (keyPath && '.') + key;\n const schemaPart = schema[key];\n if (thisKeyPath === 'Display conditions') {\n console.error(`${moduleName} declares a configuration option called \"Display conditions\"; the \"Display conditions\" option is a reserved name. ${updateMessage}`);\n }\n if (thisKeyPath === 'Translation overrides') {\n console.error(`${moduleName} declares a configuration option called \"Translation overrides\"; the \"Translation overrides\" option is a reserved name. ${updateMessage}`);\n }\n if (!isOrdinaryObject(schemaPart)) {\n console.error(`${moduleName} has bad config schema definition for key '${thisKeyPath}'. ${updateMessage}`);\n continue;\n }\n if (!schemaPart.hasOwnProperty('_default')) {\n // recurse for nested config keys\n validateConfigSchema(moduleName, schemaPart, thisKeyPath);\n }\n const elements = schemaPart._elements;\n if (hasObjectSchema(elements)) {\n validateConfigSchema(moduleName, elements, thisKeyPath + '._elements');\n }\n if (schemaPart._validators) {\n for (let validator of schemaPart._validators){\n if (typeof validator !== 'function') {\n console.error(`${moduleName} has invalid validator for key '${thisKeyPath}' ${updateMessage}.` + `\\n\\nIf you're the maintainer: validators must be functions that return either ` + `undefined or an error string. Received ${validator}.`);\n }\n }\n }\n const valueType = schemaPart._type;\n if (valueType && !Object.values(_types_js__rspack_import_0.Type).includes(valueType)) {\n console.error(`${moduleName} has invalid type for key '${thisKeyPath}' ${updateMessage}.` + `\\n\\nIf you're the maintainer: the allowed types are ${Object.values(_types_js__rspack_import_0.Type).join(', ')}. ` + `Received '${valueType}'`);\n }\n if (Object.keys(schemaPart).every((k)=>[\n '_description',\n '_validators',\n '_elements',\n '_type'\n ].includes(k)) && !keyPath.includes('._elements')) {\n console.error(`${moduleName} has bad config schema definition for key '${thisKeyPath}'. ${updateMessage}.` + `\\n\\nIf you're the maintainer: all config elements must have a default. ` + `Received ${JSON.stringify(schemaPart)}`);\n }\n if (elements && valueType && ![\n _types_js__rspack_import_0.Type.Array,\n _types_js__rspack_import_0.Type.Object\n ].includes(valueType)) {\n console.error(`${moduleName} has bad config schema definition for key '${thisKeyPath}'. ${updateMessage}.` + `\\n\\nIf you're the maintainer: the 'elements' key only works with '_type' equal to 'Array' or 'Object'. ` + `Received ${JSON.stringify(valueType)}`);\n }\n }\n}\nfunction getConfigForModule(moduleName, configState, tempConfigState) {\n const schema = configState.schemas[moduleName];\n const inputConfig = mergeConfigsFor(moduleName, getProvidedConfigs(configState, tempConfigState));\n validateStructure(schema, inputConfig, moduleName);\n const config = setDefaults(schema, inputConfig);\n runAllValidatorsInConfigTree(schema, config, moduleName);\n delete config.extensionSlots;\n return config;\n}\nfunction getConfigForModuleImplicitSchema(moduleName, configState, tempConfigState) {\n const inputConfig = mergeConfigsFor(moduleName, getProvidedConfigs(configState, tempConfigState));\n const config = setDefaults(implicitConfigSchema, inputConfig);\n runAllValidatorsInConfigTree(implicitConfigSchema, config, moduleName);\n delete config.extensionSlots;\n return config;\n}\nfunction mergeConfigsFor(moduleName, allConfigs) {\n const allConfigsForModule = allConfigs.map(({ [moduleName]: c })=>c).filter((c)=>!!c);\n return mergeConfigs(allConfigsForModule);\n}\n/**\n * Merges a whole list at once, accumulating into one destination.\n */ function mergeConfigs(configs) {\n return configs.reduce((acc, config)=>(0,lodash_es__rspack_import_4[\"default\"])(acc, config, replaceArrays), {});\n}\n/**\n * Recursively check the provided config tree to make sure that all\n * of the provided properties exist in the schema, and that types are\n * correct. Does not run validators yet, since those will be run on\n * the config with the defaults filled in.\n */ function validateStructure(schema, config, keyPath = '') {\n // validate each constituent element\n for (const key of Object.keys(config)){\n const value = config[key];\n const thisKeyPath = keyPath + '.' + key;\n const schemaPart = schema[key];\n if (!schema.hasOwnProperty(key)) {\n if (!(key === 'extensionSlots' && keyPath !== '')) {\n logError(thisKeyPath, `Unknown config key '${thisKeyPath}' provided. Ignoring.`);\n }\n continue;\n }\n validateBranchStructure(schemaPart, value, thisKeyPath);\n }\n}\nfunction validateBranchStructure(schemaPart, value, keyPath) {\n checkType(keyPath, schemaPart._type, value);\n if (isOrdinaryObject(value)) {\n if (schemaPart._type === _types_js__rspack_import_0.Type.Object) {\n // validate as freeform object\n validateFreeformObjectStructure(schemaPart, value, keyPath);\n } else if (!(schemaPart.hasOwnProperty('_default') || schemaPart.hasOwnProperty('_type'))) {\n // validate as normal nested config\n validateStructure(schemaPart, value, keyPath);\n }\n } else {\n if (schemaPart._type === _types_js__rspack_import_0.Type.Array) {\n validateArrayStructure(schemaPart, value, keyPath);\n }\n }\n}\nfunction validateFreeformObjectStructure(freeformObjectSchema, config, keyPath) {\n if (freeformObjectSchema._elements) {\n for (const key of Object.keys(config)){\n const value = config[key];\n validateBranchStructure(freeformObjectSchema._elements, value, `${keyPath}.${key}`);\n }\n }\n}\nfunction validateArrayStructure(arraySchema, value, keyPath) {\n const validatedAsArray = checkType(keyPath, _types_js__rspack_import_0.Type.Array, value);\n if (!validatedAsArray) {\n return;\n }\n // if there is an array element object schema, verify that elements match it\n if (hasObjectSchema(arraySchema._elements)) {\n for(let i = 0; i < value.length; i++){\n validateBranchStructure(arraySchema._elements, value[i], `${keyPath}[${i}]`);\n }\n }\n for(let i = 0; i < value.length; i++){\n checkType(`${keyPath}[${i}]`, arraySchema._elements?._type, value[i]);\n }\n}\n/**\n * Run all the validators in the config tree. This should be run\n * on the config object after it has been filled in with all the defaults, since\n * higher-level validators may refer to default values.\n */ function runAllValidatorsInConfigTree(schema, config, keyPath = '') {\n // If `!schema`, there should have been a structural validation error printed already.\n if (schema) {\n if (config !== schema._default) {\n runValidators(keyPath, schema._validators, config);\n }\n if (isOrdinaryObject(config)) {\n for (const key of Object.keys(config)){\n const value = config[key];\n const thisKeyPath = keyPath + '.' + key;\n const schemaPart = schema[key];\n if (schema._type === _types_js__rspack_import_0.Type.Object && schema._elements) {\n runAllValidatorsInConfigTree(schema._elements, value, thisKeyPath);\n } else {\n runAllValidatorsInConfigTree(schemaPart, value, thisKeyPath);\n }\n }\n } else if (Array.isArray(config) && schema._elements) {\n for(let i = 0; i < config.length; i++){\n runAllValidatorsInConfigTree(schema._elements, config[i], `${keyPath}[${i}]`);\n }\n }\n }\n}\n/**\n * Run type validation for the value, logging any errors.\n * @returns true if validation passes, false otherwise\n */ function checkType(keyPath, _type, value) {\n if (_type) {\n const validator = {\n Array: _validators_type_validators_js__rspack_import_1.isArray,\n Boolean: _validators_type_validators_js__rspack_import_1.isBoolean,\n ConceptUuid: _validators_type_validators_js__rspack_import_1.isUuid,\n Number: _validators_type_validators_js__rspack_import_1.isNumber,\n Object: _validators_type_validators_js__rspack_import_1.isObject,\n String: _validators_type_validators_js__rspack_import_1.isString,\n UUID: _validators_type_validators_js__rspack_import_1.isUuid,\n PersonAttributeTypeUuid: _validators_type_validators_js__rspack_import_1.isUuid,\n PatientIdentifierTypeUuid: _validators_type_validators_js__rspack_import_1.isUuid\n };\n return runValidators(keyPath, [\n validator[_type]\n ], value);\n }\n return true;\n}\n/**\n * Runs validators, logging errors.\n * @returns true if all pass, false otherwise.\n */ function runValidators(keyPath, validators, value) {\n let returnValue = true;\n if (validators) {\n try {\n for (let validator of validators){\n const validatorResult = validator(value);\n if (typeof validatorResult === 'string') {\n const message = typeof value === 'object' ? `Invalid configuration for ${keyPath}: ${validatorResult}` : `Invalid configuration value ${value} for ${keyPath}: ${validatorResult}`;\n logError(keyPath, message);\n returnValue = false;\n }\n }\n } catch (e) {\n console.error(`Skipping invalid validator at \"${keyPath}\". Encountered error\\n\\t${e}`);\n }\n }\n return returnValue;\n}\n// Recursively fill in the config with values from the schema.\nconst setDefaults = (schema, inputConfig)=>{\n const config = structuredClone(inputConfig);\n if (!schema) {\n return config;\n }\n for (const key of Object.keys(schema)){\n const configPart = config[key];\n const schemaPart = schema[key];\n // The `schemaPart &&` clause of this `if` statement will only fail\n // if the schema is very invalid. It is there to prevent the app from\n // crashing completely, though it will produce unexpected behavior.\n // If this happens, there should be legible errors in the console from\n // the schema validator.\n if (schemaPart && (schemaPart.hasOwnProperty('_type') || schemaPart.hasOwnProperty('_default'))) {\n // We assume that schemaPart defines a config value, since it has\n // a property `_type` or `_default`.\n if (!config.hasOwnProperty(key)) {\n config[key] = schemaPart['_default'];\n }\n // We also check if it is an object or array with object elements, in which case we recurse\n const elements = schemaPart._elements;\n if (configPart && hasObjectSchema(elements)) {\n if (schemaPart._type === _types_js__rspack_import_0.Type.Array && Array.isArray(configPart)) {\n const configWithDefaults = configPart.map((conf)=>setDefaults(elements, conf));\n config[key] = configWithDefaults;\n } else if (schemaPart._type === _types_js__rspack_import_0.Type.Object) {\n for (let objectKey of Object.keys(configPart)){\n configPart[objectKey] = setDefaults(elements, configPart[objectKey]);\n }\n }\n }\n } else if (isOrdinaryObject(schemaPart)) {\n // Since schemaPart has no property \"_type\", if it's an ordinary object\n // (unlike, importantly, the validators array), we assume it is a parent config property.\n // We recurse to config[key] and schema[key]. Default config[key] to {}.\n const selectedConfigPart = configPart ?? {};\n // There will have been a validation error already if configPart is not a plain object.\n if (isOrdinaryObject(selectedConfigPart)) {\n config[key] = setDefaults(schemaPart, selectedConfigPart);\n }\n }\n }\n return config;\n};\nfunction hasObjectSchema(elementsSchema) {\n return !!elementsSchema && Object.keys(elementsSchema).filter((e)=>![\n '_default',\n '_validators'\n ].includes(e)).length > 0;\n}\nfunction isOrdinaryObject(value) {\n return typeof value === 'object' && !Array.isArray(value) && value !== null;\n}\n/** Keep track of which validation errors we have displayed. Each one should only be displayed once. */ let displayedValidationMessages = new Set();\nfunction logError(keyPath, message) {\n const key = `${keyPath}:::${message}`;\n // technically, this should not be possible, but because of how things wind-up transpiled, this isn't impossible\n if (!displayedValidationMessages) {\n displayedValidationMessages = new Set();\n }\n if (!displayedValidationMessages.has(key)) {\n console.error(message);\n displayedValidationMessages.add(key);\n }\n}\n/**\n * Normally, configuration errors are only displayed once. This function clears the list of\n * displayed errors, so that they will be displayed again.\n *\n * @internal\n */ function clearConfigErrors(keyPath) {\n if (keyPath) {\n displayedValidationMessages.forEach((key)=>{\n if (key.startsWith(keyPath)) {\n displayedValidationMessages.delete(key);\n }\n });\n } else {\n displayedValidationMessages.clear();\n }\n}\n/**\n * Cleans up all config store subscriptions and re-establishes them. This is primarily\n * useful for testing, where subscriptions set up at module load time need to be cleared\n * between tests to prevent infinite update loops. After clearing, subscriptions are\n * re-established so the config system continues to work normally.\n *\n * @internal\n */ function resetConfigSystem() {\n configSubscriptions.forEach((unsubscribe)=>unsubscribe());\n configSubscriptions.length = 0;\n // Cached configs are keyed on input identity, so a test that reuses the same schema or config\n // objects across cases would otherwise be served the previous case's result.\n moduleConfigCache.clear();\n extensionConfigCache.clear();\n schemaValuesAndSourcesCache.clear();\n implementerToolsModuleCache.clear();\n lastDerivation = null;\n entryOrigins = new WeakMap();\n setupConfigSubscriptions();\n}\n/**\n * Copied over from esm-extensions. It rightly belongs to that module, but esm-config\n * cannot depend on esm-extensions.\n */ function getExtensionNameFromId(extensionId) {\n const [extensionName] = extensionId.split('#');\n return extensionName;\n}\n/**\n * The translation overrides schema is used in the implicit schema given to every module;\n * plus any additional translation namespaces (at time of writing, this is just 'core').\n */ const translationOverridesSchema = {\n 'Translation overrides': {\n _description: 'Per-language overrides for frontend translations should be keyed by language code and each language dictionary contains the translation key and the display value',\n _type: _types_js__rspack_import_0.Type.Object,\n _default: {},\n _validators: [\n (0,_validators_validator_js__rspack_import_2.validator)((o)=>Object.keys(o).every((k)=>/^[a-z]{2,3}(-[A-Z]{2,3})?$/.test(k)), (o)=>{\n const badKeys = Object.keys(o).filter((k)=>!/^[a-z]{2,3}(-[A-Z]{2,3})?$/.test(k));\n return `The 'Translation overrides' object should have language codes for keys. Language codes must be in the form of a two-to-three letter language code optionally followed by a hyphen and a two-to-three letter country code. The following keys do not conform: ${badKeys.join(', ')}.`;\n })\n ]\n }\n};\n/**\n * The implicitConfigSchema is implicitly included in every configuration schema\n */ const implicitConfigSchema = {\n 'Display conditions': {\n privileges: {\n _description: 'The privilege(s) the user must have to use this extension',\n _type: _types_js__rspack_import_0.Type.Array,\n _default: []\n },\n expression: {\n _description: 'The expression that determines whether the extension is displayed',\n _type: _types_js__rspack_import_0.Type.String,\n _default: undefined\n }\n },\n ...translationOverridesSchema\n};\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YXNjcmlwdC9lc218YnVpbHRpbjpzd2MtbG9hZGVyPz9ydWxlU2V0WzFdLnJ1bGVzWzVdLnVzZVswXSEvaG9tZS9ydW5uZXIvd29yay9vcGVubXJzLWVzbS1jb3JlL29wZW5tcnMtZXNtLWNvcmUvcGFja2FnZXMvZnJhbWV3b3JrL2VzbS1jb25maWcvZGlzdC9tb2R1bGUtY29uZmlnL21vZHVsZS1jb25maWcuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Ab3Blbm1ycy9lc20tYXBwLXNoZWxsLy4uLy4uL2ZyYW1ld29yay9lc20tY29uZmlnL2Rpc3QvbW9kdWxlLWNvbmZpZy9tb2R1bGUtY29uZmlnLmpzP2MzYTUiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqIEBtb2R1bGUgQGNhdGVnb3J5IENvbmZpZyAqLyBpbXBvcnQgeyBjbG9uZURlZXAsIGlzRXF1YWwsIG1lcmdlV2l0aCwgb21pdCBhcyBsb2Rhc2hPbWl0IH0gZnJvbSBcImxvZGFzaC1lc1wiO1xuaW1wb3J0IHsgVHlwZSB9IGZyb20gXCIuLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgaXNBcnJheSwgaXNCb29sZWFuLCBpc1V1aWQsIGlzTnVtYmVyLCBpc09iamVjdCwgaXNTdHJpbmcgfSBmcm9tIFwiLi4vdmFsaWRhdG9ycy90eXBlLXZhbGlkYXRvcnMuanNcIjtcbmltcG9ydCB7IHZhbGlkYXRvciB9IGZyb20gXCIuLi92YWxpZGF0b3JzL3ZhbGlkYXRvci5qc1wiO1xuaW1wb3J0IHsgY29uZmlnRXh0ZW5zaW9uU3RvcmUsIGNvbmZpZ0ludGVybmFsU3RvcmUsIGdldENvbmZpZ1N0b3JlLCBnZXRFeHRlbnNpb25Db25maWcsIGdldEV4dGVuc2lvblNsb3RzQ29uZmlnU3RvcmUsIGdldEV4dGVuc2lvbnNDb25maWdTdG9yZSwgY2xlYXJDb25maWdEZXJpdmF0aW9uRXJyb3IsIGltcGxlbWVudGVyVG9vbHNDb25maWdTdG9yZSwgaW52YWxpZGF0ZUltcGxlbWVudGVyVG9vbHNDb25maWcsIHJlY29yZENvbmZpZ0Rlcml2YXRpb25FcnJvciwgc2V0SW1wbGVtZW50ZXJUb29sc0NvbmZpZ1JlY29tcHV0ZXIsIHRlbXBvcmFyeUNvbmZpZ1N0b3JlIH0gZnJvbSBcIi4vc3RhdGUuanNcIjtcbi8qKlxuICogRGVlcCBtZXJnZSB0d28gb2JqZWN0cywgd2l0aCByaWdodC1zaWRlIHZhbHVlcyB0YWtpbmcgcHJlY2VkZW5jZS5cbiAqIEFycmF5cyBhcmUgcmVwbGFjZWQgZW50aXJlbHkgKG5vdCBtZXJnZWQgYnkgaW5kZXgpLCBtYXRjaGluZyB0aGVcbiAqIGJlaGF2aW9yIG9mIHJhbWRhJ3MgbWVyZ2VEZWVwUmlnaHQuXG4gKi8gZnVuY3Rpb24gcmVwbGFjZUFycmF5cyhfb2JqVmFsdWUsIHNyY1ZhbHVlKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc3JjVmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBzcmNWYWx1ZTtcbiAgICB9XG59XG5mdW5jdGlvbiBtZXJnZURlZXBSZXBsYWNlKGxlZnQsIHJpZ2h0KSB7XG4gICAgcmV0dXJuIG1lcmdlV2l0aCh7fSwgbGVmdCwgcmlnaHQsIHJlcGxhY2VBcnJheXMpO1xufVxuLyoqXG4gKiBTdG9yZSBzZXR1cFxuICpcbiAqXG4gKiBTZXQgdXAgc3RvcmVzIGFuZCBzdWJzY3JpcHRpb25zIHNvIHRoYXQgaW5wdXRzIGdldCBwcm9jZXNzZWQgYXBwcm9wcmlhdGVseS5cbiAqXG4gKiBUaGVyZSBhcmUgKmlucHV0KiBzdG9yZXMgYW5kICpvdXRwdXQqIHN0b3Jlcy4gVGhlICppbnB1dCogc3RvcmVzXG4gKiBhcmUgY29uZmlnSW50ZXJuYWxTdG9yZSwgdGVtcG9yYXJ5Q29uZmlnU3RvcmUsIGFuZCBjb25maWdFeHRlbnNpb25TdG9yZS4gVGhlXG4gKiBvdXRwdXQgc3RvcmVzIGFyZSBzZXQgaW4gdGhlIGBjb21wdXRlLi4uYCBmdW5jdGlvbnMuIFRoZXkgYXJlIHRoZSBtb2R1bGVcbiAqIGNvbmZpZyBzdG9yZXMsIHRoZSBleHRlbnNpb24gc2xvdCBjb25maWcgc3RvcmVzIChieSBtb2R1bGUpLCB0aGUgZXh0ZW5zaW9uXG4gKiBjb25maWcgc3RvcmVzLCBhbmQgdGhlIGltcGxlbWVudGVyIHRvb2xzIGNvbmZpZyBzdG9yZS5cbiAqXG4gKiBUaGlzIGNvZGUgc2V0cyB1cCB0aGUgc3Vic2NyaXB0aW9ucyBzbyB0aGF0IHdoZW4gYW4gaW5wdXQgc3RvcmUgY2hhbmdlcyxcbiAqIHRoZSBjb3JyZWN0IHNldCBvZiBvdXRwdXQgc3RvcmVzIGFyZSB1cGRhdGVkLlxuICpcbiAqIEFsbCBgY29tcHV0ZS4uLmAgZnVuY3Rpb25zIGV4Y2VwdCBgY29tcHV0ZUV4dGVuc2lvbkNvbmZpZ3NgIGFyZSBwdXJlXG4gKiAob3IgYXJlIHN1cHBvc2VkIHRvIGJlKSwgb3RoZXIgdGhhbiB0aGUgZmFjdCB0aGF0IHRoZXkgYWxsIGBzZXRTdGF0ZWBcbiAqIHN0b3JlIHZhbHVlcyBhdCB0aGUgZW5kLiBgY29tcHV0ZUV4dGVuc2lvbkNvbmZpZ3NgIGNhbGxzIGBnZXRHbG9iYWxTdG9yZWAsXG4gKiB3aGljaCBjcmVhdGVzIHN0b3Jlcy5cbiAqLyAvLyBTdG9yZSB1bnN1YnNjcmliZSBmdW5jdGlvbnMgdG8gYWxsb3cgY2xlYW51cCAoZS5nLiwgaW4gdGVzdHMgb3IgaG90IG1vZHVsZSByZWxvYWRpbmcpXG5jb25zdCBjb25maWdTdWJzY3JpcHRpb25zID0gW107XG4vKipcbiAqIFJlY29tcHV0ZXMgYWxsIGNvbmZpZ3VyYXRpb24gZGVyaXZlZCBzdG9yZXMgYmFzZWQgb24gY3VycmVudCBzdGF0ZSBvZiBpbnB1dCBzdG9yZXMuXG4gKiBDYWxsZWQgd2hlbmV2ZXIgYW55IGlucHV0IHN0b3JlIChjb25maWdJbnRlcm5hbFN0b3JlLCB0ZW1wb3JhcnlDb25maWdTdG9yZSwgY29uZmlnRXh0ZW5zaW9uU3RvcmUpIGNoYW5nZXMuXG4gKi8gZnVuY3Rpb24gcmVjb21wdXRlQWxsQ29uZmlncygpIHtcbiAgICBjb25zdCBjb25maWdTdGF0ZSA9IGNvbmZpZ0ludGVybmFsU3RvcmUuZ2V0U3RhdGUoKTtcbiAgICBjb25zdCB0ZW1wQ29uZmlnU3RhdGUgPSB0ZW1wb3JhcnlDb25maWdTdG9yZS5nZXRTdGF0ZSgpO1xuICAgIGNvbnN0IGV4dGVuc2lvblN0YXRlID0gY29uZmlnRXh0ZW5zaW9uU3RvcmUuZ2V0U3RhdGUoKTtcbiAgICAvLyBNb3VudGluZyBhbiBleHRlbnNpb24gY2hhbmdlcyBvbmx5IGBjb25maWdFeHRlbnNpb25TdG9yZWAsIHdoaWNoIG9ubHkgdGhlIGV4dGVuc2lvbiBjb25maWdzXG4gICAgLy8gZGVwZW5kIG9uLCBzbyB0aGUgcmVzdCBvZiB0aGUgbGFzdCBkZXJpdmF0aW9uIGlzIHJldXNlZC5cbiAgICBjb25zdCBjb25maWdJbnB1dHNVbmNoYW5nZWQgPSBsYXN0RGVyaXZhdGlvbj8uY29uZmlnU3RhdGUgPT09IGNvbmZpZ1N0YXRlICYmIGxhc3REZXJpdmF0aW9uLnRlbXBDb25maWdTdGF0ZSA9PT0gdGVtcENvbmZpZ1N0YXRlO1xuICAgIGlmIChjb25maWdJbnB1dHNVbmNoYW5nZWQpIHtcbiAgICAgICAgY29tcHV0ZUV4dGVuc2lvbkNvbmZpZ3MoY29uZmlnU3RhdGUsIGV4dGVuc2lvblN0YXRlLCB0ZW1wQ29uZmlnU3RhdGUsIGxhc3REZXJpdmF0aW9uLnNsb3RDb25maWdzLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb21wdXRlTW9kdWxlQ29uZmlnKGNvbmZpZ1N0YXRlLCB0ZW1wQ29uZmlnU3RhdGUpO1xuICAgIGNvbnN0IHNsb3RDb25maWdzID0gZ2V0RXh0ZW5zaW9uU2xvdENvbmZpZ3MoY29uZmlnU3RhdGUsIHRlbXBDb25maWdTdGF0ZSk7XG4gICAgY29tcHV0ZUV4dGVuc2lvblNsb3RDb25maWdzKHNsb3RDb25maWdzKTtcbiAgICBjb21wdXRlRXh0ZW5zaW9uQ29uZmlncyhjb25maWdTdGF0ZSwgZXh0ZW5zaW9uU3RhdGUsIHRlbXBDb25maWdTdGF0ZSwgc2xvdENvbmZpZ3MsIGZhbHNlKTtcbiAgICAvLyBSZWNvcmRlZCBvbmx5IGFmdGVyIHRoZSBvdXRwdXRzIGFib3ZlIGFyZSB3cml0dGVuLCBzbyBhIGZhaWx1cmUgZm9yY2VzIGEgZnVsbCBkZXJpdmF0aW9uIG5leHQgdGltZS5cbiAgICBsYXN0RGVyaXZhdGlvbiA9IHtcbiAgICAgICAgY29uZmlnU3RhdGUsXG4gICAgICAgIHRlbXBDb25maWdTdGF0ZSxcbiAgICAgICAgc2xvdENvbmZpZ3NcbiAgICB9O1xuICAgIC8vIExhc3QsIGJlY2F1c2UgYSBmYWlsdXJlIGhlcmUgbXVzdCBub3Qgc2tpcCB0aGUgb3V0cHV0cyBhYm92ZS4gT25seSBrZXB0IGN1cnJlbnQgd2hpbGUgdGhlXG4gICAgLy8gaW1wbGVtZW50ZXIgdG9vbHMgYXJlIHdhdGNoaW5nIGl0OyBvdGhlcndpc2UgZGVyaXZlZCBvbiByZWFkLlxuICAgIGludmFsaWRhdGVJbXBsZW1lbnRlclRvb2xzQ29uZmlnKCk7XG59XG4vKiogVGhlIGlucHV0cyB0aGUgb3V0cHV0cyB3ZXJlIGxhc3QgZnVsbHkgZGVyaXZlZCBmcm9tLCBjb21wYXJlZCBieSBpZGVudGl0eS4gKi8gbGV0IGxhc3REZXJpdmF0aW9uID0gbnVsbDtcbi8qKlxuICogVGhlIG1vdW50ZWQgZXh0ZW5zaW9uIGVhY2ggZXh0ZW5zaW9uIGNvbmZpZyBlbnRyeSB3YXMgZGVyaXZlZCBmb3IuIEFuIGV4dGVuc2lvbiBJRCBjYW4gYmVcbiAqIG1vdW50ZWQgdW5kZXIgYSBkaWZmZXJlbnQgbW9kdWxlIHdoaWxlIGl0cyBzbG90IGFuZCBJRCBzdGF5IHRoZSBzYW1lLCBzbyBhbiBlbnRyeSBpcyBvbmx5XG4gKiBjdXJyZW50IGlmIGl0cyBtb2R1bGVzIG1hdGNoIHRvby5cbiAqLyBsZXQgZW50cnlPcmlnaW5zID0gbmV3IFdlYWtNYXAoKTtcbmZ1bmN0aW9uIHNldHVwQ29uZmlnU3Vic2NyaXB0aW9ucygpIHtcbiAgICAvLyBSZWdpc3RlcmVkIGhlcmUgcmF0aGVyIHRoYW4gYXQgbW9kdWxlIGxvYWQgc28gdGhhdCBgcmVzZXRDb25maWdTeXN0ZW1gIHJlc3RvcmVzIGl0LlxuICAgIHNldEltcGxlbWVudGVyVG9vbHNDb25maWdSZWNvbXB1dGVyKCgpPT5jb21wdXRlSW1wbGVtZW50ZXJUb29sc0NvbmZpZyhjb25maWdJbnRlcm5hbFN0b3JlLmdldFN0YXRlKCksIHRlbXBvcmFyeUNvbmZpZ1N0b3JlLmdldFN0YXRlKCkpKTtcbiAgICAvLyBJbml0aWFsIGNvbXB1dGF0aW9uXG4gICAgcmVjb21wdXRlQWxsQ29uZmlncygpO1xuICAgIC8vIFN1YnNjcmliZSB0byBhbGwgaW5wdXQgc3RvcmVzIHdpdGggYSBzaW5nbGUgaGFuZGxlclxuICAgIC8vIFRoaXMgZW5zdXJlcyB3ZSBvbmx5IHJlY29tcHV0ZSBvbmNlIGV2ZW4gaWYgbXVsdGlwbGUgc3RvcmVzIGNoYW5nZSBzaW11bHRhbmVvdXNseVxuICAgIGNvbmZpZ1N1YnNjcmlwdGlvbnMucHVzaChjb25maWdJbnRlcm5hbFN0b3JlLnN1YnNjcmliZShyZWNvbXB1dGVBbGxDb25maWdzU2FmZWx5KSwgdGVtcG9yYXJ5Q29uZmlnU3RvcmUuc3Vic2NyaWJlKHJlY29tcHV0ZUFsbENvbmZpZ3NTYWZlbHkpLCBjb25maWdFeHRlbnNpb25TdG9yZS5zdWJzY3JpYmUocmVjb21wdXRlQWxsQ29uZmlnc1NhZmVseSkpO1xufVxuLyoqIEVuc3VyZSB0aGF0IHdlIGRvIG5vdCB0aHJvdyBkdXJpbmcgYSBzdG9yZSBzdWJzY3JpcHRpb24gKi8gZnVuY3Rpb24gcmVjb21wdXRlQWxsQ29uZmlnc1NhZmVseSgpIHtcbiAgICBjbGVhckNvbmZpZ0Rlcml2YXRpb25FcnJvcigpO1xuICAgIHRyeSB7XG4gICAgICAgIHJlY29tcHV0ZUFsbENvbmZpZ3MoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJlY29yZENvbmZpZ0Rlcml2YXRpb25FcnJvcihlKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHJlY29tcHV0ZSB0aGUgY29uZmlndXJhdGlvbicsIGUpO1xuICAgIH1cbn1cbi8vIFNldCB1cCBzdWJzY3JpcHRpb25zIGF0IG1vZHVsZSBsb2FkIHRpbWVcbnNldHVwQ29uZmlnU3Vic2NyaXB0aW9ucygpO1xuY29uc3QgbW9kdWxlQ29uZmlnQ2FjaGUgPSBuZXcgTWFwKCk7XG5mdW5jdGlvbiBjb21wdXRlTW9kdWxlQ29uZmlnKHN0YXRlLCB0ZW1wU3RhdGUpIHtcbiAgICBmb3IgKGxldCBtb2R1bGVOYW1lIG9mIE9iamVjdC5rZXlzKHN0YXRlLnNjaGVtYXMpKXtcbiAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgc2NoZW1hIGNvdWxkIGJlIGVpdGhlciBqdXN0IHRoZSBpbXBsaWNpdCBzY2hlbWEgb3IgdGhlIGFjdHVhbGx5XG4gICAgICAgIC8vIGRlZmluZWQgc2NoZW1hLiBXZSBydW4gd2l0aCBqdXN0IHRoZSBpbXBsaWNpdCBzY2hlbWEgYmVjYXVzZSB3ZSB3YW50IHRvIHBvcHVsYXRlXG4gICAgICAgIC8vIHRoZSBjb25maWcgc3RvcmUgd2l0aCB0aGUgdHJhbnNsYXRpb24gb3ZlcnJpZGVzIGFzIHNvb24gYXMgcG9zc2libGUuIEluIGZhY3QsIHRoZVxuICAgICAgICAvLyB0cmFuc2xhdGlvbiBzeXN0ZW0gd2lsbCB0aHJvdyBmb3IgU3VzcGVuc2UgdW50aWwgdGhlIHRyYW5zbGF0aW9uIG92ZXJyaWRlcyBhcmVcbiAgICAgICAgLy8gYXZhaWxhYmxlLCB3aGljaCBhcyBvZiB0aGlzIHdyaXRpbmcgYmxvY2tzIHRoZSBzY2hlbWEgZGVmaW5pdGlvbiBmcm9tIG9jY3VycmluZ1xuICAgICAgICAvLyBmb3IgbW9kdWxlcyBsb2FkZWQgYmFzZWQgb24gdGhlaXIgZXh0ZW5zaW9ucy5cbiAgICAgICAgY29uc3QgbW9kdWxlU3RvcmUgPSBnZXRDb25maWdTdG9yZShtb2R1bGVOYW1lKTtcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gc3RhdGUuc2NoZW1hc1ttb2R1bGVOYW1lXTtcbiAgICAgICAgY29uc3QgbW9kdWxlTG9hZGVkID0gQm9vbGVhbihzdGF0ZS5tb2R1bGVMb2FkZWRbbW9kdWxlTmFtZV0pO1xuICAgICAgICBjb25zdCBjYWNoZWQgPSBtb2R1bGVDb25maWdDYWNoZS5nZXQobW9kdWxlTmFtZSk7XG4gICAgICAgIGxldCBuZXdTdGF0ZTtcbiAgICAgICAgaWYgKGNhY2hlZCAmJiBjYWNoZWQuc2NoZW1hID09PSBzY2hlbWEgJiYgY2FjaGVkLm1vZHVsZUxvYWRlZCA9PT0gbW9kdWxlTG9hZGVkICYmIGNhY2hlZC5wcm92aWRlZENvbmZpZ3MgPT09IHN0YXRlLnByb3ZpZGVkQ29uZmlncyAmJiBjYWNoZWQudGVtcG9yYXJ5Q29uZmlnID09PSB0ZW1wU3RhdGUuY29uZmlnKSB7XG4gICAgICAgICAgICBuZXdTdGF0ZSA9IGNhY2hlZC5zdGF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IG1vZHVsZUxvYWRlZCA/IGdldENvbmZpZ0Zvck1vZHVsZShtb2R1bGVOYW1lLCBzdGF0ZSwgdGVtcFN0YXRlKSA6IGdldENvbmZpZ0Zvck1vZHVsZUltcGxpY2l0U2NoZW1hKG1vZHVsZU5hbWUsIHN0YXRlLCB0ZW1wU3RhdGUpO1xuICAgICAgICAgICAgbmV3U3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgdHJhbnNsYXRpb25PdmVycmlkZXNMb2FkZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgbG9hZGVkOiBtb2R1bGVMb2FkZWQsXG4gICAgICAgICAgICAgICAgY29uZmlnXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgbW9kdWxlQ29uZmlnQ2FjaGUuc2V0KG1vZHVsZU5hbWUsIHtcbiAgICAgICAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgICAgICAgbW9kdWxlTG9hZGVkLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVkQ29uZmlnczogc3RhdGUucHJvdmlkZWRDb25maWdzLFxuICAgICAgICAgICAgICAgIHRlbXBvcmFyeUNvbmZpZzogdGVtcFN0YXRlLmNvbmZpZyxcbiAgICAgICAgICAgICAgICBzdGF0ZTogbmV3U3RhdGVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdyaXRpbmcgdW5jb25kaXRpb25hbGx5IHdvdWxkIGhhbmQgZXZlcnkgYHVzZUNvbmZpZ2AgY29uc3VtZXIgaW4gdGhlIGFwcGxpY2F0aW9uIGEgbmV3XG4gICAgICAgIC8vIG9iamVjdCDigJQgYW5kIGEgcmUtcmVuZGVyIOKAlCB3aGVuZXZlciBhbnkgbW9kdWxlIG9yIGV4dGVuc2lvbiBhbnl3aGVyZSBpcyBsb2FkZWQuXG4gICAgICAgIGNvbnN0IG9sZFN0YXRlID0gbW9kdWxlU3RvcmUuZ2V0U3RhdGUoKTtcbiAgICAgICAgaWYgKG9sZFN0YXRlLmxvYWRlZCAhPT0gbmV3U3RhdGUubG9hZGVkIHx8IG9sZFN0YXRlLnRyYW5zbGF0aW9uT3ZlcnJpZGVzTG9hZGVkICE9PSBuZXdTdGF0ZS50cmFuc2xhdGlvbk92ZXJyaWRlc0xvYWRlZCB8fCAhaXNFcXVhbChvbGRTdGF0ZS5jb25maWcsIG5ld1N0YXRlLmNvbmZpZykpIHtcbiAgICAgICAgICAgIG1vZHVsZVN0b3JlLnNldFN0YXRlKG5ld1N0YXRlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGNvbXB1dGVFeHRlbnNpb25TbG90Q29uZmlncyhzbG90Q29uZmlncykge1xuICAgIGNvbnN0IHNsb3RTdG9yZSA9IGdldEV4dGVuc2lvblNsb3RzQ29uZmlnU3RvcmUoKTtcbiAgICBjb25zdCBvbGRTbG90cyA9IHNsb3RTdG9yZS5nZXRTdGF0ZSgpLnNsb3RzO1xuICAgIGNvbnN0IHNsb3RzID0ge307XG4gICAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IFtzbG90TmFtZSwgY29uZmlnXSBvZiBPYmplY3QuZW50cmllcyhzbG90Q29uZmlncykpe1xuICAgICAgICBjb25zdCBwcmV2aW91cyA9IG9sZFNsb3RzW3Nsb3ROYW1lXTtcbiAgICAgICAgLy8gRW50cmllcyBrZWVwIHRoZWlyIGlkZW50aXR5IHdoZW4gdGhlIGNvbmZpZ3VyYXRpb24gYmVoaW5kIHRoZW0gaGFzbid0IGNoYW5nZWQsIHNvIHRoYXRcbiAgICAgICAgLy8gY2hhbmdpbmcgb25lIHNsb3QncyBjb25maWd1cmF0aW9uIGRvZXNuJ3QgaW52YWxpZGF0ZSBldmVyeSBvdGhlciBjb25maWd1cmVkIHNsb3QuXG4gICAgICAgIGlmIChwcmV2aW91cz8ubG9hZGVkICYmIGlzRXF1YWwocHJldmlvdXMuY29uZmlnLCBjb25maWcpKSB7XG4gICAgICAgICAgICBzbG90c1tzbG90TmFtZV0gPSBwcmV2aW91cztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHNsb3RzW3Nsb3ROYW1lXSA9IHtcbiAgICAgICAgICAgICAgICBsb2FkZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgY29uZmlnXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQnVpbHQgZnJvbSBzY3JhdGNoIHJhdGhlciB0aGFuIG1lcmdlZCBvdmVyIHRoZSBwcmV2aW91cyBzdGF0ZTogYSBzbG90IHdob3NlIGNvbmZpZ3VyYXRpb25cbiAgICAvLyBoYXMgYmVlbiByZW1vdmVkIOKAlCBjbGVhcmluZyB0aGUgdGVtcG9yYXJ5IGNvbmZpZywgc2F5IOKAlCBoYXMgdG8gbG9zZSBpdHMgZW50cnksIG9yIHRoZSBvbGRcbiAgICAvLyBjb25maWd1cmF0aW9uIHN0YXlzIGluIGZvcmNlIHVudGlsIHRoZSBwYWdlIGlzIHJlbG9hZGVkLlxuICAgIGlmIChjaGFuZ2VkIHx8IE9iamVjdC5rZXlzKG9sZFNsb3RzKS5sZW5ndGggIT09IE9iamVjdC5rZXlzKHNsb3RzKS5sZW5ndGgpIHtcbiAgICAgICAgc2xvdFN0b3JlLnNldFN0YXRlKHtcbiAgICAgICAgICAgIHNsb3RzXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNvbXB1dGVJbXBsZW1lbnRlclRvb2xzQ29uZmlnKHN0YXRlLCB0ZW1wQ29uZmlnU3RhdGUpIHtcbiAgICBjb25zdCBvbGRTdGF0ZSA9IGltcGxlbWVudGVyVG9vbHNDb25maWdTdG9yZS5nZXRTdGF0ZSgpO1xuICAgIGNvbnN0IGNvbmZpZyA9IGdldEltcGxlbWVudGVyVG9vbHNDb25maWcoc3RhdGUsIHRlbXBDb25maWdTdGF0ZSk7XG4gICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICAgIGNvbmZpZ1xuICAgIH07XG4gICAgLy8gVXNlIGRlZXAgZXF1YWxpdHkgb24gdGhlIGFjdHVhbCBjb25maWcgY29udGVudCwgbm90IHRoZSB3cmFwcGVyIG9iamVjdFxuICAgIGlmICghaXNFcXVhbChvbGRTdGF0ZS5jb25maWcsIG5ld1N0YXRlLmNvbmZpZykpIHtcbiAgICAgICAgaW1wbGVtZW50ZXJUb29sc0NvbmZpZ1N0b3JlLnNldFN0YXRlKG5ld1N0YXRlKTtcbiAgICB9XG59XG5mdW5jdGlvbiBjb21wdXRlRXh0ZW5zaW9uQ29uZmlncyhjb25maWdTdGF0ZSwgZXh0ZW5zaW9uU3RhdGUsIHRlbXBDb25maWdTdGF0ZSwgc2xvdENvbmZpZ3MsIGNvbmZpZ0lucHV0c1VuY2hhbmdlZCkge1xuICAgIGNvbnN0IGV4dGVuc2lvbnNDb25maWdTdG9yZSA9IGdldEV4dGVuc2lvbnNDb25maWdTdG9yZSgpO1xuICAgIGNvbnN0IG9sZENvbmZpZ3MgPSBleHRlbnNpb25zQ29uZmlnU3RvcmUuZ2V0U3RhdGUoKS5jb25maWdzO1xuICAgIGNvbnN0IGNvbmZpZ3MgPSB7fTtcbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xuICAgIGxldCBlbnRyeUNvdW50ID0gMDtcbiAgICAvLyBXZSBhc3N1bWUgdGhhdCB0aGUgbW9kdWxlIHNjaGVtYSBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQsIHNpbmNlIHRoZSBleHRlbnNpb25cbiAgICAvLyBpdCBjb250YWlucyBpcyBtb3VudGVkLlxuICAgIGZvciAobGV0IGV4dGVuc2lvbiBvZiBleHRlbnNpb25TdGF0ZS5tb3VudGVkRXh0ZW5zaW9ucyl7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzID0gb2xkQ29uZmlnc1tleHRlbnNpb24uc2xvdE5hbWVdPy5bZXh0ZW5zaW9uLmV4dGVuc2lvbklkXTtcbiAgICAgICAgbGV0IGVudHJ5O1xuICAgICAgICBjb25zdCBvcmlnaW4gPSBwcmV2aW91cyAmJiBlbnRyeU9yaWdpbnMuZ2V0KHByZXZpb3VzKTtcbiAgICAgICAgaWYgKGNvbmZpZ0lucHV0c1VuY2hhbmdlZCAmJiBwcmV2aW91cz8ubG9hZGVkICYmIG9yaWdpbj8uc2xvdE1vZHVsZU5hbWUgPT09IGV4dGVuc2lvbi5zbG90TW9kdWxlTmFtZSAmJiBvcmlnaW4uZXh0ZW5zaW9uTW9kdWxlTmFtZSA9PT0gZXh0ZW5zaW9uLmV4dGVuc2lvbk1vZHVsZU5hbWUpIHtcbiAgICAgICAgICAgIC8vIERlcml2ZWQgZnJvbSB0aGVzZSBzYW1lIGlucHV0cyBieSB0aGUgcHJldmlvdXMgcnVuLCBzbyBpdCBpcyBzdGlsbCBjdXJyZW50LlxuICAgICAgICAgICAgZW50cnkgPSBwcmV2aW91cztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IGNvbXB1dGVFeHRlbnNpb25Db25maWcoZXh0ZW5zaW9uLnNsb3RNb2R1bGVOYW1lLCBleHRlbnNpb24uZXh0ZW5zaW9uTW9kdWxlTmFtZSwgZXh0ZW5zaW9uLnNsb3ROYW1lLCBleHRlbnNpb24uZXh0ZW5zaW9uSWQsIGNvbmZpZ1N0YXRlLCB0ZW1wQ29uZmlnU3RhdGUsIHNsb3RDb25maWdzW2V4dGVuc2lvbi5zbG90TmFtZV0pO1xuICAgICAgICAgICAgLy8gRW50cmllcyBrZWVwIHRoZWlyIGlkZW50aXR5IHdoZW4gdGhlIGNvbmZpZ3VyYXRpb24gYmVoaW5kIHRoZW0gaGFzbid0IGNoYW5nZWQsIHNvIHRoYXRcbiAgICAgICAgICAgIC8vIG1vdW50aW5nIG9uZSBleHRlbnNpb24gZG9lc24ndCBoYW5kIGV2ZXJ5IG90aGVyIG1vdW50ZWQgZXh0ZW5zaW9uIGEgbmV3IGNvbmZpZyBvYmplY3QuXG4gICAgICAgICAgICBlbnRyeSA9IHByZXZpb3VzPy5sb2FkZWQgJiYgaXNFcXVhbChwcmV2aW91cy5jb25maWcsIGNvbmZpZykgPyBwcmV2aW91cyA6IHtcbiAgICAgICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICAgICAgbG9hZGVkOiB0cnVlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVudHJ5T3JpZ2lucy5zZXQoZW50cnksIGV4dGVuc2lvbik7XG4gICAgICAgIGlmIChlbnRyeSAhPT0gcHJldmlvdXMpIHtcbiAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29uZmlnc1tleHRlbnNpb24uc2xvdE5hbWVdKSB7XG4gICAgICAgICAgICBjb25maWdzW2V4dGVuc2lvbi5zbG90TmFtZV0gPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBjb25maWdzW2V4dGVuc2lvbi5zbG90TmFtZV1bZXh0ZW5zaW9uLmV4dGVuc2lvbklkXSA9IGVudHJ5O1xuICAgICAgICBlbnRyeUNvdW50Kys7XG4gICAgfVxuICAgIC8vIFNsb3RzIGtlZXAgdGhlaXIgaWRlbnRpdHkgdG9vIHdoZW4gbm9uZSBvZiB0aGVpciBlbnRyaWVzIGNoYW5nZWQuIFN1YnNjcmliZXJzIGNvbXBhcmUgdGhlc2VcbiAgICAvLyBwZXItc2xvdCBvYmplY3RzIHRvIHdvcmsgb3V0IHdoaWNoIHNsb3RzIHRvIHJlLWRlcml2ZSwgc28gaGFuZGluZyBvdXQgYSBmcmVzaCBvbmUgZm9yIGV2ZXJ5XG4gICAgLy8gc2xvdCBvbiBldmVyeSB3cml0ZSB3b3VsZCBtYXJrIGV2ZXJ5IHNsb3Qgd2l0aCBhIG1vdW50ZWQgZXh0ZW5zaW9uIGRpcnR5LlxuICAgIGZvciAoY29uc3QgW3Nsb3ROYW1lLCBzbG90Q29uZmlnc10gb2YgT2JqZWN0LmVudHJpZXMoY29uZmlncykpe1xuICAgICAgICBjb25zdCBwcmV2aW91c1Nsb3QgPSBvbGRDb25maWdzW3Nsb3ROYW1lXTtcbiAgICAgICAgaWYgKHByZXZpb3VzU2xvdCAmJiBPYmplY3Qua2V5cyhwcmV2aW91c1Nsb3QpLmxlbmd0aCA9PT0gT2JqZWN0LmtleXMoc2xvdENvbmZpZ3MpLmxlbmd0aCAmJiBPYmplY3QuZW50cmllcyhzbG90Q29uZmlncykuZXZlcnkoKFtleHRlbnNpb25JZCwgZW50cnldKT0+cHJldmlvdXNTbG90W2V4dGVuc2lvbklkXSA9PT0gZW50cnkpKSB7XG4gICAgICAgICAgICBjb25maWdzW3Nsb3ROYW1lXSA9IHByZXZpb3VzU2xvdDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWNoYW5nZWQpIHtcbiAgICAgICAgLy8gTm90aGluZyB3YXMgYWRkZWQgb3IgYWx0ZXJlZCwgYnV0IGFuIGV4dGVuc2lvbiBtYXkgaGF2ZSB1bm1vdW50ZWQsIHdoaWNoIG9ubHkgc2hvd3MgdXAgYXMgYVxuICAgICAgICAvLyBtaXNzaW5nIGVudHJ5LlxuICAgICAgICBjaGFuZ2VkID0gT2JqZWN0LmtleXMob2xkQ29uZmlncykubGVuZ3RoICE9PSBPYmplY3Qua2V5cyhjb25maWdzKS5sZW5ndGggfHwgT2JqZWN0LnZhbHVlcyhvbGRDb25maWdzKS5yZWR1Y2UoKHRvdGFsLCBzbG90KT0+dG90YWwgKyBPYmplY3Qua2V5cyhzbG90KS5sZW5ndGgsIDApICE9PSBlbnRyeUNvdW50O1xuICAgIH1cbiAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgICBleHRlbnNpb25zQ29uZmlnU3RvcmUuc2V0U3RhdGUoe1xuICAgICAgICAgICAgY29uZmlnc1xuICAgICAgICB9KTtcbiAgICB9XG59XG4vKlxuICogQVBJXG4gKlxuICovIC8qKlxuICogVGhpcyBkZWZpbmVzIGEgY29uZmlndXJhdGlvbiBzY2hlbWEgZm9yIGEgbW9kdWxlLiBUaGUgc2NoZW1hIHRlbGxzIHRoZVxuICogY29uZmlndXJhdGlvbiBzeXN0ZW0gaG93IHRoZSBtb2R1bGUgY2FuIGJlIGNvbmZpZ3VyZWQuIEl0IHNwZWNpZmllc1xuICogd2hhdCBtYWtlcyBjb25maWd1cmF0aW9uIHZhbGlkIG9yIGludmFsaWQuXG4gKlxuICogU2VlIFtDb25maWd1cmF0aW9uIFN5c3RlbV0oaHR0cHM6Ly9vMy1kb2NzLm9wZW5tcnMub3JnL2VuLVVTL2RvY3MvY29uZmlndXJhdGlvbi1zeXN0ZW0pXG4gKiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBkZWZpbmluZyBhIGNvbmZpZyBzY2hlbWEuXG4gKlxuICogQHBhcmFtIG1vZHVsZU5hbWUgTmFtZSBvZiB0aGUgbW9kdWxlIHRoZSBzY2hlbWEgaXMgYmVpbmcgZGVmaW5lZCBmb3IuIEdlbmVyYWxseVxuICogICBzaG91bGQgYmUgdGhlIG9uZSBpbiB3aGljaCB0aGUgYGRlZmluZUNvbmZpZ1NjaGVtYWAgY2FsbCB0YWtlcyBwbGFjZS5cbiAqIEBwYXJhbSBzY2hlbWEgVGhlIGNvbmZpZyBzY2hlbWEgZm9yIHRoZSBtb2R1bGVcbiAqLyBleHBvcnQgZnVuY3Rpb24gZGVmaW5lQ29uZmlnU2NoZW1hKG1vZHVsZU5hbWUsIHNjaGVtYSkge1xuICAgIHZhbGlkYXRlQ29uZmlnU2NoZW1hKG1vZHVsZU5hbWUsIHNjaGVtYSk7XG4gICAgY29uc3QgZW5oYW5jZWRTY2hlbWEgPSBtZXJnZURlZXBSZXBsYWNlKHNjaGVtYSwgaW1wbGljaXRDb25maWdTY2hlbWEpO1xuICAgIGNvbmZpZ0ludGVybmFsU3RvcmUuc2V0U3RhdGUoKHN0YXRlKT0+KHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgc2NoZW1hczoge1xuICAgICAgICAgICAgICAgIC4uLnN0YXRlLnNjaGVtYXMsXG4gICAgICAgICAgICAgICAgW21vZHVsZU5hbWVdOiBlbmhhbmNlZFNjaGVtYVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1vZHVsZUxvYWRlZDoge1xuICAgICAgICAgICAgICAgIC4uLnN0YXRlLm1vZHVsZUxvYWRlZCxcbiAgICAgICAgICAgICAgICBbbW9kdWxlTmFtZV06IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xufVxuLyoqXG4gKiBUaGlzIGFsZXJ0cyB0aGUgY29uZmlndXJhdGlvbiBzeXN0ZW0gdGhhdCBhIG1vZHVsZSBleGlzdHMuIFRoaXMgYWxsb3dzIGNvbmZpZyB0byBiZVxuICogcHJvY2Vzc2VkLCB3aGlsZSBzdGlsbCBhbGxvd2luZyB0aGUgZXh0ZW5zaW9uIHN5c3RlbSB0byBrbm93IHdoZXRoZXIgdGhlIG1vZHVsZSBoYXNcbiAqIGFjdHVhbGx5IGhhZCBpdHMgZnJvbnQgYnVuZGxlIGV4ZWN1dGVkIHlldC5cbiAqXG4gKiBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gZXNtLWFwcC1zaGVsbC5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSBtb2R1bGVOYW1lXG4gKi8gZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyTW9kdWxlV2l0aENvbmZpZ1N5c3RlbShtb2R1bGVOYW1lKSB7XG4gICAgY29uZmlnSW50ZXJuYWxTdG9yZS5zZXRTdGF0ZSgoc3RhdGUpPT4oe1xuICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICBzY2hlbWFzOiB7XG4gICAgICAgICAgICAgICAgLi4uc3RhdGUuc2NoZW1hcyxcbiAgICAgICAgICAgICAgICBbbW9kdWxlTmFtZV06IGltcGxpY2l0Q29uZmlnU2NoZW1hXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbn1cbi8qKlxuICogVGhpcyBhbGVydHMgdGhlIGNvbmZpZ3VyYXRpb24gc3lzdGVtIHRoYXQgYSBtb2R1bGUgaGFzIGJlZW4gbG9hZGVkLlxuICpcbiAqIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbiBlc20tYXBwLXNoZWxsLlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIG1vZHVsZU5hbWVcbiAqLyBleHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJNb2R1bGVMb2FkKG1vZHVsZU5hbWUpIHtcbiAgICBjb25maWdJbnRlcm5hbFN0b3JlLnNldFN0YXRlKChzdGF0ZSk9Pih7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIG1vZHVsZUxvYWRlZDoge1xuICAgICAgICAgICAgICAgIC4uLnN0YXRlLm1vZHVsZUxvYWRlZCxcbiAgICAgICAgICAgICAgICBbbW9kdWxlTmFtZV06IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xufVxuLyoqXG4gKiBUaGlzIGFsbG93cyB0aGUgY29uZmlnIHN5c3RlbSB0byBzdXBwb3J0IHRyYW5zbGF0aW9uIG92ZXJyaWRlcyBmb3IgbmFtZXNwYWNlcyB0aGF0XG4gKiBkbyBub3QgY29ycmVzcG9uZCB0byBtb2R1bGVzLlxuICpcbiAqIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbiBlc20tYXBwLXNoZWxsLlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIG5hbWVzcGFjZVxuICovIGV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclRyYW5zbGF0aW9uTmFtZXNwYWNlKG5hbWVzcGFjZSkge1xuICAgIGNvbmZpZ0ludGVybmFsU3RvcmUuc2V0U3RhdGUoKHN0YXRlKT0+KHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgc2NoZW1hczoge1xuICAgICAgICAgICAgICAgIC4uLnN0YXRlLnNjaGVtYXMsXG4gICAgICAgICAgICAgICAgW25hbWVzcGFjZV06IHRyYW5zbGF0aW9uT3ZlcnJpZGVzU2NoZW1hXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbn1cbi8qKlxuICogVGhpcyBkZWZpbmVzIGEgY29uZmlndXJhdGlvbiBzY2hlbWEgZm9yIGFuIGV4dGVuc2lvbi4gV2hlbiBhIHNjaGVtYSBpcyBkZWZpbmVkXG4gKiBmb3IgYW4gZXh0ZW5zaW9uLCB0aGF0IGV4dGVuc2lvbiB3aWxsIHJlY2VpdmUgdGhlIGNvbmZpZ3VyYXRpb24gY29ycmVzcG9uZGluZ1xuICogdG8gdGhhdCBzY2hlbWEsIHJhdGhlciB0aGFuIHRoZSBjb25maWd1cmF0aW9uIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1vZHVsZVxuICogaW4gd2hpY2ggaXQgaXMgZGVmaW5lZC5cbiAqXG4gKiBUaGUgc2NoZW1hIHRlbGxzIHRoZSBjb25maWd1cmF0aW9uIHN5c3RlbSBob3cgdGhlIG1vZHVsZSBjYW4gYmUgY29uZmlndXJlZC5cbiAqIEl0IHNwZWNpZmllcyB3aGF0IG1ha2VzIGNvbmZpZ3VyYXRpb24gdmFsaWQgb3IgaW52YWxpZC5cbiAqXG4gKiBTZWUgW0NvbmZpZ3VyYXRpb24gU3lzdGVtXShodHRwczovL28zLWRvY3Mub3Blbm1ycy5vcmcvZW4tVVMvZG9jcy9jb25maWd1cmF0aW9uLXN5c3RlbSlcbiAqIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGRlZmluaW5nIGEgY29uZmlnIHNjaGVtYS5cbiAqXG4gKiBAcGFyYW0gZXh0ZW5zaW9uTmFtZSBOYW1lIG9mIHRoZSBleHRlbnNpb24gdGhlIHNjaGVtYSBpcyBiZWluZyBkZWZpbmVkIGZvci5cbiAqICAgU2hvdWxkIG1hdGNoIHRoZSBgbmFtZWAgb2Ygb25lIG9mIHRoZSBgZXh0ZW5zaW9uc2AgZW50cmllcyBkZWZpbmVkIGluXG4gKiAgIHRoZSBhcHAncyBgcm91dGVzLmpzb25gIGZpbGUuXG4gKiBAcGFyYW0gc2NoZW1hIFRoZSBjb25maWcgc2NoZW1hIGZvciB0aGUgZXh0ZW5zaW9uXG4gKi8gZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUV4dGVuc2lvbkNvbmZpZ1NjaGVtYShleHRlbnNpb25OYW1lLCBzY2hlbWEpIHtcbiAgICB2YWxpZGF0ZUNvbmZpZ1NjaGVtYShleHRlbnNpb25OYW1lLCBzY2hlbWEpO1xuICAgIGNvbnN0IGVuaGFuY2VkU2NoZW1hID0gbWVyZ2VEZWVwUmVwbGFjZShzY2hlbWEsIGltcGxpY2l0Q29uZmlnU2NoZW1hKTtcbiAgICBjb25zdCBzdGF0ZSA9IGNvbmZpZ0ludGVybmFsU3RvcmUuZ2V0U3RhdGUoKTtcbiAgICBpZiAoc3RhdGUuc2NoZW1hc1tleHRlbnNpb25OYW1lXSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBDb25maWcgc2NoZW1hIGZvciBleHRlbnNpb24gJHtleHRlbnNpb25OYW1lfSBhbHJlYWR5IGV4aXN0cy4gSWYgdGhlcmUgYXJlIG11bHRpcGxlIGV4dGVuc2lvbnMgd2l0aCB0aGlzIHNhbWUgbmFtZSwgb25lIHdpbGwgcHJvYmFibHkgY3Jhc2guYCk7XG4gICAgfVxuICAgIGNvbmZpZ0ludGVybmFsU3RvcmUuc2V0U3RhdGUoKHN0YXRlKT0+KHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgc2NoZW1hczoge1xuICAgICAgICAgICAgICAgIC4uLnN0YXRlLnNjaGVtYXMsXG4gICAgICAgICAgICAgICAgW2V4dGVuc2lvbk5hbWVdOiBlbmhhbmNlZFNjaGVtYVxuICAgICAgICAgICAgfVxuICAgICAgICB9KSk7XG59XG4vKipcbiAqIFByb3ZpZGVzIGNvbmZpZ3VyYXRpb24gdmFsdWVzIHByb2dyYW1tYXRpY2FsbHkuIFRoaXMgaXMgYW4gYWx0ZXJuYXRpdmUgdG9cbiAqIHByb3ZpZGluZyBjb25maWd1cmF0aW9uIHRocm91Z2ggdGhlIGNvbmZpZy1maWxlLiBDb25maWd1cmF0aW9uIHByb3ZpZGVkIHRoaXNcbiAqIHdheSB3aWxsIGJlIG1lcmdlZCB3aXRoIGNvbmZpZ3VyYXRpb24gZnJvbSBvdGhlciBzb3VyY2VzLlxuICpcbiAqIEBwYXJhbSBjb25maWcgQSBjb25maWd1cmF0aW9uIG9iamVjdCB0byBtZXJnZSBpbnRvIHRoZSBleGlzdGluZyBjb25maWd1cmF0aW9uLlxuICogQHBhcmFtIHNvdXJjZU5hbWUgQW4gb3B0aW9uYWwgbmFtZSB0byBpZGVudGlmeSB0aGUgc291cmNlIG9mIHRoaXMgY29uZmlndXJhdGlvbixcbiAqICAgdXNlZCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLiBEZWZhdWx0cyB0byAncHJvdmlkZWQnLlxuICovIGV4cG9ydCBmdW5jdGlvbiBwcm92aWRlKGNvbmZpZywgc291cmNlTmFtZSA9ICdwcm92aWRlZCcpIHtcbiAgICBjb25maWdJbnRlcm5hbFN0b3JlLnNldFN0YXRlKChzdGF0ZSk9Pih7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIHByb3ZpZGVkQ29uZmlnczogW1xuICAgICAgICAgICAgICAgIC4uLnN0YXRlLnByb3ZpZGVkQ29uZmlncyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZTogc291cmNlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9KSk7XG59XG4vKipcbiAqIFJlc29sdmVzIHdpdGggYHNlbGVjdChzdGF0ZSlgIGFzIHNvb24gYXMgdGhlIHN0b3JlJ3Mgc3RhdGUgc2F0aXNmaWVzIGByZWFkeWAsIGxlYXZpbmcgbm9cbiAqIHN1YnNjcmlwdGlvbiBiZWhpbmQ6IG5vdGhpbmcgc3Vic2NyaWJlcyBhdCBhbGwgd2hlbiB0aGUgc3RvcmUgaXMgYWxyZWFkeSByZWFkeS4gVGhhdCBtYXR0ZXJzXG4gKiBiZWNhdXNlIGBnZXRDb25maWdgIHJ1bnMgb24gZXZlcnkgSFRUUCByZXF1ZXN0LCBhbmQgYSBzdWJzY3JpcHRpb24gdGhhdCBvdXRsaXZlcyBpdHMgcHJvbWlzZVxuICogYm90aCByZXRhaW5zIGl0cyBjbG9zdXJlIGZvcmV2ZXIgYW5kIHNsb3dzIGRvd24gZXZlcnkgbGF0ZXIgd3JpdGUgdG8gdGhhdCBzdG9yZS5cbiAqLyBmdW5jdGlvbiB3aGVuU3RvcmVSZWFkeShzdG9yZSwgcmVhZHksIHNlbGVjdCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSk9PntcbiAgICAgICAgbGV0IHVuc3Vic2NyaWJlO1xuICAgICAgICBsZXQgcmVzb2x2ZWQgPSBmYWxzZTtcbiAgICAgICAgZnVuY3Rpb24gdXBkYXRlKHN0YXRlKSB7XG4gICAgICAgICAgICBpZiAoIXJlc29sdmVkICYmIHJlYWR5KHN0YXRlKSkge1xuICAgICAgICAgICAgICAgIHJlc29sdmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHNlbGVjdChzdGF0ZSkpO1xuICAgICAgICAgICAgICAgIHVuc3Vic2NyaWJlPy4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB1cGRhdGUoc3RvcmUuZ2V0U3RhdGUoKSk7XG4gICAgICAgIGlmICghcmVzb2x2ZWQpIHtcbiAgICAgICAgICAgIHVuc3Vic2NyaWJlID0gc3RvcmUuc3Vic2NyaWJlKHVwZGF0ZSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8qKlxuICogQSBwcm9taXNlLWJhc2VkIHdheSB0byBhY2Nlc3MgdGhlIGNvbmZpZyBhcyBzb29uIGFzIGl0IGlzIGZ1bGx5IGxvYWRlZC5cbiAqIElmIGl0IGlzIGFscmVhZHkgbG9hZGVkLCByZXNvbHZlcyB0aGUgY29uZmlnIGluIGl0cyBwcmVzZW50IHN0YXRlLlxuICpcbiAqIFRoaXMgaXMgYSB1c2VmdWwgZnVuY3Rpb24gaWYgeW91IG5lZWQgdG8gZ2V0IHRoZSBjb25maWcgaW4gdGhlIGNvdXJzZVxuICogb2YgdGhlIGV4ZWN1dGlvbiBvZiBhIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSBtb2R1bGVOYW1lIFRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgZm9yIHdoaWNoIHRvIGxvb2sgdXAgdGhlIGNvbmZpZ1xuICovIGV4cG9ydCBmdW5jdGlvbiBnZXRDb25maWcobW9kdWxlTmFtZSkge1xuICAgIHJldHVybiB3aGVuU3RvcmVSZWFkeShnZXRDb25maWdTdG9yZShtb2R1bGVOYW1lKSwgKHN0YXRlKT0+Qm9vbGVhbihzdGF0ZS5sb2FkZWQgJiYgc3RhdGUuY29uZmlnKSwgKHN0YXRlKT0+bG9kYXNoT21pdChzdGF0ZS5jb25maWcsIFtcbiAgICAgICAgICAgICdEaXNwbGF5IGNvbmRpdGlvbnMnLFxuICAgICAgICAgICAgJ1RyYW5zbGF0aW9uIG92ZXJyaWRlcydcbiAgICAgICAgXSkpO1xufVxuLyoqXG4gKiBSZXRyaWV2ZXMgdHJhbnNsYXRpb24gb3ZlcnJpZGVzIGZvciBhbiBleHRlbnNpb24sIG9wdGlvbmFsbHkgc2NvcGVkIHRvIGEgc3BlY2lmaWNcbiAqIGV4dGVuc2lvbiBzbG90LiBXaGVuIGNhbGxlZCB3aXRoIG9ubHkgYSBtb2R1bGUgbmFtZSwgcmV0cmlldmVzIG1vZHVsZS1sZXZlbCBvdmVycmlkZXMuXG4gKiBUcmFuc2xhdGlvbiBvdmVycmlkZXMgYWxsb3cgY3VzdG9taXppbmcgdHJhbnNsYXRlZCBzdHJpbmdzIHdpdGhvdXQgbW9kaWZ5aW5nIHRoZVxuICogb3JpZ2luYWwgdHJhbnNsYXRpb24gZmlsZXMuXG4gKlxuICogQHBhcmFtIG1vZHVsZU5hbWUgVGhlIG5hbWUgb2YgdGhlIG1vZHVsZSBwcm92aWRpbmcgdGhlIHRyYW5zbGF0aW9uIGNvbnRleHQuXG4gKiBAcGFyYW0gc2xvdE5hbWUgT3B0aW9uYWwgZXh0ZW5zaW9uIHNsb3QgbmFtZSB0byBpbmNsdWRlIHNsb3Qtc3BlY2lmaWMgb3ZlcnJpZGVzLlxuICogQHBhcmFtIGV4dGVuc2lvbklkIE9wdGlvbmFsIGV4dGVuc2lvbiBJRCB0byBpbmNsdWRlIGV4dGVuc2lvbi1zcGVjaWZpYyBvdmVycmlkZXMuXG4gKiBAcmV0dXJucyBBIFByb21pc2UgcmVzb2x2aW5nIHRvIGFuIGFycmF5IG9mIHRyYW5zbGF0aW9uIG92ZXJyaWRlIG9iamVjdHMuXG4gKlxuICogQGludGVybmFsXG4gKi8gZXhwb3J0IGZ1bmN0aW9uIGdldFRyYW5zbGF0aW9uT3ZlcnJpZGVzKG1vZHVsZU5hbWUsIHNsb3ROYW1lLCBleHRlbnNpb25JZCkge1xuICAgIGNvbnN0IHByb21pc2VzID0gW1xuICAgICAgICB3aGVuU3RvcmVSZWFkeShnZXRDb25maWdTdG9yZShtb2R1bGVOYW1lKSwgKHN0YXRlKT0+Qm9vbGVhbihzdGF0ZS50cmFuc2xhdGlvbk92ZXJyaWRlc0xvYWRlZCAmJiBzdGF0ZS5jb25maWcpLCAoc3RhdGUpPT5zdGF0ZS5jb25maWdbJ1RyYW5zbGF0aW9uIG92ZXJyaWRlcyddID8/IHt9KVxuICAgIF07XG4gICAgaWYgKHNsb3ROYW1lICYmIGV4dGVuc2lvbklkKSB7XG4gICAgICAgIHByb21pc2VzLnB1c2god2hlblN0b3JlUmVhZHkoZ2V0RXh0ZW5zaW9uQ29uZmlnKHNsb3ROYW1lLCBleHRlbnNpb25JZCksIChzdGF0ZSk9PkJvb2xlYW4oc3RhdGUubG9hZGVkICYmIHN0YXRlLmNvbmZpZyksIChzdGF0ZSk9PnN0YXRlLmNvbmZpZ1snVHJhbnNsYXRpb24gb3ZlcnJpZGVzJ10gPz8ge30pKTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTtcbn1cbi8qKlxuICogVmFsaWRhdGUgYW5kIGludGVycG9sYXRlIGRlZmF1bHRzIGZvciBgcHJvdmlkZWRDb25maWdgIGFjY29yZGluZyB0byBgc2NoZW1hYFxuICpcbiAqIEBwYXJhbSBzY2hlbWEgIGEgY29uZmlndXJhdGlvbiBzY2hlbWFcbiAqIEBwYXJhbSBwcm92aWRlZENvbmZpZyAgYW4gb2JqZWN0IG9mIGNvbmZpZyB2YWx1ZXMgKHdpdGhvdXQgdGhlIHRvcC1sZXZlbCBtb2R1bGUgbmFtZSlcbiAqIEBwYXJhbSBrZXlQYXRoQ29udGV4dCAgYSBkb3Qtc2VwYXJhdGVkIHN0cmluZyB3aGljaCBoZWxwcyB0aGUgdXNlciBmaWd1cmUgb3V0IHdoZXJlXG4gKiAgICAgdGhlIHByb3ZpZGVkIGNvbmZpZyBjYW1lIGZyb21cbiAqIEByZXR1cm5zIFRoZSB2YWxpZGF0ZWQgYW5kIHByb2Nlc3NlZCBjb25maWd1cmF0aW9uIG9iamVjdCB3aXRoIGRlZmF1bHRzIGFwcGxpZWQuXG4gKiBAaW50ZXJuYWxcbiAqLyBleHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0NvbmZpZyhzY2hlbWEsIHByb3ZpZGVkQ29uZmlnLCBrZXlQYXRoQ29udGV4dCkge1xuICAgIHZhbGlkYXRlU3RydWN0dXJlKHNjaGVtYSwgcHJvdmlkZWRDb25maWcsIGtleVBhdGhDb250ZXh0KTtcbiAgICBjb25zdCBjb25maWcgPSBzZXREZWZhdWx0cyhzY2hlbWEsIHByb3ZpZGVkQ29uZmlnKTtcbiAgICBydW5BbGxWYWxpZGF0b3JzSW5Db25maWdUcmVlKHNjaGVtYSwgY29uZmlnLCBrZXlQYXRoQ29udGV4dCk7XG4gICAgcmV0dXJuIGNvbmZpZztcbn1cbmNvbnN0IGV4dGVuc2lvbkNvbmZpZ0NhY2hlID0gbmV3IE1hcCgpO1xuLyoqXG4gKiBSZXR1cm5zIHRoZSBjb25maWd1cmF0aW9uIGZvciBhbiBleHRlbnNpb24uIFRoaXMgY29uZmlndXJhdGlvbiBpcyBzcGVjaWZpY1xuICogdG8gdGhlIHNsb3QgaW4gd2hpY2ggaXQgaXMgbW91bnRlZCwgYW5kIGl0cyBJRCB3aXRoaW4gdGhhdCBzbG90LlxuICpcbiAqIFRoZSBzY2hlbWEgZm9yIHRoYXQgY29uZmlndXJhdGlvbiBpcyB0aGUgZXh0ZW5zaW9uIHNjaGVtYS4gSWYgbm8gZXh0ZW5zaW9uXG4gKiBzY2hlbWEgaGFzIGJlZW4gcHJvdmlkZWQsIHRoZSBzY2hlbWEgdXNlZCBpcyB0aGUgc2NoZW1hIG9mIHRoZSBtb2R1bGUgaW5cbiAqIHdoaWNoIHRoZSBleHRlbnNpb24gaXMgZGVmaW5lZC5cbiAqXG4gKiBAcGFyYW0gc2xvdE1vZHVsZU5hbWUgVGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB3aGljaCBkZWZpbmVzIHRoZSBleHRlbnNpb24gc2xvdFxuICogQHBhcmFtIGV4dGVuc2lvbk1vZHVsZU5hbWUgVGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB3aGljaCBkZWZpbmVzIHRoZSBleHRlbnNpb24gKGFuZCB0aGVyZWZvcmUgdGhlIGNvbmZpZyBzY2hlbWEpXG4gKiBAcGFyYW0gc2xvdE5hbWUgVGhlIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiBzbG90IHdoZXJlIHRoZSBleHRlbnNpb24gaXMgbW91bnRlZFxuICogQHBhcmFtIGV4dGVuc2lvbklkIFRoZSBJRCBvZiB0aGUgZXh0ZW5zaW9uIGluIGl0cyBzbG90XG4gKiBAcGFyYW0gc2xvdENvbmZpZyBUaGUgc2xvdCdzIGNvbmZpZ3VyYXRpb24sIGdhdGhlcmVkIGZyb20gZXZlcnkgbW9kdWxlIHRoYXQgY29uZmlndXJlcyBpdFxuICovIGZ1bmN0aW9uIGNvbXB1dGVFeHRlbnNpb25Db25maWcoc2xvdE1vZHVsZU5hbWUsIGV4dGVuc2lvbk1vZHVsZU5hbWUsIHNsb3ROYW1lLCBleHRlbnNpb25JZCwgY29uZmlnU3RhdGUsIHRlbXBDb25maWdTdGF0ZSwgc2xvdENvbmZpZykge1xuICAgIGNvbnN0IGV4dGVuc2lvbk5hbWUgPSBnZXRFeHRlbnNpb25OYW1lRnJvbUlkKGV4dGVuc2lvbklkKTtcbiAgICBjb25zdCBleHRlbnNpb25Db25maWdTY2hlbWEgPSBjb25maWdTdGF0ZS5zY2hlbWFzW2V4dGVuc2lvbk5hbWVdO1xuICAgIC8vIEpTT04gc3RyaW5nIG9mIHRoZXNlIGVsZW1lbnRzIHNob3VsZCBiZSB1bmlxdWUtcGVyLWV4dGVuc2lvblxuICAgIGNvbnN0IGNhY2hlS2V5ID0gSlNPTi5zdHJpbmdpZnkoW1xuICAgICAgICBzbG90TmFtZSxcbiAgICAgICAgZXh0ZW5zaW9uSWQsXG4gICAgICAgIHNsb3RNb2R1bGVOYW1lLFxuICAgICAgICBleHRlbnNpb25Nb2R1bGVOYW1lXG4gICAgXSk7XG4gICAgY29uc3QgY2FjaGVkID0gZXh0ZW5zaW9uQ29uZmlnQ2FjaGUuZ2V0KGNhY2hlS2V5KTtcbiAgICBpZiAoY2FjaGVkICYmIGNhY2hlZC5leHRlbnNpb25TY2hlbWEgPT09IGV4dGVuc2lvbkNvbmZpZ1NjaGVtYSAmJiBjYWNoZWQuZXh0ZW5zaW9uTW9kdWxlU2NoZW1hID09PSBjb25maWdTdGF0ZS5zY2hlbWFzW2V4dGVuc2lvbk1vZHVsZU5hbWVdICYmIGNhY2hlZC5wcm92aWRlZENvbmZpZ3MgPT09IGNvbmZpZ1N0YXRlLnByb3ZpZGVkQ29uZmlncyAmJiBjYWNoZWQudGVtcG9yYXJ5Q29uZmlnID09PSB0ZW1wQ29uZmlnU3RhdGUuY29uZmlnKSB7XG4gICAgICAgIHJldHVybiBjYWNoZWQuY29uZmlnO1xuICAgIH1cbiAgICBjb25zdCBuYW1lT2ZTY2hlbWFTb3VyY2UgPSBleHRlbnNpb25Db25maWdTY2hlbWEgPyBleHRlbnNpb25OYW1lIDogZXh0ZW5zaW9uTW9kdWxlTmFtZTtcbiAgICBjb25zdCBwcm92aWRlZENvbmZpZ3MgPSBnZXRQcm92aWRlZENvbmZpZ3MoY29uZmlnU3RhdGUsIHRlbXBDb25maWdTdGF0ZSk7XG4gICAgY29uc3Qgc2hhcmVkT3ZlcnJpZGUgPSBzbG90Q29uZmlnPy5jb25maWd1cmU/LltleHRlbnNpb25JZF0gPz8ge307XG4gICAgY29uc3Qgc2xvdE1vZHVsZUNvbmZpZyA9IG1lcmdlQ29uZmlnc0ZvcihzbG90TW9kdWxlTmFtZSwgcHJvdmlkZWRDb25maWdzKTtcbiAgICBjb25zdCBjb25maWdPdmVycmlkZSA9IHNsb3RNb2R1bGVDb25maWc/LmV4dGVuc2lvblNsb3RzPy5bc2xvdE5hbWVdPy5jb25maWd1cmU/LltleHRlbnNpb25JZF0gPz8ge307XG4gICAgY29uc3QgZXh0ZW5zaW9uQ29uZmlnID0gbWVyZ2VDb25maWdzRm9yKG5hbWVPZlNjaGVtYVNvdXJjZSwgcHJvdmlkZWRDb25maWdzKTtcbiAgICBjb25zdCBjb21iaW5lZENvbmZpZyA9IG1lcmdlQ29uZmlncyhbXG4gICAgICAgIGV4dGVuc2lvbkNvbmZpZyxcbiAgICAgICAgc2hhcmVkT3ZlcnJpZGUsXG4gICAgICAgIGNvbmZpZ092ZXJyaWRlXG4gICAgXSk7XG4gICAgY29uc3Qgc2NoZW1hID0gZXh0ZW5zaW9uQ29uZmlnU2NoZW1hID8/IGNvbmZpZ1N0YXRlLnNjaGVtYXNbZXh0ZW5zaW9uTW9kdWxlTmFtZV07XG4gICAgdmFsaWRhdGVTdHJ1Y3R1cmUoc2NoZW1hLCBjb21iaW5lZENvbmZpZywgbmFtZU9mU2NoZW1hU291cmNlKTtcbiAgICBjb25zdCBjb25maWcgPSBzZXREZWZhdWx0cyhzY2hlbWEsIGNvbWJpbmVkQ29uZmlnKTtcbiAgICBydW5BbGxWYWxpZGF0b3JzSW5Db25maWdUcmVlKHNjaGVtYSwgY29uZmlnLCBuYW1lT2ZTY2hlbWFTb3VyY2UpO1xuICAgIGRlbGV0ZSBjb25maWcuZXh0ZW5zaW9uU2xvdHM7XG4gICAgZXh0ZW5zaW9uQ29uZmlnQ2FjaGUuc2V0KGNhY2hlS2V5LCB7XG4gICAgICAgIGV4dGVuc2lvblNjaGVtYTogZXh0ZW5zaW9uQ29uZmlnU2NoZW1hLFxuICAgICAgICBleHRlbnNpb25Nb2R1bGVTY2hlbWE6IGNvbmZpZ1N0YXRlLnNjaGVtYXNbZXh0ZW5zaW9uTW9kdWxlTmFtZV0sXG4gICAgICAgIHByb3ZpZGVkQ29uZmlnczogY29uZmlnU3RhdGUucHJvdmlkZWRDb25maWdzLFxuICAgICAgICB0ZW1wb3JhcnlDb25maWc6IHRlbXBDb25maWdTdGF0ZS5jb25maWcsXG4gICAgICAgIGNvbmZpZ1xuICAgIH0pO1xuICAgIHJldHVybiBjb25maWc7XG59XG5jb25zdCBpbXBsZW1lbnRlclRvb2xzTW9kdWxlQ2FjaGUgPSBuZXcgTWFwKCk7XG5mdW5jdGlvbiBnZXRJbXBsZW1lbnRlclRvb2xzQ29uZmlnKGNvbmZpZ1N0YXRlLCB0ZW1wQ29uZmlnU3RhdGUpIHtcbiAgICBjb25zdCBhbm5vdGF0ZWRTY2hlbWFzID0gZ2V0QWxsU2NoZW1hc1dpdGhWYWx1ZXNBbmRTb3VyY2VzKGNvbmZpZ1N0YXRlLnNjaGVtYXMpO1xuICAgIGNvbnN0IGNvbmZpZ3NBbmRTb3VyY2VzID0gW1xuICAgICAgICAuLi5jb25maWdTdGF0ZS5wcm92aWRlZENvbmZpZ3MubWFwKChjKT0+W1xuICAgICAgICAgICAgICAgIGMuY29uZmlnLFxuICAgICAgICAgICAgICAgIGMuc291cmNlXG4gICAgICAgICAgICBdKSxcbiAgICAgICAgW1xuICAgICAgICAgICAgdGVtcENvbmZpZ1N0YXRlLmNvbmZpZyxcbiAgICAgICAgICAgICd0ZW1wb3JhcnkgY29uZmlnJ1xuICAgICAgICBdXG4gICAgXTtcbiAgICAvLyBBIG1vZHVsZSBjYW4gYmUgY29uZmlndXJlZCB3aXRob3V0IGhhdmluZyBkZWNsYXJlZCBhIHNjaGVtYSwgc28gdGhlIG1vZHVsZSBsaXN0IGlzIHRoZSB1bmlvblxuICAgIC8vIG9mIGJvdGggcmF0aGVyIHRoYW4ganVzdCB0aGUgc2NoZW1hcy5cbiAgICBjb25zdCBtb2R1bGVOYW1lcyA9IG5ldyBTZXQoT2JqZWN0LmtleXMoYW5ub3RhdGVkU2NoZW1hcykpO1xuICAgIGZvciAoY29uc3QgW2NvbmZpZ10gb2YgY29uZmlnc0FuZFNvdXJjZXMpe1xuICAgICAgICBmb3IgKGNvbnN0IG1vZHVsZU5hbWUgb2YgT2JqZWN0LmtleXMoY29uZmlnKSl7XG4gICAgICAgICAgICBtb2R1bGVOYW1lcy5hZGQobW9kdWxlTmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgZm9yIChjb25zdCBtb2R1bGVOYW1lIG9mIG1vZHVsZU5hbWVzKXtcbiAgICAgICAgY29uc3QgYW5ub3RhdGVkU2NoZW1hID0gYW5ub3RhdGVkU2NoZW1hc1ttb2R1bGVOYW1lXTtcbiAgICAgICAgY29uc3QgY29uZmlnU2xpY2VzID0gY29uZmlnc0FuZFNvdXJjZXMubWFwKChbY29uZmlnXSk9PmNvbmZpZ1ttb2R1bGVOYW1lXSk7XG4gICAgICAgIGNvbnN0IHNvdXJjZXMgPSBjb25maWdzQW5kU291cmNlcy5tYXAoKFssIHNvdXJjZV0pPT5zb3VyY2UpO1xuICAgICAgICBjb25zdCBjYWNoZWQgPSBpbXBsZW1lbnRlclRvb2xzTW9kdWxlQ2FjaGUuZ2V0KG1vZHVsZU5hbWUpO1xuICAgICAgICBpZiAoY2FjaGVkICYmIGNhY2hlZC5hbm5vdGF0ZWRTY2hlbWEgPT09IGFubm90YXRlZFNjaGVtYSAmJiBjYWNoZWQuY29uZmlnU2xpY2VzLmxlbmd0aCA9PT0gY29uZmlnU2xpY2VzLmxlbmd0aCAmJiBjYWNoZWQuY29uZmlnU2xpY2VzLmV2ZXJ5KChzbGljZSwgaSk9PnNsaWNlID09PSBjb25maWdTbGljZXNbaV0pICYmIGNhY2hlZC5zb3VyY2VzLmV2ZXJ5KChzb3VyY2UsIGkpPT5zb3VyY2UgPT09IHNvdXJjZXNbaV0pKSB7XG4gICAgICAgICAgICByZXN1bHRbbW9kdWxlTmFtZV0gPSBjYWNoZWQucmVzdWx0O1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG1lcmdlZCA9IGFubm90YXRlZFNjaGVtYSA/PyB7fTtcbiAgICAgICAgY29uZmlnc0FuZFNvdXJjZXMuZm9yRWFjaCgoWywgc291cmNlXSwgaSk9PntcbiAgICAgICAgICAgIGNvbnN0IHNsaWNlID0gY29uZmlnU2xpY2VzW2ldO1xuICAgICAgICAgICAgaWYgKHNsaWNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBtZXJnZWQgPSBtZXJnZURlZXBSZXBsYWNlKG1lcmdlZCwgY3JlYXRlVmFsdWVzQW5kU291cmNlc1RyZWUoc2xpY2UsIHNvdXJjZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaW1wbGVtZW50ZXJUb29sc01vZHVsZUNhY2hlLnNldChtb2R1bGVOYW1lLCB7XG4gICAgICAgICAgICBhbm5vdGF0ZWRTY2hlbWEsXG4gICAgICAgICAgICBjb25maWdTbGljZXMsXG4gICAgICAgICAgICBzb3VyY2VzLFxuICAgICAgICAgICAgcmVzdWx0OiBtZXJnZWRcbiAgICAgICAgfSk7XG4gICAgICAgIHJlc3VsdFttb2R1bGVOYW1lXSA9IG1lcmdlZDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogQ2FjaGluZyBwZXIgbW9kdWxlIGlzIHdoYXQgc3RvcHMgdGhlIHdhbGsgYmVpbmcgcXVhZHJhdGljOiBkZWZpbmluZyBvbmUgbW9kdWxlJ3Mgc2NoZW1hXG4gKiByZWNvbXB1dGVzIGV2ZXJ5IG1vZHVsZS5cbiAqXG4gKiBBIG1vZHVsZSB3aXRoIG5vIGNvbmZpZ3VyYXRpb24gb2YgaXRzIG93biBpcyBwdWJsaXNoZWQgc3RyYWlnaHQgZnJvbSB0aGlzIGNhY2hlLCBzbyBub3RoaW5nIG1heVxuICogbXV0YXRlIGEgdHJlZSBpdCByZWFkcyBvdXQgb2YgdGhlIGltcGxlbWVudGVyIHRvb2xzIGNvbmZpZyDigJQgaXQgaXMgdGhlIGNhY2hlIGVudHJ5LlxuICovIGNvbnN0IHNjaGVtYVZhbHVlc0FuZFNvdXJjZXNDYWNoZSA9IG5ldyBNYXAoKTtcbmZ1bmN0aW9uIGdldEFsbFNjaGVtYXNXaXRoVmFsdWVzQW5kU291cmNlcyhzY2hlbWFzKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgZm9yIChjb25zdCBbbW9kdWxlTmFtZSwgc2NoZW1hXSBvZiBPYmplY3QuZW50cmllcyhzY2hlbWFzKSl7XG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IHNjaGVtYVZhbHVlc0FuZFNvdXJjZXNDYWNoZS5nZXQobW9kdWxlTmFtZSk7XG4gICAgICAgIGlmIChjYWNoZWQgJiYgY2FjaGVkLnNjaGVtYSA9PT0gc2NoZW1hKSB7XG4gICAgICAgICAgICByZXN1bHRbbW9kdWxlTmFtZV0gPSBjYWNoZWQuYW5ub3RhdGVkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgYW5ub3RhdGVkID0gZ2V0U2NoZW1hV2l0aFZhbHVlc0FuZFNvdXJjZXMoY2xvbmVEZWVwKHNjaGVtYSkpO1xuICAgICAgICAgICAgc2NoZW1hVmFsdWVzQW5kU291cmNlc0NhY2hlLnNldChtb2R1bGVOYW1lLCB7XG4gICAgICAgICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgICAgICAgIGFubm90YXRlZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXN1bHRbbW9kdWxlTmFtZV0gPSBhbm5vdGF0ZWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGdldFNjaGVtYVdpdGhWYWx1ZXNBbmRTb3VyY2VzKHNjaGVtYSkge1xuICAgIGlmIChzY2hlbWEuaGFzT3duUHJvcGVydHkoJ19kZWZhdWx0JykpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnNjaGVtYSxcbiAgICAgICAgICAgIF92YWx1ZTogc2NoZW1hLl9kZWZhdWx0LFxuICAgICAgICAgICAgX3NvdXJjZTogJ2RlZmF1bHQnXG4gICAgICAgIH07XG4gICAgfSBlbHNlIGlmIChpc09yZGluYXJ5T2JqZWN0KHNjaGVtYSkpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHNjaGVtYSkucmVkdWNlKChvYmosIGtleSk9PntcbiAgICAgICAgICAgIG9ialtrZXldID0gZ2V0U2NoZW1hV2l0aFZhbHVlc0FuZFNvdXJjZXMoc2NoZW1hW2tleV0pO1xuICAgICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgfSwge30pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGF0IHRoaXMgcG9pbnQsIHRoZSBzY2hlbWEgaXMgYmFkIGFuZCBhbiBlcnJvciB3aWxsIGhhdmUgYmVlbiBsb2dnZWQgZHVyaW5nIHNjaGVtYSB2YWxpZGF0aW9uXG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG59XG5mdW5jdGlvbiBjcmVhdGVWYWx1ZXNBbmRTb3VyY2VzVHJlZShjb25maWcsIHNvdXJjZSkge1xuICAgIGlmIChpc09yZGluYXJ5T2JqZWN0KGNvbmZpZykpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGNvbmZpZykucmVkdWNlKChvYmosIGtleSk9PntcbiAgICAgICAgICAgIG9ialtrZXldID0gY3JlYXRlVmFsdWVzQW5kU291cmNlc1RyZWUoY29uZmlnW2tleV0sIHNvdXJjZSk7XG4gICAgICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgICB9LCB7fSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIF92YWx1ZTogY29uZmlnLFxuICAgICAgICAgICAgX3NvdXJjZTogc291cmNlXG4gICAgICAgIH07XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uU2xvdENvbmZpZ3MoY29uZmlnU3RhdGUsIHRlbXBDb25maWdTdGF0ZSkge1xuICAgIGNvbnN0IGFsbENvbmZpZ3MgPSBtZXJnZUNvbmZpZ3MoZ2V0UHJvdmlkZWRDb25maWdzKGNvbmZpZ1N0YXRlLCB0ZW1wQ29uZmlnU3RhdGUpKTtcbiAgICBjb25zdCBzbG90Q29uZmlnUGVyTW9kdWxlID0gT2JqZWN0LmtleXMoYWxsQ29uZmlncykucmVkdWNlKChvYmosIGtleSk9PntcbiAgICAgICAgaWYgKGFsbENvbmZpZ3Nba2V5XT8uZXh0ZW5zaW9uU2xvdHMpIHtcbiAgICAgICAgICAgIG9ialtrZXldID0gYWxsQ29uZmlnc1trZXldPy5leHRlbnNpb25TbG90cztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH0sIHt9KTtcbiAgICB2YWxpZGF0ZUFsbEV4dGVuc2lvblNsb3RDb25maWdzKHNsb3RDb25maWdQZXJNb2R1bGUpO1xuICAgIGNvbnN0IHNsb3RDb25maWdzID0ge307XG4gICAgY29uc3QgY29uZmlndXJlQmxvY2tzID0ge307XG4gICAgZm9yIChjb25zdCBjb25maWdCeVNsb3ROYW1lIG9mIE9iamVjdC52YWx1ZXMoc2xvdENvbmZpZ1Blck1vZHVsZSkpe1xuICAgICAgICBmb3IgKGNvbnN0IFtzbG90TmFtZSwgY29uZmlnXSBvZiBPYmplY3QuZW50cmllcyhjb25maWdCeVNsb3ROYW1lKSl7XG4gICAgICAgICAgICBzbG90Q29uZmlnc1tzbG90TmFtZV0gPSBjb25maWc7XG4gICAgICAgICAgICBpZiAoY29uZmlnLmNvbmZpZ3VyZSkge1xuICAgICAgICAgICAgICAgIHZhciBfY29uZmlndXJlQmxvY2tzLCBfc2xvdE5hbWU7XG4gICAgICAgICAgICAgICAgKChfY29uZmlndXJlQmxvY2tzID0gY29uZmlndXJlQmxvY2tzKVtfc2xvdE5hbWUgPSBzbG90TmFtZV0gPz8gKF9jb25maWd1cmVCbG9ja3NbX3Nsb3ROYW1lXSA9IFtdKSkucHVzaChjb25maWcuY29uZmlndXJlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtzbG90TmFtZSwgYmxvY2tzXSBvZiBPYmplY3QuZW50cmllcyhjb25maWd1cmVCbG9ja3MpKXtcbiAgICAgICAgY29uc3QgY29uZmlndXJlID0gYmxvY2tzLmxlbmd0aCA9PT0gMSA/IGJsb2Nrc1swXSA6IG1lcmdlQ29uZmlncyhibG9ja3MpO1xuICAgICAgICBpZiAoc2xvdENvbmZpZ3Nbc2xvdE5hbWVdLmNvbmZpZ3VyZSAhPT0gY29uZmlndXJlKSB7XG4gICAgICAgICAgICBzbG90Q29uZmlnc1tzbG90TmFtZV0gPSB7XG4gICAgICAgICAgICAgICAgLi4uc2xvdENvbmZpZ3Nbc2xvdE5hbWVdLFxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc2xvdENvbmZpZ3M7XG59XG5mdW5jdGlvbiB2YWxpZGF0ZUFsbEV4dGVuc2lvblNsb3RDb25maWdzKHNsb3RDb25maWdQZXJNb2R1bGUpIHtcbiAgICBmb3IgKGxldCBbbW9kdWxlTmFtZSwgY29uZmlnQnlTbG90TmFtZV0gb2YgT2JqZWN0LmVudHJpZXMoc2xvdENvbmZpZ1Blck1vZHVsZSkpe1xuICAgICAgICBmb3IgKGxldCBbc2xvdE5hbWUsIGNvbmZpZ10gb2YgT2JqZWN0LmVudHJpZXMoY29uZmlnQnlTbG90TmFtZSkpe1xuICAgICAgICAgICAgdmFsaWRhdGVFeHRlbnNpb25TbG90Q29uZmlnKGNvbmZpZywgbW9kdWxlTmFtZSwgc2xvdE5hbWUpO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gdmFsaWRhdGVFeHRlbnNpb25TbG90Q29uZmlnKGNvbmZpZywgbW9kdWxlTmFtZSwgc2xvdE5hbWUpIHtcbiAgICBjb25zdCBrZXlQYXRoID0gYCR7bW9kdWxlTmFtZX0uZXh0ZW5zaW9uU2xvdHMuJHtzbG90TmFtZX1gO1xuICAgIGNvbnN0IGVycm9yUHJlZml4ID0gYEV4dGVuc2lvbiBzbG90IGNvbmZpZyAnJHtrZXlQYXRofSdgO1xuICAgIGNvbnN0IGludmFsaWRLZXlzID0gT2JqZWN0LmtleXMoY29uZmlnKS5maWx0ZXIoKGspPT4hW1xuICAgICAgICAgICAgJ2FkZCcsXG4gICAgICAgICAgICAncmVtb3ZlJyxcbiAgICAgICAgICAgICdvcmRlcicsXG4gICAgICAgICAgICAnY29uZmlndXJlJ1xuICAgICAgICBdLmluY2x1ZGVzKGspKTtcbiAgICBpZiAoaW52YWxpZEtleXMubGVuZ3RoKSB7XG4gICAgICAgIGxvZ0Vycm9yKGtleVBhdGgsIGVycm9yUHJlZml4ICsgYCcgY29udGFpbnMgaW52YWxpZCBrZXlzICcke2ludmFsaWRLZXlzLmpvaW4oXCInLCAnXCIpfSdgKTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5hZGQpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbmZpZy5hZGQpIHx8ICFjb25maWcuYWRkLmV2ZXJ5KChuKT0+dHlwZW9mIG4gPT09ICdzdHJpbmcnKSkge1xuICAgICAgICAgICAgbG9nRXJyb3Ioa2V5UGF0aCwgZXJyb3JQcmVmaXggKyBgLmFkZCcgaXMgaW52YWxpZC4gTXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzIChleHRlbnNpb24gSURzKWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChjb25maWcucmVtb3ZlKSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjb25maWcucmVtb3ZlKSB8fCAhY29uZmlnLnJlbW92ZS5ldmVyeSgobik9PnR5cGVvZiBuID09PSAnc3RyaW5nJykpIHtcbiAgICAgICAgICAgIGxvZ0Vycm9yKGtleVBhdGgsIGVycm9yUHJlZml4ICsgYC5yZW1vdmUnIGlzIGludmFsaWQuIE11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncyAoZXh0ZW5zaW9uIElEcylgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoY29uZmlnLm9yZGVyKSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjb25maWcub3JkZXIpIHx8ICFjb25maWcub3JkZXIuZXZlcnkoKG4pPT50eXBlb2YgbiA9PT0gJ3N0cmluZycpKSB7XG4gICAgICAgICAgICBsb2dFcnJvcihrZXlQYXRoLCBlcnJvclByZWZpeCArIGAub3JkZXInIGlzIGludmFsaWQuIE11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncyAoZXh0ZW5zaW9uIElEcylgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoY29uZmlnLmNvbmZpZ3VyZSkge1xuICAgICAgICBpZiAoIWlzT3JkaW5hcnlPYmplY3QoY29uZmlnLmNvbmZpZ3VyZSkpIHtcbiAgICAgICAgICAgIGxvZ0Vycm9yKGtleVBhdGgsIGVycm9yUHJlZml4ICsgYC5jb25maWd1cmUnIGlzIGludmFsaWQuIE11c3QgYmUgYW4gb2JqZWN0IHdpdGggZXh0ZW5zaW9uIElEcyBmb3Iga2V5c2ApO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0UHJvdmlkZWRDb25maWdzKGNvbmZpZ1N0YXRlLCB0ZW1wQ29uZmlnU3RhdGUpIHtcbiAgICByZXR1cm4gW1xuICAgICAgICAuLi5jb25maWdTdGF0ZS5wcm92aWRlZENvbmZpZ3MubWFwKChjKT0+Yy5jb25maWcpLFxuICAgICAgICB0ZW1wQ29uZmlnU3RhdGUuY29uZmlnXG4gICAgXTtcbn1cbi8qKlxuICogVmFsaWRhdGVzIHRoZSBjb25maWcgc2NoZW1hIGZvciBhIG1vZHVsZS4gU2luY2UgcHJvYmxlbXMgaWRlbnRpZmllZCBoZXJlIGFyZSBwcm9ncmFtbWluZyBlcnJvcnNcbiAqIHRoYXQgaG9wZWZ1bGx5IHdpbGwgYmUgY2F1Z2h0IGR1cmluZyBkZXZlbG9wbWVudCwgdGhpcyBmdW5jdGlvbiBsb2dzIGVycm9ycyB0byB0aGUgY29uc29sZSBkaXJlY3RseTtcbiAqIGl0J3MgZmluZSBpZiB3ZSBzcGFtIHRoZSB1c2VyIHdpdGggdGhlc2UgZXJyb3JzLlxuICovIGZ1bmN0aW9uIHZhbGlkYXRlQ29uZmlnU2NoZW1hKG1vZHVsZU5hbWUsIHNjaGVtYSwga2V5UGF0aCA9ICcnKSB7XG4gICAgY29uc3QgdXBkYXRlTWVzc2FnZSA9IGBQbGVhc2UgdmVyaWZ5IHRoYXQgeW91IGFyZSBydW5uaW5nIHRoZSBsYXRlc3QgdmVyc2lvbiBhbmQsIGlmIHNvLCBhbGVydCB0aGUgbWFpbnRhaW5lci5gO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHNjaGVtYSkuZmlsdGVyKChrKT0+IWsuc3RhcnRzV2l0aCgnXycpKSl7XG4gICAgICAgIGNvbnN0IHRoaXNLZXlQYXRoID0ga2V5UGF0aCArIChrZXlQYXRoICYmICcuJykgKyBrZXk7XG4gICAgICAgIGNvbnN0IHNjaGVtYVBhcnQgPSBzY2hlbWFba2V5XTtcbiAgICAgICAgaWYgKHRoaXNLZXlQYXRoID09PSAnRGlzcGxheSBjb25kaXRpb25zJykge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgJHttb2R1bGVOYW1lfSBkZWNsYXJlcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGNhbGxlZCBcIkRpc3BsYXkgY29uZGl0aW9uc1wiOyB0aGUgXCJEaXNwbGF5IGNvbmRpdGlvbnNcIiBvcHRpb24gaXMgYSByZXNlcnZlZCBuYW1lLiAke3VwZGF0ZU1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXNLZXlQYXRoID09PSAnVHJhbnNsYXRpb24gb3ZlcnJpZGVzJykge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgJHttb2R1bGVOYW1lfSBkZWNsYXJlcyBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGNhbGxlZCBcIlRyYW5zbGF0aW9uIG92ZXJyaWRlc1wiOyB0aGUgXCJUcmFuc2xhdGlvbiBvdmVycmlkZXNcIiBvcHRpb24gaXMgYSByZXNlcnZlZCBuYW1lLiAke3VwZGF0ZU1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc09yZGluYXJ5T2JqZWN0KHNjaGVtYVBhcnQpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGAke21vZHVsZU5hbWV9IGhhcyBiYWQgY29uZmlnIHNjaGVtYSBkZWZpbml0aW9uIGZvciBrZXkgJyR7dGhpc0tleVBhdGh9Jy4gJHt1cGRhdGVNZXNzYWdlfWApO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzY2hlbWFQYXJ0Lmhhc093blByb3BlcnR5KCdfZGVmYXVsdCcpKSB7XG4gICAgICAgICAgICAvLyByZWN1cnNlIGZvciBuZXN0ZWQgY29uZmlnIGtleXNcbiAgICAgICAgICAgIHZhbGlkYXRlQ29uZmlnU2NoZW1hKG1vZHVsZU5hbWUsIHNjaGVtYVBhcnQsIHRoaXNLZXlQYXRoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbGVtZW50cyA9IHNjaGVtYVBhcnQuX2VsZW1lbnRzO1xuICAgICAgICBpZiAoaGFzT2JqZWN0U2NoZW1hKGVsZW1lbnRzKSkge1xuICAgICAgICAgICAgdmFsaWRhdGVDb25maWdTY2hlbWEobW9kdWxlTmFtZSwgZWxlbWVudHMsIHRoaXNLZXlQYXRoICsgJy5fZWxlbWVudHMnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2NoZW1hUGFydC5fdmFsaWRhdG9ycykge1xuICAgICAgICAgICAgZm9yIChsZXQgdmFsaWRhdG9yIG9mIHNjaGVtYVBhcnQuX3ZhbGlkYXRvcnMpe1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsaWRhdG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYCR7bW9kdWxlTmFtZX0gaGFzIGludmFsaWQgdmFsaWRhdG9yIGZvciBrZXkgJyR7dGhpc0tleVBhdGh9JyAke3VwZGF0ZU1lc3NhZ2V9LmAgKyBgXFxuXFxuSWYgeW91J3JlIHRoZSBtYWludGFpbmVyOiB2YWxpZGF0b3JzIG11c3QgYmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGVpdGhlciBgICsgYHVuZGVmaW5lZCBvciBhbiBlcnJvciBzdHJpbmcuIFJlY2VpdmVkICR7dmFsaWRhdG9yfS5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsdWVUeXBlID0gc2NoZW1hUGFydC5fdHlwZTtcbiAgICAgICAgaWYgKHZhbHVlVHlwZSAmJiAhT2JqZWN0LnZhbHVlcyhUeXBlKS5pbmNsdWRlcyh2YWx1ZVR5cGUpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGAke21vZHVsZU5hbWV9IGhhcyBpbnZhbGlkIHR5cGUgZm9yIGtleSAnJHt0aGlzS2V5UGF0aH0nICR7dXBkYXRlTWVzc2FnZX0uYCArIGBcXG5cXG5JZiB5b3UncmUgdGhlIG1haW50YWluZXI6IHRoZSBhbGxvd2VkIHR5cGVzIGFyZSAke09iamVjdC52YWx1ZXMoVHlwZSkuam9pbignLCAnKX0uIGAgKyBgUmVjZWl2ZWQgJyR7dmFsdWVUeXBlfSdgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoT2JqZWN0LmtleXMoc2NoZW1hUGFydCkuZXZlcnkoKGspPT5bXG4gICAgICAgICAgICAgICAgJ19kZXNjcmlwdGlvbicsXG4gICAgICAgICAgICAgICAgJ192YWxpZGF0b3JzJyxcbiAgICAgICAgICAgICAgICAnX2VsZW1lbnRzJyxcbiAgICAgICAgICAgICAgICAnX3R5cGUnXG4gICAgICAgICAgICBdLmluY2x1ZGVzKGspKSAmJiAha2V5UGF0aC5pbmNsdWRlcygnLl9lbGVtZW50cycpKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGAke21vZHVsZU5hbWV9IGhhcyBiYWQgY29uZmlnIHNjaGVtYSBkZWZpbml0aW9uIGZvciBrZXkgJyR7dGhpc0tleVBhdGh9Jy4gJHt1cGRhdGVNZXNzYWdlfS5gICsgYFxcblxcbklmIHlvdSdyZSB0aGUgbWFpbnRhaW5lcjogYWxsIGNvbmZpZyBlbGVtZW50cyBtdXN0IGhhdmUgYSBkZWZhdWx0LiBgICsgYFJlY2VpdmVkICR7SlNPTi5zdHJpbmdpZnkoc2NoZW1hUGFydCl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVsZW1lbnRzICYmIHZhbHVlVHlwZSAmJiAhW1xuICAgICAgICAgICAgVHlwZS5BcnJheSxcbiAgICAgICAgICAgIFR5cGUuT2JqZWN0XG4gICAgICAgIF0uaW5jbHVkZXModmFsdWVUeXBlKSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgJHttb2R1bGVOYW1lfSBoYXMgYmFkIGNvbmZpZyBzY2hlbWEgZGVmaW5pdGlvbiBmb3Iga2V5ICcke3RoaXNLZXlQYXRofScuICR7dXBkYXRlTWVzc2FnZX0uYCArIGBcXG5cXG5JZiB5b3UncmUgdGhlIG1haW50YWluZXI6IHRoZSAnZWxlbWVudHMnIGtleSBvbmx5IHdvcmtzIHdpdGggJ190eXBlJyBlcXVhbCB0byAnQXJyYXknIG9yICdPYmplY3QnLiBgICsgYFJlY2VpdmVkICR7SlNPTi5zdHJpbmdpZnkodmFsdWVUeXBlKX1gKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGdldENvbmZpZ0Zvck1vZHVsZShtb2R1bGVOYW1lLCBjb25maWdTdGF0ZSwgdGVtcENvbmZpZ1N0YXRlKSB7XG4gICAgY29uc3Qgc2NoZW1hID0gY29uZmlnU3RhdGUuc2NoZW1hc1ttb2R1bGVOYW1lXTtcbiAgICBjb25zdCBpbnB1dENvbmZpZyA9IG1lcmdlQ29uZmlnc0Zvcihtb2R1bGVOYW1lLCBnZXRQcm92aWRlZENvbmZpZ3MoY29uZmlnU3RhdGUsIHRlbXBDb25maWdTdGF0ZSkpO1xuICAgIHZhbGlkYXRlU3RydWN0dXJlKHNjaGVtYSwgaW5wdXRDb25maWcsIG1vZHVsZU5hbWUpO1xuICAgIGNvbnN0IGNvbmZpZyA9IHNldERlZmF1bHRzKHNjaGVtYSwgaW5wdXRDb25maWcpO1xuICAgIHJ1bkFsbFZhbGlkYXRvcnNJbkNvbmZpZ1RyZWUoc2NoZW1hLCBjb25maWcsIG1vZHVsZU5hbWUpO1xuICAgIGRlbGV0ZSBjb25maWcuZXh0ZW5zaW9uU2xvdHM7XG4gICAgcmV0dXJuIGNvbmZpZztcbn1cbmZ1bmN0aW9uIGdldENvbmZpZ0Zvck1vZHVsZUltcGxpY2l0U2NoZW1hKG1vZHVsZU5hbWUsIGNvbmZpZ1N0YXRlLCB0ZW1wQ29uZmlnU3RhdGUpIHtcbiAgICBjb25zdCBpbnB1dENvbmZpZyA9IG1lcmdlQ29uZmlnc0Zvcihtb2R1bGVOYW1lLCBnZXRQcm92aWRlZENvbmZpZ3MoY29uZmlnU3RhdGUsIHRlbXBDb25maWdTdGF0ZSkpO1xuICAgIGNvbnN0IGNvbmZpZyA9IHNldERlZmF1bHRzKGltcGxpY2l0Q29uZmlnU2NoZW1hLCBpbnB1dENvbmZpZyk7XG4gICAgcnVuQWxsVmFsaWRhdG9yc0luQ29uZmlnVHJlZShpbXBsaWNpdENvbmZpZ1NjaGVtYSwgY29uZmlnLCBtb2R1bGVOYW1lKTtcbiAgICBkZWxldGUgY29uZmlnLmV4dGVuc2lvblNsb3RzO1xuICAgIHJldHVybiBjb25maWc7XG59XG5mdW5jdGlvbiBtZXJnZUNvbmZpZ3NGb3IobW9kdWxlTmFtZSwgYWxsQ29uZmlncykge1xuICAgIGNvbnN0IGFsbENvbmZpZ3NGb3JNb2R1bGUgPSBhbGxDb25maWdzLm1hcCgoeyBbbW9kdWxlTmFtZV06IGMgfSk9PmMpLmZpbHRlcigoYyk9PiEhYyk7XG4gICAgcmV0dXJuIG1lcmdlQ29uZmlncyhhbGxDb25maWdzRm9yTW9kdWxlKTtcbn1cbi8qKlxuICogTWVyZ2VzIGEgd2hvbGUgbGlzdCBhdCBvbmNlLCBhY2N1bXVsYXRpbmcgaW50byBvbmUgZGVzdGluYXRpb24uXG4gKi8gZnVuY3Rpb24gbWVyZ2VDb25maWdzKGNvbmZpZ3MpIHtcbiAgICByZXR1cm4gY29uZmlncy5yZWR1Y2UoKGFjYywgY29uZmlnKT0+bWVyZ2VXaXRoKGFjYywgY29uZmlnLCByZXBsYWNlQXJyYXlzKSwge30pO1xufVxuLyoqXG4gKiBSZWN1cnNpdmVseSBjaGVjayB0aGUgcHJvdmlkZWQgY29uZmlnIHRyZWUgdG8gbWFrZSBzdXJlIHRoYXQgYWxsXG4gKiBvZiB0aGUgcHJvdmlkZWQgcHJvcGVydGllcyBleGlzdCBpbiB0aGUgc2NoZW1hLCBhbmQgdGhhdCB0eXBlcyBhcmVcbiAqIGNvcnJlY3QuIERvZXMgbm90IHJ1biB2YWxpZGF0b3JzIHlldCwgc2luY2UgdGhvc2Ugd2lsbCBiZSBydW4gb25cbiAqIHRoZSBjb25maWcgd2l0aCB0aGUgZGVmYXVsdHMgZmlsbGVkIGluLlxuICovIGZ1bmN0aW9uIHZhbGlkYXRlU3RydWN0dXJlKHNjaGVtYSwgY29uZmlnLCBrZXlQYXRoID0gJycpIHtcbiAgICAvLyB2YWxpZGF0ZSBlYWNoIGNvbnN0aXR1ZW50IGVsZW1lbnRcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhjb25maWcpKXtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBjb25maWdba2V5XTtcbiAgICAgICAgY29uc3QgdGhpc0tleVBhdGggPSBrZXlQYXRoICsgJy4nICsga2V5O1xuICAgICAgICBjb25zdCBzY2hlbWFQYXJ0ID0gc2NoZW1hW2tleV07XG4gICAgICAgIGlmICghc2NoZW1hLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgIGlmICghKGtleSA9PT0gJ2V4dGVuc2lvblNsb3RzJyAmJiBrZXlQYXRoICE9PSAnJykpIHtcbiAgICAgICAgICAgICAgICBsb2dFcnJvcih0aGlzS2V5UGF0aCwgYFVua25vd24gY29uZmlnIGtleSAnJHt0aGlzS2V5UGF0aH0nIHByb3ZpZGVkLiBJZ25vcmluZy5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhbGlkYXRlQnJhbmNoU3RydWN0dXJlKHNjaGVtYVBhcnQsIHZhbHVlLCB0aGlzS2V5UGF0aCk7XG4gICAgfVxufVxuZnVuY3Rpb24gdmFsaWRhdGVCcmFuY2hTdHJ1Y3R1cmUoc2NoZW1hUGFydCwgdmFsdWUsIGtleVBhdGgpIHtcbiAgICBjaGVja1R5cGUoa2V5UGF0aCwgc2NoZW1hUGFydC5fdHlwZSwgdmFsdWUpO1xuICAgIGlmIChpc09yZGluYXJ5T2JqZWN0KHZhbHVlKSkge1xuICAgICAgICBpZiAoc2NoZW1hUGFydC5fdHlwZSA9PT0gVHlwZS5PYmplY3QpIHtcbiAgICAgICAgICAgIC8vIHZhbGlkYXRlIGFzIGZyZWVmb3JtIG9iamVjdFxuICAgICAgICAgICAgdmFsaWRhdGVGcmVlZm9ybU9iamVjdFN0cnVjdHVyZShzY2hlbWFQYXJ0LCB2YWx1ZSwga2V5UGF0aCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIShzY2hlbWFQYXJ0Lmhhc093blByb3BlcnR5KCdfZGVmYXVsdCcpIHx8IHNjaGVtYVBhcnQuaGFzT3duUHJvcGVydHkoJ190eXBlJykpKSB7XG4gICAgICAgICAgICAvLyB2YWxpZGF0ZSBhcyBub3JtYWwgbmVzdGVkIGNvbmZpZ1xuICAgICAgICAgICAgdmFsaWRhdGVTdHJ1Y3R1cmUoc2NoZW1hUGFydCwgdmFsdWUsIGtleVBhdGgpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHNjaGVtYVBhcnQuX3R5cGUgPT09IFR5cGUuQXJyYXkpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlQXJyYXlTdHJ1Y3R1cmUoc2NoZW1hUGFydCwgdmFsdWUsIGtleVBhdGgpO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gdmFsaWRhdGVGcmVlZm9ybU9iamVjdFN0cnVjdHVyZShmcmVlZm9ybU9iamVjdFNjaGVtYSwgY29uZmlnLCBrZXlQYXRoKSB7XG4gICAgaWYgKGZyZWVmb3JtT2JqZWN0U2NoZW1hLl9lbGVtZW50cykge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhjb25maWcpKXtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY29uZmlnW2tleV07XG4gICAgICAgICAgICB2YWxpZGF0ZUJyYW5jaFN0cnVjdHVyZShmcmVlZm9ybU9iamVjdFNjaGVtYS5fZWxlbWVudHMsIHZhbHVlLCBgJHtrZXlQYXRofS4ke2tleX1gKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHZhbGlkYXRlQXJyYXlTdHJ1Y3R1cmUoYXJyYXlTY2hlbWEsIHZhbHVlLCBrZXlQYXRoKSB7XG4gICAgY29uc3QgdmFsaWRhdGVkQXNBcnJheSA9IGNoZWNrVHlwZShrZXlQYXRoLCBUeXBlLkFycmF5LCB2YWx1ZSk7XG4gICAgaWYgKCF2YWxpZGF0ZWRBc0FycmF5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gaWYgdGhlcmUgaXMgYW4gYXJyYXkgZWxlbWVudCBvYmplY3Qgc2NoZW1hLCB2ZXJpZnkgdGhhdCBlbGVtZW50cyBtYXRjaCBpdFxuICAgIGlmIChoYXNPYmplY3RTY2hlbWEoYXJyYXlTY2hlbWEuX2VsZW1lbnRzKSkge1xuICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspe1xuICAgICAgICAgICAgdmFsaWRhdGVCcmFuY2hTdHJ1Y3R1cmUoYXJyYXlTY2hlbWEuX2VsZW1lbnRzLCB2YWx1ZVtpXSwgYCR7a2V5UGF0aH1bJHtpfV1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmb3IobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspe1xuICAgICAgICBjaGVja1R5cGUoYCR7a2V5UGF0aH1bJHtpfV1gLCBhcnJheVNjaGVtYS5fZWxlbWVudHM/Ll90eXBlLCB2YWx1ZVtpXSk7XG4gICAgfVxufVxuLyoqXG4gKiBSdW4gYWxsIHRoZSB2YWxpZGF0b3JzIGluIHRoZSBjb25maWcgdHJlZS4gVGhpcyBzaG91bGQgYmUgcnVuXG4gKiBvbiB0aGUgY29uZmlnIG9iamVjdCBhZnRlciBpdCBoYXMgYmVlbiBmaWxsZWQgaW4gd2l0aCBhbGwgdGhlIGRlZmF1bHRzLCBzaW5jZVxuICogaGlnaGVyLWxldmVsIHZhbGlkYXRvcnMgbWF5IHJlZmVyIHRvIGRlZmF1bHQgdmFsdWVzLlxuICovIGZ1bmN0aW9uIHJ1bkFsbFZhbGlkYXRvcnNJbkNvbmZpZ1RyZWUoc2NoZW1hLCBjb25maWcsIGtleVBhdGggPSAnJykge1xuICAgIC8vIElmIGAhc2NoZW1hYCwgdGhlcmUgc2hvdWxkIGhhdmUgYmVlbiBhIHN0cnVjdHVyYWwgdmFsaWRhdGlvbiBlcnJvciBwcmludGVkIGFscmVhZHkuXG4gICAgaWYgKHNjaGVtYSkge1xuICAgICAgICBpZiAoY29uZmlnICE9PSBzY2hlbWEuX2RlZmF1bHQpIHtcbiAgICAgICAgICAgIHJ1blZhbGlkYXRvcnMoa2V5UGF0aCwgc2NoZW1hLl92YWxpZGF0b3JzLCBjb25maWcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc09yZGluYXJ5T2JqZWN0KGNvbmZpZykpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGNvbmZpZykpe1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY29uZmlnW2tleV07XG4gICAgICAgICAgICAgICAgY29uc3QgdGhpc0tleVBhdGggPSBrZXlQYXRoICsgJy4nICsga2V5O1xuICAgICAgICAgICAgICAgIGNvbnN0IHNjaGVtYVBhcnQgPSBzY2hlbWFba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLl90eXBlID09PSBUeXBlLk9iamVjdCAmJiBzY2hlbWEuX2VsZW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJ1bkFsbFZhbGlkYXRvcnNJbkNvbmZpZ1RyZWUoc2NoZW1hLl9lbGVtZW50cywgdmFsdWUsIHRoaXNLZXlQYXRoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBydW5BbGxWYWxpZGF0b3JzSW5Db25maWdUcmVlKHNjaGVtYVBhcnQsIHZhbHVlLCB0aGlzS2V5UGF0aCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoY29uZmlnKSAmJiBzY2hlbWEuX2VsZW1lbnRzKSB7XG4gICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgY29uZmlnLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgICAgICAgICBydW5BbGxWYWxpZGF0b3JzSW5Db25maWdUcmVlKHNjaGVtYS5fZWxlbWVudHMsIGNvbmZpZ1tpXSwgYCR7a2V5UGF0aH1bJHtpfV1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbi8qKlxuICogUnVuIHR5cGUgdmFsaWRhdGlvbiBmb3IgdGhlIHZhbHVlLCBsb2dnaW5nIGFueSBlcnJvcnMuXG4gKiBAcmV0dXJucyB0cnVlIGlmIHZhbGlkYXRpb24gcGFzc2VzLCBmYWxzZSBvdGhlcndpc2VcbiAqLyBmdW5jdGlvbiBjaGVja1R5cGUoa2V5UGF0aCwgX3R5cGUsIHZhbHVlKSB7XG4gICAgaWYgKF90eXBlKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRvciA9IHtcbiAgICAgICAgICAgIEFycmF5OiBpc0FycmF5LFxuICAgICAgICAgICAgQm9vbGVhbjogaXNCb29sZWFuLFxuICAgICAgICAgICAgQ29uY2VwdFV1aWQ6IGlzVXVpZCxcbiAgICAgICAgICAgIE51bWJlcjogaXNOdW1iZXIsXG4gICAgICAgICAgICBPYmplY3Q6IGlzT2JqZWN0LFxuICAgICAgICAgICAgU3RyaW5nOiBpc1N0cmluZyxcbiAgICAgICAgICAgIFVVSUQ6IGlzVXVpZCxcbiAgICAgICAgICAgIFBlcnNvbkF0dHJpYnV0ZVR5cGVVdWlkOiBpc1V1aWQsXG4gICAgICAgICAgICBQYXRpZW50SWRlbnRpZmllclR5cGVVdWlkOiBpc1V1aWRcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHJ1blZhbGlkYXRvcnMoa2V5UGF0aCwgW1xuICAgICAgICAgICAgdmFsaWRhdG9yW190eXBlXVxuICAgICAgICBdLCB2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuLyoqXG4gKiBSdW5zIHZhbGlkYXRvcnMsIGxvZ2dpbmcgZXJyb3JzLlxuICogQHJldHVybnMgdHJ1ZSBpZiBhbGwgcGFzcywgZmFsc2Ugb3RoZXJ3aXNlLlxuICovIGZ1bmN0aW9uIHJ1blZhbGlkYXRvcnMoa2V5UGF0aCwgdmFsaWRhdG9ycywgdmFsdWUpIHtcbiAgICBsZXQgcmV0dXJuVmFsdWUgPSB0cnVlO1xuICAgIGlmICh2YWxpZGF0b3JzKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKGxldCB2YWxpZGF0b3Igb2YgdmFsaWRhdG9ycyl7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsaWRhdG9yUmVzdWx0ID0gdmFsaWRhdG9yKHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbGlkYXRvclJlc3VsdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgPyBgSW52YWxpZCBjb25maWd1cmF0aW9uIGZvciAke2tleVBhdGh9OiAke3ZhbGlkYXRvclJlc3VsdH1gIDogYEludmFsaWQgY29uZmlndXJhdGlvbiB2YWx1ZSAke3ZhbHVlfSBmb3IgJHtrZXlQYXRofTogJHt2YWxpZGF0b3JSZXN1bHR9YDtcbiAgICAgICAgICAgICAgICAgICAgbG9nRXJyb3Ioa2V5UGF0aCwgbWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBTa2lwcGluZyBpbnZhbGlkIHZhbGlkYXRvciBhdCBcIiR7a2V5UGF0aH1cIi4gRW5jb3VudGVyZWQgZXJyb3JcXG5cXHQke2V9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xufVxuLy8gUmVjdXJzaXZlbHkgZmlsbCBpbiB0aGUgY29uZmlnIHdpdGggdmFsdWVzIGZyb20gdGhlIHNjaGVtYS5cbmNvbnN0IHNldERlZmF1bHRzID0gKHNjaGVtYSwgaW5wdXRDb25maWcpPT57XG4gICAgY29uc3QgY29uZmlnID0gc3RydWN0dXJlZENsb25lKGlucHV0Q29uZmlnKTtcbiAgICBpZiAoIXNjaGVtYSkge1xuICAgICAgICByZXR1cm4gY29uZmlnO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhzY2hlbWEpKXtcbiAgICAgICAgY29uc3QgY29uZmlnUGFydCA9IGNvbmZpZ1trZXldO1xuICAgICAgICBjb25zdCBzY2hlbWFQYXJ0ID0gc2NoZW1hW2tleV07XG4gICAgICAgIC8vIFRoZSBgc2NoZW1hUGFydCAmJmAgY2xhdXNlIG9mIHRoaXMgYGlmYCBzdGF0ZW1lbnQgd2lsbCBvbmx5IGZhaWxcbiAgICAgICAgLy8gaWYgdGhlIHNjaGVtYSBpcyB2ZXJ5IGludmFsaWQuIEl0IGlzIHRoZXJlIHRvIHByZXZlbnQgdGhlIGFwcCBmcm9tXG4gICAgICAgIC8vIGNyYXNoaW5nIGNvbXBsZXRlbHksIHRob3VnaCBpdCB3aWxsIHByb2R1Y2UgdW5leHBlY3RlZCBiZWhhdmlvci5cbiAgICAgICAgLy8gSWYgdGhpcyBoYXBwZW5zLCB0aGVyZSBzaG91bGQgYmUgbGVnaWJsZSBlcnJvcnMgaW4gdGhlIGNvbnNvbGUgZnJvbVxuICAgICAgICAvLyB0aGUgc2NoZW1hIHZhbGlkYXRvci5cbiAgICAgICAgaWYgKHNjaGVtYVBhcnQgJiYgKHNjaGVtYVBhcnQuaGFzT3duUHJvcGVydHkoJ190eXBlJykgfHwgc2NoZW1hUGFydC5oYXNPd25Qcm9wZXJ0eSgnX2RlZmF1bHQnKSkpIHtcbiAgICAgICAgICAgIC8vIFdlIGFzc3VtZSB0aGF0IHNjaGVtYVBhcnQgZGVmaW5lcyBhIGNvbmZpZyB2YWx1ZSwgc2luY2UgaXQgaGFzXG4gICAgICAgICAgICAvLyBhIHByb3BlcnR5IGBfdHlwZWAgb3IgYF9kZWZhdWx0YC5cbiAgICAgICAgICAgIGlmICghY29uZmlnLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICBjb25maWdba2V5XSA9IHNjaGVtYVBhcnRbJ19kZWZhdWx0J107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBXZSBhbHNvIGNoZWNrIGlmIGl0IGlzIGFuIG9iamVjdCBvciBhcnJheSB3aXRoIG9iamVjdCBlbGVtZW50cywgaW4gd2hpY2ggY2FzZSB3ZSByZWN1cnNlXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IHNjaGVtYVBhcnQuX2VsZW1lbnRzO1xuICAgICAgICAgICAgaWYgKGNvbmZpZ1BhcnQgJiYgaGFzT2JqZWN0U2NoZW1hKGVsZW1lbnRzKSkge1xuICAgICAgICAgICAgICAgIGlmIChzY2hlbWFQYXJ0Ll90eXBlID09PSBUeXBlLkFycmF5ICYmIEFycmF5LmlzQXJyYXkoY29uZmlnUGFydCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29uZmlnV2l0aERlZmF1bHRzID0gY29uZmlnUGFydC5tYXAoKGNvbmYpPT5zZXREZWZhdWx0cyhlbGVtZW50cywgY29uZikpO1xuICAgICAgICAgICAgICAgICAgICBjb25maWdba2V5XSA9IGNvbmZpZ1dpdGhEZWZhdWx0cztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNjaGVtYVBhcnQuX3R5cGUgPT09IFR5cGUuT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IG9iamVjdEtleSBvZiBPYmplY3Qua2V5cyhjb25maWdQYXJ0KSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maWdQYXJ0W29iamVjdEtleV0gPSBzZXREZWZhdWx0cyhlbGVtZW50cywgY29uZmlnUGFydFtvYmplY3RLZXldKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChpc09yZGluYXJ5T2JqZWN0KHNjaGVtYVBhcnQpKSB7XG4gICAgICAgICAgICAvLyBTaW5jZSBzY2hlbWFQYXJ0IGhhcyBubyBwcm9wZXJ0eSBcIl90eXBlXCIsIGlmIGl0J3MgYW4gb3JkaW5hcnkgb2JqZWN0XG4gICAgICAgICAgICAvLyAodW5saWtlLCBpbXBvcnRhbnRseSwgdGhlIHZhbGlkYXRvcnMgYXJyYXkpLCB3ZSBhc3N1bWUgaXQgaXMgYSBwYXJlbnQgY29uZmlnIHByb3BlcnR5LlxuICAgICAgICAgICAgLy8gV2UgcmVjdXJzZSB0byBjb25maWdba2V5XSBhbmQgc2NoZW1hW2tleV0uIERlZmF1bHQgY29uZmlnW2tleV0gdG8ge30uXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZENvbmZpZ1BhcnQgPSBjb25maWdQYXJ0ID8/IHt9O1xuICAgICAgICAgICAgLy8gVGhlcmUgd2lsbCBoYXZlIGJlZW4gYSB2YWxpZGF0aW9uIGVycm9yIGFscmVhZHkgaWYgY29uZmlnUGFydCBpcyBub3QgYSBwbGFpbiBvYmplY3QuXG4gICAgICAgICAgICBpZiAoaXNPcmRpbmFyeU9iamVjdChzZWxlY3RlZENvbmZpZ1BhcnQpKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnW2tleV0gPSBzZXREZWZhdWx0cyhzY2hlbWFQYXJ0LCBzZWxlY3RlZENvbmZpZ1BhcnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb25maWc7XG59O1xuZnVuY3Rpb24gaGFzT2JqZWN0U2NoZW1hKGVsZW1lbnRzU2NoZW1hKSB7XG4gICAgcmV0dXJuICEhZWxlbWVudHNTY2hlbWEgJiYgT2JqZWN0LmtleXMoZWxlbWVudHNTY2hlbWEpLmZpbHRlcigoZSk9PiFbXG4gICAgICAgICAgICAnX2RlZmF1bHQnLFxuICAgICAgICAgICAgJ192YWxpZGF0b3JzJ1xuICAgICAgICBdLmluY2x1ZGVzKGUpKS5sZW5ndGggPiAwO1xufVxuZnVuY3Rpb24gaXNPcmRpbmFyeU9iamVjdCh2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZSAhPT0gbnVsbDtcbn1cbi8qKiBLZWVwIHRyYWNrIG9mIHdoaWNoIHZhbGlkYXRpb24gZXJyb3JzIHdlIGhhdmUgZGlzcGxheWVkLiBFYWNoIG9uZSBzaG91bGQgb25seSBiZSBkaXNwbGF5ZWQgb25jZS4gKi8gbGV0IGRpc3BsYXllZFZhbGlkYXRpb25NZXNzYWdlcyA9IG5ldyBTZXQoKTtcbmZ1bmN0aW9uIGxvZ0Vycm9yKGtleVBhdGgsIG1lc3NhZ2UpIHtcbiAgICBjb25zdCBrZXkgPSBgJHtrZXlQYXRofTo6OiR7bWVzc2FnZX1gO1xuICAgIC8vIHRlY2huaWNhbGx5LCB0aGlzIHNob3VsZCBub3QgYmUgcG9zc2libGUsIGJ1dCBiZWNhdXNlIG9mIGhvdyB0aGluZ3Mgd2luZC11cCB0cmFuc3BpbGVkLCB0aGlzIGlzbid0IGltcG9zc2libGVcbiAgICBpZiAoIWRpc3BsYXllZFZhbGlkYXRpb25NZXNzYWdlcykge1xuICAgICAgICBkaXNwbGF5ZWRWYWxpZGF0aW9uTWVzc2FnZXMgPSBuZXcgU2V0KCk7XG4gICAgfVxuICAgIGlmICghZGlzcGxheWVkVmFsaWRhdGlvbk1lc3NhZ2VzLmhhcyhrZXkpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgICAgIGRpc3BsYXllZFZhbGlkYXRpb25NZXNzYWdlcy5hZGQoa2V5KTtcbiAgICB9XG59XG4vKipcbiAqIE5vcm1hbGx5LCBjb25maWd1cmF0aW9uIGVycm9ycyBhcmUgb25seSBkaXNwbGF5ZWQgb25jZS4gVGhpcyBmdW5jdGlvbiBjbGVhcnMgdGhlIGxpc3Qgb2ZcbiAqIGRpc3BsYXllZCBlcnJvcnMsIHNvIHRoYXQgdGhleSB3aWxsIGJlIGRpc3BsYXllZCBhZ2Fpbi5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqLyBleHBvcnQgZnVuY3Rpb24gY2xlYXJDb25maWdFcnJvcnMoa2V5UGF0aCkge1xuICAgIGlmIChrZXlQYXRoKSB7XG4gICAgICAgIGRpc3BsYXllZFZhbGlkYXRpb25NZXNzYWdlcy5mb3JFYWNoKChrZXkpPT57XG4gICAgICAgICAgICBpZiAoa2V5LnN0YXJ0c1dpdGgoa2V5UGF0aCkpIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5ZWRWYWxpZGF0aW9uTWVzc2FnZXMuZGVsZXRlKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGRpc3BsYXllZFZhbGlkYXRpb25NZXNzYWdlcy5jbGVhcigpO1xuICAgIH1cbn1cbi8qKlxuICogQ2xlYW5zIHVwIGFsbCBjb25maWcgc3RvcmUgc3Vic2NyaXB0aW9ucyBhbmQgcmUtZXN0YWJsaXNoZXMgdGhlbS4gVGhpcyBpcyBwcmltYXJpbHlcbiAqIHVzZWZ1bCBmb3IgdGVzdGluZywgd2hlcmUgc3Vic2NyaXB0aW9ucyBzZXQgdXAgYXQgbW9kdWxlIGxvYWQgdGltZSBuZWVkIHRvIGJlIGNsZWFyZWRcbiAqIGJldHdlZW4gdGVzdHMgdG8gcHJldmVudCBpbmZpbml0ZSB1cGRhdGUgbG9vcHMuIEFmdGVyIGNsZWFyaW5nLCBzdWJzY3JpcHRpb25zIGFyZVxuICogcmUtZXN0YWJsaXNoZWQgc28gdGhlIGNvbmZpZyBzeXN0ZW0gY29udGludWVzIHRvIHdvcmsgbm9ybWFsbHkuXG4gKlxuICogQGludGVybmFsXG4gKi8gZXhwb3J0IGZ1bmN0aW9uIHJlc2V0Q29uZmlnU3lzdGVtKCkge1xuICAgIGNvbmZpZ1N1YnNjcmlwdGlvbnMuZm9yRWFjaCgodW5zdWJzY3JpYmUpPT51bnN1YnNjcmliZSgpKTtcbiAgICBjb25maWdTdWJzY3JpcHRpb25zLmxlbmd0aCA9IDA7XG4gICAgLy8gQ2FjaGVkIGNvbmZpZ3MgYXJlIGtleWVkIG9uIGlucHV0IGlkZW50aXR5LCBzbyBhIHRlc3QgdGhhdCByZXVzZXMgdGhlIHNhbWUgc2NoZW1hIG9yIGNvbmZpZ1xuICAgIC8vIG9iamVjdHMgYWNyb3NzIGNhc2VzIHdvdWxkIG90aGVyd2lzZSBiZSBzZXJ2ZWQgdGhlIHByZXZpb3VzIGNhc2UncyByZXN1bHQuXG4gICAgbW9kdWxlQ29uZmlnQ2FjaGUuY2xlYXIoKTtcbiAgICBleHRlbnNpb25Db25maWdDYWNoZS5jbGVhcigpO1xuICAgIHNjaGVtYVZhbHVlc0FuZFNvdXJjZXNDYWNoZS5jbGVhcigpO1xuICAgIGltcGxlbWVudGVyVG9vbHNNb2R1bGVDYWNoZS5jbGVhcigpO1xuICAgIGxhc3REZXJpdmF0aW9uID0gbnVsbDtcbiAgICBlbnRyeU9yaWdpbnMgPSBuZXcgV2Vha01hcCgpO1xuICAgIHNldHVwQ29uZmlnU3Vic2NyaXB0aW9ucygpO1xufVxuLyoqXG4gKiBDb3BpZWQgb3ZlciBmcm9tIGVzbS1leHRlbnNpb25zLiBJdCByaWdodGx5IGJlbG9uZ3MgdG8gdGhhdCBtb2R1bGUsIGJ1dCBlc20tY29uZmlnXG4gKiBjYW5ub3QgZGVwZW5kIG9uIGVzbS1leHRlbnNpb25zLlxuICovIGZ1bmN0aW9uIGdldEV4dGVuc2lvbk5hbWVGcm9tSWQoZXh0ZW5zaW9uSWQpIHtcbiAgICBjb25zdCBbZXh0ZW5zaW9uTmFtZV0gPSBleHRlbnNpb25JZC5zcGxpdCgnIycpO1xuICAgIHJldHVybiBleHRlbnNpb25OYW1lO1xufVxuLyoqXG4gKiBUaGUgdHJhbnNsYXRpb24gb3ZlcnJpZGVzIHNjaGVtYSBpcyB1c2VkIGluIHRoZSBpbXBsaWNpdCBzY2hlbWEgZ2l2ZW4gdG8gZXZlcnkgbW9kdWxlO1xuICogcGx1cyBhbnkgYWRkaXRpb25hbCB0cmFuc2xhdGlvbiBuYW1lc3BhY2VzIChhdCB0aW1lIG9mIHdyaXRpbmcsIHRoaXMgaXMganVzdCAnY29yZScpLlxuICovIGNvbnN0IHRyYW5zbGF0aW9uT3ZlcnJpZGVzU2NoZW1hID0ge1xuICAgICdUcmFuc2xhdGlvbiBvdmVycmlkZXMnOiB7XG4gICAgICAgIF9kZXNjcmlwdGlvbjogJ1Blci1sYW5ndWFnZSBvdmVycmlkZXMgZm9yIGZyb250ZW5kIHRyYW5zbGF0aW9ucyBzaG91bGQgYmUga2V5ZWQgYnkgbGFuZ3VhZ2UgY29kZSBhbmQgZWFjaCBsYW5ndWFnZSBkaWN0aW9uYXJ5IGNvbnRhaW5zIHRoZSB0cmFuc2xhdGlvbiBrZXkgYW5kIHRoZSBkaXNwbGF5IHZhbHVlJyxcbiAgICAgICAgX3R5cGU6IFR5cGUuT2JqZWN0LFxuICAgICAgICBfZGVmYXVsdDoge30sXG4gICAgICAgIF92YWxpZGF0b3JzOiBbXG4gICAgICAgICAgICB2YWxpZGF0b3IoKG8pPT5PYmplY3Qua2V5cyhvKS5ldmVyeSgoayk9Pi9eW2Etel17MiwzfSgtW0EtWl17MiwzfSk/JC8udGVzdChrKSksIChvKT0+e1xuICAgICAgICAgICAgICAgIGNvbnN0IGJhZEtleXMgPSBPYmplY3Qua2V5cyhvKS5maWx0ZXIoKGspPT4hL15bYS16XXsyLDN9KC1bQS1aXXsyLDN9KT8kLy50ZXN0KGspKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYFRoZSAnVHJhbnNsYXRpb24gb3ZlcnJpZGVzJyBvYmplY3Qgc2hvdWxkIGhhdmUgbGFuZ3VhZ2UgY29kZXMgZm9yIGtleXMuIExhbmd1YWdlIGNvZGVzIG11c3QgYmUgaW4gdGhlIGZvcm0gb2YgYSB0d28tdG8tdGhyZWUgbGV0dGVyIGxhbmd1YWdlIGNvZGUgb3B0aW9uYWxseSBmb2xsb3dlZCBieSBhIGh5cGhlbiBhbmQgYSB0d28tdG8tdGhyZWUgbGV0dGVyIGNvdW50cnkgY29kZS4gVGhlIGZvbGxvd2luZyBrZXlzIGRvIG5vdCBjb25mb3JtOiAke2JhZEtleXMuam9pbignLCAnKX0uYDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIF1cbiAgICB9XG59O1xuLyoqXG4gKiBUaGUgaW1wbGljaXRDb25maWdTY2hlbWEgaXMgaW1wbGljaXRseSBpbmNsdWRlZCBpbiBldmVyeSBjb25maWd1cmF0aW9uIHNjaGVtYVxuICovIGNvbnN0IGltcGxpY2l0Q29uZmlnU2NoZW1hID0ge1xuICAgICdEaXNwbGF5IGNvbmRpdGlvbnMnOiB7XG4gICAgICAgIHByaXZpbGVnZXM6IHtcbiAgICAgICAgICAgIF9kZXNjcmlwdGlvbjogJ1RoZSBwcml2aWxlZ2UocykgdGhlIHVzZXIgbXVzdCBoYXZlIHRvIHVzZSB0aGlzIGV4dGVuc2lvbicsXG4gICAgICAgICAgICBfdHlwZTogVHlwZS5BcnJheSxcbiAgICAgICAgICAgIF9kZWZhdWx0OiBbXVxuICAgICAgICB9LFxuICAgICAgICBleHByZXNzaW9uOiB7XG4gICAgICAgICAgICBfZGVzY3JpcHRpb246ICdUaGUgZXhwcmVzc2lvbiB0aGF0IGRldGVybWluZXMgd2hldGhlciB0aGUgZXh0ZW5zaW9uIGlzIGRpc3BsYXllZCcsXG4gICAgICAgICAgICBfdHlwZTogVHlwZS5TdHJpbmcsXG4gICAgICAgICAgICBfZGVmYXVsdDogdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICB9LFxuICAgIC4uLnRyYW5zbGF0aW9uT3ZlcnJpZGVzU2NoZW1hXG59O1xuIl0sIm5hbWVzIjpbImNsb25lRGVlcCIsImlzRXF1YWwiLCJtZXJnZVdpdGgiLCJvbWl0IiwibG9kYXNoT21pdCIsIlR5cGUiLCJpc0FycmF5IiwiaXNCb29sZWFuIiwiaXNVdWlkIiwiaXNOdW1iZXIiLCJpc09iamVjdCIsImlzU3RyaW5nIiwidmFsaWRhdG9yIiwiY29uZmlnRXh0ZW5zaW9uU3RvcmUiLCJjb25maWdJbnRlcm5hbFN0b3JlIiwiZ2V0Q29uZmlnU3RvcmUiLCJnZXRFeHRlbnNpb25Db25maWciLCJnZXRFeHRlbnNpb25TbG90c0NvbmZpZ1N0b3JlIiwiZ2V0RXh0ZW5zaW9uc0NvbmZpZ1N0b3JlIiwiY2xlYXJDb25maWdEZXJpdmF0aW9uRXJyb3IiLCJpbXBsZW1lbnRlclRvb2xzQ29uZmlnU3RvcmUiLCJpbnZhbGlkYXRlSW1wbGVtZW50ZXJUb29sc0NvbmZpZyIsInJlY29yZENvbmZpZ0Rlcml2YXRpb25FcnJvciIsInNldEltcGxlbWVudGVyVG9vbHNDb25maWdSZWNvbXB1dGVyIiwidGVtcG9yYXJ5Q29uZmlnU3RvcmUiLCJyZXBsYWNlQXJyYXlzIiwiX29ialZhbHVlIiwic3JjVmFsdWUiLCJBcnJheSIsIm1lcmdlRGVlcFJlcGxhY2UiLCJsZWZ0IiwicmlnaHQiLCJjb25maWdTdWJzY3JpcHRpb25zIiwicmVjb21wdXRlQWxsQ29uZmlncyIsImNvbmZpZ1N0YXRlIiwidGVtcENvbmZpZ1N0YXRlIiwiZXh0ZW5zaW9uU3RhdGUiLCJjb25maWdJbnB1dHNVbmNoYW5nZWQiLCJsYXN0RGVyaXZhdGlvbiIsImNvbXB1dGVFeHRlbnNpb25Db25maWdzIiwiY29tcHV0ZU1vZHVsZUNvbmZpZyIsInNsb3RDb25maWdzIiwiZ2V0RXh0ZW5zaW9uU2xvdENvbmZpZ3MiLCJjb21wdXRlRXh0ZW5zaW9uU2xvdENvbmZpZ3MiLCJlbnRyeU9yaWdpbnMiLCJXZWFrTWFwIiwic2V0dXBDb25maWdTdWJzY3JpcHRpb25zIiwiY29tcHV0ZUltcGxlbWVudGVyVG9vbHNDb25maWciLCJyZWNvbXB1dGVBbGxDb25maWdzU2FmZWx5IiwiZSIsImNvbnNvbGUiLCJtb2R1bGVDb25maWdDYWNoZSIsIk1hcCIsInN0YXRlIiwidGVtcFN0YXRlIiwibW9kdWxlTmFtZSIsIk9iamVjdCIsIm1vZHVsZVN0b3JlIiwic2NoZW1hIiwibW9kdWxlTG9hZGVkIiwiQm9vbGVhbiIsImNhY2hlZCIsIm5ld1N0YXRlIiwiY29uZmlnIiwiZ2V0Q29uZmlnRm9yTW9kdWxlIiwiZ2V0Q29uZmlnRm9yTW9kdWxlSW1wbGljaXRTY2hlbWEiLCJvbGRTdGF0ZSIsInNsb3RTdG9yZSIsIm9sZFNsb3RzIiwic2xvdHMiLCJjaGFuZ2VkIiwic2xvdE5hbWUiLCJwcmV2aW91cyIsImdldEltcGxlbWVudGVyVG9vbHNDb25maWciLCJleHRlbnNpb25zQ29uZmlnU3RvcmUiLCJvbGRDb25maWdzIiwiY29uZmlncyIsImVudHJ5Q291bnQiLCJleHRlbnNpb24iLCJlbnRyeSIsIm9yaWdpbiIsImNvbXB1dGVFeHRlbnNpb25Db25maWciLCJwcmV2aW91c1Nsb3QiLCJleHRlbnNpb25JZCIsInRvdGFsIiwic2xvdCIsImRlZmluZUNvbmZpZ1NjaGVtYSIsInZhbGlkYXRlQ29uZmlnU2NoZW1hIiwiZW5oYW5jZWRTY2hlbWEiLCJpbXBsaWNpdENvbmZpZ1NjaGVtYSIsInJlZ2lzdGVyTW9kdWxlV2l0aENvbmZpZ1N5c3RlbSIsInJlZ2lzdGVyTW9kdWxlTG9hZCIsInJlZ2lzdGVyVHJhbnNsYXRpb25OYW1lc3BhY2UiLCJuYW1lc3BhY2UiLCJ0cmFuc2xhdGlvbk92ZXJyaWRlc1NjaGVtYSIsImRlZmluZUV4dGVuc2lvbkNvbmZpZ1NjaGVtYSIsImV4dGVuc2lvbk5hbWUiLCJwcm92aWRlIiwic291cmNlTmFtZSIsIndoZW5TdG9yZVJlYWR5Iiwic3RvcmUiLCJyZWFkeSIsInNlbGVjdCIsIlByb21pc2UiLCJyZXNvbHZlIiwidW5zdWJzY3JpYmUiLCJyZXNvbHZlZCIsInVwZGF0ZSIsImdldENvbmZpZyIsImdldFRyYW5zbGF0aW9uT3ZlcnJpZGVzIiwicHJvbWlzZXMiLCJwcm9jZXNzQ29uZmlnIiwicHJvdmlkZWRDb25maWciLCJrZXlQYXRoQ29udGV4dCIsInZhbGlkYXRlU3RydWN0dXJlIiwic2V0RGVmYXVsdHMiLCJydW5BbGxWYWxpZGF0b3JzSW5Db25maWdUcmVlIiwiZXh0ZW5zaW9uQ29uZmlnQ2FjaGUiLCJzbG90TW9kdWxlTmFtZSIsImV4dGVuc2lvbk1vZHVsZU5hbWUiLCJzbG90Q29uZmlnIiwiZ2V0RXh0ZW5zaW9uTmFtZUZyb21JZCIsImV4dGVuc2lvbkNvbmZpZ1NjaGVtYSIsImNhY2hlS2V5IiwiSlNPTiIsIm5hbWVPZlNjaGVtYVNvdXJjZSIsInByb3ZpZGVkQ29uZmlncyIsImdldFByb3ZpZGVkQ29uZmlncyIsInNoYXJlZE92ZXJyaWRlIiwic2xvdE1vZHVsZUNvbmZpZyIsIm1lcmdlQ29uZmlnc0ZvciIsImNvbmZpZ092ZXJyaWRlIiwiZXh0ZW5zaW9uQ29uZmlnIiwiY29tYmluZWRDb25maWciLCJtZXJnZUNvbmZpZ3MiLCJpbXBsZW1lbnRlclRvb2xzTW9kdWxlQ2FjaGUiLCJhbm5vdGF0ZWRTY2hlbWFzIiwiZ2V0QWxsU2NoZW1hc1dpdGhWYWx1ZXNBbmRTb3VyY2VzIiwiY29uZmlnc0FuZFNvdXJjZXMiLCJjIiwibW9kdWxlTmFtZXMiLCJTZXQiLCJyZXN1bHQiLCJhbm5vdGF0ZWRTY2hlbWEiLCJjb25maWdTbGljZXMiLCJzb3VyY2VzIiwic291cmNlIiwic2xpY2UiLCJpIiwibWVyZ2VkIiwidW5kZWZpbmVkIiwiY3JlYXRlVmFsdWVzQW5kU291cmNlc1RyZWUiLCJzY2hlbWFWYWx1ZXNBbmRTb3VyY2VzQ2FjaGUiLCJzY2hlbWFzIiwiYW5ub3RhdGVkIiwiZ2V0U2NoZW1hV2l0aFZhbHVlc0FuZFNvdXJjZXMiLCJpc09yZGluYXJ5T2JqZWN0Iiwib2JqIiwia2V5IiwiYWxsQ29uZmlncyIsInNsb3RDb25maWdQZXJNb2R1bGUiLCJ2YWxpZGF0ZUFsbEV4dGVuc2lvblNsb3RDb25maWdzIiwiY29uZmlndXJlQmxvY2tzIiwiY29uZmlnQnlTbG90TmFtZSIsIl9jb25maWd1cmVCbG9ja3MiLCJfc2xvdE5hbWUiLCJibG9ja3MiLCJjb25maWd1cmUiLCJ2YWxpZGF0ZUV4dGVuc2lvblNsb3RDb25maWciLCJrZXlQYXRoIiwiZXJyb3JQcmVmaXgiLCJpbnZhbGlkS2V5cyIsImsiLCJsb2dFcnJvciIsIm4iLCJ1cGRhdGVNZXNzYWdlIiwidGhpc0tleVBhdGgiLCJzY2hlbWFQYXJ0IiwiZWxlbWVudHMiLCJoYXNPYmplY3RTY2hlbWEiLCJ2YWx1ZVR5cGUiLCJpbnB1dENvbmZpZyIsImFsbENvbmZpZ3NGb3JNb2R1bGUiLCJhY2MiLCJ2YWx1ZSIsInZhbGlkYXRlQnJhbmNoU3RydWN0dXJlIiwiY2hlY2tUeXBlIiwidmFsaWRhdGVGcmVlZm9ybU9iamVjdFN0cnVjdHVyZSIsInZhbGlkYXRlQXJyYXlTdHJ1Y3R1cmUiLCJmcmVlZm9ybU9iamVjdFNjaGVtYSIsImFycmF5U2NoZW1hIiwidmFsaWRhdGVkQXNBcnJheSIsInJ1blZhbGlkYXRvcnMiLCJfdHlwZSIsInZhbGlkYXRvcnMiLCJyZXR1cm5WYWx1ZSIsInZhbGlkYXRvclJlc3VsdCIsIm1lc3NhZ2UiLCJzdHJ1Y3R1cmVkQ2xvbmUiLCJjb25maWdQYXJ0IiwiY29uZmlnV2l0aERlZmF1bHRzIiwiY29uZiIsIm9iamVjdEtleSIsInNlbGVjdGVkQ29uZmlnUGFydCIsImVsZW1lbnRzU2NoZW1hIiwiZGlzcGxheWVkVmFsaWRhdGlvbk1lc3NhZ2VzIiwiY2xlYXJDb25maWdFcnJvcnMiLCJyZXNldENvbmZpZ1N5c3RlbSIsIm8iLCJiYWRLZXlzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNkJBQTZCLEdBQWlGO0FBQzNFO0FBQ3lFO0FBQ3JEO0FBQytSO0FB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\n//# sourceURL=webpack-internal:///../../framework/esm-config/dist/module-config/module-config.js\n\n}");
|
|
4479
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n__webpack_require__.d(__webpack_exports__, {\n clearConfigErrors: () => (clearConfigErrors),\n defineConfigSchema: () => (defineConfigSchema),\n defineExtensionConfigSchema: () => (defineExtensionConfigSchema),\n getConfig: () => (getConfig),\n getTranslationOverrides: () => (getTranslationOverrides),\n processConfig: () => (processConfig),\n provide: () => (provide),\n registerModuleLoad: () => (registerModuleLoad),\n registerModuleWithConfigSystem: () => (registerModuleWithConfigSystem),\n registerTranslationNamespace: () => (registerTranslationNamespace),\n resetConfigSystem: () => (resetConfigSystem)\n});\n/* import */ var lodash_es__rspack_import_4 = __webpack_require__(\"../../../node_modules/lodash-es/mergeWith.js\");\n/* import */ var lodash_es__rspack_import_5 = __webpack_require__(\"../../../node_modules/lodash-es/isEqual.js\");\n/* import */ var lodash_es__rspack_import_6 = __webpack_require__(\"../../../node_modules/lodash-es/omit.js\");\n/* import */ var lodash_es__rspack_import_7 = __webpack_require__(\"../../../node_modules/lodash-es/cloneDeep.js\");\n/* import */ var _types_js__rspack_import_0 = __webpack_require__(\"../../framework/esm-config/dist/types.js\");\n/* import */ var _validators_type_validators_js__rspack_import_1 = __webpack_require__(\"../../framework/esm-config/dist/validators/type-validators.js\");\n/* import */ var _validators_validator_js__rspack_import_2 = __webpack_require__(\"../../framework/esm-config/dist/validators/validator.js\");\n/* import */ var _state_js__rspack_import_3 = __webpack_require__(\"../../framework/esm-config/dist/module-config/state.js\");\n/** @module @category Config */ \n\n\n\n\n/**\n * Deep merge two objects, with right-side values taking precedence.\n * Arrays are replaced entirely (not merged by index), matching the\n * behavior of ramda's mergeDeepRight.\n */ function replaceArrays(_objValue, srcValue) {\n if (Array.isArray(srcValue)) {\n return srcValue;\n }\n}\nfunction mergeDeepReplace(left, right) {\n return (0,lodash_es__rspack_import_4[\"default\"])({}, left, right, replaceArrays);\n}\n/**\n * Store setup\n *\n *\n * Set up stores and subscriptions so that inputs get processed appropriately.\n *\n * There are *input* stores and *output* stores. The *input* stores\n * are configInternalStore, temporaryConfigStore, and configExtensionStore. The\n * output stores are set in the `compute...` functions. They are the module\n * config stores, the extension slot config stores (by module), the extension\n * config stores, and the implementer tools config store.\n *\n * This code sets up the subscriptions so that when an input store changes,\n * the correct set of output stores are updated.\n *\n * All `compute...` functions except `computeExtensionConfigs` are pure\n * (or are supposed to be), other than the fact that they all `setState`\n * store values at the end. `computeExtensionConfigs` calls `getGlobalStore`,\n * which creates stores.\n */ // Store unsubscribe functions to allow cleanup (e.g., in tests or hot module reloading)\nconst configSubscriptions = [];\n/**\n * Track displayed validation messages so they only get displayed once.\n */ const displayedValidationMessages = new Set();\n/**\n * Recomputes all configuration derived stores based on current state of input stores.\n * Called whenever any input store (configInternalStore, temporaryConfigStore, configExtensionStore) changes.\n */ function recomputeAllConfigs() {\n const configState = _state_js__rspack_import_3.configInternalStore.getState();\n const tempConfigState = _state_js__rspack_import_3.temporaryConfigStore.getState();\n const extensionState = _state_js__rspack_import_3.configExtensionStore.getState();\n // Mounting an extension changes only `configExtensionStore`, which only the extension configs\n // depend on, so the rest of the last derivation is reused.\n const configInputsUnchanged = lastDerivation?.configState === configState && lastDerivation.tempConfigState === tempConfigState;\n if (configInputsUnchanged) {\n computeExtensionConfigs(configState, extensionState, tempConfigState, lastDerivation.slotConfigs, true);\n return;\n }\n computeModuleConfig(configState, tempConfigState);\n const slotConfigs = getExtensionSlotConfigs(configState, tempConfigState);\n computeExtensionSlotConfigs(slotConfigs);\n computeExtensionConfigs(configState, extensionState, tempConfigState, slotConfigs, false);\n // Recorded only after the outputs above are written, so a failure forces a full derivation next time.\n lastDerivation = {\n configState,\n tempConfigState,\n slotConfigs\n };\n // Last, because a failure here must not skip the outputs above. Only kept current while the\n // implementer tools are watching it; otherwise derived on read.\n (0,_state_js__rspack_import_3.invalidateImplementerToolsConfig)();\n}\n/** The inputs the outputs were last fully derived from, compared by identity. */ let lastDerivation = null;\n/**\n * The mounted extension each extension config entry was derived for. An extension ID can be\n * mounted under a different module while its slot and ID stay the same, so an entry is only\n * current if its modules match too.\n */ let entryOrigins = new WeakMap();\nfunction setupConfigSubscriptions() {\n // Registered here rather than at module load so that `resetConfigSystem` restores it.\n (0,_state_js__rspack_import_3.setImplementerToolsConfigRecomputer)(()=>computeImplementerToolsConfig(_state_js__rspack_import_3.configInternalStore.getState(), _state_js__rspack_import_3.temporaryConfigStore.getState()));\n // Guarded: a configuration the user saved through the implementer tools must not be able to stop\n // the framework from loading.\n recomputeAllConfigsSafely();\n // Subscribe to all input stores with a single handler\n // This ensures we only recompute once even if multiple stores change simultaneously\n configSubscriptions.push(_state_js__rspack_import_3.configInternalStore.subscribe(recomputeAllConfigsSafely), _state_js__rspack_import_3.temporaryConfigStore.subscribe(recomputeAllConfigsSafely), _state_js__rspack_import_3.configExtensionStore.subscribe(recomputeAllConfigsSafely));\n}\n/** Ensure that we do not throw during a store subscription */ function recomputeAllConfigsSafely() {\n (0,_state_js__rspack_import_3.clearConfigDerivationError)();\n try {\n recomputeAllConfigs();\n } catch (e) {\n (0,_state_js__rspack_import_3.recordConfigDerivationError)(e);\n console.error('Failed to recompute the configuration', e);\n }\n}\n// Set up subscriptions at module load time\nsetupConfigSubscriptions();\nconst moduleConfigCache = new Map();\nfunction computeModuleConfig(state, tempState) {\n for (let moduleName of Object.keys(state.schemas)){\n // At this point the schema could be either just the implicit schema or the actually\n // defined schema. We run with just the implicit schema because we want to populate\n // the config store with the translation overrides as soon as possible. In fact, the\n // translation system will throw for Suspense until the translation overrides are\n // available, which as of this writing blocks the schema definition from occurring\n // for modules loaded based on their extensions.\n const moduleStore = (0,_state_js__rspack_import_3.getConfigStore)(moduleName);\n const schema = state.schemas[moduleName];\n const moduleLoaded = Boolean(state.moduleLoaded[moduleName]);\n const cached = moduleConfigCache.get(moduleName);\n let newState;\n if (cached && cached.schema === schema && cached.moduleLoaded === moduleLoaded && cached.providedConfigs === state.providedConfigs && cached.temporaryConfig === tempState.config) {\n newState = cached.state;\n } else {\n const config = moduleLoaded ? getConfigForModule(moduleName, state, tempState) : getConfigForModuleImplicitSchema(moduleName, state, tempState);\n newState = {\n translationOverridesLoaded: true,\n loaded: moduleLoaded,\n config\n };\n moduleConfigCache.set(moduleName, {\n schema,\n moduleLoaded,\n providedConfigs: state.providedConfigs,\n temporaryConfig: tempState.config,\n state: newState\n });\n }\n // Writing unconditionally would hand every `useConfig` consumer in the application a new\n // object — and a re-render — whenever any module or extension anywhere is loaded.\n const oldState = moduleStore.getState();\n if (oldState.loaded !== newState.loaded || oldState.translationOverridesLoaded !== newState.translationOverridesLoaded || !(0,lodash_es__rspack_import_5[\"default\"])(oldState.config, newState.config)) {\n moduleStore.setState(newState);\n }\n }\n}\nfunction computeExtensionSlotConfigs(slotConfigs) {\n const slotStore = (0,_state_js__rspack_import_3.getExtensionSlotsConfigStore)();\n const oldSlots = slotStore.getState().slots;\n const slots = {};\n let changed = false;\n for (const [slotName, config] of Object.entries(slotConfigs)){\n const previous = oldSlots[slotName];\n // Entries keep their identity when the configuration behind them hasn't changed, so that\n // changing one slot's configuration doesn't invalidate every other configured slot.\n if (previous?.loaded && (0,lodash_es__rspack_import_5[\"default\"])(previous.config, config)) {\n slots[slotName] = previous;\n } else {\n slots[slotName] = {\n loaded: true,\n config\n };\n changed = true;\n }\n }\n // Built from scratch rather than merged over the previous state: a slot whose configuration\n // has been removed — clearing the temporary config, say — has to lose its entry, or the old\n // configuration stays in force until the page is reloaded.\n if (changed || Object.keys(oldSlots).length !== Object.keys(slots).length) {\n slotStore.setState({\n slots\n });\n }\n}\nfunction computeImplementerToolsConfig(state, tempConfigState) {\n const oldState = _state_js__rspack_import_3.implementerToolsConfigStore.getState();\n const config = getImplementerToolsConfig(state, tempConfigState);\n const newState = {\n config\n };\n // Use deep equality on the actual config content, not the wrapper object\n if (!(0,lodash_es__rspack_import_5[\"default\"])(oldState.config, newState.config)) {\n _state_js__rspack_import_3.implementerToolsConfigStore.setState(newState);\n }\n}\nfunction computeExtensionConfigs(configState, extensionState, tempConfigState, slotConfigs, configInputsUnchanged) {\n const extensionsConfigStore = (0,_state_js__rspack_import_3.getExtensionsConfigStore)();\n const oldConfigs = extensionsConfigStore.getState().configs;\n const configs = {};\n let changed = false;\n let entryCount = 0;\n // We assume that the module schema has already been defined, since the extension\n // it contains is mounted.\n for (let extension of extensionState.mountedExtensions){\n const previous = oldConfigs[extension.slotName]?.[extension.extensionId];\n let entry;\n const origin = previous && entryOrigins.get(previous);\n if (configInputsUnchanged && previous?.loaded && origin?.slotModuleName === extension.slotModuleName && origin.extensionModuleName === extension.extensionModuleName) {\n // Derived from these same inputs by the previous run, so it is still current.\n entry = previous;\n } else {\n const config = computeExtensionConfig(extension.slotModuleName, extension.extensionModuleName, extension.slotName, extension.extensionId, configState, tempConfigState, slotConfigs[extension.slotName]);\n // Entries keep their identity when the configuration behind them hasn't changed, so that\n // mounting one extension doesn't hand every other mounted extension a new config object.\n entry = previous?.loaded && (0,lodash_es__rspack_import_5[\"default\"])(previous.config, config) ? previous : {\n config,\n loaded: true\n };\n }\n entryOrigins.set(entry, extension);\n if (entry !== previous) {\n changed = true;\n }\n if (!configs[extension.slotName]) {\n configs[extension.slotName] = {};\n }\n configs[extension.slotName][extension.extensionId] = entry;\n entryCount++;\n }\n // Slots keep their identity too when none of their entries changed. Subscribers compare these\n // per-slot objects to work out which slots to re-derive, so handing out a fresh one for every\n // slot on every write would mark every slot with a mounted extension dirty.\n for (const [slotName, slotConfigs] of Object.entries(configs)){\n const previousSlot = oldConfigs[slotName];\n if (previousSlot && Object.keys(previousSlot).length === Object.keys(slotConfigs).length && Object.entries(slotConfigs).every(([extensionId, entry])=>previousSlot[extensionId] === entry)) {\n configs[slotName] = previousSlot;\n }\n }\n if (!changed) {\n // Nothing was added or altered, but an extension may have unmounted, which only shows up as a\n // missing entry.\n changed = Object.keys(oldConfigs).length !== Object.keys(configs).length || Object.values(oldConfigs).reduce((total, slot)=>total + Object.keys(slot).length, 0) !== entryCount;\n }\n if (changed) {\n extensionsConfigStore.setState({\n configs\n });\n }\n}\n/*\n * API\n *\n */ /**\n * This defines a configuration schema for a module. The schema tells the\n * configuration system how the module can be configured. It specifies\n * what makes configuration valid or invalid.\n *\n * See [Configuration System](https://o3-docs.openmrs.org/en-US/docs/configuration-system)\n * for more information about defining a config schema.\n *\n * @param moduleName Name of the module the schema is being defined for. Generally\n * should be the one in which the `defineConfigSchema` call takes place.\n * @param schema The config schema for the module\n */ function defineConfigSchema(moduleName, schema) {\n validateConfigSchema(moduleName, schema);\n const enhancedSchema = mergeDeepReplace(schema, implicitConfigSchema);\n _state_js__rspack_import_3.configInternalStore.setState((state)=>({\n ...state,\n schemas: {\n ...state.schemas,\n [moduleName]: enhancedSchema\n },\n moduleLoaded: {\n ...state.moduleLoaded,\n [moduleName]: true\n }\n }));\n}\n/**\n * This alerts the configuration system that a module exists. This allows config to be\n * processed, while still allowing the extension system to know whether the module has\n * actually had its front bundle executed yet.\n *\n * This should only be used in esm-app-shell.\n *\n * @internal\n * @param moduleName\n */ function registerModuleWithConfigSystem(moduleName) {\n _state_js__rspack_import_3.configInternalStore.setState((state)=>({\n ...state,\n schemas: {\n ...state.schemas,\n [moduleName]: implicitConfigSchema\n }\n }));\n}\n/**\n * This alerts the configuration system that a module has been loaded.\n *\n * This should only be used in esm-app-shell.\n *\n * @internal\n * @param moduleName\n */ function registerModuleLoad(moduleName) {\n _state_js__rspack_import_3.configInternalStore.setState((state)=>({\n ...state,\n moduleLoaded: {\n ...state.moduleLoaded,\n [moduleName]: true\n }\n }));\n}\n/**\n * This allows the config system to support translation overrides for namespaces that\n * do not correspond to modules.\n *\n * This should only be used in esm-app-shell.\n *\n * @internal\n * @param namespace\n */ function registerTranslationNamespace(namespace) {\n _state_js__rspack_import_3.configInternalStore.setState((state)=>({\n ...state,\n schemas: {\n ...state.schemas,\n [namespace]: translationOverridesSchema\n }\n }));\n}\n/**\n * This defines a configuration schema for an extension. When a schema is defined\n * for an extension, that extension will receive the configuration corresponding\n * to that schema, rather than the configuration corresponding to the module\n * in which it is defined.\n *\n * The schema tells the configuration system how the module can be configured.\n * It specifies what makes configuration valid or invalid.\n *\n * See [Configuration System](https://o3-docs.openmrs.org/en-US/docs/configuration-system)\n * for more information about defining a config schema.\n *\n * @param extensionName Name of the extension the schema is being defined for.\n * Should match the `name` of one of the `extensions` entries defined in\n * the app's `routes.json` file.\n * @param schema The config schema for the extension\n */ function defineExtensionConfigSchema(extensionName, schema) {\n validateConfigSchema(extensionName, schema);\n const enhancedSchema = mergeDeepReplace(schema, implicitConfigSchema);\n const state = _state_js__rspack_import_3.configInternalStore.getState();\n if (state.schemas[extensionName]) {\n console.error(`Config schema for extension ${extensionName} already exists. If there are multiple extensions with this same name, one will probably crash.`);\n }\n _state_js__rspack_import_3.configInternalStore.setState((state)=>({\n ...state,\n schemas: {\n ...state.schemas,\n [extensionName]: enhancedSchema\n }\n }));\n}\n/**\n * Provides configuration values programmatically. This is an alternative to\n * providing configuration through the config-file. Configuration provided this\n * way will be merged with configuration from other sources.\n *\n * @param config A configuration object to merge into the existing configuration.\n * @param sourceName An optional name to identify the source of this configuration,\n * used for debugging purposes. Defaults to 'provided'.\n */ function provide(config, sourceName = 'provided') {\n _state_js__rspack_import_3.configInternalStore.setState((state)=>({\n ...state,\n providedConfigs: [\n ...state.providedConfigs,\n {\n source: sourceName,\n config\n }\n ]\n }));\n}\n/**\n * Resolves with `select(state)` as soon as the store's state satisfies `ready`, leaving no\n * subscription behind: nothing subscribes at all when the store is already ready. That matters\n * because `getConfig` runs on every HTTP request, and a subscription that outlives its promise\n * both retains its closure forever and slows down every later write to that store.\n */ function whenStoreReady(store, ready, select) {\n return new Promise((resolve)=>{\n let unsubscribe;\n let resolved = false;\n function update(state) {\n if (!resolved && ready(state)) {\n resolved = true;\n resolve(select(state));\n unsubscribe?.();\n }\n }\n update(store.getState());\n if (!resolved) {\n unsubscribe = store.subscribe(update);\n }\n });\n}\n/**\n * A promise-based way to access the config as soon as it is fully loaded.\n * If it is already loaded, resolves the config in its present state.\n *\n * This is a useful function if you need to get the config in the course\n * of the execution of a function.\n *\n * @param moduleName The name of the module for which to look up the config\n */ function getConfig(moduleName) {\n return whenStoreReady((0,_state_js__rspack_import_3.getConfigStore)(moduleName), (state)=>Boolean(state.loaded && state.config), (state)=>(0,lodash_es__rspack_import_6[\"default\"])(state.config, [\n 'Display conditions',\n 'Translation overrides'\n ]));\n}\n/**\n * Retrieves translation overrides for an extension, optionally scoped to a specific\n * extension slot. When called with only a module name, retrieves module-level overrides.\n * Translation overrides allow customizing translated strings without modifying the\n * original translation files.\n *\n * @param moduleName The name of the module providing the translation context.\n * @param slotName Optional extension slot name to include slot-specific overrides.\n * @param extensionId Optional extension ID to include extension-specific overrides.\n * @returns A Promise resolving to an array of translation override objects. It always settles: a\n * module the config system has not been told about, or an extension that is not mounted,\n * contributes no overrides.\n *\n * @internal\n */ function getTranslationOverrides(moduleName, slotName, extensionId) {\n // A module's store only ever loads its overrides once the module is registered with the config\n // system, so waiting on one that is not registered would leave the i18next namespace pending.\n const promises = [\n moduleName in _state_js__rspack_import_3.configInternalStore.getState().schemas ? whenStoreReady((0,_state_js__rspack_import_3.getConfigStore)(moduleName), (state)=>Boolean(state.translationOverridesLoaded && state.config), (state)=>state.config['Translation overrides'] ?? {}) : Promise.resolve({})\n ];\n if (slotName && extensionId) {\n // Read once rather than waited for: an extension's config entry exists only while that extension\n // is registered as mounted, so a wait started in the gap never settles and leaves the i18next\n // namespace pending.\n const extensionConfig = (0,_state_js__rspack_import_3.getExtensionConfigFromStore)((0,_state_js__rspack_import_3.getExtensionsConfigStore)().getState(), slotName, extensionId);\n const overrides = extensionConfig.loaded && extensionConfig.config ? extensionConfig.config['Translation overrides'] ?? {} : {};\n promises.push(Promise.resolve(overrides));\n }\n return Promise.all(promises);\n}\n/**\n * Validate and interpolate defaults for `providedConfig` according to `schema`\n *\n * @param schema a configuration schema\n * @param providedConfig an object of config values (without the top-level module name)\n * @param keyPathContext a dot-separated string which helps the user figure out where\n * the provided config came from\n * @returns The validated and processed configuration object with defaults applied.\n * @internal\n */ function processConfig(schema, providedConfig, keyPathContext) {\n validateStructure(schema, providedConfig, keyPathContext);\n const config = setDefaults(schema, providedConfig);\n runAllValidatorsInConfigTree(schema, config, keyPathContext);\n return config;\n}\nconst extensionConfigCache = new Map();\n/**\n * Returns the configuration for an extension. This configuration is specific\n * to the slot in which it is mounted, and its ID within that slot.\n *\n * The schema for that configuration is the extension schema. If no extension\n * schema has been provided, the schema used is the schema of the module in\n * which the extension is defined.\n *\n * @param slotModuleName The name of the module which defines the extension slot\n * @param extensionModuleName The name of the module which defines the extension (and therefore the config schema)\n * @param slotName The name of the extension slot where the extension is mounted\n * @param extensionId The ID of the extension in its slot\n * @param slotConfig The slot's configuration, gathered from every module that configures it\n */ function computeExtensionConfig(slotModuleName, extensionModuleName, slotName, extensionId, configState, tempConfigState, slotConfig) {\n const extensionName = getExtensionNameFromId(extensionId);\n const extensionConfigSchema = configState.schemas[extensionName];\n // JSON string of these elements should be unique-per-extension\n const cacheKey = JSON.stringify([\n slotName,\n extensionId,\n slotModuleName,\n extensionModuleName\n ]);\n const cached = extensionConfigCache.get(cacheKey);\n if (cached && cached.extensionSchema === extensionConfigSchema && cached.extensionModuleSchema === configState.schemas[extensionModuleName] && cached.providedConfigs === configState.providedConfigs && cached.temporaryConfig === tempConfigState.config) {\n return cached.config;\n }\n const nameOfSchemaSource = extensionConfigSchema ? extensionName : extensionModuleName;\n const providedConfigs = getProvidedConfigs(configState, tempConfigState);\n const sharedOverride = slotConfig?.configure?.[extensionId] ?? {};\n const slotModuleConfig = mergeConfigsFor(slotModuleName, providedConfigs);\n const configOverride = slotModuleConfig?.extensionSlots?.[slotName]?.configure?.[extensionId] ?? {};\n const extensionConfig = mergeConfigsFor(nameOfSchemaSource, providedConfigs);\n const combinedConfig = mergeConfigs([\n extensionConfig,\n sharedOverride,\n configOverride\n ]);\n const schema = extensionConfigSchema ?? configState.schemas[extensionModuleName];\n validateStructure(schema, combinedConfig, nameOfSchemaSource);\n const config = setDefaults(schema, combinedConfig);\n runAllValidatorsInConfigTree(schema, config, nameOfSchemaSource);\n delete config.extensionSlots;\n extensionConfigCache.set(cacheKey, {\n extensionSchema: extensionConfigSchema,\n extensionModuleSchema: configState.schemas[extensionModuleName],\n providedConfigs: configState.providedConfigs,\n temporaryConfig: tempConfigState.config,\n config\n });\n return config;\n}\nconst implementerToolsModuleCache = new Map();\nfunction getImplementerToolsConfig(configState, tempConfigState) {\n const annotatedSchemas = getAllSchemasWithValuesAndSources(configState.schemas);\n const configsAndSources = [\n ...configState.providedConfigs.map((c)=>[\n c.config,\n c.source\n ]),\n [\n tempConfigState.config,\n 'temporary config'\n ]\n ];\n // A module can be configured without having declared a schema, so the module list is the union\n // of both rather than just the schemas.\n const moduleNames = new Set(Object.keys(annotatedSchemas));\n for (const [config] of configsAndSources){\n for (const moduleName of Object.keys(config)){\n moduleNames.add(moduleName);\n }\n }\n const result = {};\n for (const moduleName of moduleNames){\n const annotatedSchema = annotatedSchemas[moduleName];\n const configSlices = configsAndSources.map(([config])=>config[moduleName]);\n const sources = configsAndSources.map(([, source])=>source);\n const cached = implementerToolsModuleCache.get(moduleName);\n if (cached && cached.annotatedSchema === annotatedSchema && cached.configSlices.length === configSlices.length && cached.configSlices.every((slice, i)=>slice === configSlices[i]) && cached.sources.every((source, i)=>source === sources[i])) {\n result[moduleName] = cached.result;\n continue;\n }\n let merged = annotatedSchema ?? {};\n configsAndSources.forEach(([, source], i)=>{\n const slice = configSlices[i];\n if (slice !== undefined) {\n merged = mergeDeepReplace(merged, createValuesAndSourcesTree(slice, source));\n }\n });\n implementerToolsModuleCache.set(moduleName, {\n annotatedSchema,\n configSlices,\n sources,\n result: merged\n });\n result[moduleName] = merged;\n }\n return result;\n}\n/**\n * Caching per module is what stops the walk being quadratic: defining one module's schema\n * recomputes every module.\n *\n * A module with no configuration of its own is published straight from this cache, so nothing may\n * mutate a tree it reads out of the implementer tools config — it is the cache entry.\n */ const schemaValuesAndSourcesCache = new Map();\nfunction getAllSchemasWithValuesAndSources(schemas) {\n const result = {};\n for (const [moduleName, schema] of Object.entries(schemas)){\n const cached = schemaValuesAndSourcesCache.get(moduleName);\n if (cached && cached.schema === schema) {\n result[moduleName] = cached.annotated;\n } else {\n const annotated = getSchemaWithValuesAndSources((0,lodash_es__rspack_import_7[\"default\"])(schema));\n schemaValuesAndSourcesCache.set(moduleName, {\n schema,\n annotated\n });\n result[moduleName] = annotated;\n }\n }\n return result;\n}\nfunction getSchemaWithValuesAndSources(schema) {\n if (schema.hasOwnProperty('_default')) {\n return {\n ...schema,\n _value: schema._default,\n _source: 'default'\n };\n } else if (isOrdinaryObject(schema)) {\n return Object.keys(schema).reduce((obj, key)=>{\n obj[key] = getSchemaWithValuesAndSources(schema[key]);\n return obj;\n }, {});\n } else {\n // at this point, the schema is bad and an error will have been logged during schema validation\n return {};\n }\n}\nfunction createValuesAndSourcesTree(config, source) {\n if (isOrdinaryObject(config)) {\n return Object.keys(config).reduce((obj, key)=>{\n obj[key] = createValuesAndSourcesTree(config[key], source);\n return obj;\n }, {});\n } else {\n return {\n _value: config,\n _source: source\n };\n }\n}\nfunction getExtensionSlotConfigs(configState, tempConfigState) {\n const allConfigs = mergeConfigs(getProvidedConfigs(configState, tempConfigState));\n const slotConfigPerModule = Object.keys(allConfigs).reduce((obj, key)=>{\n if (allConfigs[key]?.extensionSlots) {\n obj[key] = allConfigs[key]?.extensionSlots;\n }\n return obj;\n }, {});\n validateAllExtensionSlotConfigs(slotConfigPerModule);\n const slotConfigs = {};\n const configureBlocks = {};\n for (const configBySlotName of Object.values(slotConfigPerModule)){\n for (const [slotName, config] of Object.entries(configBySlotName)){\n slotConfigs[slotName] = config;\n if (config.configure) {\n var _configureBlocks, _slotName;\n ((_configureBlocks = configureBlocks)[_slotName = slotName] ?? (_configureBlocks[_slotName] = [])).push(config.configure);\n }\n }\n }\n for (const [slotName, blocks] of Object.entries(configureBlocks)){\n const configure = blocks.length === 1 ? blocks[0] : mergeConfigs(blocks);\n if (slotConfigs[slotName].configure !== configure) {\n slotConfigs[slotName] = {\n ...slotConfigs[slotName],\n configure\n };\n }\n }\n return slotConfigs;\n}\nfunction validateAllExtensionSlotConfigs(slotConfigPerModule) {\n for (let [moduleName, configBySlotName] of Object.entries(slotConfigPerModule)){\n for (let [slotName, config] of Object.entries(configBySlotName)){\n validateExtensionSlotConfig(config, moduleName, slotName);\n }\n }\n}\nfunction validateExtensionSlotConfig(config, moduleName, slotName) {\n const keyPath = `${moduleName}.extensionSlots.${slotName}`;\n const errorPrefix = `Extension slot config '${keyPath}'`;\n const invalidKeys = Object.keys(config).filter((k)=>![\n 'add',\n 'remove',\n 'order',\n 'configure'\n ].includes(k));\n if (invalidKeys.length) {\n logError(keyPath, errorPrefix + `' contains invalid keys '${invalidKeys.join(\"', '\")}'`);\n }\n if (config.add) {\n if (!Array.isArray(config.add) || !config.add.every((n)=>typeof n === 'string')) {\n logError(keyPath, errorPrefix + `.add' is invalid. Must be an array of strings (extension IDs)`);\n }\n }\n if (config.remove) {\n if (!Array.isArray(config.remove) || !config.remove.every((n)=>typeof n === 'string')) {\n logError(keyPath, errorPrefix + `.remove' is invalid. Must be an array of strings (extension IDs)`);\n }\n }\n if (config.order) {\n if (!Array.isArray(config.order) || !config.order.every((n)=>typeof n === 'string')) {\n logError(keyPath, errorPrefix + `.order' is invalid. Must be an array of strings (extension IDs)`);\n }\n }\n if (config.configure) {\n if (!isOrdinaryObject(config.configure)) {\n logError(keyPath, errorPrefix + `.configure' is invalid. Must be an object with extension IDs for keys`);\n }\n }\n}\nfunction getProvidedConfigs(configState, tempConfigState) {\n return [\n ...configState.providedConfigs.map((c)=>c.config),\n tempConfigState.config\n ];\n}\n/**\n * Validates the config schema for a module. Since problems identified here are programming errors\n * that hopefully will be caught during development, this function logs errors to the console directly;\n * it's fine if we spam the user with these errors.\n */ function validateConfigSchema(moduleName, schema, keyPath = '') {\n const updateMessage = `Please verify that you are running the latest version and, if so, alert the maintainer.`;\n for (const key of Object.keys(schema).filter((k)=>!k.startsWith('_'))){\n const thisKeyPath = keyPath + (keyPath && '.') + key;\n const schemaPart = schema[key];\n if (thisKeyPath === 'Display conditions') {\n console.error(`${moduleName} declares a configuration option called \"Display conditions\"; the \"Display conditions\" option is a reserved name. ${updateMessage}`);\n }\n if (thisKeyPath === 'Translation overrides') {\n console.error(`${moduleName} declares a configuration option called \"Translation overrides\"; the \"Translation overrides\" option is a reserved name. ${updateMessage}`);\n }\n if (!isOrdinaryObject(schemaPart)) {\n console.error(`${moduleName} has bad config schema definition for key '${thisKeyPath}'. ${updateMessage}`);\n continue;\n }\n if (!schemaPart.hasOwnProperty('_default')) {\n // recurse for nested config keys\n validateConfigSchema(moduleName, schemaPart, thisKeyPath);\n }\n const elements = schemaPart._elements;\n if (hasObjectSchema(elements)) {\n validateConfigSchema(moduleName, elements, thisKeyPath + '._elements');\n }\n if (schemaPart._validators) {\n for (let validator of schemaPart._validators){\n if (typeof validator !== 'function') {\n console.error(`${moduleName} has invalid validator for key '${thisKeyPath}' ${updateMessage}.` + `\\n\\nIf you're the maintainer: validators must be functions that return either ` + `undefined or an error string. Received ${validator}.`);\n }\n }\n }\n const valueType = schemaPart._type;\n if (valueType && !Object.values(_types_js__rspack_import_0.Type).includes(valueType)) {\n console.error(`${moduleName} has invalid type for key '${thisKeyPath}' ${updateMessage}.` + `\\n\\nIf you're the maintainer: the allowed types are ${Object.values(_types_js__rspack_import_0.Type).join(', ')}. ` + `Received '${valueType}'`);\n }\n if (Object.keys(schemaPart).every((k)=>[\n '_description',\n '_validators',\n '_elements',\n '_type'\n ].includes(k)) && !keyPath.includes('._elements')) {\n console.error(`${moduleName} has bad config schema definition for key '${thisKeyPath}'. ${updateMessage}.` + `\\n\\nIf you're the maintainer: all config elements must have a default. ` + `Received ${JSON.stringify(schemaPart)}`);\n }\n if (elements && valueType && ![\n _types_js__rspack_import_0.Type.Array,\n _types_js__rspack_import_0.Type.Object\n ].includes(valueType)) {\n console.error(`${moduleName} has bad config schema definition for key '${thisKeyPath}'. ${updateMessage}.` + `\\n\\nIf you're the maintainer: the 'elements' key only works with '_type' equal to 'Array' or 'Object'. ` + `Received ${JSON.stringify(valueType)}`);\n }\n }\n}\nfunction getConfigForModule(moduleName, configState, tempConfigState) {\n const schema = configState.schemas[moduleName];\n const inputConfig = mergeConfigsFor(moduleName, getProvidedConfigs(configState, tempConfigState));\n validateStructure(schema, inputConfig, moduleName);\n const config = setDefaults(schema, inputConfig);\n runAllValidatorsInConfigTree(schema, config, moduleName);\n delete config.extensionSlots;\n return config;\n}\nfunction getConfigForModuleImplicitSchema(moduleName, configState, tempConfigState) {\n const inputConfig = mergeConfigsFor(moduleName, getProvidedConfigs(configState, tempConfigState));\n const config = setDefaults(implicitConfigSchema, inputConfig);\n runAllValidatorsInConfigTree(implicitConfigSchema, config, moduleName);\n delete config.extensionSlots;\n return config;\n}\nfunction mergeConfigsFor(moduleName, allConfigs) {\n const allConfigsForModule = allConfigs.map(({ [moduleName]: c })=>c).filter((c)=>!!c);\n return mergeConfigs(allConfigsForModule);\n}\n/**\n * Merges a whole list at once, accumulating into one destination.\n */ function mergeConfigs(configs) {\n return configs.reduce((acc, config)=>(0,lodash_es__rspack_import_4[\"default\"])(acc, config, replaceArrays), {});\n}\n/**\n * Recursively check the provided config tree to make sure that all\n * of the provided properties exist in the schema, and that types are\n * correct. Does not run validators yet, since those will be run on\n * the config with the defaults filled in.\n */ function validateStructure(schema, config, keyPath = '') {\n // validate each constituent element\n for (const key of Object.keys(config)){\n const value = config[key];\n const thisKeyPath = keyPath + '.' + key;\n const schemaPart = schema[key];\n if (!schema.hasOwnProperty(key)) {\n if (!(key === 'extensionSlots' && keyPath !== '')) {\n logError(thisKeyPath, `Unknown config key '${thisKeyPath}' provided. Ignoring.`);\n }\n continue;\n }\n validateBranchStructure(schemaPart, value, thisKeyPath);\n }\n}\nfunction validateBranchStructure(schemaPart, value, keyPath) {\n checkType(keyPath, schemaPart._type, value);\n if (isOrdinaryObject(value)) {\n if (schemaPart._type === _types_js__rspack_import_0.Type.Object) {\n // validate as freeform object\n validateFreeformObjectStructure(schemaPart, value, keyPath);\n } else if (!(schemaPart.hasOwnProperty('_default') || schemaPart.hasOwnProperty('_type'))) {\n // validate as normal nested config\n validateStructure(schemaPart, value, keyPath);\n }\n } else {\n if (schemaPart._type === _types_js__rspack_import_0.Type.Array) {\n validateArrayStructure(schemaPart, value, keyPath);\n }\n }\n}\nfunction validateFreeformObjectStructure(freeformObjectSchema, config, keyPath) {\n if (freeformObjectSchema._elements) {\n for (const key of Object.keys(config)){\n const value = config[key];\n validateBranchStructure(freeformObjectSchema._elements, value, `${keyPath}.${key}`);\n }\n }\n}\nfunction validateArrayStructure(arraySchema, value, keyPath) {\n const validatedAsArray = checkType(keyPath, _types_js__rspack_import_0.Type.Array, value);\n if (!validatedAsArray) {\n return;\n }\n // if there is an array element object schema, verify that elements match it\n if (hasObjectSchema(arraySchema._elements)) {\n for(let i = 0; i < value.length; i++){\n validateBranchStructure(arraySchema._elements, value[i], `${keyPath}[${i}]`);\n }\n }\n for(let i = 0; i < value.length; i++){\n checkType(`${keyPath}[${i}]`, arraySchema._elements?._type, value[i]);\n }\n}\n/**\n * Run all the validators in the config tree. This should be run\n * on the config object after it has been filled in with all the defaults, since\n * higher-level validators may refer to default values.\n */ function runAllValidatorsInConfigTree(schema, config, keyPath = '') {\n // If `!schema`, there should have been a structural validation error printed already.\n if (schema) {\n if (config !== schema._default) {\n runValidators(keyPath, schema._validators, config);\n }\n if (isOrdinaryObject(config)) {\n for (const key of Object.keys(config)){\n const value = config[key];\n const thisKeyPath = keyPath + '.' + key;\n const schemaPart = schema[key];\n if (schema._type === _types_js__rspack_import_0.Type.Object && schema._elements) {\n runAllValidatorsInConfigTree(schema._elements, value, thisKeyPath);\n } else {\n runAllValidatorsInConfigTree(schemaPart, value, thisKeyPath);\n }\n }\n } else if (Array.isArray(config) && schema._elements) {\n for(let i = 0; i < config.length; i++){\n runAllValidatorsInConfigTree(schema._elements, config[i], `${keyPath}[${i}]`);\n }\n }\n }\n}\n/**\n * Run type validation for the value, logging any errors.\n * @returns true if validation passes, false otherwise\n */ function checkType(keyPath, _type, value) {\n if (_type) {\n const validator = {\n Array: _validators_type_validators_js__rspack_import_1.isArray,\n Boolean: _validators_type_validators_js__rspack_import_1.isBoolean,\n ConceptUuid: _validators_type_validators_js__rspack_import_1.isUuid,\n Number: _validators_type_validators_js__rspack_import_1.isNumber,\n Object: _validators_type_validators_js__rspack_import_1.isObject,\n String: _validators_type_validators_js__rspack_import_1.isString,\n UUID: _validators_type_validators_js__rspack_import_1.isUuid,\n PersonAttributeTypeUuid: _validators_type_validators_js__rspack_import_1.isUuid,\n PatientIdentifierTypeUuid: _validators_type_validators_js__rspack_import_1.isUuid\n };\n return runValidators(keyPath, [\n validator[_type]\n ], value);\n }\n return true;\n}\n/**\n * Runs validators, logging errors.\n * @returns true if all pass, false otherwise.\n */ function runValidators(keyPath, validators, value) {\n let returnValue = true;\n if (validators) {\n try {\n for (let validator of validators){\n const validatorResult = validator(value);\n if (typeof validatorResult === 'string') {\n const message = typeof value === 'object' ? `Invalid configuration for ${keyPath}: ${validatorResult}` : `Invalid configuration value ${value} for ${keyPath}: ${validatorResult}`;\n logError(keyPath, message);\n returnValue = false;\n }\n }\n } catch (e) {\n console.error(`Skipping invalid validator at \"${keyPath}\". Encountered error\\n\\t${e}`);\n }\n }\n return returnValue;\n}\n// Recursively fill in the config with values from the schema.\nconst setDefaults = (schema, inputConfig)=>{\n const config = structuredClone(inputConfig);\n if (!schema) {\n return config;\n }\n for (const key of Object.keys(schema)){\n const configPart = config[key];\n const schemaPart = schema[key];\n // The `schemaPart &&` clause of this `if` statement will only fail\n // if the schema is very invalid. It is there to prevent the app from\n // crashing completely, though it will produce unexpected behavior.\n // If this happens, there should be legible errors in the console from\n // the schema validator.\n if (schemaPart && (schemaPart.hasOwnProperty('_type') || schemaPart.hasOwnProperty('_default'))) {\n // We assume that schemaPart defines a config value, since it has\n // a property `_type` or `_default`.\n if (!config.hasOwnProperty(key)) {\n config[key] = schemaPart['_default'];\n }\n // We also check if it is an object or array with object elements, in which case we recurse\n const elements = schemaPart._elements;\n if (configPart && hasObjectSchema(elements)) {\n if (schemaPart._type === _types_js__rspack_import_0.Type.Array && Array.isArray(configPart)) {\n const configWithDefaults = configPart.map((conf)=>setDefaults(elements, conf));\n config[key] = configWithDefaults;\n } else if (schemaPart._type === _types_js__rspack_import_0.Type.Object) {\n for (let objectKey of Object.keys(configPart)){\n configPart[objectKey] = setDefaults(elements, configPart[objectKey]);\n }\n }\n }\n } else if (isOrdinaryObject(schemaPart)) {\n // Since schemaPart has no property \"_type\", if it's an ordinary object\n // (unlike, importantly, the validators array), we assume it is a parent config property.\n // We recurse to config[key] and schema[key]. Default config[key] to {}.\n const selectedConfigPart = configPart ?? {};\n // There will have been a validation error already if configPart is not a plain object.\n if (isOrdinaryObject(selectedConfigPart)) {\n config[key] = setDefaults(schemaPart, selectedConfigPart);\n }\n }\n }\n return config;\n};\nfunction hasObjectSchema(elementsSchema) {\n return !!elementsSchema && Object.keys(elementsSchema).filter((e)=>![\n '_default',\n '_validators'\n ].includes(e)).length > 0;\n}\nfunction isOrdinaryObject(value) {\n return typeof value === 'object' && !Array.isArray(value) && value !== null;\n}\nfunction logError(keyPath, message) {\n const key = `${keyPath}:::${message}`;\n if (!displayedValidationMessages.has(key)) {\n console.error(message);\n displayedValidationMessages.add(key);\n }\n}\n/**\n * Normally, configuration errors are only displayed once. This function clears the list of\n * displayed errors, so that they will be displayed again.\n *\n * @internal\n */ function clearConfigErrors(keyPath) {\n if (keyPath) {\n displayedValidationMessages.forEach((key)=>{\n if (key.startsWith(keyPath)) {\n displayedValidationMessages.delete(key);\n }\n });\n } else {\n displayedValidationMessages.clear();\n }\n}\n/**\n * Cleans up all config store subscriptions and re-establishes them. This is primarily\n * useful for testing, where subscriptions set up at module load time need to be cleared\n * between tests to prevent infinite update loops. After clearing, subscriptions are\n * re-established so the config system continues to work normally.\n *\n * @internal\n */ function resetConfigSystem() {\n configSubscriptions.forEach((unsubscribe)=>unsubscribe());\n configSubscriptions.length = 0;\n // Cached configs are keyed on input identity, so a test that reuses the same schema or config\n // objects across cases would otherwise be served the previous case's result.\n moduleConfigCache.clear();\n extensionConfigCache.clear();\n schemaValuesAndSourcesCache.clear();\n implementerToolsModuleCache.clear();\n lastDerivation = null;\n entryOrigins = new WeakMap();\n setupConfigSubscriptions();\n}\n/**\n * Copied over from esm-extensions. It rightly belongs to that module, but esm-config\n * cannot depend on esm-extensions.\n */ function getExtensionNameFromId(extensionId) {\n const [extensionName] = extensionId.split('#');\n return extensionName;\n}\n/**\n * The translation overrides schema is used in the implicit schema given to every module;\n * plus any additional translation namespaces (at time of writing, this is just 'core').\n */ const translationOverridesSchema = {\n 'Translation overrides': {\n _description: 'Per-language overrides for frontend translations should be keyed by language code and each language dictionary contains the translation key and the display value',\n _type: _types_js__rspack_import_0.Type.Object,\n _default: {},\n _validators: [\n (0,_validators_validator_js__rspack_import_2.validator)((o)=>Object.keys(o).every((k)=>/^[a-z]{2,3}(-[A-Z]{2,3})?$/.test(k)), (o)=>{\n const badKeys = Object.keys(o).filter((k)=>!/^[a-z]{2,3}(-[A-Z]{2,3})?$/.test(k));\n return `The 'Translation overrides' object should have language codes for keys. Language codes must be in the form of a two-to-three letter language code optionally followed by a hyphen and a two-to-three letter country code. The following keys do not conform: ${badKeys.join(', ')}.`;\n })\n ]\n }\n};\n/**\n * The implicitConfigSchema is implicitly included in every configuration schema\n */ const implicitConfigSchema = {\n 'Display conditions': {\n privileges: {\n _description: 'The privilege(s) the user must have to use this extension',\n _type: _types_js__rspack_import_0.Type.Array,\n _default: []\n },\n expression: {\n _description: 'The expression that determines whether the extension is displayed',\n _type: _types_js__rspack_import_0.Type.String,\n _default: undefined\n }\n },\n ...translationOverridesSchema\n};\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YXNjcmlwdC9lc218YnVpbHRpbjpzd2MtbG9hZGVyPz9ydWxlU2V0WzFdLnJ1bGVzWzVdLnVzZVswXSEvaG9tZS9ydW5uZXIvd29yay9vcGVubXJzLWVzbS1jb3JlL29wZW5tcnMtZXNtLWNvcmUvcGFja2FnZXMvZnJhbWV3b3JrL2VzbS1jb25maWcvZGlzdC9tb2R1bGUtY29uZmlnL21vZHVsZS1jb25maWcuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Ab3Blbm1ycy9lc20tYXBwLXNoZWxsLy4uLy4uL2ZyYW1ld29yay9lc20tY29uZmlnL2Rpc3QvbW9kdWxlLWNvbmZpZy9tb2R1bGUtY29uZmlnLmpzP2MzYTUiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqIEBtb2R1bGUgQGNhdGVnb3J5IENvbmZpZyAqLyBpbXBvcnQgeyBjbG9uZURlZXAsIGlzRXF1YWwsIG1lcmdlV2l0aCwgb21pdCBhcyBsb2Rhc2hPbWl0IH0gZnJvbSBcImxvZGFzaC1lc1wiO1xuaW1wb3J0IHsgVHlwZSB9IGZyb20gXCIuLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgaXNBcnJheSwgaXNCb29sZWFuLCBpc1V1aWQsIGlzTnVtYmVyLCBpc09iamVjdCwgaXNTdHJpbmcgfSBmcm9tIFwiLi4vdmFsaWRhdG9ycy90eXBlLXZhbGlkYXRvcnMuanNcIjtcbmltcG9ydCB7IHZhbGlkYXRvciB9IGZyb20gXCIuLi92YWxpZGF0b3JzL3ZhbGlkYXRvci5qc1wiO1xuaW1wb3J0IHsgY29uZmlnRXh0ZW5zaW9uU3RvcmUsIGNvbmZpZ0ludGVybmFsU3RvcmUsIGdldENvbmZpZ1N0b3JlLCBnZXRFeHRlbnNpb25Db25maWdGcm9tU3RvcmUsIGdldEV4dGVuc2lvblNsb3RzQ29uZmlnU3RvcmUsIGdldEV4dGVuc2lvbnNDb25maWdTdG9yZSwgY2xlYXJDb25maWdEZXJpdmF0aW9uRXJyb3IsIGltcGxlbWVudGVyVG9vbHNDb25maWdTdG9yZSwgaW52YWxpZGF0ZUltcGxlbWVudGVyVG9vbHNDb25maWcsIHJlY29yZENvbmZpZ0Rlcml2YXRpb25FcnJvciwgc2V0SW1wbGVtZW50ZXJUb29sc0NvbmZpZ1JlY29tcHV0ZXIsIHRlbXBvcmFyeUNvbmZpZ1N0b3JlIH0gZnJvbSBcIi4vc3RhdGUuanNcIjtcbi8qKlxuICogRGVlcCBtZXJnZSB0d28gb2JqZWN0cywgd2l0aCByaWdodC1zaWRlIHZhbHVlcyB0YWtpbmcgcHJlY2VkZW5jZS5cbiAqIEFycmF5cyBhcmUgcmVwbGFjZWQgZW50aXJlbHkgKG5vdCBtZXJnZWQgYnkgaW5kZXgpLCBtYXRjaGluZyB0aGVcbiAqIGJlaGF2aW9yIG9mIHJhbWRhJ3MgbWVyZ2VEZWVwUmlnaHQuXG4gKi8gZnVuY3Rpb24gcmVwbGFjZUFycmF5cyhfb2JqVmFsdWUsIHNyY1ZhbHVlKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc3JjVmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBzcmNWYWx1ZTtcbiAgICB9XG59XG5mdW5jdGlvbiBtZXJnZURlZXBSZXBsYWNlKGxlZnQsIHJpZ2h0KSB7XG4gICAgcmV0dXJuIG1lcmdlV2l0aCh7fSwgbGVmdCwgcmlnaHQsIHJlcGxhY2VBcnJheXMpO1xufVxuLyoqXG4gKiBTdG9yZSBzZXR1cFxuICpcbiAqXG4gKiBTZXQgdXAgc3RvcmVzIGFuZCBzdWJzY3JpcHRpb25zIHNvIHRoYXQgaW5wdXRzIGdldCBwcm9jZXNzZWQgYXBwcm9wcmlhdGVseS5cbiAqXG4gKiBUaGVyZSBhcmUgKmlucHV0KiBzdG9yZXMgYW5kICpvdXRwdXQqIHN0b3Jlcy4gVGhlICppbnB1dCogc3RvcmVzXG4gKiBhcmUgY29uZmlnSW50ZXJuYWxTdG9yZSwgdGVtcG9yYXJ5Q29uZmlnU3RvcmUsIGFuZCBjb25maWdFeHRlbnNpb25TdG9yZS4gVGhlXG4gKiBvdXRwdXQgc3RvcmVzIGFyZSBzZXQgaW4gdGhlIGBjb21wdXRlLi4uYCBmdW5jdGlvbnMuIFRoZXkgYXJlIHRoZSBtb2R1bGVcbiAqIGNvbmZpZyBzdG9yZXMsIHRoZSBleHRlbnNpb24gc2xvdCBjb25maWcgc3RvcmVzIChieSBtb2R1bGUpLCB0aGUgZXh0ZW5zaW9uXG4gKiBjb25maWcgc3RvcmVzLCBhbmQgdGhlIGltcGxlbWVudGVyIHRvb2xzIGNvbmZpZyBzdG9yZS5cbiAqXG4gKiBUaGlzIGNvZGUgc2V0cyB1cCB0aGUgc3Vic2NyaXB0aW9ucyBzbyB0aGF0IHdoZW4gYW4gaW5wdXQgc3RvcmUgY2hhbmdlcyxcbiAqIHRoZSBjb3JyZWN0IHNldCBvZiBvdXRwdXQgc3RvcmVzIGFyZSB1cGRhdGVkLlxuICpcbiAqIEFsbCBgY29tcHV0ZS4uLmAgZnVuY3Rpb25zIGV4Y2VwdCBgY29tcHV0ZUV4dGVuc2lvbkNvbmZpZ3NgIGFyZSBwdXJlXG4gKiAob3IgYXJlIHN1cHBvc2VkIHRvIGJlKSwgb3RoZXIgdGhhbiB0aGUgZmFjdCB0aGF0IHRoZXkgYWxsIGBzZXRTdGF0ZWBcbiAqIHN0b3JlIHZhbHVlcyBhdCB0aGUgZW5kLiBgY29tcHV0ZUV4dGVuc2lvbkNvbmZpZ3NgIGNhbGxzIGBnZXRHbG9iYWxTdG9yZWAsXG4gKiB3aGljaCBjcmVhdGVzIHN0b3Jlcy5cbiAqLyAvLyBTdG9yZSB1bnN1YnNjcmliZSBmdW5jdGlvbnMgdG8gYWxsb3cgY2xlYW51cCAoZS5nLiwgaW4gdGVzdHMgb3IgaG90IG1vZHVsZSByZWxvYWRpbmcpXG5jb25zdCBjb25maWdTdWJzY3JpcHRpb25zID0gW107XG4vKipcbiAqIFRyYWNrIGRpc3BsYXllZCB2YWxpZGF0aW9uIG1lc3NhZ2VzIHNvIHRoZXkgb25seSBnZXQgZGlzcGxheWVkIG9uY2UuXG4gKi8gY29uc3QgZGlzcGxheWVkVmFsaWRhdGlvbk1lc3NhZ2VzID0gbmV3IFNldCgpO1xuLyoqXG4gKiBSZWNvbXB1dGVzIGFsbCBjb25maWd1cmF0aW9uIGRlcml2ZWQgc3RvcmVzIGJhc2VkIG9uIGN1cnJlbnQgc3RhdGUgb2YgaW5wdXQgc3RvcmVzLlxuICogQ2FsbGVkIHdoZW5ldmVyIGFueSBpbnB1dCBzdG9yZSAoY29uZmlnSW50ZXJuYWxTdG9yZSwgdGVtcG9yYXJ5Q29uZmlnU3RvcmUsIGNvbmZpZ0V4dGVuc2lvblN0b3JlKSBjaGFuZ2VzLlxuICovIGZ1bmN0aW9uIHJlY29tcHV0ZUFsbENvbmZpZ3MoKSB7XG4gICAgY29uc3QgY29uZmlnU3RhdGUgPSBjb25maWdJbnRlcm5hbFN0b3JlLmdldFN0YXRlKCk7XG4gICAgY29uc3QgdGVtcENvbmZpZ1N0YXRlID0gdGVtcG9yYXJ5Q29uZmlnU3RvcmUuZ2V0U3RhdGUoKTtcbiAgICBjb25zdCBleHRlbnNpb25TdGF0ZSA9IGNvbmZpZ0V4dGVuc2lvblN0b3JlLmdldFN0YXRlKCk7XG4gICAgLy8gTW91bnRpbmcgYW4gZXh0ZW5zaW9uIGNoYW5nZXMgb25seSBgY29uZmlnRXh0ZW5zaW9uU3RvcmVgLCB3aGljaCBvbmx5IHRoZSBleHRlbnNpb24gY29uZmlnc1xuICAgIC8vIGRlcGVuZCBvbiwgc28gdGhlIHJlc3Qgb2YgdGhlIGxhc3QgZGVyaXZhdGlvbiBpcyByZXVzZWQuXG4gICAgY29uc3QgY29uZmlnSW5wdXRzVW5jaGFuZ2VkID0gbGFzdERlcml2YXRpb24/LmNvbmZpZ1N0YXRlID09PSBjb25maWdTdGF0ZSAmJiBsYXN0RGVyaXZhdGlvbi50ZW1wQ29uZmlnU3RhdGUgPT09IHRlbXBDb25maWdTdGF0ZTtcbiAgICBpZiAoY29uZmlnSW5wdXRzVW5jaGFuZ2VkKSB7XG4gICAgICAgIGNvbXB1dGVFeHRlbnNpb25Db25maWdzKGNvbmZpZ1N0YXRlLCBleHRlbnNpb25TdGF0ZSwgdGVtcENvbmZpZ1N0YXRlLCBsYXN0RGVyaXZhdGlvbi5zbG90Q29uZmlncywgdHJ1ZSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29tcHV0ZU1vZHVsZUNvbmZpZyhjb25maWdTdGF0ZSwgdGVtcENvbmZpZ1N0YXRlKTtcbiAgICBjb25zdCBzbG90Q29uZmlncyA9IGdldEV4dGVuc2lvblNsb3RDb25maWdzKGNvbmZpZ1N0YXRlLCB0ZW1wQ29uZmlnU3RhdGUpO1xuICAgIGNvbXB1dGVFeHRlbnNpb25TbG90Q29uZmlncyhzbG90Q29uZmlncyk7XG4gICAgY29tcHV0ZUV4dGVuc2lvbkNvbmZpZ3MoY29uZmlnU3RhdGUsIGV4dGVuc2lvblN0YXRlLCB0ZW1wQ29uZmlnU3RhdGUsIHNsb3RDb25maWdzLCBmYWxzZSk7XG4gICAgLy8gUmVjb3JkZWQgb25seSBhZnRlciB0aGUgb3V0cHV0cyBhYm92ZSBhcmUgd3JpdHRlbiwgc28gYSBmYWlsdXJlIGZvcmNlcyBhIGZ1bGwgZGVyaXZhdGlvbiBuZXh0IHRpbWUuXG4gICAgbGFzdERlcml2YXRpb24gPSB7XG4gICAgICAgIGNvbmZpZ1N0YXRlLFxuICAgICAgICB0ZW1wQ29uZmlnU3RhdGUsXG4gICAgICAgIHNsb3RDb25maWdzXG4gICAgfTtcbiAgICAvLyBMYXN0LCBiZWNhdXNlIGEgZmFpbHVyZSBoZXJlIG11c3Qgbm90IHNraXAgdGhlIG91dHB1dHMgYWJvdmUuIE9ubHkga2VwdCBjdXJyZW50IHdoaWxlIHRoZVxuICAgIC8vIGltcGxlbWVudGVyIHRvb2xzIGFyZSB3YXRjaGluZyBpdDsgb3RoZXJ3aXNlIGRlcml2ZWQgb24gcmVhZC5cbiAgICBpbnZhbGlkYXRlSW1wbGVtZW50ZXJUb29sc0NvbmZpZygpO1xufVxuLyoqIFRoZSBpbnB1dHMgdGhlIG91dHB1dHMgd2VyZSBsYXN0IGZ1bGx5IGRlcml2ZWQgZnJvbSwgY29tcGFyZWQgYnkgaWRlbnRpdHkuICovIGxldCBsYXN0RGVyaXZhdGlvbiA9IG51bGw7XG4vKipcbiAqIFRoZSBtb3VudGVkIGV4dGVuc2lvbiBlYWNoIGV4dGVuc2lvbiBjb25maWcgZW50cnkgd2FzIGRlcml2ZWQgZm9yLiBBbiBleHRlbnNpb24gSUQgY2FuIGJlXG4gKiBtb3VudGVkIHVuZGVyIGEgZGlmZmVyZW50IG1vZHVsZSB3aGlsZSBpdHMgc2xvdCBhbmQgSUQgc3RheSB0aGUgc2FtZSwgc28gYW4gZW50cnkgaXMgb25seVxuICogY3VycmVudCBpZiBpdHMgbW9kdWxlcyBtYXRjaCB0b28uXG4gKi8gbGV0IGVudHJ5T3JpZ2lucyA9IG5ldyBXZWFrTWFwKCk7XG5mdW5jdGlvbiBzZXR1cENvbmZpZ1N1YnNjcmlwdGlvbnMoKSB7XG4gICAgLy8gUmVnaXN0ZXJlZCBoZXJlIHJhdGhlciB0aGFuIGF0IG1vZHVsZSBsb2FkIHNvIHRoYXQgYHJlc2V0Q29uZmlnU3lzdGVtYCByZXN0b3JlcyBpdC5cbiAgICBzZXRJbXBsZW1lbnRlclRvb2xzQ29uZmlnUmVjb21wdXRlcigoKT0+Y29tcHV0ZUltcGxlbWVudGVyVG9vbHNDb25maWcoY29uZmlnSW50ZXJuYWxTdG9yZS5nZXRTdGF0ZSgpLCB0ZW1wb3JhcnlDb25maWdTdG9yZS5nZXRTdGF0ZSgpKSk7XG4gICAgLy8gR3VhcmRlZDogYSBjb25maWd1cmF0aW9uIHRoZSB1c2VyIHNhdmVkIHRocm91Z2ggdGhlIGltcGxlbWVudGVyIHRvb2xzIG11c3Qgbm90IGJlIGFibGUgdG8gc3RvcFxuICAgIC8vIHRoZSBmcmFtZXdvcmsgZnJvbSBsb2FkaW5nLlxuICAgIHJlY29tcHV0ZUFsbENvbmZpZ3NTYWZlbHkoKTtcbiAgICAvLyBTdWJzY3JpYmUgdG8gYWxsIGlucHV0IHN0b3JlcyB3aXRoIGEgc2luZ2xlIGhhbmRsZXJcbiAgICAvLyBUaGlzIGVuc3VyZXMgd2Ugb25seSByZWNvbXB1dGUgb25jZSBldmVuIGlmIG11bHRpcGxlIHN0b3JlcyBjaGFuZ2Ugc2ltdWx0YW5lb3VzbHlcbiAgICBjb25maWdTdWJzY3JpcHRpb25zLnB1c2goY29uZmlnSW50ZXJuYWxTdG9yZS5zdWJzY3JpYmUocmVjb21wdXRlQWxsQ29uZmlnc1NhZmVseSksIHRlbXBvcmFyeUNvbmZpZ1N0b3JlLnN1YnNjcmliZShyZWNvbXB1dGVBbGxDb25maWdzU2FmZWx5KSwgY29uZmlnRXh0ZW5zaW9uU3RvcmUuc3Vic2NyaWJlKHJlY29tcHV0ZUFsbENvbmZpZ3NTYWZlbHkpKTtcbn1cbi8qKiBFbnN1cmUgdGhhdCB3ZSBkbyBub3QgdGhyb3cgZHVyaW5nIGEgc3RvcmUgc3Vic2NyaXB0aW9uICovIGZ1bmN0aW9uIHJlY29tcHV0ZUFsbENvbmZpZ3NTYWZlbHkoKSB7XG4gICAgY2xlYXJDb25maWdEZXJpdmF0aW9uRXJyb3IoKTtcbiAgICB0cnkge1xuICAgICAgICByZWNvbXB1dGVBbGxDb25maWdzKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZWNvcmRDb25maWdEZXJpdmF0aW9uRXJyb3IoZSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byByZWNvbXB1dGUgdGhlIGNvbmZpZ3VyYXRpb24nLCBlKTtcbiAgICB9XG59XG4vLyBTZXQgdXAgc3Vic2NyaXB0aW9ucyBhdCBtb2R1bGUgbG9hZCB0aW1lXG5zZXR1cENvbmZpZ1N1YnNjcmlwdGlvbnMoKTtcbmNvbnN0IG1vZHVsZUNvbmZpZ0NhY2hlID0gbmV3IE1hcCgpO1xuZnVuY3Rpb24gY29tcHV0ZU1vZHVsZUNvbmZpZyhzdGF0ZSwgdGVtcFN0YXRlKSB7XG4gICAgZm9yIChsZXQgbW9kdWxlTmFtZSBvZiBPYmplY3Qua2V5cyhzdGF0ZS5zY2hlbWFzKSl7XG4gICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHNjaGVtYSBjb3VsZCBiZSBlaXRoZXIganVzdCB0aGUgaW1wbGljaXQgc2NoZW1hIG9yIHRoZSBhY3R1YWxseVxuICAgICAgICAvLyBkZWZpbmVkIHNjaGVtYS4gV2UgcnVuIHdpdGgganVzdCB0aGUgaW1wbGljaXQgc2NoZW1hIGJlY2F1c2Ugd2Ugd2FudCB0byBwb3B1bGF0ZVxuICAgICAgICAvLyB0aGUgY29uZmlnIHN0b3JlIHdpdGggdGhlIHRyYW5zbGF0aW9uIG92ZXJyaWRlcyBhcyBzb29uIGFzIHBvc3NpYmxlLiBJbiBmYWN0LCB0aGVcbiAgICAgICAgLy8gdHJhbnNsYXRpb24gc3lzdGVtIHdpbGwgdGhyb3cgZm9yIFN1c3BlbnNlIHVudGlsIHRoZSB0cmFuc2xhdGlvbiBvdmVycmlkZXMgYXJlXG4gICAgICAgIC8vIGF2YWlsYWJsZSwgd2hpY2ggYXMgb2YgdGhpcyB3cml0aW5nIGJsb2NrcyB0aGUgc2NoZW1hIGRlZmluaXRpb24gZnJvbSBvY2N1cnJpbmdcbiAgICAgICAgLy8gZm9yIG1vZHVsZXMgbG9hZGVkIGJhc2VkIG9uIHRoZWlyIGV4dGVuc2lvbnMuXG4gICAgICAgIGNvbnN0IG1vZHVsZVN0b3JlID0gZ2V0Q29uZmlnU3RvcmUobW9kdWxlTmFtZSk7XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IHN0YXRlLnNjaGVtYXNbbW9kdWxlTmFtZV07XG4gICAgICAgIGNvbnN0IG1vZHVsZUxvYWRlZCA9IEJvb2xlYW4oc3RhdGUubW9kdWxlTG9hZGVkW21vZHVsZU5hbWVdKTtcbiAgICAgICAgY29uc3QgY2FjaGVkID0gbW9kdWxlQ29uZmlnQ2FjaGUuZ2V0KG1vZHVsZU5hbWUpO1xuICAgICAgICBsZXQgbmV3U3RhdGU7XG4gICAgICAgIGlmIChjYWNoZWQgJiYgY2FjaGVkLnNjaGVtYSA9PT0gc2NoZW1hICYmIGNhY2hlZC5tb2R1bGVMb2FkZWQgPT09IG1vZHVsZUxvYWRlZCAmJiBjYWNoZWQucHJvdmlkZWRDb25maWdzID09PSBzdGF0ZS5wcm92aWRlZENvbmZpZ3MgJiYgY2FjaGVkLnRlbXBvcmFyeUNvbmZpZyA9PT0gdGVtcFN0YXRlLmNvbmZpZykge1xuICAgICAgICAgICAgbmV3U3RhdGUgPSBjYWNoZWQuc3RhdGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjb25maWcgPSBtb2R1bGVMb2FkZWQgPyBnZXRDb25maWdGb3JNb2R1bGUobW9kdWxlTmFtZSwgc3RhdGUsIHRlbXBTdGF0ZSkgOiBnZXRDb25maWdGb3JNb2R1bGVJbXBsaWNpdFNjaGVtYShtb2R1bGVOYW1lLCBzdGF0ZSwgdGVtcFN0YXRlKTtcbiAgICAgICAgICAgIG5ld1N0YXRlID0ge1xuICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uT3ZlcnJpZGVzTG9hZGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIGxvYWRlZDogbW9kdWxlTG9hZGVkLFxuICAgICAgICAgICAgICAgIGNvbmZpZ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIG1vZHVsZUNvbmZpZ0NhY2hlLnNldChtb2R1bGVOYW1lLCB7XG4gICAgICAgICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgICAgICAgIG1vZHVsZUxvYWRlZCxcbiAgICAgICAgICAgICAgICBwcm92aWRlZENvbmZpZ3M6IHN0YXRlLnByb3ZpZGVkQ29uZmlncyxcbiAgICAgICAgICAgICAgICB0ZW1wb3JhcnlDb25maWc6IHRlbXBTdGF0ZS5jb25maWcsXG4gICAgICAgICAgICAgICAgc3RhdGU6IG5ld1N0YXRlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBXcml0aW5nIHVuY29uZGl0aW9uYWxseSB3b3VsZCBoYW5kIGV2ZXJ5IGB1c2VDb25maWdgIGNvbnN1bWVyIGluIHRoZSBhcHBsaWNhdGlvbiBhIG5ld1xuICAgICAgICAvLyBvYmplY3Qg4oCUIGFuZCBhIHJlLXJlbmRlciDigJQgd2hlbmV2ZXIgYW55IG1vZHVsZSBvciBleHRlbnNpb24gYW55d2hlcmUgaXMgbG9hZGVkLlxuICAgICAgICBjb25zdCBvbGRTdGF0ZSA9IG1vZHVsZVN0b3JlLmdldFN0YXRlKCk7XG4gICAgICAgIGlmIChvbGRTdGF0ZS5sb2FkZWQgIT09IG5ld1N0YXRlLmxvYWRlZCB8fCBvbGRTdGF0ZS50cmFuc2xhdGlvbk92ZXJyaWRlc0xvYWRlZCAhPT0gbmV3U3RhdGUudHJhbnNsYXRpb25PdmVycmlkZXNMb2FkZWQgfHwgIWlzRXF1YWwob2xkU3RhdGUuY29uZmlnLCBuZXdTdGF0ZS5jb25maWcpKSB7XG4gICAgICAgICAgICBtb2R1bGVTdG9yZS5zZXRTdGF0ZShuZXdTdGF0ZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBjb21wdXRlRXh0ZW5zaW9uU2xvdENvbmZpZ3Moc2xvdENvbmZpZ3MpIHtcbiAgICBjb25zdCBzbG90U3RvcmUgPSBnZXRFeHRlbnNpb25TbG90c0NvbmZpZ1N0b3JlKCk7XG4gICAgY29uc3Qgb2xkU2xvdHMgPSBzbG90U3RvcmUuZ2V0U3RhdGUoKS5zbG90cztcbiAgICBjb25zdCBzbG90cyA9IHt9O1xuICAgIGxldCBjaGFuZ2VkID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCBbc2xvdE5hbWUsIGNvbmZpZ10gb2YgT2JqZWN0LmVudHJpZXMoc2xvdENvbmZpZ3MpKXtcbiAgICAgICAgY29uc3QgcHJldmlvdXMgPSBvbGRTbG90c1tzbG90TmFtZV07XG4gICAgICAgIC8vIEVudHJpZXMga2VlcCB0aGVpciBpZGVudGl0eSB3aGVuIHRoZSBjb25maWd1cmF0aW9uIGJlaGluZCB0aGVtIGhhc24ndCBjaGFuZ2VkLCBzbyB0aGF0XG4gICAgICAgIC8vIGNoYW5naW5nIG9uZSBzbG90J3MgY29uZmlndXJhdGlvbiBkb2Vzbid0IGludmFsaWRhdGUgZXZlcnkgb3RoZXIgY29uZmlndXJlZCBzbG90LlxuICAgICAgICBpZiAocHJldmlvdXM/LmxvYWRlZCAmJiBpc0VxdWFsKHByZXZpb3VzLmNvbmZpZywgY29uZmlnKSkge1xuICAgICAgICAgICAgc2xvdHNbc2xvdE5hbWVdID0gcHJldmlvdXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzbG90c1tzbG90TmFtZV0gPSB7XG4gICAgICAgICAgICAgICAgbG9hZGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIGNvbmZpZ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEJ1aWx0IGZyb20gc2NyYXRjaCByYXRoZXIgdGhhbiBtZXJnZWQgb3ZlciB0aGUgcHJldmlvdXMgc3RhdGU6IGEgc2xvdCB3aG9zZSBjb25maWd1cmF0aW9uXG4gICAgLy8gaGFzIGJlZW4gcmVtb3ZlZCDigJQgY2xlYXJpbmcgdGhlIHRlbXBvcmFyeSBjb25maWcsIHNheSDigJQgaGFzIHRvIGxvc2UgaXRzIGVudHJ5LCBvciB0aGUgb2xkXG4gICAgLy8gY29uZmlndXJhdGlvbiBzdGF5cyBpbiBmb3JjZSB1bnRpbCB0aGUgcGFnZSBpcyByZWxvYWRlZC5cbiAgICBpZiAoY2hhbmdlZCB8fCBPYmplY3Qua2V5cyhvbGRTbG90cykubGVuZ3RoICE9PSBPYmplY3Qua2V5cyhzbG90cykubGVuZ3RoKSB7XG4gICAgICAgIHNsb3RTdG9yZS5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBzbG90c1xuICAgICAgICB9KTtcbiAgICB9XG59XG5mdW5jdGlvbiBjb21wdXRlSW1wbGVtZW50ZXJUb29sc0NvbmZpZyhzdGF0ZSwgdGVtcENvbmZpZ1N0YXRlKSB7XG4gICAgY29uc3Qgb2xkU3RhdGUgPSBpbXBsZW1lbnRlclRvb2xzQ29uZmlnU3RvcmUuZ2V0U3RhdGUoKTtcbiAgICBjb25zdCBjb25maWcgPSBnZXRJbXBsZW1lbnRlclRvb2xzQ29uZmlnKHN0YXRlLCB0ZW1wQ29uZmlnU3RhdGUpO1xuICAgIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgICAgICBjb25maWdcbiAgICB9O1xuICAgIC8vIFVzZSBkZWVwIGVxdWFsaXR5IG9uIHRoZSBhY3R1YWwgY29uZmlnIGNvbnRlbnQsIG5vdCB0aGUgd3JhcHBlciBvYmplY3RcbiAgICBpZiAoIWlzRXF1YWwob2xkU3RhdGUuY29uZmlnLCBuZXdTdGF0ZS5jb25maWcpKSB7XG4gICAgICAgIGltcGxlbWVudGVyVG9vbHNDb25maWdTdG9yZS5zZXRTdGF0ZShuZXdTdGF0ZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gY29tcHV0ZUV4dGVuc2lvbkNvbmZpZ3MoY29uZmlnU3RhdGUsIGV4dGVuc2lvblN0YXRlLCB0ZW1wQ29uZmlnU3RhdGUsIHNsb3RDb25maWdzLCBjb25maWdJbnB1dHNVbmNoYW5nZWQpIHtcbiAgICBjb25zdCBleHRlbnNpb25zQ29uZmlnU3RvcmUgPSBnZXRFeHRlbnNpb25zQ29uZmlnU3RvcmUoKTtcbiAgICBjb25zdCBvbGRDb25maWdzID0gZXh0ZW5zaW9uc0NvbmZpZ1N0b3JlLmdldFN0YXRlKCkuY29uZmlncztcbiAgICBjb25zdCBjb25maWdzID0ge307XG4gICAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcbiAgICBsZXQgZW50cnlDb3VudCA9IDA7XG4gICAgLy8gV2UgYXNzdW1lIHRoYXQgdGhlIG1vZHVsZSBzY2hlbWEgaGFzIGFscmVhZHkgYmVlbiBkZWZpbmVkLCBzaW5jZSB0aGUgZXh0ZW5zaW9uXG4gICAgLy8gaXQgY29udGFpbnMgaXMgbW91bnRlZC5cbiAgICBmb3IgKGxldCBleHRlbnNpb24gb2YgZXh0ZW5zaW9uU3RhdGUubW91bnRlZEV4dGVuc2lvbnMpe1xuICAgICAgICBjb25zdCBwcmV2aW91cyA9IG9sZENvbmZpZ3NbZXh0ZW5zaW9uLnNsb3ROYW1lXT8uW2V4dGVuc2lvbi5leHRlbnNpb25JZF07XG4gICAgICAgIGxldCBlbnRyeTtcbiAgICAgICAgY29uc3Qgb3JpZ2luID0gcHJldmlvdXMgJiYgZW50cnlPcmlnaW5zLmdldChwcmV2aW91cyk7XG4gICAgICAgIGlmIChjb25maWdJbnB1dHNVbmNoYW5nZWQgJiYgcHJldmlvdXM/LmxvYWRlZCAmJiBvcmlnaW4/LnNsb3RNb2R1bGVOYW1lID09PSBleHRlbnNpb24uc2xvdE1vZHVsZU5hbWUgJiYgb3JpZ2luLmV4dGVuc2lvbk1vZHVsZU5hbWUgPT09IGV4dGVuc2lvbi5leHRlbnNpb25Nb2R1bGVOYW1lKSB7XG4gICAgICAgICAgICAvLyBEZXJpdmVkIGZyb20gdGhlc2Ugc2FtZSBpbnB1dHMgYnkgdGhlIHByZXZpb3VzIHJ1biwgc28gaXQgaXMgc3RpbGwgY3VycmVudC5cbiAgICAgICAgICAgIGVudHJ5ID0gcHJldmlvdXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjb25maWcgPSBjb21wdXRlRXh0ZW5zaW9uQ29uZmlnKGV4dGVuc2lvbi5zbG90TW9kdWxlTmFtZSwgZXh0ZW5zaW9uLmV4dGVuc2lvbk1vZHVsZU5hbWUsIGV4dGVuc2lvbi5zbG90TmFtZSwgZXh0ZW5zaW9uLmV4dGVuc2lvbklkLCBjb25maWdTdGF0ZSwgdGVtcENvbmZpZ1N0YXRlLCBzbG90Q29uZmlnc1tleHRlbnNpb24uc2xvdE5hbWVdKTtcbiAgICAgICAgICAgIC8vIEVudHJpZXMga2VlcCB0aGVpciBpZGVudGl0eSB3aGVuIHRoZSBjb25maWd1cmF0aW9uIGJlaGluZCB0aGVtIGhhc24ndCBjaGFuZ2VkLCBzbyB0aGF0XG4gICAgICAgICAgICAvLyBtb3VudGluZyBvbmUgZXh0ZW5zaW9uIGRvZXNuJ3QgaGFuZCBldmVyeSBvdGhlciBtb3VudGVkIGV4dGVuc2lvbiBhIG5ldyBjb25maWcgb2JqZWN0LlxuICAgICAgICAgICAgZW50cnkgPSBwcmV2aW91cz8ubG9hZGVkICYmIGlzRXF1YWwocHJldmlvdXMuY29uZmlnLCBjb25maWcpID8gcHJldmlvdXMgOiB7XG4gICAgICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgICAgIGxvYWRlZDogdHJ1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbnRyeU9yaWdpbnMuc2V0KGVudHJ5LCBleHRlbnNpb24pO1xuICAgICAgICBpZiAoZW50cnkgIT09IHByZXZpb3VzKSB7XG4gICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvbmZpZ3NbZXh0ZW5zaW9uLnNsb3ROYW1lXSkge1xuICAgICAgICAgICAgY29uZmlnc1tleHRlbnNpb24uc2xvdE5hbWVdID0ge307XG4gICAgICAgIH1cbiAgICAgICAgY29uZmlnc1tleHRlbnNpb24uc2xvdE5hbWVdW2V4dGVuc2lvbi5leHRlbnNpb25JZF0gPSBlbnRyeTtcbiAgICAgICAgZW50cnlDb3VudCsrO1xuICAgIH1cbiAgICAvLyBTbG90cyBrZWVwIHRoZWlyIGlkZW50aXR5IHRvbyB3aGVuIG5vbmUgb2YgdGhlaXIgZW50cmllcyBjaGFuZ2VkLiBTdWJzY3JpYmVycyBjb21wYXJlIHRoZXNlXG4gICAgLy8gcGVyLXNsb3Qgb2JqZWN0cyB0byB3b3JrIG91dCB3aGljaCBzbG90cyB0byByZS1kZXJpdmUsIHNvIGhhbmRpbmcgb3V0IGEgZnJlc2ggb25lIGZvciBldmVyeVxuICAgIC8vIHNsb3Qgb24gZXZlcnkgd3JpdGUgd291bGQgbWFyayBldmVyeSBzbG90IHdpdGggYSBtb3VudGVkIGV4dGVuc2lvbiBkaXJ0eS5cbiAgICBmb3IgKGNvbnN0IFtzbG90TmFtZSwgc2xvdENvbmZpZ3NdIG9mIE9iamVjdC5lbnRyaWVzKGNvbmZpZ3MpKXtcbiAgICAgICAgY29uc3QgcHJldmlvdXNTbG90ID0gb2xkQ29uZmlnc1tzbG90TmFtZV07XG4gICAgICAgIGlmIChwcmV2aW91c1Nsb3QgJiYgT2JqZWN0LmtleXMocHJldmlvdXNTbG90KS5sZW5ndGggPT09IE9iamVjdC5rZXlzKHNsb3RDb25maWdzKS5sZW5ndGggJiYgT2JqZWN0LmVudHJpZXMoc2xvdENvbmZpZ3MpLmV2ZXJ5KChbZXh0ZW5zaW9uSWQsIGVudHJ5XSk9PnByZXZpb3VzU2xvdFtleHRlbnNpb25JZF0gPT09IGVudHJ5KSkge1xuICAgICAgICAgICAgY29uZmlnc1tzbG90TmFtZV0gPSBwcmV2aW91c1Nsb3Q7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFjaGFuZ2VkKSB7XG4gICAgICAgIC8vIE5vdGhpbmcgd2FzIGFkZGVkIG9yIGFsdGVyZWQsIGJ1dCBhbiBleHRlbnNpb24gbWF5IGhhdmUgdW5tb3VudGVkLCB3aGljaCBvbmx5IHNob3dzIHVwIGFzIGFcbiAgICAgICAgLy8gbWlzc2luZyBlbnRyeS5cbiAgICAgICAgY2hhbmdlZCA9IE9iamVjdC5rZXlzKG9sZENvbmZpZ3MpLmxlbmd0aCAhPT0gT2JqZWN0LmtleXMoY29uZmlncykubGVuZ3RoIHx8IE9iamVjdC52YWx1ZXMob2xkQ29uZmlncykucmVkdWNlKCh0b3RhbCwgc2xvdCk9PnRvdGFsICsgT2JqZWN0LmtleXMoc2xvdCkubGVuZ3RoLCAwKSAhPT0gZW50cnlDb3VudDtcbiAgICB9XG4gICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgICAgZXh0ZW5zaW9uc0NvbmZpZ1N0b3JlLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGNvbmZpZ3NcbiAgICAgICAgfSk7XG4gICAgfVxufVxuLypcbiAqIEFQSVxuICpcbiAqLyAvKipcbiAqIFRoaXMgZGVmaW5lcyBhIGNvbmZpZ3VyYXRpb24gc2NoZW1hIGZvciBhIG1vZHVsZS4gVGhlIHNjaGVtYSB0ZWxscyB0aGVcbiAqIGNvbmZpZ3VyYXRpb24gc3lzdGVtIGhvdyB0aGUgbW9kdWxlIGNhbiBiZSBjb25maWd1cmVkLiBJdCBzcGVjaWZpZXNcbiAqIHdoYXQgbWFrZXMgY29uZmlndXJhdGlvbiB2YWxpZCBvciBpbnZhbGlkLlxuICpcbiAqIFNlZSBbQ29uZmlndXJhdGlvbiBTeXN0ZW1dKGh0dHBzOi8vbzMtZG9jcy5vcGVubXJzLm9yZy9lbi1VUy9kb2NzL2NvbmZpZ3VyYXRpb24tc3lzdGVtKVxuICogZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgZGVmaW5pbmcgYSBjb25maWcgc2NoZW1hLlxuICpcbiAqIEBwYXJhbSBtb2R1bGVOYW1lIE5hbWUgb2YgdGhlIG1vZHVsZSB0aGUgc2NoZW1hIGlzIGJlaW5nIGRlZmluZWQgZm9yLiBHZW5lcmFsbHlcbiAqICAgc2hvdWxkIGJlIHRoZSBvbmUgaW4gd2hpY2ggdGhlIGBkZWZpbmVDb25maWdTY2hlbWFgIGNhbGwgdGFrZXMgcGxhY2UuXG4gKiBAcGFyYW0gc2NoZW1hIFRoZSBjb25maWcgc2NoZW1hIGZvciB0aGUgbW9kdWxlXG4gKi8gZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUNvbmZpZ1NjaGVtYShtb2R1bGVOYW1lLCBzY2hlbWEpIHtcbiAgICB2YWxpZGF0ZUNvbmZpZ1NjaGVtYShtb2R1bGVOYW1lLCBzY2hlbWEpO1xuICAgIGNvbnN0IGVuaGFuY2VkU2NoZW1hID0gbWVyZ2VEZWVwUmVwbGFjZShzY2hlbWEsIGltcGxpY2l0Q29uZmlnU2NoZW1hKTtcbiAgICBjb25maWdJbnRlcm5hbFN0b3JlLnNldFN0YXRlKChzdGF0ZSk9Pih7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIHNjaGVtYXM6IHtcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZS5zY2hlbWFzLFxuICAgICAgICAgICAgICAgIFttb2R1bGVOYW1lXTogZW5oYW5jZWRTY2hlbWFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtb2R1bGVMb2FkZWQ6IHtcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZS5tb2R1bGVMb2FkZWQsXG4gICAgICAgICAgICAgICAgW21vZHVsZU5hbWVdOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbn1cbi8qKlxuICogVGhpcyBhbGVydHMgdGhlIGNvbmZpZ3VyYXRpb24gc3lzdGVtIHRoYXQgYSBtb2R1bGUgZXhpc3RzLiBUaGlzIGFsbG93cyBjb25maWcgdG8gYmVcbiAqIHByb2Nlc3NlZCwgd2hpbGUgc3RpbGwgYWxsb3dpbmcgdGhlIGV4dGVuc2lvbiBzeXN0ZW0gdG8ga25vdyB3aGV0aGVyIHRoZSBtb2R1bGUgaGFzXG4gKiBhY3R1YWxseSBoYWQgaXRzIGZyb250IGJ1bmRsZSBleGVjdXRlZCB5ZXQuXG4gKlxuICogVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGluIGVzbS1hcHAtc2hlbGwuXG4gKlxuICogQGludGVybmFsXG4gKiBAcGFyYW0gbW9kdWxlTmFtZVxuICovIGV4cG9ydCBmdW5jdGlvbiByZWdpc3Rlck1vZHVsZVdpdGhDb25maWdTeXN0ZW0obW9kdWxlTmFtZSkge1xuICAgIGNvbmZpZ0ludGVybmFsU3RvcmUuc2V0U3RhdGUoKHN0YXRlKT0+KHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgc2NoZW1hczoge1xuICAgICAgICAgICAgICAgIC4uLnN0YXRlLnNjaGVtYXMsXG4gICAgICAgICAgICAgICAgW21vZHVsZU5hbWVdOiBpbXBsaWNpdENvbmZpZ1NjaGVtYVxuICAgICAgICAgICAgfVxuICAgICAgICB9KSk7XG59XG4vKipcbiAqIFRoaXMgYWxlcnRzIHRoZSBjb25maWd1cmF0aW9uIHN5c3RlbSB0aGF0IGEgbW9kdWxlIGhhcyBiZWVuIGxvYWRlZC5cbiAqXG4gKiBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gZXNtLWFwcC1zaGVsbC5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSBtb2R1bGVOYW1lXG4gKi8gZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyTW9kdWxlTG9hZChtb2R1bGVOYW1lKSB7XG4gICAgY29uZmlnSW50ZXJuYWxTdG9yZS5zZXRTdGF0ZSgoc3RhdGUpPT4oe1xuICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICBtb2R1bGVMb2FkZWQ6IHtcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZS5tb2R1bGVMb2FkZWQsXG4gICAgICAgICAgICAgICAgW21vZHVsZU5hbWVdOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbn1cbi8qKlxuICogVGhpcyBhbGxvd3MgdGhlIGNvbmZpZyBzeXN0ZW0gdG8gc3VwcG9ydCB0cmFuc2xhdGlvbiBvdmVycmlkZXMgZm9yIG5hbWVzcGFjZXMgdGhhdFxuICogZG8gbm90IGNvcnJlc3BvbmQgdG8gbW9kdWxlcy5cbiAqXG4gKiBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gZXNtLWFwcC1zaGVsbC5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSBuYW1lc3BhY2VcbiAqLyBleHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJUcmFuc2xhdGlvbk5hbWVzcGFjZShuYW1lc3BhY2UpIHtcbiAgICBjb25maWdJbnRlcm5hbFN0b3JlLnNldFN0YXRlKChzdGF0ZSk9Pih7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIHNjaGVtYXM6IHtcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZS5zY2hlbWFzLFxuICAgICAgICAgICAgICAgIFtuYW1lc3BhY2VdOiB0cmFuc2xhdGlvbk92ZXJyaWRlc1NjaGVtYVxuICAgICAgICAgICAgfVxuICAgICAgICB9KSk7XG59XG4vKipcbiAqIFRoaXMgZGVmaW5lcyBhIGNvbmZpZ3VyYXRpb24gc2NoZW1hIGZvciBhbiBleHRlbnNpb24uIFdoZW4gYSBzY2hlbWEgaXMgZGVmaW5lZFxuICogZm9yIGFuIGV4dGVuc2lvbiwgdGhhdCBleHRlbnNpb24gd2lsbCByZWNlaXZlIHRoZSBjb25maWd1cmF0aW9uIGNvcnJlc3BvbmRpbmdcbiAqIHRvIHRoYXQgc2NoZW1hLCByYXRoZXIgdGhhbiB0aGUgY29uZmlndXJhdGlvbiBjb3JyZXNwb25kaW5nIHRvIHRoZSBtb2R1bGVcbiAqIGluIHdoaWNoIGl0IGlzIGRlZmluZWQuXG4gKlxuICogVGhlIHNjaGVtYSB0ZWxscyB0aGUgY29uZmlndXJhdGlvbiBzeXN0ZW0gaG93IHRoZSBtb2R1bGUgY2FuIGJlIGNvbmZpZ3VyZWQuXG4gKiBJdCBzcGVjaWZpZXMgd2hhdCBtYWtlcyBjb25maWd1cmF0aW9uIHZhbGlkIG9yIGludmFsaWQuXG4gKlxuICogU2VlIFtDb25maWd1cmF0aW9uIFN5c3RlbV0oaHR0cHM6Ly9vMy1kb2NzLm9wZW5tcnMub3JnL2VuLVVTL2RvY3MvY29uZmlndXJhdGlvbi1zeXN0ZW0pXG4gKiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBkZWZpbmluZyBhIGNvbmZpZyBzY2hlbWEuXG4gKlxuICogQHBhcmFtIGV4dGVuc2lvbk5hbWUgTmFtZSBvZiB0aGUgZXh0ZW5zaW9uIHRoZSBzY2hlbWEgaXMgYmVpbmcgZGVmaW5lZCBmb3IuXG4gKiAgIFNob3VsZCBtYXRjaCB0aGUgYG5hbWVgIG9mIG9uZSBvZiB0aGUgYGV4dGVuc2lvbnNgIGVudHJpZXMgZGVmaW5lZCBpblxuICogICB0aGUgYXBwJ3MgYHJvdXRlcy5qc29uYCBmaWxlLlxuICogQHBhcmFtIHNjaGVtYSBUaGUgY29uZmlnIHNjaGVtYSBmb3IgdGhlIGV4dGVuc2lvblxuICovIGV4cG9ydCBmdW5jdGlvbiBkZWZpbmVFeHRlbnNpb25Db25maWdTY2hlbWEoZXh0ZW5zaW9uTmFtZSwgc2NoZW1hKSB7XG4gICAgdmFsaWRhdGVDb25maWdTY2hlbWEoZXh0ZW5zaW9uTmFtZSwgc2NoZW1hKTtcbiAgICBjb25zdCBlbmhhbmNlZFNjaGVtYSA9IG1lcmdlRGVlcFJlcGxhY2Uoc2NoZW1hLCBpbXBsaWNpdENvbmZpZ1NjaGVtYSk7XG4gICAgY29uc3Qgc3RhdGUgPSBjb25maWdJbnRlcm5hbFN0b3JlLmdldFN0YXRlKCk7XG4gICAgaWYgKHN0YXRlLnNjaGVtYXNbZXh0ZW5zaW9uTmFtZV0pIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgQ29uZmlnIHNjaGVtYSBmb3IgZXh0ZW5zaW9uICR7ZXh0ZW5zaW9uTmFtZX0gYWxyZWFkeSBleGlzdHMuIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBleHRlbnNpb25zIHdpdGggdGhpcyBzYW1lIG5hbWUsIG9uZSB3aWxsIHByb2JhYmx5IGNyYXNoLmApO1xuICAgIH1cbiAgICBjb25maWdJbnRlcm5hbFN0b3JlLnNldFN0YXRlKChzdGF0ZSk9Pih7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIHNjaGVtYXM6IHtcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZS5zY2hlbWFzLFxuICAgICAgICAgICAgICAgIFtleHRlbnNpb25OYW1lXTogZW5oYW5jZWRTY2hlbWFcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xufVxuLyoqXG4gKiBQcm92aWRlcyBjb25maWd1cmF0aW9uIHZhbHVlcyBwcm9ncmFtbWF0aWNhbGx5LiBUaGlzIGlzIGFuIGFsdGVybmF0aXZlIHRvXG4gKiBwcm92aWRpbmcgY29uZmlndXJhdGlvbiB0aHJvdWdoIHRoZSBjb25maWctZmlsZS4gQ29uZmlndXJhdGlvbiBwcm92aWRlZCB0aGlzXG4gKiB3YXkgd2lsbCBiZSBtZXJnZWQgd2l0aCBjb25maWd1cmF0aW9uIGZyb20gb3RoZXIgc291cmNlcy5cbiAqXG4gKiBAcGFyYW0gY29uZmlnIEEgY29uZmlndXJhdGlvbiBvYmplY3QgdG8gbWVyZ2UgaW50byB0aGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbi5cbiAqIEBwYXJhbSBzb3VyY2VOYW1lIEFuIG9wdGlvbmFsIG5hbWUgdG8gaWRlbnRpZnkgdGhlIHNvdXJjZSBvZiB0aGlzIGNvbmZpZ3VyYXRpb24sXG4gKiAgIHVzZWQgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4gRGVmYXVsdHMgdG8gJ3Byb3ZpZGVkJy5cbiAqLyBleHBvcnQgZnVuY3Rpb24gcHJvdmlkZShjb25maWcsIHNvdXJjZU5hbWUgPSAncHJvdmlkZWQnKSB7XG4gICAgY29uZmlnSW50ZXJuYWxTdG9yZS5zZXRTdGF0ZSgoc3RhdGUpPT4oe1xuICAgICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgICBwcm92aWRlZENvbmZpZ3M6IFtcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZS5wcm92aWRlZENvbmZpZ3MsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IHNvdXJjZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfSkpO1xufVxuLyoqXG4gKiBSZXNvbHZlcyB3aXRoIGBzZWxlY3Qoc3RhdGUpYCBhcyBzb29uIGFzIHRoZSBzdG9yZSdzIHN0YXRlIHNhdGlzZmllcyBgcmVhZHlgLCBsZWF2aW5nIG5vXG4gKiBzdWJzY3JpcHRpb24gYmVoaW5kOiBub3RoaW5nIHN1YnNjcmliZXMgYXQgYWxsIHdoZW4gdGhlIHN0b3JlIGlzIGFscmVhZHkgcmVhZHkuIFRoYXQgbWF0dGVyc1xuICogYmVjYXVzZSBgZ2V0Q29uZmlnYCBydW5zIG9uIGV2ZXJ5IEhUVFAgcmVxdWVzdCwgYW5kIGEgc3Vic2NyaXB0aW9uIHRoYXQgb3V0bGl2ZXMgaXRzIHByb21pc2VcbiAqIGJvdGggcmV0YWlucyBpdHMgY2xvc3VyZSBmb3JldmVyIGFuZCBzbG93cyBkb3duIGV2ZXJ5IGxhdGVyIHdyaXRlIHRvIHRoYXQgc3RvcmUuXG4gKi8gZnVuY3Rpb24gd2hlblN0b3JlUmVhZHkoc3RvcmUsIHJlYWR5LCBzZWxlY3QpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpPT57XG4gICAgICAgIGxldCB1bnN1YnNjcmliZTtcbiAgICAgICAgbGV0IHJlc29sdmVkID0gZmFsc2U7XG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZShzdGF0ZSkge1xuICAgICAgICAgICAgaWYgKCFyZXNvbHZlZCAmJiByZWFkeShzdGF0ZSkpIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShzZWxlY3Qoc3RhdGUpKTtcbiAgICAgICAgICAgICAgICB1bnN1YnNjcmliZT8uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlKHN0b3JlLmdldFN0YXRlKCkpO1xuICAgICAgICBpZiAoIXJlc29sdmVkKSB7XG4gICAgICAgICAgICB1bnN1YnNjcmliZSA9IHN0b3JlLnN1YnNjcmliZSh1cGRhdGUpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG4vKipcbiAqIEEgcHJvbWlzZS1iYXNlZCB3YXkgdG8gYWNjZXNzIHRoZSBjb25maWcgYXMgc29vbiBhcyBpdCBpcyBmdWxseSBsb2FkZWQuXG4gKiBJZiBpdCBpcyBhbHJlYWR5IGxvYWRlZCwgcmVzb2x2ZXMgdGhlIGNvbmZpZyBpbiBpdHMgcHJlc2VudCBzdGF0ZS5cbiAqXG4gKiBUaGlzIGlzIGEgdXNlZnVsIGZ1bmN0aW9uIGlmIHlvdSBuZWVkIHRvIGdldCB0aGUgY29uZmlnIGluIHRoZSBjb3Vyc2VcbiAqIG9mIHRoZSBleGVjdXRpb24gb2YgYSBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gbW9kdWxlTmFtZSBUaGUgbmFtZSBvZiB0aGUgbW9kdWxlIGZvciB3aGljaCB0byBsb29rIHVwIHRoZSBjb25maWdcbiAqLyBleHBvcnQgZnVuY3Rpb24gZ2V0Q29uZmlnKG1vZHVsZU5hbWUpIHtcbiAgICByZXR1cm4gd2hlblN0b3JlUmVhZHkoZ2V0Q29uZmlnU3RvcmUobW9kdWxlTmFtZSksIChzdGF0ZSk9PkJvb2xlYW4oc3RhdGUubG9hZGVkICYmIHN0YXRlLmNvbmZpZyksIChzdGF0ZSk9PmxvZGFzaE9taXQoc3RhdGUuY29uZmlnLCBbXG4gICAgICAgICAgICAnRGlzcGxheSBjb25kaXRpb25zJyxcbiAgICAgICAgICAgICdUcmFuc2xhdGlvbiBvdmVycmlkZXMnXG4gICAgICAgIF0pKTtcbn1cbi8qKlxuICogUmV0cmlldmVzIHRyYW5zbGF0aW9uIG92ZXJyaWRlcyBmb3IgYW4gZXh0ZW5zaW9uLCBvcHRpb25hbGx5IHNjb3BlZCB0byBhIHNwZWNpZmljXG4gKiBleHRlbnNpb24gc2xvdC4gV2hlbiBjYWxsZWQgd2l0aCBvbmx5IGEgbW9kdWxlIG5hbWUsIHJldHJpZXZlcyBtb2R1bGUtbGV2ZWwgb3ZlcnJpZGVzLlxuICogVHJhbnNsYXRpb24gb3ZlcnJpZGVzIGFsbG93IGN1c3RvbWl6aW5nIHRyYW5zbGF0ZWQgc3RyaW5ncyB3aXRob3V0IG1vZGlmeWluZyB0aGVcbiAqIG9yaWdpbmFsIHRyYW5zbGF0aW9uIGZpbGVzLlxuICpcbiAqIEBwYXJhbSBtb2R1bGVOYW1lIFRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgcHJvdmlkaW5nIHRoZSB0cmFuc2xhdGlvbiBjb250ZXh0LlxuICogQHBhcmFtIHNsb3ROYW1lIE9wdGlvbmFsIGV4dGVuc2lvbiBzbG90IG5hbWUgdG8gaW5jbHVkZSBzbG90LXNwZWNpZmljIG92ZXJyaWRlcy5cbiAqIEBwYXJhbSBleHRlbnNpb25JZCBPcHRpb25hbCBleHRlbnNpb24gSUQgdG8gaW5jbHVkZSBleHRlbnNpb24tc3BlY2lmaWMgb3ZlcnJpZGVzLlxuICogQHJldHVybnMgQSBQcm9taXNlIHJlc29sdmluZyB0byBhbiBhcnJheSBvZiB0cmFuc2xhdGlvbiBvdmVycmlkZSBvYmplY3RzLiBJdCBhbHdheXMgc2V0dGxlczogYVxuICogICBtb2R1bGUgdGhlIGNvbmZpZyBzeXN0ZW0gaGFzIG5vdCBiZWVuIHRvbGQgYWJvdXQsIG9yIGFuIGV4dGVuc2lvbiB0aGF0IGlzIG5vdCBtb3VudGVkLFxuICogICBjb250cmlidXRlcyBubyBvdmVycmlkZXMuXG4gKlxuICogQGludGVybmFsXG4gKi8gZXhwb3J0IGZ1bmN0aW9uIGdldFRyYW5zbGF0aW9uT3ZlcnJpZGVzKG1vZHVsZU5hbWUsIHNsb3ROYW1lLCBleHRlbnNpb25JZCkge1xuICAgIC8vIEEgbW9kdWxlJ3Mgc3RvcmUgb25seSBldmVyIGxvYWRzIGl0cyBvdmVycmlkZXMgb25jZSB0aGUgbW9kdWxlIGlzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgY29uZmlnXG4gICAgLy8gc3lzdGVtLCBzbyB3YWl0aW5nIG9uIG9uZSB0aGF0IGlzIG5vdCByZWdpc3RlcmVkIHdvdWxkIGxlYXZlIHRoZSBpMThuZXh0IG5hbWVzcGFjZSBwZW5kaW5nLlxuICAgIGNvbnN0IHByb21pc2VzID0gW1xuICAgICAgICBtb2R1bGVOYW1lIGluIGNvbmZpZ0ludGVybmFsU3RvcmUuZ2V0U3RhdGUoKS5zY2hlbWFzID8gd2hlblN0b3JlUmVhZHkoZ2V0Q29uZmlnU3RvcmUobW9kdWxlTmFtZSksIChzdGF0ZSk9PkJvb2xlYW4oc3RhdGUudHJhbnNsYXRpb25PdmVycmlkZXNMb2FkZWQgJiYgc3RhdGUuY29uZmlnKSwgKHN0YXRlKT0+c3RhdGUuY29uZmlnWydUcmFuc2xhdGlvbiBvdmVycmlkZXMnXSA/PyB7fSkgOiBQcm9taXNlLnJlc29sdmUoe30pXG4gICAgXTtcbiAgICBpZiAoc2xvdE5hbWUgJiYgZXh0ZW5zaW9uSWQpIHtcbiAgICAgICAgLy8gUmVhZCBvbmNlIHJhdGhlciB0aGFuIHdhaXRlZCBmb3I6IGFuIGV4dGVuc2lvbidzIGNvbmZpZyBlbnRyeSBleGlzdHMgb25seSB3aGlsZSB0aGF0IGV4dGVuc2lvblxuICAgICAgICAvLyBpcyByZWdpc3RlcmVkIGFzIG1vdW50ZWQsIHNvIGEgd2FpdCBzdGFydGVkIGluIHRoZSBnYXAgbmV2ZXIgc2V0dGxlcyBhbmQgbGVhdmVzIHRoZSBpMThuZXh0XG4gICAgICAgIC8vIG5hbWVzcGFjZSBwZW5kaW5nLlxuICAgICAgICBjb25zdCBleHRlbnNpb25Db25maWcgPSBnZXRFeHRlbnNpb25Db25maWdGcm9tU3RvcmUoZ2V0RXh0ZW5zaW9uc0NvbmZpZ1N0b3JlKCkuZ2V0U3RhdGUoKSwgc2xvdE5hbWUsIGV4dGVuc2lvbklkKTtcbiAgICAgICAgY29uc3Qgb3ZlcnJpZGVzID0gZXh0ZW5zaW9uQ29uZmlnLmxvYWRlZCAmJiBleHRlbnNpb25Db25maWcuY29uZmlnID8gZXh0ZW5zaW9uQ29uZmlnLmNvbmZpZ1snVHJhbnNsYXRpb24gb3ZlcnJpZGVzJ10gPz8ge30gOiB7fTtcbiAgICAgICAgcHJvbWlzZXMucHVzaChQcm9taXNlLnJlc29sdmUob3ZlcnJpZGVzKSk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG59XG4vKipcbiAqIFZhbGlkYXRlIGFuZCBpbnRlcnBvbGF0ZSBkZWZhdWx0cyBmb3IgYHByb3ZpZGVkQ29uZmlnYCBhY2NvcmRpbmcgdG8gYHNjaGVtYWBcbiAqXG4gKiBAcGFyYW0gc2NoZW1hICBhIGNvbmZpZ3VyYXRpb24gc2NoZW1hXG4gKiBAcGFyYW0gcHJvdmlkZWRDb25maWcgIGFuIG9iamVjdCBvZiBjb25maWcgdmFsdWVzICh3aXRob3V0IHRoZSB0b3AtbGV2ZWwgbW9kdWxlIG5hbWUpXG4gKiBAcGFyYW0ga2V5UGF0aENvbnRleHQgIGEgZG90LXNlcGFyYXRlZCBzdHJpbmcgd2hpY2ggaGVscHMgdGhlIHVzZXIgZmlndXJlIG91dCB3aGVyZVxuICogICAgIHRoZSBwcm92aWRlZCBjb25maWcgY2FtZSBmcm9tXG4gKiBAcmV0dXJucyBUaGUgdmFsaWRhdGVkIGFuZCBwcm9jZXNzZWQgY29uZmlndXJhdGlvbiBvYmplY3Qgd2l0aCBkZWZhdWx0cyBhcHBsaWVkLlxuICogQGludGVybmFsXG4gKi8gZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NDb25maWcoc2NoZW1hLCBwcm92aWRlZENvbmZpZywga2V5UGF0aENvbnRleHQpIHtcbiAgICB2YWxpZGF0ZVN0cnVjdHVyZShzY2hlbWEsIHByb3ZpZGVkQ29uZmlnLCBrZXlQYXRoQ29udGV4dCk7XG4gICAgY29uc3QgY29uZmlnID0gc2V0RGVmYXVsdHMoc2NoZW1hLCBwcm92aWRlZENvbmZpZyk7XG4gICAgcnVuQWxsVmFsaWRhdG9yc0luQ29uZmlnVHJlZShzY2hlbWEsIGNvbmZpZywga2V5UGF0aENvbnRleHQpO1xuICAgIHJldHVybiBjb25maWc7XG59XG5jb25zdCBleHRlbnNpb25Db25maWdDYWNoZSA9IG5ldyBNYXAoKTtcbi8qKlxuICogUmV0dXJucyB0aGUgY29uZmlndXJhdGlvbiBmb3IgYW4gZXh0ZW5zaW9uLiBUaGlzIGNvbmZpZ3VyYXRpb24gaXMgc3BlY2lmaWNcbiAqIHRvIHRoZSBzbG90IGluIHdoaWNoIGl0IGlzIG1vdW50ZWQsIGFuZCBpdHMgSUQgd2l0aGluIHRoYXQgc2xvdC5cbiAqXG4gKiBUaGUgc2NoZW1hIGZvciB0aGF0IGNvbmZpZ3VyYXRpb24gaXMgdGhlIGV4dGVuc2lvbiBzY2hlbWEuIElmIG5vIGV4dGVuc2lvblxuICogc2NoZW1hIGhhcyBiZWVuIHByb3ZpZGVkLCB0aGUgc2NoZW1hIHVzZWQgaXMgdGhlIHNjaGVtYSBvZiB0aGUgbW9kdWxlIGluXG4gKiB3aGljaCB0aGUgZXh0ZW5zaW9uIGlzIGRlZmluZWQuXG4gKlxuICogQHBhcmFtIHNsb3RNb2R1bGVOYW1lIFRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgd2hpY2ggZGVmaW5lcyB0aGUgZXh0ZW5zaW9uIHNsb3RcbiAqIEBwYXJhbSBleHRlbnNpb25Nb2R1bGVOYW1lIFRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgd2hpY2ggZGVmaW5lcyB0aGUgZXh0ZW5zaW9uIChhbmQgdGhlcmVmb3JlIHRoZSBjb25maWcgc2NoZW1hKVxuICogQHBhcmFtIHNsb3ROYW1lIFRoZSBuYW1lIG9mIHRoZSBleHRlbnNpb24gc2xvdCB3aGVyZSB0aGUgZXh0ZW5zaW9uIGlzIG1vdW50ZWRcbiAqIEBwYXJhbSBleHRlbnNpb25JZCBUaGUgSUQgb2YgdGhlIGV4dGVuc2lvbiBpbiBpdHMgc2xvdFxuICogQHBhcmFtIHNsb3RDb25maWcgVGhlIHNsb3QncyBjb25maWd1cmF0aW9uLCBnYXRoZXJlZCBmcm9tIGV2ZXJ5IG1vZHVsZSB0aGF0IGNvbmZpZ3VyZXMgaXRcbiAqLyBmdW5jdGlvbiBjb21wdXRlRXh0ZW5zaW9uQ29uZmlnKHNsb3RNb2R1bGVOYW1lLCBleHRlbnNpb25Nb2R1bGVOYW1lLCBzbG90TmFtZSwgZXh0ZW5zaW9uSWQsIGNvbmZpZ1N0YXRlLCB0ZW1wQ29uZmlnU3RhdGUsIHNsb3RDb25maWcpIHtcbiAgICBjb25zdCBleHRlbnNpb25OYW1lID0gZ2V0RXh0ZW5zaW9uTmFtZUZyb21JZChleHRlbnNpb25JZCk7XG4gICAgY29uc3QgZXh0ZW5zaW9uQ29uZmlnU2NoZW1hID0gY29uZmlnU3RhdGUuc2NoZW1hc1tleHRlbnNpb25OYW1lXTtcbiAgICAvLyBKU09OIHN0cmluZyBvZiB0aGVzZSBlbGVtZW50cyBzaG91bGQgYmUgdW5pcXVlLXBlci1leHRlbnNpb25cbiAgICBjb25zdCBjYWNoZUtleSA9IEpTT04uc3RyaW5naWZ5KFtcbiAgICAgICAgc2xvdE5hbWUsXG4gICAgICAgIGV4dGVuc2lvbklkLFxuICAgICAgICBzbG90TW9kdWxlTmFtZSxcbiAgICAgICAgZXh0ZW5zaW9uTW9kdWxlTmFtZVxuICAgIF0pO1xuICAgIGNvbnN0IGNhY2hlZCA9IGV4dGVuc2lvbkNvbmZpZ0NhY2hlLmdldChjYWNoZUtleSk7XG4gICAgaWYgKGNhY2hlZCAmJiBjYWNoZWQuZXh0ZW5zaW9uU2NoZW1hID09PSBleHRlbnNpb25Db25maWdTY2hlbWEgJiYgY2FjaGVkLmV4dGVuc2lvbk1vZHVsZVNjaGVtYSA9PT0gY29uZmlnU3RhdGUuc2NoZW1hc1tleHRlbnNpb25Nb2R1bGVOYW1lXSAmJiBjYWNoZWQucHJvdmlkZWRDb25maWdzID09PSBjb25maWdTdGF0ZS5wcm92aWRlZENvbmZpZ3MgJiYgY2FjaGVkLnRlbXBvcmFyeUNvbmZpZyA9PT0gdGVtcENvbmZpZ1N0YXRlLmNvbmZpZykge1xuICAgICAgICByZXR1cm4gY2FjaGVkLmNvbmZpZztcbiAgICB9XG4gICAgY29uc3QgbmFtZU9mU2NoZW1hU291cmNlID0gZXh0ZW5zaW9uQ29uZmlnU2NoZW1hID8gZXh0ZW5zaW9uTmFtZSA6IGV4dGVuc2lvbk1vZHVsZU5hbWU7XG4gICAgY29uc3QgcHJvdmlkZWRDb25maWdzID0gZ2V0UHJvdmlkZWRDb25maWdzKGNvbmZpZ1N0YXRlLCB0ZW1wQ29uZmlnU3RhdGUpO1xuICAgIGNvbnN0IHNoYXJlZE92ZXJyaWRlID0gc2xvdENvbmZpZz8uY29uZmlndXJlPy5bZXh0ZW5zaW9uSWRdID8/IHt9O1xuICAgIGNvbnN0IHNsb3RNb2R1bGVDb25maWcgPSBtZXJnZUNvbmZpZ3NGb3Ioc2xvdE1vZHVsZU5hbWUsIHByb3ZpZGVkQ29uZmlncyk7XG4gICAgY29uc3QgY29uZmlnT3ZlcnJpZGUgPSBzbG90TW9kdWxlQ29uZmlnPy5leHRlbnNpb25TbG90cz8uW3Nsb3ROYW1lXT8uY29uZmlndXJlPy5bZXh0ZW5zaW9uSWRdID8/IHt9O1xuICAgIGNvbnN0IGV4dGVuc2lvbkNvbmZpZyA9IG1lcmdlQ29uZmlnc0ZvcihuYW1lT2ZTY2hlbWFTb3VyY2UsIHByb3ZpZGVkQ29uZmlncyk7XG4gICAgY29uc3QgY29tYmluZWRDb25maWcgPSBtZXJnZUNvbmZpZ3MoW1xuICAgICAgICBleHRlbnNpb25Db25maWcsXG4gICAgICAgIHNoYXJlZE92ZXJyaWRlLFxuICAgICAgICBjb25maWdPdmVycmlkZVxuICAgIF0pO1xuICAgIGNvbnN0IHNjaGVtYSA9IGV4dGVuc2lvbkNvbmZpZ1NjaGVtYSA/PyBjb25maWdTdGF0ZS5zY2hlbWFzW2V4dGVuc2lvbk1vZHVsZU5hbWVdO1xuICAgIHZhbGlkYXRlU3RydWN0dXJlKHNjaGVtYSwgY29tYmluZWRDb25maWcsIG5hbWVPZlNjaGVtYVNvdXJjZSk7XG4gICAgY29uc3QgY29uZmlnID0gc2V0RGVmYXVsdHMoc2NoZW1hLCBjb21iaW5lZENvbmZpZyk7XG4gICAgcnVuQWxsVmFsaWRhdG9yc0luQ29uZmlnVHJlZShzY2hlbWEsIGNvbmZpZywgbmFtZU9mU2NoZW1hU291cmNlKTtcbiAgICBkZWxldGUgY29uZmlnLmV4dGVuc2lvblNsb3RzO1xuICAgIGV4dGVuc2lvbkNvbmZpZ0NhY2hlLnNldChjYWNoZUtleSwge1xuICAgICAgICBleHRlbnNpb25TY2hlbWE6IGV4dGVuc2lvbkNvbmZpZ1NjaGVtYSxcbiAgICAgICAgZXh0ZW5zaW9uTW9kdWxlU2NoZW1hOiBjb25maWdTdGF0ZS5zY2hlbWFzW2V4dGVuc2lvbk1vZHVsZU5hbWVdLFxuICAgICAgICBwcm92aWRlZENvbmZpZ3M6IGNvbmZpZ1N0YXRlLnByb3ZpZGVkQ29uZmlncyxcbiAgICAgICAgdGVtcG9yYXJ5Q29uZmlnOiB0ZW1wQ29uZmlnU3RhdGUuY29uZmlnLFxuICAgICAgICBjb25maWdcbiAgICB9KTtcbiAgICByZXR1cm4gY29uZmlnO1xufVxuY29uc3QgaW1wbGVtZW50ZXJUb29sc01vZHVsZUNhY2hlID0gbmV3IE1hcCgpO1xuZnVuY3Rpb24gZ2V0SW1wbGVtZW50ZXJUb29sc0NvbmZpZyhjb25maWdTdGF0ZSwgdGVtcENvbmZpZ1N0YXRlKSB7XG4gICAgY29uc3QgYW5ub3RhdGVkU2NoZW1hcyA9IGdldEFsbFNjaGVtYXNXaXRoVmFsdWVzQW5kU291cmNlcyhjb25maWdTdGF0ZS5zY2hlbWFzKTtcbiAgICBjb25zdCBjb25maWdzQW5kU291cmNlcyA9IFtcbiAgICAgICAgLi4uY29uZmlnU3RhdGUucHJvdmlkZWRDb25maWdzLm1hcCgoYyk9PltcbiAgICAgICAgICAgICAgICBjLmNvbmZpZyxcbiAgICAgICAgICAgICAgICBjLnNvdXJjZVxuICAgICAgICAgICAgXSksXG4gICAgICAgIFtcbiAgICAgICAgICAgIHRlbXBDb25maWdTdGF0ZS5jb25maWcsXG4gICAgICAgICAgICAndGVtcG9yYXJ5IGNvbmZpZydcbiAgICAgICAgXVxuICAgIF07XG4gICAgLy8gQSBtb2R1bGUgY2FuIGJlIGNvbmZpZ3VyZWQgd2l0aG91dCBoYXZpbmcgZGVjbGFyZWQgYSBzY2hlbWEsIHNvIHRoZSBtb2R1bGUgbGlzdCBpcyB0aGUgdW5pb25cbiAgICAvLyBvZiBib3RoIHJhdGhlciB0aGFuIGp1c3QgdGhlIHNjaGVtYXMuXG4gICAgY29uc3QgbW9kdWxlTmFtZXMgPSBuZXcgU2V0KE9iamVjdC5rZXlzKGFubm90YXRlZFNjaGVtYXMpKTtcbiAgICBmb3IgKGNvbnN0IFtjb25maWddIG9mIGNvbmZpZ3NBbmRTb3VyY2VzKXtcbiAgICAgICAgZm9yIChjb25zdCBtb2R1bGVOYW1lIG9mIE9iamVjdC5rZXlzKGNvbmZpZykpe1xuICAgICAgICAgICAgbW9kdWxlTmFtZXMuYWRkKG1vZHVsZU5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGZvciAoY29uc3QgbW9kdWxlTmFtZSBvZiBtb2R1bGVOYW1lcyl7XG4gICAgICAgIGNvbnN0IGFubm90YXRlZFNjaGVtYSA9IGFubm90YXRlZFNjaGVtYXNbbW9kdWxlTmFtZV07XG4gICAgICAgIGNvbnN0IGNvbmZpZ1NsaWNlcyA9IGNvbmZpZ3NBbmRTb3VyY2VzLm1hcCgoW2NvbmZpZ10pPT5jb25maWdbbW9kdWxlTmFtZV0pO1xuICAgICAgICBjb25zdCBzb3VyY2VzID0gY29uZmlnc0FuZFNvdXJjZXMubWFwKChbLCBzb3VyY2VdKT0+c291cmNlKTtcbiAgICAgICAgY29uc3QgY2FjaGVkID0gaW1wbGVtZW50ZXJUb29sc01vZHVsZUNhY2hlLmdldChtb2R1bGVOYW1lKTtcbiAgICAgICAgaWYgKGNhY2hlZCAmJiBjYWNoZWQuYW5ub3RhdGVkU2NoZW1hID09PSBhbm5vdGF0ZWRTY2hlbWEgJiYgY2FjaGVkLmNvbmZpZ1NsaWNlcy5sZW5ndGggPT09IGNvbmZpZ1NsaWNlcy5sZW5ndGggJiYgY2FjaGVkLmNvbmZpZ1NsaWNlcy5ldmVyeSgoc2xpY2UsIGkpPT5zbGljZSA9PT0gY29uZmlnU2xpY2VzW2ldKSAmJiBjYWNoZWQuc291cmNlcy5ldmVyeSgoc291cmNlLCBpKT0+c291cmNlID09PSBzb3VyY2VzW2ldKSkge1xuICAgICAgICAgICAgcmVzdWx0W21vZHVsZU5hbWVdID0gY2FjaGVkLnJlc3VsdDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGxldCBtZXJnZWQgPSBhbm5vdGF0ZWRTY2hlbWEgPz8ge307XG4gICAgICAgIGNvbmZpZ3NBbmRTb3VyY2VzLmZvckVhY2goKFssIHNvdXJjZV0sIGkpPT57XG4gICAgICAgICAgICBjb25zdCBzbGljZSA9IGNvbmZpZ1NsaWNlc1tpXTtcbiAgICAgICAgICAgIGlmIChzbGljZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgbWVyZ2VkID0gbWVyZ2VEZWVwUmVwbGFjZShtZXJnZWQsIGNyZWF0ZVZhbHVlc0FuZFNvdXJjZXNUcmVlKHNsaWNlLCBzb3VyY2UpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGltcGxlbWVudGVyVG9vbHNNb2R1bGVDYWNoZS5zZXQobW9kdWxlTmFtZSwge1xuICAgICAgICAgICAgYW5ub3RhdGVkU2NoZW1hLFxuICAgICAgICAgICAgY29uZmlnU2xpY2VzLFxuICAgICAgICAgICAgc291cmNlcyxcbiAgICAgICAgICAgIHJlc3VsdDogbWVyZ2VkXG4gICAgICAgIH0pO1xuICAgICAgICByZXN1bHRbbW9kdWxlTmFtZV0gPSBtZXJnZWQ7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIENhY2hpbmcgcGVyIG1vZHVsZSBpcyB3aGF0IHN0b3BzIHRoZSB3YWxrIGJlaW5nIHF1YWRyYXRpYzogZGVmaW5pbmcgb25lIG1vZHVsZSdzIHNjaGVtYVxuICogcmVjb21wdXRlcyBldmVyeSBtb2R1bGUuXG4gKlxuICogQSBtb2R1bGUgd2l0aCBubyBjb25maWd1cmF0aW9uIG9mIGl0cyBvd24gaXMgcHVibGlzaGVkIHN0cmFpZ2h0IGZyb20gdGhpcyBjYWNoZSwgc28gbm90aGluZyBtYXlcbiAqIG11dGF0ZSBhIHRyZWUgaXQgcmVhZHMgb3V0IG9mIHRoZSBpbXBsZW1lbnRlciB0b29scyBjb25maWcg4oCUIGl0IGlzIHRoZSBjYWNoZSBlbnRyeS5cbiAqLyBjb25zdCBzY2hlbWFWYWx1ZXNBbmRTb3VyY2VzQ2FjaGUgPSBuZXcgTWFwKCk7XG5mdW5jdGlvbiBnZXRBbGxTY2hlbWFzV2l0aFZhbHVlc0FuZFNvdXJjZXMoc2NoZW1hcykge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGZvciAoY29uc3QgW21vZHVsZU5hbWUsIHNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXMoc2NoZW1hcykpe1xuICAgICAgICBjb25zdCBjYWNoZWQgPSBzY2hlbWFWYWx1ZXNBbmRTb3VyY2VzQ2FjaGUuZ2V0KG1vZHVsZU5hbWUpO1xuICAgICAgICBpZiAoY2FjaGVkICYmIGNhY2hlZC5zY2hlbWEgPT09IHNjaGVtYSkge1xuICAgICAgICAgICAgcmVzdWx0W21vZHVsZU5hbWVdID0gY2FjaGVkLmFubm90YXRlZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGFubm90YXRlZCA9IGdldFNjaGVtYVdpdGhWYWx1ZXNBbmRTb3VyY2VzKGNsb25lRGVlcChzY2hlbWEpKTtcbiAgICAgICAgICAgIHNjaGVtYVZhbHVlc0FuZFNvdXJjZXNDYWNoZS5zZXQobW9kdWxlTmFtZSwge1xuICAgICAgICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICAgICAgICBhbm5vdGF0ZWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmVzdWx0W21vZHVsZU5hbWVdID0gYW5ub3RhdGVkO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBnZXRTY2hlbWFXaXRoVmFsdWVzQW5kU291cmNlcyhzY2hlbWEpIHtcbiAgICBpZiAoc2NoZW1hLmhhc093blByb3BlcnR5KCdfZGVmYXVsdCcpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5zY2hlbWEsXG4gICAgICAgICAgICBfdmFsdWU6IHNjaGVtYS5fZGVmYXVsdCxcbiAgICAgICAgICAgIF9zb3VyY2U6ICdkZWZhdWx0J1xuICAgICAgICB9O1xuICAgIH0gZWxzZSBpZiAoaXNPcmRpbmFyeU9iamVjdChzY2hlbWEpKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhzY2hlbWEpLnJlZHVjZSgob2JqLCBrZXkpPT57XG4gICAgICAgICAgICBvYmpba2V5XSA9IGdldFNjaGVtYVdpdGhWYWx1ZXNBbmRTb3VyY2VzKHNjaGVtYVtrZXldKTtcbiAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgIH0sIHt9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBhdCB0aGlzIHBvaW50LCB0aGUgc2NoZW1hIGlzIGJhZCBhbmQgYW4gZXJyb3Igd2lsbCBoYXZlIGJlZW4gbG9nZ2VkIGR1cmluZyBzY2hlbWEgdmFsaWRhdGlvblxuICAgICAgICByZXR1cm4ge307XG4gICAgfVxufVxuZnVuY3Rpb24gY3JlYXRlVmFsdWVzQW5kU291cmNlc1RyZWUoY29uZmlnLCBzb3VyY2UpIHtcbiAgICBpZiAoaXNPcmRpbmFyeU9iamVjdChjb25maWcpKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhjb25maWcpLnJlZHVjZSgob2JqLCBrZXkpPT57XG4gICAgICAgICAgICBvYmpba2V5XSA9IGNyZWF0ZVZhbHVlc0FuZFNvdXJjZXNUcmVlKGNvbmZpZ1trZXldLCBzb3VyY2UpO1xuICAgICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgfSwge30pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBfdmFsdWU6IGNvbmZpZyxcbiAgICAgICAgICAgIF9zb3VyY2U6IHNvdXJjZVxuICAgICAgICB9O1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldEV4dGVuc2lvblNsb3RDb25maWdzKGNvbmZpZ1N0YXRlLCB0ZW1wQ29uZmlnU3RhdGUpIHtcbiAgICBjb25zdCBhbGxDb25maWdzID0gbWVyZ2VDb25maWdzKGdldFByb3ZpZGVkQ29uZmlncyhjb25maWdTdGF0ZSwgdGVtcENvbmZpZ1N0YXRlKSk7XG4gICAgY29uc3Qgc2xvdENvbmZpZ1Blck1vZHVsZSA9IE9iamVjdC5rZXlzKGFsbENvbmZpZ3MpLnJlZHVjZSgob2JqLCBrZXkpPT57XG4gICAgICAgIGlmIChhbGxDb25maWdzW2tleV0/LmV4dGVuc2lvblNsb3RzKSB7XG4gICAgICAgICAgICBvYmpba2V5XSA9IGFsbENvbmZpZ3Nba2V5XT8uZXh0ZW5zaW9uU2xvdHM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9LCB7fSk7XG4gICAgdmFsaWRhdGVBbGxFeHRlbnNpb25TbG90Q29uZmlncyhzbG90Q29uZmlnUGVyTW9kdWxlKTtcbiAgICBjb25zdCBzbG90Q29uZmlncyA9IHt9O1xuICAgIGNvbnN0IGNvbmZpZ3VyZUJsb2NrcyA9IHt9O1xuICAgIGZvciAoY29uc3QgY29uZmlnQnlTbG90TmFtZSBvZiBPYmplY3QudmFsdWVzKHNsb3RDb25maWdQZXJNb2R1bGUpKXtcbiAgICAgICAgZm9yIChjb25zdCBbc2xvdE5hbWUsIGNvbmZpZ10gb2YgT2JqZWN0LmVudHJpZXMoY29uZmlnQnlTbG90TmFtZSkpe1xuICAgICAgICAgICAgc2xvdENvbmZpZ3Nbc2xvdE5hbWVdID0gY29uZmlnO1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5jb25maWd1cmUpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2NvbmZpZ3VyZUJsb2NrcywgX3Nsb3ROYW1lO1xuICAgICAgICAgICAgICAgICgoX2NvbmZpZ3VyZUJsb2NrcyA9IGNvbmZpZ3VyZUJsb2NrcylbX3Nsb3ROYW1lID0gc2xvdE5hbWVdID8/IChfY29uZmlndXJlQmxvY2tzW19zbG90TmFtZV0gPSBbXSkpLnB1c2goY29uZmlnLmNvbmZpZ3VyZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBbc2xvdE5hbWUsIGJsb2Nrc10gb2YgT2JqZWN0LmVudHJpZXMoY29uZmlndXJlQmxvY2tzKSl7XG4gICAgICAgIGNvbnN0IGNvbmZpZ3VyZSA9IGJsb2Nrcy5sZW5ndGggPT09IDEgPyBibG9ja3NbMF0gOiBtZXJnZUNvbmZpZ3MoYmxvY2tzKTtcbiAgICAgICAgaWYgKHNsb3RDb25maWdzW3Nsb3ROYW1lXS5jb25maWd1cmUgIT09IGNvbmZpZ3VyZSkge1xuICAgICAgICAgICAgc2xvdENvbmZpZ3Nbc2xvdE5hbWVdID0ge1xuICAgICAgICAgICAgICAgIC4uLnNsb3RDb25maWdzW3Nsb3ROYW1lXSxcbiAgICAgICAgICAgICAgICBjb25maWd1cmVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHNsb3RDb25maWdzO1xufVxuZnVuY3Rpb24gdmFsaWRhdGVBbGxFeHRlbnNpb25TbG90Q29uZmlncyhzbG90Q29uZmlnUGVyTW9kdWxlKSB7XG4gICAgZm9yIChsZXQgW21vZHVsZU5hbWUsIGNvbmZpZ0J5U2xvdE5hbWVdIG9mIE9iamVjdC5lbnRyaWVzKHNsb3RDb25maWdQZXJNb2R1bGUpKXtcbiAgICAgICAgZm9yIChsZXQgW3Nsb3ROYW1lLCBjb25maWddIG9mIE9iamVjdC5lbnRyaWVzKGNvbmZpZ0J5U2xvdE5hbWUpKXtcbiAgICAgICAgICAgIHZhbGlkYXRlRXh0ZW5zaW9uU2xvdENvbmZpZyhjb25maWcsIG1vZHVsZU5hbWUsIHNsb3ROYW1lKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHZhbGlkYXRlRXh0ZW5zaW9uU2xvdENvbmZpZyhjb25maWcsIG1vZHVsZU5hbWUsIHNsb3ROYW1lKSB7XG4gICAgY29uc3Qga2V5UGF0aCA9IGAke21vZHVsZU5hbWV9LmV4dGVuc2lvblNsb3RzLiR7c2xvdE5hbWV9YDtcbiAgICBjb25zdCBlcnJvclByZWZpeCA9IGBFeHRlbnNpb24gc2xvdCBjb25maWcgJyR7a2V5UGF0aH0nYDtcbiAgICBjb25zdCBpbnZhbGlkS2V5cyA9IE9iamVjdC5rZXlzKGNvbmZpZykuZmlsdGVyKChrKT0+IVtcbiAgICAgICAgICAgICdhZGQnLFxuICAgICAgICAgICAgJ3JlbW92ZScsXG4gICAgICAgICAgICAnb3JkZXInLFxuICAgICAgICAgICAgJ2NvbmZpZ3VyZSdcbiAgICAgICAgXS5pbmNsdWRlcyhrKSk7XG4gICAgaWYgKGludmFsaWRLZXlzLmxlbmd0aCkge1xuICAgICAgICBsb2dFcnJvcihrZXlQYXRoLCBlcnJvclByZWZpeCArIGAnIGNvbnRhaW5zIGludmFsaWQga2V5cyAnJHtpbnZhbGlkS2V5cy5qb2luKFwiJywgJ1wiKX0nYCk7XG4gICAgfVxuICAgIGlmIChjb25maWcuYWRkKSB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjb25maWcuYWRkKSB8fCAhY29uZmlnLmFkZC5ldmVyeSgobik9PnR5cGVvZiBuID09PSAnc3RyaW5nJykpIHtcbiAgICAgICAgICAgIGxvZ0Vycm9yKGtleVBhdGgsIGVycm9yUHJlZml4ICsgYC5hZGQnIGlzIGludmFsaWQuIE11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncyAoZXh0ZW5zaW9uIElEcylgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoY29uZmlnLnJlbW92ZSkge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29uZmlnLnJlbW92ZSkgfHwgIWNvbmZpZy5yZW1vdmUuZXZlcnkoKG4pPT50eXBlb2YgbiA9PT0gJ3N0cmluZycpKSB7XG4gICAgICAgICAgICBsb2dFcnJvcihrZXlQYXRoLCBlcnJvclByZWZpeCArIGAucmVtb3ZlJyBpcyBpbnZhbGlkLiBNdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3MgKGV4dGVuc2lvbiBJRHMpYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNvbmZpZy5vcmRlcikge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29uZmlnLm9yZGVyKSB8fCAhY29uZmlnLm9yZGVyLmV2ZXJ5KChuKT0+dHlwZW9mIG4gPT09ICdzdHJpbmcnKSkge1xuICAgICAgICAgICAgbG9nRXJyb3Ioa2V5UGF0aCwgZXJyb3JQcmVmaXggKyBgLm9yZGVyJyBpcyBpbnZhbGlkLiBNdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3MgKGV4dGVuc2lvbiBJRHMpYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNvbmZpZy5jb25maWd1cmUpIHtcbiAgICAgICAgaWYgKCFpc09yZGluYXJ5T2JqZWN0KGNvbmZpZy5jb25maWd1cmUpKSB7XG4gICAgICAgICAgICBsb2dFcnJvcihrZXlQYXRoLCBlcnJvclByZWZpeCArIGAuY29uZmlndXJlJyBpcyBpbnZhbGlkLiBNdXN0IGJlIGFuIG9iamVjdCB3aXRoIGV4dGVuc2lvbiBJRHMgZm9yIGtleXNgKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGdldFByb3ZpZGVkQ29uZmlncyhjb25maWdTdGF0ZSwgdGVtcENvbmZpZ1N0YXRlKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgLi4uY29uZmlnU3RhdGUucHJvdmlkZWRDb25maWdzLm1hcCgoYyk9PmMuY29uZmlnKSxcbiAgICAgICAgdGVtcENvbmZpZ1N0YXRlLmNvbmZpZ1xuICAgIF07XG59XG4vKipcbiAqIFZhbGlkYXRlcyB0aGUgY29uZmlnIHNjaGVtYSBmb3IgYSBtb2R1bGUuIFNpbmNlIHByb2JsZW1zIGlkZW50aWZpZWQgaGVyZSBhcmUgcHJvZ3JhbW1pbmcgZXJyb3JzXG4gKiB0aGF0IGhvcGVmdWxseSB3aWxsIGJlIGNhdWdodCBkdXJpbmcgZGV2ZWxvcG1lbnQsIHRoaXMgZnVuY3Rpb24gbG9ncyBlcnJvcnMgdG8gdGhlIGNvbnNvbGUgZGlyZWN0bHk7XG4gKiBpdCdzIGZpbmUgaWYgd2Ugc3BhbSB0aGUgdXNlciB3aXRoIHRoZXNlIGVycm9ycy5cbiAqLyBmdW5jdGlvbiB2YWxpZGF0ZUNvbmZpZ1NjaGVtYShtb2R1bGVOYW1lLCBzY2hlbWEsIGtleVBhdGggPSAnJykge1xuICAgIGNvbnN0IHVwZGF0ZU1lc3NhZ2UgPSBgUGxlYXNlIHZlcmlmeSB0aGF0IHlvdSBhcmUgcnVubmluZyB0aGUgbGF0ZXN0IHZlcnNpb24gYW5kLCBpZiBzbywgYWxlcnQgdGhlIG1haW50YWluZXIuYDtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhzY2hlbWEpLmZpbHRlcigoayk9PiFrLnN0YXJ0c1dpdGgoJ18nKSkpe1xuICAgICAgICBjb25zdCB0aGlzS2V5UGF0aCA9IGtleVBhdGggKyAoa2V5UGF0aCAmJiAnLicpICsga2V5O1xuICAgICAgICBjb25zdCBzY2hlbWFQYXJ0ID0gc2NoZW1hW2tleV07XG4gICAgICAgIGlmICh0aGlzS2V5UGF0aCA9PT0gJ0Rpc3BsYXkgY29uZGl0aW9ucycpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYCR7bW9kdWxlTmFtZX0gZGVjbGFyZXMgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBjYWxsZWQgXCJEaXNwbGF5IGNvbmRpdGlvbnNcIjsgdGhlIFwiRGlzcGxheSBjb25kaXRpb25zXCIgb3B0aW9uIGlzIGEgcmVzZXJ2ZWQgbmFtZS4gJHt1cGRhdGVNZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzS2V5UGF0aCA9PT0gJ1RyYW5zbGF0aW9uIG92ZXJyaWRlcycpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYCR7bW9kdWxlTmFtZX0gZGVjbGFyZXMgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBjYWxsZWQgXCJUcmFuc2xhdGlvbiBvdmVycmlkZXNcIjsgdGhlIFwiVHJhbnNsYXRpb24gb3ZlcnJpZGVzXCIgb3B0aW9uIGlzIGEgcmVzZXJ2ZWQgbmFtZS4gJHt1cGRhdGVNZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNPcmRpbmFyeU9iamVjdChzY2hlbWFQYXJ0KSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgJHttb2R1bGVOYW1lfSBoYXMgYmFkIGNvbmZpZyBzY2hlbWEgZGVmaW5pdGlvbiBmb3Iga2V5ICcke3RoaXNLZXlQYXRofScuICR7dXBkYXRlTWVzc2FnZX1gKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc2NoZW1hUGFydC5oYXNPd25Qcm9wZXJ0eSgnX2RlZmF1bHQnKSkge1xuICAgICAgICAgICAgLy8gcmVjdXJzZSBmb3IgbmVzdGVkIGNvbmZpZyBrZXlzXG4gICAgICAgICAgICB2YWxpZGF0ZUNvbmZpZ1NjaGVtYShtb2R1bGVOYW1lLCBzY2hlbWFQYXJ0LCB0aGlzS2V5UGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSBzY2hlbWFQYXJ0Ll9lbGVtZW50cztcbiAgICAgICAgaWYgKGhhc09iamVjdFNjaGVtYShlbGVtZW50cykpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlQ29uZmlnU2NoZW1hKG1vZHVsZU5hbWUsIGVsZW1lbnRzLCB0aGlzS2V5UGF0aCArICcuX2VsZW1lbnRzJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNjaGVtYVBhcnQuX3ZhbGlkYXRvcnMpIHtcbiAgICAgICAgICAgIGZvciAobGV0IHZhbGlkYXRvciBvZiBzY2hlbWFQYXJ0Ll92YWxpZGF0b3JzKXtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbGlkYXRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGAke21vZHVsZU5hbWV9IGhhcyBpbnZhbGlkIHZhbGlkYXRvciBmb3Iga2V5ICcke3RoaXNLZXlQYXRofScgJHt1cGRhdGVNZXNzYWdlfS5gICsgYFxcblxcbklmIHlvdSdyZSB0aGUgbWFpbnRhaW5lcjogdmFsaWRhdG9ycyBtdXN0IGJlIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBlaXRoZXIgYCArIGB1bmRlZmluZWQgb3IgYW4gZXJyb3Igc3RyaW5nLiBSZWNlaXZlZCAke3ZhbGlkYXRvcn0uYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlVHlwZSA9IHNjaGVtYVBhcnQuX3R5cGU7XG4gICAgICAgIGlmICh2YWx1ZVR5cGUgJiYgIU9iamVjdC52YWx1ZXMoVHlwZSkuaW5jbHVkZXModmFsdWVUeXBlKSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgJHttb2R1bGVOYW1lfSBoYXMgaW52YWxpZCB0eXBlIGZvciBrZXkgJyR7dGhpc0tleVBhdGh9JyAke3VwZGF0ZU1lc3NhZ2V9LmAgKyBgXFxuXFxuSWYgeW91J3JlIHRoZSBtYWludGFpbmVyOiB0aGUgYWxsb3dlZCB0eXBlcyBhcmUgJHtPYmplY3QudmFsdWVzKFR5cGUpLmpvaW4oJywgJyl9LiBgICsgYFJlY2VpdmVkICcke3ZhbHVlVHlwZX0nYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHNjaGVtYVBhcnQpLmV2ZXJ5KChrKT0+W1xuICAgICAgICAgICAgICAgICdfZGVzY3JpcHRpb24nLFxuICAgICAgICAgICAgICAgICdfdmFsaWRhdG9ycycsXG4gICAgICAgICAgICAgICAgJ19lbGVtZW50cycsXG4gICAgICAgICAgICAgICAgJ190eXBlJ1xuICAgICAgICAgICAgXS5pbmNsdWRlcyhrKSkgJiYgIWtleVBhdGguaW5jbHVkZXMoJy5fZWxlbWVudHMnKSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgJHttb2R1bGVOYW1lfSBoYXMgYmFkIGNvbmZpZyBzY2hlbWEgZGVmaW5pdGlvbiBmb3Iga2V5ICcke3RoaXNLZXlQYXRofScuICR7dXBkYXRlTWVzc2FnZX0uYCArIGBcXG5cXG5JZiB5b3UncmUgdGhlIG1haW50YWluZXI6IGFsbCBjb25maWcgZWxlbWVudHMgbXVzdCBoYXZlIGEgZGVmYXVsdC4gYCArIGBSZWNlaXZlZCAke0pTT04uc3RyaW5naWZ5KHNjaGVtYVBhcnQpfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50cyAmJiB2YWx1ZVR5cGUgJiYgIVtcbiAgICAgICAgICAgIFR5cGUuQXJyYXksXG4gICAgICAgICAgICBUeXBlLk9iamVjdFxuICAgICAgICBdLmluY2x1ZGVzKHZhbHVlVHlwZSkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYCR7bW9kdWxlTmFtZX0gaGFzIGJhZCBjb25maWcgc2NoZW1hIGRlZmluaXRpb24gZm9yIGtleSAnJHt0aGlzS2V5UGF0aH0nLiAke3VwZGF0ZU1lc3NhZ2V9LmAgKyBgXFxuXFxuSWYgeW91J3JlIHRoZSBtYWludGFpbmVyOiB0aGUgJ2VsZW1lbnRzJyBrZXkgb25seSB3b3JrcyB3aXRoICdfdHlwZScgZXF1YWwgdG8gJ0FycmF5JyBvciAnT2JqZWN0Jy4gYCArIGBSZWNlaXZlZCAke0pTT04uc3RyaW5naWZ5KHZhbHVlVHlwZSl9YCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBnZXRDb25maWdGb3JNb2R1bGUobW9kdWxlTmFtZSwgY29uZmlnU3RhdGUsIHRlbXBDb25maWdTdGF0ZSkge1xuICAgIGNvbnN0IHNjaGVtYSA9IGNvbmZpZ1N0YXRlLnNjaGVtYXNbbW9kdWxlTmFtZV07XG4gICAgY29uc3QgaW5wdXRDb25maWcgPSBtZXJnZUNvbmZpZ3NGb3IobW9kdWxlTmFtZSwgZ2V0UHJvdmlkZWRDb25maWdzKGNvbmZpZ1N0YXRlLCB0ZW1wQ29uZmlnU3RhdGUpKTtcbiAgICB2YWxpZGF0ZVN0cnVjdHVyZShzY2hlbWEsIGlucHV0Q29uZmlnLCBtb2R1bGVOYW1lKTtcbiAgICBjb25zdCBjb25maWcgPSBzZXREZWZhdWx0cyhzY2hlbWEsIGlucHV0Q29uZmlnKTtcbiAgICBydW5BbGxWYWxpZGF0b3JzSW5Db25maWdUcmVlKHNjaGVtYSwgY29uZmlnLCBtb2R1bGVOYW1lKTtcbiAgICBkZWxldGUgY29uZmlnLmV4dGVuc2lvblNsb3RzO1xuICAgIHJldHVybiBjb25maWc7XG59XG5mdW5jdGlvbiBnZXRDb25maWdGb3JNb2R1bGVJbXBsaWNpdFNjaGVtYShtb2R1bGVOYW1lLCBjb25maWdTdGF0ZSwgdGVtcENvbmZpZ1N0YXRlKSB7XG4gICAgY29uc3QgaW5wdXRDb25maWcgPSBtZXJnZUNvbmZpZ3NGb3IobW9kdWxlTmFtZSwgZ2V0UHJvdmlkZWRDb25maWdzKGNvbmZpZ1N0YXRlLCB0ZW1wQ29uZmlnU3RhdGUpKTtcbiAgICBjb25zdCBjb25maWcgPSBzZXREZWZhdWx0cyhpbXBsaWNpdENvbmZpZ1NjaGVtYSwgaW5wdXRDb25maWcpO1xuICAgIHJ1bkFsbFZhbGlkYXRvcnNJbkNvbmZpZ1RyZWUoaW1wbGljaXRDb25maWdTY2hlbWEsIGNvbmZpZywgbW9kdWxlTmFtZSk7XG4gICAgZGVsZXRlIGNvbmZpZy5leHRlbnNpb25TbG90cztcbiAgICByZXR1cm4gY29uZmlnO1xufVxuZnVuY3Rpb24gbWVyZ2VDb25maWdzRm9yKG1vZHVsZU5hbWUsIGFsbENvbmZpZ3MpIHtcbiAgICBjb25zdCBhbGxDb25maWdzRm9yTW9kdWxlID0gYWxsQ29uZmlncy5tYXAoKHsgW21vZHVsZU5hbWVdOiBjIH0pPT5jKS5maWx0ZXIoKGMpPT4hIWMpO1xuICAgIHJldHVybiBtZXJnZUNvbmZpZ3MoYWxsQ29uZmlnc0Zvck1vZHVsZSk7XG59XG4vKipcbiAqIE1lcmdlcyBhIHdob2xlIGxpc3QgYXQgb25jZSwgYWNjdW11bGF0aW5nIGludG8gb25lIGRlc3RpbmF0aW9uLlxuICovIGZ1bmN0aW9uIG1lcmdlQ29uZmlncyhjb25maWdzKSB7XG4gICAgcmV0dXJuIGNvbmZpZ3MucmVkdWNlKChhY2MsIGNvbmZpZyk9Pm1lcmdlV2l0aChhY2MsIGNvbmZpZywgcmVwbGFjZUFycmF5cyksIHt9KTtcbn1cbi8qKlxuICogUmVjdXJzaXZlbHkgY2hlY2sgdGhlIHByb3ZpZGVkIGNvbmZpZyB0cmVlIHRvIG1ha2Ugc3VyZSB0aGF0IGFsbFxuICogb2YgdGhlIHByb3ZpZGVkIHByb3BlcnRpZXMgZXhpc3QgaW4gdGhlIHNjaGVtYSwgYW5kIHRoYXQgdHlwZXMgYXJlXG4gKiBjb3JyZWN0LiBEb2VzIG5vdCBydW4gdmFsaWRhdG9ycyB5ZXQsIHNpbmNlIHRob3NlIHdpbGwgYmUgcnVuIG9uXG4gKiB0aGUgY29uZmlnIHdpdGggdGhlIGRlZmF1bHRzIGZpbGxlZCBpbi5cbiAqLyBmdW5jdGlvbiB2YWxpZGF0ZVN0cnVjdHVyZShzY2hlbWEsIGNvbmZpZywga2V5UGF0aCA9ICcnKSB7XG4gICAgLy8gdmFsaWRhdGUgZWFjaCBjb25zdGl0dWVudCBlbGVtZW50XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoY29uZmlnKSl7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY29uZmlnW2tleV07XG4gICAgICAgIGNvbnN0IHRoaXNLZXlQYXRoID0ga2V5UGF0aCArICcuJyArIGtleTtcbiAgICAgICAgY29uc3Qgc2NoZW1hUGFydCA9IHNjaGVtYVtrZXldO1xuICAgICAgICBpZiAoIXNjaGVtYS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICBpZiAoIShrZXkgPT09ICdleHRlbnNpb25TbG90cycgJiYga2V5UGF0aCAhPT0gJycpKSB7XG4gICAgICAgICAgICAgICAgbG9nRXJyb3IodGhpc0tleVBhdGgsIGBVbmtub3duIGNvbmZpZyBrZXkgJyR7dGhpc0tleVBhdGh9JyBwcm92aWRlZC4gSWdub3JpbmcuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB2YWxpZGF0ZUJyYW5jaFN0cnVjdHVyZShzY2hlbWFQYXJ0LCB2YWx1ZSwgdGhpc0tleVBhdGgpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHZhbGlkYXRlQnJhbmNoU3RydWN0dXJlKHNjaGVtYVBhcnQsIHZhbHVlLCBrZXlQYXRoKSB7XG4gICAgY2hlY2tUeXBlKGtleVBhdGgsIHNjaGVtYVBhcnQuX3R5cGUsIHZhbHVlKTtcbiAgICBpZiAoaXNPcmRpbmFyeU9iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgaWYgKHNjaGVtYVBhcnQuX3R5cGUgPT09IFR5cGUuT2JqZWN0KSB7XG4gICAgICAgICAgICAvLyB2YWxpZGF0ZSBhcyBmcmVlZm9ybSBvYmplY3RcbiAgICAgICAgICAgIHZhbGlkYXRlRnJlZWZvcm1PYmplY3RTdHJ1Y3R1cmUoc2NoZW1hUGFydCwgdmFsdWUsIGtleVBhdGgpO1xuICAgICAgICB9IGVsc2UgaWYgKCEoc2NoZW1hUGFydC5oYXNPd25Qcm9wZXJ0eSgnX2RlZmF1bHQnKSB8fCBzY2hlbWFQYXJ0Lmhhc093blByb3BlcnR5KCdfdHlwZScpKSkge1xuICAgICAgICAgICAgLy8gdmFsaWRhdGUgYXMgbm9ybWFsIG5lc3RlZCBjb25maWdcbiAgICAgICAgICAgIHZhbGlkYXRlU3RydWN0dXJlKHNjaGVtYVBhcnQsIHZhbHVlLCBrZXlQYXRoKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChzY2hlbWFQYXJ0Ll90eXBlID09PSBUeXBlLkFycmF5KSB7XG4gICAgICAgICAgICB2YWxpZGF0ZUFycmF5U3RydWN0dXJlKHNjaGVtYVBhcnQsIHZhbHVlLCBrZXlQYXRoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHZhbGlkYXRlRnJlZWZvcm1PYmplY3RTdHJ1Y3R1cmUoZnJlZWZvcm1PYmplY3RTY2hlbWEsIGNvbmZpZywga2V5UGF0aCkge1xuICAgIGlmIChmcmVlZm9ybU9iamVjdFNjaGVtYS5fZWxlbWVudHMpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoY29uZmlnKSl7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbmZpZ1trZXldO1xuICAgICAgICAgICAgdmFsaWRhdGVCcmFuY2hTdHJ1Y3R1cmUoZnJlZWZvcm1PYmplY3RTY2hlbWEuX2VsZW1lbnRzLCB2YWx1ZSwgYCR7a2V5UGF0aH0uJHtrZXl9YCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiB2YWxpZGF0ZUFycmF5U3RydWN0dXJlKGFycmF5U2NoZW1hLCB2YWx1ZSwga2V5UGF0aCkge1xuICAgIGNvbnN0IHZhbGlkYXRlZEFzQXJyYXkgPSBjaGVja1R5cGUoa2V5UGF0aCwgVHlwZS5BcnJheSwgdmFsdWUpO1xuICAgIGlmICghdmFsaWRhdGVkQXNBcnJheSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGlmIHRoZXJlIGlzIGFuIGFycmF5IGVsZW1lbnQgb2JqZWN0IHNjaGVtYSwgdmVyaWZ5IHRoYXQgZWxlbWVudHMgbWF0Y2ggaXRcbiAgICBpZiAoaGFzT2JqZWN0U2NoZW1hKGFycmF5U2NoZW1hLl9lbGVtZW50cykpIHtcbiAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgICAgIHZhbGlkYXRlQnJhbmNoU3RydWN0dXJlKGFycmF5U2NoZW1hLl9lbGVtZW50cywgdmFsdWVbaV0sIGAke2tleVBhdGh9WyR7aX1dYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgY2hlY2tUeXBlKGAke2tleVBhdGh9WyR7aX1dYCwgYXJyYXlTY2hlbWEuX2VsZW1lbnRzPy5fdHlwZSwgdmFsdWVbaV0pO1xuICAgIH1cbn1cbi8qKlxuICogUnVuIGFsbCB0aGUgdmFsaWRhdG9ycyBpbiB0aGUgY29uZmlnIHRyZWUuIFRoaXMgc2hvdWxkIGJlIHJ1blxuICogb24gdGhlIGNvbmZpZyBvYmplY3QgYWZ0ZXIgaXQgaGFzIGJlZW4gZmlsbGVkIGluIHdpdGggYWxsIHRoZSBkZWZhdWx0cywgc2luY2VcbiAqIGhpZ2hlci1sZXZlbCB2YWxpZGF0b3JzIG1heSByZWZlciB0byBkZWZhdWx0IHZhbHVlcy5cbiAqLyBmdW5jdGlvbiBydW5BbGxWYWxpZGF0b3JzSW5Db25maWdUcmVlKHNjaGVtYSwgY29uZmlnLCBrZXlQYXRoID0gJycpIHtcbiAgICAvLyBJZiBgIXNjaGVtYWAsIHRoZXJlIHNob3VsZCBoYXZlIGJlZW4gYSBzdHJ1Y3R1cmFsIHZhbGlkYXRpb24gZXJyb3IgcHJpbnRlZCBhbHJlYWR5LlxuICAgIGlmIChzY2hlbWEpIHtcbiAgICAgICAgaWYgKGNvbmZpZyAhPT0gc2NoZW1hLl9kZWZhdWx0KSB7XG4gICAgICAgICAgICBydW5WYWxpZGF0b3JzKGtleVBhdGgsIHNjaGVtYS5fdmFsaWRhdG9ycywgY29uZmlnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNPcmRpbmFyeU9iamVjdChjb25maWcpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhjb25maWcpKXtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNvbmZpZ1trZXldO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRoaXNLZXlQYXRoID0ga2V5UGF0aCArICcuJyArIGtleTtcbiAgICAgICAgICAgICAgICBjb25zdCBzY2hlbWFQYXJ0ID0gc2NoZW1hW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5fdHlwZSA9PT0gVHlwZS5PYmplY3QgJiYgc2NoZW1hLl9lbGVtZW50cykge1xuICAgICAgICAgICAgICAgICAgICBydW5BbGxWYWxpZGF0b3JzSW5Db25maWdUcmVlKHNjaGVtYS5fZWxlbWVudHMsIHZhbHVlLCB0aGlzS2V5UGF0aCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcnVuQWxsVmFsaWRhdG9yc0luQ29uZmlnVHJlZShzY2hlbWFQYXJ0LCB2YWx1ZSwgdGhpc0tleVBhdGgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGNvbmZpZykgJiYgc2NoZW1hLl9lbGVtZW50cykge1xuICAgICAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IGNvbmZpZy5sZW5ndGg7IGkrKyl7XG4gICAgICAgICAgICAgICAgcnVuQWxsVmFsaWRhdG9yc0luQ29uZmlnVHJlZShzY2hlbWEuX2VsZW1lbnRzLCBjb25maWdbaV0sIGAke2tleVBhdGh9WyR7aX1dYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4vKipcbiAqIFJ1biB0eXBlIHZhbGlkYXRpb24gZm9yIHRoZSB2YWx1ZSwgbG9nZ2luZyBhbnkgZXJyb3JzLlxuICogQHJldHVybnMgdHJ1ZSBpZiB2YWxpZGF0aW9uIHBhc3NlcywgZmFsc2Ugb3RoZXJ3aXNlXG4gKi8gZnVuY3Rpb24gY2hlY2tUeXBlKGtleVBhdGgsIF90eXBlLCB2YWx1ZSkge1xuICAgIGlmIChfdHlwZSkge1xuICAgICAgICBjb25zdCB2YWxpZGF0b3IgPSB7XG4gICAgICAgICAgICBBcnJheTogaXNBcnJheSxcbiAgICAgICAgICAgIEJvb2xlYW46IGlzQm9vbGVhbixcbiAgICAgICAgICAgIENvbmNlcHRVdWlkOiBpc1V1aWQsXG4gICAgICAgICAgICBOdW1iZXI6IGlzTnVtYmVyLFxuICAgICAgICAgICAgT2JqZWN0OiBpc09iamVjdCxcbiAgICAgICAgICAgIFN0cmluZzogaXNTdHJpbmcsXG4gICAgICAgICAgICBVVUlEOiBpc1V1aWQsXG4gICAgICAgICAgICBQZXJzb25BdHRyaWJ1dGVUeXBlVXVpZDogaXNVdWlkLFxuICAgICAgICAgICAgUGF0aWVudElkZW50aWZpZXJUeXBlVXVpZDogaXNVdWlkXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBydW5WYWxpZGF0b3JzKGtleVBhdGgsIFtcbiAgICAgICAgICAgIHZhbGlkYXRvcltfdHlwZV1cbiAgICAgICAgXSwgdmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbi8qKlxuICogUnVucyB2YWxpZGF0b3JzLCBsb2dnaW5nIGVycm9ycy5cbiAqIEByZXR1cm5zIHRydWUgaWYgYWxsIHBhc3MsIGZhbHNlIG90aGVyd2lzZS5cbiAqLyBmdW5jdGlvbiBydW5WYWxpZGF0b3JzKGtleVBhdGgsIHZhbGlkYXRvcnMsIHZhbHVlKSB7XG4gICAgbGV0IHJldHVyblZhbHVlID0gdHJ1ZTtcbiAgICBpZiAodmFsaWRhdG9ycykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yIChsZXQgdmFsaWRhdG9yIG9mIHZhbGlkYXRvcnMpe1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRvclJlc3VsdCA9IHZhbGlkYXRvcih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWxpZGF0b3JSZXN1bHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnID8gYEludmFsaWQgY29uZmlndXJhdGlvbiBmb3IgJHtrZXlQYXRofTogJHt2YWxpZGF0b3JSZXN1bHR9YCA6IGBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gdmFsdWUgJHt2YWx1ZX0gZm9yICR7a2V5UGF0aH06ICR7dmFsaWRhdG9yUmVzdWx0fWA7XG4gICAgICAgICAgICAgICAgICAgIGxvZ0Vycm9yKGtleVBhdGgsIG1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgU2tpcHBpbmcgaW52YWxpZCB2YWxpZGF0b3IgYXQgXCIke2tleVBhdGh9XCIuIEVuY291bnRlcmVkIGVycm9yXFxuXFx0JHtlfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbn1cbi8vIFJlY3Vyc2l2ZWx5IGZpbGwgaW4gdGhlIGNvbmZpZyB3aXRoIHZhbHVlcyBmcm9tIHRoZSBzY2hlbWEuXG5jb25zdCBzZXREZWZhdWx0cyA9IChzY2hlbWEsIGlucHV0Q29uZmlnKT0+e1xuICAgIGNvbnN0IGNvbmZpZyA9IHN0cnVjdHVyZWRDbG9uZShpbnB1dENvbmZpZyk7XG4gICAgaWYgKCFzY2hlbWEpIHtcbiAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoc2NoZW1hKSl7XG4gICAgICAgIGNvbnN0IGNvbmZpZ1BhcnQgPSBjb25maWdba2V5XTtcbiAgICAgICAgY29uc3Qgc2NoZW1hUGFydCA9IHNjaGVtYVtrZXldO1xuICAgICAgICAvLyBUaGUgYHNjaGVtYVBhcnQgJiZgIGNsYXVzZSBvZiB0aGlzIGBpZmAgc3RhdGVtZW50IHdpbGwgb25seSBmYWlsXG4gICAgICAgIC8vIGlmIHRoZSBzY2hlbWEgaXMgdmVyeSBpbnZhbGlkLiBJdCBpcyB0aGVyZSB0byBwcmV2ZW50IHRoZSBhcHAgZnJvbVxuICAgICAgICAvLyBjcmFzaGluZyBjb21wbGV0ZWx5LCB0aG91Z2ggaXQgd2lsbCBwcm9kdWNlIHVuZXhwZWN0ZWQgYmVoYXZpb3IuXG4gICAgICAgIC8vIElmIHRoaXMgaGFwcGVucywgdGhlcmUgc2hvdWxkIGJlIGxlZ2libGUgZXJyb3JzIGluIHRoZSBjb25zb2xlIGZyb21cbiAgICAgICAgLy8gdGhlIHNjaGVtYSB2YWxpZGF0b3IuXG4gICAgICAgIGlmIChzY2hlbWFQYXJ0ICYmIChzY2hlbWFQYXJ0Lmhhc093blByb3BlcnR5KCdfdHlwZScpIHx8IHNjaGVtYVBhcnQuaGFzT3duUHJvcGVydHkoJ19kZWZhdWx0JykpKSB7XG4gICAgICAgICAgICAvLyBXZSBhc3N1bWUgdGhhdCBzY2hlbWFQYXJ0IGRlZmluZXMgYSBjb25maWcgdmFsdWUsIHNpbmNlIGl0IGhhc1xuICAgICAgICAgICAgLy8gYSBwcm9wZXJ0eSBgX3R5cGVgIG9yIGBfZGVmYXVsdGAuXG4gICAgICAgICAgICBpZiAoIWNvbmZpZy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnW2tleV0gPSBzY2hlbWFQYXJ0WydfZGVmYXVsdCddO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gV2UgYWxzbyBjaGVjayBpZiBpdCBpcyBhbiBvYmplY3Qgb3IgYXJyYXkgd2l0aCBvYmplY3QgZWxlbWVudHMsIGluIHdoaWNoIGNhc2Ugd2UgcmVjdXJzZVxuICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBzY2hlbWFQYXJ0Ll9lbGVtZW50cztcbiAgICAgICAgICAgIGlmIChjb25maWdQYXJ0ICYmIGhhc09iamVjdFNjaGVtYShlbGVtZW50cykpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2NoZW1hUGFydC5fdHlwZSA9PT0gVHlwZS5BcnJheSAmJiBBcnJheS5pc0FycmF5KGNvbmZpZ1BhcnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpZ1dpdGhEZWZhdWx0cyA9IGNvbmZpZ1BhcnQubWFwKChjb25mKT0+c2V0RGVmYXVsdHMoZWxlbWVudHMsIGNvbmYpKTtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnW2tleV0gPSBjb25maWdXaXRoRGVmYXVsdHM7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzY2hlbWFQYXJ0Ll90eXBlID09PSBUeXBlLk9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBvYmplY3RLZXkgb2YgT2JqZWN0LmtleXMoY29uZmlnUGFydCkpe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnUGFydFtvYmplY3RLZXldID0gc2V0RGVmYXVsdHMoZWxlbWVudHMsIGNvbmZpZ1BhcnRbb2JqZWN0S2V5XSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoaXNPcmRpbmFyeU9iamVjdChzY2hlbWFQYXJ0KSkge1xuICAgICAgICAgICAgLy8gU2luY2Ugc2NoZW1hUGFydCBoYXMgbm8gcHJvcGVydHkgXCJfdHlwZVwiLCBpZiBpdCdzIGFuIG9yZGluYXJ5IG9iamVjdFxuICAgICAgICAgICAgLy8gKHVubGlrZSwgaW1wb3J0YW50bHksIHRoZSB2YWxpZGF0b3JzIGFycmF5KSwgd2UgYXNzdW1lIGl0IGlzIGEgcGFyZW50IGNvbmZpZyBwcm9wZXJ0eS5cbiAgICAgICAgICAgIC8vIFdlIHJlY3Vyc2UgdG8gY29uZmlnW2tleV0gYW5kIHNjaGVtYVtrZXldLiBEZWZhdWx0IGNvbmZpZ1trZXldIHRvIHt9LlxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRDb25maWdQYXJ0ID0gY29uZmlnUGFydCA/PyB7fTtcbiAgICAgICAgICAgIC8vIFRoZXJlIHdpbGwgaGF2ZSBiZWVuIGEgdmFsaWRhdGlvbiBlcnJvciBhbHJlYWR5IGlmIGNvbmZpZ1BhcnQgaXMgbm90IGEgcGxhaW4gb2JqZWN0LlxuICAgICAgICAgICAgaWYgKGlzT3JkaW5hcnlPYmplY3Qoc2VsZWN0ZWRDb25maWdQYXJ0KSkge1xuICAgICAgICAgICAgICAgIGNvbmZpZ1trZXldID0gc2V0RGVmYXVsdHMoc2NoZW1hUGFydCwgc2VsZWN0ZWRDb25maWdQYXJ0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29uZmlnO1xufTtcbmZ1bmN0aW9uIGhhc09iamVjdFNjaGVtYShlbGVtZW50c1NjaGVtYSkge1xuICAgIHJldHVybiAhIWVsZW1lbnRzU2NoZW1hICYmIE9iamVjdC5rZXlzKGVsZW1lbnRzU2NoZW1hKS5maWx0ZXIoKGUpPT4hW1xuICAgICAgICAgICAgJ19kZWZhdWx0JyxcbiAgICAgICAgICAgICdfdmFsaWRhdG9ycydcbiAgICAgICAgXS5pbmNsdWRlcyhlKSkubGVuZ3RoID4gMDtcbn1cbmZ1bmN0aW9uIGlzT3JkaW5hcnlPYmplY3QodmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUgIT09IG51bGw7XG59XG5mdW5jdGlvbiBsb2dFcnJvcihrZXlQYXRoLCBtZXNzYWdlKSB7XG4gICAgY29uc3Qga2V5ID0gYCR7a2V5UGF0aH06Ojoke21lc3NhZ2V9YDtcbiAgICBpZiAoIWRpc3BsYXllZFZhbGlkYXRpb25NZXNzYWdlcy5oYXMoa2V5KSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgICAgICBkaXNwbGF5ZWRWYWxpZGF0aW9uTWVzc2FnZXMuYWRkKGtleSk7XG4gICAgfVxufVxuLyoqXG4gKiBOb3JtYWxseSwgY29uZmlndXJhdGlvbiBlcnJvcnMgYXJlIG9ubHkgZGlzcGxheWVkIG9uY2UuIFRoaXMgZnVuY3Rpb24gY2xlYXJzIHRoZSBsaXN0IG9mXG4gKiBkaXNwbGF5ZWQgZXJyb3JzLCBzbyB0aGF0IHRoZXkgd2lsbCBiZSBkaXNwbGF5ZWQgYWdhaW4uXG4gKlxuICogQGludGVybmFsXG4gKi8gZXhwb3J0IGZ1bmN0aW9uIGNsZWFyQ29uZmlnRXJyb3JzKGtleVBhdGgpIHtcbiAgICBpZiAoa2V5UGF0aCkge1xuICAgICAgICBkaXNwbGF5ZWRWYWxpZGF0aW9uTWVzc2FnZXMuZm9yRWFjaCgoa2V5KT0+e1xuICAgICAgICAgICAgaWYgKGtleS5zdGFydHNXaXRoKGtleVBhdGgpKSB7XG4gICAgICAgICAgICAgICAgZGlzcGxheWVkVmFsaWRhdGlvbk1lc3NhZ2VzLmRlbGV0ZShrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBkaXNwbGF5ZWRWYWxpZGF0aW9uTWVzc2FnZXMuY2xlYXIoKTtcbiAgICB9XG59XG4vKipcbiAqIENsZWFucyB1cCBhbGwgY29uZmlnIHN0b3JlIHN1YnNjcmlwdGlvbnMgYW5kIHJlLWVzdGFibGlzaGVzIHRoZW0uIFRoaXMgaXMgcHJpbWFyaWx5XG4gKiB1c2VmdWwgZm9yIHRlc3RpbmcsIHdoZXJlIHN1YnNjcmlwdGlvbnMgc2V0IHVwIGF0IG1vZHVsZSBsb2FkIHRpbWUgbmVlZCB0byBiZSBjbGVhcmVkXG4gKiBiZXR3ZWVuIHRlc3RzIHRvIHByZXZlbnQgaW5maW5pdGUgdXBkYXRlIGxvb3BzLiBBZnRlciBjbGVhcmluZywgc3Vic2NyaXB0aW9ucyBhcmVcbiAqIHJlLWVzdGFibGlzaGVkIHNvIHRoZSBjb25maWcgc3lzdGVtIGNvbnRpbnVlcyB0byB3b3JrIG5vcm1hbGx5LlxuICpcbiAqIEBpbnRlcm5hbFxuICovIGV4cG9ydCBmdW5jdGlvbiByZXNldENvbmZpZ1N5c3RlbSgpIHtcbiAgICBjb25maWdTdWJzY3JpcHRpb25zLmZvckVhY2goKHVuc3Vic2NyaWJlKT0+dW5zdWJzY3JpYmUoKSk7XG4gICAgY29uZmlnU3Vic2NyaXB0aW9ucy5sZW5ndGggPSAwO1xuICAgIC8vIENhY2hlZCBjb25maWdzIGFyZSBrZXllZCBvbiBpbnB1dCBpZGVudGl0eSwgc28gYSB0ZXN0IHRoYXQgcmV1c2VzIHRoZSBzYW1lIHNjaGVtYSBvciBjb25maWdcbiAgICAvLyBvYmplY3RzIGFjcm9zcyBjYXNlcyB3b3VsZCBvdGhlcndpc2UgYmUgc2VydmVkIHRoZSBwcmV2aW91cyBjYXNlJ3MgcmVzdWx0LlxuICAgIG1vZHVsZUNvbmZpZ0NhY2hlLmNsZWFyKCk7XG4gICAgZXh0ZW5zaW9uQ29uZmlnQ2FjaGUuY2xlYXIoKTtcbiAgICBzY2hlbWFWYWx1ZXNBbmRTb3VyY2VzQ2FjaGUuY2xlYXIoKTtcbiAgICBpbXBsZW1lbnRlclRvb2xzTW9kdWxlQ2FjaGUuY2xlYXIoKTtcbiAgICBsYXN0RGVyaXZhdGlvbiA9IG51bGw7XG4gICAgZW50cnlPcmlnaW5zID0gbmV3IFdlYWtNYXAoKTtcbiAgICBzZXR1cENvbmZpZ1N1YnNjcmlwdGlvbnMoKTtcbn1cbi8qKlxuICogQ29waWVkIG92ZXIgZnJvbSBlc20tZXh0ZW5zaW9ucy4gSXQgcmlnaHRseSBiZWxvbmdzIHRvIHRoYXQgbW9kdWxlLCBidXQgZXNtLWNvbmZpZ1xuICogY2Fubm90IGRlcGVuZCBvbiBlc20tZXh0ZW5zaW9ucy5cbiAqLyBmdW5jdGlvbiBnZXRFeHRlbnNpb25OYW1lRnJvbUlkKGV4dGVuc2lvbklkKSB7XG4gICAgY29uc3QgW2V4dGVuc2lvbk5hbWVdID0gZXh0ZW5zaW9uSWQuc3BsaXQoJyMnKTtcbiAgICByZXR1cm4gZXh0ZW5zaW9uTmFtZTtcbn1cbi8qKlxuICogVGhlIHRyYW5zbGF0aW9uIG92ZXJyaWRlcyBzY2hlbWEgaXMgdXNlZCBpbiB0aGUgaW1wbGljaXQgc2NoZW1hIGdpdmVuIHRvIGV2ZXJ5IG1vZHVsZTtcbiAqIHBsdXMgYW55IGFkZGl0aW9uYWwgdHJhbnNsYXRpb24gbmFtZXNwYWNlcyAoYXQgdGltZSBvZiB3cml0aW5nLCB0aGlzIGlzIGp1c3QgJ2NvcmUnKS5cbiAqLyBjb25zdCB0cmFuc2xhdGlvbk92ZXJyaWRlc1NjaGVtYSA9IHtcbiAgICAnVHJhbnNsYXRpb24gb3ZlcnJpZGVzJzoge1xuICAgICAgICBfZGVzY3JpcHRpb246ICdQZXItbGFuZ3VhZ2Ugb3ZlcnJpZGVzIGZvciBmcm9udGVuZCB0cmFuc2xhdGlvbnMgc2hvdWxkIGJlIGtleWVkIGJ5IGxhbmd1YWdlIGNvZGUgYW5kIGVhY2ggbGFuZ3VhZ2UgZGljdGlvbmFyeSBjb250YWlucyB0aGUgdHJhbnNsYXRpb24ga2V5IGFuZCB0aGUgZGlzcGxheSB2YWx1ZScsXG4gICAgICAgIF90eXBlOiBUeXBlLk9iamVjdCxcbiAgICAgICAgX2RlZmF1bHQ6IHt9LFxuICAgICAgICBfdmFsaWRhdG9yczogW1xuICAgICAgICAgICAgdmFsaWRhdG9yKChvKT0+T2JqZWN0LmtleXMobykuZXZlcnkoKGspPT4vXlthLXpdezIsM30oLVtBLVpdezIsM30pPyQvLnRlc3QoaykpLCAobyk9PntcbiAgICAgICAgICAgICAgICBjb25zdCBiYWRLZXlzID0gT2JqZWN0LmtleXMobykuZmlsdGVyKChrKT0+IS9eW2Etel17MiwzfSgtW0EtWl17MiwzfSk/JC8udGVzdChrKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBUaGUgJ1RyYW5zbGF0aW9uIG92ZXJyaWRlcycgb2JqZWN0IHNob3VsZCBoYXZlIGxhbmd1YWdlIGNvZGVzIGZvciBrZXlzLiBMYW5ndWFnZSBjb2RlcyBtdXN0IGJlIGluIHRoZSBmb3JtIG9mIGEgdHdvLXRvLXRocmVlIGxldHRlciBsYW5ndWFnZSBjb2RlIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgYSBoeXBoZW4gYW5kIGEgdHdvLXRvLXRocmVlIGxldHRlciBjb3VudHJ5IGNvZGUuIFRoZSBmb2xsb3dpbmcga2V5cyBkbyBub3QgY29uZm9ybTogJHtiYWRLZXlzLmpvaW4oJywgJyl9LmA7XG4gICAgICAgICAgICB9KVxuICAgICAgICBdXG4gICAgfVxufTtcbi8qKlxuICogVGhlIGltcGxpY2l0Q29uZmlnU2NoZW1hIGlzIGltcGxpY2l0bHkgaW5jbHVkZWQgaW4gZXZlcnkgY29uZmlndXJhdGlvbiBzY2hlbWFcbiAqLyBjb25zdCBpbXBsaWNpdENvbmZpZ1NjaGVtYSA9IHtcbiAgICAnRGlzcGxheSBjb25kaXRpb25zJzoge1xuICAgICAgICBwcml2aWxlZ2VzOiB7XG4gICAgICAgICAgICBfZGVzY3JpcHRpb246ICdUaGUgcHJpdmlsZWdlKHMpIHRoZSB1c2VyIG11c3QgaGF2ZSB0byB1c2UgdGhpcyBleHRlbnNpb24nLFxuICAgICAgICAgICAgX3R5cGU6IFR5cGUuQXJyYXksXG4gICAgICAgICAgICBfZGVmYXVsdDogW11cbiAgICAgICAgfSxcbiAgICAgICAgZXhwcmVzc2lvbjoge1xuICAgICAgICAgICAgX2Rlc2NyaXB0aW9uOiAnVGhlIGV4cHJlc3Npb24gdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGV4dGVuc2lvbiBpcyBkaXNwbGF5ZWQnLFxuICAgICAgICAgICAgX3R5cGU6IFR5cGUuU3RyaW5nLFxuICAgICAgICAgICAgX2RlZmF1bHQ6IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgfSxcbiAgICAuLi50cmFuc2xhdGlvbk92ZXJyaWRlc1NjaGVtYVxufTtcbiJdLCJuYW1lcyI6WyJjbG9uZURlZXAiLCJpc0VxdWFsIiwibWVyZ2VXaXRoIiwib21pdCIsImxvZGFzaE9taXQiLCJUeXBlIiwiaXNBcnJheSIsImlzQm9vbGVhbiIsImlzVXVpZCIsImlzTnVtYmVyIiwiaXNPYmplY3QiLCJpc1N0cmluZyIsInZhbGlkYXRvciIsImNvbmZpZ0V4dGVuc2lvblN0b3JlIiwiY29uZmlnSW50ZXJuYWxTdG9yZSIsImdldENvbmZpZ1N0b3JlIiwiZ2V0RXh0ZW5zaW9uQ29uZmlnRnJvbVN0b3JlIiwiZ2V0RXh0ZW5zaW9uU2xvdHNDb25maWdTdG9yZSIsImdldEV4dGVuc2lvbnNDb25maWdTdG9yZSIsImNsZWFyQ29uZmlnRGVyaXZhdGlvbkVycm9yIiwiaW1wbGVtZW50ZXJUb29sc0NvbmZpZ1N0b3JlIiwiaW52YWxpZGF0ZUltcGxlbWVudGVyVG9vbHNDb25maWciLCJyZWNvcmRDb25maWdEZXJpdmF0aW9uRXJyb3IiLCJzZXRJbXBsZW1lbnRlclRvb2xzQ29uZmlnUmVjb21wdXRlciIsInRlbXBvcmFyeUNvbmZpZ1N0b3JlIiwicmVwbGFjZUFycmF5cyIsIl9vYmpWYWx1ZSIsInNyY1ZhbHVlIiwiQXJyYXkiLCJtZXJnZURlZXBSZXBsYWNlIiwibGVmdCIsInJpZ2h0IiwiY29uZmlnU3Vic2NyaXB0aW9ucyIsImRpc3BsYXllZFZhbGlkYXRpb25NZXNzYWdlcyIsIlNldCIsInJlY29tcHV0ZUFsbENvbmZpZ3MiLCJjb25maWdTdGF0ZSIsInRlbXBDb25maWdTdGF0ZSIsImV4dGVuc2lvblN0YXRlIiwiY29uZmlnSW5wdXRzVW5jaGFuZ2VkIiwibGFzdERlcml2YXRpb24iLCJjb21wdXRlRXh0ZW5zaW9uQ29uZmlncyIsImNvbXB1dGVNb2R1bGVDb25maWciLCJzbG90Q29uZmlncyIsImdldEV4dGVuc2lvblNsb3RDb25maWdzIiwiY29tcHV0ZUV4dGVuc2lvblNsb3RDb25maWdzIiwiZW50cnlPcmlnaW5zIiwiV2Vha01hcCIsInNldHVwQ29uZmlnU3Vic2NyaXB0aW9ucyIsImNvbXB1dGVJbXBsZW1lbnRlclRvb2xzQ29uZmlnIiwicmVjb21wdXRlQWxsQ29uZmlnc1NhZmVseSIsImUiLCJjb25zb2xlIiwibW9kdWxlQ29uZmlnQ2FjaGUiLCJNYXAiLCJzdGF0ZSIsInRlbXBTdGF0ZSIsIm1vZHVsZU5hbWUiLCJPYmplY3QiLCJtb2R1bGVTdG9yZSIsInNjaGVtYSIsIm1vZHVsZUxvYWRlZCIsIkJvb2xlYW4iLCJjYWNoZWQiLCJuZXdTdGF0ZSIsImNvbmZpZyIsImdldENvbmZpZ0Zvck1vZHVsZSIsImdldENvbmZpZ0Zvck1vZHVsZUltcGxpY2l0U2NoZW1hIiwib2xkU3RhdGUiLCJzbG90U3RvcmUiLCJvbGRTbG90cyIsInNsb3RzIiwiY2hhbmdlZCIsInNsb3ROYW1lIiwicHJldmlvdXMiLCJnZXRJbXBsZW1lbnRlclRvb2xzQ29uZmlnIiwiZXh0ZW5zaW9uc0NvbmZpZ1N0b3JlIiwib2xkQ29uZmlncyIsImNvbmZpZ3MiLCJlbnRyeUNvdW50IiwiZXh0ZW5zaW9uIiwiZW50cnkiLCJvcmlnaW4iLCJjb21wdXRlRXh0ZW5zaW9uQ29uZmlnIiwicHJldmlvdXNTbG90IiwiZXh0ZW5zaW9uSWQiLCJ0b3RhbCIsInNsb3QiLCJkZWZpbmVDb25maWdTY2hlbWEiLCJ2YWxpZGF0ZUNvbmZpZ1NjaGVtYSIsImVuaGFuY2VkU2NoZW1hIiwiaW1wbGljaXRDb25maWdTY2hlbWEiLCJyZWdpc3Rlck1vZHVsZVdpdGhDb25maWdTeXN0ZW0iLCJyZWdpc3Rlck1vZHVsZUxvYWQiLCJyZWdpc3RlclRyYW5zbGF0aW9uTmFtZXNwYWNlIiwibmFtZXNwYWNlIiwidHJhbnNsYXRpb25PdmVycmlkZXNTY2hlbWEiLCJkZWZpbmVFeHRlbnNpb25Db25maWdTY2hlbWEiLCJleHRlbnNpb25OYW1lIiwicHJvdmlkZSIsInNvdXJjZU5hbWUiLCJ3aGVuU3RvcmVSZWFkeSIsInN0b3JlIiwicmVhZHkiLCJzZWxlY3QiLCJQcm9taXNlIiwicmVzb2x2ZSIsInVuc3Vic2NyaWJlIiwicmVzb2x2ZWQiLCJ1cGRhdGUiLCJnZXRDb25maWciLCJnZXRUcmFuc2xhdGlvbk92ZXJyaWRlcyIsInByb21pc2VzIiwiZXh0ZW5zaW9uQ29uZmlnIiwib3ZlcnJpZGVzIiwicHJvY2Vzc0NvbmZpZyIsInByb3ZpZGVkQ29uZmlnIiwia2V5UGF0aENvbnRleHQiLCJ2YWxpZGF0ZVN0cnVjdHVyZSIsInNldERlZmF1bHRzIiwicnVuQWxsVmFsaWRhdG9yc0luQ29uZmlnVHJlZSIsImV4dGVuc2lvbkNvbmZpZ0NhY2hlIiwic2xvdE1vZHVsZU5hbWUiLCJleHRlbnNpb25Nb2R1bGVOYW1lIiwic2xvdENvbmZpZyIsImdldEV4dGVuc2lvbk5hbWVGcm9tSWQiLCJleHRlbnNpb25Db25maWdTY2hlbWEiLCJjYWNoZUtleSIsIkpTT04iLCJuYW1lT2ZTY2hlbWFTb3VyY2UiLCJwcm92aWRlZENvbmZpZ3MiLCJnZXRQcm92aWRlZENvbmZpZ3MiLCJzaGFyZWRPdmVycmlkZSIsInNsb3RNb2R1bGVDb25maWciLCJtZXJnZUNvbmZpZ3NGb3IiLCJjb25maWdPdmVycmlkZSIsImNvbWJpbmVkQ29uZmlnIiwibWVyZ2VDb25maWdzIiwiaW1wbGVtZW50ZXJUb29sc01vZHVsZUNhY2hlIiwiYW5ub3RhdGVkU2NoZW1hcyIsImdldEFsbFNjaGVtYXNXaXRoVmFsdWVzQW5kU291cmNlcyIsImNvbmZpZ3NBbmRTb3VyY2VzIiwiYyIsIm1vZHVsZU5hbWVzIiwicmVzdWx0IiwiYW5ub3RhdGVkU2NoZW1hIiwiY29uZmlnU2xpY2VzIiwic291cmNlcyIsInNvdXJjZSIsInNsaWNlIiwiaSIsIm1lcmdlZCIsInVuZGVmaW5lZCIsImNyZWF0ZVZhbHVlc0FuZFNvdXJjZXNUcmVlIiwic2NoZW1hVmFsdWVzQW5kU291cmNlc0NhY2hlIiwic2NoZW1hcyIsImFubm90YXRlZCIsImdldFNjaGVtYVdpdGhWYWx1ZXNBbmRTb3VyY2VzIiwiaXNPcmRpbmFyeU9iamVjdCIsIm9iaiIsImtleSIsImFsbENvbmZpZ3MiLCJzbG90Q29uZmlnUGVyTW9kdWxlIiwidmFsaWRhdGVBbGxFeHRlbnNpb25TbG90Q29uZmlncyIsImNvbmZpZ3VyZUJsb2NrcyIsImNvbmZpZ0J5U2xvdE5hbWUiLCJfY29uZmlndXJlQmxvY2tzIiwiX3Nsb3ROYW1lIiwiYmxvY2tzIiwiY29uZmlndXJlIiwidmFsaWRhdGVFeHRlbnNpb25TbG90Q29uZmlnIiwia2V5UGF0aCIsImVycm9yUHJlZml4IiwiaW52YWxpZEtleXMiLCJrIiwibG9nRXJyb3IiLCJuIiwidXBkYXRlTWVzc2FnZSIsInRoaXNLZXlQYXRoIiwic2NoZW1hUGFydCIsImVsZW1lbnRzIiwiaGFzT2JqZWN0U2NoZW1hIiwidmFsdWVUeXBlIiwiaW5wdXRDb25maWciLCJhbGxDb25maWdzRm9yTW9kdWxlIiwiYWNjIiwidmFsdWUiLCJ2YWxpZGF0ZUJyYW5jaFN0cnVjdHVyZSIsImNoZWNrVHlwZSIsInZhbGlkYXRlRnJlZWZvcm1PYmplY3RTdHJ1Y3R1cmUiLCJ2YWxpZGF0ZUFycmF5U3RydWN0dXJlIiwiZnJlZWZvcm1PYmplY3RTY2hlbWEiLCJhcnJheVNjaGVtYSIsInZhbGlkYXRlZEFzQXJyYXkiLCJydW5WYWxpZGF0b3JzIiwiX3R5cGUiLCJ2YWxpZGF0b3JzIiwicmV0dXJuVmFsdWUiLCJ2YWxpZGF0b3JSZXN1bHQiLCJtZXNzYWdlIiwic3RydWN0dXJlZENsb25lIiwiY29uZmlnUGFydCIsImNvbmZpZ1dpdGhEZWZhdWx0cyIsImNvbmYiLCJvYmplY3RLZXkiLCJzZWxlY3RlZENvbmZpZ1BhcnQiLCJlbGVtZW50c1NjaGVtYSIsImNsZWFyQ29uZmlnRXJyb3JzIiwicmVzZXRDb25maWdTeXN0ZW0iLCJvIiwiYmFkS2V5cyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZCQUE2QixHQUFpRjtBQUMzRTtBQUN5RTtBQUNyRDtBQUN3UztBQUMvVjs7OztDQUlDLEdBQUcsU0FBU3lCLGNBQWNDLFNBQVMsRUFBRUMsUUFBUTtJQUMxQyxJQUFJQyxNQUFNLE9BQU8sQ0FBQ0QsV0FBVztRQUN6QixPQUFPQTtJQUNYO0FBQ0o7QUFDQSxTQUFTRSxpQkFBaUJDLElBQUksRUFBRUMsS0FBSztJQUNqQyxPQUFPN0IseUNBQVNBLENBQUMsQ0FBQyxHQUFHNEIsTUFBTUMsT0FBT047QUFDdEM7QUFD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\n//# sourceURL=webpack-internal:///../../framework/esm-config/dist/module-config/module-config.js\n\n}");
|
|
4480
4480
|
|
|
4481
4481
|
},
|
|
4482
4482
|
"../../framework/esm-config/dist/module-config/state.js"(__unused_rspack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
4483
4483
|
"use strict";
|
|
4484
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n__webpack_require__.d(__webpack_exports__, {\n clearConfigDerivationError: () => (clearConfigDerivationError),\n configExtensionStore: () => (configExtensionStore),\n configInternalStore: () => (configInternalStore),\n getConfigStore: () => (getConfigStore),\n getExtensionConfig: () => (getExtensionConfig),\n getExtensionConfigFromExtensionSlotStore: () => (getExtensionConfigFromExtensionSlotStore),\n getExtensionConfigFromStore: () => (getExtensionConfigFromStore),\n getExtensionSlotConfig: () => (getExtensionSlotConfig),\n getExtensionSlotConfigFromStore: () => (getExtensionSlotConfigFromStore),\n getExtensionSlotsConfigStore: () => (getExtensionSlotsConfigStore),\n getExtensionsConfigStore: () => (getExtensionsConfigStore),\n implementerToolsConfigStore: () => (implementerToolsConfigStore),\n invalidateImplementerToolsConfig: () => (invalidateImplementerToolsConfig),\n recordConfigDerivationError: () => (recordConfigDerivationError),\n setImplementerToolsConfigRecomputer: () => (setImplementerToolsConfigRecomputer),\n temporaryConfigStore: () => (temporaryConfigStore)\n});\n/* import */ var _openmrs_esm_state__rspack_import_0 = __webpack_require__(\"../../framework/esm-state/dist/index.js\");\n/* import */ var _openmrs_esm_utils__rspack_import_1 = __webpack_require__(\"../../framework/esm-utils/dist/shallowEqual.js\");\n/* import */ var zustand_vanilla__rspack_import_2 = __webpack_require__(\"../../../node_modules/zustand/esm/vanilla.mjs\");\n\n\n\nconst configInternalStoreInitialValue = {\n providedConfigs: [],\n schemas: {},\n moduleLoaded: {}\n};\n/**\n * @internal\n */ const configInternalStore = (0,_openmrs_esm_state__rspack_import_0.createGlobalStore)('config-internal', configInternalStoreInitialValue);\n/** @internal */ const temporaryConfigStore = (0,_openmrs_esm_state__rspack_import_0.createGlobalStore)('temporary-config', {\n config: getTemporaryConfig()\n});\ntemporaryConfigStore.subscribe((state)=>{\n setTemporaryConfig(state.config);\n});\nfunction setTemporaryConfig(value) {\n try {\n localStorage.setItem('openmrs:temporaryConfig', JSON.stringify(value));\n } catch (e) {\n // localStorage may not be available in all environments\n }\n}\nfunction getTemporaryConfig() {\n try {\n return JSON.parse(localStorage.getItem('openmrs:temporaryConfig') || '{}');\n } catch (e) {\n return {};\n }\n}\n/** @internal */ const configExtensionStore = (0,_openmrs_esm_state__rspack_import_0.createGlobalStore)('config-store-of-extension-state', {\n mountedExtensions: []\n});\nfunction initializeConfigStore() {\n return {\n config: null,\n loaded: false,\n translationOverridesLoaded: false\n };\n}\n/**\n * Returns the configuration store for a specific module. Each module has its\n * own store that tracks the loading state and resolved configuration values.\n *\n * @param moduleName The name of the module whose config store to retrieve.\n * @returns A Zustand store containing the module's configuration state.\n *\n * @internal\n */ function getConfigStore(moduleName) {\n // We use a store for each module's config, named `config-module-${moduleName}`\n return (0,_openmrs_esm_state__rspack_import_0.getGlobalStore)(`config-module-${moduleName}`, initializeConfigStore());\n}\n/** @internal */ function getExtensionSlotsConfigStore() {\n return (0,_openmrs_esm_state__rspack_import_0.getGlobalStore)(`config-extension-slots`, {\n slots: {}\n });\n}\n/** @internal */ function getExtensionSlotConfig(slotName) {\n return getExtensionSlotConfigFromStore(getExtensionSlotsConfigStore().getState(), slotName);\n}\n/** @internal */ function getExtensionSlotConfigFromStore(state, slotName) {\n const slotConfig = state.slots[slotName];\n return slotConfig ?? {\n loaded: false,\n config: {}\n };\n}\n/**\n * One store for all the extensions\n * @internal\n */ function getExtensionsConfigStore() {\n return (0,_openmrs_esm_state__rspack_import_0.getGlobalStore)(`config-extensions`, {\n configs: {}\n });\n}\n/**\n * A read-only view of one extension instance's config within a slot. Read-only because these\n * configs are derived from the config system's inputs, so a write here would be overwritten by the\n * next recomputation; provide a config or set a temporary one instead.\n *\n * @internal\n */ function getExtensionConfig(slotName, extensionId) {\n if (typeof slotName !== 'string' || typeof extensionId !== 'string' || slotName === '__proto__' || extensionId === '__proto__' || slotName === 'constructor' || extensionId === 'constructor' || slotName === 'prototype' || extensionId === 'prototype') {\n throw new Error('Attempted to call `getExtensionConfig()` with invalid argument');\n }\n const extensionConfigStore = getExtensionsConfigStore();\n const selector = (configStore)=>configStore.configs[slotName]?.[extensionId];\n return {\n getInitialState () {\n return selector(extensionConfigStore.getInitialState());\n },\n getState () {\n return selector(extensionConfigStore.getState()) ?? {\n loaded: false,\n config: null\n };\n },\n subscribe (listener) {\n return extensionConfigStore.subscribe((state, prevState)=>{\n const newState = selector(state);\n const oldState = selector(prevState);\n if (!(0,_openmrs_esm_utils__rspack_import_1.shallowEqual)(newState, oldState)) {\n listener(newState, oldState);\n }\n });\n }\n };\n}\n/** @internal */ function getExtensionConfigFromStore(state, slotName, extensionId) {\n const extensionConfig = state.configs[slotName]?.[extensionId];\n return extensionConfig ?? {\n loaded: false,\n config: null\n };\n}\n/** @internal */ function getExtensionConfigFromExtensionSlotStore(state, slotName, extensionId) {\n const extensionConfig = state.configure?.[extensionId];\n return extensionConfig ?? null;\n}\n// Deliberately not registered: the wrapper below is what gets published under\n// `config-implementer-tools`, so that a lookup can't hand out the store that skips the derivation.\nconst baseImplementerToolsConfigStore = (0,zustand_vanilla__rspack_import_2.createStore)()(()=>({\n config: {}\n }));\n/**\n * Deriving this config walks every module's schema, making it the most expensive thing the config\n * system computes — and nothing but the implementer tools panel reads it. So it is only kept current\n * while something is subscribed; otherwise config changes just mark it stale.\n */ let implementerToolsSubscribers = 0;\nlet implementerToolsConfigStale = true;\nlet isRecomputing = false;\nlet recomputeImplementerToolsConfig;\n/**\n * Registers how to derive the implementer tools config; the store decides whether to.\n * @internal\n */ function setImplementerToolsConfigRecomputer(recompute) {\n recomputeImplementerToolsConfig = recompute;\n}\n/**\n * Marks the implementer tools config stale, deriving it again only if something is watching.\n * @internal\n */ function invalidateImplementerToolsConfig() {\n implementerToolsConfigStale = true;\n if (implementerToolsSubscribers > 0) {\n recomputeImplementerToolsConfigIfStale();\n }\n}\nfunction recomputeImplementerToolsConfigIfStale() {\n if (!implementerToolsConfigStale || !recomputeImplementerToolsConfig || isRecomputing) {\n return;\n }\n isRecomputing = true;\n // Cleared before the work, so that a config change made while it runs marks this stale again\n // instead of being wiped when the pass finishes.\n implementerToolsConfigStale = false;\n try {\n recomputeImplementerToolsConfig();\n } catch (e) {\n implementerToolsConfigStale = true;\n recordConfigDerivationError(e);\n console.error('Failed to derive the implementer tools config', e);\n } finally{\n isRecomputing = false;\n }\n}\n/**\n * Records that configuration could not be rebuilt so that the user can be informed\n *\n * @internal\n */ function recordConfigDerivationError(error) {\n baseImplementerToolsConfigStore.setState({\n derivationError: error instanceof Error ? error.message : String(error)\n });\n}\n/**\n * Cleared at the start of a derivation pass rather than the end of a successful one, so that a\n * failure recorded partway through the pass is not wiped by the pass completing.\n *\n * @internal\n */ function clearConfigDerivationError() {\n if (baseImplementerToolsConfigStore.getState().derivationError) {\n baseImplementerToolsConfigStore.setState({\n derivationError: undefined\n });\n }\n}\nconst lazyImplementerToolsConfigStore = {\n ...baseImplementerToolsConfigStore,\n getState () {\n // While something is subscribed the store is already current, so a read costs nothing. This\n // branch is what serves the panel's very first render, before it has subscribed.\n if (implementerToolsSubscribers === 0) {\n recomputeImplementerToolsConfigIfStale();\n }\n return baseImplementerToolsConfigStore.getState();\n },\n setState (...args) {\n // An explicit write is the current value by definition, so don't overwrite it on the next read.\n implementerToolsConfigStale = false;\n return baseImplementerToolsConfigStore.setState(...args);\n },\n subscribe (listener) {\n implementerToolsSubscribers++;\n recomputeImplementerToolsConfigIfStale();\n const unsubscribe = baseImplementerToolsConfigStore.subscribe(listener);\n let hasUnsubscribed = false;\n return ()=>{\n if (!hasUnsubscribed) {\n hasUnsubscribed = true;\n implementerToolsSubscribers--;\n }\n unsubscribe();\n };\n }\n};\n/**\n * Published rather than the store it wraps, so that a lookup by name can't hand out the one that\n * skips the derivation and always reads empty.\n *\n * @internal\n */ const implementerToolsConfigStore = (0,_openmrs_esm_state__rspack_import_0.registerGlobalStore)('config-implementer-tools', lazyImplementerToolsConfigStore);\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YXNjcmlwdC9lc218YnVpbHRpbjpzd2MtbG9hZGVyPz9ydWxlU2V0WzFdLnJ1bGVzWzVdLnVzZVswXSEvaG9tZS9ydW5uZXIvd29yay9vcGVubXJzLWVzbS1jb3JlL29wZW5tcnMtZXNtLWNvcmUvcGFja2FnZXMvZnJhbWV3b3JrL2VzbS1jb25maWcvZGlzdC9tb2R1bGUtY29uZmlnL3N0YXRlLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uLi8uLi9mcmFtZXdvcmsvZXNtLWNvbmZpZy9kaXN0L21vZHVsZS1jb25maWcvc3RhdGUuanM/YjhhZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVHbG9iYWxTdG9yZSwgZ2V0R2xvYmFsU3RvcmUsIHJlZ2lzdGVyR2xvYmFsU3RvcmUgfSBmcm9tIFwiQG9wZW5tcnMvZXNtLXN0YXRlXCI7XG5pbXBvcnQgeyBzaGFsbG93RXF1YWwgfSBmcm9tIFwiQG9wZW5tcnMvZXNtLXV0aWxzXCI7XG5pbXBvcnQgeyBjcmVhdGVTdG9yZSB9IGZyb20gXCJ6dXN0YW5kL3ZhbmlsbGFcIjtcbmNvbnN0IGNvbmZpZ0ludGVybmFsU3RvcmVJbml0aWFsVmFsdWUgPSB7XG4gICAgcHJvdmlkZWRDb25maWdzOiBbXSxcbiAgICBzY2hlbWFzOiB7fSxcbiAgICBtb2R1bGVMb2FkZWQ6IHt9XG59O1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqLyBleHBvcnQgY29uc3QgY29uZmlnSW50ZXJuYWxTdG9yZSA9IGNyZWF0ZUdsb2JhbFN0b3JlKCdjb25maWctaW50ZXJuYWwnLCBjb25maWdJbnRlcm5hbFN0b3JlSW5pdGlhbFZhbHVlKTtcbi8qKiBAaW50ZXJuYWwgKi8gZXhwb3J0IGNvbnN0IHRlbXBvcmFyeUNvbmZpZ1N0b3JlID0gY3JlYXRlR2xvYmFsU3RvcmUoJ3RlbXBvcmFyeS1jb25maWcnLCB7XG4gICAgY29uZmlnOiBnZXRUZW1wb3JhcnlDb25maWcoKVxufSk7XG50ZW1wb3JhcnlDb25maWdTdG9yZS5zdWJzY3JpYmUoKHN0YXRlKT0+e1xuICAgIHNldFRlbXBvcmFyeUNvbmZpZyhzdGF0ZS5jb25maWcpO1xufSk7XG5mdW5jdGlvbiBzZXRUZW1wb3JhcnlDb25maWcodmFsdWUpIHtcbiAgICB0cnkge1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnb3Blbm1yczp0ZW1wb3JhcnlDb25maWcnLCBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBsb2NhbFN0b3JhZ2UgbWF5IG5vdCBiZSBhdmFpbGFibGUgaW4gYWxsIGVudmlyb25tZW50c1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldFRlbXBvcmFyeUNvbmZpZygpIHtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnb3Blbm1yczp0ZW1wb3JhcnlDb25maWcnKSB8fCAne30nKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG59XG4vKiogQGludGVybmFsICovIGV4cG9ydCBjb25zdCBjb25maWdFeHRlbnNpb25TdG9yZSA9IGNyZWF0ZUdsb2JhbFN0b3JlKCdjb25maWctc3RvcmUtb2YtZXh0ZW5zaW9uLXN0YXRlJywge1xuICAgIG1vdW50ZWRFeHRlbnNpb25zOiBbXVxufSk7XG5mdW5jdGlvbiBpbml0aWFsaXplQ29uZmlnU3RvcmUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgY29uZmlnOiBudWxsLFxuICAgICAgICBsb2FkZWQ6IGZhbHNlLFxuICAgICAgICB0cmFuc2xhdGlvbk92ZXJyaWRlc0xvYWRlZDogZmFsc2VcbiAgICB9O1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjb25maWd1cmF0aW9uIHN0b3JlIGZvciBhIHNwZWNpZmljIG1vZHVsZS4gRWFjaCBtb2R1bGUgaGFzIGl0c1xuICogb3duIHN0b3JlIHRoYXQgdHJhY2tzIHRoZSBsb2FkaW5nIHN0YXRlIGFuZCByZXNvbHZlZCBjb25maWd1cmF0aW9uIHZhbHVlcy5cbiAqXG4gKiBAcGFyYW0gbW9kdWxlTmFtZSBUaGUgbmFtZSBvZiB0aGUgbW9kdWxlIHdob3NlIGNvbmZpZyBzdG9yZSB0byByZXRyaWV2ZS5cbiAqIEByZXR1cm5zIEEgWnVzdGFuZCBzdG9yZSBjb250YWluaW5nIHRoZSBtb2R1bGUncyBjb25maWd1cmF0aW9uIHN0YXRlLlxuICpcbiAqIEBpbnRlcm5hbFxuICovIGV4cG9ydCBmdW5jdGlvbiBnZXRDb25maWdTdG9yZShtb2R1bGVOYW1lKSB7XG4gICAgLy8gV2UgdXNlIGEgc3RvcmUgZm9yIGVhY2ggbW9kdWxlJ3MgY29uZmlnLCBuYW1lZCBgY29uZmlnLW1vZHVsZS0ke21vZHVsZU5hbWV9YFxuICAgIHJldHVybiBnZXRHbG9iYWxTdG9yZShgY29uZmlnLW1vZHVsZS0ke21vZHVsZU5hbWV9YCwgaW5pdGlhbGl6ZUNvbmZpZ1N0b3JlKCkpO1xufVxuLyoqIEBpbnRlcm5hbCAqLyBleHBvcnQgZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uU2xvdHNDb25maWdTdG9yZSgpIHtcbiAgICByZXR1cm4gZ2V0R2xvYmFsU3RvcmUoYGNvbmZpZy1leHRlbnNpb24tc2xvdHNgLCB7XG4gICAgICAgIHNsb3RzOiB7fVxuICAgIH0pO1xufVxuLyoqIEBpbnRlcm5hbCAqLyBleHBvcnQgZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uU2xvdENvbmZpZyhzbG90TmFtZSkge1xuICAgIHJldHVybiBnZXRFeHRlbnNpb25TbG90Q29uZmlnRnJvbVN0b3JlKGdldEV4dGVuc2lvblNsb3RzQ29uZmlnU3RvcmUoKS5nZXRTdGF0ZSgpLCBzbG90TmFtZSk7XG59XG4vKiogQGludGVybmFsICovIGV4cG9ydCBmdW5jdGlvbiBnZXRFeHRlbnNpb25TbG90Q29uZmlnRnJvbVN0b3JlKHN0YXRlLCBzbG90TmFtZSkge1xuICAgIGNvbnN0IHNsb3RDb25maWcgPSBzdGF0ZS5zbG90c1tzbG90TmFtZV07XG4gICAgcmV0dXJuIHNsb3RDb25maWcgPz8ge1xuICAgICAgICBsb2FkZWQ6IGZhbHNlLFxuICAgICAgICBjb25maWc6IHt9XG4gICAgfTtcbn1cbi8qKlxuICogT25lIHN0b3JlIGZvciBhbGwgdGhlIGV4dGVuc2lvbnNcbiAqIEBpbnRlcm5hbFxuICovIGV4cG9ydCBmdW5jdGlvbiBnZXRFeHRlbnNpb25zQ29uZmlnU3RvcmUoKSB7XG4gICAgcmV0dXJuIGdldEdsb2JhbFN0b3JlKGBjb25maWctZXh0ZW5zaW9uc2AsIHtcbiAgICAgICAgY29uZmlnczoge31cbiAgICB9KTtcbn1cbi8qKlxuICogQSByZWFkLW9ubHkgdmlldyBvZiBvbmUgZXh0ZW5zaW9uIGluc3RhbmNlJ3MgY29uZmlnIHdpdGhpbiBhIHNsb3QuIFJlYWQtb25seSBiZWNhdXNlIHRoZXNlXG4gKiBjb25maWdzIGFyZSBkZXJpdmVkIGZyb20gdGhlIGNvbmZpZyBzeXN0ZW0ncyBpbnB1dHMsIHNvIGEgd3JpdGUgaGVyZSB3b3VsZCBiZSBvdmVyd3JpdHRlbiBieSB0aGVcbiAqIG5leHQgcmVjb21wdXRhdGlvbjsgcHJvdmlkZSBhIGNvbmZpZyBvciBzZXQgYSB0ZW1wb3Jhcnkgb25lIGluc3RlYWQuXG4gKlxuICogQGludGVybmFsXG4gKi8gZXhwb3J0IGZ1bmN0aW9uIGdldEV4dGVuc2lvbkNvbmZpZyhzbG90TmFtZSwgZXh0ZW5zaW9uSWQpIHtcbiAgICBpZiAodHlwZW9mIHNsb3ROYW1lICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgZXh0ZW5zaW9uSWQgIT09ICdzdHJpbmcnIHx8IHNsb3ROYW1lID09PSAnX19wcm90b19fJyB8fCBleHRlbnNpb25JZCA9PT0gJ19fcHJvdG9fXycgfHwgc2xvdE5hbWUgPT09ICdjb25zdHJ1Y3RvcicgfHwgZXh0ZW5zaW9uSWQgPT09ICdjb25zdHJ1Y3RvcicgfHwgc2xvdE5hbWUgPT09ICdwcm90b3R5cGUnIHx8IGV4dGVuc2lvbklkID09PSAncHJvdG90eXBlJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0F0dGVtcHRlZCB0byBjYWxsIGBnZXRFeHRlbnNpb25Db25maWcoKWAgd2l0aCBpbnZhbGlkIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIGNvbnN0IGV4dGVuc2lvbkNvbmZpZ1N0b3JlID0gZ2V0RXh0ZW5zaW9uc0NvbmZpZ1N0b3JlKCk7XG4gICAgY29uc3Qgc2VsZWN0b3IgPSAoY29uZmlnU3RvcmUpPT5jb25maWdTdG9yZS5jb25maWdzW3Nsb3ROYW1lXT8uW2V4dGVuc2lvbklkXTtcbiAgICByZXR1cm4ge1xuICAgICAgICBnZXRJbml0aWFsU3RhdGUgKCkge1xuICAgICAgICAgICAgcmV0dXJuIHNlbGVjdG9yKGV4dGVuc2lvbkNvbmZpZ1N0b3JlLmdldEluaXRpYWxTdGF0ZSgpKTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0U3RhdGUgKCkge1xuICAgICAgICAgICAgcmV0dXJuIHNlbGVjdG9yKGV4dGVuc2lvbkNvbmZpZ1N0b3JlLmdldFN0YXRlKCkpID8/IHtcbiAgICAgICAgICAgICAgICBsb2FkZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGNvbmZpZzogbnVsbFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgc3Vic2NyaWJlIChsaXN0ZW5lcikge1xuICAgICAgICAgICAgcmV0dXJuIGV4dGVuc2lvbkNvbmZpZ1N0b3JlLnN1YnNjcmliZSgoc3RhdGUsIHByZXZTdGF0ZSk9PntcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdTdGF0ZSA9IHNlbGVjdG9yKHN0YXRlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBvbGRTdGF0ZSA9IHNlbGVjdG9yKHByZXZTdGF0ZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFzaGFsbG93RXF1YWwobmV3U3RhdGUsIG9sZFN0YXRlKSkge1xuICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcihuZXdTdGF0ZSwgb2xkU3RhdGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbn1cbi8qKiBAaW50ZXJuYWwgKi8gZXhwb3J0IGZ1bmN0aW9uIGdldEV4dGVuc2lvbkNvbmZpZ0Zyb21TdG9yZShzdGF0ZSwgc2xvdE5hbWUsIGV4dGVuc2lvbklkKSB7XG4gICAgY29uc3QgZXh0ZW5zaW9uQ29uZmlnID0gc3RhdGUuY29uZmlnc1tzbG90TmFtZV0/LltleHRlbnNpb25JZF07XG4gICAgcmV0dXJuIGV4dGVuc2lvbkNvbmZpZyA/PyB7XG4gICAgICAgIGxvYWRlZDogZmFsc2UsXG4gICAgICAgIGNvbmZpZzogbnVsbFxuICAgIH07XG59XG4vKiogQGludGVybmFsICovIGV4cG9ydCBmdW5jdGlvbiBnZXRFeHRlbnNpb25Db25maWdGcm9tRXh0ZW5zaW9uU2xvdFN0b3JlKHN0YXRlLCBzbG90TmFtZSwgZXh0ZW5zaW9uSWQpIHtcbiAgICBjb25zdCBleHRlbnNpb25Db25maWcgPSBzdGF0ZS5jb25maWd1cmU/LltleHRlbnNpb25JZF07XG4gICAgcmV0dXJuIGV4dGVuc2lvbkNvbmZpZyA/PyBudWxsO1xufVxuLy8gRGVsaWJlcmF0ZWx5IG5vdCByZWdpc3RlcmVkOiB0aGUgd3JhcHBlciBiZWxvdyBpcyB3aGF0IGdldHMgcHVibGlzaGVkIHVuZGVyXG4vLyBgY29uZmlnLWltcGxlbWVudGVyLXRvb2xzYCwgc28gdGhhdCBhIGxvb2t1cCBjYW4ndCBoYW5kIG91dCB0aGUgc3RvcmUgdGhhdCBza2lwcyB0aGUgZGVyaXZhdGlvbi5cbmNvbnN0IGJhc2VJbXBsZW1lbnRlclRvb2xzQ29uZmlnU3RvcmUgPSBjcmVhdGVTdG9yZSgpKCgpPT4oe1xuICAgICAgICBjb25maWc6IHt9XG4gICAgfSkpO1xuLyoqXG4gKiBEZXJpdmluZyB0aGlzIGNvbmZpZyB3YWxrcyBldmVyeSBtb2R1bGUncyBzY2hlbWEsIG1ha2luZyBpdCB0aGUgbW9zdCBleHBlbnNpdmUgdGhpbmcgdGhlIGNvbmZpZ1xuICogc3lzdGVtIGNvbXB1dGVzIOKAlCBhbmQgbm90aGluZyBidXQgdGhlIGltcGxlbWVudGVyIHRvb2xzIHBhbmVsIHJlYWRzIGl0LiBTbyBpdCBpcyBvbmx5IGtlcHQgY3VycmVudFxuICogd2hpbGUgc29tZXRoaW5nIGlzIHN1YnNjcmliZWQ7IG90aGVyd2lzZSBjb25maWcgY2hhbmdlcyBqdXN0IG1hcmsgaXQgc3RhbGUuXG4gKi8gbGV0IGltcGxlbWVudGVyVG9vbHNTdWJzY3JpYmVycyA9IDA7XG5sZXQgaW1wbGVtZW50ZXJUb29sc0NvbmZpZ1N0YWxlID0gdHJ1ZTtcbmxldCBpc1JlY29tcHV0aW5nID0gZmFsc2U7XG5sZXQgcmVjb21wdXRlSW1wbGVtZW50ZXJUb29sc0NvbmZpZztcbi8qKlxuICogUmVnaXN0ZXJzIGhvdyB0byBkZXJpdmUgdGhlIGltcGxlbWVudGVyIHRvb2xzIGNvbmZpZzsgdGhlIHN0b3JlIGRlY2lkZXMgd2hldGhlciB0by5cbiAqIEBpbnRlcm5hbFxuICovIGV4cG9ydCBmdW5jdGlvbiBzZXRJbXBsZW1lbnRlclRvb2xzQ29uZmlnUmVjb21wdXRlcihyZWNvbXB1dGUpIHtcbiAgICByZWNvbXB1dGVJbXBsZW1lbnRlclRvb2xzQ29uZmlnID0gcmVjb21wdXRlO1xufVxuLyoqXG4gKiBNYXJrcyB0aGUgaW1wbGVtZW50ZXIgdG9vbHMgY29uZmlnIHN0YWxlLCBkZXJpdmluZyBpdCBhZ2FpbiBvbmx5IGlmIHNvbWV0aGluZyBpcyB3YXRjaGluZy5cbiAqIEBpbnRlcm5hbFxuICovIGV4cG9ydCBmdW5jdGlvbiBpbnZhbGlkYXRlSW1wbGVtZW50ZXJUb29sc0NvbmZpZygpIHtcbiAgICBpbXBsZW1lbnRlclRvb2xzQ29uZmlnU3RhbGUgPSB0cnVlO1xuICAgIGlmIChpbXBsZW1lbnRlclRvb2xzU3Vic2NyaWJlcnMgPiAwKSB7XG4gICAgICAgIHJlY29tcHV0ZUltcGxlbWVudGVyVG9vbHNDb25maWdJZlN0YWxlKCk7XG4gICAgfVxufVxuZnVuY3Rpb24gcmVjb21wdXRlSW1wbGVtZW50ZXJUb29sc0NvbmZpZ0lmU3RhbGUoKSB7XG4gICAgaWYgKCFpbXBsZW1lbnRlclRvb2xzQ29uZmlnU3RhbGUgfHwgIXJlY29tcHV0ZUltcGxlbWVudGVyVG9vbHNDb25maWcgfHwgaXNSZWNvbXB1dGluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlzUmVjb21wdXRpbmcgPSB0cnVlO1xuICAgIC8vIENsZWFyZWQgYmVmb3JlIHRoZSB3b3JrLCBzbyB0aGF0IGEgY29uZmlnIGNoYW5nZSBtYWRlIHdoaWxlIGl0IHJ1bnMgbWFya3MgdGhpcyBzdGFsZSBhZ2FpblxuICAgIC8vIGluc3RlYWQgb2YgYmVpbmcgd2lwZWQgd2hlbiB0aGUgcGFzcyBmaW5pc2hlcy5cbiAgICBpbXBsZW1lbnRlclRvb2xzQ29uZmlnU3RhbGUgPSBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgICByZWNvbXB1dGVJbXBsZW1lbnRlclRvb2xzQ29uZmlnKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpbXBsZW1lbnRlclRvb2xzQ29uZmlnU3RhbGUgPSB0cnVlO1xuICAgICAgICByZWNvcmRDb25maWdEZXJpdmF0aW9uRXJyb3IoZSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBkZXJpdmUgdGhlIGltcGxlbWVudGVyIHRvb2xzIGNvbmZpZycsIGUpO1xuICAgIH0gZmluYWxseXtcbiAgICAgICAgaXNSZWNvbXB1dGluZyA9IGZhbHNlO1xuICAgIH1cbn1cbi8qKlxuICogUmVjb3JkcyB0aGF0IGNvbmZpZ3VyYXRpb24gY291bGQgbm90IGJlIHJlYnVpbHQgc28gdGhhdCB0aGUgdXNlciBjYW4gYmUgaW5mb3JtZWRcbiAqXG4gKiBAaW50ZXJuYWxcbiAqLyBleHBvcnQgZnVuY3Rpb24gcmVjb3JkQ29uZmlnRGVyaXZhdGlvbkVycm9yKGVycm9yKSB7XG4gICAgYmFzZUltcGxlbWVudGVyVG9vbHNDb25maWdTdG9yZS5zZXRTdGF0ZSh7XG4gICAgICAgIGRlcml2YXRpb25FcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpXG4gICAgfSk7XG59XG4vKipcbiAqIENsZWFyZWQgYXQgdGhlIHN0YXJ0IG9mIGEgZGVyaXZhdGlvbiBwYXNzIHJhdGhlciB0aGFuIHRoZSBlbmQgb2YgYSBzdWNjZXNzZnVsIG9uZSwgc28gdGhhdCBhXG4gKiBmYWlsdXJlIHJlY29yZGVkIHBhcnR3YXkgdGhyb3VnaCB0aGUgcGFzcyBpcyBub3Qgd2lwZWQgYnkgdGhlIHBhc3MgY29tcGxldGluZy5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqLyBleHBvcnQgZnVuY3Rpb24gY2xlYXJDb25maWdEZXJpdmF0aW9uRXJyb3IoKSB7XG4gICAgaWYgKGJhc2VJbXBsZW1lbnRlclRvb2xzQ29uZmlnU3RvcmUuZ2V0U3RhdGUoKS5kZXJpdmF0aW9uRXJyb3IpIHtcbiAgICAgICAgYmFzZUltcGxlbWVudGVyVG9vbHNDb25maWdTdG9yZS5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBkZXJpdmF0aW9uRXJyb3I6IHVuZGVmaW5lZFxuICAgICAgICB9KTtcbiAgICB9XG59XG5jb25zdCBsYXp5SW1wbGVtZW50ZXJUb29sc0NvbmZpZ1N0b3JlID0ge1xuICAgIC4uLmJhc2VJbXBsZW1lbnRlclRvb2xzQ29uZmlnU3RvcmUsXG4gICAgZ2V0U3RhdGUgKCkge1xuICAgICAgICAvLyBXaGlsZSBzb21ldGhpbmcgaXMgc3Vic2NyaWJlZCB0aGUgc3RvcmUgaXMgYWxyZWFkeSBjdXJyZW50LCBzbyBhIHJlYWQgY29zdHMgbm90aGluZy4gVGhpc1xuICAgICAgICAvLyBicmFuY2ggaXMgd2hhdCBzZXJ2ZXMgdGhlIHBhbmVsJ3MgdmVyeSBmaXJzdCByZW5kZXIsIGJlZm9yZSBpdCBoYXMgc3Vic2NyaWJlZC5cbiAgICAgICAgaWYgKGltcGxlbWVudGVyVG9vbHNTdWJzY3JpYmVycyA9PT0gMCkge1xuICAgICAgICAgICAgcmVjb21wdXRlSW1wbGVtZW50ZXJUb29sc0NvbmZpZ0lmU3RhbGUoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYmFzZUltcGxlbWVudGVyVG9vbHNDb25maWdTdG9yZS5nZXRTdGF0ZSgpO1xuICAgIH0sXG4gICAgc2V0U3RhdGUgKC4uLmFyZ3MpIHtcbiAgICAgICAgLy8gQW4gZXhwbGljaXQgd3JpdGUgaXMgdGhlIGN1cnJlbnQgdmFsdWUgYnkgZGVmaW5pdGlvbiwgc28gZG9uJ3Qgb3ZlcndyaXRlIGl0IG9uIHRoZSBuZXh0IHJlYWQuXG4gICAgICAgIGltcGxlbWVudGVyVG9vbHNDb25maWdTdGFsZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gYmFzZUltcGxlbWVudGVyVG9vbHNDb25maWdTdG9yZS5zZXRTdGF0ZSguLi5hcmdzKTtcbiAgICB9LFxuICAgIHN1YnNjcmliZSAobGlzdGVuZXIpIHtcbiAgICAgICAgaW1wbGVtZW50ZXJUb29sc1N1YnNjcmliZXJzKys7XG4gICAgICAgIHJlY29tcHV0ZUltcGxlbWVudGVyVG9vbHNDb25maWdJZlN0YWxlKCk7XG4gICAgICAgIGNvbnN0IHVuc3Vic2NyaWJlID0gYmFzZUltcGxlbWVudGVyVG9vbHNDb25maWdTdG9yZS5zdWJzY3JpYmUobGlzdGVuZXIpO1xuICAgICAgICBsZXQgaGFzVW5zdWJzY3JpYmVkID0gZmFsc2U7XG4gICAgICAgIHJldHVybiAoKT0+e1xuICAgICAgICAgICAgaWYgKCFoYXNVbnN1YnNjcmliZWQpIHtcbiAgICAgICAgICAgICAgICBoYXNVbnN1YnNjcmliZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGltcGxlbWVudGVyVG9vbHNTdWJzY3JpYmVycy0tO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfTtcbiAgICB9XG59O1xuLyoqXG4gKiBQdWJsaXNoZWQgcmF0aGVyIHRoYW4gdGhlIHN0b3JlIGl0IHdyYXBzLCBzbyB0aGF0IGEgbG9va3VwIGJ5IG5hbWUgY2FuJ3QgaGFuZCBvdXQgdGhlIG9uZSB0aGF0XG4gKiBza2lwcyB0aGUgZGVyaXZhdGlvbiBhbmQgYWx3YXlzIHJlYWRzIGVtcHR5LlxuICpcbiAqIEBpbnRlcm5hbFxuICovIGV4cG9ydCBjb25zdCBpbXBsZW1lbnRlclRvb2xzQ29uZmlnU3RvcmUgPSByZWdpc3Rlckdsb2JhbFN0b3JlKCdjb25maWctaW1wbGVtZW50ZXItdG9vbHMnLCBsYXp5SW1wbGVtZW50ZXJUb29sc0NvbmZpZ1N0b3JlKTtcbiJdLCJuYW1lcyI6WyJjcmVhdGVHbG9iYWxTdG9yZSIsImdldEdsb2JhbFN0b3JlIiwicmVnaXN0ZXJHbG9iYWxTdG9yZSIsInNoYWxsb3dFcXVhbCIsImNyZWF0ZVN0b3JlIiwiY29uZmlnSW50ZXJuYWxTdG9yZUluaXRpYWxWYWx1ZSIsImNvbmZpZ0ludGVybmFsU3RvcmUiLCJ0ZW1wb3JhcnlDb25maWdTdG9yZSIsImdldFRlbXBvcmFyeUNvbmZpZyIsInN0YXRlIiwic2V0VGVtcG9yYXJ5Q29uZmlnIiwidmFsdWUiLCJsb2NhbFN0b3JhZ2UiLCJKU09OIiwiZSIsImNvbmZpZ0V4dGVuc2lvblN0b3JlIiwiaW5pdGlhbGl6ZUNvbmZpZ1N0b3JlIiwiZ2V0Q29uZmlnU3RvcmUiLCJtb2R1bGVOYW1lIiwiZ2V0RXh0ZW5zaW9uU2xvdHNDb25maWdTdG9yZSIsImdldEV4dGVuc2lvblNsb3RDb25maWciLCJzbG90TmFtZSIsImdldEV4dGVuc2lvblNsb3RDb25maWdGcm9tU3RvcmUiLCJzbG90Q29uZmlnIiwiZ2V0RXh0ZW5zaW9uc0NvbmZpZ1N0b3JlIiwiZ2V0RXh0ZW5zaW9uQ29uZmlnIiwiZXh0ZW5zaW9uSWQiLCJFcnJvciIsImV4dGVuc2lvbkNvbmZpZ1N0b3JlIiwic2VsZWN0b3IiLCJjb25maWdTdG9yZSIsImxpc3RlbmVyIiwicHJldlN0YXRlIiwibmV3U3RhdGUiLCJvbGRTdGF0ZSIsImdldEV4dGVuc2lvbkNvbmZpZ0Zyb21TdG9yZSIsImV4dGVuc2lvbkNvbmZpZyIsImdldEV4dGVuc2lvbkNvbmZpZ0Zyb21FeHRlbnNpb25TbG90U3RvcmUiLCJiYXNlSW1wbGVtZW50ZXJUb29sc0NvbmZpZ1N0b3JlIiwiaW1wbGVtZW50ZXJUb29sc1N1YnNjcmliZXJzIiwiaW1wbGVtZW50ZXJUb29sc0NvbmZpZ1N0YWxlIiwiaXNSZWNvbXB1dGluZyIsInJlY29tcHV0ZUltcGxlbWVudGVyVG9vbHNDb25maWciLCJzZXRJbXBsZW1lbnRlclRvb2xzQ29uZmlnUmVjb21wdXRlciIsInJlY29tcHV0ZSIsImludmFsaWRhdGVJbXBsZW1lbnRlclRvb2xzQ29uZmlnIiwicmVjb21wdXRlSW1wbGVtZW50ZXJUb29sc0NvbmZpZ0lmU3RhbGUiLCJyZWNvcmRDb25maWdEZXJpdmF0aW9uRXJyb3IiLCJjb25zb2xlIiwiZXJyb3IiLCJTdHJpbmciLCJjbGVhckNvbmZpZ0Rlcml2YXRpb25FcnJvciIsInVuZGVmaW5lZCIsImxhenlJbXBsZW1lbnRlclRvb2xzQ29uZmlnU3RvcmUiLCJhcmdzIiwidW5zdWJzY3JpYmUiLCJoYXNVbnN1YnNjcmliZWQiLCJpbXBsZW1lbnRlclRvb2xzQ29uZmlnU3RvcmUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBNEY7QUFDMUM7QUFDSjtBQUM5QyxNQUFNSyxrQ0FBa0M7SUFDcEMsaUJBQWlCLEVBQUU7SUFDbkIsU0FBUyxDQUFDO0lBQ1YsY0FBYyxDQUFDO0FBQ25CO0FBQ0E7O0NBRUMsR0FBVSxNQUFNQyxzQkFBc0JOLHlEQUFpQkEsQ0FBQyxtQkFBbUJLLGlDQUFpQztBQUM3RyxjQUFjLEdBQVUsTUFBTUUsdUJBQXVCUCx5REFBaUJBLENBQUMsb0JBQW9CO0lBQ3ZGLFFBQVFRO0FBQ1osR0FBRztBQUNIRCxxQkFBcUIsU0FBUyxDQUFDLENBQUNFO0lBQzVCQyxtQkFBbUJELE1BQU0sTUFBTTtBQUNuQztBQUNBLFNBQVNDLG1CQUFtQkMsS0FBSztJQUM3QixJQUFJO1FBQ0FDLGFBQWEsT0FBTyxDQUFDLDJCQUEyQkMsS0FBSyxTQUFTLENBQUNGO0lBQ25FLEVBQUUsT0FBT0csR0FBRztJQUNaLHdEQUF3RDtJQUN4RDtBQUNKO0FBQ0EsU0FBU047SUFDTCxJQUFJO1FBQ0EsT0FBT0ssS0FB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\n//# sourceURL=webpack-internal:///../../framework/esm-config/dist/module-config/state.js\n\n}");
|
|
4484
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n__webpack_require__.d(__webpack_exports__, {\n clearConfigDerivationError: () => (clearConfigDerivationError),\n configExtensionStore: () => (configExtensionStore),\n configInternalStore: () => (configInternalStore),\n getConfigStore: () => (getConfigStore),\n getExtensionConfigFromExtensionSlotStore: () => (getExtensionConfigFromExtensionSlotStore),\n getExtensionConfigFromStore: () => (getExtensionConfigFromStore),\n getExtensionSlotConfig: () => (getExtensionSlotConfig),\n getExtensionSlotConfigFromStore: () => (getExtensionSlotConfigFromStore),\n getExtensionSlotsConfigStore: () => (getExtensionSlotsConfigStore),\n getExtensionsConfigStore: () => (getExtensionsConfigStore),\n implementerToolsConfigStore: () => (implementerToolsConfigStore),\n invalidateImplementerToolsConfig: () => (invalidateImplementerToolsConfig),\n recordConfigDerivationError: () => (recordConfigDerivationError),\n setImplementerToolsConfigRecomputer: () => (setImplementerToolsConfigRecomputer),\n temporaryConfigStore: () => (temporaryConfigStore)\n});\n/* import */ var _openmrs_esm_state__rspack_import_0 = __webpack_require__(\"../../framework/esm-state/dist/index.js\");\n/* import */ var zustand_vanilla__rspack_import_1 = __webpack_require__(\"../../../node_modules/zustand/esm/vanilla.mjs\");\n\n\nconst configInternalStoreInitialValue = {\n providedConfigs: [],\n schemas: {},\n moduleLoaded: {}\n};\n/**\n * @internal\n */ const configInternalStore = (0,_openmrs_esm_state__rspack_import_0.createGlobalStore)('config-internal', configInternalStoreInitialValue);\n/** @internal */ const temporaryConfigStore = (0,_openmrs_esm_state__rspack_import_0.createGlobalStore)('temporary-config', {\n config: getTemporaryConfig()\n});\ntemporaryConfigStore.subscribe((state)=>{\n setTemporaryConfig(state.config);\n});\nfunction setTemporaryConfig(value) {\n try {\n localStorage.setItem('openmrs:temporaryConfig', JSON.stringify(value));\n } catch (e) {\n // localStorage may not be available in all environments\n }\n}\nfunction getTemporaryConfig() {\n try {\n return JSON.parse(localStorage.getItem('openmrs:temporaryConfig') || '{}');\n } catch (e) {\n return {};\n }\n}\n/** @internal */ const configExtensionStore = (0,_openmrs_esm_state__rspack_import_0.createGlobalStore)('config-store-of-extension-state', {\n mountedExtensions: []\n});\nfunction initializeConfigStore() {\n return {\n config: null,\n loaded: false,\n translationOverridesLoaded: false\n };\n}\n/**\n * Returns the configuration store for a specific module. Each module has its\n * own store that tracks the loading state and resolved configuration values.\n *\n * @param moduleName The name of the module whose config store to retrieve.\n * @returns A Zustand store containing the module's configuration state.\n *\n * @internal\n */ function getConfigStore(moduleName) {\n // We use a store for each module's config, named `config-module-${moduleName}`\n return (0,_openmrs_esm_state__rspack_import_0.getGlobalStore)(`config-module-${moduleName}`, initializeConfigStore());\n}\n/** @internal */ function getExtensionSlotsConfigStore() {\n return (0,_openmrs_esm_state__rspack_import_0.getGlobalStore)(`config-extension-slots`, {\n slots: {}\n });\n}\n/** @internal */ function getExtensionSlotConfig(slotName) {\n return getExtensionSlotConfigFromStore(getExtensionSlotsConfigStore().getState(), slotName);\n}\n/** @internal */ function getExtensionSlotConfigFromStore(state, slotName) {\n const slotConfig = state.slots[slotName];\n return slotConfig ?? {\n loaded: false,\n config: {}\n };\n}\n/**\n * One store for all the extensions\n * @internal\n */ function getExtensionsConfigStore() {\n return (0,_openmrs_esm_state__rspack_import_0.getGlobalStore)(`config-extensions`, {\n configs: {}\n });\n}\n/** @internal */ function getExtensionConfigFromStore(state, slotName, extensionId) {\n const extensionConfig = state.configs[slotName]?.[extensionId];\n return extensionConfig ?? {\n loaded: false,\n config: null\n };\n}\n/** @internal */ function getExtensionConfigFromExtensionSlotStore(state, slotName, extensionId) {\n const extensionConfig = state.configure?.[extensionId];\n return extensionConfig ?? null;\n}\n// Deliberately not registered: the wrapper below is what gets published under\n// `config-implementer-tools`, so that a lookup can't hand out the store that skips the derivation.\nconst baseImplementerToolsConfigStore = (0,zustand_vanilla__rspack_import_1.createStore)()(()=>({\n config: {}\n }));\n/**\n * Deriving this config walks every module's schema, making it the most expensive thing the config\n * system computes — and nothing but the implementer tools panel reads it. So it is only kept current\n * while something is subscribed; otherwise config changes just mark it stale.\n */ let implementerToolsSubscribers = 0;\nlet implementerToolsConfigStale = true;\nlet isRecomputing = false;\nlet recomputeImplementerToolsConfig;\n/**\n * Registers how to derive the implementer tools config; the store decides whether to.\n * @internal\n */ function setImplementerToolsConfigRecomputer(recompute) {\n recomputeImplementerToolsConfig = recompute;\n}\n/**\n * Marks the implementer tools config stale, deriving it again only if something is watching.\n * @internal\n */ function invalidateImplementerToolsConfig() {\n implementerToolsConfigStale = true;\n if (implementerToolsSubscribers > 0) {\n recomputeImplementerToolsConfigIfStale();\n }\n}\nfunction recomputeImplementerToolsConfigIfStale() {\n if (!implementerToolsConfigStale || !recomputeImplementerToolsConfig || isRecomputing) {\n return;\n }\n isRecomputing = true;\n // Cleared before the work, so that a config change made while it runs marks this stale again\n // instead of being wiped when the pass finishes.\n implementerToolsConfigStale = false;\n try {\n recomputeImplementerToolsConfig();\n } catch (e) {\n implementerToolsConfigStale = true;\n recordConfigDerivationError(e);\n console.error('Failed to derive the implementer tools config', e);\n } finally{\n isRecomputing = false;\n }\n}\n/**\n * Records that configuration could not be rebuilt so that the user can be informed\n *\n * @internal\n */ function recordConfigDerivationError(error) {\n baseImplementerToolsConfigStore.setState({\n derivationError: error instanceof Error ? error.message : String(error)\n });\n}\n/**\n * Cleared at the start of a derivation pass rather than the end of a successful one, so that a\n * failure recorded partway through the pass is not wiped by the pass completing.\n *\n * @internal\n */ function clearConfigDerivationError() {\n if (baseImplementerToolsConfigStore.getState().derivationError) {\n baseImplementerToolsConfigStore.setState({\n derivationError: undefined\n });\n }\n}\nconst lazyImplementerToolsConfigStore = {\n ...baseImplementerToolsConfigStore,\n getState () {\n // While something is subscribed the store is already current, so a read costs nothing. This\n // branch is what serves the panel's very first render, before it has subscribed.\n if (implementerToolsSubscribers === 0) {\n recomputeImplementerToolsConfigIfStale();\n }\n return baseImplementerToolsConfigStore.getState();\n },\n setState (...args) {\n // An explicit write is the current value by definition, so don't overwrite it on the next read.\n implementerToolsConfigStale = false;\n return baseImplementerToolsConfigStore.setState(...args);\n },\n subscribe (listener) {\n implementerToolsSubscribers++;\n recomputeImplementerToolsConfigIfStale();\n const unsubscribe = baseImplementerToolsConfigStore.subscribe(listener);\n let hasUnsubscribed = false;\n return ()=>{\n if (!hasUnsubscribed) {\n hasUnsubscribed = true;\n implementerToolsSubscribers--;\n }\n unsubscribe();\n };\n }\n};\n/**\n * Published rather than the store it wraps, so that a lookup by name can't hand out the one that\n * skips the derivation and always reads empty.\n *\n * @internal\n */ const implementerToolsConfigStore = (0,_openmrs_esm_state__rspack_import_0.registerGlobalStore)('config-implementer-tools', lazyImplementerToolsConfigStore);\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YXNjcmlwdC9lc218YnVpbHRpbjpzd2MtbG9hZGVyPz9ydWxlU2V0WzFdLnJ1bGVzWzVdLnVzZVswXSEvaG9tZS9ydW5uZXIvd29yay9vcGVubXJzLWVzbS1jb3JlL29wZW5tcnMtZXNtLWNvcmUvcGFja2FnZXMvZnJhbWV3b3JrL2VzbS1jb25maWcvZGlzdC9tb2R1bGUtY29uZmlnL3N0YXRlLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQG9wZW5tcnMvZXNtLWFwcC1zaGVsbC8uLi8uLi9mcmFtZXdvcmsvZXNtLWNvbmZpZy9kaXN0L21vZHVsZS1jb25maWcvc3RhdGUuanM/YjhhZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVHbG9iYWxTdG9yZSwgZ2V0R2xvYmFsU3RvcmUsIHJlZ2lzdGVyR2xvYmFsU3RvcmUgfSBmcm9tIFwiQG9wZW5tcnMvZXNtLXN0YXRlXCI7XG5pbXBvcnQgeyBjcmVhdGVTdG9yZSB9IGZyb20gXCJ6dXN0YW5kL3ZhbmlsbGFcIjtcbmNvbnN0IGNvbmZpZ0ludGVybmFsU3RvcmVJbml0aWFsVmFsdWUgPSB7XG4gICAgcHJvdmlkZWRDb25maWdzOiBbXSxcbiAgICBzY2hlbWFzOiB7fSxcbiAgICBtb2R1bGVMb2FkZWQ6IHt9XG59O1xuLyoqXG4gKiBAaW50ZXJuYWxcbiAqLyBleHBvcnQgY29uc3QgY29uZmlnSW50ZXJuYWxTdG9yZSA9IGNyZWF0ZUdsb2JhbFN0b3JlKCdjb25maWctaW50ZXJuYWwnLCBjb25maWdJbnRlcm5hbFN0b3JlSW5pdGlhbFZhbHVlKTtcbi8qKiBAaW50ZXJuYWwgKi8gZXhwb3J0IGNvbnN0IHRlbXBvcmFyeUNvbmZpZ1N0b3JlID0gY3JlYXRlR2xvYmFsU3RvcmUoJ3RlbXBvcmFyeS1jb25maWcnLCB7XG4gICAgY29uZmlnOiBnZXRUZW1wb3JhcnlDb25maWcoKVxufSk7XG50ZW1wb3JhcnlDb25maWdTdG9yZS5zdWJzY3JpYmUoKHN0YXRlKT0+e1xuICAgIHNldFRlbXBvcmFyeUNvbmZpZyhzdGF0ZS5jb25maWcpO1xufSk7XG5mdW5jdGlvbiBzZXRUZW1wb3JhcnlDb25maWcodmFsdWUpIHtcbiAgICB0cnkge1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnb3Blbm1yczp0ZW1wb3JhcnlDb25maWcnLCBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBsb2NhbFN0b3JhZ2UgbWF5IG5vdCBiZSBhdmFpbGFibGUgaW4gYWxsIGVudmlyb25tZW50c1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldFRlbXBvcmFyeUNvbmZpZygpIHtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnb3Blbm1yczp0ZW1wb3JhcnlDb25maWcnKSB8fCAne30nKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG59XG4vKiogQGludGVybmFsICovIGV4cG9ydCBjb25zdCBjb25maWdFeHRlbnNpb25TdG9yZSA9IGNyZWF0ZUdsb2JhbFN0b3JlKCdjb25maWctc3RvcmUtb2YtZXh0ZW5zaW9uLXN0YXRlJywge1xuICAgIG1vdW50ZWRFeHRlbnNpb25zOiBbXVxufSk7XG5mdW5jdGlvbiBpbml0aWFsaXplQ29uZmlnU3RvcmUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgY29uZmlnOiBudWxsLFxuICAgICAgICBsb2FkZWQ6IGZhbHNlLFxuICAgICAgICB0cmFuc2xhdGlvbk92ZXJyaWRlc0xvYWRlZDogZmFsc2VcbiAgICB9O1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjb25maWd1cmF0aW9uIHN0b3JlIGZvciBhIHNwZWNpZmljIG1vZHVsZS4gRWFjaCBtb2R1bGUgaGFzIGl0c1xuICogb3duIHN0b3JlIHRoYXQgdHJhY2tzIHRoZSBsb2FkaW5nIHN0YXRlIGFuZCByZXNvbHZlZCBjb25maWd1cmF0aW9uIHZhbHVlcy5cbiAqXG4gKiBAcGFyYW0gbW9kdWxlTmFtZSBUaGUgbmFtZSBvZiB0aGUgbW9kdWxlIHdob3NlIGNvbmZpZyBzdG9yZSB0byByZXRyaWV2ZS5cbiAqIEByZXR1cm5zIEEgWnVzdGFuZCBzdG9yZSBjb250YWluaW5nIHRoZSBtb2R1bGUncyBjb25maWd1cmF0aW9uIHN0YXRlLlxuICpcbiAqIEBpbnRlcm5hbFxuICovIGV4cG9ydCBmdW5jdGlvbiBnZXRDb25maWdTdG9yZShtb2R1bGVOYW1lKSB7XG4gICAgLy8gV2UgdXNlIGEgc3RvcmUgZm9yIGVhY2ggbW9kdWxlJ3MgY29uZmlnLCBuYW1lZCBgY29uZmlnLW1vZHVsZS0ke21vZHVsZU5hbWV9YFxuICAgIHJldHVybiBnZXRHbG9iYWxTdG9yZShgY29uZmlnLW1vZHVsZS0ke21vZHVsZU5hbWV9YCwgaW5pdGlhbGl6ZUNvbmZpZ1N0b3JlKCkpO1xufVxuLyoqIEBpbnRlcm5hbCAqLyBleHBvcnQgZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uU2xvdHNDb25maWdTdG9yZSgpIHtcbiAgICByZXR1cm4gZ2V0R2xvYmFsU3RvcmUoYGNvbmZpZy1leHRlbnNpb24tc2xvdHNgLCB7XG4gICAgICAgIHNsb3RzOiB7fVxuICAgIH0pO1xufVxuLyoqIEBpbnRlcm5hbCAqLyBleHBvcnQgZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uU2xvdENvbmZpZyhzbG90TmFtZSkge1xuICAgIHJldHVybiBnZXRFeHRlbnNpb25TbG90Q29uZmlnRnJvbVN0b3JlKGdldEV4dGVuc2lvblNsb3RzQ29uZmlnU3RvcmUoKS5nZXRTdGF0ZSgpLCBzbG90TmFtZSk7XG59XG4vKiogQGludGVybmFsICovIGV4cG9ydCBmdW5jdGlvbiBnZXRFeHRlbnNpb25TbG90Q29uZmlnRnJvbVN0b3JlKHN0YXRlLCBzbG90TmFtZSkge1xuICAgIGNvbnN0IHNsb3RDb25maWcgPSBzdGF0ZS5zbG90c1tzbG90TmFtZV07XG4gICAgcmV0dXJuIHNsb3RDb25maWcgPz8ge1xuICAgICAgICBsb2FkZWQ6IGZhbHNlLFxuICAgICAgICBjb25maWc6IHt9XG4gICAgfTtcbn1cbi8qKlxuICogT25lIHN0b3JlIGZvciBhbGwgdGhlIGV4dGVuc2lvbnNcbiAqIEBpbnRlcm5hbFxuICovIGV4cG9ydCBmdW5jdGlvbiBnZXRFeHRlbnNpb25zQ29uZmlnU3RvcmUoKSB7XG4gICAgcmV0dXJuIGdldEdsb2JhbFN0b3JlKGBjb25maWctZXh0ZW5zaW9uc2AsIHtcbiAgICAgICAgY29uZmlnczoge31cbiAgICB9KTtcbn1cbi8qKiBAaW50ZXJuYWwgKi8gZXhwb3J0IGZ1bmN0aW9uIGdldEV4dGVuc2lvbkNvbmZpZ0Zyb21TdG9yZShzdGF0ZSwgc2xvdE5hbWUsIGV4dGVuc2lvbklkKSB7XG4gICAgY29uc3QgZXh0ZW5zaW9uQ29uZmlnID0gc3RhdGUuY29uZmlnc1tzbG90TmFtZV0/LltleHRlbnNpb25JZF07XG4gICAgcmV0dXJuIGV4dGVuc2lvbkNvbmZpZyA/PyB7XG4gICAgICAgIGxvYWRlZDogZmFsc2UsXG4gICAgICAgIGNvbmZpZzogbnVsbFxuICAgIH07XG59XG4vKiogQGludGVybmFsICovIGV4cG9ydCBmdW5jdGlvbiBnZXRFeHRlbnNpb25Db25maWdGcm9tRXh0ZW5zaW9uU2xvdFN0b3JlKHN0YXRlLCBzbG90TmFtZSwgZXh0ZW5zaW9uSWQpIHtcbiAgICBjb25zdCBleHRlbnNpb25Db25maWcgPSBzdGF0ZS5jb25maWd1cmU/LltleHRlbnNpb25JZF07XG4gICAgcmV0dXJuIGV4dGVuc2lvbkNvbmZpZyA/PyBudWxsO1xufVxuLy8gRGVsaWJlcmF0ZWx5IG5vdCByZWdpc3RlcmVkOiB0aGUgd3JhcHBlciBiZWxvdyBpcyB3aGF0IGdldHMgcHVibGlzaGVkIHVuZGVyXG4vLyBgY29uZmlnLWltcGxlbWVudGVyLXRvb2xzYCwgc28gdGhhdCBhIGxvb2t1cCBjYW4ndCBoYW5kIG91dCB0aGUgc3RvcmUgdGhhdCBza2lwcyB0aGUgZGVyaXZhdGlvbi5cbmNvbnN0IGJhc2VJbXBsZW1lbnRlclRvb2xzQ29uZmlnU3RvcmUgPSBjcmVhdGVTdG9yZSgpKCgpPT4oe1xuICAgICAgICBjb25maWc6IHt9XG4gICAgfSkpO1xuLyoqXG4gKiBEZXJpdmluZyB0aGlzIGNvbmZpZyB3YWxrcyBldmVyeSBtb2R1bGUncyBzY2hlbWEsIG1ha2luZyBpdCB0aGUgbW9zdCBleHBlbnNpdmUgdGhpbmcgdGhlIGNvbmZpZ1xuICogc3lzdGVtIGNvbXB1dGVzIOKAlCBhbmQgbm90aGluZyBidXQgdGhlIGltcGxlbWVudGVyIHRvb2xzIHBhbmVsIHJlYWRzIGl0LiBTbyBpdCBpcyBvbmx5IGtlcHQgY3VycmVudFxuICogd2hpbGUgc29tZXRoaW5nIGlzIHN1YnNjcmliZWQ7IG90aGVyd2lzZSBjb25maWcgY2hhbmdlcyBqdXN0IG1hcmsgaXQgc3RhbGUuXG4gKi8gbGV0IGltcGxlbWVudGVyVG9vbHNTdWJzY3JpYmVycyA9IDA7XG5sZXQgaW1wbGVtZW50ZXJUb29sc0NvbmZpZ1N0YWxlID0gdHJ1ZTtcbmxldCBpc1JlY29tcHV0aW5nID0gZmFsc2U7XG5sZXQgcmVjb21wdXRlSW1wbGVtZW50ZXJUb29sc0NvbmZpZztcbi8qKlxuICogUmVnaXN0ZXJzIGhvdyB0byBkZXJpdmUgdGhlIGltcGxlbWVudGVyIHRvb2xzIGNvbmZpZzsgdGhlIHN0b3JlIGRlY2lkZXMgd2hldGhlciB0by5cbiAqIEBpbnRlcm5hbFxuICovIGV4cG9ydCBmdW5jdGlvbiBzZXRJbXBsZW1lbnRlclRvb2xzQ29uZmlnUmVjb21wdXRlcihyZWNvbXB1dGUpIHtcbiAgICByZWNvbXB1dGVJbXBsZW1lbnRlclRvb2xzQ29uZmlnID0gcmVjb21wdXRlO1xufVxuLyoqXG4gKiBNYXJrcyB0aGUgaW1wbGVtZW50ZXIgdG9vbHMgY29uZmlnIHN0YWxlLCBkZXJpdmluZyBpdCBhZ2FpbiBvbmx5IGlmIHNvbWV0aGluZyBpcyB3YXRjaGluZy5cbiAqIEBpbnRlcm5hbFxuICovIGV4cG9ydCBmdW5jdGlvbiBpbnZhbGlkYXRlSW1wbGVtZW50ZXJUb29sc0NvbmZpZygpIHtcbiAgICBpbXBsZW1lbnRlclRvb2xzQ29uZmlnU3RhbGUgPSB0cnVlO1xuICAgIGlmIChpbXBsZW1lbnRlclRvb2xzU3Vic2NyaWJlcnMgPiAwKSB7XG4gICAgICAgIHJlY29tcHV0ZUltcGxlbWVudGVyVG9vbHNDb25maWdJZlN0YWxlKCk7XG4gICAgfVxufVxuZnVuY3Rpb24gcmVjb21wdXRlSW1wbGVtZW50ZXJUb29sc0NvbmZpZ0lmU3RhbGUoKSB7XG4gICAgaWYgKCFpbXBsZW1lbnRlclRvb2xzQ29uZmlnU3RhbGUgfHwgIXJlY29tcHV0ZUltcGxlbWVudGVyVG9vbHNDb25maWcgfHwgaXNSZWNvbXB1dGluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlzUmVjb21wdXRpbmcgPSB0cnVlO1xuICAgIC8vIENsZWFyZWQgYmVmb3JlIHRoZSB3b3JrLCBzbyB0aGF0IGEgY29uZmlnIGNoYW5nZSBtYWRlIHdoaWxlIGl0IHJ1bnMgbWFya3MgdGhpcyBzdGFsZSBhZ2FpblxuICAgIC8vIGluc3RlYWQgb2YgYmVpbmcgd2lwZWQgd2hlbiB0aGUgcGFzcyBmaW5pc2hlcy5cbiAgICBpbXBsZW1lbnRlclRvb2xzQ29uZmlnU3RhbGUgPSBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgICByZWNvbXB1dGVJbXBsZW1lbnRlclRvb2xzQ29uZmlnKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpbXBsZW1lbnRlclRvb2xzQ29uZmlnU3RhbGUgPSB0cnVlO1xuICAgICAgICByZWNvcmRDb25maWdEZXJpdmF0aW9uRXJyb3IoZSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBkZXJpdmUgdGhlIGltcGxlbWVudGVyIHRvb2xzIGNvbmZpZycsIGUpO1xuICAgIH0gZmluYWxseXtcbiAgICAgICAgaXNSZWNvbXB1dGluZyA9IGZhbHNlO1xuICAgIH1cbn1cbi8qKlxuICogUmVjb3JkcyB0aGF0IGNvbmZpZ3VyYXRpb24gY291bGQgbm90IGJlIHJlYnVpbHQgc28gdGhhdCB0aGUgdXNlciBjYW4gYmUgaW5mb3JtZWRcbiAqXG4gKiBAaW50ZXJuYWxcbiAqLyBleHBvcnQgZnVuY3Rpb24gcmVjb3JkQ29uZmlnRGVyaXZhdGlvbkVycm9yKGVycm9yKSB7XG4gICAgYmFzZUltcGxlbWVudGVyVG9vbHNDb25maWdTdG9yZS5zZXRTdGF0ZSh7XG4gICAgICAgIGRlcml2YXRpb25FcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpXG4gICAgfSk7XG59XG4vKipcbiAqIENsZWFyZWQgYXQgdGhlIHN0YXJ0IG9mIGEgZGVyaXZhdGlvbiBwYXNzIHJhdGhlciB0aGFuIHRoZSBlbmQgb2YgYSBzdWNjZXNzZnVsIG9uZSwgc28gdGhhdCBhXG4gKiBmYWlsdXJlIHJlY29yZGVkIHBhcnR3YXkgdGhyb3VnaCB0aGUgcGFzcyBpcyBub3Qgd2lwZWQgYnkgdGhlIHBhc3MgY29tcGxldGluZy5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqLyBleHBvcnQgZnVuY3Rpb24gY2xlYXJDb25maWdEZXJpdmF0aW9uRXJyb3IoKSB7XG4gICAgaWYgKGJhc2VJbXBsZW1lbnRlclRvb2xzQ29uZmlnU3RvcmUuZ2V0U3RhdGUoKS5kZXJpdmF0aW9uRXJyb3IpIHtcbiAgICAgICAgYmFzZUltcGxlbWVudGVyVG9vbHNDb25maWdTdG9yZS5zZXRTdGF0ZSh7XG4gICAgICAgICAgICBkZXJpdmF0aW9uRXJyb3I6IHVuZGVmaW5lZFxuICAgICAgICB9KTtcbiAgICB9XG59XG5jb25zdCBsYXp5SW1wbGVtZW50ZXJUb29sc0NvbmZpZ1N0b3JlID0ge1xuICAgIC4uLmJhc2VJbXBsZW1lbnRlclRvb2xzQ29uZmlnU3RvcmUsXG4gICAgZ2V0U3RhdGUgKCkge1xuICAgICAgICAvLyBXaGlsZSBzb21ldGhpbmcgaXMgc3Vic2NyaWJlZCB0aGUgc3RvcmUgaXMgYWxyZWFkeSBjdXJyZW50LCBzbyBhIHJlYWQgY29zdHMgbm90aGluZy4gVGhpc1xuICAgICAgICAvLyBicmFuY2ggaXMgd2hhdCBzZXJ2ZXMgdGhlIHBhbmVsJ3MgdmVyeSBmaXJzdCByZW5kZXIsIGJlZm9yZSBpdCBoYXMgc3Vic2NyaWJlZC5cbiAgICAgICAgaWYgKGltcGxlbWVudGVyVG9vbHNTdWJzY3JpYmVycyA9PT0gMCkge1xuICAgICAgICAgICAgcmVjb21wdXRlSW1wbGVtZW50ZXJUb29sc0NvbmZpZ0lmU3RhbGUoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYmFzZUltcGxlbWVudGVyVG9vbHNDb25maWdTdG9yZS5nZXRTdGF0ZSgpO1xuICAgIH0sXG4gICAgc2V0U3RhdGUgKC4uLmFyZ3MpIHtcbiAgICAgICAgLy8gQW4gZXhwbGljaXQgd3JpdGUgaXMgdGhlIGN1cnJlbnQgdmFsdWUgYnkgZGVmaW5pdGlvbiwgc28gZG9uJ3Qgb3ZlcndyaXRlIGl0IG9uIHRoZSBuZXh0IHJlYWQuXG4gICAgICAgIGltcGxlbWVudGVyVG9vbHNDb25maWdTdGFsZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gYmFzZUltcGxlbWVudGVyVG9vbHNDb25maWdTdG9yZS5zZXRTdGF0ZSguLi5hcmdzKTtcbiAgICB9LFxuICAgIHN1YnNjcmliZSAobGlzdGVuZXIpIHtcbiAgICAgICAgaW1wbGVtZW50ZXJUb29sc1N1YnNjcmliZXJzKys7XG4gICAgICAgIHJlY29tcHV0ZUltcGxlbWVudGVyVG9vbHNDb25maWdJZlN0YWxlKCk7XG4gICAgICAgIGNvbnN0IHVuc3Vic2NyaWJlID0gYmFzZUltcGxlbWVudGVyVG9vbHNDb25maWdTdG9yZS5zdWJzY3JpYmUobGlzdGVuZXIpO1xuICAgICAgICBsZXQgaGFzVW5zdWJzY3JpYmVkID0gZmFsc2U7XG4gICAgICAgIHJldHVybiAoKT0+e1xuICAgICAgICAgICAgaWYgKCFoYXNVbnN1YnNjcmliZWQpIHtcbiAgICAgICAgICAgICAgICBoYXNVbnN1YnNjcmliZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGltcGxlbWVudGVyVG9vbHNTdWJzY3JpYmVycy0tO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfTtcbiAgICB9XG59O1xuLyoqXG4gKiBQdWJsaXNoZWQgcmF0aGVyIHRoYW4gdGhlIHN0b3JlIGl0IHdyYXBzLCBzbyB0aGF0IGEgbG9va3VwIGJ5IG5hbWUgY2FuJ3QgaGFuZCBvdXQgdGhlIG9uZSB0aGF0XG4gKiBza2lwcyB0aGUgZGVyaXZhdGlvbiBhbmQgYWx3YXlzIHJlYWRzIGVtcHR5LlxuICpcbiAqIEBpbnRlcm5hbFxuICovIGV4cG9ydCBjb25zdCBpbXBsZW1lbnRlclRvb2xzQ29uZmlnU3RvcmUgPSByZWdpc3Rlckdsb2JhbFN0b3JlKCdjb25maWctaW1wbGVtZW50ZXItdG9vbHMnLCBsYXp5SW1wbGVtZW50ZXJUb29sc0NvbmZpZ1N0b3JlKTtcbiJdLCJuYW1lcyI6WyJjcmVhdGVHbG9iYWxTdG9yZSIsImdldEdsb2JhbFN0b3JlIiwicmVnaXN0ZXJHbG9iYWxTdG9yZSIsImNyZWF0ZVN0b3JlIiwiY29uZmlnSW50ZXJuYWxTdG9yZUluaXRpYWxWYWx1ZSIsImNvbmZpZ0ludGVybmFsU3RvcmUiLCJ0ZW1wb3JhcnlDb25maWdTdG9yZSIsImdldFRlbXBvcmFyeUNvbmZpZyIsInN0YXRlIiwic2V0VGVtcG9yYXJ5Q29uZmlnIiwidmFsdWUiLCJsb2NhbFN0b3JhZ2UiLCJKU09OIiwiZSIsImNvbmZpZ0V4dGVuc2lvblN0b3JlIiwiaW5pdGlhbGl6ZUNvbmZpZ1N0b3JlIiwiZ2V0Q29uZmlnU3RvcmUiLCJtb2R1bGVOYW1lIiwiZ2V0RXh0ZW5zaW9uU2xvdHNDb25maWdTdG9yZSIsImdldEV4dGVuc2lvblNsb3RDb25maWciLCJzbG90TmFtZSIsImdldEV4dGVuc2lvblNsb3RDb25maWdGcm9tU3RvcmUiLCJzbG90Q29uZmlnIiwiZ2V0RXh0ZW5zaW9uc0NvbmZpZ1N0b3JlIiwiZ2V0RXh0ZW5zaW9uQ29uZmlnRnJvbVN0b3JlIiwiZXh0ZW5zaW9uSWQiLCJleHRlbnNpb25Db25maWciLCJnZXRFeHRlbnNpb25Db25maWdGcm9tRXh0ZW5zaW9uU2xvdFN0b3JlIiwiYmFzZUltcGxlbWVudGVyVG9vbHNDb25maWdTdG9yZSIsImltcGxlbWVudGVyVG9vbHNTdWJzY3JpYmVycyIsImltcGxlbWVudGVyVG9vbHNDb25maWdTdGFsZSIsImlzUmVjb21wdXRpbmciLCJyZWNvbXB1dGVJbXBsZW1lbnRlclRvb2xzQ29uZmlnIiwic2V0SW1wbGVtZW50ZXJUb29sc0NvbmZpZ1JlY29tcHV0ZXIiLCJyZWNvbXB1dGUiLCJpbnZhbGlkYXRlSW1wbGVtZW50ZXJUb29sc0NvbmZpZyIsInJlY29tcHV0ZUltcGxlbWVudGVyVG9vbHNDb25maWdJZlN0YWxlIiwicmVjb3JkQ29uZmlnRGVyaXZhdGlvbkVycm9yIiwiY29uc29sZSIsImVycm9yIiwiRXJyb3IiLCJTdHJpbmciLCJjbGVhckNvbmZpZ0Rlcml2YXRpb25FcnJvciIsInVuZGVmaW5lZCIsImxhenlJbXBsZW1lbnRlclRvb2xzQ29uZmlnU3RvcmUiLCJhcmdzIiwibGlzdGVuZXIiLCJ1bnN1YnNjcmliZSIsImhhc1Vuc3Vic2NyaWJlZCIsImltcGxlbWVudGVyVG9vbHNDb25maWdTdG9yZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBNEY7QUFDOUM7QUFDOUMsTUFBTUksa0NBQWtDO0lBQ3BDLGlCQUFpQixFQUFFO0lBQ25CLFNBQVMsQ0FBQztJQUNWLGNBQWMsQ0FBQztBQUNuQjtBQUNBOztDQUVDLEdBQVUsTUFBTUMsc0JBQXNCTCx5REFBaUJBLENBQUMsbUJBQW1CSSxpQ0FBaUM7QUFDN0csY0FBYyxHQUFVLE1BQU1FLHVCQUF1Qk4seURBQWlCQSxDQUFDLG9CQUFvQjtJQUN2RixRQUFRTztBQUNaLEdBQUc7QUFDSEQscUJBQXFCLFNBQVMsQ0FBQyxDQUFDRTtJQUM1QkMsbUJBQW1CRCxNQUFNLE1BQU07QUFDbkM7QUFDQSxTQUFTQyxtQkFBbUJDLEtBQUs7SUFDN0IsSUFBSTtRQUNBQyxhQUFhLE9BQU8sQ0FBQywyQkFBMkJDLEtBQUssU0FBUyxDQUFDRjtJ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\n//# sourceURL=webpack-internal:///../../framework/esm-config/dist/module-config/state.js\n\n}");
|
|
4485
4485
|
|
|
4486
4486
|
},
|
|
4487
4487
|
"../../framework/esm-config/dist/types.js"(__unused_rspack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
@@ -4696,7 +4696,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n__webpack_require__.d(__webp
|
|
|
4696
4696
|
},
|
|
4697
4697
|
"../../framework/esm-framework/dist/internal.js"(__unused_rspack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
4698
4698
|
"use strict";
|
|
4699
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n__webpack_require__.d(__webpack_exports__, {\n ActionMenuButton2: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ActionMenuButton2),\n ActionableNotificationComponent: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ActionableNotificationComponent),\n ActivityIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ActivityIcon),\n AddIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.AddIcon),\n AllergiesIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.AllergiesIcon),\n AppointmentsAltPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.AppointmentsAltPictogram),\n AppointmentsPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.AppointmentsPictogram),\n ArrowDownIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ArrowDownIcon),\n ArrowLeftIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ArrowLeftIcon),\n ArrowRightIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ArrowRightIcon),\n ArrowUpIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ArrowUpIcon),\n Assessment1Pictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.Assessment1Pictogram),\n Assessment2Pictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.Assessment2Pictogram),\n AttachmentIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.AttachmentIcon),\n BabyIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.BabyIcon),\n BloodBankPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.BloodBankPictogram),\n Breakpoint: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.Breakpoint),\n CalendarHeatMapIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.CalendarHeatMapIcon),\n CalendarIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.CalendarIcon),\n CardHeader: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.CardHeader),\n CardiologyPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.CardiologyPictogram),\n CaretDownIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.CaretDownIcon),\n CaretLeftIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.CaretLeftIcon),\n CaretRightIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.CaretRightIcon),\n CaretUpIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.CaretUpIcon),\n ChartAverageIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ChartAverageIcon),\n ChartLineIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ChartLineIcon),\n CheckmarkFilledIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.CheckmarkFilledIcon),\n CheckmarkOutlineIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.CheckmarkOutlineIcon),\n ChemistryIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ChemistryIcon),\n ChevronDownIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ChevronDownIcon),\n ChevronLeftIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ChevronLeftIcon),\n ChevronRightIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ChevronRightIcon),\n ChevronUpIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ChevronUpIcon),\n CloseFilledIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.CloseFilledIcon),\n CloseIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.CloseIcon),\n CloseOutlineIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.CloseOutlineIcon),\n CohortsPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.CohortsPictogram),\n ComponentContext: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.ComponentContext),\n ConceptDictionaryPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ConceptDictionaryPictogram),\n ConditionsIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ConditionsIcon),\n ConfigurableLink: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.ConfigurableLink),\n CtScanPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.CtScanPictogram),\n CustomOverflowMenu: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.CustomOverflowMenu),\n CustomOverflowMenuItem: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.CustomOverflowMenuItem),\n DashboardExtension: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.DashboardExtension),\n DataEntryPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.DataEntryPictogram),\n DentistryPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.DentistryPictogram),\n DiagnosisTags: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.DiagnosisTags),\n DigitalTrustPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.DigitalTrustPictogram),\n DocumentAttachmentIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.DocumentAttachmentIcon),\n DocumentIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.DocumentIcon),\n DownloadIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.DownloadIcon),\n DrugOrderIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.DrugOrderIcon),\n EditIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.EditIcon),\n EmergencyDepartmentPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.EmergencyDepartmentPictogram),\n EmptyCard: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.EmptyCard),\n EmptyCardIllustration: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.EmptyCardIllustration),\n ErrorCard: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ErrorCard),\n ErrorState: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ErrorState),\n EventScheduleIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.EventScheduleIcon),\n EventsIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.EventsIcon),\n ExportedWorkspace: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ExportedWorkspace),\n Extension: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.Extension),\n ExtensionSlot: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.ExtensionSlot),\n FacilityPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.FacilityPictogram),\n GenderFemaleIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.GenderFemaleIcon),\n GenderMaleIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.GenderMaleIcon),\n GenderOtherIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.GenderOtherIcon),\n GenderUnknownIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.GenderUnknownIcon),\n GenericOrderTypeIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.GenericOrderTypeIcon),\n GeriatricsPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.GeriatricsPictogram),\n GroupAccessIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.GroupAccessIcon),\n GroupIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.GroupIcon),\n GynaecologyPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.GynaecologyPictogram),\n HomePictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.HomePictogram),\n HospitalBedIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.HospitalBedIcon),\n Icon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.Icon),\n ImageMedicalIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ImageMedicalIcon),\n InPatientPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.InPatientPictogram),\n InformationFilledIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.InformationFilledIcon),\n InformationIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.InformationIcon),\n InformationSquareIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.InformationSquareIcon),\n InventoryManagementIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.InventoryManagementIcon),\n LabOrderIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.LabOrderIcon),\n LaboratoryPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.LaboratoryPictogram),\n Labs2Pictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.Labs2Pictogram),\n LeftNavMenu: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.LeftNavMenu),\n ListCheckedIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ListCheckedIcon),\n LocationIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.LocationIcon),\n LocationPicker: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.LocationPicker),\n MaterialOrderIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.MaterialOrderIcon),\n MaximizeIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.MaximizeIcon),\n MaybeIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.MaybeIcon),\n MaybePictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.MaybePictogram),\n MedicationIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.MedicationIcon),\n MessageQueueIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.MessageQueueIcon),\n MetadataExportPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.MetadataExportPictogram),\n MicroscopeIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.MicroscopeIcon),\n MobileCheckIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.MobileCheckIcon),\n MoneyIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.MoneyIcon),\n MotherIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.MotherIcon),\n MovementIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.MovementIcon),\n Notification: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.Notification),\n NumericObservation: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.NumericObservation),\n ObstetricsPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ObstetricsPictogram),\n OpenmrsAppContext: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.OpenmrsAppContext),\n OpenmrsDatePicker: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.OpenmrsDatePicker),\n OpenmrsDateRangePicker: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.OpenmrsDateRangePicker),\n OpenmrsFetchError: () => (/* reexport safe */ _openmrs_esm_api__rspack_import_0.OpenmrsFetchError),\n OverflowMenuHorizontalIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.OverflowMenuHorizontalIcon),\n OverflowMenuVerticalIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.OverflowMenuVerticalIcon),\n PageHeader: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.PageHeader),\n PageHeaderContent: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.PageHeaderContent),\n Pagination: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.Pagination),\n PasswordIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.PasswordIcon),\n PatientBannerActionsMenu: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.PatientBannerActionsMenu),\n PatientBannerContactDetails: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.PatientBannerContactDetails),\n PatientBannerPatientIdentifiers: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.PatientBannerPatientIdentifiers),\n PatientBannerPatientInfo: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.PatientBannerPatientInfo),\n PatientBannerToggleContactDetailsButton: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.PatientBannerToggleContactDetailsButton),\n PatientDocumentsPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.PatientDocumentsPictogram),\n PatientListsPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.PatientListsPictogram),\n PatientPhoto: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.PatientPhoto),\n PatientSearchPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.PatientSearchPictogram),\n PatientsPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.PatientsPictogram),\n PaymentsDeskPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.PaymentsDeskPictogram),\n PedestrianFamilyIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.PedestrianFamilyIcon),\n PenIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.PenIcon),\n Pharmacy2Pictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.Pharmacy2Pictogram),\n PharmacyPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.PharmacyPictogram),\n Pictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.Pictogram),\n PrinterIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.PrinterIcon),\n ProcedureOrderIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ProcedureOrderIcon),\n ProgramsIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ProgramsIcon),\n RadiologyIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.RadiologyIcon),\n ReferralOrderIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ReferralOrderIcon),\n RegistrationPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.RegistrationPictogram),\n RenderIfValueIsTruthy: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.RenderIfValueIsTruthy),\n RenewIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.RenewIcon),\n ReportIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ReportIcon),\n ReportsPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ReportsPictogram),\n ResetIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ResetIcon),\n ResponsiveWrapper: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ResponsiveWrapper),\n SaveIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.SaveIcon),\n SearchIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.SearchIcon),\n ServiceQueuesPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ServiceQueuesPictogram),\n SettingsIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.SettingsIcon),\n ShoppingCartAddItemIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ShoppingCartAddItemIcon),\n ShoppingCartArrowDownIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ShoppingCartArrowDownIcon),\n ShoppingCartIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ShoppingCartIcon),\n Snackbar: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.Snackbar),\n StickyNoteAddIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.StickyNoteAddIcon),\n StockManagementPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.StockManagementPictogram),\n SwitcherIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.SwitcherIcon),\n SyringeIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.SyringeIcon),\n SystemAdministrationPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.SystemAdministrationPictogram),\n TableBatchActions: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.TableBatchActions),\n TableIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.TableIcon),\n TableOfContentsIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.TableOfContentsIcon),\n TimeIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.TimeIcon),\n Toast: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.Toast),\n ToolsIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ToolsIcon),\n TransferPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.TransferPictogram),\n TranslateIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.TranslateIcon),\n TrashCanIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.TrashCanIcon),\n TreeViewAltIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.TreeViewAltIcon),\n TriagePictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.TriagePictogram),\n TwoFactorAuthenticationIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.TwoFactorAuthenticationIcon),\n Type: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.Type),\n UserAvatarIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.UserAvatarIcon),\n UserFollowIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.UserFollowIcon),\n UserHasAccess: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.UserHasAccess),\n UserIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.UserIcon),\n UserXrayIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.UserXrayIcon),\n ViewIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ViewIcon),\n ViewOffIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ViewOffIcon),\n VisitMode: () => (/* reexport safe */ _openmrs_esm_emr_api__rspack_import_3.VisitMode),\n VisitStatus: () => (/* reexport safe */ _openmrs_esm_emr_api__rspack_import_3.VisitStatus),\n WarningIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.WarningIcon),\n Workspace2: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.Workspace2),\n XrayPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.XrayPictogram),\n addImportMapOverride: () => (/* reexport safe */ _openmrs_esm_dynamic_loading__rspack_import_2.addImportMapOverride),\n addRouteMapOverride: () => (/* reexport safe */ _openmrs_esm_dynamic_loading__rspack_import_2.addRouteMapOverride),\n age: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.age),\n ageAsDuration: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.ageAsDuration),\n attach: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.attach),\n attachmentUrl: () => (/* reexport safe */ _openmrs_esm_emr_api__rspack_import_3.attachmentUrl),\n backendDependencies: () => (/* reexport safe */ _openmrs_esm_api__rspack_import_0.backendDependencies),\n batchExtensionUpdates: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.batchExtensionUpdates),\n canAccessStorage: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.canAccessStorage),\n cleanupObsoleteFeatureFlags: () => (/* reexport safe */ _openmrs_esm_feature_flags__rspack_import_7.cleanupObsoleteFeatureFlags),\n clearConfigDerivationError: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.clearConfigDerivationError),\n clearConfigErrors: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.clearConfigErrors),\n clearCurrentUser: () => (/* reexport safe */ _openmrs_esm_api__rspack_import_0.clearCurrentUser),\n clearHistory: () => (/* reexport safe */ _openmrs_esm_navigation__rspack_import_9.clearHistory),\n closeWorkspaceGroup2: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.closeWorkspaceGroup2),\n closeWorkspaceInWindow: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.closeWorkspaceInWindow),\n compile: () => (/* reexport safe */ _openmrs_esm_expression_evaluator__rspack_import_5.compile),\n configExtensionStore: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.configExtensionStore),\n configInternalStore: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.configInternalStore),\n convertToLocaleCalendar: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.convertToLocaleCalendar),\n createAttachment: () => (/* reexport safe */ _openmrs_esm_emr_api__rspack_import_3.createAttachment),\n createDashboard: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.createDashboard),\n createErrorHandler: () => (/* reexport safe */ _openmrs_esm_error_handling__rspack_import_4.createErrorHandler),\n createExportedWorkspaceWindow: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.createExportedWorkspaceWindow),\n createGlobalStore: () => (/* reexport safe */ _openmrs_esm_state__rspack_import_12.createGlobalStore),\n createLocalStore: () => (/* reexport safe */ _openmrs_esm_state__rspack_import_12.createLocalStore),\n createParcelMounter: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.createParcelMounter),\n createUseStore: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.createUseStore),\n defaultVisitCustomRepresentation: () => (/* reexport safe */ _openmrs_esm_emr_api__rspack_import_3.defaultVisitCustomRepresentation),\n defineConfigSchema: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.defineConfigSchema),\n defineExtensionConfigSchema: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.defineExtensionConfigSchema),\n deleteAttachmentPermanently: () => (/* reexport safe */ _openmrs_esm_emr_api__rspack_import_3.deleteAttachmentPermanently),\n detach: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.detach),\n detachAll: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.detachAll),\n dispatchActionableNotificationShown: () => (/* reexport safe */ _openmrs_esm_globals__rspack_import_8.dispatchActionableNotificationShown),\n dispatchNotificationShown: () => (/* reexport safe */ _openmrs_esm_globals__rspack_import_8.dispatchNotificationShown),\n dispatchSnackbarShown: () => (/* reexport safe */ _openmrs_esm_globals__rspack_import_8.dispatchSnackbarShown),\n dispatchToastShown: () => (/* reexport safe */ _openmrs_esm_globals__rspack_import_8.dispatchToastShown),\n displayName: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.displayName),\n duration: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.duration),\n enableImportMapOverride: () => (/* reexport safe */ _openmrs_esm_dynamic_loading__rspack_import_2.enableImportMapOverride),\n esmStyleGuideSchema: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.esmStyleGuideSchema),\n evaluate: () => (/* reexport safe */ _openmrs_esm_expression_evaluator__rspack_import_5.evaluate),\n evaluateAsBoolean: () => (/* reexport safe */ _openmrs_esm_expression_evaluator__rspack_import_5.evaluateAsBoolean),\n evaluateAsBooleanAsync: () => (/* reexport safe */ _openmrs_esm_expression_evaluator__rspack_import_5.evaluateAsBooleanAsync),\n evaluateAsNumber: () => (/* reexport safe */ _openmrs_esm_expression_evaluator__rspack_import_5.evaluateAsNumber),\n evaluateAsNumberAsync: () => (/* reexport safe */ _openmrs_esm_expression_evaluator__rspack_import_5.evaluateAsNumberAsync),\n evaluateAsType: () => (/* reexport safe */ _openmrs_esm_expression_evaluator__rspack_import_5.evaluateAsType),\n evaluateAsTypeAsync: () => (/* reexport safe */ _openmrs_esm_expression_evaluator__rspack_import_5.evaluateAsTypeAsync),\n evaluateAsync: () => (/* reexport safe */ _openmrs_esm_expression_evaluator__rspack_import_5.evaluateAsync),\n extractVariableNames: () => (/* reexport safe */ _openmrs_esm_expression_evaluator__rspack_import_5.extractVariableNames),\n featureFlagsStore: () => (/* reexport safe */ _openmrs_esm_feature_flags__rspack_import_7.featureFlagsStore),\n fetchCurrentPatient: () => (/* reexport safe */ _openmrs_esm_emr_api__rspack_import_3.fetchCurrentPatient),\n fhirBaseUrl: () => (/* reexport safe */ _openmrs_esm_api__rspack_import_0.fhirBaseUrl),\n filterBreadcrumbs: () => (/* reexport safe */ _openmrs_esm_navigation__rspack_import_9.filterBreadcrumbs),\n finishRegisteringAllApps: () => (/* reexport safe */ _openmrs_esm_routes__rspack_import_11.finishRegisteringAllApps),\n fireOpenmrsEvent: () => (/* reexport safe */ _openmrs_esm_emr_api__rspack_import_3.fireOpenmrsEvent),\n formatDate: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.formatDate),\n formatDatetime: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.formatDatetime),\n formatDuration: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.formatDuration),\n formatDurationBetween: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.formatDurationBetween),\n formatPartialDate: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.formatPartialDate),\n formatPatientName: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.formatPatientName),\n formatTime: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.formatTime),\n formattedName: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.formattedName),\n getAssignedExtensions: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.getAssignedExtensions),\n getAsyncExtensionLifecycle: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.getAsyncExtensionLifecycle),\n getAsyncLifecycle: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.getAsyncLifecycle),\n getAttachmentByUuid: () => (/* reexport safe */ _openmrs_esm_emr_api__rspack_import_3.getAttachmentByUuid),\n getAttachments: () => (/* reexport safe */ _openmrs_esm_emr_api__rspack_import_3.getAttachments),\n getAttachmentsUrl: () => (/* reexport safe */ _openmrs_esm_emr_api__rspack_import_3.getAttachmentsUrl),\n getBreadcrumbs: () => (/* reexport safe */ _openmrs_esm_navigation__rspack_import_9.getBreadcrumbs),\n getBreadcrumbsFor: () => (/* reexport safe */ _openmrs_esm_navigation__rspack_import_9.getBreadcrumbsFor),\n getCandidateExtensions: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.getCandidateExtensions),\n getConfig: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.getConfig),\n getConfigStore: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.getConfigStore),\n getCoreTranslation: () => (/* reexport safe */ _openmrs_esm_translations__rspack_import_14.getCoreTranslation),\n getCurrentImportMap: () => (/* reexport safe */ _openmrs_esm_dynamic_loading__rspack_import_2.getCurrentImportMap),\n getCurrentPageMap: () => (/* reexport safe */ _openmrs_esm_dynamic_loading__rspack_import_2.getCurrentPageMap),\n getCurrentRouteMap: () => (/* reexport safe */ _openmrs_esm_dynamic_loading__rspack_import_2.getCurrentRouteMap),\n getCurrentUser: () => (/* reexport safe */ _openmrs_esm_api__rspack_import_0.getCurrentUser),\n getDefaultCalendar: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.getDefaultCalendar),\n getDefaultsFromConfigSchema: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.getDefaultsFromConfigSchema),\n getDynamicOfflineDataEntries: () => (/* reexport safe */ _deprecated_js__rspack_import_16.getDynamicOfflineDataEntries),\n getExtensionConfig: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.getExtensionConfig),\n getExtensionConfigFromExtensionSlotStore: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.getExtensionConfigFromExtensionSlotStore),\n getExtensionConfigFromStore: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.getExtensionConfigFromStore),\n getExtensionInternalStore: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.getExtensionInternalStore),\n getExtensionNameFromId: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.getExtensionNameFromId),\n getExtensionRegistration: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.getExtensionRegistration),\n getExtensionRegistrationFrom: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.getExtensionRegistrationFrom),\n getExtensionRenderingsStore: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.getExtensionRenderingsStore),\n getExtensionSlotConfig: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.getExtensionSlotConfig),\n getExtensionSlotConfigFromStore: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.getExtensionSlotConfigFromStore),\n getExtensionSlotsConfigStore: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.getExtensionSlotsConfigStore),\n getExtensionStore: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.getExtensionStore),\n getExtensionsConfigStore: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.getExtensionsConfigStore),\n getFeatureFlag: () => (/* reexport safe */ _openmrs_esm_feature_flags__rspack_import_7.getFeatureFlag),\n getFhirServerPaginationHandlers: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.getFhirServerPaginationHandlers),\n getGlobalStore: () => (/* reexport safe */ _openmrs_esm_state__rspack_import_12.getGlobalStore),\n getGroupByWindowName: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.getGroupByWindowName),\n getHistory: () => (/* reexport safe */ _openmrs_esm_navigation__rspack_import_9.getHistory),\n getImportMapDefaultMap: () => (/* reexport safe */ _openmrs_esm_dynamic_loading__rspack_import_2.getImportMapDefaultMap),\n getImportMapDisabledOverrides: () => (/* reexport safe */ _openmrs_esm_dynamic_loading__rspack_import_2.getImportMapDisabledOverrides),\n getImportMapNextPageMap: () => (/* reexport safe */ _openmrs_esm_dynamic_loading__rspack_import_2.getImportMapNextPageMap),\n getImportMapOverrideMap: () => (/* reexport safe */ _openmrs_esm_dynamic_loading__rspack_import_2.getImportMapOverrideMap),\n getLifecycle: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.getLifecycle),\n getLocale: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.getLocale),\n getLocaleDisplayName: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.getLocaleDisplayName),\n getLocations: () => (/* reexport safe */ _openmrs_esm_emr_api__rspack_import_3.getLocations),\n getLoggedInUser: () => (/* reexport safe */ _openmrs_esm_api__rspack_import_0.getLoggedInUser),\n getModalRegistration: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.getModalRegistration),\n getOpenedWindowIndexByWorkspace: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.getOpenedWindowIndexByWorkspace),\n getOpenedWindowWidth: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.getOpenedWindowWidth),\n getPatientName: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.getPatientName),\n getRegisteredWorkspace2Names: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.getRegisteredWorkspace2Names),\n getRouteMapDefaultMap: () => (/* reexport safe */ _openmrs_esm_dynamic_loading__rspack_import_2.getRouteMapDefaultMap),\n getRouteMapNextPageMap: () => (/* reexport safe */ _openmrs_esm_dynamic_loading__rspack_import_2.getRouteMapNextPageMap),\n getRouteMapOverrideMap: () => (/* reexport safe */ _openmrs_esm_dynamic_loading__rspack_import_2.getRouteMapOverrideMap),\n getSessionLocation: () => (/* reexport safe */ _openmrs_esm_api__rspack_import_0.getSessionLocation),\n getSessionStore: () => (/* reexport safe */ _openmrs_esm_api__rspack_import_0.getSessionStore),\n getSyncLifecycle: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.getSyncLifecycle),\n getSynchronizationItems: () => (/* reexport safe */ _deprecated_js__rspack_import_16.getSynchronizationItems),\n getTranslationOverrides: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.getTranslationOverrides),\n getVisitStore: () => (/* reexport safe */ _openmrs_esm_emr_api__rspack_import_3.getVisitStore),\n getVisitTypes: () => (/* reexport safe */ _openmrs_esm_emr_api__rspack_import_3.getVisitTypes),\n getVisitsForPatient: () => (/* reexport safe */ _openmrs_esm_emr_api__rspack_import_3.getVisitsForPatient),\n getWindowByWorkspaceName: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.getWindowByWorkspaceName),\n goBackInHistory: () => (/* reexport safe */ _openmrs_esm_navigation__rspack_import_9.goBackInHistory),\n iconIds: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.iconIds),\n implementerToolsConfigStore: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.implementerToolsConfigStore),\n importDynamic: () => (/* reexport safe */ _openmrs_esm_dynamic_loading__rspack_import_2.importDynamic),\n inRange: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.inRange),\n integrateBreakpoints: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.integrateBreakpoints),\n interpolateString: () => (/* reexport safe */ _openmrs_esm_navigation__rspack_import_9.interpolateString),\n interpolateUrl: () => (/* reexport safe */ _openmrs_esm_navigation__rspack_import_9.interpolateUrl),\n invalidateImplementerToolsConfig: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.invalidateImplementerToolsConfig),\n isDesktop: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.isDesktop),\n isDevEnabled: () => (/* reexport safe */ _openmrs_esm_api__rspack_import_0.isDevEnabled),\n isImportMapOverrideDisabled: () => (/* reexport safe */ _openmrs_esm_dynamic_loading__rspack_import_2.isImportMapOverrideDisabled),\n isOmrsDateStrict: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.isOmrsDateStrict),\n isOmrsDateToday: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.isOmrsDateToday),\n isOpenmrsAppRoutes: () => (/* reexport safe */ _openmrs_esm_globals__rspack_import_8.isOpenmrsAppRoutes),\n isOpenmrsRoutes: () => (/* reexport safe */ _openmrs_esm_globals__rspack_import_8.isOpenmrsRoutes),\n isUrl: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.isUrl),\n isUrlWithTemplateParameters: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.isUrlWithTemplateParameters),\n isVersionSatisfied: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.isVersionSatisfied),\n jsep: () => (/* reexport safe */ _openmrs_esm_expression_evaluator__rspack_import_5.jsep),\n launchWorkspace2: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.launchWorkspace2),\n launchWorkspaceGroup2: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.launchWorkspaceGroup2),\n leftNavStore: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.leftNavStore),\n loadLifeCycles: () => (/* reexport safe */ _openmrs_esm_routes__rspack_import_11.loadLifeCycles),\n logout: () => (/* reexport safe */ _openmrs_esm_api__rspack_import_0.logout),\n makeUrl: () => (/* reexport safe */ _openmrs_esm_api__rspack_import_0.makeUrl),\n matchLocale: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.matchLocale),\n messageOmrsServiceWorker: () => (/* reexport safe */ _deprecated_js__rspack_import_16.messageOmrsServiceWorker),\n navigate: () => (/* reexport safe */ _openmrs_esm_navigation__rspack_import_9.navigate),\n oneOf: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.oneOf),\n openChildWorkspaceInWindow: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.openChildWorkspaceInWindow),\n openmrsComponentDecorator: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.openmrsComponentDecorator),\n openmrsFetch: () => (/* reexport safe */ _openmrs_esm_api__rspack_import_0.openmrsFetch),\n parseDate: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.parseDate),\n parseDateInput: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.parseDateInput),\n pictogramIds: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.pictogramIds),\n preloadImport: () => (/* reexport safe */ _openmrs_esm_dynamic_loading__rspack_import_2.preloadImport),\n processConfig: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.processConfig),\n promptForClosingWorkspaces: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.promptForClosingWorkspaces),\n promptForClosingWorkspacesInWindow: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.promptForClosingWorkspacesInWindow),\n provide: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.provide),\n recordConfigDerivationError: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.recordConfigDerivationError),\n refetchCurrentUser: () => (/* reexport safe */ _openmrs_esm_api__rspack_import_0.refetchCurrentUser),\n registerApp: () => (/* reexport safe */ _openmrs_esm_routes__rspack_import_11.registerApp),\n registerBreadcrumb: () => (/* reexport safe */ _openmrs_esm_navigation__rspack_import_9.registerBreadcrumb),\n registerBreadcrumbs: () => (/* reexport safe */ _openmrs_esm_navigation__rspack_import_9.registerBreadcrumbs),\n registerDefaultCalendar: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.registerDefaultCalendar),\n registerExtension: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.registerExtension),\n registerExtensionRendering: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.registerExtensionRendering),\n registerExtensionSlot: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.registerExtensionSlot),\n registerFeatureFlag: () => (/* reexport safe */ _openmrs_esm_feature_flags__rspack_import_7.registerFeatureFlag),\n registerGlobalStore: () => (/* reexport safe */ _openmrs_esm_state__rspack_import_12.registerGlobalStore),\n registerModal: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.registerModal),\n registerModuleLoad: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.registerModuleLoad),\n registerModuleWithConfigSystem: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.registerModuleWithConfigSystem),\n registerTranslationNamespace: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.registerTranslationNamespace),\n registerWorkspaceGroups2: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.registerWorkspaceGroups2),\n registerWorkspaceWindows2: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.registerWorkspaceWindows2),\n registerWorkspaces2: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.registerWorkspaces2),\n removeImportMapOverride: () => (/* reexport safe */ _openmrs_esm_dynamic_loading__rspack_import_2.removeImportMapOverride),\n removeRouteMapOverride: () => (/* reexport safe */ _openmrs_esm_dynamic_loading__rspack_import_2.removeRouteMapOverride),\n renderActionableNotifications: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.renderActionableNotifications),\n renderExtension: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.renderExtension),\n renderInlineNotifications: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.renderInlineNotifications),\n renderLoadingSpinner: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.renderLoadingSpinner),\n renderParcel: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.renderParcel),\n renderSnackbars: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.renderSnackbars),\n renderToasts: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.renderToasts),\n renderWorkspaceWindowsAndMenu: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.renderWorkspaceWindowsAndMenu),\n reportError: () => (/* reexport safe */ _openmrs_esm_error_handling__rspack_import_4.reportError),\n reset: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.reset),\n resetConfigSystem: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.resetConfigSystem),\n resetImportMapOverrides: () => (/* reexport safe */ _openmrs_esm_dynamic_loading__rspack_import_2.resetImportMapOverrides),\n resetRouteMapOverrides: () => (/* reexport safe */ _openmrs_esm_dynamic_loading__rspack_import_2.resetRouteMapOverrides),\n restBaseUrl: () => (/* reexport safe */ _openmrs_esm_api__rspack_import_0.restBaseUrl),\n retry: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.retry),\n saveVisit: () => (/* reexport safe */ _openmrs_esm_emr_api__rspack_import_3.saveVisit),\n scheduleRecomputation: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.scheduleRecomputation),\n selectPreferredName: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.selectPreferredName),\n sessionEndpoint: () => (/* reexport safe */ _openmrs_esm_api__rspack_import_0.sessionEndpoint),\n sessionStore: () => (/* reexport safe */ _openmrs_esm_api__rspack_import_0.sessionStore),\n setCurrentVisit: () => (/* reexport safe */ _openmrs_esm_emr_api__rspack_import_3.setCurrentVisit),\n setFeatureFlag: () => (/* reexport safe */ _openmrs_esm_feature_flags__rspack_import_7.setFeatureFlag),\n setImplementerToolsConfigRecomputer: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.setImplementerToolsConfigRecomputer),\n setLeftNav: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.setLeftNav),\n setSessionLocale: () => (/* reexport safe */ _openmrs_esm_api__rspack_import_0.setSessionLocale),\n setSessionLocation: () => (/* reexport safe */ _openmrs_esm_api__rspack_import_0.setSessionLocation),\n setUserLanguage: () => (/* reexport safe */ _openmrs_esm_api__rspack_import_0.setUserLanguage),\n setUserProperties: () => (/* reexport safe */ _openmrs_esm_api__rspack_import_0.setUserProperties),\n setupApiModule: () => (/* reexport safe */ _openmrs_esm_api__rspack_import_0.setupApiModule),\n setupDynamicOfflineDataHandler: () => (/* reexport safe */ _deprecated_js__rspack_import_16.setupDynamicOfflineDataHandler),\n setupHistory: () => (/* reexport safe */ _openmrs_esm_navigation__rspack_import_9.setupHistory),\n setupImportMapOverrides: () => (/* reexport safe */ _openmrs_esm_dynamic_loading__rspack_import_2.setupImportMapOverrides),\n setupModals: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.setupModals),\n setupOfflineSync: () => (/* reexport safe */ _deprecated_js__rspack_import_16.setupOfflineSync),\n setupRouteMapOverrides: () => (/* reexport safe */ _openmrs_esm_dynamic_loading__rspack_import_2.setupRouteMapOverrides),\n shallowEqual: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.shallowEqual),\n showActionableNotification: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.showActionableNotification),\n showModal: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.showModal),\n showNotification: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.showNotification),\n showSnackbar: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.showSnackbar),\n showToast: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.showToast),\n slugify: () => (/* reexport safe */ _openmrs_esm_dynamic_loading__rspack_import_2.slugify),\n subscribeActionableNotificationShown: () => (/* reexport safe */ _openmrs_esm_globals__rspack_import_8.subscribeActionableNotificationShown),\n subscribeNotificationShown: () => (/* reexport safe */ _openmrs_esm_globals__rspack_import_8.subscribeNotificationShown),\n subscribeOpenmrsEvent: () => (/* reexport safe */ _openmrs_esm_emr_api__rspack_import_3.subscribeOpenmrsEvent),\n subscribePrecacheStaticDependencies: () => (/* reexport safe */ _deprecated_js__rspack_import_16.subscribePrecacheStaticDependencies),\n subscribeSnackbarShown: () => (/* reexport safe */ _openmrs_esm_globals__rspack_import_8.subscribeSnackbarShown),\n subscribeTo: () => (/* reexport safe */ _openmrs_esm_state__rspack_import_12.subscribeTo),\n subscribeToFeatureFlag: () => (/* reexport safe */ _openmrs_esm_feature_flags__rspack_import_7.subscribeToFeatureFlag),\n subscribeToastShown: () => (/* reexport safe */ _openmrs_esm_globals__rspack_import_8.subscribeToastShown),\n temporaryConfigStore: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.temporaryConfigStore),\n toDateObjectStrict: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.toDateObjectStrict),\n toLanguageTag: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.toLanguageTag),\n toLocationObject: () => (/* reexport safe */ _openmrs_esm_emr_api__rspack_import_3.toLocationObject),\n toOmrsIsoString: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.toOmrsIsoString),\n toVisitTypeObject: () => (/* reexport safe */ _openmrs_esm_emr_api__rspack_import_3.toVisitTypeObject),\n translateFrom: () => (/* reexport safe */ _openmrs_esm_translations__rspack_import_14.translateFrom),\n tryRegisterExtension: () => (/* reexport safe */ _openmrs_esm_routes__rspack_import_11.tryRegisterExtension),\n unregisterExtensionRendering: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.unregisterExtensionRendering),\n unsetLeftNav: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.unsetLeftNav),\n updateInternalExtensionStore: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.updateInternalExtensionStore),\n updateOpenedWorkspaceInWindow: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.updateOpenedWorkspaceInWindow),\n updateVisit: () => (/* reexport safe */ _openmrs_esm_emr_api__rspack_import_3.updateVisit),\n useAbortController: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useAbortController),\n useAppContext: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useAppContext),\n useAssignedExtensionIds: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useAssignedExtensionIds),\n useAssignedExtensions: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useAssignedExtensions),\n useAttachments: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useAttachments),\n useBodyScrollLock: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useBodyScrollLock),\n useCandidateExtensions: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useCandidateExtensions),\n useConfig: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useConfig),\n useConnectedExtensions: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useConnectedExtensions),\n useConnectivity: () => (/* reexport safe */ _deprecated_js__rspack_import_16.useConnectivity),\n useCustomOverflowMenu: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.useCustomOverflowMenu),\n useDebounce: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useDebounce),\n useDefineAppContext: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useDefineAppContext),\n useEmrConfiguration: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useEmrConfiguration),\n useExtensionContext: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useExtensionContext),\n useExtensionInternalStore: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useExtensionInternalStore),\n useExtensionSlot: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useExtensionSlot),\n useExtensionSlotMeta: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useExtensionSlotMeta),\n useExtensionSlotStore: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useExtensionSlotStore),\n useExtensionStore: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useExtensionStore),\n useFeatureFlag: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useFeatureFlag),\n useFhirFetchAll: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useFhirFetchAll),\n useFhirInfinite: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useFhirInfinite),\n useFhirPagination: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useFhirPagination),\n useForceUpdate: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useForceUpdate),\n useLayoutType: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useLayoutType),\n useLeftNav: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useLeftNav),\n useLeftNavStore: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useLeftNavStore),\n useLocations: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useLocations),\n useOnClickOutside: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useOnClickOutside),\n useOnVisible: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useOnVisible),\n useOpenmrsFetchAll: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useOpenmrsFetchAll),\n useOpenmrsInfinite: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useOpenmrsInfinite),\n useOpenmrsPagination: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useOpenmrsPagination),\n useOpenmrsSWR: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useOpenmrsSWR),\n usePagination: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.usePagination),\n usePaginationInfo: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.usePaginationInfo),\n usePatient: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.usePatient),\n usePatientPhoto: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.usePatientPhoto),\n usePrimaryIdentifierCode: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.usePrimaryIdentifierCode),\n useRenderableExtensions: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useRenderableExtensions),\n useSession: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useSession),\n useShallowStableValue: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useShallowStableValue),\n useStore: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useStore),\n useStoreWithActions: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useStoreWithActions),\n useVisit: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useVisit),\n useVisitContextStore: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useVisitContextStore),\n useVisitTypes: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useVisitTypes),\n useWorkspace2Context: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.useWorkspace2Context),\n useWorkspace2Store: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.useWorkspace2Store),\n userHasAccess: () => (/* reexport safe */ _openmrs_esm_api__rspack_import_0.userHasAccess),\n validator: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.validator),\n validators: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.validators),\n verifyTotpCode: () => (/* reexport safe */ _openmrs_esm_api__rspack_import_0.verifyTotpCode),\n visitTypesUrl: () => (/* reexport safe */ _openmrs_esm_emr_api__rspack_import_3.visitTypesUrl),\n workspace2Store: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.workspace2Store),\n workspace2StoreActions: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.workspace2StoreActions)\n});\n/* import */ var _openmrs_esm_api__rspack_import_0 = __webpack_require__(\"../../framework/esm-api/dist/index.js\");\n/* import */ var _openmrs_esm_config__rspack_import_1 = __webpack_require__(\"../../framework/esm-config/dist/index.js\");\n/* import */ var _openmrs_esm_dynamic_loading__rspack_import_2 = __webpack_require__(\"../../framework/esm-dynamic-loading/dist/index.js\");\n/* import */ var _openmrs_esm_emr_api__rspack_import_3 = __webpack_require__(\"../../framework/esm-emr-api/dist/index.js\");\n/* import */ var _openmrs_esm_error_handling__rspack_import_4 = __webpack_require__(\"../../framework/esm-error-handling/dist/index.js\");\n/* import */ var _openmrs_esm_expression_evaluator__rspack_import_5 = __webpack_require__(\"../../framework/esm-expression-evaluator/dist/index.js\");\n/* import */ var _openmrs_esm_extensions__rspack_import_6 = __webpack_require__(\"../../framework/esm-extensions/dist/index.js\");\n/* import */ var _openmrs_esm_feature_flags__rspack_import_7 = __webpack_require__(\"../../framework/esm-feature-flags/dist/index.js\");\n/* import */ var _openmrs_esm_globals__rspack_import_8 = __webpack_require__(\"../../framework/esm-globals/dist/index.js\");\n/* import */ var _openmrs_esm_navigation__rspack_import_9 = __webpack_require__(\"../../framework/esm-navigation/dist/index.js\");\n/* import */ var _openmrs_esm_react_utils__rspack_import_10 = __webpack_require__(\"../../framework/esm-react-utils/dist/index.js\");\n/* import */ var _openmrs_esm_routes__rspack_import_11 = __webpack_require__(\"../../framework/esm-routes/dist/index.js\");\n/* import */ var _openmrs_esm_state__rspack_import_12 = __webpack_require__(\"../../framework/esm-state/dist/index.js\");\n/* import */ var _openmrs_esm_styleguide_src_internal__rspack_import_13 = __webpack_require__(\"../../framework/esm-styleguide/dist/internal.js\");\n/* import */ var _openmrs_esm_translations__rspack_import_14 = __webpack_require__(\"../../framework/esm-translations/dist/index.js\");\n/* import */ var _openmrs_esm_utils__rspack_import_15 = __webpack_require__(\"../../framework/esm-utils/dist/index.js\");\n/* import */ var _deprecated_js__rspack_import_16 = __webpack_require__(\"../../framework/esm-framework/dist/deprecated.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YXNjcmlwdC9lc218YnVpbHRpbjpzd2MtbG9hZGVyPz9ydWxlU2V0WzFdLnJ1bGVzWzVdLnVzZVswXSEvaG9tZS9ydW5uZXIvd29yay9vcGVubXJzLWVzbS1jb3JlL29wZW5tcnMtZXNtLWNvcmUvcGFja2FnZXMvZnJhbWV3b3JrL2VzbS1mcmFtZXdvcmsvZGlzdC9pbnRlcm5hbC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL0BvcGVubXJzL2VzbS1hcHAtc2hlbGwvLi4vLi4vZnJhbWV3b3JrL2VzbS1mcmFtZXdvcmsvZGlzdC9pbnRlcm5hbC5qcz85YTgyIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCJAb3Blbm1ycy9lc20tYXBpXCI7XG5leHBvcnQgKiBmcm9tIFwiQG9wZW5tcnMvZXNtLWNvbmZpZ1wiO1xuZXhwb3J0ICogZnJvbSBcIkBvcGVubXJzL2VzbS1keW5hbWljLWxvYWRpbmdcIjtcbmV4cG9ydCAqIGZyb20gXCJAb3Blbm1ycy9lc20tZW1yLWFwaVwiO1xuZXhwb3J0ICogZnJvbSBcIkBvcGVubXJzL2VzbS1lcnJvci1oYW5kbGluZ1wiO1xuZXhwb3J0ICogZnJvbSBcIkBvcGVubXJzL2VzbS1leHByZXNzaW9uLWV2YWx1YXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIkBvcGVubXJzL2VzbS1leHRlbnNpb25zXCI7XG5leHBvcnQgKiBmcm9tIFwiQG9wZW5tcnMvZXNtLWZlYXR1cmUtZmxhZ3NcIjtcbmV4cG9ydCAqIGZyb20gXCJAb3Blbm1ycy9lc20tZ2xvYmFsc1wiO1xuZXhwb3J0ICogZnJvbSBcIkBvcGVubXJzL2VzbS1uYXZpZ2F0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiQG9wZW5tcnMvZXNtLXJlYWN0LXV0aWxzXCI7XG5leHBvcnQgKiBmcm9tIFwiQG9wZW5tcnMvZXNtLXJvdXRlc1wiO1xuZXhwb3J0ICogZnJvbSBcIkBvcGVubXJzL2VzbS1zdGF0ZVwiO1xuZXhwb3J0ICogZnJvbSBcIkBvcGVubXJzL2VzbS1zdHlsZWd1aWRlL3NyYy9pbnRlcm5hbFwiO1xuZXhwb3J0ICogZnJvbSBcIkBvcGVubXJzL2VzbS10cmFuc2xhdGlvbnNcIjtcbmV4cG9ydCAqIGZyb20gXCJAb3Blbm1ycy9lc20tdXRpbHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RlcHJlY2F0ZWQuanNcIjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQWlDO0FBQ0c7QUFDUztBQUNSO0FBQ087QUFDTTtBQUNWO0FBQ0c7QUFDTjtBQUNHO0FBQ0M7QUFDTDtBQUNEO0FBQ2tCO0FBQ1g7QUFDUDtBQUNIIn0=\n//# sourceURL=webpack-internal:///../../framework/esm-framework/dist/internal.js\n\n}");
|
|
4699
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n__webpack_require__.d(__webpack_exports__, {\n ActionMenuButton2: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ActionMenuButton2),\n ActionableNotificationComponent: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ActionableNotificationComponent),\n ActivityIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ActivityIcon),\n AddIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.AddIcon),\n AllergiesIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.AllergiesIcon),\n AppointmentsAltPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.AppointmentsAltPictogram),\n AppointmentsPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.AppointmentsPictogram),\n ArrowDownIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ArrowDownIcon),\n ArrowLeftIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ArrowLeftIcon),\n ArrowRightIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ArrowRightIcon),\n ArrowUpIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ArrowUpIcon),\n Assessment1Pictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.Assessment1Pictogram),\n Assessment2Pictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.Assessment2Pictogram),\n AttachmentIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.AttachmentIcon),\n BabyIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.BabyIcon),\n BloodBankPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.BloodBankPictogram),\n Breakpoint: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.Breakpoint),\n CalendarHeatMapIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.CalendarHeatMapIcon),\n CalendarIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.CalendarIcon),\n CardHeader: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.CardHeader),\n CardiologyPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.CardiologyPictogram),\n CaretDownIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.CaretDownIcon),\n CaretLeftIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.CaretLeftIcon),\n CaretRightIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.CaretRightIcon),\n CaretUpIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.CaretUpIcon),\n ChartAverageIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ChartAverageIcon),\n ChartLineIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ChartLineIcon),\n CheckmarkFilledIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.CheckmarkFilledIcon),\n CheckmarkOutlineIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.CheckmarkOutlineIcon),\n ChemistryIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ChemistryIcon),\n ChevronDownIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ChevronDownIcon),\n ChevronLeftIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ChevronLeftIcon),\n ChevronRightIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ChevronRightIcon),\n ChevronUpIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ChevronUpIcon),\n CloseFilledIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.CloseFilledIcon),\n CloseIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.CloseIcon),\n CloseOutlineIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.CloseOutlineIcon),\n CohortsPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.CohortsPictogram),\n ComponentContext: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.ComponentContext),\n ConceptDictionaryPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ConceptDictionaryPictogram),\n ConditionsIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ConditionsIcon),\n ConfigurableLink: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.ConfigurableLink),\n CtScanPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.CtScanPictogram),\n CustomOverflowMenu: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.CustomOverflowMenu),\n CustomOverflowMenuItem: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.CustomOverflowMenuItem),\n DashboardExtension: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.DashboardExtension),\n DataEntryPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.DataEntryPictogram),\n DentistryPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.DentistryPictogram),\n DiagnosisTags: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.DiagnosisTags),\n DigitalTrustPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.DigitalTrustPictogram),\n DocumentAttachmentIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.DocumentAttachmentIcon),\n DocumentIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.DocumentIcon),\n DownloadIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.DownloadIcon),\n DrugOrderIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.DrugOrderIcon),\n EditIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.EditIcon),\n EmergencyDepartmentPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.EmergencyDepartmentPictogram),\n EmptyCard: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.EmptyCard),\n EmptyCardIllustration: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.EmptyCardIllustration),\n ErrorCard: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ErrorCard),\n ErrorState: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ErrorState),\n EventScheduleIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.EventScheduleIcon),\n EventsIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.EventsIcon),\n ExportedWorkspace: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ExportedWorkspace),\n Extension: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.Extension),\n ExtensionSlot: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.ExtensionSlot),\n FacilityPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.FacilityPictogram),\n GenderFemaleIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.GenderFemaleIcon),\n GenderMaleIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.GenderMaleIcon),\n GenderOtherIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.GenderOtherIcon),\n GenderUnknownIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.GenderUnknownIcon),\n GenericOrderTypeIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.GenericOrderTypeIcon),\n GeriatricsPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.GeriatricsPictogram),\n GroupAccessIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.GroupAccessIcon),\n GroupIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.GroupIcon),\n GynaecologyPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.GynaecologyPictogram),\n HomePictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.HomePictogram),\n HospitalBedIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.HospitalBedIcon),\n Icon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.Icon),\n ImageMedicalIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ImageMedicalIcon),\n InPatientPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.InPatientPictogram),\n InformationFilledIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.InformationFilledIcon),\n InformationIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.InformationIcon),\n InformationSquareIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.InformationSquareIcon),\n InventoryManagementIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.InventoryManagementIcon),\n LabOrderIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.LabOrderIcon),\n LaboratoryPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.LaboratoryPictogram),\n Labs2Pictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.Labs2Pictogram),\n LeftNavMenu: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.LeftNavMenu),\n ListCheckedIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ListCheckedIcon),\n LocationIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.LocationIcon),\n LocationPicker: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.LocationPicker),\n MaterialOrderIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.MaterialOrderIcon),\n MaximizeIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.MaximizeIcon),\n MaybeIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.MaybeIcon),\n MaybePictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.MaybePictogram),\n MedicationIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.MedicationIcon),\n MessageQueueIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.MessageQueueIcon),\n MetadataExportPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.MetadataExportPictogram),\n MicroscopeIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.MicroscopeIcon),\n MobileCheckIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.MobileCheckIcon),\n MoneyIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.MoneyIcon),\n MotherIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.MotherIcon),\n MovementIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.MovementIcon),\n Notification: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.Notification),\n NumericObservation: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.NumericObservation),\n ObstetricsPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ObstetricsPictogram),\n OpenmrsAppContext: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.OpenmrsAppContext),\n OpenmrsDatePicker: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.OpenmrsDatePicker),\n OpenmrsDateRangePicker: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.OpenmrsDateRangePicker),\n OpenmrsFetchError: () => (/* reexport safe */ _openmrs_esm_api__rspack_import_0.OpenmrsFetchError),\n OverflowMenuHorizontalIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.OverflowMenuHorizontalIcon),\n OverflowMenuVerticalIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.OverflowMenuVerticalIcon),\n PageHeader: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.PageHeader),\n PageHeaderContent: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.PageHeaderContent),\n Pagination: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.Pagination),\n PasswordIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.PasswordIcon),\n PatientBannerActionsMenu: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.PatientBannerActionsMenu),\n PatientBannerContactDetails: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.PatientBannerContactDetails),\n PatientBannerPatientIdentifiers: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.PatientBannerPatientIdentifiers),\n PatientBannerPatientInfo: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.PatientBannerPatientInfo),\n PatientBannerToggleContactDetailsButton: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.PatientBannerToggleContactDetailsButton),\n PatientDocumentsPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.PatientDocumentsPictogram),\n PatientListsPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.PatientListsPictogram),\n PatientPhoto: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.PatientPhoto),\n PatientSearchPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.PatientSearchPictogram),\n PatientsPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.PatientsPictogram),\n PaymentsDeskPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.PaymentsDeskPictogram),\n PedestrianFamilyIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.PedestrianFamilyIcon),\n PenIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.PenIcon),\n Pharmacy2Pictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.Pharmacy2Pictogram),\n PharmacyPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.PharmacyPictogram),\n Pictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.Pictogram),\n PrinterIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.PrinterIcon),\n ProcedureOrderIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ProcedureOrderIcon),\n ProgramsIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ProgramsIcon),\n RadiologyIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.RadiologyIcon),\n ReferralOrderIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ReferralOrderIcon),\n RegistrationPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.RegistrationPictogram),\n RenderIfValueIsTruthy: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.RenderIfValueIsTruthy),\n RenewIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.RenewIcon),\n ReportIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ReportIcon),\n ReportsPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ReportsPictogram),\n ResetIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ResetIcon),\n ResponsiveWrapper: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ResponsiveWrapper),\n SaveIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.SaveIcon),\n SearchIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.SearchIcon),\n ServiceQueuesPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ServiceQueuesPictogram),\n SettingsIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.SettingsIcon),\n ShoppingCartAddItemIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ShoppingCartAddItemIcon),\n ShoppingCartArrowDownIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ShoppingCartArrowDownIcon),\n ShoppingCartIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ShoppingCartIcon),\n Snackbar: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.Snackbar),\n StickyNoteAddIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.StickyNoteAddIcon),\n StockManagementPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.StockManagementPictogram),\n SwitcherIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.SwitcherIcon),\n SyringeIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.SyringeIcon),\n SystemAdministrationPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.SystemAdministrationPictogram),\n TableBatchActions: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.TableBatchActions),\n TableIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.TableIcon),\n TableOfContentsIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.TableOfContentsIcon),\n TimeIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.TimeIcon),\n Toast: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.Toast),\n ToolsIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ToolsIcon),\n TransferPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.TransferPictogram),\n TranslateIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.TranslateIcon),\n TrashCanIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.TrashCanIcon),\n TreeViewAltIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.TreeViewAltIcon),\n TriagePictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.TriagePictogram),\n TwoFactorAuthenticationIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.TwoFactorAuthenticationIcon),\n Type: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.Type),\n UserAvatarIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.UserAvatarIcon),\n UserFollowIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.UserFollowIcon),\n UserHasAccess: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.UserHasAccess),\n UserIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.UserIcon),\n UserXrayIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.UserXrayIcon),\n ViewIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ViewIcon),\n ViewOffIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.ViewOffIcon),\n VisitMode: () => (/* reexport safe */ _openmrs_esm_emr_api__rspack_import_3.VisitMode),\n VisitStatus: () => (/* reexport safe */ _openmrs_esm_emr_api__rspack_import_3.VisitStatus),\n WarningIcon: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.WarningIcon),\n Workspace2: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.Workspace2),\n XrayPictogram: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.XrayPictogram),\n addImportMapOverride: () => (/* reexport safe */ _openmrs_esm_dynamic_loading__rspack_import_2.addImportMapOverride),\n addRouteMapOverride: () => (/* reexport safe */ _openmrs_esm_dynamic_loading__rspack_import_2.addRouteMapOverride),\n age: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.age),\n ageAsDuration: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.ageAsDuration),\n attach: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.attach),\n attachmentUrl: () => (/* reexport safe */ _openmrs_esm_emr_api__rspack_import_3.attachmentUrl),\n backendDependencies: () => (/* reexport safe */ _openmrs_esm_api__rspack_import_0.backendDependencies),\n batchExtensionUpdates: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.batchExtensionUpdates),\n canAccessStorage: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.canAccessStorage),\n cleanupObsoleteFeatureFlags: () => (/* reexport safe */ _openmrs_esm_feature_flags__rspack_import_7.cleanupObsoleteFeatureFlags),\n clearConfigDerivationError: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.clearConfigDerivationError),\n clearConfigErrors: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.clearConfigErrors),\n clearCurrentUser: () => (/* reexport safe */ _openmrs_esm_api__rspack_import_0.clearCurrentUser),\n clearHistory: () => (/* reexport safe */ _openmrs_esm_navigation__rspack_import_9.clearHistory),\n closeWorkspaceGroup2: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.closeWorkspaceGroup2),\n closeWorkspaceInWindow: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.closeWorkspaceInWindow),\n compile: () => (/* reexport safe */ _openmrs_esm_expression_evaluator__rspack_import_5.compile),\n configExtensionStore: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.configExtensionStore),\n configInternalStore: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.configInternalStore),\n convertToLocaleCalendar: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.convertToLocaleCalendar),\n createAttachment: () => (/* reexport safe */ _openmrs_esm_emr_api__rspack_import_3.createAttachment),\n createDashboard: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.createDashboard),\n createErrorHandler: () => (/* reexport safe */ _openmrs_esm_error_handling__rspack_import_4.createErrorHandler),\n createExportedWorkspaceWindow: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.createExportedWorkspaceWindow),\n createGlobalStore: () => (/* reexport safe */ _openmrs_esm_state__rspack_import_12.createGlobalStore),\n createLocalStore: () => (/* reexport safe */ _openmrs_esm_state__rspack_import_12.createLocalStore),\n createParcelMounter: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.createParcelMounter),\n createUseStore: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.createUseStore),\n defaultVisitCustomRepresentation: () => (/* reexport safe */ _openmrs_esm_emr_api__rspack_import_3.defaultVisitCustomRepresentation),\n defineConfigSchema: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.defineConfigSchema),\n defineExtensionConfigSchema: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.defineExtensionConfigSchema),\n deleteAttachmentPermanently: () => (/* reexport safe */ _openmrs_esm_emr_api__rspack_import_3.deleteAttachmentPermanently),\n detach: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.detach),\n detachAll: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.detachAll),\n dispatchActionableNotificationShown: () => (/* reexport safe */ _openmrs_esm_globals__rspack_import_8.dispatchActionableNotificationShown),\n dispatchNotificationShown: () => (/* reexport safe */ _openmrs_esm_globals__rspack_import_8.dispatchNotificationShown),\n dispatchSnackbarShown: () => (/* reexport safe */ _openmrs_esm_globals__rspack_import_8.dispatchSnackbarShown),\n dispatchToastShown: () => (/* reexport safe */ _openmrs_esm_globals__rspack_import_8.dispatchToastShown),\n displayName: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.displayName),\n duration: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.duration),\n enableImportMapOverride: () => (/* reexport safe */ _openmrs_esm_dynamic_loading__rspack_import_2.enableImportMapOverride),\n esmStyleGuideSchema: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.esmStyleGuideSchema),\n evaluate: () => (/* reexport safe */ _openmrs_esm_expression_evaluator__rspack_import_5.evaluate),\n evaluateAsBoolean: () => (/* reexport safe */ _openmrs_esm_expression_evaluator__rspack_import_5.evaluateAsBoolean),\n evaluateAsBooleanAsync: () => (/* reexport safe */ _openmrs_esm_expression_evaluator__rspack_import_5.evaluateAsBooleanAsync),\n evaluateAsNumber: () => (/* reexport safe */ _openmrs_esm_expression_evaluator__rspack_import_5.evaluateAsNumber),\n evaluateAsNumberAsync: () => (/* reexport safe */ _openmrs_esm_expression_evaluator__rspack_import_5.evaluateAsNumberAsync),\n evaluateAsType: () => (/* reexport safe */ _openmrs_esm_expression_evaluator__rspack_import_5.evaluateAsType),\n evaluateAsTypeAsync: () => (/* reexport safe */ _openmrs_esm_expression_evaluator__rspack_import_5.evaluateAsTypeAsync),\n evaluateAsync: () => (/* reexport safe */ _openmrs_esm_expression_evaluator__rspack_import_5.evaluateAsync),\n extractVariableNames: () => (/* reexport safe */ _openmrs_esm_expression_evaluator__rspack_import_5.extractVariableNames),\n featureFlagsStore: () => (/* reexport safe */ _openmrs_esm_feature_flags__rspack_import_7.featureFlagsStore),\n fetchCurrentPatient: () => (/* reexport safe */ _openmrs_esm_emr_api__rspack_import_3.fetchCurrentPatient),\n fhirBaseUrl: () => (/* reexport safe */ _openmrs_esm_api__rspack_import_0.fhirBaseUrl),\n filterBreadcrumbs: () => (/* reexport safe */ _openmrs_esm_navigation__rspack_import_9.filterBreadcrumbs),\n finishRegisteringAllApps: () => (/* reexport safe */ _openmrs_esm_routes__rspack_import_11.finishRegisteringAllApps),\n fireOpenmrsEvent: () => (/* reexport safe */ _openmrs_esm_emr_api__rspack_import_3.fireOpenmrsEvent),\n formatDate: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.formatDate),\n formatDatetime: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.formatDatetime),\n formatDuration: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.formatDuration),\n formatDurationBetween: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.formatDurationBetween),\n formatPartialDate: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.formatPartialDate),\n formatPatientName: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.formatPatientName),\n formatTime: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.formatTime),\n formattedName: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.formattedName),\n getAssignedExtensions: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.getAssignedExtensions),\n getAsyncExtensionLifecycle: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.getAsyncExtensionLifecycle),\n getAsyncLifecycle: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.getAsyncLifecycle),\n getAttachmentByUuid: () => (/* reexport safe */ _openmrs_esm_emr_api__rspack_import_3.getAttachmentByUuid),\n getAttachments: () => (/* reexport safe */ _openmrs_esm_emr_api__rspack_import_3.getAttachments),\n getAttachmentsUrl: () => (/* reexport safe */ _openmrs_esm_emr_api__rspack_import_3.getAttachmentsUrl),\n getBreadcrumbs: () => (/* reexport safe */ _openmrs_esm_navigation__rspack_import_9.getBreadcrumbs),\n getBreadcrumbsFor: () => (/* reexport safe */ _openmrs_esm_navigation__rspack_import_9.getBreadcrumbsFor),\n getCandidateExtensions: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.getCandidateExtensions),\n getConfig: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.getConfig),\n getConfigStore: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.getConfigStore),\n getCoreTranslation: () => (/* reexport safe */ _openmrs_esm_translations__rspack_import_14.getCoreTranslation),\n getCurrentImportMap: () => (/* reexport safe */ _openmrs_esm_dynamic_loading__rspack_import_2.getCurrentImportMap),\n getCurrentPageMap: () => (/* reexport safe */ _openmrs_esm_dynamic_loading__rspack_import_2.getCurrentPageMap),\n getCurrentRouteMap: () => (/* reexport safe */ _openmrs_esm_dynamic_loading__rspack_import_2.getCurrentRouteMap),\n getCurrentUser: () => (/* reexport safe */ _openmrs_esm_api__rspack_import_0.getCurrentUser),\n getDefaultCalendar: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.getDefaultCalendar),\n getDefaultsFromConfigSchema: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.getDefaultsFromConfigSchema),\n getDynamicOfflineDataEntries: () => (/* reexport safe */ _deprecated_js__rspack_import_16.getDynamicOfflineDataEntries),\n getExtensionConfigFromExtensionSlotStore: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.getExtensionConfigFromExtensionSlotStore),\n getExtensionConfigFromStore: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.getExtensionConfigFromStore),\n getExtensionInternalStore: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.getExtensionInternalStore),\n getExtensionNameFromId: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.getExtensionNameFromId),\n getExtensionRegistration: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.getExtensionRegistration),\n getExtensionRegistrationFrom: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.getExtensionRegistrationFrom),\n getExtensionRenderingsStore: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.getExtensionRenderingsStore),\n getExtensionSlotConfig: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.getExtensionSlotConfig),\n getExtensionSlotConfigFromStore: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.getExtensionSlotConfigFromStore),\n getExtensionSlotsConfigStore: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.getExtensionSlotsConfigStore),\n getExtensionStore: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.getExtensionStore),\n getExtensionsConfigStore: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.getExtensionsConfigStore),\n getFeatureFlag: () => (/* reexport safe */ _openmrs_esm_feature_flags__rspack_import_7.getFeatureFlag),\n getFhirServerPaginationHandlers: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.getFhirServerPaginationHandlers),\n getGlobalStore: () => (/* reexport safe */ _openmrs_esm_state__rspack_import_12.getGlobalStore),\n getGroupByWindowName: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.getGroupByWindowName),\n getHistory: () => (/* reexport safe */ _openmrs_esm_navigation__rspack_import_9.getHistory),\n getImportMapDefaultMap: () => (/* reexport safe */ _openmrs_esm_dynamic_loading__rspack_import_2.getImportMapDefaultMap),\n getImportMapDisabledOverrides: () => (/* reexport safe */ _openmrs_esm_dynamic_loading__rspack_import_2.getImportMapDisabledOverrides),\n getImportMapNextPageMap: () => (/* reexport safe */ _openmrs_esm_dynamic_loading__rspack_import_2.getImportMapNextPageMap),\n getImportMapOverrideMap: () => (/* reexport safe */ _openmrs_esm_dynamic_loading__rspack_import_2.getImportMapOverrideMap),\n getLifecycle: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.getLifecycle),\n getLocale: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.getLocale),\n getLocaleDisplayName: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.getLocaleDisplayName),\n getLocations: () => (/* reexport safe */ _openmrs_esm_emr_api__rspack_import_3.getLocations),\n getLoggedInUser: () => (/* reexport safe */ _openmrs_esm_api__rspack_import_0.getLoggedInUser),\n getModalRegistration: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.getModalRegistration),\n getOpenedWindowIndexByWorkspace: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.getOpenedWindowIndexByWorkspace),\n getOpenedWindowWidth: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.getOpenedWindowWidth),\n getPatientName: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.getPatientName),\n getRegisteredWorkspace2Names: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.getRegisteredWorkspace2Names),\n getRouteMapDefaultMap: () => (/* reexport safe */ _openmrs_esm_dynamic_loading__rspack_import_2.getRouteMapDefaultMap),\n getRouteMapNextPageMap: () => (/* reexport safe */ _openmrs_esm_dynamic_loading__rspack_import_2.getRouteMapNextPageMap),\n getRouteMapOverrideMap: () => (/* reexport safe */ _openmrs_esm_dynamic_loading__rspack_import_2.getRouteMapOverrideMap),\n getSessionLocation: () => (/* reexport safe */ _openmrs_esm_api__rspack_import_0.getSessionLocation),\n getSessionStore: () => (/* reexport safe */ _openmrs_esm_api__rspack_import_0.getSessionStore),\n getSyncLifecycle: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.getSyncLifecycle),\n getSynchronizationItems: () => (/* reexport safe */ _deprecated_js__rspack_import_16.getSynchronizationItems),\n getTranslationOverrides: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.getTranslationOverrides),\n getVisitStore: () => (/* reexport safe */ _openmrs_esm_emr_api__rspack_import_3.getVisitStore),\n getVisitTypes: () => (/* reexport safe */ _openmrs_esm_emr_api__rspack_import_3.getVisitTypes),\n getVisitsForPatient: () => (/* reexport safe */ _openmrs_esm_emr_api__rspack_import_3.getVisitsForPatient),\n getWindowByWorkspaceName: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.getWindowByWorkspaceName),\n goBackInHistory: () => (/* reexport safe */ _openmrs_esm_navigation__rspack_import_9.goBackInHistory),\n iconIds: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.iconIds),\n implementerToolsConfigStore: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.implementerToolsConfigStore),\n importDynamic: () => (/* reexport safe */ _openmrs_esm_dynamic_loading__rspack_import_2.importDynamic),\n inRange: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.inRange),\n integrateBreakpoints: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.integrateBreakpoints),\n interpolateString: () => (/* reexport safe */ _openmrs_esm_navigation__rspack_import_9.interpolateString),\n interpolateUrl: () => (/* reexport safe */ _openmrs_esm_navigation__rspack_import_9.interpolateUrl),\n invalidateImplementerToolsConfig: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.invalidateImplementerToolsConfig),\n isDesktop: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.isDesktop),\n isDevEnabled: () => (/* reexport safe */ _openmrs_esm_api__rspack_import_0.isDevEnabled),\n isImportMapOverrideDisabled: () => (/* reexport safe */ _openmrs_esm_dynamic_loading__rspack_import_2.isImportMapOverrideDisabled),\n isOmrsDateStrict: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.isOmrsDateStrict),\n isOmrsDateToday: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.isOmrsDateToday),\n isOpenmrsAppRoutes: () => (/* reexport safe */ _openmrs_esm_globals__rspack_import_8.isOpenmrsAppRoutes),\n isOpenmrsRoutes: () => (/* reexport safe */ _openmrs_esm_globals__rspack_import_8.isOpenmrsRoutes),\n isUrl: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.isUrl),\n isUrlWithTemplateParameters: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.isUrlWithTemplateParameters),\n isVersionSatisfied: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.isVersionSatisfied),\n jsep: () => (/* reexport safe */ _openmrs_esm_expression_evaluator__rspack_import_5.jsep),\n launchWorkspace2: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.launchWorkspace2),\n launchWorkspaceGroup2: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.launchWorkspaceGroup2),\n leftNavStore: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.leftNavStore),\n loadLifeCycles: () => (/* reexport safe */ _openmrs_esm_routes__rspack_import_11.loadLifeCycles),\n logout: () => (/* reexport safe */ _openmrs_esm_api__rspack_import_0.logout),\n makeUrl: () => (/* reexport safe */ _openmrs_esm_api__rspack_import_0.makeUrl),\n matchLocale: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.matchLocale),\n messageOmrsServiceWorker: () => (/* reexport safe */ _deprecated_js__rspack_import_16.messageOmrsServiceWorker),\n navigate: () => (/* reexport safe */ _openmrs_esm_navigation__rspack_import_9.navigate),\n oneOf: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.oneOf),\n openChildWorkspaceInWindow: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.openChildWorkspaceInWindow),\n openmrsComponentDecorator: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.openmrsComponentDecorator),\n openmrsFetch: () => (/* reexport safe */ _openmrs_esm_api__rspack_import_0.openmrsFetch),\n parseDate: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.parseDate),\n parseDateInput: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.parseDateInput),\n pictogramIds: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.pictogramIds),\n preloadImport: () => (/* reexport safe */ _openmrs_esm_dynamic_loading__rspack_import_2.preloadImport),\n processConfig: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.processConfig),\n promptForClosingWorkspaces: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.promptForClosingWorkspaces),\n promptForClosingWorkspacesInWindow: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.promptForClosingWorkspacesInWindow),\n provide: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.provide),\n recordConfigDerivationError: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.recordConfigDerivationError),\n refetchCurrentUser: () => (/* reexport safe */ _openmrs_esm_api__rspack_import_0.refetchCurrentUser),\n registerApp: () => (/* reexport safe */ _openmrs_esm_routes__rspack_import_11.registerApp),\n registerBreadcrumb: () => (/* reexport safe */ _openmrs_esm_navigation__rspack_import_9.registerBreadcrumb),\n registerBreadcrumbs: () => (/* reexport safe */ _openmrs_esm_navigation__rspack_import_9.registerBreadcrumbs),\n registerDefaultCalendar: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.registerDefaultCalendar),\n registerExtension: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.registerExtension),\n registerExtensionRendering: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.registerExtensionRendering),\n registerExtensionSlot: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.registerExtensionSlot),\n registerFeatureFlag: () => (/* reexport safe */ _openmrs_esm_feature_flags__rspack_import_7.registerFeatureFlag),\n registerGlobalStore: () => (/* reexport safe */ _openmrs_esm_state__rspack_import_12.registerGlobalStore),\n registerModal: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.registerModal),\n registerModuleLoad: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.registerModuleLoad),\n registerModuleWithConfigSystem: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.registerModuleWithConfigSystem),\n registerTranslationNamespace: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.registerTranslationNamespace),\n registerWorkspaceGroups2: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.registerWorkspaceGroups2),\n registerWorkspaceWindows2: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.registerWorkspaceWindows2),\n registerWorkspaces2: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.registerWorkspaces2),\n removeImportMapOverride: () => (/* reexport safe */ _openmrs_esm_dynamic_loading__rspack_import_2.removeImportMapOverride),\n removeRouteMapOverride: () => (/* reexport safe */ _openmrs_esm_dynamic_loading__rspack_import_2.removeRouteMapOverride),\n renderActionableNotifications: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.renderActionableNotifications),\n renderExtension: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.renderExtension),\n renderInlineNotifications: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.renderInlineNotifications),\n renderLoadingSpinner: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.renderLoadingSpinner),\n renderParcel: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.renderParcel),\n renderSnackbars: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.renderSnackbars),\n renderToasts: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.renderToasts),\n renderWorkspaceWindowsAndMenu: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.renderWorkspaceWindowsAndMenu),\n reportError: () => (/* reexport safe */ _openmrs_esm_error_handling__rspack_import_4.reportError),\n reset: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.reset),\n resetConfigSystem: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.resetConfigSystem),\n resetImportMapOverrides: () => (/* reexport safe */ _openmrs_esm_dynamic_loading__rspack_import_2.resetImportMapOverrides),\n resetRouteMapOverrides: () => (/* reexport safe */ _openmrs_esm_dynamic_loading__rspack_import_2.resetRouteMapOverrides),\n restBaseUrl: () => (/* reexport safe */ _openmrs_esm_api__rspack_import_0.restBaseUrl),\n retry: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.retry),\n saveVisit: () => (/* reexport safe */ _openmrs_esm_emr_api__rspack_import_3.saveVisit),\n scheduleRecomputation: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.scheduleRecomputation),\n selectPreferredName: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.selectPreferredName),\n sessionEndpoint: () => (/* reexport safe */ _openmrs_esm_api__rspack_import_0.sessionEndpoint),\n sessionStore: () => (/* reexport safe */ _openmrs_esm_api__rspack_import_0.sessionStore),\n setCurrentVisit: () => (/* reexport safe */ _openmrs_esm_emr_api__rspack_import_3.setCurrentVisit),\n setFeatureFlag: () => (/* reexport safe */ _openmrs_esm_feature_flags__rspack_import_7.setFeatureFlag),\n setImplementerToolsConfigRecomputer: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.setImplementerToolsConfigRecomputer),\n setLeftNav: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.setLeftNav),\n setSessionLocale: () => (/* reexport safe */ _openmrs_esm_api__rspack_import_0.setSessionLocale),\n setSessionLocation: () => (/* reexport safe */ _openmrs_esm_api__rspack_import_0.setSessionLocation),\n setUserLanguage: () => (/* reexport safe */ _openmrs_esm_api__rspack_import_0.setUserLanguage),\n setUserProperties: () => (/* reexport safe */ _openmrs_esm_api__rspack_import_0.setUserProperties),\n setupApiModule: () => (/* reexport safe */ _openmrs_esm_api__rspack_import_0.setupApiModule),\n setupDynamicOfflineDataHandler: () => (/* reexport safe */ _deprecated_js__rspack_import_16.setupDynamicOfflineDataHandler),\n setupHistory: () => (/* reexport safe */ _openmrs_esm_navigation__rspack_import_9.setupHistory),\n setupImportMapOverrides: () => (/* reexport safe */ _openmrs_esm_dynamic_loading__rspack_import_2.setupImportMapOverrides),\n setupModals: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.setupModals),\n setupOfflineSync: () => (/* reexport safe */ _deprecated_js__rspack_import_16.setupOfflineSync),\n setupRouteMapOverrides: () => (/* reexport safe */ _openmrs_esm_dynamic_loading__rspack_import_2.setupRouteMapOverrides),\n shallowEqual: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.shallowEqual),\n showActionableNotification: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.showActionableNotification),\n showModal: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.showModal),\n showNotification: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.showNotification),\n showSnackbar: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.showSnackbar),\n showToast: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.showToast),\n slugify: () => (/* reexport safe */ _openmrs_esm_dynamic_loading__rspack_import_2.slugify),\n subscribeActionableNotificationShown: () => (/* reexport safe */ _openmrs_esm_globals__rspack_import_8.subscribeActionableNotificationShown),\n subscribeNotificationShown: () => (/* reexport safe */ _openmrs_esm_globals__rspack_import_8.subscribeNotificationShown),\n subscribeOpenmrsEvent: () => (/* reexport safe */ _openmrs_esm_emr_api__rspack_import_3.subscribeOpenmrsEvent),\n subscribePrecacheStaticDependencies: () => (/* reexport safe */ _deprecated_js__rspack_import_16.subscribePrecacheStaticDependencies),\n subscribeSnackbarShown: () => (/* reexport safe */ _openmrs_esm_globals__rspack_import_8.subscribeSnackbarShown),\n subscribeTo: () => (/* reexport safe */ _openmrs_esm_state__rspack_import_12.subscribeTo),\n subscribeToFeatureFlag: () => (/* reexport safe */ _openmrs_esm_feature_flags__rspack_import_7.subscribeToFeatureFlag),\n subscribeToastShown: () => (/* reexport safe */ _openmrs_esm_globals__rspack_import_8.subscribeToastShown),\n temporaryConfigStore: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.temporaryConfigStore),\n toDateObjectStrict: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.toDateObjectStrict),\n toLanguageTag: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.toLanguageTag),\n toLocationObject: () => (/* reexport safe */ _openmrs_esm_emr_api__rspack_import_3.toLocationObject),\n toOmrsIsoString: () => (/* reexport safe */ _openmrs_esm_utils__rspack_import_15.toOmrsIsoString),\n toVisitTypeObject: () => (/* reexport safe */ _openmrs_esm_emr_api__rspack_import_3.toVisitTypeObject),\n translateFrom: () => (/* reexport safe */ _openmrs_esm_translations__rspack_import_14.translateFrom),\n tryRegisterExtension: () => (/* reexport safe */ _openmrs_esm_routes__rspack_import_11.tryRegisterExtension),\n unregisterExtensionRendering: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.unregisterExtensionRendering),\n unsetLeftNav: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.unsetLeftNav),\n updateInternalExtensionStore: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.updateInternalExtensionStore),\n updateOpenedWorkspaceInWindow: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.updateOpenedWorkspaceInWindow),\n updateVisit: () => (/* reexport safe */ _openmrs_esm_emr_api__rspack_import_3.updateVisit),\n useAbortController: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useAbortController),\n useAppContext: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useAppContext),\n useAssignedExtensionIds: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useAssignedExtensionIds),\n useAssignedExtensions: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useAssignedExtensions),\n useAttachments: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useAttachments),\n useBodyScrollLock: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useBodyScrollLock),\n useCandidateExtensions: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useCandidateExtensions),\n useConfig: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useConfig),\n useConnectedExtensions: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useConnectedExtensions),\n useConnectivity: () => (/* reexport safe */ _deprecated_js__rspack_import_16.useConnectivity),\n useCustomOverflowMenu: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.useCustomOverflowMenu),\n useDebounce: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useDebounce),\n useDefineAppContext: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useDefineAppContext),\n useEmrConfiguration: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useEmrConfiguration),\n useExtensionContext: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useExtensionContext),\n useExtensionInternalStore: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useExtensionInternalStore),\n useExtensionSlot: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useExtensionSlot),\n useExtensionSlotMeta: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useExtensionSlotMeta),\n useExtensionSlotStore: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useExtensionSlotStore),\n useExtensionStore: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useExtensionStore),\n useFeatureFlag: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useFeatureFlag),\n useFhirFetchAll: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useFhirFetchAll),\n useFhirInfinite: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useFhirInfinite),\n useFhirPagination: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useFhirPagination),\n useForceUpdate: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useForceUpdate),\n useLayoutType: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useLayoutType),\n useLeftNav: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useLeftNav),\n useLeftNavStore: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useLeftNavStore),\n useLocations: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useLocations),\n useOnClickOutside: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useOnClickOutside),\n useOnVisible: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useOnVisible),\n useOpenmrsFetchAll: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useOpenmrsFetchAll),\n useOpenmrsInfinite: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useOpenmrsInfinite),\n useOpenmrsPagination: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useOpenmrsPagination),\n useOpenmrsSWR: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useOpenmrsSWR),\n usePagination: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.usePagination),\n usePaginationInfo: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.usePaginationInfo),\n usePatient: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.usePatient),\n usePatientPhoto: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.usePatientPhoto),\n usePrimaryIdentifierCode: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.usePrimaryIdentifierCode),\n useRenderableExtensions: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useRenderableExtensions),\n useSession: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useSession),\n useShallowStableValue: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useShallowStableValue),\n useStore: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useStore),\n useStoreWithActions: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useStoreWithActions),\n useVisit: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useVisit),\n useVisitContextStore: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useVisitContextStore),\n useVisitTypes: () => (/* reexport safe */ _openmrs_esm_react_utils__rspack_import_10.useVisitTypes),\n useWorkspace2Context: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.useWorkspace2Context),\n useWorkspace2Store: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.useWorkspace2Store),\n userHasAccess: () => (/* reexport safe */ _openmrs_esm_api__rspack_import_0.userHasAccess),\n validator: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.validator),\n validators: () => (/* reexport safe */ _openmrs_esm_config__rspack_import_1.validators),\n verifyTotpCode: () => (/* reexport safe */ _openmrs_esm_api__rspack_import_0.verifyTotpCode),\n visitTypesUrl: () => (/* reexport safe */ _openmrs_esm_emr_api__rspack_import_3.visitTypesUrl),\n workspace2Store: () => (/* reexport safe */ _openmrs_esm_extensions__rspack_import_6.workspace2Store),\n workspace2StoreActions: () => (/* reexport safe */ _openmrs_esm_styleguide_src_internal__rspack_import_13.workspace2StoreActions)\n});\n/* import */ var _openmrs_esm_api__rspack_import_0 = __webpack_require__(\"../../framework/esm-api/dist/index.js\");\n/* import */ var _openmrs_esm_config__rspack_import_1 = __webpack_require__(\"../../framework/esm-config/dist/index.js\");\n/* import */ var _openmrs_esm_dynamic_loading__rspack_import_2 = __webpack_require__(\"../../framework/esm-dynamic-loading/dist/index.js\");\n/* import */ var _openmrs_esm_emr_api__rspack_import_3 = __webpack_require__(\"../../framework/esm-emr-api/dist/index.js\");\n/* import */ var _openmrs_esm_error_handling__rspack_import_4 = __webpack_require__(\"../../framework/esm-error-handling/dist/index.js\");\n/* import */ var _openmrs_esm_expression_evaluator__rspack_import_5 = __webpack_require__(\"../../framework/esm-expression-evaluator/dist/index.js\");\n/* import */ var _openmrs_esm_extensions__rspack_import_6 = __webpack_require__(\"../../framework/esm-extensions/dist/index.js\");\n/* import */ var _openmrs_esm_feature_flags__rspack_import_7 = __webpack_require__(\"../../framework/esm-feature-flags/dist/index.js\");\n/* import */ var _openmrs_esm_globals__rspack_import_8 = __webpack_require__(\"../../framework/esm-globals/dist/index.js\");\n/* import */ var _openmrs_esm_navigation__rspack_import_9 = __webpack_require__(\"../../framework/esm-navigation/dist/index.js\");\n/* import */ var _openmrs_esm_react_utils__rspack_import_10 = __webpack_require__(\"../../framework/esm-react-utils/dist/index.js\");\n/* import */ var _openmrs_esm_routes__rspack_import_11 = __webpack_require__(\"../../framework/esm-routes/dist/index.js\");\n/* import */ var _openmrs_esm_state__rspack_import_12 = __webpack_require__(\"../../framework/esm-state/dist/index.js\");\n/* import */ var _openmrs_esm_styleguide_src_internal__rspack_import_13 = __webpack_require__(\"../../framework/esm-styleguide/dist/internal.js\");\n/* import */ var _openmrs_esm_translations__rspack_import_14 = __webpack_require__(\"../../framework/esm-translations/dist/index.js\");\n/* import */ var _openmrs_esm_utils__rspack_import_15 = __webpack_require__(\"../../framework/esm-utils/dist/index.js\");\n/* import */ var _deprecated_js__rspack_import_16 = __webpack_require__(\"../../framework/esm-framework/dist/deprecated.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YXNjcmlwdC9lc218YnVpbHRpbjpzd2MtbG9hZGVyPz9ydWxlU2V0WzFdLnJ1bGVzWzVdLnVzZVswXSEvaG9tZS9ydW5uZXIvd29yay9vcGVubXJzLWVzbS1jb3JlL29wZW5tcnMtZXNtLWNvcmUvcGFja2FnZXMvZnJhbWV3b3JrL2VzbS1mcmFtZXdvcmsvZGlzdC9pbnRlcm5hbC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL0BvcGVubXJzL2VzbS1hcHAtc2hlbGwvLi4vLi4vZnJhbWV3b3JrL2VzbS1mcmFtZXdvcmsvZGlzdC9pbnRlcm5hbC5qcz85YTgyIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCJAb3Blbm1ycy9lc20tYXBpXCI7XG5leHBvcnQgKiBmcm9tIFwiQG9wZW5tcnMvZXNtLWNvbmZpZ1wiO1xuZXhwb3J0ICogZnJvbSBcIkBvcGVubXJzL2VzbS1keW5hbWljLWxvYWRpbmdcIjtcbmV4cG9ydCAqIGZyb20gXCJAb3Blbm1ycy9lc20tZW1yLWFwaVwiO1xuZXhwb3J0ICogZnJvbSBcIkBvcGVubXJzL2VzbS1lcnJvci1oYW5kbGluZ1wiO1xuZXhwb3J0ICogZnJvbSBcIkBvcGVubXJzL2VzbS1leHByZXNzaW9uLWV2YWx1YXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIkBvcGVubXJzL2VzbS1leHRlbnNpb25zXCI7XG5leHBvcnQgKiBmcm9tIFwiQG9wZW5tcnMvZXNtLWZlYXR1cmUtZmxhZ3NcIjtcbmV4cG9ydCAqIGZyb20gXCJAb3Blbm1ycy9lc20tZ2xvYmFsc1wiO1xuZXhwb3J0ICogZnJvbSBcIkBvcGVubXJzL2VzbS1uYXZpZ2F0aW9uXCI7XG5leHBvcnQgKiBmcm9tIFwiQG9wZW5tcnMvZXNtLXJlYWN0LXV0aWxzXCI7XG5leHBvcnQgKiBmcm9tIFwiQG9wZW5tcnMvZXNtLXJvdXRlc1wiO1xuZXhwb3J0ICogZnJvbSBcIkBvcGVubXJzL2VzbS1zdGF0ZVwiO1xuZXhwb3J0ICogZnJvbSBcIkBvcGVubXJzL2VzbS1zdHlsZWd1aWRlL3NyYy9pbnRlcm5hbFwiO1xuZXhwb3J0ICogZnJvbSBcIkBvcGVubXJzL2VzbS10cmFuc2xhdGlvbnNcIjtcbmV4cG9ydCAqIGZyb20gXCJAb3Blbm1ycy9lc20tdXRpbHNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2RlcHJlY2F0ZWQuanNcIjtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBaUM7QUFDRztBQUNTO0FBQ1I7QUFDTztBQUNNO0FBQ1Y7QUFDRztBQUNOO0FBQ0c7QUFDQztBQUNMO0FBQ0Q7QUFDa0I7QUFDWDtBQUNQO0FBQ0gifQ==\n//# sourceURL=webpack-internal:///../../framework/esm-framework/dist/internal.js\n\n}");
|
|
4700
4700
|
|
|
4701
4701
|
},
|
|
4702
4702
|
"../../framework/esm-globals/dist/events.js"(__unused_rspack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
@@ -4841,7 +4841,7 @@ eval("{__webpack_require__.r(__webpack_exports__);\n__webpack_require__.d(__webp
|
|
|
4841
4841
|
},
|
|
4842
4842
|
"../../framework/esm-react-utils/dist/useConfig.js"(__unused_rspack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
4843
4843
|
"use strict";
|
|
4844
|
-
eval("{__webpack_require__.r(__webpack_exports__);\n__webpack_require__.d(__webpack_exports__, {\n useConfig: () => (useConfig)\n});\n/* import */ var react__rspack_import_0 = __webpack_require__(\"webpack/sharing/consume/default/react/react\");\n/* import */ var react__rspack_import_0_default = /*#__PURE__*/__webpack_require__.n(react__rspack_import_0);\n/* import */ var lodash_es__rspack_import_3 = __webpack_require__(\"../../../node_modules/lodash-es/isEqual.js\");\n/* import */ var _openmrs_esm_config__rspack_import_1 = __webpack_require__(\"../../framework/esm-config/dist/index.js\");\n/* import */ var _ComponentContext_js__rspack_import_2 = __webpack_require__(\"../../framework/esm-react-utils/dist/ComponentContext.js\");\n/** @module @category Config */ \n\n\n\nconst promises = {};\nconst errorMessage = `No ComponentContext has been provided. This should come from \"openmrsComponentDecorator\".\nUsually this is already applied when using \"getAsyncLifecycle\" or \"getSyncLifecycle\".`;\nfunction readInitialConfig(store) {\n return ()=>{\n const state = store.getState();\n if (state.loaded && state.config) {\n return state.config;\n }\n return null;\n };\n}\nfunction readInitialExtensionConfig(store, extension) {\n if (extension) {\n return ()=>{\n const state = store.getState();\n const extConfig = (0,_openmrs_esm_config__rspack_import_1.getExtensionConfigFromStore)(state, extension.extensionSlotName, extension.extensionId);\n if (extConfig.loaded && extConfig.config) {\n return extConfig.config;\n }\n };\n }\n return null;\n}\nfunction createConfigPromise(store) {\n return new Promise((resolve)=>{\n const unsubscribe = store.subscribe((state)=>{\n if (state.loaded && state.config) {\n resolve(state.config);\n unsubscribe();\n }\n });\n });\n}\nfunction createExtensionConfigPromise(store, extension) {\n return new Promise((resolve)=>{\n const unsubscribe = store.subscribe((state)=>{\n const extConfig = (0,_openmrs_esm_config__rspack_import_1.getExtensionConfigFromStore)(state, extension.extensionSlotName, extension.extensionId);\n if (extConfig.loaded && extConfig.config) {\n resolve(extConfig.config);\n unsubscribe();\n }\n });\n });\n}\nfunction useConfigStore(store) {\n const [state, setState] = (0,react__rspack_import_0.useState)(readInitialConfig(store));\n (0,react__rspack_import_0.useEffect)(()=>{\n return store?.subscribe((state)=>{\n if (state.loaded && state.config) {\n setState(state.config);\n }\n });\n }, [\n store\n ]);\n return state;\n}\nfunction useExtensionConfigStore(store, extension) {\n const [config, setConfig] = (0,react__rspack_import_0.useState)(readInitialExtensionConfig(store, extension));\n (0,react__rspack_import_0.useEffect)(()=>{\n if (extension) {\n return store.subscribe((state)=>{\n const extConfig = (0,_openmrs_esm_config__rspack_import_1.getExtensionConfigFromStore)(state, extension.extensionSlotName, extension.extensionId);\n if (extConfig.loaded && extConfig.config && !(0,lodash_es__rspack_import_3[\"default\"])(extConfig.config, config)) {\n setConfig(extConfig.config);\n }\n });\n }\n }, [\n store,\n extension,\n config\n ]);\n return config;\n}\nfunction useExtensionConfig(extension) {\n const store = (0,react__rspack_import_0.useMemo)(_openmrs_esm_config__rspack_import_1.getExtensionsConfigStore, []);\n const state = useExtensionConfigStore(store, extension);\n if (!state && extension) {\n const cacheId = `${extension.extensionSlotName}-${extension.extensionId}`;\n if (!promises[cacheId] && store) {\n promises[cacheId] = createExtensionConfigPromise(store, extension);\n }\n // React will prevent the client component from rendering until the promise resolves\n throw promises[cacheId];\n }\n return state || {};\n}\nfunction useNormalConfig(moduleName) {\n const store = (0,react__rspack_import_0.useMemo)(()=>(0,_openmrs_esm_config__rspack_import_1.getConfigStore)(moduleName), [\n moduleName\n ]);\n const cacheId = moduleName;\n const state = useConfigStore(store);\n if (!state) {\n if (!promises[cacheId]) {\n promises[cacheId] = createConfigPromise(store);\n }\n // React will prevent the client component from rendering until the promise resolves\n throw promises[cacheId];\n }\n return state;\n}\n/**\n * Use this React Hook to obtain your module's configuration.\n *\n * @param options Additional options that can be passed to useConfig()\n */ function useConfig(options) {\n // This hook gets the appropriate configuration depending on whether the caller is a module\n // or an extension, which is determined from the ComponentContext. It will throw for suspense\n // if the configuration is not yet loaded.\n const { moduleName: contextModuleName, extension } = (0,react__rspack_import_0.useContext)(_ComponentContext_js__rspack_import_2.ComponentContext);\n const moduleName = options?.externalModuleName ?? contextModuleName;\n if (!moduleName && !extension) {\n throw Error(errorMessage);\n }\n const normalConfig = useNormalConfig(moduleName);\n const extensionConfig = useExtensionConfig(extension);\n const config = (0,react__rspack_import_0.useMemo)(()=>options?.externalModuleName && moduleName === options.externalModuleName ? {\n ...normalConfig\n } : {\n ...normalConfig,\n ...extensionConfig\n }, [\n moduleName,\n options?.externalModuleName,\n normalConfig,\n extensionConfig\n ]);\n return config;\n}\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YXNjcmlwdC9lc218YnVpbHRpbjpzd2MtbG9hZGVyPz9ydWxlU2V0WzFdLnJ1bGVzWzVdLnVzZVswXSEvaG9tZS9ydW5uZXIvd29yay9vcGVubXJzLWVzbS1jb3JlL29wZW5tcnMtZXNtLWNvcmUvcGFja2FnZXMvZnJhbWV3b3JrL2VzbS1yZWFjdC11dGlscy9kaXN0L3VzZUNvbmZpZy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL0BvcGVubXJzL2VzbS1hcHAtc2hlbGwvLi4vLi4vZnJhbWV3b3JrL2VzbS1yZWFjdC11dGlscy9kaXN0L3VzZUNvbmZpZy5qcz8yYWMzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBAbW9kdWxlIEBjYXRlZ29yeSBDb25maWcgKi8gaW1wb3J0IHsgdXNlQ29udGV4dCwgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgaXNFcXVhbCB9IGZyb20gXCJsb2Rhc2gtZXNcIjtcbmltcG9ydCB7IGdldENvbmZpZ1N0b3JlLCBnZXRFeHRlbnNpb25zQ29uZmlnU3RvcmUsIGdldEV4dGVuc2lvbkNvbmZpZ0Zyb21TdG9yZSB9IGZyb20gXCJAb3Blbm1ycy9lc20tY29uZmlnXCI7XG5pbXBvcnQgeyBDb21wb25lbnRDb250ZXh0IH0gZnJvbSBcIi4vQ29tcG9uZW50Q29udGV4dC5qc1wiO1xuY29uc3QgcHJvbWlzZXMgPSB7fTtcbmNvbnN0IGVycm9yTWVzc2FnZSA9IGBObyBDb21wb25lbnRDb250ZXh0IGhhcyBiZWVuIHByb3ZpZGVkLiBUaGlzIHNob3VsZCBjb21lIGZyb20gXCJvcGVubXJzQ29tcG9uZW50RGVjb3JhdG9yXCIuXG5Vc3VhbGx5IHRoaXMgaXMgYWxyZWFkeSBhcHBsaWVkIHdoZW4gdXNpbmcgXCJnZXRBc3luY0xpZmVjeWNsZVwiIG9yIFwiZ2V0U3luY0xpZmVjeWNsZVwiLmA7XG5mdW5jdGlvbiByZWFkSW5pdGlhbENvbmZpZyhzdG9yZSkge1xuICAgIHJldHVybiAoKT0+e1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gICAgICAgIGlmIChzdGF0ZS5sb2FkZWQgJiYgc3RhdGUuY29uZmlnKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhdGUuY29uZmlnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG59XG5mdW5jdGlvbiByZWFkSW5pdGlhbEV4dGVuc2lvbkNvbmZpZyhzdG9yZSwgZXh0ZW5zaW9uKSB7XG4gICAgaWYgKGV4dGVuc2lvbikge1xuICAgICAgICByZXR1cm4gKCk9PntcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gc3RvcmUuZ2V0U3RhdGUoKTtcbiAgICAgICAgICAgIGNvbnN0IGV4dENvbmZpZyA9IGdldEV4dGVuc2lvbkNvbmZpZ0Zyb21TdG9yZShzdGF0ZSwgZXh0ZW5zaW9uLmV4dGVuc2lvblNsb3ROYW1lLCBleHRlbnNpb24uZXh0ZW5zaW9uSWQpO1xuICAgICAgICAgICAgaWYgKGV4dENvbmZpZy5sb2FkZWQgJiYgZXh0Q29uZmlnLmNvbmZpZykge1xuICAgICAgICAgICAgICAgIHJldHVybiBleHRDb25maWcuY29uZmlnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUNvbmZpZ1Byb21pc2Uoc3RvcmUpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpPT57XG4gICAgICAgIGNvbnN0IHVuc3Vic2NyaWJlID0gc3RvcmUuc3Vic2NyaWJlKChzdGF0ZSk9PntcbiAgICAgICAgICAgIGlmIChzdGF0ZS5sb2FkZWQgJiYgc3RhdGUuY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShzdGF0ZS5jb25maWcpO1xuICAgICAgICAgICAgICAgIHVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gY3JlYXRlRXh0ZW5zaW9uQ29uZmlnUHJvbWlzZShzdG9yZSwgZXh0ZW5zaW9uKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKT0+e1xuICAgICAgICBjb25zdCB1bnN1YnNjcmliZSA9IHN0b3JlLnN1YnNjcmliZSgoc3RhdGUpPT57XG4gICAgICAgICAgICBjb25zdCBleHRDb25maWcgPSBnZXRFeHRlbnNpb25Db25maWdGcm9tU3RvcmUoc3RhdGUsIGV4dGVuc2lvbi5leHRlbnNpb25TbG90TmFtZSwgZXh0ZW5zaW9uLmV4dGVuc2lvbklkKTtcbiAgICAgICAgICAgIGlmIChleHRDb25maWcubG9hZGVkICYmIGV4dENvbmZpZy5jb25maWcpIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGV4dENvbmZpZy5jb25maWcpO1xuICAgICAgICAgICAgICAgIHVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gdXNlQ29uZmlnU3RvcmUoc3RvcmUpIHtcbiAgICBjb25zdCBbc3RhdGUsIHNldFN0YXRlXSA9IHVzZVN0YXRlKHJlYWRJbml0aWFsQ29uZmlnKHN0b3JlKSk7XG4gICAgdXNlRWZmZWN0KCgpPT57XG4gICAgICAgIHJldHVybiBzdG9yZT8uc3Vic2NyaWJlKChzdGF0ZSk9PntcbiAgICAgICAgICAgIGlmIChzdGF0ZS5sb2FkZWQgJiYgc3RhdGUuY29uZmlnKSB7XG4gICAgICAgICAgICAgICAgc2V0U3RhdGUoc3RhdGUuY29uZmlnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSwgW1xuICAgICAgICBzdG9yZVxuICAgIF0pO1xuICAgIHJldHVybiBzdGF0ZTtcbn1cbmZ1bmN0aW9uIHVzZUV4dGVuc2lvbkNvbmZpZ1N0b3JlKHN0b3JlLCBleHRlbnNpb24pIHtcbiAgICBjb25zdCBbY29uZmlnLCBzZXRDb25maWddID0gdXNlU3RhdGUocmVhZEluaXRpYWxFeHRlbnNpb25Db25maWcoc3RvcmUsIGV4dGVuc2lvbikpO1xuICAgIHVzZUVmZmVjdCgoKT0+e1xuICAgICAgICBpZiAoZXh0ZW5zaW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RvcmUuc3Vic2NyaWJlKChzdGF0ZSk9PntcbiAgICAgICAgICAgICAgICBjb25zdCBleHRDb25maWcgPSBnZXRFeHRlbnNpb25Db25maWdGcm9tU3RvcmUoc3RhdGUsIGV4dGVuc2lvbi5leHRlbnNpb25TbG90TmFtZSwgZXh0ZW5zaW9uLmV4dGVuc2lvbklkKTtcbiAgICAgICAgICAgICAgICBpZiAoZXh0Q29uZmlnLmxvYWRlZCAmJiBleHRDb25maWcuY29uZmlnICYmICFpc0VxdWFsKGV4dENvbmZpZy5jb25maWcsIGNvbmZpZykpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0Q29uZmlnKGV4dENvbmZpZy5jb25maWcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSwgW1xuICAgICAgICBzdG9yZSxcbiAgICAgICAgZXh0ZW5zaW9uLFxuICAgICAgICBjb25maWdcbiAgICBdKTtcbiAgICByZXR1cm4gY29uZmlnO1xufVxuZnVuY3Rpb24gdXNlRXh0ZW5zaW9uQ29uZmlnKGV4dGVuc2lvbikge1xuICAgIGNvbnN0IHN0b3JlID0gdXNlTWVtbyhnZXRFeHRlbnNpb25zQ29uZmlnU3RvcmUsIFtdKTtcbiAgICBjb25zdCBzdGF0ZSA9IHVzZUV4dGVuc2lvbkNvbmZpZ1N0b3JlKHN0b3JlLCBleHRlbnNpb24pO1xuICAgIGlmICghc3RhdGUgJiYgZXh0ZW5zaW9uKSB7XG4gICAgICAgIGNvbnN0IGNhY2hlSWQgPSBgJHtleHRlbnNpb24uZXh0ZW5zaW9uU2xvdE5hbWV9LSR7ZXh0ZW5zaW9uLmV4dGVuc2lvbklkfWA7XG4gICAgICAgIGlmICghcHJvbWlzZXNbY2FjaGVJZF0gJiYgc3RvcmUpIHtcbiAgICAgICAgICAgIHByb21pc2VzW2NhY2hlSWRdID0gY3JlYXRlRXh0ZW5zaW9uQ29uZmlnUHJvbWlzZShzdG9yZSwgZXh0ZW5zaW9uKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBSZWFjdCB3aWxsIHByZXZlbnQgdGhlIGNsaWVudCBjb21wb25lbnQgZnJvbSByZW5kZXJpbmcgdW50aWwgdGhlIHByb21pc2UgcmVzb2x2ZXNcbiAgICAgICAgdGhyb3cgcHJvbWlzZXNbY2FjaGVJZF07XG4gICAgfVxuICAgIHJldHVybiBzdGF0ZSB8fCB7fTtcbn1cbmZ1bmN0aW9uIHVzZU5vcm1hbENvbmZpZyhtb2R1bGVOYW1lKSB7XG4gICAgY29uc3Qgc3RvcmUgPSB1c2VNZW1vKCgpPT5nZXRDb25maWdTdG9yZShtb2R1bGVOYW1lKSwgW1xuICAgICAgICBtb2R1bGVOYW1lXG4gICAgXSk7XG4gICAgY29uc3QgY2FjaGVJZCA9IG1vZHVsZU5hbWU7XG4gICAgY29uc3Qgc3RhdGUgPSB1c2VDb25maWdTdG9yZShzdG9yZSk7XG4gICAgaWYgKCFzdGF0ZSkge1xuICAgICAgICBpZiAoIXByb21pc2VzW2NhY2hlSWRdKSB7XG4gICAgICAgICAgICBwcm9taXNlc1tjYWNoZUlkXSA9IGNyZWF0ZUNvbmZpZ1Byb21pc2Uoc3RvcmUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJlYWN0IHdpbGwgcHJldmVudCB0aGUgY2xpZW50IGNvbXBvbmVudCBmcm9tIHJlbmRlcmluZyB1bnRpbCB0aGUgcHJvbWlzZSByZXNvbHZlc1xuICAgICAgICB0aHJvdyBwcm9taXNlc1tjYWNoZUlkXTtcbiAgICB9XG4gICAgcmV0dXJuIHN0YXRlO1xufVxuLyoqXG4gKiBVc2UgdGhpcyBSZWFjdCBIb29rIHRvIG9idGFpbiB5b3VyIG1vZHVsZSdzIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgQWRkaXRpb25hbCBvcHRpb25zIHRoYXQgY2FuIGJlIHBhc3NlZCB0byB1c2VDb25maWcoKVxuICovIGV4cG9ydCBmdW5jdGlvbiB1c2VDb25maWcob3B0aW9ucykge1xuICAgIC8vIFRoaXMgaG9vayBnZXRzIHRoZSBhcHByb3ByaWF0ZSBjb25maWd1cmF0aW9uIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBjYWxsZXIgaXMgYSBtb2R1bGVcbiAgICAvLyBvciBhbiBleHRlbnNpb24sIHdoaWNoIGlzIGRldGVybWluZWQgZnJvbSB0aGUgQ29tcG9uZW50Q29udGV4dC4gSXQgd2lsbCB0aHJvdyBmb3Igc3VzcGVuc2VcbiAgICAvLyBpZiB0aGUgY29uZmlndXJhdGlvbiBpcyBub3QgeWV0IGxvYWRlZC5cbiAgICBjb25zdCB7IG1vZHVsZU5hbWU6IGNvbnRleHRNb2R1bGVOYW1lLCBleHRlbnNpb24gfSA9IHVzZUNvbnRleHQoQ29tcG9uZW50Q29udGV4dCk7XG4gICAgY29uc3QgbW9kdWxlTmFtZSA9IG9wdGlvbnM/LmV4dGVybmFsTW9kdWxlTmFtZSA/PyBjb250ZXh0TW9kdWxlTmFtZTtcbiAgICBpZiAoIW1vZHVsZU5hbWUgJiYgIWV4dGVuc2lvbikge1xuICAgICAgICB0aHJvdyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgIH1cbiAgICBjb25zdCBub3JtYWxDb25maWcgPSB1c2VOb3JtYWxDb25maWcobW9kdWxlTmFtZSk7XG4gICAgY29uc3QgZXh0ZW5zaW9uQ29uZmlnID0gdXNlRXh0ZW5zaW9uQ29uZmlnKGV4dGVuc2lvbik7XG4gICAgY29uc3QgY29uZmlnID0gdXNlTWVtbygoKT0+b3B0aW9ucz8uZXh0ZXJuYWxNb2R1bGVOYW1lICYmIG1vZHVsZU5hbWUgPT09IG9wdGlvbnMuZXh0ZXJuYWxNb2R1bGVOYW1lID8ge1xuICAgICAgICAgICAgLi4ubm9ybWFsQ29uZmlnXG4gICAgICAgIH0gOiB7XG4gICAgICAgICAgICAuLi5ub3JtYWxDb25maWcsXG4gICAgICAgICAgICAuLi5leHRlbnNpb25Db25maWdcbiAgICAgICAgfSwgW1xuICAgICAgICBtb2R1bGVOYW1lLFxuICAgICAgICBvcHRpb25zPy5leHRlcm5hbE1vZHVsZU5hbWUsXG4gICAgICAgIG5vcm1hbENvbmZpZyxcbiAgICAgICAgZXh0ZW5zaW9uQ29uZmlnXG4gICAgXSk7XG4gICAgcmV0dXJuIGNvbmZpZztcbn1cbiJdLCJuYW1lcyI6WyJ1c2VDb250ZXh0IiwidXNlRWZmZWN0IiwidXNlTWVtbyIsInVzZVN0YXRlIiwiaXNFcXVhbCIsImdldENvbmZpZ1N0b3JlIiwiZ2V0RXh0ZW5zaW9uc0NvbmZpZ1N0b3JlIiwiZ2V0RXh0ZW5zaW9uQ29uZmlnRnJvbVN0b3JlIiwiQ29tcG9uZW50Q29udGV4dCIsInByb21pc2VzIiwiZXJyb3JNZXNzYWdlIiwicmVhZEluaXRpYWxDb25maWciLCJzdG9yZSIsInN0YXRlIiwicmVhZEluaXRpYWxFeHRlbnNpb25Db25maWciLCJleHRlbnNpb24iLCJleHRDb25maWciLCJjcmVhdGVDb25maWdQcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ1bnN1YnNjcmliZSIsImNyZWF0ZUV4dGVuc2lvbkNvbmZpZ1Byb21pc2UiLCJ1c2VDb25maWdTdG9yZSIsInNldFN0YXRlIiwidXNlRXh0ZW5zaW9uQ29uZmlnU3RvcmUiLCJjb25maWciLCJzZXRDb25maWciLCJ1c2VFeHRlbnNpb25Db25maWciLCJjYWNoZUlkIiwidXNlTm9ybWFsQ29uZmlnIiwibW9kdWxlTmFtZSIsInVzZUNvbmZpZyIsIm9wdGlvbnMiLCJjb250ZXh0TW9kdWxlTmFtZSIsIkVycm9yIiwibm9ybWFsQ29uZmlnIiwiZXh0ZW5zaW9uQ29uZmlnIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSw2QkFBNkIsR0FBb0U7QUFDN0Q7QUFDd0U7QUFDbkQ7QUFDekQsTUFBTVMsV0FBVyxDQUFDO0FBQ2xCLE1BQU1DLGVBQWUsQ0FBQztxRkFDK0QsQ0FBQztBQUN0RixTQUFTQyxrQkFBa0JDLEtBQUs7SUFDNUIsT0FBTztRQUNILE1BQU1DLFFBQVFELE1BQU0sUUFBUTtRQUM1QixJQUFJQyxNQUFNLE1BQU0sSUFBSUEsTUFBTSxNQUFNLEVBQUU7WUFDOUIsT0FBT0EsTUFBTSxNQUFNO1FBQ3ZCO1FBQ0EsT0FBTztJQUNYO0FBQ0o7QUFDQSxTQUFT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\n//# sourceURL=webpack-internal:///../../framework/esm-react-utils/dist/useConfig.js\n\n}");
|
|
4844
|
+
eval("{__webpack_require__.r(__webpack_exports__);\n__webpack_require__.d(__webpack_exports__, {\n useConfig: () => (useConfig)\n});\n/* import */ var react__rspack_import_0 = __webpack_require__(\"webpack/sharing/consume/default/react/react\");\n/* import */ var react__rspack_import_0_default = /*#__PURE__*/__webpack_require__.n(react__rspack_import_0);\n/* import */ var lodash_es__rspack_import_3 = __webpack_require__(\"../../../node_modules/lodash-es/isEqual.js\");\n/* import */ var _openmrs_esm_config__rspack_import_1 = __webpack_require__(\"../../framework/esm-config/dist/index.js\");\n/* import */ var _ComponentContext_js__rspack_import_2 = __webpack_require__(\"../../framework/esm-react-utils/dist/ComponentContext.js\");\n/** @module @category Config */ \n\n\n\nconst promises = {};\nconst errorMessage = `No ComponentContext has been provided. This should come from \"openmrsComponentDecorator\".\nUsually this is already applied when using \"getAsyncLifecycle\" or \"getSyncLifecycle\".`;\nfunction readInitialConfig(store) {\n return ()=>{\n const state = store.getState();\n if (state.loaded && state.config) {\n return state.config;\n }\n return null;\n };\n}\nfunction readInitialExtensionConfig(store, extension) {\n if (extension) {\n return ()=>{\n const state = store.getState();\n const extConfig = (0,_openmrs_esm_config__rspack_import_1.getExtensionConfigFromStore)(state, extension.extensionSlotName, extension.extensionId);\n if (extConfig.loaded && extConfig.config) {\n return extConfig.config;\n }\n };\n }\n return null;\n}\n/**\n * The promise a suspended `useConfig()` throws, so every component waiting on the same config waits on\n * one promise and a re-render throws the same one rather than starting again.\n *\n * The entry is dropped once it settles: an extension's config exists only while that extension is\n * mounted, so the same id can have to wait a second time and a settled promise cannot describe that.\n */ function whenConfigReady(cacheId, store, read) {\n const cached = promises[cacheId];\n if (cached) {\n return cached;\n }\n const promise = new Promise((resolve)=>{\n const current = read(store.getState());\n if (current) {\n resolve(current);\n return;\n }\n const unsubscribe = store.subscribe((state)=>{\n const config = read(state);\n if (config) {\n unsubscribe();\n resolve(config);\n }\n });\n });\n promises[cacheId] = promise;\n void promise.then(()=>{\n // Guarded so that a later wait under the same id, started after this one settled, is left alone.\n if (promises[cacheId] === promise) {\n delete promises[cacheId];\n }\n });\n return promise;\n}\nfunction useConfigStore(store) {\n const [state, setState] = (0,react__rspack_import_0.useState)(readInitialConfig(store));\n (0,react__rspack_import_0.useEffect)(()=>{\n return store?.subscribe((state)=>{\n if (state.loaded && state.config) {\n setState(state.config);\n }\n });\n }, [\n store\n ]);\n return state;\n}\nfunction useExtensionConfigStore(store, extension) {\n const [config, setConfig] = (0,react__rspack_import_0.useState)(readInitialExtensionConfig(store, extension));\n (0,react__rspack_import_0.useEffect)(()=>{\n if (extension) {\n return store.subscribe((state)=>{\n const extConfig = (0,_openmrs_esm_config__rspack_import_1.getExtensionConfigFromStore)(state, extension.extensionSlotName, extension.extensionId);\n if (extConfig.loaded && extConfig.config && !(0,lodash_es__rspack_import_3[\"default\"])(extConfig.config, config)) {\n setConfig(extConfig.config);\n }\n });\n }\n }, [\n store,\n extension,\n config\n ]);\n return config;\n}\nfunction useExtensionConfig(extension) {\n const store = (0,react__rspack_import_0.useMemo)(_openmrs_esm_config__rspack_import_1.getExtensionsConfigStore, []);\n const state = useExtensionConfigStore(store, extension);\n if (!state && extension) {\n // React will prevent the client component from rendering until the promise resolves\n throw whenConfigReady(`${extension.extensionSlotName}-${extension.extensionId}`, store, (storeState)=>{\n const extConfig = (0,_openmrs_esm_config__rspack_import_1.getExtensionConfigFromStore)(storeState, extension.extensionSlotName, extension.extensionId);\n return extConfig.loaded ? extConfig.config : null;\n });\n }\n return state || {};\n}\nfunction useNormalConfig(moduleName) {\n const store = (0,react__rspack_import_0.useMemo)(()=>(0,_openmrs_esm_config__rspack_import_1.getConfigStore)(moduleName), [\n moduleName\n ]);\n const state = useConfigStore(store);\n if (!state) {\n // React will prevent the client component from rendering until the promise resolves\n throw whenConfigReady(moduleName, store, (storeState)=>storeState.loaded ? storeState.config : null);\n }\n return state;\n}\n/**\n * Use this React Hook to obtain your module's configuration.\n *\n * @param options Additional options that can be passed to useConfig()\n */ function useConfig(options) {\n // This hook gets the appropriate configuration depending on whether the caller is a module\n // or an extension, which is determined from the ComponentContext. It will throw for suspense\n // if the configuration is not yet loaded.\n const { moduleName: contextModuleName, extension } = (0,react__rspack_import_0.useContext)(_ComponentContext_js__rspack_import_2.ComponentContext);\n const moduleName = options?.externalModuleName ?? contextModuleName;\n if (!moduleName && !extension) {\n throw Error(errorMessage);\n }\n const normalConfig = useNormalConfig(moduleName);\n const extensionConfig = useExtensionConfig(extension);\n const config = (0,react__rspack_import_0.useMemo)(()=>options?.externalModuleName && moduleName === options.externalModuleName ? {\n ...normalConfig\n } : {\n ...normalConfig,\n ...extensionConfig\n }, [\n moduleName,\n options?.externalModuleName,\n normalConfig,\n extensionConfig\n ]);\n return config;\n}\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamF2YXNjcmlwdC9lc218YnVpbHRpbjpzd2MtbG9hZGVyPz9ydWxlU2V0WzFdLnJ1bGVzWzVdLnVzZVswXSEvaG9tZS9ydW5uZXIvd29yay9vcGVubXJzLWVzbS1jb3JlL29wZW5tcnMtZXNtLWNvcmUvcGFja2FnZXMvZnJhbWV3b3JrL2VzbS1yZWFjdC11dGlscy9kaXN0L3VzZUNvbmZpZy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL0BvcGVubXJzL2VzbS1hcHAtc2hlbGwvLi4vLi4vZnJhbWV3b3JrL2VzbS1yZWFjdC11dGlscy9kaXN0L3VzZUNvbmZpZy5qcz8yYWMzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBAbW9kdWxlIEBjYXRlZ29yeSBDb25maWcgKi8gaW1wb3J0IHsgdXNlQ29udGV4dCwgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgaXNFcXVhbCB9IGZyb20gXCJsb2Rhc2gtZXNcIjtcbmltcG9ydCB7IGdldENvbmZpZ1N0b3JlLCBnZXRFeHRlbnNpb25zQ29uZmlnU3RvcmUsIGdldEV4dGVuc2lvbkNvbmZpZ0Zyb21TdG9yZSB9IGZyb20gXCJAb3Blbm1ycy9lc20tY29uZmlnXCI7XG5pbXBvcnQgeyBDb21wb25lbnRDb250ZXh0IH0gZnJvbSBcIi4vQ29tcG9uZW50Q29udGV4dC5qc1wiO1xuY29uc3QgcHJvbWlzZXMgPSB7fTtcbmNvbnN0IGVycm9yTWVzc2FnZSA9IGBObyBDb21wb25lbnRDb250ZXh0IGhhcyBiZWVuIHByb3ZpZGVkLiBUaGlzIHNob3VsZCBjb21lIGZyb20gXCJvcGVubXJzQ29tcG9uZW50RGVjb3JhdG9yXCIuXG5Vc3VhbGx5IHRoaXMgaXMgYWxyZWFkeSBhcHBsaWVkIHdoZW4gdXNpbmcgXCJnZXRBc3luY0xpZmVjeWNsZVwiIG9yIFwiZ2V0U3luY0xpZmVjeWNsZVwiLmA7XG5mdW5jdGlvbiByZWFkSW5pdGlhbENvbmZpZyhzdG9yZSkge1xuICAgIHJldHVybiAoKT0+e1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHN0b3JlLmdldFN0YXRlKCk7XG4gICAgICAgIGlmIChzdGF0ZS5sb2FkZWQgJiYgc3RhdGUuY29uZmlnKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhdGUuY29uZmlnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG59XG5mdW5jdGlvbiByZWFkSW5pdGlhbEV4dGVuc2lvbkNvbmZpZyhzdG9yZSwgZXh0ZW5zaW9uKSB7XG4gICAgaWYgKGV4dGVuc2lvbikge1xuICAgICAgICByZXR1cm4gKCk9PntcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gc3RvcmUuZ2V0U3RhdGUoKTtcbiAgICAgICAgICAgIGNvbnN0IGV4dENvbmZpZyA9IGdldEV4dGVuc2lvbkNvbmZpZ0Zyb21TdG9yZShzdGF0ZSwgZXh0ZW5zaW9uLmV4dGVuc2lvblNsb3ROYW1lLCBleHRlbnNpb24uZXh0ZW5zaW9uSWQpO1xuICAgICAgICAgICAgaWYgKGV4dENvbmZpZy5sb2FkZWQgJiYgZXh0Q29uZmlnLmNvbmZpZykge1xuICAgICAgICAgICAgICAgIHJldHVybiBleHRDb25maWcuY29uZmlnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cbi8qKlxuICogVGhlIHByb21pc2UgYSBzdXNwZW5kZWQgYHVzZUNvbmZpZygpYCB0aHJvd3MsIHNvIGV2ZXJ5IGNvbXBvbmVudCB3YWl0aW5nIG9uIHRoZSBzYW1lIGNvbmZpZyB3YWl0cyBvblxuICogb25lIHByb21pc2UgYW5kIGEgcmUtcmVuZGVyIHRocm93cyB0aGUgc2FtZSBvbmUgcmF0aGVyIHRoYW4gc3RhcnRpbmcgYWdhaW4uXG4gKlxuICogVGhlIGVudHJ5IGlzIGRyb3BwZWQgb25jZSBpdCBzZXR0bGVzOiBhbiBleHRlbnNpb24ncyBjb25maWcgZXhpc3RzIG9ubHkgd2hpbGUgdGhhdCBleHRlbnNpb24gaXNcbiAqIG1vdW50ZWQsIHNvIHRoZSBzYW1lIGlkIGNhbiBoYXZlIHRvIHdhaXQgYSBzZWNvbmQgdGltZSBhbmQgYSBzZXR0bGVkIHByb21pc2UgY2Fubm90IGRlc2NyaWJlIHRoYXQuXG4gKi8gZnVuY3Rpb24gd2hlbkNvbmZpZ1JlYWR5KGNhY2hlSWQsIHN0b3JlLCByZWFkKSB7XG4gICAgY29uc3QgY2FjaGVkID0gcHJvbWlzZXNbY2FjaGVJZF07XG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgICByZXR1cm4gY2FjaGVkO1xuICAgIH1cbiAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpPT57XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSByZWFkKHN0b3JlLmdldFN0YXRlKCkpO1xuICAgICAgICBpZiAoY3VycmVudCkge1xuICAgICAgICAgICAgcmVzb2x2ZShjdXJyZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1bnN1YnNjcmliZSA9IHN0b3JlLnN1YnNjcmliZSgoc3RhdGUpPT57XG4gICAgICAgICAgICBjb25zdCBjb25maWcgPSByZWFkKHN0YXRlKTtcbiAgICAgICAgICAgIGlmIChjb25maWcpIHtcbiAgICAgICAgICAgICAgICB1bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoY29uZmlnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgcHJvbWlzZXNbY2FjaGVJZF0gPSBwcm9taXNlO1xuICAgIHZvaWQgcHJvbWlzZS50aGVuKCgpPT57XG4gICAgICAgIC8vIEd1YXJkZWQgc28gdGhhdCBhIGxhdGVyIHdhaXQgdW5kZXIgdGhlIHNhbWUgaWQsIHN0YXJ0ZWQgYWZ0ZXIgdGhpcyBvbmUgc2V0dGxlZCwgaXMgbGVmdCBhbG9uZS5cbiAgICAgICAgaWYgKHByb21pc2VzW2NhY2hlSWRdID09PSBwcm9taXNlKSB7XG4gICAgICAgICAgICBkZWxldGUgcHJvbWlzZXNbY2FjaGVJZF07XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cbmZ1bmN0aW9uIHVzZUNvbmZpZ1N0b3JlKHN0b3JlKSB7XG4gICAgY29uc3QgW3N0YXRlLCBzZXRTdGF0ZV0gPSB1c2VTdGF0ZShyZWFkSW5pdGlhbENvbmZpZyhzdG9yZSkpO1xuICAgIHVzZUVmZmVjdCgoKT0+e1xuICAgICAgICByZXR1cm4gc3RvcmU/LnN1YnNjcmliZSgoc3RhdGUpPT57XG4gICAgICAgICAgICBpZiAoc3RhdGUubG9hZGVkICYmIHN0YXRlLmNvbmZpZykge1xuICAgICAgICAgICAgICAgIHNldFN0YXRlKHN0YXRlLmNvbmZpZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0sIFtcbiAgICAgICAgc3RvcmVcbiAgICBdKTtcbiAgICByZXR1cm4gc3RhdGU7XG59XG5mdW5jdGlvbiB1c2VFeHRlbnNpb25Db25maWdTdG9yZShzdG9yZSwgZXh0ZW5zaW9uKSB7XG4gICAgY29uc3QgW2NvbmZpZywgc2V0Q29uZmlnXSA9IHVzZVN0YXRlKHJlYWRJbml0aWFsRXh0ZW5zaW9uQ29uZmlnKHN0b3JlLCBleHRlbnNpb24pKTtcbiAgICB1c2VFZmZlY3QoKCk9PntcbiAgICAgICAgaWYgKGV4dGVuc2lvbikge1xuICAgICAgICAgICAgcmV0dXJuIHN0b3JlLnN1YnNjcmliZSgoc3RhdGUpPT57XG4gICAgICAgICAgICAgICAgY29uc3QgZXh0Q29uZmlnID0gZ2V0RXh0ZW5zaW9uQ29uZmlnRnJvbVN0b3JlKHN0YXRlLCBleHRlbnNpb24uZXh0ZW5zaW9uU2xvdE5hbWUsIGV4dGVuc2lvbi5leHRlbnNpb25JZCk7XG4gICAgICAgICAgICAgICAgaWYgKGV4dENvbmZpZy5sb2FkZWQgJiYgZXh0Q29uZmlnLmNvbmZpZyAmJiAhaXNFcXVhbChleHRDb25maWcuY29uZmlnLCBjb25maWcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldENvbmZpZyhleHRDb25maWcuY29uZmlnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0sIFtcbiAgICAgICAgc3RvcmUsXG4gICAgICAgIGV4dGVuc2lvbixcbiAgICAgICAgY29uZmlnXG4gICAgXSk7XG4gICAgcmV0dXJuIGNvbmZpZztcbn1cbmZ1bmN0aW9uIHVzZUV4dGVuc2lvbkNvbmZpZyhleHRlbnNpb24pIHtcbiAgICBjb25zdCBzdG9yZSA9IHVzZU1lbW8oZ2V0RXh0ZW5zaW9uc0NvbmZpZ1N0b3JlLCBbXSk7XG4gICAgY29uc3Qgc3RhdGUgPSB1c2VFeHRlbnNpb25Db25maWdTdG9yZShzdG9yZSwgZXh0ZW5zaW9uKTtcbiAgICBpZiAoIXN0YXRlICYmIGV4dGVuc2lvbikge1xuICAgICAgICAvLyBSZWFjdCB3aWxsIHByZXZlbnQgdGhlIGNsaWVudCBjb21wb25lbnQgZnJvbSByZW5kZXJpbmcgdW50aWwgdGhlIHByb21pc2UgcmVzb2x2ZXNcbiAgICAgICAgdGhyb3cgd2hlbkNvbmZpZ1JlYWR5KGAke2V4dGVuc2lvbi5leHRlbnNpb25TbG90TmFtZX0tJHtleHRlbnNpb24uZXh0ZW5zaW9uSWR9YCwgc3RvcmUsIChzdG9yZVN0YXRlKT0+e1xuICAgICAgICAgICAgY29uc3QgZXh0Q29uZmlnID0gZ2V0RXh0ZW5zaW9uQ29uZmlnRnJvbVN0b3JlKHN0b3JlU3RhdGUsIGV4dGVuc2lvbi5leHRlbnNpb25TbG90TmFtZSwgZXh0ZW5zaW9uLmV4dGVuc2lvbklkKTtcbiAgICAgICAgICAgIHJldHVybiBleHRDb25maWcubG9hZGVkID8gZXh0Q29uZmlnLmNvbmZpZyA6IG51bGw7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gc3RhdGUgfHwge307XG59XG5mdW5jdGlvbiB1c2VOb3JtYWxDb25maWcobW9kdWxlTmFtZSkge1xuICAgIGNvbnN0IHN0b3JlID0gdXNlTWVtbygoKT0+Z2V0Q29uZmlnU3RvcmUobW9kdWxlTmFtZSksIFtcbiAgICAgICAgbW9kdWxlTmFtZVxuICAgIF0pO1xuICAgIGNvbnN0IHN0YXRlID0gdXNlQ29uZmlnU3RvcmUoc3RvcmUpO1xuICAgIGlmICghc3RhdGUpIHtcbiAgICAgICAgLy8gUmVhY3Qgd2lsbCBwcmV2ZW50IHRoZSBjbGllbnQgY29tcG9uZW50IGZyb20gcmVuZGVyaW5nIHVudGlsIHRoZSBwcm9taXNlIHJlc29sdmVzXG4gICAgICAgIHRocm93IHdoZW5Db25maWdSZWFkeShtb2R1bGVOYW1lLCBzdG9yZSwgKHN0b3JlU3RhdGUpPT5zdG9yZVN0YXRlLmxvYWRlZCA/IHN0b3JlU3RhdGUuY29uZmlnIDogbnVsbCk7XG4gICAgfVxuICAgIHJldHVybiBzdGF0ZTtcbn1cbi8qKlxuICogVXNlIHRoaXMgUmVhY3QgSG9vayB0byBvYnRhaW4geW91ciBtb2R1bGUncyBjb25maWd1cmF0aW9uLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIEFkZGl0aW9uYWwgb3B0aW9ucyB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gdXNlQ29uZmlnKClcbiAqLyBleHBvcnQgZnVuY3Rpb24gdXNlQ29uZmlnKG9wdGlvbnMpIHtcbiAgICAvLyBUaGlzIGhvb2sgZ2V0cyB0aGUgYXBwcm9wcmlhdGUgY29uZmlndXJhdGlvbiBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgY2FsbGVyIGlzIGEgbW9kdWxlXG4gICAgLy8gb3IgYW4gZXh0ZW5zaW9uLCB3aGljaCBpcyBkZXRlcm1pbmVkIGZyb20gdGhlIENvbXBvbmVudENvbnRleHQuIEl0IHdpbGwgdGhyb3cgZm9yIHN1c3BlbnNlXG4gICAgLy8gaWYgdGhlIGNvbmZpZ3VyYXRpb24gaXMgbm90IHlldCBsb2FkZWQuXG4gICAgY29uc3QgeyBtb2R1bGVOYW1lOiBjb250ZXh0TW9kdWxlTmFtZSwgZXh0ZW5zaW9uIH0gPSB1c2VDb250ZXh0KENvbXBvbmVudENvbnRleHQpO1xuICAgIGNvbnN0IG1vZHVsZU5hbWUgPSBvcHRpb25zPy5leHRlcm5hbE1vZHVsZU5hbWUgPz8gY29udGV4dE1vZHVsZU5hbWU7XG4gICAgaWYgKCFtb2R1bGVOYW1lICYmICFleHRlbnNpb24pIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoZXJyb3JNZXNzYWdlKTtcbiAgICB9XG4gICAgY29uc3Qgbm9ybWFsQ29uZmlnID0gdXNlTm9ybWFsQ29uZmlnKG1vZHVsZU5hbWUpO1xuICAgIGNvbnN0IGV4dGVuc2lvbkNvbmZpZyA9IHVzZUV4dGVuc2lvbkNvbmZpZyhleHRlbnNpb24pO1xuICAgIGNvbnN0IGNvbmZpZyA9IHVzZU1lbW8oKCk9Pm9wdGlvbnM/LmV4dGVybmFsTW9kdWxlTmFtZSAmJiBtb2R1bGVOYW1lID09PSBvcHRpb25zLmV4dGVybmFsTW9kdWxlTmFtZSA/IHtcbiAgICAgICAgICAgIC4uLm5vcm1hbENvbmZpZ1xuICAgICAgICB9IDoge1xuICAgICAgICAgICAgLi4ubm9ybWFsQ29uZmlnLFxuICAgICAgICAgICAgLi4uZXh0ZW5zaW9uQ29uZmlnXG4gICAgICAgIH0sIFtcbiAgICAgICAgbW9kdWxlTmFtZSxcbiAgICAgICAgb3B0aW9ucz8uZXh0ZXJuYWxNb2R1bGVOYW1lLFxuICAgICAgICBub3JtYWxDb25maWcsXG4gICAgICAgIGV4dGVuc2lvbkNvbmZpZ1xuICAgIF0pO1xuICAgIHJldHVybiBjb25maWc7XG59XG4iXSwibmFtZXMiOlsidXNlQ29udGV4dCIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsImlzRXF1YWwiLCJnZXRDb25maWdTdG9yZSIsImdldEV4dGVuc2lvbnNDb25maWdTdG9yZSIsImdldEV4dGVuc2lvbkNvbmZpZ0Zyb21TdG9yZSIsIkNvbXBvbmVudENvbnRleHQiLCJwcm9taXNlcyIsImVycm9yTWVzc2FnZSIsInJlYWRJbml0aWFsQ29uZmlnIiwic3RvcmUiLCJzdGF0ZSIsInJlYWRJbml0aWFsRXh0ZW5zaW9uQ29uZmlnIiwiZXh0ZW5zaW9uIiwiZXh0Q29uZmlnIiwid2hlbkNvbmZpZ1JlYWR5IiwiY2FjaGVJZCIsInJlYWQiLCJjYWNoZWQiLCJwcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJjdXJyZW50IiwidW5zdWJzY3JpYmUiLCJjb25maWciLCJ1c2VDb25maWdTdG9yZSIsInNldFN0YXRlIiwidXNlRXh0ZW5zaW9uQ29uZmlnU3RvcmUiLCJzZXRDb25maWciLCJ1c2VFeHRlbnNpb25Db25maWciLCJzdG9yZVN0YXRlIiwidXNlTm9ybWFsQ29uZmlnIiwibW9kdWxlTmFtZSIsInVzZUNvbmZpZyIsIm9wdGlvbnMiLCJjb250ZXh0TW9kdWxlTmFtZSIsIkVycm9yIiwibm9ybWFsQ29uZmlnIiwiZXh0ZW5zaW9uQ29uZmlnIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSw2QkFBNkIsR0FBb0U7QUFDN0Q7QUFDd0U7QUFDbkQ7QUFDekQsTUFBTVMsV0FBVyxDQUFDO0FBQ2xCLE1BQU1DLGVBQWUsQ0FBQztxRkFDK0QsQ0FBQztBQUN0RixTQUFTQyxrQkFBa0JDLEtBQUs7SUFDNUIsT0FBTztRQUNILE1BQU1DLFFBQVFELE1BQU0sUUFBUTtRQUM1QixJQUFJQyxNQUFNLE1BQU0sSUFBSUEsTUFBTSxNQUFNLEVBQUU7WUFDOUIsT0FBT0EsTUFBTSxNQUFNO1FBQ3ZCO1FBQ0EsT0FBTztJQUNYO0FBQ0o7QUFDQSxTQUFTQywyQkFBMkJGLEtBQUssRUFBRUcsU0FBUztJQUNoRCxJQUFJQSxXQUFXO1FBQ1gsT0FBTztZQUNILE1BQU1GLFFBQVFELE1BQU0sUUFBUTtZQUM1QixNQUFNSSxZQUFZVCxvRUFBMkJBLENBQUNNLE9BQU9FLFVBQVUsaUJBQWlCLEVBQUVBLFVBQVUsV0FBVztZQUN2RyxJQUFJQyxVQUFVLE1BQU0sSUFBSUEsVUFBVSxNQUFNLEVBQUU7Z0JBQ3RDLE9BQU9BLFVBQVUsTUFBTTtZQUMzQjtRQUNKO0lBQ0o7SUFDQSxPQUFPO0FBQ1g7QUFDQTs7Ozs7O0NBTUMsR0FBRyxTQUFTQyxnQkFBZ0JDLE9BQU8sRUFBRU4sS0FBSyxFQUFFTyxJQUFJO0lBQzdDLE1BQU1DLFNBQVNYLFFBQVEsQ0FBQ1MsUUFBUTtJQUNoQyxJQUFJRSxRQUFRO1FBQ1IsT0FBT0E7SUFDWDtJQUNBLE1B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\n//# sourceURL=webpack-internal:///../../framework/esm-react-utils/dist/useConfig.js\n\n}");
|
|
4845
4845
|
|
|
4846
4846
|
},
|
|
4847
4847
|
"../../framework/esm-react-utils/dist/useConnectedExtensions.js"(__unused_rspack___webpack_module__, __webpack_exports__, __webpack_require__) {
|