@linker-design-plus/tiny-peony 1.4.20 → 1.4.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/foundation/contentManager/contentManager.d.ts +5 -0
- package/dist/index.d.ts +83 -21
- package/dist/index.js +34 -35
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +4579 -3046
- package/dist/index.mjs.map +1 -0
- package/dist/intersection/components/editor/context.d.ts +128 -2
- package/dist/intersection/components/editor/editor.d.ts +54 -10
- package/dist/intersection/components/editor/index.d.ts +83 -21
- package/dist/intersection/components/modals/Refine/RefineContent.d.ts +20 -0
- package/dist/intersection/components/modals/Refine/RefineGenerator.d.ts +19 -0
- package/dist/intersection/components/modals/Refine/RefineInput.d.ts +18 -0
- package/dist/intersection/components/modals/Refine/RefineShortcut.d.ts +2 -0
- package/dist/intersection/components/modals/Refine/RefineToolbar.d.ts +2 -0
- package/dist/intersection/components/modals/Refine/context.d.ts +128 -0
- package/dist/intersection/components/modals/Refine/icons/abort.vue.d.ts +2 -0
- package/dist/intersection/components/modals/Refine/icons/copy.vue.d.ts +2 -0
- package/dist/intersection/components/modals/Refine/icons/delete.vue.d.ts +2 -0
- package/dist/intersection/components/modals/Refine/icons/expand.vue.d.ts +2 -0
- package/dist/intersection/components/modals/Refine/icons/inexpand.vue.d.ts +2 -0
- package/dist/intersection/components/modals/Refine/icons/insert.vue.d.ts +2 -0
- package/dist/intersection/components/modals/Refine/icons/moreShortcut.vue.d.ts +2 -0
- package/dist/intersection/components/modals/Refine/icons/optimism.vue.d.ts +2 -0
- package/dist/intersection/components/modals/Refine/icons/prefix.vue.d.ts +2 -0
- package/dist/intersection/components/modals/Refine/icons/refresh.vue.d.ts +2 -0
- package/dist/intersection/components/modals/Refine/icons/replace.vue.d.ts +2 -0
- package/dist/intersection/components/modals/Refine/icons/send.vue.d.ts +2 -0
- package/dist/intersection/components/modals/Refine/index.d.ts +3 -0
- package/dist/intersection/components/modals/Refine/use-modal-pos.d.ts +10 -0
- package/dist/intersection/components/modals/Refine/use-range-highlight.d.ts +6 -0
- package/dist/intersection/hooks/use-copy.d.ts +4 -0
- package/dist/intersection/hooks/use-editor.d.ts +5 -3
- package/dist/intersection/hooks/use-state.d.ts +4 -0
- package/dist/plugins/AnchorTagPlugin/plugin.d.ts +4 -0
- package/dist/plugins/HomophonesTagPlugin/homophoner.vue.d.ts +2 -2
- package/dist/plugins/PronunciationTagPlugin/pronunciationor.vue.d.ts +2 -2
- package/dist/tiny-peony.css +1 -1
- package/dist/typings/actions/i-anchor.d.ts +8 -0
- package/dist/typings/intersection/editor.d.ts +10 -1
- package/dist/utils/dom.d.ts +19 -1
- package/dist/utils/shared.d.ts +11 -0
- package/package.json +6 -6
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../node_modules/.pnpm/@linker-design+utils@0.1.7/node_modules/@linker-design/utils/dist/index.mjs","../src/utils/shared.ts","../src/utils/value-type.ts","../src/typings/shared.ts","../src/typings/status/i-editor-manager.ts","../src/typings/status/i-content-manager.ts","../src/typings/status/i-cursor-manager.ts","../src/typings/status/i-undo-manager.ts","../src/typings/status/i-command-executor.ts","../src/typings/actions/i-plugin.ts","../src/foundation/commandExecutor/commandExecutor.ts","../src/foundation/editorManager/maxLength.ts","../src/foundation/contentManager/contentManager.ts","../src/foundation/cursorManager/cursorManager.ts","../src/foundation/undoManager/undoManager.ts","../../../node_modules/.pnpm/uuid@11.0.5/node_modules/uuid/dist/esm-browser/stringify.js","../../../node_modules/.pnpm/uuid@11.0.5/node_modules/uuid/dist/esm-browser/rng.js","../../../node_modules/.pnpm/uuid@11.0.5/node_modules/uuid/dist/esm-browser/native.js","../../../node_modules/.pnpm/uuid@11.0.5/node_modules/uuid/dist/esm-browser/v4.js","../src/foundation/editorManager/paste.ts","../src/foundation/editorManager/editor.ts","../src/utils/dom.ts","../../../node_modules/.pnpm/@vueuse+shared@12.4.0_typescript@5.7.3/node_modules/@vueuse/shared/index.mjs","../../../node_modules/.pnpm/@vueuse+core@12.4.0_typescript@5.7.3/node_modules/@vueuse/core/index.mjs","../src/plugins/PausationTagPlugin/pausationor.vue","../src/plugins/PausationTagPlugin/plugin.ts","../src/plugins/PronunciationTagPlugin/pronunciationor.vue","../src/plugins/PronunciationTagPlugin/plugin.ts","../src/plugins/AnchorTagPlugin/constant.ts","../src/plugins/AnchorTagPlugin/plugin.ts","../src/plugins/HomophonesTagPlugin/homophoner.vue","../src/plugins/HomophonesTagPlugin/plugin.ts","../src/intersection/components/editor/context.ts","../src/intersection/hooks/use-highlight.ts","../../../node_modules/.pnpm/@arco-design+web-vue@2.56.3_vue@3.5.13_typescript@5.7.3_/node_modules/@arco-design/web-vue/es/config-provider/context.js","../../../node_modules/.pnpm/@arco-design+web-vue@2.56.3_vue@3.5.13_typescript@5.7.3_/node_modules/@arco-design/web-vue/es/_utils/global-config.js","../../../node_modules/.pnpm/@arco-design+web-vue@2.56.3_vue@3.5.13_typescript@5.7.3_/node_modules/@arco-design/web-vue/es/_utils/is.js","../../../node_modules/.pnpm/@arco-design+web-vue@2.56.3_vue@3.5.13_typescript@5.7.3_/node_modules/@arco-design/web-vue/es/_virtual/plugin-vue_export-helper.js","../../../node_modules/.pnpm/@arco-design+web-vue@2.56.3_vue@3.5.13_typescript@5.7.3_/node_modules/@arco-design/web-vue/es/icon/icon-right/icon-right.js","../../../node_modules/.pnpm/@arco-design+web-vue@2.56.3_vue@3.5.13_typescript@5.7.3_/node_modules/@arco-design/web-vue/es/icon/icon-right/index.js","../../../node_modules/.pnpm/@arco-design+web-vue@2.56.3_vue@3.5.13_typescript@5.7.3_/node_modules/@arco-design/web-vue/es/icon/icon-check-circle-fill/icon-check-circle-fill.js","../../../node_modules/.pnpm/@arco-design+web-vue@2.56.3_vue@3.5.13_typescript@5.7.3_/node_modules/@arco-design/web-vue/es/icon/icon-check-circle-fill/index.js","../../../node_modules/.pnpm/@arco-design+web-vue@2.56.3_vue@3.5.13_typescript@5.7.3_/node_modules/@arco-design/web-vue/es/icon/icon-close-circle-fill/icon-close-circle-fill.js","../../../node_modules/.pnpm/@arco-design+web-vue@2.56.3_vue@3.5.13_typescript@5.7.3_/node_modules/@arco-design/web-vue/es/icon/icon-close-circle-fill/index.js","../../../node_modules/.pnpm/@arco-design+web-vue@2.56.3_vue@3.5.13_typescript@5.7.3_/node_modules/@arco-design/web-vue/es/icon/icon-exclamation-circle-fill/icon-exclamation-circle-fill.js","../../../node_modules/.pnpm/@arco-design+web-vue@2.56.3_vue@3.5.13_typescript@5.7.3_/node_modules/@arco-design/web-vue/es/icon/icon-exclamation-circle-fill/index.js","../../../node_modules/.pnpm/@arco-design+web-vue@2.56.3_vue@3.5.13_typescript@5.7.3_/node_modules/@arco-design/web-vue/es/icon/icon-info-circle-fill/icon-info-circle-fill.js","../../../node_modules/.pnpm/@arco-design+web-vue@2.56.3_vue@3.5.13_typescript@5.7.3_/node_modules/@arco-design/web-vue/es/icon/icon-info-circle-fill/index.js","../../../node_modules/.pnpm/@arco-design+web-vue@2.56.3_vue@3.5.13_typescript@5.7.3_/node_modules/@arco-design/web-vue/es/icon/icon-more/icon-more.js","../../../node_modules/.pnpm/@arco-design+web-vue@2.56.3_vue@3.5.13_typescript@5.7.3_/node_modules/@arco-design/web-vue/es/icon/icon-more/index.js","../../../node_modules/.pnpm/@om-design+util@1.6.1/node_modules/@om-design/util/dist/index.mjs","../src/intersection/components/CommonModal/composables/useModalWrapper.ts","../src/intersection/components/CommonModal/CommonModal.tsx","../src/intersection/components/CommonModal/index.ts","../src/intersection/hooks/use-state.ts","../src/intersection/components/modals/Refine/use-range-highlight.ts","../src/intersection/hooks/use-editor.ts","../src/intersection/components/editor/empty-anchor.png","../src/intersection/components/modals/contextMenu.vue","../src/intersection/components/modals/Refine/icons/optimism.vue","../src/intersection/components/modals/Refine/icons/expand.vue","../src/intersection/components/modals/Refine/icons/inexpand.vue","../src/intersection/components/modals/Refine/icons/moreShortcut.vue","../src/intersection/components/modals/Refine/context.ts","../src/intersection/components/modals/Refine/icons/replace.vue","../src/intersection/components/modals/Refine/icons/insert.vue","../src/intersection/components/modals/Refine/icons/refresh.vue","../src/intersection/components/modals/Refine/icons/copy.vue","../src/intersection/components/modals/Refine/icons/delete.vue","../src/intersection/hooks/use-copy.ts","../src/intersection/components/modals/Refine/RefineContent.tsx","../src/intersection/components/modals/Refine/icons/send.vue","../src/intersection/components/modals/Refine/icons/abort.vue","../src/intersection/components/modals/Refine/icons/prefix.vue","../src/intersection/components/modals/Refine/RefineInput.tsx","../src/intersection/components/modals/Refine/RefineShortcut.tsx","../src/intersection/components/modals/Refine/RefineToolbar.tsx","../src/intersection/components/modals/Refine/use-modal-pos.ts","../src/intersection/components/modals/Refine/RefineGenerator.tsx","../src/intersection/components/icons/IconPlay.vue","../src/intersection/components/icons/IconPause.vue","../src/intersection/components/icons/IconClose.vue","../src/intersection/components/editor/editor.tsx","../src/intersection/components/editor/index.ts","../src/index.ts"],"sourcesContent":["var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\n\n// src/base/array.ts\nvar mergeArrayWithDedupe = (a, b) => Array.from(/* @__PURE__ */ new Set([...a, ...b]));\n\n// src/base/enum.ts\nvar EnumClass = class {\n static Keys() {\n return this.Members().map((x) => x.key);\n }\n static Values() {\n return this.Members().map((x) => x.value);\n }\n static Members() {\n return Object.values(this).filter((x) => x instanceof EnumClass);\n }\n static GetKeyByValue(value) {\n const member = this.Members().find((m) => m.value === value);\n if (member)\n return member.key;\n return void 0;\n }\n static ToOptions() {\n return this.Members().map((m) => __spreadProps(__spreadValues({}, m), { title: m.key }));\n }\n constructor(key, value) {\n this.key = key;\n this.value = value;\n }\n equal(enumClass) {\n return this.value === enumClass.value;\n }\n};\n\n// src/base/id.ts\nvar Id = class {\n static New(prefix) {\n let res = `${this._id++}`;\n if (prefix) {\n res = `${prefix}_${res}`;\n }\n return res;\n }\n};\nId._id = 1;\n\n// src/base/is.ts\nvar getType = (value) => Object.prototype.toString.call(value);\nvar isNull = (value) => getType(value) === \"[object Null]\";\nvar isUndefined = (value) => getType(value) === \"[object Undefined]\";\nvar isBoolean = (value) => getType(value) === \"[object Boolean]\";\nvar isNumber = (value) => getType(value) === \"[object Number]\";\nvar isString = (value) => getType(value) === \"[object String]\";\nvar isArray = (value) => getType(value) === \"[object Array]\";\nvar isObject = (value) => getType(value) === \"[object Object]\";\nvar isPromise = (value) => getType(value) === \"[object Promise]\";\nvar isRegExp = (value) => getType(value) === \"[object RegExp]\";\nvar isDate = (value) => getType(value) === \"[object Date]\";\nvar isSymbol = (value) => getType(value) === \"[object Symbol]\";\nvar isFunction = (value) => getType(value) === \"[object Function]\";\n\n// src/base/object.ts\nvar KEY_DELIMITER = \".\";\nvar combinePath = (...path) => path.join(KEY_DELIMITER);\nvar getKeyByPath = (path) => {\n if (!path)\n return void 0;\n const lastDelimiterIndex = path.lastIndexOf(KEY_DELIMITER);\n return lastDelimiterIndex === -1 ? path : path.substring(lastDelimiterIndex + 1);\n};\nvar getParentKeyByPath = (path) => {\n if (!path)\n return void 0;\n const lastDelimiterIndex = path.lastIndexOf(KEY_DELIMITER);\n return lastDelimiterIndex === -1 ? void 0 : path.substring(0, lastDelimiterIndex);\n};\nvar getValueByPath = (data, path) => {\n if (isNumber(path) || isSymbol(path)) {\n return data[path];\n }\n const keys = path.split(KEY_DELIMITER);\n let i = 0;\n let res = data[keys[i++]];\n while (!!res && i < keys.length) {\n res = res[keys[i++]];\n }\n return res;\n};\nvar setValueByPath = (data, path, value, force = true) => {\n if (isNumber(path) || isSymbol(path)) {\n data[path] = value;\n return true;\n }\n const keys = path.split(KEY_DELIMITER);\n let i = 0;\n let res = data;\n while (i < keys.length - 1) {\n if (res[keys[i]]) {\n if (force)\n res[keys[i]] = {};\n else\n return false;\n }\n res = res[keys[i++]];\n }\n res[keys[i]] = value;\n return true;\n};\nvar deepMerge = (target, obj) => {\n for (const key of Object.keys(obj)) {\n const oldVal = target[key];\n const newVal = obj[key];\n if (Array.isArray(oldVal) && Array.isArray(newVal)) {\n target[key] = mergeArrayWithDedupe(oldVal, newVal);\n } else if (isObject(oldVal) && isObject(newVal)) {\n target[key] = deepMerge(oldVal, newVal);\n } else {\n target[key] = newVal;\n }\n }\n return target;\n};\n\n// src/base/string.ts\nvar REG_WORD = /\\B([A-Z])/g;\nvar REG_FIRST_CHAR = /^./;\nvar REG_KEBA_WORD = /-(\\w)/g;\nvar kebablize = (string) => string.replace(REG_WORD, \"-$1\").toLowerCase();\nvar pascalize = (string) => string.replace(REG_FIRST_CHAR, (match) => match.toUpperCase()).replace(REG_KEBA_WORD, (_, word) => {\n var _a;\n return (_a = word == null ? void 0 : word.toUpperCase()) != null ? _a : \"\";\n});\nvar camelize = (string) => string.replace(REG_FIRST_CHAR, (match) => match.toLowerCase()).replace(REG_KEBA_WORD, (_, word) => {\n var _a;\n return (_a = word == null ? void 0 : word.toUpperCase()) != null ? _a : \"\";\n});\n\n// src/base/tree.ts\nfunction updateTreeNodeChildren(target, children, predicate = (x, y) => x.id === y.id) {\n for (const node of target) {\n const child = children.find((x) => predicate(x, node));\n if (!child)\n continue;\n if (!child.children)\n continue;\n if (!node.children) {\n node.children = child.children;\n continue;\n }\n updateTreeNodeChildren(node.children, child.children);\n }\n return target;\n}\nfunction mergeTreeNodeChildren(target, children, predicate = (x, y) => x.id === y.id) {\n for (const child of children) {\n const node = target.find((x) => predicate(x, child));\n if (!node) {\n target.push(child);\n } else {\n if (!child.children)\n continue;\n if (!node.children) {\n node.children = child.children;\n continue;\n }\n mergeTreeNodeChildren(node.children, child.children);\n }\n }\n return target;\n}\nfunction findTreeNode(nodes, predicate) {\n const nnodes = Array.isArray(nodes) ? nodes : [nodes];\n for (const node of nnodes) {\n if (predicate(node))\n return node;\n if (!node.children)\n continue;\n const child = findTreeNode(node.children, predicate);\n if (child)\n return child;\n }\n return void 0;\n}\nfunction getTreeNodePath(nodes, predicate) {\n const res = new Array();\n findTreeNodePath(res, nodes, predicate);\n return res;\n}\nfunction findTreeNodePath(path, nodes, predicate) {\n const nnodes = Array.isArray(nodes) ? nodes : [nodes];\n for (const node of nnodes) {\n if (predicate(node)) {\n path.push(node);\n return true;\n }\n if (!node.children)\n continue;\n path.push(node);\n if (findTreeNodePath(path, node.children, predicate))\n return true;\n path.pop();\n }\n return false;\n}\nfunction getTreeFirstLeafByPreOrderDepth(node) {\n let n = node;\n while (n.children && Array.isArray(n.children) && n.children.length) {\n [n] = n.children;\n }\n return n;\n}\n\n// src/style/color.ts\nvar REG_HEX = /^#[a-fA-F0-9]{3}$|#[a-fA-F0-9]{6}$/;\nvar REG_RGB = /^rgb\\((\\s*\\d+\\s*,?){3}\\)$/;\nvar REG_RGBA = /^rgba\\((\\s*\\d+\\s*,\\s*){3}\\s*\\d(\\.\\d+)?\\s*\\)$/;\nvar isHex = (value) => REG_HEX.test(value);\nvar isRGB = (value) => REG_RGB.test(value);\nvar isRGBA = (value) => REG_RGBA.test(value);\n\n// src/style/bem.ts\nvar genMods = (name, mods) => {\n if (!mods) {\n return \"\";\n }\n if (typeof mods === \"string\") {\n return ` ${name}--${mods}`;\n }\n if (Array.isArray(mods)) {\n return mods.reduce((ret, item) => ret + genMods(name, item), \"\");\n }\n return Object.keys(mods).reduce((ret, key) => ret + (mods[key] ? genMods(name, key) : \"\"), \"\");\n};\nvar createBEM = (name) => (el, mods) => {\n if (el && typeof el !== \"string\") {\n mods = el;\n el = \"\";\n }\n el = el ? `${name}__${el}` : name;\n return `${el}${genMods(el, mods)}`;\n};\nvar createNamespace = (root) => (name) => {\n const space = `${root}-${name}`;\n return [createBEM(space), space];\n};\n\n// src/dom/index.ts\nvar getScrollBarWidth = (el) => el.tagName === \"BODY\" ? window.innerWidth - (document.documentElement.offsetWidth || document.body.offsetWidth) : el.offsetWidth - el.clientWidth;\nvar getRelativeRect = (target, relative) => {\n const targetRect = target.getBoundingClientRect();\n const relativeRect = relative.getBoundingClientRect();\n return {\n top: targetRect.top - relativeRect.top,\n bottom: relativeRect.bottom - targetRect.bottom,\n left: targetRect.left - relativeRect.left,\n right: relativeRect.right - targetRect.right,\n width: targetRect.width,\n height: targetRect.height\n };\n};\nexport {\n EnumClass,\n Id,\n KEY_DELIMITER,\n camelize,\n combinePath,\n createBEM,\n createNamespace,\n deepMerge,\n findTreeNode,\n findTreeNodePath,\n getKeyByPath,\n getParentKeyByPath,\n getRelativeRect,\n getScrollBarWidth,\n getTreeFirstLeafByPreOrderDepth,\n getTreeNodePath,\n getType,\n getValueByPath,\n isArray,\n isBoolean,\n isDate,\n isFunction,\n isHex,\n isNull,\n isNumber,\n isObject,\n isPromise,\n isRGB,\n isRGBA,\n isRegExp,\n isString,\n isSymbol,\n isUndefined,\n kebablize,\n mergeArrayWithDedupe,\n mergeTreeNodeChildren,\n pascalize,\n setValueByPath,\n updateTreeNodeChildren\n};\n","import { createNamespace } from '@linker-design/utils';\n\nexport const createTagSpace = createNamespace('tag');\n\nexport const createComponentSpace = createNamespace('c');\n\n/**\n * 创建一个带 requestAnimationFrame 的事件回调包装器\n * @param callback - 需要在动画帧中执行的函数\n * @returns 可直接作为事件监听器使用的包装函数\n */\nexport const withRaf = <T extends (...args: any[]) => void>(callback: T) => {\n let ticking = false;\n\n const wrapped = function (this: ThisParameterType<T>, ...args: Parameters<T>) {\n if (!ticking) {\n requestAnimationFrame(() => {\n callback.apply(this, args);\n ticking = false;\n });\n ticking = true;\n }\n };\n\n return wrapped as (...args: Parameters<T>) => void;\n};\n\n/**\n * 当前页面是否是 HTTPS\n * @returns {boolean}\n */\nexport const isHttps = (): boolean => {\n if (typeof window === 'undefined') {\n // 在 SSR(服务端渲染)环境下没有 window 对象\n return false;\n }\n\n return window.location.protocol === 'https:';\n};\n","export const valueType = (val: any) => {\n return Object.prototype.toString.call(val).slice(8, -1).toLocaleLowerCase();\n};\n\nexport const isString = (val: any): val is string => valueType(val) === 'string';\n\nexport const isNumber = (val: any): val is number => valueType(val) === 'number';\n\nexport const isArray = (val: any): val is any[] => valueType(val) === 'array';\n\nexport const isObject = (val: any): val is Record<string, unknown> => valueType(val) === 'object';\n\nexport const isNull = (val: any): val is null => valueType(val) === 'null';\n\nexport const isUndefined = (val: any): val is undefined => valueType(val) === 'undefined';\n\nexport const isNullable = (val: any): val is null | undefined => isNull(val) || isUndefined(val);\n\nexport const isBoolean = (val: any): val is boolean => valueType(val) === 'boolean';\n\nexport const isElement = (val: any): val is Element => val instanceof Element;\n\nexport const isHTMLElement = (val: any): val is HTMLElement => val instanceof HTMLElement;\n\nexport const isText = (val: any): val is Text => val?.nodeType === Node.TEXT_NODE;\n","export enum SelectionType {\n None = 'None',\n Caret = 'Caret',\n Range = 'Range',\n}\n\nexport enum PluginFlag {\n pausation = 'pausation',\n pronunciation = 'pronunciation',\n anchor = 'anchor',\n homophones = 'homophones',\n highlight = 'highlight',\n}\n\nexport enum ListenModeEnum {\n single = 'single',\n multiple = 'multiple',\n}\n","import { IPlugin } from '../actions/i-plugin';\nimport type { ICommandExecutor } from './i-command-executor';\nimport type { IContentManager } from './i-content-manager';\nimport type { ICursorManager } from './i-cursor-manager';\nimport type { IUndoManager } from './i-undo-manager';\n\nexport abstract class IEditorCore {\n abstract readonly _uid: string;\n\n abstract readonly _editorElement: HTMLElement;\n\n abstract content: IContentManager;\n\n abstract cursor: ICursorManager;\n\n abstract undo: IUndoManager;\n\n abstract command: ICommandExecutor;\n\n abstract maxLength: number;\n\n abstract plugin: Record<string, IPlugin>;\n\n abstract destroy(): void;\n\n abstract editorTop(): number;\n\n abstract editorLeft(): number;\n\n abstract appendContent(content: string | string[]): void;\n\n abstract element: HTMLElement;\n}\n","export abstract class IContentManager {\n abstract calcTextCount(): number;\n\n abstract getHtml(): string;\n\n abstract setHtml(content: string): void;\n\n abstract getContent(): string;\n\n abstract setContent(content: string): void;\n\n abstract appendContent(content: string | string[], cb?: (para: HTMLElement) => void): void;\n\n abstract insert(content: string | Node): void;\n\n abstract delete(): void;\n\n abstract update(content: string | Node): void;\n\n abstract getParas(): HTMLElement[];\n\n abstract getTextContent(): string[];\n\n abstract insertEmptyPara(): void;\n}\n","export abstract class ICursorManager {\n abstract range: Range | undefined;\n\n abstract isCaret(): boolean;\n\n abstract isRange(): boolean;\n\n abstract getRangeContent(): string;\n\n abstract toEnd(node: Node): void;\n\n abstract destroy(): void;\n\n abstract isRangeInEditor(): boolean;\n\n abstract getRangeTop(): number;\n}\n","import type { IContentManager } from './i-content-manager';\n\nexport type MatchedIndexes = Array<{\n index: number;\n}>;\n\nexport interface HistoryStackItem {\n content: string;\n anchorContent: string;\n startParaIndex: number;\n startMatchedIndexes: Array<{ index: number }>;\n startOffset: number;\n endParaIndex: number;\n endMatchedIndexes: Array<{ index: number }>;\n endOffset: number;\n}\n\nexport abstract class IUndoManager {\n abstract contentManager: IContentManager;\n\n abstract undoStack: HistoryStackItem[];\n\n abstract redoStack: HistoryStackItem[];\n\n abstract saveState(): void;\n\n abstract undo(): void;\n\n abstract redo(): void;\n\n abstract destroy(): void;\n}\n","import type { IContentManager } from './i-content-manager';\nimport type { ICursorManager } from './i-cursor-manager';\n\nexport abstract class ICommandExecutor {\n abstract contentManager: IContentManager;\n\n abstract cursorManager: ICursorManager;\n\n abstract executeUndo(): void;\n\n abstract executeRedo(): void;\n}\n","export abstract class IPlugin<Options = any, Data extends any = any> {\n abstract name: string;\n\n abstract prefix: string;\n\n abstract data: Data;\n\n abstract add(options: Options): void;\n\n abstract remove(target: HTMLSpanElement): void;\n\n abstract setup(): void;\n\n abstract destroy(): void;\n}\n","import { IContentManager, ICursorManager } from '../../typings';\nimport { ICommandExecutor } from '../../typings/status/i-command-executor';\n\nexport class CommandExecutor extends ICommandExecutor {\n contentManager: IContentManager;\n\n cursorManager: ICursorManager;\n\n constructor(_contentManager: IContentManager, _cursorManager: ICursorManager) {\n super();\n this.contentManager = _contentManager;\n this.cursorManager = _cursorManager;\n }\n\n executeUndo(): void {}\n\n executeRedo(): void {}\n}\n","import { IEditorCore } from '../../typings';\nimport { isNullable } from '../../utils';\n\nexport const hadnleCompositionEnd = (editor: IEditorCore, event: CompositionEvent) => {\n event.preventDefault();\n\n const insertTextCount = event.data?.length ?? 0;\n // `compositionend` 事件触发时,输入的内容已经插入到编辑器中,所以需要减去输入的内容\n const textCount = editor.content.calcTextCount() - insertTextCount;\n const restTextCount = editor.maxLength - textCount;\n\n // 如果剩余字数小于等于 0,直接删除输入的内容\n if (restTextCount >= insertTextCount || !insertTextCount) return;\n\n // 如果剩余字数小于输入的内容,截取输入的内容,(特殊:小于等于0时,截取所有)\n const truncationCount = restTextCount <= 0 ? insertTextCount : insertTextCount - restTextCount;\n const selection = window.getSelection();\n const range = selection?.getRangeAt(0);\n\n if (isNullable(selection) || isNullable(range)) return;\n\n const { endContainer, endOffset } = range;\n const compositionTextRange = document.createRange();\n compositionTextRange.setStart(endContainer, endOffset - truncationCount);\n compositionTextRange.setEnd(endContainer, endOffset);\n compositionTextRange.deleteContents();\n selection.removeAllRanges();\n selection.addRange(compositionTextRange);\n};\n\nexport const handleBeforeInput = (editor: IEditorCore, event: InputEvent) => {\n const { inputType } = event;\n if (\n editor.content.calcTextCount() >= editor.maxLength &&\n inputType.includes('insert') &&\n inputType !== 'insertParagraph'\n ) {\n event.preventDefault();\n }\n};\n\nexport const calcPasteTextLength = (editor: IEditorCore, paragraphs: string[]) => {\n const newParagraphs: string[] = [];\n const wordLength = editor.content.calcTextCount();\n let restWordLength = editor.maxLength - wordLength;\n\n if (restWordLength <= 0 || !paragraphs.length) return [];\n\n let para = paragraphs.shift()!;\n\n while (restWordLength > 0 && para) {\n if (para.length >= restWordLength) {\n newParagraphs.push(para.slice(0, restWordLength));\n return newParagraphs;\n }\n\n newParagraphs.push(para);\n restWordLength -= para.length;\n para = paragraphs.shift()!;\n }\n\n return newParagraphs;\n};\n","import { IContentManager, IEditorCore, PluginFlag } from '../../typings';\nimport { isArray, isHTMLElement, isNullable, isString, isText } from '../../utils/value-type';\nimport { PARAGRAPH_CLS, PARAGRAPH_EMPTY } from '../editorManager/editor';\nimport { calcPasteTextLength } from '../editorManager/maxLength';\n\nexport class ContentManager extends IContentManager {\n protected _editorElement: HTMLElement;\n\n private _editor: IEditorCore;\n\n constructor(element: HTMLElement, editor: IEditorCore) {\n super();\n this._editorElement = element;\n this._editor = editor;\n }\n\n // 置入空段落\n insertEmptyPara(): void {\n this._editorElement.innerHTML = PARAGRAPH_EMPTY;\n }\n\n // 计算文本字数\n calcTextCount(): number {\n return this.getTextContent().reduce((totalCount, para) => {\n return totalCount + para.length;\n }, 0);\n }\n\n // 获取内容\n getContent(): string {\n return this._editorElement.innerHTML;\n }\n\n getHtml(): string {\n return this.getContent();\n }\n\n // 覆盖内容\n setContent(content: string): void {\n this._editorElement.innerHTML = content;\n }\n\n setHtml(content: string): void {\n this.setContent(content);\n }\n\n // 增加内容(增量)\n appendContent(content: string | string[], cb?: (para: HTMLElement) => void): void {\n const contents = calcPasteTextLength(this._editor, isArray(content) ? content : [content]);\n const firstPara = this.getParas()[0];\n const firstContent = !firstPara.textContent?.length ? contents.shift() : undefined;\n\n if (firstContent) {\n firstPara.innerHTML = firstContent;\n cb?.(firstPara);\n }\n\n contents.forEach((content) => {\n const paraElm = document.createElement('p');\n paraElm.innerHTML = content;\n paraElm.classList.add(PARAGRAPH_CLS);\n this._editorElement.appendChild(paraElm);\n cb?.(paraElm);\n });\n }\n\n // 增加内容\n insert(content: string | Node): void {\n this._insert(content);\n }\n\n // 删除内容\n delete(): void {\n this._delete();\n }\n\n // 更新内容(删除 ➕ 增加)\n update(content: string | Node): void {\n this._update(content);\n }\n\n // 获取段落节点\n getParas(): HTMLElement[] {\n const paras = Array.from(\n this._editorElement.querySelectorAll(`.${PARAGRAPH_CLS}`)\n ) as HTMLElement[];\n\n return paras;\n }\n\n // 获取纯文本内容(段落划分)\n getTextContent(): string[] {\n const paras = this.getParas();\n\n const getText = (pElm: HTMLElement) => {\n const childNodes = Array.from(pElm.childNodes);\n let content = '';\n\n for (let i = 0; i < childNodes.length; i++) {\n const node = childNodes[i];\n\n if (isText(node)) {\n content += node.textContent ?? '';\n } else if (isHTMLElement(node)) {\n content +=\n // 主播标签需要递归处理\n PluginFlag.anchor === node.dataset.type\n ? getText(node)\n : // 读音替换标签,需要使用替换后文本\n PluginFlag.pronunciation === node.dataset.type\n ? node.dataset.value\n : node.dataset.raw ?? '';\n }\n }\n\n return content;\n };\n\n return paras.map(getText);\n }\n\n private _insert(content: string | Node) {\n const selection = window.getSelection();\n const range = this._editor.cursor.isRangeInEditor()\n ? selection?.getRangeAt(0)\n : this._editor.cursor.range;\n\n if (isNullable(selection) || !selection.rangeCount || isNullable(range)) return;\n\n const fragment = document.createDocumentFragment();\n\n if (isString(content)) {\n const tempContainer = document.createElement('div');\n tempContainer.innerHTML = content;\n\n while (tempContainer.firstChild) {\n fragment.appendChild(tempContainer.firstChild);\n }\n } else {\n fragment.appendChild(content);\n }\n\n const endNode = fragment.lastChild!;\n const computedRange = this._calcRange(range) ?? range;\n computedRange.insertNode(fragment);\n\n const newRange = document.createRange();\n newRange.setStartAfter(endNode);\n newRange.setEndAfter(endNode);\n selection.removeAllRanges();\n selection.addRange(newRange);\n }\n\n private _delete() {\n const { range } = this._editor.cursor;\n\n range?.deleteContents();\n }\n\n private _update(content: string | Node) {\n this._delete();\n this._insert(content);\n }\n\n /**\n * 将 fragment 插入到 range 所在 contenteditable 的上一个 <p> 元素末尾\n * @param {Range} range - 当前的 Range 对象\n */\n private _calcRange(range: Range) {\n const container = range.commonAncestorContainer as HTMLElement;\n\n // 如果选区位于审核节点中,创建新选区,定位在审核节点后面\n // 否则会将片段插入到审核节点中,不正确\n if (\n isHTMLElement(range.startContainer) &&\n range.startContainer.dataset.type === PluginFlag.highlight &&\n range.endContainer.nodeType === Node.TEXT_NODE\n ) {\n const newRange = document.createRange();\n newRange.setStartAfter(range.startContainer);\n newRange.collapse(true);\n\n return newRange;\n }\n\n if (container.tagName !== 'DIV') {\n return range;\n }\n\n // Range 如果直接位于 div 上,startOffset 是子节点索引\n const index = range.startOffset;\n const children = Array.from(container.children).filter((el) => el.tagName === 'P');\n\n if (index <= 0 || index - 1 >= children.length) {\n console.warn('上一个 <p> 不存在');\n return range;\n }\n\n const prevP = children[index - 1];\n if (!prevP) {\n console.warn('未找到上一个 <p>');\n return range;\n }\n\n // 在 <p> 末尾创建新的 range\n const newRange = document.createRange();\n newRange.selectNodeContents(prevP);\n newRange.collapse(false);\n\n return newRange;\n }\n}\n","import { ICursorManager, SelectionType } from '../../typings';\nimport { isNullable } from '../../utils';\n\nexport class CursorManager extends ICursorManager {\n private _editorElement: HTMLDivElement;\n\n range: Range | undefined = undefined;\n\n constructor(_element: HTMLDivElement) {\n super();\n this._editorElement = _element;\n this._recordRange = this._recordRange.bind(this);\n\n document.addEventListener('selectionchange', this._recordRange);\n }\n\n destroy() {\n document.removeEventListener('selectionchange', this._recordRange);\n }\n\n private _recordRange(e: Event) {\n if (!this.isRangeInEditor()) return;\n\n this.range = window.getSelection()?.getRangeAt(0).cloneRange();\n }\n\n isRangeInEditor(): boolean {\n const selection = window.getSelection();\n\n if (isNullable(selection) || !selection.rangeCount) return false;\n\n const range = selection.getRangeAt(0);\n\n return this._editorElement.contains(range.commonAncestorContainer);\n }\n\n isCaret() {\n return this.range?.collapsed === true;\n }\n\n isRange() {\n return this.range?.collapsed === false;\n }\n\n getRangeContent(): string {\n if (this.isCaret()) return '';\n\n return this.range?.toString() ?? '';\n }\n\n toEnd(node: Node) {\n const selection = window.getSelection();\n\n if (isNullable(selection)) return;\n\n const newRange = document.createRange();\n newRange.setStartAfter(node);\n newRange.setEndAfter(node);\n selection.removeAllRanges();\n selection.addRange(newRange);\n }\n\n getRangeTop(): number {\n return (\n (this.range?.getBoundingClientRect().top ?? 0) -\n this._editorElement.getBoundingClientRect().top +\n 16\n );\n }\n}\n","import { PluginMap } from '../../intersection/hooks/use-editor';\nimport { IContentManager, IEditorCore } from '../../typings';\nimport {\n HistoryStackItem,\n IUndoManager,\n MatchedIndexes,\n} from '../../typings/status/i-undo-manager';\nimport { findClosestPara, isHTMLElement, isNullable, isText } from '../../utils';\nimport { PARAGRAPH_CLS } from '../editorManager/editor';\n\nexport class UndoManager extends IUndoManager {\n private _editor: IEditorCore;\n\n private _onUndoChange?: (anchorContent: string) => void = undefined;\n\n contentManager: IContentManager;\n\n undoStack: HistoryStackItem[];\n\n redoStack: HistoryStackItem[];\n\n constructor(\n _editor: IEditorCore,\n _contentManager: IContentManager,\n _undoChange?: (anchorContent: string) => void\n ) {\n super();\n this._editor = _editor;\n this.contentManager = _contentManager;\n this.undoStack = [];\n this.redoStack = [];\n\n this._onUndoChange = _undoChange;\n this._handleInput = this._handleInput.bind(this);\n this._handleUndoOrRedo = this._handleUndoOrRedo.bind(this);\n\n this._editor.element.addEventListener('beforeinput', this._handleInput);\n this._editor.element.addEventListener('keydown', this._handleUndoOrRedo);\n }\n\n saveState(): void {}\n\n undo(): void {}\n\n redo(): void {}\n\n destroy(): void {\n this._editor.element.removeEventListener('beforeinput', this._handleInput);\n this._editor.element.removeEventListener('keydown', this._handleUndoOrRedo);\n }\n\n private _calcNodePathMatches(node: Node) {\n const path: MatchedIndexes = [];\n let target: Node | HTMLElement | null = node;\n\n while (target) {\n if (!target.parentElement) break;\n\n const nodes = Array.from(target.parentElement.childNodes);\n const matchedIndex = nodes.indexOf(target as ChildNode);\n\n path.unshift({ index: matchedIndex });\n\n if (\n isHTMLElement(target) &&\n target.tagName === 'P' &&\n target.classList.contains(PARAGRAPH_CLS)\n )\n break;\n\n target = target.parentElement;\n }\n\n return path;\n }\n\n private _record() {\n const range = this._editor.cursor.range!;\n // * 获取起始节点所在段落的索引\n // * 获取起始节点所在段落中子节点的索引\n const paras = this._editor.content.getParas();\n const startPara = findClosestPara(range.startContainer as HTMLElement)!;\n const startParaIndex = paras.indexOf(startPara);\n const startMatchedIndexes = this._calcNodePathMatches(range.startContainer);\n\n // * 获取结束节点所在段落的索引\n // * 获取结束节点所在段落中子节点的索引\n const endPara = findClosestPara(range.endContainer as HTMLElement)!;\n const endParaIndex = paras.indexOf(endPara);\n const endMatchedIndexes = this._calcNodePathMatches(range.endContainer);\n\n return {\n startParaIndex,\n startMatchedIndexes,\n startOffset: range.startOffset,\n endParaIndex,\n endMatchedIndexes,\n endOffset: range.endOffset,\n content: this._editor.element.innerHTML,\n anchorContent: JSON.stringify(\n (this._editor.plugin as unknown as PluginMap).anchor?.data ?? {}\n ),\n };\n }\n\n private _handleInput() {\n this.undoStack.push(this._record()); // 记录历史状态\n this.redoStack = []; // 清空重做栈\n }\n\n private _handleUndoOrRedo(e: KeyboardEvent) {\n // 撤销操作\n if (e.ctrlKey && e.key === 'z') {\n e.preventDefault();\n if (this.undoStack.length > 0) {\n this.redoStack.push(this._record()); // 先存当前状态\n const record = this.undoStack.pop()!;\n if (this._editor.content.calcTextCount()) {\n requestAnimationFrame(() => this._restoreCursor(record));\n }\n this._editor.element.innerHTML = record.content;\n this._onUndoChange?.(record.anchorContent);\n }\n }\n\n // if (e.ctrlKey && e.key === 'y') {\n // e.preventDefault();\n // if (this.redoStack.length > 0) {\n // this.undoStack.push(this._editorElement.innerHTML); // 先存当前状态\n // this._editorElement.innerHTML = this.redoStack.pop()!; // 取出下一个状态\n // }\n // }\n }\n\n private _restoreCursor(record: HistoryStackItem) {\n const selection = window.getSelection();\n\n if (isNullable(selection)) return;\n\n const matchNode = (matchedIndexes: MatchedIndexes) => {\n let nodes = this._editor.content.getParas() as ChildNode[];\n let { index } = matchedIndexes[0];\n let matched = null;\n let i = 0;\n\n while (i < matchedIndexes.length) {\n matched = nodes[index];\n\n if (isText(matched)) return matched;\n\n nodes = Array.from(matched.childNodes) as ChildNode[];\n\n i++;\n if (i >= matchedIndexes.length) break;\n\n index = matchedIndexes[i].index;\n }\n\n return matched as Text;\n };\n\n const startContainer = matchNode(record.startMatchedIndexes);\n const endContainer = matchNode(record.endMatchedIndexes);\n const newRange = document.createRange();\n\n newRange.setStart(startContainer, record.startOffset);\n newRange.setEnd(endContainer, record.endOffset);\n selection.removeAllRanges();\n selection.addRange(newRange);\n }\n}\n","import validate from './validate.js';\nconst byteToHex = [];\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\nexport function unsafeStringify(arr, offset = 0) {\n return (byteToHex[arr[offset + 0]] +\n byteToHex[arr[offset + 1]] +\n byteToHex[arr[offset + 2]] +\n byteToHex[arr[offset + 3]] +\n '-' +\n byteToHex[arr[offset + 4]] +\n byteToHex[arr[offset + 5]] +\n '-' +\n byteToHex[arr[offset + 6]] +\n byteToHex[arr[offset + 7]] +\n '-' +\n byteToHex[arr[offset + 8]] +\n byteToHex[arr[offset + 9]] +\n '-' +\n byteToHex[arr[offset + 10]] +\n byteToHex[arr[offset + 11]] +\n byteToHex[arr[offset + 12]] +\n byteToHex[arr[offset + 13]] +\n byteToHex[arr[offset + 14]] +\n byteToHex[arr[offset + 15]]).toLowerCase();\n}\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n return uuid;\n}\nexport default stringify;\n","let getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n if (!getRandomValues) {\n if (typeof crypto === 'undefined' || !crypto.getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n getRandomValues = crypto.getRandomValues.bind(crypto);\n }\n return getRandomValues(rnds8);\n}\n","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default { randomUUID };\n","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n options = options || {};\n const rnds = options.random ?? options.rng?.() ?? rng();\n if (rnds.length < 16) {\n throw new Error('Random bytes length must be >= 16');\n }\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n if (buf) {\n offset = offset || 0;\n if (offset < 0 || offset + 16 > buf.length) {\n throw new RangeError(`UUID byte range ${offset}:${offset + 15} is out of buffer bounds`);\n }\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n return buf;\n }\n return unsafeStringify(rnds);\n}\nexport default v4;\n","import { IEditorCore, PluginFlag } from '../../typings';\nimport { findClosestPara, findParent, isHTMLElement, isNullable, isText } from '../../utils';\nimport { PARAGRAPH_CLS } from './editor';\n\nexport const handleInsertEndPausationTag = (editor: IEditorCore, elm: HTMLElement) => {\n const selection = window.getSelection();\n const newRange = document.createRange();\n const lastNode = elm.lastChild;\n\n if (isNullable(lastNode) || isNullable(selection)) return;\n\n newRange.setStartAfter(lastNode);\n newRange.setEndAfter(lastNode);\n selection.removeAllRanges();\n selection.addRange(newRange);\n (editor.plugin as any).pausation?.add({ delay: 1 });\n};\n\n// 粘贴事件处理函数\n// TODO 优化:起始和结束段落重复逻辑,抽象成函数\n// TODO 优化:插入新段落逻辑,抽象成函数,和 contentManager 类的 appendContent 方法合并\nexport const handlePaste = (editor: IEditorCore, paragraphs: string[]) => {\n // 手动触发 `beforeInput` 事件,录入操作记录栈\n const event = new InputEvent('beforeinput', {\n bubbles: true,\n cancelable: true,\n inputType: 'insertText',\n data: 'Hello',\n });\n editor.element.dispatchEvent(event);\n\n const { range: innerRange } = editor.cursor;\n const firstParaContent = paragraphs[0];\n const lastParaContent = paragraphs[paragraphs.length - 1];\n const midParaContents = paragraphs.slice(1, -1);\n\n let range = innerRange;\n\n // 要求如下:\n // * 1. 粘贴内容只有一个文本段落时,在光标所在段落插入粘贴内容即可;\n // * 2. 粘贴内容有多个文本段落时,光标所在段落拆分成两个P文本段落Pa 和 Pb,粘贴内容的第一个文本段落插入在Pa的末尾,粘贴内容的最后一个文本段落插入在Pb的起始,粘贴内容的其它段落自己创建新的p标签段落。\n\n if (!firstParaContent || !range) return;\n\n let startContainer: Node | null = null;\n let startOffset = 0;\n let endContainer: Node | null = null;\n\n if (editor.cursor.isRange()) {\n startContainer = range.startContainer;\n startOffset = range.startOffset;\n endContainer = range.endContainer;\n range.deleteContents();\n }\n\n if (paragraphs.length === 1) {\n editor.content.insert(firstParaContent);\n\n return;\n }\n\n // 跨段划选文本,先合并文本定位光标,再执行粘贴操作\n const isCrossPara =\n isHTMLElement(range.commonAncestorContainer) && range.commonAncestorContainer.tagName === 'DIV';\n if (isCrossPara) {\n const startP = findClosestPara(startContainer as HTMLElement);\n const endP = findClosestPara(endContainer as HTMLElement);\n const fragment = document.createDocumentFragment();\n\n while (endP?.firstChild) {\n fragment.appendChild(endP.firstChild);\n }\n startP?.appendChild(fragment);\n endP?.remove();\n const selection = window.getSelection();\n const newRange = document.createRange();\n newRange.setStart(startContainer!, startOffset);\n newRange.setEnd(startContainer!, startOffset);\n selection?.removeAllRanges();\n selection?.addRange(newRange);\n }\n\n // 使用最新光标位置,统一分割段落逻辑\n range = editor.cursor.isRangeInEditor() ? window.getSelection()!.getRangeAt(0)! : innerRange!;\n range =\n isText(range.commonAncestorContainer) &&\n range.commonAncestorContainer.textContent === '粘贴文本'\n ? innerRange!\n : range;\n const [originPara] = findParent(\n range.commonAncestorContainer as HTMLElement,\n (elm) => elm.tagName === 'P' && elm.classList.contains(PARAGRAPH_CLS)\n );\n const [anchorTag] = findParent(range.startContainer as HTMLElement, (elm) => {\n return elm.tagName === 'SPAN' && elm.dataset.type === PluginFlag.anchor;\n });\n const rangeAfterCaret = document.createRange();\n const isRangeFocusInAnchor = !!anchorTag;\n rangeAfterCaret.setStart(range.startContainer, range.startOffset);\n rangeAfterCaret.setEndAfter(originPara!.lastChild!);\n const fragment = rangeAfterCaret.extractContents();\n\n // 起始段落\n if (!originPara?.textContent) {\n originPara!.innerHTML = firstParaContent;\n } else if (isText(originPara.lastChild)) {\n originPara.lastChild.textContent += firstParaContent;\n } else if (\n isHTMLElement(originPara.lastChild) &&\n originPara.lastChild.dataset.type === PluginFlag.anchor\n ) {\n const { lastChild } = originPara.lastChild;\n\n if (isText(lastChild)) {\n lastChild.textContent += firstParaContent;\n } else {\n lastChild?.appendChild(document.createTextNode(firstParaContent));\n }\n } else {\n originPara.appendChild(document.createTextNode(firstParaContent));\n }\n\n handleInsertEndPausationTag(\n editor,\n isRangeFocusInAnchor ? (originPara!.lastChild as HTMLElement) : originPara!\n );\n\n // 中间段落\n let { nextSibling } = originPara!;\n midParaContents.forEach((content) => {\n const newPara = document.createElement('p');\n newPara.classList.add(PARAGRAPH_CLS);\n newPara.textContent = content;\n originPara?.parentNode?.insertBefore(newPara, nextSibling);\n nextSibling = newPara.nextSibling;\n handleInsertEndPausationTag(editor, newPara);\n\n if (isRangeFocusInAnchor) {\n const newAnchorTag = anchorTag.cloneNode(false) as HTMLElement;\n newAnchorTag.innerHTML = newPara.innerHTML;\n newPara.innerHTML = newAnchorTag.outerHTML;\n }\n });\n\n // 末尾段落\n if (!lastParaContent) return;\n const lastPara = document.createElement('p');\n lastPara.classList.add(PARAGRAPH_CLS);\n lastPara.appendChild(fragment);\n if (!lastPara.textContent) {\n lastPara.innerHTML = lastParaContent;\n } else if (isText(lastPara.firstChild)) {\n lastPara.firstChild.textContent = lastParaContent + lastPara.firstChild.textContent;\n } else if (\n isHTMLElement(lastPara.firstChild) &&\n lastPara.firstChild.dataset.type === PluginFlag.anchor\n ) {\n const { firstChild } = lastPara.firstChild;\n\n if (isText(firstChild)) {\n firstChild.textContent = lastParaContent + firstChild.textContent;\n } else {\n firstChild?.insertBefore(document.createTextNode(lastParaContent), firstChild.firstChild);\n }\n } else {\n lastPara.insertBefore(document.createTextNode(lastParaContent), lastPara.firstChild);\n }\n editor.element.insertBefore(lastPara, nextSibling);\n const needPausationTag = [0.5, 1, 1.5, 2, 2.5].every((delay) => {\n return !lastPara.textContent?.trim().endsWith(`停顿: ${delay}S`);\n });\n needPausationTag && handleInsertEndPausationTag(editor, lastPara);\n};\n","import {\n ICommandExecutor,\n IContentManager,\n ICursorManager,\n IUndoManager,\n PluginFlag,\n} from '../../typings';\nimport { IPlugin } from '../../typings/actions/i-plugin';\nimport { IEditorCore } from '../../typings/status/i-editor-manager';\nimport {\n clearParagraphKeep,\n createComponentSpace,\n ensureCaretInParagraph,\n findClosestPara,\n findParent,\n isCursorAtParagraphEnd,\n isHTMLElement,\n isNullable,\n isText,\n spellingTextNode,\n} from '../../utils';\nimport { CommandExecutor } from '../commandExecutor/commandExecutor';\nimport { ContentManager } from '../contentManager/contentManager';\nimport { CursorManager } from '../cursorManager/cursorManager';\nimport { UndoManager } from '../undoManager/undoManager';\n\nimport { v4 as uuidv4 } from 'uuid';\nimport { handleInsertEndPausationTag, handlePaste } from './paste';\nimport { isNull } from '@linker-design/utils';\nimport { calcPasteTextLength, hadnleCompositionEnd, handleBeforeInput } from './maxLength';\n\nexport type PluginConstructor<T extends IPlugin = IPlugin> = new (editor: IEditorCore) => T;\n\nexport type PluginMap<Plugins extends PluginConstructor[]> = {\n [K in Plugins[number] as InstanceType<K>['prefix']]: InstanceType<K>;\n};\n\nexport interface EditorCoreOptions<Plugins extends PluginConstructor<IPlugin>[]> {\n plugins?: Plugins;\n maxLength: number;\n onChange?: (contentLength: number) => void;\n onUndoChange?: (anchorContent: string) => void;\n}\n\nconst [bem] = createComponentSpace('paragraph');\n\nexport const PARAGRAPH_CLS = bem();\n\nexport const PARAGRAPH_EMPTY = `<p class=\"${PARAGRAPH_CLS}\"><br /></p>`;\n\nexport class EditorCore<Plugins extends PluginConstructor[] = []> extends IEditorCore {\n private _observer: MutationObserver | null = null;\n\n private _onchange?: (contentLength: number) => void = undefined;\n\n readonly _editorElement: HTMLElement;\n\n readonly _uid: string;\n\n content: IContentManager;\n\n cursor: ICursorManager;\n\n undo: IUndoManager;\n\n command: ICommandExecutor;\n\n maxLength: number;\n\n plugin: PluginMap<Plugins>;\n\n constructor(editorElement: HTMLDivElement, options?: EditorCoreOptions<Plugins>) {\n super();\n this._uid = uuidv4();\n this._editorElement = editorElement;\n this.content = new ContentManager(editorElement, this);\n this.cursor = new CursorManager(editorElement);\n this.undo = new UndoManager(this, this.content, options?.onUndoChange);\n this.command = new CommandExecutor(this.content, this.cursor);\n this.maxLength = options?.maxLength ?? 10000;\n this.plugin = (options?.plugins ?? []).reduce((map, PluginClass) => {\n const pluginInstance = new PluginClass(this);\n const prefix = pluginInstance.prefix as keyof PluginMap<Plugins>;\n\n map[prefix] = pluginInstance as PluginMap<Plugins>[typeof pluginInstance.prefix];\n\n return map;\n }, {} as PluginMap<Plugins>);\n\n this._onchange = options?.onChange;\n this._handleBackspace = this._handleBackspace.bind(this);\n this._handlePaste = this._handlePaste.bind(this);\n this._handleBeforeInput = this._handleBeforeInput.bind(this);\n this._handleCompositionEnd = this._handleCompositionEnd.bind(this);\n this._setup();\n }\n\n destroy(): void {\n this._teardown();\n }\n\n editorTop(): number {\n return this._editorElement.getBoundingClientRect().top;\n }\n\n editorLeft(): number {\n return this._editorElement.getBoundingClientRect().left;\n }\n\n appendContent(content: string | string[]): void {\n this.content.appendContent(content, (para) => handleInsertEndPausationTag(this, para));\n }\n\n get element() {\n return this._editorElement;\n }\n\n private _setup() {\n this._observer = new MutationObserver(([mutation]) => {\n // * 移除高亮敏感词遗留样式问题\n if (mutation.removedNodes.length) {\n const tag = mutation.removedNodes[0];\n\n if (isHTMLElement(tag) && tag.dataset.type === PluginFlag.highlight) {\n const selection = window.getSelection();\n const { range } = this.cursor;\n\n if (isNullable(range) || isNullable(selection)) return;\n\n const placeholderNode = document.createTextNode('');\n const newRange = document.createRange();\n range.insertNode(placeholderNode);\n newRange.setStartAfter(placeholderNode);\n newRange.setEndAfter(placeholderNode);\n selection.removeAllRanges();\n selection.addRange(newRange);\n }\n }\n\n mutation.addedNodes.forEach((node) => {\n if (\n isHTMLElement(node) &&\n node.tagName === 'P' &&\n !node.classList.contains(PARAGRAPH_CLS)\n ) {\n node.classList.add(PARAGRAPH_CLS);\n }\n });\n\n // 插入空段落\n if (mutation.removedNodes.length && !this.content.getParas().length) {\n this.content.insertEmptyPara();\n }\n this._onchange?.(this.content.calcTextCount());\n\n // * 移除冗余P标签默认行为插入的内联样式\n (Array.from(document.querySelectorAll('p')) as HTMLElement[]).forEach((node) => {\n if (Array.from(node.style).includes('text-indent')) {\n // node.style.removeProperty('text-indent')\n node.removeAttribute('style');\n }\n\n const childNodes = Array.from(node.childNodes);\n\n childNodes.forEach((childNode) => {\n if (\n isHTMLElement(childNode) &&\n childNode.tagName === 'FONT' &&\n isHTMLElement(childNode.firstChild) &&\n childNode.firstChild?.tagName === 'SPAN'\n ) {\n const highlightSpan = childNode.firstChild;\n\n childNode.replaceWith(highlightSpan.textContent ?? '');\n node.normalize();\n }\n });\n });\n // * 移除冗余span标签\n (Array.from(document.querySelectorAll('p span')) as HTMLElement[]).forEach((span) => {\n const parent = span.parentNode;\n const firstNode = span.firstChild;\n\n // span是否有placeholder属性\n const hasPlaceholder = span && span.getAttribute('data-placeholder') !== null;\n if (hasPlaceholder) return;\n // 移除删除时默认行为插入的span标签\n // span && span.style.textIndent === '20px' && span.style.fontSize;\n const needRemoveSpanForDelete =\n span && span.style.textIndent === '20px' && span.style.fontSize && span.style.color;\n // 移除删除内容后再输入时自带滑选文案背景色格式的span标签\n const needRemoveSpanForAnchor =\n span && span.style.backgroundColor && span.parentElement?.style.textIndent === '0px';\n // 移除删除内容后只包含空文本节点或BR节点的span标签\n const needRemoveSpanForEmpty =\n span &&\n Array.from(span.childNodes).every((node) => {\n return (\n (isText(node) && !node.textContent) || (isHTMLElement(node) && node.tagName === 'BR')\n );\n });\n /**\n * @desc 移除删除时(只删除末尾带有一个标签的完全划选文本)SPAN标签内默认插入的BR节点\n * @bug https://zt.linker.cc/bug-view-174821.html\n */\n const needRemoveBRInSpanForDelete =\n span && isHTMLElement(span.firstChild) && span.firstChild.tagName === 'BR';\n\n if (needRemoveSpanForDelete || needRemoveSpanForAnchor) {\n while (span.firstChild) {\n parent?.insertBefore(span.firstChild, span);\n }\n parent?.removeChild(span);\n spellingTextNode(firstNode!);\n }\n\n if (needRemoveSpanForEmpty) {\n parent?.removeChild(span);\n }\n\n if (needRemoveSpanForAnchor) {\n (parent as HTMLElement).removeAttribute('style');\n // 重新定位光标至文本末尾,否则移除SPAN标签后,输入第一个字符后光标在字符左边(理想状态是右边)\n const selection = window.getSelection();\n const range = selection?.getRangeAt(0);\n const newRange = range!.cloneRange()!;\n newRange.setStartAfter(newRange.startContainer);\n newRange.setEndAfter(newRange.endContainer);\n selection?.removeAllRanges();\n selection?.addRange(newRange!);\n }\n\n if (needRemoveBRInSpanForDelete) {\n span.removeChild(span.firstChild);\n }\n });\n\n // 移除换行时上一行留下的br标签\n this.content.getParas().forEach((para) => {\n const firstNode = para.firstChild;\n const lastNode = para.lastChild;\n\n if (para.childNodes.length > 1) {\n isHTMLElement(lastNode) && lastNode.tagName === 'BR' && lastNode.remove();\n isHTMLElement(firstNode) && firstNode.tagName === 'BR' && firstNode.remove();\n Array.from(para.childNodes).forEach((node) => {\n if (isHTMLElement(node) && node.tagName === 'BR') node.remove();\n });\n }\n\n if (\n para.childNodes.length === 0 ||\n (para.childNodes.length === 1 &&\n isText(para.childNodes[0]) &&\n para.childNodes[0].textContent === '')\n ) {\n para.remove();\n }\n });\n });\n this._observer.observe(this._editorElement, {\n childList: true,\n subtree: true,\n characterData: true,\n });\n this._editorElement.addEventListener('keydown', this._handleBackspace);\n this._editorElement.addEventListener('paste', this._handlePaste);\n this._editorElement.addEventListener('beforeinput', this._handleBeforeInput);\n this._editorElement.addEventListener('compositionend', this._handleCompositionEnd);\n\n // 安装插件自定义行为\n (Object.values(this.plugin) as IPlugin[]).forEach((plugin) => plugin.setup());\n }\n\n private _teardown() {\n this._observer?.disconnect();\n this._observer = null;\n this.cursor.destroy();\n this.undo.destroy();\n this._editorElement.removeEventListener('keydown', this._handleBackspace);\n this._editorElement.removeEventListener('paste', this._handlePaste);\n this._editorElement.removeEventListener('beforeinput', this._handleBeforeInput);\n this._editorElement.removeEventListener('compositionend', this._handleCompositionEnd);\n\n // 销毁插件自定义行为\n (Object.values(this.plugin) as IPlugin[]).forEach((plugin) => plugin.destroy());\n }\n\n // TODO 待优化删除逻辑(太多重复range操作, 抽象API至 contentManger 类)\n private _handleBackspace(e: KeyboardEvent) {\n const selection = window.getSelection()!;\n const range = selection.getRangeAt(0);\n\n if (e.key === 'Backspace') {\n // 光标在段落开头\n if (range.startOffset === 0 && range.collapsed) {\n const [currentP] = findParent(range.startContainer as HTMLElement, (elm) => {\n return elm.tagName === 'P' && elm.classList.contains(PARAGRAPH_CLS);\n });\n const prevP = currentP?.previousElementSibling;\n\n if (prevP) {\n // 阻止默认行为,删除默认行为会导致结构错乱\n e.preventDefault();\n\n const prevParaChildNodes = prevP.childNodes;\n const firstNode = prevP.childNodes[0];\n\n if (\n // 一个节点\n prevParaChildNodes.length === 1 &&\n // 空文本节点\n ((isText(firstNode) && firstNode.textContent === '') ||\n // 换行元素节点\n (isHTMLElement(firstNode) && firstNode.tagName === 'BR'))\n ) {\n prevP.remove();\n const newRange = document.createRange();\n newRange.setStart(currentP.firstChild!, 0);\n newRange.collapse(true);\n selection.removeAllRanges();\n selection.addRange(newRange);\n } else {\n // 将光标移到上一段落末尾\n const newRange = document.createRange();\n newRange.selectNodeContents(prevP);\n newRange.collapse(false);\n selection.removeAllRanges();\n selection.addRange(newRange);\n\n const fragment = document.createDocumentFragment();\n const firstNode = currentP.firstChild!;\n while (currentP.firstChild) {\n fragment.appendChild(currentP.firstChild);\n }\n newRange.insertNode(fragment);\n currentP.remove();\n\n const newRange2 = document.createRange();\n newRange2.setStartBefore(firstNode);\n newRange2.setEndBefore(firstNode);\n selection.removeAllRanges();\n selection.addRange(newRange2);\n }\n }\n }\n }\n\n if (e.key === 'Delete') {\n // 光标在段落末尾\n if (isCursorAtParagraphEnd()) {\n const selection = getSelection();\n const range = getSelection()?.getRangeAt(0);\n\n if (isNullable(selection) || isNullable(range)) return;\n\n const currP = findClosestPara(range.endContainer as HTMLElement);\n const nextP = currP?.nextElementSibling;\n\n if (isNullable(currP) || isNullable(nextP)) return;\n\n const cursorRange = document.createRange();\n cursorRange.selectNodeContents(currP);\n cursorRange.collapse(false);\n\n while (nextP.firstChild) {\n currP.appendChild(nextP.firstChild);\n }\n nextP.remove();\n\n selection.removeAllRanges();\n selection.addRange(cursorRange);\n // 合并相邻文本节点\n currP.normalize();\n }\n }\n\n if (e.key === 'Enter') {\n const { range } = this.cursor;\n\n if (isNull(range)) return;\n\n const [anchorTag] = findParent(range?.commonAncestorContainer as HTMLElement, (elm) => {\n return elm.tagName === 'SPAN' && elm.dataset.type === PluginFlag.anchor;\n });\n\n if (range?.collapsed && range.startOffset === 0 && anchorTag) {\n e.preventDefault();\n const newPara = document.createElement('p');\n newPara.innerHTML = '<br />';\n this._editorElement.insertBefore(newPara, anchorTag.parentElement);\n }\n if (range && e.shiftKey) {\n const para = findClosestPara(range.startContainer as HTMLElement);\n // 光标在最后时,按下 Enter+shift 键,创建新段落\n if (para?.textContent?.length === range.startOffset && para?.textContent?.length !== 0) {\n e.preventDefault();\n const newPara = document.createElement('p');\n newPara.innerHTML = '<br />';\n para?.appendChild(newPara);\n // 光标移到新段落\n const newRange = document.createRange();\n newRange.setStart(newPara.firstChild || newPara, 0);\n newRange.collapse(true);\n selection.removeAllRanges();\n selection.addRange(newRange);\n } else if (range.startOffset === 0) {\n // 光标在段落开头时,按下 Enter+shift 键,创建新段落\n e.preventDefault();\n // 创建新段落元素\n const newPara = document.createElement('p');\n newPara.classList.add(PARAGRAPH_CLS);\n newPara.innerHTML = '<br />';\n // 将新段落插入到当前段落之前\n if (para?.textContent?.length) {\n para?.before(newPara);\n } else {\n para?.after(newPara);\n }\n // 将光标移到新段落的开始位置\n const newRange = document.createRange();\n newRange.setStart(newPara.firstChild || newPara, 0);\n newRange.collapse(true);\n selection.removeAllRanges();\n selection.addRange(newRange);\n } else {\n // 光标不在最后时,按下 Enter+shift 键,创建新段落\n e.preventDefault();\n // 创建新段落元素\n const newPara = document.createElement('p');\n newPara.classList.add(PARAGRAPH_CLS);\n // 提取光标后的内容\n const rangeAfterCaret = document.createRange();\n rangeAfterCaret.setStart(range.startContainer, range.startOffset);\n rangeAfterCaret.setEndAfter(para!.lastChild!);\n const fragment = rangeAfterCaret.extractContents();\n\n newPara.appendChild(fragment);\n\n // 如果新段落为空,添加一个br元素\n if (!newPara.textContent) {\n newPara.innerHTML = '<br />';\n }\n // 将新段落插入到当前段落之后\n para?.parentNode?.insertBefore(newPara, para.nextSibling);\n\n // 将光标移到新段落的开始位置\n const newRange = document.createRange();\n newRange.setStart(newPara.firstChild || newPara, 0);\n newRange.collapse(true);\n selection.removeAllRanges();\n selection.addRange(newRange);\n }\n }\n }\n\n // 选区覆盖整个段落 && 末尾存在停顿标签 && 选区在同一个段落\n if (\n range.startOffset === 0 &&\n (range.endContainer as HTMLElement).tagName === 'P' &&\n findClosestPara(range.startContainer as HTMLElement) ===\n findClosestPara(range.endContainer as HTMLElement)\n ) {\n const currp = findClosestPara(range.endContainer as HTMLElement);\n\n if (isNullable(currp)) return;\n\n if (e.key === 'Backspace') {\n clearParagraphKeep(currp, selection);\n }\n\n // TODO `Ctrl + X` 剪切按键暂时不作处理\n // if ((e.key === 'x' || e.key === 'X') && (e.ctrlKey || e.metaKey)) {\n // e.preventDefault();\n\n // // 先写入剪贴板\n // navigator.clipboard.writeText(selection.toString()).then(() => {\n // clearParagraphKeep(currp, selection);\n // });\n // }\n }\n }\n\n // 粘贴事件处理函数\n private _handlePaste(e: ClipboardEvent) {\n e.preventDefault();\n ensureCaretInParagraph(this._editorElement);\n\n const paragraphs =\n e.clipboardData\n ?.getData('text/plain')\n ?.split(/(?:\\r?\\n){2,}/)\n .map((para) => para.trim())\n .filter((_) => _) ?? [];\n handlePaste(this, calcPasteTextLength(this, paragraphs));\n }\n\n private _handleBeforeInput(e: InputEvent) {\n handleBeforeInput(this, e);\n }\n\n private _handleCompositionEnd(e: CompositionEvent) {\n hadnleCompositionEnd(this, e);\n }\n}\n","import { PARAGRAPH_CLS } from '../foundation/editorManager/editor';\nimport { IAnchor, PluginFlag } from '../typings';\nimport { isArray, isHTMLElement, isNullable, isString, isText } from './value-type';\n\nexport const setAttributesAndData = (\n element: HTMLElement,\n attributes: Record<string, string | number | boolean>,\n dataAttributes: Record<string, string | number>,\n child?: string | Node\n) => {\n Object.keys(attributes).forEach((key) => {\n element.setAttribute(key, String(attributes[key]));\n });\n\n Object.keys(dataAttributes).forEach((key) => {\n element.dataset[key] = String(dataAttributes[key]);\n });\n\n if (isNullable(child)) return;\n if (isString(child)) {\n const fragment = document.createDocumentFragment();\n const tempElement = document.createElement('div');\n\n tempElement.innerHTML = child;\n\n while (tempElement.firstChild) {\n fragment.appendChild(tempElement.firstChild);\n }\n element.appendChild(fragment);\n } else {\n element.appendChild(child);\n }\n};\n\nexport const findParent = (\n element: HTMLElement,\n _conditions: ((element: HTMLElement) => boolean) | Array<(element: HTMLElement) => boolean>\n) => {\n const conditions = isArray(_conditions) ? _conditions : [_conditions];\n let currentElement: HTMLElement | null = element;\n\n while (currentElement) {\n const checkElm = currentElement;\n const result = conditions\n .map((condition) => condition(checkElm!))\n .map((matching) => (matching ? checkElm! : null));\n\n if (result.some((_) => _)) return result;\n\n currentElement = currentElement.parentElement; // 向上查找父元素\n }\n\n // 如果没有找到,返回找到的父元素(或 null)\n return new Array<null>(conditions.length).fill(null);\n};\n\nexport const findClosestPara = (startElm: HTMLElement) => {\n const [para] = findParent(\n startElm,\n (elm) => elm.tagName === 'P' && elm.classList.contains(PARAGRAPH_CLS)\n );\n\n return para;\n};\n\n// 跨段滑选内容,完全包裹在选取的p标签\nexport const findAllParaInRange = (startP: HTMLElement, endP: HTMLElement) => {\n if (startP === endP) return [];\n\n const paraTags: HTMLElement[] = [];\n let current = startP.nextElementSibling as HTMLElement | null;\n\n while (current && current !== endP) {\n paraTags.push(current);\n current = current.nextElementSibling as HTMLElement | null;\n }\n\n return paraTags;\n};\n\nexport const getOverlay = (type: PluginFlag) => {\n const popper = document.createElement('div');\n popper.setAttribute('class', `editor-${type}-tag-modal`);\n\n return popper;\n};\n\n// 主动拼接文本节点, 保持标签移除前后文本节点一致性\nexport const spellingTextNode = (node: Node, spellingText?: string, firstJudge?: boolean): void => {\n const prevNode = node.previousSibling;\n const nextNode = node.nextSibling;\n const text = spellingText ?? node.textContent ?? '';\n\n if (\n firstJudge &&\n // 空节点\n ((!prevNode && !nextNode) ||\n // 相邻停顿节点\n (isHTMLElement(prevNode) && prevNode.dataset.type === PluginFlag.pausation) ||\n // 相邻功能节点\n (isHTMLElement(prevNode) &&\n [\n PluginFlag.anchor,\n PluginFlag.homophones,\n PluginFlag.pausation,\n PluginFlag.pronunciation,\n ].includes(prevNode.dataset.type as unknown as PluginFlag)))\n ) {\n isHTMLElement(node) && node.dataset.type !== PluginFlag.pausation\n ? node.replaceWith(node.dataset.raw ?? '')\n : node.parentNode?.removeChild(node);\n return;\n }\n\n // 判断前一个节点是否为文本节点\n if (isText(prevNode)) {\n prevNode.textContent += text;\n node.parentNode?.removeChild(node);\n spellingTextNode(prevNode, prevNode.textContent as string, false);\n return;\n }\n\n // 判断后一个节点是否为文本节点\n if (isText(nextNode)) {\n nextNode.textContent = text + nextNode.textContent;\n node.parentNode?.removeChild(node);\n spellingTextNode(nextNode, nextNode.textContent as string, false);\n }\n};\n\n/**\n * 获取两个随机字符串中的最长**连续**子序列\n * 借助变量正序DP,一维数组(空间复杂度O(m))\n * @param {String} text1 随机字符串\n * @param {String} text2 随机字符串\n * @return string\n *\n * 时间复杂度:O(mn) - DP循环次数\n * 空间复杂度:O(n) - text2字符串长度\n */\nexport const longestConsecutiveSubsequence = (text1: string, text2: string) => {\n const text1Len = text1.length;\n const text2Len = text2.length;\n const dp = new Array(text2Len).fill(0);\n let prev = dp[0];\n let maxLen = 0;\n let endIndex = 0;\n\n for (let i = 1; i <= text1Len; i++) {\n for (let j = 1; j <= text2Len; j++) {\n const nextPrev = dp[j];\n\n if (text1[i - 1] === text2[j - 1]) {\n dp[j] = prev + 1;\n\n if (dp[j] > maxLen) {\n maxLen = Math.max(maxLen, dp[j]);\n endIndex = j - 1;\n }\n } else {\n dp[j] = 0;\n }\n\n prev = nextPrev;\n }\n\n prev = dp[0];\n }\n\n return text2.substring(endIndex - maxLen + 1, endIndex + 1);\n};\n\n/**\n * 判断光标是否在 <p> 段落的末尾\n *\n * 使用场景:\n * - 监听 Backspace/Delete 时,避免浏览器默认合并段落的行为\n * - 用于富文本编辑器中,检测用户是否在段落结尾输入\n *\n * 实现思路:\n * 1. 获取当前 selection 对象(window.getSelection)\n * 2. 如果没有光标或当前是选区(Range),直接返回 false\n * 3. 找到光标所在的最近 <p> 段落\n * 4. 克隆一个 range,从光标位置扩展到段落结尾\n * 5. 如果扩展后的 range 没有内容,说明光标就在段落末尾\n *\n * @returns {boolean} true 表示光标在当前 <p> 段落的末尾\n */\nexport const isCursorAtParagraphEnd = () => {\n const sel = window.getSelection();\n if (!sel || !sel.rangeCount || sel.type !== 'Caret') return false;\n\n const range = sel.getRangeAt(0);\n\n // 找到最近的 p\n let p = range.endContainer;\n while (p && p.nodeName !== 'P') {\n p = p.parentNode as Node;\n }\n if (!p) return false; // 不在段落里\n\n // 克隆一个 range,从光标到段落末尾\n const clone = range.cloneRange();\n clone.setEndAfter(p);\n\n // 如果光标之后没有文字,说明在段落末尾\n return clone.toString().length === 0;\n};\n\nexport const ensureCaretInParagraph = (editor: HTMLElement) => {\n const sel = window.getSelection()!;\n if (!sel.rangeCount) return;\n\n const pList = Array.from(editor.querySelectorAll('p'));\n if (pList.length === 0) return;\n\n // 检查光标是否已经在某个 <p> 里\n let inP = false;\n for (const p of pList) {\n if (p.contains(sel.anchorNode)) {\n inP = true;\n break;\n }\n }\n\n if (!inP) {\n const range = document.createRange();\n // 默认放到最后一个 <p>\n const targetP = pList[pList.length - 1];\n range.selectNodeContents(targetP);\n range.collapse(false); // 光标放在 <p> 尾部\n\n sel.removeAllRanges();\n sel.addRange(range);\n }\n};\n\nexport const clearParagraphKeep = (pElm: HTMLElement, selection: Selection) => {\n if (!pElm) return;\n\n while (pElm.firstChild) pElm.removeChild(pElm.firstChild);\n\n pElm.appendChild(document.createElement('br'));\n\n const cursorRange = document.createRange();\n cursorRange.selectNodeContents(pElm);\n cursorRange.collapse(false);\n selection.removeAllRanges();\n selection.addRange(cursorRange);\n};\n\n/**\n * 将弹窗元素定位到目标元素下方(relative to parentEl)\n * @param {DOMRect} parentDOMRect - 父元素DOMRect\n * @param {DOMRect} targetDOMRect - 目标元素DOMRect\n * @param {number} offset - 距离 span 底部的间距,默认 6px\n */\nexport const positionPopupUnderSpan = (\n parentDomRect?: DOMRect,\n spanDomRect?: DOMRect,\n offset = 0\n) => {\n if (!parentDomRect || !spanDomRect) return { top: 0, left: 0, width: 0, height: 0 };\n\n const parentRect = parentDomRect;\n const targetRect = spanDomRect;\n\n const top = targetRect.bottom - parentRect.top + offset;\n const left = targetRect.left - parentRect.left;\n\n return { top, left, width: targetRect.width, height: targetRect.height };\n};\n\n/**\n * 获取指定ID的锚点标签\n * @param {IAnchor} anchor - 锚点信息\n * @return {HTMLElement[]} - 锚点标签数组\n */\nexport const getAnchorTagsByUidAndId = (anchor: IAnchor) => {\n const allAnchorTags = Array.from(\n document.querySelectorAll(`span[data-frag-id=\"anchor_${anchor.id}\"]`)\n ) as HTMLElement[];\n\n // 存在UID,说明是新版本划选功能,精准定位\n if (anchor.uid) {\n return allAnchorTags.filter((anchorTag) => anchorTag.dataset.uid === anchor.uid);\n }\n\n // 不存在UID,说明是旧版本划选,兼容返回所有未划选UID段落\n return allAnchorTags.filter((anchorTag) => !anchorTag.dataset.uid);\n};\n","import { shallowRef, watchEffect, readonly, ref, watch, customRef, getCurrentScope, onScopeDispose, effectScope, getCurrentInstance, hasInjectionContext, inject, provide, isRef, unref, toValue as toValue$1, computed, reactive, toRefs as toRefs$1, toRef as toRef$1, onBeforeMount, nextTick, onBeforeUnmount, onMounted, onUnmounted, isReactive } from 'vue';\n\nfunction computedEager(fn, options) {\n var _a;\n const result = shallowRef();\n watchEffect(() => {\n result.value = fn();\n }, {\n ...options,\n flush: (_a = options == null ? undefined : options.flush) != null ? _a : \"sync\"\n });\n return readonly(result);\n}\n\nfunction computedWithControl(source, fn) {\n let v = undefined;\n let track;\n let trigger;\n const dirty = ref(true);\n const update = () => {\n dirty.value = true;\n trigger();\n };\n watch(source, update, { flush: \"sync\" });\n const get = typeof fn === \"function\" ? fn : fn.get;\n const set = typeof fn === \"function\" ? undefined : fn.set;\n const result = customRef((_track, _trigger) => {\n track = _track;\n trigger = _trigger;\n return {\n get() {\n if (dirty.value) {\n v = get(v);\n dirty.value = false;\n }\n track();\n return v;\n },\n set(v2) {\n set == null ? undefined : set(v2);\n }\n };\n });\n if (Object.isExtensible(result))\n result.trigger = update;\n return result;\n}\n\nfunction tryOnScopeDispose(fn) {\n if (getCurrentScope()) {\n onScopeDispose(fn);\n return true;\n }\n return false;\n}\n\nfunction createEventHook() {\n const fns = /* @__PURE__ */ new Set();\n const off = (fn) => {\n fns.delete(fn);\n };\n const clear = () => {\n fns.clear();\n };\n const on = (fn) => {\n fns.add(fn);\n const offFn = () => off(fn);\n tryOnScopeDispose(offFn);\n return {\n off: offFn\n };\n };\n const trigger = (...args) => {\n return Promise.all(Array.from(fns).map((fn) => fn(...args)));\n };\n return {\n on,\n off,\n trigger,\n clear\n };\n}\n\nfunction createGlobalState(stateFactory) {\n let initialized = false;\n let state;\n const scope = effectScope(true);\n return (...args) => {\n if (!initialized) {\n state = scope.run(() => stateFactory(...args));\n initialized = true;\n }\n return state;\n };\n}\n\nconst localProvidedStateMap = /* @__PURE__ */ new WeakMap();\n\nconst injectLocal = (...args) => {\n var _a;\n const key = args[0];\n const instance = (_a = getCurrentInstance()) == null ? undefined : _a.proxy;\n if (instance == null && !hasInjectionContext())\n throw new Error(\"injectLocal must be called in setup\");\n if (instance && localProvidedStateMap.has(instance) && key in localProvidedStateMap.get(instance))\n return localProvidedStateMap.get(instance)[key];\n return inject(...args);\n};\n\nconst provideLocal = (key, value) => {\n var _a;\n const instance = (_a = getCurrentInstance()) == null ? undefined : _a.proxy;\n if (instance == null)\n throw new Error(\"provideLocal must be called in setup\");\n if (!localProvidedStateMap.has(instance))\n localProvidedStateMap.set(instance, /* @__PURE__ */ Object.create(null));\n const localProvidedState = localProvidedStateMap.get(instance);\n localProvidedState[key] = value;\n provide(key, value);\n};\n\nfunction createInjectionState(composable, options) {\n const key = (options == null ? undefined : options.injectionKey) || Symbol(composable.name || \"InjectionState\");\n const defaultValue = options == null ? undefined : options.defaultValue;\n const useProvidingState = (...args) => {\n const state = composable(...args);\n provideLocal(key, state);\n return state;\n };\n const useInjectedState = () => injectLocal(key, defaultValue);\n return [useProvidingState, useInjectedState];\n}\n\nfunction createSharedComposable(composable) {\n let subscribers = 0;\n let state;\n let scope;\n const dispose = () => {\n subscribers -= 1;\n if (scope && subscribers <= 0) {\n scope.stop();\n state = undefined;\n scope = undefined;\n }\n };\n return (...args) => {\n subscribers += 1;\n if (!scope) {\n scope = effectScope(true);\n state = scope.run(() => composable(...args));\n }\n tryOnScopeDispose(dispose);\n return state;\n };\n}\n\nfunction extendRef(ref, extend, { enumerable = false, unwrap = true } = {}) {\n for (const [key, value] of Object.entries(extend)) {\n if (key === \"value\")\n continue;\n if (isRef(value) && unwrap) {\n Object.defineProperty(ref, key, {\n get() {\n return value.value;\n },\n set(v) {\n value.value = v;\n },\n enumerable\n });\n } else {\n Object.defineProperty(ref, key, { value, enumerable });\n }\n }\n return ref;\n}\n\nfunction get(obj, key) {\n if (key == null)\n return unref(obj);\n return unref(obj)[key];\n}\n\nfunction isDefined(v) {\n return unref(v) != null;\n}\n\nfunction makeDestructurable(obj, arr) {\n if (typeof Symbol !== \"undefined\") {\n const clone = { ...obj };\n Object.defineProperty(clone, Symbol.iterator, {\n enumerable: false,\n value() {\n let index = 0;\n return {\n next: () => ({\n value: arr[index++],\n done: index > arr.length\n })\n };\n }\n });\n return clone;\n } else {\n return Object.assign([...arr], obj);\n }\n}\n\nfunction reactify(fn, options) {\n const unrefFn = (options == null ? undefined : options.computedGetter) === false ? unref : toValue$1;\n return function(...args) {\n return computed(() => fn.apply(this, args.map((i) => unrefFn(i))));\n };\n}\n\nfunction reactifyObject(obj, optionsOrKeys = {}) {\n let keys = [];\n let options;\n if (Array.isArray(optionsOrKeys)) {\n keys = optionsOrKeys;\n } else {\n options = optionsOrKeys;\n const { includeOwnProperties = true } = optionsOrKeys;\n keys.push(...Object.keys(obj));\n if (includeOwnProperties)\n keys.push(...Object.getOwnPropertyNames(obj));\n }\n return Object.fromEntries(\n keys.map((key) => {\n const value = obj[key];\n return [\n key,\n typeof value === \"function\" ? reactify(value.bind(obj), options) : value\n ];\n })\n );\n}\n\nfunction toReactive(objectRef) {\n if (!isRef(objectRef))\n return reactive(objectRef);\n const proxy = new Proxy({}, {\n get(_, p, receiver) {\n return unref(Reflect.get(objectRef.value, p, receiver));\n },\n set(_, p, value) {\n if (isRef(objectRef.value[p]) && !isRef(value))\n objectRef.value[p].value = value;\n else\n objectRef.value[p] = value;\n return true;\n },\n deleteProperty(_, p) {\n return Reflect.deleteProperty(objectRef.value, p);\n },\n has(_, p) {\n return Reflect.has(objectRef.value, p);\n },\n ownKeys() {\n return Object.keys(objectRef.value);\n },\n getOwnPropertyDescriptor() {\n return {\n enumerable: true,\n configurable: true\n };\n }\n });\n return reactive(proxy);\n}\n\nfunction reactiveComputed(fn) {\n return toReactive(computed(fn));\n}\n\nfunction reactiveOmit(obj, ...keys) {\n const flatKeys = keys.flat();\n const predicate = flatKeys[0];\n return reactiveComputed(() => typeof predicate === \"function\" ? Object.fromEntries(Object.entries(toRefs$1(obj)).filter(([k, v]) => !predicate(toValue$1(v), k))) : Object.fromEntries(Object.entries(toRefs$1(obj)).filter((e) => !flatKeys.includes(e[0]))));\n}\n\nconst isClient = typeof window !== \"undefined\" && typeof document !== \"undefined\";\nconst isWorker = typeof WorkerGlobalScope !== \"undefined\" && globalThis instanceof WorkerGlobalScope;\nconst isDef = (val) => typeof val !== \"undefined\";\nconst notNullish = (val) => val != null;\nconst assert = (condition, ...infos) => {\n if (!condition)\n console.warn(...infos);\n};\nconst toString = Object.prototype.toString;\nconst isObject = (val) => toString.call(val) === \"[object Object]\";\nconst now = () => Date.now();\nconst timestamp = () => +Date.now();\nconst clamp = (n, min, max) => Math.min(max, Math.max(min, n));\nconst noop = () => {\n};\nconst rand = (min, max) => {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(Math.random() * (max - min + 1)) + min;\n};\nconst hasOwn = (val, key) => Object.prototype.hasOwnProperty.call(val, key);\nconst isIOS = /* @__PURE__ */ getIsIOS();\nfunction getIsIOS() {\n var _a, _b;\n return isClient && ((_a = window == null ? undefined : window.navigator) == null ? undefined : _a.userAgent) && (/iP(?:ad|hone|od)/.test(window.navigator.userAgent) || ((_b = window == null ? undefined : window.navigator) == null ? undefined : _b.maxTouchPoints) > 2 && /iPad|Macintosh/.test(window == null ? undefined : window.navigator.userAgent));\n}\n\nfunction createFilterWrapper(filter, fn) {\n function wrapper(...args) {\n return new Promise((resolve, reject) => {\n Promise.resolve(filter(() => fn.apply(this, args), { fn, thisArg: this, args })).then(resolve).catch(reject);\n });\n }\n return wrapper;\n}\nconst bypassFilter = (invoke) => {\n return invoke();\n};\nfunction debounceFilter(ms, options = {}) {\n let timer;\n let maxTimer;\n let lastRejector = noop;\n const _clearTimeout = (timer2) => {\n clearTimeout(timer2);\n lastRejector();\n lastRejector = noop;\n };\n const filter = (invoke) => {\n const duration = toValue$1(ms);\n const maxDuration = toValue$1(options.maxWait);\n if (timer)\n _clearTimeout(timer);\n if (duration <= 0 || maxDuration !== undefined && maxDuration <= 0) {\n if (maxTimer) {\n _clearTimeout(maxTimer);\n maxTimer = null;\n }\n return Promise.resolve(invoke());\n }\n return new Promise((resolve, reject) => {\n lastRejector = options.rejectOnCancel ? reject : resolve;\n if (maxDuration && !maxTimer) {\n maxTimer = setTimeout(() => {\n if (timer)\n _clearTimeout(timer);\n maxTimer = null;\n resolve(invoke());\n }, maxDuration);\n }\n timer = setTimeout(() => {\n if (maxTimer)\n _clearTimeout(maxTimer);\n maxTimer = null;\n resolve(invoke());\n }, duration);\n });\n };\n return filter;\n}\nfunction throttleFilter(...args) {\n let lastExec = 0;\n let timer;\n let isLeading = true;\n let lastRejector = noop;\n let lastValue;\n let ms;\n let trailing;\n let leading;\n let rejectOnCancel;\n if (!isRef(args[0]) && typeof args[0] === \"object\")\n ({ delay: ms, trailing = true, leading = true, rejectOnCancel = false } = args[0]);\n else\n [ms, trailing = true, leading = true, rejectOnCancel = false] = args;\n const clear = () => {\n if (timer) {\n clearTimeout(timer);\n timer = undefined;\n lastRejector();\n lastRejector = noop;\n }\n };\n const filter = (_invoke) => {\n const duration = toValue$1(ms);\n const elapsed = Date.now() - lastExec;\n const invoke = () => {\n return lastValue = _invoke();\n };\n clear();\n if (duration <= 0) {\n lastExec = Date.now();\n return invoke();\n }\n if (elapsed > duration && (leading || !isLeading)) {\n lastExec = Date.now();\n invoke();\n } else if (trailing) {\n lastValue = new Promise((resolve, reject) => {\n lastRejector = rejectOnCancel ? reject : resolve;\n timer = setTimeout(() => {\n lastExec = Date.now();\n isLeading = true;\n resolve(invoke());\n clear();\n }, Math.max(0, duration - elapsed));\n });\n }\n if (!leading && !timer)\n timer = setTimeout(() => isLeading = true, duration);\n isLeading = false;\n return lastValue;\n };\n return filter;\n}\nfunction pausableFilter(extendFilter = bypassFilter) {\n const isActive = ref(true);\n function pause() {\n isActive.value = false;\n }\n function resume() {\n isActive.value = true;\n }\n const eventFilter = (...args) => {\n if (isActive.value)\n extendFilter(...args);\n };\n return { isActive: readonly(isActive), pause, resume, eventFilter };\n}\n\nfunction cacheStringFunction(fn) {\n const cache = /* @__PURE__ */ Object.create(null);\n return (str) => {\n const hit = cache[str];\n return hit || (cache[str] = fn(str));\n };\n}\nconst hyphenateRE = /\\B([A-Z])/g;\nconst hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, \"-$1\").toLowerCase());\nconst camelizeRE = /-(\\w)/g;\nconst camelize = cacheStringFunction((str) => {\n return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : \"\");\n});\n\nfunction promiseTimeout(ms, throwOnTimeout = false, reason = \"Timeout\") {\n return new Promise((resolve, reject) => {\n if (throwOnTimeout)\n setTimeout(() => reject(reason), ms);\n else\n setTimeout(resolve, ms);\n });\n}\nfunction identity(arg) {\n return arg;\n}\nfunction createSingletonPromise(fn) {\n let _promise;\n function wrapper() {\n if (!_promise)\n _promise = fn();\n return _promise;\n }\n wrapper.reset = async () => {\n const _prev = _promise;\n _promise = undefined;\n if (_prev)\n await _prev;\n };\n return wrapper;\n}\nfunction invoke(fn) {\n return fn();\n}\nfunction containsProp(obj, ...props) {\n return props.some((k) => k in obj);\n}\nfunction increaseWithUnit(target, delta) {\n var _a;\n if (typeof target === \"number\")\n return target + delta;\n const value = ((_a = target.match(/^-?\\d+\\.?\\d*/)) == null ? undefined : _a[0]) || \"\";\n const unit = target.slice(value.length);\n const result = Number.parseFloat(value) + delta;\n if (Number.isNaN(result))\n return target;\n return result + unit;\n}\nfunction pxValue(px) {\n return px.endsWith(\"rem\") ? Number.parseFloat(px) * 16 : Number.parseFloat(px);\n}\nfunction objectPick(obj, keys, omitUndefined = false) {\n return keys.reduce((n, k) => {\n if (k in obj) {\n if (!omitUndefined || obj[k] !== undefined)\n n[k] = obj[k];\n }\n return n;\n }, {});\n}\nfunction objectOmit(obj, keys, omitUndefined = false) {\n return Object.fromEntries(Object.entries(obj).filter(([key, value]) => {\n return (!omitUndefined || value !== undefined) && !keys.includes(key);\n }));\n}\nfunction objectEntries(obj) {\n return Object.entries(obj);\n}\nfunction getLifeCycleTarget(target) {\n return target || getCurrentInstance();\n}\nfunction toArray(value) {\n return Array.isArray(value) ? value : [value];\n}\n\nfunction toRef(...args) {\n if (args.length !== 1)\n return toRef$1(...args);\n const r = args[0];\n return typeof r === \"function\" ? readonly(customRef(() => ({ get: r, set: noop }))) : ref(r);\n}\nconst resolveRef = toRef;\n\nfunction reactivePick(obj, ...keys) {\n const flatKeys = keys.flat();\n const predicate = flatKeys[0];\n return reactiveComputed(() => typeof predicate === \"function\" ? Object.fromEntries(Object.entries(toRefs$1(obj)).filter(([k, v]) => predicate(toValue$1(v), k))) : Object.fromEntries(flatKeys.map((k) => [k, toRef(obj, k)])));\n}\n\nfunction refAutoReset(defaultValue, afterMs = 1e4) {\n return customRef((track, trigger) => {\n let value = toValue$1(defaultValue);\n let timer;\n const resetAfter = () => setTimeout(() => {\n value = toValue$1(defaultValue);\n trigger();\n }, toValue$1(afterMs));\n tryOnScopeDispose(() => {\n clearTimeout(timer);\n });\n return {\n get() {\n track();\n return value;\n },\n set(newValue) {\n value = newValue;\n trigger();\n clearTimeout(timer);\n timer = resetAfter();\n }\n };\n });\n}\n\nfunction useDebounceFn(fn, ms = 200, options = {}) {\n return createFilterWrapper(\n debounceFilter(ms, options),\n fn\n );\n}\n\nfunction refDebounced(value, ms = 200, options = {}) {\n const debounced = ref(value.value);\n const updater = useDebounceFn(() => {\n debounced.value = value.value;\n }, ms, options);\n watch(value, () => updater());\n return debounced;\n}\n\nfunction refDefault(source, defaultValue) {\n return computed({\n get() {\n var _a;\n return (_a = source.value) != null ? _a : defaultValue;\n },\n set(value) {\n source.value = value;\n }\n });\n}\n\nfunction useThrottleFn(fn, ms = 200, trailing = false, leading = true, rejectOnCancel = false) {\n return createFilterWrapper(\n throttleFilter(ms, trailing, leading, rejectOnCancel),\n fn\n );\n}\n\nfunction refThrottled(value, delay = 200, trailing = true, leading = true) {\n if (delay <= 0)\n return value;\n const throttled = ref(value.value);\n const updater = useThrottleFn(() => {\n throttled.value = value.value;\n }, delay, trailing, leading);\n watch(value, () => updater());\n return throttled;\n}\n\nfunction refWithControl(initial, options = {}) {\n let source = initial;\n let track;\n let trigger;\n const ref = customRef((_track, _trigger) => {\n track = _track;\n trigger = _trigger;\n return {\n get() {\n return get();\n },\n set(v) {\n set(v);\n }\n };\n });\n function get(tracking = true) {\n if (tracking)\n track();\n return source;\n }\n function set(value, triggering = true) {\n var _a, _b;\n if (value === source)\n return;\n const old = source;\n if (((_a = options.onBeforeChange) == null ? undefined : _a.call(options, value, old)) === false)\n return;\n source = value;\n (_b = options.onChanged) == null ? undefined : _b.call(options, value, old);\n if (triggering)\n trigger();\n }\n const untrackedGet = () => get(false);\n const silentSet = (v) => set(v, false);\n const peek = () => get(false);\n const lay = (v) => set(v, false);\n return extendRef(\n ref,\n {\n get,\n set,\n untrackedGet,\n silentSet,\n peek,\n lay\n },\n { enumerable: true }\n );\n}\nconst controlledRef = refWithControl;\n\nfunction set(...args) {\n if (args.length === 2) {\n const [ref, value] = args;\n ref.value = value;\n }\n if (args.length === 3) {\n const [target, key, value] = args;\n target[key] = value;\n }\n}\n\nfunction watchWithFilter(source, cb, options = {}) {\n const {\n eventFilter = bypassFilter,\n ...watchOptions\n } = options;\n return watch(\n source,\n createFilterWrapper(\n eventFilter,\n cb\n ),\n watchOptions\n );\n}\n\nfunction watchPausable(source, cb, options = {}) {\n const {\n eventFilter: filter,\n ...watchOptions\n } = options;\n const { eventFilter, pause, resume, isActive } = pausableFilter(filter);\n const stop = watchWithFilter(\n source,\n cb,\n {\n ...watchOptions,\n eventFilter\n }\n );\n return { stop, pause, resume, isActive };\n}\n\nfunction syncRef(left, right, ...[options]) {\n const {\n flush = \"sync\",\n deep = false,\n immediate = true,\n direction = \"both\",\n transform = {}\n } = options || {};\n const watchers = [];\n const transformLTR = \"ltr\" in transform && transform.ltr || ((v) => v);\n const transformRTL = \"rtl\" in transform && transform.rtl || ((v) => v);\n if (direction === \"both\" || direction === \"ltr\") {\n watchers.push(watchPausable(\n left,\n (newValue) => {\n watchers.forEach((w) => w.pause());\n right.value = transformLTR(newValue);\n watchers.forEach((w) => w.resume());\n },\n { flush, deep, immediate }\n ));\n }\n if (direction === \"both\" || direction === \"rtl\") {\n watchers.push(watchPausable(\n right,\n (newValue) => {\n watchers.forEach((w) => w.pause());\n left.value = transformRTL(newValue);\n watchers.forEach((w) => w.resume());\n },\n { flush, deep, immediate }\n ));\n }\n const stop = () => {\n watchers.forEach((w) => w.stop());\n };\n return stop;\n}\n\nfunction syncRefs(source, targets, options = {}) {\n const {\n flush = \"sync\",\n deep = false,\n immediate = true\n } = options;\n targets = toArray(targets);\n return watch(\n source,\n (newValue) => targets.forEach((target) => target.value = newValue),\n { flush, deep, immediate }\n );\n}\n\nfunction toRefs(objectRef, options = {}) {\n if (!isRef(objectRef))\n return toRefs$1(objectRef);\n const result = Array.isArray(objectRef.value) ? Array.from({ length: objectRef.value.length }) : {};\n for (const key in objectRef.value) {\n result[key] = customRef(() => ({\n get() {\n return objectRef.value[key];\n },\n set(v) {\n var _a;\n const replaceRef = (_a = toValue$1(options.replaceRef)) != null ? _a : true;\n if (replaceRef) {\n if (Array.isArray(objectRef.value)) {\n const copy = [...objectRef.value];\n copy[key] = v;\n objectRef.value = copy;\n } else {\n const newObject = { ...objectRef.value, [key]: v };\n Object.setPrototypeOf(newObject, Object.getPrototypeOf(objectRef.value));\n objectRef.value = newObject;\n }\n } else {\n objectRef.value[key] = v;\n }\n }\n }));\n }\n return result;\n}\n\nconst toValue = toValue$1;\nconst resolveUnref = toValue$1;\n\nfunction tryOnBeforeMount(fn, sync = true, target) {\n const instance = getLifeCycleTarget(target);\n if (instance)\n onBeforeMount(fn, target);\n else if (sync)\n fn();\n else\n nextTick(fn);\n}\n\nfunction tryOnBeforeUnmount(fn, target) {\n const instance = getLifeCycleTarget(target);\n if (instance)\n onBeforeUnmount(fn, target);\n}\n\nfunction tryOnMounted(fn, sync = true, target) {\n const instance = getLifeCycleTarget();\n if (instance)\n onMounted(fn, target);\n else if (sync)\n fn();\n else\n nextTick(fn);\n}\n\nfunction tryOnUnmounted(fn, target) {\n const instance = getLifeCycleTarget(target);\n if (instance)\n onUnmounted(fn, target);\n}\n\nfunction createUntil(r, isNot = false) {\n function toMatch(condition, { flush = \"sync\", deep = false, timeout, throwOnTimeout } = {}) {\n let stop = null;\n const watcher = new Promise((resolve) => {\n stop = watch(\n r,\n (v) => {\n if (condition(v) !== isNot) {\n if (stop)\n stop();\n else\n nextTick(() => stop == null ? undefined : stop());\n resolve(v);\n }\n },\n {\n flush,\n deep,\n immediate: true\n }\n );\n });\n const promises = [watcher];\n if (timeout != null) {\n promises.push(\n promiseTimeout(timeout, throwOnTimeout).then(() => toValue$1(r)).finally(() => stop == null ? undefined : stop())\n );\n }\n return Promise.race(promises);\n }\n function toBe(value, options) {\n if (!isRef(value))\n return toMatch((v) => v === value, options);\n const { flush = \"sync\", deep = false, timeout, throwOnTimeout } = options != null ? options : {};\n let stop = null;\n const watcher = new Promise((resolve) => {\n stop = watch(\n [r, value],\n ([v1, v2]) => {\n if (isNot !== (v1 === v2)) {\n if (stop)\n stop();\n else\n nextTick(() => stop == null ? undefined : stop());\n resolve(v1);\n }\n },\n {\n flush,\n deep,\n immediate: true\n }\n );\n });\n const promises = [watcher];\n if (timeout != null) {\n promises.push(\n promiseTimeout(timeout, throwOnTimeout).then(() => toValue$1(r)).finally(() => {\n stop == null ? undefined : stop();\n return toValue$1(r);\n })\n );\n }\n return Promise.race(promises);\n }\n function toBeTruthy(options) {\n return toMatch((v) => Boolean(v), options);\n }\n function toBeNull(options) {\n return toBe(null, options);\n }\n function toBeUndefined(options) {\n return toBe(undefined, options);\n }\n function toBeNaN(options) {\n return toMatch(Number.isNaN, options);\n }\n function toContains(value, options) {\n return toMatch((v) => {\n const array = Array.from(v);\n return array.includes(value) || array.includes(toValue$1(value));\n }, options);\n }\n function changed(options) {\n return changedTimes(1, options);\n }\n function changedTimes(n = 1, options) {\n let count = -1;\n return toMatch(() => {\n count += 1;\n return count >= n;\n }, options);\n }\n if (Array.isArray(toValue$1(r))) {\n const instance = {\n toMatch,\n toContains,\n changed,\n changedTimes,\n get not() {\n return createUntil(r, !isNot);\n }\n };\n return instance;\n } else {\n const instance = {\n toMatch,\n toBe,\n toBeTruthy,\n toBeNull,\n toBeNaN,\n toBeUndefined,\n changed,\n changedTimes,\n get not() {\n return createUntil(r, !isNot);\n }\n };\n return instance;\n }\n}\nfunction until(r) {\n return createUntil(r);\n}\n\nfunction defaultComparator(value, othVal) {\n return value === othVal;\n}\nfunction useArrayDifference(...args) {\n var _a, _b;\n const list = args[0];\n const values = args[1];\n let compareFn = (_a = args[2]) != null ? _a : defaultComparator;\n const {\n symmetric = false\n } = (_b = args[3]) != null ? _b : {};\n if (typeof compareFn === \"string\") {\n const key = compareFn;\n compareFn = (value, othVal) => value[key] === othVal[key];\n }\n const diff1 = computed(() => toValue$1(list).filter((x) => toValue$1(values).findIndex((y) => compareFn(x, y)) === -1));\n if (symmetric) {\n const diff2 = computed(() => toValue$1(values).filter((x) => toValue$1(list).findIndex((y) => compareFn(x, y)) === -1));\n return computed(() => symmetric ? [...toValue$1(diff1), ...toValue$1(diff2)] : toValue$1(diff1));\n } else {\n return diff1;\n }\n}\n\nfunction useArrayEvery(list, fn) {\n return computed(() => toValue$1(list).every((element, index, array) => fn(toValue$1(element), index, array)));\n}\n\nfunction useArrayFilter(list, fn) {\n return computed(() => toValue$1(list).map((i) => toValue$1(i)).filter(fn));\n}\n\nfunction useArrayFind(list, fn) {\n return computed(() => toValue$1(\n toValue$1(list).find((element, index, array) => fn(toValue$1(element), index, array))\n ));\n}\n\nfunction useArrayFindIndex(list, fn) {\n return computed(() => toValue$1(list).findIndex((element, index, array) => fn(toValue$1(element), index, array)));\n}\n\nfunction findLast(arr, cb) {\n let index = arr.length;\n while (index-- > 0) {\n if (cb(arr[index], index, arr))\n return arr[index];\n }\n return undefined;\n}\nfunction useArrayFindLast(list, fn) {\n return computed(() => toValue$1(\n !Array.prototype.findLast ? findLast(toValue$1(list), (element, index, array) => fn(toValue$1(element), index, array)) : toValue$1(list).findLast((element, index, array) => fn(toValue$1(element), index, array))\n ));\n}\n\nfunction isArrayIncludesOptions(obj) {\n return isObject(obj) && containsProp(obj, \"formIndex\", \"comparator\");\n}\nfunction useArrayIncludes(...args) {\n var _a;\n const list = args[0];\n const value = args[1];\n let comparator = args[2];\n let formIndex = 0;\n if (isArrayIncludesOptions(comparator)) {\n formIndex = (_a = comparator.fromIndex) != null ? _a : 0;\n comparator = comparator.comparator;\n }\n if (typeof comparator === \"string\") {\n const key = comparator;\n comparator = (element, value2) => element[key] === toValue$1(value2);\n }\n comparator = comparator != null ? comparator : (element, value2) => element === toValue$1(value2);\n return computed(() => toValue$1(list).slice(formIndex).some((element, index, array) => comparator(\n toValue$1(element),\n toValue$1(value),\n index,\n toValue$1(array)\n )));\n}\n\nfunction useArrayJoin(list, separator) {\n return computed(() => toValue$1(list).map((i) => toValue$1(i)).join(toValue$1(separator)));\n}\n\nfunction useArrayMap(list, fn) {\n return computed(() => toValue$1(list).map((i) => toValue$1(i)).map(fn));\n}\n\nfunction useArrayReduce(list, reducer, ...args) {\n const reduceCallback = (sum, value, index) => reducer(toValue$1(sum), toValue$1(value), index);\n return computed(() => {\n const resolved = toValue$1(list);\n return args.length ? resolved.reduce(reduceCallback, typeof args[0] === \"function\" ? toValue$1(args[0]()) : toValue$1(args[0])) : resolved.reduce(reduceCallback);\n });\n}\n\nfunction useArraySome(list, fn) {\n return computed(() => toValue$1(list).some((element, index, array) => fn(toValue$1(element), index, array)));\n}\n\nfunction uniq(array) {\n return Array.from(new Set(array));\n}\nfunction uniqueElementsBy(array, fn) {\n return array.reduce((acc, v) => {\n if (!acc.some((x) => fn(v, x, array)))\n acc.push(v);\n return acc;\n }, []);\n}\nfunction useArrayUnique(list, compareFn) {\n return computed(() => {\n const resolvedList = toValue$1(list).map((element) => toValue$1(element));\n return compareFn ? uniqueElementsBy(resolvedList, compareFn) : uniq(resolvedList);\n });\n}\n\nfunction useCounter(initialValue = 0, options = {}) {\n let _initialValue = unref(initialValue);\n const count = ref(initialValue);\n const {\n max = Number.POSITIVE_INFINITY,\n min = Number.NEGATIVE_INFINITY\n } = options;\n const inc = (delta = 1) => count.value = Math.max(Math.min(max, count.value + delta), min);\n const dec = (delta = 1) => count.value = Math.min(Math.max(min, count.value - delta), max);\n const get = () => count.value;\n const set = (val) => count.value = Math.max(min, Math.min(max, val));\n const reset = (val = _initialValue) => {\n _initialValue = val;\n return set(val);\n };\n return { count, inc, dec, get, set, reset };\n}\n\nconst REGEX_PARSE = /^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[T\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/i;\nconst REGEX_FORMAT = /[YMDHhms]o|\\[([^\\]]+)\\]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a{1,2}|A{1,2}|m{1,2}|s{1,2}|Z{1,2}|SSS/g;\nfunction defaultMeridiem(hours, minutes, isLowercase, hasPeriod) {\n let m = hours < 12 ? \"AM\" : \"PM\";\n if (hasPeriod)\n m = m.split(\"\").reduce((acc, curr) => acc += `${curr}.`, \"\");\n return isLowercase ? m.toLowerCase() : m;\n}\nfunction formatOrdinal(num) {\n const suffixes = [\"th\", \"st\", \"nd\", \"rd\"];\n const v = num % 100;\n return num + (suffixes[(v - 20) % 10] || suffixes[v] || suffixes[0]);\n}\nfunction formatDate(date, formatStr, options = {}) {\n var _a;\n const years = date.getFullYear();\n const month = date.getMonth();\n const days = date.getDate();\n const hours = date.getHours();\n const minutes = date.getMinutes();\n const seconds = date.getSeconds();\n const milliseconds = date.getMilliseconds();\n const day = date.getDay();\n const meridiem = (_a = options.customMeridiem) != null ? _a : defaultMeridiem;\n const matches = {\n Yo: () => formatOrdinal(years),\n YY: () => String(years).slice(-2),\n YYYY: () => years,\n M: () => month + 1,\n Mo: () => formatOrdinal(month + 1),\n MM: () => `${month + 1}`.padStart(2, \"0\"),\n MMM: () => date.toLocaleDateString(toValue$1(options.locales), { month: \"short\" }),\n MMMM: () => date.toLocaleDateString(toValue$1(options.locales), { month: \"long\" }),\n D: () => String(days),\n Do: () => formatOrdinal(days),\n DD: () => `${days}`.padStart(2, \"0\"),\n H: () => String(hours),\n Ho: () => formatOrdinal(hours),\n HH: () => `${hours}`.padStart(2, \"0\"),\n h: () => `${hours % 12 || 12}`.padStart(1, \"0\"),\n ho: () => formatOrdinal(hours % 12 || 12),\n hh: () => `${hours % 12 || 12}`.padStart(2, \"0\"),\n m: () => String(minutes),\n mo: () => formatOrdinal(minutes),\n mm: () => `${minutes}`.padStart(2, \"0\"),\n s: () => String(seconds),\n so: () => formatOrdinal(seconds),\n ss: () => `${seconds}`.padStart(2, \"0\"),\n SSS: () => `${milliseconds}`.padStart(3, \"0\"),\n d: () => day,\n dd: () => date.toLocaleDateString(toValue$1(options.locales), { weekday: \"narrow\" }),\n ddd: () => date.toLocaleDateString(toValue$1(options.locales), { weekday: \"short\" }),\n dddd: () => date.toLocaleDateString(toValue$1(options.locales), { weekday: \"long\" }),\n A: () => meridiem(hours, minutes),\n AA: () => meridiem(hours, minutes, false, true),\n a: () => meridiem(hours, minutes, true),\n aa: () => meridiem(hours, minutes, true, true)\n };\n return formatStr.replace(REGEX_FORMAT, (match, $1) => {\n var _a2, _b;\n return (_b = $1 != null ? $1 : (_a2 = matches[match]) == null ? undefined : _a2.call(matches)) != null ? _b : match;\n });\n}\nfunction normalizeDate(date) {\n if (date === null)\n return new Date(Number.NaN);\n if (date === undefined)\n return /* @__PURE__ */ new Date();\n if (date instanceof Date)\n return new Date(date);\n if (typeof date === \"string\" && !/Z$/i.test(date)) {\n const d = date.match(REGEX_PARSE);\n if (d) {\n const m = d[2] - 1 || 0;\n const ms = (d[7] || \"0\").substring(0, 3);\n return new Date(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms);\n }\n }\n return new Date(date);\n}\nfunction useDateFormat(date, formatStr = \"HH:mm:ss\", options = {}) {\n return computed(() => formatDate(normalizeDate(toValue$1(date)), toValue$1(formatStr), options));\n}\n\nfunction useIntervalFn(cb, interval = 1e3, options = {}) {\n const {\n immediate = true,\n immediateCallback = false\n } = options;\n let timer = null;\n const isActive = ref(false);\n function clean() {\n if (timer) {\n clearInterval(timer);\n timer = null;\n }\n }\n function pause() {\n isActive.value = false;\n clean();\n }\n function resume() {\n const intervalValue = toValue$1(interval);\n if (intervalValue <= 0)\n return;\n isActive.value = true;\n if (immediateCallback)\n cb();\n clean();\n if (isActive.value)\n timer = setInterval(cb, intervalValue);\n }\n if (immediate && isClient)\n resume();\n if (isRef(interval) || typeof interval === \"function\") {\n const stopWatch = watch(interval, () => {\n if (isActive.value && isClient)\n resume();\n });\n tryOnScopeDispose(stopWatch);\n }\n tryOnScopeDispose(pause);\n return {\n isActive,\n pause,\n resume\n };\n}\n\nfunction useInterval(interval = 1e3, options = {}) {\n const {\n controls: exposeControls = false,\n immediate = true,\n callback\n } = options;\n const counter = ref(0);\n const update = () => counter.value += 1;\n const reset = () => {\n counter.value = 0;\n };\n const controls = useIntervalFn(\n callback ? () => {\n update();\n callback(counter.value);\n } : update,\n interval,\n { immediate }\n );\n if (exposeControls) {\n return {\n counter,\n reset,\n ...controls\n };\n } else {\n return counter;\n }\n}\n\nfunction useLastChanged(source, options = {}) {\n var _a;\n const ms = ref((_a = options.initialValue) != null ? _a : null);\n watch(\n source,\n () => ms.value = timestamp(),\n options\n );\n return ms;\n}\n\nfunction useTimeoutFn(cb, interval, options = {}) {\n const {\n immediate = true\n } = options;\n const isPending = ref(false);\n let timer = null;\n function clear() {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n }\n function stop() {\n isPending.value = false;\n clear();\n }\n function start(...args) {\n clear();\n isPending.value = true;\n timer = setTimeout(() => {\n isPending.value = false;\n timer = null;\n cb(...args);\n }, toValue$1(interval));\n }\n if (immediate) {\n isPending.value = true;\n if (isClient)\n start();\n }\n tryOnScopeDispose(stop);\n return {\n isPending: readonly(isPending),\n start,\n stop\n };\n}\n\nfunction useTimeout(interval = 1e3, options = {}) {\n const {\n controls: exposeControls = false,\n callback\n } = options;\n const controls = useTimeoutFn(\n callback != null ? callback : noop,\n interval,\n options\n );\n const ready = computed(() => !controls.isPending.value);\n if (exposeControls) {\n return {\n ready,\n ...controls\n };\n } else {\n return ready;\n }\n}\n\nfunction useToNumber(value, options = {}) {\n const {\n method = \"parseFloat\",\n radix,\n nanToZero\n } = options;\n return computed(() => {\n let resolved = toValue$1(value);\n if (typeof method === \"function\")\n resolved = method(resolved);\n else if (typeof resolved === \"string\")\n resolved = Number[method](resolved, radix);\n if (nanToZero && Number.isNaN(resolved))\n resolved = 0;\n return resolved;\n });\n}\n\nfunction useToString(value) {\n return computed(() => `${toValue$1(value)}`);\n}\n\nfunction useToggle(initialValue = false, options = {}) {\n const {\n truthyValue = true,\n falsyValue = false\n } = options;\n const valueIsRef = isRef(initialValue);\n const _value = ref(initialValue);\n function toggle(value) {\n if (arguments.length) {\n _value.value = value;\n return _value.value;\n } else {\n const truthy = toValue$1(truthyValue);\n _value.value = _value.value === truthy ? toValue$1(falsyValue) : truthy;\n return _value.value;\n }\n }\n if (valueIsRef)\n return toggle;\n else\n return [_value, toggle];\n}\n\nfunction watchArray(source, cb, options) {\n let oldList = (options == null ? undefined : options.immediate) ? [] : [...source instanceof Function ? source() : Array.isArray(source) ? source : toValue$1(source)];\n return watch(source, (newList, _, onCleanup) => {\n const oldListRemains = Array.from({ length: oldList.length });\n const added = [];\n for (const obj of newList) {\n let found = false;\n for (let i = 0; i < oldList.length; i++) {\n if (!oldListRemains[i] && obj === oldList[i]) {\n oldListRemains[i] = true;\n found = true;\n break;\n }\n }\n if (!found)\n added.push(obj);\n }\n const removed = oldList.filter((_2, i) => !oldListRemains[i]);\n cb(newList, oldList, added, removed, onCleanup);\n oldList = [...newList];\n }, options);\n}\n\nfunction watchAtMost(source, cb, options) {\n const {\n count,\n ...watchOptions\n } = options;\n const current = ref(0);\n const stop = watchWithFilter(\n source,\n (...args) => {\n current.value += 1;\n if (current.value >= toValue$1(count))\n nextTick(() => stop());\n cb(...args);\n },\n watchOptions\n );\n return { count: current, stop };\n}\n\nfunction watchDebounced(source, cb, options = {}) {\n const {\n debounce = 0,\n maxWait = undefined,\n ...watchOptions\n } = options;\n return watchWithFilter(\n source,\n cb,\n {\n ...watchOptions,\n eventFilter: debounceFilter(debounce, { maxWait })\n }\n );\n}\n\nfunction watchDeep(source, cb, options) {\n return watch(\n source,\n cb,\n {\n ...options,\n deep: true\n }\n );\n}\n\nfunction watchIgnorable(source, cb, options = {}) {\n const {\n eventFilter = bypassFilter,\n ...watchOptions\n } = options;\n const filteredCb = createFilterWrapper(\n eventFilter,\n cb\n );\n let ignoreUpdates;\n let ignorePrevAsyncUpdates;\n let stop;\n if (watchOptions.flush === \"sync\") {\n const ignore = ref(false);\n ignorePrevAsyncUpdates = () => {\n };\n ignoreUpdates = (updater) => {\n ignore.value = true;\n updater();\n ignore.value = false;\n };\n stop = watch(\n source,\n (...args) => {\n if (!ignore.value)\n filteredCb(...args);\n },\n watchOptions\n );\n } else {\n const disposables = [];\n const ignoreCounter = ref(0);\n const syncCounter = ref(0);\n ignorePrevAsyncUpdates = () => {\n ignoreCounter.value = syncCounter.value;\n };\n disposables.push(\n watch(\n source,\n () => {\n syncCounter.value++;\n },\n { ...watchOptions, flush: \"sync\" }\n )\n );\n ignoreUpdates = (updater) => {\n const syncCounterPrev = syncCounter.value;\n updater();\n ignoreCounter.value += syncCounter.value - syncCounterPrev;\n };\n disposables.push(\n watch(\n source,\n (...args) => {\n const ignore = ignoreCounter.value > 0 && ignoreCounter.value === syncCounter.value;\n ignoreCounter.value = 0;\n syncCounter.value = 0;\n if (ignore)\n return;\n filteredCb(...args);\n },\n watchOptions\n )\n );\n stop = () => {\n disposables.forEach((fn) => fn());\n };\n }\n return { stop, ignoreUpdates, ignorePrevAsyncUpdates };\n}\n\nfunction watchImmediate(source, cb, options) {\n return watch(\n source,\n cb,\n {\n ...options,\n immediate: true\n }\n );\n}\n\nfunction watchOnce(source, cb, options) {\n const stop = watch(source, (...args) => {\n nextTick(() => stop());\n return cb(...args);\n }, options);\n return stop;\n}\n\nfunction watchThrottled(source, cb, options = {}) {\n const {\n throttle = 0,\n trailing = true,\n leading = true,\n ...watchOptions\n } = options;\n return watchWithFilter(\n source,\n cb,\n {\n ...watchOptions,\n eventFilter: throttleFilter(throttle, trailing, leading)\n }\n );\n}\n\nfunction watchTriggerable(source, cb, options = {}) {\n let cleanupFn;\n function onEffect() {\n if (!cleanupFn)\n return;\n const fn = cleanupFn;\n cleanupFn = undefined;\n fn();\n }\n function onCleanup(callback) {\n cleanupFn = callback;\n }\n const _cb = (value, oldValue) => {\n onEffect();\n return cb(value, oldValue, onCleanup);\n };\n const res = watchIgnorable(source, _cb, options);\n const { ignoreUpdates } = res;\n const trigger = () => {\n let res2;\n ignoreUpdates(() => {\n res2 = _cb(getWatchSources(source), getOldValue(source));\n });\n return res2;\n };\n return {\n ...res,\n trigger\n };\n}\nfunction getWatchSources(sources) {\n if (isReactive(sources))\n return sources;\n if (Array.isArray(sources))\n return sources.map((item) => toValue$1(item));\n return toValue$1(sources);\n}\nfunction getOldValue(source) {\n return Array.isArray(source) ? source.map(() => undefined) : undefined;\n}\n\nfunction whenever(source, cb, options) {\n const stop = watch(\n source,\n (v, ov, onInvalidate) => {\n if (v) {\n if (options == null ? undefined : options.once)\n nextTick(() => stop());\n cb(v, ov, onInvalidate);\n }\n },\n {\n ...options,\n once: false\n }\n );\n return stop;\n}\n\nexport { assert, refAutoReset as autoResetRef, bypassFilter, camelize, clamp, computedEager, computedWithControl, containsProp, computedWithControl as controlledComputed, controlledRef, createEventHook, createFilterWrapper, createGlobalState, createInjectionState, reactify as createReactiveFn, createSharedComposable, createSingletonPromise, debounceFilter, refDebounced as debouncedRef, watchDebounced as debouncedWatch, computedEager as eagerComputed, extendRef, formatDate, get, getLifeCycleTarget, hasOwn, hyphenate, identity, watchIgnorable as ignorableWatch, increaseWithUnit, injectLocal, invoke, isClient, isDef, isDefined, isIOS, isObject, isWorker, makeDestructurable, noop, normalizeDate, notNullish, now, objectEntries, objectOmit, objectPick, pausableFilter, watchPausable as pausableWatch, promiseTimeout, provideLocal, pxValue, rand, reactify, reactifyObject, reactiveComputed, reactiveOmit, reactivePick, refAutoReset, refDebounced, refDefault, refThrottled, refWithControl, resolveRef, resolveUnref, set, syncRef, syncRefs, throttleFilter, refThrottled as throttledRef, watchThrottled as throttledWatch, timestamp, toArray, toReactive, toRef, toRefs, toValue, tryOnBeforeMount, tryOnBeforeUnmount, tryOnMounted, tryOnScopeDispose, tryOnUnmounted, until, useArrayDifference, useArrayEvery, useArrayFilter, useArrayFind, useArrayFindIndex, useArrayFindLast, useArrayIncludes, useArrayJoin, useArrayMap, useArrayReduce, useArraySome, useArrayUnique, useCounter, useDateFormat, refDebounced as useDebounce, useDebounceFn, useInterval, useIntervalFn, useLastChanged, refThrottled as useThrottle, useThrottleFn, useTimeout, useTimeoutFn, useToNumber, useToString, useToggle, watchArray, watchAtMost, watchDebounced, watchDeep, watchIgnorable, watchImmediate, watchOnce, watchPausable, watchThrottled, watchTriggerable, watchWithFilter, whenever };\n","import { noop, makeDestructurable, camelize, isClient, toArray, isObject, tryOnScopeDispose, isIOS, notNullish, tryOnMounted, objectOmit, promiseTimeout, until, injectLocal, provideLocal, pxValue, increaseWithUnit, objectEntries, createSingletonPromise, useTimeoutFn, pausableWatch, toRef, createEventHook, computedWithControl, timestamp, pausableFilter, watchIgnorable, debounceFilter, bypassFilter, createFilterWrapper, toRefs, useIntervalFn, containsProp, hasOwn, throttleFilter, useDebounceFn, useThrottleFn, tryOnUnmounted, clamp, syncRef, objectPick, watchWithFilter, tryOnBeforeUnmount, identity, isDef, whenever, isWorker } from '@vueuse/shared';\nexport * from '@vueuse/shared';\nimport { isRef, ref, shallowRef, watchEffect, computed, inject, defineComponent, h, TransitionGroup, shallowReactive, Fragment, toValue, watch, getCurrentInstance, onMounted, customRef, onUpdated, readonly, reactive, hasInjectionContext, toRaw, nextTick, markRaw, unref, getCurrentScope, isReadonly, onBeforeUpdate } from 'vue';\n\nfunction computedAsync(evaluationCallback, initialState, optionsOrRef) {\n let options;\n if (isRef(optionsOrRef)) {\n options = {\n evaluating: optionsOrRef\n };\n } else {\n options = optionsOrRef || {};\n }\n const {\n lazy = false,\n evaluating = undefined,\n shallow = true,\n onError = noop\n } = options;\n const started = ref(!lazy);\n const current = shallow ? shallowRef(initialState) : ref(initialState);\n let counter = 0;\n watchEffect(async (onInvalidate) => {\n if (!started.value)\n return;\n counter++;\n const counterAtBeginning = counter;\n let hasFinished = false;\n if (evaluating) {\n Promise.resolve().then(() => {\n evaluating.value = true;\n });\n }\n try {\n const result = await evaluationCallback((cancelCallback) => {\n onInvalidate(() => {\n if (evaluating)\n evaluating.value = false;\n if (!hasFinished)\n cancelCallback();\n });\n });\n if (counterAtBeginning === counter)\n current.value = result;\n } catch (e) {\n onError(e);\n } finally {\n if (evaluating && counterAtBeginning === counter)\n evaluating.value = false;\n hasFinished = true;\n }\n });\n if (lazy) {\n return computed(() => {\n started.value = true;\n return current.value;\n });\n } else {\n return current;\n }\n}\n\nfunction computedInject(key, options, defaultSource, treatDefaultAsFactory) {\n let source = inject(key);\n if (defaultSource)\n source = inject(key, defaultSource);\n if (treatDefaultAsFactory)\n source = inject(key, defaultSource, treatDefaultAsFactory);\n if (typeof options === \"function\") {\n return computed((ctx) => options(source, ctx));\n } else {\n return computed({\n get: (ctx) => options.get(source, ctx),\n set: options.set\n });\n }\n}\n\nfunction createReusableTemplate(options = {}) {\n const {\n inheritAttrs = true\n } = options;\n const render = shallowRef();\n const define = /* #__PURE__ */ defineComponent({\n setup(_, { slots }) {\n return () => {\n render.value = slots.default;\n };\n }\n });\n const reuse = /* #__PURE__ */ defineComponent({\n inheritAttrs,\n setup(_, { attrs, slots }) {\n return () => {\n var _a;\n if (!render.value && process.env.NODE_ENV !== \"production\")\n throw new Error(\"[VueUse] Failed to find the definition of reusable template\");\n const vnode = (_a = render.value) == null ? undefined : _a.call(render, { ...keysToCamelKebabCase(attrs), $slots: slots });\n return inheritAttrs && (vnode == null ? undefined : vnode.length) === 1 ? vnode[0] : vnode;\n };\n }\n });\n return makeDestructurable(\n { define, reuse },\n [define, reuse]\n );\n}\nfunction keysToCamelKebabCase(obj) {\n const newObj = {};\n for (const key in obj)\n newObj[camelize(key)] = obj[key];\n return newObj;\n}\n\nfunction createTemplatePromise(options = {}) {\n let index = 0;\n const instances = ref([]);\n function create(...args) {\n const props = shallowReactive({\n key: index++,\n args,\n promise: undefined,\n resolve: () => {\n },\n reject: () => {\n },\n isResolving: false,\n options\n });\n instances.value.push(props);\n props.promise = new Promise((_resolve, _reject) => {\n props.resolve = (v) => {\n props.isResolving = true;\n return _resolve(v);\n };\n props.reject = _reject;\n }).finally(() => {\n props.promise = undefined;\n const index2 = instances.value.indexOf(props);\n if (index2 !== -1)\n instances.value.splice(index2, 1);\n });\n return props.promise;\n }\n function start(...args) {\n if (options.singleton && instances.value.length > 0)\n return instances.value[0].promise;\n return create(...args);\n }\n const component = /* #__PURE__ */ defineComponent((_, { slots }) => {\n const renderList = () => instances.value.map((props) => {\n var _a;\n return h(Fragment, { key: props.key }, (_a = slots.default) == null ? undefined : _a.call(slots, props));\n });\n if (options.transition)\n return () => h(TransitionGroup, options.transition, renderList);\n return renderList;\n });\n component.start = start;\n return component;\n}\n\nfunction createUnrefFn(fn) {\n return function(...args) {\n return fn.apply(this, args.map((i) => toValue(i)));\n };\n}\n\nconst defaultWindow = isClient ? window : undefined;\nconst defaultDocument = isClient ? window.document : undefined;\nconst defaultNavigator = isClient ? window.navigator : undefined;\nconst defaultLocation = isClient ? window.location : undefined;\n\nfunction unrefElement(elRef) {\n var _a;\n const plain = toValue(elRef);\n return (_a = plain == null ? undefined : plain.$el) != null ? _a : plain;\n}\n\nfunction useEventListener(...args) {\n let target;\n let events;\n let listeners;\n let options;\n if (typeof args[0] === \"string\" || Array.isArray(args[0])) {\n [events, listeners, options] = args;\n target = defaultWindow;\n } else {\n [target, events, listeners, options] = args;\n }\n if (!target)\n return noop;\n events = toArray(events);\n listeners = toArray(listeners);\n const cleanups = [];\n const cleanup = () => {\n cleanups.forEach((fn) => fn());\n cleanups.length = 0;\n };\n const register = (el, event, listener, options2) => {\n el.addEventListener(event, listener, options2);\n return () => el.removeEventListener(event, listener, options2);\n };\n const stopWatch = watch(\n () => [unrefElement(target), toValue(options)],\n ([el, options2]) => {\n cleanup();\n if (!el)\n return;\n const optionsClone = isObject(options2) ? { ...options2 } : options2;\n cleanups.push(\n ...events.flatMap((event) => {\n return listeners.map((listener) => register(el, event, listener, optionsClone));\n })\n );\n },\n { immediate: true, flush: \"post\" }\n );\n const stop = () => {\n stopWatch();\n cleanup();\n };\n tryOnScopeDispose(stop);\n return stop;\n}\n\nlet _iOSWorkaround = false;\nfunction onClickOutside(target, handler, options = {}) {\n const { window = defaultWindow, ignore = [], capture = true, detectIframe = false } = options;\n if (!window)\n return noop;\n if (isIOS && !_iOSWorkaround) {\n _iOSWorkaround = true;\n Array.from(window.document.body.children).forEach((el) => el.addEventListener(\"click\", noop));\n window.document.documentElement.addEventListener(\"click\", noop);\n }\n let shouldListen = true;\n const shouldIgnore = (event) => {\n return toValue(ignore).some((target2) => {\n if (typeof target2 === \"string\") {\n return Array.from(window.document.querySelectorAll(target2)).some((el) => el === event.target || event.composedPath().includes(el));\n } else {\n const el = unrefElement(target2);\n return el && (event.target === el || event.composedPath().includes(el));\n }\n });\n };\n function hasMultipleRoots(target2) {\n const vm = toValue(target2);\n return vm && vm.$.subTree.shapeFlag === 16;\n }\n function checkMultipleRoots(target2, event) {\n const vm = toValue(target2);\n const children = vm.$.subTree && vm.$.subTree.children;\n if (children == null || !Array.isArray(children))\n return false;\n return children.some((child) => child.el === event.target || event.composedPath().includes(child.el));\n }\n const listener = (event) => {\n const el = unrefElement(target);\n if (event.target == null)\n return;\n if (!(el instanceof Element) && hasMultipleRoots(target) && checkMultipleRoots(target, event))\n return;\n if (!el || el === event.target || event.composedPath().includes(el))\n return;\n if (event.detail === 0)\n shouldListen = !shouldIgnore(event);\n if (!shouldListen) {\n shouldListen = true;\n return;\n }\n handler(event);\n };\n let isProcessingClick = false;\n const cleanup = [\n useEventListener(window, \"click\", (event) => {\n if (!isProcessingClick) {\n isProcessingClick = true;\n setTimeout(() => {\n isProcessingClick = false;\n }, 0);\n listener(event);\n }\n }, { passive: true, capture }),\n useEventListener(window, \"pointerdown\", (e) => {\n const el = unrefElement(target);\n shouldListen = !shouldIgnore(e) && !!(el && !e.composedPath().includes(el));\n }, { passive: true }),\n detectIframe && useEventListener(window, \"blur\", (event) => {\n setTimeout(() => {\n var _a;\n const el = unrefElement(target);\n if (((_a = window.document.activeElement) == null ? undefined : _a.tagName) === \"IFRAME\" && !(el == null ? undefined : el.contains(window.document.activeElement))) {\n handler(event);\n }\n }, 0);\n }, { passive: true })\n ].filter(Boolean);\n const stop = () => cleanup.forEach((fn) => fn());\n return stop;\n}\n\nfunction useMounted() {\n const isMounted = ref(false);\n const instance = getCurrentInstance();\n if (instance) {\n onMounted(() => {\n isMounted.value = true;\n }, instance);\n }\n return isMounted;\n}\n\nfunction useSupported(callback) {\n const isMounted = useMounted();\n return computed(() => {\n isMounted.value;\n return Boolean(callback());\n });\n}\n\nfunction useMutationObserver(target, callback, options = {}) {\n const { window = defaultWindow, ...mutationOptions } = options;\n let observer;\n const isSupported = useSupported(() => window && \"MutationObserver\" in window);\n const cleanup = () => {\n if (observer) {\n observer.disconnect();\n observer = undefined;\n }\n };\n const targets = computed(() => {\n const value = toValue(target);\n const items = toArray(value).map(unrefElement).filter(notNullish);\n return new Set(items);\n });\n const stopWatch = watch(\n () => targets.value,\n (targets2) => {\n cleanup();\n if (isSupported.value && targets2.size) {\n observer = new MutationObserver(callback);\n targets2.forEach((el) => observer.observe(el, mutationOptions));\n }\n },\n { immediate: true, flush: \"post\" }\n );\n const takeRecords = () => {\n return observer == null ? undefined : observer.takeRecords();\n };\n const stop = () => {\n stopWatch();\n cleanup();\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n stop,\n takeRecords\n };\n}\n\nfunction onElementRemoval(target, callback, options = {}) {\n const {\n window = defaultWindow,\n document = window == null ? undefined : window.document,\n flush = \"sync\"\n } = options;\n if (!window || !document)\n return noop;\n let stopFn;\n const cleanupAndUpdate = (fn) => {\n stopFn == null ? undefined : stopFn();\n stopFn = fn;\n };\n const stopWatch = watchEffect(() => {\n const el = unrefElement(target);\n if (el) {\n const { stop } = useMutationObserver(\n document,\n (mutationsList) => {\n const targetRemoved = mutationsList.map((mutation) => [...mutation.removedNodes]).flat().some((node) => node === el || node.contains(el));\n if (targetRemoved) {\n callback(mutationsList);\n }\n },\n {\n window,\n childList: true,\n subtree: true\n }\n );\n cleanupAndUpdate(stop);\n }\n }, { flush });\n const stopHandle = () => {\n stopWatch();\n cleanupAndUpdate();\n };\n tryOnScopeDispose(stopHandle);\n return stopHandle;\n}\n\nfunction createKeyPredicate(keyFilter) {\n if (typeof keyFilter === \"function\")\n return keyFilter;\n else if (typeof keyFilter === \"string\")\n return (event) => event.key === keyFilter;\n else if (Array.isArray(keyFilter))\n return (event) => keyFilter.includes(event.key);\n return () => true;\n}\nfunction onKeyStroke(...args) {\n let key;\n let handler;\n let options = {};\n if (args.length === 3) {\n key = args[0];\n handler = args[1];\n options = args[2];\n } else if (args.length === 2) {\n if (typeof args[1] === \"object\") {\n key = true;\n handler = args[0];\n options = args[1];\n } else {\n key = args[0];\n handler = args[1];\n }\n } else {\n key = true;\n handler = args[0];\n }\n const {\n target = defaultWindow,\n eventName = \"keydown\",\n passive = false,\n dedupe = false\n } = options;\n const predicate = createKeyPredicate(key);\n const listener = (e) => {\n if (e.repeat && toValue(dedupe))\n return;\n if (predicate(e))\n handler(e);\n };\n return useEventListener(target, eventName, listener, passive);\n}\nfunction onKeyDown(key, handler, options = {}) {\n return onKeyStroke(key, handler, { ...options, eventName: \"keydown\" });\n}\nfunction onKeyPressed(key, handler, options = {}) {\n return onKeyStroke(key, handler, { ...options, eventName: \"keypress\" });\n}\nfunction onKeyUp(key, handler, options = {}) {\n return onKeyStroke(key, handler, { ...options, eventName: \"keyup\" });\n}\n\nconst DEFAULT_DELAY = 500;\nconst DEFAULT_THRESHOLD = 10;\nfunction onLongPress(target, handler, options) {\n var _a, _b;\n const elementRef = computed(() => unrefElement(target));\n let timeout;\n let posStart;\n let startTimestamp;\n let hasLongPressed = false;\n function clear() {\n if (timeout) {\n clearTimeout(timeout);\n timeout = undefined;\n }\n posStart = undefined;\n startTimestamp = undefined;\n hasLongPressed = false;\n }\n function onRelease(ev) {\n var _a2, _b2, _c;\n const [_startTimestamp, _posStart, _hasLongPressed] = [startTimestamp, posStart, hasLongPressed];\n clear();\n if (!(options == null ? undefined : options.onMouseUp) || !_posStart || !_startTimestamp)\n return;\n if (((_a2 = options == null ? undefined : options.modifiers) == null ? undefined : _a2.self) && ev.target !== elementRef.value)\n return;\n if ((_b2 = options == null ? undefined : options.modifiers) == null ? undefined : _b2.prevent)\n ev.preventDefault();\n if ((_c = options == null ? undefined : options.modifiers) == null ? undefined : _c.stop)\n ev.stopPropagation();\n const dx = ev.x - _posStart.x;\n const dy = ev.y - _posStart.y;\n const distance = Math.sqrt(dx * dx + dy * dy);\n options.onMouseUp(ev.timeStamp - _startTimestamp, distance, _hasLongPressed);\n }\n function onDown(ev) {\n var _a2, _b2, _c, _d;\n if (((_a2 = options == null ? undefined : options.modifiers) == null ? undefined : _a2.self) && ev.target !== elementRef.value)\n return;\n clear();\n if ((_b2 = options == null ? undefined : options.modifiers) == null ? undefined : _b2.prevent)\n ev.preventDefault();\n if ((_c = options == null ? undefined : options.modifiers) == null ? undefined : _c.stop)\n ev.stopPropagation();\n posStart = {\n x: ev.x,\n y: ev.y\n };\n startTimestamp = ev.timeStamp;\n timeout = setTimeout(\n () => {\n hasLongPressed = true;\n handler(ev);\n },\n (_d = options == null ? undefined : options.delay) != null ? _d : DEFAULT_DELAY\n );\n }\n function onMove(ev) {\n var _a2, _b2, _c, _d;\n if (((_a2 = options == null ? undefined : options.modifiers) == null ? undefined : _a2.self) && ev.target !== elementRef.value)\n return;\n if (!posStart || (options == null ? undefined : options.distanceThreshold) === false)\n return;\n if ((_b2 = options == null ? undefined : options.modifiers) == null ? undefined : _b2.prevent)\n ev.preventDefault();\n if ((_c = options == null ? undefined : options.modifiers) == null ? undefined : _c.stop)\n ev.stopPropagation();\n const dx = ev.x - posStart.x;\n const dy = ev.y - posStart.y;\n const distance = Math.sqrt(dx * dx + dy * dy);\n if (distance >= ((_d = options == null ? undefined : options.distanceThreshold) != null ? _d : DEFAULT_THRESHOLD))\n clear();\n }\n const listenerOptions = {\n capture: (_a = options == null ? undefined : options.modifiers) == null ? undefined : _a.capture,\n once: (_b = options == null ? undefined : options.modifiers) == null ? undefined : _b.once\n };\n const cleanup = [\n useEventListener(elementRef, \"pointerdown\", onDown, listenerOptions),\n useEventListener(elementRef, \"pointermove\", onMove, listenerOptions),\n useEventListener(elementRef, [\"pointerup\", \"pointerleave\"], onRelease, listenerOptions)\n ];\n const stop = () => cleanup.forEach((fn) => fn());\n return stop;\n}\n\nfunction isFocusedElementEditable() {\n const { activeElement, body } = document;\n if (!activeElement)\n return false;\n if (activeElement === body)\n return false;\n switch (activeElement.tagName) {\n case \"INPUT\":\n case \"TEXTAREA\":\n return true;\n }\n return activeElement.hasAttribute(\"contenteditable\");\n}\nfunction isTypedCharValid({\n keyCode,\n metaKey,\n ctrlKey,\n altKey\n}) {\n if (metaKey || ctrlKey || altKey)\n return false;\n if (keyCode >= 48 && keyCode <= 57)\n return true;\n if (keyCode >= 65 && keyCode <= 90)\n return true;\n if (keyCode >= 97 && keyCode <= 122)\n return true;\n return false;\n}\nfunction onStartTyping(callback, options = {}) {\n const { document: document2 = defaultDocument } = options;\n const keydown = (event) => {\n if (!isFocusedElementEditable() && isTypedCharValid(event)) {\n callback(event);\n }\n };\n if (document2)\n useEventListener(document2, \"keydown\", keydown, { passive: true });\n}\n\nfunction templateRef(key, initialValue = null) {\n const instance = getCurrentInstance();\n let _trigger = () => {\n };\n const element = customRef((track, trigger) => {\n _trigger = trigger;\n return {\n get() {\n var _a, _b;\n track();\n return (_b = (_a = instance == null ? undefined : instance.proxy) == null ? undefined : _a.$refs[key]) != null ? _b : initialValue;\n },\n set() {\n }\n };\n });\n tryOnMounted(_trigger);\n onUpdated(_trigger);\n return element;\n}\n\nfunction useActiveElement(options = {}) {\n var _a;\n const {\n window = defaultWindow,\n deep = true,\n triggerOnRemoval = false\n } = options;\n const document = (_a = options.document) != null ? _a : window == null ? undefined : window.document;\n const getDeepActiveElement = () => {\n var _a2;\n let element = document == null ? undefined : document.activeElement;\n if (deep) {\n while (element == null ? undefined : element.shadowRoot)\n element = (_a2 = element == null ? undefined : element.shadowRoot) == null ? undefined : _a2.activeElement;\n }\n return element;\n };\n const activeElement = ref();\n const trigger = () => {\n activeElement.value = getDeepActiveElement();\n };\n if (window) {\n const listenerOptions = {\n capture: true,\n passive: true\n };\n useEventListener(\n window,\n \"blur\",\n (event) => {\n if (event.relatedTarget !== null)\n return;\n trigger();\n },\n listenerOptions\n );\n useEventListener(\n window,\n \"focus\",\n trigger,\n listenerOptions\n );\n }\n if (triggerOnRemoval) {\n onElementRemoval(activeElement, trigger, { document });\n }\n trigger();\n return activeElement;\n}\n\nfunction useRafFn(fn, options = {}) {\n const {\n immediate = true,\n fpsLimit = undefined,\n window = defaultWindow\n } = options;\n const isActive = ref(false);\n const intervalLimit = computed(() => {\n return fpsLimit ? 1e3 / toValue(fpsLimit) : null;\n });\n let previousFrameTimestamp = 0;\n let rafId = null;\n function loop(timestamp) {\n if (!isActive.value || !window)\n return;\n if (!previousFrameTimestamp)\n previousFrameTimestamp = timestamp;\n const delta = timestamp - previousFrameTimestamp;\n if (intervalLimit.value && delta < intervalLimit.value) {\n rafId = window.requestAnimationFrame(loop);\n return;\n }\n previousFrameTimestamp = timestamp;\n fn({ delta, timestamp });\n rafId = window.requestAnimationFrame(loop);\n }\n function resume() {\n if (!isActive.value && window) {\n isActive.value = true;\n previousFrameTimestamp = 0;\n rafId = window.requestAnimationFrame(loop);\n }\n }\n function pause() {\n isActive.value = false;\n if (rafId != null && window) {\n window.cancelAnimationFrame(rafId);\n rafId = null;\n }\n }\n if (immediate)\n resume();\n tryOnScopeDispose(pause);\n return {\n isActive: readonly(isActive),\n pause,\n resume\n };\n}\n\nfunction useAnimate(target, keyframes, options) {\n let config;\n let animateOptions;\n if (isObject(options)) {\n config = options;\n animateOptions = objectOmit(options, [\"window\", \"immediate\", \"commitStyles\", \"persist\", \"onReady\", \"onError\"]);\n } else {\n config = { duration: options };\n animateOptions = options;\n }\n const {\n window = defaultWindow,\n immediate = true,\n commitStyles,\n persist,\n playbackRate: _playbackRate = 1,\n onReady,\n onError = (e) => {\n console.error(e);\n }\n } = config;\n const isSupported = useSupported(() => window && HTMLElement && \"animate\" in HTMLElement.prototype);\n const animate = shallowRef(undefined);\n const store = shallowReactive({\n startTime: null,\n currentTime: null,\n timeline: null,\n playbackRate: _playbackRate,\n pending: false,\n playState: immediate ? \"idle\" : \"paused\",\n replaceState: \"active\"\n });\n const pending = computed(() => store.pending);\n const playState = computed(() => store.playState);\n const replaceState = computed(() => store.replaceState);\n const startTime = computed({\n get() {\n return store.startTime;\n },\n set(value) {\n store.startTime = value;\n if (animate.value)\n animate.value.startTime = value;\n }\n });\n const currentTime = computed({\n get() {\n return store.currentTime;\n },\n set(value) {\n store.currentTime = value;\n if (animate.value) {\n animate.value.currentTime = value;\n syncResume();\n }\n }\n });\n const timeline = computed({\n get() {\n return store.timeline;\n },\n set(value) {\n store.timeline = value;\n if (animate.value)\n animate.value.timeline = value;\n }\n });\n const playbackRate = computed({\n get() {\n return store.playbackRate;\n },\n set(value) {\n store.playbackRate = value;\n if (animate.value)\n animate.value.playbackRate = value;\n }\n });\n const play = () => {\n if (animate.value) {\n try {\n animate.value.play();\n syncResume();\n } catch (e) {\n syncPause();\n onError(e);\n }\n } else {\n update();\n }\n };\n const pause = () => {\n var _a;\n try {\n (_a = animate.value) == null ? void 0 : _a.pause();\n syncPause();\n } catch (e) {\n onError(e);\n }\n };\n const reverse = () => {\n var _a;\n if (!animate.value)\n update();\n try {\n (_a = animate.value) == null ? void 0 : _a.reverse();\n syncResume();\n } catch (e) {\n syncPause();\n onError(e);\n }\n };\n const finish = () => {\n var _a;\n try {\n (_a = animate.value) == null ? void 0 : _a.finish();\n syncPause();\n } catch (e) {\n onError(e);\n }\n };\n const cancel = () => {\n var _a;\n try {\n (_a = animate.value) == null ? void 0 : _a.cancel();\n syncPause();\n } catch (e) {\n onError(e);\n }\n };\n watch(() => unrefElement(target), (el) => {\n if (el)\n update();\n });\n watch(() => keyframes, (value) => {\n if (animate.value)\n update();\n if (!unrefElement(target) && animate.value) {\n animate.value.effect = new KeyframeEffect(\n unrefElement(target),\n toValue(value),\n animateOptions\n );\n }\n }, { deep: true });\n tryOnMounted(() => update(true), false);\n tryOnScopeDispose(cancel);\n function update(init) {\n const el = unrefElement(target);\n if (!isSupported.value || !el)\n return;\n if (!animate.value)\n animate.value = el.animate(toValue(keyframes), animateOptions);\n if (persist)\n animate.value.persist();\n if (_playbackRate !== 1)\n animate.value.playbackRate = _playbackRate;\n if (init && !immediate)\n animate.value.pause();\n else\n syncResume();\n onReady == null ? undefined : onReady(animate.value);\n }\n useEventListener(animate, [\"cancel\", \"finish\", \"remove\"], syncPause);\n useEventListener(animate, \"finish\", () => {\n var _a;\n if (commitStyles)\n (_a = animate.value) == null ? undefined : _a.commitStyles();\n });\n const { resume: resumeRef, pause: pauseRef } = useRafFn(() => {\n if (!animate.value)\n return;\n store.pending = animate.value.pending;\n store.playState = animate.value.playState;\n store.replaceState = animate.value.replaceState;\n store.startTime = animate.value.startTime;\n store.currentTime = animate.value.currentTime;\n store.timeline = animate.value.timeline;\n store.playbackRate = animate.value.playbackRate;\n }, { immediate: false });\n function syncResume() {\n if (isSupported.value)\n resumeRef();\n }\n function syncPause() {\n if (isSupported.value && window)\n window.requestAnimationFrame(pauseRef);\n }\n return {\n isSupported,\n animate,\n // actions\n play,\n pause,\n reverse,\n finish,\n cancel,\n // state\n pending,\n playState,\n replaceState,\n startTime,\n currentTime,\n timeline,\n playbackRate\n };\n}\n\nfunction useAsyncQueue(tasks, options) {\n const {\n interrupt = true,\n onError = noop,\n onFinished = noop,\n signal\n } = options || {};\n const promiseState = {\n aborted: \"aborted\",\n fulfilled: \"fulfilled\",\n pending: \"pending\",\n rejected: \"rejected\"\n };\n const initialResult = Array.from(Array.from({ length: tasks.length }), () => ({ state: promiseState.pending, data: null }));\n const result = reactive(initialResult);\n const activeIndex = ref(-1);\n if (!tasks || tasks.length === 0) {\n onFinished();\n return {\n activeIndex,\n result\n };\n }\n function updateResult(state, res) {\n activeIndex.value++;\n result[activeIndex.value].data = res;\n result[activeIndex.value].state = state;\n }\n tasks.reduce((prev, curr) => {\n return prev.then((prevRes) => {\n var _a;\n if (signal == null ? undefined : signal.aborted) {\n updateResult(promiseState.aborted, new Error(\"aborted\"));\n return;\n }\n if (((_a = result[activeIndex.value]) == null ? undefined : _a.state) === promiseState.rejected && interrupt) {\n onFinished();\n return;\n }\n const done = curr(prevRes).then((currentRes) => {\n updateResult(promiseState.fulfilled, currentRes);\n if (activeIndex.value === tasks.length - 1)\n onFinished();\n return currentRes;\n });\n if (!signal)\n return done;\n return Promise.race([done, whenAborted(signal)]);\n }).catch((e) => {\n if (signal == null ? undefined : signal.aborted) {\n updateResult(promiseState.aborted, e);\n return e;\n }\n updateResult(promiseState.rejected, e);\n onError();\n return e;\n });\n }, Promise.resolve());\n return {\n activeIndex,\n result\n };\n}\nfunction whenAborted(signal) {\n return new Promise((resolve, reject) => {\n const error = new Error(\"aborted\");\n if (signal.aborted)\n reject(error);\n else\n signal.addEventListener(\"abort\", () => reject(error), { once: true });\n });\n}\n\nfunction useAsyncState(promise, initialState, options) {\n const {\n immediate = true,\n delay = 0,\n onError = noop,\n onSuccess = noop,\n resetOnExecute = true,\n shallow = true,\n throwError\n } = options != null ? options : {};\n const state = shallow ? shallowRef(initialState) : ref(initialState);\n const isReady = ref(false);\n const isLoading = ref(false);\n const error = shallowRef(undefined);\n async function execute(delay2 = 0, ...args) {\n if (resetOnExecute)\n state.value = initialState;\n error.value = undefined;\n isReady.value = false;\n isLoading.value = true;\n if (delay2 > 0)\n await promiseTimeout(delay2);\n const _promise = typeof promise === \"function\" ? promise(...args) : promise;\n try {\n const data = await _promise;\n state.value = data;\n isReady.value = true;\n onSuccess(data);\n } catch (e) {\n error.value = e;\n onError(e);\n if (throwError)\n throw e;\n } finally {\n isLoading.value = false;\n }\n return state.value;\n }\n if (immediate) {\n execute(delay);\n }\n const shell = {\n state,\n isReady,\n isLoading,\n error,\n execute\n };\n function waitUntilIsLoaded() {\n return new Promise((resolve, reject) => {\n until(isLoading).toBe(false).then(() => resolve(shell)).catch(reject);\n });\n }\n return {\n ...shell,\n then(onFulfilled, onRejected) {\n return waitUntilIsLoaded().then(onFulfilled, onRejected);\n }\n };\n}\n\nconst defaults = {\n array: (v) => JSON.stringify(v),\n object: (v) => JSON.stringify(v),\n set: (v) => JSON.stringify(Array.from(v)),\n map: (v) => JSON.stringify(Object.fromEntries(v)),\n null: () => \"\"\n};\nfunction getDefaultSerialization(target) {\n if (!target)\n return defaults.null;\n if (target instanceof Map)\n return defaults.map;\n else if (target instanceof Set)\n return defaults.set;\n else if (Array.isArray(target))\n return defaults.array;\n else\n return defaults.object;\n}\n\nfunction useBase64(target, options) {\n const base64 = ref(\"\");\n const promise = ref();\n function execute() {\n if (!isClient)\n return;\n promise.value = new Promise((resolve, reject) => {\n try {\n const _target = toValue(target);\n if (_target == null) {\n resolve(\"\");\n } else if (typeof _target === \"string\") {\n resolve(blobToBase64(new Blob([_target], { type: \"text/plain\" })));\n } else if (_target instanceof Blob) {\n resolve(blobToBase64(_target));\n } else if (_target instanceof ArrayBuffer) {\n resolve(window.btoa(String.fromCharCode(...new Uint8Array(_target))));\n } else if (_target instanceof HTMLCanvasElement) {\n resolve(_target.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality));\n } else if (_target instanceof HTMLImageElement) {\n const img = _target.cloneNode(false);\n img.crossOrigin = \"Anonymous\";\n imgLoaded(img).then(() => {\n const canvas = document.createElement(\"canvas\");\n const ctx = canvas.getContext(\"2d\");\n canvas.width = img.width;\n canvas.height = img.height;\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n resolve(canvas.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality));\n }).catch(reject);\n } else if (typeof _target === \"object\") {\n const _serializeFn = (options == null ? void 0 : options.serializer) || getDefaultSerialization(_target);\n const serialized = _serializeFn(_target);\n return resolve(blobToBase64(new Blob([serialized], { type: \"application/json\" })));\n } else {\n reject(new Error(\"target is unsupported types\"));\n }\n } catch (error) {\n reject(error);\n }\n });\n promise.value.then((res) => {\n base64.value = (options == null ? undefined : options.dataUrl) === false ? res.replace(/^data:.*?;base64,/, \"\") : res;\n });\n return promise.value;\n }\n if (isRef(target) || typeof target === \"function\")\n watch(target, execute, { immediate: true });\n else\n execute();\n return {\n base64,\n promise,\n execute\n };\n}\nfunction imgLoaded(img) {\n return new Promise((resolve, reject) => {\n if (!img.complete) {\n img.onload = () => {\n resolve();\n };\n img.onerror = reject;\n } else {\n resolve();\n }\n });\n}\nfunction blobToBase64(blob) {\n return new Promise((resolve, reject) => {\n const fr = new FileReader();\n fr.onload = (e) => {\n resolve(e.target.result);\n };\n fr.onerror = reject;\n fr.readAsDataURL(blob);\n });\n}\n\nfunction useBattery(options = {}) {\n const { navigator = defaultNavigator } = options;\n const events = [\"chargingchange\", \"chargingtimechange\", \"dischargingtimechange\", \"levelchange\"];\n const isSupported = useSupported(() => navigator && \"getBattery\" in navigator && typeof navigator.getBattery === \"function\");\n const charging = ref(false);\n const chargingTime = ref(0);\n const dischargingTime = ref(0);\n const level = ref(1);\n let battery;\n function updateBatteryInfo() {\n charging.value = this.charging;\n chargingTime.value = this.chargingTime || 0;\n dischargingTime.value = this.dischargingTime || 0;\n level.value = this.level;\n }\n if (isSupported.value) {\n navigator.getBattery().then((_battery) => {\n battery = _battery;\n updateBatteryInfo.call(battery);\n useEventListener(battery, events, updateBatteryInfo, { passive: true });\n });\n }\n return {\n isSupported,\n charging,\n chargingTime,\n dischargingTime,\n level\n };\n}\n\nfunction useBluetooth(options) {\n let {\n acceptAllDevices = false\n } = options || {};\n const {\n filters = undefined,\n optionalServices = undefined,\n navigator = defaultNavigator\n } = options || {};\n const isSupported = useSupported(() => navigator && \"bluetooth\" in navigator);\n const device = shallowRef();\n const error = shallowRef(null);\n watch(device, () => {\n connectToBluetoothGATTServer();\n });\n async function requestDevice() {\n if (!isSupported.value)\n return;\n error.value = null;\n if (filters && filters.length > 0)\n acceptAllDevices = false;\n try {\n device.value = await (navigator == null ? void 0 : navigator.bluetooth.requestDevice({\n acceptAllDevices,\n filters,\n optionalServices\n }));\n } catch (err) {\n error.value = err;\n }\n }\n const server = shallowRef();\n const isConnected = shallowRef(false);\n function reset() {\n isConnected.value = false;\n device.value = undefined;\n server.value = undefined;\n }\n async function connectToBluetoothGATTServer() {\n error.value = null;\n if (device.value && device.value.gatt) {\n device.value.addEventListener(\"gattserverdisconnected\", reset);\n try {\n server.value = await device.value.gatt.connect();\n isConnected.value = server.value.connected;\n } catch (err) {\n error.value = err;\n }\n }\n }\n tryOnMounted(() => {\n var _a;\n if (device.value)\n (_a = device.value.gatt) == null ? undefined : _a.connect();\n });\n tryOnScopeDispose(() => {\n var _a;\n if (device.value)\n (_a = device.value.gatt) == null ? undefined : _a.disconnect();\n });\n return {\n isSupported,\n isConnected: readonly(isConnected),\n // Device:\n device,\n requestDevice,\n // Server:\n server,\n // Errors:\n error\n };\n}\n\nconst ssrWidthSymbol = Symbol(\"vueuse-ssr-width\");\nfunction useSSRWidth() {\n const ssrWidth = hasInjectionContext() ? injectLocal(ssrWidthSymbol, null) : null;\n return typeof ssrWidth === \"number\" ? ssrWidth : undefined;\n}\nfunction provideSSRWidth(width, app) {\n if (app !== undefined) {\n app.provide(ssrWidthSymbol, width);\n } else {\n provideLocal(ssrWidthSymbol, width);\n }\n}\n\nfunction useMediaQuery(query, options = {}) {\n const { window = defaultWindow, ssrWidth = useSSRWidth() } = options;\n const isSupported = useSupported(() => window && \"matchMedia\" in window && typeof window.matchMedia === \"function\");\n const ssrSupport = ref(typeof ssrWidth === \"number\");\n let mediaQuery;\n const matches = ref(false);\n const handler = (event) => {\n matches.value = event.matches;\n };\n const cleanup = () => {\n if (!mediaQuery)\n return;\n if (\"removeEventListener\" in mediaQuery)\n mediaQuery.removeEventListener(\"change\", handler);\n else\n mediaQuery.removeListener(handler);\n };\n const stopWatch = watchEffect(() => {\n if (ssrSupport.value) {\n ssrSupport.value = !isSupported.value;\n const queryStrings = toValue(query).split(\",\");\n matches.value = queryStrings.some((queryString) => {\n const not = queryString.includes(\"not all\");\n const minWidth = queryString.match(/\\(\\s*min-width:\\s*(-?\\d+(?:\\.\\d*)?[a-z]+\\s*)\\)/);\n const maxWidth = queryString.match(/\\(\\s*max-width:\\s*(-?\\d+(?:\\.\\d*)?[a-z]+\\s*)\\)/);\n let res = Boolean(minWidth || maxWidth);\n if (minWidth && res) {\n res = ssrWidth >= pxValue(minWidth[1]);\n }\n if (maxWidth && res) {\n res = ssrWidth <= pxValue(maxWidth[1]);\n }\n return not ? !res : res;\n });\n return;\n }\n if (!isSupported.value)\n return;\n cleanup();\n mediaQuery = window.matchMedia(toValue(query));\n if (\"addEventListener\" in mediaQuery)\n mediaQuery.addEventListener(\"change\", handler);\n else\n mediaQuery.addListener(handler);\n matches.value = mediaQuery.matches;\n });\n tryOnScopeDispose(() => {\n stopWatch();\n cleanup();\n mediaQuery = undefined;\n });\n return computed(() => matches.value);\n}\n\nconst breakpointsTailwind = {\n \"sm\": 640,\n \"md\": 768,\n \"lg\": 1024,\n \"xl\": 1280,\n \"2xl\": 1536\n};\nconst breakpointsBootstrapV5 = {\n xs: 0,\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n xxl: 1400\n};\nconst breakpointsVuetifyV2 = {\n xs: 0,\n sm: 600,\n md: 960,\n lg: 1264,\n xl: 1904\n};\nconst breakpointsVuetifyV3 = {\n xs: 0,\n sm: 600,\n md: 960,\n lg: 1280,\n xl: 1920,\n xxl: 2560\n};\nconst breakpointsVuetify = breakpointsVuetifyV2;\nconst breakpointsAntDesign = {\n xs: 480,\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n xxl: 1600\n};\nconst breakpointsQuasar = {\n xs: 0,\n sm: 600,\n md: 1024,\n lg: 1440,\n xl: 1920\n};\nconst breakpointsSematic = {\n mobileS: 320,\n mobileM: 375,\n mobileL: 425,\n tablet: 768,\n laptop: 1024,\n laptopL: 1440,\n desktop4K: 2560\n};\nconst breakpointsMasterCss = {\n \"3xs\": 360,\n \"2xs\": 480,\n \"xs\": 600,\n \"sm\": 768,\n \"md\": 1024,\n \"lg\": 1280,\n \"xl\": 1440,\n \"2xl\": 1600,\n \"3xl\": 1920,\n \"4xl\": 2560\n};\nconst breakpointsPrimeFlex = {\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200\n};\nconst breakpointsElement = {\n xs: 0,\n sm: 768,\n md: 992,\n lg: 1200,\n xl: 1920\n};\n\nfunction useBreakpoints(breakpoints, options = {}) {\n function getValue(k, delta) {\n let v = toValue(breakpoints[toValue(k)]);\n if (delta != null)\n v = increaseWithUnit(v, delta);\n if (typeof v === \"number\")\n v = `${v}px`;\n return v;\n }\n const { window = defaultWindow, strategy = \"min-width\", ssrWidth = useSSRWidth() } = options;\n const ssrSupport = typeof ssrWidth === \"number\";\n const mounted = ssrSupport ? ref(false) : { value: true };\n if (ssrSupport) {\n tryOnMounted(() => mounted.value = !!window);\n }\n function match(query, size) {\n if (!mounted.value && ssrSupport) {\n return query === \"min\" ? ssrWidth >= pxValue(size) : ssrWidth <= pxValue(size);\n }\n if (!window)\n return false;\n return window.matchMedia(`(${query}-width: ${size})`).matches;\n }\n const greaterOrEqual = (k) => {\n return useMediaQuery(() => `(min-width: ${getValue(k)})`, options);\n };\n const smallerOrEqual = (k) => {\n return useMediaQuery(() => `(max-width: ${getValue(k)})`, options);\n };\n const shortcutMethods = Object.keys(breakpoints).reduce((shortcuts, k) => {\n Object.defineProperty(shortcuts, k, {\n get: () => strategy === \"min-width\" ? greaterOrEqual(k) : smallerOrEqual(k),\n enumerable: true,\n configurable: true\n });\n return shortcuts;\n }, {});\n function current() {\n const points = Object.keys(breakpoints).map((k) => [k, shortcutMethods[k], pxValue(getValue(k))]).sort((a, b) => a[2] - b[2]);\n return computed(() => points.filter(([, v]) => v.value).map(([k]) => k));\n }\n return Object.assign(shortcutMethods, {\n greaterOrEqual,\n smallerOrEqual,\n greater(k) {\n return useMediaQuery(() => `(min-width: ${getValue(k, 0.1)})`, options);\n },\n smaller(k) {\n return useMediaQuery(() => `(max-width: ${getValue(k, -0.1)})`, options);\n },\n between(a, b) {\n return useMediaQuery(() => `(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -0.1)})`, options);\n },\n isGreater(k) {\n return match(\"min\", getValue(k, 0.1));\n },\n isGreaterOrEqual(k) {\n return match(\"min\", getValue(k));\n },\n isSmaller(k) {\n return match(\"max\", getValue(k, -0.1));\n },\n isSmallerOrEqual(k) {\n return match(\"max\", getValue(k));\n },\n isInBetween(a, b) {\n return match(\"min\", getValue(a)) && match(\"max\", getValue(b, -0.1));\n },\n current,\n active() {\n const bps = current();\n return computed(() => bps.value.length === 0 ? \"\" : bps.value.at(strategy === \"min-width\" ? -1 : 0));\n }\n });\n}\n\nfunction useBroadcastChannel(options) {\n const {\n name,\n window = defaultWindow\n } = options;\n const isSupported = useSupported(() => window && \"BroadcastChannel\" in window);\n const isClosed = ref(false);\n const channel = ref();\n const data = ref();\n const error = shallowRef(null);\n const post = (data2) => {\n if (channel.value)\n channel.value.postMessage(data2);\n };\n const close = () => {\n if (channel.value)\n channel.value.close();\n isClosed.value = true;\n };\n if (isSupported.value) {\n tryOnMounted(() => {\n error.value = null;\n channel.value = new BroadcastChannel(name);\n channel.value.addEventListener(\"message\", (e) => {\n data.value = e.data;\n }, { passive: true });\n channel.value.addEventListener(\"messageerror\", (e) => {\n error.value = e;\n }, { passive: true });\n channel.value.addEventListener(\"close\", () => {\n isClosed.value = true;\n });\n });\n }\n tryOnScopeDispose(() => {\n close();\n });\n return {\n isSupported,\n channel,\n data,\n post,\n close,\n error,\n isClosed\n };\n}\n\nconst WRITABLE_PROPERTIES = [\n \"hash\",\n \"host\",\n \"hostname\",\n \"href\",\n \"pathname\",\n \"port\",\n \"protocol\",\n \"search\"\n];\nfunction useBrowserLocation(options = {}) {\n const { window = defaultWindow } = options;\n const refs = Object.fromEntries(\n WRITABLE_PROPERTIES.map((key) => [key, ref()])\n );\n for (const [key, ref2] of objectEntries(refs)) {\n watch(ref2, (value) => {\n if (!(window == null ? undefined : window.location) || window.location[key] === value)\n return;\n window.location[key] = value;\n });\n }\n const buildState = (trigger) => {\n var _a;\n const { state: state2, length } = (window == null ? undefined : window.history) || {};\n const { origin } = (window == null ? undefined : window.location) || {};\n for (const key of WRITABLE_PROPERTIES)\n refs[key].value = (_a = window == null ? undefined : window.location) == null ? undefined : _a[key];\n return reactive({\n trigger,\n state: state2,\n length,\n origin,\n ...refs\n });\n };\n const state = ref(buildState(\"load\"));\n if (window) {\n useEventListener(window, \"popstate\", () => state.value = buildState(\"popstate\"), { passive: true });\n useEventListener(window, \"hashchange\", () => state.value = buildState(\"hashchange\"), { passive: true });\n }\n return state;\n}\n\nfunction useCached(refValue, comparator = (a, b) => a === b, watchOptions) {\n const cachedValue = ref(refValue.value);\n watch(() => refValue.value, (value) => {\n if (!comparator(value, cachedValue.value))\n cachedValue.value = value;\n }, watchOptions);\n return cachedValue;\n}\n\nfunction usePermission(permissionDesc, options = {}) {\n const {\n controls = false,\n navigator = defaultNavigator\n } = options;\n const isSupported = useSupported(() => navigator && \"permissions\" in navigator);\n const permissionStatus = shallowRef();\n const desc = typeof permissionDesc === \"string\" ? { name: permissionDesc } : permissionDesc;\n const state = shallowRef();\n const update = () => {\n var _a, _b;\n state.value = (_b = (_a = permissionStatus.value) == null ? undefined : _a.state) != null ? _b : \"prompt\";\n };\n useEventListener(permissionStatus, \"change\", update, { passive: true });\n const query = createSingletonPromise(async () => {\n if (!isSupported.value)\n return;\n if (!permissionStatus.value) {\n try {\n permissionStatus.value = await navigator.permissions.query(desc);\n } catch (e) {\n permissionStatus.value = undefined;\n } finally {\n update();\n }\n }\n if (controls)\n return toRaw(permissionStatus.value);\n });\n query();\n if (controls) {\n return {\n state,\n isSupported,\n query\n };\n } else {\n return state;\n }\n}\n\nfunction useClipboard(options = {}) {\n const {\n navigator = defaultNavigator,\n read = false,\n source,\n copiedDuring = 1500,\n legacy = false\n } = options;\n const isClipboardApiSupported = useSupported(() => navigator && \"clipboard\" in navigator);\n const permissionRead = usePermission(\"clipboard-read\");\n const permissionWrite = usePermission(\"clipboard-write\");\n const isSupported = computed(() => isClipboardApiSupported.value || legacy);\n const text = ref(\"\");\n const copied = ref(false);\n const timeout = useTimeoutFn(() => copied.value = false, copiedDuring, { immediate: false });\n function updateText() {\n if (isClipboardApiSupported.value && isAllowed(permissionRead.value)) {\n navigator.clipboard.readText().then((value) => {\n text.value = value;\n });\n } else {\n text.value = legacyRead();\n }\n }\n if (isSupported.value && read)\n useEventListener([\"copy\", \"cut\"], updateText, { passive: true });\n async function copy(value = toValue(source)) {\n if (isSupported.value && value != null) {\n if (isClipboardApiSupported.value && isAllowed(permissionWrite.value))\n await navigator.clipboard.writeText(value);\n else\n legacyCopy(value);\n text.value = value;\n copied.value = true;\n timeout.start();\n }\n }\n function legacyCopy(value) {\n const ta = document.createElement(\"textarea\");\n ta.value = value != null ? value : \"\";\n ta.style.position = \"absolute\";\n ta.style.opacity = \"0\";\n document.body.appendChild(ta);\n ta.select();\n document.execCommand(\"copy\");\n ta.remove();\n }\n function legacyRead() {\n var _a, _b, _c;\n return (_c = (_b = (_a = document == null ? undefined : document.getSelection) == null ? undefined : _a.call(document)) == null ? undefined : _b.toString()) != null ? _c : \"\";\n }\n function isAllowed(status) {\n return status === \"granted\" || status === \"prompt\";\n }\n return {\n isSupported,\n text,\n copied,\n copy\n };\n}\n\nfunction useClipboardItems(options = {}) {\n const {\n navigator = defaultNavigator,\n read = false,\n source,\n copiedDuring = 1500\n } = options;\n const isSupported = useSupported(() => navigator && \"clipboard\" in navigator);\n const content = ref([]);\n const copied = ref(false);\n const timeout = useTimeoutFn(() => copied.value = false, copiedDuring, { immediate: false });\n function updateContent() {\n if (isSupported.value) {\n navigator.clipboard.read().then((items) => {\n content.value = items;\n });\n }\n }\n if (isSupported.value && read)\n useEventListener([\"copy\", \"cut\"], updateContent, { passive: true });\n async function copy(value = toValue(source)) {\n if (isSupported.value && value != null) {\n await navigator.clipboard.write(value);\n content.value = value;\n copied.value = true;\n timeout.start();\n }\n }\n return {\n isSupported,\n content,\n copied,\n copy\n };\n}\n\nfunction cloneFnJSON(source) {\n return JSON.parse(JSON.stringify(source));\n}\nfunction useCloned(source, options = {}) {\n const cloned = ref({});\n const isModified = ref(false);\n let _lastSync = false;\n const {\n manual,\n clone = cloneFnJSON,\n // watch options\n deep = true,\n immediate = true\n } = options;\n watch(cloned, () => {\n if (_lastSync) {\n _lastSync = false;\n return;\n }\n isModified.value = true;\n }, {\n deep: true,\n flush: \"sync\"\n });\n function sync() {\n _lastSync = true;\n isModified.value = false;\n cloned.value = clone(toValue(source));\n }\n if (!manual && (isRef(source) || typeof source === \"function\")) {\n watch(source, sync, {\n ...options,\n deep,\n immediate\n });\n } else {\n sync();\n }\n return { cloned, isModified, sync };\n}\n\nconst _global = typeof globalThis !== \"undefined\" ? globalThis : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : {};\nconst globalKey = \"__vueuse_ssr_handlers__\";\nconst handlers = /* @__PURE__ */ getHandlers();\nfunction getHandlers() {\n if (!(globalKey in _global))\n _global[globalKey] = _global[globalKey] || {};\n return _global[globalKey];\n}\nfunction getSSRHandler(key, fallback) {\n return handlers[key] || fallback;\n}\nfunction setSSRHandler(key, fn) {\n handlers[key] = fn;\n}\n\nfunction usePreferredDark(options) {\n return useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n}\n\nfunction guessSerializerType(rawInit) {\n return rawInit == null ? \"any\" : rawInit instanceof Set ? \"set\" : rawInit instanceof Map ? \"map\" : rawInit instanceof Date ? \"date\" : typeof rawInit === \"boolean\" ? \"boolean\" : typeof rawInit === \"string\" ? \"string\" : typeof rawInit === \"object\" ? \"object\" : !Number.isNaN(rawInit) ? \"number\" : \"any\";\n}\n\nconst StorageSerializers = {\n boolean: {\n read: (v) => v === \"true\",\n write: (v) => String(v)\n },\n object: {\n read: (v) => JSON.parse(v),\n write: (v) => JSON.stringify(v)\n },\n number: {\n read: (v) => Number.parseFloat(v),\n write: (v) => String(v)\n },\n any: {\n read: (v) => v,\n write: (v) => String(v)\n },\n string: {\n read: (v) => v,\n write: (v) => String(v)\n },\n map: {\n read: (v) => new Map(JSON.parse(v)),\n write: (v) => JSON.stringify(Array.from(v.entries()))\n },\n set: {\n read: (v) => new Set(JSON.parse(v)),\n write: (v) => JSON.stringify(Array.from(v))\n },\n date: {\n read: (v) => new Date(v),\n write: (v) => v.toISOString()\n }\n};\nconst customStorageEventName = \"vueuse-storage\";\nfunction useStorage(key, defaults, storage, options = {}) {\n var _a;\n const {\n flush = \"pre\",\n deep = true,\n listenToStorageChanges = true,\n writeDefaults = true,\n mergeDefaults = false,\n shallow,\n window = defaultWindow,\n eventFilter,\n onError = (e) => {\n console.error(e);\n },\n initOnMounted\n } = options;\n const data = (shallow ? shallowRef : ref)(typeof defaults === \"function\" ? defaults() : defaults);\n const keyComputed = computed(() => toValue(key));\n if (!storage) {\n try {\n storage = getSSRHandler(\"getDefaultStorage\", () => {\n var _a2;\n return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;\n })();\n } catch (e) {\n onError(e);\n }\n }\n if (!storage)\n return data;\n const rawInit = toValue(defaults);\n const type = guessSerializerType(rawInit);\n const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];\n const { pause: pauseWatch, resume: resumeWatch } = pausableWatch(\n data,\n () => write(data.value),\n { flush, deep, eventFilter }\n );\n watch(keyComputed, () => update(), { flush });\n if (window && listenToStorageChanges) {\n tryOnMounted(() => {\n if (storage instanceof Storage)\n useEventListener(window, \"storage\", update, { passive: true });\n else\n useEventListener(window, customStorageEventName, updateFromCustomEvent);\n if (initOnMounted)\n update();\n });\n }\n if (!initOnMounted)\n update();\n function dispatchWriteEvent(oldValue, newValue) {\n if (window) {\n const payload = {\n key: keyComputed.value,\n oldValue,\n newValue,\n storageArea: storage\n };\n window.dispatchEvent(storage instanceof Storage ? new StorageEvent(\"storage\", payload) : new CustomEvent(customStorageEventName, {\n detail: payload\n }));\n }\n }\n function write(v) {\n try {\n const oldValue = storage.getItem(keyComputed.value);\n if (v == null) {\n dispatchWriteEvent(oldValue, null);\n storage.removeItem(keyComputed.value);\n } else {\n const serialized = serializer.write(v);\n if (oldValue !== serialized) {\n storage.setItem(keyComputed.value, serialized);\n dispatchWriteEvent(oldValue, serialized);\n }\n }\n } catch (e) {\n onError(e);\n }\n }\n function read(event) {\n const rawValue = event ? event.newValue : storage.getItem(keyComputed.value);\n if (rawValue == null) {\n if (writeDefaults && rawInit != null)\n storage.setItem(keyComputed.value, serializer.write(rawInit));\n return rawInit;\n } else if (!event && mergeDefaults) {\n const value = serializer.read(rawValue);\n if (typeof mergeDefaults === \"function\")\n return mergeDefaults(value, rawInit);\n else if (type === \"object\" && !Array.isArray(value))\n return { ...rawInit, ...value };\n return value;\n } else if (typeof rawValue !== \"string\") {\n return rawValue;\n } else {\n return serializer.read(rawValue);\n }\n }\n function update(event) {\n if (event && event.storageArea !== storage)\n return;\n if (event && event.key == null) {\n data.value = rawInit;\n return;\n }\n if (event && event.key !== keyComputed.value)\n return;\n pauseWatch();\n try {\n if ((event == null ? void 0 : event.newValue) !== serializer.write(data.value))\n data.value = read(event);\n } catch (e) {\n onError(e);\n } finally {\n if (event)\n nextTick(resumeWatch);\n else\n resumeWatch();\n }\n }\n function updateFromCustomEvent(event) {\n update(event.detail);\n }\n return data;\n}\n\nconst CSS_DISABLE_TRANS = \"*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}\";\nfunction useColorMode(options = {}) {\n const {\n selector = \"html\",\n attribute = \"class\",\n initialValue = \"auto\",\n window = defaultWindow,\n storage,\n storageKey = \"vueuse-color-scheme\",\n listenToStorageChanges = true,\n storageRef,\n emitAuto,\n disableTransition = true\n } = options;\n const modes = {\n auto: \"\",\n light: \"light\",\n dark: \"dark\",\n ...options.modes || {}\n };\n const preferredDark = usePreferredDark({ window });\n const system = computed(() => preferredDark.value ? \"dark\" : \"light\");\n const store = storageRef || (storageKey == null ? toRef(initialValue) : useStorage(storageKey, initialValue, storage, { window, listenToStorageChanges }));\n const state = computed(() => store.value === \"auto\" ? system.value : store.value);\n const updateHTMLAttrs = getSSRHandler(\n \"updateHTMLAttrs\",\n (selector2, attribute2, value) => {\n const el = typeof selector2 === \"string\" ? window == null ? undefined : window.document.querySelector(selector2) : unrefElement(selector2);\n if (!el)\n return;\n const classesToAdd = /* @__PURE__ */ new Set();\n const classesToRemove = /* @__PURE__ */ new Set();\n let attributeToChange = null;\n if (attribute2 === \"class\") {\n const current = value.split(/\\s/g);\n Object.values(modes).flatMap((i) => (i || \"\").split(/\\s/g)).filter(Boolean).forEach((v) => {\n if (current.includes(v))\n classesToAdd.add(v);\n else\n classesToRemove.add(v);\n });\n } else {\n attributeToChange = { key: attribute2, value };\n }\n if (classesToAdd.size === 0 && classesToRemove.size === 0 && attributeToChange === null)\n return;\n let style;\n if (disableTransition) {\n style = window.document.createElement(\"style\");\n style.appendChild(document.createTextNode(CSS_DISABLE_TRANS));\n window.document.head.appendChild(style);\n }\n for (const c of classesToAdd) {\n el.classList.add(c);\n }\n for (const c of classesToRemove) {\n el.classList.remove(c);\n }\n if (attributeToChange) {\n el.setAttribute(attributeToChange.key, attributeToChange.value);\n }\n if (disableTransition) {\n window.getComputedStyle(style).opacity;\n document.head.removeChild(style);\n }\n }\n );\n function defaultOnChanged(mode) {\n var _a;\n updateHTMLAttrs(selector, attribute, (_a = modes[mode]) != null ? _a : mode);\n }\n function onChanged(mode) {\n if (options.onChanged)\n options.onChanged(mode, defaultOnChanged);\n else\n defaultOnChanged(mode);\n }\n watch(state, onChanged, { flush: \"post\", immediate: true });\n tryOnMounted(() => onChanged(state.value));\n const auto = computed({\n get() {\n return emitAuto ? store.value : state.value;\n },\n set(v) {\n store.value = v;\n }\n });\n return Object.assign(auto, { store, system, state });\n}\n\nfunction useConfirmDialog(revealed = ref(false)) {\n const confirmHook = createEventHook();\n const cancelHook = createEventHook();\n const revealHook = createEventHook();\n let _resolve = noop;\n const reveal = (data) => {\n revealHook.trigger(data);\n revealed.value = true;\n return new Promise((resolve) => {\n _resolve = resolve;\n });\n };\n const confirm = (data) => {\n revealed.value = false;\n confirmHook.trigger(data);\n _resolve({ data, isCanceled: false });\n };\n const cancel = (data) => {\n revealed.value = false;\n cancelHook.trigger(data);\n _resolve({ data, isCanceled: true });\n };\n return {\n isRevealed: computed(() => revealed.value),\n reveal,\n confirm,\n cancel,\n onReveal: revealHook.on,\n onConfirm: confirmHook.on,\n onCancel: cancelHook.on\n };\n}\n\nfunction useCssVar(prop, target, options = {}) {\n const { window = defaultWindow, initialValue, observe = false } = options;\n const variable = ref(initialValue);\n const elRef = computed(() => {\n var _a;\n return unrefElement(target) || ((_a = window == null ? undefined : window.document) == null ? undefined : _a.documentElement);\n });\n function updateCssVar() {\n var _a;\n const key = toValue(prop);\n const el = toValue(elRef);\n if (el && window && key) {\n const value = (_a = window.getComputedStyle(el).getPropertyValue(key)) == null ? undefined : _a.trim();\n variable.value = value || initialValue;\n }\n }\n if (observe) {\n useMutationObserver(elRef, updateCssVar, {\n attributeFilter: [\"style\", \"class\"],\n window\n });\n }\n watch(\n [elRef, () => toValue(prop)],\n (_, old) => {\n if (old[0] && old[1])\n old[0].style.removeProperty(old[1]);\n updateCssVar();\n },\n { immediate: true }\n );\n watch(\n variable,\n (val) => {\n var _a;\n const raw_prop = toValue(prop);\n if (((_a = elRef.value) == null ? undefined : _a.style) && raw_prop) {\n if (val == null)\n elRef.value.style.removeProperty(raw_prop);\n else\n elRef.value.style.setProperty(raw_prop, val);\n }\n }\n );\n return variable;\n}\n\nfunction useCurrentElement(rootComponent) {\n const vm = getCurrentInstance();\n const currentElement = computedWithControl(\n () => null,\n () => rootComponent ? unrefElement(rootComponent) : vm.proxy.$el\n );\n onUpdated(currentElement.trigger);\n onMounted(currentElement.trigger);\n return currentElement;\n}\n\nfunction useCycleList(list, options) {\n const state = shallowRef(getInitialValue());\n const listRef = toRef(list);\n const index = computed({\n get() {\n var _a;\n const targetList = listRef.value;\n let index2 = (options == null ? undefined : options.getIndexOf) ? options.getIndexOf(state.value, targetList) : targetList.indexOf(state.value);\n if (index2 < 0)\n index2 = (_a = options == null ? undefined : options.fallbackIndex) != null ? _a : 0;\n return index2;\n },\n set(v) {\n set(v);\n }\n });\n function set(i) {\n const targetList = listRef.value;\n const length = targetList.length;\n const index2 = (i % length + length) % length;\n const value = targetList[index2];\n state.value = value;\n return value;\n }\n function shift(delta = 1) {\n return set(index.value + delta);\n }\n function next(n = 1) {\n return shift(n);\n }\n function prev(n = 1) {\n return shift(-n);\n }\n function getInitialValue() {\n var _a, _b;\n return (_b = toValue((_a = options == null ? undefined : options.initialValue) != null ? _a : toValue(list)[0])) != null ? _b : undefined;\n }\n watch(listRef, () => set(index.value));\n return {\n state,\n index,\n next,\n prev,\n go: set\n };\n}\n\nfunction useDark(options = {}) {\n const {\n valueDark = \"dark\",\n valueLight = \"\"\n } = options;\n const mode = useColorMode({\n ...options,\n onChanged: (mode2, defaultHandler) => {\n var _a;\n if (options.onChanged)\n (_a = options.onChanged) == null ? undefined : _a.call(options, mode2 === \"dark\", defaultHandler, mode2);\n else\n defaultHandler(mode2);\n },\n modes: {\n dark: valueDark,\n light: valueLight\n }\n });\n const system = computed(() => mode.system.value);\n const isDark = computed({\n get() {\n return mode.value === \"dark\";\n },\n set(v) {\n const modeVal = v ? \"dark\" : \"light\";\n if (system.value === modeVal)\n mode.value = \"auto\";\n else\n mode.value = modeVal;\n }\n });\n return isDark;\n}\n\nfunction fnBypass(v) {\n return v;\n}\nfunction fnSetSource(source, value) {\n return source.value = value;\n}\nfunction defaultDump(clone) {\n return clone ? typeof clone === \"function\" ? clone : cloneFnJSON : fnBypass;\n}\nfunction defaultParse(clone) {\n return clone ? typeof clone === \"function\" ? clone : cloneFnJSON : fnBypass;\n}\nfunction useManualRefHistory(source, options = {}) {\n const {\n clone = false,\n dump = defaultDump(clone),\n parse = defaultParse(clone),\n setSource = fnSetSource\n } = options;\n function _createHistoryRecord() {\n return markRaw({\n snapshot: dump(source.value),\n timestamp: timestamp()\n });\n }\n const last = ref(_createHistoryRecord());\n const undoStack = ref([]);\n const redoStack = ref([]);\n const _setSource = (record) => {\n setSource(source, parse(record.snapshot));\n last.value = record;\n };\n const commit = () => {\n undoStack.value.unshift(last.value);\n last.value = _createHistoryRecord();\n if (options.capacity && undoStack.value.length > options.capacity)\n undoStack.value.splice(options.capacity, Number.POSITIVE_INFINITY);\n if (redoStack.value.length)\n redoStack.value.splice(0, redoStack.value.length);\n };\n const clear = () => {\n undoStack.value.splice(0, undoStack.value.length);\n redoStack.value.splice(0, redoStack.value.length);\n };\n const undo = () => {\n const state = undoStack.value.shift();\n if (state) {\n redoStack.value.unshift(last.value);\n _setSource(state);\n }\n };\n const redo = () => {\n const state = redoStack.value.shift();\n if (state) {\n undoStack.value.unshift(last.value);\n _setSource(state);\n }\n };\n const reset = () => {\n _setSource(last.value);\n };\n const history = computed(() => [last.value, ...undoStack.value]);\n const canUndo = computed(() => undoStack.value.length > 0);\n const canRedo = computed(() => redoStack.value.length > 0);\n return {\n source,\n undoStack,\n redoStack,\n last,\n history,\n canUndo,\n canRedo,\n clear,\n commit,\n reset,\n undo,\n redo\n };\n}\n\nfunction useRefHistory(source, options = {}) {\n const {\n deep = false,\n flush = \"pre\",\n eventFilter\n } = options;\n const {\n eventFilter: composedFilter,\n pause,\n resume: resumeTracking,\n isActive: isTracking\n } = pausableFilter(eventFilter);\n const {\n ignoreUpdates,\n ignorePrevAsyncUpdates,\n stop\n } = watchIgnorable(\n source,\n commit,\n { deep, flush, eventFilter: composedFilter }\n );\n function setSource(source2, value) {\n ignorePrevAsyncUpdates();\n ignoreUpdates(() => {\n source2.value = value;\n });\n }\n const manualHistory = useManualRefHistory(source, { ...options, clone: options.clone || deep, setSource });\n const { clear, commit: manualCommit } = manualHistory;\n function commit() {\n ignorePrevAsyncUpdates();\n manualCommit();\n }\n function resume(commitNow) {\n resumeTracking();\n if (commitNow)\n commit();\n }\n function batch(fn) {\n let canceled = false;\n const cancel = () => canceled = true;\n ignoreUpdates(() => {\n fn(cancel);\n });\n if (!canceled)\n commit();\n }\n function dispose() {\n stop();\n clear();\n }\n return {\n ...manualHistory,\n isTracking,\n pause,\n resume,\n commit,\n batch,\n dispose\n };\n}\n\nfunction useDebouncedRefHistory(source, options = {}) {\n const filter = options.debounce ? debounceFilter(options.debounce) : undefined;\n const history = useRefHistory(source, { ...options, eventFilter: filter });\n return {\n ...history\n };\n}\n\nfunction useDeviceMotion(options = {}) {\n const {\n window = defaultWindow,\n requestPermissions = false,\n eventFilter = bypassFilter\n } = options;\n const isSupported = useSupported(() => typeof DeviceMotionEvent !== \"undefined\");\n const requirePermissions = useSupported(() => isSupported.value && \"requestPermission\" in DeviceMotionEvent && typeof DeviceMotionEvent.requestPermission === \"function\");\n const permissionGranted = ref(false);\n const acceleration = ref({ x: null, y: null, z: null });\n const rotationRate = ref({ alpha: null, beta: null, gamma: null });\n const interval = ref(0);\n const accelerationIncludingGravity = ref({\n x: null,\n y: null,\n z: null\n });\n function init() {\n if (window) {\n const onDeviceMotion = createFilterWrapper(\n eventFilter,\n (event) => {\n var _a, _b, _c, _d, _e, _f, _g, _h, _i;\n acceleration.value = {\n x: ((_a = event.acceleration) == null ? undefined : _a.x) || null,\n y: ((_b = event.acceleration) == null ? undefined : _b.y) || null,\n z: ((_c = event.acceleration) == null ? undefined : _c.z) || null\n };\n accelerationIncludingGravity.value = {\n x: ((_d = event.accelerationIncludingGravity) == null ? undefined : _d.x) || null,\n y: ((_e = event.accelerationIncludingGravity) == null ? undefined : _e.y) || null,\n z: ((_f = event.accelerationIncludingGravity) == null ? undefined : _f.z) || null\n };\n rotationRate.value = {\n alpha: ((_g = event.rotationRate) == null ? undefined : _g.alpha) || null,\n beta: ((_h = event.rotationRate) == null ? undefined : _h.beta) || null,\n gamma: ((_i = event.rotationRate) == null ? undefined : _i.gamma) || null\n };\n interval.value = event.interval;\n }\n );\n useEventListener(window, \"devicemotion\", onDeviceMotion, { passive: true });\n }\n }\n const ensurePermissions = async () => {\n if (!requirePermissions.value)\n permissionGranted.value = true;\n if (permissionGranted.value)\n return;\n if (requirePermissions.value) {\n const requestPermission = DeviceMotionEvent.requestPermission;\n try {\n const response = await requestPermission();\n if (response === \"granted\") {\n permissionGranted.value = true;\n init();\n }\n } catch (error) {\n console.error(error);\n }\n }\n };\n if (isSupported.value) {\n if (requestPermissions && requirePermissions.value) {\n ensurePermissions().then(() => init());\n } else {\n init();\n }\n }\n return {\n acceleration,\n accelerationIncludingGravity,\n rotationRate,\n interval,\n isSupported,\n requirePermissions,\n ensurePermissions,\n permissionGranted\n };\n}\n\nfunction useDeviceOrientation(options = {}) {\n const { window = defaultWindow } = options;\n const isSupported = useSupported(() => window && \"DeviceOrientationEvent\" in window);\n const isAbsolute = ref(false);\n const alpha = ref(null);\n const beta = ref(null);\n const gamma = ref(null);\n if (window && isSupported.value) {\n useEventListener(window, \"deviceorientation\", (event) => {\n isAbsolute.value = event.absolute;\n alpha.value = event.alpha;\n beta.value = event.beta;\n gamma.value = event.gamma;\n }, { passive: true });\n }\n return {\n isSupported,\n isAbsolute,\n alpha,\n beta,\n gamma\n };\n}\n\nfunction useDevicePixelRatio(options = {}) {\n const {\n window = defaultWindow\n } = options;\n const pixelRatio = ref(1);\n if (window) {\n let observe2 = function() {\n pixelRatio.value = window.devicePixelRatio;\n cleanup2();\n media = window.matchMedia(`(resolution: ${pixelRatio.value}dppx)`);\n media.addEventListener(\"change\", observe2, { once: true });\n }, cleanup2 = function() {\n media == null ? undefined : media.removeEventListener(\"change\", observe2);\n };\n let media;\n observe2();\n tryOnScopeDispose(cleanup2);\n }\n return { pixelRatio };\n}\n\nfunction useDevicesList(options = {}) {\n const {\n navigator = defaultNavigator,\n requestPermissions = false,\n constraints = { audio: true, video: true },\n onUpdated\n } = options;\n const devices = ref([]);\n const videoInputs = computed(() => devices.value.filter((i) => i.kind === \"videoinput\"));\n const audioInputs = computed(() => devices.value.filter((i) => i.kind === \"audioinput\"));\n const audioOutputs = computed(() => devices.value.filter((i) => i.kind === \"audiooutput\"));\n const isSupported = useSupported(() => navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices);\n const permissionGranted = ref(false);\n let stream;\n async function update() {\n if (!isSupported.value)\n return;\n devices.value = await navigator.mediaDevices.enumerateDevices();\n onUpdated == null ? undefined : onUpdated(devices.value);\n if (stream) {\n stream.getTracks().forEach((t) => t.stop());\n stream = null;\n }\n }\n async function ensurePermissions() {\n if (!isSupported.value)\n return false;\n if (permissionGranted.value)\n return true;\n const { state, query } = usePermission(\"camera\", { controls: true });\n await query();\n if (state.value !== \"granted\") {\n let granted = true;\n try {\n stream = await navigator.mediaDevices.getUserMedia(constraints);\n } catch (e) {\n stream = null;\n granted = false;\n }\n update();\n permissionGranted.value = granted;\n } else {\n permissionGranted.value = true;\n }\n return permissionGranted.value;\n }\n if (isSupported.value) {\n if (requestPermissions)\n ensurePermissions();\n useEventListener(navigator.mediaDevices, \"devicechange\", update, { passive: true });\n update();\n }\n return {\n devices,\n ensurePermissions,\n permissionGranted,\n videoInputs,\n audioInputs,\n audioOutputs,\n isSupported\n };\n}\n\nfunction useDisplayMedia(options = {}) {\n var _a;\n const enabled = ref((_a = options.enabled) != null ? _a : false);\n const video = options.video;\n const audio = options.audio;\n const { navigator = defaultNavigator } = options;\n const isSupported = useSupported(() => {\n var _a2;\n return (_a2 = navigator == null ? undefined : navigator.mediaDevices) == null ? undefined : _a2.getDisplayMedia;\n });\n const constraint = { audio, video };\n const stream = shallowRef();\n async function _start() {\n var _a2;\n if (!isSupported.value || stream.value)\n return;\n stream.value = await navigator.mediaDevices.getDisplayMedia(constraint);\n (_a2 = stream.value) == null ? undefined : _a2.getTracks().forEach((t) => t.addEventListener(\"ended\", stop));\n return stream.value;\n }\n async function _stop() {\n var _a2;\n (_a2 = stream.value) == null ? undefined : _a2.getTracks().forEach((t) => t.stop());\n stream.value = undefined;\n }\n function stop() {\n _stop();\n enabled.value = false;\n }\n async function start() {\n await _start();\n if (stream.value)\n enabled.value = true;\n return stream.value;\n }\n watch(\n enabled,\n (v) => {\n if (v)\n _start();\n else\n _stop();\n },\n { immediate: true }\n );\n return {\n isSupported,\n stream,\n start,\n stop,\n enabled\n };\n}\n\nfunction useDocumentVisibility(options = {}) {\n const { document = defaultDocument } = options;\n if (!document)\n return ref(\"visible\");\n const visibility = ref(document.visibilityState);\n useEventListener(document, \"visibilitychange\", () => {\n visibility.value = document.visibilityState;\n }, { passive: true });\n return visibility;\n}\n\nfunction useDraggable(target, options = {}) {\n var _a;\n const {\n pointerTypes,\n preventDefault,\n stopPropagation,\n exact,\n onMove,\n onEnd,\n onStart,\n initialValue,\n axis = \"both\",\n draggingElement = defaultWindow,\n containerElement,\n handle: draggingHandle = target,\n buttons = [0]\n } = options;\n const position = ref(\n (_a = toValue(initialValue)) != null ? _a : { x: 0, y: 0 }\n );\n const pressedDelta = ref();\n const filterEvent = (e) => {\n if (pointerTypes)\n return pointerTypes.includes(e.pointerType);\n return true;\n };\n const handleEvent = (e) => {\n if (toValue(preventDefault))\n e.preventDefault();\n if (toValue(stopPropagation))\n e.stopPropagation();\n };\n const start = (e) => {\n var _a2;\n if (!toValue(buttons).includes(e.button))\n return;\n if (toValue(options.disabled) || !filterEvent(e))\n return;\n if (toValue(exact) && e.target !== toValue(target))\n return;\n const container = toValue(containerElement);\n const containerRect = (_a2 = container == null ? undefined : container.getBoundingClientRect) == null ? undefined : _a2.call(container);\n const targetRect = toValue(target).getBoundingClientRect();\n const pos = {\n x: e.clientX - (container ? targetRect.left - containerRect.left + container.scrollLeft : targetRect.left),\n y: e.clientY - (container ? targetRect.top - containerRect.top + container.scrollTop : targetRect.top)\n };\n if ((onStart == null ? undefined : onStart(pos, e)) === false)\n return;\n pressedDelta.value = pos;\n handleEvent(e);\n };\n const move = (e) => {\n if (toValue(options.disabled) || !filterEvent(e))\n return;\n if (!pressedDelta.value)\n return;\n const container = toValue(containerElement);\n const targetRect = toValue(target).getBoundingClientRect();\n let { x, y } = position.value;\n if (axis === \"x\" || axis === \"both\") {\n x = e.clientX - pressedDelta.value.x;\n if (container)\n x = Math.min(Math.max(0, x), container.scrollWidth - targetRect.width);\n }\n if (axis === \"y\" || axis === \"both\") {\n y = e.clientY - pressedDelta.value.y;\n if (container)\n y = Math.min(Math.max(0, y), container.scrollHeight - targetRect.height);\n }\n position.value = {\n x,\n y\n };\n onMove == null ? undefined : onMove(position.value, e);\n handleEvent(e);\n };\n const end = (e) => {\n if (toValue(options.disabled) || !filterEvent(e))\n return;\n if (!pressedDelta.value)\n return;\n pressedDelta.value = undefined;\n onEnd == null ? undefined : onEnd(position.value, e);\n handleEvent(e);\n };\n if (isClient) {\n const config = () => {\n var _a2;\n return {\n capture: (_a2 = options.capture) != null ? _a2 : true,\n passive: !toValue(preventDefault)\n };\n };\n useEventListener(draggingHandle, \"pointerdown\", start, config);\n useEventListener(draggingElement, \"pointermove\", move, config);\n useEventListener(draggingElement, \"pointerup\", end, config);\n }\n return {\n ...toRefs(position),\n position,\n isDragging: computed(() => !!pressedDelta.value),\n style: computed(\n () => `left:${position.value.x}px;top:${position.value.y}px;`\n )\n };\n}\n\nfunction useDropZone(target, options = {}) {\n var _a, _b;\n const isOverDropZone = ref(false);\n const files = shallowRef(null);\n let counter = 0;\n let isValid = true;\n if (isClient) {\n const _options = typeof options === \"function\" ? { onDrop: options } : options;\n const multiple = (_a = _options.multiple) != null ? _a : true;\n const preventDefaultForUnhandled = (_b = _options.preventDefaultForUnhandled) != null ? _b : false;\n const getFiles = (event) => {\n var _a2, _b2;\n const list = Array.from((_b2 = (_a2 = event.dataTransfer) == null ? undefined : _a2.files) != null ? _b2 : []);\n return list.length === 0 ? null : multiple ? list : [list[0]];\n };\n const checkDataTypes = (types) => {\n const dataTypes = unref(_options.dataTypes);\n if (typeof dataTypes === \"function\")\n return dataTypes(types);\n if (!(dataTypes == null ? undefined : dataTypes.length))\n return true;\n if (types.length === 0)\n return false;\n return types.every(\n (type) => dataTypes.some((allowedType) => type.includes(allowedType))\n );\n };\n const checkValidity = (items) => {\n const types = Array.from(items != null ? items : []).map((item) => item.type);\n const dataTypesValid = checkDataTypes(types);\n const multipleFilesValid = multiple || items.length <= 1;\n return dataTypesValid && multipleFilesValid;\n };\n const isSafari = () => /^(?:(?!chrome|android).)*safari/i.test(navigator.userAgent) && !(\"chrome\" in window);\n const handleDragEvent = (event, eventType) => {\n var _a2, _b2, _c, _d, _e, _f;\n const dataTransferItemList = (_a2 = event.dataTransfer) == null ? undefined : _a2.items;\n isValid = (_b2 = dataTransferItemList && checkValidity(dataTransferItemList)) != null ? _b2 : false;\n if (preventDefaultForUnhandled) {\n event.preventDefault();\n }\n if (!isSafari() && !isValid) {\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = \"none\";\n }\n return;\n }\n event.preventDefault();\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = \"copy\";\n }\n const currentFiles = getFiles(event);\n switch (eventType) {\n case \"enter\":\n counter += 1;\n isOverDropZone.value = true;\n (_c = _options.onEnter) == null ? undefined : _c.call(_options, null, event);\n break;\n case \"over\":\n (_d = _options.onOver) == null ? undefined : _d.call(_options, null, event);\n break;\n case \"leave\":\n counter -= 1;\n if (counter === 0)\n isOverDropZone.value = false;\n (_e = _options.onLeave) == null ? undefined : _e.call(_options, null, event);\n break;\n case \"drop\":\n counter = 0;\n isOverDropZone.value = false;\n if (isValid) {\n files.value = currentFiles;\n (_f = _options.onDrop) == null ? undefined : _f.call(_options, currentFiles, event);\n }\n break;\n }\n };\n useEventListener(target, \"dragenter\", (event) => handleDragEvent(event, \"enter\"));\n useEventListener(target, \"dragover\", (event) => handleDragEvent(event, \"over\"));\n useEventListener(target, \"dragleave\", (event) => handleDragEvent(event, \"leave\"));\n useEventListener(target, \"drop\", (event) => handleDragEvent(event, \"drop\"));\n }\n return {\n files,\n isOverDropZone\n };\n}\n\nfunction useResizeObserver(target, callback, options = {}) {\n const { window = defaultWindow, ...observerOptions } = options;\n let observer;\n const isSupported = useSupported(() => window && \"ResizeObserver\" in window);\n const cleanup = () => {\n if (observer) {\n observer.disconnect();\n observer = undefined;\n }\n };\n const targets = computed(() => {\n const _targets = toValue(target);\n return Array.isArray(_targets) ? _targets.map((el) => unrefElement(el)) : [unrefElement(_targets)];\n });\n const stopWatch = watch(\n targets,\n (els) => {\n cleanup();\n if (isSupported.value && window) {\n observer = new ResizeObserver(callback);\n for (const _el of els) {\n if (_el)\n observer.observe(_el, observerOptions);\n }\n }\n },\n { immediate: true, flush: \"post\" }\n );\n const stop = () => {\n cleanup();\n stopWatch();\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n stop\n };\n}\n\nfunction useElementBounding(target, options = {}) {\n const {\n reset = true,\n windowResize = true,\n windowScroll = true,\n immediate = true,\n updateTiming = \"sync\"\n } = options;\n const height = ref(0);\n const bottom = ref(0);\n const left = ref(0);\n const right = ref(0);\n const top = ref(0);\n const width = ref(0);\n const x = ref(0);\n const y = ref(0);\n function recalculate() {\n const el = unrefElement(target);\n if (!el) {\n if (reset) {\n height.value = 0;\n bottom.value = 0;\n left.value = 0;\n right.value = 0;\n top.value = 0;\n width.value = 0;\n x.value = 0;\n y.value = 0;\n }\n return;\n }\n const rect = el.getBoundingClientRect();\n height.value = rect.height;\n bottom.value = rect.bottom;\n left.value = rect.left;\n right.value = rect.right;\n top.value = rect.top;\n width.value = rect.width;\n x.value = rect.x;\n y.value = rect.y;\n }\n function update() {\n if (updateTiming === \"sync\")\n recalculate();\n else if (updateTiming === \"next-frame\")\n requestAnimationFrame(() => recalculate());\n }\n useResizeObserver(target, update);\n watch(() => unrefElement(target), (ele) => !ele && update());\n useMutationObserver(target, update, {\n attributeFilter: [\"style\", \"class\"]\n });\n if (windowScroll)\n useEventListener(\"scroll\", update, { capture: true, passive: true });\n if (windowResize)\n useEventListener(\"resize\", update, { passive: true });\n tryOnMounted(() => {\n if (immediate)\n update();\n });\n return {\n height,\n bottom,\n left,\n right,\n top,\n width,\n x,\n y,\n update\n };\n}\n\nfunction useElementByPoint(options) {\n const {\n x,\n y,\n document = defaultDocument,\n multiple,\n interval = \"requestAnimationFrame\",\n immediate = true\n } = options;\n const isSupported = useSupported(() => {\n if (toValue(multiple))\n return document && \"elementsFromPoint\" in document;\n return document && \"elementFromPoint\" in document;\n });\n const element = ref(null);\n const cb = () => {\n var _a, _b;\n element.value = toValue(multiple) ? (_a = document == null ? undefined : document.elementsFromPoint(toValue(x), toValue(y))) != null ? _a : [] : (_b = document == null ? undefined : document.elementFromPoint(toValue(x), toValue(y))) != null ? _b : null;\n };\n const controls = interval === \"requestAnimationFrame\" ? useRafFn(cb, { immediate }) : useIntervalFn(cb, interval, { immediate });\n return {\n isSupported,\n element,\n ...controls\n };\n}\n\nfunction useElementHover(el, options = {}) {\n const {\n delayEnter = 0,\n delayLeave = 0,\n triggerOnRemoval = false,\n window = defaultWindow\n } = options;\n const isHovered = ref(false);\n let timer;\n const toggle = (entering) => {\n const delay = entering ? delayEnter : delayLeave;\n if (timer) {\n clearTimeout(timer);\n timer = undefined;\n }\n if (delay)\n timer = setTimeout(() => isHovered.value = entering, delay);\n else\n isHovered.value = entering;\n };\n if (!window)\n return isHovered;\n useEventListener(el, \"mouseenter\", () => toggle(true), { passive: true });\n useEventListener(el, \"mouseleave\", () => toggle(false), { passive: true });\n if (triggerOnRemoval) {\n onElementRemoval(\n computed(() => unrefElement(el)),\n () => toggle(false)\n );\n }\n return isHovered;\n}\n\nfunction useElementSize(target, initialSize = { width: 0, height: 0 }, options = {}) {\n const { window = defaultWindow, box = \"content-box\" } = options;\n const isSVG = computed(() => {\n var _a, _b;\n return (_b = (_a = unrefElement(target)) == null ? undefined : _a.namespaceURI) == null ? undefined : _b.includes(\"svg\");\n });\n const width = ref(initialSize.width);\n const height = ref(initialSize.height);\n const { stop: stop1 } = useResizeObserver(\n target,\n ([entry]) => {\n const boxSize = box === \"border-box\" ? entry.borderBoxSize : box === \"content-box\" ? entry.contentBoxSize : entry.devicePixelContentBoxSize;\n if (window && isSVG.value) {\n const $elem = unrefElement(target);\n if ($elem) {\n const rect = $elem.getBoundingClientRect();\n width.value = rect.width;\n height.value = rect.height;\n }\n } else {\n if (boxSize) {\n const formatBoxSize = toArray(boxSize);\n width.value = formatBoxSize.reduce((acc, { inlineSize }) => acc + inlineSize, 0);\n height.value = formatBoxSize.reduce((acc, { blockSize }) => acc + blockSize, 0);\n } else {\n width.value = entry.contentRect.width;\n height.value = entry.contentRect.height;\n }\n }\n },\n options\n );\n tryOnMounted(() => {\n const ele = unrefElement(target);\n if (ele) {\n width.value = \"offsetWidth\" in ele ? ele.offsetWidth : initialSize.width;\n height.value = \"offsetHeight\" in ele ? ele.offsetHeight : initialSize.height;\n }\n });\n const stop2 = watch(\n () => unrefElement(target),\n (ele) => {\n width.value = ele ? initialSize.width : 0;\n height.value = ele ? initialSize.height : 0;\n }\n );\n function stop() {\n stop1();\n stop2();\n }\n return {\n width,\n height,\n stop\n };\n}\n\nfunction useIntersectionObserver(target, callback, options = {}) {\n const {\n root,\n rootMargin = \"0px\",\n threshold = 0,\n window = defaultWindow,\n immediate = true\n } = options;\n const isSupported = useSupported(() => window && \"IntersectionObserver\" in window);\n const targets = computed(() => {\n const _target = toValue(target);\n return toArray(_target).map(unrefElement).filter(notNullish);\n });\n let cleanup = noop;\n const isActive = ref(immediate);\n const stopWatch = isSupported.value ? watch(\n () => [targets.value, unrefElement(root), isActive.value],\n ([targets2, root2]) => {\n cleanup();\n if (!isActive.value)\n return;\n if (!targets2.length)\n return;\n const observer = new IntersectionObserver(\n callback,\n {\n root: unrefElement(root2),\n rootMargin,\n threshold\n }\n );\n targets2.forEach((el) => el && observer.observe(el));\n cleanup = () => {\n observer.disconnect();\n cleanup = noop;\n };\n },\n { immediate, flush: \"post\" }\n ) : noop;\n const stop = () => {\n cleanup();\n stopWatch();\n isActive.value = false;\n };\n tryOnScopeDispose(stop);\n return {\n isSupported,\n isActive,\n pause() {\n cleanup();\n isActive.value = false;\n },\n resume() {\n isActive.value = true;\n },\n stop\n };\n}\n\nfunction useElementVisibility(element, options = {}) {\n const {\n window = defaultWindow,\n scrollTarget,\n threshold = 0,\n rootMargin\n } = options;\n const elementIsVisible = ref(false);\n useIntersectionObserver(\n element,\n (intersectionObserverEntries) => {\n let isIntersecting = elementIsVisible.value;\n let latestTime = 0;\n for (const entry of intersectionObserverEntries) {\n if (entry.time >= latestTime) {\n latestTime = entry.time;\n isIntersecting = entry.isIntersecting;\n }\n }\n elementIsVisible.value = isIntersecting;\n },\n {\n root: scrollTarget,\n window,\n threshold,\n rootMargin: toValue(rootMargin)\n }\n );\n return elementIsVisible;\n}\n\nconst events = /* @__PURE__ */ new Map();\n\nfunction useEventBus(key) {\n const scope = getCurrentScope();\n function on(listener) {\n var _a;\n const listeners = events.get(key) || /* @__PURE__ */ new Set();\n listeners.add(listener);\n events.set(key, listeners);\n const _off = () => off(listener);\n (_a = scope == null ? undefined : scope.cleanups) == null ? undefined : _a.push(_off);\n return _off;\n }\n function once(listener) {\n function _listener(...args) {\n off(_listener);\n listener(...args);\n }\n return on(_listener);\n }\n function off(listener) {\n const listeners = events.get(key);\n if (!listeners)\n return;\n listeners.delete(listener);\n if (!listeners.size)\n reset();\n }\n function reset() {\n events.delete(key);\n }\n function emit(event, payload) {\n var _a;\n (_a = events.get(key)) == null ? undefined : _a.forEach((v) => v(event, payload));\n }\n return { on, once, off, emit, reset };\n}\n\nfunction resolveNestedOptions$1(options) {\n if (options === true)\n return {};\n return options;\n}\nfunction useEventSource(url, events = [], options = {}) {\n const event = ref(null);\n const data = ref(null);\n const status = ref(\"CONNECTING\");\n const eventSource = ref(null);\n const error = shallowRef(null);\n const urlRef = toRef(url);\n const lastEventId = shallowRef(null);\n let explicitlyClosed = false;\n let retried = 0;\n const {\n withCredentials = false,\n immediate = true,\n autoConnect = true,\n autoReconnect\n } = options;\n const close = () => {\n if (isClient && eventSource.value) {\n eventSource.value.close();\n eventSource.value = null;\n status.value = \"CLOSED\";\n explicitlyClosed = true;\n }\n };\n const _init = () => {\n if (explicitlyClosed || typeof urlRef.value === \"undefined\")\n return;\n const es = new EventSource(urlRef.value, { withCredentials });\n status.value = \"CONNECTING\";\n eventSource.value = es;\n es.onopen = () => {\n status.value = \"OPEN\";\n error.value = null;\n };\n es.onerror = (e) => {\n status.value = \"CLOSED\";\n error.value = e;\n if (es.readyState === 2 && !explicitlyClosed && autoReconnect) {\n es.close();\n const {\n retries = -1,\n delay = 1e3,\n onFailed\n } = resolveNestedOptions$1(autoReconnect);\n retried += 1;\n if (typeof retries === \"number\" && (retries < 0 || retried < retries))\n setTimeout(_init, delay);\n else if (typeof retries === \"function\" && retries())\n setTimeout(_init, delay);\n else\n onFailed == null ? undefined : onFailed();\n }\n };\n es.onmessage = (e) => {\n event.value = null;\n data.value = e.data;\n lastEventId.value = e.lastEventId;\n };\n for (const event_name of events) {\n useEventListener(es, event_name, (e) => {\n event.value = event_name;\n data.value = e.data || null;\n });\n }\n };\n const open = () => {\n if (!isClient)\n return;\n close();\n explicitlyClosed = false;\n retried = 0;\n _init();\n };\n if (immediate)\n open();\n if (autoConnect)\n watch(urlRef, open);\n tryOnScopeDispose(close);\n return {\n eventSource,\n event,\n data,\n status,\n error,\n open,\n close,\n lastEventId\n };\n}\n\nfunction useEyeDropper(options = {}) {\n const { initialValue = \"\" } = options;\n const isSupported = useSupported(() => typeof window !== \"undefined\" && \"EyeDropper\" in window);\n const sRGBHex = ref(initialValue);\n async function open(openOptions) {\n if (!isSupported.value)\n return;\n const eyeDropper = new window.EyeDropper();\n const result = await eyeDropper.open(openOptions);\n sRGBHex.value = result.sRGBHex;\n return result;\n }\n return { isSupported, sRGBHex, open };\n}\n\nfunction useFavicon(newIcon = null, options = {}) {\n const {\n baseUrl = \"\",\n rel = \"icon\",\n document = defaultDocument\n } = options;\n const favicon = toRef(newIcon);\n const applyIcon = (icon) => {\n const elements = document == null ? undefined : document.head.querySelectorAll(`link[rel*=\"${rel}\"]`);\n if (!elements || elements.length === 0) {\n const link = document == null ? undefined : document.createElement(\"link\");\n if (link) {\n link.rel = rel;\n link.href = `${baseUrl}${icon}`;\n link.type = `image/${icon.split(\".\").pop()}`;\n document == null ? undefined : document.head.append(link);\n }\n return;\n }\n elements == null ? undefined : elements.forEach((el) => el.href = `${baseUrl}${icon}`);\n };\n watch(\n favicon,\n (i, o) => {\n if (typeof i === \"string\" && i !== o)\n applyIcon(i);\n },\n { immediate: true }\n );\n return favicon;\n}\n\nconst payloadMapping = {\n json: \"application/json\",\n text: \"text/plain\"\n};\nfunction isFetchOptions(obj) {\n return obj && containsProp(obj, \"immediate\", \"refetch\", \"initialData\", \"timeout\", \"beforeFetch\", \"afterFetch\", \"onFetchError\", \"fetch\", \"updateDataOnError\");\n}\nconst reAbsolute = /^(?:[a-z][a-z\\d+\\-.]*:)?\\/\\//i;\nfunction isAbsoluteURL(url) {\n return reAbsolute.test(url);\n}\nfunction headersToObject(headers) {\n if (typeof Headers !== \"undefined\" && headers instanceof Headers)\n return Object.fromEntries(headers.entries());\n return headers;\n}\nfunction combineCallbacks(combination, ...callbacks) {\n if (combination === \"overwrite\") {\n return async (ctx) => {\n const callback = callbacks[callbacks.length - 1];\n if (callback)\n return { ...ctx, ...await callback(ctx) };\n return ctx;\n };\n } else {\n return async (ctx) => {\n for (const callback of callbacks) {\n if (callback)\n ctx = { ...ctx, ...await callback(ctx) };\n }\n return ctx;\n };\n }\n}\nfunction createFetch(config = {}) {\n const _combination = config.combination || \"chain\";\n const _options = config.options || {};\n const _fetchOptions = config.fetchOptions || {};\n function useFactoryFetch(url, ...args) {\n const computedUrl = computed(() => {\n const baseUrl = toValue(config.baseUrl);\n const targetUrl = toValue(url);\n return baseUrl && !isAbsoluteURL(targetUrl) ? joinPaths(baseUrl, targetUrl) : targetUrl;\n });\n let options = _options;\n let fetchOptions = _fetchOptions;\n if (args.length > 0) {\n if (isFetchOptions(args[0])) {\n options = {\n ...options,\n ...args[0],\n beforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[0].beforeFetch),\n afterFetch: combineCallbacks(_combination, _options.afterFetch, args[0].afterFetch),\n onFetchError: combineCallbacks(_combination, _options.onFetchError, args[0].onFetchError)\n };\n } else {\n fetchOptions = {\n ...fetchOptions,\n ...args[0],\n headers: {\n ...headersToObject(fetchOptions.headers) || {},\n ...headersToObject(args[0].headers) || {}\n }\n };\n }\n }\n if (args.length > 1 && isFetchOptions(args[1])) {\n options = {\n ...options,\n ...args[1],\n beforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[1].beforeFetch),\n afterFetch: combineCallbacks(_combination, _options.afterFetch, args[1].afterFetch),\n onFetchError: combineCallbacks(_combination, _options.onFetchError, args[1].onFetchError)\n };\n }\n return useFetch(computedUrl, fetchOptions, options);\n }\n return useFactoryFetch;\n}\nfunction useFetch(url, ...args) {\n var _a;\n const supportsAbort = typeof AbortController === \"function\";\n let fetchOptions = {};\n let options = {\n immediate: true,\n refetch: false,\n timeout: 0,\n updateDataOnError: false\n };\n const config = {\n method: \"GET\",\n type: \"text\",\n payload: undefined\n };\n if (args.length > 0) {\n if (isFetchOptions(args[0]))\n options = { ...options, ...args[0] };\n else\n fetchOptions = args[0];\n }\n if (args.length > 1) {\n if (isFetchOptions(args[1]))\n options = { ...options, ...args[1] };\n }\n const {\n fetch = (_a = defaultWindow) == null ? undefined : _a.fetch,\n initialData,\n timeout\n } = options;\n const responseEvent = createEventHook();\n const errorEvent = createEventHook();\n const finallyEvent = createEventHook();\n const isFinished = ref(false);\n const isFetching = ref(false);\n const aborted = ref(false);\n const statusCode = ref(null);\n const response = shallowRef(null);\n const error = shallowRef(null);\n const data = shallowRef(initialData || null);\n const canAbort = computed(() => supportsAbort && isFetching.value);\n let controller;\n let timer;\n const abort = () => {\n if (supportsAbort) {\n controller == null ? undefined : controller.abort();\n controller = new AbortController();\n controller.signal.onabort = () => aborted.value = true;\n fetchOptions = {\n ...fetchOptions,\n signal: controller.signal\n };\n }\n };\n const loading = (isLoading) => {\n isFetching.value = isLoading;\n isFinished.value = !isLoading;\n };\n if (timeout)\n timer = useTimeoutFn(abort, timeout, { immediate: false });\n let executeCounter = 0;\n const execute = async (throwOnFailed = false) => {\n var _a2, _b;\n abort();\n loading(true);\n error.value = null;\n statusCode.value = null;\n aborted.value = false;\n executeCounter += 1;\n const currentExecuteCounter = executeCounter;\n const defaultFetchOptions = {\n method: config.method,\n headers: {}\n };\n const payload = toValue(config.payload);\n if (payload) {\n const headers = headersToObject(defaultFetchOptions.headers);\n const proto = Object.getPrototypeOf(payload);\n if (!config.payloadType && payload && (proto === Object.prototype || Array.isArray(proto)) && !(payload instanceof FormData))\n config.payloadType = \"json\";\n if (config.payloadType)\n headers[\"Content-Type\"] = (_a2 = payloadMapping[config.payloadType]) != null ? _a2 : config.payloadType;\n defaultFetchOptions.body = config.payloadType === \"json\" ? JSON.stringify(payload) : payload;\n }\n let isCanceled = false;\n const context = {\n url: toValue(url),\n options: {\n ...defaultFetchOptions,\n ...fetchOptions\n },\n cancel: () => {\n isCanceled = true;\n }\n };\n if (options.beforeFetch)\n Object.assign(context, await options.beforeFetch(context));\n if (isCanceled || !fetch) {\n loading(false);\n return Promise.resolve(null);\n }\n let responseData = null;\n if (timer)\n timer.start();\n return fetch(\n context.url,\n {\n ...defaultFetchOptions,\n ...context.options,\n headers: {\n ...headersToObject(defaultFetchOptions.headers),\n ...headersToObject((_b = context.options) == null ? undefined : _b.headers)\n }\n }\n ).then(async (fetchResponse) => {\n response.value = fetchResponse;\n statusCode.value = fetchResponse.status;\n responseData = await fetchResponse.clone()[config.type]();\n if (!fetchResponse.ok) {\n data.value = initialData || null;\n throw new Error(fetchResponse.statusText);\n }\n if (options.afterFetch) {\n ({ data: responseData } = await options.afterFetch({\n data: responseData,\n response: fetchResponse\n }));\n }\n data.value = responseData;\n responseEvent.trigger(fetchResponse);\n return fetchResponse;\n }).catch(async (fetchError) => {\n let errorData = fetchError.message || fetchError.name;\n if (options.onFetchError) {\n ({ error: errorData, data: responseData } = await options.onFetchError({\n data: responseData,\n error: fetchError,\n response: response.value\n }));\n }\n error.value = errorData;\n if (options.updateDataOnError)\n data.value = responseData;\n errorEvent.trigger(fetchError);\n if (throwOnFailed)\n throw fetchError;\n return null;\n }).finally(() => {\n if (currentExecuteCounter === executeCounter)\n loading(false);\n if (timer)\n timer.stop();\n finallyEvent.trigger(null);\n });\n };\n const refetch = toRef(options.refetch);\n watch(\n [\n refetch,\n toRef(url)\n ],\n ([refetch2]) => refetch2 && execute(),\n { deep: true }\n );\n const shell = {\n isFinished: readonly(isFinished),\n isFetching: readonly(isFetching),\n statusCode,\n response,\n error,\n data,\n canAbort,\n aborted,\n abort,\n execute,\n onFetchResponse: responseEvent.on,\n onFetchError: errorEvent.on,\n onFetchFinally: finallyEvent.on,\n // method\n get: setMethod(\"GET\"),\n put: setMethod(\"PUT\"),\n post: setMethod(\"POST\"),\n delete: setMethod(\"DELETE\"),\n patch: setMethod(\"PATCH\"),\n head: setMethod(\"HEAD\"),\n options: setMethod(\"OPTIONS\"),\n // type\n json: setType(\"json\"),\n text: setType(\"text\"),\n blob: setType(\"blob\"),\n arrayBuffer: setType(\"arrayBuffer\"),\n formData: setType(\"formData\")\n };\n function setMethod(method) {\n return (payload, payloadType) => {\n if (!isFetching.value) {\n config.method = method;\n config.payload = payload;\n config.payloadType = payloadType;\n if (isRef(config.payload)) {\n watch(\n [\n refetch,\n toRef(config.payload)\n ],\n ([refetch2]) => refetch2 && execute(),\n { deep: true }\n );\n }\n return {\n ...shell,\n then(onFulfilled, onRejected) {\n return waitUntilFinished().then(onFulfilled, onRejected);\n }\n };\n }\n return undefined;\n };\n }\n function waitUntilFinished() {\n return new Promise((resolve, reject) => {\n until(isFinished).toBe(true).then(() => resolve(shell)).catch(reject);\n });\n }\n function setType(type) {\n return () => {\n if (!isFetching.value) {\n config.type = type;\n return {\n ...shell,\n then(onFulfilled, onRejected) {\n return waitUntilFinished().then(onFulfilled, onRejected);\n }\n };\n }\n return undefined;\n };\n }\n if (options.immediate)\n Promise.resolve().then(() => execute());\n return {\n ...shell,\n then(onFulfilled, onRejected) {\n return waitUntilFinished().then(onFulfilled, onRejected);\n }\n };\n}\nfunction joinPaths(start, end) {\n if (!start.endsWith(\"/\") && !end.startsWith(\"/\")) {\n return `${start}/${end}`;\n }\n if (start.endsWith(\"/\") && end.startsWith(\"/\")) {\n return `${start.slice(0, -1)}${end}`;\n }\n return `${start}${end}`;\n}\n\nconst DEFAULT_OPTIONS = {\n multiple: true,\n accept: \"*\",\n reset: false,\n directory: false\n};\nfunction useFileDialog(options = {}) {\n const {\n document = defaultDocument\n } = options;\n const files = ref(null);\n const { on: onChange, trigger: changeTrigger } = createEventHook();\n const { on: onCancel, trigger: cancelTrigger } = createEventHook();\n let input;\n if (document) {\n input = document.createElement(\"input\");\n input.type = \"file\";\n input.onchange = (event) => {\n const result = event.target;\n files.value = result.files;\n changeTrigger(files.value);\n };\n input.oncancel = () => {\n cancelTrigger();\n };\n }\n const reset = () => {\n files.value = null;\n if (input && input.value) {\n input.value = \"\";\n changeTrigger(null);\n }\n };\n const open = (localOptions) => {\n if (!input)\n return;\n const _options = {\n ...DEFAULT_OPTIONS,\n ...options,\n ...localOptions\n };\n input.multiple = _options.multiple;\n input.accept = _options.accept;\n input.webkitdirectory = _options.directory;\n if (hasOwn(_options, \"capture\"))\n input.capture = _options.capture;\n if (_options.reset)\n reset();\n input.click();\n };\n return {\n files: readonly(files),\n open,\n reset,\n onCancel,\n onChange\n };\n}\n\nfunction useFileSystemAccess(options = {}) {\n const {\n window: _window = defaultWindow,\n dataType = \"Text\"\n } = options;\n const window = _window;\n const isSupported = useSupported(() => window && \"showSaveFilePicker\" in window && \"showOpenFilePicker\" in window);\n const fileHandle = ref();\n const data = ref();\n const file = ref();\n const fileName = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? undefined : _a.name) != null ? _b : \"\";\n });\n const fileMIME = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? undefined : _a.type) != null ? _b : \"\";\n });\n const fileSize = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? undefined : _a.size) != null ? _b : 0;\n });\n const fileLastModified = computed(() => {\n var _a, _b;\n return (_b = (_a = file.value) == null ? undefined : _a.lastModified) != null ? _b : 0;\n });\n async function open(_options = {}) {\n if (!isSupported.value)\n return;\n const [handle] = await window.showOpenFilePicker({ ...toValue(options), ..._options });\n fileHandle.value = handle;\n await updateData();\n }\n async function create(_options = {}) {\n if (!isSupported.value)\n return;\n fileHandle.value = await window.showSaveFilePicker({ ...options, ..._options });\n data.value = undefined;\n await updateData();\n }\n async function save(_options = {}) {\n if (!isSupported.value)\n return;\n if (!fileHandle.value)\n return saveAs(_options);\n if (data.value) {\n const writableStream = await fileHandle.value.createWritable();\n await writableStream.write(data.value);\n await writableStream.close();\n }\n await updateFile();\n }\n async function saveAs(_options = {}) {\n if (!isSupported.value)\n return;\n fileHandle.value = await window.showSaveFilePicker({ ...options, ..._options });\n if (data.value) {\n const writableStream = await fileHandle.value.createWritable();\n await writableStream.write(data.value);\n await writableStream.close();\n }\n await updateFile();\n }\n async function updateFile() {\n var _a;\n file.value = await ((_a = fileHandle.value) == null ? undefined : _a.getFile());\n }\n async function updateData() {\n var _a, _b;\n await updateFile();\n const type = toValue(dataType);\n if (type === \"Text\")\n data.value = await ((_a = file.value) == null ? undefined : _a.text());\n else if (type === \"ArrayBuffer\")\n data.value = await ((_b = file.value) == null ? undefined : _b.arrayBuffer());\n else if (type === \"Blob\")\n data.value = file.value;\n }\n watch(() => toValue(dataType), updateData);\n return {\n isSupported,\n data,\n file,\n fileName,\n fileMIME,\n fileSize,\n fileLastModified,\n open,\n create,\n save,\n saveAs,\n updateData\n };\n}\n\nfunction useFocus(target, options = {}) {\n const { initialValue = false, focusVisible = false, preventScroll = false } = options;\n const innerFocused = ref(false);\n const targetElement = computed(() => unrefElement(target));\n const listenerOptions = { passive: true };\n useEventListener(targetElement, \"focus\", (event) => {\n var _a, _b;\n if (!focusVisible || ((_b = (_a = event.target).matches) == null ? undefined : _b.call(_a, \":focus-visible\")))\n innerFocused.value = true;\n }, listenerOptions);\n useEventListener(targetElement, \"blur\", () => innerFocused.value = false, listenerOptions);\n const focused = computed({\n get: () => innerFocused.value,\n set(value) {\n var _a, _b;\n if (!value && innerFocused.value)\n (_a = targetElement.value) == null ? undefined : _a.blur();\n else if (value && !innerFocused.value)\n (_b = targetElement.value) == null ? undefined : _b.focus({ preventScroll });\n }\n });\n watch(\n targetElement,\n () => {\n focused.value = initialValue;\n },\n { immediate: true, flush: \"post\" }\n );\n return { focused };\n}\n\nconst EVENT_FOCUS_IN = \"focusin\";\nconst EVENT_FOCUS_OUT = \"focusout\";\nconst PSEUDO_CLASS_FOCUS_WITHIN = \":focus-within\";\nfunction useFocusWithin(target, options = {}) {\n const { window = defaultWindow } = options;\n const targetElement = computed(() => unrefElement(target));\n const _focused = ref(false);\n const focused = computed(() => _focused.value);\n const activeElement = useActiveElement(options);\n if (!window || !activeElement.value) {\n return { focused };\n }\n const listenerOptions = { passive: true };\n useEventListener(targetElement, EVENT_FOCUS_IN, () => _focused.value = true, listenerOptions);\n useEventListener(targetElement, EVENT_FOCUS_OUT, () => {\n var _a, _b, _c;\n return _focused.value = (_c = (_b = (_a = targetElement.value) == null ? undefined : _a.matches) == null ? undefined : _b.call(_a, PSEUDO_CLASS_FOCUS_WITHIN)) != null ? _c : false;\n }, listenerOptions);\n return { focused };\n}\n\nfunction useFps(options) {\n var _a;\n const fps = ref(0);\n if (typeof performance === \"undefined\")\n return fps;\n const every = (_a = options == null ? undefined : options.every) != null ? _a : 10;\n let last = performance.now();\n let ticks = 0;\n useRafFn(() => {\n ticks += 1;\n if (ticks >= every) {\n const now = performance.now();\n const diff = now - last;\n fps.value = Math.round(1e3 / (diff / ticks));\n last = now;\n ticks = 0;\n }\n });\n return fps;\n}\n\nconst eventHandlers = [\n \"fullscreenchange\",\n \"webkitfullscreenchange\",\n \"webkitendfullscreen\",\n \"mozfullscreenchange\",\n \"MSFullscreenChange\"\n];\nfunction useFullscreen(target, options = {}) {\n const {\n document = defaultDocument,\n autoExit = false\n } = options;\n const targetRef = computed(() => {\n var _a;\n return (_a = unrefElement(target)) != null ? _a : document == null ? undefined : document.querySelector(\"html\");\n });\n const isFullscreen = ref(false);\n const requestMethod = computed(() => {\n return [\n \"requestFullscreen\",\n \"webkitRequestFullscreen\",\n \"webkitEnterFullscreen\",\n \"webkitEnterFullScreen\",\n \"webkitRequestFullScreen\",\n \"mozRequestFullScreen\",\n \"msRequestFullscreen\"\n ].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n });\n const exitMethod = computed(() => {\n return [\n \"exitFullscreen\",\n \"webkitExitFullscreen\",\n \"webkitExitFullScreen\",\n \"webkitCancelFullScreen\",\n \"mozCancelFullScreen\",\n \"msExitFullscreen\"\n ].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n });\n const fullscreenEnabled = computed(() => {\n return [\n \"fullScreen\",\n \"webkitIsFullScreen\",\n \"webkitDisplayingFullscreen\",\n \"mozFullScreen\",\n \"msFullscreenElement\"\n ].find((m) => document && m in document || targetRef.value && m in targetRef.value);\n });\n const fullscreenElementMethod = [\n \"fullscreenElement\",\n \"webkitFullscreenElement\",\n \"mozFullScreenElement\",\n \"msFullscreenElement\"\n ].find((m) => document && m in document);\n const isSupported = useSupported(() => targetRef.value && document && requestMethod.value !== undefined && exitMethod.value !== undefined && fullscreenEnabled.value !== undefined);\n const isCurrentElementFullScreen = () => {\n if (fullscreenElementMethod)\n return (document == null ? undefined : document[fullscreenElementMethod]) === targetRef.value;\n return false;\n };\n const isElementFullScreen = () => {\n if (fullscreenEnabled.value) {\n if (document && document[fullscreenEnabled.value] != null) {\n return document[fullscreenEnabled.value];\n } else {\n const target2 = targetRef.value;\n if ((target2 == null ? undefined : target2[fullscreenEnabled.value]) != null) {\n return Boolean(target2[fullscreenEnabled.value]);\n }\n }\n }\n return false;\n };\n async function exit() {\n if (!isSupported.value || !isFullscreen.value)\n return;\n if (exitMethod.value) {\n if ((document == null ? undefined : document[exitMethod.value]) != null) {\n await document[exitMethod.value]();\n } else {\n const target2 = targetRef.value;\n if ((target2 == null ? undefined : target2[exitMethod.value]) != null)\n await target2[exitMethod.value]();\n }\n }\n isFullscreen.value = false;\n }\n async function enter() {\n if (!isSupported.value || isFullscreen.value)\n return;\n if (isElementFullScreen())\n await exit();\n const target2 = targetRef.value;\n if (requestMethod.value && (target2 == null ? undefined : target2[requestMethod.value]) != null) {\n await target2[requestMethod.value]();\n isFullscreen.value = true;\n }\n }\n async function toggle() {\n await (isFullscreen.value ? exit() : enter());\n }\n const handlerCallback = () => {\n const isElementFullScreenValue = isElementFullScreen();\n if (!isElementFullScreenValue || isElementFullScreenValue && isCurrentElementFullScreen())\n isFullscreen.value = isElementFullScreenValue;\n };\n const listenerOptions = { capture: false, passive: true };\n useEventListener(document, eventHandlers, handlerCallback, listenerOptions);\n useEventListener(() => unrefElement(targetRef), eventHandlers, handlerCallback, listenerOptions);\n if (autoExit)\n tryOnScopeDispose(exit);\n return {\n isSupported,\n isFullscreen,\n enter,\n exit,\n toggle\n };\n}\n\nfunction mapGamepadToXbox360Controller(gamepad) {\n return computed(() => {\n if (gamepad.value) {\n return {\n buttons: {\n a: gamepad.value.buttons[0],\n b: gamepad.value.buttons[1],\n x: gamepad.value.buttons[2],\n y: gamepad.value.buttons[3]\n },\n bumper: {\n left: gamepad.value.buttons[4],\n right: gamepad.value.buttons[5]\n },\n triggers: {\n left: gamepad.value.buttons[6],\n right: gamepad.value.buttons[7]\n },\n stick: {\n left: {\n horizontal: gamepad.value.axes[0],\n vertical: gamepad.value.axes[1],\n button: gamepad.value.buttons[10]\n },\n right: {\n horizontal: gamepad.value.axes[2],\n vertical: gamepad.value.axes[3],\n button: gamepad.value.buttons[11]\n }\n },\n dpad: {\n up: gamepad.value.buttons[12],\n down: gamepad.value.buttons[13],\n left: gamepad.value.buttons[14],\n right: gamepad.value.buttons[15]\n },\n back: gamepad.value.buttons[8],\n start: gamepad.value.buttons[9]\n };\n }\n return null;\n });\n}\nfunction useGamepad(options = {}) {\n const {\n navigator = defaultNavigator\n } = options;\n const isSupported = useSupported(() => navigator && \"getGamepads\" in navigator);\n const gamepads = ref([]);\n const onConnectedHook = createEventHook();\n const onDisconnectedHook = createEventHook();\n const stateFromGamepad = (gamepad) => {\n const hapticActuators = [];\n const vibrationActuator = \"vibrationActuator\" in gamepad ? gamepad.vibrationActuator : null;\n if (vibrationActuator)\n hapticActuators.push(vibrationActuator);\n if (gamepad.hapticActuators)\n hapticActuators.push(...gamepad.hapticActuators);\n return {\n id: gamepad.id,\n index: gamepad.index,\n connected: gamepad.connected,\n mapping: gamepad.mapping,\n timestamp: gamepad.timestamp,\n vibrationActuator: gamepad.vibrationActuator,\n hapticActuators,\n axes: gamepad.axes.map((axes) => axes),\n buttons: gamepad.buttons.map((button) => ({ pressed: button.pressed, touched: button.touched, value: button.value }))\n };\n };\n const updateGamepadState = () => {\n const _gamepads = (navigator == null ? undefined : navigator.getGamepads()) || [];\n for (const gamepad of _gamepads) {\n if (gamepad && gamepads.value[gamepad.index])\n gamepads.value[gamepad.index] = stateFromGamepad(gamepad);\n }\n };\n const { isActive, pause, resume } = useRafFn(updateGamepadState);\n const onGamepadConnected = (gamepad) => {\n if (!gamepads.value.some(({ index }) => index === gamepad.index)) {\n gamepads.value.push(stateFromGamepad(gamepad));\n onConnectedHook.trigger(gamepad.index);\n }\n resume();\n };\n const onGamepadDisconnected = (gamepad) => {\n gamepads.value = gamepads.value.filter((x) => x.index !== gamepad.index);\n onDisconnectedHook.trigger(gamepad.index);\n };\n const listenerOptions = { passive: true };\n useEventListener(\"gamepadconnected\", (e) => onGamepadConnected(e.gamepad), listenerOptions);\n useEventListener(\"gamepaddisconnected\", (e) => onGamepadDisconnected(e.gamepad), listenerOptions);\n tryOnMounted(() => {\n const _gamepads = (navigator == null ? undefined : navigator.getGamepads()) || [];\n for (const gamepad of _gamepads) {\n if (gamepad && gamepads.value[gamepad.index])\n onGamepadConnected(gamepad);\n }\n });\n pause();\n return {\n isSupported,\n onConnected: onConnectedHook.on,\n onDisconnected: onDisconnectedHook.on,\n gamepads,\n pause,\n resume,\n isActive\n };\n}\n\nfunction useGeolocation(options = {}) {\n const {\n enableHighAccuracy = true,\n maximumAge = 3e4,\n timeout = 27e3,\n navigator = defaultNavigator,\n immediate = true\n } = options;\n const isSupported = useSupported(() => navigator && \"geolocation\" in navigator);\n const locatedAt = ref(null);\n const error = shallowRef(null);\n const coords = ref({\n accuracy: 0,\n latitude: Number.POSITIVE_INFINITY,\n longitude: Number.POSITIVE_INFINITY,\n altitude: null,\n altitudeAccuracy: null,\n heading: null,\n speed: null\n });\n function updatePosition(position) {\n locatedAt.value = position.timestamp;\n coords.value = position.coords;\n error.value = null;\n }\n let watcher;\n function resume() {\n if (isSupported.value) {\n watcher = navigator.geolocation.watchPosition(\n updatePosition,\n (err) => error.value = err,\n {\n enableHighAccuracy,\n maximumAge,\n timeout\n }\n );\n }\n }\n if (immediate)\n resume();\n function pause() {\n if (watcher && navigator)\n navigator.geolocation.clearWatch(watcher);\n }\n tryOnScopeDispose(() => {\n pause();\n });\n return {\n isSupported,\n coords,\n locatedAt,\n error,\n resume,\n pause\n };\n}\n\nconst defaultEvents$1 = [\"mousemove\", \"mousedown\", \"resize\", \"keydown\", \"touchstart\", \"wheel\"];\nconst oneMinute = 6e4;\nfunction useIdle(timeout = oneMinute, options = {}) {\n const {\n initialState = false,\n listenForVisibilityChange = true,\n events = defaultEvents$1,\n window = defaultWindow,\n eventFilter = throttleFilter(50)\n } = options;\n const idle = ref(initialState);\n const lastActive = ref(timestamp());\n let timer;\n const reset = () => {\n idle.value = false;\n clearTimeout(timer);\n timer = setTimeout(() => idle.value = true, timeout);\n };\n const onEvent = createFilterWrapper(\n eventFilter,\n () => {\n lastActive.value = timestamp();\n reset();\n }\n );\n if (window) {\n const document = window.document;\n const listenerOptions = { passive: true };\n for (const event of events)\n useEventListener(window, event, onEvent, listenerOptions);\n if (listenForVisibilityChange) {\n useEventListener(document, \"visibilitychange\", () => {\n if (!document.hidden)\n onEvent();\n }, listenerOptions);\n }\n reset();\n }\n return {\n idle,\n lastActive,\n reset\n };\n}\n\nasync function loadImage(options) {\n return new Promise((resolve, reject) => {\n const img = new Image();\n const { src, srcset, sizes, class: clazz, loading, crossorigin, referrerPolicy, width, height, decoding, fetchPriority, ismap, usemap } = options;\n img.src = src;\n if (srcset != null)\n img.srcset = srcset;\n if (sizes != null)\n img.sizes = sizes;\n if (clazz != null)\n img.className = clazz;\n if (loading != null)\n img.loading = loading;\n if (crossorigin != null)\n img.crossOrigin = crossorigin;\n if (referrerPolicy != null)\n img.referrerPolicy = referrerPolicy;\n if (width != null)\n img.width = width;\n if (height != null)\n img.height = height;\n if (decoding != null)\n img.decoding = decoding;\n if (fetchPriority != null)\n img.fetchPriority = fetchPriority;\n if (ismap != null)\n img.isMap = ismap;\n if (usemap != null)\n img.useMap = usemap;\n img.onload = () => resolve(img);\n img.onerror = reject;\n });\n}\nfunction useImage(options, asyncStateOptions = {}) {\n const state = useAsyncState(\n () => loadImage(toValue(options)),\n undefined,\n {\n resetOnExecute: true,\n ...asyncStateOptions\n }\n );\n watch(\n () => toValue(options),\n () => state.execute(asyncStateOptions.delay),\n { deep: true }\n );\n return state;\n}\n\nfunction resolveElement(el) {\n if (typeof Window !== \"undefined\" && el instanceof Window)\n return el.document.documentElement;\n if (typeof Document !== \"undefined\" && el instanceof Document)\n return el.documentElement;\n return el;\n}\n\nconst ARRIVED_STATE_THRESHOLD_PIXELS = 1;\nfunction useScroll(element, options = {}) {\n const {\n throttle = 0,\n idle = 200,\n onStop = noop,\n onScroll = noop,\n offset = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n },\n eventListenerOptions = {\n capture: false,\n passive: true\n },\n behavior = \"auto\",\n window = defaultWindow,\n onError = (e) => {\n console.error(e);\n }\n } = options;\n const internalX = ref(0);\n const internalY = ref(0);\n const x = computed({\n get() {\n return internalX.value;\n },\n set(x2) {\n scrollTo(x2, undefined);\n }\n });\n const y = computed({\n get() {\n return internalY.value;\n },\n set(y2) {\n scrollTo(undefined, y2);\n }\n });\n function scrollTo(_x, _y) {\n var _a, _b, _c, _d;\n if (!window)\n return;\n const _element = toValue(element);\n if (!_element)\n return;\n (_c = _element instanceof Document ? window.document.body : _element) == null ? undefined : _c.scrollTo({\n top: (_a = toValue(_y)) != null ? _a : y.value,\n left: (_b = toValue(_x)) != null ? _b : x.value,\n behavior: toValue(behavior)\n });\n const scrollContainer = ((_d = _element == null ? undefined : _element.document) == null ? undefined : _d.documentElement) || (_element == null ? undefined : _element.documentElement) || _element;\n if (x != null)\n internalX.value = scrollContainer.scrollLeft;\n if (y != null)\n internalY.value = scrollContainer.scrollTop;\n }\n const isScrolling = ref(false);\n const arrivedState = reactive({\n left: true,\n right: false,\n top: true,\n bottom: false\n });\n const directions = reactive({\n left: false,\n right: false,\n top: false,\n bottom: false\n });\n const onScrollEnd = (e) => {\n if (!isScrolling.value)\n return;\n isScrolling.value = false;\n directions.left = false;\n directions.right = false;\n directions.top = false;\n directions.bottom = false;\n onStop(e);\n };\n const onScrollEndDebounced = useDebounceFn(onScrollEnd, throttle + idle);\n const setArrivedState = (target) => {\n var _a;\n if (!window)\n return;\n const el = ((_a = target == null ? undefined : target.document) == null ? undefined : _a.documentElement) || (target == null ? undefined : target.documentElement) || unrefElement(target);\n const { display, flexDirection, direction } = getComputedStyle(el);\n const directionMultipler = direction === \"rtl\" ? -1 : 1;\n const scrollLeft = el.scrollLeft;\n directions.left = scrollLeft < internalX.value;\n directions.right = scrollLeft > internalX.value;\n const left = scrollLeft * directionMultipler <= (offset.left || 0);\n const right = scrollLeft * directionMultipler + el.clientWidth >= el.scrollWidth - (offset.right || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n if (display === \"flex\" && flexDirection === \"row-reverse\") {\n arrivedState.left = right;\n arrivedState.right = left;\n } else {\n arrivedState.left = left;\n arrivedState.right = right;\n }\n internalX.value = scrollLeft;\n let scrollTop = el.scrollTop;\n if (target === window.document && !scrollTop)\n scrollTop = window.document.body.scrollTop;\n directions.top = scrollTop < internalY.value;\n directions.bottom = scrollTop > internalY.value;\n const top = scrollTop <= (offset.top || 0);\n const bottom = scrollTop + el.clientHeight >= el.scrollHeight - (offset.bottom || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n if (display === \"flex\" && flexDirection === \"column-reverse\") {\n arrivedState.top = bottom;\n arrivedState.bottom = top;\n } else {\n arrivedState.top = top;\n arrivedState.bottom = bottom;\n }\n internalY.value = scrollTop;\n };\n const onScrollHandler = (e) => {\n var _a;\n if (!window)\n return;\n const eventTarget = (_a = e.target.documentElement) != null ? _a : e.target;\n setArrivedState(eventTarget);\n isScrolling.value = true;\n onScrollEndDebounced(e);\n onScroll(e);\n };\n useEventListener(\n element,\n \"scroll\",\n throttle ? useThrottleFn(onScrollHandler, throttle, true, false) : onScrollHandler,\n eventListenerOptions\n );\n tryOnMounted(() => {\n try {\n const _element = toValue(element);\n if (!_element)\n return;\n setArrivedState(_element);\n } catch (e) {\n onError(e);\n }\n });\n useEventListener(\n element,\n \"scrollend\",\n onScrollEnd,\n eventListenerOptions\n );\n return {\n x,\n y,\n isScrolling,\n arrivedState,\n directions,\n measure() {\n const _element = toValue(element);\n if (window && _element)\n setArrivedState(_element);\n }\n };\n}\n\nfunction useInfiniteScroll(element, onLoadMore, options = {}) {\n var _a;\n const {\n direction = \"bottom\",\n interval = 100,\n canLoadMore = () => true\n } = options;\n const state = reactive(useScroll(\n element,\n {\n ...options,\n offset: {\n [direction]: (_a = options.distance) != null ? _a : 0,\n ...options.offset\n }\n }\n ));\n const promise = ref();\n const isLoading = computed(() => !!promise.value);\n const observedElement = computed(() => {\n return resolveElement(toValue(element));\n });\n const isElementVisible = useElementVisibility(observedElement);\n function checkAndLoad() {\n state.measure();\n if (!observedElement.value || !isElementVisible.value || !canLoadMore(observedElement.value))\n return;\n const { scrollHeight, clientHeight, scrollWidth, clientWidth } = observedElement.value;\n const isNarrower = direction === \"bottom\" || direction === \"top\" ? scrollHeight <= clientHeight : scrollWidth <= clientWidth;\n if (state.arrivedState[direction] || isNarrower) {\n if (!promise.value) {\n promise.value = Promise.all([\n onLoadMore(state),\n new Promise((resolve) => setTimeout(resolve, interval))\n ]).finally(() => {\n promise.value = null;\n nextTick(() => checkAndLoad());\n });\n }\n }\n }\n const stop = watch(\n () => [state.arrivedState[direction], isElementVisible.value],\n checkAndLoad,\n { immediate: true }\n );\n tryOnUnmounted(stop);\n return {\n isLoading,\n reset() {\n nextTick(() => checkAndLoad());\n }\n };\n}\n\nconst defaultEvents = [\"mousedown\", \"mouseup\", \"keydown\", \"keyup\"];\nfunction useKeyModifier(modifier, options = {}) {\n const {\n events = defaultEvents,\n document = defaultDocument,\n initial = null\n } = options;\n const state = ref(initial);\n if (document) {\n events.forEach((listenerEvent) => {\n useEventListener(document, listenerEvent, (evt) => {\n if (typeof evt.getModifierState === \"function\")\n state.value = evt.getModifierState(modifier);\n });\n });\n }\n return state;\n}\n\nfunction useLocalStorage(key, initialValue, options = {}) {\n const { window = defaultWindow } = options;\n return useStorage(key, initialValue, window == null ? undefined : window.localStorage, options);\n}\n\nconst DefaultMagicKeysAliasMap = {\n ctrl: \"control\",\n command: \"meta\",\n cmd: \"meta\",\n option: \"alt\",\n up: \"arrowup\",\n down: \"arrowdown\",\n left: \"arrowleft\",\n right: \"arrowright\"\n};\n\nfunction useMagicKeys(options = {}) {\n const {\n reactive: useReactive = false,\n target = defaultWindow,\n aliasMap = DefaultMagicKeysAliasMap,\n passive = true,\n onEventFired = noop\n } = options;\n const current = reactive(/* @__PURE__ */ new Set());\n const obj = {\n toJSON() {\n return {};\n },\n current\n };\n const refs = useReactive ? reactive(obj) : obj;\n const metaDeps = /* @__PURE__ */ new Set();\n const usedKeys = /* @__PURE__ */ new Set();\n function setRefs(key, value) {\n if (key in refs) {\n if (useReactive)\n refs[key] = value;\n else\n refs[key].value = value;\n }\n }\n function reset() {\n current.clear();\n for (const key of usedKeys)\n setRefs(key, false);\n }\n function updateRefs(e, value) {\n var _a, _b;\n const key = (_a = e.key) == null ? undefined : _a.toLowerCase();\n const code = (_b = e.code) == null ? undefined : _b.toLowerCase();\n const values = [code, key].filter(Boolean);\n if (key) {\n if (value)\n current.add(key);\n else\n current.delete(key);\n }\n for (const key2 of values) {\n usedKeys.add(key2);\n setRefs(key2, value);\n }\n if (key === \"meta\" && !value) {\n metaDeps.forEach((key2) => {\n current.delete(key2);\n setRefs(key2, false);\n });\n metaDeps.clear();\n } else if (typeof e.getModifierState === \"function\" && e.getModifierState(\"Meta\") && value) {\n [...current, ...values].forEach((key2) => metaDeps.add(key2));\n }\n }\n useEventListener(target, \"keydown\", (e) => {\n updateRefs(e, true);\n return onEventFired(e);\n }, { passive });\n useEventListener(target, \"keyup\", (e) => {\n updateRefs(e, false);\n return onEventFired(e);\n }, { passive });\n useEventListener(\"blur\", reset, { passive });\n useEventListener(\"focus\", reset, { passive });\n const proxy = new Proxy(\n refs,\n {\n get(target2, prop, rec) {\n if (typeof prop !== \"string\")\n return Reflect.get(target2, prop, rec);\n prop = prop.toLowerCase();\n if (prop in aliasMap)\n prop = aliasMap[prop];\n if (!(prop in refs)) {\n if (/[+_-]/.test(prop)) {\n const keys = prop.split(/[+_-]/g).map((i) => i.trim());\n refs[prop] = computed(() => keys.every((key) => toValue(proxy[key])));\n } else {\n refs[prop] = ref(false);\n }\n }\n const r = Reflect.get(target2, prop, rec);\n return useReactive ? toValue(r) : r;\n }\n }\n );\n return proxy;\n}\n\nfunction usingElRef(source, cb) {\n if (toValue(source))\n cb(toValue(source));\n}\nfunction timeRangeToArray(timeRanges) {\n let ranges = [];\n for (let i = 0; i < timeRanges.length; ++i)\n ranges = [...ranges, [timeRanges.start(i), timeRanges.end(i)]];\n return ranges;\n}\nfunction tracksToArray(tracks) {\n return Array.from(tracks).map(({ label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }, id) => ({ id, label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }));\n}\nconst defaultOptions = {\n src: \"\",\n tracks: []\n};\nfunction useMediaControls(target, options = {}) {\n target = toRef(target);\n options = {\n ...defaultOptions,\n ...options\n };\n const {\n document = defaultDocument\n } = options;\n const currentTime = ref(0);\n const duration = ref(0);\n const seeking = ref(false);\n const volume = ref(1);\n const waiting = ref(false);\n const ended = ref(false);\n const playing = ref(false);\n const rate = ref(1);\n const stalled = ref(false);\n const buffered = ref([]);\n const tracks = ref([]);\n const selectedTrack = ref(-1);\n const isPictureInPicture = ref(false);\n const muted = ref(false);\n const supportsPictureInPicture = document && \"pictureInPictureEnabled\" in document;\n const sourceErrorEvent = createEventHook();\n const playbackErrorEvent = createEventHook();\n const disableTrack = (track) => {\n usingElRef(target, (el) => {\n if (track) {\n const id = typeof track === \"number\" ? track : track.id;\n el.textTracks[id].mode = \"disabled\";\n } else {\n for (let i = 0; i < el.textTracks.length; ++i)\n el.textTracks[i].mode = \"disabled\";\n }\n selectedTrack.value = -1;\n });\n };\n const enableTrack = (track, disableTracks = true) => {\n usingElRef(target, (el) => {\n const id = typeof track === \"number\" ? track : track.id;\n if (disableTracks)\n disableTrack();\n el.textTracks[id].mode = \"showing\";\n selectedTrack.value = id;\n });\n };\n const togglePictureInPicture = () => {\n return new Promise((resolve, reject) => {\n usingElRef(target, async (el) => {\n if (supportsPictureInPicture) {\n if (!isPictureInPicture.value) {\n el.requestPictureInPicture().then(resolve).catch(reject);\n } else {\n document.exitPictureInPicture().then(resolve).catch(reject);\n }\n }\n });\n });\n };\n watchEffect(() => {\n if (!document)\n return;\n const el = toValue(target);\n if (!el)\n return;\n const src = toValue(options.src);\n let sources = [];\n if (!src)\n return;\n if (typeof src === \"string\")\n sources = [{ src }];\n else if (Array.isArray(src))\n sources = src;\n else if (isObject(src))\n sources = [src];\n el.querySelectorAll(\"source\").forEach((e) => {\n e.removeEventListener(\"error\", sourceErrorEvent.trigger);\n e.remove();\n });\n sources.forEach(({ src: src2, type, media }) => {\n const source = document.createElement(\"source\");\n source.setAttribute(\"src\", src2);\n source.setAttribute(\"type\", type || \"\");\n source.setAttribute(\"media\", media || \"\");\n source.addEventListener(\"error\", sourceErrorEvent.trigger);\n el.appendChild(source);\n });\n el.load();\n });\n tryOnScopeDispose(() => {\n const el = toValue(target);\n if (!el)\n return;\n el.querySelectorAll(\"source\").forEach((e) => e.removeEventListener(\"error\", sourceErrorEvent.trigger));\n });\n watch([target, volume], () => {\n const el = toValue(target);\n if (!el)\n return;\n el.volume = volume.value;\n });\n watch([target, muted], () => {\n const el = toValue(target);\n if (!el)\n return;\n el.muted = muted.value;\n });\n watch([target, rate], () => {\n const el = toValue(target);\n if (!el)\n return;\n el.playbackRate = rate.value;\n });\n watchEffect(() => {\n if (!document)\n return;\n const textTracks = toValue(options.tracks);\n const el = toValue(target);\n if (!textTracks || !textTracks.length || !el)\n return;\n el.querySelectorAll(\"track\").forEach((e) => e.remove());\n textTracks.forEach(({ default: isDefault, kind, label, src, srcLang }, i) => {\n const track = document.createElement(\"track\");\n track.default = isDefault || false;\n track.kind = kind;\n track.label = label;\n track.src = src;\n track.srclang = srcLang;\n if (track.default)\n selectedTrack.value = i;\n el.appendChild(track);\n });\n });\n const { ignoreUpdates: ignoreCurrentTimeUpdates } = watchIgnorable(currentTime, (time) => {\n const el = toValue(target);\n if (!el)\n return;\n el.currentTime = time;\n });\n const { ignoreUpdates: ignorePlayingUpdates } = watchIgnorable(playing, (isPlaying) => {\n const el = toValue(target);\n if (!el)\n return;\n if (isPlaying) {\n el.play().catch((e) => {\n playbackErrorEvent.trigger(e);\n throw e;\n });\n } else {\n el.pause();\n }\n });\n const listenerOptions = { passive: true };\n useEventListener(\n target,\n \"timeupdate\",\n () => ignoreCurrentTimeUpdates(() => currentTime.value = toValue(target).currentTime),\n listenerOptions\n );\n useEventListener(\n target,\n \"durationchange\",\n () => duration.value = toValue(target).duration,\n listenerOptions\n );\n useEventListener(\n target,\n \"progress\",\n () => buffered.value = timeRangeToArray(toValue(target).buffered),\n listenerOptions\n );\n useEventListener(\n target,\n \"seeking\",\n () => seeking.value = true,\n listenerOptions\n );\n useEventListener(\n target,\n \"seeked\",\n () => seeking.value = false,\n listenerOptions\n );\n useEventListener(\n target,\n [\"waiting\", \"loadstart\"],\n () => {\n waiting.value = true;\n ignorePlayingUpdates(() => playing.value = false);\n },\n listenerOptions\n );\n useEventListener(\n target,\n \"loadeddata\",\n () => waiting.value = false,\n listenerOptions\n );\n useEventListener(\n target,\n \"playing\",\n () => {\n waiting.value = false;\n ended.value = false;\n ignorePlayingUpdates(() => playing.value = true);\n },\n listenerOptions\n );\n useEventListener(\n target,\n \"ratechange\",\n () => rate.value = toValue(target).playbackRate,\n listenerOptions\n );\n useEventListener(\n target,\n \"stalled\",\n () => stalled.value = true,\n listenerOptions\n );\n useEventListener(\n target,\n \"ended\",\n () => ended.value = true,\n listenerOptions\n );\n useEventListener(\n target,\n \"pause\",\n () => ignorePlayingUpdates(() => playing.value = false),\n listenerOptions\n );\n useEventListener(\n target,\n \"play\",\n () => ignorePlayingUpdates(() => playing.value = true),\n listenerOptions\n );\n useEventListener(\n target,\n \"enterpictureinpicture\",\n () => isPictureInPicture.value = true,\n listenerOptions\n );\n useEventListener(\n target,\n \"leavepictureinpicture\",\n () => isPictureInPicture.value = false,\n listenerOptions\n );\n useEventListener(\n target,\n \"volumechange\",\n () => {\n const el = toValue(target);\n if (!el)\n return;\n volume.value = el.volume;\n muted.value = el.muted;\n },\n listenerOptions\n );\n const listeners = [];\n const stop = watch([target], () => {\n const el = toValue(target);\n if (!el)\n return;\n stop();\n listeners[0] = useEventListener(el.textTracks, \"addtrack\", () => tracks.value = tracksToArray(el.textTracks), listenerOptions);\n listeners[1] = useEventListener(el.textTracks, \"removetrack\", () => tracks.value = tracksToArray(el.textTracks), listenerOptions);\n listeners[2] = useEventListener(el.textTracks, \"change\", () => tracks.value = tracksToArray(el.textTracks), listenerOptions);\n });\n tryOnScopeDispose(() => listeners.forEach((listener) => listener()));\n return {\n currentTime,\n duration,\n waiting,\n seeking,\n ended,\n stalled,\n buffered,\n playing,\n rate,\n // Volume\n volume,\n muted,\n // Tracks\n tracks,\n selectedTrack,\n enableTrack,\n disableTrack,\n // Picture in Picture\n supportsPictureInPicture,\n togglePictureInPicture,\n isPictureInPicture,\n // Events\n onSourceError: sourceErrorEvent.on,\n onPlaybackError: playbackErrorEvent.on\n };\n}\n\nfunction useMemoize(resolver, options) {\n const initCache = () => {\n if (options == null ? undefined : options.cache)\n return shallowReactive(options.cache);\n return shallowReactive(/* @__PURE__ */ new Map());\n };\n const cache = initCache();\n const generateKey = (...args) => (options == null ? undefined : options.getKey) ? options.getKey(...args) : JSON.stringify(args);\n const _loadData = (key, ...args) => {\n cache.set(key, resolver(...args));\n return cache.get(key);\n };\n const loadData = (...args) => _loadData(generateKey(...args), ...args);\n const deleteData = (...args) => {\n cache.delete(generateKey(...args));\n };\n const clearData = () => {\n cache.clear();\n };\n const memoized = (...args) => {\n const key = generateKey(...args);\n if (cache.has(key))\n return cache.get(key);\n return _loadData(key, ...args);\n };\n memoized.load = loadData;\n memoized.delete = deleteData;\n memoized.clear = clearData;\n memoized.generateKey = generateKey;\n memoized.cache = cache;\n return memoized;\n}\n\nfunction useMemory(options = {}) {\n const memory = ref();\n const isSupported = useSupported(() => typeof performance !== \"undefined\" && \"memory\" in performance);\n if (isSupported.value) {\n const { interval = 1e3 } = options;\n useIntervalFn(() => {\n memory.value = performance.memory;\n }, interval, { immediate: options.immediate, immediateCallback: options.immediateCallback });\n }\n return { isSupported, memory };\n}\n\nconst UseMouseBuiltinExtractors = {\n page: (event) => [event.pageX, event.pageY],\n client: (event) => [event.clientX, event.clientY],\n screen: (event) => [event.screenX, event.screenY],\n movement: (event) => event instanceof Touch ? null : [event.movementX, event.movementY]\n};\nfunction useMouse(options = {}) {\n const {\n type = \"page\",\n touch = true,\n resetOnTouchEnds = false,\n initialValue = { x: 0, y: 0 },\n window = defaultWindow,\n target = window,\n scroll = true,\n eventFilter\n } = options;\n let _prevMouseEvent = null;\n let _prevScrollX = 0;\n let _prevScrollY = 0;\n const x = ref(initialValue.x);\n const y = ref(initialValue.y);\n const sourceType = ref(null);\n const extractor = typeof type === \"function\" ? type : UseMouseBuiltinExtractors[type];\n const mouseHandler = (event) => {\n const result = extractor(event);\n _prevMouseEvent = event;\n if (result) {\n [x.value, y.value] = result;\n sourceType.value = \"mouse\";\n }\n if (window) {\n _prevScrollX = window.scrollX;\n _prevScrollY = window.scrollY;\n }\n };\n const touchHandler = (event) => {\n if (event.touches.length > 0) {\n const result = extractor(event.touches[0]);\n if (result) {\n [x.value, y.value] = result;\n sourceType.value = \"touch\";\n }\n }\n };\n const scrollHandler = () => {\n if (!_prevMouseEvent || !window)\n return;\n const pos = extractor(_prevMouseEvent);\n if (_prevMouseEvent instanceof MouseEvent && pos) {\n x.value = pos[0] + window.scrollX - _prevScrollX;\n y.value = pos[1] + window.scrollY - _prevScrollY;\n }\n };\n const reset = () => {\n x.value = initialValue.x;\n y.value = initialValue.y;\n };\n const mouseHandlerWrapper = eventFilter ? (event) => eventFilter(() => mouseHandler(event), {}) : (event) => mouseHandler(event);\n const touchHandlerWrapper = eventFilter ? (event) => eventFilter(() => touchHandler(event), {}) : (event) => touchHandler(event);\n const scrollHandlerWrapper = eventFilter ? () => eventFilter(() => scrollHandler(), {}) : () => scrollHandler();\n if (target) {\n const listenerOptions = { passive: true };\n useEventListener(target, [\"mousemove\", \"dragover\"], mouseHandlerWrapper, listenerOptions);\n if (touch && type !== \"movement\") {\n useEventListener(target, [\"touchstart\", \"touchmove\"], touchHandlerWrapper, listenerOptions);\n if (resetOnTouchEnds)\n useEventListener(target, \"touchend\", reset, listenerOptions);\n }\n if (scroll && type === \"page\")\n useEventListener(window, \"scroll\", scrollHandlerWrapper, listenerOptions);\n }\n return {\n x,\n y,\n sourceType\n };\n}\n\nfunction useMouseInElement(target, options = {}) {\n const {\n handleOutside = true,\n window = defaultWindow\n } = options;\n const type = options.type || \"page\";\n const { x, y, sourceType } = useMouse(options);\n const targetRef = ref(target != null ? target : window == null ? undefined : window.document.body);\n const elementX = ref(0);\n const elementY = ref(0);\n const elementPositionX = ref(0);\n const elementPositionY = ref(0);\n const elementHeight = ref(0);\n const elementWidth = ref(0);\n const isOutside = ref(true);\n let stop = () => {\n };\n if (window) {\n stop = watch(\n [targetRef, x, y],\n () => {\n const el = unrefElement(targetRef);\n if (!el || !(el instanceof Element))\n return;\n const {\n left,\n top,\n width,\n height\n } = el.getBoundingClientRect();\n elementPositionX.value = left + (type === \"page\" ? window.pageXOffset : 0);\n elementPositionY.value = top + (type === \"page\" ? window.pageYOffset : 0);\n elementHeight.value = height;\n elementWidth.value = width;\n const elX = x.value - elementPositionX.value;\n const elY = y.value - elementPositionY.value;\n isOutside.value = width === 0 || height === 0 || elX < 0 || elY < 0 || elX > width || elY > height;\n if (handleOutside || !isOutside.value) {\n elementX.value = elX;\n elementY.value = elY;\n }\n },\n { immediate: true }\n );\n useEventListener(\n document,\n \"mouseleave\",\n () => isOutside.value = true,\n { passive: true }\n );\n }\n return {\n x,\n y,\n sourceType,\n elementX,\n elementY,\n elementPositionX,\n elementPositionY,\n elementHeight,\n elementWidth,\n isOutside,\n stop\n };\n}\n\nfunction useMousePressed(options = {}) {\n const {\n touch = true,\n drag = true,\n capture = false,\n initialValue = false,\n window = defaultWindow\n } = options;\n const pressed = ref(initialValue);\n const sourceType = ref(null);\n if (!window) {\n return {\n pressed,\n sourceType\n };\n }\n const onPressed = (srcType) => (event) => {\n var _a;\n pressed.value = true;\n sourceType.value = srcType;\n (_a = options.onPressed) == null ? undefined : _a.call(options, event);\n };\n const onReleased = (event) => {\n var _a;\n pressed.value = false;\n sourceType.value = null;\n (_a = options.onReleased) == null ? undefined : _a.call(options, event);\n };\n const target = computed(() => unrefElement(options.target) || window);\n const listenerOptions = { passive: true, capture };\n useEventListener(target, \"mousedown\", onPressed(\"mouse\"), listenerOptions);\n useEventListener(window, \"mouseleave\", onReleased, listenerOptions);\n useEventListener(window, \"mouseup\", onReleased, listenerOptions);\n if (drag) {\n useEventListener(target, \"dragstart\", onPressed(\"mouse\"), listenerOptions);\n useEventListener(window, \"drop\", onReleased, listenerOptions);\n useEventListener(window, \"dragend\", onReleased, listenerOptions);\n }\n if (touch) {\n useEventListener(target, \"touchstart\", onPressed(\"touch\"), listenerOptions);\n useEventListener(window, \"touchend\", onReleased, listenerOptions);\n useEventListener(window, \"touchcancel\", onReleased, listenerOptions);\n }\n return {\n pressed,\n sourceType\n };\n}\n\nfunction useNavigatorLanguage(options = {}) {\n const { window = defaultWindow } = options;\n const navigator = window == null ? undefined : window.navigator;\n const isSupported = useSupported(() => navigator && \"language\" in navigator);\n const language = ref(navigator == null ? undefined : navigator.language);\n useEventListener(window, \"languagechange\", () => {\n if (navigator)\n language.value = navigator.language;\n }, { passive: true });\n return {\n isSupported,\n language\n };\n}\n\nfunction useNetwork(options = {}) {\n const { window = defaultWindow } = options;\n const navigator = window == null ? undefined : window.navigator;\n const isSupported = useSupported(() => navigator && \"connection\" in navigator);\n const isOnline = ref(true);\n const saveData = ref(false);\n const offlineAt = ref(undefined);\n const onlineAt = ref(undefined);\n const downlink = ref(undefined);\n const downlinkMax = ref(undefined);\n const rtt = ref(undefined);\n const effectiveType = ref(undefined);\n const type = ref(\"unknown\");\n const connection = isSupported.value && navigator.connection;\n function updateNetworkInformation() {\n if (!navigator)\n return;\n isOnline.value = navigator.onLine;\n offlineAt.value = isOnline.value ? undefined : Date.now();\n onlineAt.value = isOnline.value ? Date.now() : undefined;\n if (connection) {\n downlink.value = connection.downlink;\n downlinkMax.value = connection.downlinkMax;\n effectiveType.value = connection.effectiveType;\n rtt.value = connection.rtt;\n saveData.value = connection.saveData;\n type.value = connection.type;\n }\n }\n const listenerOptions = { passive: true };\n if (window) {\n useEventListener(window, \"offline\", () => {\n isOnline.value = false;\n offlineAt.value = Date.now();\n }, listenerOptions);\n useEventListener(window, \"online\", () => {\n isOnline.value = true;\n onlineAt.value = Date.now();\n }, listenerOptions);\n }\n if (connection)\n useEventListener(connection, \"change\", updateNetworkInformation, listenerOptions);\n updateNetworkInformation();\n return {\n isSupported,\n isOnline: readonly(isOnline),\n saveData: readonly(saveData),\n offlineAt: readonly(offlineAt),\n onlineAt: readonly(onlineAt),\n downlink: readonly(downlink),\n downlinkMax: readonly(downlinkMax),\n effectiveType: readonly(effectiveType),\n rtt: readonly(rtt),\n type: readonly(type)\n };\n}\n\nfunction useNow(options = {}) {\n const {\n controls: exposeControls = false,\n interval = \"requestAnimationFrame\"\n } = options;\n const now = ref(/* @__PURE__ */ new Date());\n const update = () => now.value = /* @__PURE__ */ new Date();\n const controls = interval === \"requestAnimationFrame\" ? useRafFn(update, { immediate: true }) : useIntervalFn(update, interval, { immediate: true });\n if (exposeControls) {\n return {\n now,\n ...controls\n };\n } else {\n return now;\n }\n}\n\nfunction useObjectUrl(object) {\n const url = ref();\n const release = () => {\n if (url.value)\n URL.revokeObjectURL(url.value);\n url.value = undefined;\n };\n watch(\n () => toValue(object),\n (newObject) => {\n release();\n if (newObject)\n url.value = URL.createObjectURL(newObject);\n },\n { immediate: true }\n );\n tryOnScopeDispose(release);\n return readonly(url);\n}\n\nfunction useClamp(value, min, max) {\n if (typeof value === \"function\" || isReadonly(value))\n return computed(() => clamp(toValue(value), toValue(min), toValue(max)));\n const _value = ref(value);\n return computed({\n get() {\n return _value.value = clamp(_value.value, toValue(min), toValue(max));\n },\n set(value2) {\n _value.value = clamp(value2, toValue(min), toValue(max));\n }\n });\n}\n\nfunction useOffsetPagination(options) {\n const {\n total = Number.POSITIVE_INFINITY,\n pageSize = 10,\n page = 1,\n onPageChange = noop,\n onPageSizeChange = noop,\n onPageCountChange = noop\n } = options;\n const currentPageSize = useClamp(pageSize, 1, Number.POSITIVE_INFINITY);\n const pageCount = computed(() => Math.max(\n 1,\n Math.ceil(toValue(total) / toValue(currentPageSize))\n ));\n const currentPage = useClamp(page, 1, pageCount);\n const isFirstPage = computed(() => currentPage.value === 1);\n const isLastPage = computed(() => currentPage.value === pageCount.value);\n if (isRef(page)) {\n syncRef(page, currentPage, {\n direction: isReadonly(page) ? \"ltr\" : \"both\"\n });\n }\n if (isRef(pageSize)) {\n syncRef(pageSize, currentPageSize, {\n direction: isReadonly(pageSize) ? \"ltr\" : \"both\"\n });\n }\n function prev() {\n currentPage.value--;\n }\n function next() {\n currentPage.value++;\n }\n const returnValue = {\n currentPage,\n currentPageSize,\n pageCount,\n isFirstPage,\n isLastPage,\n prev,\n next\n };\n watch(currentPage, () => {\n onPageChange(reactive(returnValue));\n });\n watch(currentPageSize, () => {\n onPageSizeChange(reactive(returnValue));\n });\n watch(pageCount, () => {\n onPageCountChange(reactive(returnValue));\n });\n return returnValue;\n}\n\nfunction useOnline(options = {}) {\n const { isOnline } = useNetwork(options);\n return isOnline;\n}\n\nfunction usePageLeave(options = {}) {\n const { window = defaultWindow } = options;\n const isLeft = ref(false);\n const handler = (event) => {\n if (!window)\n return;\n event = event || window.event;\n const from = event.relatedTarget || event.toElement;\n isLeft.value = !from;\n };\n if (window) {\n const listenerOptions = { passive: true };\n useEventListener(window, \"mouseout\", handler, listenerOptions);\n useEventListener(window.document, \"mouseleave\", handler, listenerOptions);\n useEventListener(window.document, \"mouseenter\", handler, listenerOptions);\n }\n return isLeft;\n}\n\nfunction useScreenOrientation(options = {}) {\n const {\n window = defaultWindow\n } = options;\n const isSupported = useSupported(() => window && \"screen\" in window && \"orientation\" in window.screen);\n const screenOrientation = isSupported.value ? window.screen.orientation : {};\n const orientation = ref(screenOrientation.type);\n const angle = ref(screenOrientation.angle || 0);\n if (isSupported.value) {\n useEventListener(window, \"orientationchange\", () => {\n orientation.value = screenOrientation.type;\n angle.value = screenOrientation.angle;\n }, { passive: true });\n }\n const lockOrientation = (type) => {\n if (isSupported.value && typeof screenOrientation.lock === \"function\")\n return screenOrientation.lock(type);\n return Promise.reject(new Error(\"Not supported\"));\n };\n const unlockOrientation = () => {\n if (isSupported.value && typeof screenOrientation.unlock === \"function\")\n screenOrientation.unlock();\n };\n return {\n isSupported,\n orientation,\n angle,\n lockOrientation,\n unlockOrientation\n };\n}\n\nfunction useParallax(target, options = {}) {\n const {\n deviceOrientationTiltAdjust = (i) => i,\n deviceOrientationRollAdjust = (i) => i,\n mouseTiltAdjust = (i) => i,\n mouseRollAdjust = (i) => i,\n window = defaultWindow\n } = options;\n const orientation = reactive(useDeviceOrientation({ window }));\n const screenOrientation = reactive(useScreenOrientation({ window }));\n const {\n elementX: x,\n elementY: y,\n elementWidth: width,\n elementHeight: height\n } = useMouseInElement(target, { handleOutside: false, window });\n const source = computed(() => {\n if (orientation.isSupported && (orientation.alpha != null && orientation.alpha !== 0 || orientation.gamma != null && orientation.gamma !== 0)) {\n return \"deviceOrientation\";\n }\n return \"mouse\";\n });\n const roll = computed(() => {\n if (source.value === \"deviceOrientation\") {\n let value;\n switch (screenOrientation.orientation) {\n case \"landscape-primary\":\n value = orientation.gamma / 90;\n break;\n case \"landscape-secondary\":\n value = -orientation.gamma / 90;\n break;\n case \"portrait-primary\":\n value = -orientation.beta / 90;\n break;\n case \"portrait-secondary\":\n value = orientation.beta / 90;\n break;\n default:\n value = -orientation.beta / 90;\n }\n return deviceOrientationRollAdjust(value);\n } else {\n const value = -(y.value - height.value / 2) / height.value;\n return mouseRollAdjust(value);\n }\n });\n const tilt = computed(() => {\n if (source.value === \"deviceOrientation\") {\n let value;\n switch (screenOrientation.orientation) {\n case \"landscape-primary\":\n value = orientation.beta / 90;\n break;\n case \"landscape-secondary\":\n value = -orientation.beta / 90;\n break;\n case \"portrait-primary\":\n value = orientation.gamma / 90;\n break;\n case \"portrait-secondary\":\n value = -orientation.gamma / 90;\n break;\n default:\n value = orientation.gamma / 90;\n }\n return deviceOrientationTiltAdjust(value);\n } else {\n const value = (x.value - width.value / 2) / width.value;\n return mouseTiltAdjust(value);\n }\n });\n return { roll, tilt, source };\n}\n\nfunction useParentElement(element = useCurrentElement()) {\n const parentElement = shallowRef();\n const update = () => {\n const el = unrefElement(element);\n if (el)\n parentElement.value = el.parentElement;\n };\n tryOnMounted(update);\n watch(() => toValue(element), update);\n return parentElement;\n}\n\nfunction usePerformanceObserver(options, callback) {\n const {\n window = defaultWindow,\n immediate = true,\n ...performanceOptions\n } = options;\n const isSupported = useSupported(() => window && \"PerformanceObserver\" in window);\n let observer;\n const stop = () => {\n observer == null ? undefined : observer.disconnect();\n };\n const start = () => {\n if (isSupported.value) {\n stop();\n observer = new PerformanceObserver(callback);\n observer.observe(performanceOptions);\n }\n };\n tryOnScopeDispose(stop);\n if (immediate)\n start();\n return {\n isSupported,\n start,\n stop\n };\n}\n\nconst defaultState = {\n x: 0,\n y: 0,\n pointerId: 0,\n pressure: 0,\n tiltX: 0,\n tiltY: 0,\n width: 0,\n height: 0,\n twist: 0,\n pointerType: null\n};\nconst keys = /* @__PURE__ */ Object.keys(defaultState);\nfunction usePointer(options = {}) {\n const {\n target = defaultWindow\n } = options;\n const isInside = ref(false);\n const state = ref(options.initialValue || {});\n Object.assign(state.value, defaultState, state.value);\n const handler = (event) => {\n isInside.value = true;\n if (options.pointerTypes && !options.pointerTypes.includes(event.pointerType))\n return;\n state.value = objectPick(event, keys, false);\n };\n if (target) {\n const listenerOptions = { passive: true };\n useEventListener(target, [\"pointerdown\", \"pointermove\", \"pointerup\"], handler, listenerOptions);\n useEventListener(target, \"pointerleave\", () => isInside.value = false, listenerOptions);\n }\n return {\n ...toRefs(state),\n isInside\n };\n}\n\nfunction usePointerLock(target, options = {}) {\n const { document = defaultDocument } = options;\n const isSupported = useSupported(() => document && \"pointerLockElement\" in document);\n const element = ref();\n const triggerElement = ref();\n let targetElement;\n if (isSupported.value) {\n const listenerOptions = { passive: true };\n useEventListener(document, \"pointerlockchange\", () => {\n var _a;\n const currentElement = (_a = document.pointerLockElement) != null ? _a : element.value;\n if (targetElement && currentElement === targetElement) {\n element.value = document.pointerLockElement;\n if (!element.value)\n targetElement = triggerElement.value = null;\n }\n }, listenerOptions);\n useEventListener(document, \"pointerlockerror\", () => {\n var _a;\n const currentElement = (_a = document.pointerLockElement) != null ? _a : element.value;\n if (targetElement && currentElement === targetElement) {\n const action = document.pointerLockElement ? \"release\" : \"acquire\";\n throw new Error(`Failed to ${action} pointer lock.`);\n }\n }, listenerOptions);\n }\n async function lock(e) {\n var _a;\n if (!isSupported.value)\n throw new Error(\"Pointer Lock API is not supported by your browser.\");\n triggerElement.value = e instanceof Event ? e.currentTarget : null;\n targetElement = e instanceof Event ? (_a = unrefElement(target)) != null ? _a : triggerElement.value : unrefElement(e);\n if (!targetElement)\n throw new Error(\"Target element undefined.\");\n targetElement.requestPointerLock();\n return await until(element).toBe(targetElement);\n }\n async function unlock() {\n if (!element.value)\n return false;\n document.exitPointerLock();\n await until(element).toBeNull();\n return true;\n }\n return {\n isSupported,\n element,\n triggerElement,\n lock,\n unlock\n };\n}\n\nfunction usePointerSwipe(target, options = {}) {\n const targetRef = toRef(target);\n const {\n threshold = 50,\n onSwipe,\n onSwipeEnd,\n onSwipeStart,\n disableTextSelect = false\n } = options;\n const posStart = reactive({ x: 0, y: 0 });\n const updatePosStart = (x, y) => {\n posStart.x = x;\n posStart.y = y;\n };\n const posEnd = reactive({ x: 0, y: 0 });\n const updatePosEnd = (x, y) => {\n posEnd.x = x;\n posEnd.y = y;\n };\n const distanceX = computed(() => posStart.x - posEnd.x);\n const distanceY = computed(() => posStart.y - posEnd.y);\n const { max, abs } = Math;\n const isThresholdExceeded = computed(() => max(abs(distanceX.value), abs(distanceY.value)) >= threshold);\n const isSwiping = ref(false);\n const isPointerDown = ref(false);\n const direction = computed(() => {\n if (!isThresholdExceeded.value)\n return \"none\";\n if (abs(distanceX.value) > abs(distanceY.value)) {\n return distanceX.value > 0 ? \"left\" : \"right\";\n } else {\n return distanceY.value > 0 ? \"up\" : \"down\";\n }\n });\n const eventIsAllowed = (e) => {\n var _a, _b, _c;\n const isReleasingButton = e.buttons === 0;\n const isPrimaryButton = e.buttons === 1;\n return (_c = (_b = (_a = options.pointerTypes) == null ? undefined : _a.includes(e.pointerType)) != null ? _b : isReleasingButton || isPrimaryButton) != null ? _c : true;\n };\n const listenerOptions = { passive: true };\n const stops = [\n useEventListener(target, \"pointerdown\", (e) => {\n if (!eventIsAllowed(e))\n return;\n isPointerDown.value = true;\n const eventTarget = e.target;\n eventTarget == null ? undefined : eventTarget.setPointerCapture(e.pointerId);\n const { clientX: x, clientY: y } = e;\n updatePosStart(x, y);\n updatePosEnd(x, y);\n onSwipeStart == null ? undefined : onSwipeStart(e);\n }, listenerOptions),\n useEventListener(target, \"pointermove\", (e) => {\n if (!eventIsAllowed(e))\n return;\n if (!isPointerDown.value)\n return;\n const { clientX: x, clientY: y } = e;\n updatePosEnd(x, y);\n if (!isSwiping.value && isThresholdExceeded.value)\n isSwiping.value = true;\n if (isSwiping.value)\n onSwipe == null ? undefined : onSwipe(e);\n }, listenerOptions),\n useEventListener(target, \"pointerup\", (e) => {\n if (!eventIsAllowed(e))\n return;\n if (isSwiping.value)\n onSwipeEnd == null ? undefined : onSwipeEnd(e, direction.value);\n isPointerDown.value = false;\n isSwiping.value = false;\n }, listenerOptions)\n ];\n tryOnMounted(() => {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n (_b = (_a = targetRef.value) == null ? undefined : _a.style) == null ? undefined : _b.setProperty(\"touch-action\", \"none\");\n if (disableTextSelect) {\n (_d = (_c = targetRef.value) == null ? undefined : _c.style) == null ? undefined : _d.setProperty(\"-webkit-user-select\", \"none\");\n (_f = (_e = targetRef.value) == null ? undefined : _e.style) == null ? undefined : _f.setProperty(\"-ms-user-select\", \"none\");\n (_h = (_g = targetRef.value) == null ? undefined : _g.style) == null ? undefined : _h.setProperty(\"user-select\", \"none\");\n }\n });\n const stop = () => stops.forEach((s) => s());\n return {\n isSwiping: readonly(isSwiping),\n direction: readonly(direction),\n posStart: readonly(posStart),\n posEnd: readonly(posEnd),\n distanceX,\n distanceY,\n stop\n };\n}\n\nfunction usePreferredColorScheme(options) {\n const isLight = useMediaQuery(\"(prefers-color-scheme: light)\", options);\n const isDark = useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n return computed(() => {\n if (isDark.value)\n return \"dark\";\n if (isLight.value)\n return \"light\";\n return \"no-preference\";\n });\n}\n\nfunction usePreferredContrast(options) {\n const isMore = useMediaQuery(\"(prefers-contrast: more)\", options);\n const isLess = useMediaQuery(\"(prefers-contrast: less)\", options);\n const isCustom = useMediaQuery(\"(prefers-contrast: custom)\", options);\n return computed(() => {\n if (isMore.value)\n return \"more\";\n if (isLess.value)\n return \"less\";\n if (isCustom.value)\n return \"custom\";\n return \"no-preference\";\n });\n}\n\nfunction usePreferredLanguages(options = {}) {\n const { window = defaultWindow } = options;\n if (!window)\n return ref([\"en\"]);\n const navigator = window.navigator;\n const value = ref(navigator.languages);\n useEventListener(window, \"languagechange\", () => {\n value.value = navigator.languages;\n }, { passive: true });\n return value;\n}\n\nfunction usePreferredReducedMotion(options) {\n const isReduced = useMediaQuery(\"(prefers-reduced-motion: reduce)\", options);\n return computed(() => {\n if (isReduced.value)\n return \"reduce\";\n return \"no-preference\";\n });\n}\n\nfunction usePreferredReducedTransparency(options) {\n const isReduced = useMediaQuery(\"(prefers-reduced-transparency: reduce)\", options);\n return computed(() => {\n if (isReduced.value)\n return \"reduce\";\n return \"no-preference\";\n });\n}\n\nfunction usePrevious(value, initialValue) {\n const previous = shallowRef(initialValue);\n watch(\n toRef(value),\n (_, oldValue) => {\n previous.value = oldValue;\n },\n { flush: \"sync\" }\n );\n return readonly(previous);\n}\n\nconst topVarName = \"--vueuse-safe-area-top\";\nconst rightVarName = \"--vueuse-safe-area-right\";\nconst bottomVarName = \"--vueuse-safe-area-bottom\";\nconst leftVarName = \"--vueuse-safe-area-left\";\nfunction useScreenSafeArea() {\n const top = ref(\"\");\n const right = ref(\"\");\n const bottom = ref(\"\");\n const left = ref(\"\");\n if (isClient) {\n const topCssVar = useCssVar(topVarName);\n const rightCssVar = useCssVar(rightVarName);\n const bottomCssVar = useCssVar(bottomVarName);\n const leftCssVar = useCssVar(leftVarName);\n topCssVar.value = \"env(safe-area-inset-top, 0px)\";\n rightCssVar.value = \"env(safe-area-inset-right, 0px)\";\n bottomCssVar.value = \"env(safe-area-inset-bottom, 0px)\";\n leftCssVar.value = \"env(safe-area-inset-left, 0px)\";\n update();\n useEventListener(\"resize\", useDebounceFn(update), { passive: true });\n }\n function update() {\n top.value = getValue(topVarName);\n right.value = getValue(rightVarName);\n bottom.value = getValue(bottomVarName);\n left.value = getValue(leftVarName);\n }\n return {\n top,\n right,\n bottom,\n left,\n update\n };\n}\nfunction getValue(position) {\n return getComputedStyle(document.documentElement).getPropertyValue(position);\n}\n\nfunction useScriptTag(src, onLoaded = noop, options = {}) {\n const {\n immediate = true,\n manual = false,\n type = \"text/javascript\",\n async = true,\n crossOrigin,\n referrerPolicy,\n noModule,\n defer,\n document = defaultDocument,\n attrs = {}\n } = options;\n const scriptTag = ref(null);\n let _promise = null;\n const loadScript = (waitForScriptLoad) => new Promise((resolve, reject) => {\n const resolveWithElement = (el2) => {\n scriptTag.value = el2;\n resolve(el2);\n return el2;\n };\n if (!document) {\n resolve(false);\n return;\n }\n let shouldAppend = false;\n let el = document.querySelector(`script[src=\"${toValue(src)}\"]`);\n if (!el) {\n el = document.createElement(\"script\");\n el.type = type;\n el.async = async;\n el.src = toValue(src);\n if (defer)\n el.defer = defer;\n if (crossOrigin)\n el.crossOrigin = crossOrigin;\n if (noModule)\n el.noModule = noModule;\n if (referrerPolicy)\n el.referrerPolicy = referrerPolicy;\n Object.entries(attrs).forEach(([name, value]) => el == null ? undefined : el.setAttribute(name, value));\n shouldAppend = true;\n } else if (el.hasAttribute(\"data-loaded\")) {\n resolveWithElement(el);\n }\n el.addEventListener(\"error\", (event) => reject(event));\n el.addEventListener(\"abort\", (event) => reject(event));\n el.addEventListener(\"load\", () => {\n el.setAttribute(\"data-loaded\", \"true\");\n onLoaded(el);\n resolveWithElement(el);\n });\n if (shouldAppend)\n el = document.head.appendChild(el);\n if (!waitForScriptLoad)\n resolveWithElement(el);\n });\n const load = (waitForScriptLoad = true) => {\n if (!_promise)\n _promise = loadScript(waitForScriptLoad);\n return _promise;\n };\n const unload = () => {\n if (!document)\n return;\n _promise = null;\n if (scriptTag.value)\n scriptTag.value = null;\n const el = document.querySelector(`script[src=\"${toValue(src)}\"]`);\n if (el)\n document.head.removeChild(el);\n };\n if (immediate && !manual)\n tryOnMounted(load);\n if (!manual)\n tryOnUnmounted(unload);\n return { scriptTag, load, unload };\n}\n\nfunction checkOverflowScroll(ele) {\n const style = window.getComputedStyle(ele);\n if (style.overflowX === \"scroll\" || style.overflowY === \"scroll\" || style.overflowX === \"auto\" && ele.clientWidth < ele.scrollWidth || style.overflowY === \"auto\" && ele.clientHeight < ele.scrollHeight) {\n return true;\n } else {\n const parent = ele.parentNode;\n if (!parent || parent.tagName === \"BODY\")\n return false;\n return checkOverflowScroll(parent);\n }\n}\nfunction preventDefault(rawEvent) {\n const e = rawEvent || window.event;\n const _target = e.target;\n if (checkOverflowScroll(_target))\n return false;\n if (e.touches.length > 1)\n return true;\n if (e.preventDefault)\n e.preventDefault();\n return false;\n}\nconst elInitialOverflow = /* @__PURE__ */ new WeakMap();\nfunction useScrollLock(element, initialState = false) {\n const isLocked = ref(initialState);\n let stopTouchMoveListener = null;\n let initialOverflow = \"\";\n watch(toRef(element), (el) => {\n const target = resolveElement(toValue(el));\n if (target) {\n const ele = target;\n if (!elInitialOverflow.get(ele))\n elInitialOverflow.set(ele, ele.style.overflow);\n if (ele.style.overflow !== \"hidden\")\n initialOverflow = ele.style.overflow;\n if (ele.style.overflow === \"hidden\")\n return isLocked.value = true;\n if (isLocked.value)\n return ele.style.overflow = \"hidden\";\n }\n }, {\n immediate: true\n });\n const lock = () => {\n const el = resolveElement(toValue(element));\n if (!el || isLocked.value)\n return;\n if (isIOS) {\n stopTouchMoveListener = useEventListener(\n el,\n \"touchmove\",\n (e) => {\n preventDefault(e);\n },\n { passive: false }\n );\n }\n el.style.overflow = \"hidden\";\n isLocked.value = true;\n };\n const unlock = () => {\n const el = resolveElement(toValue(element));\n if (!el || !isLocked.value)\n return;\n if (isIOS)\n stopTouchMoveListener == null ? undefined : stopTouchMoveListener();\n el.style.overflow = initialOverflow;\n elInitialOverflow.delete(el);\n isLocked.value = false;\n };\n tryOnScopeDispose(unlock);\n return computed({\n get() {\n return isLocked.value;\n },\n set(v) {\n if (v)\n lock();\n else unlock();\n }\n });\n}\n\nfunction useSessionStorage(key, initialValue, options = {}) {\n const { window = defaultWindow } = options;\n return useStorage(key, initialValue, window == null ? undefined : window.sessionStorage, options);\n}\n\nfunction useShare(shareOptions = {}, options = {}) {\n const { navigator = defaultNavigator } = options;\n const _navigator = navigator;\n const isSupported = useSupported(() => _navigator && \"canShare\" in _navigator);\n const share = async (overrideOptions = {}) => {\n if (isSupported.value) {\n const data = {\n ...toValue(shareOptions),\n ...toValue(overrideOptions)\n };\n let granted = true;\n if (data.files && _navigator.canShare)\n granted = _navigator.canShare({ files: data.files });\n if (granted)\n return _navigator.share(data);\n }\n };\n return {\n isSupported,\n share\n };\n}\n\nconst defaultSortFn = (source, compareFn) => source.sort(compareFn);\nconst defaultCompare = (a, b) => a - b;\nfunction useSorted(...args) {\n var _a, _b, _c, _d;\n const [source] = args;\n let compareFn = defaultCompare;\n let options = {};\n if (args.length === 2) {\n if (typeof args[1] === \"object\") {\n options = args[1];\n compareFn = (_a = options.compareFn) != null ? _a : defaultCompare;\n } else {\n compareFn = (_b = args[1]) != null ? _b : defaultCompare;\n }\n } else if (args.length > 2) {\n compareFn = (_c = args[1]) != null ? _c : defaultCompare;\n options = (_d = args[2]) != null ? _d : {};\n }\n const {\n dirty = false,\n sortFn = defaultSortFn\n } = options;\n if (!dirty)\n return computed(() => sortFn([...toValue(source)], compareFn));\n watchEffect(() => {\n const result = sortFn(toValue(source), compareFn);\n if (isRef(source))\n source.value = result;\n else\n source.splice(0, source.length, ...result);\n });\n return source;\n}\n\nfunction useSpeechRecognition(options = {}) {\n const {\n interimResults = true,\n continuous = true,\n maxAlternatives = 1,\n window = defaultWindow\n } = options;\n const lang = toRef(options.lang || \"en-US\");\n const isListening = ref(false);\n const isFinal = ref(false);\n const result = ref(\"\");\n const error = shallowRef(undefined);\n let recognition;\n const start = () => {\n if (!isListening.value)\n recognition == null ? undefined : recognition.start();\n };\n const stop = () => {\n if (isListening.value)\n recognition == null ? undefined : recognition.stop();\n };\n const toggle = (value = !isListening.value) => {\n if (value) {\n start();\n } else {\n stop();\n }\n };\n const SpeechRecognition = window && (window.SpeechRecognition || window.webkitSpeechRecognition);\n const isSupported = useSupported(() => SpeechRecognition);\n if (isSupported.value) {\n recognition = new SpeechRecognition();\n recognition.continuous = continuous;\n recognition.interimResults = interimResults;\n recognition.lang = toValue(lang);\n recognition.maxAlternatives = maxAlternatives;\n recognition.onstart = () => {\n isListening.value = true;\n isFinal.value = false;\n };\n watch(lang, (lang2) => {\n if (recognition && !isListening.value)\n recognition.lang = lang2;\n });\n recognition.onresult = (event) => {\n const currentResult = event.results[event.resultIndex];\n const { transcript } = currentResult[0];\n isFinal.value = currentResult.isFinal;\n result.value = transcript;\n error.value = undefined;\n };\n recognition.onerror = (event) => {\n error.value = event;\n };\n recognition.onend = () => {\n isListening.value = false;\n recognition.lang = toValue(lang);\n };\n watch(isListening, () => {\n if (isListening.value)\n recognition.start();\n else\n recognition.stop();\n });\n }\n tryOnScopeDispose(() => {\n stop();\n });\n return {\n isSupported,\n isListening,\n isFinal,\n recognition,\n result,\n error,\n toggle,\n start,\n stop\n };\n}\n\nfunction useSpeechSynthesis(text, options = {}) {\n const {\n pitch = 1,\n rate = 1,\n volume = 1,\n window = defaultWindow\n } = options;\n const synth = window && window.speechSynthesis;\n const isSupported = useSupported(() => synth);\n const isPlaying = ref(false);\n const status = ref(\"init\");\n const spokenText = toRef(text || \"\");\n const lang = toRef(options.lang || \"en-US\");\n const error = shallowRef(undefined);\n const toggle = (value = !isPlaying.value) => {\n isPlaying.value = value;\n };\n const bindEventsForUtterance = (utterance2) => {\n utterance2.lang = toValue(lang);\n utterance2.voice = toValue(options.voice) || null;\n utterance2.pitch = toValue(pitch);\n utterance2.rate = toValue(rate);\n utterance2.volume = volume;\n utterance2.onstart = () => {\n isPlaying.value = true;\n status.value = \"play\";\n };\n utterance2.onpause = () => {\n isPlaying.value = false;\n status.value = \"pause\";\n };\n utterance2.onresume = () => {\n isPlaying.value = true;\n status.value = \"play\";\n };\n utterance2.onend = () => {\n isPlaying.value = false;\n status.value = \"end\";\n };\n utterance2.onerror = (event) => {\n error.value = event;\n };\n };\n const utterance = computed(() => {\n isPlaying.value = false;\n status.value = \"init\";\n const newUtterance = new SpeechSynthesisUtterance(spokenText.value);\n bindEventsForUtterance(newUtterance);\n return newUtterance;\n });\n const speak = () => {\n synth.cancel();\n if (utterance)\n synth.speak(utterance.value);\n };\n const stop = () => {\n synth.cancel();\n isPlaying.value = false;\n };\n if (isSupported.value) {\n bindEventsForUtterance(utterance.value);\n watch(lang, (lang2) => {\n if (utterance.value && !isPlaying.value)\n utterance.value.lang = lang2;\n });\n if (options.voice) {\n watch(options.voice, () => {\n synth.cancel();\n });\n }\n watch(isPlaying, () => {\n if (isPlaying.value)\n synth.resume();\n else\n synth.pause();\n });\n }\n tryOnScopeDispose(() => {\n isPlaying.value = false;\n });\n return {\n isSupported,\n isPlaying,\n status,\n utterance,\n error,\n stop,\n toggle,\n speak\n };\n}\n\nfunction useStepper(steps, initialStep) {\n const stepsRef = ref(steps);\n const stepNames = computed(() => Array.isArray(stepsRef.value) ? stepsRef.value : Object.keys(stepsRef.value));\n const index = ref(stepNames.value.indexOf(initialStep != null ? initialStep : stepNames.value[0]));\n const current = computed(() => at(index.value));\n const isFirst = computed(() => index.value === 0);\n const isLast = computed(() => index.value === stepNames.value.length - 1);\n const next = computed(() => stepNames.value[index.value + 1]);\n const previous = computed(() => stepNames.value[index.value - 1]);\n function at(index2) {\n if (Array.isArray(stepsRef.value))\n return stepsRef.value[index2];\n return stepsRef.value[stepNames.value[index2]];\n }\n function get(step) {\n if (!stepNames.value.includes(step))\n return;\n return at(stepNames.value.indexOf(step));\n }\n function goTo(step) {\n if (stepNames.value.includes(step))\n index.value = stepNames.value.indexOf(step);\n }\n function goToNext() {\n if (isLast.value)\n return;\n index.value++;\n }\n function goToPrevious() {\n if (isFirst.value)\n return;\n index.value--;\n }\n function goBackTo(step) {\n if (isAfter(step))\n goTo(step);\n }\n function isNext(step) {\n return stepNames.value.indexOf(step) === index.value + 1;\n }\n function isPrevious(step) {\n return stepNames.value.indexOf(step) === index.value - 1;\n }\n function isCurrent(step) {\n return stepNames.value.indexOf(step) === index.value;\n }\n function isBefore(step) {\n return index.value < stepNames.value.indexOf(step);\n }\n function isAfter(step) {\n return index.value > stepNames.value.indexOf(step);\n }\n return {\n steps: stepsRef,\n stepNames,\n index,\n current,\n next,\n previous,\n isFirst,\n isLast,\n at,\n get,\n goTo,\n goToNext,\n goToPrevious,\n goBackTo,\n isNext,\n isPrevious,\n isCurrent,\n isBefore,\n isAfter\n };\n}\n\nfunction useStorageAsync(key, initialValue, storage, options = {}) {\n var _a;\n const {\n flush = \"pre\",\n deep = true,\n listenToStorageChanges = true,\n writeDefaults = true,\n mergeDefaults = false,\n shallow,\n window = defaultWindow,\n eventFilter,\n onError = (e) => {\n console.error(e);\n }\n } = options;\n const rawInit = toValue(initialValue);\n const type = guessSerializerType(rawInit);\n const data = (shallow ? shallowRef : ref)(toValue(initialValue));\n const serializer = (_a = options.serializer) != null ? _a : StorageSerializers[type];\n if (!storage) {\n try {\n storage = getSSRHandler(\"getDefaultStorageAsync\", () => {\n var _a2;\n return (_a2 = defaultWindow) == null ? void 0 : _a2.localStorage;\n })();\n } catch (e) {\n onError(e);\n }\n }\n async function read(event) {\n if (!storage || event && event.key !== key)\n return;\n try {\n const rawValue = event ? event.newValue : await storage.getItem(key);\n if (rawValue == null) {\n data.value = rawInit;\n if (writeDefaults && rawInit !== null)\n await storage.setItem(key, await serializer.write(rawInit));\n } else if (mergeDefaults) {\n const value = await serializer.read(rawValue);\n if (typeof mergeDefaults === \"function\")\n data.value = mergeDefaults(value, rawInit);\n else if (type === \"object\" && !Array.isArray(value))\n data.value = { ...rawInit, ...value };\n else data.value = value;\n } else {\n data.value = await serializer.read(rawValue);\n }\n } catch (e) {\n onError(e);\n }\n }\n read();\n if (window && listenToStorageChanges)\n useEventListener(window, \"storage\", (e) => Promise.resolve().then(() => read(e)), { passive: true });\n if (storage) {\n watchWithFilter(\n data,\n async () => {\n try {\n if (data.value == null)\n await storage.removeItem(key);\n else\n await storage.setItem(key, await serializer.write(data.value));\n } catch (e) {\n onError(e);\n }\n },\n {\n flush,\n deep,\n eventFilter\n }\n );\n }\n return data;\n}\n\nlet _id = 0;\nfunction useStyleTag(css, options = {}) {\n const isLoaded = ref(false);\n const {\n document = defaultDocument,\n immediate = true,\n manual = false,\n id = `vueuse_styletag_${++_id}`\n } = options;\n const cssRef = ref(css);\n let stop = () => {\n };\n const load = () => {\n if (!document)\n return;\n const el = document.getElementById(id) || document.createElement(\"style\");\n if (!el.isConnected) {\n el.id = id;\n if (options.media)\n el.media = options.media;\n document.head.appendChild(el);\n }\n if (isLoaded.value)\n return;\n stop = watch(\n cssRef,\n (value) => {\n el.textContent = value;\n },\n { immediate: true }\n );\n isLoaded.value = true;\n };\n const unload = () => {\n if (!document || !isLoaded.value)\n return;\n stop();\n document.head.removeChild(document.getElementById(id));\n isLoaded.value = false;\n };\n if (immediate && !manual)\n tryOnMounted(load);\n if (!manual)\n tryOnScopeDispose(unload);\n return {\n id,\n css: cssRef,\n unload,\n load,\n isLoaded: readonly(isLoaded)\n };\n}\n\nfunction useSwipe(target, options = {}) {\n const {\n threshold = 50,\n onSwipe,\n onSwipeEnd,\n onSwipeStart,\n passive = true\n } = options;\n const coordsStart = reactive({ x: 0, y: 0 });\n const coordsEnd = reactive({ x: 0, y: 0 });\n const diffX = computed(() => coordsStart.x - coordsEnd.x);\n const diffY = computed(() => coordsStart.y - coordsEnd.y);\n const { max, abs } = Math;\n const isThresholdExceeded = computed(() => max(abs(diffX.value), abs(diffY.value)) >= threshold);\n const isSwiping = ref(false);\n const direction = computed(() => {\n if (!isThresholdExceeded.value)\n return \"none\";\n if (abs(diffX.value) > abs(diffY.value)) {\n return diffX.value > 0 ? \"left\" : \"right\";\n } else {\n return diffY.value > 0 ? \"up\" : \"down\";\n }\n });\n const getTouchEventCoords = (e) => [e.touches[0].clientX, e.touches[0].clientY];\n const updateCoordsStart = (x, y) => {\n coordsStart.x = x;\n coordsStart.y = y;\n };\n const updateCoordsEnd = (x, y) => {\n coordsEnd.x = x;\n coordsEnd.y = y;\n };\n const listenerOptions = { passive, capture: !passive };\n const onTouchEnd = (e) => {\n if (isSwiping.value)\n onSwipeEnd == null ? undefined : onSwipeEnd(e, direction.value);\n isSwiping.value = false;\n };\n const stops = [\n useEventListener(target, \"touchstart\", (e) => {\n if (e.touches.length !== 1)\n return;\n const [x, y] = getTouchEventCoords(e);\n updateCoordsStart(x, y);\n updateCoordsEnd(x, y);\n onSwipeStart == null ? undefined : onSwipeStart(e);\n }, listenerOptions),\n useEventListener(target, \"touchmove\", (e) => {\n if (e.touches.length !== 1)\n return;\n const [x, y] = getTouchEventCoords(e);\n updateCoordsEnd(x, y);\n if (listenerOptions.capture && !listenerOptions.passive && Math.abs(diffX.value) > Math.abs(diffY.value))\n e.preventDefault();\n if (!isSwiping.value && isThresholdExceeded.value)\n isSwiping.value = true;\n if (isSwiping.value)\n onSwipe == null ? undefined : onSwipe(e);\n }, listenerOptions),\n useEventListener(target, [\"touchend\", \"touchcancel\"], onTouchEnd, listenerOptions)\n ];\n const stop = () => stops.forEach((s) => s());\n return {\n isSwiping,\n direction,\n coordsStart,\n coordsEnd,\n lengthX: diffX,\n lengthY: diffY,\n stop,\n // TODO: Remove in the next major version\n isPassiveEventSupported: true\n };\n}\n\nfunction useTemplateRefsList() {\n const refs = ref([]);\n refs.value.set = (el) => {\n if (el)\n refs.value.push(el);\n };\n onBeforeUpdate(() => {\n refs.value.length = 0;\n });\n return refs;\n}\n\nfunction useTextDirection(options = {}) {\n const {\n document = defaultDocument,\n selector = \"html\",\n observe = false,\n initialValue = \"ltr\"\n } = options;\n function getValue() {\n var _a, _b;\n return (_b = (_a = document == null ? undefined : document.querySelector(selector)) == null ? undefined : _a.getAttribute(\"dir\")) != null ? _b : initialValue;\n }\n const dir = ref(getValue());\n tryOnMounted(() => dir.value = getValue());\n if (observe && document) {\n useMutationObserver(\n document.querySelector(selector),\n () => dir.value = getValue(),\n { attributes: true }\n );\n }\n return computed({\n get() {\n return dir.value;\n },\n set(v) {\n var _a, _b;\n dir.value = v;\n if (!document)\n return;\n if (dir.value)\n (_a = document.querySelector(selector)) == null ? undefined : _a.setAttribute(\"dir\", dir.value);\n else\n (_b = document.querySelector(selector)) == null ? undefined : _b.removeAttribute(\"dir\");\n }\n });\n}\n\nfunction getRangesFromSelection(selection) {\n var _a;\n const rangeCount = (_a = selection.rangeCount) != null ? _a : 0;\n return Array.from({ length: rangeCount }, (_, i) => selection.getRangeAt(i));\n}\nfunction useTextSelection(options = {}) {\n const {\n window = defaultWindow\n } = options;\n const selection = ref(null);\n const text = computed(() => {\n var _a, _b;\n return (_b = (_a = selection.value) == null ? undefined : _a.toString()) != null ? _b : \"\";\n });\n const ranges = computed(() => selection.value ? getRangesFromSelection(selection.value) : []);\n const rects = computed(() => ranges.value.map((range) => range.getBoundingClientRect()));\n function onSelectionChange() {\n selection.value = null;\n if (window)\n selection.value = window.getSelection();\n }\n if (window)\n useEventListener(window.document, \"selectionchange\", onSelectionChange, { passive: true });\n return {\n text,\n rects,\n ranges,\n selection\n };\n}\n\nfunction useTextareaAutosize(options) {\n var _a, _b;\n const textarea = toRef(options == null ? undefined : options.element);\n const input = toRef((_a = options == null ? undefined : options.input) != null ? _a : \"\");\n const styleProp = (_b = options == null ? undefined : options.styleProp) != null ? _b : \"height\";\n const textareaScrollHeight = ref(1);\n const textareaOldWidth = ref(0);\n function triggerResize() {\n var _a2;\n if (!textarea.value)\n return;\n let height = \"\";\n textarea.value.style[styleProp] = \"1px\";\n textareaScrollHeight.value = (_a2 = textarea.value) == null ? undefined : _a2.scrollHeight;\n const _styleTarget = toValue(options == null ? undefined : options.styleTarget);\n if (_styleTarget)\n _styleTarget.style[styleProp] = `${textareaScrollHeight.value}px`;\n else\n height = `${textareaScrollHeight.value}px`;\n textarea.value.style[styleProp] = height;\n }\n watch([input, textarea], () => nextTick(triggerResize), { immediate: true });\n watch(textareaScrollHeight, () => {\n var _a2;\n return (_a2 = options == null ? undefined : options.onResize) == null ? undefined : _a2.call(options);\n });\n useResizeObserver(textarea, ([{ contentRect }]) => {\n if (textareaOldWidth.value === contentRect.width)\n return;\n textareaOldWidth.value = contentRect.width;\n triggerResize();\n });\n if (options == null ? undefined : options.watch)\n watch(options.watch, triggerResize, { immediate: true, deep: true });\n return {\n textarea,\n input,\n triggerResize\n };\n}\n\nfunction useThrottledRefHistory(source, options = {}) {\n const { throttle = 200, trailing = true } = options;\n const filter = throttleFilter(throttle, trailing);\n const history = useRefHistory(source, { ...options, eventFilter: filter });\n return {\n ...history\n };\n}\n\nconst DEFAULT_UNITS = [\n { max: 6e4, value: 1e3, name: \"second\" },\n { max: 276e4, value: 6e4, name: \"minute\" },\n { max: 72e6, value: 36e5, name: \"hour\" },\n { max: 5184e5, value: 864e5, name: \"day\" },\n { max: 24192e5, value: 6048e5, name: \"week\" },\n { max: 28512e6, value: 2592e6, name: \"month\" },\n { max: Number.POSITIVE_INFINITY, value: 31536e6, name: \"year\" }\n];\nconst DEFAULT_MESSAGES = {\n justNow: \"just now\",\n past: (n) => n.match(/\\d/) ? `${n} ago` : n,\n future: (n) => n.match(/\\d/) ? `in ${n}` : n,\n month: (n, past) => n === 1 ? past ? \"last month\" : \"next month\" : `${n} month${n > 1 ? \"s\" : \"\"}`,\n year: (n, past) => n === 1 ? past ? \"last year\" : \"next year\" : `${n} year${n > 1 ? \"s\" : \"\"}`,\n day: (n, past) => n === 1 ? past ? \"yesterday\" : \"tomorrow\" : `${n} day${n > 1 ? \"s\" : \"\"}`,\n week: (n, past) => n === 1 ? past ? \"last week\" : \"next week\" : `${n} week${n > 1 ? \"s\" : \"\"}`,\n hour: (n) => `${n} hour${n > 1 ? \"s\" : \"\"}`,\n minute: (n) => `${n} minute${n > 1 ? \"s\" : \"\"}`,\n second: (n) => `${n} second${n > 1 ? \"s\" : \"\"}`,\n invalid: \"\"\n};\nfunction DEFAULT_FORMATTER(date) {\n return date.toISOString().slice(0, 10);\n}\nfunction useTimeAgo(time, options = {}) {\n const {\n controls: exposeControls = false,\n updateInterval = 3e4\n } = options;\n const { now, ...controls } = useNow({ interval: updateInterval, controls: true });\n const timeAgo = computed(() => formatTimeAgo(new Date(toValue(time)), options, toValue(now)));\n if (exposeControls) {\n return {\n timeAgo,\n ...controls\n };\n } else {\n return timeAgo;\n }\n}\nfunction formatTimeAgo(from, options = {}, now = Date.now()) {\n var _a;\n const {\n max,\n messages = DEFAULT_MESSAGES,\n fullDateFormatter = DEFAULT_FORMATTER,\n units = DEFAULT_UNITS,\n showSecond = false,\n rounding = \"round\"\n } = options;\n const roundFn = typeof rounding === \"number\" ? (n) => +n.toFixed(rounding) : Math[rounding];\n const diff = +now - +from;\n const absDiff = Math.abs(diff);\n function getValue(diff2, unit) {\n return roundFn(Math.abs(diff2) / unit.value);\n }\n function format(diff2, unit) {\n const val = getValue(diff2, unit);\n const past = diff2 > 0;\n const str = applyFormat(unit.name, val, past);\n return applyFormat(past ? \"past\" : \"future\", str, past);\n }\n function applyFormat(name, val, isPast) {\n const formatter = messages[name];\n if (typeof formatter === \"function\")\n return formatter(val, isPast);\n return formatter.replace(\"{0}\", val.toString());\n }\n if (absDiff < 6e4 && !showSecond)\n return messages.justNow;\n if (typeof max === \"number\" && absDiff > max)\n return fullDateFormatter(new Date(from));\n if (typeof max === \"string\") {\n const unitMax = (_a = units.find((i) => i.name === max)) == null ? undefined : _a.max;\n if (unitMax && absDiff > unitMax)\n return fullDateFormatter(new Date(from));\n }\n for (const [idx, unit] of units.entries()) {\n const val = getValue(diff, unit);\n if (val <= 0 && units[idx - 1])\n return format(diff, units[idx - 1]);\n if (absDiff < unit.max)\n return format(diff, unit);\n }\n return messages.invalid;\n}\n\nfunction useTimeoutPoll(fn, interval, options = {}) {\n const {\n immediate = true\n } = options;\n const { start } = useTimeoutFn(loop, interval, { immediate: false });\n const isActive = ref(false);\n async function loop() {\n if (!isActive.value)\n return;\n await fn();\n start();\n }\n function resume() {\n if (!isActive.value) {\n isActive.value = true;\n loop();\n }\n }\n function pause() {\n isActive.value = false;\n }\n if (immediate && isClient)\n resume();\n tryOnScopeDispose(pause);\n return {\n isActive,\n pause,\n resume\n };\n}\n\nfunction useTimestamp(options = {}) {\n const {\n controls: exposeControls = false,\n offset = 0,\n immediate = true,\n interval = \"requestAnimationFrame\",\n callback\n } = options;\n const ts = ref(timestamp() + offset);\n const update = () => ts.value = timestamp() + offset;\n const cb = callback ? () => {\n update();\n callback(ts.value);\n } : update;\n const controls = interval === \"requestAnimationFrame\" ? useRafFn(cb, { immediate }) : useIntervalFn(cb, interval, { immediate });\n if (exposeControls) {\n return {\n timestamp: ts,\n ...controls\n };\n } else {\n return ts;\n }\n}\n\nfunction useTitle(newTitle = null, options = {}) {\n var _a, _b, _c;\n const {\n document = defaultDocument,\n restoreOnUnmount = (t) => t\n } = options;\n const originalTitle = (_a = document == null ? undefined : document.title) != null ? _a : \"\";\n const title = toRef((_b = newTitle != null ? newTitle : document == null ? undefined : document.title) != null ? _b : null);\n const isReadonly = newTitle && typeof newTitle === \"function\";\n function format(t) {\n if (!(\"titleTemplate\" in options))\n return t;\n const template = options.titleTemplate || \"%s\";\n return typeof template === \"function\" ? template(t) : toValue(template).replace(/%s/g, t);\n }\n watch(\n title,\n (t, o) => {\n if (t !== o && document)\n document.title = format(typeof t === \"string\" ? t : \"\");\n },\n { immediate: true }\n );\n if (options.observe && !options.titleTemplate && document && !isReadonly) {\n useMutationObserver(\n (_c = document.head) == null ? undefined : _c.querySelector(\"title\"),\n () => {\n if (document && document.title !== title.value)\n title.value = format(document.title);\n },\n { childList: true }\n );\n }\n tryOnBeforeUnmount(() => {\n if (restoreOnUnmount) {\n const restoredTitle = restoreOnUnmount(originalTitle, title.value || \"\");\n if (restoredTitle != null && document)\n document.title = restoredTitle;\n }\n });\n return title;\n}\n\nconst _TransitionPresets = {\n easeInSine: [0.12, 0, 0.39, 0],\n easeOutSine: [0.61, 1, 0.88, 1],\n easeInOutSine: [0.37, 0, 0.63, 1],\n easeInQuad: [0.11, 0, 0.5, 0],\n easeOutQuad: [0.5, 1, 0.89, 1],\n easeInOutQuad: [0.45, 0, 0.55, 1],\n easeInCubic: [0.32, 0, 0.67, 0],\n easeOutCubic: [0.33, 1, 0.68, 1],\n easeInOutCubic: [0.65, 0, 0.35, 1],\n easeInQuart: [0.5, 0, 0.75, 0],\n easeOutQuart: [0.25, 1, 0.5, 1],\n easeInOutQuart: [0.76, 0, 0.24, 1],\n easeInQuint: [0.64, 0, 0.78, 0],\n easeOutQuint: [0.22, 1, 0.36, 1],\n easeInOutQuint: [0.83, 0, 0.17, 1],\n easeInExpo: [0.7, 0, 0.84, 0],\n easeOutExpo: [0.16, 1, 0.3, 1],\n easeInOutExpo: [0.87, 0, 0.13, 1],\n easeInCirc: [0.55, 0, 1, 0.45],\n easeOutCirc: [0, 0.55, 0.45, 1],\n easeInOutCirc: [0.85, 0, 0.15, 1],\n easeInBack: [0.36, 0, 0.66, -0.56],\n easeOutBack: [0.34, 1.56, 0.64, 1],\n easeInOutBack: [0.68, -0.6, 0.32, 1.6]\n};\nconst TransitionPresets = /* @__PURE__ */ Object.assign({}, { linear: identity }, _TransitionPresets);\nfunction createEasingFunction([p0, p1, p2, p3]) {\n const a = (a1, a2) => 1 - 3 * a2 + 3 * a1;\n const b = (a1, a2) => 3 * a2 - 6 * a1;\n const c = (a1) => 3 * a1;\n const calcBezier = (t, a1, a2) => ((a(a1, a2) * t + b(a1, a2)) * t + c(a1)) * t;\n const getSlope = (t, a1, a2) => 3 * a(a1, a2) * t * t + 2 * b(a1, a2) * t + c(a1);\n const getTforX = (x) => {\n let aGuessT = x;\n for (let i = 0; i < 4; ++i) {\n const currentSlope = getSlope(aGuessT, p0, p2);\n if (currentSlope === 0)\n return aGuessT;\n const currentX = calcBezier(aGuessT, p0, p2) - x;\n aGuessT -= currentX / currentSlope;\n }\n return aGuessT;\n };\n return (x) => p0 === p1 && p2 === p3 ? x : calcBezier(getTforX(x), p1, p3);\n}\nfunction lerp(a, b, alpha) {\n return a + alpha * (b - a);\n}\nfunction toVec(t) {\n return (typeof t === \"number\" ? [t] : t) || [];\n}\nfunction executeTransition(source, from, to, options = {}) {\n var _a, _b;\n const fromVal = toValue(from);\n const toVal = toValue(to);\n const v1 = toVec(fromVal);\n const v2 = toVec(toVal);\n const duration = (_a = toValue(options.duration)) != null ? _a : 1e3;\n const startedAt = Date.now();\n const endAt = Date.now() + duration;\n const trans = typeof options.transition === \"function\" ? options.transition : (_b = toValue(options.transition)) != null ? _b : identity;\n const ease = typeof trans === \"function\" ? trans : createEasingFunction(trans);\n return new Promise((resolve) => {\n source.value = fromVal;\n const tick = () => {\n var _a2;\n if ((_a2 = options.abort) == null ? undefined : _a2.call(options)) {\n resolve();\n return;\n }\n const now = Date.now();\n const alpha = ease((now - startedAt) / duration);\n const arr = toVec(source.value).map((n, i) => lerp(v1[i], v2[i], alpha));\n if (Array.isArray(source.value))\n source.value = arr.map((n, i) => {\n var _a3, _b2;\n return lerp((_a3 = v1[i]) != null ? _a3 : 0, (_b2 = v2[i]) != null ? _b2 : 0, alpha);\n });\n else if (typeof source.value === \"number\")\n source.value = arr[0];\n if (now < endAt) {\n requestAnimationFrame(tick);\n } else {\n source.value = toVal;\n resolve();\n }\n };\n tick();\n });\n}\nfunction useTransition(source, options = {}) {\n let currentId = 0;\n const sourceVal = () => {\n const v = toValue(source);\n return typeof v === \"number\" ? v : v.map(toValue);\n };\n const outputRef = ref(sourceVal());\n watch(sourceVal, async (to) => {\n var _a, _b;\n if (toValue(options.disabled))\n return;\n const id = ++currentId;\n if (options.delay)\n await promiseTimeout(toValue(options.delay));\n if (id !== currentId)\n return;\n const toVal = Array.isArray(to) ? to.map(toValue) : toValue(to);\n (_a = options.onStarted) == null ? undefined : _a.call(options);\n await executeTransition(outputRef, outputRef.value, toVal, {\n ...options,\n abort: () => {\n var _a2;\n return id !== currentId || ((_a2 = options.abort) == null ? undefined : _a2.call(options));\n }\n });\n (_b = options.onFinished) == null ? undefined : _b.call(options);\n }, { deep: true });\n watch(() => toValue(options.disabled), (disabled) => {\n if (disabled) {\n currentId++;\n outputRef.value = sourceVal();\n }\n });\n tryOnScopeDispose(() => {\n currentId++;\n });\n return computed(() => toValue(options.disabled) ? sourceVal() : outputRef.value);\n}\n\nfunction useUrlSearchParams(mode = \"history\", options = {}) {\n const {\n initialValue = {},\n removeNullishValues = true,\n removeFalsyValues = false,\n write: enableWrite = true,\n writeMode = \"replace\",\n window = defaultWindow\n } = options;\n if (!window)\n return reactive(initialValue);\n const state = reactive({});\n function getRawParams() {\n if (mode === \"history\") {\n return window.location.search || \"\";\n } else if (mode === \"hash\") {\n const hash = window.location.hash || \"\";\n const index = hash.indexOf(\"?\");\n return index > 0 ? hash.slice(index) : \"\";\n } else {\n return (window.location.hash || \"\").replace(/^#/, \"\");\n }\n }\n function constructQuery(params) {\n const stringified = params.toString();\n if (mode === \"history\")\n return `${stringified ? `?${stringified}` : \"\"}${window.location.hash || \"\"}`;\n if (mode === \"hash-params\")\n return `${window.location.search || \"\"}${stringified ? `#${stringified}` : \"\"}`;\n const hash = window.location.hash || \"#\";\n const index = hash.indexOf(\"?\");\n if (index > 0)\n return `${window.location.search || \"\"}${hash.slice(0, index)}${stringified ? `?${stringified}` : \"\"}`;\n return `${window.location.search || \"\"}${hash}${stringified ? `?${stringified}` : \"\"}`;\n }\n function read() {\n return new URLSearchParams(getRawParams());\n }\n function updateState(params) {\n const unusedKeys = new Set(Object.keys(state));\n for (const key of params.keys()) {\n const paramsForKey = params.getAll(key);\n state[key] = paramsForKey.length > 1 ? paramsForKey : params.get(key) || \"\";\n unusedKeys.delete(key);\n }\n Array.from(unusedKeys).forEach((key) => delete state[key]);\n }\n const { pause, resume } = pausableWatch(\n state,\n () => {\n const params = new URLSearchParams(\"\");\n Object.keys(state).forEach((key) => {\n const mapEntry = state[key];\n if (Array.isArray(mapEntry))\n mapEntry.forEach((value) => params.append(key, value));\n else if (removeNullishValues && mapEntry == null)\n params.delete(key);\n else if (removeFalsyValues && !mapEntry)\n params.delete(key);\n else\n params.set(key, mapEntry);\n });\n write(params, false);\n },\n { deep: true }\n );\n function write(params, shouldUpdate) {\n pause();\n if (shouldUpdate)\n updateState(params);\n if (writeMode === \"replace\") {\n window.history.replaceState(\n window.history.state,\n window.document.title,\n window.location.pathname + constructQuery(params)\n );\n } else {\n window.history.pushState(\n window.history.state,\n window.document.title,\n window.location.pathname + constructQuery(params)\n );\n }\n resume();\n }\n function onChanged() {\n if (!enableWrite)\n return;\n write(read(), true);\n }\n const listenerOptions = { passive: true };\n useEventListener(window, \"popstate\", onChanged, listenerOptions);\n if (mode !== \"history\")\n useEventListener(window, \"hashchange\", onChanged, listenerOptions);\n const initial = read();\n if (initial.keys().next().value)\n updateState(initial);\n else\n Object.assign(state, initialValue);\n return state;\n}\n\nfunction useUserMedia(options = {}) {\n var _a, _b;\n const enabled = ref((_a = options.enabled) != null ? _a : false);\n const autoSwitch = ref((_b = options.autoSwitch) != null ? _b : true);\n const constraints = ref(options.constraints);\n const { navigator = defaultNavigator } = options;\n const isSupported = useSupported(() => {\n var _a2;\n return (_a2 = navigator == null ? undefined : navigator.mediaDevices) == null ? undefined : _a2.getUserMedia;\n });\n const stream = shallowRef();\n function getDeviceOptions(type) {\n switch (type) {\n case \"video\": {\n if (constraints.value)\n return constraints.value.video || false;\n break;\n }\n case \"audio\": {\n if (constraints.value)\n return constraints.value.audio || false;\n break;\n }\n }\n }\n async function _start() {\n if (!isSupported.value || stream.value)\n return;\n stream.value = await navigator.mediaDevices.getUserMedia({\n video: getDeviceOptions(\"video\"),\n audio: getDeviceOptions(\"audio\")\n });\n return stream.value;\n }\n function _stop() {\n var _a2;\n (_a2 = stream.value) == null ? undefined : _a2.getTracks().forEach((t) => t.stop());\n stream.value = undefined;\n }\n function stop() {\n _stop();\n enabled.value = false;\n }\n async function start() {\n await _start();\n if (stream.value)\n enabled.value = true;\n return stream.value;\n }\n async function restart() {\n _stop();\n return await start();\n }\n watch(\n enabled,\n (v) => {\n if (v)\n _start();\n else _stop();\n },\n { immediate: true }\n );\n watch(\n constraints,\n () => {\n if (autoSwitch.value && stream.value)\n restart();\n },\n { immediate: true }\n );\n tryOnScopeDispose(() => {\n stop();\n });\n return {\n isSupported,\n stream,\n start,\n stop,\n restart,\n constraints,\n enabled,\n autoSwitch\n };\n}\n\nfunction useVModel(props, key, emit, options = {}) {\n var _a, _b, _c;\n const {\n clone = false,\n passive = false,\n eventName,\n deep = false,\n defaultValue,\n shouldEmit\n } = options;\n const vm = getCurrentInstance();\n const _emit = emit || (vm == null ? undefined : vm.emit) || ((_a = vm == null ? undefined : vm.$emit) == null ? undefined : _a.bind(vm)) || ((_c = (_b = vm == null ? undefined : vm.proxy) == null ? undefined : _b.$emit) == null ? undefined : _c.bind(vm == null ? undefined : vm.proxy));\n let event = eventName;\n if (!key) {\n key = \"modelValue\";\n }\n event = event || `update:${key.toString()}`;\n const cloneFn = (val) => !clone ? val : typeof clone === \"function\" ? clone(val) : cloneFnJSON(val);\n const getValue = () => isDef(props[key]) ? cloneFn(props[key]) : defaultValue;\n const triggerEmit = (value) => {\n if (shouldEmit) {\n if (shouldEmit(value))\n _emit(event, value);\n } else {\n _emit(event, value);\n }\n };\n if (passive) {\n const initialValue = getValue();\n const proxy = ref(initialValue);\n let isUpdating = false;\n watch(\n () => props[key],\n (v) => {\n if (!isUpdating) {\n isUpdating = true;\n proxy.value = cloneFn(v);\n nextTick(() => isUpdating = false);\n }\n }\n );\n watch(\n proxy,\n (v) => {\n if (!isUpdating && (v !== props[key] || deep))\n triggerEmit(v);\n },\n { deep }\n );\n return proxy;\n } else {\n return computed({\n get() {\n return getValue();\n },\n set(value) {\n triggerEmit(value);\n }\n });\n }\n}\n\nfunction useVModels(props, emit, options = {}) {\n const ret = {};\n for (const key in props) {\n ret[key] = useVModel(\n props,\n key,\n emit,\n options\n );\n }\n return ret;\n}\n\nfunction useVibrate(options) {\n const {\n pattern = [],\n interval = 0,\n navigator = defaultNavigator\n } = options || {};\n const isSupported = useSupported(() => typeof navigator !== \"undefined\" && \"vibrate\" in navigator);\n const patternRef = toRef(pattern);\n let intervalControls;\n const vibrate = (pattern2 = patternRef.value) => {\n if (isSupported.value)\n navigator.vibrate(pattern2);\n };\n const stop = () => {\n if (isSupported.value)\n navigator.vibrate(0);\n intervalControls == null ? undefined : intervalControls.pause();\n };\n if (interval > 0) {\n intervalControls = useIntervalFn(\n vibrate,\n interval,\n {\n immediate: false,\n immediateCallback: false\n }\n );\n }\n return {\n isSupported,\n pattern,\n intervalControls,\n vibrate,\n stop\n };\n}\n\nfunction useVirtualList(list, options) {\n const { containerStyle, wrapperProps, scrollTo, calculateRange, currentList, containerRef } = \"itemHeight\" in options ? useVerticalVirtualList(options, list) : useHorizontalVirtualList(options, list);\n return {\n list: currentList,\n scrollTo,\n containerProps: {\n ref: containerRef,\n onScroll: () => {\n calculateRange();\n },\n style: containerStyle\n },\n wrapperProps\n };\n}\nfunction useVirtualListResources(list) {\n const containerRef = ref(null);\n const size = useElementSize(containerRef);\n const currentList = ref([]);\n const source = shallowRef(list);\n const state = ref({ start: 0, end: 10 });\n return { state, source, currentList, size, containerRef };\n}\nfunction createGetViewCapacity(state, source, itemSize) {\n return (containerSize) => {\n if (typeof itemSize === \"number\")\n return Math.ceil(containerSize / itemSize);\n const { start = 0 } = state.value;\n let sum = 0;\n let capacity = 0;\n for (let i = start; i < source.value.length; i++) {\n const size = itemSize(i);\n sum += size;\n capacity = i;\n if (sum > containerSize)\n break;\n }\n return capacity - start;\n };\n}\nfunction createGetOffset(source, itemSize) {\n return (scrollDirection) => {\n if (typeof itemSize === \"number\")\n return Math.floor(scrollDirection / itemSize) + 1;\n let sum = 0;\n let offset = 0;\n for (let i = 0; i < source.value.length; i++) {\n const size = itemSize(i);\n sum += size;\n if (sum >= scrollDirection) {\n offset = i;\n break;\n }\n }\n return offset + 1;\n };\n}\nfunction createCalculateRange(type, overscan, getOffset, getViewCapacity, { containerRef, state, currentList, source }) {\n return () => {\n const element = containerRef.value;\n if (element) {\n const offset = getOffset(type === \"vertical\" ? element.scrollTop : element.scrollLeft);\n const viewCapacity = getViewCapacity(type === \"vertical\" ? element.clientHeight : element.clientWidth);\n const from = offset - overscan;\n const to = offset + viewCapacity + overscan;\n state.value = {\n start: from < 0 ? 0 : from,\n end: to > source.value.length ? source.value.length : to\n };\n currentList.value = source.value.slice(state.value.start, state.value.end).map((ele, index) => ({\n data: ele,\n index: index + state.value.start\n }));\n }\n };\n}\nfunction createGetDistance(itemSize, source) {\n return (index) => {\n if (typeof itemSize === \"number\") {\n const size2 = index * itemSize;\n return size2;\n }\n const size = source.value.slice(0, index).reduce((sum, _, i) => sum + itemSize(i), 0);\n return size;\n };\n}\nfunction useWatchForSizes(size, list, containerRef, calculateRange) {\n watch([size.width, size.height, list, containerRef], () => {\n calculateRange();\n });\n}\nfunction createComputedTotalSize(itemSize, source) {\n return computed(() => {\n if (typeof itemSize === \"number\")\n return source.value.length * itemSize;\n return source.value.reduce((sum, _, index) => sum + itemSize(index), 0);\n });\n}\nconst scrollToDictionaryForElementScrollKey = {\n horizontal: \"scrollLeft\",\n vertical: \"scrollTop\"\n};\nfunction createScrollTo(type, calculateRange, getDistance, containerRef) {\n return (index) => {\n if (containerRef.value) {\n containerRef.value[scrollToDictionaryForElementScrollKey[type]] = getDistance(index);\n calculateRange();\n }\n };\n}\nfunction useHorizontalVirtualList(options, list) {\n const resources = useVirtualListResources(list);\n const { state, source, currentList, size, containerRef } = resources;\n const containerStyle = { overflowX: \"auto\" };\n const { itemWidth, overscan = 5 } = options;\n const getViewCapacity = createGetViewCapacity(state, source, itemWidth);\n const getOffset = createGetOffset(source, itemWidth);\n const calculateRange = createCalculateRange(\"horizontal\", overscan, getOffset, getViewCapacity, resources);\n const getDistanceLeft = createGetDistance(itemWidth, source);\n const offsetLeft = computed(() => getDistanceLeft(state.value.start));\n const totalWidth = createComputedTotalSize(itemWidth, source);\n useWatchForSizes(size, list, containerRef, calculateRange);\n const scrollTo = createScrollTo(\"horizontal\", calculateRange, getDistanceLeft, containerRef);\n const wrapperProps = computed(() => {\n return {\n style: {\n height: \"100%\",\n width: `${totalWidth.value - offsetLeft.value}px`,\n marginLeft: `${offsetLeft.value}px`,\n display: \"flex\"\n }\n };\n });\n return {\n scrollTo,\n calculateRange,\n wrapperProps,\n containerStyle,\n currentList,\n containerRef\n };\n}\nfunction useVerticalVirtualList(options, list) {\n const resources = useVirtualListResources(list);\n const { state, source, currentList, size, containerRef } = resources;\n const containerStyle = { overflowY: \"auto\" };\n const { itemHeight, overscan = 5 } = options;\n const getViewCapacity = createGetViewCapacity(state, source, itemHeight);\n const getOffset = createGetOffset(source, itemHeight);\n const calculateRange = createCalculateRange(\"vertical\", overscan, getOffset, getViewCapacity, resources);\n const getDistanceTop = createGetDistance(itemHeight, source);\n const offsetTop = computed(() => getDistanceTop(state.value.start));\n const totalHeight = createComputedTotalSize(itemHeight, source);\n useWatchForSizes(size, list, containerRef, calculateRange);\n const scrollTo = createScrollTo(\"vertical\", calculateRange, getDistanceTop, containerRef);\n const wrapperProps = computed(() => {\n return {\n style: {\n width: \"100%\",\n height: `${totalHeight.value - offsetTop.value}px`,\n marginTop: `${offsetTop.value}px`\n }\n };\n });\n return {\n calculateRange,\n scrollTo,\n containerStyle,\n wrapperProps,\n currentList,\n containerRef\n };\n}\n\nfunction useWakeLock(options = {}) {\n const {\n navigator = defaultNavigator,\n document = defaultDocument\n } = options;\n const requestedType = ref(false);\n const sentinel = shallowRef(null);\n const documentVisibility = useDocumentVisibility({ document });\n const isSupported = useSupported(() => navigator && \"wakeLock\" in navigator);\n const isActive = computed(() => !!sentinel.value && documentVisibility.value === \"visible\");\n if (isSupported.value) {\n useEventListener(sentinel, \"release\", () => {\n var _a, _b;\n requestedType.value = (_b = (_a = sentinel.value) == null ? undefined : _a.type) != null ? _b : false;\n }, { passive: true });\n whenever(\n () => documentVisibility.value === \"visible\" && (document == null ? undefined : document.visibilityState) === \"visible\" && requestedType.value,\n (type) => {\n requestedType.value = false;\n forceRequest(type);\n }\n );\n }\n async function forceRequest(type) {\n var _a;\n await ((_a = sentinel.value) == null ? undefined : _a.release());\n sentinel.value = isSupported.value ? await navigator.wakeLock.request(type) : null;\n }\n async function request(type) {\n if (documentVisibility.value === \"visible\")\n await forceRequest(type);\n else\n requestedType.value = type;\n }\n async function release() {\n requestedType.value = false;\n const s = sentinel.value;\n sentinel.value = null;\n await (s == null ? undefined : s.release());\n }\n return {\n sentinel,\n isSupported,\n isActive,\n request,\n forceRequest,\n release\n };\n}\n\nfunction useWebNotification(options = {}) {\n const {\n window = defaultWindow,\n requestPermissions: _requestForPermissions = true\n } = options;\n const defaultWebNotificationOptions = options;\n const isSupported = useSupported(() => {\n if (!window || !(\"Notification\" in window))\n return false;\n if (Notification.permission === \"granted\")\n return true;\n try {\n const notification2 = new Notification(\"\");\n notification2.onshow = () => {\n notification2.close();\n };\n } catch (e) {\n if (e.name === \"TypeError\")\n return false;\n }\n return true;\n });\n const permissionGranted = ref(isSupported.value && \"permission\" in Notification && Notification.permission === \"granted\");\n const notification = ref(null);\n const ensurePermissions = async () => {\n if (!isSupported.value)\n return;\n if (!permissionGranted.value && Notification.permission !== \"denied\") {\n const result = await Notification.requestPermission();\n if (result === \"granted\")\n permissionGranted.value = true;\n }\n return permissionGranted.value;\n };\n const { on: onClick, trigger: clickTrigger } = createEventHook();\n const { on: onShow, trigger: showTrigger } = createEventHook();\n const { on: onError, trigger: errorTrigger } = createEventHook();\n const { on: onClose, trigger: closeTrigger } = createEventHook();\n const show = async (overrides) => {\n if (!isSupported.value || !permissionGranted.value)\n return;\n const options2 = Object.assign({}, defaultWebNotificationOptions, overrides);\n notification.value = new Notification(options2.title || \"\", options2);\n notification.value.onclick = clickTrigger;\n notification.value.onshow = showTrigger;\n notification.value.onerror = errorTrigger;\n notification.value.onclose = closeTrigger;\n return notification.value;\n };\n const close = () => {\n if (notification.value)\n notification.value.close();\n notification.value = null;\n };\n if (_requestForPermissions)\n tryOnMounted(ensurePermissions);\n tryOnScopeDispose(close);\n if (isSupported.value && window) {\n const document = window.document;\n useEventListener(document, \"visibilitychange\", (e) => {\n e.preventDefault();\n if (document.visibilityState === \"visible\") {\n close();\n }\n });\n }\n return {\n isSupported,\n notification,\n ensurePermissions,\n permissionGranted,\n show,\n close,\n onClick,\n onShow,\n onError,\n onClose\n };\n}\n\nconst DEFAULT_PING_MESSAGE = \"ping\";\nfunction resolveNestedOptions(options) {\n if (options === true)\n return {};\n return options;\n}\nfunction useWebSocket(url, options = {}) {\n const {\n onConnected,\n onDisconnected,\n onError,\n onMessage,\n immediate = true,\n autoConnect = true,\n autoClose = true,\n protocols = []\n } = options;\n const data = ref(null);\n const status = ref(\"CLOSED\");\n const wsRef = ref();\n const urlRef = toRef(url);\n let heartbeatPause;\n let heartbeatResume;\n let explicitlyClosed = false;\n let retried = 0;\n let bufferedData = [];\n let retryTimeout;\n let pongTimeoutWait;\n const _sendBuffer = () => {\n if (bufferedData.length && wsRef.value && status.value === \"OPEN\") {\n for (const buffer of bufferedData)\n wsRef.value.send(buffer);\n bufferedData = [];\n }\n };\n const resetRetry = () => {\n if (retryTimeout != null) {\n clearTimeout(retryTimeout);\n retryTimeout = undefined;\n }\n };\n const resetHeartbeat = () => {\n clearTimeout(pongTimeoutWait);\n pongTimeoutWait = undefined;\n };\n const close = (code = 1e3, reason) => {\n resetRetry();\n if (!isClient && !isWorker || !wsRef.value)\n return;\n explicitlyClosed = true;\n resetHeartbeat();\n heartbeatPause == null ? undefined : heartbeatPause();\n wsRef.value.close(code, reason);\n wsRef.value = undefined;\n };\n const send = (data2, useBuffer = true) => {\n if (!wsRef.value || status.value !== \"OPEN\") {\n if (useBuffer)\n bufferedData.push(data2);\n return false;\n }\n _sendBuffer();\n wsRef.value.send(data2);\n return true;\n };\n const _init = () => {\n if (explicitlyClosed || typeof urlRef.value === \"undefined\")\n return;\n const ws = new WebSocket(urlRef.value, protocols);\n wsRef.value = ws;\n status.value = \"CONNECTING\";\n ws.onopen = () => {\n status.value = \"OPEN\";\n retried = 0;\n onConnected == null ? undefined : onConnected(ws);\n heartbeatResume == null ? undefined : heartbeatResume();\n _sendBuffer();\n };\n ws.onclose = (ev) => {\n status.value = \"CLOSED\";\n onDisconnected == null ? undefined : onDisconnected(ws, ev);\n if (!explicitlyClosed && options.autoReconnect && (wsRef.value == null || ws === wsRef.value)) {\n const {\n retries = -1,\n delay = 1e3,\n onFailed\n } = resolveNestedOptions(options.autoReconnect);\n if (typeof retries === \"number\" && (retries < 0 || retried < retries)) {\n retried += 1;\n retryTimeout = setTimeout(_init, delay);\n } else if (typeof retries === \"function\" && retries()) {\n retryTimeout = setTimeout(_init, delay);\n } else {\n onFailed == null ? undefined : onFailed();\n }\n }\n };\n ws.onerror = (e) => {\n onError == null ? undefined : onError(ws, e);\n };\n ws.onmessage = (e) => {\n if (options.heartbeat) {\n resetHeartbeat();\n const {\n message = DEFAULT_PING_MESSAGE,\n responseMessage = message\n } = resolveNestedOptions(options.heartbeat);\n if (e.data === toValue(responseMessage))\n return;\n }\n data.value = e.data;\n onMessage == null ? undefined : onMessage(ws, e);\n };\n };\n if (options.heartbeat) {\n const {\n message = DEFAULT_PING_MESSAGE,\n interval = 1e3,\n pongTimeout = 1e3\n } = resolveNestedOptions(options.heartbeat);\n const { pause, resume } = useIntervalFn(\n () => {\n send(toValue(message), false);\n if (pongTimeoutWait != null)\n return;\n pongTimeoutWait = setTimeout(() => {\n close();\n explicitlyClosed = false;\n }, pongTimeout);\n },\n interval,\n { immediate: false }\n );\n heartbeatPause = pause;\n heartbeatResume = resume;\n }\n if (autoClose) {\n if (isClient)\n useEventListener(\"beforeunload\", () => close(), { passive: true });\n tryOnScopeDispose(close);\n }\n const open = () => {\n if (!isClient && !isWorker)\n return;\n close();\n explicitlyClosed = false;\n retried = 0;\n _init();\n };\n if (immediate)\n open();\n if (autoConnect)\n watch(urlRef, open);\n return {\n data,\n status,\n close,\n send,\n open,\n ws: wsRef\n };\n}\n\nfunction useWebWorker(arg0, workerOptions, options) {\n const {\n window = defaultWindow\n } = options != null ? options : {};\n const data = ref(null);\n const worker = shallowRef();\n const post = (...args) => {\n if (!worker.value)\n return;\n worker.value.postMessage(...args);\n };\n const terminate = function terminate2() {\n if (!worker.value)\n return;\n worker.value.terminate();\n };\n if (window) {\n if (typeof arg0 === \"string\")\n worker.value = new Worker(arg0, workerOptions);\n else if (typeof arg0 === \"function\")\n worker.value = arg0();\n else\n worker.value = arg0;\n worker.value.onmessage = (e) => {\n data.value = e.data;\n };\n tryOnScopeDispose(() => {\n if (worker.value)\n worker.value.terminate();\n });\n }\n return {\n data,\n post,\n terminate,\n worker\n };\n}\n\nfunction depsParser(deps, localDeps) {\n if (deps.length === 0 && localDeps.length === 0)\n return \"\";\n const depsString = deps.map((dep) => `'${dep}'`).toString();\n const depsFunctionString = localDeps.filter((dep) => typeof dep === \"function\").map((fn) => {\n const str = fn.toString();\n if (str.trim().startsWith(\"function\")) {\n return str;\n } else {\n const name = fn.name;\n return `const ${name} = ${str}`;\n }\n }).join(\";\");\n const importString = `importScripts(${depsString});`;\n return `${depsString.trim() === \"\" ? \"\" : importString} ${depsFunctionString}`;\n}\n\nfunction jobRunner(userFunc) {\n return (e) => {\n const userFuncArgs = e.data[0];\n return Promise.resolve(userFunc.apply(undefined, userFuncArgs)).then((result) => {\n postMessage([\"SUCCESS\", result]);\n }).catch((error) => {\n postMessage([\"ERROR\", error]);\n });\n };\n}\n\nfunction createWorkerBlobUrl(fn, deps, localDeps) {\n const blobCode = `${depsParser(deps, localDeps)}; onmessage=(${jobRunner})(${fn})`;\n const blob = new Blob([blobCode], { type: \"text/javascript\" });\n const url = URL.createObjectURL(blob);\n return url;\n}\n\nfunction useWebWorkerFn(fn, options = {}) {\n const {\n dependencies = [],\n localDependencies = [],\n timeout,\n window = defaultWindow\n } = options;\n const worker = ref();\n const workerStatus = ref(\"PENDING\");\n const promise = ref({});\n const timeoutId = ref();\n const workerTerminate = (status = \"PENDING\") => {\n if (worker.value && worker.value._url && window) {\n worker.value.terminate();\n URL.revokeObjectURL(worker.value._url);\n promise.value = {};\n worker.value = undefined;\n window.clearTimeout(timeoutId.value);\n workerStatus.value = status;\n }\n };\n workerTerminate();\n tryOnScopeDispose(workerTerminate);\n const generateWorker = () => {\n const blobUrl = createWorkerBlobUrl(fn, dependencies, localDependencies);\n const newWorker = new Worker(blobUrl);\n newWorker._url = blobUrl;\n newWorker.onmessage = (e) => {\n const { resolve = () => {\n }, reject = () => {\n } } = promise.value;\n const [status, result] = e.data;\n switch (status) {\n case \"SUCCESS\":\n resolve(result);\n workerTerminate(status);\n break;\n default:\n reject(result);\n workerTerminate(\"ERROR\");\n break;\n }\n };\n newWorker.onerror = (e) => {\n const { reject = () => {\n } } = promise.value;\n e.preventDefault();\n reject(e);\n workerTerminate(\"ERROR\");\n };\n if (timeout) {\n timeoutId.value = setTimeout(\n () => workerTerminate(\"TIMEOUT_EXPIRED\"),\n timeout\n );\n }\n return newWorker;\n };\n const callWorker = (...fnArgs) => new Promise((resolve, reject) => {\n var _a;\n promise.value = {\n resolve,\n reject\n };\n (_a = worker.value) == null ? undefined : _a.postMessage([[...fnArgs]]);\n workerStatus.value = \"RUNNING\";\n });\n const workerFn = (...fnArgs) => {\n if (workerStatus.value === \"RUNNING\") {\n console.error(\n \"[useWebWorkerFn] You can only run one instance of the worker at a time.\"\n );\n return Promise.reject();\n }\n worker.value = generateWorker();\n return callWorker(...fnArgs);\n };\n return {\n workerFn,\n workerStatus,\n workerTerminate\n };\n}\n\nfunction useWindowFocus(options = {}) {\n const { window = defaultWindow } = options;\n if (!window)\n return ref(false);\n const focused = ref(window.document.hasFocus());\n const listenerOptions = { passive: true };\n useEventListener(window, \"blur\", () => {\n focused.value = false;\n }, listenerOptions);\n useEventListener(window, \"focus\", () => {\n focused.value = true;\n }, listenerOptions);\n return focused;\n}\n\nfunction useWindowScroll(options = {}) {\n const { window = defaultWindow, ...rest } = options;\n return useScroll(window, rest);\n}\n\nfunction useWindowSize(options = {}) {\n const {\n window = defaultWindow,\n initialWidth = Number.POSITIVE_INFINITY,\n initialHeight = Number.POSITIVE_INFINITY,\n listenOrientation = true,\n includeScrollbar = true,\n type = \"inner\"\n } = options;\n const width = ref(initialWidth);\n const height = ref(initialHeight);\n const update = () => {\n if (window) {\n if (type === \"outer\") {\n width.value = window.outerWidth;\n height.value = window.outerHeight;\n } else if (type === \"visual\" && window.visualViewport) {\n const { width: visualViewportWidth, height: visualViewportHeight, scale } = window.visualViewport;\n width.value = Math.round(visualViewportWidth * scale);\n height.value = Math.round(visualViewportHeight * scale);\n } else if (includeScrollbar) {\n width.value = window.innerWidth;\n height.value = window.innerHeight;\n } else {\n width.value = window.document.documentElement.clientWidth;\n height.value = window.document.documentElement.clientHeight;\n }\n }\n };\n update();\n tryOnMounted(update);\n const listenerOptions = { passive: true };\n useEventListener(\"resize\", update, listenerOptions);\n if (window && type === \"visual\" && window.visualViewport) {\n useEventListener(window.visualViewport, \"resize\", update, listenerOptions);\n }\n if (listenOrientation) {\n const matches = useMediaQuery(\"(orientation: portrait)\");\n watch(matches, () => update());\n }\n return { width, height };\n}\n\nexport { DefaultMagicKeysAliasMap, StorageSerializers, TransitionPresets, computedAsync as asyncComputed, breakpointsAntDesign, breakpointsBootstrapV5, breakpointsElement, breakpointsMasterCss, breakpointsPrimeFlex, breakpointsQuasar, breakpointsSematic, breakpointsTailwind, breakpointsVuetify, breakpointsVuetifyV2, breakpointsVuetifyV3, cloneFnJSON, computedAsync, computedInject, createFetch, createReusableTemplate, createTemplatePromise, createUnrefFn, customStorageEventName, defaultDocument, defaultLocation, defaultNavigator, defaultWindow, executeTransition, formatTimeAgo, getSSRHandler, mapGamepadToXbox360Controller, onClickOutside, onElementRemoval, onKeyDown, onKeyPressed, onKeyStroke, onKeyUp, onLongPress, onStartTyping, provideSSRWidth, setSSRHandler, templateRef, unrefElement, useActiveElement, useAnimate, useAsyncQueue, useAsyncState, useBase64, useBattery, useBluetooth, useBreakpoints, useBroadcastChannel, useBrowserLocation, useCached, useClipboard, useClipboardItems, useCloned, useColorMode, useConfirmDialog, useCssVar, useCurrentElement, useCycleList, useDark, useDebouncedRefHistory, useDeviceMotion, useDeviceOrientation, useDevicePixelRatio, useDevicesList, useDisplayMedia, useDocumentVisibility, useDraggable, useDropZone, useElementBounding, useElementByPoint, useElementHover, useElementSize, useElementVisibility, useEventBus, useEventListener, useEventSource, useEyeDropper, useFavicon, useFetch, useFileDialog, useFileSystemAccess, useFocus, useFocusWithin, useFps, useFullscreen, useGamepad, useGeolocation, useIdle, useImage, useInfiniteScroll, useIntersectionObserver, useKeyModifier, useLocalStorage, useMagicKeys, useManualRefHistory, useMediaControls, useMediaQuery, useMemoize, useMemory, useMounted, useMouse, useMouseInElement, useMousePressed, useMutationObserver, useNavigatorLanguage, useNetwork, useNow, useObjectUrl, useOffsetPagination, useOnline, usePageLeave, useParallax, useParentElement, usePerformanceObserver, usePermission, usePointer, usePointerLock, usePointerSwipe, usePreferredColorScheme, usePreferredContrast, usePreferredDark, usePreferredLanguages, usePreferredReducedMotion, usePreferredReducedTransparency, usePrevious, useRafFn, useRefHistory, useResizeObserver, useSSRWidth, useScreenOrientation, useScreenSafeArea, useScriptTag, useScroll, useScrollLock, useSessionStorage, useShare, useSorted, useSpeechRecognition, useSpeechSynthesis, useStepper, useStorage, useStorageAsync, useStyleTag, useSupported, useSwipe, useTemplateRefsList, useTextDirection, useTextSelection, useTextareaAutosize, useThrottledRefHistory, useTimeAgo, useTimeoutPoll, useTimestamp, useTitle, useTransition, useUrlSearchParams, useUserMedia, useVModel, useVModels, useVibrate, useVirtualList, useWakeLock, useWebNotification, useWebSocket, useWebWorker, useWebWorkerFn, useWindowFocus, useWindowScroll, useWindowSize };\n","<script lang=\"ts\" setup>\nimport { createComponentSpace } from '../../utils';\n\nconst props = defineProps<{\n visible: boolean;\n}>();\nconst emits = defineEmits<{\n ok: [e: Event, pausationValue: number];\n}>();\n\nconst [bem] = createComponentSpace('pausation-tag-selector');\n\nconst pausationOptions = [\n { label: '0.5S', value: 0.5 },\n { label: '1S', value: 1 },\n { label: '1.5S', value: 1.5 },\n { label: '2S', value: 2 },\n { label: '2.5S', value: 2.5 },\n];\n</script>\n\n<template>\n <ul v-show=\"props.visible\" :class=\"bem()\" contenteditable=\"false\" @click.stop>\n <li\n v-for=\"(pausationItem, index) in pausationOptions\"\n :key=\"index\"\n :class=\"bem('item')\"\n @click=\"emits('ok', $event, pausationItem.value)\"\n >\n {{ pausationItem.label }}\n </li>\n </ul>\n</template>\n\n<style lang=\"less\" scoped>\n.c {\n &-pausation-tag-selector {\n background: #fff;\n box-shadow: 0px 4px 8px 0px rgba(0, 0, 0, 0.1);\n border-radius: 8px;\n border: 1px solid #f6f6f6;\n color: var(--color-text-2);\n\n &__item {\n line-height: 40px;\n text-indent: 12px;\n font-size: 14px;\n color: var(--color-text-2);\n cursor: pointer;\n\n &:hover {\n background-color: rgba(var(--primary-6), 0.1);\n color: rgba(var(--primary-6));\n }\n }\n }\n}\n</style>\n","import { VNodeTypes, createVNode, render } from 'vue';\nimport { useMouse } from '@vueuse/core';\nimport { Message } from '@arco-design/web-vue';\n\nimport { IEditorCore, PluginFlag } from '../../typings';\nimport { IPlugin } from '../../typings/actions/i-plugin';\nimport { ModalReturn as _ModalReturn } from '../../typings/actions/i-modal';\nimport {\n createTagSpace,\n findParent,\n getOverlay,\n isNullable,\n setAttributesAndData,\n spellingTextNode,\n} from '../../utils';\nimport Pausationor from './pausationor.vue';\n\nconst RENDERED_TAG_COUNT = 0;\nconst FLAG = PluginFlag.pausation;\nconst [bem] = createTagSpace(FLAG);\nconst CLOSE_CLS = bem('close');\nconst { x, y } = useMouse();\n\nconst svgHTMLTemplate = `<svg class=\"${CLOSE_CLS}\" width=\"18px\" height=\"18px\" viewBox=\"0 0 18 18\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <g id=\"V1.0\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"虚拟精品录音间-插入停顿\" transform=\"translate(-1287, -152)\" fill=\"currentColor\" fill-rule=\"nonzero\">\n <g id=\"编组-4备份-4\" transform=\"translate(1227, 149)\">\n <g id=\"icon/关闭小\" transform=\"translate(60, 3)\">\n <rect id=\"矩形\" opacity=\"0\" x=\"0\" y=\"0\" width=\"18\" height=\"18\"></rect>\n <path d=\"M9,1 C13.4182222,1 17,4.58177778 17,9 C17,13.4182222 13.4182222,17 9,17 C4.58177778,17 1,13.4182222 1,9 C1,4.58177778 4.58177778,1 9,1 Z M9,8.05777778 L7.11462221,6.17204445 C6.85423837,5.91161152 6.43203295,5.91157171 6.17160001,6.17195555 C6.17158519,6.17197037 6.17157037,6.17198518 6.17155556,6.172 C5.91119626,6.43235929 5.91119626,6.85448511 6.17155556,7.11484441 C6.1716,7.11488885 6.17164445,7.11493329 6.17168891,7.11497772 L8.05777778,9 L8.05777778,9 L6.17204445,10.8853778 C5.91161152,11.1457616 5.91157171,11.567967 6.17195555,11.8284 C6.17197037,11.8284148 6.17198518,11.8284296 6.172,11.8284444 C6.43235929,12.0888037 6.85448511,12.0888037 7.11484441,11.8284444 C7.11488885,11.8284 7.11493329,11.8283555 7.11497772,11.8283111 L9,9.94222222 L9,9.94222222 L10.8853778,11.8279555 C11.1457616,12.0883885 11.567967,12.0884283 11.8284,11.8280445 C11.8284148,11.8280296 11.8284296,11.8280148 11.8284444,11.828 C12.0888037,11.5676407 12.0888037,11.1455149 11.8284444,10.8851556 C11.8284,10.8851111 11.8283555,10.8850667 11.8283111,10.8850223 L9.94222222,9 L9.94222222,9 L11.8279555,7.11462221 C12.0883885,6.85423837 12.0884283,6.43203295 11.8280445,6.17160001 C11.8280296,6.17158519 11.8280148,6.17157037 11.828,6.17155556 C11.5676407,5.91119626 11.1455149,5.91119626 10.8851556,6.17155556 C10.8851111,6.1716 10.8850667,6.17164445 10.8850223,6.17168891 L9,8.05777778 L9,8.05777778 Z\" id=\"形状\"></path>\n </g>\n </g>\n </g>\n </g>\n</svg>`;\n\ninterface ModalResult {\n visible?: boolean;\n popupContainer?: HTMLElement;\n extraPos?: {\n top: number;\n left: number;\n };\n}\n\ntype ModalReturn = _ModalReturn<ModalResult>;\n\nconst createPausationTag = (delay: number) => {\n const tag = document.createElement('span');\n\n setAttributesAndData(\n tag,\n { class: bem(), contenteditable: false },\n {\n type: FLAG,\n id: `${FLAG}_${RENDERED_TAG_COUNT}`,\n value: delay,\n },\n `\n <span class=\"${bem('text')}\">停顿: ${delay}S</span>\n ${svgHTMLTemplate}\n `\n );\n\n return tag;\n};\n\nconst createModal = (\n type: VNodeTypes,\n props: { onOK?: (e: Event, value: number) => void }\n): ModalReturn => {\n const container = getOverlay(PluginFlag.pausation);\n const { onOK } = props;\n\n const handleOk = (e: Event, value: number) => {\n onOK?.(e, value);\n handleClose();\n };\n const handleClose = () => {\n if (vm.component) {\n vm.component.props.visible = false;\n }\n };\n const handleUpdate = (config: ModalResult & { popupContainer?: HTMLElement }) => {\n if (vm.component) {\n let top = y.value;\n let left = x.value;\n\n if (config.popupContainer) {\n const { offsetTop, offsetLeft, offsetHeight, offsetWidth } = config.popupContainer;\n\n top = offsetTop + offsetHeight + 5 + (config.extraPos?.top ?? 0);\n left = offsetLeft - (88 - offsetWidth) / 2 + (config.extraPos?.left ?? 0);\n }\n container.setAttribute('style', `top: ${top}px; left: ${left}px`);\n Object.entries(config).forEach(([key, value]) => {\n vm.component!.props[key] = value;\n });\n }\n };\n\n const defualtConfig = {\n visible: false,\n\n onOk: handleOk,\n };\n\n const vm = createVNode(type, defualtConfig);\n render(vm, container);\n document.body.appendChild(container);\n\n return {\n target: undefined,\n\n close: handleClose,\n update: handleUpdate,\n };\n};\n\nexport class PausationTagPlugin<\n T extends { delay: number } = { delay: number },\n D extends any = any\n> extends IPlugin<T, D> {\n private editor: IEditorCore;\n\n private modalInstance: ModalReturn | null;\n\n name: string;\n\n prefix: string;\n\n data: D;\n\n constructor(editor: IEditorCore) {\n super();\n this.editor = editor;\n this.name = `tiny-peony-plugin__${FLAG}-tag`;\n this.prefix = FLAG;\n this.modalInstance = null;\n this.data = [] as unknown as D;\n\n this._triggerPausationTagClick = this._triggerPausationTagClick.bind(this);\n\n document.body.addEventListener('click', this._triggerPausationTagClick);\n }\n\n // 插件内容生效\n add(options: T) {\n this._insertPausationTag(options.delay);\n }\n\n // 插件内容移除\n remove(target: HTMLSpanElement) {\n spellingTextNode(target, '', true);\n }\n\n /**\n * 光标处插入停顿标签\n * @param delay 停顿时长,单位 `s`\n */\n private _insertPausationTag(delay: number) {\n if (!this.editor.content.calcTextCount()) {\n Message.warning('请输入文稿内容再插入停顿!');\n return;\n }\n const tag = createPausationTag(delay);\n\n this.editor.content.insert(tag);\n }\n\n /**\n * 停顿标签点击事件回调\n * @param evt Event对象\n */\n private _triggerPausationTagClick(evt: MouseEvent) {\n const target = evt.target as HTMLElement;\n const [closeTag] = findParent(\n target,\n (elm) => elm.tagName === 'svg' && elm.classList.contains(CLOSE_CLS)\n );\n const [pausationTag] = findParent(\n target,\n (elm) => elm.tagName === 'SPAN' && elm.dataset.type === FLAG\n );\n\n if (closeTag || isNullable(pausationTag)) {\n closeTag && this.remove(pausationTag!);\n this.modalInstance?.close();\n return;\n }\n\n if (isNullable(this.modalInstance)) {\n const handleOk = (e: Event, value: number) => {\n if (isNullable(this.modalInstance) || isNullable(this.modalInstance?.target)) return;\n\n const { target } = this.modalInstance;\n\n target.dataset.value = String(value);\n (target.firstElementChild as HTMLSpanElement).innerHTML = `停顿: ${value}S`;\n };\n\n this.modalInstance = createModal(Pausationor, { onOK: handleOk });\n }\n\n this.modalInstance.target = pausationTag;\n this.modalInstance.update({\n popupContainer: pausationTag,\n extraPos: {\n top: this.editor.editorTop(),\n left: this.editor.editorLeft(),\n },\n visible: true,\n });\n }\n\n setup(): void {}\n\n destroy(): void {\n document.body.removeEventListener('click', this._triggerPausationTagClick);\n }\n}\n","<script lang=\"ts\" setup>\nimport { ref, watch } from 'vue';\nimport { Row, Col, Input, Button, Space, Message } from '@arco-design/web-vue';\n\nimport { createComponentSpace } from '../../utils';\n\nconst props = defineProps<{\n visible: boolean;\n oldText: string;\n modelValue: string;\n}>();\nconst emits = defineEmits<{\n ok: [e: Event, text: string, oldText: string];\n cancel: [e: Event];\n}>();\n\nconst [bem] = createComponentSpace('pronunciationor');\n\nconst handleOk = (e: Event) => {\n model.value = model.value?.trim();\n\n if (!/^[\\u4e00-\\u9fa5a-zA-Z0-9]+$/.test(model.value!)) {\n Message.warning({ id: 'message-replacer', content: '不能使用特殊字符替换读音!' });\n return;\n }\n\n emits('ok', e, model.value ?? '', props.oldText);\n};\nconst handleCancel = (e: Event) => {\n emits('cancel', e);\n};\n\nconst model = ref<string>();\nwatch([() => props.visible, () => props.oldText, () => props.modelValue], () => {\n model.value = props.modelValue;\n});\n</script>\n\n<template>\n <Row v-show=\"props.visible\" :class=\"bem()\" @click.stop>\n <Col :class=\"bem('title')\">读音替换</Col>\n <Col :span=\"24\" :class=\"bem('content')\">\n <Input\n :model-value=\"props.oldText\"\n :max-length=\"15\"\n placeholder=\"请输入\"\n show-word-limit\n disabled\n ></Input>\n </Col>\n <Col :span=\"24\">\n <span style=\"display: none\">{{ props.modelValue }}</span>\n <Input\n v-model=\"model\"\n :max-length=\"15\"\n placeholder=\"请输入\"\n show-word-limit\n allow-clear\n ></Input>\n </Col>\n <Col :span=\"24\" :class=\"bem('footer')\">\n <Space fill style=\"justify-content: flex-end\">\n <Button @click=\"handleCancel\">取消</Button>\n <Button :disabled=\"!model?.trim().length\" type=\"primary\" @click=\"handleOk\">替换</Button>\n </Space>\n </Col>\n </Row>\n</template>\n\n<style lang=\"less\" scoped>\n.c {\n &-pronunciationor {\n padding: 8px;\n background: #fff;\n box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.1);\n border-radius: 4px;\n border: 1px solid #f6f6f6;\n\n &__title {\n margin-bottom: 8px;\n line-height: 20px;\n color: rgb(0 0 0 / 85%);\n }\n\n &__content {\n margin-bottom: 4px;\n }\n\n &__footer {\n margin-top: 8px;\n }\n }\n}\n</style>\n","import { IEditorCore, IPlugin, PluginFlag } from '../../typings';\nimport {\n createTagSpace,\n findParent,\n getOverlay,\n isNullable,\n setAttributesAndData,\n spellingTextNode,\n} from '../../utils';\nimport { VNodeTypes, createVNode, render } from 'vue';\nimport Pronunciationor from './pronunciationor.vue';\nimport { useMouse } from '@vueuse/core';\nimport { ModalReturn } from '../../typings/actions/i-modal';\n\nlet RENDERED_TAG_COUNT = 0;\nconst FLAG = PluginFlag.pronunciation;\nconst [bem] = createTagSpace(FLAG);\nconst CLOSE_CLS = bem('close');\nconst { x, y } = useMouse();\n\nconst svgHTMLTemplate = `<svg class=\"${CLOSE_CLS}\" width=\"18px\" height=\"18px\" viewBox=\"0 0 18 18\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <g id=\"V1.0\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"虚拟精品录音间-读音替换\" transform=\"translate(-1287, -152)\" fill=\"currentColor\" fill-rule=\"nonzero\">\n <g id=\"编组-4备份-4\" transform=\"translate(1227, 149)\">\n <g id=\"icon/关闭小\" transform=\"translate(60, 3)\">\n <rect id=\"矩形\" opacity=\"0\" x=\"0\" y=\"0\" width=\"18\" height=\"18\"></rect>\n <path d=\"M9,1 C13.4182222,1 17,4.58177778 17,9 C17,13.4182222 13.4182222,17 9,17 C4.58177778,17 1,13.4182222 1,9 C1,4.58177778 4.58177778,1 9,1 Z M9,8.05777778 L7.11462221,6.17204445 C6.85423837,5.91161152 6.43203295,5.91157171 6.17160001,6.17195555 C6.17158519,6.17197037 6.17157037,6.17198518 6.17155556,6.172 C5.91119626,6.43235929 5.91119626,6.85448511 6.17155556,7.11484441 C6.1716,7.11488885 6.17164445,7.11493329 6.17168891,7.11497772 L8.05777778,9 L8.05777778,9 L6.17204445,10.8853778 C5.91161152,11.1457616 5.91157171,11.567967 6.17195555,11.8284 C6.17197037,11.8284148 6.17198518,11.8284296 6.172,11.8284444 C6.43235929,12.0888037 6.85448511,12.0888037 7.11484441,11.8284444 C7.11488885,11.8284 7.11493329,11.8283555 7.11497772,11.8283111 L9,9.94222222 L9,9.94222222 L10.8853778,11.8279555 C11.1457616,12.0883885 11.567967,12.0884283 11.8284,11.8280445 C11.8284148,11.8280296 11.8284296,11.8280148 11.8284444,11.828 C12.0888037,11.5676407 12.0888037,11.1455149 11.8284444,10.8851556 C11.8284,10.8851111 11.8283555,10.8850667 11.8283111,10.8850223 L9.94222222,9 L9.94222222,9 L11.8279555,7.11462221 C12.0883885,6.85423837 12.0884283,6.43203295 11.8280445,6.17160001 C11.8280296,6.17158519 11.8280148,6.17157037 11.828,6.17155556 C11.5676407,5.91119626 11.1455149,5.91119626 10.8851556,6.17155556 C10.8851111,6.1716 10.8850667,6.17164445 10.8850223,6.17168891 L9,8.05777778 L9,8.05777778 Z\" id=\"形状\"></path>\n </g>\n </g>\n </g>\n </g>\n</svg>`;\n\n/**\n * 通用标签编辑弹窗实现(业务组件无关)\n *\n * * 1. 基本容器组件\n * * 1-1. 基础样式,如:边框、阴影\n * * 1-2. 位置信息,当弹窗显示时(默认 `bottom`), 当 `bottom` 位置超出屏幕范围时,修改成 `top`\n * * 2. 调用组件,传入业务组件(各自的标签的编辑内容组件)\n * * 3. 创建vue应用实例完成后,通过 `document.body.appendChild()` 生成真实弹窗\n */\nconst createModal = (\n type: VNodeTypes,\n props: {\n oldText: string;\n onOk?: (e: Event, text: string, oldText: string) => void;\n onCancel?: (e: Event) => void;\n onTryPlay?: (e: Event, text: string, oldText: string) => void;\n }\n): ModalReturn<{ modelValue?: string; oldText?: string }> => {\n const container = getOverlay(PluginFlag.pronunciation);\n\n const { oldText, onOk, onCancel, onTryPlay } = props;\n\n const handleOk = (e: Event, text: string, oldText: string) => {\n onOk?.(e, text, oldText);\n handleClose();\n };\n const handleCancel = (e: Event) => {\n onCancel?.(e);\n handleClose();\n };\n const handleClose = () => {\n if (vm.component) {\n vm.component.props.visible = false;\n }\n };\n const handleUpdate = (config: { visible?: boolean; modalValue?: string; oldText?: string }) => {\n if (vm.component) {\n container.setAttribute('style', `top: ${y.value}px; left: ${x.value}px`);\n Object.entries(config).forEach(([key, value]) => {\n vm.component!.props[key] = value;\n });\n }\n };\n const handleTryPlay = (e: Event, text: string, oldText: string) => {\n onTryPlay?.(e, text, oldText);\n };\n\n const defaultConfig = {\n visible: false,\n modelValue: undefined,\n oldText,\n\n onOk: handleOk,\n onCancel: handleCancel,\n onTryPlay: handleTryPlay,\n };\n\n const vm = createVNode(type, defaultConfig);\n render(vm, container);\n document.body.appendChild(container);\n\n return {\n target: undefined,\n\n close: handleClose,\n update: handleUpdate,\n };\n};\n\nexport class PronunciationTagPlugin<\n T extends { text: string } = { text: string },\n D extends any = any\n> extends IPlugin<T, D> {\n private editor: IEditorCore;\n\n private modalInstance: ModalReturn<{ modelValue?: string; oldText?: string }> | null;\n\n name: string;\n\n prefix: string;\n\n data: D;\n\n constructor(editor: IEditorCore) {\n super();\n this.editor = editor;\n this.name = `tiny-peony-plugin__${FLAG}-tag`;\n this.prefix = FLAG;\n this.modalInstance = null;\n this.data = [] as unknown as D;\n\n this._triggerPronunciationTagClick = this._triggerPronunciationTagClick.bind(this);\n\n // 插件实例化,立即注册 `读音替换标签` 点击监听事件\n document.body.addEventListener('click', this._triggerPronunciationTagClick);\n }\n\n add(options: T): void {\n this._insertPronunciationTag(options.text);\n }\n\n remove(target: HTMLSpanElement): void {\n spellingTextNode(target, target.dataset.raw!, true);\n }\n\n private _triggerPronunciationTagClick(e: Event) {\n const target = e.target as HTMLElement;\n const [closeTag] = findParent(\n target,\n (elm) => elm.tagName === 'svg' && elm.classList.contains(CLOSE_CLS)\n );\n const [pronunciationTag] = findParent(\n target,\n (elm) => elm.tagName === 'SPAN' && elm.dataset.type === FLAG\n );\n\n // 点击关闭标签 || 点击触发的不是 `读音替换` 标签\n if (closeTag || isNullable(pronunciationTag)) {\n // * 关闭标签\n closeTag && this.remove(pronunciationTag!);\n this.modalInstance?.close();\n return;\n }\n\n // 初次添加标签,创建编辑弹窗\n if (isNullable(this.modalInstance)) {\n const handleOk = (e: Event, text: string, oldText: string) => {\n if (isNullable(this.modalInstance) || isNullable(this.modalInstance.target)) return;\n\n const { target } = this.modalInstance;\n const replaceElm = target.querySelector(`.${bem('replace-text')}`);\n\n if (isNullable(replaceElm)) return;\n\n target.dataset.value = text;\n replaceElm.innerHTML = text;\n };\n\n this.modalInstance = createModal(Pronunciationor, {\n oldText: pronunciationTag.dataset.raw!,\n onOk: handleOk,\n });\n }\n\n this.modalInstance.target = pronunciationTag;\n this.modalInstance.update({\n visible: true,\n modelValue: pronunciationTag.dataset.value,\n oldText: pronunciationTag.dataset.raw,\n });\n }\n\n private _insertPronunciationTag(text: string) {\n const tag = document.createElement('span');\n const pronouncingText = this.editor.cursor.getRangeContent();\n\n setAttributesAndData(\n tag,\n { class: bem(), contenteditable: false },\n {\n type: FLAG,\n id: `${FLAG}_${++RENDERED_TAG_COUNT}`,\n value: text,\n raw: pronouncingText,\n },\n `\n <span class=\"${bem('raw')}\">${pronouncingText}</span>\n <span class=\"${bem('replace')}\">\n <span class=\"${bem('replace-text')}\">${text}</span>\n ${svgHTMLTemplate}\n </span>\n `\n );\n this.editor.content.update(tag);\n }\n\n setup(): void {}\n\n destroy(): void {\n document.body.removeEventListener('click', this._triggerPronunciationTagClick);\n }\n}\n","export const AnchorBg = [\n 'rgba(186, 244, 228, 0.5)',\n 'rgba(202, 218, 250, 0.5)',\n 'rgba(255, 200, 224, 0.5)',\n 'rgba(156, 220, 252, 0.5)',\n 'rgba(255, 207, 139, 0.5)',\n 'rgba(175, 240, 181, 0.5)',\n 'rgba(221, 190, 246, 0.5)',\n 'rgba(255, 232, 145, 0.5)',\n 'rgba(201, 233, 104, 0.5)',\n 'rgba(255, 206, 190, 0.5)',\n];\n","import { Message } from '@arco-design/web-vue';\nimport { IAnchor, IEditorCore, IPlugin, PluginFlag } from '../../typings';\nimport {\n createTagSpace,\n findAllParaInRange,\n findClosestPara,\n isHTMLElement,\n isNullable,\n isText,\n setAttributesAndData,\n} from '../../utils';\nimport { AnchorBg } from './constant';\nimport { PARAGRAPH_CLS } from '../../foundation/editorManager/editor';\n\nconst FLAG = PluginFlag.anchor;\nconst [bem] = createTagSpace(FLAG);\n\nexport class AnchorTagPlugin<\n T extends Record<string, any> = { anchor: IAnchor },\n D extends Record<string, Array<{ background: string; data: IAnchor; id: number }>> = any\n> extends IPlugin<T, D> {\n private editor: IEditorCore;\n\n private observer: MutationObserver | null;\n\n private resizeObserver: ResizeObserver | null;\n\n name: string;\n\n prefix: string;\n\n data: D;\n\n constructor(editor: IEditorCore) {\n super();\n this.editor = editor;\n this.observer = null;\n this.resizeObserver = null;\n this.name = `tiny-peony-plugin__${FLAG}-tag`;\n this.prefix = FLAG;\n this.data = {} as unknown as D;\n }\n\n add(options: T): void {\n if (!this.editor.cursor.isRange()) {\n Message.warning('请先划选配音内容!');\n return;\n }\n\n this._insertOverlapAnchor(options) || this._insertAnchorTag(options.anchor);\n }\n\n remove(target: HTMLSpanElement): void {\n const { top, id: _id, uid } = target.dataset;\n const id = (_id as string)!.split('_')[1];\n const anchorIndex = this.data[top as string].findIndex((item) => {\n if (item.data.uid) {\n return item.data.uid === uid;\n }\n\n return item.id === Number(id);\n });\n\n if (anchorIndex > -1) {\n this.data[top as string].splice(anchorIndex, 1);\n }\n\n const nodes = Array.from(target.childNodes);\n\n // 只有文本节点\n if (nodes.every((node) => isText(node))) {\n target.replaceWith(target.textContent!);\n this.editor._editorElement.normalize();\n return;\n }\n\n // 包含业务标签(元素节点)\n const fragment = document.createDocumentFragment();\n nodes.forEach((node) => fragment.appendChild(node));\n target.replaceWith(fragment);\n this.editor._editorElement.normalize();\n }\n\n private _insertOverlapAnchor(options: T) {\n const { range } = this.editor.cursor;\n\n if (isNullable(range)) return false;\n\n const getNodeIndex = (node: Node) => {\n return Array.prototype.indexOf.call(node.parentNode?.childNodes, node);\n };\n\n const getTopLevelNodeInP = (node: Node) => {\n let current: Node | ParentNode = node;\n\n while (\n current &&\n !(isHTMLElement(current.parentNode) && current.parentNode.tagName === 'P')\n ) {\n current = current.parentNode!;\n }\n\n return current;\n };\n\n const detectAnchorSelection = (nodes: Node[]) => {\n return nodes.some((node) => isHTMLElement(node) && node.classList.contains(bem()));\n };\n\n const extractAnchorNodes = () => {\n let empty_1;\n let empty_2;\n const onlyOnePara = allChildNodes.length === 1;\n\n allChildNodes.forEach((nodesGroup, index) => {\n if (index === 0) {\n const target = () => {\n const range = getSelection()?.getRangeAt(0);\n const startContainer = range?.startContainer;\n const endContainer = range?.endContainer;\n\n if (isNullable(range) || isNullable(endContainer) || isNullable(startContainer))\n return null;\n\n if (startContainer === endContainer) {\n if (isHTMLElement(startContainer) && startContainer.classList.contains(bem())) {\n const fragment = document.createDocumentFragment();\n const span = range.endContainer;\n const spanNode = span.cloneNode(false);\n const splitNode = span.childNodes[range.endOffset];\n while (span.firstChild && span.firstChild !== splitNode) {\n fragment.appendChild(span.firstChild);\n }\n spanNode.appendChild(fragment);\n span.parentNode?.insertBefore(spanNode, span);\n\n return span;\n }\n\n if (isText(startContainer)) {\n const text = startContainer.textContent!;\n let span = startContainer.parentNode! as HTMLElement;\n let splitContainer = range.startContainer;\n\n if (span.dataset.type === PluginFlag.highlight) {\n splitContainer = span.nextSibling!;\n span = span.parentNode as HTMLElement;\n }\n\n const spanNode = span.cloneNode(false)! as HTMLElement;\n const fragment = document.createDocumentFragment();\n while (span.firstChild && span.firstChild !== splitContainer) {\n fragment.appendChild(span.firstChild);\n }\n spanNode.appendChild(fragment);\n spanNode.appendChild(document.createTextNode(text.slice(0, range.startOffset)));\n startContainer.replaceWith(text.slice(range.startOffset));\n span.parentNode?.insertBefore(spanNode, span);\n\n return span;\n }\n }\n\n return isHTMLElement(endContainer) && endContainer.classList.contains(PARAGRAPH_CLS)\n ? endContainer.childNodes[range.endOffset]\n : endContainer;\n };\n [newStartContainer, newStartOffset, newEndContainer, newEndOffset] = extractNodes(\n nodesGroup,\n startContainer,\n startOffset,\n onlyOnePara ? endContainer : nodesGroup[0],\n onlyOnePara ? endOffset : nodesGroup[0].childNodes.length,\n onlyOnePara ? target : null,\n onlyOnePara ? ['start', 'end'] : ['start']\n );\n\n return;\n }\n\n if (index === allChildNodes.length - 1) {\n [empty_1, empty_2, newEndContainer, newEndOffset] = extractNodes(\n nodesGroup,\n nodesGroup[0],\n 0,\n endContainer,\n endOffset,\n () => nodesGroup[0].firstChild,\n 'end'\n );\n\n return;\n }\n\n extractNodes(\n nodesGroup,\n nodesGroup[0],\n 0,\n nodesGroup[0],\n nodesGroup[0].childNodes.length,\n null\n );\n });\n };\n\n const extractNodes = (\n nodesGroup: [HTMLElement, boolean],\n startContainer: Node,\n startOffset: number,\n endContainer: Node,\n endOffset: number,\n target: (() => Node | null) | Node | null,\n _type?: 'start' | 'end' | Array<'start' | 'end'>\n ): [Node, number, Node, number] => {\n const type = Array.isArray(_type) ? _type : [_type];\n const [para] = nodesGroup;\n\n const newRange = document.createRange();\n newRange.setStart(startContainer, startOffset);\n newRange.setEnd(endContainer, endOffset);\n getSelection()?.removeAllRanges();\n getSelection()?.addRange(newRange);\n const highlightTag =\n newRange.startContainer === newRange.endContainer &&\n newRange.startContainer.parentElement?.dataset?.type === PluginFlag.highlight\n ? newRange.startContainer.parentElement.cloneNode(false)\n : null;\n const originalFragment = newRange.cloneContents();\n const fragment = document.createDocumentFragment();\n Array.from(originalFragment.childNodes).forEach((node) => {\n if (!isHTMLElement(node) || !node.classList.contains(bem())) {\n highlightTag && highlightTag.appendChild(node);\n fragment.appendChild(highlightTag ?? node);\n\n return;\n }\n\n fragment.append(...Array.from(node.childNodes));\n });\n\n let startC: Node = document.createTextNode('');\n let startO = 0;\n let endC: Node = document.createTextNode('');\n let endO = 0;\n if (type.includes('start')) {\n startC = fragment.firstChild!;\n startO = 0;\n }\n if (type.includes('end')) {\n endC = fragment.lastChild!;\n endO = isText(endC)\n ? endC.data.length\n : isHTMLElement(fragment.lastChild) &&\n fragment.lastChild.dataset.type === PluginFlag.highlight\n ? fragment.lastChild!.childNodes.length\n : fragment.childNodes.length;\n }\n newRange.deleteContents();\n // 节点会变化,target必须最后读取\n para.insertBefore(fragment, typeof target === 'function' ? target() : target);\n\n return [startC, startO, endC, endO];\n };\n\n const createAnchorSelection = async (_fixingAnchorTag?: HTMLElement) => {\n const newRange = document.createRange();\n if (\n newStartContainer === newEndContainer &&\n isHTMLElement(newStartContainer) &&\n newStartContainer.dataset.type === PluginFlag.highlight\n ) {\n newRange.selectNode(newStartContainer);\n } else {\n newRange.setStart(newStartContainer!, newStartOffset);\n newRange.setEnd(newEndContainer!, newEndOffset);\n }\n getSelection()?.removeAllRanges();\n getSelection()?.addRange(newRange);\n this.editor.cursor.range = newRange;\n this._insertAnchorTag(options.anchor, _fixingAnchorTag);\n };\n\n const { startContainer, startOffset, endContainer, endOffset } = range;\n const needFixingAnchorTag = getTopLevelNodeInP(endContainer) as HTMLElement;\n const startPara = findClosestPara(startContainer as HTMLElement)!;\n const endPara = findClosestPara(endContainer as HTMLElement)!;\n const paras =\n startPara === endPara\n ? [startPara]\n : [startPara, ...findAllParaInRange(startPara, endPara), endPara];\n const allChildNodes = paras.map((para, index) => {\n let nodes: Node[] = [];\n let nodeStartIndex = 0;\n let nodeEndIndex = para.childNodes.length;\n\n switch (index) {\n case 0: {\n nodeStartIndex = getNodeIndex(getTopLevelNodeInP(startContainer));\n nodeEndIndex =\n // 同一段落\n paras.length - 1 === index &&\n // 非P段落\n !(isHTMLElement(endContainer) && endContainer.classList.contains(PARAGRAPH_CLS))\n ? getNodeIndex(getTopLevelNodeInP(endContainer)) + 1\n : para.childNodes.length;\n nodes = Array.from(para.childNodes).slice(nodeStartIndex, nodeEndIndex);\n break;\n }\n case paras.length - 1:\n nodeStartIndex = 0;\n nodeEndIndex =\n isHTMLElement(endContainer) && endContainer.classList.contains(PARAGRAPH_CLS)\n ? para.childNodes.length\n : getNodeIndex(getTopLevelNodeInP(endContainer)) + 1;\n nodes = Array.from(para.childNodes).slice(0, nodeEndIndex);\n break;\n default:\n nodeStartIndex = 0;\n nodeEndIndex = para.childNodes.length;\n nodes = Array.from(para.childNodes).slice(nodeStartIndex, nodeEndIndex);\n break;\n }\n\n return [para, detectAnchorSelection(nodes)];\n }) as Array<[HTMLElement, boolean]>;\n\n let newStartContainer: Node;\n let newStartOffset = 0;\n let newEndContainer: Node;\n let newEndOffset = 0;\n\n if (!allChildNodes.some(([_, isIntersection]) => isIntersection)) return false;\n\n extractAnchorNodes();\n createAnchorSelection(needFixingAnchorTag);\n\n return true;\n }\n\n private _recordAnchor(anchor: IAnchor, id: number, top: number, bg: string) {\n // @ts-ignore\n const record = this.data[top] ?? (this.data[top] = []);\n\n anchor.id = id;\n anchor.top = top;\n record.push({ background: bg, data: anchor, id });\n }\n\n private get _newAnchorId() {\n const anchorIds = Object.values(this.data)\n .flat()\n .map((data) => data.id);\n\n // Math.max(...[]) 返回 -Infinity\n if (!anchorIds.length) return 1;\n\n return Math.max(...anchorIds) + 1;\n }\n\n private _insertAnchorTag(anchor: IAnchor, _fixingAnchorTag?: HTMLElement) {\n const id = this._newAnchorId;\n const uid = String(Date.now());\n const background = AnchorBg[(id - 1) % 10];\n const range = this.editor.cursor.range!;\n const { startContainer, startOffset, endContainer, endOffset } = range;\n\n const convertToParaElm = (node: Node) => {\n return (\n isHTMLElement(node) && node.tagName === 'DIV'\n ? node.firstElementChild\n : isHTMLElement(node) && node.tagName === 'P'\n ? node\n : findClosestPara(node as HTMLElement)\n ) as HTMLElement;\n };\n const createAnchorTag = (text?: string) => {\n const tag = document.createElement('span');\n setAttributesAndData(\n tag,\n {\n class: bem(),\n style: `background-color: ${background}`,\n },\n {\n type: FLAG,\n id: `${FLAG}_${id}`,\n\n provider: anchor.provider,\n person: anchor.person,\n volume: anchor.volumn || anchor.volume,\n speed: anchor.speed,\n top: 0,\n fragId: `anchor_${id}`,\n emotion: anchor.activeEmotion,\n role: anchor.activeRole ?? '',\n name: anchor.name,\n uid,\n },\n text\n );\n\n return tag;\n };\n const surroundContents = (\n startNode: Node,\n startOffset: number,\n endNode: Node,\n _endOffset: number,\n record = false\n ) => {\n const newRange = document.createRange();\n\n if (isHighlightTag(startNode, endNode)) {\n newRange.selectNode(Array.from(startNode.childNodes).slice(startOffset, _endOffset)[0]);\n } else {\n const endOffset =\n isHTMLElement(endNode) &&\n [PluginFlag.pausation].includes(endNode.dataset.type as PluginFlag)\n ? endNode.childNodes.length\n : _endOffset;\n if (isHTMLElement(startNode) && startNode.tagName === 'P') {\n newRange.setStart(startNode.firstChild!, 0);\n newRange.setEnd(startNode, startNode.childNodes.length);\n } else {\n newRange.setStart(startNode, startOffset);\n newRange.setEnd(endNode, endOffset);\n }\n }\n\n const selection = window.getSelection()!;\n selection.removeAllRanges();\n selection.addRange(newRange);\n this.editor.cursor.range = newRange;\n const tempDiv = document.createElement('div');\n tempDiv.appendChild(newRange.cloneContents());\n const tag = createAnchorTag(tempDiv.innerHTML);\n this.editor.content.update(tag);\n const top = this._calcTopValue(tag.getBoundingClientRect());\n tag.dataset.top = String(top);\n anchor.uid = tag.dataset.uid;\n record && this._recordAnchor(anchor, id, top, background);\n\n return tag;\n };\n const isHighlightTag = (startNode: Node, endNode: Node) => {\n return (\n isHTMLElement(startNode) &&\n startNode.tagName === 'P' &&\n startNode === endNode &&\n // @ts-ignore\n Array.from(startNode.childNodes).slice(range.startOffset, range.endOffset)[0]?.dataset\n ?.type === PluginFlag.highlight\n );\n };\n\n const startPara = convertToParaElm(startContainer);\n const endPara = convertToParaElm(endContainer);\n const middleParas = findAllParaInRange(startPara, endPara);\n\n // 相同文本节点 或 相同段落节点,直接包裹即可\n if (startPara === endPara) {\n const hasHighlightTag = isHighlightTag(startContainer, endContainer);\n\n surroundContents(\n hasHighlightTag\n ? startContainer\n : isHTMLElement(startContainer) && startContainer.tagName === 'P'\n ? startContainer.firstChild!\n : startContainer,\n hasHighlightTag\n ? startOffset\n : isHTMLElement(startContainer) && startContainer.tagName === 'P'\n ? 0\n : startOffset,\n endContainer,\n endOffset,\n true\n );\n\n this._fixedAnchorSelection(_fixingAnchorTag);\n this._fixedAnchorOrder(anchor);\n this._fixedAnchorHighlightContent();\n\n return;\n }\n\n // 开始节点\n surroundContents(startContainer, startOffset, startPara, startPara.childNodes.length, true);\n\n // 中间节点\n middleParas.forEach((para) => surroundContents(para, 0, para, para.childNodes.length));\n\n // 结束节点\n surroundContents(endPara.firstChild!, 0, endContainer, endOffset, false);\n\n // 检测丢失配音区域\n this._fixedAnchorSelection(_fixingAnchorTag);\n\n // 校准配音主播顺序\n this._fixedAnchorOrder(anchor);\n\n // 校准高亮词切割内容\n this._fixedAnchorHighlightContent();\n }\n\n private _isIntersectOtherAnchors() {\n const { range } = this.editor.cursor;\n const anchorTags = Array.from(document.querySelectorAll(`.tag-${PluginFlag.anchor}`));\n\n return anchorTags.some((tag) => range?.intersectsNode(tag));\n }\n\n private _calcTopValue(rect: DOMRect) {\n return rect.top - this.editor.editorTop() + 16;\n }\n\n private _fixedAnchorSelection(_fixingAnchorTag?: HTMLElement) {\n if (!(isHTMLElement(_fixingAnchorTag) && _fixingAnchorTag.classList.contains(bem()))) return;\n\n const fixingAnchorTag = _fixingAnchorTag;\n const allAnchorTags = Array.from(\n document.querySelectorAll(`.tag-${PluginFlag.anchor}`)\n ) as HTMLElement[];\n const fixingId = fixingAnchorTag.dataset.id;\n const fixingAnchorId = Number(fixingAnchorTag.dataset.id?.split('_')[1]);\n const fixingAnchorTagIndex = allAnchorTags.indexOf(fixingAnchorTag);\n const fixingAnchorTop = this._calcTopValue(fixingAnchorTag.getBoundingClientRect());\n const fixingAnchorTags = [];\n\n // 区域已经被完全覆盖,在真实DOM环境中已不存在\n if (fixingAnchorTagIndex < 0) return;\n\n for (let i = fixingAnchorTagIndex; i < allAnchorTags.length; i++) {\n if (fixingId !== allAnchorTags[i].dataset.id) break;\n\n fixingAnchorTags.push(allAnchorTags[i]);\n }\n\n const allAnchors = Object.values(this.data).flat();\n const currAnchor = allAnchors.find((anchor) => anchor.id === fixingAnchorId)!;\n const uid = String(Date.now());\n const newAnchor = { ...currAnchor, data: { ...currAnchor.data, uid } };\n\n fixingAnchorTags.forEach((tag) => {\n tag.dataset.uid = uid;\n tag.dataset.top = String(fixingAnchorTop);\n });\n\n this._recordAnchor(newAnchor.data, newAnchor.id, fixingAnchorTop, currAnchor.background);\n }\n\n private _fixedAnchorOrder(anchor: IAnchor) {\n const needFixingAnchors = this.data[anchor.top];\n const orders = (\n Array.from(document.querySelectorAll(`span[data-top=\"${anchor.top}\"]`)) as HTMLElement[]\n ).map((item) => {\n return [Number(item.dataset.id!.split('_')[1]), item.dataset.uid] as [\n number,\n string | undefined\n ];\n });\n\n const newAnchorOrders = orders.reduce((total, item) => {\n const [id, uid] = item;\n\n if (uid) {\n total.push(\n ...needFixingAnchors.splice(\n needFixingAnchors.findIndex((item) => item.data.uid === uid),\n 1\n )\n );\n\n return total;\n }\n\n total.push(\n ...needFixingAnchors.splice(\n needFixingAnchors.findIndex((item) => item.data.id === id && !item.data.uid),\n 1\n )\n );\n\n return total;\n }, [] as Recordable[]);\n\n // @ts-ignore\n this.data[anchor.top] = newAnchorOrders;\n }\n\n private _fixedAnchorHighlightContent() {\n (\n Array.from(\n this.editor.element.querySelectorAll(`span[data-type=\"${PluginFlag.highlight}\"]`)\n ) as HTMLElement[]\n ).forEach((highlightTag) => {\n highlightTag.dataset.raw = highlightTag.innerHTML;\n });\n }\n\n /**\n * MutationObserver 监听编辑器内容变化,当内容变化时重新计算 anchor 的 top 值。\n *\n * * 1. 获取编辑器内所有的 anchor 标签\n * * 2. 根据 anchor 标签的 dataset.id 分组\n * * 3. 每个分组的第一个 anchor 标签的 top 值作为该组的 top 值\n * * 4. 重新计算 top 值\n * * 5. 更新 anchor 标签的 dataset.top 值\n * * 6. 更新 data 中的 top 值\n * * 7. 自动触发 vue 响应式渲染,更新右侧主播标签的决定定位 top 值\n */\n private async _syncAnchorTopValue() {\n const anchorTags = Array.from(\n this.editor.element.querySelectorAll(`span[data-type=\"${FLAG}\"]`)\n ) as HTMLElement[];\n const anchorMap = anchorTags.reduce((map, tag) => {\n const id = tag.dataset.uid ?? tag.dataset.id!.split('_')[1];\n\n if (map.has(id)) {\n tag.dataset.top = String(map.get(id)!);\n\n return map;\n }\n\n // 计算并记录主播 `top` 值\n const top = this._calcTopValue(tag.getBoundingClientRect());\n tag.dataset.top = String(top);\n map.set(id, top);\n\n return map;\n }, new Map<string, number>());\n\n const allAnchors = Object.values(this.data)\n .flat()\n .filter((anchorData) => {\n return anchorTags.some((tag) => {\n if (tag.dataset.uid) {\n return tag.dataset.uid === anchorData.data.uid;\n }\n\n return Number(tag.dataset.id!.split('_')[1]) === anchorData.id;\n });\n });\n // 移除所有旧有 `top` 分组\n Object.keys(this.data).forEach((top) => delete this.data[top]);\n // 根据最新 `top` 值重新分组主播数据\n const newDatas = allAnchors.reduce((top2AnchorData, anchorData) => {\n const id = anchorData.data.uid ?? anchorData.id;\n const top = anchorMap.get(String(id))!;\n // @ts-ignore\n const datas = top2AnchorData[top] ?? (top2AnchorData[top] = []);\n anchorData.data.top = top;\n datas.push(anchorData);\n\n return top2AnchorData;\n }, {} as D);\n // @ts-ignore\n Object.keys(newDatas).forEach((top) => (this.data[top] = newDatas[top]));\n }\n\n setup(): void {\n this.observer = new MutationObserver(() => this._syncAnchorTopValue());\n this.observer.observe(this.editor.element, {\n childList: true,\n subtree: true,\n characterData: true,\n // ! 不能监听, 会爆栈\n // attributes: true,\n });\n\n // TODO 编辑器尺寸变化时重新计算 anchor 的 top 值\n // this.resizeObserver = new ResizeObserver(() => this._syncAnchorTopValue());\n // this.resizeObserver.observe(this.editor.element);\n }\n\n destroy(): void {\n this.observer?.disconnect();\n this.observer = null;\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n }\n}\n","<script lang=\"ts\" setup>\nimport { createComponentSpace } from '../../utils';\n\nconst props = defineProps<{\n visible: boolean;\n word: string;\n data: string[];\n}>();\nconst emits = defineEmits<{\n ok: [e: Event, text: string];\n cancel: [e: Event];\n}>();\n\nconst [bem] = createComponentSpace('homophones');\n\nconst handleOk = (e: Event, text: string) => {\n emits('ok', e, text);\n};\nconst handleCancel = (e: Event) => {\n emits('cancel', e);\n};\n</script>\n\n<template>\n <ul v-show=\"props.visible\" :class=\"bem()\" @click.stop>\n <li :class=\"bem('word')\">“{{ props.word }}”</li>\n <li\n v-for=\"(item, index) in props.data\"\n :key=\"index\"\n :class=\"bem('item')\"\n @click=\"handleOk($event, item)\"\n >\n {{ item }}\n </li>\n </ul>\n</template>\n\n<style lang=\"less\" scoped>\n.c {\n &-homophones {\n padding: 8px;\n background: #fff;\n box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.1);\n border-radius: 4px;\n border: 1px solid #f6f6f6;\n\n &__word {\n color: rgba(var(--primary-6));\n line-height: 20px;\n text-align: center;\n }\n\n &__item {\n margin-top: 8px;\n border-radius: 4px;\n line-height: 28px;\n border: 1px solid rgba(0, 0, 0, 0.15);\n text-align: center;\n color: var(--color-text-2);\n transition: all 0.1s cubic-bezier(0, 0, 1, 1);\n cursor: pointer;\n\n &:hover {\n color: #fff;\n background-color: rgba(var(--primary-6));\n }\n }\n }\n}\n</style>\n","import { VNodeTypes, createVNode, render } from 'vue';\nimport { IEditorCore, IPlugin, PluginFlag } from '../../typings';\nimport { HomophoneEntity } from '../../typings/actions/i-homophone';\nimport { ModalReturn as _ModalReturn } from '../../typings/actions/i-modal';\nimport {\n createTagSpace,\n findParent,\n getOverlay,\n isHTMLElement,\n isNullable,\n isText,\n setAttributesAndData,\n spellingTextNode,\n} from '../../utils';\nimport { useMouse } from '@vueuse/core';\nimport Homophoner from './homophoner.vue';\n\ninterface ModalResult {\n visible?: boolean;\n popupContainer?: HTMLElement;\n extraPos?: {\n top: number;\n left: number;\n };\n word: string;\n data: string[];\n}\n\ntype ModalReturn = _ModalReturn<ModalResult>;\n\nconst RENDERED_TAG_COUNT = 0;\nconst FLAG = PluginFlag.homophones;\nconst [bem] = createTagSpace(FLAG);\nconst CLOSE_CLS = bem('close');\nconst { x, y } = useMouse();\n\nconst svgHTMLTemplate = `<svg class=\"${CLOSE_CLS}\" width=\"18px\" height=\"18px\" viewBox=\"0 0 18 18\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n <g id=\"V1.0\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"虚拟精品录音间-读音替换\" transform=\"translate(-1287, -152)\" fill=\"currentColor\" fill-rule=\"nonzero\">\n <g id=\"编组-4备份-4\" transform=\"translate(1227, 149)\">\n <g id=\"icon/关闭小\" transform=\"translate(60, 3)\">\n <rect id=\"矩形\" opacity=\"0\" x=\"0\" y=\"0\" width=\"18\" height=\"18\"></rect>\n <path d=\"M9,1 C13.4182222,1 17,4.58177778 17,9 C17,13.4182222 13.4182222,17 9,17 C4.58177778,17 1,13.4182222 1,9 C1,4.58177778 4.58177778,1 9,1 Z M9,8.05777778 L7.11462221,6.17204445 C6.85423837,5.91161152 6.43203295,5.91157171 6.17160001,6.17195555 C6.17158519,6.17197037 6.17157037,6.17198518 6.17155556,6.172 C5.91119626,6.43235929 5.91119626,6.85448511 6.17155556,7.11484441 C6.1716,7.11488885 6.17164445,7.11493329 6.17168891,7.11497772 L8.05777778,9 L8.05777778,9 L6.17204445,10.8853778 C5.91161152,11.1457616 5.91157171,11.567967 6.17195555,11.8284 C6.17197037,11.8284148 6.17198518,11.8284296 6.172,11.8284444 C6.43235929,12.0888037 6.85448511,12.0888037 7.11484441,11.8284444 C7.11488885,11.8284 7.11493329,11.8283555 7.11497772,11.8283111 L9,9.94222222 L9,9.94222222 L10.8853778,11.8279555 C11.1457616,12.0883885 11.567967,12.0884283 11.8284,11.8280445 C11.8284148,11.8280296 11.8284296,11.8280148 11.8284444,11.828 C12.0888037,11.5676407 12.0888037,11.1455149 11.8284444,10.8851556 C11.8284,10.8851111 11.8283555,10.8850667 11.8283111,10.8850223 L9.94222222,9 L9.94222222,9 L11.8279555,7.11462221 C12.0883885,6.85423837 12.0884283,6.43203295 11.8280445,6.17160001 C11.8280296,6.17158519 11.8280148,6.17157037 11.828,6.17155556 C11.5676407,5.91119626 11.1455149,5.91119626 10.8851556,6.17155556 C10.8851111,6.1716 10.8850667,6.17164445 10.8850223,6.17168891 L9,8.05777778 L9,8.05777778 Z\" id=\"形状\"></path>\n </g>\n </g>\n </g>\n </g>\n</svg>`;\n\nconst createAnchorTag = (\n word: string,\n homophone: string,\n formattedHomophone: string,\n data: string[],\n formattedData: string[]\n) => {\n const tag = document.createElement('span');\n setAttributesAndData(\n tag,\n { class: bem(), contenteditable: false },\n {\n type: FLAG,\n id: `${FLAG}_${RENDERED_TAG_COUNT}`,\n value: homophone,\n formattedValue: formattedHomophone,\n raw: word,\n data: data.join(),\n formattedData: formattedData.join(),\n },\n `\n <span class=\"${bem('raw')}\">${word}[${homophone}]</span>\n ${svgHTMLTemplate}\n `\n );\n\n return tag;\n};\n\nconst createModal = (\n type: VNodeTypes,\n props: {\n word: string;\n data: string[];\n onOK?: (e: Event, text: string) => void;\n onCancel?: (e: Event) => void;\n }\n): ModalReturn => {\n const container = getOverlay(PluginFlag.homophones);\n\n const { word, data, onOK, onCancel } = props;\n\n const handleOk = (e: Event, text: string) => {\n onOK?.(e, text);\n handleClose();\n };\n const handleCancel = (e: Event) => {\n onCancel?.(e);\n handleClose();\n };\n const handleClose = () => {\n if (vm.component) {\n vm.component.props.visible = false;\n }\n };\n const handleUpdate = (config: ModalResult & { popupContainer?: HTMLElement }) => {\n if (vm.component) {\n let top = y.value;\n let left = x.value;\n\n if (config.popupContainer) {\n const { offsetTop, offsetLeft, offsetHeight, offsetWidth } = config.popupContainer;\n\n top = offsetTop + offsetHeight + 5 + (config.extraPos?.top ?? 0);\n left = offsetLeft - (88 - offsetWidth) / 2 + (config.extraPos?.left ?? 0);\n }\n container.setAttribute('style', `top: ${top}px; left: ${left}px`);\n Object.entries(config).forEach(([key, value]) => {\n vm.component!.props[key] = value;\n });\n }\n };\n\n const defualtConfig = {\n visible: false,\n word,\n data,\n\n onOk: handleOk,\n onCancel: handleCancel,\n };\n\n const vm = createVNode(type, defualtConfig);\n render(vm, container);\n document.body.appendChild(container);\n\n return {\n target: undefined,\n\n close: handleClose,\n update: handleUpdate,\n };\n};\n\nexport class HomophonesTagPlugin<\n T extends HomophoneEntity[] = HomophoneEntity[],\n D extends any = any\n> extends IPlugin<T, D> {\n private editor: IEditorCore;\n\n private modalInstance: ModalReturn | null;\n\n name: string;\n\n prefix: string;\n\n data: D;\n\n constructor(editor: IEditorCore) {\n super();\n this.editor = editor;\n this.name = `tiny-peony-plugin__${FLAG}-tag`;\n this.prefix = FLAG;\n this.modalInstance = null;\n this.data = [] as unknown as D;\n\n this._triggerHomophonesTagClick = this._triggerHomophonesTagClick.bind(this);\n\n document.body.addEventListener('click', this._triggerHomophonesTagClick);\n }\n\n add(config: T): void {\n // this._insertHomophonesTag(config);\n const homophoneRange = this.editor.cursor.range;\n\n if (isNullable(homophoneRange)) return;\n\n config.forEach((configItem) => {\n this._calc(homophoneRange.startContainer, homophoneRange.startOffset, configItem);\n });\n }\n\n remove(target: HTMLSpanElement): void {\n spellingTextNode(target, target.dataset.raw, true);\n }\n\n private _triggerHomophonesTagClick(e: Event) {\n const target = e.target as HTMLElement;\n const [closeTag] = findParent(\n target,\n (elm) => elm.tagName === 'svg' && elm.classList.contains(CLOSE_CLS)\n );\n const [homophoneTag] = findParent(\n target,\n (elm) => elm.tagName === 'SPAN' && elm.dataset.type === FLAG\n );\n\n if (closeTag || isNullable(homophoneTag)) {\n closeTag && this.remove(homophoneTag!);\n this.modalInstance?.close();\n return;\n }\n\n if (isNullable(this.modalInstance)) {\n const handleOk = (e: Event, text: string) => {\n if (isNullable(this.modalInstance) || isNullable(this.modalInstance.target)) return;\n\n const { target } = this.modalInstance;\n const replaceElm = target.querySelector(`.${bem('raw')}`);\n const modifyIndex = target.dataset.data?.split(',').indexOf(text);\n const formattedData = target.dataset.formattedData?.split(',');\n\n if (isNullable(replaceElm) || isNullable(modifyIndex) || isNullable(formattedData)) return;\n\n target.dataset.value = text;\n target.dataset.formattedValue = formattedData[modifyIndex];\n replaceElm.innerHTML = `${target.dataset.raw!}[${text}]`;\n };\n\n this.modalInstance = createModal(Homophoner, {\n word: homophoneTag.dataset.raw!,\n data: homophoneTag.dataset.data?.split(',') ?? [],\n onOK: handleOk,\n });\n }\n\n this.modalInstance.target = homophoneTag;\n this.modalInstance.update({\n popupContainer: homophoneTag,\n extraPos: {\n top: this.editor.editorTop(),\n left: this.editor.editorLeft(),\n },\n visible: true,\n word: homophoneTag.dataset.raw!,\n data: homophoneTag.dataset.data?.split(',') ?? [],\n });\n }\n\n private _insertHomophonesTag(homophoneConfigs: HomophoneEntity[]) {\n const allParas = this.editor.content.getParas();\n\n const calc = (childNodes: ChildNode[], index: number, config: HomophoneEntity): void => {\n let accuSearchIndex = index;\n\n for (let i = 0; i < childNodes.length; i++) {\n const node = childNodes[i];\n const type = (node as HTMLElement)?.dataset?.type as PluginFlag;\n const content = [\n PluginFlag.pausation,\n PluginFlag.pronunciation,\n PluginFlag.homophones,\n ].includes(type)\n ? (node as HTMLElement).dataset.raw ?? ''\n : node.textContent ?? '';\n const restIndex: number = config.wordIndex - (accuSearchIndex + 1);\n\n // * 无关HTML标签, 累计计算索引长度\n if (restIndex >= content.length) {\n accuSearchIndex += content.length;\n continue;\n }\n\n if (isHTMLElement(node)) {\n // * 停顿标签没有内容,不需要处理\n // * 读音替换标签 和 多音字标签 不能嵌套\n if ([PluginFlag.pausation, PluginFlag.pronunciation].includes(type)) return;\n // * 多音字标签直接处理\n if (PluginFlag.homophones === type) {\n // @ts-ignore\n this._calc(node, restIndex, config);\n\n return;\n }\n // * 主播标签需要递归计算索引\n if (PluginFlag.anchor === type) {\n // @ts-ignore\n calc(Array.from(node.childNodes), accuSearchIndex, config);\n return;\n }\n }\n\n // * 文本节点\n // @ts-ignore\n this._calc(node, restIndex, config);\n return;\n }\n };\n\n homophoneConfigs.forEach((config) => {\n const targetPara = allParas[config.paraIndex];\n const childNodes = Array.from(targetPara.childNodes);\n const accuSearchIndex = -1;\n\n calc(childNodes, accuSearchIndex, config);\n });\n }\n\n // 累计计算并更新索引属性\n private _calc(node: Node, offset: number, config: HomophoneEntity) {\n const selection = window.getSelection();\n const newRange = document.createRange();\n\n if (node.nodeType === Node.TEXT_NODE) {\n // * 文本节点\n const tag = createAnchorTag(\n config.word,\n config.modify,\n config.pinyin2[config.pinyin1.indexOf(config.modify)],\n config.pinyin1,\n config.pinyin2\n );\n newRange.selectNode(node);\n newRange.setStart(node, offset);\n newRange.setEnd(node, offset + 1);\n newRange.deleteContents();\n newRange.insertNode(tag);\n selection?.removeAllRanges();\n selection?.addRange(newRange);\n this.editor.cursor.toEnd(tag);\n }\n\n // * 多音字标签\n if (isHTMLElement(node) && node.dataset.type === PluginFlag.homophones) {\n node.dataset.value = config.modify;\n node.firstElementChild!.innerHTML = `${config.word}[${config.modify}]`;\n }\n }\n\n setup(): void {}\n\n destroy(): void {\n document.body.removeEventListener('click', this._triggerHomophonesTagClick);\n }\n}\n","import { InjectionKey, Ref } from 'vue';\nimport { EditorCore } from '../../../foundation/editorManager/editor';\nimport { EditorAction } from '../../hooks/use-editor';\nimport { IAnchor, PluginFlag } from '../../../typings';\nimport { createTagSpace } from '../../../utils';\n\n/**\n * * 获取编辑器内容时,是否对内容进行指定格式化\n */\nexport interface ContentOptions {\n /**\n * * 是否返回带有主播文本高亮样式标记\n */\n withHighlight?: boolean;\n /**\n * * 是否返回带有文本审核高亮样式标记\n */\n withAuditHighlight?: boolean;\n /**\n * 是否返回带有调优高亮样式标记\n */\n withRefineHighlight?: boolean;\n}\n\nexport const defaultContentOptions: ContentOptions = {\n withHighlight: false,\n withAuditHighlight: false,\n withRefineHighlight: false,\n};\n\nexport interface EditorContext {\n name: 'Editor';\n editorCore: Ref<EditorCore | undefined>;\n editorAction: Ref<EditorAction | undefined>;\n\n getContent: (options?: ContentOptions) => string;\n setContent: (content: string) => void;\n appendContent: (content: string | string[]) => void;\n getTextContent: () => string[];\n insertContent: (content: string | Node) => void;\n deleteContent: () => void;\n updateContent: (content: string | Node) => void;\n isCaret: () => boolean;\n isRange: () => boolean;\n\n isSelectionContainsTag: (type: PluginFlag) => boolean;\n getAnchorTtsMark: (anchor: IAnchor, startFromCursor?: boolean) => string;\n getAnchorTtsEmotionAndRole: (anchor: IAnchor) => [string, string | undefined];\n isAllMarkedByAnchor: () => boolean;\n addExtraAnchors: (data: IAnchor[]) => void;\n clearContent: () => void;\n\n renderHighlight: (matchingContent: string) => void;\n unrenderHighlight: () => void;\n\n refineContext?: RefineContext;\n}\n\nexport const EditorInjectionKey: InjectionKey<EditorContext> = Symbol('Editor');\n\nconst HIGHLIGHT_CLS = 'highlight';\n\nconst [auditHighlightBem] = createTagSpace('audit-highlight');\nconst AUDIT_HIGHLIGHT_CLS = auditHighlightBem();\n\nexport { HIGHLIGHT_CLS, auditHighlightBem, AUDIT_HIGHLIGHT_CLS };\n\nexport interface RefineContext {\n agentId: string;\n createSession: (data: { agentId: string; sessionId: string }) => Promise<{\n data: ChatInfoResp;\n [key: string]: any;\n }>;\n sendSessionMessage: {\n (data: ChatMessageReq, options: Recordable): Promise<void>;\n abort: () => void | undefined;\n };\n abortSession: (data: { conversationId?: string; sessionId?: string }) => Promise<any>;\n}\n\n/**\n * ChatMessageReq\n */\nexport interface ChatMessageReq {\n /**\n * 是否深度思考,0否 1是\n */\n deepseek?: number;\n /**\n * 引用的网页,多个以逗号分隔\n */\n htmlUrls?: string;\n messageRequest?: MessageRequest;\n /**\n * 模型名称,Deepseek-R1、Gemini-2.5-flash、Claude-opus-4.1\n */\n modelName?: string;\n /**\n * 参考文件信息json,前端展示回显用\n */\n refFiles?: string;\n /**\n * 引用文档,多个以逗号分隔\n */\n refUrls?: string;\n /**\n * 是否搜索,0否 1是\n */\n search?: number;\n /**\n * 待优化的源内容\n */\n sourceContent?: string;\n /**\n * 待优化的内容源链接地址\n */\n sourceUrls?: string[];\n /**\n * 模板id\n */\n templateId?: number;\n tenantId?: string;\n /**\n * 会话类型,0写稿 1每日要闻\n */\n type?: number;\n userCode?: string;\n [property: string]: any;\n}\n\n/**\n * MessageRequest\n */\nexport interface MessageRequest {\n agent_id?: string;\n extra_params?: { [key: string]: { [key: string]: any } };\n message?: Message;\n meta_data?: MetaData;\n [property: string]: any;\n}\n\n/**\n * Message\n */\nexport interface Message {\n content?: string;\n conversation_id?: string;\n data?: { [key: string]: any }[];\n history?: { [key: string]: any }[];\n [property: string]: any;\n}\n\n/**\n * MetaData\n */\nexport interface MetaData {\n ai_rewrite?: string;\n data?: { [key: string]: any }[];\n is_search?: string;\n model_name?: string;\n rewrite_content?: string;\n sessionId?: string;\n url?: string[];\n word_number?: string;\n [property: string]: any;\n}\n\nexport interface ChatInfoResp {\n agentId?: string;\n chatContext?: string;\n content?: string;\n conversionId?: string;\n id?: number;\n sessionId?: string;\n welcome?: string;\n [property: string]: any;\n}\n","import { Ref, watch } from 'vue';\nimport { IEditorCore, PluginFlag } from '../../typings';\nimport { EditorComponentProps } from '../../typings/intersection/editor';\nimport {\n isNullable,\n isText,\n longestConsecutiveSubsequence,\n setAttributesAndData,\n spellingTextNode,\n} from '../../utils';\nimport { HIGHLIGHT_CLS, AUDIT_HIGHLIGHT_CLS } from '../components/editor/context';\n\n// 高亮数组接口定义\ninterface HighlightItem {\n /**\n * 完整高亮内容\n */\n content: string;\n /**\n * 已匹配上的内容(可能是content的一部分内容, 可能是content的所有内容)\n */\n matchedContent: string;\n /**\n * 包含高亮内容的文本节点\n */\n node: Node;\n /**\n * 高亮内容在文本节点中的起始偏移量\n */\n startOffset: number;\n /**\n * 高亮内容在文本节点中的结束偏移量\n */\n endOffset: number;\n /**\n * 父节点类型\n */\n parentNodeType?: PluginFlag;\n /**\n * 父节点是否是停顿节点\n */\n isPausationNode: boolean;\n /**\n * 父节点是否是读音替换节点\n */\n isPronunciationNode: boolean;\n /**\n * 父节点是否是多音字节点\n */\n isHomophoneNode: boolean;\n /**\n * 父节点是否是审核高亮节点\n */\n isHighlightNode: boolean;\n /**\n * 途径节点是否需要高亮处理\n * 只要本组匹配中出现 `false`,说明匹配内容在 `停顿标签`、`读音替换标签`、`多音字标签` 中,\n * 不需要高亮处理,直接跳过\n */\n isHighlight: boolean;\n}\n\n/**\n * 一次匹配的高亮组\n */\ntype HighlightGroup = HighlightItem[];\n/**\n * 所有匹配的高亮组\n */\ntype HighlightGroups = HighlightGroup[];\n\n/**\n * 匹配内容索引\n */\ninterface MatchingContentIndex {\n content: string;\n matchingContent: string;\n paraIndex: number;\n index: number;\n}\n\nconst queryAnchorTags = (editor: IEditorCore, anchorId: string) => {\n const [id, uid] = anchorId.split('_').map((id, index) => (index ? id : Number(id))) as [\n number,\n string | undefined\n ];\n const tags = Array.from(\n editor.element.querySelectorAll(`span[data-frag-id=\"anchor_${id}\"]`)\n ) as HTMLSpanElement[];\n\n if (uid) {\n return tags.filter((tag) => tag.dataset.uid === uid);\n }\n\n return tags.filter((tag) => !tag.dataset.uid);\n};\nconst checkHighlighted = (tag: HTMLSpanElement) => tag.classList.contains(HIGHLIGHT_CLS);\nconst addHighlight = (editor: IEditorCore, anchorId: string) => {\n const anchorTags = queryAnchorTags(editor, anchorId);\n\n anchorTags.forEach((anchorTag) => {\n !checkHighlighted(anchorTag) && anchorTag.classList.add(HIGHLIGHT_CLS);\n });\n};\nconst removeHighlight = (editor: IEditorCore, anchorId: string) => {\n const anchorTags = queryAnchorTags(editor, anchorId);\n\n anchorTags.forEach((anchorTag) => anchorTag.classList.remove(HIGHLIGHT_CLS));\n};\n\nexport const useHighlight = (editor: Ref<IEditorCore | undefined>, props: EditorComponentProps) => {\n watch(\n () => props.listenAnchorId,\n (anchorId, oldAnchorId) => {\n if (!props.highlight) return;\n\n oldAnchorId !== '-1' && removeHighlight(editor.value!, oldAnchorId);\n anchorId !== '-1' && addHighlight(editor.value!, anchorId);\n }\n );\n\n /**\n * 创建包含匹配信息的 `span` 标签\n * @param content 完整匹配内容,存储再dataset中方便使用\n * @returns HTMLSpanElement\n */\n const createHighlightTag = (content: string) => {\n const tag = document.createElement('span');\n setAttributesAndData(\n tag,\n { class: AUDIT_HIGHLIGHT_CLS },\n { type: PluginFlag.highlight, raw: content }\n );\n\n return tag;\n };\n\n /**\n * 返回匹配内容在各个段落中的位置信息\n * @param matchingContent 需要匹配的内容\n * @returns MatchingContentIndex[]\n */\n const calcContentIndexes = (matchingContent: string) => {\n const contents = editor.value?.content.getTextContent() ?? [];\n const result = contents.reduce((result, content, paraIndex) => {\n const indexes: MatchingContentIndex[] = [];\n let index = 0;\n while (index !== -1) {\n index = content.indexOf(matchingContent, index);\n if (index !== -1) {\n indexes.push({\n content,\n matchingContent,\n paraIndex,\n index,\n });\n index += matchingContent.length;\n }\n }\n\n return result.concat(indexes);\n }, [] as MatchingContentIndex[]);\n\n return result;\n };\n\n /**\n * 获取文本索引匹配组\n * @param childNodes 子节点数组\n * @param config 匹配文本信息\n * @param _matching 匹配缓存(类似match 和 reg.exec 缓存)\n * @returns HighlightGroup[]\n */\n const calc = (\n childNodes: ChildNode[],\n config: MatchingContentIndex,\n _matching?: {\n accuSearchIndex: number;\n dynamicMatchingContent: string;\n dynamicMatchingContentIndex: number;\n restIndex: number;\n }\n ) => {\n // 缓存匹配组剩余未匹配部分\n const matching = _matching ?? {\n accuSearchIndex: -1,\n dynamicMatchingContent: config.matchingContent,\n dynamicMatchingContentIndex: config.index,\n restIndex: config.index,\n };\n const result: HighlightGroup = [];\n\n for (let i = 0; i < childNodes.length; i++) {\n // 剩余匹配文字为空字符串时,退出匹配逻辑\n if (!matching.dynamicMatchingContent.length) return result;\n\n const node = childNodes[i];\n const type = (node as HTMLElement)?.dataset?.type as PluginFlag;\n\n const content = [PluginFlag.pausation, PluginFlag.homophones, PluginFlag.highlight].includes(\n type\n )\n ? (node as HTMLElement).dataset.raw ?? ''\n : PluginFlag.pronunciation === type\n ? (node as HTMLElement).dataset.value ?? ''\n : node.textContent ?? '';\n matching.restIndex = matching.dynamicMatchingContentIndex - (matching.accuSearchIndex + 1);\n\n // * 无关HTML标签, 累计计算索引长度\n if (matching.restIndex >= content.length) {\n matching.accuSearchIndex += content.length;\n continue;\n }\n\n // 停顿标签不统计字数\n if (PluginFlag.pausation === type) continue;\n // 主播划选标签递归统计字数\n if (PluginFlag.anchor === type) {\n result.push(...calc(Array.from(node.childNodes), config, matching));\n continue;\n }\n\n let textNode: Text;\n let matchingLength: number;\n\n switch (type) {\n case PluginFlag.pronunciation: {\n textNode = (node as HTMLElement).querySelector('.tag-pronunciation__replace-text')!\n .childNodes[0] as Text;\n matchingLength = longestConsecutiveSubsequence(\n textNode.textContent!,\n matching.dynamicMatchingContent\n ).length;\n break;\n }\n case PluginFlag.homophones: {\n textNode = (node as HTMLElement).querySelector('.tag-homophones__raw')!\n .childNodes[0] as Text;\n matchingLength = 1;\n break;\n }\n case PluginFlag.highlight: {\n textNode = node.childNodes[0] as Text;\n matchingLength = longestConsecutiveSubsequence(\n textNode.textContent!,\n matching.dynamicMatchingContent\n ).length;\n break;\n }\n default: {\n textNode = node as Text;\n matchingLength = longestConsecutiveSubsequence(\n textNode.textContent!,\n matching.dynamicMatchingContent\n ).length;\n break;\n }\n }\n\n result.push({\n content: config.matchingContent,\n matchedContent: matching.dynamicMatchingContent.slice(0, matchingLength),\n node: textNode,\n startOffset: matching.restIndex,\n endOffset: matching.restIndex + matchingLength,\n parentNodeType: type,\n isPausationNode: false,\n isPronunciationNode: PluginFlag.pronunciation === type,\n isHomophoneNode: PluginFlag.homophones === type,\n isHighlightNode: PluginFlag.highlight === type,\n isHighlight: ![\n PluginFlag.pronunciation,\n PluginFlag.homophones,\n PluginFlag.highlight,\n ].includes(type),\n });\n matching.accuSearchIndex = -1;\n matching.dynamicMatchingContent = matching.dynamicMatchingContent.slice(matchingLength);\n matching.dynamicMatchingContentIndex = 0;\n matching.restIndex = 0;\n\n continue;\n }\n\n return result;\n };\n\n /**\n * 高亮所有匹配有效(不携带特殊标签)的文本\n * @param matchingContent 匹配文本\n */\n const renderHighlightGroups = (matchingContent: string) => {\n const renderHighlight = (config: MatchingContentIndex) => {\n const paras = editor.value?.content.getParas() ?? [];\n const highlightGroup = calc(Array.from(paras[config.paraIndex].childNodes), config);\n\n // 一次匹配组中的子匹配不允许高亮时,本组匹配过滤\n if (highlightGroup.some((groupItem) => !groupItem.isHighlight)) return;\n\n highlightGroup.forEach((groupItem) => {\n const selection = window.getSelection();\n\n if (isNullable(selection)) return;\n\n const highlightRange = document.createRange();\n highlightRange.setStart(groupItem.node, groupItem.startOffset);\n highlightRange.setEnd(groupItem.node, groupItem.endOffset);\n highlightRange.surroundContents(createHighlightTag(groupItem.matchedContent));\n selection.removeAllRanges();\n selection.addRange(highlightRange);\n highlightRange.collapse(false);\n });\n };\n\n calcContentIndexes(matchingContent).forEach(renderHighlight);\n };\n\n /**\n * 撤销所有文本审核高亮样式标记\n */\n const unrenderHighlightGroups = () => {\n const allAuditHighlightTag = Array.from(\n editor.value?._editorElement.querySelectorAll(`.${AUDIT_HIGHLIGHT_CLS}`) ?? []\n ) as HTMLElement[];\n\n allAuditHighlightTag.forEach((tag) => {\n const tagContents = Array.from(tag.childNodes);\n const firstNode = tagContents[0];\n // 节点相同,不需要再做拼接处理\n const lastNodeIndex = tagContents.length - 1;\n const lastNode =\n tagContents[lastNodeIndex] !== tagContents[0] && isText(tagContents[lastNodeIndex])\n ? tagContents[lastNodeIndex]\n : null;\n const fragment = document.createDocumentFragment();\n\n tagContents.forEach((node) => fragment.appendChild(node));\n tag.replaceWith(fragment);\n spellingTextNode(firstNode);\n lastNode && spellingTextNode(lastNode);\n });\n };\n\n return {\n renderHighlight: renderHighlightGroups,\n unrenderHighlight: unrenderHighlightGroups,\n };\n};\n","const configProviderInjectionKey = Symbol(\"ArcoConfigProvider\");\nexport { configProviderInjectionKey };\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n if (__hasOwnProp.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b)) {\n if (__propIsEnum.call(b, prop))\n __defNormalProp(a, prop, b[prop]);\n }\n return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nimport { getCurrentInstance, inject } from \"vue\";\nimport { configProviderInjectionKey } from \"../config-provider/context.js\";\nconst COMPONENT_PREFIX = \"A\";\nconst CLASS_PREFIX = \"arco\";\nconst GLOBAL_CONFIG_NAME = \"$arco\";\nconst getComponentPrefix = (options) => {\n var _a;\n return (_a = options == null ? void 0 : options.componentPrefix) != null ? _a : COMPONENT_PREFIX;\n};\nconst setGlobalConfig = (app, options) => {\n var _a;\n if (options && options.classPrefix) {\n app.config.globalProperties[GLOBAL_CONFIG_NAME] = __spreadProps(__spreadValues({}, (_a = app.config.globalProperties[GLOBAL_CONFIG_NAME]) != null ? _a : {}), {\n classPrefix: options.classPrefix\n });\n }\n};\nconst getPrefixCls = (componentName) => {\n var _a, _b, _c;\n const instance = getCurrentInstance();\n const configProvider = inject(configProviderInjectionKey, void 0);\n const prefix = (_c = (_b = configProvider == null ? void 0 : configProvider.prefixCls) != null ? _b : (_a = instance == null ? void 0 : instance.appContext.config.globalProperties[GLOBAL_CONFIG_NAME]) == null ? void 0 : _a.classPrefix) != null ? _c : CLASS_PREFIX;\n if (componentName) {\n return `${prefix}-${componentName}`;\n }\n return prefix;\n};\nexport { getComponentPrefix, getPrefixCls, setGlobalConfig };\n","const opt = Object.prototype.toString;\nfunction isArray(obj) {\n return opt.call(obj) === \"[object Array]\";\n}\nfunction isNull(obj) {\n return opt.call(obj) === \"[object Null]\";\n}\nfunction isBoolean(obj) {\n return opt.call(obj) === \"[object Boolean]\";\n}\nfunction isObject(obj) {\n return opt.call(obj) === \"[object Object]\";\n}\nconst isPromise = (obj) => {\n return opt.call(obj) === \"[object Promise]\";\n};\nfunction isString(obj) {\n return opt.call(obj) === \"[object String]\";\n}\nfunction isNumber(obj) {\n return opt.call(obj) === \"[object Number]\" && obj === obj;\n}\nfunction isUndefined(obj) {\n return obj === void 0;\n}\nfunction isFunction(obj) {\n return typeof obj === \"function\";\n}\nfunction isEmptyObject(obj) {\n return isObject(obj) && Object.keys(obj).length === 0;\n}\nfunction isExist(obj) {\n return obj || obj === 0;\n}\nfunction isWindow(el) {\n return el === window;\n}\nconst isComponentInstance = (value) => {\n return (value == null ? void 0 : value.$) !== void 0;\n};\nconst isQuarter = (fromat) => {\n return /\\[Q]Q/.test(fromat);\n};\nfunction isDayjs(time) {\n return isObject(time) && \"$y\" in time && \"$M\" in time && \"$D\" in time && \"$d\" in time && \"$H\" in time && \"$m\" in time && \"$s\" in time;\n}\nexport { isArray, isBoolean, isComponentInstance, isDayjs, isEmptyObject, isExist, isFunction, isNull, isNumber, isObject, isPromise, isQuarter, isString, isUndefined, isWindow };\n","var _export_sfc = (sfc, props) => {\n for (const [key, val] of props) {\n sfc[key] = val;\n }\n return sfc;\n};\nexport { _export_sfc as default };\n","import { defineComponent, computed, openBlock, createElementBlock, normalizeClass, normalizeStyle, createElementVNode } from \"vue\";\nimport { getPrefixCls } from \"../../_utils/global-config.js\";\nimport { isNumber } from \"../../_utils/is.js\";\nimport _export_sfc from \"../../_virtual/plugin-vue_export-helper.js\";\nconst _sfc_main = defineComponent({\n name: \"IconRight\",\n props: {\n size: {\n type: [Number, String]\n },\n strokeWidth: {\n type: Number,\n default: 4\n },\n strokeLinecap: {\n type: String,\n default: \"butt\",\n validator: (value) => {\n return [\"butt\", \"round\", \"square\"].includes(value);\n }\n },\n strokeLinejoin: {\n type: String,\n default: \"miter\",\n validator: (value) => {\n return [\"arcs\", \"bevel\", \"miter\", \"miter-clip\", \"round\"].includes(value);\n }\n },\n rotate: Number,\n spin: Boolean\n },\n emits: {\n click: (ev) => true\n },\n setup(props, { emit }) {\n const prefixCls = getPrefixCls(\"icon\");\n const cls = computed(() => [prefixCls, `${prefixCls}-right`, { [`${prefixCls}-spin`]: props.spin }]);\n const innerStyle = computed(() => {\n const styles = {};\n if (props.size) {\n styles.fontSize = isNumber(props.size) ? `${props.size}px` : props.size;\n }\n if (props.rotate) {\n styles.transform = `rotate(${props.rotate}deg)`;\n }\n return styles;\n });\n const onClick = (ev) => {\n emit(\"click\", ev);\n };\n return {\n cls,\n innerStyle,\n onClick\n };\n }\n});\nconst _hoisted_1 = [\"stroke-width\", \"stroke-linecap\", \"stroke-linejoin\"];\nconst _hoisted_2 = /* @__PURE__ */ createElementVNode(\"path\", { d: \"m16 39.513 15.556-15.557L16 8.4\" }, null, -1);\nconst _hoisted_3 = [\n _hoisted_2\n];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", {\n viewBox: \"0 0 48 48\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n stroke: \"currentColor\",\n class: normalizeClass(_ctx.cls),\n style: normalizeStyle(_ctx.innerStyle),\n \"stroke-width\": _ctx.strokeWidth,\n \"stroke-linecap\": _ctx.strokeLinecap,\n \"stroke-linejoin\": _ctx.strokeLinejoin,\n onClick: _cache[0] || (_cache[0] = (...args) => _ctx.onClick && _ctx.onClick(...args))\n }, _hoisted_3, 14, _hoisted_1);\n}\nvar _IconRight = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\nexport { _IconRight as default };\n","import _IconRight from \"./icon-right.js\";\nconst IconRight = Object.assign(_IconRight, {\n install: (app, options) => {\n var _a;\n const iconPrefix = (_a = options == null ? void 0 : options.iconPrefix) != null ? _a : \"\";\n app.component(iconPrefix + _IconRight.name, _IconRight);\n }\n});\nexport { IconRight as default };\n","import { defineComponent, computed, openBlock, createElementBlock, normalizeClass, normalizeStyle, createElementVNode } from \"vue\";\nimport { getPrefixCls } from \"../../_utils/global-config.js\";\nimport { isNumber } from \"../../_utils/is.js\";\nimport _export_sfc from \"../../_virtual/plugin-vue_export-helper.js\";\nconst _sfc_main = defineComponent({\n name: \"IconCheckCircleFill\",\n props: {\n size: {\n type: [Number, String]\n },\n strokeWidth: {\n type: Number,\n default: 4\n },\n strokeLinecap: {\n type: String,\n default: \"butt\",\n validator: (value) => {\n return [\"butt\", \"round\", \"square\"].includes(value);\n }\n },\n strokeLinejoin: {\n type: String,\n default: \"miter\",\n validator: (value) => {\n return [\"arcs\", \"bevel\", \"miter\", \"miter-clip\", \"round\"].includes(value);\n }\n },\n rotate: Number,\n spin: Boolean\n },\n emits: {\n click: (ev) => true\n },\n setup(props, { emit }) {\n const prefixCls = getPrefixCls(\"icon\");\n const cls = computed(() => [prefixCls, `${prefixCls}-check-circle-fill`, { [`${prefixCls}-spin`]: props.spin }]);\n const innerStyle = computed(() => {\n const styles = {};\n if (props.size) {\n styles.fontSize = isNumber(props.size) ? `${props.size}px` : props.size;\n }\n if (props.rotate) {\n styles.transform = `rotate(${props.rotate}deg)`;\n }\n return styles;\n });\n const onClick = (ev) => {\n emit(\"click\", ev);\n };\n return {\n cls,\n innerStyle,\n onClick\n };\n }\n});\nconst _hoisted_1 = [\"stroke-width\", \"stroke-linecap\", \"stroke-linejoin\"];\nconst _hoisted_2 = /* @__PURE__ */ createElementVNode(\"path\", {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d: \"M24 44c11.046 0 20-8.954 20-20S35.046 4 24 4 4 12.954 4 24s8.954 20 20 20Zm10.207-24.379a1 1 0 0 0 0-1.414l-1.414-1.414a1 1 0 0 0-1.414 0L22 26.172l-4.878-4.88a1 1 0 0 0-1.415 0l-1.414 1.415a1 1 0 0 0 0 1.414l7 7a1 1 0 0 0 1.414 0l11.5-11.5Z\",\n fill: \"currentColor\",\n stroke: \"none\"\n}, null, -1);\nconst _hoisted_3 = [\n _hoisted_2\n];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", {\n viewBox: \"0 0 48 48\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n stroke: \"currentColor\",\n class: normalizeClass(_ctx.cls),\n style: normalizeStyle(_ctx.innerStyle),\n \"stroke-width\": _ctx.strokeWidth,\n \"stroke-linecap\": _ctx.strokeLinecap,\n \"stroke-linejoin\": _ctx.strokeLinejoin,\n onClick: _cache[0] || (_cache[0] = (...args) => _ctx.onClick && _ctx.onClick(...args))\n }, _hoisted_3, 14, _hoisted_1);\n}\nvar _IconCheckCircleFill = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\nexport { _IconCheckCircleFill as default };\n","import _IconCheckCircleFill from \"./icon-check-circle-fill.js\";\nconst IconCheckCircleFill = Object.assign(_IconCheckCircleFill, {\n install: (app, options) => {\n var _a;\n const iconPrefix = (_a = options == null ? void 0 : options.iconPrefix) != null ? _a : \"\";\n app.component(iconPrefix + _IconCheckCircleFill.name, _IconCheckCircleFill);\n }\n});\nexport { IconCheckCircleFill as default };\n","import { defineComponent, computed, openBlock, createElementBlock, normalizeClass, normalizeStyle, createElementVNode } from \"vue\";\nimport { getPrefixCls } from \"../../_utils/global-config.js\";\nimport { isNumber } from \"../../_utils/is.js\";\nimport _export_sfc from \"../../_virtual/plugin-vue_export-helper.js\";\nconst _sfc_main = defineComponent({\n name: \"IconCloseCircleFill\",\n props: {\n size: {\n type: [Number, String]\n },\n strokeWidth: {\n type: Number,\n default: 4\n },\n strokeLinecap: {\n type: String,\n default: \"butt\",\n validator: (value) => {\n return [\"butt\", \"round\", \"square\"].includes(value);\n }\n },\n strokeLinejoin: {\n type: String,\n default: \"miter\",\n validator: (value) => {\n return [\"arcs\", \"bevel\", \"miter\", \"miter-clip\", \"round\"].includes(value);\n }\n },\n rotate: Number,\n spin: Boolean\n },\n emits: {\n click: (ev) => true\n },\n setup(props, { emit }) {\n const prefixCls = getPrefixCls(\"icon\");\n const cls = computed(() => [prefixCls, `${prefixCls}-close-circle-fill`, { [`${prefixCls}-spin`]: props.spin }]);\n const innerStyle = computed(() => {\n const styles = {};\n if (props.size) {\n styles.fontSize = isNumber(props.size) ? `${props.size}px` : props.size;\n }\n if (props.rotate) {\n styles.transform = `rotate(${props.rotate}deg)`;\n }\n return styles;\n });\n const onClick = (ev) => {\n emit(\"click\", ev);\n };\n return {\n cls,\n innerStyle,\n onClick\n };\n }\n});\nconst _hoisted_1 = [\"stroke-width\", \"stroke-linecap\", \"stroke-linejoin\"];\nconst _hoisted_2 = /* @__PURE__ */ createElementVNode(\"path\", {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d: \"M24 44c11.046 0 20-8.954 20-20S35.046 4 24 4 4 12.954 4 24s8.954 20 20 20Zm4.955-27.771-4.95 4.95-4.95-4.95a1 1 0 0 0-1.414 0l-1.414 1.414a1 1 0 0 0 0 1.414l4.95 4.95-4.95 4.95a1 1 0 0 0 0 1.414l1.414 1.414a1 1 0 0 0 1.414 0l4.95-4.95 4.95 4.95a1 1 0 0 0 1.414 0l1.414-1.414a1 1 0 0 0 0-1.414l-4.95-4.95 4.95-4.95a1 1 0 0 0 0-1.414l-1.414-1.414a1 1 0 0 0-1.414 0Z\",\n fill: \"currentColor\",\n stroke: \"none\"\n}, null, -1);\nconst _hoisted_3 = [\n _hoisted_2\n];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", {\n viewBox: \"0 0 48 48\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n stroke: \"currentColor\",\n class: normalizeClass(_ctx.cls),\n style: normalizeStyle(_ctx.innerStyle),\n \"stroke-width\": _ctx.strokeWidth,\n \"stroke-linecap\": _ctx.strokeLinecap,\n \"stroke-linejoin\": _ctx.strokeLinejoin,\n onClick: _cache[0] || (_cache[0] = (...args) => _ctx.onClick && _ctx.onClick(...args))\n }, _hoisted_3, 14, _hoisted_1);\n}\nvar _IconCloseCircleFill = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\nexport { _IconCloseCircleFill as default };\n","import _IconCloseCircleFill from \"./icon-close-circle-fill.js\";\nconst IconCloseCircleFill = Object.assign(_IconCloseCircleFill, {\n install: (app, options) => {\n var _a;\n const iconPrefix = (_a = options == null ? void 0 : options.iconPrefix) != null ? _a : \"\";\n app.component(iconPrefix + _IconCloseCircleFill.name, _IconCloseCircleFill);\n }\n});\nexport { IconCloseCircleFill as default };\n","import { defineComponent, computed, openBlock, createElementBlock, normalizeClass, normalizeStyle, createElementVNode } from \"vue\";\nimport { getPrefixCls } from \"../../_utils/global-config.js\";\nimport { isNumber } from \"../../_utils/is.js\";\nimport _export_sfc from \"../../_virtual/plugin-vue_export-helper.js\";\nconst _sfc_main = defineComponent({\n name: \"IconExclamationCircleFill\",\n props: {\n size: {\n type: [Number, String]\n },\n strokeWidth: {\n type: Number,\n default: 4\n },\n strokeLinecap: {\n type: String,\n default: \"butt\",\n validator: (value) => {\n return [\"butt\", \"round\", \"square\"].includes(value);\n }\n },\n strokeLinejoin: {\n type: String,\n default: \"miter\",\n validator: (value) => {\n return [\"arcs\", \"bevel\", \"miter\", \"miter-clip\", \"round\"].includes(value);\n }\n },\n rotate: Number,\n spin: Boolean\n },\n emits: {\n click: (ev) => true\n },\n setup(props, { emit }) {\n const prefixCls = getPrefixCls(\"icon\");\n const cls = computed(() => [prefixCls, `${prefixCls}-exclamation-circle-fill`, { [`${prefixCls}-spin`]: props.spin }]);\n const innerStyle = computed(() => {\n const styles = {};\n if (props.size) {\n styles.fontSize = isNumber(props.size) ? `${props.size}px` : props.size;\n }\n if (props.rotate) {\n styles.transform = `rotate(${props.rotate}deg)`;\n }\n return styles;\n });\n const onClick = (ev) => {\n emit(\"click\", ev);\n };\n return {\n cls,\n innerStyle,\n onClick\n };\n }\n});\nconst _hoisted_1 = [\"stroke-width\", \"stroke-linecap\", \"stroke-linejoin\"];\nconst _hoisted_2 = /* @__PURE__ */ createElementVNode(\"path\", {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d: \"M24 44c11.046 0 20-8.954 20-20S35.046 4 24 4 4 12.954 4 24s8.954 20 20 20Zm-2-11a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1h-2a1 1 0 0 0-1 1v2Zm4-18a1 1 0 0 0-1-1h-2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1V15Z\",\n fill: \"currentColor\",\n stroke: \"none\"\n}, null, -1);\nconst _hoisted_3 = [\n _hoisted_2\n];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", {\n viewBox: \"0 0 48 48\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n stroke: \"currentColor\",\n class: normalizeClass(_ctx.cls),\n style: normalizeStyle(_ctx.innerStyle),\n \"stroke-width\": _ctx.strokeWidth,\n \"stroke-linecap\": _ctx.strokeLinecap,\n \"stroke-linejoin\": _ctx.strokeLinejoin,\n onClick: _cache[0] || (_cache[0] = (...args) => _ctx.onClick && _ctx.onClick(...args))\n }, _hoisted_3, 14, _hoisted_1);\n}\nvar _IconExclamationCircleFill = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\nexport { _IconExclamationCircleFill as default };\n","import _IconExclamationCircleFill from \"./icon-exclamation-circle-fill.js\";\nconst IconExclamationCircleFill = Object.assign(_IconExclamationCircleFill, {\n install: (app, options) => {\n var _a;\n const iconPrefix = (_a = options == null ? void 0 : options.iconPrefix) != null ? _a : \"\";\n app.component(iconPrefix + _IconExclamationCircleFill.name, _IconExclamationCircleFill);\n }\n});\nexport { IconExclamationCircleFill as default };\n","import { defineComponent, computed, openBlock, createElementBlock, normalizeClass, normalizeStyle, createElementVNode } from \"vue\";\nimport { getPrefixCls } from \"../../_utils/global-config.js\";\nimport { isNumber } from \"../../_utils/is.js\";\nimport _export_sfc from \"../../_virtual/plugin-vue_export-helper.js\";\nconst _sfc_main = defineComponent({\n name: \"IconInfoCircleFill\",\n props: {\n size: {\n type: [Number, String]\n },\n strokeWidth: {\n type: Number,\n default: 4\n },\n strokeLinecap: {\n type: String,\n default: \"butt\",\n validator: (value) => {\n return [\"butt\", \"round\", \"square\"].includes(value);\n }\n },\n strokeLinejoin: {\n type: String,\n default: \"miter\",\n validator: (value) => {\n return [\"arcs\", \"bevel\", \"miter\", \"miter-clip\", \"round\"].includes(value);\n }\n },\n rotate: Number,\n spin: Boolean\n },\n emits: {\n click: (ev) => true\n },\n setup(props, { emit }) {\n const prefixCls = getPrefixCls(\"icon\");\n const cls = computed(() => [prefixCls, `${prefixCls}-info-circle-fill`, { [`${prefixCls}-spin`]: props.spin }]);\n const innerStyle = computed(() => {\n const styles = {};\n if (props.size) {\n styles.fontSize = isNumber(props.size) ? `${props.size}px` : props.size;\n }\n if (props.rotate) {\n styles.transform = `rotate(${props.rotate}deg)`;\n }\n return styles;\n });\n const onClick = (ev) => {\n emit(\"click\", ev);\n };\n return {\n cls,\n innerStyle,\n onClick\n };\n }\n});\nconst _hoisted_1 = [\"stroke-width\", \"stroke-linecap\", \"stroke-linejoin\"];\nconst _hoisted_2 = /* @__PURE__ */ createElementVNode(\"path\", {\n \"fill-rule\": \"evenodd\",\n \"clip-rule\": \"evenodd\",\n d: \"M24 44c11.046 0 20-8.954 20-20S35.046 4 24 4 4 12.954 4 24s8.954 20 20 20Zm2-30a1 1 0 0 0-1-1h-2a1 1 0 0 0-1 1v2a1 1 0 0 0 1 1h2a1 1 0 0 0 1-1v-2Zm0 17h1a1 1 0 0 1 1 1v2a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1v-2a1 1 0 0 1 1-1h1v-8a1 1 0 0 1-1-1v-2a1 1 0 0 1 1-1h3a1 1 0 0 1 1 1v11Z\",\n fill: \"currentColor\",\n stroke: \"none\"\n}, null, -1);\nconst _hoisted_3 = [\n _hoisted_2\n];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", {\n viewBox: \"0 0 48 48\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n stroke: \"currentColor\",\n class: normalizeClass(_ctx.cls),\n style: normalizeStyle(_ctx.innerStyle),\n \"stroke-width\": _ctx.strokeWidth,\n \"stroke-linecap\": _ctx.strokeLinecap,\n \"stroke-linejoin\": _ctx.strokeLinejoin,\n onClick: _cache[0] || (_cache[0] = (...args) => _ctx.onClick && _ctx.onClick(...args))\n }, _hoisted_3, 14, _hoisted_1);\n}\nvar _IconInfoCircleFill = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\nexport { _IconInfoCircleFill as default };\n","import _IconInfoCircleFill from \"./icon-info-circle-fill.js\";\nconst IconInfoCircleFill = Object.assign(_IconInfoCircleFill, {\n install: (app, options) => {\n var _a;\n const iconPrefix = (_a = options == null ? void 0 : options.iconPrefix) != null ? _a : \"\";\n app.component(iconPrefix + _IconInfoCircleFill.name, _IconInfoCircleFill);\n }\n});\nexport { IconInfoCircleFill as default };\n","import { defineComponent, computed, openBlock, createElementBlock, normalizeClass, normalizeStyle, createElementVNode } from \"vue\";\nimport { getPrefixCls } from \"../../_utils/global-config.js\";\nimport { isNumber } from \"../../_utils/is.js\";\nimport _export_sfc from \"../../_virtual/plugin-vue_export-helper.js\";\nconst _sfc_main = defineComponent({\n name: \"IconMore\",\n props: {\n size: {\n type: [Number, String]\n },\n strokeWidth: {\n type: Number,\n default: 4\n },\n strokeLinecap: {\n type: String,\n default: \"butt\",\n validator: (value) => {\n return [\"butt\", \"round\", \"square\"].includes(value);\n }\n },\n strokeLinejoin: {\n type: String,\n default: \"miter\",\n validator: (value) => {\n return [\"arcs\", \"bevel\", \"miter\", \"miter-clip\", \"round\"].includes(value);\n }\n },\n rotate: Number,\n spin: Boolean\n },\n emits: {\n click: (ev) => true\n },\n setup(props, { emit }) {\n const prefixCls = getPrefixCls(\"icon\");\n const cls = computed(() => [prefixCls, `${prefixCls}-more`, { [`${prefixCls}-spin`]: props.spin }]);\n const innerStyle = computed(() => {\n const styles = {};\n if (props.size) {\n styles.fontSize = isNumber(props.size) ? `${props.size}px` : props.size;\n }\n if (props.rotate) {\n styles.transform = `rotate(${props.rotate}deg)`;\n }\n return styles;\n });\n const onClick = (ev) => {\n emit(\"click\", ev);\n };\n return {\n cls,\n innerStyle,\n onClick\n };\n }\n});\nconst _hoisted_1 = [\"stroke-width\", \"stroke-linecap\", \"stroke-linejoin\"];\nconst _hoisted_2 = /* @__PURE__ */ createElementVNode(\"path\", {\n d: \"M38 25v-2h2v2h-2ZM23 25v-2h2v2h-2ZM8 25v-2h2v2H8Z\",\n fill: \"currentColor\",\n stroke: \"none\"\n}, null, -1);\nconst _hoisted_3 = /* @__PURE__ */ createElementVNode(\"path\", { d: \"M38 25v-2h2v2h-2ZM23 25v-2h2v2h-2ZM8 25v-2h2v2H8Z\" }, null, -1);\nconst _hoisted_4 = [\n _hoisted_2,\n _hoisted_3\n];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n return openBlock(), createElementBlock(\"svg\", {\n viewBox: \"0 0 48 48\",\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\",\n stroke: \"currentColor\",\n class: normalizeClass(_ctx.cls),\n style: normalizeStyle(_ctx.innerStyle),\n \"stroke-width\": _ctx.strokeWidth,\n \"stroke-linecap\": _ctx.strokeLinecap,\n \"stroke-linejoin\": _ctx.strokeLinejoin,\n onClick: _cache[0] || (_cache[0] = (...args) => _ctx.onClick && _ctx.onClick(...args))\n }, _hoisted_4, 14, _hoisted_1);\n}\nvar _IconMore = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render]]);\nexport { _IconMore as default };\n","import _IconMore from \"./icon-more.js\";\nconst IconMore = Object.assign(_IconMore, {\n install: (app, options) => {\n var _a;\n const iconPrefix = (_a = options == null ? void 0 : options.iconPrefix) != null ? _a : \"\";\n app.component(iconPrefix + _IconMore.name, _IconMore);\n }\n});\nexport { IconMore as default };\n","var fQ=Object.create;var UI=Object.defineProperty;var lQ=Object.getOwnPropertyDescriptor;var dQ=Object.getOwnPropertyNames;var RQ=Object.getPrototypeOf,GQ=Object.prototype.hasOwnProperty;var Yg=(r=>typeof require<\"u\"?require:typeof Proxy<\"u\"?new Proxy(r,{get:(C,E)=>(typeof require<\"u\"?require:C)[E]}):r)(function(r){if(typeof require<\"u\")return require.apply(this,arguments);throw Error('Dynamic require of \"'+r+'\" is not supported')});var kQ=(r,C)=>()=>(C||r((C={exports:{}}).exports,C),C.exports);var LQ=(r,C,E,e)=>{if(C&&typeof C==\"object\"||typeof C==\"function\")for(let n of dQ(C))!GQ.call(r,n)&&n!==E&&UI(r,n,{get:()=>C[n],enumerable:!(e=lQ(C,n))||e.enumerable});return r};var NQ=(r,C,E)=>(E=r!=null?fQ(RQ(r)):{},LQ(C||!r||!r.__esModule?UI(E,\"default\",{value:r,enumerable:!0}):E,r));var _I=kQ((ZI,qg)=>{\"use strict\";var OI=(()=>{var r=typeof document<\"u\"?document.currentScript?.src:void 0;return typeof __filename<\"u\"&&(r||=__filename),function(C={}){var E,e=Object.assign({},C),n,y,F=new Promise((A,g)=>{n=A,y=g}),c=typeof window==\"object\",l=typeof importScripts==\"function\",L=typeof process==\"object\"&&typeof process.versions==\"object\"&&typeof process.versions.node==\"string\",N=Object.assign({},e),Y=[],P=\"./this.program\",iA=(A,g)=>{throw g},X=\"\",q,$,z;if(L){var BA=Yg(\"fs\"),eA=Yg(\"path\");X=__dirname+\"/\",q=(A,g)=>(A=zg(A)?new URL(A):eA.normalize(A),BA.readFileSync(A,g?void 0:\"utf8\")),z=A=>{var g=q(A,!0);return g.buffer||(g=new Uint8Array(g)),g},$=(A,g,I,B=!0)=>{A=zg(A)?new URL(A):eA.normalize(A),BA.readFile(A,B?void 0:\"utf8\",(i,o)=>{i?I(i):g(B?o.buffer:o)})},!e.thisProgram&&process.argv.length>1&&(P=process.argv[1].replace(/\\\\/g,\"/\")),Y=process.argv.slice(2),iA=(A,g)=>{throw process.exitCode=A,g}}else(c||l)&&(l?X=self.location.href:typeof document<\"u\"&&document.currentScript&&(X=document.currentScript.src),r&&(X=r),X.startsWith(\"blob:\")?X=\"\":X=X.substr(0,X.replace(/[?#].*/,\"\").lastIndexOf(\"/\")+1),q=A=>{var g=new XMLHttpRequest;return g.open(\"GET\",A,!1),g.send(null),g.responseText},l&&(z=A=>{var g=new XMLHttpRequest;return g.open(\"GET\",A,!1),g.responseType=\"arraybuffer\",g.send(null),new Uint8Array(g.response)}),$=(A,g,I)=>{var B=new XMLHttpRequest;B.open(\"GET\",A,!0),B.responseType=\"arraybuffer\",B.onload=()=>{if(B.status==200||B.status==0&&B.response){g(B.response);return}I()},B.onerror=I,B.send(null)});var CA=e.print||console.log.bind(console),AA=e.printErr||console.error.bind(console);Object.assign(e,N),N=null,e.arguments&&(Y=e.arguments),e.thisProgram&&(P=e.thisProgram),e.quit&&(iA=e.quit);var rA;e.wasmBinary&&(rA=e.wasmBinary);function sA(A){if(typeof L<\"u\"&&L){var g=Buffer.from(A,\"base64\");return new Uint8Array(g.buffer,g.byteOffset,g.length)}for(var I=atob(A),B=new Uint8Array(I.length),i=0;i<I.length;++i)B[i]=I.charCodeAt(i);return B}function ag(A){if(tB(A))return sA(A.slice(_g.length))}var hA,H=!1,Z,x,V,uA,qA,J,S,Vg,Pg;function BB(){var A=hA.buffer;e.HEAP8=x=new Int8Array(A),e.HEAP16=uA=new Int16Array(A),e.HEAPU8=V=new Uint8Array(A),e.HEAPU16=qA=new Uint16Array(A),e.HEAP32=J=new Int32Array(A),e.HEAPU32=S=new Uint32Array(A),e.HEAPF32=Vg=new Float32Array(A),e.HEAPF64=Pg=new Float64Array(A)}var Xg=[],Og=[],Zg=[],CB=!1;function QB(){if(e.preRun)for(typeof e.preRun==\"function\"&&(e.preRun=[e.preRun]);e.preRun.length;)eB(e.preRun.shift());yg(Xg)}function EB(){CB=!0,!e.noFSInit&&!Q.init.initialized&&Q.init(),Q.ignorePermissions=!1,cA.init(),yg(Og)}function iB(){if(e.postRun)for(typeof e.postRun==\"function\"&&(e.postRun=[e.postRun]);e.postRun.length;)oB(e.postRun.shift());yg(Zg)}function eB(A){Xg.unshift(A)}function rB(A){Og.unshift(A)}function oB(A){Zg.unshift(A)}var FA=0,Dg=null,JA=null;function jQ(A){return A}function wg(A){FA++,e.monitorRunDependencies?.(FA)}function jA(A){if(FA--,e.monitorRunDependencies?.(FA),FA==0&&(Dg!==null&&(clearInterval(Dg),Dg=null),JA)){var g=JA;JA=null,g()}}function WA(A){e.onAbort?.(A),A=\"Aborted(\"+A+\")\",AA(A),H=!0,Z=1,A+=\". Build with -sASSERTIONS for more info.\";var g=new WebAssembly.RuntimeError(A);throw y(g),g}var _g=\"data:application/octet-stream;base64,\",tB=A=>A.startsWith(_g),zg=A=>A.startsWith(\"file://\");function sB(){var A=\"data:application/octet-stream;base64,AGFzbQEAAAABwAM1YAF/AX9gAn9/AGABfwBgAn9/AX9gA39/fwF/YAZ/f39/f38Bf2ADf39/AGAEf39/fwF/YAV/f39/fwF/YAR/f39/AGAIf39/f39/f38Bf2AGf39/f39/AGAFf39/f38AYAAAYAd/f39/f39/AX9gB39/f39/f38AYAV/fn5+fgBgBX9/f39+AX9gA39+fwF+YAh/f39/f39/fwBgAAF/YAR/fn5/AGAKf39/f39/f39/fwF/YAd/f39/f35+AX9gBn9/f39+fgF/YAJ/fABgDH9/f39/f39/f39/fwF/YA9/f39/f39/f39/f39/f38AYAp/f39/f39/f39/AGALf39/f39/f39/f38Bf2AEf39/fwF+YAV/f35/fwBgBX9/f398AX9gCX9/f39/f39/fwBgDX9/f39/f39/f39/f38AYAJ/fAF/YAJ/fgBgBH5+fn4Bf2ACfn8Bf2AEf39/fgF+YAF/AXxgAn5+AXxgA39/fgBgBn98f39/fwF/YAJ8fwF8YAR/f35+AGACf38BfmAEf35+fgBgA39/fwF8YAN/f38BfWACfn4BfWADfn5+AX9gCX9/f39/f39/fwF/ArsBHwFhAWEABgFhAWIADAFhAWMAIQFhAWQAEwFhAWUABgFhAWYABgFhAWcABwFhAWgAAQFhAWkABgFhAWoAIgFhAWsACQFhAWwAAQFhAW0AAwFhAW4ACAFhAW8ACwFhAXAADwFhAXEACAFhAXIAIwFhAXMAAAFhAXQAAQFhAXUADQFhAXYAAQFhAXcABgFhAXgADQFhAXkAAQFhAXoABwFhAUEAAAFhAUIAAwFhAUMAAwFhAUQAAgFhAUUAAgOBBP8DAAMBAgABAQMDFAICEAAABgAEBAAABhAMAAgJAQ0VABAEAAEDBAENJAQDAQgIBwAGGQIKCgUFAQcBAAAJAAABBgEVJSYDAAAEAQEGAhYWAQEnBwAIBgMGAAEDAwMHAwQMAAAAAAAAAQ8EDw4OAQYAAAMBBgEJKAQAAgsJBgEBAAQAAgMDAA0NBBoMGgwBAQICAgICAgICAQwEKRANBCoBKwYACAMDFQQHAywtAgIAAwMJEAATLgYTDQIACQEBBg0ABgAAAAIGAAAICgoICi8KAAgNCgADAgACAQAEBBscBBscDAEdAQYBHQEBCwwLCwwLCwAEDQ8C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QQEgAEEDdnQiAHFFBEBB+I4CIAAgBHI2AgAgAQwBCyABKAIICyEAIAEgAzYCCCAAIAM2AgwgAyABNgIMIAMgADYCCA8LQR8hAiAAQf///wdNBEAgAEEmIABBCHZnIgFrdkEBcSABQQF0a0E+aiECCyADIAI2AhwgA0IANwIQIAJBAnRBqJECaiEHAn8CQAJ/QfyOAigCACIBQQEgAnQiBHFFBEBB/I4CIAEgBHI2AgBBGCECIAchBEEIDAELIABBGSACQQF2a0EAIAJBH0cbdCECIAcoAgAhBANAIAQiASgCBEF4cSAARg0CIAJBHXYhBCACQQF0IQIgASAEQQRxakEQaiIHKAIAIgQNAAtBGCECIAEhBEEICyEAIAMiAQwBCyABKAIIIgQgAzYCDEEIIQIgAUEIaiEHQRghAEEACyEFIAcgAzYCACACIANqIAQ2AgAgAyABNgIMIAAgA2ogBTYCAEGYjwJBmI8CKAIAQQFrIgBBfyAAGzYCAAsLBgAgABApC8MKAgV/EX4jAEHgAGsiBSQAIARC////////P4MhDCACIASFQoCAgICAgICAgH+DIQogAkL///////8/gyINQiCIIQ4gBEIwiKdB//8BcSEHAkACQCACQjCIp0H//wFxIglB//8Ba0GCgH5PBEAgB0H//wFrQYGAfksNAQsgAVAgAkL///////////8AgyILQoCAgICAgMD//wBUIAtCgICAgICAwP//AFEbRQRAIAJCgICAgICAIIQhCgwCCyADUCAEQv///////////wCDIgJCgICAgICAwP//AFQgAkKAgICAgIDA//8AURtFBEAgBEKAgICAgIAghCEKIAMhAQwCCyABIAtCgICAgICAwP//AIWEUARAIAIgA4RQBEBCgICAgICA4P//ACEKQgAhAQwDCyAKQoCAgICAgMD//wCEIQpCACEBDAILIAMgAkKAgICAgIDA//8AhYRQBEAgASALhCEZQgAhASAZUARAQoCAgICAgOD//wAhCgwDCyAKQoCAgICAgMD//wCEIQoMAgsgASALhFAEQEIAIQEMAgsgAiADhFAEQEIAIQEMAgsgC0L///////8/WARAIAVB0ABqIAEgDSABIA0gDVAiBht5IAZBBnStfKciBkEPaxA8QRAgBmshBiAFKQNYIg1CIIghDiAFKQNQIQELIAJC////////P1YNACAFQUBrIAMgDCADIAwgDFAiCBt5IAhBBnStfKciCEEPaxA8IAYgCGtBEGohBiAFKQNIIQwgBSkDQCEDCyADQg+GIgtCgID+/w+DIgIgAUIgiCIEfiIQIAtCIIgiEyABQv////8PgyIBfnwiD0IghiIRIAEgAn58IgsgEVStIAIgDUL/////D4MiDX4iFSAEIBN+fCIRIAxCD4YiEiADQjGIhEL/////D4MiAyABfnwiFCAPIBBUrUIghiAPQiCIhHwiDyACIA5CgIAEhCIMfiIWIA0gE358Ig4gEkIgiEKAgICACIQiAiABfnwiECADIAR+fCISQiCGfCIXfCEBIAcgCWogBmpB//8AayEGAkAgAiAEfiIYIAwgE358IgQgGFStIAQgBCADIA1+fCIEVq18IAIgDH58IAQgBCARIBVUrSARIBRWrXx8IgRWrXwgAyAMfiIDIAIgDX58IgIgA1StQiCGIAJCIIiEfCAEIAJCIIZ8IgIgBFStfCACIAIgECASVq0gDiAWVK0gDiAQVq18fEIghiASQiCIhHwiAlatfCACIAIgDyAUVK0gDyAXVq18fCICVq18IgRCgICAgICAwACDQgBSBEAgBkEBaiEGDAELIAtCP4ghGiAEQgGGIAJCP4iEIQQgAkIBhiABQj+IhCECIAtCAYYhCyAaIAFCAYaEIQELIAZB//8BTgRAIApCgICAgICAwP//AIQhCkIAIQEMAQsCfiAGQQBMBEBBASAGayIHQf8ATQRAIAVBMGogCyABIAZB/wBqIgYQPCAFQSBqIAIgBCAGEDwgBUEQaiALIAEgBxBgIAUgAiAEIAcQYCAFKQMwIAUpAziEQgBSrSAFKQMgIAUpAxCEhCELIAUpAyggBSkDGIQhASAFKQMAIQIgBSkDCAwCC0IAIQEMAgsgBEL///////8/gyAGrUIwhoQLIAqEIQogC1AgAUIAWSABQoCAgICAgICAgH9RG0UEQCAKIAJCAXwiAVCtfCEKDAELIAsgAUKAgICAgICAgIB/hYRCAFIEQCACIQEMAQsgCiACIAJCAYN8IgEgAlStfCEKCyAAIAE3AwAgACAKNwMIIAVB4ABqJAALhQEBBX8jAEEQayIBJAAgASAANgIMIwBBEGsiAiQAIAAoAgBBf0cEQCACQQxqIgMgAUEMajYCACACQQhqIgQgAzYCAANAIAAoAgAiA0EBRg0ACyADRQRAIABBATYCACAEEPQBIABBfzYCAAsLIAJBEGokACAAKAIEIQUgAUEQaiQAIAVBAWsLzigBDH8jAEEQayIKJAACQAJAAkACQAJAAkACQAJAAkACQCAAQfQBTQRAQfiOAigCACIEQRAgAEELakH4A3EgAEELSRsiBkEDdiIAdiIBQQNxBEACQCABQX9zQQFxIABqIgJBA3QiAUGgjwJqIgAgAUGojwJqKAIAIgEoAggiBUYEQEH4jgIgBEF+IAJ3cTYCAAwBCyAFIAA2AgwgACAFNgIICyABQQhqIQAgASACQQN0IgJBA3I2AgQgASACaiIBIAEoAgRBAXI2AgQMCwsgBkGAjwIoAgAiCE0NASABBEACQEECIAB0IgJBACACa3IgASAAdHFoIgFBA3QiAEGgjwJqIgIgAEGojwJqKAIAIgAoAggiBUYEQEH4jgIgBEF+IAF3cSIENgIADAELIAUgAjYCDCACIAU2AggLIAAgBkEDcjYCBCAAIAZqIgcgAUEDdCIBIAZrIgVBAXI2AgQgACABaiAFNgIAIAgEQCAIQXhxQaCPAmohAUGMjwIoAgAhAgJ/IARBASAIQQN2dCIDcUUEQEH4jgIgAyAEcjYCACABDAELIAEoAggLIQMgASACNgIIIAMgAjYCDCACIAE2AgwgAiADNgIICyAAQQhqIQBBjI8CIAc2AgBBgI8CIAU2AgAMCwtB/I4CKAIAIgtFDQEgC2hBAnRBqJECaigCACICKAIEQXhxIAZrIQMgAiEBA0ACQCABKAIQIgBFBEAgASgCFCIARQ0BCyAAKAIEQXhxIAZrIgEgAyABIANJIgEbIQMgACACIAEbIQIgACEBDAELCyACKAIYIQkgAiACKAIMIgBHBEAgAigCCCIBIAA2AgwgACABNgIIDAoLIAIoAhQiAQR/IAJBFGoFIAIoAhAiAUUNAyACQRBqCyEFA0AgBSEHIAEiAEEUaiEFIAAoAhQiAQ0AIABBEGohBSAAKAIQIgENAAsgB0EANgIADAkLQX8hBiAAQb9/Sw0AIABBC2oiAEF4cSEGQfyOAigCACIHRQ0AQQAgBmshAwJAAkACQAJ/QQAgBkGAAkkNABpBHyAGQf///wdLDQAaIAZBJiAAQQh2ZyIAa3ZBAXEgAEEBdGtBPmoLIghBAnRBqJECaigCACIBRQRAQQAhAAwBC0EAIQAgBkEZIAhBAXZrQQAgCEEfRxt0IQIDQAJAIAEoAgRBeHEgBmsiBCADTw0AIAEhBSAEIgMNAEEAIQMgASEADAMLIAAgASgCFCIEIAQgASACQR12QQRxaigCECIBRhsgACAEGyEAIAJBAXQhAiABDQALCyAAIAVyRQRAQQAhBUECIAh0IgBBACAAa3IgB3EiAEUNAyAAaEECdEGokQJqKAIAIQALIABFDQELA0AgACgCBEF4cSAGayICIANJIQEgAiADIAEbIQMgACAFIAEbIQUgACgCECIBBH8gAQUgACgCFAsiAA0ACwsgBUUNACADQYCPAigCACAGa08NACAFKAIYIQggBSAFKAIMIgBHBEAgBSgCCCIBIAA2AgwgACABNgIIDAgLIAUoAhQiAQR/IAVBFGoFIAUoAhAiAUUNAyAFQRBqCyECA0AgAiEEIAEiAEEUaiECIAAoAhQiAQ0AIABBEGohAiAAKAIQIgENAAsgBEEANgIADAcLIAZBgI8CKAIAIgVNBEBBjI8CKAIAIQACQCAFIAZrIgFBEE8EQCAAIAZqIgIgAUEBcjYCBCAAIAVqIAE2AgAgACAGQQNyNgIEDAELIAAgBUEDcjYCBCAAIAVqIgEgASgCBEEBcjYCBEEAIQJBACEBC0GAjwIgATYCAEGMjwIgAjYCACAAQQhqIQAMCQsgBkGEjwIoAgAiAkkEQEGEjwIgAiAGayIBNgIAQZCPAkGQjwIoAgAiACAGaiICNgIAIAIgAUEBcjYCBCAAIAZBA3I2AgQgAEEIaiEADAkLQQAhACAGQS9qIgMCf0HQkgIoAgAEQEHYkgIoAgAMAQtB3JICQn83AgBB1JICQoCggICAgAQ3AgBB0JICIApBDGpBcHFB2KrVqgVzNgIAQeSSAkEANgIAQbSSAkEANgIAQYAgCyIBaiIEQQAgAWsiB3EiASAGTQ0IQbCSAigCACIFBEBBqJICKAIAIgggAWoiCSAITQ0JIAUgCUkNCQsCQEG0kgItAABBBHFFBEACQAJAAkACQEGQjwIoAgAiBQRAQbiSAiEAA0AgBSAAKAIAIghPBEAgCCAAKAIEaiAFSw0DCyAAKAIIIgANAAsLQQAQZSICQX9GDQMgASEEQdSSAigCACIAQQFrIgUgAnEEQCABIAJrIAIgBWpBACAAa3FqIQQLIAQgBk0NA0GwkgIoAgAiAARAQaiSAigCACIFIARqIgcgBU0NBCAAIAdJDQQLIAQQZSIAIAJHDQEMBQsgBCACayAHcSIEEGUiAiAAKAIAIAAoAgRqRg0BIAIhAAsgAEF/Rg0BIAZBMGogBE0EQCAAIQIMBAtB2JICKAIAIgIgAyAEa2pBACACa3EiAhBlQX9GDQEgAiAEaiEEIAAhAgwDCyACQX9HDQILQbSSAkG0kgIoAgBBBHI2AgALIAEQZSECQQAQZSEAIAJBf0YNBSAAQX9GDQUgACACTQ0FIAAgAmsiBCAGQShqTQ0FC0GokgJBqJICKAIAIARqIgA2AgBBrJICKAIAIABJBEBBrJICIAA2AgALAkBBkI8CKAIAIgMEQEG4kgIhAANAIAIgACgCACIBIAAoAgQiBWpGDQIgACgCCCIADQALDAQLQYiPAigCACIAQQAgACACTRtFBEBBiI8CIAI2AgALQQAhAEG8kgIgBDYCAEG4kgIgAjYCAEGYjwJBfzYCAEGcjwJB0JICKAIANgIAQcSSAkEANgIAA0AgAEEDdCIBQaiPAmogAUGgjwJqIgU2AgAgAUGsjwJqIAU2AgAgAEEBaiIAQSBHDQALQYSPAiAEQShrIgBBeCACa0EHcSIBayIFNgIAQZCPAiABIAJqIgE2AgAgASAFQQFyNgIEIAAgAmpBKDYCBEGUjwJB4JICKAIANgIADAQLIAIgA00NAiABIANLDQIgACgCDEEIcQ0CIAAgBCAFajYCBEGQjwIgA0F4IANrQQdxIgBqIgE2AgBBhI8CQYSPAigCACAEaiICIABrIgA2AgAgASAAQQFyNgIEIAIgA2pBKDYCBEGUjwJB4JICKAIANgIADAMLQQAhAAwGC0EAIQAMBAtBiI8CKAIAIAJLBEBBiI8CIAI2AgALIAIgBGohBUG4kgIhAAJAA0AgBSAAKAIAIgFHBEAgACgCCCIADQEMAgsLIAAtAAxBCHFFDQMLQbiSAiEAA0ACQCADIAAoAgAiAU8EQCABIAAoAgRqIgUgA0sNAQsgACgCCCEADAELC0GEjwIgBEEoayIAQXggAmtBB3EiAWsiBzYCAEGQjwIgASACaiIBNgIAIAEgB0EBcjYCBCAAIAJqQSg2AgRBlI8CQeCSAigCADYCACADIAVBJyAFa0EHcWpBL2siACAAIANBEGpJGyIBQRs2AgQgAUHAkgIpAgA3AhAgAUG4kgIpAgA3AghBwJICIAFBCGo2AgBBvJICIAQ2AgBBuJICIAI2AgBBxJICQQA2AgAgAUEYaiEAA0AgAEEHNgIEIABBCGohDCAAQQRqIQAgDCAFSQ0ACyABIANGDQAgASABKAIEQX5xNgIEIAMgASADayICQQFyNgIEIAEgAjYCAAJ/IAJB/wFNBEAgAkF4cUGgjwJqIQACf0H4jgIoAgAiAUEBIAJBA3Z0IgJxRQRAQfiOAiABIAJyNgIAIAAMAQsgACgCCAshASAAIAM2AgggASADNgIMQQwhAkEIDAELQR8hACACQf///wdNBEAgAkEmIAJBCHZnIgBrdkEBcSAAQQF0a0E+aiEACyADIAA2AhwgA0IANwIQIABBAnRBqJECaiEBAkACQEH8jgIoAgAiBUEBIAB0IgRxRQRAQfyOAiAEIAVyNgIAIAEgAzYCAAwBCyACQRkgAEEBdmtBACAAQR9HG3QhACABKAIAIQUDQCAFIgEoAgRBeHEgAkYNAiAAQR12IQUgAEEBdCEAIAEgBUEEcWoiBCgCECIFDQALIAQgAzYCEAsgAyABNgIYQQghAiADIgEhAEEMDAELIAEoAggiACADNgIMIAEgAzYCCCADIAA2AghBACEAQRghAkEMCyADaiABNgIAIAIgA2ogADYCAAtBhI8CKAIAIgAgBk0NAEGEjwIgACAGayIBNgIAQZCPAkGQjwIoAgAiACAGaiICNgIAIAIgAUEBcjYCBCAAIAZBA3I2AgQgAEEIaiEADAQLQdySAUEwNgIAQQAhAAwDCyAAIAI2AgAgACAAKAIEIARqNgIEIAJBeCACa0EHcWoiCCAGQQNyNgIEIAFBeCABa0EHcWoiBCAGIAhqIgNrIQcCQEGQjwIoAgAgBEYEQEGQjwIgAzYCAEGEjwJBhI8CKAIAIAdqIgA2AgAgAyAAQQFyNgIEDAELQYyPAigCACAERgRAQYyPAiADNgIAQYCPAkGAjwIoAgAgB2oiADYCACADIABBAXI2AgQgACADaiAANgIADAELIAQoAgQiAEEDcUEBRgRAIABBeHEhCSAEKAIMIQICQCAAQf8BTQRAIAQoAggiASACRgRAQfiOAkH4jgIoAgBBfiAAQQN2d3E2AgAMAgsgASACNgIMIAIgATYCCAwBCyAEKAIYIQYCQCACIARHBEAgBCgCCCIAIAI2AgwgAiAANgIIDAELAkAgBCgCFCIABH8gBEEUagUgBCgCECIARQ0BIARBEGoLIQEDQCABIQUgACICQRRqIQEgACgCFCIADQAgAkEQaiEBIAIoAhAiAA0ACyAFQQA2AgAMAQtBACECCyAGRQ0AAkAgBCgCHCIAQQJ0QaiRAmoiASgCACAERgRAIAEgAjYCACACDQFB/I4CQfyOAigCAEF+IAB3cTYCAAwCCyAGQRBBFCAGKAIQIARGG2ogAjYCACACRQ0BCyACIAY2AhggBCgCECIABEAgAiAANgIQIAAgAjYCGAsgBCgCFCIARQ0AIAIgADYCFCAAIAI2AhgLIAcgCWohByAEIAlqIgQoAgQhAAsgBCAAQX5xNgIEIAMgB0EBcjYCBCADIAdqIAc2AgAgB0H/AU0EQCAHQXhxQaCPAmohAAJ/QfiOAigCACIBQQEgB0EDdnQiAnFFBEBB+I4CIAEgAnI2AgAgAAwBCyAAKAIICyEBIAAgAzYCCCABIAM2AgwgAyAANgIMIAMgATYCCAwBC0EfIQIgB0H///8HTQRAIAdBJiAHQQh2ZyIAa3ZBAXEgAEEBdGtBPmohAgsgAyACNgIcIANCADcCECACQQJ0QaiRAmohAAJAAkBB/I4CKAIAIgFBASACdCIFcUUEQEH8jgIgASAFcjYCACAAIAM2AgAMAQsgB0EZIAJBAXZrQQAgAkEfRxt0IQIgACgCACEBA0AgASIAKAIEQXhxIAdGDQIgAkEddiEBIAJBAXQhAiAAIAFBBHFqIgUoAhAiAQ0ACyAFIAM2AhALIAMgADYCGCADIAM2AgwgAyADNgIIDAELIAAoAggiASADNgIMIAAgAzYCCCADQQA2AhggAyAANgIMIAMgATYCCAsgCEEIaiEADAILAkAgCEUNAAJAIAUoAhwiAUECdEGokQJqIgIoAgAgBUYEQCACIAA2AgAgAA0BQfyOAiAHQX4gAXdxIgc2AgAMAgsgCEEQQRQgCCgCECAFRhtqIAA2AgAgAEUNAQsgACAINgIYIAUoAhAiAQRAIAAgATYCECABIAA2AhgLIAUoAhQiAUUNACAAIAE2AhQgASAANgIYCwJAIANBD00EQCAFIAMgBmoiAEEDcjYCBCAAIAVqIgAgACgCBEEBcjYCBAwBCyAFIAZBA3I2AgQgBSAGaiIEIANBAXI2AgQgAyAEaiADNgIAIANB/wFNBEAgA0F4cUGgjwJqIQACf0H4jgIoAgAiAUEBIANBA3Z0IgJxRQRAQfiOAiABIAJyNgIAIAAMAQsgACgCCAshASAAIAQ2AgggASAENgIMIAQgADYCDCAEIAE2AggMAQtBHyEAIANB////B00EQCADQSYgA0EIdmciAGt2QQFxIABBAXRrQT5qIQALIAQgADYCHCAEQgA3AhAgAEECdEGokQJqIQECQAJAIAdBASAAdCICcUUEQEH8jgIgAiAHcjYCACABIAQ2AgAgBCABNgIYDAELIANBGSAAQQF2a0EAIABBH0cbdCEAIAEoAgAhAQNAIAEiAigCBEF4cSADRg0CIABBHXYhASAAQQF0IQAgAiABQQRxaiIHKAIQIgENAAsgByAENgIQIAQgAjYCGAsgBCAENgIMIAQgBDYCCAwBCyACKAIIIgAgBDYCDCACIAQ2AgggBEEANgIYIAQgAjYCDCAEIAA2AggLIAVBCGohAAwBCwJAIAlFDQACQCACKAIcIgFBAnRBqJECaiIFKAIAIAJGBEAgBSAANgIAIAANAUH8jgIgC0F+IAF3cTYCAAwCCyAJQRBBFCAJKAIQIAJGG2ogADYCACAARQ0BCyAAIAk2AhggAigCECIBBEAgACABNgIQIAEgADYCGAsgAigCFCIBRQ0AIAAgATYCFCABIAA2AhgLAkAgA0EPTQRAIAIgAyAGaiIAQQNyNgIEIAAgAmoiACAAKAIEQQFyNgIEDAELIAIgBkEDcjYCBCACIAZqIgUgA0EBcjYCBCADIAVqIAM2AgAgCARAIAhBeHFBoI8CaiEAQYyPAigCACEBAn9BASAIQQN2dCIHIARxRQRAQfiOAiAEIAdyNgIAIAAMAQsgACgCCAshBCAAIAE2AgggBCABNgIMIAEgADYCDCABIAQ2AggLQYyPAiAFNgIAQYCPAiADNgIACyACQQhqIQALIApBEGokACAAC4IKAQl/IwBBEGsiCSQAIAEgASgCBEEBajYCBCMAQRBrIgMkACADIAE2AgwgCSADKAIMNgIMIANBEGokACACIABBCGoiASgCBCABKAIAIgNrQQJ1TwRAAkAgAkEBaiIAIAEoAgQiBCADa0ECdSIDSwRAIwBBIGsiCyQAAkAgACADayIGIAEoAgggBGtBAnVNBEAgASAGEPcBDAELIAFBDGohByALQQxqIQACfyAGIAEoAgQgASgCAGtBAnVqIQUjAEEQayIDJAAgAyAFNgIMIAUgARDeASIETQRAIAEoAgggASgCAGtBAnUiBSAEQQF2SQRAIAMgBUEBdDYCCCMAQRBrIgQkACADQQhqIgUoAgAgA0EMaiIIKAIASSEKIARBEGokACAIIAUgChsoAgAhBAsgA0EQaiQAIAQMAQsQ3QEACyEFIAEoAgQgASgCAGtBAnUhCEEAIQQjAEEQayIDJAAgA0EANgIMIABBADYCDCAAIAc2AhAgBQR/IANBBGogACgCECAFENwBIAMoAgQhBCADKAIIBUEACyEFIAAgBDYCACAAIAQgCEECdGoiBzYCCCAAIAc2AgQgACAEIAVBAnRqNgIMIANBEGokACMAQRBrIgMkACAAKAIIIQQgAyAAQQhqNgIMIAMgBDYCBCADIAQgBkECdGo2AgggAygCBCEEA0AgAygCCCAERwRAIAAoAhAaIAMoAgRBADYCACADIAMoAgRBBGoiBDYCBAwBCwsgAygCDCADKAIENgIAIANBEGokACMAQRBrIgYkACAGIAEoAgQ2AgggBiABKAIANgIEIAYgACgCBDYCACAGKAIIIQcgBigCBCEIIAYoAgAhCiMAQRBrIgUkACMAQSBrIgMkACMAQRBrIgQkACAEIAc2AgwgBCAINgIIIAMgBCgCDDYCGCADIAQoAgg2AhwgBEEQaiQAIAMoAhghByADKAIcIQgjAEEQayIEJAAgBCAINgIIIAQgBzYCDCAEIAo2AgQDQCAEKAIMIgcgBCgCCEcEQCAEKAIEQQRrIAdBBGsoAgA2AgAgBCAEKAIMQQRrNgIMIAQgBCgCBEEEazYCBAwBCwsgAyAEKAIMNgIQIAMgBCgCBDYCFCAEQRBqJAAgAyADKAIQNgIMIAMgAygCFDYCCCAFIAMoAgw2AgggBSADKAIINgIMIANBIGokACAFKAIMIQMgBUEQaiQAIAYgAzYCDCAAIAYoAgw2AgQgASgCACEDIAEgACgCBDYCACAAIAM2AgQgASgCBCEDIAEgACgCCDYCBCAAIAM2AgggASgCCCEDIAEgACgCDDYCCCAAIAM2AgwgACAAKAIENgIAIAEoAgQaIAEoAgAaIAZBEGokACAAKAIEIQMDQCADIAAoAggiBEcEQCAAKAIQGiAAIARBBGs2AggMAQsLIAAoAgAiAwRAIABBDGooAgAaIAAoAhAgAxDaAQsLIAtBIGokAAwBCyAAIANJBEAgASgCBBogASABKAIAIABBAnRqENsBCwsLIAEoAgAgAkECdGooAgAiAARAIAAgACgCBEEBayIDNgIEIANBf0YEQCAAIAAoAgAoAggRAgALCyAJKAIMIQAgCUEANgIMIAEoAgAgAkECdGogADYCACAJKAIMIQAgCUEANgIMIAAEQCAAIAAoAgRBAWsiATYCBCABQX9GBEAgACAAKAIAKAIIEQIACwsgCUEQaiQACx4AIAAtAAtBB3YEQCAAKAIIGiAAKAIAQQQQVQsgAAs0AQF/IwBBEGsiAyQAIAMgATYCDCAAIAMoAgw2AgAgAEEEaiACKAIANgIAIANBEGokACAACywAIAJFBEAgACgCBCABKAIERg8LIAAgAUYEQEEBDwsgACgCBCABKAIEEHxFCw0AIAAoAgAQsAIaIAALDQAgACgCABC2AhogAAsXACAALQAAQSBxRQRAIAEgAiAAEH0aCwt1AQF+IAAgASAEfiACIAN+fCADQiCIIgIgAUIgiCIEfnwgA0L/////D4MiAyABQv////8PgyIBfiIFQiCIIAMgBH58IgNCIIh8IAEgAn4gA0L/////D4N8IgFCIIh8NwMIIAAgBUL/////D4MgAUIghoQ3AwALawEBfyMAQYACayIFJAACQCACIANMDQAgBEGAwARxDQAgBSABIAIgA2siA0GAAiADQYACSSIBGxBHGiABRQRAA0AgACAFQYACEDQgA0GAAmsiA0H/AUsNAAsLIAAgBSADEDQLIAVBgAJqJAALBABBAAtrAQJ/IwBBEGsiBSQAIAUgAjYCDCAFIAQ2AgggBUEEaiAFQQxqEEghBiAAIAEgAyAFKAIIEHshASAGKAIAIgAEQEHQtAEoAgAaIAAEQEHQtAFBgJMBIAAgAEF/Rhs2AgALCyAFQRBqJAAgAQvtAQECfwJ/IAAtAAtBB3YEQCAAKAIEDAELIAAtAAtB/wBxCyEEAkAgAiABa0EFSA0AIARFDQAgASACEIUBIAJBBGshBAJ/IAAtAAtBB3YEQCAAKAIEDAELIAAtAAtB/wBxCwJ/IAAtAAtBB3YEQCAAKAIADAELIAALIgJqIQUCQANAAkAgAiwAACEAIAEgBE8NAAJAIABBAEwNACAAQf8ATg0AIAAgASgCAEcNAwsgAUEEaiEBIAIgBSACa0EBSmohAgwBCwsgAEEATA0BIABB/wBODQEgAiwAACAEKAIAQQFrSw0BCyADQQQ2AgALC7kBAQJ/IwBBEGsiAiQAIAAtAAtBB3YEQCAAKAIIGiAAKAIAQQEQVQsCfyABLQALQQd2BEAgASgCBAwBCyABLQALCxogAS0AC0EHdiEDIAAgASgCCDYCCCAAIAEpAgA3AgAgASABLQALQYABcToACyABIAEtAAtB/wBxOgALIAJBADoADyABIAItAA86AAACQCAAIAFGIgENACADDQALIAAtAAtBB3YhAAJAIAENACAADQALIAJBEGokAAsGABDwAQALUAEBfgJAIANBwABxBEAgASADQUBqrYYhAkIAIQEMAQsgA0UNACACIAOtIgSGIAFBwAAgA2utiIQhAiABIASGIQELIAAgATcDACAAIAI3AwgLPAECf0EBIAAgAEEBTRshAQNAAkAgARAtIgANAEGsqgIoAgAiAkUNACACEQ0ADAELCyAARQRAENYBCyAAC8wJAgR/BX4jAEHwAGsiBiQAIARC////////////AIMhCQJAAkAgAVAiBSACQv///////////wCDIgpCgICAgICAwP//AH1CgICAgICAwICAf1QgClAbRQRAIANCAFIgCUKAgICAgIDA//8AfSILQoCAgICAgMCAgH9WIAtCgICAgICAwICAf1EbDQELIAUgCkKAgICAgIDA//8AVCAKQoCAgICAgMD//wBRG0UEQCACQoCAgICAgCCEIQQgASEDDAILIANQIAlCgICAgICAwP//AFQgCUKAgICAgIDA//8AURtFBEAgBEKAgICAgIAghCEEDAILIAEgCkKAgICAgIDA//8AhYRQBEBCgICAgICA4P//ACACIAEgA4UgAiAEhUKAgICAgICAgIB/hYRQIgUbIQRCACABIAUbIQMMAgsgAyAJQoCAgICAgMD//wCFhFANASABIAqEUARAIAMgCYRCAFINAiABIAODIQMgAiAEgyEEDAILIAMgCYRCAFINACABIQMgAiEEDAELIAMgASABIANUIAkgClYgCSAKURsiCBshCiAEIAIgCBsiDEL///////8/gyEJIAIgBCAIGyIL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KAIkNgIkIAIgASgCKDYCKCACIAEoAiw2AiwgAiABKAIwNgIwIAIgASgCNDYCNCACIAEoAjg2AjggAiABKAI8NgI8IAFBQGshASACQUBrIgIgBU0NAAsLIAIgBE8NAQNAIAIgASgCADYCACABQQRqIQEgAkEEaiICIARJDQALDAELIANBBEkEQCAAIQIMAQsgACADQQRrIgRLBEAgACECDAELIAAhAgNAIAIgAS0AADoAACACIAEtAAE6AAEgAiABLQACOgACIAIgAS0AAzoAAyABQQRqIQEgAkEEaiICIARNDQALCyACIANJBEADQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADRw0ACwsgAAsgACMAQRBrIgEkACAAQgA3AgAgAEEANgIIIAFBEGokAAsIAEHXCxBQAAtHAQJ/IAAgATcDcCAAIAAoAiwgACgCBCIDa6w3A3ggACgCCCECAkAgAVANACACIANrrCABVw0AIAMgAadqIQILIAAgAjYCaAvyAgICfwF+AkAgAkUNACAAIAE6AAAgACACaiIDQQFrIAE6AAAgAkEDSQ0AIAAgAToAAiAAIAE6AAEgA0EDayABOgAAIANBAmsgAToAACACQQdJDQAgACABOgADIANBBGsgAToAACACQQlJDQAgAEEAIABrQQNxIgRqIgMgAUH/AXFBgYKECGwiATYCACADIAIgBGtBfHEiBGoiAkEEayABNgIAIARBCUkNACADIAE2AgggAyABNgIEIAJBCGsgATYCACACQQxrIAE2AgAgBEEZSQ0AIAMgATYCGCADIAE2AhQgAyABNgIQIAMgATYCDCACQRBrIAE2AgAgAkEUayABNgIAIAJBGGsgATYCACACQRxrIAE2AgAgBCADQQRxQRhyIgRrIgJBIEkNACABrUKBgICAEH4hBSADIARqIQEDQCABIAU3AxggASAFNwMQIAEgBTcDCCABIAU3AwAgAUEgaiEBIAJBIGsiAkEfSw0ACwsgAAs9AQF/QdC0ASgCACECIAEoAgAiAQRAQdC0AUGAkwEgASABQX9GGzYCAAsgAEF/IAIgAkGAkwFGGzYCACAAC7kBAQJ/IwBBEGsiAiQAIAAtAAtBB3YEQCAAKAIIGiAAKAIAQQQQVQsCfyABLQALQQd2BEAgASgCBAwBCyABLQALCxogAS0AC0EHdiEDIAAg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IAAgAjYCDCAAKAIMIQMgAEEQaiQAIAFBEGokACADC3YBAX8jAEEQayICJAAgAiAANgIMAkAgACABRg0AA0AgAiABQQFrIgE2AgggACABTw0BIAIoAgwiAC0AACEBIAAgAigCCCIALQAAOgAAIAAgAToAACACIAIoAgxBAWoiADYCDCACKAIIIQEMAAsACyACQRBqJAALhAEBAn8jAEEQayIEJAAjAEEgayIDJAAgA0EYaiAAIAAgAUECdGoQkQEgA0EQaiADKAIYIAMoAhwgAhCuAiADIAAgAygCECAAa2o2AgwgAyACIAMoAhQgAmtqNgIIIAQgAygCDDYCCCAEIAMoAgg2AgwgA0EgaiQAIAQoAgwaIARBEGokAAs4ACAALQALQQd2BEAgACABNgIEDwsgACAALQALQYABcSABQf8AcXI6AAsgACAALQALQf8AcToACwtQAQF+AkAgA0HAAHEEQCACIANBQGqtiCEBQgAhAgwBCyADRQ0AIAJBwAAgA2uthiABIAOtIgSIhCEBIAIgBIghAgsgACABNwMAIAAgAjcDCAvbAQIBfwJ+QQEhBAJAIABCAFIgAUL///////////8AgyIFQoCAgICAgMD//wBWIAVCgICAgICAwP//AFEbDQAgAkIAUiADQv///////////wCDIgZCgICAgICAwP//AFYgBkKAgICAgIDA//8AURsNACAAIAKEIAUgBoSEUARAQQAPCyABIAODQgBZBEBBfyEEIAAgAlQgASADUyABIANRGw0BIAAgAoUgASADhYRCAFIPC0F/IQQgACACViABIANVIAEgA1EbDQAgACAChSABIAOFhEIAUiEECyAEC4MBAgV/AX4CQCAAQoCAgIAQVARAIAAhBwwBCwNAIAFBAWsiASAAIABCCoAiB0IKfn2nQTByOgAAIABC/////58BViEFIAchACAFDQALCyAHpyICBEADQCABQQFrIgEgAiACQQpuIgNBCmxrQTByOgAAIAJBCUshBiADIQIgBg0ACwsgAQt7AQN/QX8hAwJAIABBf0YNACABKAJMQQBIIQQCQAJAIAEoAgQiAkUEQCABEIIBGiABKAIEIgJFDQELIAIgASgCLEEIa0sNAQsgBA0BQX8PCyABIAJBAWsiAjYCBCACIAA6AAAgASABKAIAQW9xNgIAIABB/wFxIQMLIAML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IAFB/////wNxRw0BCyAAKAIEIgEgACgCCEcEQCAAIAFBAWo2AgQgAS0AAAwCCyAAEIEBDAELIAAgACgCTCIBQf////8DIAEbNgJMAn8gACgCBCIBIAAoAghHBEAgACABQQFqNgIEIAEtAAAMAQsgABCBAQshAiAAKAJMGiAAQQA2AkwgAgsLCwAgBCACNgIAQQMLaQECfyMAQRBrIgMkACADQQxqIgQgASgCHCIBNgIAIAFB8JwCRwRAIAEgASgCBEEBajYCBAsgAiAEQeieAhAgIgEgASgCACgCEBEAADYCACAAIAEgASgCACgCFBEBACAEECIgA0EQaiQAC2IBAn8jAEEQayICJAAgAkEMaiIDIAAoAhwiADYCACAAQfCcAkcEQCAAIAAoAgRBAWo2AgQLIANBoJ4CECAiAEHwzwBBitAAIAEgACgCACgCMBEHABogAxAiIAJBEGokACABC2kBAn8jAEEQayIDJAAgA0EMaiIEIAEoAhwiATYCACABQfCcAkcEQCABIAEoAgRBAWo2AgQLIAIgBEHgngIQICIBIAEoAgAoAhARAAA6AAAgACABIAEoAgAoAhQRAQAgBBAiIANBEGokAAtqAQJ/IABBsMwANgIAIAAoAighAQNAIAEEQEEAIAAgAUEBayIBQQJ0IgIgACgCJGooAgAgACgCICACaigCABEGAAwBCwsgAEEcahAiIAAoAiAQKSAAKAIkECkgACgCMBApIAAoAjwQKSAAC4ICAQR/IwBBEGsiBSQAIAEQZCECIwBBEGsiAyQAAkAgAkH3////B00EQAJAIAJBC0kEQCAAIAAtAAtBgAFxIAJB/wBxcjoACyAAIAAtAAtB/wBxOgALIAAhBAwBCyADQQhqIAJBC08EfyACQQhqQXhxIgQgBEEBayIEIARBC0YbBUEKC0EBahBtIAMoAgwaIAAgAygCCCIENgIAIAAgACgCCEGAgICAeHEgAygCDEH/////B3FyNgIIIAAgACgCCEGAgICAeHI2AgggACACNgIECyAEIAEgAhBOIANBADoAByACIARqIAMtAAc6AAAgA0EQaiQADAELEEUACyAFQRBqJAALgggBC38gAEUEQCABEC0PCyABQUBPBEBB3JIBQTA2AgBBAA8LAn9BECABQQtqQXhxIAFBC0kbIQUgAEEIayIEKAIEIglBeHEhCAJA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xwAoAgBqIAEQiwELPAEBfyAAQQRqIgJBsMwANgIAIAJBiMgANgIAIABBvMYANgIAIAJB0MYANgIAIABBsMYAKAIAaiABEIsBC7YBAQN/IwBBEGsiAyQAIAAgACgCAEEMaygCAGooAhgEQCADQQhqIgEgADYCBCABQQA6AAAgACAAKAIAQQxrKAIAaigCEEUEQCAAIAAoAgBBDGsoAgBqKAJIIgIEQCACEK0BCyABQQE6AAALAkAgAS0AAEUNACAAIAAoAgBBDGsoAgBqKAIYIgIgAigCACgCGBEAAEF/Rw0AIAAgACgCAEEMaygCAGoQsAELIAEQtwILIANBEGokAAsJACAAELICECkLCQAgABCNARApCysBAX8gACAAKAIYRSAAKAIQQQFyciIBNgIQIAAoAhQgAXEEQEG2ChBQAAsLtgEBA38jAEEQayIDJAAgACAAKAIAQQxrKAIAaigCGARAIANBCGoiASAANgIEIAFBADoAACAAIAAoAgBBDGsoAgBqKAIQRQRAIAAgACgCAEEMaygCAGooAkgiAgRAIAIQsQELIAFBAToAAAsCQCABLQAARQ0AIAAgACgCAEEMaygCAGooAhgiAiACKAIAKAIYEQAAQX9HDQAgACAAKAIAQQxrKAIAahCwAQsgARC3AgsgA0EQaiQACwkAIAAQjgEQKQsJACAAEL8CECkLCAAgABB2ECkLpAIBBH8jAEEQayIEJAACQCABLQALQQd2RQRAIAAgASgCCDYCCCAAIAEpAgA3AgAgAC0ACxoMAQsgASgCACEFIAEoAgQhAiMAQRBrIgMkAAJAAkACQCACQQtJBEAgACIBIAEtAAtBgAFxIAJB/wBxcjoACyABIAEtAAtB/wBxOgALDAELIAJB9////wdLDQEgA0EIaiACQQtPBH8gAkEIakF4cSIBIAFBAWsiASABQQtGGwVBCgtBAWoQbSADKAIMGiAAIAMoAggiATYCACAAIAAoAghBgICAgHhxIAMoAgxB/////wdxcjYCCCAAIAAoAghBgICAgHhyNgIIIAAgAjYCBAsgASAFIAJBAWoQTiADQRBqJAAMAQsQRQALCyAEQRBqJAALwwIBBX8jAEEQayIFJAACQCACQff///8HIAFrTQRAAn8gAC0AC0EHdgRAIAAoAgAMAQsgAAshBiAFQQRqIgcgAUHz////A0kEfyAFIAFBAXQ2AgwgBSABIAJqNgIEIwBBEGsiAiQAIAcoAgAgBUEMaiIIKAIASSEJIAJBEGokACAIIAcgCRsoAgAiAkELTwR/IAJBCGpBeHEiAiACQQFrIgIgAkELRhsFQQoLQQFqBUH3////BwsQbSAFKAIEIQIgBSgCCBogBARAIAIgBiAEEE4LIAMgBEcEQCACIARqIAQgBmogAyAEaxBOCyABQQpHBEAgBkEBEFULIAAgAjYCACAAIAAoAghBgICAgHhxIAUoAghB/////wdxcjYCCCAAIAAoAghBgICAgHhyNgIIIAVBEGokAAwBCxBFAAsgACADNgIECzQBAn8jAEEQayIDJAAgACAAIAIsAAAgASAAaxCVASICIAEgAhsgAGtqIQQgA0EQaiQAIAQL6QMCA34FfyMAQSBrIgYkACABQv///////z+DIQICfiABQjCIQv//AYMiA6ciBUGB+ABrQf0PTQRAIAJCBIYgAEI8iIQhAiAFQYD4AGutIQMCQCAAQv//////////D4MiAEKBgICAgICAgAhaBEAgAkIBfCECDAELIABCgICAgICAgIAIUg0AIAJCAYMgAnwhAgtCACACIAJC/////////wdWIgUbIQQgBa0gA3wMAQsCQCAAIAKEUA0AIANC//8BUg0AIAJCBIYgAEI8iIRCgICAgICAgASEIQRC/w8MAQsgBUH+hwFLBEBC/w8MAQtCAEGA+ABBgfgAIANQIggbIgkgBWsiB0HwAEoNABogBkEQaiAAIAIgAkKAgICAgIDAAIQgCBsiAkGAASAHaxA8IAYgACACIAcQYCAGKQMIQgSGIAYpAwAiAkI8iIQhAAJAIAUgCUcgBikDECAGKQMYhEIAUnGtIAJC//////////8Pg4QiAkKBgICAgICAgAhaBEAgAEIBfCEADAELIAJCgICAgICAgIAIUg0AIABCAYMgAHwhAAsgAEKAgICAgICACIUgACAAQv////////8HViIFGyEEIAWtCyEDIAZBIGokACABQoCAgICAgICAgH+DIANCNIaEIASEvwtEAQF/IwBBEGsiBSQAIAUgASACIAMgBEKAgICAgICAgIB/hRA+IAUpAwAhASAAIAUpAwg3AwggACABNwMAIAVBEGokAAvPCAEGfyMAQRBrIgEkAAJAIAFBDGogAUEIahAcDQBB2JIB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AWsiAjYCCCACQQBODQAgARApCyAAC/oCAQV/IwBBEGsiBCQAQdC0ASgCACEGIAEoAkhBAEwEQCABEJcBC0HQtAEgASgCiAE2AgACQAJAAkAgAEH/AE0EQAJAIAEoAlAgAEYNACABKAIUIgIgASgCEEYNACABIAJBAWo2AhQgAiAAOgAADAQLIwBBEGsiAiQAIAIgADoADwJAAkAgASgCECIDBH8gAwVBfyEDIAEQnwENAiABKAIQCyABKAIUIgVGDQAgAEH/AXEiAyABKAJQRg0AIAEgBUEBajYCFCAFIAA6AAAMAQtBfyEDIAEgAkEPakEBIAEoAiQRBABBAUcNACACLQAPIQMLIAJBEGokACADIQAMAQsgASgCECABKAIUIgJBBGpLBEAgAiAAEHkiAkEASA0CIAEgASgCFCACajYCFAwBCyAEQQxqIgMgABB5IgJBAEgNASADIAIgARB9IAJJDQELIABBf0cNAQsgASABKAIAQSByNgIAQX8hAAtB0LQBIAY2AgAgBEEQaiQAIAALTAEBfwJAIAFFDQAgAUGsiAEQQiIBRQ0AIAEoAgggACgCCEF/c3ENACAAKAIMIAEoAgxBABAxRQ0AIAAoAhAgASgCEEEAEDEhAgsgAguCAQEDfyAAKAIEIgRBAXEhBQJ/IAEtADdBAUYEQCAEQQh1IgYgBUUNARogBiACKAIAaigCAAwBCyAEQQh1IAVFDQAaIAEgACgCACgCBDYCOCAAKAIEIQRBACECQQALIQUgACgCACIAIAEgAiAFaiADQQIgBEECcRsgACgCACgCHBEJAAvEBgIEfwR+IwBBgAFrIgUkAAJAAkACQCADIARCAEIAEGFFDQACfyAEQv///////z+DIQoCfyAEQjCIp0H//wFxIgdB//8BRwRAQQQgBw0BGkECQQMgAyAKhFAbDAILIAMgCoRQCwtFDQAgAkIwiKciCEH//wFxIgZB//8BRw0BCyAFQRBqIAEgAiADIAQQKyAFIAUpAxAiAiAFKQMYIgEgAiABEMgCIAUpAwghAiAFKQMAIQQMAQsgASACQv///////////wCDIgogAyAEQv///////////wCDIgkQYUEATARAIAEgCiADIAkQYQRAIAEhBAwCCyAFQfAAaiABIAJCAEIAECsgBSkDeCECIAUpA3AhBAwBCyAEQjCIp0H//wFxIQcgBgR+IAEFIAVB4ABqIAEgCkIAQoCAgICAgMC7wAAQKyAFKQNoIgpCMIinQfgAayEGIAUpA2ALIQQgB0UEQCAFQdAAaiADIAlCAEKAgICAgIDAu8AAECsgBSkDWCIJQjCIp0H4AGshByAFKQNQIQMLIAlC////////P4NCgICAgICAwACEIQsgCkL///////8/g0KAgICAgIDAAIQhCiAGIAdKBEADQAJ+IAogC30gAyAEVq19IglCAFkEQCAJIAQgA30iBIRQBEAgBUEgaiABIAJCAEIAECsgBSkDKCECIAUpAyAhBAwFCyAJQgGGIARCP4iEDAELIApCAYYgBEI/iIQLIQogBEIBhiEEIAZBAWsiBiAHSg0ACyAHIQYLAkAgCiALfSADIARWrX0iCUIAUwRAIAohCQwBCyAJIAQgA30iBIRCAFINACAFQTBqIAEgAkIAQgAQKyAFKQM4IQIgBSkDMCEEDAELIAlC////////P1gEQANAIARCP4ghDCAGQQFrIQYgBEIBhiEEIAwgCUIBhoQiCUKAgICAgIDAAFQNAAsLIAhBgIACcSEHIAZBAEwEQCAFQUBrIAQgCUL///////8/gyAGQfgAaiAHcq1CMIaEQgBCgICAgICAwMM/ECsgBSkDSCECIAUpA0AhBAwBCyAJQv///////z+DIAYgB3KtQjCGhCECCyAAIAQ3AwAgACACNwMIIAVBgAFqJAALDgAgAEHQAGoQLUHQAGoLkgMBBX8jAEEQayIIJAAgAiABQX9zQff///8Dak0EQAJ/IAAtAAtBB3YEQCAAKAIADAELIAALIQogCEEEaiIJIAFB8////wFJBH8gCCABQQF0NgIMIAggASACajYCBCMAQRBrIgIkACAJKAIAIAhBDGoiCygCAEkhDCACQRBqJAAgCyAJIAwbKAIAIgJBAk8EfyACQQJqQX5xIgIgAkEBayICIAJBAkYbBUEBC0EBagVB9////wMLEGcgCCgCBCECIAgoAggaIAQEQCAKIAQgAhBeCyAGBEAgByAGIARBAnQgAmoQXgsgAyAEIAVqIglrIQcgAyAJRwRAIARBAnQiAyACaiAGQQJ0aiEJIAMgCmogBUECdGogByAJEF4LIAFBAUcEQCAKQQQQVQsgACACNgIAIAAgACgCCEGAgICAeHEgCCgCCEH/////B3FyNgII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AgAoAhgRAQAgByABEDogARAfGiAAIAAoAgAoAiQRAAALNgIAIApBEGokAAvKAgEFfyMAQRBrIgUkAAJAIAJB9////wMgAWtNBEACfyAALQALQQd2BEAgACgCAAwBCyAACyEHIAVBBGoiBiABQfP///8BSQR/IAUgAUEBdDYCDCAFIAEgAmo2AgQjAEEQayICJAAgBigCACAFQQxqIggoAgBJIQkgAkEQaiQAIAggBiAJGygCACICQQJPBH8gAkECakF+cSICIAJBAWsiAiACQQJGGwVBAQtBAWoFQff///8DCxBnIAUoAgQhAiAFKAIIGiAEBEAgAiAHIAQQjAELIAMgBEcEQCAEQQJ0IgYgAmogBiAHaiADIARrEIwBCyABQQFHBEAgB0EEEFULIAAgAjYCACAAIAAoAghBgICAgHhxIAUoAghB/////wdxcjYCCCAAIAAoAghBgICAgHhyNgIIIAVBEGokAAwBCxBFAAsgACADNgIECx8BAX8gASgCABCwAiECIAAgASgCADYCBCAAIAI2AgAL/xcBC38jAEGQBGsiCyQAIAsgCjYCiAQgCyABNgKMBAJAIAAgC0GMBGoQJgRAIAUgBSgCAEEEcjYCAEEAIQAMAQsgC0HxADYCSCALIAtB6ABqIAtB8ABqIAtByABqIg8QMCIRKAIAIgE2AmQgCyABQZADajYCYCMAQRBrIgEkACAPQgA3AgAgD0EANgIIIAFBEGokACMAQRBrIgEkACALQTxqIg5CADcCACAOQQA2AgggAUEQaiQAIwBBEGsiASQAIAtBMGoiDUIANwIAIA1BADYCCCABQRBqJAAjAEEQayIBJAAgC0EkaiIMQgA3AgAgDEEANgIIIAFBEGokACMAQRBrIgEkACALQRhqIhBCADcCACAQQQA2AgggAUEQaiQAIwBBEGsiCiQAIAsCfyACBEAgCkEEaiICIANBsJwCECAiASABKAIAKAIsEQEAIAsgCigCBDYAXCACIAEgASgCACgCIBEBACAMIAIQSSACEC8aIAIgASABKAIAKAIcEQEAIA0gAhBJIAIQLxogCyABIAEoAgAoAgwRAAA2AlggCyABIAEoAgAoAhARAAA2AlQgAiABIAEoAgAoAhQRAQAgDyACEDogAhAfGiACIAEgASgCACgCGBEBACAOIAIQSSACEC8aIAEgASgCACgC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BEEBTRshBCABKAIAIQcgACgCACEIIANB8QBGBH9BAAUgACgCAAsgBBB4IgYEQCADQfEARwRAIAAoAgAaIABBADYCAAsgBUHwADYCBCAAIAVBCGogBiAFQQRqEDAiAxCDAiADKAIAIQYgA0EANgIAIAYEQCAGIAMoAgQRAgALIAEgACgCACAHIAhrajYCACACIAQgACgCAGo2AgAgBUEQaiQADwsQOwALIAEBfyABKAIAELYCwCECIAAgASgCADYCBCAAIAI6AAAL2RgBC38jAEGQBGsiCyQAIAsgCjYCiAQgCyABNgKMBAJAIAAgC0GMBGoQJwRAIAUgBSgCAEEEcjYCAEEAIQAMAQsgC0HxADYCTCALIAtB6ABqIAtB8ABqIAtBzABqIg8QMCIRKAIAIgE2AmQgCyABQZADajYCYCMAQRBrIgEkACAPQgA3AgAgD0EANgIIIAFBEGokACMAQRBrIgEkACALQUBrIg5CADcCACAOQQA2AgggAUEQaiQAIwBBEGsiASQAIAtBNGoiDUIANwIAIA1BADYCCCABQRBqJAAjAEEQayIBJAAgC0EoaiIMQgA3AgAgDEEANgIIIAFBEGokACMAQRBrIgEkACALQRxqIhBCADcCACAQQQA2AgggAUEQaiQAIwBBEGsiCiQAIAsCfyACBEAgCkEEaiICIANBoJwCECAiASABKAIAKAIsEQEAIAsgCigCBDYAXCACIAEgASgCACgCIBEBACAMIAIQOiACEB8aIAIgASABKAIAKAIcEQEAIA0gAhA6IAIQHxogCyABIAEoAgAoAgwRAAA6AFsgCyABIAEoAgAoAhARAAA6AFogAiABIAEoAgAoAhQRAQAgDyACEDogAhAfGiACIAEgASgCACgCGBEBACAOIAIQOiACEB8aIAEgASgCACgCJBEAAAwBCyAKQQRqIgIgA0GYnAIQICIBIAEoAgAoAiwRAQAgCyAKKAIENgBcIAIgASABKAIAKAIgEQEAIAwgAhA6IAIQHxogAiABIAEoAgAoAhwRAQAgDSACEDogAhAfGiALIAEgASgCACgCDBEAADoAWyALIAEgASgCACgCEBEAADoAWiACIAEgASgCACgCFBEBACAPIAIQOiACEB8aIAIgASABKAIAKAIYEQEAIA4gAhA6IAIQHxogASABKAIAKAIkEQAACzYCGCAKQRBq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IAAgA0EMakEAEJMBIAQpAwAgBCkDCBDHAiEGIARBEGokAEHckgEoAgAiAEUNASADKAIMIAFHDQIgBiEHIABBxABHDQMMAgsgAkEENgIADAILQdySASAFNgIAIAMoAgwgAUYNAQsgAkEENgIAIAchBgsgA0EQaiQAIAYLyAECA38CfiMAQRBrIgQkAAJ+AkACQCAAIAFHBEACQAJAIAAtAAAiBUEtRw0AIABBAWoiACABRw0ADAELQdySASgCACEGQdySAUEANgIAECgaIAAgBEEMaiADQn8QbyEHAkBB3JIBKAIAIgAEQCAEKAIMIAFHDQEgAEHEAEYNBAwFC0HckgEgBjYCACAEKAIMIAFGDQQLCwsgAkEENgIAQgAMAgsgAkEENgIAQn8MAQtCACAHfSAHIAVBLUYbCyEIIARBEGokACAIC9kBAgR/AX4jAEEQayIEJAACfwJAAkACQCAAIAFHBEACQAJAIAAtAAAiBUEtRw0AIABBAWoiACABRw0ADAELQdySASgCACEGQdySAUEANgIAECgaIAAgBEEMaiADQn8QbyEIAkBB3JIBKAIAIgAEQCAEKAIMIAFHDQEgAEHEAEYNBQwEC0HckgEgBjYCACAEKAIMIAFGDQMLCwsgAkEENgIAQQAMAwsgCEL/////D1gNAQsgAkEENgIAQX8MAQtBACAIpyIAayAAIAVBLUYbCyEHIARBEGokACAHC40FAQR/IwBBgAJrIgAkACAAIAI2AvgBIAAgATYC/AEgAxBNIQYgAEHEAWogAyAAQfcBahB1IwBBEGsiAiQAIABBuAFqIgFCADcCACABQQA2AgggAkEQaiQAIAEgAS0AC0EHdgR/IAEoAghB/////wdxQQFrBUEKCxAhIAACfyABLQALQQd2BEAgASgCAAwBCyABCyICNgK0ASAAIABBEGo2AgwgAEEANgIIA0ACQCAAQfwBaiAAQfgBahAnDQAgACgCtAECfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQsgAmpGBEACfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQshAyABAn8gAS0AC0EHdgRAIAEoAgQMAQsgAS0AC0H/AHELQQF0ECEgASABLQALQQd2BH8gASgCCEH/////B3FBAWsFQQoLECEgACADAn8gAS0AC0EHdgRAIAEoAgAM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IAAoAgAiAkUNAAJ/IAIoAhgiAyACKAIcRgRAIAIgASACKAIAKAI0EQMADAELIAIgA0EEajYCGCADIAE2AgAgAQtBf0cNACAAQQA2AgALCzEBAX8gACgCDCIBIAAoAhBGBEAgACAAKAIAKAIoEQAADwsgACABQQRqNgIMIAEoAgALKgAgAEHoxgA2AgAgAEEEahCgASAAQgA3AhggAEIANwIQIABCADcCCCAACxQAIABB6MYANgIAIABBBGoQIiAAC1wBAn8CQCAAKAIAIgJFDQACfyACKAIYIgMgAigCHEYEQCACIAFB/wFxIAIoAgAoAjQRAwAMAQsgAiADQQFqNgIYIAMgAToAACABQf8BcQtBf0cNACAAQQA2AgALCxMAIAAgACgCAEEMaygCAGoQrwELEwAgACAAKAIAQQxrKAIAahCNAQsxAQF/IAAoAgwiASAAKAIQRgRAIAAgACgCACgCKBEAAA8LIAAgAUEBajYCDCABLQAAC3QBAn8CQCAAKAIEIgEgASgCAEEMaygCACICaigCGEUNACABIAJqIgIoAhANACACKAIEQYDAAHFFDQAgASgCAEEMaygCACABaigCGCIBIAEoAgAoAhgRAABBf0cNACAAKAIEIgAgACgCAEEMaygCAGoQsAELCxMAIAAgACgCAEEMaygCAGoQsgELEwAgACAAKAIAQQxrKAIAahCOAQsEAEF/CxAAIABCfzcDCCAAQgA3AwALEAAgAEJ/NwMIIABCADcDAAsEACAACyoAIABByMUANgIAIABBBGoQoAEgAEIANwIYIABCADcCECAAQgA3AgggAAsUACAAQcjFADYCACAAQQRqECIgAAsGACAAEHYLiwIBA38CQCMAQRBrIgQkACACIAFrIgVB9////wdNBEACQCAFQQtJBEAgACAALQALQYABcSAFQf8AcXI6AAsgACAALQALQf8AcToACyAAIQMMAQsgBEEIaiAFQQtPBH8gBUEIakF4cSIDIANBAWsiAyADQQtGGwVBCgtBAWoQbSAEKAIMGiAAIAQoAggiAzYCACAAIAAoAghBgICAgHhxIAQoAgxB/////wdxcjYCCCAAIAAoAghBgICAgHhyNgIIIAAgBTYCBAsDQCABIAJHBEAgAyABLQAAOgAAIANBAWohAyABQQFqIQEMAQsLIARBADoAByADIAQtAAc6AAAgBEEQaiQADAELEEUACwtPAQF/IwBBEGsiAyQAIAMgATYCCCADIAA2AgwgAyACNgIEQQAhASADQQRqIgAoAgAgAygCDE8EQCAAKAIAIAMoAghJIQELIANBEGokACABC0kBAX8jAEEQayIDJAACfyAALQALQQd2BEAgACgCBAwBCyAALQALCxogACACEF8gA0EAOgAPIAEgAmogAy0ADzoAACADQRBqJAALigIBBH8gAUEISwRAQQQgASABQQRNGyEBQQEgACAAQQFNGyEAA0ACQCAAIAFqQQFrQQAgAWtxIgIgACAAIAJJGyEFQQAhAyMAQRBrIgQkAAJAIAFBA3ENACAFIAFwDQACfwJAQTACfyABQQhGBEAgBRAtDAELQRwhAyABQQRJDQEgAUEDcQ0BIAFBAnYiAiACQQFrcQ0BQTAhA0FAIAFrIAVJDQFBECABIAFBEE0bIAUQygILIgJFDQEaIAQgAjYCDEEAIQMLIAMLIQJBACAEKAIMIAIbIQMLIARBEGokACADIgQNAEGsqgIoAgAiAkUNACACEQ0ADAELCyAERQRAENYBCyAEDwsgABA9CxAAIAIEQCAAIAEgAhDkAQsLRwEBfyMAQRBrIgQkACAEIAI2AgwgAyABIAIgAWsiARDFAiAEIAEgA2o2AgggACAEKAIMNgIAIAAgBCgCCDYCBCAEQRBqJAALzwMCB38CfiMAQSBrIgMkACABQv///////z+DIQkCQCABQjCIQv//AYMiCqciBUGB/wBrQf0BTQRAIAlCGYinIQICQCAAUCABQv///w+DIglCgICACFQgCUKAgIAIURtFBEAgAkEBaiECDAELIAAgCUKAgIAIhYRCAFINACACQQFxIAJqIQILQQAgAiACQf///wNLIgQbIQJBgYF/QYCBfyAEGyAFaiEEDAELAkAgACAJhFANACAKQv//AVINACAJQhmIp0GAgIACciECQf8BIQQMAQsgBUH+gAFLBEBB/wEhBAwBC0GA/wBBgf8AIApQIgcbIgggBWsiBkHwAEoNACADQRBqIAAgCSAJQoCAgICAgMAAhCAHGyIJQYABIAZrEDwgAyAAIAkgBhBgIAMpAwgiAEIZiKchAgJAIAMpAwAgBSAIRyADKQMQIAMpAxiEQgBSca2EIglQIABC////D4MiAEKAgIAIVCAAQoCAgAhRG0UEQCACQQFqIQIMAQsgCSAAQoCAgAiFhEIAUg0AIAJBAXEgAmohAgsgAkGAgIAEcyACIAJB////A0siBBshAgsgA0EgaiQAIAFCIIinQYCAgIB4cSAEQRd0ciACcr4LqQ8CBX8PfiMAQdACayIFJAAgBEL///////8/gyEKIAJC////////P4MhCyACIASFQoCAgICAgICAgH+DIQwgBEIwiKdB//8BcSEIAkACQCACQjCIp0H//wFxIglB//8Ba0GCgH5PBEAgCEH//wFrQYGAfksNAQsgAVAgAkL///////////8AgyINQoCAgICAgMD//wBUIA1CgICAgICAwP//AFEbRQRAIAJCgICAgICAIIQhDAwCCyADUCAEQv///////////wCDIgJCgICAgICAwP//AFQgAkKAgICAgIDA//8AURtFBEAgBEKAgICAgIAghCEMIAMhAQwCCyABIA1CgICAgICAwP//AIWEUARAIAMgAkKAgICAgIDA//8AhYRQBEBCACEBQoCAgICAgOD//wAhDAwDCyAMQoCAgICAgMD//wCEIQxCACEBDAILIAMgAkKAgICAgIDA//8AhYRQBEBCACEBDAILIAEgDYRQBEBCgICAgICA4P//ACAMIAIgA4RQGyEMQgAhAQwCCyACIAOEUARAIAxCgICAgICAwP//AIQhDEIAIQEMAgsgDUL///////8/WARAIAVBwAJqIAEgCyABIAsgC1AiBht5IAZBBnStfKciBkEPaxA8QRAgBmshBiAFKQPIAiELIAUpA8ACIQELIAJC////////P1YNACAFQbACaiADIAogAyAKIApQIgcbeSAHQQZ0rXynIgdBD2sQPCAGIAdqQRBrIQYgBSkDuAIhCiAFKQOwAiEDCyAFQaACaiAKQoCAgICAgMAAhCISQg+GIANCMYiEIgJCAEKAgICAsOa8gvUAIAJ9IgRCABA1IAVBkAJqQgAgBSkDqAJ9QgAgBEIAEDUgBUGAAmogBSkDmAJCAYYgBSkDkAJCP4iEIgRCACACQgAQNSAFQfABaiAEQgBCACAFKQOIAn1CABA1IAVB4AFqIAUpA/gBQgGGIAUpA/ABQj+IhCIEQgAgAkIAEDUgBUHQAWogBEIAQgAgBSkD6AF9QgAQNSAFQcABaiAFKQPYAUIBhiAFKQPQAUI/iIQiBEIAIAJCABA1IAVBsAFqIARCAEIAIAUpA8gBfUIAEDUgBUGgAWogAkIAIAUpA7gBQgGGIAUpA7ABQj+IhEIBfSICQgAQNSAFQZABaiADQg+GQgAgAkIAEDUgBUHwAGogAkIAQgAgBSkDqAEgBSkDoAEiDSAFKQOYAXwiBCANVK18IARCAVatfH1CABA1IAVBgAFqQgEgBH1CACACQgAQNSAGIAkgCGtqIQYCfyAFKQNwIhNCAYYiDiAFKQOIASIPQgGGIAUpA4ABQj+IhHwiEELn7AB9IhRCIIgiAiALQoCAgICAgMAAhCIVQgGGIhZCIIgiBH4iESABQgGGIg1CIIgiCiAQIBRWrSAOIBBWrSAFKQN4QgGGIBNCP4iEIA9CP4h8fHxCAX0iE0IgiCIQfnwiDiARVK0gDiAOIBNC/////w+DIhMgAUI/iCIXIAtCAYaEQv////8PgyILfnwiDlatfCAEIBB+fCAEIBN+IhEgCyAQfnwiDyARVK1CIIYgD0IgiIR8IA4gDiAPQiCGfCIOVq18IA4gDiAUQv////8PgyIUIAt+IhEgAiAKfnwiDyARVK0gDyAPIBMgDUL+////D4MiEX58Ig9WrXx8Ig5WrXwgDiAEIBR+IhggECARfnwiBCACIAt+fCILIAogE358IhBCIIggCyAQVq0gBCAYVK0gBCALVq18fEIghoR8IgQgDlStfCAEIA8gAiARfiICIAogFH58IgpCIIggAiAKVq1CIIaEfCICIA9UrSACIBBCIIZ8IAJUrXx8IgIgBFStfCIEQv////////8AWARAIBYgF4QhFSAFQdAAaiACIAQgAyASEDUgAUIxhiAFKQNYfSAFKQNQIgFCAFKtfSEKQgAgAX0hCyAGQf7/AGoMAQsgBUHgAGogBEI/hiACQgGIhCICIARCAYgiBCADIBIQNSABQjCGIAUpA2h9IAUpA2AiDUIAUq19IQpCACANfSELIAEhDSAGQf//AGoLIgZB//8BTgRAIAxCgICAgICAwP//AIQhDEIAIQEMAQsCfiAGQQBKBEAgCkIBhiALQj+IhCEBIARC////////P4MgBq1CMIaEIQogC0IBhgwBCyAGQY9/TARAQgAhAQwCCyAFQUBrIAIgBEEBIAZrEGAgBUEwaiANIBUgBkHwAGoQPCAFQSBqIAMgEiAFKQNAIgIgBSkDSCIKEDUgBSkDOCAFKQMoQgGGIAUpAyAiAUI/iIR9IAUpAzAiBCABQgGGIg1UrX0hASAEIA19CyEEIAVBEGogAyASQgNCABA1IAUgAyASQgVCABA1IAogAiACIAMgBCACQgGDIgR8IgNUIAEgAyAEVK18IgEgElYgASASURutfCICVq18IgQgAiACIARCgICAgICAwP//AFQgAyAFKQMQViABIAUpAxgiBFYgASAEURtxrXwiAlatfCIEIAIgBEKAgICAgIDA//8AVCADIAUpAwBWIAEgBSkDCCIDViABIANRG3GtfCIBIAJUrXwgDIQhDAsgACABNwMAIAAgDDcDCCAFQdACaiQAC8ABAgF/An5BfyEDAkAgAEIAUiABQv///////////wCDIgRCgICAgICAwP//AFYgBEKAgICAgIDA//8AURsNACACQv///////////wCDIgVCgICAgICAwP//AFYgBUKAgICAgIDA//8AUnENACAAIAQgBYSEUARAQQAPCyABIAKDQgBZBEAgASACUiABIAJTcQ0BIAAgASAChYRCAFIPCyAAQgBSIAEgAlUgASACURsNACAAIAEgAoWEQgBSIQMLIAMLnwMBBX9BECECAkBBECAAIABBEE0bIgMgA0EBa3FFBEAgAyEADAELA0AgAiIAQQF0IQIgACADSQ0ACwsgAUFAIABrTwRAQdySAUEwNgIAQQAPC0EQIAFBC2pBeHEgAUELSRsiAyAAakEMahAtIgJFBEBBAA8LIAJBCGshAQJAIABBAWsgAnFFBEAgASEADAELIAJBBGsiBSgCACIGQXhxIAAgAmpBAWtBACAAa3FBCGsiAiAAQQAgAiABa0EPTRtqIgAgAWsiAmshBCAGQQNxRQRAIAEoAgAhASAAIAQ2AgQgACABIAJqNgIADAELIAAgBCAAKAIEQQFxckECcjYCBCAAIARqIgQgBCgCBEEBcjYCBCAFIAIgBSgCAEEBcXJBAnI2AgAgASACaiIEIAQoAgRBAXI2AgQgASACEJIBCwJAIAAoAgQiAUEDcUUNACABQXhxIgIgA0EQak0NACAAIAMgAUEBcXJBAnI2AgQgACADaiIBIAIgA2siA0EDcjYCBCAAIAJqIgIgAigCBEEBcjYCBCABIAMQkgELIABBCGoLsgEBBX8jAEEQayIDJAAgASgCACIEQfj///8HSQRAAkAC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QegCahAmBEAgBCAEKAIAQQJyNgIACyAAKALsAiEIIAEQHxogAEHMAWoQHxogAEHwAmokACAIC5YFAQV/IwBB0AJrIgAkACAAIAI2AsgCIAAgATYCzAIgAxBNIQYgAyAAQdABahB0IQcgAEHEAWogAyAAQcQCahBzIwBBEGsiAiQAIABBuAFqIgFCADcCACABQQA2AgggAkEQaiQAIAEgAS0AC0EHdgR/IAEoAghB/////wdxQQFrBUEKCxAhIAACfyABLQALQQd2BEAgASgCAAwBCyABCyICNgK0ASAAIABBEGo2AgwgAEEANgIIA0ACQCAAQcwCaiAAQcgCahAmDQAgACgCtAECfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQsgAmpGBEACfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQshAyABAn8gAS0AC0EHdgRAIAEoAgQMAQsgAS0AC0H/AHELQQF0ECEgASABLQALQQd2BH8gASgCCEH/////B3FBAWsFQQoLECEgACADAn8gAS0AC0EHdgRAIAEoAgAMAQsgAQsiAmo2ArQBCwJ/IABBzAJqIggoAgAiAygCDCIJIAMoAhBGBEAgAyADKAIAKAIkEQAADAELIAkoAgALIAYgAiAAQbQBaiAAQQhqIAAoAsQCIABBxAFqIABBEGogAEEMaiAHEGsNACAIEDIaDAELCwJAAn8gAC0AzwFBB3YEQCAAKALIAQwBCyAALQDPAUH/AHELRQ0AIAAoAgwiAyAAQRBqa0GfAUoNACAAIANBBGo2AgwgAyAAKAIINgIACyAFIAIgACgCtAEgBCAGEJwCNwMAIABBxAFqIABBEGogACgCDCAEEDkgAEHMAmogAEHIAmoQJgRAIAQgBCgCAEECcjYCAAsgACgCzAIhCiABEB8aIABBxAFqEB8aIABB0AJqJAAgCgs0AQJ/IwBBEGsiBCQAIAAoAgAhACAEIAM2AgwgASACIARBDGogABEEACEFIARBEGokACAFC5YFAQV/IwBB0AJrIgAkACAAIAI2AsgCIAAgATYCzAIgAxBNIQYgAyAAQdABahB0IQcgAEHEAWogAyAAQcQCahBzIwBBEGsiAiQAIABBuAFqIgFCADcCACABQQA2AgggAkEQaiQAIAEgAS0AC0EHdgR/IAEoAghB/////wdxQQFr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AgAoAiQRAAAMAQsgAy0AAAvAQRAgASAAQbQBaiAAQQhqQQAgByAAQRBqIABBDGogAEHQAWoQbA0AIAYQMxoMAQsLIAIgACgCtAEgAWsQIQJ/IAItAAtBB3YEQCACKAIADAELIAILIQsQKCEJIAAgBTYCACALIAkgABCYAkEBRwRAIARBBDYCAAsgAEH8AWogAEH4AWoQJwRAIAQgBCgCAEECcjYCAAsgACgC/AEhCiACEB8aIAcQHxogAEGAAmokACAKC9MFAgN/AX4jAEGQAmsiACQAIAAgAjYCiAIgACABNgKMAiAAQdABaiADIABB4AFqIABB3wFqIABB3gFqEKoBIwBBEGsiAiQAIABBxAFqIgFCADcCACABQQA2AgggAkEQaiQAIAEgAS0AC0EHdgR/IAEoAghB/////wdxQQFrBUEKCxAhIAACfyABLQALQQd2BEAgASgCAAwBCyABCyICNgLAASAAIABBIGo2AhwgAEEANgIYIABBAToAFyAAQcUAOgAWA0ACQCAAQYwCaiAAQYgCahAnDQAgACgCwAECfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQsgAmpGBEACfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQshAyABAn8gAS0AC0EHdgRAIAEoAgQMAQsgAS0AC0H/AHELQQF0ECEgASABLQALQQd2BH8gASgCCEH/////B3FBAWsFQQoLECEgACADAn8gAS0AC0EHdgRAIAEoAgAMAQsgAQsiAmo2AsABCwJ/IABBjAJqIgYoAgAiAygCDCIHIAMoAhBGBEAgAyADKAIAKAIkEQAADAELIActAAALwCAAQRdqIABBFmogAiAAQcABaiAALADfASAALADeASAAQdABaiAAQSBqIABBHGogAEEYaiAAQeABahCpAQ0AIAYQMxoMAQsLAkACfyAALQDbAUEHdgRAIAAoAtQBDAELIAAtANsBQf8AcQtFDQAgAC0AF0EBRw0AIAAoAhwiAyAAQSBqa0GfAUoNACAAIANBBGo2AhwgAyAAKAIYNgIACyAAIAIgACgCwAEgBBCZAiAAKQMAIQkgBSAAKQMINwMIIAUgCTcDACAAQdABaiAAQSBqIAAoAhwgBBA5IABBjAJqIABBiAJqECcEQCAEIAQoAgBBAnI2AgALIAAoAowCIQggARAfGiAAQdABahAfGiAAQZACaiQAIAgLvAUBA38jAEGAAmsiACQAIAAgAjYC+AEgACABNgL8ASAAQcABaiADIABB0AFqIABBzwFqIABBzgFqEKoBIwBBEGsiAiQAIABBtAFqIgFCADcCACABQQA2AgggAkEQaiQAIAEgAS0AC0EHdgR/IAEoAghB/////wdxQQFrBUEKCxAhIAACfyABLQALQQd2BEAgASgCAAwBCyABCyICNgKwASAAIABBEGo2AgwgAEEANgIIIABBAToAByAAQcUAOgAGA0ACQCAAQfwBaiAAQfgBahAnDQAgACgCsAECfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQsgAmpGBEACfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQshAyABAn8gAS0AC0EHdgRAIAEoAgQMAQsgAS0AC0H/AHELQQF0ECEgASABLQALQQd2BH8gASgCCEH/////B3FBAWsFQQoLECEgACADAn8gAS0AC0EHdgRAIAEoAgAMAQsgAQsiAmo2ArABCwJ/IABB/AFqIgYoAgAiAygCDCIHIAMoAhBGBEAgAyADKAIAKAIkEQAADAELIActAAALwCAAQQdqIABBBmogAiAAQbABaiAALADPASAALADOASAAQcABaiAAQRBqIABBDGogAEEIaiAAQdABahCpAQ0AIAYQMxoMAQsLAkACfyAALQDLAUEHdgRAIAAoAsQBDAELIAAtAMsBQf8AcQtFDQAgAC0AB0EBRw0AIAAoAgwiAyAAQRBqa0GfAUoNACAAIANBBGo2AgwgAyAAKAIINgIACyAFIAIgACgCsAEgBBCaAjkDACAAQcABaiAAQRBqIAAoAgwgBBA5IABB/AFqIABB+AFqECcEQCAEIAQoAgBBAnI2AgALIAAoAvwBIQggARAfGiAAQcABahAfGiAAQYACaiQAIAgLvAUBA38jAEGAAmsiACQAIAAgAjYC+AEgACABNgL8ASAAQcABaiADIABB0AFqIABBzwFqIABBzgFqEKoBIwBBEGsiAiQAIABBtAFqIgFCADcCACABQQA2AgggAkEQaiQAIAEgAS0AC0EHdgR/IAEoAghB/////wdxQQFrBUEKCxAhIAACfyABLQALQQd2BEAgASgCAAwBCyABCyICNgKwASAAIABBEGo2AgwgAEEANgIIIABBAToAByAAQcUAOgAGA0ACQCAAQfwBaiAAQfgBahAnDQAgACgCsAECfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQsgAmpGBEACfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQshAyABAn8gAS0AC0EHdgRAIAEoAgQMAQsgAS0AC0H/AHELQQF0ECEgASABLQALQQd2BH8gASgCCEH/////B3FBAWsFQQoLECEgACADAn8gAS0AC0EHdgRAIAEoAgAMAQsgAQsiAmo2ArABCwJ/IABB/AFqIgYoAgAiAygCDCIHIAMoAhBGBEAgAyADKAIAKAIkEQAADAELIActAAALwCAAQQdqIABBBmogAiAAQbABaiAALADPASAALADOASAAQcABaiAAQRBqIABBDGogAEEIaiAAQdABahCpAQ0AIAYQMxoMAQsLAkACfyAALQDLAUEHdgRAIAAoAsQBDAELIAAtAMsBQf8AcQtFDQAgAC0AB0EBRw0AIAAoAgwiAyAAQRBqa0GfAUoNACAAIANBBGo2AgwgAyAAKAIINgIACyAFIAIgACgCsAEgBBCbAjgCACAAQcABaiAAQRBqIAAoAgwgBBA5IABB/AFqIABB+AFqECcEQCAEIAQoAgBBAnI2AgALIAAoAvwBIQggARAfGiAAQcABahAfGiAAQYACaiQAIAgLSgEBfyMAQRBrIgMkACADIAEgAiAAKAIAEQYAQQIhACADLQAEQQFxBEAgAyADKAIANgIIQfiJASADQQhqEAwhAAsgA0EQaiQAIAALjQUBBH8jAEGAAmsiACQAIAAgAjYC+AEgACABNgL8ASADEE0hBiAAQcQBaiADIABB9wFqEHUjAEEQayICJAAgAEG4AWoiAUIANwIAIAFBADYCCCACQRBqJAAgASABLQALQQd2BH8gASgCCEH/////B3FBAWsFQQoLECEgAAJ/IAEtAAtBB3YEQCABKAIADAELIAELIgI2ArQBIAAgAEEQajYCDCAAQQA2AggDQAJAIABB/AFqIABB+AFqECcNACAAKAK0AQJ/IAEtAAtBB3YEQCABKAIEDAELIAEtAAtB/wBxCyACakYEQAJ/IAEtAAtBB3YEQCABKAIEDAELIAEtAAtB/wBxCyEDIAECfyABLQALQQd2BEAgASgCBAwBCyABLQALQf8AcQtBAXQQ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dW4Ac3RkOjpleGNlcHRpb24ATW9uAG5hbgBKYW4ASnVsAGJvb2wAbGwAQXByaWwAcHVzaF9iYWNrAEZyaQBiYWRfYXJyYXlfbmV3X2xlbmd0aABNYXJjaABBdWcAdW5zaWduZWQgbG9uZwBzdGQ6OndzdHJpbmcAYmFzaWNfc3RyaW5nAHN0ZDo6c3RyaW5nAHN0ZDo6dTE2c3RyaW5nAHN0ZDo6dTMyc3RyaW5nAGluZgAlLjBMZgAlTGYAcmVzaXplAHRydWUAVHVlAGZhbHNlAEp1bmUAZG91YmxlAHZvaWQAbG9jYWxlIG5vdCBzdXBwb3J0ZWQAV2VkAHN0ZDo6YmFkX2FsbG9jAERlYwBGZWIAJWEgJWIgJWQgJUg6JU06JVMgJVkAUE9TSVgATkFOAFBNAEFNAExDX0FMTABMQU5HAElORgBDAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNob3J0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBpbnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGZsb2F0PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50OF90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50NjRfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8aW50NjRfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dWludDMyX3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDMyX3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGNoYXI+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVuc2lnbmVkIGNoYXI+AHN0ZDo6YmFzaWNfc3RyaW5nPHVuc2lnbmVkIGNoYXI+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxsb25nPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBsb25nPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxkb3VibGU+ADAxMjM0NTY3ODkAaGFzaDEyOABDLlVURi04AE11cm11cjMAZm1peDMyAFZlY3RvclVpbnQzMgByb3RsMzIAaGFzaDMyAC4AKG51bGwpAFB1cmUgdmlydHVhbCBmdW5jdGlvbiBjYWxsZWQhAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0loTlNfMTFjaGFyX3RyYWl0c0loRUVOU185YWxsb2NhdG9ySWhFRUVFAFBFAAC5CQAATlN0M19fMjEyYmFzaWNfc3RyaW5nSXdOU18xMWNoYXJfdHJhaXRzSXdFRU5TXzlhbGxvY2F0b3JJd0VFRUUAAFBFAAAACgAATlN0M19fMjEyYmFzaWNfc3RyaW5nSURzTlNfMTFjaGFyX3RyYWl0c0lEc0VFTlNfOWFsbG9jYXRvcklEc0VFRUUAAABQRQAASAoAAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0lEaU5TXzExY2hhcl90cmFpdHNJRGlFRU5TXzlhbGxvY2F0b3JJRGlFRUVFAAAAUEUAAJQKAABOMTBlbXNjcmlwdGVuM3ZhbEUAAFBFAADgCgAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJY0VFAABQRQAA/AoAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWFFRQAAUEUAACQLAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0loRUUAAFBFAABMCwAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJc0VFAABQRQAAdAsAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SXRFRQAAUEUAAJwLAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lpRUUAAFBFAADECwAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJakVFAABQRQAA7AsAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWxFRQAAUEUAABQMAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0ltRUUAAFBFAAA8DAAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJeEVFAABQRQAAZAwAAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SXlFRQAAUEUAAIwMAABOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lmRUUAAFBFAAC0DAAATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJZEVFAABQRQAA3AwAAE5TdDNfXzI4b3B0aW9uYWxJakVFAE5TdDNfXzIyN19fb3B0aW9uYWxfbW92ZV9hc3NpZ25fYmFzZUlqTGIxRUVFAE5TdDNfXzIyN19fb3B0aW9uYWxfY29weV9hc3NpZ25fYmFzZUlqTGIxRUVFAE5TdDNfXzIyMF9fb3B0aW9uYWxfbW92ZV9iYXNlSWpMYjFFRUUATlN0M19fMjIwX19vcHRpb25hbF9jb3B5X2Jhc2VJakxiMUVFRQBOU3QzX18yMjNfX29wdGlvbmFsX3N0b3JhZ2VfYmFzZUlqTGIwRUVFAE5TdDNfXzIyNF9fb3B0aW9uYWxfZGVzdHJ1Y3RfYmFzZUlqTGIxRUVFAAAAUEUAAOgNAAB4RQAAvw0AABQOAAB4RQAAmQ0AABwOAAB4RQAAcw0AACgOAAB4RQAARg0AADQOAAB4RQAAGQ0AAEAOAABOU3QzX18yMThfX3NmaW5hZV9jdG9yX2Jhc2VJTGIxRUxiMUVFRQAAUEUAAFgOAABOU3QzX18yMjBfX3NmaW5hZV9hc3NpZ25fYmFzZUlMYjFFTGIxRUVFAAAAAFBFAACIDgAA1EUAAAQNAAAAAAAAAwAAAEwOAAAAAAAAgA4AAAAAAAC0DgAAAAAAAE5TdDNfXzI2dmVjdG9ySWpOU185YWxsb2NhdG9ySWpFRUVFAFBFAADkDgAAUE5TdDNfXzI2dmVjdG9ySWpOU185YWxsb2NhdG9ySWpFRUVFAAAAADBGAAAQDwAAAAAAAAgPAABQS05TdDNfXzI2dmVjdG9ySWpOU185YWxsb2NhdG9ySWpFRUVFAAAAMEYAAEgPAAABAAAACA8AAHBwAHYAdnAAOA8AAIxEAAA4DwAA+EQAAHZwcGkAAAAAjEQAADgPAAAQRQAA+EQAAHZwcHBpAAAAEEUAAHAPAABwcHAAvA4AAAgPAAAQRQAAcHBwcABB4B8L6gGkRAAACA8AABBFAAD4RAAAaXBwcGkAN011cm11cjMAAFBFAAD2DwAAUDdNdXJtdXIzAAAAMEYAAAgQAAAAAAAAABAAAFBLN011cm11cjMAADBGAAAkEAAAAQAAAAAQAAD4RAAA+EQAAMhEAABpcGlpAAAAAPhEAAD4RAAAaXBpAPhEAACsEAAAEEUAAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0ljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFAABQRQAAbBAAAGlwcHAAAAAAOA8AAKwQAAAQRQAA0BIAQdQlC/kDAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAAEwAAABQAAAAVAAAAFgAAABcAAAAYAAAAGQAAABoAAAAbAAAAHAAAAB0AAAAeAAAAHwAAACAAAAAhAAAAIgAAACMAAAAkAAAAJQAAACYAAAAnAAAAKAAAACkAAAAqAAAAKwAAACwAAAAtAAAALgAAAC8AAAAwAAAAMQAAADIAAAAzAAAANAAAADUAAAA2AAAANwAAADgAAAA5AAAAOgAAADsAAAA8AAAAPQAAAD4AAAA/AAAAQAAAAGEAAABiAAAAYwAAAGQAAABlAAAAZgAAAGcAAABoAAAAaQAAAGoAAABrAAAAbAAAAG0AAABuAAAAbwAAAHAAAABxAAAAcgAAAHMAAAB0AAAAdQAAAHYAAAB3AAAAeAAAAHkAAAB6AAAAWwAAAFwAAABdAAAAXgAAAF8AAABgAAAAYQAAAGIAAABjAAAAZAAAAGUAAABmAAAAZwAAAGgAAABpAAAAagAAAGsAAABsAAAAbQAAAG4AAABvAAAAcAAAAHEAAAByAAAAcwAAAHQAAAB1AAAAdgAAAHcAAAB4AAAAeQAAAHoAAAB7AAAAfAAAAH0AAAB+AAAAfwBB0C0LAuAYAEHkMQv5AwEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAABAAAAARAAAAEgAAABMAAAAUAAAAFQAAABYAAAAXAAAAGAAAABkAAAAaAAAAGwAAABwAAAAdAAAAHgAAAB8AAAAgAAAAIQAAACIAAAAjAAAAJAAAACUAAAAmAAAAJwAAACgAAAApAAAAKgAAACsAAAAsAAAALQAAAC4AAAAvAAAAMAAAADEAAAAyAAAAMwAAADQAAAA1AAAANgAAADcAAAA4AAAAOQAAADoAAAA7AAAAPAAAAD0AAAA+AAAAPwAAAEAAAABBAAAAQgAAAEMAAABEAAAARQAAAEYAAABHAAAASAAAAEkAAABKAAAASwAAAEwAAABNAAAATgAAAE8AAABQAAAAUQAAAFIAAABTAAAAVAAAAFUAAABWAAAAVwAAAFgAAABZAAAAWgAAAFsAAABcAAAAXQAAAF4AAABfAAAAYAAAAEEAAABCAAAAQwAAAEQAAABFAAAARgAAAEcAAABIAAAASQAAAEoAAABLAAAATAAAAE0AAABOAAAATwAAAFAAAABRAAAAUgAAAFMAAABUAAAAVQAAAFYAAABXAAAAWAAAAFkAAABaAAAAewAAAHwAAAB9AAAAfgAAAH8AQeA5CyPeEgSVAAAAAP///////////////+AcAAAUAAAAQy5VVEYtOABBsDoLAvQcAEHQOgv3BNF0ngBXnb0qgHBSD///PicKAAAAZAAAAOgDAAAQJwAAoIYBAEBCDwCAlpgAAOH1BRgAAAA1AAAAcQAAAGv////O+///kr///wAAAAAAAAAAAgAAwAMAAMAEAADABQAAwAYAAMAHAADACAAAwAkAAMAKAADACwAAwAwAAMANAADADgAAwA8AAMAQAADAEQAAwBIAAMATAADAFAAAwBUAAMAWAADAFwAAwBgAAMAZAADAGgAAwBsAAMAcAADAHQAAwB4AAMAfAADAAAAAswEAAMMCAADDAwAAwwQAAMMFAADDBgAAwwcAAMMIAADDCQAAwwoAAMMLAADDDAAAww0AANMOAADDDwAAwwAADLsBAAzDAgAMwwMADMMEAAzbAAAAAP////////////////////////////////////////////////////////////////8AAQIDBAUGBwgJ/////////woLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIj////////CgsMDQ4PEBESExQVFhcYGRobHB0eHyAhIiP/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAECBAcDBgUAAAAAAAAATENfQ1RZUEUAAAAATENfTlVNRVJJQwAATENfVElNRQAAAAAATENfQ09MTEFURQAATENfTU9ORVRBUlkATENfTUVTU0FHRVMAQdQ/CzkdAAAAHQAAAB4AAAAeAAAAHgAAAB4AAAAeAAAAHgAAAB0AAAAdAAAAHgAAAB0AAAAdAAAAHQAAAB0AQbDAAAsdHgAAAB4AAAAdAAAAHQAAAAAAAAAdAAAAAAAAAB4AQdTBAAtNYEcAAPhHAACISAAAGQALABkZGQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAAZAAoKGRkZAwoHAAEACQsYAAAJBgsAAAsABhkAAAAZGRkAQbHCAAshDgAAAAAAAAAAGQALDRkZGQANAAACAAkOAAAACQAOAAAOAEHrwgALAQwAQffCAAsVEwAAAAATAAAAAAkMAAAAAAAMAAAMAEGlwwALARAAQbHDAAsVDwAAAAQPAAAAAAkQAAAAAAAQAAAQAEHfwwALARIAQevDAAseEQAAAAARAAAAAAkSAAAAAAASAAASAAAaAAAAGhoaAEGixAALDhoAAAAaGhoAAAAAAAAJAEHTxAALARQAQd/EAAsVFwAAAAAXAAAAAAkUAAAAAAAUAAAUAEGNxQALARYAQZnFAAuICxUAAAAAFQAAAAAJFgAAAAAAFgAAFgAAMDEyMzQ1Njc4OUFCQ0RFRgAAAAB8JAAAKQAAACoAAAArAAAALAAAAC0AAAAuAAAALwAAADAAAAAxAAAAMgAAADMAAAA0AAAANQAAADYAAAAIAAAAAAAAALQkAAA3AAAAOAAAAPj////4////tCQAADkAAAA6AAAADCMAACAjAAAEAAAAAAAAAPwkAAA7AAAAPAAAAPz////8/////CQAAD0AAAA+AAAAPCMAAFAjAAAAAAAAkCUAAD8AAABAAAAAQQAAAEIAAABDAAAARAAAAEUAAABGAAAARwAAAEgAAABJAAAASgAAAEsAAABMAAAACAAAAAAAAADIJQAATQAAAE4AAAD4////+P///8glAABPAAAAUAAAAKwjAADAIwAABAAAAAAAAAAQJgAAUQAAAFIAAAD8/////P///xAmAABTAAAAVAAA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\";return A}var VA;function nB(A){if(A==VA&&rA)return new Uint8Array(rA);var g=ag(A);if(g)return g;if(z)return z(A);throw\"both async and sync fetching of the wasm failed\"}function aB(A){return Promise.resolve().then(()=>nB(A))}function DB(A,g,I){return aB(A).then(B=>WebAssembly.instantiate(B,g)).then(I,B=>{AA(`failed to asynchronously prepare wasm: ${B}`),WA(B)})}function wB(A,g,I,B){return DB(g,I,B)}function yB(){return{a:iQ}}function cB(){var A=yB();function g(B,i){return T=B.exports,hA=T.F,BB(),gI=T.I,rB(T.G),jA(\"wasm-instantiate\"),T}wg(\"wasm-instantiate\");function I(B){g(B.instance)}if(e.instantiateWasm)try{return e.instantiateWasm(A,g)}catch(B){AA(`Module.instantiateWasm callback failed with error: ${B}`),y(B)}return VA||(VA=sB()),wB(rA,VA,A,I).catch(y),{}}var u,O;function $g(A){this.name=\"ExitStatus\",this.message=`Program terminated with exit(${A})`,this.status=A}var yg=A=>{for(;A.length>0;)A.shift()(e)},AI=e.noExitRuntime||!0,PA=[],gI,cg=A=>{var g=PA[A];return g||(A>=PA.length&&(PA.length=A+1),PA[A]=g=gI.get(A)),g},hB=(A,g)=>cg(A)(g);class FB{constructor(g){this.excPtr=g,this.ptr=g-24}set_type(g){S[this.ptr+4>>2]=g}get_type(){return S[this.ptr+4>>2]}set_destructor(g){S[this.ptr+8>>2]=g}get_destructor(){return S[this.ptr+8>>2]}set_caught(g){g=g?1:0,x[this.ptr+12]=g}get_caught(){return x[this.ptr+12]!=0}set_rethrown(g){g=g?1:0,x[this.ptr+13]=g}get_rethrown(){return x[this.ptr+13]!=0}init(g,I){this.set_adjusted_ptr(0),this.set_type(g),this.set_destructor(I)}set_adjusted_ptr(g){S[this.ptr+16>>2]=g}get_adjusted_ptr(){return S[this.ptr+16>>2]}get_exception_ptr(){var g=uI(this.get_type());if(g)return S[this.excPtr>>2];var I=this.get_adjusted_ptr();return I!==0?I:this.excPtr}}var II=0,fB=0,lB=(A,g,I)=>{var B=new FB(A);throw B.init(g,I),II=A,fB++,II},dB=()=>{WA(\"\")},RB=(A,g,I,B,i)=>{},GB=()=>{for(var A=new Array(256),g=0;g<256;++g)A[g]=String.fromCharCode(g);BI=A},BI,oA=A=>{for(var g=\"\",I=A;V[I];)g+=BI[V[I++]];return g},GA={},fA={},XA={},kA,U=A=>{throw new kA(A)},CI,OA=A=>{throw new CI(A)},lA=(A,g,I)=>{A.forEach(function(s){XA[s]=g});function B(s){var a=I(s);a.length!==A.length&&OA(\"Mismatched type converter count\");for(var D=0;D<A.length;++D)nA(A[D],a[D])}var i=new Array(g.length),o=[],t=0;g.forEach((s,a)=>{fA.hasOwnProperty(s)?i[a]=fA[s]:(o.push(s),GA.hasOwnProperty(s)||(GA[s]=[]),GA[s].push(()=>{i[a]=fA[s],++t,t===o.length&&B(i)}))}),o.length===0&&B(i)};function kB(A,g,I={}){var B=g.name;if(A||U(`type \"${B}\" must have a positive integer typeid pointer`),fA.hasOwnProperty(A)){if(I.ignoreDuplicateRegistrations)return;U(`Cannot register type '${B}' twice`)}if(fA[A]=g,delete XA[A],GA.hasOwnProperty(A)){var i=GA[A];delete GA[A],i.forEach(o=>o())}}function nA(A,g,I={}){if(!(\"argPackAdvance\"in g))throw new TypeError(\"registerType registeredInstance requires argPackAdvance\");return kB(A,g,I)}var wA=8,LB=(A,g,I,B)=>{g=oA(g),nA(A,{name:g,fromWireType:function(i){return!!i},toWireType:function(i,o){return o?I:B},argPackAdvance:wA,readValueFromPointer:function(i){return this.fromWireType(V[i])},destructorFunction:null})},NB=A=>({count:A.count,deleteScheduled:A.deleteScheduled,preservePointerOnDelete:A.preservePointerOnDelete,ptr:A.ptr,ptrType:A.ptrType,smartPtr:A.smartPtr,smartPtrType:A.smartPtrType}),hg=A=>{function g(I){return I.$$.ptrType.registeredClass.name}U(g(A)+\" instance already deleted\")},Fg=!1,QI=A=>{},MB=A=>{A.smartPtr?A.smartPtrType.rawDestructor(A.smartPtr):A.ptrType.registeredClass.rawDestructor(A.ptr)},EI=A=>{A.count.value-=1;var g=A.count.value===0;g&&MB(A)},iI=(A,g,I)=>{if(g===I)return A;if(I.baseClass===void 0)return null;var B=iI(A,g,I.baseClass);return B===null?null:I.downcast(B)},eI={},uB=()=>Object.keys(YA).length,JB=()=>{var A=[];for(var g in YA)YA.hasOwnProperty(g)&&A.push(YA[g]);return A},SA=[],fg=()=>{for(;SA.length;){var A=SA.pop();A.$$.deleteScheduled=!1,A.delete()}},UA,SB=A=>{UA=A,SA.length&&UA&&UA(fg)},UB=()=>{e.getInheritedInstanceCount=uB,e.getLiveInheritedInstances=JB,e.flushPendingDeletes=fg,e.setDelayFunction=SB},YA={},YB=(A,g)=>{for(g===void 0&&U(\"ptr should not be undefined\");A.baseClass;)g=A.upcast(g),A=A.baseClass;return g},HB=(A,g)=>(g=YB(A,g),YA[g]),ZA=(A,g)=>{(!g.ptrType||!g.ptr)&&OA(\"makeClassHandle requires ptr and ptrType\");var I=!!g.smartPtrType,B=!!g.smartPtr;return I!==B&&OA(\"Both smartPtrType and smartPtr must be specified\"),g.count={value:1},HA(Object.create(A,{$$:{value:g,writable:!0}}))};function KB(A){var g=this.getPointee(A);if(!g)return this.destructor(A),null;var I=HB(this.registeredClass,g);if(I!==void 0){if(I.$$.count.value===0)return I.$$.ptr=g,I.$$.smartPtr=A,I.clone();var B=I.clone();return this.destructor(A),B}function i(){return this.isSmartPointer?ZA(this.registeredClass.instancePrototype,{ptrType:this.pointeeType,ptr:g,smartPtrType:this,smartPtr:A}):ZA(this.registeredClass.instancePrototype,{ptrType:this,ptr:A})}var o=this.registeredClass.getActualType(g),t=eI[o];if(!t)return i.call(this);var s;this.isConst?s=t.constPointerType:s=t.pointerType;var a=iI(g,this.registeredClass,s.registeredClass);return a===null?i.call(this):this.isSmartPointer?ZA(s.registeredClass.instancePrototype,{ptrType:s,ptr:a,smartPtrType:this,smartPtr:A}):ZA(s.registeredClass.instancePrototype,{ptrType:s,ptr:a})}var HA=A=>typeof FinalizationRegistry>\"u\"?(HA=g=>g,A):(Fg=new FinalizationRegistry(g=>{EI(g.$$)}),HA=g=>{var I=g.$$,B=!!I.smartPtr;if(B){var i={$$:I};Fg.register(g,i,g)}return g},QI=g=>Fg.unregister(g),HA(A)),pB=()=>{Object.assign(_A.prototype,{isAliasOf(A){if(!(this instanceof _A)||!(A instanceof _A))return!1;var g=this.$$.ptrType.registeredClass,I=this.$$.ptr;A.$$=A.$$;for(var B=A.$$.ptrType.registeredClass,i=A.$$.ptr;g.baseClass;)I=g.upcast(I),g=g.baseClass;for(;B.baseClass;)i=B.upcast(i),B=B.baseClass;return g===B&&I===i},clone(){if(this.$$.ptr||hg(this),this.$$.preservePointerOnDelete)return this.$$.count.value+=1,this;var A=HA(Object.create(Object.getPrototypeOf(this),{$$:{value:NB(this.$$)}}));return A.$$.count.value+=1,A.$$.deleteScheduled=!1,A},delete(){this.$$.ptr||hg(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&U(\"Object already scheduled for deletion\"),QI(this),EI(this.$$),this.$$.preservePointerOnDelete||(this.$$.smartPtr=void 0,this.$$.ptr=void 0)},isDeleted(){return!this.$$.ptr},deleteLater(){return this.$$.ptr||hg(this),this.$$.deleteScheduled&&!this.$$.preservePointerOnDelete&&U(\"Object already scheduled for deletion\"),SA.push(this),SA.length===1&&UA&&UA(fg),this.$$.deleteScheduled=!0,this}})};function _A(){}var zA=(A,g)=>Object.defineProperty(g,\"name\",{value:A}),lg=(A,g,I)=>{if(A[g].overloadTable===void 0){var B=A[g];A[g]=function(...i){return A[g].overloadTable.hasOwnProperty(i.length)||U(`Function '${I}' called with an invalid number of arguments (${i.length}) - expects one of (${A[g].overloadTable})!`),A[g].overloadTable[i.length].apply(this,i)},A[g].overloadTable=[],A[g].overloadTable[B.argCount]=B}},mB=(A,g,I)=>{e.hasOwnProperty(A)?((I===void 0||e[A].overloadTable!==void 0&&e[A].overloadTable[I]!==void 0)&&U(`Cannot register public name '${A}' twice`),lg(e,A,A),e.hasOwnProperty(I)&&U(`Cannot register multiple overloads of a function with the same number of arguments (${I})!`),e[A].overloadTable[I]=g):(e[A]=g,I!==void 0&&(e[A].numArguments=I))},TB=48,xB=57,bB=A=>{if(A===void 0)return\"_unknown\";A=A.replace(/[^a-zA-Z0-9_]/g,\"$\");var g=A.charCodeAt(0);return g>=TB&&g<=xB?`_${A}`:A};function vB(A,g,I,B,i,o,t,s){this.name=A,this.constructor=g,this.instancePrototype=I,this.rawDestructor=B,this.baseClass=i,this.getActualType=o,this.upcast=t,this.downcast=s,this.pureVirtualFunctions=[]}var dg=(A,g,I)=>{for(;g!==I;)g.upcast||U(`Expected null or instance of ${I.name}, got an instance of ${g.name}`),A=g.upcast(A),g=g.baseClass;return A};function qB(A,g){if(g===null)return this.isReference&&U(`null is not a valid ${this.name}`),0;g.$$||U(`Cannot pass \"${Lg(g)}\" as a ${this.name}`),g.$$.ptr||U(`Cannot pass deleted object as a pointer of type ${this.name}`);var I=g.$$.ptrType.registeredClass,B=dg(g.$$.ptr,I,this.registeredClass);return B}function jB(A,g){var I;if(g===null)return this.isReference&&U(`null is not a valid ${this.name}`),this.isSmartPointer?(I=this.rawConstructor(),A!==null&&A.push(this.rawDestructor,I),I):0;(!g||!g.$$)&&U(`Cannot pass \"${Lg(g)}\" as a ${this.name}`),g.$$.ptr||U(`Cannot pass deleted object as a pointer of type ${this.name}`),!this.isConst&&g.$$.ptrType.isConst&&U(`Cannot convert argument of type ${g.$$.smartPtrType?g.$$.smartPtrType.name:g.$$.ptrType.name} to parameter type ${this.name}`);var B=g.$$.ptrType.registeredClass;if(I=dg(g.$$.ptr,B,this.registeredClass),this.isSmartPointer)switch(g.$$.smartPtr===void 0&&U(\"Passing raw pointer to smart pointer is illegal\"),this.sharingPolicy){case 0:g.$$.smartPtrType===this?I=g.$$.smartPtr:U(`Cannot convert argument of type ${g.$$.smartPtrType?g.$$.smartPtrType.name:g.$$.ptrType.name} to parameter type ${this.name}`);break;case 1:I=g.$$.smartPtr;break;case 2:if(g.$$.smartPtrType===this)I=g.$$.smartPtr;else{var i=g.clone();I=this.rawShare(I,Ig.toHandle(()=>i.delete())),A!==null&&A.push(this.rawDestructor,I)}break;default:U(\"Unsupporting sharing policy\")}return I}function WB(A,g){if(g===null)return this.isReference&&U(`null is not a valid ${this.name}`),0;g.$$||U(`Cannot pass \"${Lg(g)}\" as a ${this.name}`),g.$$.ptr||U(`Cannot pass deleted object as a pointer of type ${this.name}`),g.$$.ptrType.isConst&&U(`Cannot convert argument of type ${g.$$.ptrType.name} to parameter type ${this.name}`);var I=g.$$.ptrType.registeredClass,B=dg(g.$$.ptr,I,this.registeredClass);return B}function $A(A){return this.fromWireType(S[A>>2])}var VB=()=>{Object.assign(Ag.prototype,{getPointee(A){return this.rawGetPointee&&(A=this.rawGetPointee(A)),A},destructor(A){this.rawDestructor?.(A)},argPackAdvance:wA,readValueFromPointer:$A,fromWireType:KB})};function Ag(A,g,I,B,i,o,t,s,a,D,h){this.name=A,this.registeredClass=g,this.isReference=I,this.isConst=B,this.isSmartPointer=i,this.pointeeType=o,this.sharingPolicy=t,this.rawGetPointee=s,this.rawConstructor=a,this.rawShare=D,this.rawDestructor=h,!i&&g.baseClass===void 0?B?(this.toWireType=qB,this.destructorFunction=null):(this.toWireType=WB,this.destructorFunction=null):this.toWireType=jB}var PB=(A,g,I)=>{e.hasOwnProperty(A)||OA(\"Replacing nonexistent public symbol\"),e[A].overloadTable!==void 0&&I!==void 0?e[A].overloadTable[I]=g:(e[A]=g,e[A].argCount=I)},XB=(A,g,I)=>{A=A.replace(/p/g,\"i\");var B=e[\"dynCall_\"+A];return B(g,...I)},OB=(A,g,I=[])=>{if(A.includes(\"j\"))return XB(A,g,I);var B=cg(g)(...I);return B},ZB=(A,g)=>(...I)=>OB(A,g,I),dA=(A,g)=>{A=oA(A);function I(){return A.includes(\"j\")?ZB(A,g):cg(g)}var B=I();return typeof B!=\"function\"&&U(`unknown function pointer with signature ${A}: ${g}`),B},_B=(A,g)=>{var I=zA(g,function(B){this.name=g,this.message=B;var i=new Error(B).stack;i!==void 0&&(this.stack=this.toString()+`\n`+i.replace(/^Error(:[^\\n]*)?\\n/,\"\"))});return I.prototype=Object.create(A.prototype),I.prototype.constructor=I,I.prototype.toString=function(){return this.message===void 0?this.name:`${this.name}: ${this.message}`},I},rI,oI=A=>{var g=LI(A),I=oA(g);return DA(g),I},gg=(A,g)=>{var I=[],B={};function i(o){if(!B[o]&&!fA[o]){if(XA[o]){XA[o].forEach(i);return}I.push(o),B[o]=!0}}throw g.forEach(i),new rI(`${A}: `+I.map(oI).join([\", \"]))},zB=(A,g,I,B,i,o,t,s,a,D,h,R,f)=>{h=oA(h),o=dA(i,o),s&&=dA(t,s),D&&=dA(a,D),f=dA(R,f);var G=bB(h);mB(G,function(){gg(`Cannot construct ${h} due to unbound types`,[B])}),lA([A,g,I],B?[B]:[],k=>{k=k[0];var K,b;B?(K=k.registeredClass,b=K.instancePrototype):b=_A.prototype;var j=zA(h,function(...v){if(Object.getPrototypeOf(this)!==w)throw new kA(\"Use 'new' to construct \"+h);if(d.constructor_body===void 0)throw new kA(h+\" has no accessible constructor\");var SI=d.constructor_body[v.length];if(SI===void 0)throw new kA(`Tried to invoke ctor of ${h} with invalid number of parameters (${v.length}) - expected (${Object.keys(d.constructor_body).toString()}) parameters instead!`);return SI.apply(this,v)}),w=Object.create(b,{constructor:{value:j}});j.prototype=w;var d=new vB(h,j,w,f,K,o,s,D);d.baseClass&&(d.baseClass.__derivedClasses??=[],d.baseClass.__derivedClasses.push(d));var W=new Ag(h,d,!0,!1,!1),p=new Ag(h+\"*\",d,!1,!1,!1),QA=new Ag(h+\" const*\",d,!1,!0,!1);return eI[A]={pointerType:p,constPointerType:QA},PB(G,j),[W,p,QA]})},$B=A=>{for(;A.length;){var g=A.pop(),I=A.pop();I(g)}};function tI(A){for(var g=1;g<A.length;++g)if(A[g]!==null&&A[g].destructorFunction===void 0)return!0;return!1}function AC(A,g){if(!(A instanceof Function))throw new TypeError(`new_ called with constructor type ${typeof A} which is not a function`);var I=zA(A.name||\"unknownFunctionName\",function(){});I.prototype=A.prototype;var B=new I,i=A.apply(B,g);return i instanceof Object?i:B}function gC(A,g,I,B){for(var i=tI(A),o=A.length,t=\"\",s=\"\",a=0;a<o-2;++a)t+=(a!==0?\", \":\"\")+\"arg\"+a,s+=(a!==0?\", \":\"\")+\"arg\"+a+\"Wired\";var D=`\n return function (${t}) {\n if (arguments.length !== ${o-2}) {\n throwBindingError('function ' + humanName + ' called with ' + arguments.length + ' arguments, expected ${o-2}');\n }`;i&&(D+=`var destructors = [];\n`);var h=i?\"destructors\":\"null\",R=[\"humanName\",\"throwBindingError\",\"invoker\",\"fn\",\"runDestructors\",\"retType\",\"classParam\"];g&&(D+=\"var thisWired = classParam['toWireType'](\"+h+`, this);\n`);for(var a=0;a<o-2;++a)D+=\"var arg\"+a+\"Wired = argType\"+a+\"['toWireType'](\"+h+\", arg\"+a+`);\n`,R.push(\"argType\"+a);if(g&&(s=\"thisWired\"+(s.length>0?\", \":\"\")+s),D+=(I||B?\"var rv = \":\"\")+\"invoker(fn\"+(s.length>0?\", \":\"\")+s+`);\n`,i)D+=`runDestructors(destructors);\n`;else for(var a=g?1:2;a<A.length;++a){var f=a===1?\"thisWired\":\"arg\"+(a-2)+\"Wired\";A[a].destructorFunction!==null&&(D+=`${f}_dtor(${f});\n`,R.push(`${f}_dtor`))}return I&&(D+=`var ret = retType['fromWireType'](rv);\nreturn ret;\n`),D+=`}\n`,[R,D]}function Rg(A,g,I,B,i,o){var t=g.length;t<2&&U(\"argTypes array size mismatch! Must at least get return value and 'this' types!\");for(var s=g[1]!==null&&I!==null,a=tI(g),D=g[0].name!==\"void\",h=[A,U,B,i,$B,g[0],g[1]],R=0;R<t-2;++R)h.push(g[R+2]);if(!a)for(var R=s?1:2;R<g.length;++R)g[R].destructorFunction!==null&&h.push(g[R].destructorFunction);let[f,G]=gC(g,s,D,o);f.push(G);var k=AC(Function,f)(...h);return zA(A,k)}var Gg=(A,g)=>{for(var I=[],B=0;B<A;B++)I.push(S[g+B*4>>2]);return I},sI=A=>{A=A.trim();let g=A.indexOf(\"(\");return g!==-1?A.substr(0,g):A},IC=(A,g,I,B,i,o,t,s)=>{var a=Gg(I,B);g=oA(g),g=sI(g),o=dA(i,o),lA([],[A],D=>{D=D[0];var h=`${D.name}.${g}`;function R(){gg(`Cannot call ${h} due to unbound types`,a)}g.startsWith(\"@@\")&&(g=Symbol[g.substring(2)]);var f=D.registeredClass.constructor;return f[g]===void 0?(R.argCount=I-1,f[g]=R):(lg(f,g,h),f[g].overloadTable[I-1]=R),lA([],a,G=>{var k=[G[0],null].concat(G.slice(1)),K=Rg(h,k,null,o,t,s);if(f[g].overloadTable===void 0?(K.argCount=I-1,f[g]=K):f[g].overloadTable[I-1]=K,D.registeredClass.__derivedClasses)for(let b of D.registeredClass.__derivedClasses)b.constructor.hasOwnProperty(g)||(b.constructor[g]=K);return[]}),[]})},BC=(A,g,I,B,i,o)=>{var t=Gg(g,I);i=dA(B,i),lA([],[A],s=>{s=s[0];var a=`constructor ${s.name}`;if(s.registeredClass.constructor_body===void 0&&(s.registeredClass.constructor_body=[]),s.registeredClass.constructor_body[g-1]!==void 0)throw new kA(`Cannot register multiple constructors with identical number of parameters (${g-1}) for class '${s.name}'! Overload resolution is currently only performed using the parameter count, not actual type info!`);return s.registeredClass.constructor_body[g-1]=()=>{gg(`Cannot construct ${s.name} due to unbound types`,t)},lA([],t,D=>(D.splice(1,0,null),s.registeredClass.constructor_body[g-1]=Rg(a,D,null,i,o),[])),[]})},CC=(A,g,I,B,i,o,t,s,a)=>{var D=Gg(I,B);g=oA(g),g=sI(g),o=dA(i,o),lA([],[A],h=>{h=h[0];var R=`${h.name}.${g}`;g.startsWith(\"@@\")&&(g=Symbol[g.substring(2)]),s&&h.registeredClass.pureVirtualFunctions.push(g);function f(){gg(`Cannot call ${R} due to unbound types`,D)}var G=h.registeredClass.instancePrototype,k=G[g];return k===void 0||k.overloadTable===void 0&&k.className!==h.name&&k.argCount===I-2?(f.argCount=I-2,f.className=h.name,G[g]=f):(lg(G,g,R),G[g].overloadTable[I-2]=f),lA([],D,K=>{var b=Rg(R,K,h,o,t,a);return G[g].overloadTable===void 0?(b.argCount=I-2,G[g]=b):G[g].overloadTable[I-2]=b,[]}),[]})},kg=[],yA=[],QC=A=>{A>9&&--yA[A+1]===0&&(yA[A]=void 0,kg.push(A))},EC=()=>yA.length/2-5-kg.length,iC=()=>{yA.push(0,1,void 0,1,null,1,!0,1,!1,1),e.count_emval_handles=EC},Ig={toValue:A=>(A||U(\"Cannot use deleted val. handle = \"+A),yA[A]),toHandle:A=>{switch(A){case void 0:return 2;case null:return 4;case!0:return 6;case!1:return 8;default:{let g=kg.pop()||yA.length;return yA[g]=A,yA[g+1]=1,g}}}},eC={name:\"emscripten::val\",fromWireType:A=>{var g=Ig.toValue(A);return QC(A),g},toWireType:(A,g)=>Ig.toHandle(g),argPackAdvance:wA,readValueFromPointer:$A,destructorFunction:null},nI=A=>nA(A,eC),Lg=A=>{if(A===null)return\"null\";var g=typeof A;return g===\"object\"||g===\"array\"||g===\"function\"?A.toString():\"\"+A},rC=(A,g)=>{switch(g){case 4:return function(I){return this.fromWireType(Vg[I>>2])};case 8:return function(I){return this.fromWireType(Pg[I>>3])};default:throw new TypeError(`invalid float width (${g}): ${A}`)}},oC=(A,g,I)=>{g=oA(g),nA(A,{name:g,fromWireType:B=>B,toWireType:(B,i)=>i,argPackAdvance:wA,readValueFromPointer:rC(g,I),destructorFunction:null})},tC=(A,g,I)=>{switch(g){case 1:return I?B=>x[B]:B=>V[B];case 2:return I?B=>uA[B>>1]:B=>qA[B>>1];case 4:return I?B=>J[B>>2]:B=>S[B>>2];default:throw new TypeError(`invalid integer width (${g}): ${A}`)}},sC=(A,g,I,B,i)=>{g=oA(g),i===-1&&(i=4294967295);var o=h=>h;if(B===0){var t=32-8*I;o=h=>h<<t>>>t}var s=g.includes(\"unsigned\"),a=(h,R)=>{},D;s?D=function(h,R){return a(R,this.name),R>>>0}:D=function(h,R){return a(R,this.name),R},nA(A,{name:g,fromWireType:o,toWireType:D,argPackAdvance:wA,readValueFromPointer:tC(g,I,B!==0),destructorFunction:null})},nC=(A,g,I)=>{var B=[Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],i=B[g];function o(t){var s=S[t>>2],a=S[t+4>>2];return new i(x.buffer,a,s)}I=oA(I),nA(A,{name:I,fromWireType:o,argPackAdvance:wA,readValueFromPointer:o},{ignoreDuplicateRegistrations:!0})},aC=(A,g)=>{nI(A)},Ng=(A,g,I,B)=>{if(!(B>0))return 0;for(var i=I,o=I+B-1,t=0;t<A.length;++t){var s=A.charCodeAt(t);if(s>=55296&&s<=57343){var a=A.charCodeAt(++t);s=65536+((s&1023)<<10)|a&1023}if(s<=127){if(I>=o)break;g[I++]=s}else if(s<=2047){if(I+1>=o)break;g[I++]=192|s>>6,g[I++]=128|s&63}else if(s<=65535){if(I+2>=o)break;g[I++]=224|s>>12,g[I++]=128|s>>6&63,g[I++]=128|s&63}else{if(I+3>=o)break;g[I++]=240|s>>18,g[I++]=128|s>>12&63,g[I++]=128|s>>6&63,g[I++]=128|s&63}}return g[I]=0,I-i},aI=(A,g,I)=>Ng(A,V,g,I),Mg=A=>{for(var g=0,I=0;I<A.length;++I){var B=A.charCodeAt(I);B<=127?g++:B<=2047?g+=2:B>=55296&&B<=57343?(g+=4,++I):g+=3}return g},DI=typeof TextDecoder<\"u\"?new TextDecoder(\"utf8\"):void 0,LA=(A,g,I)=>{for(var B=g+I,i=g;A[i]&&!(i>=B);)++i;if(i-g>16&&A.buffer&&DI)return DI.decode(A.subarray(g,i));for(var o=\"\";g<i;){var t=A[g++];if(!(t&128)){o+=String.fromCharCode(t);continue}var s=A[g++]&63;if((t&224)==192){o+=String.fromCharCode((t&31)<<6|s);continue}var a=A[g++]&63;if((t&240)==224?t=(t&15)<<12|s<<6|a:t=(t&7)<<18|s<<12|a<<6|A[g++]&63,t<65536)o+=String.fromCharCode(t);else{var D=t-65536;o+=String.fromCharCode(55296|D>>10,56320|D&1023)}}return o},Bg=(A,g)=>A?LA(V,A,g):\"\",DC=(A,g)=>{g=oA(g);var I=g===\"std::string\";nA(A,{name:g,fromWireType(B){var i=S[B>>2],o=B+4,t;if(I)for(var s=o,a=0;a<=i;++a){var D=o+a;if(a==i||V[D]==0){var h=D-s,R=Bg(s,h);t===void 0?t=R:(t+=\"\\0\",t+=R),s=D+1}}else{for(var f=new Array(i),a=0;a<i;++a)f[a]=String.fromCharCode(V[o+a]);t=f.join(\"\")}return DA(B),t},toWireType(B,i){i instanceof ArrayBuffer&&(i=new Uint8Array(i));var o,t=typeof i==\"string\";t||i instanceof Uint8Array||i instanceof Uint8ClampedArray||i instanceof Int8Array||U(\"Cannot pass non-string to std::string\"),I&&t?o=Mg(i):o=i.length;var s=Ug(4+o+1),a=s+4;if(S[s>>2]=o,I&&t)aI(i,a,o+1);else if(t)for(var D=0;D<o;++D){var h=i.charCodeAt(D);h>255&&(DA(a),U(\"String has UTF-16 code units that do not fit in 8 bits\")),V[a+D]=h}else for(var D=0;D<o;++D)V[a+D]=i[D];return B!==null&&B.push(DA,s),s},argPackAdvance:wA,readValueFromPointer:$A,destructorFunction(B){DA(B)}})},wI=typeof TextDecoder<\"u\"?new TextDecoder(\"utf-16le\"):void 0,wC=(A,g)=>{for(var I=A,B=I>>1,i=B+g/2;!(B>=i)&&qA[B];)++B;if(I=B<<1,I-A>32&&wI)return wI.decode(V.subarray(A,I));for(var o=\"\",t=0;!(t>=g/2);++t){var s=uA[A+t*2>>1];if(s==0)break;o+=String.fromCharCode(s)}return o},yC=(A,g,I)=>{if(I??=2147483647,I<2)return 0;I-=2;for(var B=g,i=I<A.length*2?I/2:A.length,o=0;o<i;++o){var t=A.charCodeAt(o);uA[g>>1]=t,g+=2}return uA[g>>1]=0,g-B},cC=A=>A.length*2,hC=(A,g)=>{for(var I=0,B=\"\";!(I>=g/4);){var i=J[A+I*4>>2];if(i==0)break;if(++I,i>=65536){var o=i-65536;B+=String.fromCharCode(55296|o>>10,56320|o&1023)}else B+=String.fromCharCode(i)}return B},FC=(A,g,I)=>{if(I??=2147483647,I<4)return 0;for(var B=g,i=B+I-4,o=0;o<A.length;++o){var t=A.charCodeAt(o);if(t>=55296&&t<=57343){var s=A.charCodeAt(++o);t=65536+((t&1023)<<10)|s&1023}if(J[g>>2]=t,g+=4,g+4>i)break}return J[g>>2]=0,g-B},fC=A=>{for(var g=0,I=0;I<A.length;++I){var B=A.charCodeAt(I);B>=55296&&B<=57343&&++I,g+=4}return g},lC=(A,g,I)=>{I=oA(I);var B,i,o,t;g===2?(B=wC,i=yC,t=cC,o=s=>qA[s>>1]):g===4&&(B=hC,i=FC,t=fC,o=s=>S[s>>2]),nA(A,{name:I,fromWireType:s=>{for(var a=S[s>>2],D,h=s+4,R=0;R<=a;++R){var f=s+4+R*g;if(R==a||o(f)==0){var G=f-h,k=B(h,G);D===void 0?D=k:(D+=\"\\0\",D+=k),h=f+g}}return DA(s),D},toWireType:(s,a)=>{typeof a!=\"string\"&&U(`Cannot pass non-string to C++ string type ${I}`);var D=t(a),h=Ug(4+D+g);return S[h>>2]=D/g,i(a,h+4,D+g),s!==null&&s.push(DA,h),h},argPackAdvance:wA,readValueFromPointer:$A,destructorFunction(s){DA(s)}})},dC=(A,g)=>{g=oA(g),nA(A,{isVoid:!0,name:g,argPackAdvance:0,fromWireType:()=>{},toWireType:(I,B)=>{}})},yI=()=>P||\"./this.program\",RC=(A,g)=>{aI(yI(),A,g)},GC=(A,g,I)=>V.copyWithin(A,g,g+I),kC=()=>{AI=!1,hI=0},LC=(A,g)=>{var I=fA[A];return I===void 0&&U(`${g} has unknown type ${oI(A)}`),I},NC=(A,g)=>{A=LC(A,\"_emval_take_value\");var I=A.readValueFromPointer(g);return Ig.toHandle(I)},KA={},cI=A=>{if(A instanceof $g||A==\"unwind\")return Z;iA(1,A)},hI=0,FI=()=>AI||hI>0,fI=A=>{Z=A,FI()||(e.onExit?.(A),H=!0),iA(A,new $g(A))},MC=(A,g)=>{Z=A,fI(A)},uC=MC,JC=()=>{if(!FI())try{uC(Z)}catch(A){cI(A)}},SC=A=>{if(!H)try{A(),JC()}catch(g){cI(g)}},lI;lI=()=>performance.now();var UC=(A,g)=>{if(KA[A]&&(clearTimeout(KA[A].id),delete KA[A]),!g)return 0;var I=setTimeout(()=>{delete KA[A],SC(()=>MI(A,lI()))},g);return KA[A]={id:I,timeout_ms:g},0},YC=A=>{WA(\"OOM\")},HC=A=>{var g=V.length;A>>>=0,YC(A)},ug={},pA=()=>{if(!pA.strings){var A=(typeof navigator==\"object\"&&navigator.languages&&navigator.languages[0]||\"C\").replace(\"-\",\"_\")+\".UTF-8\",g={USER:\"web_user\",LOGNAME:\"web_user\",PATH:\"/\",PWD:\"/\",HOME:\"/home/web_user\",LANG:A,_:yI()};for(var I in ug)ug[I]===void 0?delete g[I]:g[I]=ug[I];var B=[];for(var I in g)B.push(`${I}=${g[I]}`);pA.strings=B}return pA.strings},KC=(A,g)=>{for(var I=0;I<A.length;++I)x[g++]=A.charCodeAt(I);x[g]=0},pC=(A,g)=>{var I=0;return pA().forEach((B,i)=>{var o=g+I;S[A+i*4>>2]=o,KC(B,o),I+=B.length+1}),0},mC=(A,g)=>{var I=pA();S[A>>2]=I.length;var B=0;return I.forEach(i=>B+=i.length+1),S[g>>2]=B,0},m={isAbs:A=>A.charAt(0)===\"/\",splitPath:A=>{var g=/^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;return g.exec(A).slice(1)},normalizeArray:(A,g)=>{for(var I=0,B=A.length-1;B>=0;B--){var i=A[B];i===\".\"?A.splice(B,1):i===\"..\"?(A.splice(B,1),I++):I&&(A.splice(B,1),I--)}if(g)for(;I;I--)A.unshift(\"..\");return A},normalize:A=>{var g=m.isAbs(A),I=A.substr(-1)===\"/\";return A=m.normalizeArray(A.split(\"/\").filter(B=>!!B),!g).join(\"/\"),!A&&!g&&(A=\".\"),A&&I&&(A+=\"/\"),(g?\"/\":\"\")+A},dirname:A=>{var g=m.splitPath(A),I=g[0],B=g[1];return!I&&!B?\".\":(B&&(B=B.substr(0,B.length-1)),I+B)},basename:A=>{if(A===\"/\")return\"/\";A=m.normalize(A),A=A.replace(/\\/$/,\"\");var g=A.lastIndexOf(\"/\");return g===-1?A:A.substr(g+1)},join:(...A)=>m.normalize(A.join(\"/\")),join2:(A,g)=>m.normalize(A+\"/\"+g)},TC=()=>{if(typeof crypto==\"object\"&&typeof crypto.getRandomValues==\"function\")return B=>crypto.getRandomValues(B);if(L)try{var A=Yg(\"crypto\"),g=A.randomFillSync;if(g)return B=>A.randomFillSync(B);var I=A.randomBytes;return B=>(B.set(I(B.byteLength)),B)}catch{}WA(\"initRandomDevice\")},dI=A=>(dI=TC())(A),aA={resolve:(...A)=>{for(var g=\"\",I=!1,B=A.length-1;B>=-1&&!I;B--){var i=B>=0?A[B]:Q.cwd();if(typeof i!=\"string\")throw new TypeError(\"Arguments to path.resolve must be strings\");if(!i)return\"\";g=i+\"/\"+g,I=m.isAbs(i)}return g=m.normalizeArray(g.split(\"/\").filter(o=>!!o),!I).join(\"/\"),(I?\"/\":\"\")+g||\".\"},relative:(A,g)=>{A=aA.resolve(A).substr(1),g=aA.resolve(g).substr(1);function I(D){for(var h=0;h<D.length&&D[h]===\"\";h++);for(var R=D.length-1;R>=0&&D[R]===\"\";R--);return h>R?[]:D.slice(h,R-h+1)}for(var B=I(A.split(\"/\")),i=I(g.split(\"/\")),o=Math.min(B.length,i.length),t=o,s=0;s<o;s++)if(B[s]!==i[s]){t=s;break}for(var a=[],s=t;s<B.length;s++)a.push(\"..\");return a=a.concat(i.slice(t)),a.join(\"/\")}},Jg=[];function Cg(A,g,I){var B=I>0?I:Mg(A)+1,i=new Array(B),o=Ng(A,i,0,i.length);return g&&(i.length=o),i}var xC=()=>{if(!Jg.length){var A=null;if(L){var g=256,I=Buffer.alloc(g),B=0,i=process.stdin.fd;try{B=BA.readSync(i,I)}catch(o){if(o.toString().includes(\"EOF\"))B=0;else throw o}B>0?A=I.slice(0,B).toString(\"utf-8\"):A=null}else typeof window<\"u\"&&typeof window.prompt==\"function\"?(A=window.prompt(\"Input: \"),A!==null&&(A+=`\n`)):typeof readline==\"function\"&&(A=readline(),A!==null&&(A+=`\n`));if(!A)return null;Jg=Cg(A,!0)}return Jg.shift()},cA={ttys:[],init(){},shutdown(){},register(A,g){cA.ttys[A]={input:[],output:[],ops:g},Q.registerDevice(A,cA.stream_ops)},stream_ops:{open(A){var g=cA.ttys[A.node.rdev];if(!g)throw new Q.ErrnoError(43);A.tty=g,A.seekable=!1},close(A){A.tty.ops.fsync(A.tty)},fsync(A){A.tty.ops.fsync(A.tty)},read(A,g,I,B,i){if(!A.tty||!A.tty.ops.get_char)throw new Q.ErrnoError(60);for(var o=0,t=0;t<B;t++){var s;try{s=A.tty.ops.get_char(A.tty)}catch{throw new Q.ErrnoError(29)}if(s===void 0&&o===0)throw new Q.ErrnoError(6);if(s==null)break;o++,g[I+t]=s}return o&&(A.node.timestamp=Date.now()),o},write(A,g,I,B,i){if(!A.tty||!A.tty.ops.put_char)throw new Q.ErrnoError(60);try{for(var o=0;o<B;o++)A.tty.ops.put_char(A.tty,g[I+o])}catch{throw new Q.ErrnoError(29)}return B&&(A.node.timestamp=Date.now()),o}},default_tty_ops:{get_char(A){return xC()},put_char(A,g){g===null||g===10?(CA(LA(A.output,0)),A.output=[]):g!=0&&A.output.push(g)},fsync(A){A.output&&A.output.length>0&&(CA(LA(A.output,0)),A.output=[])},ioctl_tcgets(A){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(A,g,I){return 0},ioctl_tiocgwinsz(A){return[24,80]}},default_tty1_ops:{put_char(A,g){g===null||g===10?(AA(LA(A.output,0)),A.output=[]):g!=0&&A.output.push(g)},fsync(A){A.output&&A.output.length>0&&(AA(LA(A.output,0)),A.output=[])}}},bC=(A,g)=>(V.fill(0,A,A+g),A),vC=(A,g)=>Math.ceil(A/g)*g,RI=A=>{A=vC(A,65536);var g=NI(65536,A);return g?bC(g,A):0},M={ops_table:null,mount(A){return M.createNode(null,\"/\",16895,0)},createNode(A,g,I,B){if(Q.isBlkdev(I)||Q.isFIFO(I))throw new Q.ErrnoError(63);M.ops_table||={dir:{node:{getattr:M.node_ops.getattr,setattr:M.node_ops.setattr,lookup:M.node_ops.lookup,mknod:M.node_ops.mknod,rename:M.node_ops.rename,unlink:M.node_ops.unlink,rmdir:M.node_ops.rmdir,readdir:M.node_ops.readdir,symlink:M.node_ops.symlink},stream:{llseek:M.stream_ops.llseek}},file:{node:{getattr:M.node_ops.getattr,setattr:M.node_ops.setattr},stream:{llseek:M.stream_ops.llseek,read:M.stream_ops.read,write:M.stream_ops.write,allocate:M.stream_ops.allocate,mmap:M.stream_ops.mmap,msync:M.stream_ops.msync}},link:{node:{getattr:M.node_ops.getattr,setattr:M.node_ops.setattr,readlink:M.node_ops.readlink},stream:{}},chrdev:{node:{getattr:M.node_ops.getattr,setattr:M.node_ops.setattr},stream:Q.chrdev_stream_ops}};var i=Q.createNode(A,g,I,B);return Q.isDir(i.mode)?(i.node_ops=M.ops_table.dir.node,i.stream_ops=M.ops_table.dir.stream,i.contents={}):Q.isFile(i.mode)?(i.node_ops=M.ops_table.file.node,i.stream_ops=M.ops_table.file.stream,i.usedBytes=0,i.contents=null):Q.isLink(i.mode)?(i.node_ops=M.ops_table.link.node,i.stream_ops=M.ops_table.link.stream):Q.isChrdev(i.mode)&&(i.node_ops=M.ops_table.chrdev.node,i.stream_ops=M.ops_table.chrdev.stream),i.timestamp=Date.now(),A&&(A.contents[g]=i,A.timestamp=i.timestamp),i},getFileDataAsTypedArray(A){return A.contents?A.contents.subarray?A.contents.subarray(0,A.usedBytes):new Uint8Array(A.contents):new Uint8Array(0)},expandFileStorage(A,g){var I=A.contents?A.contents.length:0;if(!(I>=g)){var B=1024*1024;g=Math.max(g,I*(I<B?2:1.125)>>>0),I!=0&&(g=Math.max(g,256));var i=A.contents;A.contents=new Uint8Array(g),A.usedBytes>0&&A.contents.set(i.subarray(0,A.usedBytes),0)}},resizeFileStorage(A,g){if(A.usedBytes!=g)if(g==0)A.contents=null,A.usedBytes=0;else{var I=A.contents;A.contents=new Uint8Array(g),I&&A.contents.set(I.subarray(0,Math.min(g,A.usedBytes))),A.usedBytes=g}},node_ops:{getattr(A){var g={};return g.dev=Q.isChrdev(A.mode)?A.id:1,g.ino=A.id,g.mode=A.mode,g.nlink=1,g.uid=0,g.gid=0,g.rdev=A.rdev,Q.isDir(A.mode)?g.size=4096:Q.isFile(A.mode)?g.size=A.usedBytes:Q.isLink(A.mode)?g.size=A.link.length:g.size=0,g.atime=new Date(A.timestamp),g.mtime=new Date(A.timestamp),g.ctime=new Date(A.timestamp),g.blksize=4096,g.blocks=Math.ceil(g.size/g.blksize),g},setattr(A,g){g.mode!==void 0&&(A.mode=g.mode),g.timestamp!==void 0&&(A.timestamp=g.timestamp),g.size!==void 0&&M.resizeFileStorage(A,g.size)},lookup(A,g){throw Q.genericErrors[44]},mknod(A,g,I,B){return M.createNode(A,g,I,B)},rename(A,g,I){if(Q.isDir(A.mode)){var B;try{B=Q.lookupNode(g,I)}catch{}if(B)for(var i in B.contents)throw new Q.ErrnoError(55)}delete A.parent.contents[A.name],A.parent.timestamp=Date.now(),A.name=I,g.contents[I]=A,g.timestamp=A.parent.timestamp,A.parent=g},unlink(A,g){delete A.contents[g],A.timestamp=Date.now()},rmdir(A,g){var I=Q.lookupNode(A,g);for(var B in I.contents)throw new Q.ErrnoError(55);delete A.contents[g],A.timestamp=Date.now()},readdir(A){var g=[\".\",\"..\"];for(var I of Object.keys(A.contents))g.push(I);return g},symlink(A,g,I){var B=M.createNode(A,g,41471,0);return B.link=I,B},readlink(A){if(!Q.isLink(A.mode))throw new Q.ErrnoError(28);return A.link}},stream_ops:{read(A,g,I,B,i){var o=A.node.contents;if(i>=A.node.usedBytes)return 0;var t=Math.min(A.node.usedBytes-i,B);if(t>8&&o.subarray)g.set(o.subarray(i,i+t),I);else for(var s=0;s<t;s++)g[I+s]=o[i+s];return t},write(A,g,I,B,i,o){if(!B)return 0;var t=A.node;if(t.timestamp=Date.now(),g.subarray&&(!t.contents||t.contents.subarray)){if(o)return t.contents=g.subarray(I,I+B),t.usedBytes=B,B;if(t.usedBytes===0&&i===0)return t.contents=g.slice(I,I+B),t.usedBytes=B,B;if(i+B<=t.usedBytes)return t.contents.set(g.subarray(I,I+B),i),B}if(M.expandFileStorage(t,i+B),t.contents.subarray&&g.subarray)t.contents.set(g.subarray(I,I+B),i);else for(var s=0;s<B;s++)t.contents[i+s]=g[I+s];return t.usedBytes=Math.max(t.usedBytes,i+B),B},llseek(A,g,I){var B=g;if(I===1?B+=A.position:I===2&&Q.isFile(A.node.mode)&&(B+=A.node.usedBytes),B<0)throw new Q.ErrnoError(28);return B},allocate(A,g,I){M.expandFileStorage(A.node,g+I),A.node.usedBytes=Math.max(A.node.usedBytes,g+I)},mmap(A,g,I,B,i){if(!Q.isFile(A.node.mode))throw new Q.ErrnoError(43);var o,t,s=A.node.contents;if(!(i&2)&&s.buffer===x.buffer)t=!1,o=s.byteOffset;else{if((I>0||I+g<s.length)&&(s.subarray?s=s.subarray(I,I+g):s=Array.prototype.slice.call(s,I,I+g)),t=!0,o=RI(g),!o)throw new Q.ErrnoError(48);x.set(s,o)}return{ptr:o,allocated:t}},msync(A,g,I,B,i){return M.stream_ops.write(A,g,0,B,I,!1),0}}},qC=(A,g,I,B)=>{var i=B?\"\":`al ${A}`;$(A,o=>{g(new Uint8Array(o)),i&&jA(i)},o=>{if(I)I();else throw`Loading data file \"${A}\" failed.`}),i&&wg(i)},jC=(A,g,I,B,i,o)=>{Q.createDataFile(A,g,I,B,i,o)},WC=e.preloadPlugins||[],VC=(A,g,I,B)=>{typeof Browser<\"u\"&&Browser.init();var i=!1;return WC.forEach(o=>{i||o.canHandle(g)&&(o.handle(A,g,I,B),i=!0)}),i},PC=(A,g,I,B,i,o,t,s,a,D)=>{var h=g?aA.resolve(m.join2(A,g)):A,R=`cp ${h}`;function f(G){function k(K){D?.(),s||jC(A,g,K,B,i,a),o?.(),jA(R)}VC(G,h,k,()=>{t?.(),jA(R)})||k(G)}wg(R),typeof I==\"string\"?qC(I,f,t):f(I)},XC=A=>{var g={r:0,\"r+\":2,w:577,\"w+\":578,a:1089,\"a+\":1090},I=g[A];if(typeof I>\"u\")throw new Error(`Unknown file open mode: ${A}`);return I},Sg=(A,g)=>{var I=0;return A&&(I|=365),g&&(I|=146),I},Q={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:\"/\",initialized:!1,ignorePermissions:!0,ErrnoError:class{constructor(A){this.name=\"ErrnoError\",this.errno=A}},genericErrors:{},filesystems:null,syncFSRequests:0,FSStream:class{constructor(){this.shared={}}get object(){return this.node}set object(A){this.node=A}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(A){this.shared.flags=A}get position(){return this.shared.position}set position(A){this.shared.position=A}},FSNode:class{constructor(A,g,I,B){A||(A=this),this.parent=A,this.mount=A.mount,this.mounted=null,this.id=Q.nextInode++,this.name=g,this.mode=I,this.node_ops={},this.stream_ops={},this.rdev=B,this.readMode=365,this.writeMode=146}get read(){return(this.mode&this.readMode)===this.readMode}set read(A){A?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(A){A?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return Q.isDir(this.mode)}get isDevice(){return Q.isChrdev(this.mode)}},lookupPath(A,g={}){if(A=aA.resolve(A),!A)return{path:\"\",node:null};var I={follow_mount:!0,recurse_count:0};if(g=Object.assign(I,g),g.recurse_count>8)throw new Q.ErrnoError(32);for(var B=A.split(\"/\").filter(R=>!!R),i=Q.root,o=\"/\",t=0;t<B.length;t++){var s=t===B.length-1;if(s&&g.parent)break;if(i=Q.lookupNode(i,B[t]),o=m.join2(o,B[t]),Q.isMountpoint(i)&&(!s||s&&g.follow_mount)&&(i=i.mounted.root),!s||g.follow)for(var a=0;Q.isLink(i.mode);){var D=Q.readlink(o);o=aA.resolve(m.dirname(o),D);var h=Q.lookupPath(o,{recurse_count:g.recurse_count+1});if(i=h.node,a++>40)throw new Q.ErrnoError(32)}}return{path:o,node:i}},getPath(A){for(var g;;){if(Q.isRoot(A)){var I=A.mount.mountpoint;return g?I[I.length-1]!==\"/\"?`${I}/${g}`:I+g:I}g=g?`${A.name}/${g}`:A.name,A=A.parent}},hashName(A,g){for(var I=0,B=0;B<g.length;B++)I=(I<<5)-I+g.charCodeAt(B)|0;return(A+I>>>0)%Q.nameTable.length},hashAddNode(A){var g=Q.hashName(A.parent.id,A.name);A.name_next=Q.nameTable[g],Q.nameTable[g]=A},hashRemoveNode(A){var g=Q.hashName(A.parent.id,A.name);if(Q.nameTable[g]===A)Q.nameTable[g]=A.name_next;else for(var I=Q.nameTable[g];I;){if(I.name_next===A){I.name_next=A.name_next;break}I=I.name_next}},lookupNode(A,g){var I=Q.mayLookup(A);if(I)throw new Q.ErrnoError(I);for(var B=Q.hashName(A.id,g),i=Q.nameTable[B];i;i=i.name_next){var o=i.name;if(i.parent.id===A.id&&o===g)return i}return Q.lookup(A,g)},createNode(A,g,I,B){var i=new Q.FSNode(A,g,I,B);return Q.hashAddNode(i),i},destroyNode(A){Q.hashRemoveNode(A)},isRoot(A){return A===A.parent},isMountpoint(A){return!!A.mounted},isFile(A){return(A&61440)===32768},isDir(A){return(A&61440)===16384},isLink(A){return(A&61440)===40960},isChrdev(A){return(A&61440)===8192},isBlkdev(A){return(A&61440)===24576},isFIFO(A){return(A&61440)===4096},isSocket(A){return(A&49152)===49152},flagsToPermissionString(A){var g=[\"r\",\"w\",\"rw\"][A&3];return A&512&&(g+=\"w\"),g},nodePermissions(A,g){return Q.ignorePermissions?0:g.includes(\"r\")&&!(A.mode&292)||g.includes(\"w\")&&!(A.mode&146)||g.includes(\"x\")&&!(A.mode&73)?2:0},mayLookup(A){if(!Q.isDir(A.mode))return 54;var g=Q.nodePermissions(A,\"x\");return g||(A.node_ops.lookup?0:2)},mayCreate(A,g){try{var I=Q.lookupNode(A,g);return 20}catch{}return Q.nodePermissions(A,\"wx\")},mayDelete(A,g,I){var B;try{B=Q.lookupNode(A,g)}catch(o){return o.errno}var i=Q.nodePermissions(A,\"wx\");if(i)return i;if(I){if(!Q.isDir(B.mode))return 54;if(Q.isRoot(B)||Q.getPath(B)===Q.cwd())return 10}else if(Q.isDir(B.mode))return 31;return 0},mayOpen(A,g){return A?Q.isLink(A.mode)?32:Q.isDir(A.mode)&&(Q.flagsToPermissionString(g)!==\"r\"||g&512)?31:Q.nodePermissions(A,Q.flagsToPermissionString(g)):44},MAX_OPEN_FDS:4096,nextfd(){for(var A=0;A<=Q.MAX_OPEN_FDS;A++)if(!Q.streams[A])return A;throw new Q.ErrnoError(33)},getStreamChecked(A){var g=Q.getStream(A);if(!g)throw new Q.ErrnoError(8);return g},getStream:A=>Q.streams[A],createStream(A,g=-1){return A=Object.assign(new Q.FSStream,A),g==-1&&(g=Q.nextfd()),A.fd=g,Q.streams[g]=A,A},closeStream(A){Q.streams[A]=null},dupStream(A,g=-1){var I=Q.createStream(A,g);return I.stream_ops?.dup?.(I),I},chrdev_stream_ops:{open(A){var g=Q.getDevice(A.node.rdev);A.stream_ops=g.stream_ops,A.stream_ops.open?.(A)},llseek(){throw new Q.ErrnoError(70)}},major:A=>A>>8,minor:A=>A&255,makedev:(A,g)=>A<<8|g,registerDevice(A,g){Q.devices[A]={stream_ops:g}},getDevice:A=>Q.devices[A],getMounts(A){for(var g=[],I=[A];I.length;){var B=I.pop();g.push(B),I.push(...B.mounts)}return g},syncfs(A,g){typeof A==\"function\"&&(g=A,A=!1),Q.syncFSRequests++,Q.syncFSRequests>1&&AA(`warning: ${Q.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`);var I=Q.getMounts(Q.root.mount),B=0;function i(t){return Q.syncFSRequests--,g(t)}function o(t){if(t)return o.errored?void 0:(o.errored=!0,i(t));++B>=I.length&&i(null)}I.forEach(t=>{if(!t.type.syncfs)return o(null);t.type.syncfs(t,A,o)})},mount(A,g,I){var B=I===\"/\",i=!I,o;if(B&&Q.root)throw new Q.ErrnoError(10);if(!B&&!i){var t=Q.lookupPath(I,{follow_mount:!1});if(I=t.path,o=t.node,Q.isMountpoint(o))throw new Q.ErrnoError(10);if(!Q.isDir(o.mode))throw new Q.ErrnoError(54)}var s={type:A,opts:g,mountpoint:I,mounts:[]},a=A.mount(s);return a.mount=s,s.root=a,B?Q.root=a:o&&(o.mounted=s,o.mount&&o.mount.mounts.push(s)),a},unmount(A){var g=Q.lookupPath(A,{follow_mount:!1});if(!Q.isMountpoint(g.node))throw new Q.ErrnoError(28);var I=g.node,B=I.mounted,i=Q.getMounts(B);Object.keys(Q.nameTable).forEach(t=>{for(var s=Q.nameTable[t];s;){var a=s.name_next;i.includes(s.mount)&&Q.destroyNode(s),s=a}}),I.mounted=null;var o=I.mount.mounts.indexOf(B);I.mount.mounts.splice(o,1)},lookup(A,g){return A.node_ops.lookup(A,g)},mknod(A,g,I){var B=Q.lookupPath(A,{parent:!0}),i=B.node,o=m.basename(A);if(!o||o===\".\"||o===\"..\")throw new Q.ErrnoError(28);var t=Q.mayCreate(i,o);if(t)throw new Q.ErrnoError(t);if(!i.node_ops.mknod)throw new Q.ErrnoError(63);return i.node_ops.mknod(i,o,g,I)},create(A,g){return g=g!==void 0?g:438,g&=4095,g|=32768,Q.mknod(A,g,0)},mkdir(A,g){return g=g!==void 0?g:511,g&=1023,g|=16384,Q.mknod(A,g,0)},mkdirTree(A,g){for(var I=A.split(\"/\"),B=\"\",i=0;i<I.length;++i)if(I[i]){B+=\"/\"+I[i];try{Q.mkdir(B,g)}catch(o){if(o.errno!=20)throw o}}},mkdev(A,g,I){return typeof I>\"u\"&&(I=g,g=438),g|=8192,Q.mknod(A,g,I)},symlink(A,g){if(!aA.resolve(A))throw new Q.ErrnoError(44);var I=Q.lookupPath(g,{parent:!0}),B=I.node;if(!B)throw new Q.ErrnoError(44);var i=m.basename(g),o=Q.mayCreate(B,i);if(o)throw new Q.ErrnoError(o);if(!B.node_ops.symlink)throw new Q.ErrnoError(63);return B.node_ops.symlink(B,i,A)},rename(A,g){var I=m.dirname(A),B=m.dirname(g),i=m.basename(A),o=m.basename(g),t,s,a;if(t=Q.lookupPath(A,{parent:!0}),s=t.node,t=Q.lookupPath(g,{parent:!0}),a=t.node,!s||!a)throw new Q.ErrnoError(44);if(s.mount!==a.mount)throw new Q.ErrnoError(75);var D=Q.lookupNode(s,i),h=aA.relative(A,B);if(h.charAt(0)!==\".\")throw new Q.ErrnoError(28);if(h=aA.relative(g,I),h.charAt(0)!==\".\")throw new Q.ErrnoError(55);var R;try{R=Q.lookupNode(a,o)}catch{}if(D!==R){var f=Q.isDir(D.mode),G=Q.mayDelete(s,i,f);if(G)throw new Q.ErrnoError(G);if(G=R?Q.mayDelete(a,o,f):Q.mayCreate(a,o),G)throw new Q.ErrnoError(G);if(!s.node_ops.rename)throw new Q.ErrnoError(63);if(Q.isMountpoint(D)||R&&Q.isMountpoint(R))throw new Q.ErrnoError(10);if(a!==s&&(G=Q.nodePermissions(s,\"w\"),G))throw new Q.ErrnoError(G);Q.hashRemoveNode(D);try{s.node_ops.rename(D,a,o)}catch(k){throw k}finally{Q.hashAddNode(D)}}},rmdir(A){var g=Q.lookupPath(A,{parent:!0}),I=g.node,B=m.basename(A),i=Q.lookupNode(I,B),o=Q.mayDelete(I,B,!0);if(o)throw new Q.ErrnoError(o);if(!I.node_ops.rmdir)throw new Q.ErrnoError(63);if(Q.isMountpoint(i))throw new Q.ErrnoError(10);I.node_ops.rmdir(I,B),Q.destroyNode(i)},readdir(A){var g=Q.lookupPath(A,{follow:!0}),I=g.node;if(!I.node_ops.readdir)throw new Q.ErrnoError(54);return I.node_ops.readdir(I)},unlink(A){var g=Q.lookupPath(A,{parent:!0}),I=g.node;if(!I)throw new Q.ErrnoError(44);var B=m.basename(A),i=Q.lookupNode(I,B),o=Q.mayDelete(I,B,!1);if(o)throw new Q.ErrnoError(o);if(!I.node_ops.unlink)throw new Q.ErrnoError(63);if(Q.isMountpoint(i))throw new Q.ErrnoError(10);I.node_ops.unlink(I,B),Q.destroyNode(i)},readlink(A){var g=Q.lookupPath(A),I=g.node;if(!I)throw new Q.ErrnoError(44);if(!I.node_ops.readlink)throw new Q.ErrnoError(28);return aA.resolve(Q.getPath(I.parent),I.node_ops.readlink(I))},stat(A,g){var I=Q.lookupPath(A,{follow:!g}),B=I.node;if(!B)throw new Q.ErrnoError(44);if(!B.node_ops.getattr)throw new Q.ErrnoError(63);return B.node_ops.getattr(B)},lstat(A){return Q.stat(A,!0)},chmod(A,g,I){var B;if(typeof A==\"string\"){var i=Q.lookupPath(A,{follow:!I});B=i.node}else B=A;if(!B.node_ops.setattr)throw new Q.ErrnoError(63);B.node_ops.setattr(B,{mode:g&4095|B.mode&-4096,timestamp:Date.now()})},lchmod(A,g){Q.chmod(A,g,!0)},fchmod(A,g){var I=Q.getStreamChecked(A);Q.chmod(I.node,g)},chown(A,g,I,B){var i;if(typeof A==\"string\"){var o=Q.lookupPath(A,{follow:!B});i=o.node}else i=A;if(!i.node_ops.setattr)throw new Q.ErrnoError(63);i.node_ops.setattr(i,{timestamp:Date.now()})},lchown(A,g,I){Q.chown(A,g,I,!0)},fchown(A,g,I){var B=Q.getStreamChecked(A);Q.chown(B.node,g,I)},truncate(A,g){if(g<0)throw new Q.ErrnoError(28);var I;if(typeof A==\"string\"){var B=Q.lookupPath(A,{follow:!0});I=B.node}else I=A;if(!I.node_ops.setattr)throw new Q.ErrnoError(63);if(Q.isDir(I.mode))throw new Q.ErrnoError(31);if(!Q.isFile(I.mode))throw new Q.ErrnoError(28);var i=Q.nodePermissions(I,\"w\");if(i)throw new Q.ErrnoError(i);I.node_ops.setattr(I,{size:g,timestamp:Date.now()})},ftruncate(A,g){var I=Q.getStreamChecked(A);if(!(I.flags&2097155))throw new Q.ErrnoError(28);Q.truncate(I.node,g)},utime(A,g,I){var B=Q.lookupPath(A,{follow:!0}),i=B.node;i.node_ops.setattr(i,{timestamp:Math.max(g,I)})},open(A,g,I){if(A===\"\")throw new Q.ErrnoError(44);g=typeof g==\"string\"?XC(g):g,I=typeof I>\"u\"?438:I,g&64?I=I&4095|32768:I=0;var B;if(typeof A==\"object\")B=A;else{A=m.normalize(A);try{var i=Q.lookupPath(A,{follow:!(g&131072)});B=i.node}catch{}}var o=!1;if(g&64)if(B){if(g&128)throw new Q.ErrnoError(20)}else B=Q.mknod(A,I,0),o=!0;if(!B)throw new Q.ErrnoError(44);if(Q.isChrdev(B.mode)&&(g&=-513),g&65536&&!Q.isDir(B.mode))throw new Q.ErrnoError(54);if(!o){var t=Q.mayOpen(B,g);if(t)throw new Q.ErrnoError(t)}g&512&&!o&&Q.truncate(B,0),g&=-131713;var s=Q.createStream({node:B,path:Q.getPath(B),flags:g,seekable:!0,position:0,stream_ops:B.stream_ops,ungotten:[],error:!1});return s.stream_ops.open&&s.stream_ops.open(s),e.logReadFiles&&!(g&1)&&(Q.readFiles||(Q.readFiles={}),A in Q.readFiles||(Q.readFiles[A]=1)),s},close(A){if(Q.isClosed(A))throw new Q.ErrnoError(8);A.getdents&&(A.getdents=null);try{A.stream_ops.close&&A.stream_ops.close(A)}catch(g){throw g}finally{Q.closeStream(A.fd)}A.fd=null},isClosed(A){return A.fd===null},llseek(A,g,I){if(Q.isClosed(A))throw new Q.ErrnoError(8);if(!A.seekable||!A.stream_ops.llseek)throw new Q.ErrnoError(70);if(I!=0&&I!=1&&I!=2)throw new Q.ErrnoError(28);return A.position=A.stream_ops.llseek(A,g,I),A.ungotten=[],A.position},read(A,g,I,B,i){if(B<0||i<0)throw new Q.ErrnoError(28);if(Q.isClosed(A))throw new Q.ErrnoError(8);if((A.flags&2097155)===1)throw new Q.ErrnoError(8);if(Q.isDir(A.node.mode))throw new Q.ErrnoError(31);if(!A.stream_ops.read)throw new Q.ErrnoError(28);var o=typeof i<\"u\";if(!o)i=A.position;else if(!A.seekable)throw new Q.ErrnoError(70);var t=A.stream_ops.read(A,g,I,B,i);return o||(A.position+=t),t},write(A,g,I,B,i,o){if(B<0||i<0)throw new Q.ErrnoError(28);if(Q.isClosed(A))throw new Q.ErrnoError(8);if(!(A.flags&2097155))throw new Q.ErrnoError(8);if(Q.isDir(A.node.mode))throw new Q.ErrnoError(31);if(!A.stream_ops.write)throw new Q.ErrnoError(28);A.seekable&&A.flags&1024&&Q.llseek(A,0,2);var t=typeof i<\"u\";if(!t)i=A.position;else if(!A.seekable)throw new Q.ErrnoError(70);var s=A.stream_ops.write(A,g,I,B,i,o);return t||(A.position+=s),s},allocate(A,g,I){if(Q.isClosed(A))throw new Q.ErrnoError(8);if(g<0||I<=0)throw new Q.ErrnoError(28);if(!(A.flags&2097155))throw new Q.ErrnoError(8);if(!Q.isFile(A.node.mode)&&!Q.isDir(A.node.mode))throw new Q.ErrnoError(43);if(!A.stream_ops.allocate)throw new Q.ErrnoError(138);A.stream_ops.allocate(A,g,I)},mmap(A,g,I,B,i){if(B&2&&!(i&2)&&(A.flags&2097155)!==2)throw new Q.ErrnoError(2);if((A.flags&2097155)===1)throw new Q.ErrnoError(2);if(!A.stream_ops.mmap)throw new Q.ErrnoError(43);return A.stream_ops.mmap(A,g,I,B,i)},msync(A,g,I,B,i){return A.stream_ops.msync?A.stream_ops.msync(A,g,I,B,i):0},ioctl(A,g,I){if(!A.stream_ops.ioctl)throw new Q.ErrnoError(59);return A.stream_ops.ioctl(A,g,I)},readFile(A,g={}){if(g.flags=g.flags||0,g.encoding=g.encoding||\"binary\",g.encoding!==\"utf8\"&&g.encoding!==\"binary\")throw new Error(`Invalid encoding type \"${g.encoding}\"`);var I,B=Q.open(A,g.flags),i=Q.stat(A),o=i.size,t=new Uint8Array(o);return Q.read(B,t,0,o,0),g.encoding===\"utf8\"?I=LA(t,0):g.encoding===\"binary\"&&(I=t),Q.close(B),I},writeFile(A,g,I={}){I.flags=I.flags||577;var B=Q.open(A,I.flags,I.mode);if(typeof g==\"string\"){var i=new Uint8Array(Mg(g)+1),o=Ng(g,i,0,i.length);Q.write(B,i,0,o,void 0,I.canOwn)}else if(ArrayBuffer.isView(g))Q.write(B,g,0,g.byteLength,void 0,I.canOwn);else throw new Error(\"Unsupported data type\");Q.close(B)},cwd:()=>Q.currentPath,chdir(A){var g=Q.lookupPath(A,{follow:!0});if(g.node===null)throw new Q.ErrnoError(44);if(!Q.isDir(g.node.mode))throw new Q.ErrnoError(54);var I=Q.nodePermissions(g.node,\"x\");if(I)throw new Q.ErrnoError(I);Q.currentPath=g.path},createDefaultDirectories(){Q.mkdir(\"/tmp\"),Q.mkdir(\"/home\"),Q.mkdir(\"/home/web_user\")},createDefaultDevices(){Q.mkdir(\"/dev\"),Q.registerDevice(Q.makedev(1,3),{read:()=>0,write:(B,i,o,t,s)=>t}),Q.mkdev(\"/dev/null\",Q.makedev(1,3)),cA.register(Q.makedev(5,0),cA.default_tty_ops),cA.register(Q.makedev(6,0),cA.default_tty1_ops),Q.mkdev(\"/dev/tty\",Q.makedev(5,0)),Q.mkdev(\"/dev/tty1\",Q.makedev(6,0));var A=new Uint8Array(1024),g=0,I=()=>(g===0&&(g=dI(A).byteLength),A[--g]);Q.createDevice(\"/dev\",\"random\",I),Q.createDevice(\"/dev\",\"urandom\",I),Q.mkdir(\"/dev/shm\"),Q.mkdir(\"/dev/shm/tmp\")},createSpecialDirectories(){Q.mkdir(\"/proc\");var A=Q.mkdir(\"/proc/self\");Q.mkdir(\"/proc/self/fd\"),Q.mount({mount(){var g=Q.createNode(A,\"fd\",16895,73);return g.node_ops={lookup(I,B){var i=+B,o=Q.getStreamChecked(i),t={parent:null,mount:{mountpoint:\"fake\"},node_ops:{readlink:()=>o.path}};return t.parent=t,t}},g}},{},\"/proc/self/fd\")},createStandardStreams(){e.stdin?Q.createDevice(\"/dev\",\"stdin\",e.stdin):Q.symlink(\"/dev/tty\",\"/dev/stdin\"),e.stdout?Q.createDevice(\"/dev\",\"stdout\",null,e.stdout):Q.symlink(\"/dev/tty\",\"/dev/stdout\"),e.stderr?Q.createDevice(\"/dev\",\"stderr\",null,e.stderr):Q.symlink(\"/dev/tty1\",\"/dev/stderr\");var A=Q.open(\"/dev/stdin\",0),g=Q.open(\"/dev/stdout\",1),I=Q.open(\"/dev/stderr\",1)},staticInit(){[44].forEach(A=>{Q.genericErrors[A]=new Q.ErrnoError(A),Q.genericErrors[A].stack=\"<generic error, no stack>\"}),Q.nameTable=new Array(4096),Q.mount(M,{},\"/\"),Q.createDefaultDirectories(),Q.createDefaultDevices(),Q.createSpecialDirectories(),Q.filesystems={MEMFS:M}},init(A,g,I){Q.init.initialized=!0,e.stdin=A||e.stdin,e.stdout=g||e.stdout,e.stderr=I||e.stderr,Q.createStandardStreams()},quit(){Q.init.initialized=!1;for(var A=0;A<Q.streams.length;A++){var g=Q.streams[A];g&&Q.close(g)}},findObject(A,g){var I=Q.analyzePath(A,g);return I.exists?I.object:null},analyzePath(A,g){try{var I=Q.lookupPath(A,{follow:!g});A=I.path}catch{}var B={isRoot:!1,exists:!1,error:0,name:null,path:null,object:null,parentExists:!1,parentPath:null,parentObject:null};try{var I=Q.lookupPath(A,{parent:!0});B.parentExists=!0,B.parentPath=I.path,B.parentObject=I.node,B.name=m.basename(A),I=Q.lookupPath(A,{follow:!g}),B.exists=!0,B.path=I.path,B.object=I.node,B.name=I.node.name,B.isRoot=I.path===\"/\"}catch(i){B.error=i.errno}return B},createPath(A,g,I,B){A=typeof A==\"string\"?A:Q.getPath(A);for(var i=g.split(\"/\").reverse();i.length;){var o=i.pop();if(o){var t=m.join2(A,o);try{Q.mkdir(t)}catch{}A=t}}return t},createFile(A,g,I,B,i){var o=m.join2(typeof A==\"string\"?A:Q.getPath(A),g),t=Sg(B,i);return Q.create(o,t)},createDataFile(A,g,I,B,i,o){var t=g;A&&(A=typeof A==\"string\"?A:Q.getPath(A),t=g?m.join2(A,g):A);var s=Sg(B,i),a=Q.create(t,s);if(I){if(typeof I==\"string\"){for(var D=new Array(I.length),h=0,R=I.length;h<R;++h)D[h]=I.charCodeAt(h);I=D}Q.chmod(a,s|146);var f=Q.open(a,577);Q.write(f,I,0,I.length,0,o),Q.close(f),Q.chmod(a,s)}},createDevice(A,g,I,B){var i=m.join2(typeof A==\"string\"?A:Q.getPath(A),g),o=Sg(!!I,!!B);Q.createDevice.major||(Q.createDevice.major=64);var t=Q.makedev(Q.createDevice.major++,0);return Q.registerDevice(t,{open(s){s.seekable=!1},close(s){B?.buffer?.length&&B(10)},read(s,a,D,h,R){for(var f=0,G=0;G<h;G++){var k;try{k=I()}catch{throw new Q.ErrnoError(29)}if(k===void 0&&f===0)throw new Q.ErrnoError(6);if(k==null)break;f++,a[D+G]=k}return f&&(s.node.timestamp=Date.now()),f},write(s,a,D,h,R){for(var f=0;f<h;f++)try{B(a[D+f])}catch{throw new Q.ErrnoError(29)}return h&&(s.node.timestamp=Date.now()),f}}),Q.mkdev(i,o,t)},forceLoadFile(A){if(A.isDevice||A.isFolder||A.link||A.contents)return!0;if(typeof XMLHttpRequest<\"u\")throw new Error(\"Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.\");if(q)try{A.contents=Cg(q(A.url),!0),A.usedBytes=A.contents.length}catch{throw new Q.ErrnoError(29)}else throw new Error(\"Cannot load without read() or XMLHttpRequest.\")},createLazyFile(A,g,I,B,i){class o{constructor(){this.lengthKnown=!1,this.chunks=[]}get(G){if(!(G>this.length-1||G<0)){var k=G%this.chunkSize,K=G/this.chunkSize|0;return this.getter(K)[k]}}setDataGetter(G){this.getter=G}cacheLength(){var G=new XMLHttpRequest;if(G.open(\"HEAD\",I,!1),G.send(null),!(G.status>=200&&G.status<300||G.status===304))throw new Error(\"Couldn't load \"+I+\". Status: \"+G.status);var k=Number(G.getResponseHeader(\"Content-length\")),K,b=(K=G.getResponseHeader(\"Accept-Ranges\"))&&K===\"bytes\",j=(K=G.getResponseHeader(\"Content-Encoding\"))&&K===\"gzip\",w=1024*1024;b||(w=k);var d=(p,QA)=>{if(p>QA)throw new Error(\"invalid range (\"+p+\", \"+QA+\") or no bytes requested!\");if(QA>k-1)throw new Error(\"only \"+k+\" bytes available! programmer error!\");var v=new XMLHttpRequest;if(v.open(\"GET\",I,!1),k!==w&&v.setRequestHeader(\"Range\",\"bytes=\"+p+\"-\"+QA),v.responseType=\"arraybuffer\",v.overrideMimeType&&v.overrideMimeType(\"text/plain; charset=x-user-defined\"),v.send(null),!(v.status>=200&&v.status<300||v.status===304))throw new Error(\"Couldn't load \"+I+\". Status: \"+v.status);return v.response!==void 0?new Uint8Array(v.response||[]):Cg(v.responseText||\"\",!0)},W=this;W.setDataGetter(p=>{var QA=p*w,v=(p+1)*w-1;if(v=Math.min(v,k-1),typeof W.chunks[p]>\"u\"&&(W.chunks[p]=d(QA,v)),typeof W.chunks[p]>\"u\")throw new Error(\"doXHR failed!\");return W.chunks[p]}),(j||!k)&&(w=k=1,k=this.getter(0).length,w=k,CA(\"LazyFiles on gzip forces download of the whole file when length is accessed\")),this._length=k,this._chunkSize=w,this.lengthKnown=!0}get length(){return this.lengthKnown||this.cacheLength(),this._length}get chunkSize(){return this.lengthKnown||this.cacheLength(),this._chunkSize}}if(typeof XMLHttpRequest<\"u\"){if(!l)throw\"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc\";var t=new o,s={isDevice:!1,contents:t}}else var s={isDevice:!1,url:I};var a=Q.createFile(A,g,s,B,i);s.contents?a.contents=s.contents:s.url&&(a.contents=null,a.url=s.url),Object.defineProperties(a,{usedBytes:{get:function(){return this.contents.length}}});var D={},h=Object.keys(a.stream_ops);h.forEach(f=>{var G=a.stream_ops[f];D[f]=(...k)=>(Q.forceLoadFile(a),G(...k))});function R(f,G,k,K,b){var j=f.node.contents;if(b>=j.length)return 0;var w=Math.min(j.length-b,K);if(j.slice)for(var d=0;d<w;d++)G[k+d]=j[b+d];else for(var d=0;d<w;d++)G[k+d]=j.get(b+d);return w}return D.read=(f,G,k,K,b)=>(Q.forceLoadFile(a),R(f,G,k,K,b)),D.mmap=(f,G,k,K,b)=>{Q.forceLoadFile(a);var j=RI(G);if(!j)throw new Q.ErrnoError(48);return R(f,x,j,G,k),{ptr:j,allocated:!0}},a.stream_ops=D,a}},mA={DEFAULT_POLLMASK:5,calculateAt(A,g,I){if(m.isAbs(g))return g;var B;if(A===-100)B=Q.cwd();else{var i=mA.getStreamFromFD(A);B=i.path}if(g.length==0){if(!I)throw new Q.ErrnoError(44);return B}return m.join2(B,g)},doStat(A,g,I){var B=A(g);J[I>>2]=B.dev,J[I+4>>2]=B.mode,S[I+8>>2]=B.nlink,J[I+12>>2]=B.uid,J[I+16>>2]=B.gid,J[I+20>>2]=B.rdev,O=[B.size>>>0,(u=B.size,+Math.abs(u)>=1?u>0?+Math.floor(u/4294967296)>>>0:~~+Math.ceil((u-+(~~u>>>0))/4294967296)>>>0:0)],J[I+24>>2]=O[0],J[I+28>>2]=O[1],J[I+32>>2]=4096,J[I+36>>2]=B.blocks;var i=B.atime.getTime(),o=B.mtime.getTime(),t=B.ctime.getTime();return O=[Math.floor(i/1e3)>>>0,(u=Math.floor(i/1e3),+Math.abs(u)>=1?u>0?+Math.floor(u/4294967296)>>>0:~~+Math.ceil((u-+(~~u>>>0))/4294967296)>>>0:0)],J[I+40>>2]=O[0],J[I+44>>2]=O[1],S[I+48>>2]=i%1e3*1e3,O=[Math.floor(o/1e3)>>>0,(u=Math.floor(o/1e3),+Math.abs(u)>=1?u>0?+Math.floor(u/4294967296)>>>0:~~+Math.ceil((u-+(~~u>>>0))/4294967296)>>>0:0)],J[I+56>>2]=O[0],J[I+60>>2]=O[1],S[I+64>>2]=o%1e3*1e3,O=[Math.floor(t/1e3)>>>0,(u=Math.floor(t/1e3),+Math.abs(u)>=1?u>0?+Math.floor(u/4294967296)>>>0:~~+Math.ceil((u-+(~~u>>>0))/4294967296)>>>0:0)],J[I+72>>2]=O[0],J[I+76>>2]=O[1],S[I+80>>2]=t%1e3*1e3,O=[B.ino>>>0,(u=B.ino,+Math.abs(u)>=1?u>0?+Math.floor(u/4294967296)>>>0:~~+Math.ceil((u-+(~~u>>>0))/4294967296)>>>0:0)],J[I+88>>2]=O[0],J[I+92>>2]=O[1],0},doMsync(A,g,I,B,i){if(!Q.isFile(g.node.mode))throw new Q.ErrnoError(43);if(B&2)return 0;var o=V.slice(A,A+I);Q.msync(g,o,i,I,B)},getStreamFromFD(A){var g=Q.getStreamChecked(A);return g},varargs:void 0,getStr(A){var g=Bg(A);return g}};function OC(A){try{var g=mA.getStreamFromFD(A);return Q.close(g),0}catch(I){if(typeof Q>\"u\"||I.name!==\"ErrnoError\")throw I;return I.errno}}var ZC=(A,g,I,B)=>{for(var i=0,o=0;o<I;o++){var t=S[g>>2],s=S[g+4>>2];g+=8;var a=Q.read(A,x,t,s,B);if(a<0)return-1;if(i+=a,a<s)break;typeof B<\"u\"&&(B+=a)}return i};function _C(A,g,I,B){try{var i=mA.getStreamFromFD(A),o=ZC(i,g,I);return S[B>>2]=o,0}catch(t){if(typeof Q>\"u\"||t.name!==\"ErrnoError\")throw t;return t.errno}}var zC=(A,g)=>g+2097152>>>0<4194305-!!A?(A>>>0)+g*4294967296:NaN;function $C(A,g,I,B,i){var o=zC(g,I);try{if(isNaN(o))return 61;var t=mA.getStreamFromFD(A);return Q.llseek(t,o,B),O=[t.position>>>0,(u=t.position,+Math.abs(u)>=1?u>0?+Math.floor(u/4294967296)>>>0:~~+Math.ceil((u-+(~~u>>>0))/4294967296)>>>0:0)],J[i>>2]=O[0],J[i+4>>2]=O[1],t.getdents&&o===0&&B===0&&(t.getdents=null),0}catch(s){if(typeof Q>\"u\"||s.name!==\"ErrnoError\")throw s;return s.errno}}var AQ=(A,g,I,B)=>{for(var i=0,o=0;o<I;o++){var t=S[g>>2],s=S[g+4>>2];g+=8;var a=Q.write(A,x,t,s,B);if(a<0)return-1;i+=a,typeof B<\"u\"&&(B+=a)}return i};function gQ(A,g,I,B){try{var i=mA.getStreamFromFD(A),o=AQ(i,g,I);return S[B>>2]=o,0}catch(t){if(typeof Q>\"u\"||t.name!==\"ErrnoError\")throw t;return t.errno}}var Qg=A=>A%4===0&&(A%100!==0||A%400===0),IQ=(A,g)=>{for(var I=0,B=0;B<=g;I+=A[B++]);return I},GI=[31,29,31,30,31,30,31,31,30,31,30,31],kI=[31,28,31,30,31,30,31,31,30,31,30,31],BQ=(A,g)=>{for(var I=new Date(A.getTime());g>0;){var B=Qg(I.getFullYear()),i=I.getMonth(),o=(B?GI:kI)[i];if(g>o-I.getDate())g-=o-I.getDate()+1,I.setDate(1),i<11?I.setMonth(i+1):(I.setMonth(0),I.setFullYear(I.getFullYear()+1));else return I.setDate(I.getDate()+g),I}return I},CQ=(A,g)=>{x.set(A,g)},QQ=(A,g,I,B)=>{var i=S[B+40>>2],o={tm_sec:J[B>>2],tm_min:J[B+4>>2],tm_hour:J[B+8>>2],tm_mday:J[B+12>>2],tm_mon:J[B+16>>2],tm_year:J[B+20>>2],tm_wday:J[B+24>>2],tm_yday:J[B+28>>2],tm_isdst:J[B+32>>2],tm_gmtoff:J[B+36>>2],tm_zone:i?Bg(i):\"\"},t=Bg(I),s={\"%c\":\"%a %b %d %H:%M:%S %Y\",\"%D\":\"%m/%d/%y\",\"%F\":\"%Y-%m-%d\",\"%h\":\"%b\",\"%r\":\"%I:%M:%S %p\",\"%R\":\"%H:%M\",\"%T\":\"%H:%M:%S\",\"%x\":\"%m/%d/%y\",\"%X\":\"%H:%M:%S\",\"%Ec\":\"%c\",\"%EC\":\"%C\",\"%Ex\":\"%m/%d/%y\",\"%EX\":\"%H:%M:%S\",\"%Ey\":\"%y\",\"%EY\":\"%Y\",\"%Od\":\"%d\",\"%Oe\":\"%e\",\"%OH\":\"%H\",\"%OI\":\"%I\",\"%Om\":\"%m\",\"%OM\":\"%M\",\"%OS\":\"%S\",\"%Ou\":\"%u\",\"%OU\":\"%U\",\"%OV\":\"%V\",\"%Ow\":\"%w\",\"%OW\":\"%W\",\"%Oy\":\"%y\"};for(var a in s)t=t.replace(new RegExp(a,\"g\"),s[a]);var D=[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],h=[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"];function R(w,d,W){for(var p=typeof w==\"number\"?w.toString():w||\"\";p.length<d;)p=W[0]+p;return p}function f(w,d){return R(w,d,\"0\")}function G(w,d){function W(QA){return QA<0?-1:QA>0?1:0}var p;return(p=W(w.getFullYear()-d.getFullYear()))===0&&(p=W(w.getMonth()-d.getMonth()))===0&&(p=W(w.getDate()-d.getDate())),p}function k(w){switch(w.getDay()){case 0:return new Date(w.getFullYear()-1,11,29);case 1:return w;case 2:return new Date(w.getFullYear(),0,3);case 3:return new Date(w.getFullYear(),0,2);case 4:return new Date(w.getFullYear(),0,1);case 5:return new Date(w.getFullYear()-1,11,31);case 6:return new Date(w.getFullYear()-1,11,30)}}function K(w){var d=BQ(new Date(w.tm_year+1900,0,1),w.tm_yday),W=new Date(d.getFullYear(),0,4),p=new Date(d.getFullYear()+1,0,4),QA=k(W),v=k(p);return G(QA,d)<=0?G(v,d)<=0?d.getFullYear()+1:d.getFullYear():d.getFullYear()-1}var b={\"%a\":w=>D[w.tm_wday].substring(0,3),\"%A\":w=>D[w.tm_wday],\"%b\":w=>h[w.tm_mon].substring(0,3),\"%B\":w=>h[w.tm_mon],\"%C\":w=>{var d=w.tm_year+1900;return f(d/100|0,2)},\"%d\":w=>f(w.tm_mday,2),\"%e\":w=>R(w.tm_mday,2,\" \"),\"%g\":w=>K(w).toString().substring(2),\"%G\":K,\"%H\":w=>f(w.tm_hour,2),\"%I\":w=>{var d=w.tm_hour;return d==0?d=12:d>12&&(d-=12),f(d,2)},\"%j\":w=>f(w.tm_mday+IQ(Qg(w.tm_year+1900)?GI:kI,w.tm_mon-1),3),\"%m\":w=>f(w.tm_mon+1,2),\"%M\":w=>f(w.tm_min,2),\"%n\":()=>`\n`,\"%p\":w=>w.tm_hour>=0&&w.tm_hour<12?\"AM\":\"PM\",\"%S\":w=>f(w.tm_sec,2),\"%t\":()=>\"\t\",\"%u\":w=>w.tm_wday||7,\"%U\":w=>{var d=w.tm_yday+7-w.tm_wday;return f(Math.floor(d/7),2)},\"%V\":w=>{var d=Math.floor((w.tm_yday+7-(w.tm_wday+6)%7)/7);if((w.tm_wday+371-w.tm_yday-2)%7<=2&&d++,d){if(d==53){var p=(w.tm_wday+371-w.tm_yday)%7;p!=4&&(p!=3||!Qg(w.tm_year))&&(d=1)}}else{d=52;var W=(w.tm_wday+7-w.tm_yday-1)%7;(W==4||W==5&&Qg(w.tm_year%400-1))&&d++}return f(d,2)},\"%w\":w=>w.tm_wday,\"%W\":w=>{var d=w.tm_yday+7-(w.tm_wday+6)%7;return f(Math.floor(d/7),2)},\"%y\":w=>(w.tm_year+1900).toString().substring(2),\"%Y\":w=>w.tm_year+1900,\"%z\":w=>{var d=w.tm_gmtoff,W=d>=0;return d=Math.abs(d)/60,d=d/60*100+d%60,(W?\"+\":\"-\")+(\"0000\"+d).slice(-4)},\"%Z\":w=>w.tm_zone,\"%%\":()=>\"%\"};t=t.replace(/%%/g,\"\\0\\0\");for(var a in b)t.includes(a)&&(t=t.replace(new RegExp(a,\"g\"),b[a](o)));t=t.replace(/\\0\\0/g,\"%\");var j=Cg(t,!1);return j.length>g?0:(CQ(j,A),j.length-1)},EQ=(A,g,I,B,i)=>QQ(A,g,I,B);GB(),kA=e.BindingError=class extends Error{constructor(g){super(g),this.name=\"BindingError\"}},CI=e.InternalError=class extends Error{constructor(g){super(g),this.name=\"InternalError\"}},pB(),UB(),VB(),rI=e.UnboundTypeError=_B(Error,\"UnboundTypeError\"),iC(),Q.createPreloadedFile=PC,Q.staticInit();var iQ={t:hB,f:lB,x:dB,p:RB,k:LB,j:zB,d:IC,o:BC,c:CC,E:nI,i:oC,b:sC,a:nC,y:aC,h:DC,e:lC,l:dC,v:RC,w:GC,u:kC,m:NC,r:UC,s:HC,B:pC,C:mC,A:OC,z:_C,n:$C,g:gQ,D:fI,q:EQ},T=cB(),eQ=()=>(eQ=T.G)(),LI=A=>(LI=T.H)(A),Ug=A=>(Ug=T.J)(A),DA=A=>(DA=T.K)(A),NI=(A,g)=>(NI=T.L)(A,g),rQ=()=>(rQ=T.emscripten_stack_get_current)(),oQ=A=>(oQ=T.htons)(A),tQ=A=>(tQ=T.ntohs)(A),MI=(A,g)=>(MI=T.M)(A,g),sQ=(A,g)=>(sQ=T.setThrew)(A,g),nQ=A=>(nQ=T._emscripten_tempret_set)(A),aQ=A=>(aQ=T._emscripten_stack_restore)(A),DQ=A=>(DQ=T._emscripten_stack_alloc)(A),uI=A=>(uI=T.N)(A),wQ=e.dynCall_jiji=(A,g,I,B,i)=>(wQ=e.dynCall_jiji=T.O)(A,g,I,B,i),yQ=e.dynCall_viijii=(A,g,I,B,i,o,t)=>(yQ=e.dynCall_viijii=T.P)(A,g,I,B,i,o,t),cQ=e.dynCall_iiiiij=(A,g,I,B,i,o,t)=>(cQ=e.dynCall_iiiiij=T.Q)(A,g,I,B,i,o,t),hQ=e.dynCall_iiiiijj=(A,g,I,B,i,o,t,s,a)=>(hQ=e.dynCall_iiiiijj=T.R)(A,g,I,B,i,o,t,s,a),FQ=e.dynCall_iiiiiijj=(A,g,I,B,i,o,t,s,a,D)=>(FQ=e.dynCall_iiiiiijj=T.S)(A,g,I,B,i,o,t,s,a,D),Eg;JA=function A(){Eg||JI(),Eg||(JA=A)};function JI(){if(FA>0||(QB(),FA>0))return;function A(){Eg||(Eg=!0,e.calledRun=!0,!H&&(EB(),n(e),e.onRuntimeInitialized&&e.onRuntimeInitialized(),iB()))}e.setStatus?(e.setStatus(\"Running...\"),setTimeout(function(){setTimeout(function(){e.setStatus(\"\")},1),A()},1)):A()}if(e.preInit)for(typeof e.preInit==\"function\"&&(e.preInit=[e.preInit]);e.preInit.length>0;)e.preInit.pop()();return JI(),E=F,E}})();typeof ZI==\"object\"&&typeof qg==\"object\"?qg.exports=OI:typeof define==\"function\"&&define.amd&&define([],()=>OI)});var Hg=(r,C)=>C?typeof C==\"string\"?` ${r}--${C}`:Array.isArray(C)?C.reduce((E,e)=>E+Hg(r,e),\"\"):Object.keys(C).reduce((E,e)=>E+(C[e]?Hg(r,e):\"\"),\"\"):\"\",MQ=r=>(C,E)=>(C&&typeof C!=\"string\"&&(E=C,C=\"\"),C=C?`${r}__${C}`:r,`${C}${Hg(C,E)}`),_Q=r=>C=>{let E=`${r}-${C}`;return[MQ(E),E]};var YI=class{static new(){return\"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g,function(C){let E=Math.random()*16|0;return(C==\"x\"?E:E&3|8).toString(16)})}};var Kg=class{constructor(C){this.getter=C}get value(){return this._value??=this.getter(),this._value}forget(){this._value=void 0}refresh(){return this.forget(),this.value}},TA=r=>new Kg(r);var pg=class{constructor(C,E=!1){this.item=C;this.isBusy=E}},HI=class{constructor(C,E=10,e=80,n=3e3){this._pool=new Map,this._busyPool=new Map,this._allocator=C,this._collectThreshold=e,this._delay=n,this.init(E)}get shouldCollect(){return this._timer===void 0&&this._pool.size>this._collectThreshold}get(){this._pool.size===0&&this.addNewObjectToPool();let C=this._pool.values().next().value;return C.isBusy=!0,this._pool.delete(C.item),this._busyPool.set(C.item,C),C.item}release(C){let E=this._busyPool.get(C);E&&(E.isBusy=!1,this._busyPool.delete(C),this._pool.set(C,E),this.shouldCollect&&this.collect())}init(C){for(let E=0;E<C;E++)this.addNewObjectToPool()}addNewObjectToPool(){let C=this._allocator.allocate();this._pool.set(C,new pg(C))}collect(){this._timer=setTimeout(()=>this.doCollect(),this._delay)}doCollect(){let C=this._pool.size-this._collectThreshold;if(C<=0)return;let E=0;for(let[e]of this._pool.entries()){if(E++===C)break;this._pool.delete(e)}this._timer=void 0}};var NA=(r,C)=>r===C;var uQ=/\\B([A-Z])/g,KI=/^./,pI=/-(\\w)/g,BE=(r,C=\"-\")=>r.replace(uQ,`${C}$1`).toLowerCase(),CE=r=>r.replace(KI,C=>C.toUpperCase()).replace(pI,(C,E)=>E?.toUpperCase()??\"\"),QE=r=>r.replace(KI,C=>C.toLowerCase()).replace(pI,(C,E)=>E?.toUpperCase()??\"\");var RA=(r,C,E=\"0\",e=\"left\")=>{let n=`${r}`,y=C-n.length;return y<=0?n:e===\"left\"?E.repeat(y)+n:n+E.repeat(y)},iE=(r,C,E=\"0\")=>RA(r,C,E),eE=(r,C,E=\"0\")=>RA(r,C,E,\"right\");var mI=class{static isUndefinedOrEmtpy(C){return C===void 0||C.trim().length===0}};var JQ=1,xg=1e3,ig=60*xg,mg=60*ig,Tg={HH:mg,mm:ig,ss:xg,sss:JQ},wE=(r,C=\"HH:mm:ss\",E=\"ss\")=>{r*=Tg[E];let e=RA(Math.floor(r/mg),2),n=RA(Math.floor(r%mg/ig),2),y=RA(Math.floor(r%ig/xg),2),F=RA(r&999,3);return C.replace(\"HH\",e).replace(\"mm\",n).replace(\"sss\",F).replace(\"ss\",y)},yE=(r,C=\"HH:mm:ss\",E=\"ss\")=>{let e=r.split(\":\"),n=C.split(\":\").slice(-e.length);return e.reduce((F,c,l)=>F+=Number(c)*(Tg[n[l]]??0),0)/Tg[E]};var TI=class r{static findNode(C,E){for(let e of C){if(E(e))return e;if(!e.children)continue;let n=r.findNode(e.children,E);if(n)return n}}static findPath(C,E){let e=new Array;for(let n of C){if(e.push(n),E(n))break;if(n.children){let y=r.findPath(n.children,E);if(y.length){e=e.concat(y);break}}e.pop()}return e}static traverseDFS(C,E){for(let e of C)E(e),e.children&&r.traverseDFS(e.children,E)}static traverseBFS(C,E){let e=C,n;for(;n=e.shift();)E(n),n.children&&e.push(...n.children)}static findPathForFirstLeaf(C){let E=new Array,e=C,n;for(;n=e?.[0];)E.push(n),e=n.children;return E}static composite(C,E,e){let n=(F,c,l)=>{for(let L of F)L.children=c.filter(N=>l(L,N)),L.children.length!==0&&n(L.children,c,l)},y=C.filter(F=>E(F));return n(y,C,e),y}};var gA=r=>Object.prototype.toString.call(r),FE=r=>gA(r)===\"[object Null]\",fE=r=>gA(r)===\"[object Undefined]\",lE=r=>gA(r)===\"[object Boolean]\",dE=r=>gA(r)===\"[object Number]\",bg=r=>gA(r)===\"[object String]\",tA=r=>gA(r)===\"[object Array]\",RE=r=>gA(r)===\"[object Object]\",GE=r=>gA(r)===\"[object Promise]\",kE=r=>gA(r)===\"[object RegExp]\",LE=r=>gA(r)===\"[object Date]\",NE=r=>gA(r)===\"[object Symbol]\",eg=r=>gA(r)===\"[object Function]\",vg=r=>gA(r)===\"[object ArrayBuffer]\",ME=r=>gA(r)===\"[object Blob]\",uE=r=>gA(r)===\"[object Uint8Array]\";var HE=(r,C)=>{let E={...r};C=tA(C)?C:[C];for(let e of C)delete E[e];return E};var WE=r=>btoa(String.fromCharCode(...r)),VE=r=>{let C=atob(r),E=C.length,e=new Uint8Array(E);for(let n=0;n<E;n++)e[n]=C.charCodeAt(n);return e};var XE=r=>Array.from(r).map(C=>C.toString(16).padStart(2,\"0\")).join(\"\"),OE=r=>{let C=r.match(/[\\da-f]{2}/gi)?.map(E=>parseInt(E,16));if(!C)throw new Error(\"data is not a hex string!\");return new Uint8Array(C)};var _E=r=>new TextDecoder().decode(r),zE=r=>new TextEncoder().encode(r);var SQ=typeof globalThis==\"object\"&&globalThis!==null&&globalThis.Object===Object&&globalThis,UQ=typeof self==\"object\"&&self!==null&&self.Object===Object&&self,xA=SQ||UQ||Function(\"return this\")();function xI(r,C,E){let e,n,y,F,c,l,L=0,N=!1,Y=!1,P=!0,iA=!C&&C!==0&&typeof xA.requestAnimationFrame==\"function\";C=+C||0,N=E?.leading??N,Y=E?.maxWait!==void 0?!0:Y,y=Y?Math.max(E?.maxWait??0,C):y,P=E?.trailing??P;function X(H){let Z=e,x=n;return e=n=void 0,L=H,r.apply(x,Z)}function q(H,Z){return iA?(xA.cancelAnimationFrame(c),xA.requestAnimationFrame(H)):xA.setTimeout(H,Z)}function $(H){iA?cancelAnimationFrame(H):clearTimeout(H)}function z(H){return L=H,c=q(CA,C),N?X(H):F}function BA(H){let Z=H-l,x=H-L,V=C-Z;return Y?Math.min(V,y-x):V}function eA(H){if(!l)return!0;let Z=H-l,x=H-L;return Z>=C||Z<0||Y&&x>=y}function CA(){let H=Date.now();if(eA(H))return AA(H);c=q(CA,BA(H))}function AA(H){return c=void 0,P&&e?X(H):(e=n=void 0,F)}function rA(){c!==void 0&&$(c),L=0,e=l=n=c=void 0}function sA(){return c===void 0?F:AA(Date.now())}function ag(){return c!==void 0}function hA(...H){let Z=Date.now(),x=eA(Z);if(e=H,n=this,l=Z,x){if(c===void 0)return z(l);if(Y)return c=q(CA,C),X(l)}return c===void 0&&(c=q(CA,C)),F}return hA.cancel=rA,hA.flush=sA,hA.pending=ag,hA}function oi(r,C,E){let e=E?.leading??!0,n=E?.trailing??!0;return xI(r,C,{leading:e,trailing:n,maxWait:C})}var yi=r=>tA(r)?r:[r],ci=(r,C)=>r.reduce((E,e)=>(E.has(e.key)?C?.(E,e):E.set(e.key,e.value),E),new Map),hi=(r,C)=>r.reduce((E,e)=>(e.key in E?C?.(E,e):E[e.key]=e.value,E),{}),Fi=(r,C,E)=>{let e=new Map;for(let n of r){let y=eg(C)?C(n):n[C];e.has(y)?E?.(e,n):e.set(y,n)}return e},fi=(r,C,E)=>{let e={};for(let n of r){let y=eg(C)?C(n):n[C];y in e?E?.(e,n):e[y]=n}return e},li=(r,C)=>{let E=new Map;for(let e of r){let n=eg(C)?C(e):e[C];E.has(n)?E.get(n)?.push(e):E.set(n,[e])}return E},di=(r,C,E=NA)=>(r.some(e=>E(e,C))?r=r.filter(e=>!E(e,C)):r=[...r,C],r),bI=r=>!!(r.length===0||r.every(C=>C==null||C===\"\"));var rg=class{constructor(C,E){this.key=C,this.value=E}toMap(){let C=new Map;return C.set(this.key,this.value),C}};var MA=class{constructor(C,E){this.item=C,this._list=E}get list(){return this._list}},vI=class{constructor(C){if(this._count=0,C)for(let E of C)this.addLast(E)}get first(){return this._head}get last(){return this._head?.prev}get count(){return this._count}addAfter(C,E){let e=new MA(E,this);return this.internalInsertNodeBefore(C.next,e),e}addBefore(C,E){let e=new MA(E);return this.internalInsertNodeBefore(C,e),C===this._head&&(this._head=e),e}addFirst(C){let E=new MA(C);return this._head===void 0?this.internalInsertNodeToEmptyList(E):this.internalInsertNodeBefore(this._head,E),E}addLast(C){let E=new MA(C);return this._head===void 0?this.internalInsertNodeToEmptyList(E):this.internalInsertNodeBefore(this._head,E),E}clear(){this._head=void 0,this._count=0}find(C){let E=this._head;if(E!==void 0)do{if(C(E.item))return E;E=E.next}while(E!==this._head)}findLast(C){if(this._head===void 0)return;let E=this._head.prev;if(E!==void 0)do{if(C(E.item))return E;E=E.prev}while(E!==this._head)}remove(C){let E=this.find(C);return E!==void 0?(this.internalRemoveNode(E),!0):!1}internalInsertNodeBefore(C,E){E.next=C,E.prev=C.prev,C.prev.next=E,C.prev=E,this._count++}internalInsertNodeToEmptyList(C){this._count===0&&(C.next=C,C.prev=C,this._count++)}internalRemoveNode(C){C.list===this&&this._count!==0&&(C.next===C?this._head=void 0:(C.next.prev=C.prev,C.prev.next=C.next,this._head===C&&(this._head=C.next)),this._count--)}};var qI=class r{static from(C){return new r(C)}constructor(C=new Array){this._items=C}*[Symbol.iterator](){for(let C of this._items)yield C}at(C){let E,e=0;for(let n of this){if(e===C){E=n;break}e++}return E}first(C){let E,e=0;C??=n=>e===0;for(let n of this){if(C(n)){E=n;break}e++}return E}some(C){let E=!1;for(let e of this)if(C(e)){E=!0;break}return E}every(C){let E=!0;for(let e of this)if(!C(e)){E=!1;break}return E}find(C){let E;for(let e of this)if(C(e)){E=e;break}return E}filter(C){let E=this,e={*[Symbol.iterator](){for(let n of E)C(n)&&(yield n)}};return new r(e)}forEach(C){for(let E of this)C(E)}reduce(C,E){let e=E;for(let n of this)e=C(e,n);return e}map(C){let E=this,e={*[Symbol.iterator](){for(let n of E)yield C(n)}};return new r(e)}slice(C,E){let e=this,n={*[Symbol.iterator](){let y=e.toArray().slice(C,E);for(let F of y)yield F}};return new r(n)}groupBy(C){let E=this,e={*[Symbol.iterator](){let n=new Map;for(let y of E){let F=C(y);n.has(F)?n.get(F).push(y):n.set(F,[y])}for(let[y,F]of n)yield new rg(y,F)}};return new r(e)}ascBy(C){let E=this,e={*[Symbol.iterator](){let n=E.toArray();n.sort((y,F)=>C(y)-C(F));for(let y of n)yield y}};return new r(e)}descBy(C){let E=this,e={*[Symbol.iterator](){let n=E.toArray();n.sort((y,F)=>C(F)-C(y));for(let y of n)yield y}};return new r(e)}skip(C){let E=this,e={*[Symbol.iterator](){let n=1;for(let y of E)n++<=C||(yield y)}};return new r(e)}take(C){let E=this,e={*[Symbol.iterator](){let n=1;for(let y of E){if(n++>C)break;yield y}}};return new r(e)}except(C,E=NA){let e=this,n=C,y={*[Symbol.iterator](){let F=e.filter(c=>!n.some(l=>E(c,l)));for(let c of F)yield c}};return new r(y)}union(C,E=NA){let e=this,n=C,y={*[Symbol.iterator](){let F=n.except(e,E);for(let c of e)yield c;for(let c of F)yield c}};return new r(y)}intersect(C,E=NA){let e=this,n=C,y={*[Symbol.iterator](){for(let F of e)for(let c of n)E(F,c)&&(yield F)}};return new r(y)}toArray(){return tA(this._items)?this._items.slice():[...this._items]}toDict(C,E){return this.reduce((e,n)=>{let y=C(n);return y in e?E?.(e,n):e[y]=n,e},{})}toMap(C,E){return this.reduce((e,n)=>{let y=C(n);return e.has(y)?E?.(e,n):e.set(y,n),e},new Map)}};var Ki=(r,C,E)=>Math.min(Math.max(r,C),E);var YQ=(r,C,E)=>{if(C<=0)return r;let e=Math.pow(10,C);return Number.MAX_VALUE/e<r?void 0:(E===\"floor\"?Math.floor:E===\"ceil\"?Math.ceil:E===\"round\"?Math.round:Math.floor)(r*e)/e},HQ=(r,C,E)=>{if(C<=0)return r;let e=r.toFixed(C+1),n=parseFloat(e.slice(0,-1)),y=parseInt(e.slice(-1)),F=Math.pow(10,-C);return E===\"ceil\"?n+(y>0?F:0):E===\"round\"?n+(y>=5?F:0):n},mi=(r,C,E=\"floor\")=>C?YQ(r,C,E)??HQ(r,C,E):r;var og=class{constructor(C,E,e=!0,n){this.message=C,this.code=E,this.show=e,this.innerException=n}};var Wi=r=>r instanceof og;var _=class{constructor(C){this.errors=C??new Array}get isValid(){return this.errors.length===0}addError(C){return this.errors.push(C),this}concat(C){return C.isValid||(this.errors=this.errors.concat(C.errors)),this}};var EA=class{constructor(C){this._error=C}get error(){return this._error}set error(C){this._error=C}};var tg=class extends EA{constructor(C,E=!1,e){super(e),this._regExp=C,this._checkUndefined=E}get regExp(){return this._regExp}get checkUndefined(){return this._checkUndefined}validate(C){let E=new _;return this._checkUndefined&&C===void 0&&E.addError(this.error),C!==void 0&&(this._regExp.test(C)||E.addError(this.error)),E}};var sg=class extends tg{constructor(C=10,E=18,e){let n=`(?=.*\\\\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[~()\\`!@#$%^&*_\\\\-+=|{}[\\\\]:;'<>,.?]).{${C},${E}}`;e??=`${C}-${E}位字符,必须同时包含四项(大写字母,小写字母,数字,()\\`!@#$%^&*_-+=|{}[]:;'<>,.?中的特殊字符)`,super(new RegExp(n),!0,e),this._minLength=C,this._maxLength=E}get minLength(){return this._minLength}get maxLength(){return this._maxLength}};var KQ=/[()`!@#$%^&*_\\-+=|{}[\\]:;'<>,.?]/,pQ=/[A-Z]/,mQ=/[a-z]/,TQ=/\\d/,Qe=r=>KQ.test(r),Ee=r=>pQ.test(r),ie=r=>mQ.test(r),ee=r=>TQ.test(r),re=(r,C)=>r.length>=C,oe=(r,C)=>r.length<=C,te=(r,C,E)=>r.length>=C&&r.length<=E,se=(r,C=10,E=18,e)=>{let n=new _;e??=[new sg(C,E)];for(let y of e)n.concat(y.validate(r));return n};var jI=class extends EA{constructor(C,E){super(),this._action=C,this._message=E}validate(C){let E=new _;return this._action(C)||E.addError(this._message),E}};var WI=class extends EA{constructor(C){super(C??\"不允许为空\")}validate(C){let E=new _;return C===void 0&&E.addError(this.error),C===null&&E.addError(this.error),C===\"\"&&E.addError(this.error),tA(C)&&bI(C)&&E.addError(this.error),E}};var VI=class extends EA{constructor(C,E,e){super(e),this._min=C,this._max=E}get min(){return this._min}get max(){return this._max}validate(C){let E=new _;return this._min&&(!C||C<this._min)&&E.addError(this.error??`数值不允许小于${this._min}`),this._max&&(!C||C>this._max)&&E.addError(this.error??`数值允许大于${this._max}`),E}};var PI=class extends EA{constructor(C,E,e=!1,n){super(n),this._maxLength=C,this._minLength=E,this._checkNullOrEmpty=e}get minLength(){return this._minLength}get maxLength(){return this._maxLength}get checkNullOrEmpty(){return this._checkNullOrEmpty}validate(C){let E=new _;return this._minLength&&(!C||C.length<this._minLength)&&E.addError(this.error??`字符长度不允许小于${this._minLength}`),this._maxLength&&(!C||C.length>this._maxLength)&&E.addError(this.error??`字符长度不允许大于${this._maxLength}`),this._checkNullOrEmpty&&(!C||C.trim().length===0)&&E.addError(this.error??\"字符不允许为全空白字符\"),E}};var XI=class extends EA{constructor(C,E=!0,e){super(e),this._validatorDict=C,this._skipOnFirstError=E}get validatorDict(){return this._validatorDict}get skipOnFirstError(){return this._skipOnFirstError}validate(C){let E=new _;for(let e in this._validatorDict)if(Object.prototype.hasOwnProperty.call(this._validatorDict,e)){let n=this._validatorDict[e];if(n=tA(n)?n:[n],E.concat(this.validateProperty(C,e,n)),!E.isValid&&this._skipOnFirstError)break}return E}validateProperty(C,E,e){let n=new _,y=C[E];for(let F of e)if(n.concat(F.validate(y)),!n.isValid&&this._skipOnFirstError)break;return n}};var qe=r=>{let C=r.lastIndexOf(\".\");return r.slice(C)},je=(r,C)=>{let E=r.lastIndexOf(\"/\"),e=r.slice(E+1);return C&&e.endsWith(C)?e.slice(0,-C.length):e};var Ve=1024,Pe=1048576,Xe=1073741824,Oe=(r,C=2)=>{let E=0,e=\"Byte\";return r<1048576?(E=r/1024,e=\"KB\"):r<1073741824?(E=r/1048576,e=\"MB\"):(E=r/1073741824,e=\"GB\"),E.toFixed(C)+e};var IA=(r,C)=>r<<C|r>>32-C,bA=r=>(r^=r>>16,r*=2246822507,r^=r>>13,r*=3266489909,r^=r>>16,r),gr=(r,C)=>BigInt(r)<<BigInt(C)|BigInt(r)>>BigInt(64)-BigInt(C),Ir=r=>{let C=BigInt(r);return C^=C>>BigInt(33),C*=BigInt(\"0xff51afd7ed558ccd\"),C^=C>>BigInt(33),C*=BigInt(\"0xc4ceb9fe1a85ec53\"),C^=C>>BigInt(33),C},Br=(r,C=96)=>{let E=bg(r)?new TextEncoder().encode(r):vg(r)?new Uint8Array(r):r,e=E.length,n=e>>2,y=new Uint32Array(E.buffer.slice(0,n<<2)),F=E.slice(n<<2),c=C,l=3432918353,L=461845907;for(let Y=0;Y<y.length;Y++){let P=y[Y];P*=l,P=IA(P,15),P*=L,c^=P,c=IA(c,13),c=c*5+3864292196}let N=0;switch(e&3){case 3:N^=F[2]<<16;case 2:N^=F[1]<<8;case 1:N^=F[0],N*=l,N=IA(N,15),N*=L,c^=N}return c^=e,bA(c)},Cr=(r,C=96)=>{let E=bg(r)?new TextEncoder().encode(r):vg(r)?new Uint8Array(r):r,e=E.length,n=e>>4,y=new Uint32Array(E.buffer.slice(0,n<<4)),F=E.slice(n<<4),c=C,l=C,L=C,N=C,Y=597399067,P=2869860233,iA=951274213,X=2716044179;for(let eA=0;eA<n;eA++){let CA=y[eA*4+0],AA=y[eA*4+1],rA=y[eA*4+2],sA=y[eA*4+3];CA*=Y,CA=IA(CA,15),CA*=P,c^=CA,c=IA(c,19),c+=l,c=c*5+1444728091,AA*=P,AA=IA(AA,16),AA*=iA,l^=AA,l=IA(l,17),l+=L,l=l*5+197830471,rA*=iA,rA=IA(rA,17),rA*=X,L^=rA,L=IA(L,15),L+=N,L=L*5+2530024501,sA*=X,sA=IA(sA,18),sA*=Y,N^=sA,N=IA(N,13),N+=c,N=N*5+850148119}let q=0,$=0,z=0,BA=0;switch(e&15){case 15:BA^=F[14]<<16;case 14:BA^=F[13]<<8;case 13:BA^=F[12]<<0,BA*=X,BA=IA(BA,18),BA*=Y,N^=BA;case 12:z^=F[11]<<24;case 11:z^=F[10]<<16;case 10:z^=F[9]<<8;case 9:z^=F[8]<<0,z*=iA,z=IA(z,17),z*=X,L^=z;case 8:$^=F[7]<<24;case 7:$^=F[6]<<16;case 6:$^=F[5]<<8;case 5:$^=F[4]<<0,$*=P,$=IA($,16),$*=iA,l^=$;case 4:q^=F[3]<<24;case 3:q^=F[2]<<16;case 2:q^=F[1]<<8;case 1:q^=F[0]<<0,q*=Y,q=IA(q,15),q*=P,c^=q}return c^=e,l^=e,L^=e,N^=e,c+=l,c+=L,c+=N,l+=c,L+=c,N+=c,c=bA(c),l=bA(l),L=bA(L),N=bA(N),c+=l,c+=L,c+=N,l+=c,L+=c,N+=c,[c,l,L,N]};var $I=NQ(_I()),zI=class{static get instancePromise(){return(0,$I.default)()}static async hash32Async(C,E=96){return(await this.instancePromise).Murmur3.hash32(C,E)}static async hash128Async(C,E=96){let e=(await this.instancePromise).Murmur3.hash128(C,E),n=[e.get(0),e.get(1),e.get(2),e.get(3)];return e.delete(),n}};var jg=(r,C=\"px\")=>`${r}${C}`,xQ=TA(()=>parseFloat(getComputedStyle(document.body).fontSize)),Nr=(r,C=xQ.value)=>r/C;var AB=()=>{let{body:r}=document,C=document.documentElement,E;try{E=(window.top||window.self||window).document.body}catch{}let e=Math.max(r.scrollWidth,r.offsetWidth,C.clientWidth,C.scrollWidth,C.offsetWidth,E?.scrollWidth??0,E?.clientWidth??0),n=Math.max(r.scrollHeight,r.offsetHeight,C.clientHeight,C.scrollHeight,C.offsetHeight,E?.scrollHeight??0,E?.clientHeight??0);return{width:e,height:n}},Wg=()=>{let{width:r,height:C}=AB();return{width:Math.min(r,window.innerWidth),height:Math.min(C,window.innerHeight)}},Jr=TA(AB),Sr=TA(Wg),bQ=(r,C)=>{let E=new Array,e=null,n=r;for(;e=n.parentElement;)C(e)&&E.push(e),n=e;return E},Ur=r=>bQ(r,C=>C.scrollHeight>C.offsetHeight||C.scrollWidth>C.offsetWidth),gB=(r,C)=>{let E=null,e=r;for(;(E=e.parentElement)&&!C(E);)e=E;return E===null?void 0:E},Yr=r=>gB(r,E=>getComputedStyle(E).position===\"relative\")??document.body,Hr=r=>gB(r,E=>E.scrollWidth>E.offsetWidth||E.scrollHeight>E.offsetHeight)??document.body;var xr=(r,C)=>{let E=r.getBoundingClientRect();return{left:E.left,right:E.right,top:E.top,bottom:E.bottom,scrollLeft:E.left-C.left,scrollRight:E.right-C.left,scrollTop:E.top-C.top,scrollBottom:E.bottom-C.top,width:r.offsetWidth??r.clientWidth,height:r.offsetHeight??r.clientHeight}},br=r=>{let C=\"0\";[\"top\",\"bottom\"].includes(r)?C=\"50%\":[\"left\",\"lt\",\"lb\",\"tr\",\"br\"].includes(r)&&(C=\"100%\");let E=\"0\";return[\"left\",\"right\"].includes(r)?E=\"50%\":[\"top\",\"tl\",\"tr\",\"lt\",\"rt\"].includes(r)&&(E=\"100%\"),`${C} ${E}`},vQ=r=>{switch(r){case\"top\":case\"tl\":case\"tr\":return\"top\";case\"bottom\":case\"bl\":case\"br\":return\"bottom\";case\"left\":case\"lt\":case\"lb\":return\"left\";case\"right\":case\"rt\":case\"rb\":return\"right\";default:return\"top\"}},ng=(r,C)=>{switch(C){case\"top\":switch(r){case\"bottom\":return\"top\";case\"bl\":return\"tl\";case\"br\":return\"tr\";default:return r}case\"bottom\":switch(r){case\"top\":return\"bottom\";case\"tl\":return\"bl\";case\"tr\":return\"br\";default:return r}case\"left\":switch(r){case\"right\":return\"left\";case\"rt\":return\"lt\";case\"rb\":return\"lb\";default:return r}case\"right\":switch(r){case\"left\":return\"right\";case\"lt\":return\"rt\";case\"lb\":return\"rb\";default:return r}default:return r}},vA=(r,C,E,e=0,n=[0,0])=>{let y=0,F=0,[c,l]=(tA(n)?n:n[r])??[0,0],L=Math.round((E.width-C.width)/2),N=Math.round((E.height-C.height)/2);switch(r){case\"top\":y=E.scrollLeft+L+c,F=E.scrollTop-C.height-e+l;break;case\"tl\":y=E.scrollLeft+c,F=E.scrollTop-C.height-e+l;break;case\"tr\":y=E.scrollRight-C.width+c,F=E.scrollTop-C.height-e+l;break;case\"bottom\":y=E.scrollLeft+L+c,F=E.scrollBottom+e+l;break;case\"bl\":y=E.scrollLeft+c,F=E.scrollBottom+e+l;break;case\"br\":y=E.scrollRight-C.width+c,F=E.scrollBottom+e+l;break;case\"left\":y=E.scrollLeft-C.width-e+c,F=E.scrollTop+N+l;break;case\"lt\":y=E.scrollLeft-C.width-e+c,F=E.scrollTop+l;break;case\"lb\":y=E.scrollLeft-C.width-e+c,F=E.scrollBottom-C.height+l;break;case\"right\":y=E.scrollRight+e+c,F=E.scrollTop+N+l;break;case\"rt\":y=E.scrollRight+e+c,F=E.scrollTop+l;break;case\"rb\":y=E.scrollRight+e+c,F=E.scrollBottom-C.height+l;break;default:y=0,F=0}return{left:y,top:F}},qQ=(r,C,E,e,n,y,F)=>{let c=vQ(r),l=Wg(),L={top:n.top+C.top,bottom:l.height-(n.top+C.top+E.height),left:n.left+C.left,right:l.width-(n.left+C.left+E.width)},N=r;if(c===\"top\"&&L.top<0)if(e.top>E.height)C.top=-n.top;else{let Y=vA(\"bottom\",E,e,y,F);l.height-(n.top+Y.top+E.height)>0&&(N=ng(r,\"bottom\"),C.top=Y.top)}if(c===\"bottom\"&&L.bottom<0)if(l.height-e.bottom>E.height)C.top=-n.top+(l.height-E.height);else{let Y=vA(\"top\",E,e,y,F);n.top+Y.top>0&&(N=ng(r,\"top\"),C.top=Y.top)}if(c===\"left\"&&L.left<0)if(e.left>E.width)C.left=-n.left;else{let Y=vA(\"right\",E,e,y,F);l.width-(n.left+Y.left+E.width)>0&&(N=ng(r,\"right\"),C.left=Y.left)}if(c===\"right\"&&L.right<0)if(l.width-e.right>E.width)C.left=-n.left+(l.width-E.width);else{let Y=vA(\"left\",E,e,y,F);n.left+Y.left>0&&(N=ng(r,\"left\"),C.left=Y.left)}return(c===\"top\"||c===\"bottom\")&&(L.left<0?C.left=-n.left:L.right<0&&(C.left=-n.left+(l.width-E.width))),(c===\"left\"||c===\"right\")&&(L.top<0?C.top=-n.top:L.bottom<0&&(C.top=-n.top+(l.height-E.height))),{side:N,relativePosition:C}},vr=(r,C,E,e=0,n=[0,0],y=!1,F)=>{let c=r,l=vA(r,C,E,e,n);if(y&&F){let N=qQ(r,l,E,C,F,e,n);c=N.side,l=N.relativePosition}return{style:{left:jg(l.left),top:jg(l.top)},side:c}};var IB=class r{static keys(){return this.members().map(C=>C.key)}static values(){return this.members().map(C=>C.value)}static members(){return Object.values(this).filter(C=>C instanceof r)}static getKey(C){return this.members().find(E=>E.value===C)?.key}constructor(C,E){this.key=C,this.value=E}equal(C){return this.value===C.value}};export{NA as DEFAULT_EQUALITY,jI as DelegateValidator,IB as EnumClass,qI as Enumerable,og as Exception,XI as FormValidator,Xe as GB,YI as Guid,mg as HOUR,Ve as KB,rg as KeyValuePair,vI as LinkedList,MA as LinkedListNode,Pe as MB,Jr as MEM_DOCUMENT_SIZE,Sr as MEM_VIEWPORT_SIZE,JQ as MILLISECOND,ig as MINUTE,Kg as Memorize,zI as Murmur3,VI as NumberValidator,pg as ObjectDescriptor,HI as ObjectPool,sg as PasswordValidator,mQ as REG_LOWER_LETTER,TQ as REG_NUMBER,KQ as REG_SPACIAL_CHARS,pQ as REG_UPPER_LETTER,tg as RegExpValidator,WI as RequireValidator,xg as SECOND,mI as StringEx,PI as StringValidator,Tg as TIME_UNIT_MAP,TI as Tree,_ as ValidateResult,EA as Validator,je as basename,xQ as bodyFontSizeMem,QE as camelize,ng as changeSide,Ki as clamp,MQ as createBEM,_Q as createRoot,xI as debounce,qe as ext,Yr as findClosestOffsetParent,gB as findClosestParent,Hr as findClosestScrollableParent,bQ as findParents,Ur as findScrollableParents,qQ as fitWithin,bA as fmix32,Ir as fmix64,wE as formatTime,VE as fromBase64,OE as fromHex,zE as fromUtf8,AB as getDocumentSize,Oe as getFileSize,vA as getRelativePosition,vr as getRelativeStyle,xr as getScrollableRect,vQ as getSide,br as getTransformOrigin,gA as getType,Wg as getViewportSize,li as groupBy,te as hasLength,ie as hasLowerLetter,oe as hasMaxLength,re as hasMinLength,ee as hasNumber,Qe as hasSpecialChar,Ee as hasUpperLetter,tA as isArray,vg as isArrayBuffer,ME as isBlob,lE as isBoolean,LE as isDate,bI as isEmptyArray,Wi as isException,eg as isFunction,FE as isNull,dE as isNumber,RE as isObject,GE as isPromise,kE as isRegExp,bg as isString,NE as isSymbol,uE as isUint8Array,fE as isUndefined,se as isValidPassword,BE as kebablize,TA as mem,Br as murmurHash3,Cr as murmurHash3Ex,HE as omit,RA as pad,iE as padLeft,eE as padRight,yE as parseTime,CE as pascalize,Nr as pxToRem,IA as rotl32,gr as rotl64,oi as throttle,yi as toArray,WE as toBase64,fi as toDict,hi as toDictKV,mi as toFixedEx,HQ as toFixedSafe,YQ as toFixedUnSafe,XE as toHex,Fi as toMap,ci as toMapKV,_E as toUtf8,di as toggleElement,jg as withUnit};\n","import type { AppContext, CSSProperties, Component } from 'vue';\nimport type { ModalConfig as _ModalConfig, ModalReturn } from '@arco-design/web-vue';\nimport type { RenderContent } from '@arco-design/web-vue/es/_utils/types';\n\nimport { h } from 'vue';\nimport { Modal } from '@arco-design/web-vue';\nimport {\n IconInfoCircleFill,\n IconExclamationCircleFill,\n IconCheckCircleFill,\n IconCloseCircleFill,\n} from '@arco-design/web-vue/es/icon';\nimport { isString, omit } from '@om-design/util';\n\nexport interface ModalConfig extends _ModalConfig {\n hideHeaderBorder?: boolean;\n style?: CSSProperties;\n}\nexport interface ModalMethod {\n /**\n * @zh 打开对话框\n * @en Open modal\n */\n open: (config: ModalConfig, appContext?: AppContext) => ModalReturn;\n /**\n * @zh 打开对话框(简单模式)\n * @en Open modal (simple mode)\n */\n confirm: (config: ModalConfig, appContext?: AppContext) => ModalReturn;\n /**\n * @zh 打开信息对话框\n * @en Open info modal\n */\n info: (config: ModalConfig, appContext?: AppContext) => ModalReturn;\n /**\n * @zh 打开成功对话框\n * @en Open success modal\n */\n success: (config: ModalConfig, appContext?: AppContext) => ModalReturn;\n /**\n * @zh 打开警告对话框\n * @en Open warning modal\n */\n warning: (config: ModalConfig, appContext?: AppContext) => ModalReturn;\n /**\n * @zh 打开错误对话框\n * @en Open error modal\n */\n error: (config: ModalConfig, appContext?: AppContext) => ModalReturn;\n /**\n * @zh 打开对话框(同步模式)\n * @en Open modal (sync mode)\n */\n syncConfirm: (config: ModalConfig, appContext?: AppContext) => Promise<boolean>;\n}\ntype ModalMethodKey = keyof ModalMethod;\n\nconst MODAL_METHOD_ENUM: ModalMethodKey[] = [\n 'open',\n 'confirm',\n 'info',\n 'success',\n 'warning',\n 'error',\n 'syncConfirm',\n];\nconst MODAL_METHOD_ICON_ENUM: Record<ModalMethodKey, [Component, string]> = {\n open: [IconInfoCircleFill, '--primary-6'],\n info: [IconInfoCircleFill, '--primary-6'],\n success: [IconCheckCircleFill, '--success-6'],\n confirm: [IconExclamationCircleFill, '--warning-6'],\n warning: [IconExclamationCircleFill, '--warning-6'],\n error: [IconCloseCircleFill, '--danger-6'],\n syncConfirm: [IconExclamationCircleFill, '--warning-6'],\n};\n\nexport default () => {\n // 默认标题渲染内容\n const defaultTitleRenderContentFactory = (\n method: ModalMethodKey,\n config: ModalConfig\n ): RenderContent => {\n const [IconComponent, color] = MODAL_METHOD_ICON_ENUM[method];\n const { title } = config;\n\n return () => {\n return [\n h('span', { class: 'shim-icon' }),\n h(IconComponent, {\n class: 'normal-icon',\n style: { color: `rgba(var(${color}))` },\n }),\n h('span', { class: 'normal-title method-render' }, title),\n ];\n };\n };\n // 默认内容渲染内容\n const defaultContentRenderContentFactory = (\n _method: ModalMethodKey,\n config: ModalConfig\n ): RenderContent => {\n return () => {\n return h(\n 'div',\n {\n style: { padding: '0 0 4px' },\n },\n config.content\n );\n };\n };\n\n /**\n * 原生`modal`包装逻辑\n * @param method `Modal` 静态方法:`open`、`info`、`success`、`warning`、`error`、`confirm`、`syncConfirm`\n * @param modalProps `Modal` 配置项\n * @param appContext `Modal` 上下文信息,当内部调用`i18n`、`route`等时必须提供\n */\n const customModal = <R = ModalReturn>(\n method: ModalMethodKey,\n modalProps: ModalConfig,\n appContext?: AppContext\n ): R => {\n const { title, content, modalClass } = modalProps;\n const titleRenderContent: RenderContent | undefined = isString(title)\n ? defaultTitleRenderContentFactory(method, modalProps)\n : title;\n const contentRenderContent: RenderContent | undefined = isString(content)\n ? defaultContentRenderContentFactory(method, modalProps)\n : content;\n const customModalClass = [\n 'common-modal',\n ['info', 'success', 'warning', 'error', 'confirm', 'syncConfirm'].includes(method) &&\n `common-modal__${method}`,\n modalProps.hideHeaderBorder !== false && 'hide-header-border',\n ];\n const config = {\n simple: false,\n titleAlign: 'start' as 'start' | 'center',\n closable: false,\n maskClosable: false,\n draggable: true,\n ...omit(modalProps, ['title', 'content', 'modalClass']),\n\n title: titleRenderContent,\n content: contentRenderContent,\n class: customModalClass,\n modalClass: isString(modalClass) || Array.isArray(modalClass) ? modalClass : '',\n };\n\n if (method === 'syncConfirm') {\n return new Promise<boolean>((resolve) => {\n Modal.confirm(\n {\n ...config,\n onOk: () => resolve(true),\n onCancel: () => resolve(false),\n },\n appContext\n );\n }) as R;\n }\n\n return Modal[method](config, appContext) as R;\n };\n const ModalWrapper = MODAL_METHOD_ENUM.reduce((wrapper, method) => {\n wrapper[method] = (config, appContext) => customModal(method, config, appContext);\n\n return wrapper;\n }, {} as ModalMethod);\n\n return { Modal: ModalWrapper };\n};\n","import type { PropType, RendererElement, RendererNode, VNode } from 'vue';\n\nimport { defineComponent, nextTick, ref, watch } from 'vue';\nimport { IconInfoCircleFill } from '@arco-design/web-vue/es/icon';\nimport { JSX } from 'vue/jsx-runtime';\n\nexport type FooterAlign = 'left' | 'center' | 'right';\n\nexport default defineComponent({\n name: 'CommonModal',\n props: {\n footerAlign: {\n type: String as PropType<FooterAlign>,\n default: 'right',\n },\n hideHeaderBorder: { type: Boolean },\n hideFooterBorder: { type: Boolean },\n renderIcon: {\n type: Boolean,\n default: false,\n },\n },\n setup(props, { slots, attrs }) {\n const modalProps = {\n titleAlign: 'start',\n closable: false,\n draggable: true,\n maskClosable: false,\n };\n // 打开弹框后滚动到顶部\n const cModalID = ref(`cmid-${Math.random().toString(32).substring(2, 10)}`);\n\n watch(\n () => attrs.visible,\n (visible) => {\n if (visible) {\n nextTick(() => {\n const mBodyContent = document.querySelector(`#${cModalID.value} .arco-modal-body`);\n if (mBodyContent) {\n mBodyContent.scrollTop = 0;\n }\n });\n }\n }\n );\n\n const titleIconSlot = slots.titleIcon || slots['title-icon'];\n const renderTitleIcon = () => {\n if (!props.renderIcon) return <></>;\n return (\n titleIconSlot?.() ?? (\n <>\n <span class=\"shim-icon\"></span>\n <IconInfoCircleFill class=\"normal-icon\" style=\"color: rgba(var(--primary-6))\" />\n </>\n )\n );\n };\n const modalSlots = {\n ...slots,\n title: () => {\n return (\n <>\n {renderTitleIcon()}\n <span style={{ marginLeft: props.renderIcon ? '30px' : '0' }} class=\"normal-title\">\n {slots.title?.() ?? attrs.title}\n </span>\n <span class=\"extra-opt\">{slots.extra?.()}</span>\n </>\n );\n },\n };\n return () => (\n <a-modal\n id={cModalID.value}\n class={[\n 'common-modal',\n `common-modal-footer__${props.footerAlign}`,\n props.hideHeaderBorder && 'hide-header-border',\n props.hideFooterBorder && 'hide-footer-border',\n ]}\n {...modalProps}\n >\n {{ ...modalSlots }}\n </a-modal>\n );\n },\n});\n","import type { App } from 'vue';\nimport type { ModalMethod } from './composables/useModalWrapper';\n\nimport useModalWrapper from './composables/useModalWrapper';\nimport CommonModal from './CommonModal';\nimport './CommonModal.less';\n\nconst { Modal: modal } = useModalWrapper();\n\nconst Modal = Object.assign(CommonModal, {\n ...modal,\n install: (app: App) => {\n app.component(CommonModal.name!, CommonModal);\n\n const modalWithContext = {} as ModalMethod;\n\n for (const key of Object.keys(modal) as (keyof ModalMethod)[]) {\n // @ts-ignore\n modalWithContext[key] = (config, appContext = app._context) => modal[key](config, appContext);\n }\n\n app.config.globalProperties.$modal = modalWithContext;\n },\n});\n\nexport type CommonModalInstance = InstanceType<typeof Modal>;\n\nexport default Modal;\n","import type { Ref, UnwrapRef } from 'vue';\n\nimport { reactive, toRefs } from 'vue';\n\nexport type SetStateAction<T> = (newValue: T) => void;\n\nexport type SetStateCallback<T, K = void> = (_newValue: T) => K;\n\nexport const useState = <T>(\n initialValue: T,\n callback?: SetStateCallback<T>,\n formatter?: SetStateCallback<T, T>\n): [Ref<UnwrapRef<T>>, SetStateAction<T>] => {\n const state = reactive({ value: initialValue });\n const { value } = toRefs(state);\n\n const setState: SetStateAction<T> = (newValue: T) => {\n state.value = (formatter?.(newValue) ?? newValue) as UnwrapRef<T>;\n callback?.(state.value as T);\n };\n\n return [value, setState];\n};\n","import { inject } from 'vue';\n\nimport { EditorInjectionKey } from '../../editor/context';\nimport {\n findAllParaInRange,\n findClosestPara,\n isHTMLElement,\n isNullable,\n setAttributesAndData,\n} from '../../../../utils';\nimport { useState } from '../../../hooks/use-state';\n\nexport const CLASS_RANGE_HIGHLIGHT = 'tag-range-highlight';\n\nexport const useRangeHighlight = () => {\n const editorCtx = inject(EditorInjectionKey);\n\n const [originRangeStart, setOriginRangeStart] = useState<{ index: number; offset: number }>({\n index: -1,\n offset: -1,\n });\n const [originRangeEnd, setOriginRangeEnd] = useState<{ index: number; offset: number }>({\n index: -1,\n offset: -1,\n });\n\n const highlightRange = () => {\n if (isNullable(editorCtx) || isNullable(editorCtx.editorCore.value)) return;\n\n const { cursor, content } = editorCtx.editorCore.value;\n const { range } = cursor;\n\n if (isNullable(range)) return;\n\n const { startContainer, endContainer, startOffset, endOffset } = range;\n const startPara = findClosestPara(range.startContainer as HTMLElement)!;\n const endPara = findClosestPara(range.endContainer as HTMLElement)!;\n const middleParas = findAllParaInRange(startPara, endPara);\n const allParas = content.getParas();\n const isSamePara = startPara === endPara;\n\n // 保存 range,方便还原\n setOriginRangeStart({\n index: allParas.indexOf(startPara),\n offset: isSamePara ? (startOffset > endOffset ? endOffset : startOffset) : startOffset,\n });\n setOriginRangeEnd({\n index: allParas.indexOf(endPara),\n offset: isSamePara ? (endOffset > startOffset ? endOffset : startOffset) : endOffset,\n });\n\n const createRangeHighlightTag = (text: string) => {\n const spanElm = document.createElement('span');\n\n setAttributesAndData(\n spanElm,\n {\n class: CLASS_RANGE_HIGHLIGHT,\n style: `background: #3367d1;color: #fff;line-height: 34px;padding: 8px 0 8.5px 0;`,\n },\n {\n raw: text,\n },\n text\n );\n\n return spanElm;\n };\n const surroundContents = (\n startNode: Node,\n startOffset: number,\n endNode: Node,\n endOffset: number\n ) => {\n if (isHTMLElement(startNode) && startNode.tagName === 'P') {\n range.setStart(startNode.firstChild!, 0);\n range.setEnd(startNode, startNode.childNodes.length);\n } else {\n range.setStart(startNode, startOffset);\n range.setEnd(endNode, endOffset);\n }\n\n const selection = window.getSelection()!;\n selection.removeAllRanges();\n selection.addRange(range);\n const tempDiv = document.createElement('div');\n tempDiv.appendChild(range.cloneContents());\n const tag = createRangeHighlightTag(tempDiv.innerHTML);\n editorCtx.editorCore.value?.content.update(tag);\n };\n\n // 同一个 P 节点\n if (startPara === endPara) {\n const isStartPara = isHTMLElement(startContainer) && startContainer.tagName === 'P';\n\n surroundContents(\n isStartPara ? startContainer.firstChild! : startContainer,\n isStartPara ? 0 : startOffset,\n endContainer,\n endOffset\n );\n\n return;\n }\n\n // 开始节点\n surroundContents(startContainer, startOffset, startPara, startPara.childNodes.length);\n // 中间节点\n middleParas.forEach((para) => surroundContents(para, 0, para, para.childNodes.length));\n // 结束节点\n surroundContents(endPara.firstChild!, 0, endContainer, endOffset);\n };\n\n const unhighlightRange = () => {\n const removeTarget = Array.from(\n document.body.querySelectorAll(`.${CLASS_RANGE_HIGHLIGHT}`)\n ) as HTMLSpanElement[];\n\n removeTarget.forEach((item) => item.replaceWith(item.textContent ?? ''));\n editorCtx?.editorCore.value?._editorElement.normalize();\n };\n\n const revertRange = () => {\n if (isNullable(editorCtx) || isNullable(editorCtx.editorCore.value)) return;\n\n unhighlightRange();\n\n const { content } = editorCtx.editorCore.value;\n const allParas = content.getParas();\n const newRange = document.createRange();\n\n newRange.setStart(\n allParas[originRangeStart.value.index].firstChild!,\n originRangeStart.value.offset ?? 0\n );\n newRange.setEnd(\n allParas[originRangeEnd.value.index].firstChild!,\n originRangeEnd.value.offset ?? 0\n );\n getSelection()?.removeAllRanges();\n getSelection()?.addRange(newRange);\n // @ts-ignore\n editorCtx.editorCore.value.cursor._recordRange();\n };\n\n return {\n highlightRange,\n unhighlightRange,\n revertRange,\n };\n};\n","import { Ref, onBeforeUnmount, onMounted, ref } from 'vue';\nimport { EditorCore, PARAGRAPH_CLS } from '../../foundation/editorManager/editor';\n\nimport { PausationTagPlugin } from '../../plugins/PausationTagPlugin';\nimport {\n IAnchor,\n ICommandExecutor,\n IContentManager,\n ICursorManager,\n IUndoManager,\n PluginFlag,\n} from '../../typings';\nimport { PronunciationTagPlugin } from '../../plugins/PronunciationTagPlugin';\nimport { AnchorTagPlugin } from '../../plugins/AnchorTagPlugin';\nimport { HomophonesTagPlugin } from '../../plugins/HomophonesTagPlugin';\nimport { HomophoneEntity } from '../../typings/actions/i-homophone';\nimport {\n findParent,\n getAnchorTagsByUidAndId,\n isHTMLElement,\n isNullable,\n isText,\n} from '../../utils';\nimport { AnchorBg } from '../../plugins/AnchorTagPlugin/constant';\nimport { EditorComponentProps } from '../../typings/intersection/editor';\nimport { useHighlight } from './use-highlight';\nimport Modal from '../components/CommonModal';\nimport {\n AUDIT_HIGHLIGHT_CLS,\n ContentOptions,\n defaultContentOptions,\n} from '../components/editor/context';\nimport { CLASS_RANGE_HIGHLIGHT } from '../components/modals/Refine/use-range-highlight';\nimport { handlePaste } from '../../foundation/editorManager/paste';\nimport { calcPasteTextLength } from '../../foundation/editorManager/maxLength';\nimport { Message } from '@arco-design/web-vue';\n\nexport interface PluginMap {\n [PluginFlag.pausation]: PausationTagPlugin;\n [PluginFlag.pronunciation]: PronunciationTagPlugin;\n [PluginFlag.homophones]: HomophonesTagPlugin;\n [PluginFlag.anchor]: AnchorTagPlugin;\n}\n\nexport interface EditorAction {\n base: {\n content: IContentManager;\n cursor: ICursorManager;\n undo: IUndoManager;\n command: ICommandExecutor;\n };\n plugin: PluginMap;\n}\n\nexport interface AnchorData {\n background: string;\n data: IAnchor;\n id: number;\n}\nexport type AnchorMap = Record<string, AnchorData[]>;\n\nexport const useEditor = (\n editor: Ref<HTMLDivElement | undefined>,\n props: EditorComponentProps,\n emit: ((event: 'change', contentLength: number) => void) &\n ((event: 'update:textCount', value: number) => void) &\n ((event: 'anchorListen', value: IAnchor, text: string) => void) &\n ((event: 'anchorRemove', value: IAnchor) => void) &\n ((event: 'clear') => void)\n) => {\n const editorCore = ref<EditorCore>();\n const editorAction = ref<EditorAction>();\n const count = ref<number>(0);\n const hasPausationTag = ref<boolean>(false);\n let observer: MutationObserver | null;\n\n const { renderHighlight, unrenderHighlight } = useHighlight(editorCore, props);\n\n const init = () => {\n editorCore.value = new EditorCore(editor.value!, {\n plugins: !props.simple\n ? [\n PausationTagPlugin<{ delay: number }>,\n PronunciationTagPlugin<{ text: string }>,\n AnchorTagPlugin<{ anchor: IAnchor }, AnchorMap>,\n HomophonesTagPlugin<HomophoneEntity[]>,\n ]\n : [],\n maxLength: props.maxLength,\n onChange: (length: number) => {\n count.value = length;\n hasPausationTag.value = !!editorCore.value?.element.querySelector(\n `span[data-type=${PluginFlag.pausation}]`\n );\n\n emit('update:textCount', length);\n emit('change', length);\n },\n onUndoChange: (anchorContent) => {\n if (isNullable(editorAction.value!.plugin[PluginFlag.anchor]?.data)) return;\n\n editorAction.value!.plugin[PluginFlag.anchor].data = JSON.parse(anchorContent) as any;\n },\n });\n editorAction.value = {\n base: {\n content: editorCore.value!.content,\n cursor: editorCore.value!.cursor,\n undo: editorCore.value!.undo,\n command: editorCore.value!.command,\n },\n plugin: {\n [PluginFlag.pausation]: (editorCore.value!.plugin as PluginMap).pausation,\n [PluginFlag.pronunciation]: (editorCore.value!.plugin as PluginMap).pronunciation,\n [PluginFlag.homophones]: (editorCore.value!.plugin as PluginMap).homophones,\n [PluginFlag.anchor]: (editorCore.value!.plugin as PluginMap).anchor,\n },\n };\n\n observer = new MutationObserver(([mutation]) => {\n Object.keys(editorAction.value?.plugin[PluginFlag.anchor]?.data ?? []).forEach((top) => {\n const records = (editorAction.value?.plugin[PluginFlag.anchor]?.data[top] ?? []) as any[];\n const [newRecords, deleteRecords] = records.reduce(\n (total, record) => {\n const anchorTags = Array.from(\n document.body.querySelectorAll(`span[data-frag-id=\"anchor_${record.id}\"]`)!\n ) as HTMLSpanElement[];\n\n total[anchorTags.length ? 0 : 1].push(record);\n\n return total;\n },\n [[], []] as any[][]\n );\n editorAction.value!.plugin[PluginFlag.anchor].data[top] = newRecords;\n deleteRecords.forEach((record: any) => emit('anchorRemove', record.data));\n });\n });\n observer.observe(editor.value!, {\n childList: true,\n subtree: true,\n characterData: true,\n });\n };\n const destroy = () => {\n // * 销毁组件实例绑定的事件\n editorCore.value?.destroy();\n editorCore.value = undefined;\n editorAction.value = undefined;\n observer?.disconnect();\n observer = null;\n };\n\n // * `EditorCore` 基础API\n const getContent = (_options?: ContentOptions) => {\n const options = { ...defaultContentOptions, ...(_options ?? {}) };\n\n // TODO 主播高亮样式目前属于动态移除样式,不需要手动移除\n // TODO 出现需求时再考虑移除逻辑,目前保持原内容输出\n if (!options.withAuditHighlight) {\n return getContentWithoutHighlight(options);\n }\n return editorCore.value!.content.getContent();\n };\n const setContent = async (content: string) => editorCore.value!.content.setContent(content);\n const appendContent = async (content: string | string[]) => {\n props.simple\n ? editorCore.value?.content.appendContent(content)\n : editorCore.value?.appendContent(content);\n };\n const getTextContent = () => editorCore.value?.content.getTextContent() ?? [];\n const insertContent = (content: string | Node) => editorCore.value!.content.insert(content);\n const deleteContent = () => editorCore.value!.content.delete();\n const updateContent = (content: string | Node) => editorCore.value!.content.update(content);\n const isCaret = () => editorCore.value!.cursor.isCaret();\n const isRange = () => editorCore.value!.cursor.isRange();\n\n // * `EditorCore` 复合API\n /**\n * 是否跨段划选内容\n * @returns boolean\n */\n const isSelectionInDifferentParas = () => {\n const range = editorAction.value?.base.cursor.range;\n\n if (isNullable(range)) return false;\n\n const [startPara] = findParent(range.startContainer as HTMLElement, (elm) => {\n return elm.tagName === 'P' && elm.classList.contains(PARAGRAPH_CLS);\n });\n const [endPara] = findParent(range.endContainer as HTMLElement, (elm) => {\n return elm.tagName === 'P' && elm.classList.contains(PARAGRAPH_CLS);\n });\n\n if (isNullable(startPara) || isNullable(endPara)) return false;\n\n if (startPara === endPara) return false;\n\n return true;\n };\n /**\n * 判断选区是否包含指定类型的标签\n * @param type 标签类型\n * @returns boolean\n */\n const isSelectionContainsTag = (type: PluginFlag) => {\n const range = editorAction.value?.base.cursor.range;\n const allParas = editorCore.value?.content.getParas();\n const allTags = allParas\n ?.map((para) => {\n return Array.from(para.querySelectorAll(`span[data-type=\"${type}\"]`));\n })\n .flat();\n\n if (isNullable(range) || isNullable(allParas) || isNullable(allTags)) return false;\n\n return allTags.some((tag) => range.intersectsNode(tag));\n };\n /**\n * 转译各类标签成特定的XML结构,方便微软TTS解析\n * @param node {HTMLElement | Text} 节点\n * @returns string\n */\n const convertToContent = (node: HTMLElement | Text) => {\n if (isText(node)) {\n return node.textContent?.replace(/</g, '<').replace(/>/g, '>') ?? '';\n }\n\n if (node.dataset.type === PluginFlag.pausation) {\n return `<break time=\"${Number(node.dataset.value) * 1000}\"/>`;\n }\n\n if (node.dataset.type === PluginFlag.pronunciation) {\n return node.dataset.value;\n }\n\n if (node.dataset.type === PluginFlag.highlight) {\n return node.dataset.raw;\n }\n\n if (node.dataset.type === PluginFlag.homophones) {\n return `<phoneme alphabet=\"py\" ph=\"${node.dataset.formattedValue}\">${node.dataset.raw}</phoneme>`;\n }\n\n return '';\n };\n /**\n * 获取主播划选的文本内容\n * @param anchor 主播对象\n * @param startFromCursor 是否从光标开始获取文本内容\n * @returns string\n */\n const getAnchorTtsMark = (anchor: IAnchor, startFromCursor?: boolean): string => {\n const allTags = getAnchorTagsByUidAndId(anchor);\n let partialTags: HTMLElement[] = [];\n\n if (!allTags.length) return '';\n\n const range = editorCore.value?.cursor.range;\n let sliceIndex = -1;\n if (startFromCursor && range?.collapse) {\n const [anchorTag] = findParent(range?.startContainer as HTMLElement, (elm) => {\n return isHTMLElement(elm) && elm.dataset.type === PluginFlag.anchor;\n });\n sliceIndex = allTags.findIndex((node) => node === anchorTag);\n partialTags = sliceIndex > -1 ? allTags.slice(sliceIndex) : allTags;\n }\n\n const text = partialTags\n .map((tag, index) => {\n let nodes: Array<Text | HTMLElement> = [];\n\n if (index === 0 && sliceIndex > -1) {\n // * 光标落在主播滑选文案区域内时,从光标处开始截取流式内容\n const newRange = document.createRange();\n newRange.setStart(range!.startContainer, range!.startOffset);\n newRange.setEnd(tag, tag.childNodes.length);\n nodes = Array.from(newRange.cloneContents().childNodes) as Array<Text | HTMLElement>;\n } else {\n nodes = Array.from(tag.childNodes) as Array<Text | HTMLElement>;\n }\n\n return nodes.map((node) => convertToContent(node)).join('');\n })\n .join('');\n\n return (\n text ||\n allTags\n .map((tag) => {\n return (Array.from(tag.childNodes) as Array<Text | HTMLElement>)\n .map((node) => convertToContent(node))\n .join('');\n })\n .join('')\n );\n };\n /**\n * 获取主播划选的情感和角色\n * @param anchor 主播对象\n * @returns string[]\n */\n const getAnchorTtsEmotionAndRole = (anchor: IAnchor): [string, string | undefined] => {\n const selector = anchor.uid\n ? `span[data-uid=\"${anchor.uid}\"]`\n : `span[data-id=\"anchor_${anchor.id}\"]`;\n const anchorTag = editor.value?.querySelector(selector) as HTMLElement;\n\n return [anchorTag.dataset.emotion!, anchorTag.dataset.role];\n };\n /**\n * 判断是否所有内容都已经滑选主播\n * @returns booean\n */\n const isAllMarkedByAnchor = (): boolean => {\n const allParas = (editorCore.value?.content.getParas() ?? []).filter((para) =>\n para.textContent?.trim()\n );\n const allNodes = allParas.map((para) => Array.from(para.childNodes)).flat();\n\n return allNodes.every((node) => {\n return (\n (isText(node) && ['', ' ', null].includes(node.textContent)) ||\n (isHTMLElement(node) && node.dataset.type === PluginFlag.anchor) ||\n (isHTMLElement(node) && node.tagName === 'BR')\n );\n });\n };\n /**\n * 外部注入主播数据\n * @param data 虚拟主播数据\n */\n const addExtraAnchors = (data: IAnchor[]) => {\n data.forEach((anchor) => {\n const record =\n editorAction.value?.plugin.anchor.data[anchor.top] ??\n (editorAction.value!.plugin.anchor.data[anchor.top] = []);\n\n record.push({ background: AnchorBg[(anchor.id! - 1) % 10], data: anchor, id: anchor.id });\n });\n };\n /**\n * 清空所有编辑器内容\n */\n const clearContent = () => {\n Modal.confirm({\n title: '请确认',\n content: '确定清空全部内容吗?',\n onOk: () => {\n setContent('');\n emit('clear');\n setTimeout(() => {\n const selection = window.getSelection();\n const range = selection?.rangeCount ? selection?.getRangeAt(0) : null;\n\n if (isNullable(selection)) return;\n\n if (\n range &&\n isHTMLElement(range.commonAncestorContainer) &&\n range.commonAncestorContainer.classList.contains(PARAGRAPH_CLS)\n )\n return;\n\n const newRange = document.createRange();\n const firstPara = editorCore.value?.content.getParas()?.[0];\n\n if (isNullable(firstPara)) return;\n\n newRange.selectNodeContents(firstPara);\n newRange.collapse(false);\n selection.removeAllRanges();\n selection.addRange(newRange);\n });\n },\n });\n };\n /**\n * 获取移除高亮样式的内容\n */\n const getContentWithoutHighlight = (options: ContentOptions) => {\n const content = editorCore.value!.content.getContent();\n const tmpDiv = document.createElement('div');\n\n tmpDiv.innerHTML = content;\n\n if (!options.withAuditHighlight) {\n const auditHighlightTags = Array.from(\n tmpDiv.querySelectorAll(`.${AUDIT_HIGHLIGHT_CLS}`)\n ) as HTMLElement[];\n\n auditHighlightTags.forEach((tag) => {\n /**\n * 1. 获取所有子标签\n * 2. 子标签替换标签本身\n */\n const fragment = document.createDocumentFragment();\n Array.from(tag.childNodes).forEach((node) => fragment.appendChild(node));\n tag.replaceWith(fragment);\n });\n }\n\n if (!options.withRefineHighlight) {\n const refineHighlightTags = Array.from(\n tmpDiv.querySelectorAll(`.${CLASS_RANGE_HIGHLIGHT}`)\n ) as HTMLElement[];\n refineHighlightTags.forEach((tag) => {\n tag.replaceWith(tag.textContent ?? '');\n });\n }\n\n return tmpDiv.innerHTML;\n };\n\n const insertContentAtCursor = (_content: string | string[]) => {\n const content = Array.isArray(_content) ? _content : [_content];\n\n if (!editorCore.value?.cursor.isRangeInEditor() || !isCaret()) {\n Message.warning('请选择要插入的位置!');\n return;\n }\n\n handlePaste(editorCore.value!, calcPasteTextLength(editorCore.value!, content));\n };\n\n onMounted(init);\n onBeforeUnmount(destroy);\n\n return {\n editorCore,\n editorAction,\n count,\n hasPausationTag,\n\n getContent,\n setContent,\n appendContent,\n getTextContent,\n insertContent,\n deleteContent,\n updateContent,\n isCaret,\n isRange,\n\n isSelectionInDifferentParas,\n isSelectionContainsTag,\n convertToContent,\n getAnchorTtsMark,\n getAnchorTtsEmotionAndRole,\n isAllMarkedByAnchor,\n addExtraAnchors,\n clearContent,\n insertContentAtCursor,\n\n renderHighlight,\n unrenderHighlight,\n };\n};\n","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAqgAAAKoCAYAAAC7uA1cAAAAAXNSR0IArs4c6QAAIABJREFUeF7snQd81OX9xz+3V/bekEUCYe8hIEOcrdrpqLUKalWsba2ttf79xzroVIsTnN3/SpcDEVmCTNlJCCskIQkJ2bmsS27+/f6e+yXHkQUZXI7vry8LJL/xPO/nubvPfacCfDABJsAEmAATYAJMgAkwAR8ioPChsfBQmAATYAJMgAkwASbABJgAWKDyJmACTIAJMAEmwASYABPwKQIsUH1qOXgwTIAJMAEmwASYABNgAixQeQ8wASbABJgAE2ACTIAJ+BQBFqg+tRw8GCbABJgAE2ACTIAJMAEWqLwHmAATYAJMgAkwASbABHyKAAtUn1oOHgwTYAJMgAkwASbABJgAC1TeA0yACTABJsAEmAATYAI+RYAFqk8tBw+GCTABJsAEmAATYAJMgAUq7wEmwASYABNgAkyACTABnyLAAtWnloMHwwSYABNgAkyACTABJsAClfcAE2ACTIAJMAEmwASYgE8RYIHqU8vBg2ECTIAJMAEmwASYABNggcp7gAkwASbABJgAE2ACTMCnCLBA9anl4MEwASbABJgAE2ACTIAJsEDlPcAEmAATYAJMgAkwASbgUwRYoPrUcvBgmAATYAJMgAkwASbABFig8h5gAkyACTABJsAEmAAT8CkCLFB9ajl4MEyACTABJsAEmAATYAIsUHkPMAEmwASYABNgAkyACfgUARaoPrUcPBgmwASYABNgAkyACTABFqi8B5gAE2ACTIAJMAEmwAR8igALVJ9aDh4ME2ACTIAJMAEmwASYAAtU3gNMgAkwASbABJgAE2ACPkWABapPLQcPhgkwASbABJgAE2ACTIAFKu8BJsAEmAATYAJMgAkwAZ8iwALVp5aDB8MEmAATYAJMgAkwASbAApX3ABNgAkyACTABJsAEmIBPEWCB6lPLwYNhAkyACTABJsAEmAATYIHKe4AJMAEmwASYABNgAkzApwiwQPWp5eDBMAEmwASYABNgAkyACbBA5T3ABJgAE2ACTIAJMAEm4FMEWKD61HLwYJgAE2ACTIAJMAEmwARYoPIeYAJMgAkwASbABJgAE/ApAixQfWo5eDBMgAkwASbABJgAE2ACLFB5DzABJsAEmAATYAJMgAn4FAEWqD61HDwYJsAEmAATYAJMgAkwARaovAeYABNgAkyACTABJsAEfIoAC1SfWg4eDBNgAkyACTABJsAEmAALVN4DTIAJMAEmwASYABNgAj5FgAWqTy0HD4YJMAEmwASYABNgAkyABSrvASbABJgAE2ACTIAJMAGfIsAC1aeWgwfDBJgAE2ACTIAJMAEmwAKV9wATYAJMgAkwASbABJiATxFggepTy8GDYQJMgAkwASbABJgAE2CBynuACTABJsAEmAATYAJMwKcIsED1qeXgwTABJsAEmAATYAJMgAmwQOU9wASYABNgAkyACTABJuBTBFig+tRy8GCYABNgAkyACTABJsAEWKDyHmACTIAJMAEmwASYABPwKQIsUH1qOXgwTIAJMAEmwASYABNgAixQeQ8wASbABJgAE2ACTIAJ+BQBFqg+tRw8GCbABJgAE2ACTIAJMAEWqLwHmAATYAJMgAkwASbABHyKAAtUn1oOHgwTYAJMgAkwASbABJgAC1TeA0yACTABJsAEmEAHgd+ud5nKTm5aYLepn9YGJWQZA8LVLqcTzY1VrcrWqjfjoiJfGakZXfitbykcjI0JDBYBFqiDRZbvywSYABNgAkxgGBF47z2Xal/ltutbnKongyMzJsdGRijiQ4BwE2B3AhVmoLDSica64hatvXZlYlTSi/d/LaZqGE2RhzqMCLBAHUaLxUNlAkyACTABJjAYBJ748+GM+uq6Z9SBiTemJSVrMuOUmDQCMGoBpwsgseACcKAY2FkA1De2wGo+WaRTt/4uI33223ctULQNxrj4npcvARaol+/a88yZABNgAkzgMiew6kOX8eCR9/9k1Sdcn5k6Rj8zzYC0KCDEbTV1kSp1HwoFoFEKkbrpGKBVu1BRVe6ymU8VZISkXP/wXYknL3OcPP0BJMACdQBh8q2YABNgAkyACQwHAi6XS/HYyo1fbVGFrAoIS4meOSoUY+MViA4CFErA4ex6FiRSHQ7g73uAQANgNAA5pyxorD5WEqzEtdnfn5w/HObPY/R9AixQfX+NeIRMgAkwASbABAaEAAnTpT/7IEAXbfrEGDlxVmJEiGLxOBXiggGtBnA6hSu/p0OlBLafAE5VA9dPBgrOAtuPWmEu27clWK+7Ifu+qa0DMli+yWVNgAXqZb38PHkmwASYABO4HAhkZ7uUhvAdMSWWpqf0YVnfi4xOUE9LUWBcAqBXCwK9CVOZEwmHklpg7WHghqmASQd8lg/kFTe49Jb8xc/cM2fz5cCU5zi4BFigDi5fvjsTYAJMgAkwgUtKgOJMjxdsvtemCvlpROzo2MwEA2amAaEmwDPGtK+DJOHQ1Ab8aQewcCwQEwpU1AGb8oCzRdvXvfTDudf19V58HhPojgALVN4bTIAJMAEmwAT8kAC583/2/IavNKkCsg0hqRNHJUUpZqYAKVFui2lfTaZdsLE5gDc/A2ZlAkkRIsv//S+AU4XHWlY+MDrAD3HylIaYAAvUIQbOj2MCTIAJMAEmMNgEfr5y25iattZ3EJA8ZUpGmmrqSCWSwoU7nmqa9vcggfr2VmBqGpAcDSgVFIcKHDrViN/eEczaor+A+XrpSw8fTIAJMAEmwASYgB8QWLXKpTlh2fSEWRH1s8T4FN2cTCNGRSsQHgA4XBfn0u8KiyRQtwFTU4VApSO/BNh53IFnv61mbeEHe+lST4E30aVeAX4+E2ACTIAJMIF+EqAkqBLtf2boApP+FRg6KnZyagCmJisQEQBQ1j1l53dU25er7tMzZRVA7v6ufi6Py/P3CsBmB94igZoGpLgF6rEyYUV99ttUjIoPJtA/AryJ+sePr2YCTIAJMAEmcMkIZG9xqRv2bh7frsCLgbHTrkiICFTMSgfS3G53aWDesaayEPUUpPIMvH/WzTmSQP1cWFA9BeqO48Az32SBesk2hB89mAWqHy0mT4UJMAEmwAQuDwKUAPX7t44mnW6qftSlj70nPi5ZO3mkGpNHAjp3PdPuDKJd6dVuDKUd2tZTLND1dgfwxjZgOgnUGHE1W1Avj703VLNkgTpUpPk5TIAJMAEmwAQGgABZTVtzdjzaAMPy8Ij0uAkpgZg6EogJFnGmpCq7M5p6P74vRlS6xvu8DoEqu/hdwNEzwA528Q/ACvMt5D3HJJgAE2ACTIAJMIFhQOAnz6+7uc5uXBkQkRE/KzNKMTZBgRERgJKsmgOQnd9XBFKZqa3AtDQg1R2DygK1r/T4vL4QYAtqXyjxOUyACTABJsAELiGBt953Be49tmGdIzBtZuaIBNXcDA1GhAMBeiFML6bgfn+mQxbU1VuBGe4yUyQmjpYBnx8DVnCSVH/Q8rVuAixQeSswASbABJgAE/BRAg895NI5Ez75gcKU/FREVLJhZoYGY+MVCDKIATv7UWy/P1MmC+obnwHT0z2SpM4An+cDK27hJKn+sOVrBQEWqLwTmAATYAJMgAn4GIF33nHpd5/5+GqlMeaVkLjx8SlRaizOAsJM4pN7qC2m3ni6FKhkQT3KAtXHttKwHQ4L1GG7dDxwJsAEmAAT8DcCUtmoQ59e1dSufTwgMnNOaly0YlqKAmPifUOYyrxJoK7eAkwf5RGDSgI1H/jVrWxB9bd9eSnmwwL1UlDnZzIBJsAEmAAT8CLw5nuusJzS7b9t00bclhSfqp8wQoOpyUCgQZR18qVDEqjk4qckKXeZKSkGlQWqLy3TsB4LC9RhvXw8eCbABJgAExjuBKim6fJfffRsmzbhofDolICrJgRhVDQQHig6QF2qONOeuHZYUNM7BWp+qRCov76NLajDfU/6wvhZoPrCKvAYmAATYAJM4LIk8MAzH1xhN4T/VR2QmjhtVJRieqoC8WGAWuV7VlPPBSKBumozMINc/G4Laj5ZUI+wQL0sN/IgTJoF6iBA5VsyASbABJgAE+iOAFlMH30qJ7IloPplhSnj64lxscr5o1VIiQRMWmExvUTJ+X1eNBKor28GZo4SnaRITBwpBbazBbXPDPnEngmwQOUdwgSYABNgAkxgiAhk/+ZIzFlbyX0ITn0sMjJVPz1ViakpgFHrW0lQveHwFqh0/tFSYOsR4Le3s4u/N378+94JsEDtnRGfwQSYABNgAkygXwSef89lOF248TtmhenxqPiJI0fFGTAzFRgRCTiGsANUvybhcTEJ1Nc2CQtqaqz4BcWgkkD9HQvUgcJ8Wd+HBeplvfw8eSbABJgAExhMAtnZLqUj8tCU8qaml7QhKdNGJcUqJ41UYmIioFSJJKjheEgW1E3uGFQPgbqNLajDcTl9cswsUH1yWXhQTIAJMAEmMNwJULH9L85ufN9iSFwwNiVZMytDi7QowKQTVlNfjzPtib/N7ragZrgtqC4PC+p32MU/3PeuL4yfBaovrAKPgQkwASbABPyKwPJnP3zYYkh6JiQsOWDOmABMGamQukCRKPXFslEXCv8cgSpn8csufhaoF4qTz++CAAtU3hZMgAkwASbABAaAwHvvuVR7KrZMbLIb/qkPyhyZmRSE+WOUiA4GtOTOH84mUy8+Vjvw6kZgVgaQ5nbxUxb/1jzg93ewBXUAttNlfwsWqJf9FmAATIAJMAEm0B8CVDbqkac3TrToNE+ogjNuio+LUc5NBzLjAbWy886kTy/mQ1e+zpeu7xComUCa24J6pEQkSbFA7c9u4mtlAhfzWmF6TIAJMAEmwASYAIBH/lYeYSk8/IjVmLg8OiYzICtJhYVjAJMesFMClIeqpA9clwsg+yL9KalV95/y72QFK//qQq6n+6oUgFLZ+RxKwrK5E7EG8vkkUF/xsKDSvfPcAvV5tqDya2MACLBAHQCIw+wWiuzvvaM7E1j5E4US31MplZF2h8MCl/OQ0uV6or3Znvfuu9ltw2xOPFwmwASYwJASWPmxS3cib/O9Lc6AHwZFjEoZkxyC6clAejTgoDhTOTvf81PW08XvIU47RKj8+w516mVy7eZ6EqVkqTVbgNpmoMkCtFoBlRJSeEFcqDu8YACfT1n8r2wAZpEFVXbxk0DNA57/Lrv4h3Qz+unDWKD66cJ2Na0f/eh5Q7OjdZJCoXpep9PNiIkMR3hEGGztVpSeqUSrpQ1tbdZ9cDiWKh22gtWrs1svIzw8VSbABJhArwTInf+jFzdPamxT/1UZlJoxLSNWMS1FiZGRgGaI25OSpZTEaVEVkFMKlNUBDa2A1dGZjBWkA26cAqRFD2wMLAnUlzcAs70E6pY84EUWqL3uIz6hdwIsUHtnNOzPuPfeVRqnsSoNTtWDSoXqQbVahSULZ2Ps6FFQKoWvyely4ujxIuzZl4vGxkY0tljeVsCV3Vxtr1yzJts67CHwBJgAE2AC/SRANU3P6jf91aZL+UZ0dJz6usk6pEQBgToh/oYyCYqso3VNwK4C4EgZ0GYDdDrAoBOWU7KokhG3pgHIiAFumQWQqByoozuByhbUgSLM92GB6ud74N5Hfhdht1pvVjrxoikwwGixtLqSEuIU37hxCTRqFZxSIJQ4VCol7DY7vtifg9yjRWhsrG+xWZyPKrXKtatXPlbi56h4ekyACTCB8wiQxfSup6AzaT5a2m5MWREUmho4LU2LWekKhJhEPOlQFtun57XbgYOFwPYTQpiaTKJVKllUKYbVM9a0vgkI0wP3XQVQaaiBOiSB+qnbghon7nrkNLA5F/jD99jFP1CcL+f7sED149W//7HHQh2tQS/o9QF3xsdFICoiFMdOFCE5OQHXLp4Hq/V8w6hCoYBKpUJNbT12fnEIZeWVqK1tyLG6FD9TQ3Xo3Vd/etaPkfHUmAATYAIdBLLfc2nNZVuvbrbrntGFZo0flRCIBWOAhFBA4U5EGipcsuSrMgPrDgHFNYDJCAQY3ML03JwrEdbqAmqbgBHhwB1zBsGC+qmIQU1ngTpU2+Cyeg4LVD9d7m9+8z1VYMzxHxr1gb+bNDbVdfXieYrC4jL8+4MNmD1jEqZNGQe7vfuv00qlEgqlAicKinHw8DFUVlajvqHxPZVa/SJMqry3f/OzJj9Fx9NiAkyACeCRX26e0qhW/tIVkHz1yPhE1exRCkwcQZ6mobWY0lJIllEAuaeBdbmAxQpEBAMajRiLJF67SIAiF39VHbBoDDAv011VYIDWliyoL7kF6igSqC6Rxb8lB/jDXWxBHSDMl/VtWKD66fJ/80c/MgTaIs8mxEYF3XvnN2Fz2HGquAwfrduC+XOmYeL4TNjtvQckqVUqtFmtOJxzHCcLS1BRUdXc3Nryik6tefuNVx4/4af4eFpMgAlcpgRW/sUVdKx009NNrsjvxiVlhowfocW0FCAubGBd5H3FK6UJADhUDKw9CLiUQHiwSI7qqj5qR1UrBdBqAZpbgfsXA+GB7tJWfX1wL+eRQF25HpgzGkh3Z/GTQN2cA6xkgTpAlC/v27BA9dP1v/9HK1JcLtWp2TMn4YpZk6V3MrKgfrhuCxbMnYYJ4/omUAmPcPsrUd9gxuHcEygsKceZsopNLpfrzzqXbt3rrz9a5acYeVpMgAlcJgSyt7jUtbs//W69K/j5wPD04CvHhWJCkkIq0USHQy4bNYQ8yA5Jz/00B9hdAAQFAoF6D2HqrVDdNVbpujYrcLYOUk3WRWMHVpwSAkmgfgLMHgOMcgtUsvBuyWWBOoRbxK8fxQLVT5f33gefu1Oj17176zevQ0xUBMhlX1Rcig8/+QxXXjEdE8ZmwO7o3YLqiUdy+yuABnMTjhwvwsGco6ivN+9Rwrm+tFH3m0///GiLn+LkaTEBJuDHBJ59YVtscTs22E2jxkxKiVTMHaNEYhigVQsX+qXsULopF/j8BBBkAgJNbqHp8qj/Lxf9d9deJccYRW9RPdSMaOBr04EAErUDPAlKuCILKglUsqCSmMglF/9hYOXd7OL345fLkE2NBeqQoR7aBy176NlH9Dr97+6642YEBwZKArWQBOq6z7Bg3nRMyLpwgSrPgJKo2q1WnK2sRkFhGfYfzGtvt1m3qTX44xsvPvHXoZ0pP40JMAEmcOEEqGRUs+nTiHqr81lVyIS7IkOiVFdkqTB5BKDXCAE40KLuQkZJrv1tx4DNeYApAAg0dI5H/uCmMZKdoYlqn9o6xatGDUwaCczJAII8rruQ5/d2LgnUP8gu/ji3QD0NbDoMvLyUBWpv/Pj3vRNggdo7o2F5xrKHnn5UrzP9ZukdX0NgoKlToH7yGRbMnYEJWaMu2ILqCUJ2+7e0WFBWXoWcvBM4dqKgQgHFLr1C//NXXnmE41OH5c7hQTMB/yZAZaMe+3VhUKO95K42bfgvQyMzAiemajE/Ewg2irlfSmFKz6c6pjmngf/uB7RaIIjG5dUWlSylzRbA0gZEBAKZ8UBqJBAeBBi0og6qd+7UQK6st0Cle+eRQM0BXmYL6kCivmzvxQLVT5f+3uXP/VRr0P/67u/ejCBTwLku/gEQqDI2KvRPb+ZNTc0oOl2OHXsOora+4Yhaqdz85kuPP4wvq/37KWKeFhNgAsOMAFlNqw2bb291GH6qDs3IGp8cppiVDoyKEUX2L7UwlcVpaS3w9x2A5ct2opHBbtEsdz1VAFQhsKZRNAiYMhK4YgxgcGf0D5Xl10oW1E+AORSD6i4zRQJ142HgFbagDrNXhm8OlwWqb65Lv0e17IFnHtMbjSuWfffrCAgwnuPiXzhvBsb304LqPUAKIaCyVVJ86rFT2PXFQavDjsNaKN54/dXH3uj3hPgGTIAJMIF+EHji9fz06vra31u1CdckJyZqxo9UYfYoYW3sQ0GTfjy575eSW5+Sj/62HThZBUSHAmpVZwwsfWBbbECtWVhLF48DkiPF+IfaEkACtSNJyi1QKUlqM7v4+77gfGaPBFig+ukGuecHK36u0+qe8xaoH5GLnwTqmP65+LvDplQopPhUKvS/64vDOHai0KzWaL5wqNoef/uF7H1+ipunxQSYgI8SeP49l+HoyXVvN6sSb06IS9UtGm/A6FhRdulSCLvuMFHUJhXW318E/GcfEB4C6LXCqkvik8Rri0VYTq/MBOaPAYw6EYN6KQ7JgrpOJEllxIsR5BYLC+qryzgG9VKsib89kwWqv62oez6SQNXpnlt259cRYJQtqGUQAnX6oAlUT5zt7VacLivH59v3u2rqausVCtVHbTb1o3/mslR+uut4WkzAdwhQrOnyFZ9e36KKelsXnBI5OzMQM9IUiA4Whe+Hsj0pUfH8sO3K2kmSrr4FeGcrQOIvOFCwlCtJkZgurwYoJGHJBECvHnqrqefqygJVcvGzQPWdje9HI2GB6keL6TmVZcuf/oXeYHrmnru+AZPe0OHiH2wLalc4LZY25Bw5jj378xztlvZam8OxUmM//ZvVq1fb/BQ/T4sJMIFLROC991yqLcfXpFlVsX/VhEyYnBBpUtwwVYmEMOEuJ8XXnTu8o8j9RY7d+3r5A9bmBArKgfxyQKcBrhwNmPTnPoRiYLfmAxvygPgI0bFKjol1KYCaeiApDPj6dJE01VW87ECPvycMJFBf+Bi4IqvTgnq4SBTqZwvqRW4gvuwcAixQ/XRDLH3ouScMev3T93zvmzAZ9B4CdSsoBnXcmPR+ZfFfKDbK+jebG7F772EcPVnsslptu61wPgxze+6772a3Xej9+HwmwASYgCcBSoBqi8odWVlV8bQyZPS3oiIT1NSedHqqEIVS8pBXv3pvgp4CryuxdyHXk5WW3O/l9cDnx0QbULVG1CidlgrcNO1ckWm2AC9/Aqg0QIgJoL4A9AFNltWWNqCxGbhzniiKT3GqXX14D+T4e5s/ZfF3KVDJxX8Pu/j51dl/AixQ+8/QJ++w9MHnnjQY9U91KVDnz8C40f0XqOItqHMLuXpJgZXOVCpwprwSGz7bg/q6emubzfaK0tH+ekMkitdkZ1t9EiYPigkwAZ8mkP2eK6CicMuP25zh94dEp8dMTDZgbiYQFXJ+AtQ5pZe8FGfH73owRfZ2Pb0vUhvSqibgYBGw/ThgpWx8d0ypuRnQKoGf3OAem0LEl249Iqyn0eHi3/JbK4UiVNeLZKg75wNKKsgvr8YgjF+yLvdh/iRQn18LzB3rzuJXALlFIgb1NRaoPv16GS6DY4E6XFbqAsd59w+e/V+jzpD9/bu+Ab2Xi3/h/Jn9FqhkEaVkKCtVhwagUauh1+ukv/cmVCnjv629HXv25+LkyRLU1tW2Wmx4JMioWffK739y+gKnyqczASZwmRKgONOHf7fzqy123bNOQ9KY0ckRijkZCmTFC8ujQzabyt+lPX37HnVFxRuXG2JvP5dZd3GeRgW020RHpV0FwOlaINAIBJtEbVM6GloAlRP4+U2dApVE6Mp1QOuXmfFhQW7LqvvTud0KmBuB6ycDszNEQX7p6G2cntX8B2H+ZMXtEKgUg+oCcopFoX4WqJfpC3KAp80CdYCB+srtSKCadIbs++/6FrR63TkxqIvmz0LW6DQ4Ljb9UwFUVtXi6PFCqZsUGU4jwkKRnjYC0ZFhMJmMcPaSgSAV+lerUFNVi10HclFRVuOsrq056nDYHlHpgg+9+YcfVvoKSx4HE2ACvkdgxWtFI0/UnvpXmyZl4rj0Ecr5Y5RIiQQCDABZ94bykC2e5MYni+npGsBoEK1JtSpRY1V211c3ALHBwH2LAIdTxJoePg28txOICBcF9j2PhmbAqAIevFq0XvWFWq00PhKov18LzMvqTJIigbrhELDqXnbxD+X+89dnsUD105Vd+tAzTxn1xifvv/tb0Oq8BepMZI1OvyiBStbPugYz/vX+BtQ3NCOQevApgDaLBVa7FVmjUzFt0lhER0X0KlIJvYp8YQoVCk4V4eChY6isM9tq62r/oVZpX1K1W/JWr85u9dMl4mkxASZwEQRWrXJpDtds/N8mTcJPIyJHahaO02N8oojbJCPoUGbnd4jORmBDLnC8HKCEppBAQKtxT87tLpeEpQuoqAWWjAOuzBJjpfjYP20Fjp0FIkPPBUK/r20ARscDd1wBtA+x8O5peWSBOtcjSYoF6kVsaL6kWwIsUP10c9z14HNPBxj1T9y/9NvQarUdFtS1n3yGhRdpQSWrp9PlxBf7crHri1zEx8RDQ3344JK+1Te3NKKmtgYhwQFYsmgOkhJi+yaCFWQ1UKHdZkVO7gkcOX4KFZXVTe2WthUapXHtm689muOny8TTYgJMoI8EvrfFpddv+fj6dkPCKl1YRviUVC0WZCkQZhr6slFSzVIATRZgTwGw6yTQRqWhAgCDzsP77hGwSvqUrKcmNXD/EiBAL2JNm9uB1zcAbU4RCkCHZ5xrdS2weAKwYLSwWvrKIQtUyuKnNqt0UBY/WVBX38cWVF9Zp+E8Dhaow3n1ehj7suXPPmMwGH5x/7JbpPhQlUqFwuJSqQ7qxbr4yXpa39CATZ/tQWOTFSHBIedYSUnA2uw2VNdUQa9T48brF0qW1L6GEiiUCigVSlTX1OJAzlGUlVU6y8urDtkcil8HBtj2vfZCdqGfLhdPiwkwgW4IkMX04NmNC1uhydaGT5o5IiYIC7KAsQnuzPwhbKEkJUApAYsVOFUJfHQAqGkSwpRiTWVZ1hEe6v4LlWSi7k8aJXDrbCA9VkyWyl7llQr3fmCQcOF7ClQKAaDyUrfNAbISL6woP42TxkPhBYNhVSaB+ruPRJIUC1R++Q4GARaog0HVB+657KFnnjXojY/ff8+t0KhUQqAWlWLt+q1YtGAmxmRceAyqWqVCaVkFPtm4E1qdEUaDscuEKEqSqq2rgVoN3PzVxQgPCYbzAgKnlCoFFE4FqusaUFBcgvyjBc6yM5V5Wo1qjUbj/OOrzz9R6gP9yOIMAAAgAElEQVSIeQhMgAkMIgEqG2VLb0isKjqcbdHE35aYkKydlqLCrAzARO1JO1LZB3EQHremslF0nK4Gdh4HDpUIN354UGc7UnqbI1FIf5J11O4CmpqBxlYgOVwU2E+N6YwjJff+xweArceAiFBxjXw9fTiTCGwwA/csAhIj+iY05SoC9a1AcxsQTLGwBhHvOpAHje23HwLzSKAmiDsfoix+tqAOJObL+l4sUP10+e/6wbPPBegMP7//ntugUSk7BOpH67di8UUKVBK5kkDdsB06fUC3ApWQOux2VFRVIDk5Fjddt7jPVlTP5VAplVKt1rKKKpwsOI3c3OPtjZaWz3Uq1fNvvPyLdX66dDwtJnDZEyCr6e6qdatanNHfjorLMF4z2SRl5kcGAlT0/gK+7w4IS7JGkjt/Uy6wrxBwKIHQANGK1LPwv1x5jyyWza1AfTOQEArMGgVMGinOp45Q8kEC9a1NwNFKIMYtUD2LCVDYQHMTcP9VQEyIsIb2dJDAJSG69xSw7ShgsQHhJuCm6UB82MByI6swWVBJoGa4BWpOEfDpQeCN77OLf0A23mV+ExaofroB7l7+3AqTQf+Yt0AlCyoJ1NEXYUFVqZQor6jGp1t2QgEtTEZTjyWlWltb0dBUixuuno/U5KSLEqmS2x8KtFgsKC+vQt7RQmfu8RNFcLo269Su365a+T8n/XQJeVpM4LIkcN9T67/Sqgpe7TKmRs8ZG66YmaZAcpSo/znUVlNaALKctlmBf+8BDhQBoUFAgFH83CVX03cnQtEHKpWZqjYDKhekWqyTU0XWPp3q6WqX3O9O4PWNwNlGUSfVu9QV1U9tbAQeWCIEbE+uejms4POjwCc5VPpPVBKoMwOTRgC3zz2/Jmx/NpgkUMmCOq5ToB4uBDaQQL2fBWp/2PK1ggALVD/dCUKgGh574L7boKaSTh0u/s+weMFsjM5IvWDBSDGoDeZGbNm2Gw1mK4IDyXXfvd+IXP1VNZWIigzGLV+/DrZ+1H5Ruuu4mM1NyD9RiL37DzubmtoOK9WKDwpyYn712Wd3cTcqP93LPK3Lg8CKV12hJ6o3rrWbRs9IiYtRXjVJhdRo4c6neqZDbTWVPiDdn5A7jgH/3Q+EBQOB+s6yUfQJKrv1yXJJJaFaWkV87PwsIDEcoNqoXbnXSeBShyhKkGp1uLtHuUMEZKssWVtJYJKLf2Rk7wKVkrU+OCAStUIDxfjrmgCtAvgF1V0dQDe/bEGVYlDdFlRJoB5iC+rl8Yod/FmyQB18xpfkCXc/uOJXJqPuZw/dexsUSuHiPyXFoH6Gqy5SoFISlMPpwK69h5CbW4jIiCjQz3o6Wlpb0NJqxs03LEJsTFSfSk/16MJSKtHebkWd2YwjR07hYE5ea7vNeUSptr/41h+e/Nslgc0PZQJM4KIJLH9pe1xrdfMPHIEZPwyNSNDNzVRjRhpgpGx4twC86Jv380KqSVpaC7zzGeBSiSx7b6FMbvdWixCnoSZgURYwOUXEpdIhC1j5rVK2glLYQG2TsKC6lCJO1NuDT/eurgO+NQuYPLJrgSm79XedANYeBAx6ICSg817mFkCncDcGGGCBKsWgjnMLVJfI4l9/EHiLLaj93Hl8OVtQ/XgPLHvo2d8Y9IZHf3DvbZIvaiAEKuFSq9U4dqJQSpQKD4uAXqfv0c1vt9tRW1+FCVnpuHLejI7OU57oSeRKFlKykkhusJ7fRel8erNva7OiorIGu/fnuIqLS+uo3rVLbf/h6heezPXjpeWpMQG/IJC9ymUsLv3odoc+/hl9RFZUVoIWX5kCRAQOfEJPf4BRLOf7+4ER0Z0WVfl+bTagvhHQqYCpqcCVY4TQ9HwLI5FLrvr6FpEERSJWei9VApWNwKqNVBBaXOd9yAJ1Zhrw9ZkifEA+5GSoFivw6SFgx3EgIBAINp57FyptlR4F3L1gYMtUkQW1Q6B6lJligdqf3cbXnqMNGId/Elj6wIrnjQH6Hz30/e9A4XJ1lJl6f+0mUKvTieNHw34RLndy8zc2NeGf738Ku02JsNCwHgGS2KytrUFERCBu++YNUntUb3FaXV2PkjPlcDociIwIQ2JCrDTe3lqmklClc9ra2iXr8NZd+11NjU2VSif+U19l/eGaNdnnPsw/l5pnxQSGFYHsbJe6Urvphhab9jEEZkwfNSJKMTsdmJQsYs56SwQaqsmSAGxtB/5vB1BQBcRFiFADOdaTLKNlVSI7/4apQErUuaEIJEbJjX+mDjhcLLpFUdeoGyYDo2KFQK1oAFZvBJRat7D1MqHSs+oaAYNadJKixCwSv3RvEqvF1QCFHxwsAcKDRRetDgFLVQDsQEUNcPsVwOTkgWVLTQN+9R9g0WQgI04EDB4qBNYfAN5+gGNQh2qf+vNz2MXvp6t794PPvWAyGX748APfhcvhkATf6dJy/G3NRzAZDLhi9hSMHpUCnU7bqxD0RkTlpjZ8thN5+acQER7VoxWVBGRDQz00WuCOW74qNQyQhSeFC+zYeQA5+Sc73GB2uxOBQUbMmDIWY0en9ylMWmog4HSi1WLB/kNHse9Ant3psJe5XPh9/dkDr61Zs8aHylv76YbjaTGBXgi4XC7FD14qiDfXFf+9XZs0KystRTV3jBpj4oQ735eK0NNUSGJReahVm4CWdhF/Krn33Z+aJBSLzwJL5wNTUgGyKMoH1TOtbAC2HQMOnRbXU3ep5hYgOgh44GrAoAGqyIK6gcypQlx2laRPHanJzR8bAswfA+jUwFmz6FpVUgM4lUBEkEiK8qwAQEK/vEZYT793ZWfIwUBsVGJDFQpe+Bi4cSaQECGwUJkpFqgDQZjvIb0GGYN/Eli6fMWLRqP+4R8/8F2pVBMJ1JLScmzetgvxcZEoOFUKvd6AOTMmIikxHhp6d+vjQYKwqbkF73/8GcwNLYiMiJTu391hNpsBpQ23fuM6GPQiJIBCBfbsPYw9+3Nh1AchIMAkxbPa7HY0NZvR2tqM9OQkLFo4C3qtjnpV9Wl0JFQpPnXnzgMoKCwhvXvAAdcjTSrt/jUv/NjSp5vwSUyACQw4ge9nr1/RqIp/2Bg2wvDVGQHIigMiSPQ5B9ay19eBk8iiygDuDqTnxZbS7xtagFfXA+SKIeslHZJGpXJODiFQ75wLTEsV1lMpUskF7D4pXO5kIQ0wiSL+WpUQvG1twC++Bhi1QG0z8Np6ITKDTJ3JV/Iz5HhXspY2NEk6VmoUQGKe9DDFxFJClDuHVHzRdwOoMQOKL1ur3rcIiA8f2CQzmn9hJfDuVuD2BUCQEaCu1QdOAZ8eAN5ZzhbUvu5DPq97AixQ/XR33P3gcytNJsNDngKVLKhbPt+NaxZORUxMONZv2oujx08jIS4aM6dPRER4KLQaTZ8sqmq1CsdPFmHT1j1QKbRSVylKxvI+JAuquR4aDVlQvwKlUrju6b9//HsdGhpaEREeKVlWPY/WNgvq62sRFxuO65bMg8lo7DU21fN6agxw+nQZtu8+iKrqOrvNYf8ADuvPVHaUr16d3eqny87TYgI+R+C+p/6zyKKM/5PTlB43NT0Yi8YpEBcmXNwDXTy+t8lL7vkvM9ptNqDSDFQ3iix7KoJPsZueLUbp7w2tQqBS6KeUeNSFBfV7c4GpaUJcnqkFNuQAR88Aaq2wmtL9ZSFMCUsuB/DYjcKC2tQGvPYp0GwX9z/n8HgWjYVY0bjpx2QPoCQsSZh6VKeSr29qBVqagW/PGXjXPj2DnrvzBLAxD7jnandjAiVwsIDqoLrwznJ5ZL2tCP+eCbBAvez2QE8CdcmVkzF+bJr07fpUcTnWb9mLioo6ZIxKweQJYxASHNCnGFCNRoO9B3KwY/ch6HRGqeyUtyWVLJrU+jQ6OhS3fP1aKUmKxGhlVTU+/GQb1CodAk1BXVpI221tqKmtQXJSLK5ZMk/qiNVbXKrnQtNzKOb1UO5RHM49gabGppZ2q+1lnUvz4quvPlop7At8MAEmMNAE3nvPpdpWuG1MS7vy146AMdckxIQqrp6gwOh44YqmQ4417WgL6jEID23W8VPvn3m6s7v6nWx9oT/Jnkcxk7WNAJViyi0VhfdlsUVyak4GcNV4QK8RNUvpZ5SZL1lQFecLyA4L6jwgMw7YfASgTHoSsSHBgE7r8Q5DHaIAVNYBI8OBuxZ0dp8iC2qZGYimOqhuGLIF1dNn31ENQLb6ugF4dp6iH5mbhKX2ttkicUvmdLH85AXwvJ4E8l8/B8wW4ObZQjzTF46d+cBnOVb88WGqG8AHE+gfAd5E/ePns1ff88CKl/QB+uXeFlRy8V+9cCrGjU7pcP2TtfHA4RPYuv0Q7DYnpkweh+QRcQgOChTfznsoQKjVarB3fy5278uB0w4EBYeCfqZUiFjTVksrmpvrpQz+8VmjYLc7QB2iikrOYOOW3dBqDTAZArp14dP15sZ6TJk4RgpHcFxoU2kFvXGqUd/UiP37c1FQWOaoqa/frbQ5fmXXqPa889Lj1T67iDwwJjAMCfz4mdzEKkvFT2EacU9IRKpubpYK8zIBg7ueqTwlb2HaneD0/vmFXE/ucBLCZbXA7hPA7gIh2MjlTuWYKFaU/k21SykZaXoacOvsTjc+CdRX3C7+sMBzQxEoNKG0ChifBJxtAKqaADqH7u0pMOW/U37omRpx/+npQotSJ6k/bwUOFANR4e5Wpx5hBN5dqjy/UXfwc4tfqWZqM+BsB5ZMBBaNFeOVa6J4WoeJYX/5//a/wNhkYEq6EOX0xWPNdiCvoNL1t0djznenDcO9zEO+tARYoF5a/oP29LuXP/OKyWh64ByBWlKOzZ/vklz8Y90CVR6AVqtGY2MrPvv8EA4dKUCAKQAzpo1HfEwUTCbhXu9OqJIgPXnqNHbtOYg6+vruUkGjVoNKTNmdNmSkJuGaJXPhlFKVXJJAPV1WgU8374BWY+xRoLqcTjQ0UjCVHdddPReJsTGSsL7QQ6lSSvbSkjMV2LnnMKqq621mc8PflUrFW41a416OT71Qonw+EziXwPPPuwy5zZsfbHMEPGyMHJcwfqQBV2SKjHWKmRxKdwV9sJELnEo7UQb9+sNAMyU6BQkB2VFf1W0WpPPJ6mixiLaiKdFizOSSlwUqFb73/K5O4u9sDWBpF7GgocHimfQdWorAlO9NIQUOoLwKSKWEpQVAgE4IR3L/7zouulSFhroFs0ex/l6zROhcikm1A1ROirL9l0yA9IWAivIPBnMS/QUVojbst+cB4UFiriRQ31oPVBQdbvjTkxND+fXBBPpLgAVqfwn66PXLHnruVYPBcH9fBar0jVqhkGJQi0vOYsv2gygprURifBwmjs9EVFS49DtHN+KQYlKp3FP+sVM4VVwGi8UiJV4lJyVgyqSsc7L3yfVeW98AKnkFl1YKDegyCYosAy4F2u1W1NXVIDU5Dtcunguy+F7UIVlTVWhuaUHOkQJpnGXlFS3WduvTCqVuwzuv/PTARd2XL2IClzGB7GyXsi5o+5KqOsdbipCM2NljoxWz0hRS2SUSMwPZvagvmEkkUmtSKr9E7vwqs8jAN+lF2Sfpa7KcTOTZCMApSkJdPwFYNF6cQxbUlz9xx6C6BaqnS52Sl+jfWk2nIJVd8fQcerukRKumZmBKCvDVqZ0do2QrJt3jpXVAQxsQ6W5n6t2g4JzYWPeY3aWjQfGmFDowIQm4bjIwInJwKyJQFYF3toiqBd+aBzRaBAPivOZzoKls27Y/PTV/fl/Wis9hAj0RYIHqp/uja4F6RkqSunrRNGRlJncrNlUq4Z4nt/+uvUfRamnHqLRkqSxVRHgIFKCOUucX0yeBSzGodD2JVRKo9DNy63taX6X6pQD+8e+PYa5vRVhYxHlJUp7LQuK1qbEJSpUNVy2ag4SY6At39XvckAQyWVRra+px4HA+SiuqXWfOlJ+0OxVPByhcW1999YlSP90WPC0mMKAEpGL7lZ990KpMvDI9OVG1eLxWsphS0XlyOV/kV8mLGiN9mFFsZH4JsCEPKK4CtNTyM8Ad9+puBCILQ293OVkryQo5Ng64eabIsq9vEgKVsvg9Xfye7nWheM+dq1RDtQ2oNYvs/QVZwLzRopwWZft7HmRF3XoE+PdeIVDJ7d/V4SlSSZySCKf7kwheMg6YnSnE72B+IaBMfRKilNh161zRMYsaBZBI3XIE2HjIBm391jvffPKqP13UIvJFTMCDAAtUP90Oy5Y/+5rBaPz+uRbUM9iybTeuXtyzQJWRqFVKNDa3YvfefBzKPQWNRouxY9KRlpIkxaeSNbU7t79cRL87vBQWsH7DDhw9WYTw0EhoNdoeraht1jaYm+owaewozJk1VQof6OqQqwHIlQJ6Wl7qXkX/Kyopw+EjBSgrO2urrqlbY1Bp/6ZTGze+9NIP2v10e/C0mED/CLhcyjuf/Ndyh2H8r7VBCfr5WXrMH6Po6GIkJUDJWTV9yc7xPMf7ul6uJzEoZ9yTSNp1TLQlJWGq150/TU/rqTxG+hmJWxKksQHArVeI66mPPVk3bdQBym1B7e56aRzkzreL7lKWNmBiMrB4HBATItz5kjjtItiWxPyftgL55UBksBg3xbjSxDwtsvR3slw2tYj7j4wQ1t4xCcJa3XF/zwDTAeRPYvtfe4BTFcCPbwJC3F2rKEmKhPzuA0XWcFfN5FeenH6kfxuMr2YCXAfVb/fA0gefe91oMtznKVCLS8iCugvXLp6BMRkju7WgekIhEUcJT3UNTTh28jQO5hSgsdGCqZOykDU6DXq9TrKQXughZfLX1OHDtZspEgvBQcGStbW7Q+pIVV+LyIgAfO0rS6RzPcWxJExdLlTX1qPdZkVwUACCA4Lgcjl7trYqqH6fCg6nHWXl1VJHqoMHj9ib29o+0elU769+8edvXujc+Hwm4K8EVq506Q7Xb1zc5gperQ0bG5eZYMD1k4GY0M4aoOfM3Tszx/OX3WXt9HSOp3XFLUybraKDEZU8orJQFGdKlkpZMHYXEeTtRqe3EHLphxuA2+cCkUGdAlWqg+oVg+p9PYlyEo70X0IYcM1EYFScu0C+l4VVmobH/OleVFXg79uBYxUigYtCEqSYVkp0cgIWq6ihSgKXBC8lQWUliex5aSx0T2+T9QDyJwFPSVgvrwWunQosHt+5GOZW4LcfuFCU9/kXARrTgtXZU7mUn7++CQzhvNiCOoSwh/JRy5avWGU06e790f13dmTrSwJ12y5cs3h6jy7+rsYpu/0rq+qRm1+IPQeOIywkBDOnj8PIxHjpjfGCM+xdwIatO3HyZInUkUqt7tm3ZW4yQ69V4sbrF0iF/Um00qFUKFBZU4vdXxxGTX0DnA4ndFoNoqMiMT4rHYlxsbDaPZpYdzFBhVIBFZRotrSitLwSR/ILXHn5J6qVKuU6pV799lu/f2zbUK4fP4sJ+BIB6gJ195Nb5jmcyiecwRkLRyZEK+ePVkguXm+hNhTjJjFJ34tPVQLrDwEnKoDgQFEKqqsKnDRGersgsSe3IO1IZnLHpNI9KSkqwigEakQgUEsu/nXuQv1eApWEL11D92m2iFjTIK0o2k9Z9HqqWuDx3V1qDOAWkl0VI5Gsr1+663ceB/acEDVSabykOcm1TqKb4ksnjAQy48XPLjYc/0LXSBb7G3OAY+XAA9cAYR51Ww8UAs//p85laMx56M1fLnjlQu/P5zOBrgiwQPXTfbH0wWffMJqMy7wtqJu37sJ1V83AmMy+WVC98ZBQtVrtKCg6g11781FWXoORiXG4YtZkhIUGw+HoPtvf+15kna2pa8B/P9gIh0OJsLDwrq2okhVAgeaWJiiVdnzluisRFhwsCWLR1aoZH36yFdXVDQgMCIZKSYlVdrRbWhAQoMfYsRmYOnGM5M7vrY4qCVU6GuqbUHzmDA4dPOY8XV5+Uq/RrdVD8cJLL/2szE+3DE+LCXRJIPtNV1hx6ZanLcrY74XFpBmnpKhx9URR2J7c2UN9yKJwcx6w7qAQcOGh7vhOtyDsSGRyizjK0G9uFfU6yX1OmefkEpfd9ZIIVImYzsQQ4eKneE5ZoLa7vGJQ3Z+clOBE5amULmBMIrBwrMjUJze8pzFTtoSSAKa/U1vTrvJNpeoDahG/Wl4vLMI0TorpjQkGgii2l4wBF+606tcy0RgopvftLcB35gPT0jpvR7Gwf9rmwqat+8pH6XRXPPM/E4r69TC+mAm4CbBA9dOtMFgClXCRKJTKsjS34uQp6taUh5aWNkwYn4lpk8ZKyVEkVHs9pFaDChzMPYptO/YhJDAMpgBRe/Wcw0OgqpQO3HDtfISGBEvuexKuO744iIOHjiI0NAJ6vV7K/KfEKqvNKona9nYLxmalY+6syVC5O1n1NjYKGbA77KitMyP/+Cly+1ubW1uPaNW6P77x8mN/6O16/j0TGO4EJHd+3doVDbbIZSHRmYGLJgZhUjIQR5nmbrfzUM9RajHqBLblA//ZK9z51GZTjtWU3p/c/0fikzLcSXSSS3zqSNHZiRKS6lqByLDzXeJV9cD0ZOCr00XJJ+o3/9LH5ydJ0SNIgJZWAlnxwt2dFiMe7m01JRf86Rpgw2HgTD1AWfA3TgPSY7u3gErWVuW5rVjJ6jpUFlPPdaWxkMBfvRGICwfuWyLCCuSD6suu/G8dgu0nsl//xaynhnpP8PP8lwALVD9d22U/+NWbBr1u6XkW1G1uC2ofY1B7wkMijhKlGptacTDnBHZ9kQ+D0Yg5MychI01UCejVYiklFTiwbcde5B05hfDwcBj15xfupw8Ds7kBRoMKN16/ECaTQdzbCfxlzYdobbF3YYFVwOlyoLmpCc0tjZgwPgPz5kyTsg/6+kZPYtxqtaKaMv5zjyP/6Ml6p8OxDQ7tE2+9/mien24fntZlTIDc+Y88vX18jUu9pl07Mm1SZpRi8VglkiKFuCI39Dllj9ysuspz8sTYVe5Th6D0yKmSxZ/3h5Nk5VSKHvCvfyoy9MmlL49Fvj85QVqtQJ1ZuN9njwLmjQGigoTo/PgA8NEBIJEEpSxoqbOVE6ioBW6aCiygIvdOUUdVFqhyK1L5OSSUiyqApQvEM9rJquk2m8pu+XYrsCkf2HMcMLcBAUYh9sbGA/cuEWJWnudQ8PPOneoLf/oyQs0EyJr8k5tEzVf5PhTW8Jt/O1F4cn9toioh8/fZcTWX8UuHpz7ABFigDjBQX7nd0odWvGU06O8+R6CeLgN1krp+yUyMHgCBKs+VYkBtdjvq6puwfXcOco8UITExDnPnTEVkWEiv1lQSgW3t7djy+Rc4eqwIYcFhCAwKFu/27lqoFENaU1uJEUmxuPHahXA4HZIl19LWhr++9xFU0CEwKKjLEAGqm9rUTJbUJsyaPhFTJoyVrKN9PaTkLZcLFqsNZ8oqsGHrbmdjQ2uF02l7XxsU+sRrv3qgvq/34vOYgC8TuPLKbH3ylbP/ZlFn3RgRGan8+mwNMmIBAxWWp3hItwDrSuh0JXY8RannvC/merrG6gD+vVt0hEqMPlcoy8KWMuibWyCN+5pJkIQ11SmVLZA7jgNrdgmBSoZAeYzkrq9vAJYuAsYmiRhXEqgvfwyQi19KknJPgsZCArX4LHA3ubzTxb/p57KV90gJ8PFB0WGK+AUHuJsHNAGaL2+UfYsQqOeVu+qiAEJ3uU9d5Zl5Cvz+8KcYV+JNWfv7C4ArxgLzskSrVvoSQOWs/m8H8OHnZ11htrxlr2df9bYv720e2/AjwAJ1+K1Zn0a89IFfvWMM0H3PU6AWnS6TykzdsGQmMjOSehWOfXqQ10k2mx0lZVX4ZNNe1NU3YuK4TEybOh46jaZHa6qwVLZj78Ej2LM3D1qtFiGBwdDqdHDYHairr4feqMaiK2ciJSm+I/60uaUVf//Xx9AqDAhwt2btatwUr9rQUAeTSYOvXrMQQcEBHUlWfZ2nHNfW2NSMQ7nHcDj3mK21ta1KqVZkW0Pa//Judjbl2PLBBIYdAapnerL0o4cVhoz/0QenGWZlKLBwnNt9TmKMEoK8ZiX1qyfLo/tP+dfe/6af9/Szvl5Pgomsj7/5L6DUCMEniTF35yX6s6YBoC7w100BJqUIiykd8vjpnA/2AVvzgYToc6+nDH7tl/dYfj0QTm1NnSLx6aW1QqBSOIGnUCRxSQL1riuBGenu5ziB8gZg7T7gaCmg0wthS/GtcjksKmWlVwFPfMOduDVE/Pq6fqSyiTVl5q/ZCRwvByakAOHBQoDHh4myVvmlwKqPW6Fs2P3xn59edP2w2/Q8YJ8nwALV55fo4gZ4qQSq/O3dbrPjcN4pbPhsv9S9aca0CRiTmQqFkqJOuz8oM/9sdQ327stDYUkZXPTJoqA+1aGYM3syUkcmdQpLysy1O/HHv78Pl0uF4KCQbpOsKC61zdqO+oZaXDlnshST6pSKNV7cQeEFtfVm7NxzEIVFZdZ2m/24Sum4r73hxMF3332XherFYeWrhpqAy6V47MWzI0prC/+oDMmal5USLOIpowGrs1OUeopRGmJPwrQr4ToQ15NoKq0BfvUfID76/IL2JBjLaoA75wKzMgCL7fzxt9mBlR8AZhsQEdwpOCX3frXIkL9rYadwbPQSqPJbhmQldQvUZQuBmaNEfOnBQmBLLtDmEIKOMu+l0qduEU3vfZW1QGq0cPFLtU7dhzc3T+E+EPzkNetp/ajOaasNKCgHPj0EVDcCE1M7vwzICr2mCdh3zA6YD5T96X9nJA71tuXnXR4EWKD66TovW77iXYNRf+f5FtSduOHq2cgcNaJPdVD7i4eSp7buOIR9h04gKiIMM6aNR0JcLFQUZd+LPmxvb0eDuQkqtQrhoeeLT8n1rgD++Z8NUjJTWGgPHancvrDGxkYEh2ixYO5MqeqAXKrqouepUKCwqAQ7dh9ATW2Dvd3a/p8gDX5UX2+vffddtqheNFe+cEgIPLSyJLWupj8VClIAACAASURBVOpTZUhWyo0z9bhitOi61JccxyEZoMdD6OV+/Azwyjph/aTC955vISQyS6uB784FZow6v90nnb/9KPB/24EYiqfVdIYstFqAlhbgrkXA6AThvqbnSa1O17rLTJEF1eOB9LziCuCW2SIuc0OOiI8li2lo0Pnlt6QyUjbgTCVwO1ldRwkh7AsHxfbSW+TpamDnMWBfgRCl41Pc4R1uHjSHMzXA4VN2OBqONkWrm0e/8MTsM74wBx6D/xFggep/ayrN6O7lK/5oMuq/26WL/+pZyByVOCgu/q5wUjmpirO1WL95L06XVCElJQmzpk9AcGCA1OK0p0QquXh/V+eIuv4K7N6bI7UsDQ+lWqpun573QNyxrG1WC+rqarDkqtnITE2+8NqtXUyQxkghBDk5x/DFoSNobmxutbTbnw1Qqd6NiLCczc7O9pGPIT/d7DytiyLw0F9cQVUn952KiJ0Qcdt8DUYnuttkukVYX131ng/vyurX3e+7GnRP19Pr/UgpsHq9sKBSuaZz7u0ESqqAO+cJ8UdJS7JbmyyDVF/0H9uBgAAhvmSxKVtPp6cD357badV0UUiBl0D1rJ1Kfz9TDZg0QJsN0BuAQKOId6V7e3aAophNKrRfVglMTgbuWCAEtvcxmPzoWV2tKYVBkGX6szwgp1gkcqXEirJaclgTVRSgkmIny4ETp9uhaz1+Nkyjuf7Fx0cfhEJx8a6oi9q5fNHlQoAFqp+utC8JVEKsUipByUpHT5Rg89YDaG2zYdrksVI8qSnAeF5nqD4vi0KB2pp6rPlgPUz6IJhMHtWjuxCpLqcL5WfLMWl8GqZPnQCdVttrpYE+jUWK21KivrEJX+zNwcmiMldLY+NJp9P+iE6hPfDyyz8r79N9+CQmMEQEbs/elqcLm5F191VaZCaIOE2SGr19m5JFX1fnebqRu5vGxV5PYoniOmWBSlY/b4FKLv7veFhQSRiSW37LYeGyVmmAiFB3cpXb7V7bAKhcwMNfASKCRJ1ROuh5ZhKoH51rQZUb3pEAra4XVlAqX6XTdhbu95471WCtrAOyEoFb3E0A5Od4njuY/OTndGAj0WkT1lJiQwI0NQGIDhbWZaltqtQIBThbD5w6QzG+zTC0Hj8cpHF9Z+XjU4+wOB2iF+tl+hgWqH668Pc89OwfDUbDdz07SXUkSV0zE5npg5Mk1RtOqpHaamnHJxv34MjRYoSHh2DS+DGIi42C0SBKR/VWmsrzGaLFnwIfrN2MsjNViIqMkayyXR5kRXUqUF1fjejIICyYOwMhIUH9d/N7PIwK/StdShSdOYN9e/NQWV1rbzA3bITD9ctgY8DxF174cV1vjPj3TGCwCdz1i7VvtAfPXfadqwIxNdVt8evmoRdjST1HOHolAdHvurpnd3OWz5UF6qpPgDi3i99boJKL/455wMwMoN0OUF1TKiuVVwwEui2nnlZBEo4kUG+nTHwvl7ssUF/6CKA+dOS2l62usnVUtqi6Oy2fNwUqYk/lrqiQ/1UTgVmZwkJJIQTdvEudd4+B5k/zogoFxIqSuUjUj4gFEiKEO9/zoA5ZJ8uo/JYLztYyu8GR91pS0Ogns3+U3DDYe5TvzwRYoPrpHlj6gxV/NuoN3/nxA3d0tDoVAnUXvnLtbGSkDZ2L3xsxucS1GrVU5H/rjsMoO1uN5KQkjB2dhpiYCGhU6gtyvUtxUeXV+O/ajQg0BcNk6qLYPw3CHYfaYK6HTqvAVYvnIDYy4oKe1aft4ramUimrvCMFyD1WgMqzte1tFssqKDSvvv3az4736T58EhMYBAL3rdhyjdme/tGCGfGqG6aJ2qK9JeH0NWFHtqp6J1ENxPWUJEUW1FXrgPgYMW7pZe3uFkWisbQKuH2e6OpELutteQCVJ6WEJRJfsuudBKWlHaiuA64aDyyeLIrPe46fXPxNbguqlMVPSVUervuOklvu53u2fCUBWm8G7GSVjAGumQyMdFcNkCsKdMVqMPlJYf8u4GwD8HkesPekcOOPShKdrTxLVpE1laym+YV2WNvMLmN7/t4DLR8szPnd71oGYUvyLZlAlwRYoPrpxrjnB8/8xaA33f6jB77bIVAL3QL1q5dYoMrIye1vczhwOKcAu/YfRbvFiszRaUhLTpKy9snD1JckJtmKuvmzXcg5cgoxMTHQqXVSN6lzDjlRykwmDTuuWXIF4qOjpZqqg3HQuKhzVYO5EQfzjqOouNxRUV65xwXr6xpt4ObXX/gxJxcMBni+Z7cEHsh2BVRbdxxLSJ0Rf991aoSaOl25dFFfXMyeN/c+fzCvp9fTsRJgNVlQY4Sg9BSFZM08WwuMSwQqG0SrULJ6ksVSdsvLY6dWpGerRbvWb88DMikPXRQM6RCpsgX1lQ+7TpLyFMfy32kM1M60qUW0Jp0/TlhmPcc51PzIRU9insaVdxr4ZL9IgktPBOIjOhPiqBSWwyYK8p8sd6Kqsg46++kqI5qWvvG/V65ldz6/sQw1ARaoQ018iJ53z0PP/MVg8G2BKn0gKhRQqVSorW/Enn35kttfq9Nj/NhRGJkYi6CgoD52pFKgubkV/123GfV1jYiOjIFapTlXpMoW1MYGaDUKLFk0G7FRg2BB9VpjpdtEVX62EnsP5KO4tMxmbmr9h9ap+IetzbqRs/2H6EXBj8HSp/be16hKfO3uG6IVE5I7BZlnNyNJbHXT2amrbkfePxus60lo5ZcAb7oFKllUZeFHf5I4pDqoFDdKSVAkTr0TliTXvBJosQD1FD+qAAxq4CvTgdljPOJP3XuFykyRQG2HqIPqmSTlmQRFp7e2CaspJWTNzATmjRXXkDvdu4sWnd/dzwaSHyVikRU3vwzYcQQoOAOMiBGxppRk5ln+iioWkLv/1OlWwHLCondVfJAae+2y7AcVzfzSYQKXggAL1EtBfQieec8Dz/3NEGC49RwLanEZtny+CzddewXS0+KHLIu/L9OluFHK9q+pMUuJVPtzTqC93YEJYzMwPisder0ednqn7eGg0IF6cyM2b92FkpIqREZGwaQ3SSJVsqaSK46sLNXlSBkZj3mzJiMgwHRBMa99mUuX50hufxWsdivKz1ajsLAMBw4dtVnarRuVGsX7b/3hsVUXfW++kAn0gcDjL+ZGF1Q1b5s5c/qom2YrYdCKBCLPo6cOT911JRqq6+k5x90ufsmCSlnwXoOiNqwkuvRa8Vrv6Pzk5YaXf07nUpxlcyNwC5V+yhDdk+QPRirU/+qHIgaVEqEkYenRTorOozjT2nqRYDYnS1hMqXsVWSnlRKPuuHov20Dxl8S7UlicNx0CSmqA6DBgZIyoNCB3BaPvzs1twMkSitd1wtpYYjW6Sv8THTXi8V89MKKwD9uKT2ECg0aABeqgob20Nx5uAlWmJcpOOVFaVo28Y0XIyy9GgMmEyRNGY9SoZFDB/Z5c8iRSq2vrsXP3ARwvKEFocKhkhdWq6RMLaLI0or6+HlctmIExmWlDI049tgKJcKVChebWFpSVV+LI8WJXfv4J6l+9Sa/WPv/qH36y99LuHH66vxK44+eb7rAHjn73rq/EKiemiKzt7g4SMGSxlA/Pf3v/rqt7DMb1cgzq6o+B+Fjh4j9P4LnH7GnplEWlZ/b9OS5/BVBTDwRpgaXXARGBIomJnkcC9TWyoDqBUK8YVJpjXQNAiVajk4BF44GkaBHrSiEEl4ofic4GC7D+CyCnENDrgbQEd0crpRDONDYKbCqrAIorAbO5waVvP3YoQGt/OsZ+xfvZ2Yreijn468uE5+VDBFig+tBiDORQli5/9u8mk+EWzyz+wuJSKUnqpuvnIj3VtyyonnOX6u8rlGhvt6LodAW+OHAcxSVnkZyUgCmTxyAuJgYOh71bcUndqswNZhw9WYScvBOoa2iCViPMRS6FEzOnjsOUiVnQ63VDLlA7hDh9+rkUaGhoRFFpOfYfOOI8c7Y6X6NWbDIqbE++9FJ240DuB77X5U3g3lUujblo8/vxo6689r5rlQik2FO3UCEykiVV4Y5B9RCnstDsSnDSdbIIG4rrZYH6xjogluqgumNQZQFK45cskO7yUfK8aIze7njPBCc6j9zw1ElqSipw6wIPC2or8NY6wNwGhId0Jkk1tQINZiA6RCRYUQyrUS+sqFISlCyU3X8fbH6yUZe+dBw8BWw5KDpppcYDUWHC2iyLchoLhSKQddXcaIWi7Zg5UNP0sKVuzj///Fu0cqzp5f1e4UuzZ4HqS6sxgGNZtvy5/zMYDd/2LNRPAnXz1t342g1XIM2HBaqMgayh9J+5sRkFhSRU81FX14KZ08dj3Jg0aDU6UKZ8VwddZ7PbpXakVVW1qGtokD48oqIikDIiHjrdpROnnuMlizHNgTphHT9ZRE0HbFarba/apfjXG689/vwAbgm+1WVM4IEVR9Jq2zSHZ0xJN96+CLBSG1B3jdCLxTLU18tJUiRQycUvdZLqokQ8nUdtSFvaAEsboNEI97z3h5134hLFpTY3AXddIyyiJFrJff+vz4EDhUBcJNBuA5qaAI0SmJwGLJ4KBBo6heuFsBwofpTcROOiJgUb9wuLaEIUkJIAUBF+T3FOcyyqAErK2wFrpd3kyFmZpNj/s+zs7J7jpy5kYnwuExggAixQBwikr91m6fJn3jOZjN88z4K6dRduvmHusBCoHdZGpQIOhwv1DY04cqwY23fnITgwCLNmTERyUrz0ydNVtr8scB0OJ2x2m+TipzqsvXWvuhRrSWNqa2tHZU0tDhzMR97RggaVQr3LqcQf3nn5sfWXYkz8TP8hcOfP130VEfPe/8aVRilG0rPLkucsuysH5e1N766O6WBe7ylQY0mgduHip+dbLEBDI2DSAZHBQF0TYHWJUlPy4ZnY5fmzihpgZjpwwyyAhB+FuR47A7y3RXSCogSoxChgwSRgVPz5YRKDOX/vdZI7UVU3AFtzgP0nAJMRGD1CCHKbO0yB3h/bqKRWA1BQakNzQ5VTbys+Ejh6zvzXblfU+88u55n4GwEWqP62ou75dCdQKYGIBKovu/i7WxISnHa7AyVnqrB9Tx6KiiswMjEOc2dPQVhIcI/1THtqmeorW0AeY0tLK85UVGLHF4ddFWWVVUqt6pNwtD3565VPlfjKWHkcw4vAHf+z4a8BsYtve+BGIV68e8D3Vh7Ks67phXaQIqGnpi+R5H53utupeuHry/OpLukJKjP1MRDnFYMqJxdR3dI2i3BtzxsnxFpuIfDOeiAoqDNByHv15A9CqgAQbgRuWSgy8OW6p+VfNgA4dRaIDRXxnBTnSSESHV+iPcpTdbUz+sOP7ud5PXEglz2FGVCM6c48ESubEi9awMosKCSCxlhrpvqwLpSU1UDfXlAfom35SQwW/yk7W8FW0+H1Mr7sRssC1U+X/K6HnlsTYDB84xwXf5GIQb35K3ORluK7Mah9WRKr1Y7C0+XY8vlB1NU3Y9zodEybOk5qXTrcDxKqZBFuam5B/vFCfLE/x25pbTsLpeqdhLCfZnMCw3Bf4aEf/63/88XZlIxp0ctvFu79oTjUaoBKDJPLmUQS/TsxEogKvbgxyBbUN0mgyln8HhMh0U297q+dClw1VcRckquf/vzHZmDfSSAmUoyjq4M+DEmghhmAW0mgBncKecmaSoX8KTOfqgNcou7zUq1SO7D3GLCdhOmXMbKJMcAI6qyl7qwaQGOtrAVOV1BtWDvULUfqjJq6VVGxC3796/sU5qFYf34GE+gvARao/SXoo9ffu/yZfxpMpq//8P7OQv2npCSpnfjaDfOGvUCVCmq7AKvVhkM5Bdi2O0eqpzpj6niMSh0p/d0fDqfLBXNDE/YeykX+0cL2Npt1r83h+mlKpHUvx435wwoPzRxufarQOnNasuYb80RdzN6soF1Z/C7ECkitPQ8XArvyhVCixCESinqdKOV05SRRBslT6HlaUbt6FlkEqQ7q2x+7k6Q8X+LuEnIkUL+zEJiWCbRRnC3lfqlEfdR31gKNViAyrAuB6U6wqqJC/yOAm64QsasUt95TxyfP1ett/BfEz6MdrPx8cumfqgA27wOKz4p5jIwDjIbOUdD7IsWjFp0BSioAa2upw9Be+O+AANcvX//Fgryh2W38FCYwMARYoA4MR5+7i78LVE/gZHFsbGrB1h2HcDi3ENFR4Zg9YzIiI8KgVim9+0n53Fr1ZUBUx/VMRRU2bdlFiV9Wh8Pxnt1qe6Yp2lG0Jjvb2pd78DmXL4FbV9Q7r70iRLFgokj+GayDRGhjM/DBTiC/CFBpgcAA4ZKmL5StrUDrlx2NvjEfmD7mXDd5b2OSLahvrwUoBlWqg0qH26dN1s0zlcL6SQLVs4wWnbvvKPDPbUBwiFfPebc4pYSqmlrgO1cBk0b1XIart7EO1O/lzHty5+86AmzPEXGm6UmQKjHI7V5J6JNll2JoC0tdaGlugsF6/HCApvGhaOeiXezOH6gV4fsMJQEWqENJewifde9Dz/1Lpzfe/OMH71DYHQ7JonhKcvHvxNe/Oh+pyXE+Vai/v2jEG7kCZRU1WL9xLyrO1iA9PRnTJ49FgMkAlUp9yUpK9Xdu8vXUdcvSZkVu/jEczj2JhgZzm9OJR3Ww/Dc8HOXZ2dlcu3CgYPvZfW5ZYXV9e7EGU0i4Obpuaept4fO2CMpI5EQg781GZZ9Kq4E1m4AqMxAWJiymFHfqWXeUEpiMauC2JUBcRKdg7u35skB96yMRgyqJM4/K9vScsrPAbYsgzZNc4Z7WT8qa/9sGYdmlEAFpTO7rKeyhqhpIiwfuvAagqnR0sef1vc2/t/FfyPVSnKkSaGwFjp8GNu0XBfVHJ/8/e+8BH9dV5Y9/772vTZNkW+69xSV2nDiJUyAhIQUSIBBIsiSQLSTA/sAJyy5LCQt/s0sSyi4twEJoWZaeBEJbYCl2inuvsi3LKlbvljSamfdu+e95o3EURbZkR5Ilex4ffUxm3m3n3jfzne8553uA4nFZBQaKMuAUC6uA9k6g7JhBU2MXeHC0w1blq3/06O3/fY4d4/xyzjML5AHqObrh737/oz+PxLy3fPB9f90HoG7EHbddi3nnGEDtDeLILb5zzxE8+/wuBEbjomWLsfSCuYhGCKhy6L7lc8bQGaAvVcEttLS1U2wqyitrdXtbx1ETBB+Ax7d/+8sfbxhDy8lPdYQs8PbPanP3TQwrFmYBDV2ncjn3B077AtLe7bmgRBzgR38AWqkO/aQXtUBPCOT34EFicI/VAPfeDKxcnI1TPVnfuXnSvwTaCKzlXPwUc3mikBS54g1QUw/cfQOwajGQ6UkByiX7U/vWDuAbzwBpmQV61CadzmqaUmLVm68BpkwATK855dqfav2Dmf9g21OMbOBn5aCe2wUcrc0mP82eAUTs7JxDbE4AtgtoaAUOHUmBBTVBjFU89V+fuvEdeS3TEXqw8sMMqwXyAHVYzXv2Or//gUefiUa82843gBryqIyqNTEkU2ms37AXW3cfREG8ABevWIzZM6YhFouGbCr9jdUrrEjFBcorqkJ92Kbmtkxra9v/2txZUxQzpZ/73Ec6x+ra8vMeegv81WeMecfrgIvmv9St3psN7a3adDIZqb4zo/uI6SMJpv/6dTYhavIkQFgv1x090ZYB1bXAay4CblyV1TMlzDzQ+AR0Q4Day8Xfu9IpMag5F//KJVkGte9FfewpBX75AtCRzoLohAcsmZPVNKXMfQLQp7P+3kC9L0s60E72tj/ZMUxuagPW7wZ2lgKuAyyYBUws6ilPiuw9oWxUG1BeK9HaUGNiOHaogKfv+ca/3rgrD04Hsnr+/bFigTxAHSs7dZrzvP+Bh5+JRGK3/eP7+rr4N+KON1+LeXPOLRd/f+YhbVHiWOrqW/Hs+t0oq6zF9CmTcdklyzBp0njYwjqlNNVpmvys3M4Fh/Il9hwoxb6SUjQ1tXakupJftGLs6ce/+Il92TSP/HW+W+CuR4x55y3Asl4AtS+w6k/Dk+zWN0koZ8vw6SL5KAX8aQuwbleWOSVmk1i+3qVFsz8ce9zSLMt0rpgH3HYtEKEqxD3JSL3Zyr7MZVhJqhL43m+yMai9GVTqn5jh2sZsDCoxszmm+GVJThyobwYoIYpYyMnjgKnFWZCcW2xfW9BbfaWwhsJ+uXEoRpbc+cSY7jwIWDYwZ3qW5aUwBALfobSVyZYnrW4EWpvb4ciSQwk3/YUZ+nqSjUqf7+c8v/5zywJ5gHpu7eeJ1dy3+t9+GYvE3/TB9/dy8R+twl+e24i73vIazD0PAGruS5EzDqUNSg5XYP3mfejsTGHpkoVYOG8WxhUVhoxrf0L/Y+ZokNufcbR3dGL7zv2oqK5XdQ31pTrAI442Gx5//BNlY2Yt+YkOiwUIoL7j9cDyBaeXmDTQZAh0llUDT/wWKCwAotH+M+RPZCpSOVUCqHXAxQuyANWxByfblGNQcwD1RJJUzyRzSVJvvwG4rCfW9mTzp7bZn6/ZPwKzZ+OXXAjiDbDnCLB2e1bPdPZUYAaVcu1jl64kUHIUaGnXEKlDXQlW8amOccu/++Q/zmwdaJ/y7+ctMBYtkAeoY3HXBjHn+x94+FeRSOyNL2FQTwDU6zB3ztRzKklqIJMQCBWCoasrjT+s3Yodu0tRPH4cLlm+GHPmzkAiGoM2eky7/VlYOxGorK7F7r2HUFvXnG5saf5fAfN1Nx7d+Y1//+fGgeyUf//ctAAB1LtfD6zoAah9XdinqgzVmz3sy3BSpvx//z4bLzlt8suBZhhF05Ml37vkJsWgXr8y6+IPtT174ir7Wr83+0lsbWkPgzqlp9Rp7/spi72WYlBvBC5dks3C708iKkeUDhRS0ItQfUm87lC0D21igMY24LfrgYo6YPIEYO5MwKMErZ5vZgLdvgKqaoDKGg2TalARffinhQX2Jx/78KvyPzzPzcc1v6oeC+QB6jl6FN79/n/7dSQaf0NvBvVID0D9q9uvw9zZ5xdADdnUMLGAo7W1Az986s+IR1ykggCZdIDFF8zD8mWLEPMiUOSzHMMXhTbQGurqm3C4rBIlB8v91ta2jY5t//jxr3zk8XyM2hje3DOc+p0PZ138F/YA1FNlnPceoj9tzxxgJcBYdgz4zi+ByZP7MKE9zGDOrU8sYfj/e5KZCKC+/Ubg8qXZkpx93ee5OfR+nVz8ByuybC25+MnlneuTonkoE7++EfjrW7JMsS9f2u+pdEoHM/5QtM8F2h7vALbuz1aBinjAojlAPJZdNa2JQg98n9hSWrNCur3FeObw0WLXvuUrn7iy9AyPQb5Z3gJjygJ5gDqmtmvwk3336k//JhKN3/rBXjGoBFCpktRdt1+PubOnnFcM6okvPMbQ2NKOnz69FldcvgQzpk7C7n1HsPvAURQkEli5YgkWLZgbMqlj3+3P0J32UV1dj5LScnPoUFlzd5D5tWDe1773tQ/vGPxpyt851i1AAPWeHuDWu0Rnbl391aYfaM0ECr//a+BoHTBxYo+vPNcoJ//UpxMCX5Q1n+wC7n1DNnOeZK8GMz61PUwA9TfAlD6lTunXZyYNdHYCf/fGbPzm6ei9Dmb8U9ljoPY0d0oG60gChyqAZ3cAbZ3AnBlZsf0wzpRY5J7iBVRYgCSzaqrbYQcVnRFR/y///fAtXxloT/Lv5y1wLlkgD1DPpd3stZb7Vn/6t7Fo/JY8QH3pBpOrv6mlHT956i+46soLccXKxUilfFRVN2D77lKUldeFmf6XrVyGqVMmQko5tt3+jIXM8fGuJCoqa7Bx6+6gual1H+fs914n+4+vff+hlnP0Ecgvq5cF7vy0MXdTktTCF8t39sWQvSRFe4eM9hubSYCLYiK/9CPAjfawfyYLsnKs5gnXPs0jF+DJgPZ2YHox8LbrgXj8xbCAgcYPY1ArgP/6FTBlOmDnKlH1fIu1tQFxF7j/9qyYfTiXPri596F4JesPmc6TYPLer2e9NtkbjxwDtuzLKhFMGA/Mn5kV2ycgnZWPywJYSt46VJaCTpYHcV67dtLEG9/yxX9kqfyBzlvgfLNAHqCeozt+KoD6V2+9HnNmnZ8M6ksA6hVLcdnFi8AYD79s2ju6cORoHTZtP4Djx5O45KIlWHnxEri2C9mfZs0YOjvk9qeCDY2NLSg5fBQ7d5ekMr6/3eH8e9947GPfHUNLyU/1DCzQH0A9g25ONCEwtWkP8NsXgImTe0lE9UVnvXWgKBnJAA0NwJuvBa5acXrVmk4AVGJQqZJULoi0h5VtawVuuAK4YdXpsaevxA4DtaX42rom4C9bgMMETCcAs6YBhT3AnEB0Tjaqohqob9VIttToAnbs9y7HmvblV+948i42tmOOBjJS/v28BU5igTxAPUePxrtXP/w/kWj09b11UHMu/re/9bWYPWvysLj4rZ7UWiXVWcmKHWg7KZGoqakdP3n6L7jqigtDgJrTQ81m8xu0th3H3gMV2LyjBJ7t4rLLlmPZkgVhxsVYj0+l9ae7M2hobsauPYdNyeGyZiizXTj4129+6aGNA9kv//7YtMAdn866+JfSMe6VkNRXB3WgpKLc+64FPPm/wJ4yYGJxL8H8HvP0ZkNzBCq9RgwhJPDu24GJ414af3qyGE9qT+NSDGp5LfDNp4CpUwGnR86KRO0bm4Glc4C33ZTVDqWx+pPN6lsZ6kzX3zdZrG91LZprdwbYtCvLmhoOLJqbVTqgoga57C3C73UNQHk10NXpw85sK4tbnQ/NEq/7VV42amw+a/lZD50F8gB16Gw5qnq6/8FHfhf1oq97uYt/A97+thswe+bQA1Ri6Z7buDt0rV29ahlsS4y6OE4CaI1NbfjJ02txdR+AmttAEvnPBAEamo5j6/YD2HegEtOmTcKVq1Zg5rQpodt/LF8ExAmUp1JpHK2qxcbNO3VzS+sxbtjvVUr883e/mxf5H8v729/c7/g3Y+659UWAeuKsA5k9QwAAIABJREFU99I57e+1kyVJkTTUf/4sm4U+jrQ6e139kaj0NsW+NjZmE6Nuf+3AJVepTd8kqbYu4Ms/yoLTWALoTmbjWSnJ6C03APFI1p3en3Zrf4lQA712svX3Z6swuclk17m/DFi3JattOmt6VuEgp9saAm4NJFNAeSVQ3xBA+BUplx39sGW7P3hizfXt59r5y68nb4EzsUAeoJ6J1cZAm7MBUIk9/c/v/AqV1fUoHl+IG65diYsvWjAsTO2ZbkFvgPqqKy7Epb0Y1L59EpBLZwJU1zTi2Rd2orq2DUuXzMOrr7wEEc8b8yL/tD6lFJLdKew/eASbt+7yM74s09o88Z2vPvS5M7Vxvt3oswAB1L+6NZvdLnsY1FNJTfUnO9WbJfRs4EvfB46nXgSovROF+ksaamkFClzg3rcA4xMvziNnrZMVCuj9PgnWv7ATeG5r9tWYB1y+HLj6YoD1aJuGALBPZarerw2metbptqfkJkr2amgCNuzMAtTJE4G5swGyVXj1yG0l01m1gaMVGeh0nSrA0adj7a+97+tfZ12j7+TkZ5S3wNmzQB6gnj3bD+vI71r9yO/j0cjNORe/JQRKyyqx9vmNuPttN2DWjMlDDrAIoH71W89g0sRCCCGwe28ZZk6biNfdeDlmTJ0IPQpKixIoa2xuw0+eWotXXbUMl664YFBJUKl0BoePHMOzG/ZCK4MrV12MeXNmwLasQbUf1s1+hZ0T8xNIifb2TmzZsQf7S8q6OTe7Al9/sqNx4bonn7wrHwP3Cm18tpvnAOoykpnqB6CS258uktJ9CZije3u9lku3J9D15R9kheWJQc092ieqR+WSiHraU0JVRwfwthuBFYuzlZFeAkgHOX7ouqdqSrVAVwqYOw1IxLPg8HTm/7IqUIMcP7f+XHuLCg9QedJWYHcJsHlv9r8XXwCMK8iyqXQvufVTGaC5FaiqNWhrqDURUVFhBen7fvS5G9ee7fORHz9vgdFogTxAHY27MgRzevfqR/4QiUZvyrn4cwCVKkndfcfwuPhzAHX+3Kkhe1pb34Lf/3EzaupbcOmKhbjmVSuQiEchOLmYh2CRZ9DFmQLUkABhDMc7k/jDn7ai5HAVpk+bGALViRPGg+x7LlxBEOBYbQPWb9yJhqbmpFHqD91cPDRORyoee+zBzLmwxvNxDW/7V2Pe/gYgB1D7T83vJ+X9JElP5OL/4a+Bw1VAcXGPRftJmSfAStJPlMD0xuuzTGcIhvt7/vtLuT/J+JRYFAJp3as4wGm0f6XjU3vLAlpJz3RPFpxSnOlsKk86AaBQ/BCc8uwcKc60ugFoa2pHRFdVe/z45574t2u+mtckPh+fxvyaB2uBPEAdrKXG2H33r/70H6PR+A29ASqJtv/l2Q24584bhyUGtTdAvfE1l4JiOanE6L6So/jj2u0hS3fVqgtx2YpFiMW8EPDlEpRGyrw0ZkNzK37y1Dpcc9UyrBwkg5qbH7Wnq7K6AX9auw219c1YuGAuLrtkGQoS8RCojvSahsN2mYwfZvtv2b4fHV2d7doPvqnTwec6OvYff/LJJ/OM6nAYfRj7fOu/GnP3G7IxqDlWr+9wJ3N9h0CwTzwoxVNu2gn87nmgeFK2GlTvhP3wKaFEoSTQ8n9Z7NeuAm68MuuGD/U++1nr6Yx/NtsT6KSfowfLgT9uyOqZzpgKTJ2ULfUa6sz2aJp2dAIVVUBDsw+WKuuMspYfFxe/+mNf/EeWL086jOc93/W5YYE8QD039vFlqzgZQF373Abcc8eNw+riJwaVAGoOzJG7n+Icn9uwB9t2HkJBIoZbb1qFmdMnwSEqhj7PR4hSfRGgrsU1V1+ElSsWwuT8m6dxFkRYrUlj1/6jeO75ncgEEpdeciEWzJ6NeCJ6VsD3aUx/4FvJdQmO9s4ObN+5n8IbguMdHdsDpf9NA5u//7W8furARhw9dxBApRhU0kHNAdRcIlFuln0Thk5WXYnup/eSGeCbPwLSATC++KX6p6TKdvw4kO4GbrwauGplllXMPeYDJSflxug7x5PNtb/7B5r/6a4//G1qgJbjwLrNwOGjwPjxwIyeMAN6n9hS0j0Ngmx50upqINPVZFy9908Rl31srrh+95o1bGxnWY6eY52fyTlugTxAPUc3+P73PfrHWDxywz/0VJIiZo8Y1D8/twHvHGGAGpIpjIEY1oamNqx9bgcOHT4WJlBdfNFCTJ44DrZtjUjGfwhQm1rxk6fPjEHtfVyoL84ZurszeH7DHmzfcwiJaAKXrVqOaROLEY/HQuA9UuB7OI4yJZUxw1Db0IDnN+wk9jnV3dX1TFplvj45On/nv//7X5NwUP4a5RbIAdSlC7Pxnye7BpOodEJ+lAFHKoGn/pAtMxohcXzK1g8APwMUJoDXXgFctPjFSkn9JR/1nsvpjN/fGoajPcXg0rqS3cC2/cDmnVn3/uzZwISiHtmonpAFEt2nMqYHDhqkujPwzL5jrLvyrQWL37b78feyYJQfk/z08hYYVRbIA9RRtR1DN5n7H3j4T9Fo7LUf/H/3MhJozwFUcvG/866bQvaSGMChvPq6+HMMau8xhOAhWN2242DIqEqtsOqSJViyaBaKJxSF7w1nidFX6uLvz14kr0VAtbauGWuf24UjVbWYOWUyLl25LFyT53jQenTqwg52/4kxTqZS2HegFKVHqlDf1HI8mfI/z6B/+8TXH9qdFdjJX6PVAm/9lDF3vQG4sBdA7e/pP5msUt/XaZ3UnlhDEqJfvxWobczqj5LW5+L5wCWLAcfLsoona9/XXqc7/nC2Jy1TYkMzPlB5DPjDeirmAcyeAcyYnl07XXSPVkBXN3CsxqC2Jgk7qEp6puLjCyK3PrZmDRvaD9rResjy88pbYIgtkAeoQ2zQ0dLd/Q888qdoNDrqAGrOPq5jo6nlODZs3of9JeUoKIrjqpVLMGfOVBQmYmHG/3Awj71d/Nf2uPhJnH8oLgplICC6e99RbNyyD53JNBbOnY0Lly7E+PGFECwbFjBWLwLhnAu0trZj594SVFTV69q6hgol5adcw9Y//vgnysbq2s71eb91jTF3vTELUMMYySG8wpjMHiBH3bpulqWlcUYocmcIV5PtKoyp1cCxOmDrbuDAkWwVqHmze5hicuWHdUyB7u5soYCjR30EqQoZR9WmyVNufNOXPsjyeqZDvjP5Ds8nC+QB6jm62/c/8OifY5Ho9f/wvne+lEF9bmOWQZ02ccjB0mAY1N7mJlZOCIbyqga8sGkvjtU0Yub0yVi1clFYipX6U0P8bfqii38thhqghmxKj9u/K5nCpm0l2LW3FII7WH7hfMyfMwtFBQVQRg8L+B6po0xA1TCGY1W12LO/FDU1DZmG1tb/ZTBfT0wq3PDYmgc7Rmou+XEGZ4H+AGpfMftTVXLqb5S+7YlxDPODTqKz2rePoR7/lc6f2huWFdSvrgPWbwPKKoB4HJg9Eygqyq4tXF8PIC+vAlpagGRrvY6yqk0xho9++9Ernh/cruTvGssW+OY2Y7/3MhYYYzhjeZZ8OPYyD1CHw6qjoM93P/jIXyKR6HUvc/FTDOpdN48KgJoFdPTHQ8H4vSUV2LKtBN3dKSxfNg9LF83F1MnjhzSOkwBkfWMrfvr0Wlz7qmyS1FAxqL23PQRxpNdY14xNW/ajsqoBhUUFuPziZZg2YzIcYYFCL8bsxaj0pEDGz6DkcBkOHa5EVU1dR7Ir9XXuWv/zxGMP5b+kR9Hm3r7GmDvJxX/BSxnUkyVGnSrB6CXnvE8lqt76ooMhakfT+MSaSh94fiuwa3+2DOvcWcCE8YDtAPS4hp9XpHvaANTUAs2NnfDkkWpPdH5pvnftl/MJUKPo0A/5VOjnCzN/u6bcm3PrnKLENEwuiKuFhUI86ynEWTca3jSNdQ/5sOdxh3mAeo5u/n0PPLI2Ho295h/+34sM6qEjFVj73Ebc+/bXYfrU4iGP9TxdBrW36XPMYzodoKy8Glt2HAqB5Ipl83HNVRchFvWGhHV8CUB99QqsvIgA6mC+Sk//oNDDxQUPATAlh+07UI4du0tRUBDHimWLsXDBrBDkjWW3P7k4rTA+NYOq6jocOHjUlBwsbTXG/JoZ9tR3/vPjvz19y+VbDLUFbv//jLnzTcCSPjGoLxOs71WB6VTVlGh+/clCnU6S0mhpT7CDFkNxpus2Ag0twPTpwJTJgOdlM/fpxyYB02QSKK8AmpoUTLrcj4v6L45zpnx1AhbU5mNNh/rUjob+DP/IR5A4IDvtdianzZnpzuARtWLmq707XGacyRN5U0yw5ijHL4qEaHIM9rwqwRpHw8zPhTnkAeq5sIv9rOFd73tkXTwRvfYlDOqRCpBQ/2gEqLklUMIRgZ7WluPYc6AcG7cewJ1vvhYL5s0YEiAZAtSGFvzk5+tw3TUrcMny4QOouTXRmPQXBAqHj1Zh+47DqKppxOwZ03HFqhWYNGFcCFKHI+Z2pI43ZfuTf7S9/Tgqqmuxb99hVV5ZXeY61i9t2/v2177wT4dHai75cV5ugRCgUgzqBVlmkK7+2M6TMaC9dUcH65rv/bNvNLa3OCB75LCe3QyUHMm68efNB6JuTymsHlPKADhWCxyr1AgyHSaqd/yxwEu+exp7U3UemJ4bT9yddxqStxVNE5ucqXbhPJ0ySeOpe5jAnv8rev0xU2RXxxPsNZNvsFJujE8dZ7HjiYioL4zw5ghMq8fN+rjNjzCNnZdFWNW5YZWzu4o8QD279h+20e97/6PPxhPRa/7h71/KoBJA/Zu3vw7TRpBBzUlMEQ0RkA7LAFc2+YCjqbEN//XT3+OWG6/E8qVzhyQeNcw6bmjFT3++Ftddc/GIANQXwXc2q6K9oxNHymqwedtBHO9KYcnCuVh1+UWIed7YdvsT6CF9WKXCYghHyiqxY1dJ0NHVtcu1nJ8+/thH/mOgvc+/PzwWeMsnswzq0j4u/uEZbXT3Sr+B6fdUZxLYsTsrG0Xs6Pz5WXf+Ca3WsAQw0H6cxPYV2po6TMQcrR8Xa3jd4598w97Rvcr87E5tgay7/s73mfiTX2dd936o87Xpovghy7S+PdOdaHT8YLHyzK0mY1LMM4uEMUEQ4YVzbhJOdCJnMcWMCxNMKOCHilze7FnIJDg6HVtsjypV4ppgz7xIpDK/C6/MAnmA+srsN2pb37f60Wfj8bMPUAmcJpNpbNlRgoJEFFdethQ+feoPeDE0NrXiB0/+MQSoy5bMGfMA9UWgSiBOo629E3sPlGPL9hI4jovLL7kQy5YsCF2nwxV2MKDZh+gGisFNp33UNbZg34HDpqSkrN2X8s+u8B75xmP/tHOIhsl3M0gL9AWoOd2K3BdArgpU3+5eVh2q54ax2p70S30fKC0Htu4EauqA6SQbNROwc1WuenRPqdBAbYNBdWUneFCeKhRNXy6afuOaxx5k+ZK/gzx3o+22O+80TmIu3BK7pWBidzziSHO1F/HnCmMWBTFMtyw9QaecSSmPOZwZl6W5ZtzA9oyKLGbO+BXMSTChHWVYXPBU3GE146KoLXBEp8N0ELdZt2NwwDN6q3KtvXOBRsbyEnxneg7yAPVMLTfK293/vkeeiydir/5AnxjUkWBQF86fjhuuXRlaiABqOhPgL8/uwJGKGtz3zlvDMqcDV28afoB6wzUX46IRcPGf7KgQ2+j7AVrbOrBhy37sO1CBadMm4ZqrVmLyRFJZUGPb7U+lbGHQncqg+lgt1q3frlpa2ys55J+S1tRP/vjL724Y5Y/ROTO9t3zCmLfdlmVQcyHX/ZWuP50Fj6X2YeQQAw4eBjZuA+qbgUkTgVkzs3GmoU0o8Y8Dbe3ZBKjGRg10laZibvMvnPSUj37vCwuOnY598veefQusXbvWuv76JnP3B24tlp5wI66+xE+zGxk3Hpfmas00LE/P87VIG8EidkYGERdc2kIqaRsuAR3X2k4YHluFSNF4LjzOENdMOww6KkzbxCK+N2rzVAFj3bbgMmJ02mGodMCfmeyAQpuCPEg9s7OQB6hnZrdR3+q+Bx99Ph6Nvirn4ieNTkqSWkcu/rtfj6lTJgw5S0dJUl/79jNQUuFtb35NmIFPCUIExCqq6vDkL9bh0ksW4ebrLxsEizpcAJWqIjXjZz9fhxuuuQQXLV8w5HY43cNBID6VzqC2vhnPrt+N6poWLF8yH5eT2z8SPevzO9319L2f1kcxth3tHdhfehQ7dh/wU11pcn99qb048+0n16zxX+kY+fantkB/AHWwNhuo+tNA/Zzt9swCWpuAF7YCh49kdUxnzclWuiLgSnqn5OI3CjhWnZWY6mptMjF2ZGvcxie/9/BV/4s8CzbQNo+a96+7bq01ceJ1xpnnL1VBV3tgy/stHdkqbP2wL9x6zdjVDnSKG8QD02XALcWUa1xIbSRYJKq0gW244IpZTDPbwJ7JnMhsRGOTuRVRMB6YjiqtYx6vL4yZ6mLParAYgogQaY8hE+HadxkvNRzfH8/Y8VFjnDE2kTxAHWMbNtjp9gtQS8ux7vlNwwZQCYjU1Dfjf/6wKcxaf8strw7loij5Jwgk1r2wCwcOVoQyV8XFBQPIO50/ALX3nlLZ1AMHK7H2hR3QjOPKlctDoX+eK1sz2AMwCu+jJUip0NLWga3b9uBQWUW3zARHhG1/oKVm9vNPPnnXwAHKo3BdY2FKBFDf+ibgwkWA7FPZieY/kKxU3+Spk8lDndRb0E/Wf98kqlNpaZzu+OEXG8WQBsDeEuD59VnVgblzgKLxgGNnWdMwVMEA7e3A0TKg43garj5UI3Tzv06besN/f/EfWWos7O95PUdjKAvV3Puhzkl1Ip4Zp9svjkiMD4R7lTTmZmOlDYQ722ZSGChbOrY2ljFumhlhtFY2VMwTUncroQwLHG64JblEkTTM0gbSAZvO3aIr7HEFHMZWQERr7RiYKGOpaRPFZtdmXQmLdVuA8rRJe5bwBbTvWfxgFPgpYyxfEvoMDmkeoJ6B0cZCk/tXP/JCPBa7OufiJwb1YGk5nn2hB6BOHnoGNWcXAiFHymtRPD6BicXjQoBK41dVN+DpX63Dwvkz8abXXx2CFbqIZc1kfLiuE5YMzV7DCFDrm/GzX6zDjddeguXLzj6D2vc8kb26ulLYuK0Em7cewITxRVh1+XLMnTUjDJk4Fy5iVKtrGrB+43bUN7V2BUHwZx5lD7YdTdc/+WSeUR3qPX4zufhJZmrRS0uP9gdMBwM+T6V3erbbU3Z+2s/Gl657AWhoAmbNAqZMzcaZEhqnOdKnT7oLKK8GGmsCsKAqiFqHv8i78PAPv3JLZ541HepTOIT9rVnDsWaNftOa2qiMuOPjje71sQwfn4rIG5KumRA31gVWRntKw3IsprVg8IQMpDaGKyATEVIzGzGe1BRkatuWcrjR0teIZGyVsXymY0Z7EoZzxvnN0eJ4IewoA6Ia2pYaMWZJj6vOggirLU6II47NMp5G2mU8sLmWjuC+w3EsAmwBsJsxlh5CC5wXXZ0b33bnxVad3iLvf/+j62OJ6FW9XfxZgLo5y6CG7vfh0f/sb6YErGi85zfswY49R3DfvbegsCAO0j3dtusAnt+4D/e87QbMnDFp2AFqTV0zfvbMOtw0SgHqi/YzqG9sw19e2BVm/S+YMwtXX3kJ4vEoqArXWJalevHHjMTeA6XYvH0fupPJVl8F/wkRfEEkazsff/zx4PROff7uk1ngzf+SjUHNAdT+7huIRR3Iume7vSUAZbIi+pQAte9Ali2dMxdIxACqaJwtDAJk0kBzC3DosA/d3WwKxaENF0Svvy4vtD/QLo+G9w17w8NtFwrO7PHN5g5to6hbe/dGbOWLDBLaQcbnTPAAKmYrRWEcsC3NNXQ61W14xAqdCC4zStsEgSzlMi5trmB0xtjaMZxLLT1HCQkmi43jLLALErNYIiGhbcBEtFGWYXDB1Pg4Do4rFEdjgqVswQOPmFPDAzqOtgXJgT0O8CsAqXws6umdnzxAPT17jZm7300ANR696qUM6lE8+8IW/O09r8eUSSMLUMlwFKNaW9eMZ37zPC5buRjz5szAn9ZuweGyGrzqymW4+ooL4dhWj8zL8DGoIUD9xTrcdN3KsATpSAL10z1AxChrZXC4rBp/fnYHupJpXLryQiycOwuxaATsHACq9AXS1ZXG5h17cPBQmU4m0+XSz3xSW9Yfv/fYQ02na7P8/S+3AAHUO24DFvcwqL3vGAyLSvefDICe9faMCmIAnZ3ZJKjnN2WrPs2eB0ye3CO0r+nzJ5vB394GVNdqNNU1IcIq6xx0vu/Hn73hl3nGdHQ/OXfeaSKT5vnzGrW+3Fi42eZYxYGYzWXMwHCKNdbSCWyjGE8oHSQ1PAvK1kKBGThSaN8OlC9gIj6U4oYFEa5sYYzNoWwmtFYaCUdrCaPTwtOiO2NkXLiR662ZcQ9WRHOdYExxbRAxRjkaMhYRjRML+L6IzTpjAikCu/Sp7XIeUGhzhCPjA3tcxn4+ui08+maXB6ijb0+GZEb3rX5kQyIWu/IlAPXwUTy7/uwB1Gy1KI4NW/Zh555S+JksQfb6m67AogUz+zCCww1Q1+Km6y4d9QCV7NO7yhaB1N37DiORKMCllyzDzGmTEYlQuRvSb8yJ/wzJERrZTnpSwmvqGrB56x7UNbT4XV1da3UgPyUt6/D3v/ZQy8hO6Nwa7WQu/lOt8lSM6GDY0pFoT+VJCXRu35XVNO1OAXPmABMnEWkGUBRRVleZqj8BtTVAU2MSnjrcGOHHvzV14nWP/vs/5+MDR+NpX7PGhPUdGr3UlU3JdCfP2Gtsjv3ayA8JbncJzhNGBlpwrmFr5QojU9oFd4x0bc3sjkCZOIxgtrJlmj4djW/BWA7zWdLivieU5poVekqaQGswplXa0cwEsOISxrhSSCWsuSbKl0anRm3jFDIoC8zENFO2McZRTDlMH59YbO8sSohmR+nAYlzGLPgMINaWGFzJgEMC2ACgKs+iDv605QHq4G01pu68b/XDG+Px+BUvcfGfAKi3YMqkcSPOHBI4JbZy285DoVD+nFlTcedbr8PUSeP60TgdPoBaHTKoa/G66y/PFgAYwVCHV3KIiE0lG1Yda8BzG3aj/FgD5sycjuUXXoBJxRPgOPaI7+krWU9/bak0rAoUSo6UY+fug2huae3u6uj+oXDZVzrqFpbkE6nOzOK5JKn+XPyjBWyeDlgOywhbwNFyYP0mKr4BFE8Cpk0F4vGsO5+y84lZJXf+kSNAcyugu44GEV7+/cnF0z77lQ8vLT0za+ZbDacFLv3mNnvSvrmRhGcvj9q4Gq7x/EDcr5WWEaEmBYZxwZiyHa7DeGKlFWXcC6NNxg0CE7g8wo0vtGLC1kaDSaM5bGG0MEZp1xjLdWTGBy8wSkIYY0ljpMcU+Qn8dAaMM22YDTtqICbzuLPMnRNnQMQwHYEOQWpUG20rSAGTnFTs7I5HWFNUIGWTShWgXI6AHFwUWsA5ugE8DeAoYzRO/hqMBfIAdTBWGoP33Lf6kU2JRHzVB977DiaVghAcBw+XnxUGNRv3xdDZlQpF6UP2NFCYPWMybr35cowrKuwHWA0fQD1W1xRKXo01gPoim5qNP91fUo7nNu5BV2cKixcvwKL5szFhwrjQ1qM5bGHAx4lctpwj2ZnErv2lOFxWZZoam2oy3ZlPRBP8z1//wr/k9SgHNOJLb+jNoFI6+8miz0c7WKXPEsqjPN4JrHseOFgKxBJZ1jQRB4hRDbPzCaAaoK4WqDwGpJPtJiL3bYk47GPznFc9my9PepoHaIRuv/PR4wvQ1iUiiD+YFFxHLLzdlspS4K6ypRIGSEsjixwuSRqMcaWYZRlmbBX1tfIdaZhLQVHCBJal48ZX5LB3mKcCcGOrQIsI08winlRqJ3wQfM3SlgkoQ98ShnEd/riJekYFFrcxV0x0pzoTEzZnMcYkMacugVMwFVVQluDpwkJ+oDghKmymAxuQLhAQs2vxMBePLuOnUSklfpNIsMYRMueYHyYPUMf8Fva/gJcDVIGSw0fx3Flw8dMXRX1DC57bsAdHK2vx6iuXh8lQP//1C3j1Fctw+crFWTdcz0XghNo0NLYMQyUphrEMUHM2IhBKPzrajyexafsBHCgph2U7IZs6e8Y0FBUWhCVHx7Lbn3FGoWNoaGrG7r2HUVpenWpra/9tRpkfxIusdY9/9qN5fcFBfn6dKknqZFn3gwGrNPxItM+56ZPdlNiUZU0DDcybly1PSmAlRN09eqbtHUD5UYP21iQceag1zlr+Zl7s5t/nk6AGeWBG8Lb3fNPYbX+CzszrutON+QXRpPioxYwnEkik0pwLY6RgQhtuYClDoC8A12AWJBGglu1KS8KQxJMez6Vihhh0xQKpCxymPa21ZgJKGu0zZYSBsR1fS27B4bZRUsJ0cyOiTEtpGHOZspUxlqXABNN6ujUhvsib7XAgwqCihpNelYkZLTljWjAWFDm6LBGzagpjosWGljQXAU7u/ey8NHgmQCt38bskUDeBsY4RNPGYHSoPUMfs1p164vc/8PDmRCx++YN//84eBvXsANSwklTaD8HpwcOVuPH6y0K3Or3+s1/8Bc0tnXjrbddg4oSiE6wfVVciCSqqQPXEj383xKVOGY7VNuHJZ8Ymg9p31wnMk0ZqVU0jNm7Zj8qqBhQXj8dFyxdh+uSJcF0PSsms3uMYvWiNQRBg38EyHC6tREV1TWcm5f8ns/lvnnjsoefH6LJGdNo5BjWng3o6g/cGoIMFrb37f6XtKZY0lQaO1QAbNgNVVJ50WlbTlCo/hbi0pzxpMgnU1ADHKrth6Vo/zkq/+cPP3PKBfALU6ez4CN27xvA7j3cURcexJZm0vTCVUR9yoSZ7Lk8YV8iYyBjdwQM4THMhlLFIQF8jYpRSLpPQAjELQcaAgUPGwBQs6HQ80ELDZNqVSXglQzb5AAAgAElEQVRMJSCYb5RixmISUrmeE1a4U2llNPXtAjFtlLK5UY7UmZTNIooryZPGcsDE8oL5boLH4g63IsxIV3MdY0ZxpY1lcWkrJl2G41Mn8c22YKmY4D5l8BNr6nAoOp/Sh9AaItDYvH0LfnP99Www9b5HaCNG7zB5gDp69+YVzez+Bx7pAagvuvhLDpXjhY2UJHULJk0cuRhUqjvf0dkN2xYYV5QIRfspnrK5pQM/evJPWLxoJl5z9Qo4jhOyfgcOVWLd+t2YNmk8KqrrhwGgNuOpZ9bi5jEWg3qqA0FsKrn1a2pbsK+kHPsPliMaieLii5ZiwYJZsJmA1GM39Cl07ZLbvzuNmpp6HD5aZfbsP9xmlPo9t/D9b3354394RQ/MOd64b5LUCW9FD/F4sv8eyCyD0Tw9VR+nap8rT9rcDGzeAew9kI0vnTsPKCwgWirL3jIBpFNZ2ajqaomu5hodE1V7nWjhzf+9ZkXenTrQJp6F99/xQMsMOclJmJT8KBizlbFfF5WcPOcsw3XgRjiL2dK3U1BUiI4JqbkxJh2lWFMYizMdFSzghrGMMYGIwDi21mnf1kaQSr/WiEiVUoY5TIUpTXBcMJmCiDCVTnuG0f/cjLY5MwmpkTTIiBgTdreR3LGY7fiKM4+bBEtYy9ylEc61p5X2LCZdBeNoFthGa1sz5UZQH41YDRNiotzhkKQKQL+degqVUSKfZTR4OoMqaOwZNw4b8slSAx+8PEAd2EZj8o77H3h0SyIWu+zBv88CVPpyJxf/+o1bRxygkgFpfLp6x0YSSP3zup3Yta8U99xxI6b0lEZtO96BHTtLsW33IQS+wp1veQ0uXDKnn0Sq098aYm6JQX3qmXW4+bWrsHzp0PR7+jMZ+hbZWF8eFj04WlmPPfuOoLyqAVOmTMalFy/BzKmTQ1/TWHf7c8bR3t6Bo1U1OHCgTB2tqix1uPhd1Ip+/ktf+mDd0Ft27PfYV2ZqsMDyZOzncLcXFnC8Hdi0FThwCIQtMHMWUFTUk5Xfo2kqJVBTS+FABu0tzSaqyw5FwR+aF1/167w7f3Sd20vfY+wrpsFtbWlf6CjrtlTUvJEJtphbChaDKNBCBm5GprTQ4z0VGM5gwZY+ApK3BdW5h8U0ZdzHYkZyn4NlpPSFYNoRBAo1jNBCpw23FaIJbdLNtmFOwArcqAyMZoVSqhaXujOISK04EZtx21gIgm5SKY0gcH3OIhqaxbVm4EwviV5gF4pxcQ4rIlggmDGRwEjLQDucGFUmLc4zk4qdTbZAkmSlkHXtE0DVUoNLH1agYPka0gBPtAeoXzgh7+Yf6ITmAepAFhqj79+3+jNbE4nopbkkqRxAfWHjtlAHdfIIMqgnMyGBRWJWn/jR73HBghl47TWXhJnooZB2RqK6thH1Te1YumgWxhXGByiNOriNCgFqdROe/NU6vO4cA6gnWDDOwhjezq5ulJbVhKoJLe1dWHrBXFx1+Qq4ngdJ3+xj+KLzTGx7U0s7SssqsWPXPr+jI7nJdsQvv/WVh74whpc2LFM/GYN6ssHOxJXfu68zbU/PPp3dPfuADVuzslHkzp86DbB6ypNSvArFnLY0A5WVVKZUQqR3txY4Hf8+ddz1X/3cR1jnsBgx3+kZW+C6vzXexCmZ65xAzZNptZo5IiK5P9WL2j7teAEzGrZSUgQqzaIyLqRxo0yxQEktk8YT0cBI0nXiylhMuwRUFTTR6K7LlC8ZuGTGhtJWWhsrxrS2MvAzlvYcroXFQelSboRR4pPxEEjbodLLXFnKgAmthMV0OqvCrRzFAKJeLW7zcXZxbL6zOAIqbQrpSKqOyrQDFTiCawtM2ZbodgVvmVQg9tkW/B72VFP8idQQWkJkAljdaVhKoU4YfHfaNNZ8xgY9TxrmAeo5utEEUAsS0Usf7Mnif5FB3Ya/e8frwxKkZzvTm8Ai/T2/cRfWb9qPe+9+HaZOGh/uSO49PwhgUWruEF29Aerrb1iFZUPEzA7R9Ia0G2KolTJoazuOktIq7NhdCiEcrFq5DPPmz4SAgBrDbn8yFq2RYpwbmlqwd3+p2bvvYLth4llL47vf/PpHfz2kBh3DnfWXJDUYEDkSWqbZ5z0rqF9VAzy3Aaitz4rsz5wO2F4oY5q9wh+vFGMK1NYCKlWjYrzku9w4n//R5649ko81HW2H1PD3vAeifmL3RyzBp43rkPcocMv3BGyRlsYVRti+dDI2jCeDGGcKzFbcDjQY15opCTAZtZjRGlL4mkJSlfKy7vPAeMYSPoWjGk8KZQSYp1WgA8a64lIlFDOCWVpYBGWVkVFtXEqfCjgch2k6c65USkZsxSCZzToDDSJJpLKErQMw7s6LL+SF9qwEZW4pTRJSOs6FTzOisFVXM3Lnm5gnKuNRqzLqojNMjCKPoQQnBlUpWN0pOMpokSQ3P/iG+dOwiTE2cuUcR9vRGMR88gB1EEYai7fc/8Cj2xLx2MqXANRDZVi/afuoAag5IJpKZfCXF3bgykuXYvy4gpeYmwDlULqkswC1MWRQX3/DlVi2ZPaQhA6M5jOSTTKSJH6P9Zv2oay8FjNmTMXVV6zAxPETQEqBQ2njkbYF7Smhm65kN47VNGLLtr26qrq2xrH5HwNmf+aJr3z4vNe7PFWS1EBJTMP5figVZIC2NmDHHmD7biCeyMaZxmLZ9yg6iL7FSZCfWNOycoVMZ5tJ4NCWeJD6uxlFNx7Ky0aN9FM38Hi3fdgkikRmakr5b5Yw93kun8gVIg6sQFjEZ/rGtlUgHct4aRGwAmghfMMzjg+bGW57ihstJZQpiqelyjgogFEZA6MtQn3ShC59KwNt2cpWnmYs0IT5jONLrR0TNwQeuaIA1mRUaY8xzZWGY1TAmMcivgm0m83cD9xAMamN0I4RTEohGLM8BlXozHCmeYscZrgDoyPM8i1ttAVNIv3KkdCWYFIIqyvhsrKCmGggyW/6UJKSpglLKoh0Gk7a104gObn9f3vBbPwhD1BPfY7yAHXg52xM3nH/A49sT8QTlzz43ntejEElgLq5B6BOOPsM6glShDL9Mz5sywoZseG8CMxUVTfiqV+tC5OvLlx87gPUHENFya6p7jSOVtTh+U170dLahQsXz8Oqy5YjGvGGJIRiOPduoL5pbynGtqOzC0fKqrB1+56g7fjxY8Kyf8gj4//j8c++97yVpTpTBvVUNh8MA3uy9vSbwhYAyUEdLstm5yfTwMIFwMTiLFNKzlZynhAV1daaZVeba1vgmoo2z6p9/48/c9uPBzoT+ffPjgXu+agZx0Tqb4IAWmXk570ilhZgVsaHL4QxMS8juWE+NxKWsCRT3PAEC7SC0oZpdzxTBCZFkqlAaBX3fESSjgpsieNCmyJlKD7USMM0ODMBie9Hbd/tVizKmPRFknm28BWJmtpMMx+aIp+EZ7SVCqQWhinbC2JpKouaVjxgmoOFgidcCKOYMaKQSaG4jfHueGuqd4nHjRVhPKDY0gKDwBhlBDdSGK4swsSWScUd63AsZjfk9E8JlCoGHvjk3teulLBSkpPOamlnJ55ctZzlNZ1PcUSHFw2cnWcjPyqA+x54dEdhInbx6ve8g1GsXuji7wGo73rHLSieQOL4o0d8KBd7NtybRyCm8lgjniaAetP5A1B7/xggsZZUdwr7DpTjhc37wLnAqpXLccEFcyF6ktmGex+Gs3/aY6kk2to6sHNPCfYdKE35gTxgjPnAd7760PrhHHu09k0M6h1vAhYvygrZDxZ4DsSe9tfPQIlVlADlZ4CqamDrDqD8GDBpMjB7FhBxe0T2SbUBQLILqG8GjpYmIfxKP+qUP61WvuHeJ+/KV+MZjWftQx+qjwUBi6etxH/4whQGQlyruLJ5oZFu0gQmYNp1tLQSUFwrqZWUglsaEVuR/xvGqExESQGFIldIlREmMBx2kNFxi8EUQvlpZSxtVNq2wwx8W1uKgplUTBkh/SCuHYKlitmSelTaYZLbSnuQUBLaDZgOLKGUa5gXUwGnIAIjNAtgjNTGc10Cs1pHpVGAYeOcaZEJkYsiAnaEGSU0l4JBO0JLB0wyZYzNmLSESUddVhuLeJUEUKWE0AALMrDTGdgZBSvIwEnTv2l06RS+eMklrGI07uNomVMeoI6WnRjieYQANR6/ePV77zkBUA8cPIINW3ZgNALUIV7+Sbs73wFqb8MYo3G8I4X1m/di194yTJ5UjKtXrQj/zbrNx/6lKSOhoRlbtu9DWWX1ca30HzIp6xNV0zuPrluzZmxnip3G9gykgzpYNvRk9w2mPR0pSwBVx4A/vwDU1QHFE4HpM4CCBKAIDSCrbdrdDRyrBhobJTLtVSpuN/y+cMLMD37zwzPP+3CN09j2Eb317n/qKC4qVBcqKT9hNFsayGjcMMO1xYKIp6TQynBufCQBHhNBROjAQGuLy0BbNnMpGjTeLdO2QKEhnVANP2kZ1zJaawUbOkBEQCqhuKdUmhlTZETgAkyxtHQcJYltF7CUZYThDsWuisAYYSzRrZVLYFEqLyAZfo1IAhSKirQS2vO0DgNZuwPNYMOzQ/pGqbhmokAWOeOKVkYsHo8CksqsWoC0GVce6auCaxL0t4wMHJfVTYh7ZVJmw6aDADZJTPkKVjoDhxyFGQnbz6A2GWBrnY3f3nUh80d0o8bQYOfGt9AYMvhITfW+939mZ2FBbEVvgLr/4BFszAPUEwzqrT0Mavipdh5f5EqtbWjGX57djmM1zbhg/hxcunI5ErEIhBBjOj6VtpWAEYWQ7NlXih17StDZkWxXMvg8tyPfa6uZ3vjkk3eNXYHYQZ7bvln8vQovvazs6WAkpE63vaE9SAHrtwB79gNeBJgxExhflK3+RLl6PXlSYXlSAqddHe2IqL0H3Ejm4fETb3z6sQdZZpDLzd82wha47YPHF0BYdxc7cqllzO3SsEDD0sz1tWUZ6XiWtCkjXzDNAyZtl6mIB5mG5QsoI7rTxvKg7UhGazuidSBMQLpQ5MS3ITlpn1qWsjyjyANPbngeJH3FXBR4Quq0BnntI66vmGYqaTPluUIXMm0kBat2BUx4gVTMY27GUSkHyuKaRR3otNDG2NJYGRbSqa7jKu5zQwWpQGoALoq9KfFrPMbhEXNKZUwNvWwkJXLZnCtbK804U8IRXXGXl9uCdxIYlQY8k4GtAlgZqe2uFDypuSB3v9L8j0ErnsiL9p/8sOYB6gg/yCM13H2rP72roKDwogff82IMKgHUTVt24u9CF3/BqHLxj5RdQga1qgFP/fpZvCEPUE+YnT4IpNbYu/8onl2/B4EfYPmyxbhw8QJ4nnOOAFWG9o4ObN22j8qmmo6Ojmpm1Afjtlz7xS+uaR2pM3g2xjlVqdPcfAbDgp5q7n3b50j4IAAOHgJe2Ax0p7PAdOqUbPJTDpUSc9qdBA4eBDqOU0nLgx0xXfVPriz4+Xe+ePU5vTdn4zwMzZiGEeX91g9WTkmwxNe6PHeazc3FRTA+Jf+kISTzlHStjLF8ZBxbGGXLIJpxVERApSMi0EwaO0KCUUpZ4MhoYTxPIlAkgg9jCxlmynOLqYxxVJTJgHtUrtQKVNDFjO0GMeYYkWEyKOQk6GQimZRklq1YxDGcpbWjFBNMBdLXRhqBQs615Bw+ufNJSirCiSsNxzcFvmIZy1jKVtpxDEkFSOkXJCZHF0djzgybaekIrhwtA4u0UjnTAtnSp7alNWesO+rxUnDuq4BzX8IKXfoBufm1S2xqxoeTSkN3p9EUpPkXbr2eVQ/Nfpx7veQB6rm3p+GKCKAWJoouWv3eu0+4+HMA9V3vvAUTxucBah6gvvzw56o1bdi8F9t2HUYsGsUlFy3FnDnTEfW8sMFYzvjPJuFxVNfWY8u23aivbw3aO9uf+b9vo0d43JR993MfOSc1NPsK9ffe+f6A6WBfo376u5dc+YEE6huBPz+XFdOfOjUrtk+lSwmY5uLOM2mgpg44VuGDyzoZMYe+x1PqQz987NZ8vfJR/P1024ebEiZa7HrdXT8TzIzvjPELxkmtopqkmOzAMK4y0UByo5QbBNpyhM9tZdwAge1ayve48mxLwUijZcoIS2itIzpmJ5UylvECIeEEmnFI5pDeKFcWS0vBbKm5bRKmO+hwOItbNqmgGi/GpEpnSB0VyhKaGa5YLK0dH9rimoah1HzuWDZVBqAXYAfa6Ag009w4MlBBDEx2QzncAqFaR3hKWcaJzPCucwSPE1Z2OfOJSbUYpDBMk6QUsbeU+aRtHri2qLc4azSGCz8Nq1uFLn07Q1n8Co4fKDvZzb0gMPUdLfzzqhuVd+Vjqvs96XmAOoo/AF7J1N71/kd2FxUULH8RoDLsKzmCzdt2hTGo5zNArahqwC9+82w2SWrRbJzvLv6+54xAHDFaDQ1teHb9LpSW12L6lEm4/NLlmDhhPGzbOusauq/k2QhBlchqxFLi4I7dB9Da1lnX2Z18HIH+obNyUsXj731v8ErHGE3tT+biPx1GdCBQS++TbBT9BmhqBvbszcpGRWLA/AVAItGToGUAywJSaaClFaiskEi21BuPHy113Yk3/+jhpZWjyXb5ubzcAvevaZkRKKewO4lvMM4XW1HhwlJacChPyoArZWyLZxi3tLG0slwdcGO0b6SMaahCprQqjGoOW0skNQzTts0Ms01gaQlQUSlpaZKICmytlA1DVZw4lRUNHOk4UjnaN+k4D4S2jApF+LXS0MZKe0YxrcGU8WwTcEuzWKj4BAjP0qxbG2J4TcTTmqchPW1MMtCerxgsOyAm1WWWNjYV6dbwI8KJjIvOjxa4SygsgCumXCalxwUBU20LIynzkGuujTbKdp1jECypNTfd3XDTAWxlILozoCx+0Zk00UzABLGovsS3mhL483svY+fU581QPTN5gDpUlhxl/dy/+tN7CgsKl73/PbkkqTxADb9AGUNFZT1+/pvncOvNV+HCRbPyALWfsxvyjEKEFacOH6nGC5v2oqMzhcWL5+OCubNQNK4wzPg/28UeXtFjxwDBBNra27Fz70EcKT+mmltaS7SUn+c88vy3v/rP5a+o/1HU+C2fMOatbwKW9JPFPxjX/mAE+20b6OzMykZt2QG0tQMzZ2Zd+pT4RKHeBF4p+4SAaX0DUF/VBocdaiu02h7+r4dv+UJeaH8UHZqTTOVvP9o2RzG+1Pj6DqX5vV63yPAIlJPQgREUI8qkG9OBSWkNl/uC2ZpZOuAxqXQAjeNSxTxh7HGWkZmUijg2FQtVJkJy9hTbyQJoaRwhJQ+gKBZUR23iU41jsQCciEqjPC2lsgFhSyW1a2xLKhG42g80OAnz29pYHJq7GeUElgHNjXEqQWosSuu3NZittdQSJmN0XGpNQc4FUUf5WoF+w3YbbigLKj696DLP4dNcF7YwWgqA9FBDwShK/Xe4Q4UAYHwN2xadTFh1UnLjB7DSfk9yVAC7Ow03o4yVSiKSksykMvgeb8Nv7rornyjV33HLA9TR/3lwRjP8u9WP7plQEF/2vhxAZVmAumX7Lrzrnbdi/LjEeRuDmgeogz9SBOiF4GFJ2hc27sH+kgo4joNlyy7AvFkzUZCIwYC+QUaPZNngV5e9kxHQVhIVx+qw98Bh1NQ2JVta29dqob7qpq1d3/72xxtOt8/Rdn9vBpVcoCdLCzwTsEqxpJRot2M3sH0ncDwJzJgGTJoCRDyK4cu69Om+9nagphqoq+2GKyuOR0TrD+zIqz/0xBqWHm02y8/n5RZ4+4eT0ywjL7Is/C00btfCChgzyhPaZ56UVsZo6SKIxWwlfcf3rEC53JbMS4VudZUiDtSYqGNpzdIqA9+4kYhvG1CWvUpA+5ziOo1WnKhUldau5QTGYcblTMrA12BSGSuiwaALXCghpUm7BcbiGekqzbTLJFISwtIqsKHBmPYapYHHlPQkopGotCVY4ChtC0tTKQAhHUVcbifj2nUCY9yMcZijlKYOgGjCmeUWeBd6AnEqcOVwI20IxSk4gHz7ShgulNbZ6ogpZuwGqaHSGe34ktsZX9vpDHco0qErxSKpNHPSpI2awa9NgN/d+2Z2JH/eXm6BPEA9R0/Fu1Y/uqeoILFs9XuyMaiME0AtxdZtu/MAtbIev/jtc7j1pquwNM+gDuoJoNhUEgGiBLPN2w+ESggTisdh2eIFmD1zGhzbHdNlUxlY+Iyk0mkcKi1HyaGjqGtsburs6P6J7agffGcCtmHNmjEr93CqJKmTZe0PBqxSHGlzM7BuPXC0AiieBMyclnXrE1uqqBIUVYEKgIoqChvR8DtrdIJVPuVFrc/OxpW78lWgBvUInvWb7vx493TD+BttnZ6vncwHXB0JmCOkQxmVQiod1YFnuJKaq4iFDDdRHXEykrLbtcgo7ltKGcOE5aiEB0kpUU5MBynjaJuZQClfW4EvPZ4IbKG0FfOlxY3mPtMsonzbtuEzKbkPIygJyhOaJJ+KMkmdtrnptm1KVJJMaS7gBg7S4JDG6qCYU2koEkBEuYYVITKV+FJm01xdx+ggBWNczSyKR8gYcN9QJQnNjJLSYzFXJyLFhVcJi4+LGBZQhIDDmCQBCotR/KkBNINRBgEPBf+TYE5bhhjUlHZ9ya10oO3ubhPJEJOaEm5XNzxpsD6l8en3vol1n/UNHoUTyAPUUbgpQzGl+1c/uq+wIL70hIs/z6BmhekYCysp/fJ/ng9d/EsvyLv4B3veCIyQqD9pEtbWt2B/STkOlFTCiUSxfMkCLCGhfyHCak5j9SLGmP66u6lsagMOlpabI2WVTenuzFPCFU9868sf2zoW1zaQDuqp1tRXeJ8ko+j7uDsFbN4O7NwDODawYCEQj2eTn05k5xugvh4oLwfS3RlE9NbDNut49wWRWzetWZN3a46Vs/Sej7QWyk7r9kwMr2FWcDsi3BKWpVxpfG6gmJPxbc4DmxvtuvADrbUd+NKKxiXVHnWp9KdhhoJTyT1f4FDJUctnkbSBkb4UjGJVg3hgAoc0RbmRnDuKO4EBt3yj0oySr3zPIU+6tjwRZvbLtDaOZSnhSGNJpXyHgwVSk7aVFkpNUh5J9SMd71K2cZSIWjqWyZiUjkApSbqsxhOusnnacPoPBaN4YAJBcdJGBipUylI6mphgRbzZBQlvIWOauTaXFsj7TwlW2nBwo8GM8o1QHFpK3sIgMsn0/8/em4BbdlZlwmutb9h7n3PHGpOqJJWhklSKjJAAQRRxgCaCChj89RdEMiCa2G0rP4LYf7WtBNsBFFSgQZBu7R/T9qOoIAgEAiGBJDWlhtQ8V6WmVN17zzl7f8P61t/fuSlIAsqQulV1i7Of5Kl6njrn299ee+1z3vOu9b6LTFbyew+mW0MRgpi6waJTS5kZ1Lona1nkC7f/lP7b2ZILp3KfA4B6KqN9Cs91yx13rRsbGV7+yycY1D5A3QIPPvy9y6AOAOrJScAM4LKQyvsIO3c/BqvWboFtOw/CeYsWwLOvWQ7nLT6n37s6W9X+/TyhfncZTExOwfYdu2HVI5vqg4cOrxeATxTc+sD73vcf952caJ6aVX7i7SyvejnB8uXTnqMnjm/H8/TEazPwzCIo3wBs3Axw3wPT40kvuBDg3IVPlPH7sZs+x1QXYNcOgUOP1WBxV6fkTbdf3v7Jjw0Y01Nzz0/WWVasENoQOq+0Xv6dG7I/aYRbGpQvMARDMQmK19nMlNAXeRpp7iPV2e00JVCacwMqlSoDyNzumVoGQ6VDzNObbNlEyVhylAPU4pMCLqXwlEVHpGLJeVwTS7LIBdci4yrSZMaAArriSCqlzHxKiKkEltLq6BOAMSUzd5NlEhnVSchJ6pBUKLEsAmJZRedU7htIRTMlBQXoGZ2V/6n/IzvWiYwS8iLMSpoKcGR8zvcZY85rKRCFmAwBAwITMwrqmCSpLL/yDSADhuDM45wAszjKZ5upPnMqZR5/2m1S2a2pTAk7LsEb5/FAyf/N8nUAUE/WU3yGrXPLHe9YPz4ycsUvPQmgPrJhCzy0cgBQt+86AH//TwMG9ZmmbC77Z73/xGQPtu3cDyvXbILDR6dg+bKl8OxrlsHw0DCEbII5S48TZf98DY8dPAIbNm2H9Ru3dnq1u59E/ualRy798Gtmicn/T7ytJy9/WQXXXj2tpP92gemJ12WRU2ZN83jSLIDavB1g4UKACy+cZk+nQX2/CwQ63TwBCmDn9hrA7Y2jds/dreKHbv3AikEZczY+Cj/9S52XKJVuNlX6YSC90LYz842RnLAqwbOKPDxKPjU+tkwK2dRUK+KWTxzISISCtemxbZnEkPwQEhdlDBQ5KQ08PKS8Dz5bosZkrBdMqQSM0qLMeSboRpYSwAypKBhT4QoG7UTloaOtTL5iEoGUO0I1MSTkmNCIUJOGbJUUGahVk7tNUuFZcLzfMwqxEVasoCCTTOHFGyPUNLkpRQC6oNHks6NJJXdKsYXVc4ZG299nFBUo2ckKORueEOfh0dkVRBMLUvRCPlI3JKqbCOhdMrms3+1Jmf1Qp2oq6wxaI+penXaHAA+da+hdA6upb3w6BgB1Nn5ifBt7vuWXf3fD2OjosiczqNMAdS3c8nM3wfj40KwWtnwbIfiGl5xgULft2A8f/+SX4KaXvACuuOx8yGYig+O7jwAh9pXZhx8/Bhs37oaH124GIg3XX7scli9fCip3guU5lrP0ODH2tder4cBjh2Hthi1p86Ztj6ck92ir3/v+P/6Ne8/0S3vl2w7wjS84h374RU+Ilr7Fhk8A0xPjSQ8dAVi3AWDl2mmgeullAONzpv+e/88AtnEAR48C7D8gMHFwdypgx/a27r7po+98+WfO9PgM9vfNI/DKX+/dmCS9sqL4U6RgoYjyuURftVQY0eACoFAreVMB1z75ea0QNUKqvaSsdIekkiHlJdVSDusQUuIRRF+V2caeWCFEbZBTN0YcVxGDSQU1HoFAVxkdP3sAACAASURBVBiz95MOESi1GRX1q+gaEitJqARDNB50GaKOKKQodboSlQJo2SqJCqkAgAaRi5aCUnz0mrOFqjANp9DpUSu3zhZ5XcCMLyEwkFASk1sJPIhEsVAJsxeaO7LEVq1rCuSh7AZgKROlkFIICGBFpE+4quhRJyboBpmIQYW6b8yPRYiouzWUjWOb/+zVWMYA0AR691ADH3vjGwdWU0/PwgFAPUs/mW77lXduGB0eWvZLtz0hkkKEPkBd9QRAHRsA1AFAPbnJn8v+zkd47OBRWLl6C6zbtAPmz5sHz7/+Krjw/MX93tRZXfZHgjzDe6rThV27M2O8Iew/cHAXAn0iofq9v3jvW/af3IievNVe9euPHDnvsivnvv5n+/PB+8e3EkFls/2pSYAHHgZ4ZMP0G5ZcCDBnDkAGAX15c27Cy565+wH2HgA4dugYtHHbjnYx8bsX6R/+8KCcf/Lu4ale6bVve/xKA/jKOuiXKdDXYiv6PN9+2PmgIcWq1KEhClBiUlVwmFR2fWJTCHNMUGkXMSgmZaKyMVhFqcXSMFEQDXG4SlEggC5yj2lKdshE4cQUfMrK/2SF2cQ0wpAKLDj3lkZizs2fGjDaWAAtkBC4KzoEIasTBRBmEoWas/to1m7VCbA9TlGjZs+cu3eSAIlqAhRa2FqAmB9sa0Gmsm+/yj+5JLZ72ZpEHCuxpCSawgxX5bVa4eWVUUmydQmC5EchPxwhiGYA8l6rJjJFxo5zxjUOTB+k9qRsMkjtSVW7VDRe2W6PJ2LEr9ZIK1b8wsDJYgBQT/VTfprO980A6toNW2DlqrXwhtfeBOOj37sANZf4P/5PX4KXveTGAYM6A/nZFxnVDezdewTuf3Ad7N5/FC5fugReeOOzoV1Vs5tNzd9YmTFmhomJKdiweRs8tHK969VuPST5yF/8+W++ZwZC+oyX/Olf++yH9fwfev3PvRpg7gLIxjhfO/41EdS27QCf+cJ0L2n2M12wACAPE8tseWZNM7uRy/k7dwAcOeRBx60TLXP0Txeape/6wxWLjjzjTQ8WOG0ReNWvHVti0LxSq/gDxPEmVDrbP7EaSa5giUUSr1rKR6FUFcqL9amCGEgwkQ5Cusjm9Qk9+na/DUCy0b4rcmm8kFyXD6AojQhn71QJKveYeo6WpNDWKUi57zTq1LBOHlpURY2UPAZWllJmS1UUhkpB0jEKJiEFMhwj5x9gjZCU1VDA0EPSnLgkUI6jNdR/HZUFe5+wqjviyDB7T2V7PDZNQ+W4MLncjuBRKSWeGQlUKnUypj3vqtLQZUSgRZLQE7+4WZTK2DdPbO16MpERnTNNiDKVwWmvpiIE0JNdaUVG1elyq9tg6SJgtwsf703SO//rW/CsnGL3TJJ4wKA+k+idwe+95Y67NoyPDj+VQV2/GR5a/Qjc8j0OUAcl/plP3AxSM8GQy+Kbt++F+x5YB5EBnn/DVXDJRUtAKzVr2dQcvfzBmemTED0cPXocVq3ZKOs2bp1ClIcS0B//tz9+y8dnPsrf/hl+5j98/samvOKL192wQN30I9MgE3NT3pOWyAIojgDHjgF84T6ArTsAFp4LcN7iaWD6ZGV+BgH79gHs2S3A/rC0Zd0/jI/P/9Ujl1y16+7B2MZv/8acga+8ecWhodQ1r0GgF0FBr6xiJCQIxYjySfs0J2ETtQRVUqhiDKhMMkMYpOsEo0p2jCLm2aJOeQUcCgpxWGmXVEqFFZd9TLHEbHYfbUIJxkULRYIYExgbUeUZTBJU9jgVl0qtYxlKiWVgUS5ZbROLSbkUQIUNfQBKIG2Z7iPyDKKNSYJFUjAlBlhCpaNtAEzN4ksvEkupKkiRotQMYERxpSx4mAKxVvIfYBmUElGtArhmLNgjjFTzh1vjP4AoZVbvG6X6NqohNxSAphhYZ2up6FCHSE0dsNM0qJ1HM1n3e1B1t5dazqPNLGqvJnINfBFG6f9Z8XM4GO37tOdhAFDPwA+Ik7GlN9x518Y5I8OXP6XEv34zPNwHqD8GY6PtQQ/qoAf1ZKTat1wjkwwTkx249761sG7jDpg/fx684LnXwMIF82DaX3WWH5L7yBzs3ncAHnpog+zZf/AIIv4Tg7xzav9FW+8+A4RUt79fzPHNX/grGX3+zT9+UwGXL50u0+caZv4SyF/t2UR/zTqAB1dDrnbCRRcDzB2fngB1YoSp9wDHJwEe3cjgul1oq7XbdHvyh//6N2/aPZgCNcvzGABuvllUcWnvmsDy/Vj631IA7aGAjlrKmUoxpMaXBtih+BYkpwWTLXOdnkQ6MVmjQzGSlVLoKyVcYO1rE51VKra8D0opprYKpoWRQ5NUSIwFyCi2YsxqK0WS+gr/JKrlwrBSMQ8wLWMrACWQsmEtRVLaJrE9FjZCnlO2CNCasp2VmFKJJ5NExZSnT5m6Fm+VGCmT5zrbSSWrVC7/g8s/kyuXeV0onBJQAJVS0isieMhbK8DlR6RW0FYJaaSYX5bta1VKc5UBYibiPAnAg8qPiWvANj5lBpVcDbmD9Vi3Bsw9qL0gpjvFrZBQdXtYdetUNUFx4/Beq+H3VrwJd87+DDq5VzAAqCc3nmfMahmgzh0ZvvxNX+tBBVi7fjOsXLNuGqAOtyFLH7+Xjq+LpA7AP/RFUjfCsoFI6pSlQGZU9+w9BJ/90io4sP8IXHbphXD9dVfBULvVn1Y16w8R6PTq7J0KK1dtkGMTkwcT4F8Q8Z9M7L/0yOkGqr/y/+6/YH9376f02FXLnvvcEi44N3s9TpvoHzoI8OAqgK4DuOACgMWLpkFp/ojIvyGybdTERPY0Fdi7exIs75wcsYf+80ff8aPvGgDTWZ+5X7uA23516lkC+NxJFf8LQJo30lKNBohgJRobGwBMaLQvyIUWSTDDNpDCzHcy+cQqejbt0kUUqUrnWkkCIObXuzy3vtLtAFVkHkEW7wPUAcxoGUpsEiWMPhJnP1KqkFViHi6JY5RopRBfMhtoJFtBtbFIkFvCc0+qRK6lkXlax15KVFR55innH1+p7UxSoMQ1LlWVTbGKwl4jKBLoZYYUBFQPJouWFBGg5R1yS2OtNVYMwBChUdg3lMq9qbkfoD2nfWll1LWkCFgScX+sAKCP0figdMi6roQ6ekhdb483vYR1UKrXg8pH0d0et2pHtutSMdWBVgJ8MDbqtX/wZuyePZl0cq5kAFBPThzPuFVuvfOuR8dHhi8bANSv35qvA9R98A+f/PIAoJ6GrM2q8MQC6zfthHu+tAZ63QauuWoZXHnFUqiqss+ozlYhVQ5ntqYSFDh2bBLWPLIxW1Nxr9esiSH9Zku5L7/nPStOaxnvV1ccvHjX1MZP92Tpxe3RRViV2Aeo+efBnPkAixcDDLWg345xgjXtdgEOHgLYs9eBO74ltvWe+8bnvuwnPvAbOHEaUmhwyhmKwGvf/thFRPhsH9q/JYjLCKKzKNxS4NEkryxHAgpS6FiUtR8SE9BA8iOQUCG3j2MgCt4Ym4ZK9JxCxqGuJtdkH48xNRKNIY4mxqriWDOlkkJ0pKVSKqBEzlOZiqpmEJKmZ1nPlUAdhrGh0ndDQvS9pFuUtNaM0bACDx3HaV6hozUgdbcGGFFSxsg9k+2iQCplRaIS5UhiBUlnhVXMrlMV1NpjyycCS+LZY2ZWvU6UQJFllgaTylZUqJGUAkRGUtZeUBXF4kKZxcKoIxOGyJqTkPcq+53mrlgVHZBj5SZ7NNXJJv0eTK9JpQtopnpQ9RosG59Fl/gJCfSX7307PjRDt3bWLjsAqLP21v3bG3/DHXdtmjs2cumbbv2/pked4gkGdT3c+tqbYHSGGdR8vjONoO1PuAGErTv2wT9+8n646aXPh2WXDmymTvUj0Dd8R4Je08D9X90AD63aBO1WG66/7kpYfO58aLWq/pZmNVBFBEkJ9h88DA+v2gC79x6c6PU6/xAaeW+1yK//sxUrOqc67ifO96t/JNXRo1/+hSa2f31Kll5UVG1YsgTgkounS/6ZLc3gtKkBduwCePwoQHN8b6rUjs8XNv72f//tF987YE1P192bmfO+bMXREa1heXtS/xKi+mnW4DRAmmuCpxZ4IQwtK16iJIPRYQFRk2EglwQhUUHBavKKJcxH7bCFEptubds6eotxxMegI6aiUoHbEm3hE0jhdcpieMNkJeS29Up12VhOQVlGlgTt3C2quWAlvpbIpoGs6I/cCJARHSMbMmkkq+opct0wpTETtPdIFSUXnSSfcLSqUtbqO1dAoRX2lAeEFnrMvaWACjLUZQRVYy8lVQ5VohukmjtITVTKjkBIQSEk1IU2C4bGX4hEYyRGOcmANGHdcBE9KZ9QOZdMSgSdnuo1QeVuGNWruQxRTKdWRa+RsnZSTExJWxJuOFyrH/+rFYMe1Kdn9wCgzszzftpXve2OuzaPjY4sfdNtTwWoq9as74ukZhKgZkCcwWlRmDPKY3QAUE97Wj5lAycmUh04dAw+f++qvtn/onMXwnOuuxIWzB2Dwtp+G8psBap9o3+F0NQ1PLJhG2zYtAOOHZ840Jvq/LeU4seWnPuizStWvDierrty+9sOn1vjtl9p4tw7G31he2RE971Nc0l/agKg0wPodSahSo9uL1P9O61LX/Q/PjDwajxdt2sGzyv4kyuOj1Y1voRr+O9cpaCN5RElvqIQaVi8t+IrxDjurWcMLOKDtHOpnSQW4CEiaw1+RJu6xMTUSg6iY2mJR8Q4YonLBkOMIjzSBGybUKLhPKaUEyQfOY5Try+uYktsyYr1jsHFmPVTtrQ+OECrJXvhc0mUOnl4lYC0SRKVhjPj6QQSW5EsqY/K9hnUnmLIAHSEp6DXK6jQGqGw4JWHoDuq8C3MKv6UhjB3kgZbY5FpXWNSnZJR3AjaNqnoctsqihbT1tXckZGxGzBAkQem1t6bJFnwpEyMkF2vVC+C5kixM2WOdmqwzrHpZj/UgKZbSzXZlXY2ku018n4RuOf9bzdnvJ/yDCbhN116AFBPdcRP0fn6AHVsZOkJBjWfdu36TbB67YZ+D+rocGvGelDzrPvdew/BlVdcCPPnjUE2cj8T5rN/DaBu3wv/+Kn7p0v8Awb1FGXkv34aRbmXS2DT5l1w75cfgYmJLixdeiFcdcVSGB0fBkMG+MnzOU/7jr+zDeT8B0I4fORxWLtuC+zYtU+OHj26MbhwlzLVfR9875t3fGcrnrxX3/w3ohZtWrv0cLf7tk4652cTLdK53IJ8NBWwfeewqn8Hhuf+44ffet2RAWt68uJ+pq30k/+hvrCt/JeJZLRnUmgVFErUaVjHhiuOTBQ1gbNArBGCVsK19TKStLdtSBVr58gHYyCaId8zgtla36FKHAHjmFahFE4eIGgSNlURapNY9cv73pcSU1X6OJFnR3ENI0pFoiIJh6RaKmS7CR05a5LSlJHUFp+ykE+nInejiKmq5Fyvb0Q6Si6xbsFUdFAgYI9rbKsWAgP4DJeNVmJIjnaDsoXO7Cki5oZSkIjHtYIKbWKM1RD5zKuGpEyZcrGfsLYUk6OhkfHzWkovUcLzU+43ZUHfSOGSouhBZ6gdI1Ddk+id6XZq5G6Pyyagrh2V2WbKOTQTNRqOsJM6+O/+/J147EzLi9O9nwFAPd13YIbOf8sd79w8d2x46S8+UeLvA9R1m2D1IzMLUDMr9siGHfDpzz0IhTVw4w3L4ZKLF8PcOSN914CU5yyepqPfdgAI27bvhX/61Ffgppc8Dy4fANTTdDeeetoTZf+6cfDVhzbCqke2AJKC5ZcvhaUXXwAjI0P9+vPsZVMBMMvmU4Jd+w7A2nWbYd/+w/WRo0c/n9D8obb1qg+9a8XjZ8TNGGzieyoCP/PvDy6MVHyUSK5oWTWeZT7RUGxFdEWRWIaCH/LKU4aLQ+JRMJUmK+k5QECmyodhtBGDd3Fu5VADL1SxVpJSNl7CjPsQEw2Bx66kQldBqW5AlaVHwqggzS9MOMIpxZbmdt3laiiLoVqc2VcDIHF4upQvtU8iebAT4/DISCiyjMlF6UkWO4m0eh6UzsYUGrk1DMge6+Apg1lEzD0IlFKBXWWRa4/DWlPApLJPlUo9ytatGNrUEadUkX84R6VBARtDFlHnbm2vGpIINKcYu7xQ9jJBoBjFZNerns9/Ugas5Dzp4AW7XTPV6YnzDkynxrJxyXZ6VHVqqXxE6Lr0F9DE933kndVAxf+0J28AUM/Sj6Jb73jHljnjo5f84i3TJf58rFm3CdY8sgFufd2PwfBQa8a+7JVScOjwMbj3/jWwbds+mDtvDJ53/XK4eMm5MDxUQYy5BeDUOwgMAOqZn+x5GlU+Dh45Dvc/sA42b9/fB6dXP+syuOSiC6AwmU2dzROpEEgh1M7D5i07YcOmbXDg4NHHJo5PfrTU8L9+9PCyla85A2ypzvxMGezwZETgB1dIOZ87v68gXa453YhZpES5sVOaMuhYxCboc7QvSxN0nSFYhnAlF8isWilaMp51ZGN6rgo2FAV5aOmGlKRRCj7bP6mEkVUIqtBScnQKRxjA8bAPAZVOsZ3nKyH32Ei7iD6r69tjMYgZFozEZYZ7CsQZStZzMjEmMXmUqhXoi50iiFKisUZ2CqEoMCCSQCUOg1a1h6KFBAagSUmlymJihdRLOulELSbxnWi4DMJKNEFG4UkhRoWs0GFAbUpSCagb2GJLc5fFzg12TruszjeczousVNOIjiIqJY3dWqwLopoayTfYqWtoOl2lGy+2U0NVN1J0GyinauxGln8+WKv/+Ok/GKj4n57TA4B6Mp7yM3CNW++4a8v42Oglb7r1p78GUFev2wxr162HW1/3chhuVzMKErMaOyfXo1t2w31fXQ9Hjh6HSy5cBM++5jI4/7wFYLQ65f2pA4B6Bibqv7KlnD/5h8yW7XvhoZWPwuGjU3DxhefDZZdeBAvmj4PK9MssLvvnSkN+Ph4/PgnrNmyBbTv38WMHD25kx+9VLbj3g+/+rY2z524NdjpbI/CKN/d+xtr4I6M+/ZRRogIpX4w2LgFGKEtf1BzMkPgyGW+IOKmYch2jTcHrQnmlVBwact7lflOkZiGJsyVGLtueQkpSNEGZGICFR7EKrHJpvgqeQywyMVlwZlcZpWErBUfNqRDHuReVipKTE2b2MrfIpXwGzm3px0yCsSkQ1UrZGkp5hXU7s6RKcgk/sCcsNGWOFkGhbhplSpOc9HRSWY1fgg6WYkgqlIkkoiocSbfds7rfbFT2GwzycKpGhgnyRKl2ws6UWAIPnrRyVku7F6t5Q+2rCdS4OFNmLbJn0T0PJkRAV2M27ceeI+4ep+PeCU3VqR0i6qkutPpsqk+u5+muVNAH716Bp004eabm7wCgnql35hnu6w2//I5t8+aMXfSLtzwJoD6yCdau3wC3ve7lMDTDAPXE9rO/ZQYau/YegtVrt8CmrXtg4fxxuOlHnweLzpnbn2hzqsr+JwDq1m174ROfHpT4n2GKzfjbT4ioQmDYs/cxuO+hjbB33xFYfM4CeM6zl8O58xdAHqE9W/18+x++WZEkCY4fn4JtO/bC+k3b/O49+7ciwf8uVPGx9/3Jm9fNeKAHJ/iejMDr39w553gXf6wq03/RiseoRF8Y5U3pAhjyiDpUnhwUMWqBOGQxRsVJqxALNLEgDNJyrjAqligNSAyVYMwEJJTIaiLFolARKw7esB+WMg2R8Y1xnPJo+xJ4CImjizGzKNZqdkWLS26kNUTReErGsTjj2FoQpySp6ES6w6loATjNuYSfMSOmIgsdKsIUKLWQup4pS6NMLSYZAFUxpiZRHbViixmjYh2tInQqm1WxihoMCKtCmzpCHVHXopVCQ60ygqRIwRPWAco8GbUWpQtMoCwNL4Lx56QorV6TlCSiEEXVAXVscsk/GV+r2vVUPTEFmC2ouj2pmuyDWkvZ6aWGRb9zogt/9sn3oPueTMR/46IHAPUszYhbngCob3wSQF217lFYt+7Rfon/VAHUHN5poEHQ6zWQx4w+vGYTHDp8HK67+hJ4wXOvmi77P6H8n8nbMW19hbB1+1745Ke/Ai976fPg8qUDm6mZjPnJWLtf9pc8wajbZ1RXrt4MxydruGzpEnjOdcthpDUEcTazqfkZIYIQIxw6fBS2bt8N6zZs7R09dnyl0Xg32fjXH/jDFYPZ9icjmQZrPBEBwd+46/iSxyb0//RRrivHomOvWKN2w2O1R0Imate5TiEquLFEXGKGaT73lKaCrCuL4MSmaIZMIwSs2LtRLYETsR0NIXaA1TCGoar02UKKDDrLKQVsIikbuE0yUksgaqSNPji7sC94GnUTDEZJ2TbZFyqrrMRxT6ytRKxLhWLMZvu+Bcg1YqqBULdIeYs43OQOM5hIUXNEbbJlmk4KiCH6SjmM2kRCaTXa5SqNoNaN1SkF6BZ5GJUWCaiapFUCDS1ErbPlmkwpMMaEBsGXQjEqSYi6UDJaRhibk0YvhoQ2BFC9BowPkkeYGs8KXIPUmaDHXYNxsgttF0R3aml1ulC5IAclqZfH7bDl7rvRD9LzqREYANSzNCNu+eW7ts2bM3rRUwDqI4/CuvUzD1AzGM3K5Qw6n3xM9xdif+zlw6s3w8rVm6CsSvi+5z4Lrrt6ad8bcybV/l8HqHvgE//y1WmR1ACgzponIOdVZtuPPD4BGzbugpVrNgORhmdfewU8a/lSIJjZ/JnpQPWL/gTgnMsCKli/cats2rz9eO39Z9Dq3//IH7/1wZnew2D975EIiODP/O7Ur1Y1/Q4N58FLiXVDHlCHUidfjnpHREzZjSlPjAomBWhioTPCS9lwv1ElhyKK01bHntbekIRzyhiMMiFWngUwRPLRFhhHYxEYgUcp+jpRrqMna5uIolNZSkAh9lKkKnHMin5qW4bMRxqXesdZlI3QUoWw7jf3YEiBasXU7SIVqMkOWWSX9VSMqW0xxaREAdWhUhgdRQhEWqsuOSrYmgoc9GiIei4DVkUiWrFuUIzkWavEYol00F4YDYNCEgo6R6RSeTUOUXtS6JhpPlcLR8CcK4nGOYIKTqm6xzpEoq4DFTwm38X62CR614jpNVB2HRa5Z7Xx8ElG+dDd79SfAsBTL8w4w9N9AFDP8Bv03W7vljvesX3enPEL3/iG1/R7UHPmr35k4xMAdWZL/PsPHIVOt4ZnLVvSB5xZvf9UoEoQQoADB4/BQw9vgA1bdsP55y6AH/mh6+G8RfP6r58JEdUJgLpl227458882Aeolw0A6nebYqflfSfU/nlK4sFDx/om/+s37YJzFs6DG2+4GhYvXgQc44zkz6m44BPTznL+97o92L3/YLaHc1u379mOUT4ZEf7oo+97+75TsZfBOc7eCPzMWyeXxSH+H60JtdSMCpU1edQplko7Vt5Litweo4ZIUqXBJwcpkrCudKgUB1s5V4JpNKpYDVOT8Z0T7yuEMKwNk2afyIs24iFxINUX3vsq93gW7VAaH0viZFXwQiOiUUcsJbukSnm8x3kEKY2U7MALTypptR0qKEAPF1hPeBVCoKalNVgFukmU3f6zfCu2kwqZME2lZvE6JkW6SSoRoCtRAbIRInEcbPZajQFMk0Qp1Ki00vmbymcqGZMplJIONkbFVgIONvcyCBD2ICglRAZa2NS+MBGTHeb58+vRC4OXsu6K4jxFyqPynH1OSdVT4JoOTUz1WVMwnR5kFX+REnwmBfXqu9+F9dmbbd/9lQ0A6ncfuzP6nbfdedeOuXNHl9z++uke1K8D1E1w2+t+DNoz1IOaAcTqtVvh4/98P1x8wTnwkh++oT8dKMTwlMlSfZEIInR7Dew/cBi+eN9a2H/4cbj2WZfAi3/gWmi3Wie9N3UAUM/olP2ON9efRlX3YO/+o/DlrzwC+w48DpdffjE8/zlXwvBZUPbPfqT5B97xyUlYt24rrFm3senVfn2K8JdTC5v3371ixaAk+B1nzeANP/62zsLKxF8oAV9tvFpeGHJAKboiNi2N0bYwlAkdxexTCgFMLoUJj1sO0apYtVKTQWeBEKzWdaUkwkhuXAXWyceyiF4hpmBVGPIx2ogRWiFEizwSJSoj0VUU28oG4SbFKKnCMhqSZMhFUE5Mk1X6IL1hJamHBJoRWsMgodHAFjVmEX/uI0WdR1jpEGhKuragPHsVTUSDEQwpERuzoj8SNhiMttn7nyzrJBjQoCX0KFoDKSZDnARizVZMkA7borB1cq5t2mWAaJLp+EolScqokGdoKfAGghE7ZEUpNzRnznF1fmhI13XS2bqq54GaBqjuQuwdV/nrjjouVa7GovESGtYvGwmw/iPvxuODzPzGCAwA6lmaFbfcedeOeeNjS57CoK7dCOs2PgFQWzOn4g8hwt4Dh+Fzn18JBw4dhedcczm8+Psz6Ky+oYSfQWqfLaodbNy0C77wxdV9U/MXfd/VcP11y/p352SxqQOAevYle76nmXHvdBrYuGUXfPH+R/peo9c/5xp41hVLQSt10n/onMoo5g/o7N0bgodDRx6HVWs2yuZtOzsxpIf+j7PO77zv3W/93Kncz+BcszsCP7hC9Ijxy8vJzs064puH5qLLtCJ5rnNxmypqhirttMXI7INhlchiFImxbSVCIU2pgAnFlWVqsgXoiIlOG+SILd/GjkcDyRjwrCgDzlAmE2yD3GlDLEsbi+ijCi5QYZK1Rcj8SVG4WJKwFZWmbFesUmJ7Srz2xKCxW2jCkKiVUIUGVUKgWqM2xkIXk1bsLRuQOrKtkgaD1kwGrzEidTUarQEDEkVONvuqCoplMgjWUqfpmShIjkpCQT3sE6SiML3okYF0ICZHogrDBCToQjSYjI7EAowFahUJinbhcNg0aqg1pedwIOrVonyA3IuKvS6x7+DkVBd0p06Vd2Qalr8AgXv+5vfU3YPy/jd/rgYAdXZ/3vyru3/DL//uzvlz51zwNYAqmdncCOsevffYDgAAIABJREFUnXmAemJTTeP6NlP/8vmVIEngRS+8Bp5zzWVgjHoKm5pfn4FqZos6U1346sOb4IGVG2DB/LnwI99/DSy95PyTAjJOANRN23bDpz/z0BMl/vNOud3VWZpyp/2ycn/q8Yluv7/5Kys3wpzRUXj+DdfAhUsWn/a9nawNOO9h794D8MDDj6QDBw4fY5FPljb8p/f8/tt3Ig562E5WnM/WdfLksLTO/6QK8QMQfWlK8mNVcn3DfJBQGHBVZVzQ7DOcs8JJi4mIPlLLegsYhsvUaJ35R+fHgvZRx6AMR2taoYTsBoVOW4maQgSrYtHiCC7PY0I2yUdtqzyFNOqCInlKRZIopUuVtewkpmhFil6RreTQQ01NCipoTSUmHRJSdE6hrbRTJZJGrWOtfGQ9qYwWTKQT6mzKH01S7LR1NVDSqApVk2PSbriltWME1CpIUsE7lRIZCZRNYHUiRRosHq+isUEEKdjsW6ASKSNBBxDt0FJuoJU8qcDqMqPV4GPVcuVw0cAwdFQpjqhuEIND7PVAuhPUq2uQXk9KF/CxGPCho4S3feb3cOJszbdnel0DgPpMI3iGvv/WO+/aOW/u2JLbX/8a6Jf4nwJQXw7tVnnSmMlvFYJur4b7vrIOHnhwI8yfPwo/9MLr4LKlF+QK5jc9MtDI/YX/cs9Dff/UV7zshbDssmeuth8A1G91p86Of5/On8fhC/ethS3b98P5550DN1x3JZx7zvyz4wIBoFc3sP7RrbBy1frU6fb2cQgfaKriXa947pLmNa95zVPViWfNVQ8u5JlG4Md/r7uoCulTqguXmMSJh1JjjMTSqsYwxQqiNwZc7I8hzUb6klBrHtKpsYpiNYVeD6GvxowHrP0om9DTwbfa2VLKRGmUJ2Au0HmV8vzSViwpBK0CQ8IQq8haF1xVHAshxi6GDE6hiinRECvnxBcatQfEhJRaSeUBp71UKMnqpZRyq6iysUOHcI6V0hMmp0CRCWKU4mhclCzkR2fyuCjETkM2MZO1TKStcgAqpmAFNCQm1ahokBMltFpUVAAK66yNUggYwAqKIrSUIBrSEaZQF5C0SUA46YOxWoCiFEkTOkQamlIj45PGxkmy3FPoHUK3IxRqbDoTGOoG6tqJk5Redfcf2oef6T09m98/AKhn6d299c67ds2bO37B7a+/+QmAKrBq7aOwITOoP/9yaFWnDqDmEGcF/+EjE/C5e1f2S/nXP/tyuPH6Z8Ho6BBkr9RvVsbPwPro41PQbpcnxRbrBEDdvG0PfKovknruQCR1luZ/vqzsIrFt+z74/JdWwcRkDTc85xq49OLzodWq+oz9yWodOW0hFIHjkx1YuWY9rN+4jb3365og7xym1ife8yd3TsGAUT1tt+ZMPPHNK8QyHnq7wupVKslFFUuwRYqgY6MNhUqsgwhc2ODVcPIpRTG6jGghkKUwFkKdRVHUSk6hBKN9qFrKgSQu29YXIlFyo+eo9YSB7WTtlVVsTIhpCAPWnFSlg0bhqohMU2XstxWMuChiklQ2teop9KroT0b1XlFKqMRE7UJSdVUpik5rVSpFYqdqoIA9g4UiRDRUV0ZUognxBqGilO2gfK+QZIDJFaBKYEHjo1YgibxOOkZRUSvFogobIjTWW8u5pwGzmZVmQdUwZsdVbZCwW6QqojAHGCrZQhBUztSGEPJUAN1kyhgStHxZztmjlKuJ5Chi6AlOTVITazw6MQVTwPzn/98f2D85E/PkTNrTAKCeSXfjJO7lTAOo0yB1GohmL9S/+6cv9RnUFz7/Krj80vP7o1dP/PuTw3AygcSAQT2JCTZLlso51TQeVj2yBe754kpoV2143vVXw3mLz4GyLGY9UM3WVHmi1t79h+DBlVkodqjn6voz/6eL7i5yeuMHPvAbg/LhLMnVmd7mze/pXCWT/iZ1hN6qSsjDQUO75V274Kwn8i0KTjxFLJXPinoG4DKzpiXFgrkhg0EZcENl8JK0q3QKUApDJb5FKigh1s55g8xF2zhjKCYvMRkOWHEqlQ7JO87lcF1JNGQStWPIY1GlWyXWjIWvc32eAmY3KSA3bHTUoDoNaqpFCzoVCyoMFHjMi1FlVIlQC1cmCWpi1j0Ew67C1JqyIIzHnCrLIhAarWRSqZiIulGsKDQBPJAqy2iUZKf/HiWMmM20vPJJlDaFcXlmQJ2QKZRaa6kTV8gawGujhhSxTuSjpySkiMpssIigdMIeSHuPrmOdAHebGJ1MdA7TZ3yQz/3VXfp/zfT9PhvWHwDUs+EufpNruOWOu3YvmD9+/m0//3UGdeXajbDx0c1w+8+/HKoZZFDzZJ+cWJkZfbrFVN6q1go6nR7c88U1sGb9ZpgzPgrff+PVcMF5C/um/bkdYSbYrQFAPUuT/Vtc1gnHiAzi7v3yWti58wCcu+gcuO6qZbBwwTwoCvNN83S2RGvamor6/qmPbtkBa9ZthmPHJo5O1t3/iT7+aXcRbB8o/mfL3Zy5fd78R73FUNf3Ui3nWiBvNQUU9HPbwXulYln1nHEqglGBdYxK6TyePlQtCmUWv49qVyCH0SHntKIArAIr9KaSWAoHQooaJJrcOorMtkQ/jBRTHkClKIiWFNCHgpCzhb6JMYqxqVJ5kn2EPB6A++V9rySSTkVQCZJqaNjUCVRRo+Y83qqMGikUnYjEo2iaLmpmmx1MDWRDVdGahY2iSM6ZosndAgpLkoaiz80GYlkTKSGTjORxqHTEc6vQAAl6pdfDIFp0HtTKirAG0RRBs89dC4VNFCVqsIYLyF5UXhASR++i5EGs242SOaTNhz3BtaYTPqQPlJeZw/gF/5ju+sfNxAd/C3fM3F0+u1YeANSz635+7Wpuv/Ou3fPmzjn/1tf/1NdK/NMAdQvc/vqXQ1UWMwIC8wZ27zsIhw4dh6UXL4Y54yP9PT19nGkGDXlEx549h+Ce+9bAzj2PwSVLFsPzb1gGi86dB9Zk0JBO6t35GkDduhs+/dmH4KaXPg8uu2QgkjqpQT6DF8s/mPKvnw2bptX+jx+bgssuuxiuvGIpjI+OAOVWk6d59p7Bl/MNWzsxGnZiYhLWrNsKm7bthMePHtvWc+E/j46Yz773v75l/2y6nsFeT24Efvat3feASj+qGl5EWsWqnTLb6UdKDgLkZTR4DTq02EToF8OtJ4AwNOwCEDau0HEIXVMAexLtWyPGC8RURO+oEBbEMEZFQJU7PtmT4VgojMMpBlGUnURD5iYLQ0zRRHZeDIXkWi3RoMBjIlCAID2bQqFiFTREY1ApmvDRJkVGR6MKZ2wsPB3XvdKTVT5kE1NlUtLkQyxZghZSSmd1F2s8rqoiYTRIrKFBI12FcSwVDaFOwkoDFd0QaRJ9SyejQCsCnVRSRD1QhgNoGwQ9RaPZJKexiJJqn3R7uJCdIEIwFTZ6kq/4QKqM+m9H5um529LQA+frwyN/9mfzD935f4N5z6XwhC3cQMz47Wb2AKB+u5GaZa+79c67ds+f980Y1JkFqPlL8uHVm+CzX1gFc+eMwPNvWA4Xnr8QRkfaEDk9BRRnwEiUFf0J1q7bDl/66jrodWq47tpL4VnLLoJz5o9nef9JA6pfB6i74NOfe3haxT8AqLMss5/Zdk+AuLpx8ODKTfDwqk2grYWrrrgcLlyyCEaG2pBAZi1Q7X+gEwEkgQOHDsGadVtgx869kxOTk/8ca/5LNcwPfOhdKx5/ZlEcvHu2ReBn33bs2gT0E0Tp3xNkI5WyURxiWSQHVvyIQCgoehinoEUxaQoKgPNs06rysSiCx5ZuiNhbi56ylsmYUI40QWXWFFIQRB7GwpPteJA254GfZe431RIjSv6PrQ0+95sWuh2y36l1IKzGxBdT5DFPCxgxKgVSE9GktlJUsDnmxQpaJWgKL0GDEzOJVZHbYUFlNlTlMQHUda1KmBUrKbxhEsUWojWeQE2mZDGhLYxCJ9RKEmFKkaVGl5oEjupeJUkjxmHL1DOcagjVsGaMiHXUIkX2BQhDUQWvYK8jfiwAfowMV3bKfBG5xYfmTu7YOu+Q24DPGvgTn6QHZABQT1Igz7Rlbr3zHXvmz5tz3pNL/A+v2QCbNm2F22aYQc1M1Z59h+GeL66CvfsOw0VLzoHnPWc5LF40D6rKQgzTgwNOHBk0KCLo1g18+avrYe3arVBUBTzv+ivg0osXw9jI0DeMTf1u4n0CoD66ZRf8yz0Pw4+95Hlw6QCgfjehnPXv6Y/jJehPM/vCl1bD3n1HYO68cbhy+WWwaEHO0xJiZvBzv8ksPHJvalZt1L0GNm3ZAY9u2QmPHTxycKrT+2hE+bvWNfMf/MAb3xhm4aUNtvwdRuAVt+9vtVvVAijgfxOlK4pSOwPo0UVfjKEDkDDO0VFFQSwzGhOFIFUgLvedViV7KtBljyUD7KBSXpT14ykGRYmVYl9pFXwM3G6VzmR0GYcjmRC1Fs6CKhFJJWsX0SXTNpGEWOVuLqckO9onbKjbSjqlgtSUs0ha+3ZeGWxPvA66VSRBwyImsLIeSanYK4NSJlSF6vRSYUBhY2KBjstkSTOBAcl0bbAdBhsaKOrSlJUiyb4BjlhBgMKRVp6CRq81cO5rEPLek7I2Js8uUndnJHPAor63gNRt+fLzHajd4mbezs+3dtLnL7qo+Q5vyeDl32YEBgD12wzUbHvZbXe8Y+/8BXMX3/q6r5f4+wB181a4/edfAWVpZ6zEn2OVAWf+gl/7yFb4ysMbodttYPkVF8J1Vy+FcxbMyU1z38CMZtCQQeTufYfh/gfWwa69B/tTqF7wvCvgwgsWPWMmdQBQZ1sWz/x+84+pPDZ1w+bdfTb1+GQPlpy/GJ617BKYN28OKMJZ7ZNL/dmwAIePHoONj26HHbv2pf0HD29mH/8UDH3uw+9524aZj/LgDKc7Aq9+S+dDLPIa3VZSYOIWJGdRnC4ktqNudFbaz1XeBs+Q6VAAZwuJpVFuPEmTLHBppFE6htI0DrjldZKkW+g1UGxZcEnFaIyJxJ1Q2CrOMSo46wMJJ7TohVnEUcR2ZGlMsi1IyApbOtGREAwPMSpHJiEq5bTtMVtBVFFT0WM0DtDGLMUnVK4tNjjQyKF0VJg6EjJgC6UmjLFq2q0ioZBzWARMukGwItIOymKMXBlU0nWppSyqXHPolkpTkkQdUjzkV4ealwy31bvrbnkNsvz2VKvhtHjeHti7F+D+8/zdr8GBldspSOoBQD0FQT4dp7j1jnfsW7Bg7qKnANTVG2DTlq1w++tfAWUxswA1X3P+blSkoHEetu7Y1x+BmsHnhRcshJf+0A39FgB+Wtm/D26fEFft3X8YNm3dA4UxfZP/mHWlz+A4AVA3bt4Jn/38Srjppc/vM7R5D4PjezcCfQyHWe3vYPuuA7Bm/XbYt+8onDN/Hlx91WV9xb/M8rI/ZgcNEDh+fAp27dkPGzZtDzt27dmGDH+vNX70/QOgetY+AK/+9cevNta+BQleHAo11AYX2pZdYcCDM04TcHs4uYQQq+hj01aRvcTRId0QJ19hCsWQNNpIbBtfY4aAqGIL0VtUyZbswHPI06fKYe2FQxqrohO00VmKNroYSXg4mRil12dQHThRSklRFxR0Ut2snJWeQYWqQWNFovYNWZTSMkbdgC6nvNgYldUjjU2ala9bZUAwfX0+cFWLJlGqajgYr3QRoisESU+pVNZaWZvfLyb3j0KjVRmDkDOa2o4ZgZpSNY9p1p/sjHINBH87j1Kx+r6p1cvGltK7XoD1WZsgZ/CFDQDqGXxznsnWbr3jricA6qv7IqmsrH949QbYvGUrvPH1r4DiFADUE/vPHqgZAExOdeDRzbvhoVWbwfkANz53+ROTpUx/j08+ToCG7GWZgcP0YIFnEpFpwCyCMACozyyOZ+u7M4OfkyyzqJu27oZH1m2DY5M9WHbpRXD9tcuhalX9PupnnIinKYD5wx7zj7/I8NiRx2HLll3wyMbN3WOPTzyEBj72/CsXfPCNg7L/abo7M3VaoVf+2rEXtEp6D6Ba5rU0LSXRquhLYZdNRtsjqQcKU0qSS/Upq5qsS37YYCg1NrrkWuvEkLi2mX1tW6fyQCXreBgk0JBhceyHxXtT6GnPU+Qs8A8ANpgiso4mlqZk1/Q4DQmDEkFGUqAxStBOJ5OSqFDkqfaonPdWhC1KoRqAlhfWdTxeYhwtlBg9QakKVaFZQuGiKRUlNQW2BRQUS6omQYaEHYkeqgIQTSGWwFAqkUxI2KCkcZCGINHHRclFWss7lKFW0cW/r9No/ZGLcFC2n6mU/A7WHQDU7yBYs+mlt975jv0L5s8799bXPQ2gbn0CoNqZZ1CfHq9pZjTB0aOTcP/DG2DDxp0wb84o/GAeZ3rxef2Wg6fbUvUtgrILwDNFp08wutMAdRd87gsr4WW5B3XAoM6mtD4le1UKIUaBw0eOwYZHd8G6R3eCLUq47uplcPFFF4B+YizvKdnMDJyk359KAFkotv+xI7Bx0zZZt37z0ch8Dwn99Yf+/G1/NwOnHSx5GiJw882i9FXdN6sQ/5OoKEFUWFioxkPjFcQ4rIrGmBSCNt5Yii3KDp8ueo2hpbEZa2NjMAWx0WWF/5CRxkriwDrIcC+MRIxxThkxcpACw1gQn6xwQbXXRIxBx6Hc2yoxCcUYIyXKAJU1Zq1/q6Wp2ySdZf11oXUMlVa+tt1C24RiEnMJodDO+tLFpmg8WDCtkiPruqSWAykajwWjKdiQ6rFvR2tLl3QVEhZVQjXlQ+VLTfnBla5TIjwRLaxF1g8UE+UDEyO85WMXD2+5GYDuxkHp/jSk6b96ygFAPZPuxkncy20ZoC6Yf+4tr33VNIOaphnULdu29RlUa82M9qD+W5eSgWrdeNi15wB85cFHYfe+Q3DFZUvgR37w2TA2OtTf60z6oG7YvAPu+cLqvoo/W2ENSvwnMfHOoqUyo+oaD3sPHIGvPLwBdu89DIvPXQg3POdKWDhvDnBm9E/CD6fTEbKvq/0TTHV7sHP3fli7bnPcvmPvHqPpE9HIBz/y7t9cfTr2NjjnyYvAz/5Gc7GU4W+KFC9lYgLUbtRkxb5kRb5TZFgVKfeWJlUoJsGQ0V8qbGM1+9HR5GzkGikyaGwK0nGMxHUKiKBdHBPxMNyOo0ChVr1gUbiXMGSz/jZiMG3t207SsbaLo5I1TpLEVgmYURcaE7ByU2jAeBtKoKbpVBhL1augSEq3QIlqJtslEGsPU1UDRRVVoeqEbY9BdxnbINDCPPEpcdsBmMl22eLo2k0sCERX6Bx4UoZLfBhC8CPe/ElIvvv+K+Z/cgWAWoEYT17EByudzAgMAOrJjOYZtNYtd9x14JyF8855MkB9aPV62Lpt+2kHqDlMmRnNR6dbw5ate+CL96+DJjh47rOXwf/P3puHWXaVhd7vu8Y9nHNq6Op5SqfTnXmeCISQGAyEEAhiUDEySYJeDcpV0Ou9V/vzeT6T+6n3iyCoAWIQckVRIig4ASYhSc9zV8/z3F3dNZ5hr/k+61QqaRBISKq76nSf/U8/T9c+a3jXu8/57Xe85XVXAGXsNSdFff9xjLn424A6iRR1ki9lVEsRhqs12Ln7ECxfvRWGR+pw8YUL4dqrLoEsTcddT8+kSEaL/I8mgg0MDcHO3ftgzboteqB/aBul9MtTYeQvHvr0QyfP5Jrac42PBKL1tHSBu3PENH5DMve6JFXaIzOckUZOYka+N0EmChmzeTaiORIPwCwVVCOAyUNR8NTqnFoFaVCOelsKVCWc2IKDQYqqG4xleWJipXortM2BameJlxC0YMGxFI0P1ikeXEUpJ0TJQ8TBZhM3xBFblx4lBe+5lpI53+C6JhPFgkSXCFeh0jnPNdepcSCNRWEtSUc4ihOM5eBcotAn2IDc2CAaEHLNvQQGrOqlRIwFWr0m1v0L9vBv+6GwrOtAvnOteso8ddttbTAdH1U7baO0AfW0iXZiB77/wT84On16z/QP3feCi98HmEyAOiadCKrR7R9/9Net3wFL12yGjkoJbn/j1XDxhfObfxsvI9WLgLptLzz19Fq48y1tC+rEamnrzB71NEJcBNXezXtg+dptQJDAdVdeChdfdD7EaLpxU9QJEEv8IQixSaMx0HdyEDZt2R56N++sNxp6GXLx+5//k998ZgKW1Z7yNUhgyZIgDtTrb6s5/eU8RcslRHRsILOOUK1TAUWg3GSotBfoXOC+szNopMSJAmqUGGvLquhhqAi3NnOsYRLnMo4mFM4Ezk03Q+PTYKss6G5whlK0LjZassR15qgVI9ZZG8osGAs2BN7hGFaJBIe1QGKrUGwoIpQmIlCg2rjEIWVFYKlPQ0KoZCNaZxo9D8GnDR2jEJioSp1WSSadp3kDfAUdymqdZU4A06KWOCN4A8gwIvnnQCn42fmvJjDMPo8d7RrAr0GnzvRH24B6piV+hua7/8GHjk6fNmX6h35hcgPqqaBqjIWT/cPw1PPrYMeOg7D4grnwk7dd28z2/0EtU39cUb4EqLvhP55Z33bx/7gCbN/ftPxbG/V0BFat3gIbt+6FaVN74PprLoVZs2a0NKS+eLwBoicUDh7tgzXret3OPYf6AM03hLEPf+YzS3a21aA1JPBzv3G4h3P6eYfiNhAM0w4sgKCTqAtm0GbcNjJBdFDOFTH5iWW2JMBC6hoUvJPCFkygTqk3KdCGDGCGO+ou9VJJoAZTrnkw3pWKIrPOpcCMjqWmUmY9ajsFhYZYYkpKHYILVlkPEsBRQF4Y5pGRwBXXPuOhIViRVJMQOEXBkpojUqeONxTNQ6BMUZ057RPnQlLPZG7RM18XpZPMl/q5z33BytQT5so21dHoUZB6zdP/SgBAHxr6W7hpjm7Hl7aG3p66yjagtt6ZvaIVnwqo3jlw3sOqtb2wc/eeSeHi/1Gb0MbB3v1H4FtPrYIkkfDA+94+roX6e7fuhqe/OwqoC9sxqK9In9o3/WcJxBeqQ0f64JnnN8KRo/2weNF8uPqKS6Fcyl4MYWl1udXrDejduhPWrN/iR6r1g06bx1KKnzl6dG3/V77ylddW963VhTOJ13/vkl7hq9OvLjH4fUrZLehRMQa2KJOCEx/jQQvOCp0l3rrAjDWFZzm3PUQUhHvLZVFQCpZyXpQ5FtFxbxIsWBYz8tHE+FVE77uTQseMfeG4DiLRBSt8SQhthXLCSz2Fx8b1wZ8IJ7wQwlMqwPuckqKgPmPMxtwrLLHGSJFo4hnwPHEUmSUojddpnQfhHaZeoqjWeKaSkCkg0geoWI+iz/nKEIaKxSCQJCnlWtVpOMEof3Aw2I20Xj/5lblz2yWiJrGu/qiltQG1RQ/u5ZZ9/4MPHZs+vWfah+77KRgD1JVre2FXCwDq2N6i1TRmGpfy2HLkNdaYOiWLvw2oL6c97b//OBKIdX63bj8A3122AWKd8yuvuBguWrwAUiFG246Og+7+OOsZz3tHK2gAnBwchHXrtsSOVKFo1HshkN9TVHzn8Uc+NhSjA8ZzzvZY4yCBe/+W/tTc227JNft7WoJYVsmITlbEgqHlaEFFYglAIaQ26FPHvHckBZN57yRhdS68pbkpgFJVpqgtgAJiXdJjTOKoQuYMV9RQwryQQVERM3HRECAmTa0VqK3x0iZJzE2qmVikH1ISG9hTjxmxynKaAhaWSxcMM8RxY9IkBE9d6nNEznVdJaokE9UIvIaYFYCZR5QDjFSsc6Lw0FV4zIcRMsNphoE5j2G/pbU/fWLGn/05wO/F+Op2ketxUKeJGqINqBMl+dM87/0PPnxs+vTuaTEG9SVA3QS7du+Fj3zwHSA4GxfoO83bGNfhx1z8vVt2w9PPboC3veVGWLhgVjuLf1ylfG4OFl3/g0NVWLpiEyxftQWm9HTCdVdfDufNnd181loeVBEhBA8HDh6DFWs3wZGjx1VtpP6MR/87OVa2f+pTHx0+N09+cu76HZ/oK4cs/ZNK3d6acphmhFOOg+liENucGs64YhkoROVyBg4ccZgQnTRIQR1Y0eN0wq3B2JSek4JTtNw7w0tguUQNTmlC0FZYqikFx3KtpRfaIjjPtJVMOUYSK6UxXBBHa+CBATQoEBUCx4JRHRgPzLPCDgvDS9IFYJLEDquOa58mNdCxPBQfiW2rFIoCIB9hMi+AyGrddRpHpKHQpajPLKPADRxyjD7/+XmlD07OU2mv6seVQBtQf1yJtcj99z/4B8dnzJg69YM/f4oFdc0m2L1nFFD5OQmo8UcWYNOW3fBMG1BbRJNbZ5nRjHjs2En41tNrYM++w5AmKUyfOgWuvPxCmDVzOsRmOdEa2aoW1Wahf0LAWAPbtu2BNRu3QP9A9WStOvIEIeERoqcdfPTRj5jWObGzd6W/+dnBBSeOkzfRhv4kQYqeOy0FLyhzhgHV0hEluLOGcsWJC0mpYWJcKkWm8xQKwonNknqDQlBAia4QroN3PpSp4tIZosHSJManBsdQK4LBJlQYnwQTgvO8ZHRseppwY20QPlDhnXaEM0MKhpQbxo1n1AQhFDSEDUQaIGnEWy9AVoOTsY7pEE+zWLVKgy7FNqe1QLMG8k4TkI/UQlfBITdgE0zZCGtgrynMOx67aOrI2Xuy59bO2oB6lp73Aw8+dHz6jJ42oJ5yvtHK1QbUs1ThJ8G2YhjK4aP9sHT5JijlCSxaPA+e/u5aGB5uwCWXLIILFsyFzkoFkCKEJqm25jVW6H94uA7rN26BrTv3wcDA4C5t9G8DpU//5ad+p681d3b2rPoDH6/OcNT+KyHhggS5EdwpL9HSxGuBRMmE6DJCgTQ4NI2ABBz1TpMSLUoEteCgQqIMCtYQnCkG4LgiMZvfy6lGmxoaQYntcNGT7ywjiQoyaM+Iq6AyhASfcG4Jt86qWJy/7quNMsnRkNgVABkSKDekVowN65AwYLJOEmmok9o4oTwkNcFSHagwhc9QakEdByf0AAAgAElEQVS8KZ2kvBwEJIOGdirNkhqDcj1xCUGyM/P+Hrdv3+5Hr7uu/ZJ0lqhyG1DPkoP8/m3c/9GH+2bM6O754HtPcfFHC+refaMW1Nj6uIVj417Nsb3o4m8mSbVd/K9Ghu3P/HAJxOcpJks9v2ITdHeW4W1vuQn6B4Zh7fodsHz1lmbN1MsuWQzz582Ecl6CgKG1QfWFWsZHjvbB2g1bYNeeA4MjteqTzsDjmOYbHn/kY4NtfZkICQS870H1S0j8LbJSfztQYZPgNKS8QGEdR1JISTQNwWasbkPAQKhQnAXL81DnxpqMUh1KrBC8piUPBgJqBtTlzBUgglU+2Eyg6fDC2EphmEIjPLPRgsqI9pnxhiTE8Qpaa4UXYiT4ak4BgUbL6SA0EiEEAUdknSCPzacGPaaKIq8ZmzKZSCNA9mtfUdYLFCGtGsgawWbDSdLBvUuKGq30M5LUOVjBxLsz0tj06NSpRyZC4u05T48E2oB6euQ64aM2AXV6T88Hf/5d4L1rxlmuXLMRdu/dD7/0wXc03Y3nHqCeYkF9bsNoFn87BnXCdfVsWUB8ng4dPQnLlvdCV1cJ7nzz65olqeL/7ztwDJat2QoHDx6Hnp4pcPnFi2DWrGmQCAEuvii26MviWEcqozSs3bgVtu/cB8f7+nfWRhpfROmfdEm6+4t/9PHa2XLGrbCPux4a7CLD9IoM8ElKfMISUqTUKo5UJ8JopKBZ0iwuqgUEXyTcUkJsypnqAl9YZmwZoeFLzOTMKhBWB2d9IlkjcO9BhvhZwwSaRNZNoLzZx1QaqtGCh06vWLA+T4ghw4UPnWUvQaMDgTWWsMQOCCUDrTfKSWh4Vk+ZRKgnxnqpKAqPXCQc08PISooQPqRUxSLhI5ZWlBOVQoaEGqg4b2U9wWzE4Z8Fx5756/mlJ9tJUa2goa98jW1AfeWyaqk7vx9QrR0F1D372oDajEFtA2pL6XMrLHYUUE/AsuWboburBG998+tAGxMbNUGzbaoysHnbXli9fieMDNdh/rzZcOGi82DatB4gCONS63ei5BTDZzBakPtOwJate2Dn3oO+f2BgtTbmL9Is+cc//6OPH5+otZ1r8977sQMpZZ1PBELukMIFQYOWEUrRFiIJpiK0skCN02gpZw4SbgV1JmFedSDoUFYFd0xTwVSJoYqfCcQaCdSG3Gkg3sqGM5XEFIGD81pY6ELDBTNSNywh1iMGI1liab3wSrggpSSIDGuIPBjDCu6kRsFwiEtPrDCpT06aICXn3DuZO27lYAhJCKJiPPKTQZU80nREiY7ATKWOkA7xkFGP+9Dgt0y58789NhXbsadnmbK3AfUsO9Cx7Xz4wYdPzpo5tfsD772naUG10YK6eiPs2f8CoNJz1YIaYOOWPfDdNqCepZo/cdtqAuqRE7B0xWaY0l2Gt95+YxNQx64mxCGC0hr27D0K6zbtgIOHTsLMmdPgyssuhDmzpjfrFbdqfGoEcYzBjM43y1Lt3nMQtmzdPXj46LENPoS/sQKf/NIj/73tgj3NKnrfkqELhCGfCMK/F5yIDZ90QkmDUm99JTS4sb7bonLSW18wx5JgMQs2KblGWucFAzCe24YUaEuEFETWNCmjTZHq2M6JI2qTRSNo1TFEzYWwNLGGU2JkCA6lMQ6Ej0lShCgXQgie5YShJkwaPqRAuLpnQ7wkJRMMXZEMCUzqJnAFJOdAOKJNBxByz70c1DSzBaQBSGfdh4rhmKlMVfqdhJE6jHBC3/ql87vWn2axtoefAAm0AXUChH4mpvzwg//r5OyZPd3vHwNU62HFmo2w7wVApecwoG7Ysgeee24jvO2OG+D8tov/TKjjOTHHqYDa012Gt3wfoI4JgYySXLMs1fadB2Bj7y4YHC7gwkXzmzGqXZ0VMNa1rtsfEQhBUErDoaN9sKl3B+zae/BotVp7PgB9HOrFvz/++JLinFCKCdjkB5ZUZ5gR8y88x8UBY0kppiCgzabYBlC0SSM0KNFeZtRoF1zig/WsMNOmkEbmUEOd1oF4ZwVrpIm1iakbPq2sGBRWFtTICpoYBmAc1TkNtqskNGLhkDGTemMCC47wxCrqPOfG6RGJHpHkPJbx90xLwl1V8jqJfyYScyfr6MTIUCVT3EiQVioI6YjnieFQqjEqvaKVwsVMfshOMugG4qRSPq0D++TuIzt/Z+nrXx/1qXUzDydAT1phyjagtsIpvYo1PvDgwydnzpz6AqD6Zizc8jUbYf/+A80Y1DagtgH1VahV+yM/QgKvFFBfBFUSrY0OjvcNQO+WfU3LPucCrrniYli0aD4wypp/b9UrQmpstlGt1WDfgaOwsXebP3Dw2H7r3DcCZ4/95SOfWNOqe5vM6/7pXxl+O0v970FGL5IYXMpYzLAvCHeep6HOCbHCNbRDYQm6kAmqUBe2K6M657YWUxYY5Q3GiRGZV0kqDFJrUGvDdLC0I9WSKgXIXE68Qup8Z6fWgUgni2BGKiMut7ktSPAWrPeKoaxkxDtPuSpEEaQIzrKqrElSCG6YTYZJKXEGhaU2cyGwgrhS1dGMAZEnlSiHHFNLXH6iRrsL4tN+hDKAPxY64Nco4refmDKlXYd3Mivlq1xbG1BfpeAm+8fu/+hD/TNnTO/6wHvfCd6fCqgH4Zc+9A6ghJyjSVIBNmzeDc89v7FZqP/8886eQv3RfRyhIF7fk3MTQtO0cK4lxZ3pZ/RFQF3ZCz1dlR9qQf3+dcX41NiN6uCh47B+427YsfsQTJ06Ba67+hKYP2cW+OBbNj51zO1vrYOh4RHYtXs/bOjdUT9xsn9HAHiC0ORLjz7ysbbbf5yU9db/CGzqk4N3Z5n8Uy1ChVBjSpRoLlBxoRXDYFlCNPXBWo9W8GATpMYVznZOCXXJwFDn6gStq1RIg2bBMF4yXluLXpsypQYT1HniTN1bLRAc416nSRyL27q3sX6qRcsdCdzRQAPzjhiGpM6JCAA0WMlrfiQNVNGgQRiepirw2HYtc8HwagFZIVEOBZJhgFKhSAodNqta0TFieWkAbacFj7VgVgQWPvV3c2d9dZzE1x5mkkmgDaiT7EDGazkPNAF1WtepLv7lqzfC/gMH4Jc/9I5m0sa5BiwR4CK5rY+AunRTM4v//PNmtmwnqWgFH0vAcdbB4EgNavUCVKGBIAEhafOc00Q228UmUjRjHOMLSzz7aN1qX+MngTFAfX5lL0zt7oC3/MQN3xOD+nIzxbOs1opmfOqqdVvh2PFBOP+8uXDtVZdAT083WGdb1ok5WpEKwRoLx0+chPW922Hb9j2DjUaxGoF+as6f/tY/Lmm3pXw5FXnZvy9ZEsi6mnokI/5uS/QUwcB2MFS0FIrYYiHloaBgHQWiXULiv76DUe2dN2yKbaTaK0lRU+ELwcDwHDRRqAlSl7GgmCCWJkErUxiPzk1JZAEkuvKDESI1NjhXQmMID85a5TMpwTsglOUUGSX9oS4HAxPUW+4aJsGECE25qDOSahK4VTazgSfVgGnV+JwQkIMaO0D4kvUkHxSyIxpk64UX1sMnWej43ccXYDtc5GU1ozVvaANqa57by676ewF11IK6bPUGOHDgUBtQWxhQI3DGH/sYo7j/wDHYsesgHDhwDE4MjjStcDHBZgw8kQDEeMeYuCIEhY5KGWbPmAIzZnTDgnkzYfq07hdeUtqw+rIP1Cu44bUCahPhcNQtPjRSg+3b98OKNVsghqPecN3lsPj884By2rJJVKP7i9UKAJRWcOjwMVi9frPft+9wnwP3bQLh05/95P94/hWIun3LD5HAJz7RN+uI4Xc6Rv6QkSC4LBRjQvEOEiGzkYCxHMFw6gwg8QyIZiz4HoGNArxhzCvsdkWig0kINqgMNuhgeQVVitQkomHQc+OtsLQUy+wTl1FrmHCOErRFJk1edw5NsJaoILIQEBNSaEpDCJxkno0EIqxGSdFxZjEtKAhngzzMIA8+CEZYVgVMGs6ngwrLhoS0IVwleF5RyPJhgbGI8FEX5Ps7bbLukQXYrrd7lj4RbUA9Sw/2/l97eGDWjGmd7/+5l1z8LwLqL76zWdamRUsvvuoTG7OgbujdBc8u620pC+oLNdHhyLEBWL1+B2zesqdpbYuWuik93TB1Sid0dXdClkgQUgCPSXARBKyGRlHA8EgNhgdH4FjfCeg7OdjMJK+US7Bo4Uy46IL5MG/uNBCcn3NW9VetTD/gg01APXwClq7cBD1TOn9sC+qpQ0ZdjRbTgYEqrNu4E1av2wbTpk6FG669HGZM72mCbCtfo6AaoFZvwM7d+2HN+s32xInBA0D8E8KKz33607+5r5X3N1FrX3JvEFsuGPpHD3BTByOeIRikoGjqNUqiE6K1oExTDM5Z5SmgSzuJ4gQUaKlKnUaFXOtc2UIorrigVtBCE4aOMKpZgiYjzjiBmpFgpAhWCGGQOSe815ZQX8ZCB0L8cEh9V+YQHODgYOCQBAFdgoSqSrQLjCZOGieSmmdJEYwcAZIwA1kNWNpASEHofERhMqxMZyORpYJDqe5peVh4IQvR67Lw/3xpatfXJ0rW7XlPvwRa+1vu9MunZWf48IMPDc6ZOb3jfafGoK7aCAcOHYRf/tA7m5aMcxpQl/fC236ydVz8AwMjsHztVli5eguUyyW4YMF8WLxwPnR0lICQUVf/WBmjMUtc9AePnXHTpR9iCaMIBh4GhoZh/8HDsHfvYTjedwLyUgZXX74Qrrz8Auiq5LHpenPM9vXKJTAGqE0Xf08nvOW2638sF/8Pm0lrC3v2HYZnl/c23f6LFs6H666+FCrlvOVBNe456uPg0DBs6N0OvVt2m3qtts0Dfiaw4m8+979/bwAR27Eor1AN73u4/now5r+Ehn8nZSQkNBQJBhOSoALTKpFCSymM9N4SgECjxZQEL5itJ4yahAflrS5kbpWIoaMUDeXNtqYFRfCQUkWlc4IFXfbaeOEso8IKtFYEaw31moTgE0QLUgZKKTqHWFfIszJjDRZv86y/aKTAkKEoZ944MUR0UmCeMFUkHiEd9GlOwSWHSehUAZMqJt0KbOosZsOUpKSAldni/nd/Bhcca2fvv0LlaMHb2j9BLXhor2TJEVDnzpre8Qs/946mpaLp4l+5EQ4ePgi//IvvhHjw5yqgru/dBc+1CKA2Cg2bN++B7zy7FmIP9Ne//lo4f/4cEDGnYByqqkSoGq5WYfv2PbBl+96mReuC82fBdVctblpVGR2NYz3X4pVfyTP2/fe8ZEEdBdQ7xglQx+bR2kDv1r3w7LKNoI2HKy5dDJdcdEEzthibLpFXs+rJ8Zn4MuRcbBXbB+s2xrap+63W5utO2z+0DbvuL//y91QbVH/0Wd27pFcoPr8rH7Lfoh4X8SwUjFNdokG5oHQQQadCFEmCloNzEMBKitZTiI3udSUhimLQAEZ1lUhhWNCYU4vVQlvn/LREKsqDCV2oCXWm4tEkoK0VwgSrXZ4aTQjx3jAtUuEVhVAMeZpJQBKCUAy5R08b4BJLA7WEpUERiR6SYQyyGoPlfZGZOmQjjiVasnIDfNJAMkUxTAe076hKzKynRrDk8XJm/+BPSqUIqO3rLJVAG1DP0oO9P1pQTwFUEwF11Xo4dOhwG1A3jQLqXXfcCAsmbZIUwvET/fDUs+tg6/aDcOXlF8L1V10GWZ42LU7jfUXrq3EO9u87BOs3bYUjR0/AvLnT4fU3XArz5k4FznizQkAbVH+45F8E1BWbYOrUrnEH1DhzPIOh4RqsWLsV1qzbAaW8BNdcfTHMnz0LpOAQWtw10tRDY2DX3gOwbsNWOHLkZJ9RxRMByOdMrdjVrp/6o5/89/xm7W4W/CMi8KmMekcrXtEUDKFKI7JC0GA6fdCOoNeUuCy1usSIEdoqx52WnKmEh0YqnKHIlE+9FToYIrROiLFZQgwAM6GMWnpqElpzvpJqYa3lQTuAZjF/l6ap0xSgPuJIwpHaYLlijGkdhLGUucynAT1z2ueFB644Jrps0qKQiVWYDQJN6xQTQnBKrF81QqGripgNM8gjW5OQfvKxmaXfHu/vwfZ4k0sCbUCdXOcxbqt54MGHhmbNml553wsxqN8DqOe4i3/dpl3w/IoXAHX+ZMziD7B3/3H45reWgioc/MSbYijCPLDWnHardxNCPcChI0dh5drepkXrvPkz4HXXXNS0qHLOm5bbc836/koeTD8Wg7piE0yb1gV33Do+Lv7vn3s0lhrg6PF+eHbZBti5+wjMnT0DrrryEpjSXQEpBDQLNLToIY2VphocGIb1m7fDjl37YXh4eLMq9GeZ0//g/cxDjz76kZdadL2SwzkH7rnpYyGdZtQtOXf/m1M2P0uMtuVQBOltBW2DxLT7DHRKg5E1amk5WOesqxChUu4awJXBDItYaqoTQsNKapRwpuTRcI+WkYZJKRoC1EjmNHBhIbNGMLQi5cYrZYninhU1KyrE0TJAQycE0REVggiIzAXLtePShMB9TlIFiWwoIySETAsrGkWaN4JLlA9pjdMSZDYfNqTcGGEdAwIrirjUM+jTmNyhZ5S2fQWxdQsFnwM6+Vq32AbU1yrBSfr5CKhzZk2v3HcqoK7cAIcOHzrnLahrN+2EpSu2wF133AALJiGg7tp7BL7+jWehVCnBW3/iZuioVEZLDJ3Bi1CE4ALsP3wEVq7aBCcHBuD6qy+CKy9b2ISgsSLsZ3BJk36qlwC1F6ZP64Q333p90xp4uq4YehFDd7buOADPLd0IQ9U6LF54Hlx2yQVQKVeAMdLSpcTGXpYOHjkGmzbvgH0HDsPwcO0ppfVnklw+/ed/9PHjp0u2rTruvb9b/xk24j6TeBC8Qowqg8qIUjHmVEjZQIouLdUUBuYlZZZUnUlSoTLqFCs1lBReG0cbCQXry6gFBiOJMyxw5Yix5dRYVFJTArZSamhk6FAxy1JiCmntFOONVcGHbuuYk6gdI7FjFKIhHInQgbF6QIEBkoJpYU2aVCnNQ3CcW5lWwcmaLUrDROTGgAxl11GjIRsckl2Q2EqDAjWMrkQgj3x2eteTrXpO7XW/Mgm0AfWVyanl7vrIgw8PzZ49rXLfz45m8TctqCvXwaHDR9qA2gTUzaMu/kkEqNFydODwCfjq156BcqUMd775ZkiTpFm7dEIuBKCENiFr6849sGzFeqiUU7jpukvggoWzIc/Spsu/7fYfPZ1TLajTp3WddkCNc8YvcCQEarUCVq/fBqvXbwdGOVy0eCEsWjgPynkWa421bGmq0Tq/FIw1sGvXfujdvgcOH+4bGRwc/Dvr4LFSN+39s4f/28CEPB+TbNI7/jDkXbX6b5Ss+cVQp91cEKMqvkGo1lNCDAlFGxKiMbU2pejBMZNaZ2RZKIm2AOF0V2IaiMRSBg1CrGUiGB7d/S41XgQjmdEUqSYcTSwxVSorTRraJ6KkLbGuhwRTL6xXYIOvIhHTy4DakSHSkI4g91YK6p0MPGF1Aom1mDikogohs9aJ4wJK4CDRlGXB+1IDQnaIkw5vsYIh5EOSp57ADlp1b3h8QVe7vNQk08HxXk4bUMdbopNkvA9/9A+G582eUb7vZ0aTpNqAOprlHt2eazfuhKUrJxegxrUNDFXh77/2FESj29vf9iYoZ/nEwekpejzmco3u/lVreuHQ0WNw8YVz4borL4Q5s6c2ISnC2bl+jQHq8ys2wYwzBKhjMh8tOxXg2PGBpm7v3nsYOjs64dKLL4Dz5s8GyTm4eEYtek5xe/FlqVqrw+Ztu2Dbzn1w/MTgnmp1+K84Zv9n9tSRvUuWLNHnsg7euySU/PDJxzoEuQNdipQ7q1MsKpktpEDHLDQAvfMdSkuVxBJTVnBtEsGUzJQiPjSIDyatYIEEbWKUooIanhmbU9QWqJXMauxIFIrg02GrI6TyGN+aMouBuNwEE5wKIeEOmSTAGFZVXSJ1pCCJpEELqGEMaJfDTEjDgrQ1mzsI/LiQmQteaMCycSELVGT9ASuDSciDhcqQww6NFMqC/g7V7OlPnyfarXLPcoVvA+pZesAf/uhDw3NnTS//ws++AKgmWlDXw6EjR+C//OI7mz9Upwsp4o/lZLSqnQqoy1ZtadZBXTBvxqToJBV7rv/zv6+ETVv2wD133w4zp02dFHD64uMRAQEJaGugd8suWL9xG3AGcPNNV8AlF84DEeMeJ8rSO0me4VMtqDOmdcPtt153Wl38P2jbY27/XXsOwYrVW+HkQLVZ9WHRogUwtae72bihlc8prj9+cx3v64dNW3fDrl17/cmBoWcKrf8qk/Lbj37yt/dPEnU448v4yY8fX1QK9De6K+Fno32TYbVAmSkZmOYlLHzKjVBGIyNWeu9zrk1g3louG5nUOuVGcaBKJlYzTlQw1lKKJiFUp8JZnCYVqSvLJBoGqKklriSVIoQ4KDFDQnBJYa2lhQ+BBuMNQZZRREY0t8Jh4Jwhr484SR0TtZylNY+y4WL+lUyVR1EkUNKepHXvsoakpULT/DixXZ7QkveYgMQa42KdUsm7Hp2F9TMu5PaEZ1QCbUA9o+I+c5Pd/2sPDc+ZNaP8Cz9z96gF1VhYumIdHD569DQDKkKhFGSpnHTxb98DqCs3jwLqBLv4x2D+uWUb4JmlsXnAG+G8ubMnF5x+nzU1ulxHqjXYsm03bOjdCrNmTIFbb74K5szsmbTrPhNP3vcCahfcfppjUH/YnsYs3tpY2Lv/CKxeuw2OHB2EadN74IpLLoDZM2cAxCKYLdzqthkD7QL09Q/A7j0HoHf7bnX86PH1AOGrBOiTn/3072w/E2c+meZ4y8eGujs76Tc5hasoMQVz3smc1EuBauasgQwUKmpRBJNJbhlxngpTWOKtoKGRA1Vccp2mdcUSYlhhNeFGS5TGUG5E7iw2lEm6uEpQu9SjRuqcF2hQSYPM+nJlWDvLg7CdvoENyhARJeMhBDbMUNBGIQsTYkZ/4oGJoQJSWqGpdowbTzNLQjIcXLlhk1wzl9Sc7xqiIT/JaUfqazlSrxqq9O6s2rH0M5didTLJv72W8ZdAG1DHX6aTYsT7P/rw8NzZ08v3fR+gHjkWAfWe02JFibA1Uq3DV772NLzzzjc0k2kmkyV1DFDXbNwJ0YLajEGdYAtqXFP/wAh8/olvwiWLL4DXXX/lpNCfl1tEtNQ5Z2H3/sOwYtXG2GW9CamXX3L+pLBIv9z6T8ffT3Xxz5wgC+qp+xrrNjU0NAJbdx6EjZt3wfBwAYsWLoArL18MHeUS2Gj1bmG3f2zjq5SGI8dPNGv5bt2xd2B4ZHgpJ+QJkPLfHv3j3zxxOs56Mo75ngcH34wiPOA62J3R0NxlSIMyb8qp0yEQJSpGMYrOOzBEQMiAKYre+qxWF0hM7liRM65IpnTQaMolb4hEE0NZEdExThUHtCYNJm9aUAvHMFhX8Tr10srCG8KtcwJCSogfREYIIvXMMxc4dz669j0v6j41jEZmzgtGOZeQDWoubMCkn+kKRUyVk9lJx8s22Lyehs46YG6Jz3RhtxdF8uWji8v/31OxGUD7Oqsl0AbUs/R4I6DOmzOj/PPvefv3WFBPJ6BGUcYe8Z/+3JMwa0YPvPfdt4N1k6cKyGQD1GbnJ0D45r8vh83b98NPv+MOKJWy1tHImMACCMf6+mHNhi1w5PARuOG6i+GNr7+iWQZpMr2cnAmhTgYX/w/aJ40p19bFmE3o3bIPNm7eA4wxuOySxXDpJQuBE9rSlu8xEK/V6nDg8DHYsnVX2L3nwJF6ob8qGXv00T/97Y1n4vwnco57/zZQuePENF/n/0qQLKKEFTIEy7htMOEMA66mlLzy3FteOKtyYhlBRyUpKCl8JYG68E4lJtU8bRQahSlVgqXURIj1zBslhDRCSC2oM54EQ8OIE5Aan6JNGdOcUI++ZhxASK31Q4gUZUa0DQIlMmCGjRSYuUApIyKzDtgxbzPJQlK3yOvS55pC4ozLNfKOwhFZA9LVoJDWHXZa6hJtoVAG36PXfvvbX3nPeybPj8tEHv5ZPHcbUM/Sw33gwf81Mnfu9NJLgGrg+RXr4OixY6fNghpFGX8stu7YD1/+u2/D+3/urbBwwaxJ8+M3lkiyZv0OWL5qK9z1lhvhvAm0oMb1HD3WD1/48r/B9ddc3uwM1Io91mNc4EitDht6tzXbVV5/1WK4/dZrmkktrRzv+ON+NYwC6vFmhYiJikF9Obd/tDYeOtIP6zbtgB07D8LUqVPh+qsvhrmzZ4ELrmXd/s1qBojggofhoVqz0P+G3u3Vw0eOb8MQvuRRfPnxz3zi6I97pi10P97z+yfeD4H8bhLolMCI73ShICJoxpwpO1RZBsbzhiYhc5pLnwijCPWuVFJ1TqjhTinqncooaCaSgghnwWuXJoniCI7lXEltbCpiDX5vPHPWl6mhIdgMYwNTY5KY+k9jxVVEpQGJ9MzahDVknYOVwqHgxoREYeDeidwFIwyzaZWgrCGkDmhqCMk9YenwiO22iLwvDz1a0yzQIInATXVD/mdtZuXf2zVQW0g7X+VS24D6KgU32T/2wK89NDJ39sz/BKjHIqB++J7T6oZ1zsOXn/wPqFbr8EsffMekKezejPeEAGvX7YDla7Y166CeN3fGhAB003qKAF//l+dh3/4+uPutt0G5nLWqt7UJBw2lYNv23bB81Qa4eNE8uPOOG5ttOM8VSI2x3ocO98HzK3th5vQpcPubrmnGfk+mq5nsDwjVegEH9h+FZWs2w/Hjw3DhogVw7ZUXQ0dnpekFaVVFHNtf3ENf30lY37sVtu/YO1CvF+s8hr84ipV/+OdPfVRNpjMZj7Xc+WCQvFK9UVr3ee7DbMZlg0swCQ1FkmiVeLBQIZqDsQkS5ygaTp0llCjCwXQKX1ACBQXTTJCiJFhgqBN0hlJpkgoYRo3NnNbEoJYSTZFqxxNmwHsjZGFAOO8LZglwX6YSGk4SywsmjaB1pjnt+U4AACAASURBVLgnWtQcT5QNnKd5ah3ywrjUO53WKJEFoWkDMC0AM8Vph/MuHbKhU1OSjBjRhdQKlGF9MeJ/YWTVf+xsW1DHQ3Mm9xhtQJ3c5/OqV3f/gw9X58+dmb/3PXe94OIftaAeO3b8BUA9vd6R2OXm0S98A956+/Xwhhsua5a5muhrMgFqtDoOV+vwuS98Ay69dDFcddnFEF2xrX7Fc969ez88u3QtzJ7dDXfdcRN0d5VP6wvRZJHZqYAaE8d+4pbJB6hjshpNzvMwMFSD7TsPwKrVW0FbD1dfeTFccvEiEIy19ItFBNUYXqtUAQeP9MG6DZv93n2HBpxx/+xJ+JPH/vR/rJosejNe67jn40M/RyF8ukJiahM6UTGNLsYUk9Z6KuuMgSuhM4xF6vSWM28y9DrNCwWBKYNOd+akDtH1H5xiAk1OgxEp1YEKz7guaHCWeWeoREOZczk3xqM0TBGLmTGcc2ddtMUr8CBJsIQjQ+ICkU5arixGjE0sRV6vQ2pFkOBJYojL6shEPfByg2BapZgp9BXjfVpH0a2CLwECrRLyOVf4P/vieT1bxktu7XEmrwTagDp5z+Y1rez+jz5cnT9nRv7eF2JQtRkF1OPHj8Ov/OI9pz021FoP33lmFWzo3dME4lKeTHhW/xigrlm3HVY0Lag3TogFtenGR4AVq7bC08+vg7vvfDNM6+k6a2I2YxbGgYPH4Lllq6GUS7j7zptgWk93SwPPK3kYRwH1ODy3cjPMnuSAeiqoGuPgRP8grFm3A9b37oburk648drLYP782aOG1BZNomrail8A1Xq9ATt27YN1G7fq4ydO9hEPf+UK8pnPfe63Dr6Ss53s91x7beBzfnLkv5Yo/UiKbmqQxFBQqpsxpTAUsS9cKUcVcxsTSlydOisJaAi26M6dVl7qVNbqggfLElQCieUCVQmMkdIZC6lB4UzKg6UpLSg6R6toOA8+z4O21jr0zCY5seAgiGBDlXPqHVAeGkIFZPUMpB8B6QJlDeCp805oSaUikFuk/KTR5YAscVxmNbQdBUCiNOuqhZDX0VYModyS8A1t+Yf+z/zOdnOGya6U47C+NqCOgxAn4xA/EFCXr4PjfWcGUMcKzz/2pW/CovPnwLvvvgUiJE/k9b2Aun3CXPxxHdHt/YW//leQIoU33Xw9pGly1gBq84xDgMPH+uC7z68CKSi8/S03wYzpU85qSH0RUFdshtkze+Anbrl60rn4f9TzF8MRDh89CctW9sKuPUeagHrtlZfAtGk9LQ2pY3uOSXtDw1XYsGk79G7doUeq9W0Q3CM4pefLjy75SEvX1Lx1SWCzTw7/Kpbo76YCKDK05UwrZ6nyFkwisI7oAy1RFQ2qNkGbGWIa2DCVzDcEJ0oIrUqy1Ij3ZUlNZSg0emN4mWoH1HSBsyYRsSKAy0snFdHBU58aWgomKOUyKXUgIcQpM5DgEciwDwLRE+BEFirGnYKsQyp9CMJ6JesxWYqgaJikZNGxEeHKntLEoa30I+mAwmcnZejQXmYhcLTU/AoFtvKzM8u9E/lb0p77zEigDahnRs5nfJYmoM6dlb/33rc1LZdNC+oLgPqrH75nNM7sNF9x3g29O+Gb/7Yc7vuZt8CC+dMn1NV7KqCuXLcd7nrzDTB/AmJQ4zoOHjoOf/Pkd+Dmm66HC86ff5pPYuKGP3LsBDz93EpIOMJPvfNN0NURS49NUOvW0yyGMUB9PgLqrB647Y2tBahj4imUht17DsOzKzbBcFXBDVddCgsXzoNUytMswTMzfDyno8f6YPW63rBr30GljX4GHfzxrCkLn1qy5D3xLfp09TA5bRv8wAdCp82H/8Kn4s1p6hgEY7IKUdWE6i7nGpRaSxnRJDifuxh7KjVlzHI5ooEHlTKuSarqjAdbZmkDiHaJDYZTaWhqDCeoUwg2Aq5HZwQNLvOoCYKDbqNJPTjOibWWeJJajzFU1SQMPSOBWGERaTUJUjkiXWAiKJSOKVFjkFqfZs4HUQhfMpTwIccrVR8qivuSavhyI4FS3aY5AvSHEFaouaX3fRGxdtqE2R540kigDaiT5ijGdyEPfPSh2rx5s7L3/vRoDKrWBp5bvhb6TvTBmQLUCGKxNeFX/uHp5lf+B3/+zmaS0g+7xiyLMcmKMTq+AnkhyzfO33Txr9sOb3/zjTB/7vQzmiQ1Vupq6ZotsGr1Nrjj9jee3e5vBDh+rB+eXb4GOkocbn/TdTClpxPCWdh1Kj5nBw8fhwioc2f1wK0tCqjxwRt7dtdu2AXPLdsIHR0VuPbqS2HOrBmQCA7hhbbB4/6QnrEBEawzsHvvAVizbgscPXpi0Fjzd8b5Pws1s/nxx5cUZ2wp4zDRA79em1lz+NvA8IOlkvUOrEsx1EnOdZKiYcQoYM6lGgwXzgXkRiaoKbXG9TRUWksUBVAJxwaj3gbnDBVBd3Bp0kwZD8HZpFA5SQz31IjMKobMURwynBEngzQsy42uh0AzHTQ40vCeCJsICo6YQkfzKh+iLAkAUhMqdDlIpUnqkYlCm7JHZLUkLWuP2aAOZY1FSVtaqkHo1EykjqALBd4bjubPPXYzjoyD2NpDTHIJtAF1kh/Qq13eZADUsR+63fuOwN/8/XeapYduuv7SZk3GU6+X6hg2YP/BY82e9PG+8b5etKCu3QYr1+2Au35yggAVAP7u609Drabh1ptvhHI5P7vc+99zuDHcFuHwkRPwr9/+LsyfN7WZ3d7dWZ7wmOTx1q+zCVBHn91Rz/7Bw33w3LJNsHf/UZgzZ0Yzoa+npxM4F63v+o8v0dUabNq8E7Zu3wUDQ8N7GsZ+1gf7tzjiDrUKqL7vYydmh0B/i6T0/ZQCeggNxrytIFFcUCUzrwmiAQyOcuPz1CgKaCGlDUKCTRqkQROruWBKUqfRoU0lKlFCzXmEXao8N5bkwQjvFbPOAxVaBuec8CYhwTKWWGGJd9IFkA1iNGPeZzSQOtcWubNSjNBq4pFySFjaCIEXymWF56mhXijFSsNApRO+rDitKOfTES86tQ+ZRShZgLUQ6LcenV9aAohnpxtmvL+UWny8NqC2+AH+sOXf/2sP1+bPmZW96OJ/wYJ64kQf/Mr97zpjsXERCotCwb9+ZyXs2XcUPnTfndBRKTVjEUkzaZ00/37o8AlYumpzszXj5RefD3ff+fpxP5kxQF29Zhus2rAD7poAC2rclFIGPv/Ev8B5c2bBdddcDpyzsxdQm6QDgAFh+6698N2lq+GixXPh1jdcCeVSLKvVct7UH6qXEVAPNOug9sLcWVNb2oJ66iYpIWCcgy3b9sLzy3thcLgOFy1eCBdfeD50dpSb1SdauW1q7EYVYbzvRKwPux127toHIyP1tUqZ/99w/bUnPrVkeNy/jMZ5wA/8+kBng9DPeUrvpuAbhIDtKGENObjUE1XKfOGot5ZoJ4A6Amh7OqBBiLOMQsEANFKlk4w2BKKREKznUlvpbWeoKybAVkTM5g/WZFaDEpYnwYQYCuCZSYJ1XnJDXQiBgEfmCJOGBhu4MYxpZNwbKRtBi9BJUk8oG3Y8tYWVSmFi0kZuvUhOOiw77zPHeH7Ckm6FkI2gKDWX5JUxwO96bH73s+MsvvZwk1QCbUCdpAfzWpf1wIMP1c87b3b6s+9+IQZVG3h22Ro4efIk/Mr995wxQI37oJTC4cN98Ndf/Q5ctGge3HXH65rmGWMM9PUNwqr122Hj5t3QM6UDbrnpSrho8bzTkkxzKqCu3rAT3taMQT3zLv4I6k/+0zPN+NNFC+eflr2+Vv0Z788361MGhE1bdsDSFevgmqsXwRtvvBySRJw1kPoSoLa+i//7zz8+O7G9bWzIEF/w4vPDBYfLL14MC+bNglIpH+0e1nrhmy9uNe4venf2HjgEvZt3xZeNvcNDQ18yGr54/my9c8mSJZPWaveuXz9xMU3I5xiKyxAxdElbRFc9cKpKMhSCBNOgzgJ4Gw2slZQWkqNNpK/HlM2MQp0HqkKuTSnLFdUNxwXVhTGKButLXbagGHwSqHKp0CwElyVKWxIBGE201hJCXKilTfeYrmhCvGecW1ZXhBNKGTgiGx4SjUFUpySZ14GZmssc9UmV+6Tuk9xpTH2waR/KKQViopjtajiUIx7KzNtNPIEl07ds+uaS226b+LqF4/0l2R7vP0mgDahnqVI0AXXBnPRnf+rOF2NQJwpQmx1enIfnlm+E5au2wL333Nqsjbl+065mPGj8+3XXXAg3XnsJcE5PWyLVRAPqaO3JAOs27oTnlvXCm265EebOjI0CTn/C2itR81O7WJ0Oy+aYy3jV+l5Ys3Yz3PL6y+CGay4GzmgLY81Lkj2bAXVsl6MNJhBinePnlm+C3XuPwtQpXc22qXNnTwchODjXrE31SlRu0t0zBuKxberGzTtg/aYdxcmBga8rZf9w4Uy7ZjJC6rUPrOLTxZyLuvL0UYbsiiR1BQF0ZWEbBL3lCSnQeG2kdxyJpdzbPMGY+FRQiqaU0gYNYIQPinZ4TRkaHbTNGFUUUYdQM5I615lR5SmzWlKd04ZNLBqmtGOCGc4TZ/KaDYF4p1iMMSCeeUo45zogZ6JETagmjaCEZjKLdVBV3Wc2oAjeZ/2aJjphGaKUI6aoVJ3PhyTtdohyOLgu6ykjHg6qhLzri9O7Nrdd/JPu0TktC2oD6mkR68QP+sBHHx61oE4CQI3SiBDSPzACX/3HZ0AbC1kq4VjfICxeOAfe+IYrYEpnGZwPp9WaNgaIq9ZuhTVNC+qZjUEdS5B65vkNsGXHwWb86fSp3Wc0SesHvaKyGGuB0XpkRuECAQSngIRBcB588ON2LhFSY/jaspXrYeu2XXDHbdfBFZcvjFO2/PUioC7vhblzpsGtN191Rj0VZ1KATWujc7Bt+35YsWYrDAxW4ZKLFsGihfOgo1JuWltbuYNYXH9sC7tt515Ys36zPXys72ugzf/7+T/36wEmnyX1Pb/e/4Y8F193JHCaOOeNbEjhbSVRKoDTHMGEhGju0TNEm4qgBSNG5KGReGdyCIrkLLZGNc5ojTKWqaIavdMgiMtFUCnF+A2hU46GgjWsYa2AYEk5WIloRZ7YAUU9BQfea2p5YIxJ6upKBpmyItSEI5ACIqsSzH2grLAs896mAwaSeuZKxJWlRsyrznYa6pPBQHpUoLLqSG55+CYK/P0v9HSsAcTWfAM6kw/pWTDX2fC7cBYcw/hvYTIBKqO0CWH7DxyFp55bD8tWbYFrr1zchJPoYo/fNGfix+xUQF27cRRQ5805cy7+pvUJAL72L89D/8kqvOmNN0BnR+WM7P0HadgYRBzv64eT/f0wPDwC2miIMYdplkKlXIHuzg7o7KoAZxzsOHUDQ4KgtYZnnl0Nh48cgXvuvgXOi3rQ4vGoY4C6LMagzpkGb3rD2QuoUZ+iLmN0+1drsHbDTojPVCnLYfGi8+C8ubOhVMqa3ptWPdcYmxpf2rbv3Aer1m6qHj16/IsK3B9/4VP/c/dkMhHf+eAO2cOmftABvo+y9AoplA6IRSaVlqWgwDtLOzNFrHOJpRaCd5wrWyphnUZ3vTa6Qq0KFAykokFpsNyPWJkJxT0amktNuLXMa5ME1EmC1thgZBwvYZoJY7m1ziaJtYIGcC4mRhLPgFaVFUQiJcEJG4L0xkslWUoQuA48GfQkcdYmBqA0zCDRAGkBSakINB/0rstgyAvKy1VNpWX2nyjW7v+rOXNOjv8vZnvEySiBNqBOxlMZhzXd/+BDjQXnzU5eikHV8N2la6B/oB9+9f53NctOne6LkFF34I5dh5qlao72DcDCBbOaLvxoobvz9hshSeUZA7QxQF25dgus3bi7mSQ1b860M2bBbM7vPXzpb/8duMzh5tddDdkEFOhvNrJCAoePHoNVqzfBoWP9ULcdgKILKE2bdUq9rQKxQ5DLOvR053DhogvgosXnN+E1vmy81quZPKeKJqSe6D8BP3X3LTBrRk/LwkyUxyigHoOl0YI6dzrcepYD6ve4/QHgWN8A9G7bC1u37QfrAS5atAAuXHQ+VMpZy7r9x0rfRUhdubZ3qO/k4CN1O/TI448sGXytz8C4fX5JIG9rVG/OGu6feAlJiQTNXShIGrTsyHTKGg3K0AutNAT0dWA2TZwpJV7zDBrUUlOSUAiHDUKDkzloz5wTiVLSlw1jxKbSKR0KGwEVkmBcAJ94ZQRlNi15TUjdhTp3lgQPWQbeSaJ4wa1HWjSs5CxQz3li0EkLKMExadDIY1Yk5YC5BRQHKK0ACaKApKz+L3vvGW3HdZ0JfidWuPe+hEDknAMJgiAIEEwmRYlJlESJkt3jbluWRfV4WnTPmp5eVodpdU+vET1reeTxzHh51CPZLVuWJdotW1YwlQiSIHIkcs4ZL797b9WJ06ceHkmxKQrESwB5z8/3qk6d2vvUra++vfe3iWrucTR1jLTWiI97tEuIZP9eJvlffbV5/JEhs11johvaAg2AekO75/oXVwDUmVPiN0L8IwdQw486Z7QI6a9dtxP7D50sCqDuumMh5syegvb2Hnzjr3+Cxx6+C0sXzSxAyUiQZ68D1O37sXPPsYJBDUzXSLC3BeNESFHB//VvvYDx48Zj1YpbIYQYUVBWFCuB4uiJU9iwcQcu9cVIWxZBlsaB8VIR1i9KXYyCMVWoWjvy6knE/hIWzpmM229fgpamCqwdfN5sWEtnVy9+9LN1KKURPvGR+5DEN68Y/JsB6rSpt7znGdS3/jqFav6wv89euIzde47j6IlzaG1txfLbFmLSxFtAr3ZQu/5ftdE5kxKKTOXYtms/du7cv6+nr/s/dl+Y9+3nn//k4B+CIbilj36xs0Uh+o8lrR+VjI7jTKnEUOVTlqcRUZz7vJy4otiJZtoaIh0Sp2TJZ03S51w4lRJWFx6acl0n1LtoTJSHaL+slxSl3SZOhOYpyZ2x2jFreSxy761rlVp5a12aWuVN2RlTczZiJNcxBwOBspEyhNcEjVhAszyLXE+SeO5lzdi4W9KEMBLVC91TIaseJR+RNKe2uQOkyXhR7iO6rBSMJX59V1/7p767YEFDA3UI9s3NMEUDoN4MXrqONfYD1Knxrz71SMHs5ErhlfXb0dXVz6Dmw8SgDjAOG7fsw8at+0AZw+o7F2L+nGlobalc7Y3tCxbRWYePPLGmADwjARJvBIAaGhd84/mfYuqUqbjz9kX9Ej0jlU11Ve7pzIULePGlzejM2pCOWw6ZjC3CtT8Xig3HIuiAeRhdRd53GrpzJ8a3cdx913JMmzyhSM0YivDtmfMX8cJPXsHi+dOLlqhuxAxyHQ/WO5wyAFCDFFNIXXmvh/jfPm2kCPyjWqsXKT1bdx7GhUvdmDNrKm5dNB9trU2Ff4di3wyt9955tpAOE7pPrd+8y584dfZPtMn+16/84b8+P5Jr+EXX+q3/6/Kkepf8OM/8/54Yn5vYadHMMmpgmuFyGiEn1NlYQBFHvEekReoViW2eUKfiKM+4t6rCUWeSGWetSgXTScnrzHgdO2tIGqk49kp4b4QginjqZKlHOyI18cbEhlpPqfPGWJvyUMBPhSOCcEKrlEZaGelkLLOaj7yxEStXo25TTmqMRH3elD2ctDQp17mLLaXlniqpdEe6Uq2pJl2KK4ZIIin5dNtY96MvkaZGiP9G2HgjsIYGQB0BI4/GJZ75/HPZzFlTok99bOQAamDEqvUcf/7NFwqtxDtum4tlS+diTFul6AwVQvthBFB2/OR5/PV3X8aalUtw5/L5hRTVcL+0boQQf2AMv/k3P8Pc2bOw/NaF/Yl8IzT6uwNV8eMXN+LkRY/KhDUQyZirYuvvgJKDY52Dql9E7cpOpLQd9959O+bNmVGkCgzWb+HjZP/h49iweTs++MAKrFg2vyjAudnG+51BfbO/QnpPsEdHVy/27DuGXXuPI3S4vXXxPCyYP6tgym+uav/woDrseO0gNmzddaSnt/YfprbVv3EjVPV//NlsLkv015mwt8UOOop8nUpiKl5mVGqNhCiBUJ0fLM5cxJjmCVSz0LllVBFBsohkKjE6d80sD6L7TfBaEKIVvC5FUWhvarm0igqmnVMmZVxRrpyVkYqot02EasO89yZ3ijhKScoIiaiyvTGBY1rQyBkqqlpGVJDYknqUIU26nY3ryscuQsl7Ijsj11T1NNF9cZMSrqXT5SUdRyVL6XkH8ZO+Yzv++fN3312/2X4bGuu9PguM4Ovx+hbYOOv6LFAA1JlTok8NMKi5wssbtqG7uxOf/+zHkOXDk4OqtSnkZ+bPmVqE9aNIvi07GlIA/uZ763D69EV86qkHccv41mFnUUedQaWk0H391ndexOKF83Db0gUjJ3AeugJZjx27D2DTjiNgLauRNE9HgRqudQScqqrovbwdXJ/EfatvLQTbh4IFzvIcW7bvxolTZ/Drn3gY48a1DPt+uNbbvtbjCoB65iLWb9lbFH3d9z7JQf1F9hmQLQu/CZfau7Fr12HsO3QK5XIZdy5bhOnTJxfV/oP9wLlW/wz2uLDWs+dDjvEOd+r0+d+vdlT/w6h3mvqipx/v1ssZ019m3K5ASnJJiWompMaFMQl1uZNeM0ZNFDltiHMCxMSC1yMK4yTPIqEVi+sqJbROhNfMEdNEVU65N4JQxak0TPkcTcqIlGvBnHaGmlKr16RmjKDCuqxqmPDeV1qcc5rxcMHci5w4LiInagQRFBF9VZcYyQRxKqlyEfd6GinCU3gSGerLdefTXpCSIq5FE5m0W95qpI09cZGj/pEPjm/72ScJufm+Xge7+d6n5zcA6nvU8Z999kvZ7BlTo0+OMEAN5tTGQoqruYy/gJgLP/aXO7rxzW//BHNnTy667sTR8Iq2vxmg7tp7rCjSGtkcVODchQ58+2/XYsXyJVgyf+6QFBxdyxYu2NNaDT944RVc6BmDysQ7wVj87ouRQ6GXydB7ZRdI7RA+cP9yzJk1vQAagxkBpAR2+Scvrkdzc4xf/fiDCLl/Nwt4Cfc+AFA3bN2LGVMm4N41t71nZabeja8HnjulNc6cvVKk/pw+ewUzp08u8lPHjgkfp2HGkcp1eTer//ljjTbYuG03tm3d/TOXm3/7x3/8e+uvf7YhOPOLnj6dVT/IhP9LpmzEKVWlxGURJdqmLktALBE2hPlVAuakYdaITHtm9dhyVAUhWnKd0YjoiPlMeK5UnFkuM9VkhGaEWBHzOrOwNq6qJsZN3Ma0qxtNImqj3GhCuIljGkQ+XPjVVxGo1ppTH3PDg9yq5zVKI6d85Gpc9MWqZAkR3RSpZ0z0OJEaqsvE86juUbaKlXKCyllH2zQL+qiubA0Oeml+vzZ27PPPE6KGwHKNKW4CCzQA6k3gpOtZYmBQZ8+aGj39sQ/156DmCi+t34renm78s2c+hiwb/Wc8iC6t37wH6zbtxqc+9gCmTZlwPbd6zeeMPkAlOHPuCv7679bizhXLsGT+7JEJZV/NPT195hz+Ye122PJdKDXPgPfXS0QENQKFvstbQetH8fgj92DKxPFFEdhgRmhYcObMBfz4pQ24a/nCAvzqIZK2Gsy6rvXcBkB9Z0sN5KdnucKho2cKublqX44lC+dg0YI5SNPkhgep4R5CN7R1G3ac7+rq+Nf/3//9b//0WvfHcBz3O1/05Vp77Qu1iv0NS11LU0wywWFavMuQWB3zKBdO56EXadnBOSoMhDUJq2VChD6lUT1hVrMUOSdOlXKpGM0MmpRKONfwpTyoBLYQmxOf2RShSMoZL5UBi0zknI69sFmFGi+9q3RZuJTTqtBcE81hqOAk4prbyFkru/JSor2VNjVp5r1UHkmPo0kukUrLkj7LKsaQ5JITLTXvk4yTFued7HXUeOqf/Pb0lrUNDdTh2Ek35pyDe6PcmPfUWBWAzz37XDYrANSP3rgANeRfGuPwF9/6ESIp8ORja1AuBZmj4WFSBgDq5m378Nre43h0xKv4gXMXO/DXf7sWy5ctxZIFc0aEQS1SSD2we+9hrN16AeVbVkFGLYWc1GBGAKm959ehIjrwsSfuR6VcHsx0xbkh1B8AwN59B/Gxx+/F7FmTh62z2KAX+5YJAkA9deYiNmzZi5lTGwzqO9k3POM9vTXs3HUY23cfRpqkuP22RZg+dRI450Ux5Y04wm/IydPnsXHzDn32wuUv/PEf/Is/GL11evL0H10Yy4+XPmPhv8jLXiUxdLO1de6hfYvNuRQqUVBeMMuodnVKTRNDnjhrTLOrEUbNWK7qYDwwonnFKkU8MyyxWgYFAOONp0zJmOoSrSvpqSXM65xxI0luiDYmSiPjSsJUWO4ADsIJQ92yLmqEq8eRp7lQJc6tRaw0kVbykrJedFOX5HCBNU2cERUIF2fap1cgm/sYT5WhrQoucsaVtMTmXmY/8/yrLx7BJ28M9YTR8/v758o36M/A+8cBw3Wnn/3d5/K5M6bKT7yJQX1lw1Z0dXfj8zcKg1rsPoIjR8/i299di8cfXlXITg2WiftFNn0zQN297wQe+cBKTJ08sjJTFy934NvfeQm3Ll6AW5fMK9jtkRhBgD8A821HGVpvueN1OanBXtvqKnrP/gizJif44INrIIrUjsGNzu5erFu/Fc5p/OpTD6JUSm6KfNQBgLqxCPFPLDqkhfzLxnhHqIpLl7uwYct+HDpyGuPHjcGypQswccK4Aqj2VxGOzDNyLX4KUZ+Ll69gw+Zd/sjxE//qT778e89dy3nDdcxTv3dxlnelnybejhHCFg2bYkE0hcujxOYi1MwrqzljNo250d4aSrQqS5cL6jWPeT11NmeMK1txRcU+y0gum5mOKkzzLNdUeRMlJkckdUy8QUa1T7ytlFzuvbGiqcn6nl5Lg8pzSijhnPJM89x7ESRQFWVcRTaqEy+ZMqn1VmYkTTNipWIu0j4tGfjEpCrprtLmuhKlaok2e5Ckw9lmaBAQzQAAIABJREFU7RjTkrxINX7361OaDg2XLRvz3ngWaADUG88nQ7Kiz/7ul/K5M6b9PEBdvxU9vd34H0KR1A0Q4i/g6dXuSv/lB6/i9KmL+M1/9CFUKumQ2OCtkwwA1E3b9iEA1EdHGKAGHcjL7V34q/+yFgsXzMHtoUhqBN694SHv6O7G+o17cLJvGiptC0PF1NDY2Huo+gXUzr+I1SvmYsWyxcGpg5o7sGunz1/C2pc2YOnimXj4gRU3FUANOaizpkzEPQ2Aek37IDyXIbfzyPFzeHXLHnR09GL2jKlYvDAogLRcLaQKU43Aw/JLV0zQ0dkZCqVw4MjxL4wqQL1jq/j4B2/7PHXqA0L7+6LYaZZAcW4U41QjcvUWCU2sNyJ2hoM6Kpii1hpZshkRcVYmTldYnnuCnMTQSaY1pcyY5jSvuJrmnJiImCyi3tiUahYzTerUOlbXJUm0MDUj4lZLNXO20uNRKFmVmHOaG+O5JT6UavGqjaJc2KBvGoSsEi+8CKF9CJbkRsb13JWVdFE7J03WkOacIOl1psXHNK4ZnijL/03W0/2V5xdP7filLmoc8J6xwODeJO8ZM7z3biQwqHNmTZNPf+SDV3NQc7y8fht6envwzz770RsGoA6A1M7uPnz169/HHcvm4f41tw0Li/o6QN26D3v2H8cjIcQ/wgxqV3eQmXoRs2ZOxx23LSrEy0fitXvx0mW8snEfOt0iJC2z4N3QMXshlzXr2AfUduHjTzyEsWNbB5WmEfBtPVd4bc8BHDp8DE8+eg9mz5g4IukQg/kl6GdQL2DDln2YNW0i7rm7waBeqz2LD9Wiu1iOvf/143HT9n3wnhW5qTOn9bdNHXh+r3XO4TmOoLOrC+sDQD18bFQB6tP/pmsm8XJ54vOvMgYuOcuEUMpRqqOYKFCaV5jXVEAxah0BManhBsQp0WQym0aqjdaCrJQCZcpFPOfeuRg2o9yZGLmhUZQD1oiE6BIlyhFvJcm1J9bGZeSUCktKTSbJc2cl83VXZ0QR5hxhSinpWRAQdHEPlQKkInOYWGkbVcsq8YRFxrtYZbSknI9qddHUHbuK9r7cRdDUl7vUlEUTKOs1mvxZb7Xvue8sbLQ5HZ59fWPO2gCoN6ZfBr2qZ579kpo9a7p4+qNvANSXXt2K3r7eGxKgBipx3cbdWLdpD37r1x/DuDHNg7bBL2RQC4AaQvwBoI4bMXau6CSlDL7+rX/A+DHjserOEegk1a/Aj9NnLuCljQeQRbcjrkwdUoBacFs2Q/XCTzFtPMNjH7ov9OIelP+Cra60d+KldVuRpgwff/L+YVd5GNSCr1bxnzxzARs378es6RMaAPU6DBo+2EAJ2jt6EJp97Dt4EuPGtGLh/DmYNHF80Rq42G8jEXp42/X3A9RXN+3AwVEEqE8/7RmmoJmX+jZK4qdL4eoMTAmRa8FEHlRHvYBqI8gYnLNRZiNQ05RVVE1WlSj7nFGWJZHWnJlcijgHYyaKnUIAoZ7k3BkTSaapVVo0eZOkXmnHVMSpFSzLqYUjLjIipiZhcL1g4JGlqc1Yey6k15qJKJJ148UVR2NDfSwIk3Vqkox5aQyL+ywpW09FnamKsoirhLVUuax4ppPOOlo1iWNOhMmofTKbfGrd82Tx6Ff3Xse+bpxyfRYY3Fvk+q7ZOGsELBAA6pxZ08Un3gRQX16/FX19vfid376xGNR+FhVFd6uv/cU/YOyYJnziyfuH3EoDDEx48e09MDoANbxY//yvfgQRlXDf6tuRJPHwvmz79cVx/NQZvLzxEHTpTsSliYOo4P8FbgksavUsbPtL+MCvrMSCWTNh3CDSCIJuq/M4fPQENm3dhVUrFmP1XYuK7mM36nidQd28H7OnT8CaBoN63a4K2rpaWxw+fgabtu7HlSs9mDp5AhbMn40J48cUuc6jI03VH+Jfv2kn9h859oWvjFIO6ur/wydj2/v+N2nJR1OmxkYk1MvLXBKmhHQaqcni2OtYwHiNIH/qW6jNEVhQZlRTapUjQiVa1Gkl5JISU46MpkEtueKziDPNjbaExiqCNbwp0ym8DriSlKimxjiZGcUjbnzMrDTU1rglmjsaRZb1aSpSwyUHoZ2wSd17WYWPc+ciGrpHUSS5DuF9EuWcVAyDzDxpyhhJq4ibjDWVXqvKmovEmmhLr8Gfd8xOv7qWkKEL/Vz37mycOFIWaADUkbL0CF/ns88+p+bOni4+8eTDRWvBPA8h/hsXoPabh+Dg4RPYe/AUnnri3iG32BsAdS/2HThZMKhTRphBDWzmt/7uJWgF3Hf3cpTLpREBqMdOnMbaTYfgy3chKk0YeoBasKg5qpc3oC3uwMef/CCECN3BBuHG0Jmsr4aNW15DT28Xfu0TD6FcSkeM8X63K38DoO7D7OkTGwD13RrwLceH5zXo61ardezedww7dx8pIhCzZ07DvNkz0NrafLWT2Uh+tLwBUA8eGb0Q/+NfbH/GeHZ/avCYIIQnlOSpYDkPVfpc5Ta2OpEu72PEOC5ck7G65LiRsVWM63oitc0EsgiRaiqnmTPdmnJjEylybbUrRyxnPlNgcWBTVSi2oqG7VMnriAvLnFMkpVZ4qn01d5IxxxhIX+yoiBzPNZfeG563+8hxyeplm3jO42quJXE+6hM8ti6O6zKvWIJIu6SsLIk7qW7uyVnFUZS6Ba0YYyQU7ev29P6/mVvZO8gt1Tj9JrNAA6DeZA671uU+87vPqbmzpouPXwWoIbfrlVe3olrrxX//mRuPQe2HpwChFEHxebDC729np7cyqI8+vBJTJo1sFX9Y1/de2IArV3px3z0r0dpSGd5K/qCB6oAjBUA9DBQA9ZZhAaihK5WqX4a98jPcs3pJoVQQfHndI0R7PcHJs+exaetOrFqxEMuWzinksQYFfK97Qe98YgCoRYh/037MnjkRa1YvbVTxD4Gtw29BiLBcutyJ7bsO49CRM0iSFPPmzsSMaZOKj5YQmRiZsH8/QH114w4cOHTyC1/5o3854lX8T3+xcxlR/kPc0E/nkkyNpVMCUsWMqXKSa0Gt5amuOwuTeWJELG3EvIkoMS0MmeA6jy1yx2DyhGQppSoWWR4zZ6JIau+sVjQwstoKxnLumRnrTW6Yt7rCdZPz2tS8jVq8NtS7OBPWV2qOW05UlFKvtag5zgnywK/yOueRAY0095EmNtLay7rlaQ6SGEHiKqNlylhUq5NKt/flqnXlPsdalECSUZV6L77D2vjv/Gm5fKWhgToED9RNNEUDoN5Ezno3S/3ss1/S82bP5B9/8gMFg5plOUIOaq3ei9+5QQHqwP0NVzHEGwB1D/YdPFXITI00QA0v0Q2b9+C1vSdw/713YeL4scNb/PN6iP8sXt50CDpdgbg0Cd4PAji+w0YMXaZqnbvRKk7gqQ8/AinF4IBD0HA1Fq/tO4zjx0/iw4/djYm3tN2Q2qivA9TN+zB75mSsWbXkpgOoYbtQVnwqvu7l/o+BAABHM/cTr7dFDfmp+w6ewJ4DJ+Gsx/x5s7Bg7gxUyqVCV3l4q/1DfmwI8e/AoaMjX8X/5L/qu4VH9oMyY/9CaDcX0uW05G3KvWJUKsmsY9TVCfGWOZXTODVEwrfKTNc9M5FCnsYmYwxGllELcY+KlfVSKdMENrQr1ZQKHbRO09gqwULcXuS0YFVzpWRkpFSG8EjTWu4coSZp9pYx41WdU8cJJdqJOhUi55oTKmSNGGk4lXmdpo4QXs1lmTDwGs1LfWBpVZIk9kiN5XEnbGsXSIvSNBWRr/Q55L0i+h4I/qdv3lK++G7egY1jb34LNADqze/Dt72DAFDnz5nJn/rwWwFqH37nMx+5oar4R8oFAwB1w+a92H8ohPhHGqCGFzzB3gPH8JO1O/Dg/aswbfIkhA5KwzauykieOXsBL2/aj6q4HckwFEm9Gc3ktXNA5zrcs2oJli6aD230oG5voGDqhz9+BbcvnYnVK5cUOYgjw5hd+9ILgHr6AjZs3oe5sybj7psEoAaGktFAtYciPoXunhqqfXVoZQqwKqQopN+ayulVnVsHY/oZy5H2QRH2JwShberZ8+3Ys+84jhw/i3K5jFsXzy/apzIW8lOH65nqB6ihSOrwCAPU3/xyZ0tvb+kp0uMeFdQ8UU6VspaYGF6RCtGMUhs5nzPrrY+QUeosl9yRNDetDIZRmdvc54I5g4qpgcE0gdVTBlNJMsN5Obe+zwnBcsKZJszalKncW+cIETlLvOGeWFEhuahbT1yQpBI2SZjrZRZaWRqLEs+4YzR3AtwL5YzQlMoeK+M8FzITtZL1gtOYpXVn4ppiKeW2VOM87iVRWVndVNWk3Ae0euJlBi4c87//nyc3/TuQEAtqjPeTBRoA9T3q7WeefU7PKwDqQ29hUBsAtQCoh0/i0YdWYvIIhviLNAYCnD57Gc//7VqsWb2iyKVz/dUewzouXrqCdZv2osMuRtIyc8ir+N9YvEcQ769f3oYpbX348OMPFhX9gwIyBLDa4pWN23Hh4mU89eE1mDxhmJnn6/DG6wB1yz7MuQkYVEr7czy7uvtw6MgpHD1+ARcvt6Oe6QLgUcpAPIpiN85ZUUHf2tKEGVPHY9aMSZhwS1vxd2tDD83h38Nvdkm/LBVQreU4fuIcdu05VnRpC4VUy25diFvGtRWM79Cv680A9eQX/uTLwx/if/Tzh6OWelOLHMN/jzRFE9BDPgZBlJTKitTnJPfOCZ+Xic+JsJZKoQRzDp5qpmB9RduUU5UwYsrEZDXGMjBixkhSJ8yYNBRWWa15KTIJlFbcGyKIEmWWE0ktNUpzax0VRMWaaNIckkuNDdKotCQMNdJZCxJzRfucY/UmIVxuivA+jJX1iIrMh5xTniAivFexkuOE9/i8wjWLtSdJNY9L3YkvOXRXOn2lTXsadcBWiMclIu1/1wGz9e8nTapdx2PZOOUmtkADoN7EznunpT/z+ef0vHkz+VNPvAmgrt+KrNaHf/pbH0Hoh/1+GwMM6vrNe3Dg8KlRAqgEPX01fP0vX8C8ubOx7NYF4CwUEw2mmuiXe7KruwfrN+/GiZ4g1L8IGKYQf1hJ0EVVvScg65vwwQfvxeSJ4wedxhB8d/FKO378s1exYO5U3H/3rYXsVEhfuVHGAEDduGUvZs+ccsOG+Adyvbt6+rB1x8GChVTKYtzY1kLDtrW5uQCjlNFiXypjUK/l6OrqQnt7F7p6e6CUxpiWJixeOKNoptDW2lykMwz3Pn6rrwee6e6ePhw4fBq7dh9FbzXHgnkzsXTRXDQ3Va6mgwzVPhkZgPrAF1/ka/GAe6ravcxz3Ucd+9NKLbeiUrqNe8oMgdYlqyPurcxpziPoknY6a9O5Z8SPYURZH/TyiS2Va6rIRJc8i73SjJK8iZWyig3otC8nCTHME60TqyogNpJeSet1JKTWUaa95DayRiWRsCw3hkiqqTcuI16XE+OkpM6qiHLiyKU8jzwnzHMi6gpRZDzvBY8ot7EGojymSQ7GrTZpzfIEWiQ91JecFnEPz5tVRCs1Kkv1umk1DpwQupmDfPmP5rR+50Z5zhvrGDkLNADqyNl6RK/UAKj/rblfB6ib9uDg4f4c1JFnUPvZxK//1QuI4zLWrLq9AAPD/WIPIdEt2/Zi+zGO5luWg5DQRnKoXtpvsbX30Fk7TMerWLZoItasWg6tBxfmDymRTlts2r4bQZHg6SfvxaRJY4e3wOxdPrEFQD11AaHV6Y0KUMMzEFjFkOLy0rrXiqr4eXNmYtasKSglCaJIQnCOwK4WI+SdwheSTiFVQ+UaucrQ3tmLo8dO4tyFy0XdyoI5U/HAmmVobinDWjuiRWwDrZHDda+0d2P3/hMF6E5LJdy5bBGmTpmIQi5+SFjeoQaovujU8cC/B1v772Af/0J3S1SVpaTFtaqqnkmZXQ0WPaapncIJROo8lbFXvgYDbl25xSpPqCVJmkdWKye1rdBIERjnNZwUVsugSEqtYpQZxkneJF1OfGTiOMuYE8ak3lSYUqDeImEqJcS01XTuKrEGC58nBai1lUqqSc1oIaj1ca91Xlga0gogQxMFqhQY4YT2+VzC2sgSxhSlce6JUIomoIg1y2UP8anOvKz7KCUsShV1kcpVpSZpmqeiqdeiNbcm7gOXMPy1JI+e/n8WJSff5ePYOPw9YIEGQH0POPHtbuGzzz6nF86ZwT96NQe1nuV4+dUtyLIa/umnn3x/M6gBoB4JAPUuTJ44ckL9wU9FaNJ7fP8nm3D+QicevG81Woa5kj+EQgN42rXnEF7e3oHKxLvARSUIjQ7T7g9h/jpq7dsxraUTTzz6UKHOMFgQHoBQR2cffvijl7Bg/lTct3ppAagGO+9QGSEAoBOnLmLj1j2YM2sa1ty1+IYqkgp7r55leGX9HuzccwTTpkzC8tsWo7mpBCHEAB4tGju83SheFlfb2AbmWuUKfdUaTp45h/37jxZAdcXt83Db0tkopSMvBzbwARqY3AuXOrBx2wEcO34eM2dMwbKl8zFuTFv/PQ6KdX83ANXTwFx++Jlz6Tmc0/Pb7ij3dpzP45L1TVE0uSfPOyQZ83BVdm+SUn7MatpBuF0p++KZnoDDmttE4B65SEGMCjRnCyfaharBnJq4YhSYg09dHlmhYxBdEUZbljjUvWOp1iHkn6RpBgIX2Szz0qmyMAo+yVhcdyT3Km4hOqLGEBsrL5wbw3xOwYwvw0iV59VEu5RLLSXR3ChLXKop9c5QaxNJHWDBiaIWKTU0l6pGheSS9VGbKA/WnoiU1SBpxqIeplJVstxoX6oZpI7xuE+YZmcIzzRp6RO8opms9OV5uSaoFjXxR7GR/6kBUIfqV+rmmqcBUG8uf13zap/5/JfM/Pmz2ccef7AIgzYAaj847O9YtQcHj57Co6MEUAMntW3XoQIoPPKBe3HL+MAEDhdYvFqQ7YHDh0/ip5tOQLSuRJSOGx6pqYEd6h2y3mNI1VY8eP9qTJkYWpUOsnAl5KIah01bduH4qdP41aceKHINb5Qw/88D1KlYc9eNU8Uf9n5vX61gTQ8dPYM7li3C3NkzEUX9wPR6RlF/R0Lttym0Snfs3o8jR0+ipaWE1SsXY/6caRCcXc/UgzpnAKjWannxIbpl+wH09WVYtHAeFi2cjXKaDGL+AFA78OrGnTh87OQXtiz4n/9g2+dgnv4iRHbuPEcFab3cmgoV18dFmFnvVX0m65nFmqJxFMIlutpsmZdE+Eig9Fiu/SFts4c8xQGW4W5eQa+nqEAJI4jjUSKc894qB8/LMLGjnnNjiINiwjnFnKYELq0xZZg1rbE3ikVeem9li9ESLqfM29iLTHCYjNfzFsFynTPLS16FblEiYUb6AEqJjdOqpoTZWLbmhHWbSHvtpbKOc2NBdHOUG++FK/UJFRI62BjmFBRlxBKTUUEiwlSfkTUtYsslVczHinlBiEwziCg39dhyHecxi3PGSx11X9IgkTK0RTkbtzPfopSoSGKiWhL1auX+8i/mtP7zQTiscepNbIEGQL2JnfdOS//ss8+ZBfNm/TxAXbcVWV5tMKivM6gri/zIYQWHb+Ok8AI9d/4KvvH8T3D/vaswe+bUX8haDcn2DAXaHjhz/iJe+Ok2mPJdSJpnDGseali3ql2A69qCO5ZOwMo7lg1OE3XAEATo7OzB37/wIu5YOhur7lx8tbJ8SCw1qEl+LsQ/a8oNA1DDfuur1vHy+n5weuftSzFn1gxwTgd1v2892RiL9o4u7NxzAEE1Ys7MSVi9chEmjO9nLkdr9PRWsW3XEex47TCiKMLy2xZixrQpiGRIc3m3r0CC9vb+Kv59J3r/zzPRr/1+pdc/6MvZNkbVU82Mly2I7M75/YKJ15DzJx03J22cLxKa1yjxKWIoqiE4hK+x3PuQNUplyPNEZCNvI2Wd5qSJKWsYcZ4xT1NjHWFedDEjKsZZHqSdqAKxruyJovAuh7NxDAvGvYiUiqk3ghAF5nNriRuf+hqVRAtCQiGUZkwYAWNCRignXkfMKs/hRMpUyogRPjPoI5rH3qIUaWJC5ZM33EZKGOpyVvNpkvo6t5S4jGtNGIQXxKTc1rnolTwxxLFaUk+9FTI3IvacxFrVo1rEEitdSVkXX0ClxVIqOqv1NniUe1RU8tTHLsWFLi6e/ttXvrcNn/zkIL9uR2v3Na47GAu826dzMNdqnDuCFggAddG8mewjj/cXSYXQXtBBVXkdn/vND79vQ/yjzaCGLRAeOm0svvL17xcyU3fesRSS8+HKCC12XQApPb29+N4L69CuZ6Bp3K3Dm4cKwOTdqLVvxfzJHo88/ADMIOWm+u8DMNZhw+adOHPmLH71Ew9hTGvTIMO2Q/Ng3ogh/mCvLDfYtfswtuw4iCWL52PR3Nlggg/LR1HRslgbHD9xBtt37kMpFbh71VLMmjahqPgfzXH5chc2bN2Hg4dPY9y4Mbj91oWYOGFcUaR4NbhyDcsjuNLeUeig7jzZtMfI1cbUpSItejK3xsWMtkATKOdJXCROU1KzArbZOeSOJsxaxByRI743c95T53kEwFLPUUcEYsI5TkmbutBjSdhQQk+Y90lsna8xH8XWGMmM0cxxDhUTeMKsiSPlQg8Ll0jNiHbN1OQQLufWG2iRgcPEzV5VrFE2VC2JRDtqLGNWJdRrgFhStkoIahJijQtXCCJTTOoogZVRpiMS65x6503uPDWuklagtWPEadbFiYiIYbrOJWgaWS5YTrNEC8KNFUl37mLCEFnvyzXvhWW61Ol8JQOVvUy2Wccik7m2Pq/T3AsjyvRbOZNf+7MJ6cZrcEzjkPegBRoA9T3o1HBLIcS/cP5s9uTjDxYv7wZA/fkQ/6Gjo5ODOgAWw7vrO3//Cjp66nj4vlXD3vI0vIADKH7x5c04eMqidMsq8Kh5GPNQCZypo9bxGiZWzuPxDz44eNH+t7Co3/3hi1h1xwLceUdQQhhaNvB6fhbeDFDnzp6Gu1eOfg6qdx7HTl/AT9duw7i2cbhr5VIkoSjPDVOB3FXDhQ+i7p5ebN76Gi5evoLlt80tclMrpWREC6je7MewJuscjp84j3Wb96D9Sg/mzJ6GRfPnFNX+/QC6vyHBLx4DAHUn9p6ekOt4qZdNxNTqjHPFcsIcDWwlZ94T6kjJwysQV00obTJGOWU4BNOMSuo8cbHQAVOimjOAwiasTsATY6qUJJENuaQ+dGsycI4J4hJGnBA2aJFalTMdxDiaGTfWGR9Ra0uUGhNkYEtEC6EUSayWmcso5Zql0Iw6Izy0LIT9uRVKh9xSI7mzvs3lzEvLndeCWQPijXRGG88d17FJykY3eWNNqo2xiTc0dxGJiHOO1XwQ4+fMRFpAUyFApcpYlHsv8gqNrWWyqmxci2xKnZDVepzqKEtq1CTdnrZoLxNvaVMHJRXldFIlQfOffGMMaf4fvzyV1K/neWycc/NboAFQb34fvu0dPPPsc2bh/FnsI49dzUGtZ1j76lZoXcfnfqPBoI46QAWKPNS163biyUcfwpi2luFlAUP6rfU4ePgY1m05ADStQVyZMqx5qKEladZ1EE1uNx56cA1uGTc0ubb9YNvh5Ve3oquzHb/29AdQSuNRf5LfAKj7MHf2lFEHqAVI7O7Di6/uRHtnFfffvQJj21oHLfl1rYYOSgChiGrnawdx+NgJzJ4+oUjJGD+u5VqnGJbjgtB/PVd4bc8xbNq2H9YBSxbOxtzZM1BKk9c7Vr39xfsBagjxHzp9S06bltdcDGIyOBiOiiBOBRH7wAo0aVDGnDIUaa6t5aA2gTU5YTSJXOKd54S6zBnvjYdywidUF38kNap5yVEhrfG1Isvam4hbBnjpcgsZ2SDzSgMWtcKDGBtq3gWzLndOEUlsOVaKRnEurDYiojmEt4RbE4ErAu9S6gMstpIR5aTXNK1b7qGYLbnIUE1Y1TBGLEsiTYm3cN6UhDeJ6HI9JnaSwTvimDeea6eZtSVpEsK05NJpLoknss5tCkZYniHppSTWzErLWJpbIi1xpU6LsvKupHxc8Z6k54FWS2ii4S6amDykxzWdeZ40AOqwPAg3waQNgHoTOOl6lvh2APWlV7dA6xzP/MYT7+sQ/ysb9+DQ0dN4NMhMjXAV/+skICG4cqUbX/vGD3D/PXcVeagDcjnX4+9rOocAXV0hzP8yutxcNI1dAkKHN+ya95xAlG3DqpWLsGDO7MEXSl290fD+P33uIn7803X46IfvwdyZk6/JBMN5UACox0MV/5Z9mDdn9AFqIAKDiP1PX96BebNmYvGiuQEwDUto/xfZNTQCCPJPB4+cxI6de9HaVsK9q27FlEljh3+/vxMPSvpbpwZZqk1b9+PAoVMoV8pYvGAupk2diDQJcfe3azARAGo7Xt20E0fPja+y5juqhlvnLA1hfZeAe6qI58KAhszvCKAejtUNMkEK8MkN9UhIYDx9ZiIL7cC0A029894RlocsFkai1FkpApJztk6pM2HNjjsvvPOUeMqsg/GOWWVTKiwBsSWpFKOw1bIzIojtI9ZtPLReCGIARAtYm8Ibwrwi1DsqmOKSaEOoLUUu8zZ3sU8sc9yUpDIdItecCtskC504F/GSyW2vl1I6AkaU1oyEq4tM1n3Oq5RK7amwlkR1yWNBIR3XIstpqr0VvRGvGMfkZbCSdCyqGZsqiubcsqRudXPQQA35qM77v3DU/+BrU1r+tpCHaIz3pQUaAPU96vb+HNRZb4T4CwZ1S/h8x2f/SQOgHj52uhDqnzSKADUknf6n//w9tLa14p5Vy1+X+hmuLRkAsLEWL76yBQeO9aE08V7wqGXYAEv4ccmr5+B6d2Dlkgm44/ZbYawZktsLLKrSBiHM39ZSwkcfWwM2ymH+AQZ1w5Z9mD93ClbfOXoh/uDr0Ixjx65DOHj0Au5ZvRxj21quitYPiQuueZKBrk8nTp/Dpi2vIY540QbzRU07AAAgAElEQVR3xvQJYHR0UzMCmxpC7CdOnsfGrftx/kIHJt4yDvPnz8KkW8ZDShlw2ZvC/lcB6sZdOHFlTA+a7+ryPsiBems8AWXcCeO854YI8NB0NOjKORIZ5w0B5dJ7Q4hhcBG8V5QQV/OWek/jtDjGQQESylHBUUm8y3LmhSeoCVhCOXJpfDmgVhNULWAIjG9JqTIOxomQzaqDbqlLYp+lLsol07YuuU6IcyXpFUemQ6cpHUnlGVxKSA6htHDciswbJqQlhJpYeu2Jd0nilaHGGU9NyefWMO+VjJBaENLnqBapiCJCDe2NqobzLqtjJQPt6iWv69hGTnYhiqkjqSZM1AgqCl4QL8tVbSs93CbtHs3cuUTJqKKJ7/WCvIa8+SNfmUQa3aOu+Ul77x3YAKjvPZ8Wd/Tbn3/OLl44iz756NUc1HooktoC0wCoeHnDbhwJAPUDd40uQAXwk7XbcODQaTz5+EMoj1B+3plzF/DCzzZBJytQapn9urblcDwKqn4ZumMrli1owT2rVwxNJf/VhQZAuPfAEWzdsRuf/kePoq21Mhy3cM1zvs6gbt6LBfOmFuHsoMk5WuNKZw82bz0AxiSW37YIjA9PYdS13N9A96rzFy5jw5ZdoSoI965agtkzJ7/RFOBaJhqmY4KQf5bn2H/gJLbuPIje3hyzZk/D4vmzis5ahIZ07dCyoB+grt+4E8c6x3aQthUdMiMgDN6I0EFUWF6ThBNrnSSEGW0tIUQQ4jT3jlBPQigfzJDYMQcDn3tHUtavzkoodbqAw5ZIp52g3FeLckbqQDUgIyeJ9zHzLmDUGvVB9cmkjOvQdNRWVE6dcYIwJb2y0jMTc66URBABMCnxWjljKinPQ5IsZ9bw1GsuvDbd3qaCWieNKSXckMCqIgBc43spLNe5TYKYf1T2QVoqIo6oOmO5IFzaasixod00lcr5KE+FoCFUr5XQIakWOoIlUTtBxYKIXoKSYyTNFS23p7S5rmyqOS0bTSOtXSYZfbjjTPPe5+9uhPeHacvfFNM2AOpN4aZ3v8i3A6hBqF83AOpVgHqmCPGPGoMaXEoITp6+WMhNPfHIr2DShHHDHvYs8je1xQ9/sg4nL1CUJ98LxtJh6ipFoLMrqLdvw9JZMR66/+6iG9FQjf5CnB783fd/hhXL5mHNqqXDdB/XtuIbBaAWSgfG4dCR09i55xgWL5yP6dMmwZrRV+oJLPfFIKK/eWdI2sS9ocJ/xsRh3/fX4sGC6aVAe3svXttzBPsPn4aUEebPmYFpUyehUg7PCcGly1cKgHriYutlUVlxhVribcq9h/NcekTEWFblRMbOKeOIk8wFFjZMzrn2zhJfl54ITRyvC2Kj3EojKDRzEFmI3TsvowBuvbDWG09dzillFWJ8ZggHM2VLbMhA0KW69p74kow05U7Z2FuhXCYJfJPJtK+UDPXUEVcrQvUJQjUV0RzFNTXKxPCEa5iaJoa7qFVq5jIvhNfacM3z2IrIW18yLs68kTJ3lnPCIkWyumOaVzh8LogjjBIiDfGsBzLupXnCiBSZJ7FVVjJl4k5OSioWMrOmrCyJlODlPoXmGqOJz9Day6nsIUikJ38Cyp//6tfK6/BFMowC0deyKxrHjKYFGgB1NK0/jNcOAHXJwtn0w4/+Sn8V/1UG1RqF3/4nj7+Pc1CBl9bvwtETZ/sZ1AlDU7hzPa4sqoqtw9e+8UO0trTg3tUrRkyK59yFi/j+j9bDllei1Dx8LKrJu9B3eSuWzKD44EP3Db7l6VsMHbQ3A4N64sRpfOY3H0d0tSPS9fhjsOcUAPVkaHW6DwvmTsOqOxeNCoMa9lWe59i84xCOHD2PB+9bhaam0g3TFjYUTxXapNv34FJ7O1atWIgli2aOerh/wP/9bV4DU9qJ3ftOFG1hQyHVvNkzsXD+TNTrOV7duAMnL7dcqDSvuBhK9p0ASJ145qznqUYSGisJTuCI72GaeBqi5WnIe/U+z8Epgece3uY+nB8q/mkuvGGawEeeUeJjGM9D2b2ikIkLYXowa10QokpIaHUa6udhrSGmLIgOdfDc9ylNEttWktpk2rkoNpwYw4lzQUqKeaqpJCbm2rCas7rZaBK4WF+zrbSkvfSupeRV3SuXE2pYzk3ZMUdKmcmZ9IwWAJU65yglmhNOmM2VzHyzDEmleUJlb6eXuWDC8jyxDrLPkBiCRnmeJ71ClAgjUW7j0hWtyzVLUpWIVqNJ0mt42TJ7Ljbq+7V29q+/sWpMz2Cfycb5N7cFGgD15vbfL1z9bz/7nF26cA594pEH3gCo67bA2gZADQD12ImzRavT0Qao4ePhxZd34rV9x/D0U48iLnLehncULKqy+PFLG3DkVB2VKR8A44EdGvoRAGrtylYsmj48ADXUN1+6dAXf+4e1eOrJ+zB31uThVUN4BxPdMAAVBB1dPVi3aS96enN86MG7R7w46pftpJD7GWSotmzfi87uTty7egkWzpsxar57u/UGtjfPDc5euIzde4/hyPFzaKpUMOGWcThz5gIuZmPOtrasvgBKiqInOEd8t3aRNJ4qSoQQPgdFlTMf5E+JcyARD8VT4NaBGmMzoiilkXOpDuX53vVEoaQKKcm9D5JSIS2DGycsPFFe55KBw1mXGuu9dxywkaC6FGrsidGcGWcrSV4BHHHeamosp85KmYauUpYqYpTUpiK49dQqJpRlBJY5ZyS3jqUyJ4JaaqgLuqeqL/FNkdc+AGUGT6wNNDDJq4TnJONJRTPrhKgqKUJ/U8OzKOgQtGcyaJlxcF9Shghb4VF3ny7lILFlMtXalXqUKdU5b7GUxN1ONisOXhO0l2j31DenN637ZXuo8f/3vgUaAPU96uO3AtRaYFDXbYazusGgvroTR0+eG3UGNWy9wHZdvNyBr379h3jk4XuK/ujDXs1/tVnAhf+qT/ndH66DTpag0ra4CEEO7Qgh/nZk7VuxZGaMhx4Y2hD/wFpr9Tp+8KOXMWViGz78yN0jJqP0VlsFjc0TgUHdshcL5k/HqhWjw6AWCgdnL2H9pn0oV5pw7+o7ikr64RgD7U6vR9w0fCiFrmCbtu1CltXx4H23Y+aMSQF+DcdSr2vO8CwGQrWvluPkqQvYufsITp2+hGo9h2hadKat9e5zvuyL9FRS1ZCOgnGDTMILz71SGSgteWooISLko1oCJz3jQRbfeFcKuJJAKup0pL1VmkQ8skQRUGGdZ5EXDJ71ceuE8qZsLaHwrJm4uCvXAepGMTFg1HqlXFtEVF8Ez4kzgjDnqLecEi0ltdIxQ7yxGdM2EkRxEMepNIzVDDPWliqx8sI6TaipiFD5lVthYmMMvEyozS2Q1essSnko7WI144XXnFFqhKVFdwDRndvISB+FJAFLqyV4yVSfS5TgUZ0i0YgSxWxS0yjXYcq98KXMijYtKNcCJXj/p609/F9+eVFTZ6N6/7q27HvqpAZAfU+5842beebZEOKfQx+/yqA2AOqAUD+w9tWdOH7qfFHFP3EUQ/wDADWAh69/8wXESRkP/8rqkQGooa996Mi05TVs33MG5cmPgMuhLzJS9SvIO7Zh2bwy7luzckiLpAZ2u1Ia217bh5MnTuNzn34CPHTleme19WF56t8AqPuwcP503LVi4aiE+MM6jh0/h03bDmDypEm447ZFhXrDUI3w0ggSTZTRovuZ0bZQUAih8cAi26DQ+S76ol263I5N214Dpx4P3r8cUyeNH9L1DsV9B6Aa7qqnpw/bdh3G5m37QaK5pyoTV5wBBVWZtUIwSFBPPXGWeeQ88kIrTzMGGhtHMktNSTpSU5CMuSD4RYT3Wjow4p3NDeGcWTBLBYQS8IRy7mvGuyB4paIAbWGZgosjbYvie861s8wGNS8XM1vyztlca15ilvMgPUUN88zFaciG9ZYYZ4OUhoiIRZyYUMTlfGYrgmjCE5skVWOMsymn1gtT5K/mNeYgA1XLwAlhXDESGj05TrjKONfURd57rrSNMi4jBRK50KrUEt6jeZIJHWtCIw6S1CyJdGIrVcVLmaFJJ8nbDPFxT0Ir3NKdhJg/dIn8/p+1tnYNhd8ac9zcFmgA1Jvbf79w9SEH9dbFc+njH7q/eFkHgLp23WZ4p/Hb//h9nIMKFOL4Nw5ABZwDtuw4gBdf2YVf/+QTRaefkRgD3X6+870X0ecmoWnSPe8GV/zSJYYfl3r1HNCzHSuWTsSdQygz9eaLh/6OFy+24/s/fgVPf3gNZs+aUgClkR4FQD3Rn4M6WgB1oAhu/8ET2L7rGBbMn40F82YOmbxUAdScw7mLl7F3/xGcPX+pmFsKjhnTJmPe3BmYML5f4/RafRD8d+bsJWzftQdjWkq4/57bMaatMmRrHsp9EIB4YFBffHmnu1Qdczwef/vZsnO+S4NoJmxZKsKYtUzHnnjiqQWccM5KH7hTyx2n1FQtU5wSBstCWb/wHikJH29O6Nhbbx0lljAGSyBIZokteeK8QKi6t5Q7x431cQLlmSXEMpMz511ErKjRwJhaFjkjCbGUMiMpTERCP9K6VVFsOZea8z7nCLdMEVPiYU5lCXOGCGEJdwZ1uKjEDTOh4ynzShFCUlCdEmpqRhDLqAg5DM5xRaVQpSxyigitaaIppEi97OpmSd3FImf1Ut2yiBEa1bltCm20tEalE7xUY6zc60yT49YKTbYhZ3/4/85t/buh9FljrpvXAg2AevP67h1X/t8C1DrWrtsKOI3P/OPH3r9FUq8D1HN49KG7Rp1BHXBib28df/y1v8Oalbdj0cI5I7Yrw8fL4eOn8A8/3oJo7F1IW+e/K/brly00CPXLfHsR7l44d9aQCfW/9bq9fVX8+MX1mDShFU8+ejdC8dRIjwGAumHrXiyaP2NUGNQADFWusWvvUezaewIr77gVUydPuGaw+E42C3mjmQodmA5g+2sHYLRDJKKCSQ2qAVpnRZHfrJmTC1mrcWParindYgBUHz56EvsPHsasmRNx98pFSOJ4VJjwd7JBWOu58+346Su73LmelqO3jF9+nAPUhGZSAQ4S2CjWnoJ6mQOhkMmIoA5AXc07GhNjjWOh3t8jyOMz4lIGTyNn+1ROmY9s5CXiktPKWUo4czLLPKXE5bzkpbBGwIEYYwR18CI2QB88M9b5yEoIywixhBobe2YhnSGEuFR6LaxxhMXGpEF31TnNlJGU2InGWpMEsYDQKEAYkhIDMOeq3jIwH0V1YsGIJppmhHPjNIOx0vEmBuY4V17m1IqqpKn1XtQJkVSxmHgjelicKqtTDSJ7cld2nMiu1LfUaizVHmmNsrLxLObGw5XI/9LxSvOXn/8kGfmHd6R/LBrXuyYLNADqNZnp5jsoANTbFs+lj72FQYXX+MyvDy2DWrAqoxBSfbdeGcjtDAzqiVPniyKpibeMGZKX97tdy1uPD+Dmuz9Yh4uX+/Cppx4ZUXtqrbF5+15s3nkCTVMfhozHDQ1I9Q717gOo2D34wIP34JZxw2frULW+fdc+nD5zFp/79EcQ9N9HeksOhPg3bNmLxQtmYuUd8wtJr5Ec/RX8qghD7z1wumgAMaHY44NrxlMAX6WwZ/8RbNm2G5xFqFSai1B/AG2hWC3kjtbrNfTV+ormCcuXLS46pHEuful+CnPU6jn27DuEU2fO4Y5b5+C2W+fcMJX9Az4M6zx7rh0vrttlL3a2HJo4YdnxWsydtBaJYs5J7wn//9l7zyC9rvNM8Dnx3vuFTgAaORKBRM6ZOUikZDnItrKcJO3O1Gim9u/WbpV3qlz21MxWbXKtQ015bMtayaRHlmyJIsUAggCRcyRIECBy7vR9300nbL232SBEkQTQ6G40wT4ligHfTe85997nPu/7Po/1oOQ4LOifHen8S80ErQbq55fMiFTzIOfOVnJQrSiT8JwLF6fkRprbIKLmKO986pikbvxSaD2YVzr38MaJXDgXGitdyAIkpiGMTzWz5QazXEorQ28DRgJY3gntM7ofpBS5t9xlGrY9zYyF9ajKPPDcSpna0Hjb4Nxx7o1SVLGqrCVilVjaUPKsZHkdUug01alzosErmhsjnbUqhA9JD7ULCMni1HgddINFRrAgFr6UmzyMLdkVsNaEIbxkRJMTrpQLhNaLssrY3kBF3zg7VR97lo0A1KF8ZgznY40A1OE8O3dwbt/+d3/mFiyYzT731EO/lOIfSIBKNWfXOnpw6OhJLJw7o5CyGc5AtQ+gvvr6Xpw8fb5okhouAJXQ1Klzl/C9H7yELzz9KCZOHDeksSTP9Jde3YZTl3M0T3oaXNy5moDN66hf3o3po7vx9GceAafujjtY0x+3KYHDM2cv4OXXNuNrX3wSEyeOGfIPjxsZ1PkPTMeKpXcHoJKD1K69xwqA+sj6FRg9urUQme/voJcEFUycP38Zv9jwBrLMo7WptWBOP2xkWYquni4oybFy+XzMnXMfeGGp+/HnQOCvq7uO3XsPoae7C+vXLsTMu6jK8GHX9j5A3WsvdVeOjJ+87JgVEhXhHbPMU6OhYdSbxDx1yGsnkGaMpSXumLXQiK1FAKGoWtW53BqmLafsP7hWngvjTO4hI+ec0xA17lHOveKWCcuN89Y74TyBUC+4b0sDk7G6b5B2aSlyZKvKgtxqqYzgxoOLnFnvTCO1qhRaKj1XmhlpldNhbALpLad2+5wbxY03ZZd7EznvhRci9THLWEkGPHVeigq4b3BlciayLFI16XVuheSmFnLLZL1FBF4wJYwI6mBRbL2OfVJuiCiKDQt7yq5i4ANeD1t6PCqp9qVE+shb1p1U8//cVhM//PMJre/2d52ObHfvRWAEoN57c1pc0be++6du8YI57Okn3wOoDUrx76CWBvzR1wcmxU/pvIOH38GzP96IObMn4/NPrUG59H5ajh7mNIaayfqoKe0FqJ7YD5x6j0HtZZeGvl7xw84xzXJ8/9mXoXWIz3/mkSIdToD/w0B/r31kb4D7rutO4kzHuNrRhR//bCMS14bKhEfAOTFf/R9Z4zzMta1YPn8iVq1cMigNUn1nR+ff0dmNF1/eiKWLZmH9moVDnubvBajnQSn++Q/MuHsANUmxffcxHH3rDJ54eDVaWpvuCKBSar/eSLB99368+dYpNFdaoQo5tA8HnIWlrjHo7OpEU1OI5UvmYdrUCRBc3hJIvXj5asGGt7WUsH71AjRVSgVDOxzGjQD1Sk/Twanj1h2RpbrzDJ4z7xxXPoMCdct7mTEFYUsImRPwWaPHM0acJofUzHMtGXXZu9wyLZk11jAqNY3oeaSUy4LQkSuUB2cVljuXAjnZlULbnApcNXOBhQtMw/iysvS5YHhu4chjlBlRspYEVoOe3GRSOh5pp1SSM5W5KNXUN+cj5q0qcWNS71XIc2OM9zm3IiAlWMtEU8Bym4skZ5LLQPrUURWCzlIh8pzpbpmHYF5kvBRyJiVYFqZggWFcJSwuNyzXDYhS7nTVcKa7WdaSpTLssLJFgEdpxXlfl8/l1ezl741t/bvhMMcj5zB8IjACUIfPXAzomXwUQGXM4A++9kyRBrzTQQD1wOF38JOfbcaVa134wtPrCv9x+u/0Pmk0SGKFIYwC0EvubrOrwx2gElA+cOQkfvrzLfiNLzxRvMw7O2pIkkZRy0c1fzSE5CiXSqhUIlQqFWgpCzZLit6/k795H3i9nZjT8c9duISfvrAVuRiL6vgH32NSbx8ceJchvnYETfwonnpsPdpHj76lesT+rkkyoazXGoWAOuMO3/jSk0PeQd8HUN/YcQgL5t49gBoTQN31Jo6+fRZPPrIGLS3VOwKotJauXu3Az196A/U4+1j2tG/++kDqtY5raG0tY+2qxZg4vv2mChUEAK1xePvkuzh9+jxmz5qIeXOmQtEzpb+LYwC3o/M7c+4KXnt9v7mWRLunjH3oCFgOU0mc8MxCKXIkddTmxEuZFcYjdMxzqRg1qOaeO66EQ5Zw7aXJAy5Eyg1vESBtf3slAb2UVeg819x6SWWo1mqnmcthM+W9DrgLatIz4Z0tOytS44S3nituCKSqHmbyKjwLrBXcWp9571oio2NuA585GWWWnFgjHZH+glPK29QYSu073zAORHbTX61k/SRZ0p1oL5kwiss4jhQPDfkRBA3GZEN6LfM0IDjOfKlUQ6hi4XUamZDawzpyUeEQIYMpXxO2Ug9Y2OiUrRnjERgC5sU559jGzkvVfztiazqAC/Ue2dUIQL1HJvKDl/Ht7/6ZWzh/NnumL8X/HoPKuC18ywcKoO4/dBwvbdiNqZPaC7H53/y1BzH//unIMoO//tt/BeMMTz66HFMmtSMKdPGSuR3QNJDT0ysV47Fh4z68e6Y3xT+cGFS61p5ajP/jL55DrZZSru69Gj8BIRVY8eqiej8Lm1t45AX7S3EdNaqK8WNaMLa9tWhOKZdLCLSG0gpS0AdDr/TPzYgoYm1Pn7mAF17ZhhTtaJqw7j0R/172+ZaG90jjC8gub8GC+9sLJyOqcx3sQXWoh998B4ePHsN3/uDXCtODoVxr7zOoh1Gk+JfMQT7EzVq0xinFv2PXm4VV5+MPrUZrW3O/ASrNuiGHrJOnsfGN3ZA8QrlSfm8lfvyM0rnESYyurk5MmTIWq1csxKjW1puuI/qojRvkhHUAjUYdD66Zh8kT22+6dgd7fdH+bwSoHUm0Y8q09QdkOXdeMO/jHErC5oZu19B4lvDIe2uVhAi4N130gengZAApYydqYCELXOwd00rZQDnPUouOJkPMKcgsSqmy8y5lypMCvxNWR7nwmePGoJnqRANm0zjzSjCbciByPhcpZ6ZVWmZrTrLcpaLFMG5dxUgrWGZcNYP1Qd7E4XyaWh5S3al2ETi5z/oembFyZnnnKMt8HsooA6t5rrXNdA7B44AHljHRaLBARtT31RA9moesJnQj1EFHoiNIJpIkqTjOVCJVuYG8akQaNKxojUMZpoEq8xReeH7RW/XQX0wunR2K+Rs5xicrAiMA9ZM1X7d8tsSgLll4P/vsEw/21qAOIkB9/sVt+MNvPIOtOw5jz/638c0vP4X29lb8P3/1I8RpVjinzLpvYmH9OHZMK8JQ3xUJmesA9fW9OHX6Aj775CqMax8+KX6a3CTN8dPnN2P7gXMYPe1xqGgcuIh+WUS/wIoGzjSQpz2waTfytAMmvoik3lEA15ZqiGmTRxcfBsRelsIQQRgWckCULv044ObgcfbsBfzila3oyUqojF0FFbWDUcrf37wcwmQ1NC7vxJjSFXz2qYfR0ly94yadW1n4BNbPX7qCF19+Hb/xufWYNcRyU+8zqAexYO59dy3FTx+fO4sa1FN4ZN1KjB7T/xrUPtvUQ0ePY+++NxFGVYQ6KD70bnXU6jWkWYz5c2dgyYIHEIYko/bx2xNIPXnqHPYeOFIoM6xdMRfV6t2vce8DqBte32c6bLh13uz1e71yLPfOlVLhqUY0LyXOmxIvZV3esbJ3hnkV9N45lML3TDqvDdOBcbInYj4MrYsT5pjxQQTvQudtw3nGvOO8xGTmSMDU5yTxz6lokw6TOa29Vy3WUuOTizkSltuQwZc5d5mMnGfeSZNZq7gTIjNRoCxi6xvKWKVCV82ZsTbzXGlnvHcB4NMSIDPwUpzzpJXJWkTI12ufMBFJJhqcBxmcqFkfMBtqH/ogYUznvqFQF2EWiNAxqa5lrJx7r5z1Zct52AFfjpWs2jwt1bWsZkoFLEddG/ONcle24b8sGle/1fU08rtPTwRGAOo9OtcfBKj1Rlw4SXHu8PsDzKD+7MVt+MaXnsKE8aPw377/86Jx6itffBzP/vMGLF40E+PGtOGFl7eju9bA4vkzsWTRrAKoUgfwUNZ/fhIYVFqOV6524f/8i39BMGoRmsavgbcfVY7RV4fKrgNY71KQOH5Wu4CkdgZp4xpKIcOUcS2YOrkdkyZNQLVSRqkcgfne7usPBasMuHS5A69v3olzl2vgpftRGn0/pCyBMUq3ul/GGFQT6wGTdaBx7TBK9jgefHAl7p81Y0jY077bmPzTX9m4DQvmTsUj6xcNaRf9cEnxUy3z3v1vY//hk1i7agkmjKOGsVsHlDc+EgsWNE6x9+ARHDp6AuWoWkhL3SpA7dNDvdpxDdVKgDWrFmHKxPFF6c/HjT7VgH0H3sS5ixewfMlsPDBr6nvlQ/27loF41F8HqJv35fU42jx39vq9WanuEXCUUvjclWwuYwYW2TCPWcQaPk5Cr6EglHGppFZ87lTNeV9yzJWdE5lmEent59yR41SdGecMR8i5z0TudK44pDXgEuXQu7xB2wuGCZnhEJDWOl+VNq7XWZNVeSCATAc2yqwj49R64AnFetfCbck0TJwBpao0ItbemNRp6r0SwlsrGSlUMTJH5U6iolmWepULwalMNmBGZYyJ3Kah9V44V4pikQepUrKephE3XHYLHXGFyIHLjPMKbWeAylXtq6mTQZanzZlhgWMiyHX+H2TkNv5V69iDI65RA7E67719jADUe29OiyuiFP+SBXPYZ57sZVAJoG54fTuE9Pj9r3wGaXrnKVeqNaUUPwHUr//uk5g4YTQ6u2r4m394Hk1NFXR21rBi2Rw88fAy9PTUsWXHYezY82ZRj/rI+iV4YPZklKLepqqhaIJ4n0Hd9x6DunLYMag0dyS38/wLW7H94EWMnf1FCFW+JeaybykzsixlAmAONq0j7TmDuOddZI1LaK4A901pL0TVR49uQ1NzlbJxILH0DwJVqmWl7n5isQic1PNmqOb7EIRjIYISONegY3lnYW0ME19F3HkULfoKVixbjAXz58AMQWr/+i3sPbq6a0Udarmi8OXfenRA1vmtPiKGS4qfnLUOHD6BfQffweKF8zB96sR+fwjSPUPZlx17DuLY22dQrTRBSyrVuXWQ2MfCdnR3YNb0iVi1YhGqldJNw0qi+FeudmLrjn0INMfDaxdgzBgqEaksap4AACAASURBVLh7owCoZ69gwxv78p442LRw2dIdLgfzHlaGYCxWzhbh4Z41uFci8ZDCB8L4kGtknPtGmECkxktUSCcVspF7V9bUikTGpI5ljlWgjZGAlfRw5PTpB8Zcoa9qSddUOocgp/95YaRNFZARcPW5D0qNHGHVS+0tT3ptvZyUhgRUQ2/oLwstfCMlr1LuRGDpFuY9GWPlQJIMFtdW8NQb6R1pU0Xa+1RZbyVCr1LlhElJkJ/rzNqgZnjgmCcPglLsAp1zHsCzsrVcd1o0JYJHqbYlm4mKQR4YJsKcu+ezZvc3NdO14dm2+7ru3oyOHHk4R2AEoA7n2bmDc/v2v/tTt2TxA+wzj68fMoA6Yfzo4oyPnziLv//hS+Soh6ceW4FH1i0qNBLphXPxcgc2bzuIo8dOYeZ9k7Bw7rTiBUpNEPSCH8zxPoO6F6fODM8Uf9/1n7t4FX/+1z9DOGohmsevLRzA+jeIZSWw6mGybsQdR1HvOguJBiaNDXHftEkYP34sxoxpQyBVMQc3AlViukii6OyFS9i1Zz8uXe5CIy8h582QqqmXBbcZbN6JiHdi3OgylpD+5bQpg9q1/2GxINBEbN+uPYdwteMKvvWNz/cbmPUn1r8EUOdOx4rFd6MGFQVrfPStU9i9523Mnn0fHpjTfyep3g7+GNt2HMDbJ8+gqdICJdVtAdS+WHZ2diEIGVYtm4/p0yffmsYpA948dgJHjr2NB2ZNwbLFsxAE6q7Vo14HqJv35rlRG+YvX75TyXKed+S8VGK20eAwzoDDUH4CEdWeRoHheSzDajm3NQjHuMl0QoaxaLKedFLRKAMqly73nuvAm7ABThxlFvbW1PA8cDlPEVnpDU8dQ86addmkzjCTahupa1Tu6UyztiIjAf+qkz62Ko/hS5Tah/fcWFdWVsN40aG9EcLDWB+ULZeBZbU44I45wQLGyfjU5LmQMpAxoVTudaytVgC75mVI6qg140o6UGGSO95dS8teCyUQRT3Cl7OAqbRmK5ljYV2JagdYE3dQHlSvZC84L/45s+n//jczR53uz702ss2nIwIjAPUenWdiUJcuvp9RB/WNDKqUHr83SAwqAVRK2RPztmXnYfzi1V144tFlWLdy3nXJHwKpdD5Uq7pl+2HUGw0sXDATi+bOKBqWaAxW2r8PoL66cW/RCDQca1Dp+uk8a7UGnn9xO7YfvoxxM38dQldvi0X98GXNydEGzqZIa2cRd51A3riI0c0ec2ZNwbTJE9HePqpgyPokror9MEAwjszkOH/xCk6/ew5XOq4hTZPCd52Y9HK5jMkTJ2DGjMmolkp3zUs9NwZvvnUC+w4cwe999Sm0NFX6nd6+3UcDAdQTJ88XVqfz7xZAfa+p6fiJc0Un/6Tx4wvBfPpY7M/oS/Hv3HsQbx47hUo/GNS+NU1NbN09nZg9cwpWrViAKIxuqRa11lPHtt0HYWyGh1bNx7hxbTdVA+jPtd7KNgRQT5+9jA1b9mcmE68sX7J2m5Paq9y4VDOfMu7DlJShuLcwvqS9zyDgFXOKMS4ySzJQsCQ1moArJa1zMbX5O4EAVGvqqIO+1kAo4S3PnVMB3X8udxZSwqmEgyWJK1Wq8Glg8nICyTJroLyDRYmHjmlvvMg8N8a5EmMyl7mA9TnnLhDWC2hvGkAWZDzILMsDKVxdMh7kKpGMm9zJZu+lcY53WalTIoPHSBXXeZRmhtehAuYD5ZVUOa9VrPWi7qNSzhByh/CazyuMMdkjZYv3opQ5lBpgJc985pH8iBv5j//vtLaf3krMR37z6Y3ACEC9R+e+SPETg/rYul6AWm9gw6btUJLhm195akBSnzem+P/w609j0oT24kUYJxniRoK33jmLGdMmoKWZmht+OdBKyaJj/eS757Fz37HCS/2+6ROxbvX8Qjyf/L0HugP7lwHqRTz95EqMHWZNUn1R6q11u4y//rsXwKL70DLlicKmdqBGUQZAfcJZD7L4AuKOdxDgItpHlTHrvul4YM4MhEH4K8CGPjCKbb1HbklPBxCCQSpFBa2/wsAO1Pne6n5ozZw5fxGvb96OJx9bgbmzpwxZQx6t2XfePY9tOw5j4fwZWLZo9pB38RcfeN7j3PnL2LTtECpRFQ+uXw7bTzWBQhUgSbHv4Js4eOQ4oqiCkHyDbiPFf31NA+jsJhaVY/XyBZg2ZdJNa1FpW1pzZ85cwI69BzFxXCvWrV6AUhTc6pIY0N/1AtQreG3z3ixJ9Ysrlq/ZKoW0hCkTZR21IBpjijvECu5bA+49S1ziAhZKOJM5Zn3qwbXnWca0iJwxliVcOSmk89LxUkj1pDEvG+saEZzn3gcI0csb594RGK0xHmlmRB4y1kZNWYHNuPDKxh6Ce6/gFOeWe+6VgbVUUWG816lxsBa2WiLfAJYFGfN1LqHBTHEGTKSMurgaiipTuRcy8UwkLNaJroSBZSp1Qhsw4b0IO309MMh0VC6FjdQHNVEuOe/KNWuCnlA3ceuD1PNq5rJSBm6d9ac83Mb/NnXMvxnQiRnZ2T0ZgRGAek9OK/Ctf/+nftmiuXhqkAHqvoPH8eOfbcLEcWOKdG+cJMhyC2KyquUID65dUPiS08v7g4N+TynEq53deOvt00V9KtXG0ot9zap5CLWC+ZDt+jtl7wPUPThz9hI++8TwBqikgLBx0368+PrbGDvjMwiqE+Fd/5iwj4wZ69VMNWkP8uQSGl0noM05TBhTwbx592PWzKkQjKy3f/W4fVqrtO+B/pjo7xwTcLp06Spe37ITC+dNx4NrFg6ZHur7APUQFs6fiWWLZt0VgErda9SouHnbIdRjU2ihEnPen7w4SZsRc06s9LadBxEFlYL57BdALSSwEvT0dPfqxC5bULDvNxsECo1x2LX3MC5fuVSogdw3jRqtPtzJ6mb7u5M/v86gbt6b5bn4+dLVqzdpSDSp3MZSegnuZZJ7wQRLJNmSRo4jJTjvveBk6lTUkVKCv+ylI7qxK7deBUFh18Wy3DMNJrWyNs+ROI5Iw5IuaWhjT0KohqpBA3iRA14pVwrhwtR7IQRVg8Mo6v43zlrhVaFrqn2j0QldrXqLBqCrjCwTWC65c04IQb4CnaoOzUiMPzFeMe5lnTHlnOOsJJXJha5brwFGNK8IAxd2eanr3mgIFjJwcbULTTGzISvpsNP4ljhSKs2yJilFaGFl3UXveC/ejXX4pWfbWe1O5mFk209HBEYA6j06zx8GUF/dtB16ABlUekFcudKF197Yi0YjRRRpBIFGqRQUckabth7E2lXz8ej6xR/r6tPXzX/xSgcOHHgHew++hebmCh5auwjz758G6/yApP1/FaCuwtj2tgHZ90Avo16TKIZTpy/he8+9jAQT0TblsaJu7WYSPf06F+rCJ0aVpKvqF5F2vw2dn8X4iaOKRptpk8YXnNlglV/065w/YiPq5H9j215MHN+Cz31mDahpaChGH0Dduv0QFi24ewC1aGyKE2zfdQQnTl0tAGqpHPZLC7XP5vTsufN46dUdYEyiWq4WZR/9GbR+OjquYeLEUVi3egmaqtVCW/Rmg1jUs+cuFW5WE8e1Yf2a+YjCoWdR6VxPnbmMjW/sS00mfrp6zbLXNeOec+7jivOaOucNZ9RFz1zOMx9YRQL8hD4FR2DheUMgK3PrUsuZTKzxmjdHgeNZ4pHnyODJzpTZSslFGahoilkRe0V2sTn3XnJrhUOVc5dYy3gZTlnvKhboSbm1mWUqTK0RxLwK703JAymsDFigLWOSMZuRPkDOE1kSJceEcwnPGpk0TAsjtSQzqtRlwjmtubIiZUEQc6GJVbV5GDKZSRuysMuZIPNOec/Kee5VT24rGZNNCZNBGqKapAhcLqK0Wb6bSvG2cKVvfW8MO3+z+R7585EI9L4BR8Y9GYFv//s/80sLBnXteyn+3i5+pVHolA5EF38fc0Y2iNRIQ2wIvUjoL2Ms/vpvf4rFi2YVTVL07x836MFPqWPScDx74Qq273wTb584g5nTJ+DRB5cWAvR3Co76AOorr/UyqE8/OXwBal+syFVn2+7D+Kd/3Y3RUx9GedQDA8+i/tLE0EQANmsgrZ9H2nkEAS5jxtRJWLduGZoqlSFvfrrdG7Szqwdbt+9FGAl85YuPDdhav9l53AhQFy+ciaUL7w6D2ivRlGPfoXdw5NgZrF25BKNHtfS71KEvy/HzX7yORiNHS1NrYcDRn0Hn1t3ThTAUWLlsfqEmcSMT/1H7LBymrAfVwl65egXrV83DlEnjbqlEoD/n+XHnQQD1tc370pyrnzy8ZsVGHUiX172zKoXiDtJ6F6sS09za1IHrgFuTk7WUctUkhw0oHR9Cp53XDyMl6UfVYRMFAQtfglchHDKFQHHb5VKhg5IRViC2pAhQ81oIn2XCQ2RwTaGNGiA9KQ/TIJ4UvircaKprtWC2E8yVc050aeKkElr7LtNQTAsuk1wEvCKddazOjXLGyZDqR4WL4lgCFRukBjrlUlqY0NmA9xCxKxFwwXQHTFkAoitxpYZHKfO8kspyk2VGJTBl5kXMNT/YzeWXvjemPAJOB3JB3uP76t9T5h4Pyr1wed/+7p/5ZYvn4slBBqjFV07Bvv0yr5ckWeEkdasAtS/mxb4Y0NMT4+Sp89i45UDRtfvV334cpTC4Izmq6wB1wx6cPX+paJIaO2Z4Mqi9caX/47h6pQM/eX4rjp11aJ/xOTChB6Bh6marvHdGbV5HVj+DrOMQWio5Vi5dgNkzpxeWqnf6wXCzM+jPn/danpIsErkQ1fCHX39miFP857B1+2EsXjgLSxfOvCsp/sL9yTq89c6ZQmpq7v1zMGXy+H7XoRJArTVivL5lF06fvoSmppbCVrc/o1e2qoEsj7Fk0WwsnHf/LYNMar48dfYCdu05iOlT27F25TxQLftQjusM6ua9Se7ljx9a//CrJdEFzuETKZ3LAhuKnEFywnuMRPSoNtSllnkWOrCEecldSyhc2pOL5sCbHvK3Z8rqKAPnyudUI+qAsoLPEPrIOvQ0Up9FmsoarLAZpf2pHwqeC58hRURVBIEGdG+NqSHGFAGTkAxMMqoesLA8YVR7wLhkjPcwcKWllKmTzDNhMycy50QcWeWlDIhr6AYP4CByxXTOMu29Uz15EDhyG9A6angfGZeoNCOaNlJpyps7Q16xXmiX2GouIViT4ODqs385Onp5KOdq5Fif/AiMANRP/hx+6BUQg7pi0Xw8/tjq601Sr76+HVpzfPPLTw46q0QMbX8A6o1AlWwi9+5/Cxve2I//4fc+j+am0h11ZPcB1Jc37CmaSD5LTVLDGKD2gX+qHdx78Die/efNqEx+HKXmmYX26NAMRu0esHkPalf3w9XfxpTxo7F2zRKMHTN62NSe3hgLsvrcd/Aozp07VyhWKEXtJbeu29nfuPYyqOcKdYoldxGg0vnT5V64fBU7dx1DS2sb5t8/C7745rj9OFyvQz12HFt2HkQlbEbQz/R6L7uborPrGubPm4nVyxcVGZdbGXT6uTXYufsguru7ivr2CeNG3xIDeyv7v5Xf9ALUS9i4eX9soH/02JqVL0MJBMo4EDvKlQsC3pui18ora6lt3Yu6ACeVJZVQqt+HvZfshLXMpKHLZc4UNx6C+FPA6sxTrl9HFXDTsHFM2LTihM68QEo/I/8ORhiVGvbpkzUTARAYpJaxwKYsEFXU8kRAaCSSCcYcz6lcwNR0YANnJVcZIKy0khtGV8DhQ2m8VbFwMuc8tODcSkQutoJS+GhCZL3giWFBLXNRpnUAnlfjNOU9vtRiPQsbJNRvRNlayFqZacbsf8p465/MG4Pkjxkb4CL6W5m1kd98UiMwAlA/qTN3k/P+IEAlwXUCqEHA8c0vDQ1A/cu/+Qlm3jcRv/bZtf1KLxJDd+DISbz02i5855sDC1DPX7hcNEm1D3OA2gdS4yTFq5v24PXdPRg1eT1U0EKVakO6er03SGvnEF/dDYlOLFvwABYtvL+wru1HU/egnbuxFkfffAcHDh/F137nCbS1Ng0J29sHUMnyd/GCu8eg9q0ZKr3ZuecYrnY2sGrpAkSl/tWh9u3v4uWr+PkvNoH69KpNLf0GhiT8ea2zA1OnjMGalUtuSbS/b7GQLu87J89i/8EjhdHHymX39/s8+rMA32dQ98XW+uceeXDNy9SkBCvAjXdBmTuCgl3GOyssCyvW2y7thRYQ1pKulBfIvI0tffYxHnrHEsm85z4S8BoZahXtKS0vGtY3St5HXvgooz+REKRdKjqKr4xUBNQ7BWlT1ihAKaAjjVpmmSOWtOQ4QP8cCCcEy0s5zxyTsAlTnkvOFXKptfNWBSpgPaahc8tEljNlyow8ALjJPFmXilpnHsiqDpyyymZBYC0TnWle9oEtWc11h2fNmWMqlqqM3JU9h6gnMnCcbWqx+ecvZG3Js/PYR1ni9WcqRrb5FERgBKDeo5NMAHX54nl44tE1BXtEAHXDxu2FxMs3hgCg0sv61Y17sGnbAcyYOr7QQx0/ltiOWw/4oABU7/Hya7txvmBQV31iACrVUJDSwfefewW8aSWq7fNJgGdwGqZuMkXeZYg73kTj6n60jwrx2PrlaG8ffctM2K2vgP79kmSW3jp+Ett37sNXf/uxIZMSKwDqyXPYuvMIFi+gGtS7k+LvA5RUh7r/8Ds4cvQMVq5YhLGj2/pthtGX5t+yfQ+OnziP1uY2Akv9myCwgkFtH92E1asWY3Rbyy3vh54fjUaCrTv2Q0hX1Le3kD3aEI0bUvyxt+4fn3rk4RcEJb996BTdkboQxKeOKC/iLlitiQ5F2SuXRSRvbwtb0axBv029ZRmLTOTjzDIdRR6Ii5Z9Y1NqqILX2hEzqnuBKOFNBlH3Fk3MCAsZaKKkWZw5FiCCEJYlzvHMZtxFkgWpFCQCYJiWOQQ3zPCMGUUNXFxo0fBMpoReYTWTjqe50IZFkqlc1b3VzpJdgNaZsZrQrNNJKQ+4rMeIjPABOFMNE1TrOo+cspWaCbXPeZBprxnY5ixo+npLKy7+34ylQzRFI4e5hyJwG3DhHrrqT8GlfIdS/Evn47GHe1P8Qw1Qe0NMeozX8MIrO3DqzEUsWTiz0DAk8XRqqLpZ2nWwAOpLBFAvXMHTnxAGtQ9wEAD6px9vxJ5D59Ey9SkElQlDUIv60TeLSTvQc3EreHYZq1fcj/lz5yCkOri7PGhdvX3iNLbv2IXf/o1HMXE8edEPPts8nABqcfdRHN45S+loLFwwDzPvm9yvTv5i/VHa2QNnzpzDLzZshZJRYc7QW31+e4PS/J1dHWhpKWPNioUYN7bXge5WB21/+OjbOH7iXaxYMhsPzJl6q5ve8e+up/jfONCw3v7gifWPvhiq1CZC8GoYmiyrMa2FIxZfa+3pG7LWANoM9zUXM13RviezKKUEQ4UXVdJ5JdtRwm8CpYBy7gEaJoVsSNhAsJRZJjyBWclIlUuXBFgPY6gCqdbIa7GQLmfIwFgp4JkFy4VlykiJjDEWgQsHlhmvepiXJCvldEMBAUvrTtZlSYvcCqUCnSDj1jFtWaZSDlFLRcilZnWVllTCIuSQnZEsgTORMR0l3jfZ3KurzlaYcqoGWVJMNHLruhPlH4KtX3528uT4jgM/soNPZQRu/+nyqQzTJ++iPwygvrpxG0qhwNeGgEHtixhJSFlrcfDwCby0YTfSPMOqZQ9g1fK5hdh2URf6EXVxgwlQL1y48olJ8ffFklQOLl64gmf/5TWc725G24T1vQ5TdzO/TiYQ1w6icXkPpk5swUPrlqGtteWWPkAG666i9fTOyTPYtnMPvvD0WkybMn5IAeqWHYexdNGsgkW9mXrFYMWA9kvp8IuXO/HCy9vRXG3B8qXzEIRhv+pQi/1RB369gY2v78DZ85fR2jwKvB8sKt3zXd2daKqGWLV8ISZOaL+tMBBIvHylEzt27ce4cS14eO3CW9JTva2DfMSP+wDqa5v3NXK47//2rz/+syzOuIqEFcbAUp+7154RM+o1pfF9wwpUCWBaME+1ozZggaAOROp9F9AlUs3IWCO1YBIsQrEdyxoZTACUg4B5cqZyJeaymIvmzCfdTobKu9Qr6UPuA8FYXrc8N0Y4UWYOjmsHxjNKyqcwQgnDPM9NotKmSORZLkNR5cbmqivjIvJeg3GRMKYzk9BZqitNQeis4sILBW9C5/MgtqJUZ1wZJiOTeVLBihpaVjLnZN2bkDt+TQb6nEvNly5fblxY9q/jkz/+Y+rRGhkjEbj9CIwA1NuP2Sdii6IGdcl8PP7I+wxqAVAjga/97uDXoH4wSMSYxo0Um7cdxLbdRzF2TAvWr16AyRPbC/1UwqgfBKqDB1B34cKFq59AgMpA6j6bdxzGL17aBjStRFP7AoD1N9U6MEuZWLQ0uYjauS0IZA0PrpqP2TPJiYosU4f+3UTr6OSps9i6Yw+efmIVZt03sV810LcbnT4GlQAqifSTFurdBKiFZW49xqYt+3HxUg/WrF6CMaNa+t1oWKgDOI93T53Byxu2I9ARKhX6QLq9cSNAXbl8ASZNGHt7O6DuImuxffdB9NS68cg6YmFH3TQjc9sH+ZAN6NzfPX0RG9/Y27AW3/vSbz76M3IvJaAZwboGBNLUohyAeW28tRlsA0wL7alzPjXGAxKOlO218DGzLOLaB1nMTKlafMyXLDVK0T7BbJwV0lA5aZdSXWoMuMAJyv471nvjS2F5XjRAgemEMSigbpxkXEtlBVTiVT3yrtNKxcKG9go8rwnFhWBhCaLT8UBnnNWUDjQcT0V3IPNKYLkUV63XxlqlpQu7HIs48zLOXHNNK1EzvCqZLTnOZJdjoWXo4ik/zVj2P06ZMXr3H9OXM2O335U3EBM1so97IgIjAPWemMZfvYheBnUBHnt41fUU/90EqHSG9HAnoHrxUgd+/Pymgt1ZMGcaFi2cifHjRkGR0fQNgGbQASrVoI6+c33VoVxCFEOqGPunn7yGbbvfRcvUpxFUxt9VErW4fmLCbYLuS7vhet7CwgcmY/nShWhqqhTr72blHAMZQzrWu6fPY/vO3Xj84WW4f4jsTocbQKWYEuA5euxdbN5+BAvn34/Z9027o1D31qImoFrUY2+9i1Gj2m9bcorWcEdnB1pbSlizctFtp/j7LoDqjN966wQWLbwPi+bNuCMJulsNynWAumVvHR5/9xtfeOJ5Ao6BFx4yg02p6sFSdz1EZBG7jMEIRJmAg2ONFu51xpjMgIzS6RF8ZDVzgWNehL4nZiKk7n2yIRUZMavwgRSESBEwxjJLPVgsF2VOIF05xrzOuaDu/Jwzb1KeaiMSJwh/8lxVZKWeMh8K0ZkZ0hZQvKykN5zEAWSimMqU40oInVjJY+ZDxoxwqSdJ/9BwLq6lPHDMBkxA8TxvSrjUl6Eq1rDA5jYIAhmQaERD8gPW8n/82xmVv7vVeI78biQCHxeBEYB6j66PjwKo5Ujiq7/7xKDLTH1cWElWxjmPnbuP4o2dh2Fyg2WL52DunKloH9NabErgdASgfngUCwaqqwd//+xLuNBZRuukRyAUNYoMA7LCeyTdx1G7vAMTx0R4cM0SjBvXDtKwHIo6UIoYReHUqXPYvnMPHnl4CebOnjpkDOrxE2exdScxqHOwaMF9d5VB7fsovNbRjZ+/tANkp7l2+RJE/XSVKvZXxJfh/MXLePHlzcgyh7bWUbfVSU8fEB2d1zBufCvWrVyC1pamfj2Fr3V0YtvOAxjX3oSH1y6CVIOfSegDqK9t3luHdX//W59/8OeprpJTE3NxF4OuomoFslImtBWeUveZFmC5YzaLYUUEUamA5YlQPvUJCzhX3JFEvssqzFqBSFqWcQHncuQuFy6zKEeCaqU8NUnFkuzkQjTyiIciAwtTwY0WUgY+7rmmuHKomZKUzAsXcOaEV9pJD5PJupM65+CG7KsyjobKNFNMAZLHSIOUh7ybqzBsxKFzXjQQRkyAp0CUepSFd6oRiGrDMZVZXzIOSlrfw6T6ByFw/M+nNv9f/ZrMkY1GIvBhGYuRqNybEfgVgFojmaltKJckvvo7dxegvke4FSLbl690FS/0Q4dPorm5hJVLH8CMaePR3FRBbgz2U+3qQMpMeY9fbNiJixev9Xbxf8IY1D7QQfWFu/a/hR//dDNEdQmq7UsKUf/hMAjEpI2L6Lm4DdWogbXL5mHmjGmFDe5QgNReBpUE8/fgs0+swKz7Jg05QF2+eA4Wzh8eAJUkyrbvPIo3j5/B+tXLMG7smN461BskNYpPm1vUSO3TRT1y9HhhKVsqVVEpE8i8tQ8kY3Jc6+rA7PsmY+2qxf1urDPGYPvuA0jiOh5ev6i4lwebqe8FqBfw+hsHas6Z7/3Wr619oVDTCKpI4liksD5kgbQihnSMRdZCRBHsNTBEFt0aDLlmWmU+5kZpHxhD/rE297nVvNxIGErWN6j/zCmIzCE1QgTK+noqRUVlPlWMayMYuVTFTrGAKltNzKVQIvbwccgkM4ozYYTPY+UBblWVIK9wOeMdggehT5jJrGZKcqak6mRSOyZ5R2wCLbmWeapSk0fd5DClROThgpyRLZUvJ5KpK9KXEDuZKGTNuf4T3whO//W84B+Gw/Nn5BzunQiMMKj3zlz+0pUQQKX6rkcffC/FX6u/B1A1vvo7j99VBvXGE6UmKsEZTrx7AW/sOITTZy5i8qSxWL54NiZPHItjx0/j56/sGDgdVO/x4qs7cenStcLqdMwnEKD2gVQpOJ79yUbs3HsKTRMfQVCl9O2tgYRBX/aMwabd6Lm4C8Kdw9J5U7Fi2WJoJQe9LvX9GtS9+PxnVhcyZ0NRC0sp/reJQd1xGMuXzMGiYQBQe+fZ49TpS3jx1V2YOnUyli2aW9QykxFGMaj0houCgSTwSTJdpFXqQH//8PVEQK1eb2DL9n04cuwE2lpHIwzCmy6rVPwh5QAAIABJREFUPiepOKlhyaL7sWTRA0XzVX8GfewcefMdnD5zBiuXzsacIWDK+wDqxjf216y33//1z6x7sRQELLOCU91ogzGhIHwtbciy4l7kYIkQTCSOiaYMuRUMaPJGN6jzyFsnmOAaBDbhAJOmnHyYrEuFRMl5lwqfK99UYqIn9Z4h5qEPiRblMRGxKStsDmLbkBVoHwuqHjAiIKcoHnJnc1lmTKReSg7HumyocumRpXFYYVaIQIo41SrjTDRKOsytU8oJmZq0ZG2DXwsrTc4J7ZgNM2sj771MAxmmGbjryJUK1f8Uhdmb8aXTr/zV8uV5f+ZxZJuRCHxUBPr3ZBiJ57CPwHf+w5956pB9ZP3KglXoIYC6cRsq5eEFUPvYVAKqlPY/c/Yy9hw4jiNvncCYtha0NJVx8swl/NHXnxkYJ6n3GFQCqJ994pMLUPsWYJJl+PmL27Hz0Hk0jX8YQXXyLTNhg76Ii7pUh7T2LtKOA5gxUfU26rS0wAxi8xSt9+MnzmDrzl34nS88XHSJDwVzW9SgnjiLLTsPY7gwqH0fM3GcYtPWAzh45CSq1XJxr+W5KT5nCB8KLgqGuxSFaG1uwujRrWhra0ZztQrOBawzHwpW640Gduw6hIOH38aotlEIgugjlxWBO6qJpfT+mFFNWLN6MdpHU3lA/1YizfOFi1ewe/9hzJjSXjRdktXtYA66hpOnLlDjWc1K9oPfeGblK05QOj7gWZ4xYx0vu4TlIgTCJpbkdbgqEKaaU9d+rZFwMrpHmEM5cJtYLzMv8qhEcWCWc2Sp4UAO4RxzgrqhQl4NuE9SomozUEs/iwLuYXiSWW6tFEYmcJ58Xw0sU0rDMOrwz6hkHZ45FgjLrUyygOpUw4zldLTAScW7nQxKHNpIzhNAp94Fiit1LbdNVlGHlq/UHZOZY9oFNvSMN4xlAlb8eTnX/3hYnT26Yfr0ZDDjPrLvT2cE+vlo+HQG65N01b0M6kI8+uD7AJWE+isVja988TGk2fD72KWHP7EpjSQr3GJ27HkTx94+g7a2Jnz7G58bMIB6LzCofWuRYnb5aid++N9fxcUOieYpT0Cq5uHDpL6nk5k2LqB+YRPGj+J4aN1yTBjXXjhh3WJW+bZuPecsjrx1EvsPHMKXv/gExoxqHjKASgzqth1HsHwp+czf/RT/+4Ej6a0LePafX0NXdx2lUrm3uYnQIWE6b4uSmqIJTzIoKaC1RGtrM6ZNnoiJE8ZiVFszSOqMND6vT5xH8fG7c++BQkquuakZ5VKFfDl/Jd1O7Gyt3oM4bWDx/NlYvOiBglG/k9FoxNi+az+UBh5ZtwRN1dKgpvmvA9St+2vO47nPPbPyZabBcxVxljomkDOR5gyOiTgMWcal58wLK6V3cVw0MynFUXeCS1jvXSYEFKSySIznSDUl3wVI8NRZSM+EtdxzoYTjjoEZBhjhNXeZzRXjYM6WmLNe0hdEI/IqyDiUsKLmpXSi+IHKuFCeM2YNUz7zLCmx0GS5yKizn/mAcSZSxhWyNIyFkJ0uqHDmZE8gKjJxKs0R5NxKz9M6WHmPZ+KH5ajy/cOHNiQbHn10xL70ThbxyLYf/VE7Ept7MwLEoK5evhAPv8eg9gn1R4XM1N2vQf24qBcvNwAdHd14590LoJfQmpXzIQVppvZ/vvo0VwuAevkann58FcaM+WR18X/w6gt84YETp87j7//xZTg5Ca2THgc4vfjvIFj9D/NHbpk1LqJ2YRtayjEeWrMU06dN+lgd3P6eQpplOHj4GN45eRq/95XPIApJxmzwY9GX4t9GKf6lc4YVQKWa5WsdNfzop5tw6vRltI9qhyKXo/cGMY+eenC8hbMOxhqkaYrc5ODMIQgVRre1YdZ9kzF96mSUSiSqZAFHWzL01OvYsnUPjr1zGoIJtLS0IiCbdk4JaAb6aKjV6+ju6cSM6ROwevniwoL2Tgc1WO7ZfxjdPV2FCcikCYNryvA+QN1XZ54/9/jTD78e8MR7Gco8UDCxFyVhi1R9XWlunGNBlrMGV1wq5wOUuYPxKcBsFnDGMq5L0huXcRfEPm8waT1zUghBNbaSop8HgioArE64LP6LZYmEIAE350k+AMznTFivSPsftJmQlueQwjCmHAwzTChvIDx5qhqljTLClEyQxVKSIVXMWWQkE76eREkoVQ/TYW5YZISVLs0i40Lklmesmv4nzf2V/zph7F/e6dyNbD8SgZtFYIRBvVmEPqF//kGASiBvw+Yd8M7gW998Bkky/G2R6aVKuCJJs6KR4k5Bxo0A9fLla/jsPQBQaXkSSKUGX7K1/MGPNqE6eiGq49cVcz28BoNJr6H74g6U+CU8tHop5sye/l5n+ECdqUcjTrF7z0F0dHXgD772zJCwp3T212tQtx/GimXDC6DS+VFa/9jbp/GT598A52HBdtI9ceO4/u8eJItUgNUsz5GmCdIsLr6GqtUSZkyZiLlzZ2L0qLYCfFKpar3WwFvvnMSBw2/h0qUOCKkQaOoKAuIkA+cOs2dOw7LFc4va7w8euz8rgEoGqA717LlzxUfB/bMmD2pDXC9APY9NWw7UrFY/fvSxNa9zYSQl3xOWCR4HjDnGTMS5dYrnMOAWgnC/C4UMpfbgktWTWgHdFTfcC8G9477hIAKXuZxJ+g8+tZ63lULkxvEuS2HMpUChCSW9yLwtQCnnnmQAeMK9pe5+KTJnpVSAMU5ZFiHmNgTJA3AumLHSOy7S1Op6KHViGffcVIIELJWi1BNymQYs4KkPDbyItdEu1j3GiiiF+65pMifUpUtvPDtv3vB/gfRnQY1sM6wiMAJQh9V0DNzJfLAGlXy539i2B5cuX8a/+aMvfKgw/sAdfWD39HFuU7dzpL79vPDKTly+cm8wqDdef5rmRZ3hC68fxqgJ6xG1zYN3w6yUg+oQ8zpqF3dBmZNYv3oR5j0w8z0Bo9uZzY/+bXdPHdt27CWOCt/88lND1hB4HaDuPIwVS+7Hwnkz7rrM1I1Rus6i/utrOHOmE2PGtEPKm6TYGdFzrACrVE9MjGq9USsc4cJAYfrUCVg4fw7GtRNzaZHnFj21Gi5cvIqz5y+is7O7+LBsa2vFlMnjML59TMG+9rfu9IOzTrXFBBgPHz2GBXOnFnEvShAGafQB1Nff2F/PI/0vTz7y4NZcwueZkSbIWMqMKLESz4zj1mjmnS2kNYQg13rpHNOSucxb6t0n6SgOJlzCUiu59dpKZlWWGU+QNzTaRSEXMc+QWMtZ7nkuI1ZiynPXCHLGrZaBrOU5c9LKLAs44LljjBufS20zZoUk7MmcRRAHglnmtc6kNNarDqECY3LNpZGCiVLuPLtW4mU4wZ2XyiBVzruLPA5O5h4/dMr+w/enNPeAseH25TtIsz2y27sdgRGAerdnYJCOf2MXPz3E6cF66MhxbN25B7//lc8UeqND0TgySJfXr92+D1B34MqVzveapMhZZ+jdjvp1ATfZiNjm7p4afvbiDux98zLaJj2IqPm+4cekUvNUHqN2dS9Y/CbWLl+ARQsfGLCQXLnWgc1b92DyhFY88+RqZPnQvE9v7OJfsXT4AVQKMK2Rt945jed+sglaRh/Kon7kRLwHVqlb3eYWjbiBuFGDCgRmTJuCtSsXo1KJimYqaoKj9HuhnuA9hJRFXSvVsA5s6YnHpcsd2LXvUDHf1CjVW1YwOIOeISfePY/Xt+yv+6bK82seX7mtkVlF3U28JMGU5YY79NS5Chue6kVhSxWuCJQKKZUx3pqUGy1hiDYlmSfhOcuEYym4DJzr8kxSqxnPObeF5xSQcuqzlzJl2lnmVLNxruYhIw/ujOddAZMmExyh4spbSQ5WHd7pZk8fhEHUkIbVBWTIoClAJgt0N0xkEqOzwAfVgLO6Z6XEQzLLEMtCzOGaDtjfwdhN/3XCqJ8PTkRH9joSgY+OwAhAvUdXx7e/+6du4YL72TNPPlhIxlTKAa52dOC5H7+MlcvmYN3KBUVTxKdp3OsAtReAeFy+2oWfvrgNb52soXXyQwgqU0jQZphNNYN3GerXDsJ27y+E7Ul1or+SQ30XR9d/7sJlvL5lB9avnI+li2cNGYv5PkA9hBVLHxh2DCrFiO6Bzs4e/PiFN/Duu1cwpq0dsp+NSlR96kwvUO2p96C1tYJFC+Zg1oxp72mbFhoBxdT0lgAPfB0wMbHEmO/YvR+lSOHR9YtRKoV3XA70UTfLdYC67WDdh9Ev5n1u3R6eGfA6pG8ic1Hhu1KvvICv1HLZ4UuCRcyJtCaoT0mWUl5PGbdMuDzlkjynVAQe1yUPyJukAsEdQMDT+oxTzz64Fyz3PlBKJMzLnDFvciMFlZ8GuchNqK22gJHMGCdCD9EDrxvMeRX4UCchMsZKNaSSeSoGUIG1QsZkxsp9iXnnAyfCjHHUuNKcNV42Kk9bZeVPStZf+c9jW44Ps4fHyOl8SiIwAlDv0Yn+zr//s/qUSeNK3/zar6O5GqJaCQpf7uf++RV0d/fg97/2TCH58mkaRc2b93j+lR24eqWz8GkfPfreYVDfB2ko5Hd+9K+bcO4KQ/OkBxGUJxRd88NtUJ1so+NN5B07sXThbKxZufCOGDBiw0mkf+Mb2/Hl33wMEwe5aebGeN4IUFcum4sFc6cPGTi+3XklP/n/759eBRm3j2pru6MSCwKq1lh0dnciSWNMGD8ayxfNxaRJ4yHF4Lo70S0dxxl27NkPuBwPr1uMtrZqUW87GON9gHqg4SrlVxY8sWpvZiG58cKG5DwvBY8dVZ6KjOesJpioeuWZT7nJS0yFiajlCTIfCG20dRWjqH6cW8kYk4w8nZRtMOt5UY8aB6F0gEuTNAipUUowpDmTzMMLHgjDnHBc8Vw2pDbO1z0LLA+YI/cAn5EkK48hIwsuE8tUnefaUmFBHgVCeum4FS5mSsOnKWByrn7AWLA1CRubfzi25bj3njHGBieYgzFBI/u8pyIwAlDvqel8/2K+9d0/2Td+3JgF//F//vYvzfGuvUfxTz95Fd/80lMYP27UoDYUDLfQXgeoL+/A1atdePqJlfckQO2L+5kzl/Dcv7yGq7UQzRMehCqNHT4aqTcsDu8s0q7jSDu2YsmCmVizcnFhjdqfprgkSbH/4Jt498xZ/OHXPgutSQ59aN6vBUB9h6xOD2Hl8rlY8MDwBKgE6mr1FJu37sfWnUfR1jwaYfTR+qW3eh9TlKmZqqurg7hVzJo1DUsXzEFbKzVE3epebu93tN8kybH3wGE0GjWsWz0fE8aNHrSynT6AuvGNAzGvNr82++nlB621guXgGbeKq8CZOFEuD3y3lUoHDS4kh9dkjeB4JIFawmWcCyuE1Erm1nmvkArAem6bM1BW32aKMcslC43Nc6mci51zTnPGhWfC5zmTINEqCBFLF1jtrLuKSFWZjbUN4JSEcxy511Zw0SOtalgR5XBeJCyk3WjrtCkLEhrItPfPeefP7i+1/BeXwGyZzOLbm4mRX49EYOAjMEiPjYE/0ZE93l4Efv/f/sl/bG0q/6//2//yHVTL7798Ojp78MMfvYRxY1rw8LpFxU6H6P19excwCL/uA6g/e3k7rl0jgLoKo0fdewwqha5PfopExX/4ow3oSctomfAQVJlA6nBkUi3S7mNIr23H8r50/22CVAKipPG5actONFUDfOm3Hh2yBimKeS9APVMI9a8axgC1d30wnL94FT/47xvQ05Ni3OhxYGRyNACDWOx6o46u7k60t7cWbOrkKRMQFh8LdIyB+2CgdZ6mBoeOHMO1jmtYtfx+TJ8yeM5hN9Sgxr6tZfO0h1YecolXWWgVQ8a815LnmTMsVFkGDp8JEml1APdlx2ziBGfCeW4kd5HNcq9klMFZLwrVLu6ZVSGQO6lyBq74/8/ee4DHddXpw+8t0zVVvfcuWd1yj9NIgQC74G2UzQKbDSUs+1/qBj7EsrCw7AK7YQmEskACBExLJT1x7Dgukm1ZvffeNZo+996Pc0Yjd0u2NdJIOud5FOeR7px7znvOmfveX3l/pBiV5Ofm1R6vlvxa1MDHKTLH+0WNoPAQJfh5n6xoBDcncUbJ4FERW7JKzXslgVRaFXQq0Q9BnJMkQVEEFdxuheMEQSUpzYpO1esRuT9AxpBVnjnyraQkklO1egu0CvuJdbF1EVidb6Sti1/Yzvxv/uazVmt85Pg77t4n3n7L9gvGebapC7976lXc85adyMxMgrxFXP3nE9SZ6XncSSyom5SgBkkI4QIdPYP4zROH4PBZYE25FYLaFJZvJURxwDnTDmmuDjsq81FeUnhZwfcrHTryVB0fm8SLh97E/t3FKC/JWVMXe9CCSggqGX9RmFpQg/iRGPSmll48+cc3YdCZYDZbVpU8Eh3P6ZkpgJNRmJ+JovwsWMymVU2UIgTV6/Wjua0LExMTqCrPRVZGQsg8QwGCOozXjzW6JKv5eOKOHV1QZM4t+lWKihd5QjJ9PhEQoSg8cd9zPnAgQZ7Es664FE7WciqN6PMvuHiNyAl+XoCa01ElWm5e4jiF46D2yDwhkxqe97v8nBac2+/06NSCyi+qiCqqihMUieO9Ese7tYJG9vjhV0Oj8SnweHkNIkhHCrfg5NWE9AoqvcCJULyyIunAHXF6JbVbUf+7Qevtn5kxdqMAOMhxTDoqbJ/oW3NgjKBu0nU/cKBGbYpXP52aGHf7p//xPbSMYbCRsocPfe830GgF3HPXLtgsppC5xMIJ3iBBfealE7QIAHXxb2KCGiSp5JC3dw/SmFS7LxqmuGqodLZFQ1Z4GUtoTOp0E6SFs9hTWYhtxXkrJqk+nw9tXf04dboB9/7NHbBZQxeLeLl9TQhqB3XxN2NHVT6K8sLTxX/+2IlH5bmXT6KlrR8xMfHQqrWrRlIDpU1l2O1zmHfMU9d7eWkBUhLjQIpxroYlNUhQW9u7MTo2jqqybGRnJYWYoI7g0PEGt9tqPR27Y0eHwrnUikcUCQn1g2TBK4rME80CYq6E4IDM++BVJElH5Pd5TiUQ7ihIPkmROC/P8VpepQHv8ksi5+ckgRNU3sCx5L20EBUPpwSV2qfwPM/xvEoWiU6By8eLUHOCh6r5+wUiCsB7VBpZ9HN+jSR4PBrOK4uKQlirV2mKUKvUXk76d4MsJEw5XD/0wqY5mM1NhNN3NBsLQ+B8BBhB3aT7gQS3/90nvlZp0upPvOOu3bjlpgqaOGC3uzA2No/aulYcP12PspIM3La/AsYIHRV738ztHEE9DvJgvuvWzU9Ql0gqB7R1DuBXv3kFXiEOxrhqqPUxYUhSOciSGwtTDRBdLYs6qTmLIQtX3p/E/rSw4MKhw8eg1anwngO30Vrza9kIGSMvAsdrW7CzqgCFeWlrasG93rkODk/i4B9eg93hRVxMHK0EtVo17YPKGSQ2dWpmmmbalxbn0gINEQbDDWf3U4Lqk9DWQcT6R1BZmo28nJSQEtTuvhG8frzR44m0nTFXlg8peh/HyYLW55NViqBwvFcjyAqRxfdzbg2nEf2iNO3yaTWC6NNwfrVTUHhF4XmnRNiswvEKx0taWcNxKr/Kz6lUUGS7pKjUfp4IevELBo7n/TJncHt5p6ASVBpO8UhQOTmV4lMrpKopLyhEvgoqtSRKssipFdHXLfvkWJ+Wf1JUCRH+UfzMD6Wxjx8ZfeNsrhN/wW2tDNnrPRzsc+uKACOo6wp/aG9+4J++qTP63E8mJcTe9sH3vhWcIqKrawzz8y5o1Cr0jwyhsa0V5SXZuGlXCayLFqe1SioJ7ewv7f18gkqkdkip08g1qtO+1nO9+H7BuZ+obcXLh2ux4LPBHL8DakP84qXh9HLCQfY7YR+vgw79uHl3JbIyU69q5ZcVmYrDP//yYbz1LdUozE0LaHCuYaMW1K4hHD/VjF1VRSjIS11zknw90/V4fWho7sHTz72JCL2Jlild7Ubkw3ySH7Oz0/BLXuRmp6O0OA82q3lRQeD69h8hqKQ4QFtnLwaHhlBRmo38tSCoJxo9c7FRbZGFZX0KJ+kFFcdLfkW1oFWrFJnjdIpP8ABqWQvF6RF1ssfvUyucToDk94MXZzSCQErEGkkevh+irJFlh9evM8paj4PjNSpOUXiOJ7L9vExKxXq8vCwJgs/PKbJKUelFWZ5Wa0Xex8sqkmblAMcJnN3vl+2ilv8DLH7e6ZK/65K80ZkpCafSOyF/PJvzrPa6sv4YAqFEgBHUUKIbBn1/6GNfTtdoDK/HRUcm5WVlI0KnB3mYk0YErQdGhtHU1oHszHjsqCqglWEEIeCa22xtiaC+eJxqQZIkqa1CUIOWVFJN6NSZdrx8+DSm7Brq7tcaU8KPpHIc/O552MfehE0/j1v2VSE5Ie6KpNPj9eJE3VmMjI7jg++9C2qVuIqpOCs7CeTMtHYM4PWjZ7C9Ih/by0nxASXszxJ5IZ2eteOVQ6dwpqEHcbGxMOgMVKl9NRs5f6R0KtFMdTjtSEqMQWUZybqPQaCs8bXfL2hBbW3vwsjYGKpKc5ATYhd/d+8wDp1s9s7ER3foS4sn1X6F83KKTtGJGlklCJyTpyTVKXtFnwoqTuEU2SuqOM4nz/GK2kj2NgdOENU8SNIYkaXSy2qP7JZ9foMgcn4ZflkUNAIn86Q0lMzJkBWfn+fdKpWb93vBc5iW9LwIHgPaCV8DfNy0z+c7peJ8c/kl6jee6W2RXku/2X1D7H81F5/1xRC4DgQYQb0O0DbSRw4cOCBoI0tvU6uEx2Js1qhteXmwWSxL5QAFXsD8wgI6e3sxY59BSmI0Jao5WcnUYhUqPcH1wHCJoL5wjGZ730FiUG3mLRF/G8SbYECsWSSD+9Abp3GmeRRaSy6MMZXgBHV4JU8tlkV1jJ+ERT2Ou9+yF9E2G/wk3fm8Rvbp8MgkXnjlCO66vYoK5K/HCxa5Z3NbP/7wzGHodRpkZyaivCwXKQnRlCeEe8Wyqek5kDLAjS29iI+Nh14bQeWiQtFIvPDc/AxUagElRbkozMuCTqe5ZoyCMahNLR2YnJqiRUgy00ObJEUI6msnmr0ziYkD+uL8Sd4NvTvCr/JCVnkVlValUSsOt6whZUc5XlbcgqhWuxXJpZXU8HOKWuB5PwTODx6ym3BND6/V8ZKX96tkj9qjkTxaP/gZjoMGaqFPliWLDGVChtDmUultatn3Lc7nuQec/5s+myFb3dn5uuzSC0OuQWf0/v3KQY6570OxZ1mfa48AI6hrj/ma33F/TY2YNqF6v4oXvhcVaVPlZWQgLiYGJMuWNKI56fH5MD41hb7BQciKFzmZydizqxix0Tbqprwe68aaT3SZGwYJ6tOLBJVm8W8xghq0pJIH+8zMAk6casFrR1uhMqTCmLADKpUpvKpOcTz87hm4pk4gPVbBTXsqYTREQAqSVBKD6PHj1cPH4HY7qb6vSNJT1mHz0RjUzgG89kY9YqLMcCy4MedwoTg/DTu3FyJCr4VfksP2LJEz3j84imdfqsXI8Czi4mKhUWlWLR71/CUhZ5GQ1Fn7LJGfR2F+FkqK82A0GM6t7QrWMCAz5cPZpjbM2+ewq6qAWmZD9TJAxt3VO4zXTzb5ppLiR5TMfDcvKoLXKmu9C5zG6+MhaXkNFAEyFNHL+XlwguznBVGUZbfXD71exY2IHG+1S/yEJPkjtHDPuHnNca0KJq3sHYKXN875uEGDVn9Cp1L75n3yhF+QVF7wk154JmMkRe5KMs3nANwjHOdbAUzsEobAhkSAEdQNuWzXPuj77vu+SlJN/i147hsWk9lSkJWJhLg4miRDvszJFy/5cTidGBmbwMDoEHQ6EaSm+K6qQoiiuOFLo55PUOfnF3AH0UHdggSVklTyw/Mgig5nGrvwzPMnoKhiYIqrgtqYDMhrm2C03I72OEbhGn8N27eloKJ0G9QaVcDCr8jo7OrH4aN1ePvdO5Gfc/VY1eXucyN/pwS1awAnaltQXZWPKJsV9U2daO3oR4RBTxOnyItfOIfQeP1+tDT34vnXauH1AtFRURB5VchIKnlJnl+Yhyx5qLB/ZUkhzGbjiqvcBYT6vairb4LX68LeHdsQG0O0jUPzihIkqIdOtviHUpNmuW2FDkmRdF5FVnMSBI8iaGRRljlJUEHhnJwk+bwQJgDOG8Erg15ROenVSlmCT3iUg/pd8Lgfk+CMW9DYjgla7Wy0a9rk9M5PTNh53TPFKbM1fzqqNRxH3mrIF3RoJnUjm559liEQQgQYQQ0huOHWdU1NjTg0qbpVBvdZk8m83xxhQH5mJiwmE43tIxYUGidGsv0dC+gfGsL45BhiYq3Yu7ME2woy4PNLIbNOhBqvcwT1OC33upUJahDroBQQSe559oU3MT7LwRRXAkNkcSDDOlxE/RUJ9ol68K5W3LqvDNmZaTRUYda+gGeeP4TEOAvedueukJfWvNoeDRJUksW/u5okSaXD6XCif3gCJ+paaBgCifHevaMY8XE2QFZWPc7zRs8QIXwOh4dKZR06chZ6fcRiKVQibBQKfkS+byQsLNjh9bmQmZGEyvJi2CzmFZNU8lJ9sq4BKhWH/XtLYIog6gChGGugwAGxoL56skUajE+0+4qKFXCK4IFXI/IiedV3O2XutEaRTB6f6xd6tblbllVDvgWPO0Kncp7JnhjRIEnZ39uLp16Ykv72lgqeJS/d6K5ln9+sCDCCullX9irz+tADX0+SZe+nBU74aESEkY+OtCE/OwdajXpJtJ+64Pw+zM7Po3dgAHMLc8jJTMH+PSW0vrnXu/E8SxdaULdmDOrltkWw6tTw6BQOHz2Lk2d7YbRmwhi7A6LWAqJNuv6Ng+Rz0qSpCHECb7tjLyKtZrz82jGMT07gPQduR6TNuK5V0c4nqLu2B7L4SY16kq1tn19AW/cQak+3wOnyoLw4BzuqC2HQadYlXvZq60nOyfy8A4ffbMDxulZYLZEwGAzgqN09NC1YfYoQ5wcpAAAgAElEQVSEaaSmxKG6shhRNtsK3P0KxiemqQU1KT7wIk0SrkLVKEHtGcYrJ1vk/qQkj1CU4/fwnMbPcb0cBAU670cWHOoqO+RH9Av2yIMHk7oPfBHcQSwG8zIraKiWhvW7CREI3UnehGBtpim954EakwZ8OieL/yqK4tu1WjWy0tKQkZxCrQTnWyC8Ph+mpmfQ2dsDv+xDVVk+btlfRq1VoYr1CgXWQYL61AvHKGFgFtQLUSZfBgsOF5raevH0cycgcWYYY0uhs+aQfA8En7GhWJuV9il55zA/8hriIxVYIowYHBrB2+7aidys5JV2EbLrzhHUZuyuLqbhBv7FKm0BS7WE2bkFNLb24tTpdir1tmtnEfVMCAIfMrf09UyYjJckEr525DRO1HUgJioGer3+erpa8WfId47DuQC3y4HkpDhUVxUjKtJ2dXkxWUZv3yCtJLWtIA0VZTkhJfxLBLWuRelKSvWhKJMXZLFjWqN6VvS7f2pLUvoe+tJDC/jiF4k7KjRm3BUjyi5kCGxsBBhB3djrd8Ojf+CB/yExTzfxKu6/BJU626DRKeUlRZzVZL6ApJKHB9FLJFIu3QN9iIoy4/b9FchIi1+q+37DgwlxB0sE9fljsNsXcCeRmdqiMahXgjpIpIh4+8uvn0JL+wj05mQYYrdDrYsFlPXX9/a7xzE78CIEZQFvu2MXSouzaGLUerclgnqyhbrxiR5nkKAGxxZIDvKDZMwfq21FW0c/khNjsHdnMVKSY8PqhY+MdXRsGk88exgDg9OIjY6BVqsPBDCHqJHvGafLAZfLgZzsVGyvKIJBT1z2l1cTIDGsDc0dGJ8YpzG+GWkJIcWQYNLZM4RXa1uV9qRUxVOWclZS679tF7UNT1vUp0IEC+uWIbAlEQjhV82WxHNDTrqmpobvWjDo1E7vh/6kDf0FQRBtsdGRXEVRMQRBoBbV85vT7UJjWxumZmZQmJdKK1HZrKawn/uFBNUBksXPCOqVl83t8aG1rQ9/fOUE7A7AEF0OvTUHvKgNTTjiinaQBMfEWbimT2NbfiLuvmMXzY4PVczhioa0eFGQoB472Yw9O7ZdlqCe60+B1+fHwOAEDh+tx+TUHIqLs7CrsgBGY2gtldcyJxLKOTwygaeefxODw9OIiYyGTqe/5DvhWvpc7tqAJdVBBf3zc9JQUpwLg15/WZLqcrlxvPYsBEHGzXtLYTZFhHQvBAnqK3WtaI9NnuKLi25RIpzCj2JiTi83L/Z3hgBD4NoQYAT12vDa5Fcr3AM1DxndU47vKMA7VYIYkZWRxuWmpZPsgAsfSoqCielpNHd1wuN2Ycf2Alo9J8KgDYQIhCFSQYL65PNvYsHuZAR1hWs0N7+Aoyebcex4E2TeDG3UNujM6eD5wFqvTVMgkxjUyTPw29tRVpSM22/eTkv0hgM5JRicT1D37tyGvOxLLagXY0UIoNvtoWEVR483UevkjooCbCvKgEatvm4B+9VcE7LCY5NzeOqPR9A7MA6bJRIReiO4kMV6khAjmcpGyYoP2wqzUVSQA73uwhcRsu59A8Oob2pDYU4SqisLQr4XKEHtHsJLp5rlbof7XyPe+fb//naaZY6581dzx7G+GAIBBNbq6cLw3mAIfOQT/1Hq8ft/AAW5xgiDsTg/D9EWGwQxYFGlGf/gaBIDKZna1tUDo0GL22+pQGZaAvT6RaIaomza64EzQKYUPPXHN2F3OHHnrcyCuhIcg+vd3TeM147Uo39gDH4YoLMWQmPKgKjSg+PFEBWt4ajkldczhfnhI1ArM9i9o4hmyZO46XAhp0sEtXMAx2pbsHdXMfKykqnu6Urb7PwCjp1swtmGHkRFm+gLX0Z6AlSiQKu+redcyR6YmbHjyeeOUoJmMdkQYTCCF0hs8uo3cj/ivqdi/ioOZSX5yMtOh1qtWVITIH+vO9uCmelp7KMhEkT/NLSvxkGC+uqxs1N9k1M13/3iA//LyOnqrz/rkSHACCrbA8si8IH7/+Nejpf/ReHllISYGE1+VhYiDAaoRHHpgUmE/l0eN1q7utA/PIr0lGjcdnMV4qKt0OkCJCIceOqFBNWFO2+ropngGynRa9kFC+EFhCQFHtCDeP1oA4aGR+H08hANWdBbsyBqzAGrqrBIVpcW/VpIA7f42sxBkTyQvA645rvhmW1GrJXD7bfuQl5OEg0xWE/CdjmYg0L910tQl9QURqZw5Fg9evrGqCxVdWUekhOjAwUI1nHeZP1Jdv8zL7yJlo5+aNURsJgtVCM5FC2oJDIzMwW9QYPqimJkpidBEFQgPpqh0XHUnW5EclI0JahrEYdMxtTRPYRDx+rHe7qGPvvwtz7zf6GYO+uTIcAQYBZUtgdWgMCBA7/WmRO6v6pIeCs4ZGWlpnLZaanQabVUi5LU7CZf3BwvYGp2Gq0dnZifn0d5aTaqK/NpnKdaLYY0u3YF01h0RwctqIygrgSzy11D4pKJ2Hz/4BjePNZMX0qmZxfg5yOhMaRDZ4oHLxrAixpwvCrwQ501ymVDPwJuHPJfGbLfB1l2we9ZgNveB89cByK0HuRkp+Gu26phMRlo7GY4thslqME5CaT4pdeP9q4hvHGiAW6XB5VlecjPTobZHEHjwtfrpYqQVBKS8OrrZ3CqoQM+HxBli1y0bK7+qlCS6vVhcmaCyojtqi5FUkIcTTSrPd2ImbkZ3LSzBGmpJMHsWl6Erm+sAYJKX9CGe3qHPvfdb376Z9fXE/sUQ4AhsBwCzMW/HELs70sI/P1Hv5ojQfmyosi7omxRSVmpqYiJtEGrDcSGkR9CWInzv29oAO09fdBoBOyuLkRBbiqsFuNiIYCVuz1XE/6gBfXJZ4/C4XRTC6qNWVCvG2IijUR+HE4PTta1oL17CHOzs1SeyKuYAHUM1LpIqqWqEnWLZFVYjGdedFkrpBqUH4rfB79/Ad6FcfjcYxClSVhMWiQmxaGyNDcQz+nzh52w/fngUYLaMYBjp5qpHmdeVtI1ufjP74vsVXKW7A4X6s604eSpNljMelSW5SMzNR5Gkz5QBW4dXBNkXD5JQkNDN159ox5TM3ZE2aJotn0oYpJJn26PGzOz09SNv7OqFJNTM2hsbkdhXjKqqwppuea1aEsE9Y36wZ6+kQcZQV0L1Nk9tioCjKBu1ZW/gXl/8GNffqcs8//CKXJZelq6mBgbjWirDSqVilakIk3gBbg8LnT29aJvaAQJsVbsqi6kMjBmk4FaU9faRXs+QV1weXDXrZWMoN7APgh+lBCWYGzy1MwcGht7MDgyAbvdQXUt5+0ueHygcavgNKTGKsAJVLKKk32kCiQExQ2tGrBZImA0mZAYF4VthVlISoyi8mZkv4R7I/GmHatEUM/Hltid+/pH8ebJVgyOTiA1PgZlpVlISYqDlpR8XXw5XEt8SDgCMVgODIziuZdrMTQyCYPBBFOEiX4PrPbZJmd3wbEAl9uBuNhI+PxeRFoisH9PKSJtplW/35WwDBLUQ2/UD/YygrqWW47dawsiwAjqFlz01Zjyhz725XRe4T/sV5S3qdXq/Oz0dMRERtKyiJwSKOFI3f4ch6nZGXR292DOYUdOZiLKS3KQmZ5AY8bWkngwgroaK3/1PogLmFhVSTUfWZIxOT2HvsExTE3ZYV9YgMcn0d+TLG2e48HxPLRqARGmCMRGWmhSkHWxFjshfOvlyr4epM4nqPt2liD3BiyoF1pTAZ4X4PF40djSg7r6dricbuTlpKIwLw3x8ZEUy/XAipwpYjEnUlmnG7sgSRysJguVolrNxC6aqCfLmJ6dweT0JDJSY3HHrdVIT427nqW67s8ECerho2cHevpGH/zf//rko9fdGfsgQ4AhcFUEGEFlG+SGELjvI1+52Q/lPTLw9iirLTotORmxkTaYIiKoNZW6/Xny8JQwNDqG7v5+KJyMndvzUVKYSd3+xEu5Fg/XIEF94tk34HR6mIv/hlZ+ZR8ma0/IavBlhX7hnP+tQ5J+yO8Uhe4XEke42ta3lY30xq8iBJW4+I/XNWPf7hLkZl6/i/9yo6Fuf57DzNwCTte3o6GlFxpRRGlJNnIykxBpNVKr5lqcpQsJNMm4l3C8rgW1p9swOW2HRqWFyWiEVquj5PpKQvsrQT1ATkmhEDemZqah0wm49aZylBZl0u+WtWyUoHYN4tAbZwf6eoce/N9vf4YR1LVcAHavLYUAI6hbarlDN9kPPvBv22UZd3IKPhMZGam3mYzIzcqGQaejcjGkkYcJqawzOT2Nzt5ecLxMrUyk6g55uEohJidLBPWZN+B0e3HnbZWwWVgWf+h2xdbqOUBQ+6nM1P49JcjOTAqJhyBQa57DzOw82joGcba5Gx63B0X56agoy6UvfYQwriXRJy5/juMxO2dHd+8oGpo60dEzAg4CzEYTdHo91Co1HfdKySo9rwrg9XkxNz8Lu2MB6SkxuGVfOdJS42iM7lq3JYJ6tL6fWFAf/uanHlvrMbD7MQS2CgJrf8K3CrJbcJ731tRoxUnNDp9f+rhOp/0zq8WM2Kgo5GWk0VruRDM1aElbcDgwODKGkYlhGA06lJfnYHtZPlSq0Ln9qSUGwJPPHKEE9a7bKkHGuNYWpy24NbbElIME9TghqHtLkZWRGBKCGgSTJAaRF77R8Sk0tfShpa0POr0GVeX5KM5Ph0Ytwudfu9K0hC8GvCUKZubs6O0bxan6DnT1DkOROZpEpdfrqfqHKKrOWT+pFT2QgU/VHkh8qyTTxCgSdzpnn4dep0JJcSaqKvIQH21bt/1EvkPauwbx+pEz/T29ww8+/N+fZQR13VaD3XizI8AI6mZf4XWY34ce+HqS3y9V8pz/axFGS645Qo/05FQkJcTD7/Mtuf2JlWfeYUf/0DAmZ6YQF2fFzbtKkZ2VTEMCVls2ZomgPn0ELo+PWlCtFhMjqOuwRzbjLdeaoAYxDEg/udE/OIHTDZ3o7R9DckIULWhAYjTJOVrts3S19Qu+hJIXP1KFbGx8hpK65tY+TE/bKRXVaDRQa9QQBREiKadMXPWyDD/58fng9njg8Xig12tQkJeK0uIsJCfGQK/TrKll+OJ5Bgnq4SP1fT19ww9+99uf+flm3MtsTgyBcECAEdRwWIVNOoZ7P/bVPA7y2zmO/4rRYBSjLBYlLyuDM0cY4Vty+xPNRx9m5+fROzCABZcduVlpuHV/KaKsplW1AAUJ6hNPHwapM09kphhB3aSbbx2mRayZVGaqthk37y0LuQX1/CkGvN0c7HYntVieqm/H1NQ8igszcNPuEhiNJNSGuP3XDpggUSX2UZfLi3m7Ey63GyOj05SwjoxOwuH00u8CmjjHgSbYReh1SIiz0iSwlMQYmC1GROhJBalABbv1bOdZUPtoFj8jqOu5HOzemxwBRlA3+QKv9/SI25+b0Bdw8D2g1mju1arVSI6PQ0FWdsCVJxPV1MDD1e31YGxyEt0D/VCpFOysLKLxqeShsBpueEZQ13s3bO77Bwnq8dpm7N9Xjqz0hJC6+C+HZvCszM45aDzsqYZOiAKPnduLUJibAlG1PgUzAgleJBcuUMLU5fbC6yVFGRSanU9ExAIcm6MkVa0SodNqaMjPeum9Xgnf9s4BvH60vrenb+zBh7/1qV9s7l3NZscQWD8EGEFdP+y31J3f80CNSavwxYosfEWr1dwUYdCjNL9gMQY0GH8GmihFsnUHR0bROzSAKJsJt+wrQ35uGk2uuBEDyhJBfeow3D4/7ryVufi31CYM8WSXLKgnm3HzvrW1oF48NbLXicV0bHIGbx5vRFfPEJKTYrFv1zYkxkeHGImrdx9IVgy0S1QdyC8XlR3W21p6JYLa0TmA196o7+3tH37w4W99lhHUdd1N7OabGQFGUDfz6obf3Lj3ffIbetHtf5vIc98VBdEaHxPNFeZkQ6fVXeC+I0R1weVAV28PJqenkJWeRB/6ifGR1x1PdwFB9TIXf/htj409onAiqOcYoAKPx4/e/lEcPd6I8ck5FBekY9f2QphNEcRgydo1IECz+BlBvQbE2KUMgetHgH09XT927JPXiYCiKNxHP/+VJO+8+J/glLeKgqgvzMzikpMSoBJVF/QqSxKmZmfR2tMFn8eL8tJsqjFJkiWutTGCeq2IseuvBYELCWo5sjLW3sV/tfG63R40tvTi6IlGqpe6s7KAJh+p1eJiieJrme3WvDZIUA8dOdPTOzT24Hf/69O/3JpIsFkzBEKPACOooceY3eEKCBw4cECISqra4/NJXwGP0gi93lCWXwiz2QT1eeUSySYltb+Hx0bR3tsLq0lHSxxmZiSCxLRy/MqSJy4kqH6Wxc925qoicAFBvWl9YlBXMiH7ghMn61px6mw7Ii1m7NpZiIzUBKhUIo33DkfX+krmtRbX0CSpjgEcOlrf3d8/9uD/futTj6/Ffdk9GAJbEQFGULfiqofZnA8cqFFbEsQPSbLwYR5yVlxMnLY4Lw9atYpaVAMPTFKNCHARK1B7CyamZ5CVloB9O4sQHx8NjYZYXkkVoitP7hxBfR1ur8QIapjtg40+HEpQ2wdwrK6ZismTcr5rWcp3pfjRRCpFwejoNA6/eZa6/7MzE6lFNTLKDI06cOZuJN57pWPZaNcxgrrRVoyNdyMjwAjqRl69TTb2e++t0ar02q/JnPR2XhDSczMzkJaYCK1Gu1TXmwh5czwwNjWF1s4uqv9YUZaFspIcWstdVAlXjFFlBHWTbZgwmw4hqG2LBPXWMCaoQdiIfiqReGpp7ceR42fhcrmxrSgL5cVZMJsjIIriqqhnhNky3dBwAgS1H4eOnunu6R998Hvf+iyzoN4QouzDDIGrGJUYOAyBcEKgpqaG7x8Ry6HivwgFVZYIY2xediZsFgsMepJIRcu2Q+ABr1/G4MgQ2nt6odWK2LOjELlZqYiKNNEpXSxOHiSof3jqdXh8Eq0kZTEzof5wWv+NPJYgQSU16QlBzUiPD0sL6vkYEwsFIap2hwsnT7XiTEMntBo1KktzkJuTDKK2QUqrrqXQfzjvgSBBffXI2e7uwbEHf8Bc/OG8XGxsGxwBZkHd4Au4WYd/3333qWR12ntlRf4Qz3Fl8bGxuszkVJjNRloqMeA65SDwHBwuJ7r6+jA0MoakJBt2VBUhNTkWJqM+oLO46KtcIqhPHoLXr1AXv8VsZFaizbqJ1nheRNaprWMAx+uacetN5chIC08X/+VgCUg/KRgdn8HRY43o6R9BbIwNlWW5VM9VtRgTvtXjUwlObcSCeuRMV9fg6Od/wCyoa3zK2O22EgKMoG6l1d6Ac/3EvTUWu171SfDc3SpRLEtNSkJGciIiIkzgg0L/HE//f3xmCp09/VhwzCMvNwXby/KQlBgDURQgSVIgAQTA7588BJ9fppWkGEHdgJsiTIccJKgkBvW2myqQkRb+FtSLoSQi+T6fH53dQzh2sgXzCw4U5KaiMD8dcTFWam0Nx7jatdoS5xPUnqHxB7//zU//aq3uze7DENhqCDCCutVWfAPOl7j9B6Y0JbyMj8tQ9sbGRGcmxsYiLjoaep120e2vUKmcQLb/GHqHBkGK0JSVZKMgNw1xsVZqcZVkmRHUDbgHNsKQzyeot99UifS0uA1J5gJVnzhamrS+sQun6zug02mofmpOZhKs1mAIDfFibK1GCWo7jUHt7Okb+fz3//tzjKBurS3AZruGCDCCuoZgs1vdGAKEqA6OqYok4H6Bx/tskdERURYzstLToNdqltz+pKSix+vHxPQkBodG4JHdyMtMRlVlPq3t/avfvkKJ7J23Mgvqja0I+/T5CBCC2toxgGO1TXjLfkJQN54F9fz5kBc+4nGYmbOjtaMfjc29IFqqRfnp1PVvMRlo5bet5PYPENQ+IjPV0Tsw+vnvfeuzv2angCHAEAgNAoyghgZX1mvoEODe//6v2nQWqcrr5e5Xa1TviLJZERsdg6y0NJBHKok75UiqPxS43C4MjY9jaGwUGjWP0qIsDI9M0prkd9zCYlBDt0xbr+cgQT1e24zbb65EeurGtKBevHLU7e+XMD4xg8aWHjS39dMXwsqyHJQUZ0EUNpfbn4QwNDR34YVXTuH2mytQti1rCZKgBfX1N8909PQzgrr1Tjmb8VoiwAjqWqLN7rWaCHD331+T6hPEvTKEzxkNunyr0YSsjHTERNqoNZVYdqjmo6xg3mHH8MgExmfG4PF4aQWdO26pgl5PEq6k1RwX62uLIrBZCSpZTpJDRV763B4vBocmabZ/b98wkhJjsXN7ATJS4+BfPHMbefknp2bx4qu16OmdgF/yQ1YkbC/Pw837yqHTqun3CbGgvna0vqN/cPzBh7/56YMbeb5s7AyBcEaAEdRwXh02tuURqKnh/36Czwcv/pkicw+aLCat1WREcV4+dGoVfWiSRtyVRAZoam4OHT1dcDidNPHjtv1lsFpMkDfBw3V5sNgVoUTgHEFtwu23bEd6SuyGjEG9GkZBtz+pRtXbN4qTp1sxM2NHcVEm9u8pgV6rpdqqG625XB68cbwBJ+paER0Zi6zUFAyPjiIu0QyPV0JXVx/uur0a2ZlJQYLa3ts/9uD3v/2Z32y0ubLxMgQ2CgKMoG6UlWLjvCoC99TU6KOntNmcLH9WrVb/lcGgQ0psPHIz02ndcVI5J1DGkcSnejA+OYneoQESEIDqijzs2VFMpXRkeeslfrCttToIXBCDukkJahCpgGdCxsysncounTzTDqs5Aru2F1FZKlJ+eCNop5KkybONnXj19TPgODVy0tMQZYukFuPZ+TkMjw/jEw/8FVrbB/DzXz6D4qIMJMbZ8MaJJkZQV+fYsF4YAldEgBFUtjk2FQIf/GCNTVYJpbwgfkej0eYbjTrkZmQhKTaaxtGRRh6uJATA63Wjf3gE/SNDsFmNuGlPKYry0ug1WynxY1NtgHWczDmC2kzDR9I2oQX1YnjJWfJ6fZiYmsUrr5/B6OgkcrKTsbOqkOqohvMLX1//GF589SRGxmaRl5WNxLhYiAKpRBd4SSX/njxzFh/78J8jKtIMh9ODx3/3Enp6+sFzQv/E9Ow/MwvqOh44dutNjwAjqJt+ibfkBLn773842qca/zMe6q+LKrU5OtKmFGRncmaDkVpTKVEFaBay0+VER18PJqenkJmeSBMjoiMtWxI4NunrRyBAUPtwrLZ1yxDU89FyOt3o6BoESRJzuDw0gaqiJAcWc0TYvfD97qnX0dDUg/SU1EA5Za32IjIdKFwwODxC3fxvvXM3/b4g3x1nG7rw08efkebn7I87pqb//uDBb7muf9ewTzIEGAJXQoARVLY3Ni0CBw4cEMyx21I4TvU5cNz7NKKoTk1J5HMzMiHwwgXzJg+eqdlZtHd3weV2Y3tFDvZUb4Ner16kspsWJjaxVUKAENQWQlBPtlIJs61gQb0YOuJ5oPqpTV043dABq9mEXVUFSEmOhVolrhLSN97Ny4fqcOxkG/bv3Emtppf3mHBwuh1obG3FFz73Afo9QFz/5P12ft6Jx371R+lUffOzPgkP/vyR/6/hxkfFemAIMATOR4ARVLYfNj0CRD91bExV5BeFr3ECtyfCYDAW5+Yh0mqBQOWozjUSkzYwPISO3j4YDGrcvLcUhXlpUIkiraLDXP+bfrtc9wSDBPX4IkFN3QIu/suBFYxPHZ+apWVTSVUqklxUWZ6L2Ggb1CpCCK8b5lX5IFHy+M4P/oCc9GzERkVdIRSBsFEZZ5qb8e537UdmetKF3xWSgpOnmpVHH3922OV2fdk1pfzfwYM13lUZIOuEIcAQoF4L1hgCWwKB/TU1Yva05h5ZUb4BIDk1MVGdlZoKoyECwnlWFPKAdXu96OjpxsDQCJKSonHL3hIkJ8ZCo1FR1996P2C3xIJtsEmes6C24M5bt29JC+r5S0aqUXk8PrS29+PNk01wuj3YVpiJbQUZsFqNEEhFjXVsTz9/FINDdpQX5C+F/Vw4HGIxVTA6MQlO8OG9f333BX8mHJs8QKdm5vGTx572N7Z0PK6RNF/60Y8+17mO02K3ZghsGgQYQd00S8kmskIEuPf/078l6P38F/wK7ga4pMKcHC4+LhoROsMFVlIOHGbm59Da1Y25+VlsK0pHdUUB4mIjIYrnkilWeF922SZH4HwL6l23VVG39lauW0+We6ls6rwTtfVtOHO2Ezoi8l+ag+ysJEQY9LSs6np4JgaGxvGTnz+PPVXViyWTLzXrBpLAvDh+5hQ+/5kPQaUWl6w6QYJK/iXr/NqRM/Lvn3ix3eP0/KtzrvHXBw8eZALLm/zMs+mFFgFGUEOLL+s9TBEg8anWmOJKiRM/LSvyXqPBFF2Ukw2bxQyDXkctpOSHGHkkScHI2Bjae3oAXsIt+8qRl5UMs9mwVAggTKfJhrWGCJxvQb37tu2MoJ6HPQmPIWRvbHwKR082o7NrEPFxUSgvyUJqUhx0Og29ei2JKtFF/sFPn0a0JQ4piQlXdvNzMto6u7FzVyEqyvKv6D0h8akjo9P4yaN/cPX0DP+ME7mv/N93Pz+whluQ3YohsKkQYAR1Uy0nm8y1InDffd9X+dXj74fCvQcKqhPi4vWkZKrFZIRWo160gHEQBOKu9KJ7YBA9AwNISYpEdUU+rbceILRbqyb5teK8Fa5nBHX5VaZlU31SINu/rhkzswvIykxASWEW4mMjoVaLa2p1PvzmWdSd7saOsrKrDJ7DrH0WY5Nj+OiH/5JE+Fy1+X0SXnjlmPz0c4cbPF5/zWOPfOEJGhfEGkOAIXBNCDCCek1wsYs3KwL33Vejl9Sqf1Ek7m0qjViSmZaKhOgYWM0WCMSKKhOhf2IFAsanJtHR0wenawGF+WkoKcpEanIcc/tv1s2xwnlRgtreh+O1rbjr9u1ISYwBSbpj7UIEAm5/HgsOJ+obulDf0EmDOUllt4LcVNgsJggi0SoOPaebnpnHwz9+EkCthXUAACAASURBVNu3lcFsPCdBd/GaERf+8TOn8fGP/hWVzQpYewMlYIPx6MH/J/+S1t8/hh8/+vuF4eGJH0sQvvbYIw+OsL3AEGAIrBwBRlBXjhW7cpMjQLL9u0d1lWre93GZ4/ZZzJbkjJQkRFttMJuMUGSFVqUibn+/X8bQ6Ai6BwYgqjiUl2SjMC8d8TFWaioJZ4HyTb6M6zY9QlCb2/tworaFlsVkBPXqS0HKphKGNzI6hbr6dnT1DMFsNGBbUSZyMpMQEaEPuWeCnOlHf/0CeOhpFanLn9uAJmrf4BBS06Nwy8076MQCvw38e9lfKIDX58Mzf3xDevHVo6d9Ht8XH/1hzbPrtkHZjRkCGwwBRlA32IKx4YYeAUJUe8Y0ZSpOvkcB9zGL1RIZbbMgOT4RMTYLvLQiFQeB5+D2+TA1NYX+kRH4JDdyMhKxvaIAiQnRkCRpTWPqQo8Mu8PVEKAEta0PJ+pacPdbqpGcwCyoK9kxAfk2GeMTM2hu7UNb5yAlfiQ+taQwEzqdFjI5Syvp7DquaWjqxtPPHce+6mqq5nH5xsHhcqClox2f+ue/o5bTZdt5WVRd3YP4yc+fmJmYmPqed1755i9/WTO57OfZBQyBLY7ASo7ZFoeITX+rIrB/f402u0h1s6RwB0RR+DuLxYzkmBglIzWdI+SUuG+Dbn+ny4WR8XEMjA5DpxNRUZyL7VX50GlUSyVWtyqOW2XeSwS1thl337GDEdRrWPhgtj8pmzo4MoXGpm70D40hOsqKypIcpKXEgRf4kHgmXC4PHvrB71GYlYfoyMiraqLWNTXir//iDiQmxl4yu4td/Odn+ZOL3W4Pfv/Uq/7Dh2uPy7L8hZ898sVXrwEidilDYMshwAjqlltyNuFrRID7yKf+I9btkG4FJ98XYYjYZzOZkJmehhiblcamkgQp8oAlsWhz9nkMjYxifGoCMbFm7KwsxLaiDMiSwuIRrxH4jXb5OQtqM976lh1IYhbUa15Cco7Ij8vpRlvnAE7Vd2DO7kBedgq2l+ciKspKCeRqZ/v/4ZnDmJx0ozg394pVpYgm6sj4JFRaBe/+87csufeDlt1LCOrFMaqLpVJbW3vw2ONPTkxN2L+ji3L89yNf//rcNQPFPsAQ2AIIMIK6BRaZTXE1EKjhP/IRTcaC4r/rTyVTv2oymyMIUS3MyqIuSL8USIYhcXUk7mxqzo6B4QEsOOaQmZGEvTtKkJIcTTOYV/vhuhqzY33cOAIXEtSdSCJhHixJ6rqAJdqoJM57ZnYOzW39aGzpofHfVaU51O2vN2hXNdu/p38Ejz3+EvZV74BWo7niGSUW3pNnz+Az//wBiGrxoiDUlU/VseDCb37/ou9k7dnDPl76wmPfrTm68k+zKxkCWwMBRlC3xjqzWa4SAgcO1KgtCRElktfzGZVG9S6DXo+0xARkpqaD50Ar0gSSJzh4vB5MzUyju38AMvwoK87CrfsraNlUEp/K2uZCIEhQiXzSPXfsREJ8dEhc0psLtSvPhlhSSfP7/RidmMXp+na0dwwgMsqM3duLkJWRuOi5uPHoVJ/fj+/96AnExyQhNTHhCuQ3UPq0saMdN91UgeKi7KVM/svN4uIs/4uvIQlaZ+pblV/99tkRu93xeafe+PjBb/0/11ZZXzZPhsByCDCCuhxC7O8MgUsR4D760a/aXLxUwcnCVzUabYVepwER+o+Nil4qmxioSa7A7XFjeHwMA8ODiIy04Oa9JcjOSFoU+WcyRJtlgxGC2tTWh+N1TXj7HbsYQV2lhQ2EzyjweH0YGp7AyVOtGByeQFZ6InZuL0JcrG1VXgReeq0OzS2D2F5aepWRk+pys5icmcSHPvjuC65bTnbqSp3Ozdnx2C+esre0dR2U/Nx/PvrDL7SsEnSsG4bAhkaAEdQNvXxs8OuMAHf//d+I9onSX3OQv6jWaKxRFgtKiwqgVWkuyDom7kmncwHNXZ2Ym5uj1p9bbipHXIyNufzXeRFX6/bnCGrzIkGNWhXitFrj2+j9BF74ZDhdXnR0D+LEqRZ4XB5a3amsOBN6vfaGztLk1Bwe/tGT2F1ZCYPecMW+SAWqujNn8ZGP/RUt1XpF++3FWVIXL8B5OlWyJOPo0dPyE8++0mR3Ov/DprYdfOihj3s2+pqx8TMEbgQBRlBvBD32WYYAgAMHfi3oYjotGpH7V8j4O5VKo01NTuAKsnPAX4SQIssYn56iZVM9Xjcqy/OwZ3sRIgzagOo3axsWgSBBPVHbjHvuJBZURlBDtZjEojo378SZsx043dCBCIMOu6oLkZ2ZDLVKvK7bkj4f+9WLEHgDstNSrujm56CgZ2AQGdkJ2L27YkkH9WI+uhKd1CUx1UVN1cmJKfz818/Mdnb2/xIy/uunj3yh67omwz7EENgECLAn4iZYRDaFMEHg178WPvxGR6FP5r4Djqsw6vT6wtxcxEZF0co55zeSVDU0MoyO3l5oNAK1phbmpkKr1Zz/zAqTibFhrASBJYJ6sgn33LWbEdSVgHaD15CY77HxaRw/2YKO7iGkJMWguqoASQlREEkJuHMy+iu605mGTrx8qB47y8qpJurlExoDmqht3V34xwfef+VbLMdYr/B3YqF9/dAJ6dkXDp1xOD1fM1TFP/HIP/yDb0UTYBcxBDYRAoygbqLFZFMJDwT219SImRPad4OTv8pzXGyUzaovzMmFMSKCJkgFHnocOB5wudzo6utB/9AIUpKicdvNFdTtT4gqSbUKllEMj5mxUVwNgQBB7cWJky245y5mQV2r3UJc/ySRqrN7GEdPNGFmbp7KUlWU5iImykorv630HDmcbjz8oydQkJ0PEq5DCPDlGoktP9PciL/8y7sQGxt92WuWlZ1aLJMadJxcHMM6NDSGXzz+1HT/4NhPFMX3348+8qX+tcKU3YchEA4IMIIaDqvAxrApEfjk+75hmLF4Ps1BvJfjuMTUpEQhLyMdWo2WWlSDRJVI6szOzaClswvTc3MoLc7Anh0lsJgN0GjULI5xg+yOCwjq3buQELexXPwBDVL66nSuhOein3qJpikK/Vu4SaUFqqby9IWvsbmHxqeqVCpUlOXSZCpjhI7ObSVE9Q/PHMHsrJdKyBGd40sbuZmCkbEJaE0C3nbXrfSSiwnpxZ9bzqB6uW3u8/rw4ktHfS+/8kad2+//N89M43MHDx5kEiAb5DuBDfPGEGAE9cbwY59mCCyHAPfBj3wzE5zryxzP7zIZjSnZ6RmIjbJBqyZW0sDDnjxcZcgYHBlBV08vOEHBLiLyX5wBsymCEtrL1wlf7vbs72uFACWorT04XtuKd7x1F+Jjw5+gEt1ewqyI7BmxHrrdXpotTyySkl+hVn7i6laLAtX91GrU9EejUVGyR/ZuOJHV4Hympudx9EQDlaVKSIhCWXEOkpOiQdQ2CAW/2pib23vxzB9PYkd5KdQk2fEKrJZqojadwSc/8SFa5eoS5f6LN94lQakXXXAVBtvbM4jHf/XUxNDY+A8FAf/zk+/WjK7Vvmb3YQisFwKMoK4X8uy+WwqBAwcOCIaY0lt4cF8G5JKkuERtekoCbBYbTeogLkPy4CTuSI/Xj67eHgwMDyM6xoLd2wuRlhpHiWq4EYIttYjLTHYjEdQli6Pbg4mJGQwOT6J/aByTU/NwOFzw+iT4ZYkYCqllkBA7krFuMuqQEB9JJbSsFmPAyq8OkNVweoESBJ7OoaNzAESXdmZmgSpnlBRlIj4uEmo1CbW5vCXY4XTh/x57DknxKUiMIcUWrmBFVWQ0d3bippurkJ2dvhQ7vvRQvYiQXiJDtZgYFbx+OQsrKZX67HOvet94s+6oxy199bEffvGlxS7YMWQIbEoEGEHdlMvKJhWmCHAfeuDriZwiPSAp3F2igOLszEzERkYi0mKj5JQQVepqBSmbuoC2ni7MzM0hMy0OVeV5yMpMoskf0mLlqjCd55Yc1vkE9e1h7OIn1nifz4+hkUm0tveirXMIbo8P0TYbYuOiEGk1gRSgIC9OkqLA5XLROvLT03MYm5zB7Nw8SCKP1RxB92VGegL1CBAlChKzGS4WVXKOyFmZX3DhbGMX6hs6aDWqgvw0FOamIdJmuqxngmBz6Eg9OrrHUF5YdJX5cJianca80473vOcda7LnCbYd7T341W+fHZ0an3nYr5W//fOHaubX5ObsJgyBNUaAEdQ1BpzdjiFQU1PD94+I5ZyKv09W5DvNEabk7PRU2KxWWE0mSlKJtYUQVmK9GR0fR3dfPyT4sbMqH/k5KYiNttJqVeFktdrqK7sRLKiEtC04XDROs/ZMG2SFR3ZmCnKz0xBptQTMpXT/BWJNyZsSeV0iDwqOxk3LsDucGBmZQHfvAI3DJC01KRoVpdlIiI2CmsZNk5K+4bEjCCEn0xobn0HdmTZ0dA9Ty++2wkxkpifAZNTT+Qa8GIFqcENDE/j5wZexvbQMETr9FZOlyJofrz+Nj330/dCS8IGgGZR0tJwO6kXwLJdUdf7lTocLTz3zivt47Zkfw88/9JNH/qU1PNBmo2AIrB4CjKCuHpasJ4bANSFAieqkWM4p3O2Kwn3CYjHFxERGIiMlGWajEeThF3T7E4vp+PQ0evr64YcXuRmJ2FldRLOUmdv/mmAP2cVkvRpbe3AiDGNQF3knBofG8dqRetjtHhQXZiMzIxkRegMkRQIpvblcow8MjqcvT2RvOp1OjI6TfTmIgcEhRNnM2FaUidysZOj1avj94VMpTVhMTJyYmkNTay9a2vtAfretKAPF+RkwRughyfJS1aqf//ol6LUWZCQnLpHXC/EJ+PC7+vuQm5+OqqqSC/jpclhe/Pfl+OzFIaxkvWrrzipPPvXSSfv8/DcVj/HpRx/9lONa78uuZwiEKwKMoIbryrBxbRkE7qu4T+XflXyzIol/qVJzH4iyRiIuKhIZqWnnufMDGdZOlwtDY2MYmRiFTqOiGf9VlYXQa9XM7b/OO4ZaUFt6cPxUK955927ExUaGhYWbfMkTmjg4PI6XDp2G1yOhuqoEqYnxIJUkVkJMLwctfXjwPC1G4fZ60d0zgPauXszMziMjJRZVFfmIj41czG5fnvyu1fKRpC+v10vjbhuau9HbPwqb1YTK0lxkZSZCLYo0UexEXQuO13Zge0nJVTVR7Q47Jan33//egCbq4lSXiym95O8XyU4th0cwpnV6ahYHf/fsRGd774/dHt8jv/hxTfdyn2V/ZwhsBAQYQd0Iq8TGuBUQ4P76H78do/cu7APPf8YQEVFhNRmRnBCP1MRE+H1+Gj9H3f6SgjnHAoaGRzA5M4GYGCt2VeSjID+dPhuZ2399tovkl9DQ0oMTda1451vDiKByHKZm5vDCq3WYm3Nhd3UpEhPiAjxqFfzwAatq4FFC4qYJUW3t6AHPydhZWYBthRkQRJIIGD7W1ICkViDcoat3GGcbuzE5NYvMtHhUV+YjNsaGsYlZ/PTnz6MorwA2cyD05tL2pyLHioRTZxvw1+97J2wkTOIKbbnKUhcnUV3czSUW1MUyBGRUxPJ79MhJ+fkXX3/d6XD+F+/DSz/5SY17fU4CuytDYHUQYAR1dXBkvTAEVgeBmhr+H0bUeT6Vcisvc18yWcxWm8mIzLRAjCBJ4Ai6/b0+P2bn5tA7OACH20n1Hm/aU4KEOBt8PhIDGD5Wq9UBJ7x7CRJUYkH987fuoSRnvUkZIWFEPurQG/Xo7BnB7u1lSE9LWjVyev6KBDgqSeDzY2JyGs2tnRifnKIV0irKcqgL/fIkb/3WleBDLMgzc3a0dgygobELHr8f2woyUFyQjpdfPw3nApCflX5VN//Q6ChsMSbctH/3UsXiSwjn1RgmJfkXpvVfcvmiokLwWF8uZnVifBK/+u3Tw319gz+S/P4fMnH/9dtb7M43jgAjqDeOIeuBIbDqCBw4UKM2RInlosD9rSCq7zfodUiKi1VyM7M5ngskdAQOLweXx43JmWn0DQ6CE4DKbdnYtaOI6lWSbGvW1gYBGoNKLKinWvBnb90bFgQ1WDzgzeNNyM7OwLbCHAiCuCqW0ytaCqm0aoAYN7V0oqmtE8kJkdhTXUwlnsLxxYkUyyCyVJOTs9Tt39LeT2W04uMjcfpMJ3aUlUOtUl927GSuLrcHDW1N+PBH/g6kr8WjefWkqWskrMsmXS3255f8eO3Vo9Krr735stPj+U/PtHLo4MEa79qcAnYXhsDqIcAI6uphyXpiCKw6An/z4X+3ajlUcZz8Wb3WcLPRpEN+Rjaio2zU1U+egOQBSSx1pIrOwNgIBodHEBUZgX27SlBE3f7nMpRXfYCswyUEggT1eF0r/vyePYiNXl8LKtkX0zPz1LXv8wG7d5TBYjFed8zptS41sfAR0tfbP4QzZ1sgCgr27ChGTmYyuCCJu9ZOQ3w9wczj8WJ4bBonalvQPzAKl8eH0vwixEaTmOIra6KebW3DW+7ci5TUJDrK5ZKeLpnKMkGry/HZi/sbHhzBwd88MzA4NPKI0+X5v4M/+8pQiOFj3TMEVhUBRlBXFU7WGUMgJAhwDzzw1SiPotyuKPx31DqNNdpixbb8XOh0uqWHJq1JLvmx4HCgZ3AQ09NTSE6Jxc17y5CaGEPj1FgLHQLnYlBb8Gf37F1XgkrIoV+SaSWlw8eaUFKcj+zM1JBaTi+HbFA9YHx8CrWnG7HgWMCu6kKqQyqKQugWYxV6JoL9ja39eOW1WtgskSgtKLiC9TdQHHZkYgKSKOMdb7+T3n250qfLDfESYf/lkqguQ3B9Hi9eevmw9/CREy94PK7/HOgQ3njttRoSJ8QaQyDsEWAENeyXiA2QIRBAgFajStyVLPqdX+J4/i9EQdTmZmQgLTkJKlF1AUykVOXU3Cy6+/vh9jpRUpiN3dUFsJiNYeli3QxrHF4ElaNlS0+ebsPg8DR2VJXCYo5YlxhQGpuqALPzdtSebsbo2BiqK/JQWpxNKzqFcyOeiYaWXjzz3HHsrCiHXqu74vlxud2ob27GP3z4/VCpLzyP6z3Hnu4+/Pb3z3ZNjE1+V+Lkxx79Xs34eo+J3Z8hsBwCjKAuhxD7O0MgzBC4777vq7y6sVKVJH6D4/kdBp1OXZSfz0VZLBDFCx/4Xp8XoxMTVAZHrRJw563bkZ2VCLUqvB6gYQbxdQ1nycVf24p3vWMPYqLW0cVPxOZHp1F7qhXWyCgU5WWdM+ld1+xu/EOEqBISd6q+Fb19A6goyUZFaW7Yk1RSRetnj78ImzkaKQnxV87ml/3o6OvHtrJ8FBXlL2tBXS4E4JKs/4uW4FplrDxON/74/Cuu2pP1z3h8nn9+9JEvDbBSqTe+r1kPoUOAEdTQYct6ZgiEFIH77rtP5RMzPiBwyv/jBC41LjpKU5SXB61aA5VIao0H4uUCSRwu9A0NoW9oEOlp8di3cxvN9lepVEsP0pAOdgt0Hi4Elaw3UXhoae1FQ0sfykuLkBAXAykMEuYISSVlVesbWtDZ3YfK0gBJVanC15JKq0WdakFtXRfVRCX4XqlNzc5gfGYK733/gUuDUC9inMu68C9ioMsR0otVAC7XP4mh7WzrxC9/88QbLrv73xzT04cOHvyWawscTzbFDYgAI6gbcNHYkBkC5yNw7701Ft4ofoGXuQOiqEpIS0kWMtPSoVWJ5wmMB56OEzNTaO/qgdPjQllxJraX58FmM0MlCsz1f4Pbykey+JsDOqjraUGlLyQuD3Xvd/aO4babdoSVxBPhd0QI/0x9C7p6+miJ1IrSPKjVZA/e4CKE4OPkRW98chY/+8ULKMkvomEyV5LL8vl9ON3UhPe8/90wGo0hGM2Vu7yWJCr7vB2/+c0z052d3Q/Nzju+/7vHvjqypoNlN2MIrAABRlBXABK7hCEQ7giQ+FRrbEWBxClfgaJsN+gMsXnZ6YiNjIZOq6FyVORBy3E8rZM+ODqM9p5+qFQc9uwoRH5OGqyWCCqRE25aleGOfXB8SwT1dCvefc9eREdZ10kHVcHU9DyOnGiGy+XH7ft3gOOFNU+Qutq6Bdz9PpxpaEbfwBCqy3NRUpwFUQjPFyVikf7tE4cg+1TIzki7optfUST0D48gNjEau/ZUXwDBchbT1f77xfhfqpsq4+TxU3j2+VdedjncXzFrrEcfeujjno1y3tg4Nz8CjKBu/jVmM9xCCBw48E+6yPjYd3gl6Z84ns+Pi442ZqemwGw0Q6tVL+qncuAEYmVzo6uvF8OjY4iPs1Lt1JSkWGptI2Q2HPUqw3kpAwS1GydOt+HAPXsRtU4EVVFk9A2M4+iJJlgtVuzeWUErka1mC1SP4mllM6owT/bLNcqZEcK0sOBC3ZkmTExNYPf2IuTnptE+w82SKkkyLWP73Mu12FleBbXqXAjN+bgS6/W83Y6O3h584L73XTUcYFmX/IW6/ZcI+V+7jtVFO2DR5DozM4PfHHxqtLt74H9lzv8IS6BazZPC+roRBBhBvRH02GcZAmGKwIH7vmY2qpV/EqC8k+OEkpTkBKQlJsFiMkMQAlZSnjAEjsPM3Bzau7sxZ7cjLycR2ysKaXyqVqMCeTCHodc1LFEn1bsaWrqpa309CSpZs86eIZw41YrUpCSUbMsHURhYjRYoFkVklQCHwwUixUTky0RegNGoh0arAQ8OEtULXX7nkC04PTOH2lONcHtc2LdrGzLSEsLy5Wh2zoGf/vI5ZKZkISaSWMcvnR9Bxif50NjWhrvedhvi4uOWYL/WylKXWDzPKzZFO70oKPVylaWCv6PXX6VSFYlPPnL4TeWVV4485fH6vuaaluuYuP9qnBjWx40gwAjqjaDHPssQCGMEiNvfZCrNhxb/rHD87gi9Ljs3M4O6/Q16LX3AyUG3vyJheHQU3QMD4EWgrCgL2wrTERNjA6cEan2zdnUELiSo+xAVZVlzFz8Vx/dKaGnrxemzXSjIz0FOVtqqJEhRfkOE7N0e9A+OoKd/AOPjs/D7fFBp1EhMiEZSfBwS4qJgMBgCHGpFplAFI2OTqDvdCK1OxP7dpYiNsa5ZQYGV7muSLPXsC8cxPuFAcW7uFTVRARkj4xPg1DzuuPv2xYpvlxLESyygywSRXpIktYwu6jWHDAAYGx3H73775MDA0Mh/On3yYwd/VDO9UnzYdQyB1UaAEdTVRpT1xxAIMwQeeOB/NB7Yb/PJ+HtREN6SFJ+gS4iJRkxkJNRqNRSZWEk56lp1uVzoGRrC2Pg4bDYjyktzkJOZuKShuTLCEWYArNFwfD4/Glp6UHu6De9++z5ERa4HQeXg9fhwurELDU29qK7ahqSEuFUjyk6nC6cbWnGmsQ2yX4FOpwfP8ZAkP5xuNzRqAekpiSjIy0RCQjTV5yVaoldrhFSTqmg9vYM409iCxEQb9lVvg8lkWPaza7S09DZkHn39Y/jlb1/FropKaDUktvvSFijz6kR9azP+/h/uhXCR9NuKx7xs2v6Ke7qmC4mG8qsvvyYfeaP2t343vq7he84+8sgjvmvqhF3MEFgFBBhBXQUQWRcMgY2AwL331mhVZvVtkqz8rQDxz6OjbXxcZCQyUtIhCOQBHEiiIqZVp9uFkdEJDE+MQK0RsK0wE3uqC6HVakAsSaxdigAhqGebulFX37FIUM1rTrCCpTrJGJr+VAVp365KREfbbtgaScJBiDv/jROn0NrWB7PJCr0+QE6DjSTfEc1Qu8MOQVCQk5mKkuJc2CwWyMryJNUvKejuHUBDUxuSEyKxe0cxjBFXFsZfjz3odHvw8A+fVFLik7m05EQaAnNxI25+vyKho6sbFTvKkJmTRS9ZVtdUubpU7XKVqa7ZYrqMBXZgYBC/+83TXeOTE//hm3Me/MUvvjazHpize25dBBhB3bprz2a+BRGg2f7xBYk+v3Y3z8sf1+n0OyLNFqQmJyEhJoYSqkC2fyDrf94+j6GxcUzNTiMu1oIdlQXIzUqmyDG3/4Ub6BxBbV9XC6rb40Xdn+Jgm1oHcPO+akRGWm6IoFLCJfvR1T2A14+egkrUwBhhupSYLe4ZYk21Oxbg9XlQXJCJytICaGkFpuVIKge3x4Om5k70DwyhvDSTVpsKp0YI6a9+/7I8OeHgq0pLEYjGvXybmpnBlH0G7/rLd12WoC5rIL1Wl/9FSVXLhgSsQGfV4/XixT++5K89Xf9Lt8f/jZ8/8oVG0KAf1hgCoUeAEdTQY8zuwBAIOwT2768Rc4r4fL+sfivHS580m8yRhKjmZWbi/2fvO+DjqO78v7NdW7VFvfdmddmSXLBpASeEFuxLQiAmxRBy5h/uCCXNeyGNJJdLQpIDAqQQcgRDICGUAO7gIsuyeu+9a7W9zz9vdldey1qvVpZsWcx8Lh982vdm3vu+NzPf+ZXvTyoJY+q4k4NYzojLb1KnQ8/AAGxOK9KTY3HVpgJERyiZZBjW7e9Z3lVDUK02nKxpQ1vHECMxpQiXXxRBJXvAYDLj6Ien0Tc4BqVCdV7FMv8NTj5uiDXVaDKBph1Yl5eOgtxMCIWCoHuFWAlndAbU1DZBIKCwuTIfGpV8FUmfUTj0wRn3oaN17k3ry3hyaeDSwXabHTXNDbhz12cZa/P8IxTd0sU8QC76fBdIuuru6sZrf32rZVqne3iib/y9t99+kpWjWsyisG0uCgGWoF4UfGxnFoErG4EHH3wwbNYeUQTQu/l83i6lXI5ITSSy09NBwe2VpSJOf2LdsmBkfAoDI4Pg8WgUF2Rgc0UBI1+1kKvzykYm9NGfQ1BvuQoa1eWJQSVudpLB39oxfNEE1ZcYNTY+gXf3H4fdQSNcFg6KE/zVQWKbdfpZiEQclBbnISM1CbwgBSF8buyh4TE0t3UiNlqJ9SXZEId5JNIu90HI96kzra6/v/nhdFZaZkRGSmLAbH4X3Ojt60d8agJK1peGPPRgWfnBCGmw/qEOyG6z4LW//sPc1NTytEsk/8mffv7g6KKkGkK9L9lshgAAIABJREFUENueRcCLQPCnDAsViwCLwBpHgKZ27/4vtV0kLOO7sVcoElYoJBKkJCYiMT4WTudZtz9x65NEqqHRUQyNj0IuD8PmDetQWJBB1IdWBYm4XIvlI6g1dR34FENQL08M6pyLv20A11xVCZVq6RZUxr3vcqK9uxfHT9RDIBRDIhIvQkDKU2LXbrdDNzuNyIhwlJcVICY6Yi7OOdA6kX4EyzP1LRifmEB5aRbSU+MZebRFiQKs4AYgY6s+0+56+73jXQK+KGNTWRnF8ysrfM6laUBvMqBroB933fO5FRzVwqcOGkIQ4oiYzwOaRlNDM/7xxlsnDQbHt22zjsOsHFWIQLLNF40AS1AXDRXb8KOGgFZLc8KLDRmd3fXPKdRxpW63i9aN9/wziq95cO/Xivooam3FYmm1Ws7gYFisW+DazuFSPxSJwtQR4eF0VnoqpZDL4fa6/clLmrj9jWYTI0s1NT3FaFdet60Y0VGaS54YtFr2Jak21NDUjZr6Duy4+SqmhGywDPblHrt/klRjSz+2blqPyIiFNTsXc23f+eqb29HQ0AmRWAoRX8iI8i/2sFgtMBhmkZmRiPKyfEjERILqwv1JRbORkUmcqm1AuDwMV1XmQ6mUBw0RWOyYltqO4FFT1+F6/2B1zazBFFtZUhYXEUATlaRFOV0ONLW342Mf/xg0kRHnXjaYCXTeIEO2iIZ4/vOyuC7AcI1GA17b9zdDV1fvz22zrl/+3/9pJ5eKKduPRSDgxyoLDYsAi8D5CLz8Ms2tn6r9ljtM/XBGcpx4XTyHScNtH3Gjoa3LaNUP/SJny7b/ureMWnPyKzt27BCoYjYnuVzGezkc7tcEIgE3MSaGzkpLp/jzrEXEujpjmEFnby+sVguK8tOwdXMRJOLVlX19KfY4Q1Abu1DT0HlZCSqRmapr7EJdUx/K1+dflMwUIWQWqxU1dc1oaeuDRCyHkC8IiaAS7Gf1OhC1pdJikmSXDC6XF5SkktjmlvZutHd1IzczEcX5GUw4yeWMeSbxuNV1Ha79h0+fnJiYGclMz/hUQVZGYM8BTWN4fBx8qRDbrrk6JIIa1AI6j4AGy+Kfr7s6//zz75Fg/Jasw5nTNXjnrfcOm+yu70jp/uOsHNWleNJ8dK7BWlA/OmvNznQRCBBiemKquYCiHa/KItNTolQS7CwDxEJP+UWisDQwAxxttqGpo2XcNNH95fKbbn97LRLV7dt/KYzJ1udzHJy9XB7veoVUKszJTIdGqfZUofI7HE4HhsbG0N3XB3GYEJs3rUNRbhq4PO6Fyz0uYk2ulCZnCWoX7rh5C9SXxYLqEeonZTnPNHSjID8L6cmJS1ZcIATVbLbiZHU9OnsGIZMqIOCFRlAZV7/DjpmZKcTHR2JjeTGU4fIL5L97Vpz0I4lWp2qaYLWasbkiDwlxkZd1P/kI6sEjp09MTOhel0pk372qYn2YUCAMSJzNFivq25qx68u7wOFwA2/noIx0XtdQ26/QjTQ7M4NXX3l9erBv6KdG2vibfc88MbtCl2JP+xFDgCWoH7EFZ6cbGIGn36A1LV0f/rcqdt2duSkKrlQEWG3Ax9YBDq/0J7lhiKC9zQE0DQNVHUa6t6vhNGWb3PPkIzefWIv4bt++R5iUGnO9k6J/zuHy4qPUamFORgZkEgk4nmLsc4fZZkNPfx8To0oSXLZtLkZSQjT4fO6cB3EtYkTm5COoRCSflDpVXiaC6nC60N4xgOq6TqQlJ2FdbsaSK0n5CGpVTT06upZGUH1k02A0gqbtKC7IQm5OGniMFfXCB5fLQV//KM7UNSIuVoXKDXmQSkSXLRbVQ1DbXYcO1xwfm9D/lMuhHi0rKqxIiInylnc9dz4+ia72rh6UbipDUnIKqS7MHOeVPg2CRTAXf7Dfg2Ed6u/+1yOhLMc/OI6Dh46+67LY9vbGo/qQVusM9ZxsexYBfwRYgsruBxYBAI+9PBJhnxw5mJObn1eYwkOEHOgaAUxW4LrcswTVB5aPqBqsQN0AjWMNg67h/ob3Ppb28dt37qQsaxBU6r5v/m+sTa97lEPjdi6HG5WZlsJNiImBOEwELod7jgVJbzCivbsLU7OzyMlKwObydYiOUoHH5TLlVdfiYbcTof5O1DZ2XzaCSnAl2e49AyM4caoVkRoNNpQVwLXE4gpnXfwtaG7rhXSJLn5P4pMDUzNTSEmKYqyoMql0jqwF2g+EBBHJs5ra5rmEqbSUOBDiejkOH0E9cPTMsbEJ3fdAu0pS4hN/WJKf72Gc5x2EotIYn57CrNWEm269Zc5yHKoB9GJd8kELBfgVE2A+KoLpqs77nfSZHB/Hq6/8bWRsZPR7LrP+Dy+88FPT5Vgn9pprAwGWoK6NdWRncZEIPPizI19Pyq748Q2lfIgFpEa9l6DagOsXIKi+yxEDInkvjRuAkx1O1LUNmEd7a7993ebbnr77BmrNPZy3abW8PJ24wOpyf9vtojdKJYLI3MwsaJQqSMLCvJYhj9A/saoMT0ygs7sbxLO5bXMhsjISIJeKweFy1lzGPyGodY2dqGvqxo6bt0CpvPRJUj7T3NDoND442QCBIAzXbNmwZBkwso5EFYBUd6pv7IRYLIMwxCSpuY86ioLeMMtULVtfkof0tCRwFyFXRcjoyOgkE2agUUuxpTIfctn5uqIX+QhYVPc5gnrkzLGJCZ2WR2GGKxTs31perpSKJQHd/EQTtbalEf92950QCkWeay2FAfqP8gK6paTZeRbai73efIQCMGa3y4mDBw7ixLGTr9i59Pdso9mN+/btZMvPLWqHsY38EWAJKrsfWAQAPPDzkx9uqtywcWM2cdUSgXqga9RjQb0+73wL6vybiFR8JCXH20eB421WtHU0d7kMQ4889a2bX12LAO/Y8WCYMirmJhfs94PmlEZFaGTZKWmQy6VeQXaPeYXgQlzffYMD6OobQEyMEpvW5yIpKcZbxpK8SNeGRdWfoN5BsviVRGD+wtWTVmJvEFI5PaPH8VPNmJm14oZrNoJDWOEScPYoNjjQ2tGHE9X1EAkkEDMyU6GvmYfsWpmM/tzsFMayK+AHd/MTKyr5YKxraEXf4CDKi7OQlZF4WayoDEGtbXcdOFpzbGpqZi+sjpO0UPh/hbl5N6clJQT46KLgpl3o6etHUmYq8goLF7XswVz2wfjm/IsEO9+iBhVCo9HhQby67/XB6cmpx6eBP73xjNYcQne2KYtA0Dh1FiIWgY8EAg/8oqp+S+X6/PIMDxklBLVzFDBbgOvWeZKjFnPwOIDJDjQSt3/LtLu3q6ZqanL0ltd+evf4YvpfaW3u3KOVh7n4/0GDvpnL4xWmJiZxEuJiIJfIwON5rKTEyUmI6uTUDDr7e2EwmpCVEYfSokwkxEdAQLLCaaK1eqXN/tzxEs1P4t6vb+pmSp1eToJKSoZWnWpBV98Ert1WAalUvKRqUoQEEYo9MjqB9w4eA1w8SGWyJSUq+azq0zNTiIlWYWN5EZThiqBufoIysaKOT0wzVlS1UoItGwshlQgv+YYhBPVUbZvr0NGaDyendFpY+z5wcJM/Fxsd8Wx5cRGHR0JdFhwVhVnDLHqHh7Dzc59dsEXQLPyLnW2oMQUXeT0yH5fLgQPvvu+uOVP/ktth/O7z//t4O1sq9SKB/Qh1Zy2oH6HFZqcaGIE9v6iqv8qPoBJrQ+cIYCExqISgknD/he4W30Pf79Q+r6XOApzsBOo6J5xD3Sf+NzEs9rvah8rWnF4g0U/tH3NmcLjiR9w0fY1MKk9KS0pElFoFuUzGmFKJIZHg4qTdGBkdZfRTwaFRWpCB3OwkxEarGYAvh8Vxue4LUre8bpUQVLvDgYamHjS3D2JDaQEiNaolY0sS4WZ0s3hn/zEY9BaEy5VMiMZSDkJSDQYDeAIaG4rXIS01cVEE1XMtGjV1rRgeHkHFhlxkpMYuiSgvZdy+Pj6CeuDI6Q8nJw17n/3VY4fvu++HSVQY5+Cm9RXJ6vBAZVk9luj61hbceMtNCFeqgg8jZBNpkKDR+VcM9fzBRkws3Q4n7HYrzGYTjHo9dDod+vqG0NvTB6vZ+ucZvuBL+/7nP9ZijH4wdNjfl4AAS1CXABrbZe0hQAiqz4JKrKUMQfVaUK/3EdQQp02shuToHgdOtNvR2tE56bYOaX/5nx/7dYinuiKaM27/2MibXA56F4dDbYqKilAkxsVBHa5k4lPdLmKGpkBxKVgsVvQPD6J/eAxqtQRlRZnISk+AMlzGFAS4EhOpfASViPV/6rJaUD2JRd09wzhT342szFQkJ8YvOZOfkDKj2YJjVWfQ0zMKhTwcpHrSUg4m6cpihtVmRlFBForys0FE+RdzEKI8OjaBqtMNiI0Jx+byfEYX9VIePoJ68EjNBxOT09pnf/XtQ2TfK6Iif56blbU7Jy0loJufhhvDI6MQKWWo3LxlvizpeSGp8+cVqgE0WPtQk66YTwS3Gw6HHVazGQaDHrrpGUxMTGFqagpTk1Ow2ewgKhJkrXxVyJwulwE0/X9CAf3fv/6ZvRPQXvq4l0u5SdhrLRsCi3syLNvl2BOxCKxOBPb8T1X9lk0eF/8cQR0BzN4YVPI3n+vOd9Nc6AXg35aE/9mdQOc4cKTJRHe1n+kwGE2fuTn3hrqdO6lFBg+sTtwWGtWePb8UGmnDNgq4nUNRu9QqjSA2MgKpCYmM3JTL5QZ5fRGTqtlixujkJIZHRyEQcpCfm4qyoiyEh0uZcpdX0kGSieobu9HQ3I07btnqIduXIQaVwYwCpqf1OHm6DQK+CIWECC41DhUUXLQL3b1DOPLBKQj4EojFS09SIlXIZmanmTjSjRuKIRCEQnZpnGloY4heZVk2SEb/PEneFd0yDEE900ZiUD+YnCOoO7hizbobYyKiX60oKRJ6QlYWdvSbTGY0drTjzi98HhSTYRnAM7NAktP8GNJgwvvB2i/EiMmw3S4HbBYLjEYj9LM6TE1OY3JyEtPTM9DNzDJqDBxwwRfwwOUKmP8KuHzw+HzwuVxQXC6sViumdVNum83yvsONJ4xjtg/YkqgrujXX5MlZgroml5WdVKgIEIK6eeP6/IrMszGoHYSgWs7VQQ31vL72xEhE/kfiU6u6gOq2KfdgT+2bESr1Az/6SnHvUs+7ivtRdz30kwiR03m9y+m+KyxMfEOEUoXU+HhERKiZhB0mPpUxM7uh0xswNDKGSd0kNGoZNpTmoDAvjSFahNBeCcdqIqhMQpLVhuozHRgen0VFaT6kMsmS4lAZvsskXs3i3f0fwmCyQylXglqk5fO8taNpTOumERurwabyIijk0kUvL7G2Do9O4FRNA1ISIrCxfB14vAuI3y/6zItreJagnj46NaXX/vbJbxwmPXfc84OISKXwvbLCgsLoCFLud2HJKZfLidauTmzYsgkx8QkMuV5s7PV5MlHBKkkFk4nyXntksA9tLa2MBZTE+dqsVibwmMfngcfjg8/zkk8ej/k3Kb7B4/DmQp6IpZT8HyHlFpuFcesbTYYG2un6mQ6OV/b9RmtcHLpsKxaBcxFgCSq7I1gE/qXf9+/EglrpJajeeMnlJKg+kMkLiUsBo7NAba8LRxs6baaJzmfiHZ/4mlZLXRlMLIQds2PHy9zwhM40l819E4fifFOpUKnClTJkJqUyWfzEnU9e5eTF73A6Gd3UwaFhGMyzSEmOwcYN65CaFA2nixDa1Q2PP0Hdces2hCukl23MjO6o04mm5h7U1HejYkMRYqMjl+zm9xBeK07XtaC+qQNKmYaxnC3lIOea0U0zHyKVG4oQoVGGdBriQq6qroPFasa2TYWIjAgPqf/FNJ4jqEdOH52aPktQt+/ZI0yiErSJiXGPFubkBtREJSbTsclJmF0OXLf94+cQ1PMsnkEGGiypKujvXuOtyWjEn373B4gEYohEQg8pJdZ2L/FkwnIWYAqEkJK7l3a5GZ1dvXkWOt3suNNpf8bKcT794pPaoaD1bC9mMdi+ax4BlqCu+SVmJ7gYBM4hqCSLnwO0D3ssqDfkX1hmajHnn9+GGH18ZVMPNTjQ2tU0bpzs3fOJvFtf37mTsi/lnKu5z44dWoEiWlBOu9xf5fH5/6aQKRATpUF6Mqko5BGX91nqLDYbJqenMDA0BBdcyM9JRuX6PKZ0KCFdq/WwWu2oa+pCY3MPLjdBJRgRgtI7MIoDh88gKzMdeVmpoEMx2fkBzRjrKGBkZALv7P8QFPiQkWz+JQjBEII6q59BuEKMivWFiI7ShLSkpH9HVy+aWzpRlJ+K4sKMSyZVFoigehIFhdeEh0tfrSwplUslYQF1fonCQl1TE3Z+/i7wBBeIoQ01iDRY0tMFfu/v7cHBfx6AQhHOFNPwxDN5CaibBu0GXLQTDhIf7nDA4XLB5XbAbrMRl7/N5XIZ7U77WzScP+9pQv2hQ2wVqZA2Ndt4QQRYgspuDBYBYkH9WVX9Fj8XP/E8d6wgQfWQMY/bn8Sn1vYBJ9v1TNlUvsN276+/eW3NmlsYrZbzpRl7BGWXlLi5+I5QKKog5VLTk5MRHxPNuJ+JVYYQECI7ZbJYMTo+gcHRIUgkQlx/dRlyMhOIvfWyWSYvtCZzBLWlBztuubwWVB/Zn5rR45/7T0EoFKO8tABiUiZ0Qfdz8N3mS5Y6caoW7Z2DUCs14DKWttAOsr5EsF8qFTBjio+LCu0EAGb1BkaXVakQ4erNxRAK+SGfYykdGIJa0+o6ePTMkWndjPbpX3zriO88u+7XRosEkheK8nKvS4qLDayJ6nahu78PydlZyMzNCziMYHwz2PhD7X/8yBG0NbcxhRhctBskVtjusMNptzudbqfV5XSZAXe/i6b74Ea/i3L1cx30EAT8YbvVNWydre/ft2/fmoupD4Yz+/vKIcAS1JXDlj3zFYQAIagkBrUyE7B7dVCJi99kAW5cAQuqPzTkJiTveZ0ZON1D42jdgFM/1vRibOX2L2mvplavyXCJ60usTV3DdLxIILiFBufbYWFhEUqFnM7PyaGkYaJzrKkkBMBgNmFoZBgjk+NITYrF1s2FiItRM2R2sfF7SxxqSN1WmwWVEEGz2Yrj1U3o7Z/AxvISREeS+MilhUr4CM/I2Dj++d5x0DQXcrk8ZKknjwVVB5lMiIqyAsTFhk5QyQfM6doWTM9MYnNlPhJiIy+JFfVCBPWuux6ShIVHfTkmWv0/ZQUF4FKcgOUMZkgoy+Q4btmxc9F7LJjLfv6JQm1P9sW+P73oGhgYrKLhbgCFHpfDPUzx6BEhhz/EcYaPuFy1xmeeecax6EGzDVkELgIBlqBeBHhs17WDACGom7wE1SfUf6kIqg9FIi1JXiqjeuBgI9DW02kaHWx4fOv6256895PUmqvCotVqBYOD3DhaxPt/XFD3icQiYXx0FLIzM8Gd5zp2uVxMPfPu/n7YHTaUFqZjU3kBpMQiuEq2ISGotU1daFolFlQCCwmd6OkfwcGjtchITUZeTsaSs/nJ+Qi5tNlsqG1oRXVNC5RKDYQXclMvuDYUdLPTUCnFqNxQjKhIooEb6kEzqgLNrR3Iy07C+uLMSyJNRghqVU2ra/+RM0empma0z/36rAV1x44dXIWmpEgiE79eXlIUr5TJA4yJxAfbUdfcjO233wapTLGoyV+KSlAmgx4v/v6FZ0fHRr770u++P7CogbGNWARWCAGWoK4QsOxprywEvkoIauX6/I1ZZ7P4mRhUK7C9wOOGv1QHI2jvBpqGgOMtRvT0dXQ4LBP3PfvYDQcu1Rgu5XV27dKKuDJhDgf0f4PibJaGiXkZ6SlUcmz8eVYxp8OJoYkxdPX3Q8CncFVlIQrz0yAUXBoX74VwWY0ElRBK3awJ+w9Xw+6gUbm+BHLF0rP5GZIKClM6HfYfOoHpaQPUqshFa5mS/iTEgGTxx8WrsWkDyeInxRxCPwwGE06ermdCBa7eXASxSLDiHys+gnrgaO3hqWmd9tknv3HUf+R33/2YWqxW/SonLf3TmSnJAQkqsQAPjQ5DrFKjtKJywcmHagENFrI6/yLzz+/7va+r0/naq6/+x4Te+sLrv9fqQl8ZtgeLwPIgwBLU5cGRPcsVjsBX/9tjQfUnqM0DwMAEcGspIA3z5KMuMXwvZHTIjUmShww2oK6fxpGGKfdkf/1xWmf67NM/+uQARVGrxXAY8twCdSAuUmG4ajuHpp4AlxMXoQwX5mRkQiGTMcLf/gex4nUN9mNoeASxMWpcc3UJ4qM04C+itvuyDXjeic4S1F7svGUrFJcxi983NGJ1s9mdqGvoRE1dJ5OUlJgQtzAhIht8kbuKkMzBkVG8d+A43G4uVIupjDRngbViZnYG63JSGXUB/hJlolxuF87UtjCaqlsq8hEfFxEwMWm51pzIXJ083eo6eLjm8JROfx5BZT62pKLbI9XKP5QXF/P4AQoaeCpqGdHc24Wdd93N0P6ghHQeAz2PkHplo+Yy7kNV4vdr/8GhA1PHjx+72zTuep/VL12u3cOeJ1QEWIIaKmJs+zWJAENQiQU1+6wFtaEfaOgD1GIgPQooSASkIo9181Id5GVDbtIZM/BhG40z7UP2yb7GpyrybvzOvTup2Us1jkt5na985YdKmo9/d7jpr3K5PFVibDQ/IyUFkjAxQ1Q9IuhE+oaGbtaAtp4u6PR6rMtJwlWbChEuk0Ag4F8Sl68/Lj6C2tzaix2EoMovn8yU/7gIGZqcnsVb756ERCxFUWEORHwBXEwsqpeRcijwKC6jgUayuHmkEhBFETnMgEKdpJxqe0cPjhyrgUgoQbiCuKov/EphiJmRFBayo7Q4D7lZaSFZX/3n5abd6OzqR1dXLwoLUhndXM+cVu4gBLXqdKvrwOHaw/+yIp9HUAkA9977eDpPJn59fUFRbhRTYvZ81u+psuRAU0cnKrZuRURMbNBBB0t6CvZ70Av4NSAhNa+99FJV/2D37uef/E49KxcVCnps2+VCgCWoy4Uke54rGoH7vQR1k5egEmLY0AuYbUB+ElDfC+jNwKYMICXy0llS5yxh5B8UMDgNfNhqR21jq86i73n0d3tvffqKBj7Q4LVazu4pcYobzsdpmrtVJOTHFGRlUJGaCAgEAm+mv0fo3027MDw+ga6eboCiUV6Wi+L8NEilYkbEfalJQaHiavHKTK1Ggko0Wk9WN6Gquh1iiRgOux0WG8l18ZB9kVAAmUwMqUTCyHlFRKggFUsgEvAhDBOAxyWap57iCv570mK1oaGpDadqGiGTKSEWSwNSVEJOiV4mce9HR4WjsrwQGpVqyZWgyIfK+OQUTp9pQkK8GlsqCxg93ZU85iyoR2oOzeiM2md++egH86936y5teFR42N7UhKSv5WdnBU7eommmipoNwJbrPjanieqbQiAXfKD5BYtRDaazOv96Br0OL/3+98+OT06y8agruanYcwdEYGXvZhZ4FoErBAEfQSUWVCK1SWSmCCk1WoCteR6rae84UN8D5MYBFekewnips8h5HMDmBBoHgaPNZgz1nKl362fui+HedHJtCv1rBYoo7kbazX2M5lCbYiMjJGmJSVCGy0FKSpIF8An9E4teZ38/BoaHoFHJsbEyD+nJcSCalOTlvHB1n+XboOcQ1Fu3QiFbHRZU3wz7Bkex7/XDmJ42Mdn3AuJ+JpJebpopZUo0ZkmMr91uZwT9ibRXfGwUUlMSEKFRQSaRQiwRMtZVFwGdSIKBxGnb0NDchuqaZoSJJJBIZOCRc/vdHB7pMBqz+lk4XXaUleSiIC8T3HmhG6GuBiHIp07Xg6Kc2LapmCmRG6jMaKjnXqg9Q1CricxUYIK6e/duvkOQdI1arvhrRWmpWCwSBRyTxWpFXUsz7rjr8+AwHwEXcSynCdU7jO72FuffX/v7Qy6j9Q+/Z+NRL2Jx2K5LQYAlqEtBje2z5hAgBHVj5fp8xoLq9OiT1vcBBjNwFSGoLo9u6ey/hPuPtwIJKuCqLM/fLsfBlE21Ah+00zjTNuacGG74q5Kb+OCPH8kevhzjWelr7t79I4Wb73zYBeo2HofKSk9K4ZDKSOHycPB4RBfV6/bn0NAbTOjs6cGUbgbJSVEoL8tBYnwUwkRCRl91pT4qGILa2ImWtj7cces2KGSSS2a9DYY/IVZ6gwVv/fME2roJgY/0EHy/w1ey0u2iYXdaYbVZYDJZYLWaIRAIkRQXiZTURERFqhAulzN4MnXA3DSsDgeqquvR2tYDooIhCZNAJBQyIRmM5dTlgtFkhNVuYQoGlJXkQSoRBxv2BX8ntx4h1XUNbdDpZrCxIhcJcVErivliCCoZ9Ke/8HCsKjzqzyV567bGxUQGdPOTD4OOnl7kFBchLjlt3nr47NueP59nUQ1GSOf9Hqy515h+Ng7Z2+HI/ncnaqtP7xrijOx/+8knicGXPVgELgkCl+n1eknmxl6ERWDRCNz306r6zT6C6tVBJQSVuPV9BJWcjMmwdwGHGwGJENheCPjkoeZ8m95kA98LwTcI/xeEN4yS6eIt2nI2fG+R/X2l0Id0wIl2B6qbOk3WyfYfPP9ft/5g0RO/ghpu26bl5eRwCq0c7v0UhW0SUVhqRloaNEollHIZ8wL3F/ofmZhEd18fnG471mWnYENZNiI14Z6wgBWIVSQEtbaxE62rkKB6CA6Nnr4R/PWND+B2caFUEvf6Aq8AJu7Z83fyXyLWbrGYYTQbYbPboQyXITUpDsnJcYjUqCEVi0FTNOx2B7q7+9HQ3InJGR2chKnCEzNMziYS8ZCRnsxYTsMVS8vcn79dCfFt6+xFf/8gSoszkJuVvORyrou5FTwEtYXITB2anTJqn/nN+S5+cp4d92ulSr7ogbio6O+X5udfUCt2RqfDlMmEbdtvOrf06VwAhndkQRnmvBnMax9qEpbv4eRyOfDaX/58ordv6N4//u83STwqe7AIXBIEWIJ6SWBmL7LaEViIoNb1AgbBbfTJAAAgAElEQVTLuQTVR1KJ7NQHLUC4CLih0GPdOCcVwv//8WeqC/17/ouHYRN+iF2gP/nJJ0vVPQYcaHSiu7u23zQ9+eDmhBvfuPdeas2JapNMaY5C8DHKhc/ToK+J0GjC0xKSEKFUIowR+ncz+JEwDeL27x8exuDICMLDxSgtykR2eiLkMjED8XISVeJurm3oQmt7P+5gXPyrx4LK7FsOhVmDGW++cxzt3SOIUEaCvxh5LoawEhUFQkJtMJpNTAZ6mIiPlOQ4ZKQlIDoqEjKpxyJqMJowODiKgeEx5t8EaLlcipSkOMTFREMg4C2bG54kSg0MjKKxpQM5WXEoL8lZ0USpOYJ6uPagQWfSPvWrhz9c6NlGNFFlqrJimUL4ZkVxcWS4Qh4wxITs0ca2Vtxw+x0Qii7OqrxSz9nZmSnse+GFp6dHZh9+8UWtfqWuw56XRcAfAZagsvuBRQDAfT/2yExtzjmbxU8Iqt4XgzqvgB8xPFntHkH94nigMBlwrWwC8QXXyWdNNdmA6m4aVW3TronBlqMI5+9++r6KjrW4yNv37BHGcaKvctmp27hc6kuRGg0/KkJFJ8clUEKhAC5mQSiQMEeLzY6hoWEMT44xlry87GRsKM1hiCohqcvh9icE9UxDF9ra+7Hztm2QSQPXY79s60EB/QPj+MtrB+F0UNCoIkD5Ns9iBkXIKk2BEEOr1QqTxQSHwwaNWoHCdVlMvKpETOZNCLHHAstECTN9XHB5glcXc6VFtqFByrmePtMAjVqGrZsKIeAvHwGePwhCUE+canEdOFJzcFpn0D73q28sSFBJvx33/CBCLec/nZORfltmanLA0qc07UJXXx/i0tKQnls4FzZ0nkrUvD+EmvQULIlq/lznt29vbnC++frrd8Hqfv33v9daF7lAbDMWgSUjwBLUJUPHdlxLCMwnqOTh7LOgbs1dWFqKvNdn/xUCcKAeuLEASNJcXpLqsZJ5IgXGDcCpdhdOtAw4Zkc6ngsH/7Gfa69ei6Lb1O7/fFrtsExfD8p9j1gsvp5YUmMjo5AYF8NY6kh86lySjkGPodExTE5PQK2Wo6QwA8UFmUys5MVaUxmCWt+Jto6BVUtQCQ5Wqw1HjzfiWFUzlAo1wsKIyG+Ih5eokprtNqsFJrMJNMfNlBzNy05DYnwsuNyVV1Ag96nRZEXV6ToIBRS2bS5iLLkrlSg1R1APnzmgmzFqf/ubR48FQm7HjgfDZFHRn43ShD9dUVzCJfJdCx3M/To1hZHpSdx426cZyz85znPJz3f5zzsZ4xFw2MBhYos9QRo+Thvi6nqu7xUN8/+cePeN14cbWxput443VO/bt2/eZ/tSrsL2YREIjABLUNndwSLgtaCSJKktuZ6qUYTo1fV4LKjbvFn8vrhR/6c3yapvGwJ6RoAdFYDg3OTly4Ito51KFAbcQP80sfK60NLROm2Z6noiJfXmX2rvodac9WPHjpe5sti2dLed2s7ncx6SScLj1CoZkmITEKFWw+VyMi98sq4OhxMz+ln0Dg7BaJ5FbqbHmpoQH8FYXZea7X8lEFTfhhwencLLrx+CyWRHpDo6NCuq/66eI6ouGI1GWCxGCEV8ZKQlIT83AypVOKMSsFKEkexzi8WO6toGuF12bNlYgAi1YslrGOyGDYWgEn73ha88nimWSF5fX1CYHXkBTVRiiW7v6cHm62+EXKnxDCMIw1woJLWnrQkOhx2Z64rPn0oQC2wwXX9yQqfdhpf+8NyR6emZz/3uN99iS6EG2zDs7xeFAEtQLwo+tvNaQeBe4uKvXJ+/OdebxT+PoDL5Hr6Xhs+84P0TsaQeJfGoQuBjhZ7+q+HwEVUim9U6QmJmDWjvau61jrV+7sWf7AromlwNY1/qGHbs0ApUkYJSB01/isvlfk2hUHCjNWo6NSGREotF57j9iTzS9MwMegcHwOdzUFSQjvKSbEikYYzcUqiOaIuFuPg70d41gJ23bIN0Nbr4vcB6st+78Pd3TkCpUEEulXtc8Us9vGyJSFSZzSZY7WZGCqykKAeZackrZk1lQm1sDjQ0tsJg1GPjhlzExZKs+ZWJt/ER1PcPVR/Q6wza3/7mWwEtqATKHbt/pFCJoU1LTPnauqzMAESdqBw4MTAyjDClCsXlmxckqMF0UQkWNcePor7mNG77zJ2QKyPOTbqaV2lqMefztWEG5GWwk2MjeOXFF56Ytkz/cN8zT6zJYiFLvQ3YfsuLAEtQlxdP9mxXKAL3PlFVv3Gjx4LKyExxgNpuT5LU1nWezP1AB3kx6EyepKlbioEI+eV39fuPlRBo8j+9FTjVReNY06R7eqjpLQPH9Z8vPXZtxxosm0p97Wv/ozC4zJsomrpfJAr7OBGdz0pPRXSEGqQ8kptklnu1OfUGI4bHRjE2NQ6NRo6KsnVYl5sMDqiQEm4IQa1p6ETHFUBQyf6YmtbjjX8eR3//JCIjo7xi/Bd/AxNrqdVmZWSleFwaOdkpyM/LhkIqZWJXl/Mg957d7kRjSyempyexoTQbqckx3g+R5byS51w+grr/SM1+w4xB+/Svv3H8QlchH0yKSO514QrlqxvLykREemtBazINzBhm0TM4gO13fBYczsLhAMFmVHX4PejGJ0FzgOtuvh1cvjBYl0X/7m9hbag+6Ti0/91dsLj/ysajLhpCtmGICLAENUTA2OZrE4HdT3iSpM4jqGZga/6FCSpBhEhNVXcBfBq4Nv/SC/gvZlUISSUvmVEdcKjJjcaObrNtovs3RXkf+6+v7qSMiznHldRGq9Vy+vsRTYuEW7kc6mGJVFyklMmQl5EBKRHR92a1kWg9h8sJnVGPgcEhzOr1SEmOxpaN+Yx+KnH7L8ZFzRDU+g50dA9i561XQyohigIXYZVcYbDJvDq6BvHSXw8gLEyKCGWER9d0mQ5SdtRk1MNkMSIqUoOy0jwkxsWCy/GI9i/H4SOoze1dGB8fx4aSbKSnxq48QT18er9BZwxKUMkc7777e3ESjfAvxXn5mxJiiE7rQnOnYLNZ0TXQj7zSckTFJwWvLLWAj//Im68iWhOB0fEJiORSbNhKKlR5XvPBLKbnhRTM9/nP08l752+vDHe0d91qmqipYeNRl2M3s+eYjwBLUNk9wSIAgBBUEoNKNE99FtQzxIJqBrYtgqCSxAaLDfhnDXB7GaCRr06Syrj9AaYSUM8EcKTRgqa2tgm7ofPLf/zujr+txc2w4+WXuYojfYkc2v4ozeHeFSYShsXFRiMrJQ1CPp+xpnoOj+bnzKwO3QODcDgtyM9OQeWGdVCr5EGtqT6C2tk9iB1XAEElMyZxs1U1LXj/UC00Sg2kEtnFufrnbSACLRH81+t14PG5KMzPREFeBkRCkph18SSVIagOF9rauzA8Oob1RRnIzEhYVQT15i88LIuWafYkxMR8v3hdXsBSsIS4jk2Mw0LT2Hjt9vNuxQvxRdKYJKsd/+ebSE1KZD6+Wru6kF1YgKSsfO/unpc0FSyLat4F51/fYbPg5Rd+9/74WN89Lz7748G1+Oxg53R5EWAJ6uXFn736KkFgjqASF7+3alRtz/kE1T8rdn6GLLGinuoAKDfw8eLV5eafDzOxppKb3+oEyDyPtprpoZ4zDQ696cEXfnTDgVWyLMs6jN1arZgzxVvndHN+wOFxrxKJRPzcjHTERUWB40ud9graW+12jE1MoG94EFKpCNduLUF6ciz4F5AwMpMY1PoOdHYPY8dtWyEVr24LqseqRmNkfBrvvFeFgaEpRGqimApTFxWPusCqEUF9g8EAs82I9JQElJWsg1qpuKCA/WIWnxBUByGonb0YHBpGaWEacrKSVpSgHj/V7DpwuGa/Tm/Z++yTj5wINk6iiRqmyt+gDlf8vaKkRCOTBi7HOms0oLO3F9ffshN8pkTq4qvV6SbG0HTyQ6QmJTGlZqemp9HZ14ut2z8JmS/xKthgQ/x9fHgAr770whPWaccPWH3UEMFjmwdFgCWoQSFiG3wUECAEtbJiff5WYkH1ElSfBfXqAs/fgh3kZjJagUP1wB0VQHgYUwVyVR8+CcxJA3C8zY2a9lG7brT9z0Wp2/7fA5+j1qQg9113/UTCk7m3cznO73J4vLRoTYQgNz0DEknYOUSVLJzJbEb/8CCGxsaQkhSNqzYVICZKAx75Gpl3MAS1rh2dPSNXDEElUyAJRe1dg9j396Pggo9ITcTiWVGIu9tiNWNmZoaxSJeXFSAxMXZBLBd72jmC2tGNoeFRlBanIzsjccUJ6vsHa/brjYsjqGQun9mt1SjEkmfXZWXfkpacMBdecu48KTicdvQODiI+PRNJmevOSXKaj8l8ndLB7jYMdrQjJT5+rung6CimZ3W45pOfAndeadtgLv/F6qbWnvzQcfTIgV0cNh51sduWbbdIBFiCukig2GZrG4Ev/8jPxe8tdUoIKil1es0iCSpBiNCWk52ASgRs9Yr+r3bkyEPA9zIa1AEfNDtQ29JtME82P14WedsvH3iAWpP1t+/co5WL3YKv0xzqiyIhPyIpLoGXlpQMPp8LLoc7FydJCNzE9Ay6+3thdVhRkJvKZPsrlXLweGfbnSWoQ1eMi9+3N4lUE1EgeOu9EwiXqxCuUC6LC/78vU8x1ah0s9PgC7hYX5yH7MxUCBZT0WqBG8kTg+pCa3sXRsfGsb44Axnp8auOoO7Y8bOw8Gjr5yIjIp4qLyziEAvngnG4bhrjM1MY1xFSueOCOqbzXe5ttVWwzcwgNjrKc26KgsvpZIoACBVylG25nkFwuV/6NO3GW399abC3p/92Nh51tT/tr6zxLfdevbJmz46WRcCLQECCagKuLgSIVNNcEoHvKb+ACjaXAib0QE0HcEsZIBMtR6TdpVkmhqgSrUMaaBoADjfZMNDT0OM2TX7zY+tufHnnTmoRduRLM9ZlvAq1+9+/u85N8x+nKXqzXCJRZ6alIiYyEnwefy7Tn6I4cDrtGBgdQ09/P8LEfFSUZiMnKwVyWRgj9G80WxkLalfPCHbethWSK8DFfxZHGtPTBhw+Xo+auk6owzWQSqXLCPPZU5GkHafTCb1hFk6XDfl5WSjOz2LK1IZ6+JKkmlo7MTE1ifKSLKSlrGyS1LGqZtf+w9Xv/0v9Qfvsk98K6uL3zEnLuWcPsmUi+Rvri4pSNUplwGQps8WEjt5ebLz+4xDLlHOMciHdU/8qyKcPvwsJnw9ybh/5JVibrVa0dXUhq7AYiRm5gR9IwS4wf3H82tssJrzyh+feG5sc2vXS8z8eDnUd2fYsAgshwBJUdl+wCAAgBJVx8a/zJEmRkEQiM0UsqFf7J0n5vxECIEe8v+/UADnRQFn6WTe/72ZbSBDb/7QLvSf8LR8r3Z9YgcmLn5RNbRygcbBuyj3U33DKZhu/8y/f+3TXWtwwX3j4YRllVXyCdlH/yefxMiNVanl6aiKjDyoSCLyJVJ6yqWaLlZEDGhwZQXSUCpvL85CUEA2KS6Gmtp2JQb3yCKonzXtgeALv7D+FgcFJREVEQyQULXs8qmf/kEx+F/QGAyxWE7IyklBWvA7hChKfuYibzLsJfTqodQ2tMJr02FSei7iYldVBJQT1vcPV75tN5r3P/OIbJxd7P3z2K48qpXzlj7LS0nbnZqQFJKhEE7V/eAjSiEjkllQuqgwvMZh++NYriIuKhnxejCshqVM6HXr6erFl+82QKFSeIQdJggrm4p//nBoZ7ME/XvnLEzqbjtVHXeymYNtdEAGWoLIbhEWAENQfVtVXVp5LUM90nXXxX0gHdT6ApKJhzxjQ1APcuQUg1abOsb762OZCGVcX+pt/POuFrB0LMeH57/wg/cnPTHyq1yJ8tMWFurYRx+RYw7P8Kez93ZMfn1iLG2f3174fAyfnXifofxPyeakJsXGC5Ph45qXP5ZJyqLSniCRFY1o3i67eXhgsRuRkxCM7OwXDw5MYHJ5kCKo4TLiqZabOM4hRJB6VZuJR33j7GIxmJ6I1UeDx+Svk7vckaRG9VEIu01LisL40HxpSfWqRJPVsJalGuF02bKksQIRmZStJMRbUI6ffm9GZtL/79eIJ6vbte4TxGbEfV8rD/1xRWiwKEwj9FCTOrgYhmzN6HfqGBnHtbXcy1vlgh8Nqxsn3/oHkhASEicIWDB8YHBnFtFGPrZ+4HVwu//xSqvOE/INdc6Hfa44dtJ84fvILlNn2KquPuhQE2T7+CLAEld0PLALzCKqv1CkhqLNm4Fq/GFR/XjefL/qAZDgmBbxTDZSmAIVJwXVUV/MiEIswkaXqHQcONDjR2tY4znNMPx6dec0z2p2UfTWPfSljI1nXCk1RHij6ATfFuUYhl6ZkpaRAo1ZDLBKDomiGyBHi4Ha5MDg2it6BQTjdDsbdL5VKsOPmrcy/HaF82SxlsMvch1jbSJWphqZuvPVeFdw0F9ERHpWD5c7s9x86IamkElRyQjQ2lOUjQqOaC6+40BTJfaY3mFFVUw+xiIttm4sglSxM0JYDKiLUf6yqyfX+oZr3dPrQCCq5/l279ybKxLJXSgoL18dFaQJaUYk0V2dfPwrKN0IVneAxeHoz+v1U0easoLNTo2g+8SHSkhLB5fHP17jzi0cNCw9H8aZrg+uiLgEwJh71lT8NDPWO3m6Yrj7D6qMuAUS2yxwCLEFlNwOLgJegVlSszyeapz6CWkMsqCbgWlK+NMToS/LiHJwE6ruAu7d6rKirPaM/GBEgFlWCTfMQ8G6tnh7sauiw6rs/9Zef3t24FjfRjvu1xMF/NQ3n/Xw+f3NMVLQ0PjoKaqUKIqHHAsWQBsbtb0Hf4BAGR4cZy2nl+jysy02CUi4jhatWrPTmSuBOSKrVakd1fRsOH20AnxeG8HAFOFh5kmo0GpAQH8HIUBG1BE/aYWApDGKBHRufRE19M5ITIrC5wqP5uVKHh6A2u94/cvo9vd6697knH6kK5Vpf+MITMq7M9VByXNJ3inJzAnYliXnDY2Nw8vgo9SY3zW/s76Ef6W3DcHsrkhMTAyZB+cejFldugiom+ZwkrGA6q8Hm6etvMRmw74Vn33cbzbueeupbQ8H6sb+zCARCgCWo7N5gEViIoFLAaa+L/7olEFQCKikHvr8OKEkCipI95O5KP3zqSrMW4EQbjZOtM+7Jwfq3rFzOw3/59taWK31+C43/7vu+F8fjcu4HqE+KhPz85PgEREVomGQUDnH7MxWpSEylG5Mz0+jpH4DNYUNCvAYlBRlISoyGJEwEl9u1qHjC1YAhITMGowUnqptw9HgT5FIFFAoFKJpaIUuqx79sMhN3vwHxcRpsKC1AdFSEF7OFSSohcl09A+jo6EZBfgpKCjLhdIX4NRkC4HMW1INn3tWbLNpQCeq2bVpeVh5vo1Su+Gt5cbFaKpEErKpFSvB29nXj6ls/Ay5PcF7MqP+wW88ch2FijLGgMl9MASp1URwKk9MzaOnsxMfv+Ax4Ir9EuGAMdaHgd/9B+LmXhnra8e7fX/2Badr+BKuPGsIGY5uegwBLUNkNwSIA4Es/qKqvqFyfv40kSXllpghBnTUB1xeFbkEloBIyNzAJkFCBT1cAUtGVbUX13yhMWBwNjOuBY60ufNjYZTXNNP5fZtLt92vvoaxrbVNt02p56YPcBLeAex249D1iobgyUqVCbEw0YqOiQNE0E09IXOFu2gWdwYCh0TFM62YQGanAxvV5yEiLA4/LXVECtZy4E5KqN5hw5Fgdqs90QigMgzpcDUJyVuIg1yMWUavVBr1Bh/g4NTaUFiIqUhUwJpWoAdTUt2BWN8OUpo2PXbkEKTJnQlA/PElc/KffNVkse3/7i8dOhYrFPff8IEKo4L5QkJN3Q0pCXEA3v91hY0JHEnPyEJOcfd5l/JOYDr25j56dmqLzsrI56nASw3thAeamjnbmAbXlxttBU9wFpxAsSSrYvKuPvGerqan6MkzOfWw8ajC02N8XQmBlnjQs1iwCVxgCDEH1uvh9Qv2nOz2VpK4tWnoMKSGppPxpvAK4Jn91V5cKdcnIC4xwFYJX9xhwpMmC5raO8ZmRhi/emHvnP++9l3KEes7V3n7XLq2IH87Ptlndtwj4vN1ymTw2Sq1GWlI8UyaUWPQINyAE3m53MiLpw+NjsFhMSE+PRXlpLqIjPVnUpO1qP8gaT83ocayqEdU1HRAJxVArNStHUoklGjSsNitMJgMS4yNQWrIOEWoinTQ/04+GbtaAqtMNCJcLsXVzMRNeEYycXQzmDEE90eTef+T0O8ZZi/a3vwmdoO7erRXTYcJd0RFRv9pQUEAFSoIi8xifmsSUwYSNN9w2p1VM1uTcg8bfXnjq5MTUtCktKbk8My1NImGqUAUgqSTO2G5HTWMj0nOykV64cUFI5se8BiOs8393O5148+U/Dg5NjnzKMlp3mo1HvZid99HsyxLUj+a6s7OehwAhqBsq1ucTEmlzAjwuUN8NjOuAG0o9JGyu7CCJPfQXvPbeRf4PdN/DmhA4IlVFSOpNJUB6JOBY/bwkpP3hSzK22YGT3cAHDXp6cqDphIBn/fpT37jmw5BOdoU0vuuhn0j4JmclxXHdzefz7yLC9rGRaqQmJYPH5YGU9iRufybL3GbB4Og4RsdHIRRyUbQuHetLcyCRiJgkqyDGrsuOCLFs6vQGnDjViuNVTeDzwxCh0oBD5CouEB+61IH7LKkmkt1vMSAzLRFlJXkIl8vPIV2EgHV196GlvRuF64h7P2PBrPiljmOhfmcJas07swbr3ud/9Uh1qOfXarWczhFOvkou+9uG4pIkdbg8oBXVZDahvbcbGz92C4QS+bwHj+fKDqsJf3vx2V+NTU6+rVSo7stITr4pJTGB4nO5AVeHzIOsaV1TM7beuB2KyMT5qlMXDClYcM4LKINYTTq88qdn39fPmu558VntYKhYse0/2giwBPWjvf7s7L0I3PP9kw0VlRvWXZvvScuIkgODU8DLx4A7Nnsa+YhEIMUmfzD9n9WEwHWOAHVdHtmpcPGltaQyFheijMRM4iylWIgYMW04jIoS88IKhTyR65BCBZNG4FibGx/WDzkNI/WvlxR94u7/2ElZ1tpmI9n+avUGtZnjvkrApR8Uh4k2KmVyJMbHIj46lnH1M7JUJIPa5YLRbGYSX8Ymx6FSSlG5IRf5OamgiBrAKremEkKjN1hwurYVB47WQsATQaOJAI/DW6GYVM/mMxgNsNpNyMtOR0lRLiTisxn6NpsdVTUNsFrM2LalCDGRyiuCoJL7YMcXtSq1JOxnmRlpn89JTQswbgpOlwMDg8OQRcciLX/9eWp15FyG6THnGy/94YfDupGfqUSaq1Vq1XeyUlOKYiMjL1iylqzpwPAwU1r1hjvuBJcvOUcO7zyLaZBaJYFCVAe7mvH+P/7+kyHO8LfffvLJNVmVbq0921bLfFiCulpWgh3HZUXg7u+fGqjYUBb/2c2ARODJuieW1N++ByREAvlJHivqUjPxiau/qoNI4gCf2gCIhJ4kqhU5CFEkPNNr4LI4AIsVmLUCU3pgygjMmACjDbA6AGLsIy8jAQ+QiwCVDEjSANHhHjJN5rzYeZPzMC82NzAwDexvcKCprddgnK7fm530qae191LmFZnzZTzp7t1P820YT+TwODfzubxHxeKwSJVSgbSkJESEq+BkkqM8+qkOlxOzRgP6h4Ywa9AjNSkKmysLkRingctNr6h7+mIhIkTbYrWhtrEL775fBTc4iFBFQCQMWxGSSvBy0W6m4pTb5UBRfiYK1mVCIBAyX1q9/YOobWhFdkY8KspymfjQlT7INT440eQ+cLT67Vm9Sfv8r74VsgWVjHH7nl8K492GW1Qq9Z8qS4r4ZE6BXPJTuhkMjI7iqk9+xqvB652llxGOD3QY3nzt5Ue59v7fWiwZAqHMel9MTOxD2Wlp0UqFIuieIvGoFJ+PiutuZT6W5j7E5+minufy99P6Z0Y034LqtxgnD75pbzpz+tPdrfQbhw5p10C66ErvNPb8vi3FIsEi8JFH4O7HT/XfeE1ZwmfmhWOd7AJe+gCoyACyk4Aw/tKsn4S0EUJ6qAHgAbhlPRAmWNq5Ai0WeT/7kpemTcCoDhjTeRKZSFUokx0QCQC1HFBJALHIMwY+zzM2u8sTjjAxC4zOAEKuJyShOAWQh3m0UBd9kLEQ96MLqOkBPmwyYaC7sYPntj30zN6r3qCImOgaO7bt0oqyZZwcJzi7KIp/n0QsEsRFx9CpiYmUWHSuaL/d4cDMzAx6hgbgcjtQVJCBjetzIZGIV7U1lexjh8OFnt4h/O3t4zAYrVCFq5n425XSSXW53ZidnYFAyEVZcR6y0pNgtdlxsrqeKT97zRZfItXKb6k5gnqo+m2Dxbr32V8+dnqJ25i6698fT1YIxK+WFhYUR0csrIlKSLqZaKL29iC/8mrINTHnRVV0N1YN7X/3nf/849N7/0LG8qU9T8RzKPrRpLj4L2alpYrEYYF1YclHh81hx5n6RqTm5CCtoHKJ0/F+mHq1WslJ/Akt7XLiry/+ttekm7zpt7/+drPHR8MeLAIXRmDlPznZFWARuAIQuPObB/9auWXbbV+9wTNYsx041Q2c6fOQvFkDoJICFVlAWszZh3EoU/OR1ONtwKwe+EQJEKP0PMgXa6H0XY+QUZ8LjvQl5VmnDEDHKNAzAVicHtUAYgHVKACFGJBLPASVuZ7Xekv6+sfT+kiu0wmMzgJdI8DENFCSBpSlelz4oYzVl0iltwC1vTTePz3lnh2tOdTeVf+ZYy98fTwU/K6QttQXvvCcFJLxci6Nr1Mc7vUKhYzKTUv3iM/7qVQSi5nNbsfIxAT6hwYhkQiwqTwP+blp4PN5QS1flxMPsodGx6aYsqjdvSOQSeUgcbiLqXoU6riZ4gEOO2Z0M9BoZCgvzcfklA6dvX0oL8lCQV4aE0ZxKY5lJKjYsfsRhVKk/kZyYnrRcU4AACAASURBVNzDhdm5AeN5XS43RsZH4RKGIb/8mvMsnDVH36w9dfzUIy8+/1/v+jC4+z7tBrlEqk1NSt5OLPnB4lGnZ/VoaG7GlhtugjwifkEogyZNBQkBMM1OYd8ff/sm107d+cwzj+pXJID5UmwC9hqXDIFLc1dfsumwF2IRWBoCd33nwA3y6Py3vnqzhiMUAO/UeSyQ5CDuefJwNlkBoxlIjgLKM4EYkowdKrn0xoLW9QDtAx7rJKk2JffGpRLiON+0wJA88vDneLLmCUE0WACdyZPE1T8NjMwChFRGK4E4DRChAIR8T7KXrw9z3hDsFr5+BIfqdkAlBrYXA1Jh6NZUEm1AODEJMXi/kUZt64hdP9TwfKIy5xs/eixpZmmrtqp7UY888iP5hB03cJ3uR3h8QUGkRsXLTs2ATCo5R0ydyFOZLGb0DQwwWdtxsRpsqcxHSlLMJSNeS0GSEGwiQ1VV04oPjjVCIBQhXK5kXPDLzRc9xQMs0OlnwONxIORzkb8uFZs2rIOIfHVdosNDUBvdBw7XvGUwW7QXYUFF6e7d/GJByha5TPLaprIyeaASpWRqOr0eXf39uOqTnwaHVIry3ss0RePAK8//vWegT/vHpx4/cxYGLefuL3Fvj4hUfjsrLa0gblHxqKPoHR7A9bfeCa5AHBzRC7j0fePzD5olj56+1loc3v/O8y6X7Zu//412NPhF2BYfZQRYgvpRXn127nMIPP00zT85duxXkuii3WFSMRMj6iNz85OiiDaqywGkRgPrMz1k0Ecs/W8oHxf07+/7N7FEThuBum5gxgAkqoD0WCBe5bF8+l7whBiTOFFiHSXtR3TAyAzgdHtiTMVCIDIciFQA4dKzZJqpcuSd3ULXJz8t9PeFxu9z1Z/pBiZngJtKgUhvQvH8awSbP48CnLRHlurDFgdONzToOObhH36i8Kb/3rmTWjmF9cu417/41e8lcbjcR2k3fTufL1CnJMZzU+MTIQoTnlOdiSRKzeoN6OjrhcFkQE5mEio35CAyQgUel8QGhvB1cQnnSyx8fYPjeO2No0zZUeLul0rk4PG4y06wdXodZmenUVyQjmuuKkG4wk9o/hLM2WdBPXj49FtGg33vM79+uOZiLvu53d+PkUqEL5QVFFwbFxURWBPVbkP3QD8Sc4sQmZDBXJLcaw6bCW+99NzvhmZmvvvSU9pe/7E89NBPJFNm6+7YqKiv56RnxKgWoY9KBPzdXC7KSTwqU97Wm1zpF296MbvQ6bBj3+9+9ZbZbNn9R7bK1MVsnY9EX5agfiSWmZ3kYhD45S9pYdXEm9/jK/L28KXxQrWKBz7XS+T8nsqEPNocwKwREHCBsjQgL9lDFucsoOfoUC18dWKZJe1HpoGBCQ8JNVo8Fk8SF0oOJjHL7bGGSsIAmRBQyACl1ENkpWEetzspZnROjOgirj83Kn+W6fvjvP6EpBL2WNsJDE8DOzZ4xhBSXKofYSZzJ8S7cQB4+7SBHu9taDUaez7/6fI7a9YiUd2xQytQxQlKnS7qEdDuLVKxRJWTnoFIjQpCxuLoEan3rLkLY5MT6O7rB0W5saEkCyXFWZCKRYwLfTUSVfIiGZ2YwYfH69HU1g+3i4ZYLIFEIgOfxweHzG8xN+G8NiQkgsS2umk3k9FvMOiRGK/B1ZsLkXwZLMwMQT1OdFCr3zQbzNpnfv3NiyKod931kCRMpd6dHJ/4s4Ls7ICEnqz56MQEdFYbyq6+eQ4l48yY651X//yTMZ3+J/ue007Ph5hUQRPxuQ8nJSR8OSslJUwsFgfcP2QP2kk8akMT0nLzkJS3YQkrdrbL/JAAUmntg/ffOF7f0XxLnto+pdVqVypN9KLGzXZePQiwBHX1rAU7klWCwMNPtMomrL37XJKc62TKOG64lAtG8tFfasp75xDtzxkjoJYA6zOAzHiPW33BaovzTbFe64SvMiFDMt2A1e4pi0pe6IQAEw8muT4TH+qNPfWNheE0gUyk8/Fc4PpMkxD6k+vVdgPTs55EL5L1v9S3jC/pWm8lyWM0atom3BPDzW9KJbJ/f+bRsv5Vsh2WdRh37tHKxW7+x1009vB41Dq1Si3PSUuHTCqFSChgQkl8Qv9mq42JTR0eHUN0dDgq1ucgKSEa4jCRdy8uhfIt63TOORmXlH0lpUd7h3HiVDN6+kbhdBKiKoVYFAY+nw+K4jLZ9h4uHmj8Hv1YQsqYOF2bDbP6WdidViZj/6qNBYiLiVi5iVzgzMtNUIlUmTw6vyAiPOLt4vz8KLlUEtCKajQZ0dHbg/IbbgOflCilgYnBdtO7b7z6Hd2I6H/37fuPBaXcPv+V75ZKJdK96YmJN6UlJVGkmlkg5P31UTffcBOk6rhlw7n6g/e7qk9XX/fSU4/1hRZstGxDYE90hSHAEtQrbMHY4V46BB743onNZpr6mUuRXSZXyCmZ2EMQ/T2tPiuBLz41NhwozwGSiARhqPGp3qkxL2d/19rq4iHM2E60AlYLcEelR55qjm/4niiLteB6qy6RbkMzwMFGF2oaOsx2Y8/Pt8Rv167FalRkmXfd/+NoPu38kpODnSI+LyshLk6QmhgPSZiEcY0z+qnky4EDzM4a0NLVCbPFjKzMeJQVZCI2Rg0BQ2hXlzQVscIRoupyutHRM4DqM23o7R+D2WIHjyuAOEwCoUAALo8LLoeQVWKb94W0UN5KXDTzX0JMjWYT7A4rZFIRSosymEpcMknYiuudBnrK+BNUq8m696knH/OL+1zas+nuux9Tq2Ji/pCVlvqJ5Li4wJqoTgf6hgYRHpeMhMxi5sOyr7lq9OC7bz/y+6f2vhBIGYMUBuga594apVJ/JzMltTAuKvKCA+VwKUZ7tXd4GNfddic4/LC5j3NfYuY5H7bee35+SKq/BbWl9qTu9JF3r3nuKXcdwFpOl7ZTPnq9WIL60VtzdsYhIEBiUz/offl6viz7eZc0JUqjliKMT80lHjGxol4yRh7IOiOR4QHyEj2Z7yQ+lbjBiS7omjmI1JATOFgPREk9iVMEgnOMYv5vq/lWXn8gvO3myqa6gc5h4O0aGwb62sbGJ9v33JB8x98feIBagwLfNHX//T/PtlGWRwBcJZdKUlKSkxGtUTNElXA3QlQ5FAcOlwNDY6Po7R8Gn0+jsCAduVnJiI4MB4dDCO3q2mA+oup2udE7OIbG5h4MDU1gWqeH2WqH20U8DXwvUeWBkCLaTcPldsHhcMDpdILPp6BUShmrcWlhJhLiokDUyQgml+sgBPUocfEfOv0Po8WifW4ZCCopnxsmE+6JiY35YWFuHpdYOBc6yKynpmcwODGGjds/zXzCNnz4ZuPJY9WPvfg77T8uhMmO+7VSGS3YHRsT+XWPPmp4UCNmM9FHFQhRevUtCwr+L1YXta+zyXbkrdc/Y5iq+ztb7vRy7dwr87osQb0y140d9SVGQPsyLRhs+ed3rLy4B8NUWWJVON9jOfQxM787ibj3pw0eHdHiNKAwxROfStz3Sz0Wa5AMdP6V6E/iZQ/UAVtzgNz4i5ufb9w+tz/RbD3RRuNYi46eHGg9LnJY9jzzg2svKt5vqdivdD9SNlVkdVxLA/dTHO76SI1GRSxpaqUCYUTD0qsFRnEpWMwW9A4NYWh0FGqVBGUl2chIi4dSLvXEal5G8rYQToSoElLH4/FgMtvQP0BI9iimZmZhtTpgtzsYTVMn+eLhcCAU8CASCiEOEyAhLhK5WUlQqz1kyum8/Dl0K0FQCdPc9ZXvblYrVc8X5uamR6iUAd38xIre3tuDwk3XQxIegUN/+/37bd39e1/6rfZYsH16z/3fS+BzeY8kxsd9sSA7W0RK8gbSrvWPR03PL0BcZun5pw8UXuT3LBwb6nXvf+MvD4xZrb974xntmivSEQxz9veLQ4AlqBeHH9v7I4bA//v5WNTsVMvPaEXWvwnl0Vy1wpOkND/B2pdIpTN44jTLMoG8JDBJVwzf8BqBAoWFEljn/7ZQ28vZn8xxaAqoagM+U+nRiV0ufkSsh4SskqIBh1vcONEw6DCPntmnnxn78hvP3LsmX3S77tdGcyjhXRTcnxIIBcXx0bGCuOhIhMsUEIoEINZIxu1P0Zia1aN/cAB6owFJiZEoKcxAUnw0JGIhnC736kykIu5/DiGsXEYyjczFYrPDYDDBYrEzRFYqFUMqCQOfxwUR6CekdDUlhXkI6v9v70zg46zq9f/MPklmyb6nTZqkS7rQhU0E4bogiAqiUa+IAmIVFb24XPeSq9eFK4KKwAURN1Ch4nX7Kzttoexl3wuFrune7PvM/Hnembd9O0wySzLtJHnO5xOpmXPOe97veWfyzO/8lmfCd69Z94/egb6Lf/GTbz4xER+BZ5//rYZgYfF3Zs2c8dG5DY2jCkdmTNi6ox3IC6Bp0ZG4/U+/+v2unfvafn3Nt9ensg7mRw0WBFYsWTj/tIrS0mhd41E8Uu0OOzo6OvHkc8/j+FNOR35R5ZiXiLeodu3dgVv/78Yf9Ozo/uGNN7Yx76maCKRFQAI1LVzqLAJRAu/9zyuqi/IW3RLyzT2mqKzU5s+zv8E/1WTVxzKjPdHSocfPB2ZWRMUXLapjWTYTpXiJ53+4x1MvPfQ8MDIMtB578J+68a7fcMGMlU19bQ9wxxNhvPTSqyyb+t0jF7zvqq98zNY7BZ9H24UXfr+0J+x4l90e/rDL6TqlsqwEs+pmoKSoeP+xP1MAhcEKS13YtmMH9nbuRVlJEEsXz0bL3JnwuF05YXFMtj9mgv0DifbD2SsBnGwxKbxuCNT7nwnftfqRf/T1DFz8i6smRqC2trb5Cms8HygvLrly2YJF+bQijybMO7u6sH7Ta5iz9M2RB+/6x8/2bOv8/u9+15ZS0YtIJGL7+PLvnFFXV3PVgtmzK19P5n8gj1SC++f9btrWjk3t2/Bv7z0LNmc0QI9tLAPqQF8Xbr3ld9fv2bTly7///Q+nYp7jFJ4WdRkvAQnU8RLU+GlLoPXmiKNy/cOndI1ELrMVLpztD+TDl3/g8z7eutndBwwMADPKgBPmA+VFB1tT40GmYx1NtAmHZHwEGBwB7lgHLKkHjp0NmCexE3V9Wmo5F3O/Pr8FWPVkL9a/9NQmhDq+cMN/v+svU/EBZFoqb01eo3Nk+D0up/usYCCwqDQYQH3dDAT8PuPYnwKG6Zvos7mrYx+2bN+BgYFeNDRU4JilLUaif1rccs0/dTLvV7YEKpmc88m2xcVlxVcvaJ53bFVlmWExf+Nngg2DI4N4+dWN2LF372BXZ9d3+932n/zu0q+k/GWNLiWuvqGrmmY1nDl3VoPP46boHNuvl/6odm8elrzlPaAdf6w2MjSAO//6+9u2b9t+7g3XfrN9Mu+31n54CUigHl7+uvoUIND2q4h3y8Y7Pz3kqv0vR6AhUFLsMfKYxh+e8c3GAKrOPoBhEC0zoon+Cyhq4yL+zeOyN+CxmCWtR2rGG9nybj7U45nH9clXgH8/AQh6o8n4o/HZozf++WUf87/Wnol+Zx77d/YDD7wQweon9oW72tfd098/tHxR8LTX2tps4/Dyzc0HsfWiy/KC/b3HhB2OT7lcjjOLgkXuqrJSNNbVwel2GQI0elgeQd/gIHbv3o2tu3YYWWvpv3n00rkoKyvKuaPy3KSdfFXRKP5nwnfes+4ffb19E2ZB5ZX//fzvVZT4Pf9RW1P9tQVz5xjBcYmsqHxv79y9G+uefbpzYHDgi10nNP9m5Qc/mJaD7sc/+535Hof7qgVz5x5XX1PjdDiYeDmxSDX9UR97+lnMWbIMFQ2LDFCJSp+GRkaw5p83Pb15y8sf+O2VeFkR+8mfKfUYnYAEqp4OEZggAm1tEefG0O3XDHkbz84vnuEqDLgMoZrog5z5U+mfWuABjpkLzKsDWGI1Yf7UWBqe8RQSOig9TAb3O+b42DH8/c8D5T7gxPlv9EU1hWgGlzaGWMcbBQ4iwI4O4K4nInj6pS0DPbufu25G8zu/8T+fsHVneo1cHdfaerOjqGh9Odz240PARV6P502FwQAa6upQU1lhwGC5VAoJBkn19vVi284dRrL/wsJ8HH/sEZg3u86oRkX/VLXMCZgW1LtXPfr3roGhi6+/4muvp02amEareWG145TiQOn1yxYtLPHlF7xBoFK0hiJhoyTuc+tf3rlnb8dnf3XVN/6UyQrOueC7ZwT8gUsWz5s3u7y0ZMyqX7zvfZ1dePiJJ3Dy+z4Cl4/+qwc3iumH7vrL1tdeeOrMrj0t61auTE80Z3IPGjO1CUigTu391d0dagKRiO0r12xp2rn15WsigYUn5gVL7IX+A/lTrSVMaRHs7Qd6+oASH3DkHGBObbRcaXzWIFNWmFbJRNbH+D7WW8/2eN7X3l7gnnVA63FAReHBInXCr28DjLKpYeC17cDdTw/i2Wef24e+rV+98Yfvvs7IRzTFGgVMoAwzInbHqQ6788t53oIZpUVBzGmYhUDQv/9ImEKVwUUsl7qlfTv2dO5BY30NTjh2PqqMBPe5F+0/WbYqmwKVDD56wXfnlAUCP57T2HTazNrq/dH8ZnBcV08PXtu8NbJ527YtA8ODv/L68LMrf/CNPZnw4xef/OLn/7O2pvoLC2bPqfAX+PaXWE40H+/9lY2bsWXHdrztfR8HHO6DfOifvP+OzheefOgjnTtDd65c2TaUyZo0RgSsBCRQ9TyIQBYI0D8178nblsFddEOooKm5pLQI+V7jz8xBEf8UdjRqUaj2DwD15cCxLUBlcTT1oNWiOpFWyExuOdn1eW+PvsT64MCZb36jyE42PtmaEo03K2ux9OwzG4Hb1vVFdm54/NnhSNenWzynPtTWZhtJNu9ke/3UUy/0VDdVt9gR+RRs9vN8+QWu2qoKNM2aBTdzosZM7XzaBkeGsGv3bmzctg2h8AgWLZiF445qQTDgk29qBhsfFahPR+5cte5vPQM9F19/xYoJs6ByOa2faCsuKcg/v7q6/PtHzJvvYJlYftfqHxjClvZt2LBpY0dnd8+fh20jV95wZdu4066dc87lhfb8np82zWo8c25Dg8/j8SSl8uTzz8PjC2DB8aft9yt65emHhh6+7/ZP9e7ad9PKlZcnrGiVdGJ1EIE4AhKoeiREIIsE2toi9k3hv1w06Jr1bae/KVhSkm/kT2WLj8Cn1XRfV1TAHtkMLGgAgqx3H/Mui7eaWv00ra9x7kT+n4difM8AcNc64D1HRoPBaOE0Wzavb0b87+oC7ns2giee2zHcs/ulv9sqG5f/9nO1GVmYsvhYTMDUTPL/XwXDTuciROwr7HbHO/1+P2bNmIn62hpELCZ4Hr0ODQ1h687t2Lh1GwryXTjumIVYvKDRqFqlljoBU6Desfqxv/Z391183dXffCr10cl7svRpQeWS48r8gd8sWbCwIeAvwLadu7Bh46b+PXv33jsY6v9J/277XRNpoaQ/qtvuunrhnHlvmllX7WQBhWT+qA889jgWHX08SmfOR/uG58Orb/vL13t2DV21cmVbT/K7VA8RSI2ABGpqnNRLBMZF4KvXRIK7tt397RFv4+cc/pme4sJoTlRDqFoOo2k1HRoBOrqiJUSXNQMLGw8k+h+PH+q4biCNwc9vAjo6gNOPBVgU55Ct2RYNPiPOzbuBe58axhPPrO8b6Hj5v1t8771kKgZR0YT1sc9+v9jrtr8zEoq0OR2uhtLiIufsxnoUB4oO2jUK1b7BAWzcvAXtu7ajurIUJ755EWbWVcHBZL5qSQlQoK6hBXX1o3/t7x6YcIHKBZzz6bZ6vy/4X2VlJR+zRWwjm9u3vjgwOHyFKy+08peXt+1NusgMOtAfNej3/XDh3HlzKsrKjACtsfKjdnV24dFnnkZ10wI899h9P+0YcFy88tqvdWZwaQ0RgVEJ6FNJD4cIHEICjMrO8y9eOZI3+5SCokpH0OcAjVimiON/oyUugSFG/PcAJQXAUS1AYzXgdB44Ojd1rfVNbM1NmOz32Ro/MATc/hDw9sVAc3UslZal8IC5rmxd36xGRZYvbAbueHQYmzc80z4ysOWrZbXvufmKKVk2FbbPfPG/awdGbJ+0Reyf8bhdgZqKKldzQz3y8/IOyihBodrR2YWXN21ET283FsybgeOOXQgGXjGQKpcS4x/Ct2ZKlzoUAvW88/7TbysoakUk/K1wGH9zDtuu+sUvvvFSSgvMsJNhuS1e9OWq6qr/WDRndmXQ509YLID3PzIcQvuuXXjmpZdCPb29f7QPRr503XXfZOoINRGYUAISqBOKU5OJQAoEIhHbBd+46/g+r//ycP7spb5goY35UylME1kbeweA3j6gqgg4dj5QVxFX9z6FSyZK25TCsP1d0hpvA17aCGxsB876t2jQF70UkqWdGms9aV0/NhE/3GiR7hsCntoArH16b2Tz+mefcQ73fPjGH7/ruXTuf7L0pdAIlCyeB3fkP+1wnlaQn184r6nZXlFcbKSlYt5UU4AyRdX23TvxysaNcNjDOOrIFixZ2ISC/Dw4nfacK5uaC3tgCtS77ln3F0bx//rnX3s6G+s6+ewvF1SWVhf+NtjVjra2Q5J6YfnyHwZDjpGfNjbOen98flQ+N8ycsXvvXqzf+Cq279z9+HBo8Mfh7u6//O53l6acgzUbrDTn1CUggTp191Z3luME2toi7g2hOz4Ytpf92BaYV15U7IbXHX1LWlNTUbgykKqrJ1qxaXZt1KJaHIj2MzMH0XJoLTVq/n/Tomi8xupMzD1KS23s3W+OmcjxIyPAnY8CRzUBixujazyU1ydD434AuAylCtA/9d6nQ1j31LaRzn3P/jI0bF/xf5e+M6UKPDn+KL1hea2tl+UFynpPjDjs/+m02Y8qLy33NdbXozjoBwNvos9YNDXV0OAQXt26CVu2bUdJiR9vOno+mhtrkOf1GOVHmbpKLUpgvwX17kf+2j04siJbAvVw8T73wrYWt8179fw5c4+bWVvtdDndRpBWd28/XtuyBa9u3LS5b6D/GrsreO2vrvj87qQZ/g/Xjei6U4KABOqU2EbdxGQncM63b/vBkL328+7ixvzCQo/hf2q1pppH9ww6on+q1wksbgJaGgFfHkBBOFZLFFCVDrNMxr+6DXh5E/CRtwJ2R7QYAVsm1tBMrm+9P0OoxvKnvrKdgVwhbNjwckeoc/0PKqvefcXlX7RNycjj8z53SbUtPPKZiA0fcLlcs+pra111VdUIBvxw2u2xiH+bIUI6unrxymsbsK+rC40NlThq2RzUVpUhL89riFkd/U99gcr3zLmf/a/T/QWFlxzRMm9OcTCAbTt2MXtAb2dH199G7O7v9O54aP3KlSvTKgyQzmeN+oqASUACVc+CCOQIgU+3bS/vH3nuJyP581q9gUpnIHhAVMW/YYeGgH3dQFEBsGwe0DwD+31ZjapUsQHxqZmslZtGOze0jsl4fAQYCgP3PwYsagAWNUZLoB6y649y/0YskC1a0eu5LcCax7ojG1957rXwro3n3HzNh9bkyKMwoctYvvwalzNv7+KBYXzOZgufVJDvm9HcOBNlRSXw+3wxizrLptoxEh7Bzt17sGHjRoTCw5g/fxaOWToXpSUB2Gw89j8kp80Tev8TOVnUgvpUhEf8vUPhFb/82Veemcj5c2Euuon4yo74Uklx0UUIR8q7u3of6B8e+knHcPdtf7v+f6ZcIYxcYK41JCYggaonQwRyiADTUm3EXXOHQq7fhvJalgaKi23+fHvUP9Vy9M83LqVCXx/Q1w/UlABHzgeqywEnXQJCB9JYWdNZjfZvE0Gi1zMdT+WzaSvwyibg/ScCHhcQspRATVbidLRiBPHFCuItpcmKGfB18qRQZZGEh5+N4IGnO8Jd2564J9Q//B83/fTkZ6diov/zzrvEH8mLvNWO0Hk2u+P4spLi4lkzZqA4GDT8TnmUbwbpDQ4OYlP7drTv3I7iYh+WLmzCrIYaFDLvGZ+9aSpUTYF6xz3r/tLfM7Dil//7zSknULm/H/v690ucnZFLgfDGwaHQdTde17Ylhz4mtZRpQkACdZpstG5z8hH4+Df/9e9DKLncXjSnIlgYQJ4nGvQTXzqVWqGnNypK58+K/jCNlaEh4twHjUIBloh6q2U20e/jqaU1npWeRoA7HgKOnQu0zIxePD5nK6+RimV1rH6ZjjeEagTYuhtY/UQIL764uS/Us/7q0tJ3fHuqHvuf/4XvVdhCtrND4cj7PB730bXV1c4ZVZUo9AfhdDuNilRGSQk70NXVhRdf3Yjevm7MnFmOZQubUT+zGl6vKyZop5d/qiFQ1z6FO9c8+ueB3pEVv7jya89Ovk8WrVgEJgcBCdTJsU9a5TQl8OUfRQq2d972uYi76VsoaPAVFdnhdb8x2p9v5KEQ0N0NsA7AwtnAomYgLw+IWIRqIqukYRGL8bUKPfP31uj7TMZv3QE8ux446x2Awxn1RY23nmbz+snWb5SfjVmdmXngrkd6sfGlJx9vajzuuLZzbQNT9NGzXXjhz0p7RnrebXfgw3nevJPLSopQXVGBmvJK2By2qFC1Me1UCB1dXdi6Ywf2dXSitNSHJYuasKBlFtxOJ0LTyJpKgbp67VO4655H/9w1MLLiNxKoU/TtodvKBQISqLmwC1qDCCQh0Np6szuv0X/5YN7sT3oLZ7gKg04jJyrFp2lVpdGL4m9gGOjuAvz5Uf/UOfWAy3WwD6j1cmP5nFqtlvH/NudINp6W3TWPRvO4Hr8QGIwL6Eo2/lC9TmsqfVT39gA3/nMQLz35z8/99WdnXjmVH87W1ja3r9jdZHfaTrc5HJ8s9PsbSoqDmFFVjbLiYoRCoWjGBzvz8o5gd0cHtm5rx8BQH+pnluPopS2on1FhWPWnw7G/KVDvXLXult7ByIpfXfHlKZmubCo/87q3yUNAAnXy7JVWKgI477v3zRkadF47ktdwQl6gfpO6KwAAIABJREFUzBb024xqTTRiGUKVjGIppPoGoj6WlUFgcQswqwYIx1wERrOUWi2ZVgtqolKqqZRaNfts2g688DJw5klAQd7BR/3x1zGF8EReP9X1RyjybcDf7w3jwdX/+NMf/+f01unw2J395R8VeAcjR4ZDIx9wOJ3nFRUG8ytLi1FXXQNfQYEhVOm0Szb9A4PYtXc3tra3w+YEFs6rx9HL5hn+qSOMhJvCjWm51tz/FCRQp/Am69ZyhoAEas5shRYiAqkRWH5NxNW54V9vd7jKrrQFWhr8hXnI89qieT8tQdYUE7R+9XRHy6fWlQPHHgGUF0V/bwYsjRbxP9pqRrNoxkf8W8eHQ8CDTwL1lcBRcwGmy0rFOptoDZlc3zrPWONNgfrP+8JYu+bWf/zxh6e9J7VdmRK9bMu/1FYSGnT+W8RmO9fryju1uKgQjTPqUFFaZsSNMZDKPPbv6elD++6dRrL/QCAfJ5+0DI311YbCn6rWVFOg3rFq3S193YMrfnXNN2RBnRKPvm4iFwlIoObirmhNIpACAUb8vzLw168PuRu/5i5s9PkDeUak/EFBVLQIIpbovxuwR4D5s4GFTUDABwyHoq+zWccd5DYQ/7rR+YDFNpXxFIXte4AnnwXOfBuQz4CvuJyo8f6tY1lzreJ2tKj9TMbziJ8i9db7wrhv9W1/v+mSd703ha2YUl1OamtzNm1x1IW9znc6bbbPFPh9C0uCAcyun4VAwLc/OIpijRbTzu5OI+K/r68T8+bU45ij5qG8pMjwTZ1quVOjAvVJ3LHq8T8N9g2vuO6qrz4/pTZfNyMCOURAAjWHNkNLEYFMCHzhG09X7LV3/CjsmvEhm7/WXVhohyvmn2qowFigNUXnoOmf6gUWzAbmNSPa18hhZbn6WOH6MYG6f27LNfbPkGh8BLh3HVBbArx58QEraib3nK0xZMSff9GCevdtf7/p0uknUE22zJ8K1+6FYdg+b3fYP+TzFXgry8owe1YjPC7nQRWmhoaH0b5jB7Zsb4fLbcPSI2ZjyaJm+H35U8qaSoG6eu2TuHP1uj8N9oUkULP1RtS8IhDLNiMQIiACk5xA680Rh/OhW5qd7uKrhwsWvSUvWGj3+RxwMH9qzD/VuMWY2ZL+qb29QGlRNH9qXQ2M6lWhWABTfDp2q5Uy3noZb6nk66ON390BPPg48KG3AQVMqRk5oIut35bjkxftt9LG9imR/p2I8aZA/eeaMNauuu3vN09jgUrUbW1t9m3bvP6Q13akLTz8Lbvd9Zagv8DeXD8L1VUV0XRUscZj/b6BAWxpb8f23btQWuzHm9+0AHMa6+Cw2+Iznk3KdxyfD0bxS6BOyu3ToicZAVlQJ9mGabkiMBaBk05qc9Ycecx7Qq7glY7gvKqCwkJ4PdG69NbSqdQV/P/Mnzo0ADTNABbOBSpKov6pB/WdQOSMtXn8OSCQD7xlSfauk+mSjZRTAG69N4z7V9/695t+dNq0O+JPzK7N/tnPuov6bPZTHbbIN50OZ3NJYdDe0txsCwYDBwvVUBidPd3YuG0Lenq6MW/ODBy5bC7Kiwth44M4iZspUO9a9djKocHIimt//uUXJvHtaOkikNMEJvenRU6j1eJE4PAROOusfwacdb5PDHsrV0TyGgqDRU543Iktlgy8plBFCJjTwKhsoCgQDaKyBl2NVvbUepdjJcw3cuLbgO4e4N4HgVPeDFSXHWxtTTbeaplNFJQ13vGGDyqA2+6lBfXWv998qQRq/FN83nlt1ZEC5/kOm+PTbqervKaqyjF3VgM8bg9sRsmziGFXHQmH0b5zJ17dtMk49j9yyRwjd2rAlwe7USFhcjZG8UcF6uCKa3/+DQnUybmNWvUkICCBOgk2SUsUgUwJLF9+TX53Sd33wq45FzgDtZ5goRsuR6xsqsXHhx8EwyNAZxfgdQFL5gPN9dGUUAykStSsJVDN1xP9Ln4srVBPPR/N1XrG2w4EabFfovKno917slKpyZglGs/1U6T+694wHpBAHRPhRy+4ZI7XOfIdG2xvL8jLL5w/d569rKQYLuY9i0XZ8T+9AwPYtHUbtrW3o7Q0gGOPakFTQzXy8rxGt8nW1qx9EnetflwCdbJtnNY76QhMwo+HScdYCxaBw0sgErGdc9ELM8P+vT8fdM58pztQ4/T7YQhVwyJpqXFKwTA0BPQw0X8BcMQ8oLnpgIuANR4qUWwUp4v3F7XevDEmEk17RSvqgiZg8dxolgFzHfv9XU1HVIvD6X6raSzXa/z6YxU6jUvSVcFoaYzn/Uugpv64nnNOm9cZ9J0QHh5sc7tdi6srKvLr6+pQGAjAabcjYrPBFokgYrehq7sbG17bhD0de9E4qxpHLZmDmupS5Hk9kyranwL1zjWP3dzbNXTxr6+VBTX1p0U9RSA9AhKo6fFSbxGYtATa2iLOVwZuf0vYVXzlkHv2HH+xz5afZ99ficr8MKBI47H/QD/Q3w/UVgJL5wMV5dGKQvGVLUcLkkp2iNu+A3jqGeCMd0TFsDWK5iDrZrwSjouQSnr9NMbvj+JfE8ZDa277280/etfpk3bDD+HCz73w+2WOSOTboQhO9xfkV8ysqfXUVFagIL8ADgrVSAR2m81IPbVj925s2LgRocgIFs5vwOIFTSgrDcLlck2KiH9G8d+15rGb+3tDK66/+qsvHkLMupQITCsCEqjTart1syIANJ16oefERW87p8s54/vO/OZif6kPblf0VNYaVc9/U4z29gDDw8C8RmD+XKCIif5DsQAnm1HGfn/U/kF+oXEWTKOQgOV3nOOxZwCfCzjpmOhrYyX7H+21ZKVQzT1PZbyZB/U2CdQM3ioR26c++70TQjb7p8MR/FthMFDROGOmraq8FF6PNzof/VMdDgwODmJz+zZs3rINgYAXSxY3Y25zHYIBPxwOJvqPz+OQwXKyNIQC9e57H7+pr6fv4uuv/rYEapY4a1oRkEDVMyAC05TAGW2vFvr7N1w84KpZ7ihozvcX2eFlIFXseNz4cIgl+qdAZXCT2w7MaQQWzQfyvNFcpraYlkhU+tSah9WY2GLN5D97B4F7749WuGpuOKB0U/VFTXjNNHxZ48dToHJd/6JAXXXb3/50mSyo6b49PnLB14ry7IF3hxE5O9/rWVZZXlE8o6oKRQFaSZ3Glxke+zOiv7O7B69u3oS9HftQXVVs5E9tbKhBQT6P/alnc0+oSqCm+0SovwhkRkACNTNuGiUCU4NAJGI790tragc9Iz8Zcs59rztQ7gwWOuFkIJWhJKKWUvNof3AI6O0CggHgiPlAw0wY2QEYYJXIkjlWVD0BUhBuageeeRo4/R1AUTDqjxo/LhXrZybXjx9jlDoFcPuaMB6UQB3XM37eRT+YZRsKfTwcwUcK/YH62uoqZ2V5GQr9ATDh/f5j/1AIO/fuxaatWzA8MoTGxhosmleP2upyePPcCBkOyrnTDIG6+vGbBgcGV/ziym+8lDsr00pEYGoRkECdWvupuxGBzAhEIrb3f/PehZ6w+3+H85qOyQsU2wsKbGBAtmHJiov4Z6L//p5oov9FC4GGulhmgLi+5mLGiu7n/M+9COzZCZx+MuCKpcOy3shYFtX419KN7rf2N4LPYwL14VW3/vVPl512RmZANYoEWj/T5iuKeE8ccYTPcjjsJ5UUFlXVVVahvKwUvvz8qIXUqLFrx+DgALbt3Imt27fD47Fj0fxZWLRgFooKKWjpbpID1tRIBKvufwr3rH7spsGBIQlUPeYikEUCEqhZhKupRWCyETj1wn96igtcZ41Eyr4X9s2r9Be54c2LHuMb8iCmNPnBQcNWfx8wPBitRLV4IVBaGhO0PPqPq56aiIXRxwaEhoFH1gFBP3DisdGBfC2Z7SwTn1XrOuLHG0FSEqgT/tiedWFbwBN2zw+HRz7o9nhbgz5/TXV5KWqra+DPz0eIR/6xZ2tweBh79uzB1h07ELGPoGXOTCxZ2GwEUlGkHtZjf1Ogrnnsj4P9QxfLgjrhj4omFIH9BCRQ9TCIgAi8gUBL283upb3Ozw84W9qcwboCXzDfKIUaS295oD8tWyNAVxdgjwAL5gNzmgB/4MCxPzuPZgE1f0+ROtAX9UedPxtYuiAqgM0PqGTjk1lNUx2/X6Cupg/qrX+95XJZUCfy7XH2p9vKXfC8GbbQJ7x5eW8vCgY9M2uqUVVRAafDYUTx8/ifVtWu3l5s3bEdezv2wufzYumi2Vgwrx4FBd7DduxPccxSp/fc+9gfh4f6V1zzs2+vn0g+mksEROCgPy/CIQIiIAKJCXzmK89Wdjh2XDrsami1F8xwBwrt+xP9708LFbM6Mrdpd0c0uf+CFmDubERdBGK5T1Nh3NEJPPwwsHQhsGg2MDyOU93RrKs2e0z4xqzCRhwOMxbEfG2ZbeCO1WE8wiN+CdRUti2tPq2tNzsC5S/VRuB8t9NpPz8/z7u4pDCIhto6lBYXR63msVxmrEa1r7PTOPbv7OlAbVUJjjlyvhFIFfWLHscDktaqo50pUFetfQqrJFAzoKchIpAeAVlQ0+Ol3iIw7Qi0tUXsr+y756hIvveSPmfzW/KDxTZfIJo/1ZqWisKOgVUDA9HSqWUlwJKFQHUt4LJHLaKJou4PymNqA3bviYnUBcARLUYF1v2ZAqy+rJb6AsaexKVHPahgANdmlIG3Ry21ezsB5mHdvRfY0wn09kXXzj4BH7B3XxhdW+/4f3+45JR3T7sNP0Q3vHx5Wz4KvI3hgeGznd68jxbk51VVlpSgYUYd/AU+o1SqkeTfZsPQ8BD27uvAlu3tGBzqx+ymWhx7ZAsqK4oNq+uhCvbfL1Dve+wPPYP9F/9aFtRD9LToMtORgATqdNx13bMIZEKgtdXx0eaPvnVwuObX8DVWFxQH4XHbDEtWvEDg/+/tBgYHgaYGYP58oLgkJmhNRWpVlIZ5KqoyafncsRt4bB0wpwE4allUOIZieVLTWropTG3Anr3AqxuBrduAzh4grwAoLwNKSoCCAsDlBEZY7rUTWPd4GDteuuOBP/34lOPSup46p03gwgt/Fugd7F5md9k+43S73hvw+dwza6oiNZVVNo/Lg3AkvP/Lx8DAALbv2Y1t29vh9jhw9JK5OGJRk1GNikI12y0qUJ/EqjWP/6G/f3jFL6/6+svZvqbmF4HpSkACdbruvO5bBDIkcGrb+kBxz4YLhxxVX4oUzCvyFzvh9Rx8lM8PFlpYQzz274paQBvqgSWLo2LQOJmNi/i3HtY67NG8q4+vg+H7esJxQCAY9XOl+DUtsfEWWd4SBTNFLvuxGtZrW4BnX4paScvKgKpKoKQs6opA0cvJzDk53mkH1j4QwQsP3PHgysve+aYMMWlYGgTa2trsGze6S1Bge6vDbvu8y+E8rqK0BI319SgOBg9yfqYQ7RsYwObt7dixcyfKywI4/ugFaGqqg8MRrVqVrUaXAgrU1fc98fv+vqGLJVCzRVrzisCBGASxEAEREIG0CCz/0qOlnZ7OFSOh+k85g7VuRvw7nTHhaakYRbE6NAz0dQEeDzB/HtA8B8jzRC2WozUKXOZXffZZoH0rsHAeMLsZKAxEBa7VYMa+FLXUJp3dwK5dwKbNwNbtgM0BzGoCqisAtwewO2JjR9ExnGvt/RGsf+iOB1deLoGa1kMxzs70Tw1WPlcVCrk/7HTZPuV1exvrqqps9TPqkO/N2++2wctQqHZ0dWHTti3o7O5CU2MNjjt6PirLi6OBVlloEqhZgKopRWAUAtl5Fwu3CIjAtCHQ+tVnZzjRce2wa9bbHAVlTn/QAafrwLH//pP8CDA4HE30T5HZ0gI0NkYtnvT/HC0tFYUnfUXXrwe6OoCiQmBGdbRYAAXnSCjq89qxNypIB0cAtzt6dF9VA5QWRv1YjcIDsZboWvvXaQPufyCClx68/YGVl+uI/3A8yLSobtplP8Zuc37BbrOdnJ+fH6yvq7MzLZXX7TpIqI6ERrBzz168tmkTwrYQjljQaFSkKi70TbhQtQrUocG+Fdde8e1XDgcfXVMEpgMBCdTpsMu6RxHIMgHmTy33+N7e53BdGvIsmesr8hg+nkbGIIvPqZHbNOafOjwEVJYDy5YCJaWxalVUkgdXRDX+v2H1HAH27AO27wA690b9W4dDUf9UWmbpOsDT4KLiqABm+XcjMCs2ZzyC0QQx1/zAAxG8KIGa5acm+fStrRflFVZXvSscCn/OjvCRJaUlBU0z622lhYVwuVwHHf0PDQ0ZuVM3btsKX74Hxx49DwvmNsBr1u9NfrmkPWi1XXXfU1hz/xM3Dg70XSyBmhSZOohAxgQkUDNGp4EiIAJvINDa6vhIw9kf6UfdT52+xiJfiR8e14GSqfsT/cf8U/u6oyJz7ixgdgtQUgyEDHNnYmsnU0QZKaHoN8ousX60whrCNvZfM3VUIrGbaNesYpUCVRbU3Hq2L7zwZ2X94f6zIgid63Tam2sqq/IaGe3v88PpdEYfK0b8A+jp68WrW7ago2MfZjVUYdni2aiqLIGXNXljqaIyvTsJ1EzJaZwIpE9AAjV9ZhohAiKQhMAZba8W+vteu7jPPnO5zVebHyh0weVJUJGKfqZDQE834LIBs+cCixZEy51aRaZ5uZSrU42yvlTGO2zAvQ9EsF4W1Jx7zs+98Pst9kjk/Eg4ckZBfkFtQ12tq6a6yvBPddijAVJ2m8347/bdu/AS0zZgGAtbZmHxwiajGhUFbaZC1RSoq+57/Mb+vuEV11/99Q05B0kLEoEpQkACdYpspG5DBHKNAPOnbsALTQMD234Usi88zekvdgSLHUYwEy2gZt1740OI/qlDUf9UXwGwbAlQOwOg0YuZAKzxTPH5TpPdd7woTTae67rv/ghefOj2B/4sH9RkeA/L65/47PfeFkHkAsB2fElRcUXDzBmoKC6G1+uBDVGBSqE6MDyEzVvbsbl9G/w+D5YuasLcOTNRGPTDYbchnGbEPwXqPfc9gTVrn7qhr3foYgnUw7L9uug0ISCBOk02WrcpAoeNQCRiO/dzf1/S5S+6Aa45cwuKS23efJvhO/qGZPsRoK8f6O8FaquBhQuAisq4zABxN3LQ8fzB3gEp3XL8eEbg3BfzQZVATQnhYem0/Ks/DNp6w2cORyLnuVzuhVXl5cGZNVUoChbC43IjeuDPL0I2dPd0Y8OmzdjTsQ+1NaVYvLARDTOr4PflG2I21dRUBwTqEzcMDAysuO7n3371sNy8LioC04CABOo02GTdogjkAoFzzrnHO1g2+NERR+V3wt45Vb5iL7xeS5xLTK3SgsmAqN5eIDQEzJwJLFwEFAYBHr8z8CnVNpr1dKzxsqCmSjc3+p3/mUvmhWzhs20In+4rKGisra7yVJeVI0D/VJcTkXDYsKaGIhHs3rsXr27ejKHhAcxursER85tQU10Gj9tplE1NJlRD4RBW3fskVt//5O+6Bvov/p0Eam48BFrFlCQggTolt1U3JQK5S6D1h68E3fte/GK/bdaXnb76fH+xx6jiZAhTik/bgQTNzJPa0xkVpnPmAvPmAX7fgfypo1lPUxWmicabQVLPP6gj/tx9ig5eWWtrq6O4etmbQyF8LGILn1wYDNbV19ShurzcqDJlNB772+3oHxzA1u07sG3HDuQXuLCwpQEts2eipCQYFbJjVKQaHh4xjvjXPvzML7uG+y/+7eXf2jpZGGmdIjDZCEigTrYd03pFYIoQuOBr9xZ12OxXDjuqz7Tn13l8QYeRv9Saloq3aiTsHwR6WJ7UC7TMjgpVh2v0FFLJEI0VLLU/Uf8jd9y/8sfvfHOyufR67hC46KLL8jqGehY5HPYz3C7v+/0F/uaqsjLUVFXCl5cXtZDa6KUK9A8OYufu3WjftRM2Wwizm2dg6RFNqCgrNm4ovnQqXQX27O3CPfc9Fn76mVd/NNjV/Z1rr23ry52710pEYGoRkECdWvupuxGBSUWg9eaIw/bIPcfaHXk/HnbOP9pb6LcV+KM5UY1SqOaxf+yu+nqB/j6gvAQ44giguhpwOGKpqeLuPJWI/YQJ+1lJilH8D0ugTqqHybLYCy74QdGgY+itkbDjU/n5eScUBgLeusoqVFdWwuVwGMFRFJwUrN19fWjfsQO79u6Gz+fBEfMbsWjBLAR8BYY11Tz2dzoceOaFVyN3rlq3ecfO3f+9a/O661euXDlKlt3JSk7rFoHcISCBmjt7oZWIwPQl0Nrq+PeZZ584bC//DfLn1Rr5U922aF5Ti1BlYBV9UHt7gKEBoGEGsGhhNNE/f29j3zGE6lgVpAxrbex/KFBffPj2+2/58SmyoE7Sp3L58uWukYLqOgy53+uw2c7P83rnl5WUoL6uFiXFRdHnikUgAIyEQ+jo6sbW7dvR2dOB0pIAjl46Fy1z6o1E//yitGnzdtx97xNYv2HrH7o7B//r+qu/+uIkRaNli8CkICCBOim2SYsUgelB4KS2e7x1/ZGv96H8846C5sKCIrdREcoUE6b6pHBlIFV3D2ALA431wPyFQCAQ82PlSW4GEf2GPo1F8T//8O33/0UCddI/eK2fafP5Hf7GSHjgbLfb9dECb0FFdUWZIVQL8gsQCYUQ4bF/JILBkRHs6+hA+86d6O7rht/nRaHfh+FwGB0dPejs6lvV0zPwvfVP965ataptZNLD0Q2IQA4TkEDN4c3R0kRgWhKIRGwf/tYjteGRfd8M2+ef5yiscAWCTuMo3xSoZnoqisnBgWii/3wPsGABMKsp6qsaX5HKZJkssMqM4n/+EQnUqfT8LV/+w2DEEV4ctuPTbo/rDH++zzOjpsY2s6YaPL43cqIayXkjGB4ZwZ59HXht6+bI3n37bAzWC4VH7kQk8oOtrxSs/de/Pj84ldjoXkQgFwlIoObirmhNIiACBoEPffLO2eFCxw3h/NnLvL5Ke4HfDrsjFkhl+fTiPwf6o0K1sjyalqqmOqY3ePSfojXVPOJnHlRZUKfeQ9jW1mbv6AgGOob73+N02C7yON1LigqDaJhZh4rScjhZjYrW0q4uvPzaa2jftQvD4dDDQPjq0Mjg7RuewU5ZTqfec6E7yk0CEqi5uS9alQiIQIzAsuXXuBYEF7x3AN7/Hsprnusv8iMvH4Z/KiP+91ekYpqqUDSIangAqKgAli4GSsujAtXMHpQsBZWRZur+CF569M61Ky89+XhtxNQjsHz5Na6wp70CEc+5Nrvt006Hs9rldEVcbodRXmpweMg2PBR6LTQSum4kjBvrKwe3tLXpSH/qPQm6o1wmIIGay7ujtYmACOwn8J7lj+b7izd/cCDSfLnDN6vQV+SFy20zglzMaH92psAMDQO93VFR2twMtMwDiguBYcZcx0dRxTE20kytjWD9I3euXXmZBOpUfgTb2tqcmzbllUe84Q/ZbZGzInbbDFskMgxE7gZs//vKM7c/tGrVKvmaTuWHQPeWswQkUHN2a7QwERCBRASYP7UrEv5uPyrOsfsaC/zFTnhc0Z77S6sz2b8NGBkGursAtwNobIympmKuVUb7h+OEqmlZpWV27X0RvLjutrW3XHqqLKh6DEVABETgMBCQQD0M0HVJERCBcRKIRGzv/9w9LW6/53+GnHNOcftL7P7CaP7U/cf+Zg7VCDAwCPR1R6tQLT4CmFkPQ9QOJ7CNUaDef18ELzxy29pbLpNAHedOabgIiIAIZERAAjUjbBokAiKQKwTObvvzgv7espUR7/w5BSVBmzfPHhWqMQvpfssogL4eoL8fqKuJRvyXV8Ryn4YPnPzvt6A+fNvaWy6XQM2VfdY6REAEphcBCdTptd+6WxGYkgTOOece71Cl/WND8LVFvC1VvmKvkWqKzdCpMWuqmei/pzOaR7VuBrBkMVAYjHah9dVhB+5byyj+O9f+WT6oU/J50U2JgAjkPgEJ1NzfI61QBEQgRQKtbZuLvd0vf6XXPeMiV6DW4wu64XYdEJ8M5zc/9JjbsqcLYHrVlgXRYKqgHwhFgLvvCOOVJ27/2//95NTTU7y0uomACIiACEwgAQnUCYSpqURABHKDwPu+fFu5xxa6Ych9xFu9hRWOAp8DDmcsfyqXGDv3NxL9D0YDqRjlP282MDgcwdPr9oY79z1w8j8ue89duXFHWoUIiIAITC8CEqjTa791tyIwbQi0tUXsL/bcftKI3XfpiHv+4rxA0BYojIrT/dH+LB7EPFUAujuAzj0heMKbur22jm825y25uq3NphRD0+aJ0Y2KgAjkEgEJ1FzaDa1FBERgwgmceuE/PYWe0MkhR93/hr0N1b5SP9yeaP5UIxVVCOjtCmO4c0/IhY1/CfqO/GTFIDrb2mzhCV+MJhQBERABEUiJgARqSpjUSQREYLITOPlHTxZUbd/xpR7nzC/a/TODeT6PUXmqr7MXnsGNL+Z5+z8/w7bsTgnTyb7TWr8IiMBUICCBOhV2UfcgAiKQGoFIxPbhC16bafO9esmwo+I0u9M+kB/qucJdeORPrv2arTO1SdRLBERABEQg2wQkULNNWPOLgAiIgAiIgAiIgAikRUACNS1c6iwCIiACIiACIiACIpBtAhKo2Sas+UVABERABERABERABNIiIIGaFi51FgEREAEREAEREAERyDYBCdRsE9b8IiACIiACIiACIiACaRGQQE0LlzqLgAiIgAiIgAiIgAhkm4AEarYJa34REAEREAEREAEREIG0CEigpoVLnUVABERABERABERABLJNQAI124Q1vwiIgAiIgAiIgAiIQFoEJFDTwqXOIiACIiACIiACIiAC2SYggZptwppfBERABERABERABEQgLQISqGnhUmcREAEREAEREAEREIFsE5BAzTZhzS8CIiACIiACIiACIpAWAQnUtHCpswiIgAiIgAiIgAiIQLYJSKBmm7DmFwEREAEREAEREAERSIuABGpauNRZBERABERABERABESuZgeMAAAaXklEQVQg2wQkULNNWPOLgAiIgAiIgAiIgAikRUACNS1c6iwCIiACIiACIiACIpBtAhKo2Sas+UVABERABERABERABNIiIIGaFi51FgEREAEREAEREAERyDYBCdRsE9b8IiACIiACIiACIiACaRGQQE0LlzqLgAiIgAiIgAiIgAhkm4AEarYJa34REAEREAEREAEREIG0CEigpoVLnUVABERABERABERABLJNQAI124Q1vwiIgAiIgAiIgAiIQFoEJFDTwqXOIiACIiACIiACIiAC2SYggZptwppfBERABERABERABEQgLQISqGnhUmcREAEREAEREAEREIFsE5BAzTZhzS8CIiACIiACIiACIpAWAQnUtHCpswiIgAiIgAiIgAiIQLYJSKBmm7DmFwEREAEREAEREAERSIuABGpauNRZBERABERABERABEQg2wQkULNNWPOLgAiIgAiIgAiIgAikRUACNS1c6iwCIiACIiACIiACIpBtAhKo2Sas+UVABERABERABERABNIiIIGaFi51FgEREAEREAEREAERyDYBCdRsE9b8IiACIiACIiACIiACaRGQQE0LlzqLgAiIgAiIgAiIgAhkm4AEarYJa34REAEREAEREAEREIG0CEigpoVLnUVABERABERABERABLJNQAI124Q1vwiIgAiIgAiIgAiIQFoEJFDTwqXOIiACIiACIiACIiAC2SYggZptwppfBERABERABERABEQgLQISqGnhUmcREAEREAEREAEREIFsE5BAzTZhzS8CIiACIiACIiACIpAWAQnUtHCpswiIgAiIgAiIgAiIQLYJSKBmm7DmFwEREAEREAEREAERSIuABGpauNRZBERABERABERABEQg2wQkULNNWPOLgAiIgAiI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s65U+lJoVMY67gHAn/jGQCZ+JlF40To2VjOPWtmHlstEFiwKEgZBZVquNJX74p4k+sLBey2PZQjINO8tr88vBzwmt/oQ8/d00aBISlUc0T3BbBTCmTRarM0je/rGJuNKSzC/nLH4wXgag+H4XPBeudcMPEv2fIznehorAiKQAwQkUHNgE7QEERABERABERABERCBAwQkUPU0iIAIiIAIiIAIiIAI5BQBCdSc2g4tRgREQAREQAREQAREQAJVz4AIiIAIiIAIiIAIiEBOEZBAzant0GJEQAREQAREQAREQAQkUPUMiIAIiIAIiIAIiIAI5BQBCdSc2g4tRgREQAREQAREQAREQAJVz4AIiIAIiIAIiIAIiEBOEZBAzant0GJEQAREQAREQAREQAQkUPUMiIAIiIAIiIAIiIAI5BQBCdSc2g4tRgREQAREQAREQAREQAJVz4AIiIAIiIAIiIAIiEBOEZBAzant0GJEQAREQAREQAREQAQkUPUMiIAIiIAIiIAIiIAI5BQBCdSc2g4tRgREQAREQAREQAREQAJVz4AIiIAIiIAIiIAIiEBOEZBAzant0GJEQAREQAREQAREQAQkUPUMiIAIiIAIiIAIiIAI5BQBCdSc2g4tRgREQAREQAREQAREQAJVz4AIiIAIiIAIiIAIiEBOEZBAzant0GJEQAREQAREQAREQAQkUPUMiIAIiIAIiIAIiIAI5BQBCdSc2g4tRgREQAREQAREQAREQAJVz4AIiIAIiIAIiIAIiEBOEZBAzant0GJEQAREQAREQAREQAQkUPUMiIAIiIAIiIAIiIAI5BQBCdSc2g4tRgREQAREQAREQAREQAJVz4AIiIAIiIAIiIAIiEBOEZBAzant0GJEQAREQAREQAREQAT+P/dWXtNA9tK8AAAAAElFTkSuQmCC\"","<script lang=\"ts\" setup>\nimport { inject, onBeforeUnmount, onMounted, ref } from 'vue';\n\nimport Pausationor from '../../../plugins/PausationTagPlugin/pausationor.vue';\nimport { EditorInjectionKey } from '../editor/context';\nimport { useMouse } from '@vueuse/core';\nimport { createComponentSpace, findParent, isHttps } from '../../../utils';\nimport { handlePaste } from '../../../foundation/editorManager/paste';\nimport { calcPasteTextLength } from '../../../foundation/editorManager/maxLength';\n\nconst EDITOR_CONTAINER_CLS = 'c-editor-container__core-content-editor-content';\n\nconst [bem] = createComponentSpace('quick-context-menu');\n// 通过 inject 注入顶层API\nconst editorCtx = inject(EditorInjectionKey);\nconst { x, y } = useMouse();\n\nconst handlePausationTagInsert = (e: Event, pausationValue: number) => {\n editorCtx?.editorAction.value?.plugin.pausation?.add({ delay: pausationValue });\n showContextMenu(false);\n};\nconst handlPaste = async () => {\n let clipboardText = '';\n let paragraphs: string[] = [];\n const navigator: Navigator = !window.microApp ? window.navigator : window.rawWindow.navigator;\n\n clipboardText = await navigator.clipboard.readText();\n paragraphs =\n clipboardText\n ?.split(/(?:\\r?\\n){2,}/)\n .map((para) => para.trim())\n .filter((_) => _) ?? [];\n\n handlePaste(\n editorCtx!.editorCore.value!,\n calcPasteTextLength(editorCtx!.editorCore.value!, paragraphs)\n );\n showContextMenu(false);\n};\n\nconst contextMenuRef = ref<HTMLDivElement>();\nconst contextMenuVisible = ref<boolean>(false);\nconst contextMenuPositionStyle = ref<Record<string, any>>({ zIndex: -10 });\nconst allowPaste = isHttps();\n\nconst showContextMenu = (visible?: boolean) => {\n contextMenuVisible.value = visible ?? !contextMenuVisible.value;\n showPausationor(false);\n};\nconst handleContextMenu = (event: Event) => {\n const target = event.target as HTMLElement;\n const [editorContainerElm] = findParent(target, (elm) => {\n return elm.classList.contains(EDITOR_CONTAINER_CLS);\n });\n\n if (editorContainerElm) {\n event.preventDefault();\n event.stopPropagation();\n contextMenuPositionStyle.value = { top: `${y.value}px`, left: `${x.value}px` };\n showContextMenu(true);\n }\n};\nconst handleClick = (event: Event) => {\n if (!contextMenuRef.value?.contains(event.target as HTMLElement)) {\n contextMenuPositionStyle.value = { zIndex: -10 };\n showContextMenu(false);\n }\n};\n\nconst pausationorRef = ref<InstanceType<typeof Pausationor>>();\nconst showPausationor = (visible?: boolean) => {\n pausationorRef.value?.$el.setAttribute('style', visible ? 'display: block' : 'display: none');\n};\nconst handleMouseOver = (event: Event) => {\n const target = event.target as HTMLElement;\n const [pausationAreaELm] = findParent(target, (elm) => {\n return elm.dataset.type === 'pausation' || elm.classList.contains('pausation');\n });\n\n showPausationor(!!pausationAreaELm);\n};\n\nonMounted(() => {\n document.addEventListener('contextmenu', handleContextMenu);\n document.addEventListener('click', handleClick);\n document.addEventListener('mouseover', handleMouseOver);\n});\nonBeforeUnmount(() => {\n document.removeEventListener('contextmenu', handleContextMenu);\n document.removeEventListener('click', handleClick);\n document.removeEventListener('mouseover', handleMouseOver);\n});\n</script>\n\n<template>\n <div\n v-show=\"contextMenuVisible\"\n ref=\"contextMenuRef\"\n :class=\"bem()\"\n :style=\"contextMenuPositionStyle\"\n >\n <span style=\"display: none\">{{ contextMenuVisible }}</span>\n <ul :class=\"bem('action')\">\n <li v-if=\"allowPaste\" :class=\"bem('action-item')\" data-type=\"paste\" @click=\"handlPaste\">\n 粘贴文本\n </li>\n <li :class=\"bem('action-item')\" data-type=\"pausation\"> 插入停顿 </li>\n </ul>\n\n <div class=\"pausation\">\n <span class=\"fill\"></span>\n <Pausationor\n ref=\"pausationorRef\"\n :visible=\"true\"\n class=\"pausationor\"\n @ok=\"handlePausationTagInsert\"\n ></Pausationor>\n </div>\n </div>\n</template>\n\n<style lang=\"less\" scoped>\n.c {\n &-quick-context-menu {\n position: fixed;\n z-index: 100;\n width: 80px;\n background: #fff;\n box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.1);\n border-radius: 8px;\n border: 1px solid #f6f6f6;\n\n &__action {\n &-item {\n line-height: 40px;\n text-align: center;\n color: var(--color-text-2);\n font-size: 14px;\n cursor: pointer;\n\n &:hover {\n color: rgba(var(--primary-6));\n background-color: rgba(var(--primary-6), 0.1);\n }\n }\n }\n\n .pausation {\n display: flex;\n position: absolute;\n top: 0;\n left: 78px;\n\n .fill {\n display: inline-block;\n width: 2px;\n height: 202px;\n background: transparent;\n }\n\n .pausationor {\n width: 80px;\n flex-shrink: 0;\n }\n }\n }\n}\n</style>\n","<template>\n <svg\n class=\"icon\"\n style=\"\n width: 1.0615234375em;\n height: 1em;\n vertical-align: middle;\n fill: currentColor;\n overflow: hidden;\n \"\n viewBox=\"0 0 1087 1024\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n p-id=\"25784\"\n >\n <path\n d=\"M803.357238 420.071182l-59.223373 121.234528a17.202656 17.202656 0 0 1-30.801594 0.203985v-0.067995l-60.447278-121.98247-134.221514-20.058433a17.134661 17.134661 0 0 1-9.519256-29.237716l96.552457-94.376627-23.322178-133.609562a17.134661 17.134661 0 0 1 25.09004-18.086587l-0.067995-0.067994 119.80664 63.507038 119.602656-62.623107a17.134661 17.134661 0 0 1 24.818061 18.086587v-0.067995l-22.302257 133.949535 97.368393 95.056574a17.066667 17.066667 0 0 1-9.519256 29.237716h-0.067995l-133.745551 18.834528v0.067995z m-568.367597-155.707835l-51.811952 27.401859a8.635325 8.635325 0 0 1-12.443028-9.043294l9.927225-58.339442-42.156707-41.47676a8.635325 8.635325 0 0 1 4.759628-14.618857l58.203453-8.499336 25.973971-53.035857a8.635325 8.635325 0 0 1 15.3668 0l25.905976 53.035857 58.203452 8.499336a8.635325 8.635325 0 0 1 4.759629 14.686852l-42.156707 41.408765 9.995219 58.407437a8.635325 8.635325 0 0 1-12.579017 8.975299h0.067995l-51.879947-27.469854h-0.13599z m353.232404 241.78911l1.291899 1.15591a25.701992 25.701992 0 0 1 2.039841 36.037184h0.067995l-291.493228 334.533865a46.236388 46.236388 0 0 1-63.235059 6.119522l0.067994 0.135989a38.281009 38.281009 0 0 1-3.739707-57.455511l319.575033-319.575034a25.701992 25.701992 0 0 1 35.425232-0.951925z m241.9251 299.856574l-41.612749 22.098273a10.335193 10.335193 0 0 1-14.958832-10.87915v0.067995l7.955379-46.916335-33.861355-33.249402a10.335193 10.335193 0 0 1 5.643559-17.474635l46.712351-6.799469 20.806375-42.49668a10.335193 10.335193 0 0 1 18.562549-0.135989v0.067994l20.73838 42.49668 46.712351 6.799469a10.335193 10.335193 0 0 1 5.643559 17.54263l-33.79336 33.317397 7.955378 46.916334a10.335193 10.335193 0 0 1-14.958831 10.743161l-41.544754-22.098273z\"\n p-id=\"25785\"\n ></path>\n </svg>\n</template>\n","<template>\n <svg\n class=\"icon\"\n style=\"width: 1em; height: 1em; vertical-align: middle; fill: currentColor; overflow: hidden\"\n viewBox=\"0 0 1024 1024\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n p-id=\"1008\"\n >\n <path\n d=\"M94.464 160c0-17.664 13.056-32 29.12-32H900.48c16 0 29.12 14.336 29.12 32s-13.056 32-29.12 32H123.52c-16.064 0-29.12-14.336-29.12-32zM123.584 584.384c-16.064 0-29.12 14.336-29.12 32s13.056 32 29.12 32h570.56c16.128 0 29.12-14.336 29.12-32s-12.992-32-29.12-32H123.584zM85.312 394.624c0-17.664 17.28-32 38.4-32h563.2c21.248 0 38.4 14.336 38.4 32s-17.152 32-38.4 32h-563.2c-21.12 0-38.4-14.336-38.4-32zM123.584 827.136c-16.064 0-29.12 14.336-29.12 32s13.056 32 29.12 32h240.704c16.064 0 29.12-14.336 29.12-32s-13.056-32-29.12-32h-240.64z\"\n p-id=\"1009\"\n ></path>\n </svg>\n</template>\n","<template>\n <svg\n class=\"icon\"\n style=\"width: 1em; height: 1em; vertical-align: middle; fill: currentColor; overflow: hidden\"\n viewBox=\"0 0 1024 1024\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n p-id=\"1098\"\n >\n <path\n d=\"M114.496 597.312c-16.128 0-29.184 14.336-29.184 32s13.056 32 29.184 32h570.56c16.064 0 29.12-14.336 29.12-32s-13.056-32-29.12-32H114.496zM117.312 405.312h686.976a32 32 0 0 0 0-64H117.312a32 32 0 0 0 0 64\"\n p-id=\"1099\"\n ></path>\n </svg>\n</template>\n","<template>\n <svg\n class=\"icon\"\n style=\"width: 1em; height: 1em; vertical-align: middle; fill: currentColor; overflow: hidden\"\n viewBox=\"0 0 1024 1024\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n p-id=\"1038\"\n >\n <path\n d=\"M512 64c17.664 0 32 14.016 32 31.232v833.536c0 17.28-14.336 31.232-32 31.232a31.616 31.616 0 0 1-32-31.232V95.232c0-17.28 14.336-31.232 32-31.232zM352 221.12C352 205.056 337.664 192 320 192s-32 13.056-32 29.12v570.56c0 16.128 14.336 29.184 32 29.184s32-13.056 32-29.184V221.12zM704 192c17.664 0 32 17.216 32 38.4v563.2c0 21.184-14.336 38.4-32 38.4s-32-17.216-32-38.4V230.4c0-21.184 14.336-38.4 32-38.4zM160 408.96C160 395.2 145.664 384 128 384s-32 11.2-32 24.96v206.08c0 13.76 14.336 24.96 32 24.96s32-11.2 32-24.96V408.96zM928 408.96c0-13.76-14.336-24.96-32-24.96s-32 11.2-32 24.96v206.08c0 13.76 14.336 24.96 32 24.96s32-11.2 32-24.96V408.96z\"\n p-id=\"1039\"\n ></path>\n </svg>\n</template>\n","import type { InjectionKey, Ref } from 'vue';\nimport type { Action, Func, Predicate } from '@om-design/util';\n\nimport Optimism from './icons/optimism.vue';\nimport Expand from './icons/expand.vue';\nimport InExpand from './icons/inexpand.vue';\nimport MoreShortcut from './icons/moreShortcut.vue';\n\nexport interface RefineGeneratorContext {\n name: 'RefineGenerator';\n\n refineGeneratorRef: Ref<HTMLDivElement | undefined>;\n visible: Ref<boolean>;\n width: string;\n generating: Ref<boolean>;\n prompt: Ref<string | undefined>;\n shortcutVisible: Ref<boolean>;\n content: Ref<RefineSingleContentContext[]>;\n activedContent: Ref<RefineSingleContentContext | undefined>;\n contentVisible: Ref<boolean>;\n contentPage: Ref<number>;\n contentState: Ref<RefineContentState>;\n\n setVisible: Action<boolean>;\n setRefineGenerating: Predicate<boolean | undefined>;\n setRefinePrompt: Action<string | undefined>;\n setShortVisible: Func<boolean | undefined, boolean>;\n setRefineContent: Action<RefineSingleContentContext[]>;\n setActivedRefineContent: Action<RefineSingleContentContext>;\n genRefineContent: (data?: GenContentParams) => void;\n setContentVisible: Func<boolean | undefined, boolean>;\n setContentPage: Action<number>;\n setContentState: Action<RefineContentState>;\n\n showRefineGenerator: Action<void>;\n\n abortSession: () => Promise<any>;\n\n /** highlight */\n scrollElm: Ref<HTMLElement | undefined>;\n highlightRange: Action<void>;\n unhighlightRange: Action<void>;\n revertRange: Action<void>;\n\n /** modal position */\n generatorPosition: Ref<GeneratorPosEnum>;\n shortcutPosition: Ref<ShortcutPosEnum>;\n subShortcutPosition: Ref<SubShortcutPosEnum>;\n setGeneratorPosition: Action<GeneratorPosEnum>;\n setShortcutPosition: Action<ShortcutPosEnum>;\n setSubShortcutPosition: Action<SubShortcutPosEnum>;\n calcModalPosition: Action<void>;\n}\n\nexport const refineGeneratorKey: InjectionKey<RefineGeneratorContext> =\n Symbol('RefineGeneratorContext');\n\nexport enum RefineContentState {\n 未生成 = -1,\n 等待生成 = 0,\n 正在生成 = 1,\n 生成结束 = 2,\n}\n\nexport enum RefineGenerateType {\n 重置 = 0,\n 刷新 = 1,\n}\n\nexport enum RefineShortcutEunm {\n 润色 = '润色',\n 扩写 = '扩写',\n 缩写 = '缩写',\n 更改语气 = '更改语气',\n 更专业 = '更专业',\n 更口语化 = '更口语化',\n 更易读 = '更易读',\n 更含蓄 = '更含蓄',\n 更学术 = '更学术',\n 更有文采 = '更有文采',\n 更有网感 = '更有网感',\n}\n\nexport const refineShortcutOptions = [\n { label: '润色', value: RefineShortcutEunm.润色, icon: Optimism },\n { label: '扩写', value: RefineShortcutEunm.扩写, icon: Expand },\n { label: '缩写', value: RefineShortcutEunm.缩写, icon: InExpand },\n {\n label: '更改语气',\n value: RefineShortcutEunm.更改语气,\n icon: MoreShortcut,\n children: [\n { label: '更专业', icon: MoreShortcut, value: RefineShortcutEunm.更专业 },\n { label: '更口语化', icon: MoreShortcut, value: RefineShortcutEunm.更口语化 },\n { label: '更易读', icon: MoreShortcut, value: RefineShortcutEunm.更易读 },\n { label: '更含蓄', icon: MoreShortcut, value: RefineShortcutEunm.更含蓄 },\n { label: '更学术', icon: MoreShortcut, value: RefineShortcutEunm.更学术 },\n { label: '更有文采', icon: MoreShortcut, value: RefineShortcutEunm.更有文采 },\n { label: '更有网感', icon: MoreShortcut, value: RefineShortcutEunm.更有网感 },\n ],\n },\n];\n\nexport interface GenContentParams {\n /**\n * 调优提示词\n */\n prompt?: string;\n /**\n * 调优快捷指令\n */\n shortcutType?: RefineShortcutEunm;\n /**\n * 调优类型\n */\n generateType?: RefineGenerateType;\n}\n\nexport interface RefineSingleContentContext {\n /**\n * 是否是手动调优\n */\n isManualPrompt?: boolean;\n /**\n * 调优关键词\n */\n prompt?: string;\n /**\n * 调优快捷指令\n */\n shortcutType?: RefineShortcutEunm;\n /**\n * 调优生成内容\n */\n content?: string;\n}\n\nexport enum ShortcutPosEnum {\n 底部 = 0,\n 顶部 = 1,\n}\n\nexport enum GeneratorPosEnum {\n 底部 = 0,\n 顶部 = 1,\n}\n\nexport enum SubShortcutPosEnum {\n 顶部对齐 = 0,\n 底部对齐 = 1,\n}\n\n/**\n * 段落分隔符\n */\nexport const SEPARATOR = '<br><br>';\n","<template>\n <svg\n class=\"icon\"\n style=\"width: 1em; height: 1em; vertical-align: middle; fill: currentColor; overflow: hidden\"\n viewBox=\"0 0 1024 1024\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n p-id=\"2357\"\n >\n <path\n d=\"M384.384 117.312a32 32 0 0 1 32 32V873.6a31.936 31.936 0 0 1-55.296 23.104l-213.504-213.12a32 32 0 0 1 45.248-45.248l159.552 159.232V149.312a32 32 0 0 1 32-32zM639.552 117.312a31.488 31.488 0 0 1 22.592 9.344l214.208 213.76a32 32 0 1 1-45.248 45.312L671.552 226.56v648.192a32 32 0 0 1-64 0V149.312a31.68 31.68 0 0 1 9.344-22.592l0.064-0.064a32 32 0 0 1 22.592-9.344z\"\n p-id=\"2358\"\n ></path>\n </svg>\n</template>\n","<template>\n <svg\n class=\"icon\"\n style=\"width: 1em; height: 1em; vertical-align: middle; fill: currentColor; overflow: hidden\"\n viewBox=\"0 0 1024 1024\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n p-id=\"6168\"\n >\n <path\n d=\"M489.6 74.666667c-88.362667 0-157.653333 0-212.181333 6.613333-55.722667 6.826667-100.266667 20.906667-136.96 52.181333a243.285333 243.285333 0 0 0-27.221334 27.221334c-31.274667 36.693333-45.397333 81.237333-52.138666 136.96-6.613333 54.528-6.613333 123.776-6.613334 212.181333v4.352c0 88.405333 0 157.653333 6.613334 212.181333 6.741333 55.722667 20.864 100.309333 52.138666 136.96a243.2 243.2 0 0 0 27.221334 27.221334c33.621333 28.714667 73.941333 42.965333 123.477333 50.346666 48.725333 7.253333 109.354667 8.277333 185.130667 8.405334a32 32 0 1 0 0.128-64c-76.629333-0.128-132.48-1.237333-175.829334-7.68-42.624-6.357333-70.016-17.493333-91.306666-35.712a184.106667 184.106667 0 0 1-20.138667-20.138667c-19.84-23.210667-31.274667-53.632-37.290667-103.125333-6.101333-50.218667-6.144-115.584-6.144-206.634667s0-156.416 6.144-206.634667c5.973333-49.493333 17.493333-79.914667 37.290667-103.125333 6.144-7.210667 12.885333-13.952 20.096-20.138667 23.210667-19.797333 53.674667-31.274667 103.125333-37.290666 50.218667-6.101333 115.626667-6.144 206.677334-6.144 91.008 0 156.416 0.042667 206.634666 6.144 49.493333 6.016 79.914667 17.493333 103.125334 37.290666 7.253333 6.186667 13.952 12.928 20.096 20.138667 18.218667 21.333333 29.354667 48.725333 35.712 91.306667 6.485333 43.349333 7.552 99.242667 7.68 175.872a32 32 0 1 0 64-0.170667c-0.128-75.776-1.109333-136.362667-8.362667-185.130667-7.381333-49.493333-21.632-89.813333-50.346667-123.434666a242.986667 242.986667 0 0 0-27.221333-27.221334c-36.650667-31.274667-81.237333-45.397333-136.96-52.181333-54.528-6.613333-123.818667-6.613333-212.181333-6.613333h-4.394667zM321.152 352a32 32 0 0 0 0 64h170.666667a32 32 0 0 0 0-64h-170.666667zM606.848 778.88a32 32 0 0 1 32-32h221.44l-73.386667-73.344a32 32 0 0 1 45.226667-45.226667l128 128a32 32 0 0 1 0 45.226667l-128 128a32 32 0 1 1-45.226667-45.226667l73.386667-73.386666h-221.44a32 32 0 0 1-32-32z\"\n p-id=\"6169\"\n ></path>\n </svg>\n</template>\n","<template>\n <svg\n class=\"icon\"\n style=\"width: 1em; height: 1em; vertical-align: middle; fill: currentColor; overflow: hidden\"\n viewBox=\"0 0 1024 1024\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n p-id=\"6839\"\n >\n <path\n d=\"M204.032 263.296a31.488 31.488 0 0 1 0-45.226667 414.72 414.72 0 0 1 587.946667 0c80.64 80.341333 116.48 171.861333 130.986666 251.008 10.24 56.021333 9.813333 106.026667 6.826667 142.037334-1.28 18.048-3.413333 32.682667-5.12 42.965333-0.853333 5.12-1.706667 9.173333-2.56 12.032 0 1.450667-0.426667 2.56-0.426667 3.370667l-0.426666 0.981333v0.469333a32.554667 32.554667 0 0 1-22.613334 23.082667 32 32 0 0 1-31.146666-8.234667l-93.44-93.397333a32.256 32.256 0 0 1 0-45.226667l82.773333-82.773333a404.821333 404.821333 0 0 0-110.08-201.088 350.805333 350.805333 0 0 0-497.493333 0 32 32 0 0 1-45.226667 0z m717.226667 407.637333l-31.146667-7.765333 31.146667 7.765333z m-717.226667 135.424c-64.426667-64.085333-93.013333-142.848-104.533333-213.546666a555.690667 555.690667 0 0 1-4.266667-145.749334c1.706667-18.944 4.266667-34.517333 5.973333-45.44 1.28-5.461333 2.133333-9.813333 2.56-12.8 0.426667-1.536 0.853333-2.730667 0.853334-3.584l0.426666-0.981333v-0.512a31.232 31.232 0 0 1 22.613334-23.210667c11.093333-3.072 23.04 0.042667 31.146666 8.192l95.573334 95.573334c12.373333 12.501333 12.373333 32.768 0 45.269333l-88.746667 88.789333c11.52 56.96 35.84 115.285333 83.626667 162.730667a351.744 351.744 0 0 0 497.493333 0 32 32 0 0 1 45.226667 0c12.8 12.501333 12.8 32.768 0 45.269333-162.133333 162.389333-425.813333 162.389333-587.946667 0z m-98.986667-422.613333l31.146667 7.637333-31.146667-7.637333z\"\n p-id=\"6840\"\n ></path>\n </svg>\n</template>\n","<template>\n <svg\n class=\"icon\"\n style=\"width: 1em; height: 1em; vertical-align: middle; fill: currentColor; overflow: hidden\"\n viewBox=\"0 0 1024 1024\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n p-id=\"6198\"\n >\n <path\n d=\"M558.592 74.666667h120.149333c51.157333 0 92.416 0 125.226667 3.882666 33.92 4.053333 62.933333 12.629333 87.338667 32.853334 7.765333 6.4 14.890667 13.525333 21.290666 21.290666 20.224 24.405333 28.8 53.418667 32.853334 87.338667 3.882667 32.810667 3.882667 74.069333 3.882666 125.226667v120.149333c0 51.157333 0 92.416-3.882666 125.226667-4.053333 33.92-12.629333 62.933333-32.853334 87.338666-6.4 7.765333-13.525333 14.890667-21.290666 21.290667-24.405333 20.224-53.418667 28.8-87.338667 32.853333-19.626667 2.304-42.282667 3.242667-68.266667 3.626667a666.88 666.88 0 0 1-3.754666 68.565333c-4.224 34.688-13.226667 64.256-34.261334 88.917334-5.461333 6.4-11.392 12.330667-17.792 17.792-24.661333 21.034667-54.229333 30.037333-88.917333 34.261333-33.493333 4.053333-75.733333 4.053333-128.085333 4.053333H347.776c-52.352 0-94.592 0-128.085333-4.053333-34.688-4.224-64.256-13.226667-88.917334-34.261333a159.146667 159.146667 0 0 1-17.792-17.792c-21.034667-24.661333-30.037333-54.229333-34.261333-88.917334-4.053333-33.493333-4.053333-75.733333-4.053333-128.085333v-115.114667c0-52.352 0-94.592 4.053333-128.085333 4.224-34.688 13.226667-64.256 34.261333-88.917333a159.146667 159.146667 0 0 1 17.792-17.792c24.661333-21.034667 54.229333-30.037333 88.917334-34.261334a666.88 666.88 0 0 1 68.565333-3.754666c0.384-25.984 1.322667-48.64 3.626667-68.266667 4.053333-33.92 12.629333-62.933333 32.853333-87.338667 6.4-7.765333 13.525333-14.890667 21.290667-21.290666 24.405333-20.224 53.418667-28.8 87.338666-32.853334 32.810667-3.882667 74.069333-3.882667 125.226667-3.882666z m-206.336 213.333333h110.634667c52.352 0 94.592 0 128.085333 4.053333 34.688 4.224 64.256 13.226667 88.917333 34.261334 6.4 5.461333 12.330667 11.392 17.792 17.792 21.034667 24.661333 30.037333 54.229333 34.261334 88.917333 4.053333 33.493333 4.053333 75.733333 4.053333 128.085333v110.634667a601.173333 601.173333 0 0 0 60.416-3.2c27.818667-3.285333 43.008-9.386667 54.101333-18.56 4.650667-3.882667 8.96-8.149333 12.8-12.8 9.173333-11.093333 15.274667-26.282667 18.56-54.101333 3.413333-28.586667 3.456-66.005333 3.456-119.722667V347.306667c0-53.717333-0.042667-91.136-3.456-119.722667-3.285333-27.818667-9.386667-43.008-18.56-54.101333a98.048 98.048 0 0 0-12.8-12.8c-11.093333-9.173333-26.282667-15.274667-54.101333-18.56-28.586667-3.413333-66.005333-3.456-119.722667-3.456h-116.053333c-53.674667 0-91.136 0.042667-119.68 3.456-27.861333 3.285333-43.050667 9.386667-54.144 18.56a100.693333 100.693333 0 0 0-12.8 12.8c-9.173333 11.093333-15.274667 26.282667-18.56 54.101333-1.962667 16.64-2.816 36.309333-3.2 60.416zM172.330667 374.997333a96.853333 96.853333 0 0 0-10.666667 10.666667c-9.6 11.221333-15.957333 26.666667-19.413333 55.082667-3.541333 29.184-3.584 67.498667-3.584 122.453333v110.933333c0 54.954667 0.042667 93.269333 3.584 122.453334 3.456 28.416 9.813333 43.861333 19.413333 55.082666 3.285333 3.84 6.826667 7.381333 10.666667 10.666667 11.221333 9.6 26.666667 15.957333 55.082666 19.413333 29.184 3.541333 67.498667 3.584 122.453334 3.584h110.933333c54.954667 0 93.269333-0.042667 122.453333-3.584 28.416-3.456 43.861333-9.813333 55.082667-19.413333 3.84-3.285333 7.381333-6.826667 10.666667-10.666667 9.6-11.221333 15.957333-26.666667 19.413333-55.082666 3.541333-29.184 3.584-67.498667 3.584-122.453334v-110.933333c0-54.954667-0.042667-93.269333-3.584-122.453333-3.456-28.416-9.813333-43.861333-19.413333-55.082667a96.853333 96.853333 0 0 0-10.666667-10.666667c-11.221333-9.6-26.666667-15.957333-55.082667-19.413333-29.184-3.541333-67.498667-3.584-122.453333-3.584H349.866667c-54.954667 0-93.269333 0.042667-122.453334 3.584-28.416 3.456-43.861333 9.813333-55.082666 19.413333z\"\n p-id=\"6199\"\n ></path>\n </svg>\n</template>\n","<template>\n <svg\n class=\"icon\"\n style=\"width: 1em; height: 1em; vertical-align: middle; fill: currentColor; overflow: hidden\"\n viewBox=\"0 0 1024 1024\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n p-id=\"7079\"\n >\n <path\n d=\"M331.306667 205.525333l9.173333-54.656 0.512-3.029333c2.986667-17.749333 7.253333-43.776 24.618667-63.445333 20.224-22.954667 51.072-31.061333 90.496-31.061334h111.786666c39.893333 0 70.741333 8.746667 90.88 31.914667 17.322667 20.053333 21.546667 46.165333 24.32 63.616l0.426667 2.474667 9.386667 55.381333 0.042666 0.426667 0.085334 0.554666c68.821333 3.584 137.557333 8.789333 206.122666 15.616a32 32 0 1 1-6.314666 63.658667 4315.306667 4315.306667 0 0 0-424.362667-21.162667c-83.413333 0-166.826667 4.224-250.24 12.629334h-0.085333l-87.04 8.533333a32 32 0 1 1-6.229334-63.658667l86.997334-8.533333a2500.010667 2500.010667 0 0 1 119.466666-9.258667z m65.365333-2.688a2520.533333 2520.533333 0 0 1 71.808-1.024c53.034667 0 106.112 0.981333 159.146667 2.986667l-7.253334-43.050667c-3.584-21.888-5.845333-29.738667-9.984-34.517333-2.304-2.645333-10.282667-9.898667-42.496-9.898667h-111.786666c-32.682667 0-40.448 7.04-42.496 9.386667-3.925333 4.437333-6.144 11.946667-9.984 34.773333l-6.954667 41.344z m439.509333 189.184a32 32 0 1 0-63.829333-4.096l-27.733333 429.482667v0.085333c-1.237333 17.152-2.261333 30.805333-4.650667 42.666667-2.304 11.562667-5.546667 19.157333-9.728 24.618667-7.210667 9.386667-25.002667 21.888-81.28 21.888H375.04c-56.32 0-74.069333-12.501333-81.28-21.888-4.181333-5.461333-7.424-13.056-9.770667-24.618667-2.389333-11.861333-3.413333-25.514667-4.608-42.666667v-0.085333l-27.733333-429.482667a32 32 0 1 0-63.872 4.096l27.733333 429.653334 0.085334 0.981333c1.109333 16.085333 2.346667 33.706667 5.674666 50.133333 3.413333 17.066667 9.472 35.029333 21.76 50.986667 25.6 33.365333 69.248 46.890667 132.010667 46.890667h273.92c62.72 0 106.410667-13.525333 132.053333-46.890667 12.245333-15.957333 18.261333-33.92 21.717334-50.986667 3.285333-16.426667 4.522667-34.048 5.674666-50.133333l0.042667-0.810667 27.733333-429.824zM416 789.333333a32 32 0 0 1 32-32h128a32 32 0 0 1 0 64h-128a32 32 0 0 1-32-32z\"\n p-id=\"7080\"\n ></path>\n </svg>\n</template>\n","import { useClipboard } from '@vueuse/core';\nimport { Message } from '@arco-design/web-vue';\n\nconst useCopy = () => {\n // 复制KEY值\n const { copy, isSupported } = useClipboard({ legacy: true });\n const textCopyFun = (key: string, showMessage = true) => {\n if (!isSupported) {\n Message.error('您的浏览器不支持Clipboard API');\n return;\n }\n\n // @ts-ignore\n if (!window.microApp) {\n copy(key);\n } else {\n const input = document.createElement('input');\n document.body.appendChild(input);\n input.setAttribute('value', key);\n input.select();\n if (document.execCommand('copy')) {\n document.execCommand('copy');\n }\n document.body.removeChild(input);\n }\n\n showMessage && Message.success('复制成功');\n };\n\n return { textCopyFun };\n};\n\nexport default useCopy;\n","import type { PropType } from 'vue';\n\nimport { computed, defineComponent, inject, ref, watch } from 'vue';\nimport { useClipboard } from '@vueuse/core';\n\nimport { createComponentSpace, findClosestPara, isNullable } from '../../../../utils';\nimport {\n RefineContentState,\n RefineGenerateType,\n refineGeneratorKey,\n type RefineGeneratorContext,\n type RefineSingleContentContext,\n SEPARATOR,\n} from './context';\nimport Replace from './icons/replace.vue';\nimport Insert from './icons/insert.vue';\nimport Refresh from './icons/refresh.vue';\nimport Copy from './icons/copy.vue';\nimport Delete from './icons/delete.vue';\nimport { handlePaste } from '../../../../foundation/editorManager/paste';\nimport { EditorInjectionKey } from '../../editor/context';\nimport useCopy from '../../../hooks/use-copy';\nimport { PARAGRAPH_CLS } from '../../../../foundation/editorManager/editor';\n\nconst [bem] = createComponentSpace('refine-content');\n\nconst RefineContent = defineComponent({\n name: 'RefineContent',\n props: {\n modelValue: {\n type: Array as PropType<RefineSingleContentContext[]>,\n default: () => [],\n },\n },\n emits: {\n 'update:modelValue': (val: string) => true,\n },\n setup: (props) => {\n // 通过 inject 注入顶层API\n const editorCtx = inject(EditorInjectionKey);\n const ctx = (inject(refineGeneratorKey) ?? {}) as RefineGeneratorContext;\n\n // const { copy } = useClipboard({ legacy: true });\n const { textCopyFun: copy } = useCopy();\n\n const visible = computed(() => {\n return (\n ctx?.contentVisible.value && props.modelValue[props.modelValue.length - 1]?.content?.length\n );\n });\n\n const onReplace = () => {\n if (isNullable(editorCtx) || isNullable(editorCtx.editorCore.value)) return;\n\n ctx.revertRange();\n handlePaste(\n editorCtx?.editorCore.value,\n (ctx.activedContent.value?.content ?? '').split(SEPARATOR)\n );\n ctx.setVisible(false);\n };\n const onInsert = () => {\n if (isNullable(editorCtx) || isNullable(editorCtx.editorCore.value)) return;\n\n const createParagraph = (text: string) => {\n const newContentPara = document.createElement('p');\n newContentPara.textContent = text;\n newContentPara.classList.add(PARAGRAPH_CLS);\n\n return newContentPara;\n };\n\n ctx.revertRange();\n const { range } = editorCtx.editorCore.value.cursor;\n\n if (isNullable(range)) return;\n\n // 找到当前选区 endContainer 所在的 <p> 元素\n const endP = findClosestPara(range.endContainer as HTMLElement);\n\n if (isNullable(endP) || isNullable(endP.parentNode)) return;\n\n // 创建一个 Range,从选区末尾到 p 标签末尾\n const splitRange = document.createRange();\n splitRange.setStart(range.endContainer, range.endOffset);\n splitRange.setEndAfter(endP);\n\n // 抽取后半部分\n const afterFragment = splitRange.extractContents();\n\n // 创建新的 <p> 放插入文本\n const contents = (ctx.activedContent.value?.content ?? '').split(SEPARATOR);\n const insertParasFragment = document.createDocumentFragment();\n contents.forEach((content) => {\n insertParasFragment.appendChild(createParagraph(content));\n });\n const insertLastP = insertParasFragment.lastChild as HTMLElement;\n\n // 插入顺序:endP -> insertParasFragment -> afterP\n const parent = endP.parentNode;\n parent.insertBefore(insertParasFragment, endP.nextSibling);\n parent.insertBefore(afterFragment, insertLastP.nextSibling);\n\n // 光标移动到插入的文本末尾\n const sel = window.getSelection();\n if (!sel) return;\n\n const newRange = document.createRange();\n newRange.selectNodeContents(insertLastP);\n newRange.collapse(false);\n sel.removeAllRanges();\n sel.addRange(newRange);\n\n ctx.setVisible(false);\n };\n const onDelete = () => {\n const { content, contentPage, setRefineContent, setActivedRefineContent, setContentPage } =\n ctx;\n const newContent = content.value.filter((_, index) => index !== contentPage.value - 1);\n const newContentPage = newContent[contentPage.value - 1]\n ? contentPage.value\n : contentPage.value - 1;\n\n setContentPage(newContentPage);\n setRefineContent(newContent);\n setActivedRefineContent(content.value[contentPage.value - 1]);\n };\n\n const contentSectionRef = ref<HTMLElement>();\n\n watch(\n () => ctx?.activedContent.value?.content,\n () => {\n if (!contentSectionRef.value) return;\n\n contentSectionRef.value.scrollTo({\n top: contentSectionRef.value.scrollHeight,\n behavior: 'smooth', // 平滑滚动\n });\n },\n { immediate: true }\n );\n\n return () => (\n <div class={bem()} style={{ display: visible.value ? 'block' : 'none' }}>\n {/* content */}\n <section\n ref={contentSectionRef}\n v-html={ctx?.activedContent.value?.content}\n class={bem('content')}\n ></section>\n {/* operation */}\n <a-space\n class={bem('operation')}\n style={{\n display: ctx?.contentState.value === RefineContentState.未生成 ? 'flex' : 'none',\n }}\n fill\n >\n <a-space>\n <a-button onClick={onReplace}>\n {{\n default: () => '替换',\n icon: () => <Replace></Replace>,\n }}\n </a-button>\n <a-button onClick={onInsert}>\n {{\n default: () => '插入',\n icon: () => <Insert></Insert>,\n }}\n </a-button>\n </a-space>\n\n <a-space>\n {props.modelValue.length > 1 &&\n ctx?.contentState.value === RefineContentState.未生成 ? (\n <a-pagination\n v-model:current={ctx!.contentPage.value}\n total={props.modelValue.length}\n pageSize={1}\n showJumper={false}\n simple\n onChange={() =>\n ctx.setActivedRefineContent(ctx.content.value[ctx.contentPage.value - 1])\n }\n />\n ) : null}\n <a-button\n onClick={() => {\n ctx.setShortVisible(false);\n ctx?.genRefineContent({ generateType: RefineGenerateType.刷新 });\n }}\n >\n {{ icon: () => <Refresh></Refresh> }}\n </a-button>\n <a-button\n onClick={() =>\n copy((ctx?.activedContent.value?.content ?? '').replaceAll(SEPARATOR, '\\n\\n'))\n }\n >\n {{ icon: () => <Copy></Copy> }}\n </a-button>\n <a-button onClick={onDelete}>{{ icon: () => <Delete></Delete> }}</a-button>\n </a-space>\n </a-space>\n </div>\n );\n },\n});\n\nexport default RefineContent;\n","<template>\n <svg\n class=\"icon\"\n style=\"width: 1em; height: 1em; vertical-align: middle; fill: currentColor; overflow: hidden\"\n viewBox=\"0 0 1024 1024\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n p-id=\"2837\"\n >\n <path\n d=\"M956.330667 214.058667c-4.309333 15.872-10.965333 35.754667-19.2 60.501333l-189.013334 566.954667c-7.509333 22.528-13.525333 40.746667-18.986666 54.528-5.248 13.226667-11.52 26.88-21.12 36.906666a96.085333 96.085333 0 0 1-130.773334 7.509334c-10.709333-8.917333-18.517333-21.674667-25.216-34.261334a1147.818667 1147.818667 0 0 1-25.173333-51.925333l-113.578667-243.541333-243.541333-113.621334a1146.282667 1146.282667 0 0 1-51.925333-25.130666c-12.586667-6.741333-25.386667-14.506667-34.261334-25.173334a96.085333 96.085333 0 0 1 7.509334-130.816c10.069333-9.6 23.68-15.872 36.906666-21.12 13.781333-5.461333 32-11.52 54.485334-19.029333l566.954666-188.970667c24.746667-8.234667 44.672-14.890667 60.544-19.2 15.744-4.266667 31.104-7.253333 45.824-5.973333a117.333333 117.333333 0 0 1 106.581334 106.538667c1.28 14.72-1.749333 30.08-6.016 45.824z m-129.621334-84.608c-13.909333 3.754667-32.085333 9.813333-58.026666 18.474666L203.648 336.256a1133.653333 1133.653333 0 0 0-52.138667 18.133333 114.261333 114.261333 0 0 0-12.8 5.717334 20.48 20.48 0 0 0-3.456 2.176 32 32 0 0 0-2.474666 43.562666c0.085333 0.085333 0.853333 0.938667 3.2 2.56 2.645333 1.834667 6.4 4.138667 12.032 7.125334a1139.2 1139.2 0 0 0 49.706666 24.021333l232.832 108.629333 150.058667-150.058666a32 32 0 1 1 45.226667 45.226666l-150.016 150.101334 108.629333 232.832c10.581333 22.656 17.92 38.4 24.021333 49.706666 2.986667 5.589333 5.248 9.386667 7.125334 12.032a21.461333 21.461333 0 0 0 2.56 3.2 31.957333 31.957333 0 0 0 43.52-2.517333 18.730667 18.730667 0 0 0 2.218666-3.413333c1.493333-2.858667 3.370667-6.912 5.717334-12.8 4.693333-11.946667 10.24-28.458667 18.133333-52.138667l188.330667-565.034667c8.661333-25.941333 14.72-44.117333 18.474666-58.026666 3.84-14.250667 4.266667-20.48 4.053334-23.424a53.333333 53.333333 0 0 0-48.469334-48.469334c-2.901333-0.256-9.173333 0.170667-23.466666 4.053334z\"\n p-id=\"2838\"\n ></path>\n </svg>\n</template>\n","<template>\n <svg\n class=\"icon\"\n style=\"width: 1em; height: 1em; vertical-align: middle; fill: currentColor; overflow: hidden\"\n viewBox=\"0 0 1024 1024\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n p-id=\"2807\"\n >\n <path\n d=\"M453.333333 170.666667h117.333334c58.538667 0 105.258667 0 141.909333 4.864 37.888 5.077333 69.12 15.786667 93.952 40.192a39.04 39.04 0 0 0 1.749333 1.706666c24.448 24.917333 35.114667 56.106667 40.192 93.994667 4.864 36.693333 4.864 83.370667 4.864 141.909333v117.333334c0 58.538667 0 105.258667-4.864 141.909333-5.077333 37.888-15.786667 69.12-40.192 93.952a38.485333 38.485333 0 0 0-1.706666 1.749333c-24.917333 24.448-56.106667 35.114667-93.994667 40.192-36.693333 4.864-83.370667 4.864-141.909333 4.864h-117.333334c-58.538667 0-105.258667 0-141.909333-4.864-37.888-5.077333-69.12-15.786667-93.952-40.192a39.04 39.04 0 0 0-1.749333-1.706666c-24.448-24.917333-35.114667-56.106667-40.192-93.994667C170.666667 675.882667 170.666667 629.205333 170.666667 570.666667v-117.333334c0-58.538667 0-105.258667 4.864-141.909333 5.077333-37.888 15.786667-69.12 40.192-93.952a39.594667 39.594667 0 0 0 1.706666-1.749333c24.917333-24.448 56.106667-35.114667 93.994667-40.192C348.117333 170.666667 394.794667 170.666667 453.333333 170.666667z\"\n p-id=\"2808\"\n ></path>\n </svg>\n</template>\n","<template>\n <svg\n class=\"icon\"\n style=\"width: 1em; height: 1em; vertical-align: middle; fill: currentColor; overflow: hidden\"\n viewBox=\"0 0 1024 1024\"\n version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\"\n p-id=\"5416\"\n >\n <path\n d=\"M56.832 244.928C44.16 240.704 35.84 228.096 40 215.488a32.768 32.768 0 0 1 16.832-16.768l88.192-33.6a50.752 50.752 0 0 0 29.44-29.44L208 47.616c4.16-12.608 16.768-21.056 29.44-16.832 12.544 8.384 16.768 12.608 20.928 20.992l33.6 88.192a50.752 50.752 0 0 0 29.44 29.44L409.6 202.88c12.608 4.16 20.992 16.768 16.832 29.44a32.768 32.768 0 0 1-16.832 16.768l-92.416 29.376a50.752 50.752 0 0 0-29.44 29.44L254.336 396.16c-4.224 12.544-16.832 20.992-29.44 16.768a32.768 32.768 0 0 1-16.768-16.768L174.464 307.84a50.752 50.752 0 0 0-29.44-29.376L56.832 244.928z m690.368 268.032l-58.816-159.616c-4.16-12.608-12.608-20.992-20.992-29.44-20.992-8.32-46.208 4.224-54.592 25.216L553.984 508.8a75.712 75.712 0 0 1-50.432 50.432l-159.616 58.816a37.888 37.888 0 0 0-25.152 25.152c-8.448 20.992 4.16 46.208 25.152 54.592l155.456 58.88c25.216 8.32 41.984 25.152 50.368 50.368l58.88 159.616a37.888 37.888 0 0 0 25.152 25.152c20.992 8.448 46.208-4.16 54.592-25.152l58.88-155.456c8.32-25.152 25.152-41.984 50.368-50.368l159.616-58.816a37.888 37.888 0 0 0 25.216-25.216c8.384-20.992-4.224-46.208-25.216-54.592l-159.616-58.816q-37.76-12.544-50.432-50.368z\"\n p-id=\"5417\"\n ></path>\n </svg>\n</template>\n","import { computed, defineComponent, inject } from 'vue';\n\nimport { createComponentSpace } from '../../../../utils';\nimport {\n RefineContentState,\n RefineGenerateType,\n refineGeneratorKey,\n type RefineGeneratorContext,\n} from './context';\nimport Send from './icons/send.vue';\nimport Abort from './icons/abort.vue';\nimport Prefix from './icons/prefix.vue';\nimport { EditorContext, EditorInjectionKey } from '../../editor/context';\n\nconst [bem] = createComponentSpace('refine-input');\n\nconst RefineInput = defineComponent({\n name: 'RefineInput',\n props: {\n modelValue: {\n type: String,\n default: undefined,\n },\n },\n emits: {\n 'update:modelValue': (val: string | undefined) => true,\n },\n setup: (props, { emit }) => {\n const ctx = (inject(refineGeneratorKey) ?? {}) as RefineGeneratorContext;\n\n const placeholderText = computed(() => {\n return ctx?.contentState.value === RefineContentState.未生成\n ? '请输入优化文本的指令'\n : 'AI撰写中...';\n });\n const allowSend = computed(() => {\n return ctx?.prompt.value?.length;\n });\n\n const send = () => {\n if (!allowSend.value) return;\n\n ctx.setShortVisible(false);\n ctx?.genRefineContent({ generateType: RefineGenerateType.重置, prompt: props.modelValue });\n };\n\n return () => (\n <div\n class={bem('', {\n generating: !!ctx?.generating.value,\n contentable: !!ctx.content.value.length,\n })}\n >\n <a-input\n modelValue={props.modelValue}\n disabled={ctx?.generating.value}\n placeholder={placeholderText.value}\n onInput={(val: string) => emit('update:modelValue', val)}\n onPressEnter={send}\n >\n {{\n prefix: () => (\n <span>\n <Prefix style={{ color: 'rgba(var(--primary-6))', fontSize: '16px' }}></Prefix>\n </span>\n ),\n suffix: () => (\n <span\n class={bem('send', {\n disabled:\n !ctx?.prompt.value?.length &&\n [RefineContentState.未生成, RefineContentState.生成结束].includes(\n ctx.contentState.value\n ),\n })}\n onClick={() =>\n ctx?.contentState.value === RefineContentState.未生成\n ? send()\n : ctx.abortSession()\n }\n >\n {ctx?.contentState.value === RefineContentState.未生成 ? (\n <Send style={{ fontSize: '24px' }}></Send>\n ) : (\n <Abort style={{ fontSize: '24px' }}></Abort>\n )}\n </span>\n ),\n }}\n </a-input>\n </div>\n );\n },\n});\n\nexport default RefineInput;\n","import { defineComponent, inject } from 'vue';\nimport { useToggle, noop } from '@vueuse/core';\nimport { IconRight } from '@arco-design/web-vue/es/icon';\n\nimport {\n RefineGenerateType,\n RefineGeneratorContext,\n ShortcutPosEnum,\n SubShortcutPosEnum,\n refineGeneratorKey,\n refineShortcutOptions,\n} from './context';\nimport { createComponentSpace } from '../../../../utils';\nimport { useState } from '../../../hooks/use-state';\n\ntype ShortcutOption = (typeof refineShortcutOptions)[0];\n\nconst [bem] = createComponentSpace('refine-shortcut');\n\nconst SHORTCUT_ITEM_HEIGHT = 32;\nconst SHORTCUT_BOX_PADDING = 8;\n\nconst RefineShortcut = defineComponent({\n name: 'RefineShortcut',\n props: {},\n emits: {},\n setup: () => {\n const ctx = inject(refineGeneratorKey) as RefineGeneratorContext;\n\n const handleShortcutClick = (option: ShortcutOption, _: number) => {\n if (option.children?.length) return;\n\n ctx?.setShortVisible(false);\n ctx?.genRefineContent({ generateType: RefineGenerateType.重置, shortcutType: option.value });\n };\n const handleShortcutHover = (option: ShortcutOption, index: number) => {\n if (!option.children?.length) return;\n\n if (ctx.shortcutPosition.value === ShortcutPosEnum.底部) {\n const containerHeight = Number.parseFloat(getComputedStyle(ctx.scrollElm.value!).height);\n const containerScrollTop = ctx.scrollElm.value?.scrollTop ?? 0;\n const containerScrollHeight = containerHeight + containerScrollTop;\n const generatorTop = Number.parseFloat(getComputedStyle(ctx.refineGeneratorRef.value!).top);\n const generatorHeight = Number.parseFloat(\n getComputedStyle(ctx.refineGeneratorRef.value!).height\n );\n const shortcutHeight =\n refineShortcutOptions.length * SHORTCUT_ITEM_HEIGHT + SHORTCUT_BOX_PADDING * 2;\n const subShortcutHeight = option.children.length * SHORTCUT_ITEM_HEIGHT;\n const subShortcutTransformHeight =\n (refineShortcutOptions.length - index) * SHORTCUT_ITEM_HEIGHT + SHORTCUT_BOX_PADDING;\n\n const subShortcutScrollHeight =\n // 弹窗定位 + 高度\n generatorTop +\n generatorHeight +\n // 指令列表高度 + marginTop 8px\n shortcutHeight +\n 8 +\n // 子指令列表高度 + bottomTop 8px\n subShortcutHeight +\n SHORTCUT_BOX_PADDING -\n // 子指令列表移动距离 + 指令列表 paddingTop 8px\n subShortcutTransformHeight;\n\n ctx.setSubShortcutPosition(\n containerScrollHeight > subShortcutScrollHeight\n ? SubShortcutPosEnum.顶部对齐\n : SubShortcutPosEnum.底部对齐\n );\n } else {\n ctx.setSubShortcutPosition(SubShortcutPosEnum.底部对齐);\n }\n\n setSubShortcutActivedIndex(index);\n setSubShortcutVisible(true);\n };\n\n const [subShortcutVisible, setSubShortcutVisible] = useToggle();\n const [subShortcutActivedIndex, setSubShortcutActivedIndex] = useState<number>(-1);\n\n return () => {\n const renderShortcut = (option: ShortcutOption, index: number, listenMouseMove = true) => {\n return (\n <>\n <li\n class={bem('shortcut-item')}\n onClick={() => handleShortcutClick(option, index)}\n onMouseenter={listenMouseMove ? () => handleShortcutHover(option, index) : noop}\n onMouseleave={listenMouseMove ? () => setSubShortcutVisible(false) : noop}\n >\n <a-space style=\"justify-content: space-between\" fill>\n <a-space size={12}>\n <option.icon></option.icon>\n <span>\n {option.label}\n {/* {listenMouseMove\n ? `${ctx?.generatorPosition.value}${ctx?.shortcutPosition.value}${ctx?.subShortcutPosition.value}`\n : null} */}\n </span>\n </a-space>\n {option.children?.length ? <IconRight></IconRight> : null}\n </a-space>\n </li>\n {option.children?.length ? (\n <div\n class=\"sub-wrapper\"\n style={{\n display:\n subShortcutVisible.value && subShortcutActivedIndex.value === index\n ? 'block'\n : 'none',\n // top: `${32 * index - 8}px`,\n top:\n ctx.subShortcutPosition.value === SubShortcutPosEnum.顶部对齐\n ? `${0 + SHORTCUT_ITEM_HEIGHT * index}px`\n : `${0 + (index + 1 - option.children.length) * SHORTCUT_ITEM_HEIGHT}px`,\n padding: ctx.shortcutPosition.value === ShortcutPosEnum.底部 ? '8px' : '0 8px',\n }}\n onMouseenter={() => setSubShortcutVisible(true)}\n onMouseleave={() => setSubShortcutVisible(false)}\n >\n <ul\n class={bem('shortcut', 'sub')}\n style={{ padding: `${SHORTCUT_BOX_PADDING}px 0` }}\n >\n {option.children?.map((option, index) => renderShortcut(option, index, false))}\n </ul>\n </div>\n ) : null}\n </>\n );\n };\n\n const render = () => {\n return (\n <div\n class={bem()}\n style={{\n display: ctx?.shortcutVisible.value ? 'block' : 'none',\n top: ctx.shortcutPosition.value === ShortcutPosEnum.底部 ? 'unset' : '-152px',\n }}\n >\n <ul\n class={bem('shortcut')}\n style={{\n margin:\n ctx.shortcutPosition.value === ShortcutPosEnum.底部\n ? '8px 0 0 5px'\n : '0 0 8px 5px',\n padding: `${SHORTCUT_BOX_PADDING}px 0`,\n }}\n >\n {refineShortcutOptions.map((option, index) => renderShortcut(option, index))}\n </ul>\n </div>\n );\n };\n\n return render();\n };\n },\n});\n\nexport default RefineShortcut;\n","import { CSSProperties, defineComponent, inject, nextTick, onMounted, onUnmounted, ref } from 'vue';\n\nimport { RefineGeneratorContext, refineGeneratorKey } from './context';\nimport { EditorContext, EditorInjectionKey } from '../../editor/context';\nimport {\n createComponentSpace,\n isNullable,\n positionPopupUnderSpan,\n withRaf,\n} from '../../../../utils';\nimport { useState } from '../../../hooks/use-state';\nimport useCopy from '../../../hooks/use-copy';\nimport Prefix from './icons/prefix.vue';\nimport Copy from './icons/copy.vue';\n\nconst [bem] = createComponentSpace('refine-toolbar');\n\nconst RefineToolbar = defineComponent({\n name: 'RefineToolbar',\n props: {},\n emits: {},\n setup: () => {\n const editorCtx = inject(EditorInjectionKey) as EditorContext;\n const ctx = inject(refineGeneratorKey) as RefineGeneratorContext;\n\n const refineToolbarRef = ref<HTMLDivElement>();\n const [refineToolbarVisible, setRefineToolbarVisible] = useState<boolean>(false, (_visible) => {\n if (_visible) return;\n\n setRefineToolbarPos({ zIndex: -10 });\n });\n const [refineToolbarPos, setRefineToolbarPos] = useState<CSSProperties>({ zIndex: -10 });\n let mouseDownTarget: MouseEvent;\n\n const calcRefineToolbarPos = async () => {\n // 鼠标在选区范围内 mouseup 时,\n // 等待选区range更新后再执行显隐计算逻辑\n await new Promise((resolve) => setTimeout(resolve, 100));\n\n if (isNullable(editorCtx) || isNullable(editorCtx.editorCore.value)) return;\n\n const { cursor } = editorCtx.editorCore.value;\n\n if (\n // 空选区\n isNullable(cursor.range) ||\n // 无范围选区\n cursor.isCaret() ||\n // 未在编辑器区域划选选区\n !cursor.isRangeInEditor() ||\n // 调优组件可见时,工具栏隐藏\n ctx.visible.value\n )\n return;\n\n const position = positionPopupUnderSpan(\n ctx.scrollElm.value?.getBoundingClientRect(),\n cursor.range.getBoundingClientRect(),\n 10\n );\n const minLeft = 0;\n const maxLeft =\n // 容器宽度\n ctx.scrollElm.value!.getBoundingClientRect().width -\n // 工具栏宽度\n 172 -\n // 容器内边距\n 16;\n const left = position.left + (position.width - 172) / 2;\n\n setRefineToolbarPos({\n top: `${position.top + (ctx.scrollElm.value?.scrollTop ?? 0)}px`,\n left: `${left <= 0 ? minLeft : left >= maxLeft ? maxLeft : left}px`,\n });\n };\n const handleRefineToolbarHide = (event: Event) => {\n mouseDownTarget = event as MouseEvent;\n\n if (!refineToolbarVisible.value) return;\n if (refineToolbarRef.value?.contains(event.target as HTMLElement)) return;\n\n ctx.unhighlightRange();\n setRefineToolbarVisible(false);\n };\n const handleRefineToolbarShow = async (_: Event) => {\n // 鼠标在选区范围内 mouseup 时,\n // 等待选区range更新后再执行显隐计算逻辑\n await new Promise((resolve) => setTimeout(resolve, 100));\n\n if (isNullable(editorCtx) || isNullable(editorCtx.editorCore.value)) return;\n\n const { cursor } = editorCtx.editorCore.value;\n\n if (\n // 空选区\n isNullable(cursor.range) ||\n // 无范围选区\n cursor.isCaret() ||\n // 未在编辑器区域划选选区\n !cursor.isRangeInEditor() ||\n // 调优组件可见时,工具栏隐藏\n ctx.visible.value\n ) {\n setRefineToolbarVisible(false);\n\n return;\n }\n\n calcRefineToolbarPos();\n setRefineToolbarVisible(true);\n };\n const handleRefineToolbarScroll = withRaf(() => {\n if (!refineToolbarVisible.value) return;\n\n calcRefineToolbarPos();\n });\n const handleSelectionChange = withRaf(async (event: Event) => {\n if (!refineToolbarVisible.value) return;\n if (refineToolbarRef.value?.contains(mouseDownTarget.target as HTMLElement)) return;\n\n const cursor = editorCtx?.editorCore.value?.cursor;\n\n if (\n // 空上下文\n isNullable(editorCtx) ||\n // 空编辑器实例\n isNullable(editorCtx.editorCore.value) ||\n // 空选区\n isNullable(cursor?.range) ||\n // 无范围选区\n cursor?.isCaret() ||\n // 未在编辑器区域划选选区\n !cursor?.isRangeInEditor() ||\n // 调优组件可见时,工具栏隐藏\n ctx.visible.value\n ) {\n setRefineToolbarVisible(false);\n }\n });\n\n onMounted(() => {\n document.addEventListener('mousedown', handleRefineToolbarHide);\n document.addEventListener('mouseup', handleRefineToolbarShow);\n document.addEventListener('selectionchange', handleSelectionChange);\n ctx.scrollElm.value?.addEventListener('scroll', handleRefineToolbarScroll);\n });\n onUnmounted(() => {\n document.removeEventListener('mousedown', handleRefineToolbarHide);\n document.removeEventListener('mouseup', handleRefineToolbarShow);\n document.removeEventListener('selectionchange', handleSelectionChange);\n ctx.scrollElm.value?.removeEventListener('scroll', handleRefineToolbarScroll);\n });\n\n const onRefine = () => {\n ctx.highlightRange();\n setRefineToolbarVisible(false);\n ctx.showRefineGenerator();\n nextTick(() => {\n ctx.calcModalPosition();\n });\n };\n\n const { textCopyFun: copy } = useCopy();\n const onCopy = () => {\n copy(editorCtx.editorCore.value?.cursor.getRangeContent() ?? '');\n setRefineToolbarVisible(false);\n };\n\n return () => (\n <div\n ref={refineToolbarRef}\n class={bem()}\n style={{ ...refineToolbarPos.value, display: refineToolbarVisible.value ? 'flex' : 'none' }}\n >\n <div class={bem('item', 'refine')} onClick={onRefine}>\n <Prefix style={{ color: 'rgba(var(--primary-6))', fontSize: '16px' }}></Prefix>\n AI改写\n </div>\n <a-divider direction=\"vertical\" margin=\"4px\"></a-divider>\n <div class={bem('item', 'copy')} onClick={onCopy}>\n <Copy style={{ fontSize: '16px' }}></Copy>\n 复制\n </div>\n </div>\n );\n },\n});\n\nexport default RefineToolbar;\n","import { inject, onMounted, onUnmounted } from 'vue';\nimport { useState } from '../../../hooks/use-state';\nimport {\n GeneratorPosEnum,\n RefineGeneratorContext,\n ShortcutPosEnum,\n SubShortcutPosEnum,\n} from './context';\nimport { EditorContext, EditorInjectionKey } from '../../editor/context';\nimport { withRaf } from '../../../../utils';\n\nconst shortcutHeight = 144;\n// 40 属于顶部对齐高度\nconst subShortcutHeight = 240 - 40;\n\nexport const useModalPos = (\n ctx: Omit<\n RefineGeneratorContext,\n | 'generatorPosition'\n | 'shortcutPosition'\n | 'subShortcutPosition'\n | 'setGeneratorPosition'\n | 'setShortcutPosition'\n | 'setSubShortcutPosition'\n | 'calcModalPosition'\n >\n) => {\n const editorCtx = inject(EditorInjectionKey) as EditorContext;\n const { refineGeneratorRef, scrollElm } = ctx;\n\n const [generatorPosition, setGeneratorPosition] = useState<GeneratorPosEnum>(\n GeneratorPosEnum.底部\n );\n const [shortcutPosition, setShortcutPosition] = useState<ShortcutPosEnum>(ShortcutPosEnum.底部);\n const [subShortcutPosition, setSubShortcutPosition] = useState<SubShortcutPosEnum>(\n SubShortcutPosEnum.顶部对齐\n );\n\n const calcModalPosition = () => {\n // 调优弹窗不可见时,不需要计算位置信息\n if (!ctx.visible.value) return;\n\n const target = ctx.scrollElm.value as HTMLElement;\n const targetHeight = Number.parseFloat(getComputedStyle(target).height);\n const targetScrollTop = target.scrollTop;\n const targetScrollHeight = targetScrollTop + targetHeight;\n\n const generatorTop = Number.parseFloat(getComputedStyle(refineGeneratorRef.value!).top);\n const generatorHeight = Number.parseFloat(\n getComputedStyle(ctx.refineGeneratorRef.value!).height\n );\n\n // console.log(\n // '---handleModalPositionByScroll ',\n // `\n // generatorPosition: ${\n // targetScrollHeight > generatorTop + generatorHeight\n // ? GeneratorPosEnum.底部\n // : GeneratorPosEnum.顶部\n // }\n // shortcutPosition: ${\n // targetScrollHeight > generatorTop + generatorHeight + shortcutHeight\n // ? ShortcutPosEnum.底部\n // : ShortcutPosEnum.顶部\n // }\n // subShortcutPosition: ${\n // targetScrollHeight > generatorTop + generatorHeight + shortcutHeight + subShortcutHeight\n // ? SubShortcutPosEnum.顶部对齐\n // : SubShortcutPosEnum.底部对齐\n // }\n // `\n // );\n\n setGeneratorPosition(\n targetScrollHeight > generatorTop + generatorHeight\n ? GeneratorPosEnum.底部\n : GeneratorPosEnum.顶部\n );\n setShortcutPosition(\n targetScrollHeight > generatorTop + generatorHeight + shortcutHeight + 8\n ? ShortcutPosEnum.底部\n : ShortcutPosEnum.顶部\n );\n setSubShortcutPosition(\n targetScrollHeight > generatorTop + generatorHeight + shortcutHeight + subShortcutHeight\n ? SubShortcutPosEnum.顶部对齐\n : SubShortcutPosEnum.底部对齐\n );\n };\n\n const handleModalPositionByScroll = withRaf(calcModalPosition);\n\n onMounted(() => {\n scrollElm.value?.addEventListener('scroll', handleModalPositionByScroll);\n });\n onUnmounted(() => {\n scrollElm.value?.removeEventListener('scroll', handleModalPositionByScroll);\n });\n\n return {\n generatorPosition,\n shortcutPosition,\n subShortcutPosition,\n\n setGeneratorPosition,\n setShortcutPosition,\n setSubShortcutPosition,\n calcModalPosition,\n };\n};\n","import type {\n GenContentParams,\n RefineGeneratorContext,\n RefineSingleContentContext,\n} from './context';\n\nimport {\n CSSProperties,\n defineComponent,\n inject,\n nextTick,\n onMounted,\n onUnmounted,\n provide,\n ref,\n} from 'vue';\nimport { useToggle } from '@vueuse/core';\nimport { isNumber } from '@linker-design/utils';\nimport { v4 as uuidv4 } from 'uuid';\n\nimport {\n createComponentSpace,\n isNullable,\n positionPopupUnderSpan,\n withRaf,\n} from '../../../../utils';\nimport { useState } from '../../../hooks/use-state';\nimport { EditorContext, EditorInjectionKey } from '../../editor/context';\nimport { RefineContentState, RefineGenerateType, SEPARATOR, refineGeneratorKey } from './context';\nimport { CLASS_RANGE_HIGHLIGHT, useRangeHighlight } from './use-range-highlight';\nimport RefineContent from './RefineContent';\nimport RefineInput from './RefineInput';\nimport RefineShortcut from './RefineShortcut';\nimport RefineToolbar from './RefineToolbar';\nimport { useModalPos } from './use-modal-pos';\n\nconst [bem] = createComponentSpace('refine-generator');\n\nconst RefineGenerator = defineComponent({\n name: 'RefineGenerator',\n props: {\n width: {\n type: [Number, String],\n default: '100%',\n },\n },\n emits: {},\n setup: (props) => {\n const { highlightRange, unhighlightRange, revertRange } = useRangeHighlight();\n\n // 通过 inject 注入顶层API\n const editorCtx = inject(EditorInjectionKey) as EditorContext;\n\n const {\n agentId,\n createSession,\n sendSessionMessage,\n abortSession: _abortSession,\n } = editorCtx.refineContext!;\n const [sessionId, setSessionId] = useState<string | undefined>(undefined);\n const abortSession = () => {\n sendSessionMessage.abort();\n return _abortSession({ sessionId: sessionId.value });\n };\n\n const refineGeneratorRef = ref<HTMLDivElement>();\n const [refineGeneratorPosStyle, setRefineGeneratorPosStyle] = useState<CSSProperties>({\n zIndex: -10,\n });\n const [visible, setVisible] = useState<boolean>(false, (_visible) => {\n if (_visible) return;\n\n // 正在生成时,终止会话流式输出\n sessionId.value &&\n [RefineContentState.等待生成, RefineContentState.正在生成].includes(\n refineContentState.value\n ) &&\n abortSession();\n setSessionId(undefined);\n setRefineGenerating(false);\n setRefinePrompt(undefined);\n setRefineContentVisible(false);\n setRefineContentState(RefineContentState.未生成);\n setRefineContentPage(0);\n setRefineContent([]);\n setActivedRefineContent(undefined);\n setRefineShortcutVisible(true);\n setRefineGeneratorPosStyle({ zIndex: -10 });\n });\n\n const calcRefineGeneratorPos = () => {\n if (isNullable(editorCtx) || isNullable(editorCtx.editorCore.value)) return;\n\n // 显示在选区位置正下方\n const position = positionPopupUnderSpan(\n scrollElm.value?.getBoundingClientRect(),\n (\n Array.from(\n editorCtx.editorCore.value._editorElement.querySelectorAll('.tag-range-highlight')\n ).pop() as HTMLElement\n )?.getBoundingClientRect(),\n 1\n );\n\n setRefineGeneratorPosStyle({\n top: `${position.top + (scrollElm.value?.scrollTop ?? 0)}px`,\n left: 0,\n width: `${editorCtx.editorCore.value?._editorElement.offsetWidth}px`,\n });\n };\n const handleSelectionChange = () => {\n if (isNullable(editorCtx) || isNullable(editorCtx.editorCore.value)) return;\n calcRefineGeneratorPos();\n setVisible(true);\n };\n const handleRefineGeneratorShow = (event: Event) => {\n if (!visible.value) return;\n if (refineGeneratorRef.value?.contains(event.target as HTMLElement)) return;\n\n unhighlightRange();\n setVisible(false);\n };\n\n const handleRefineGeneratorScroll = withRaf(() => {\n if (!visible.value) return;\n\n calcRefineGeneratorPos();\n });\n\n const [scrollElm, setScrollElm] = useState<HTMLElement | undefined>(undefined);\n onMounted(() => {\n setScrollElm(document.body.querySelector('.c-editor-container--refinable') as HTMLElement);\n document.addEventListener('mousedown', handleRefineGeneratorShow);\n scrollElm.value?.addEventListener('scroll', handleRefineGeneratorScroll);\n });\n onUnmounted(() => {\n document.removeEventListener('mousedown', handleRefineGeneratorShow);\n scrollElm.value?.removeEventListener('scroll', handleRefineGeneratorScroll);\n });\n\n const computedWidth = isNumber(props.width) ? `${props.width}px` : props.width;\n\n const [refineGenerating, setRefineGenerating] = useToggle();\n const [refinePrompt, setRefinePrompt] = useState<string | undefined>(undefined);\n const [refineShortcutVisible, setRefineShortcutVisible] = useToggle(true);\n\n const [refineContentVisible, setRefineContentVisible] = useToggle();\n const [refineContentState, setRefineContentState] = useState<RefineContentState>(\n RefineContentState.未生成\n );\n const [refineContentPage, setRefineContentPage] = useState<number>(0);\n const [refineContent, setRefineContent] = useState<RefineSingleContentContext[]>([]);\n const [activedRefineContent, setActivedRefineContent] = useState<\n RefineSingleContentContext | undefined\n >(undefined);\n\n const genContent = async (data?: GenContentParams) => {\n if (refineGenerating.value) return;\n\n setRefineGenerating(true);\n setRefinePrompt(undefined);\n setRefineContent(\n data?.generateType === RefineGenerateType.刷新\n ? [\n ...refineContent.value,\n { ...refineContent.value[refineContentPage.value - 1], content: '' },\n ]\n : [genEmptyContent(data)]\n );\n setActivedRefineContent(refineContent.value[refineContent.value.length - 1]);\n setRefineContentPage(refineContent.value.length);\n setRefineContentState(RefineContentState.等待生成);\n setSessionId(uuidv4());\n const res = await createSession({ agentId, sessionId: sessionId.value! });\n setRefineContentVisible(true);\n setRefineContentState(RefineContentState.正在生成);\n sendSessionMessage(\n {\n messageRequest: {\n agent_id: agentId,\n message: {\n content: (\n Array.from(\n document.body.querySelectorAll(`.${CLASS_RANGE_HIGHLIGHT}`)\n ) as HTMLElement[]\n )\n .map((item) => item.textContent ?? '')\n .join('\\n'),\n conversation_id: res.data.conversionId,\n },\n meta_data: {\n ai_rewrite:\n activedRefineContent.value?.shortcutType ?? activedRefineContent.value?.prompt,\n sessionId: sessionId.value,\n },\n },\n },\n {\n onmessage: handleMessage,\n onclose: () => {\n console.log('---onclose ');\n handleEnd();\n },\n onerror: (err: Error) => {\n console.log('---onerror ', err);\n handleEnd();\n },\n }\n );\n\n async function handleEnd() {\n setRefineGenerating(false);\n setRefineContentState(RefineContentState.未生成);\n await nextTick();\n calcModalPosition();\n setRefineShortcutVisible(true);\n }\n\n function handleMessage(evt: Recordable) {\n const data = JSON.parse(evt.data);\n\n if (data.type !== 'answer') return;\n\n activedRefineContent.value!.content += (data.content ?? '')\n .replace(/\\n{2,}/g, SEPARATOR)\n .replace(/\\n/g, SEPARATOR);\n }\n\n function genEmptyContent(data?: GenContentParams): RefineSingleContentContext {\n const isManualPrompt = data?.generateType === RefineGenerateType.重置;\n\n return {\n isManualPrompt,\n prompt: isManualPrompt ? data.prompt : undefined,\n shortcutType: isManualPrompt ? data.shortcutType : undefined,\n content: '',\n };\n }\n };\n\n const injectContext: Omit<\n RefineGeneratorContext,\n | 'generatorPosition'\n | 'shortcutPosition'\n | 'subShortcutPosition'\n | 'setGeneratorPosition'\n | 'setShortcutPosition'\n | 'setSubShortcutPosition'\n | 'calcModalPosition'\n > = {\n name: 'RefineGenerator',\n\n refineGeneratorRef,\n visible,\n width: computedWidth,\n generating: refineGenerating,\n prompt: refinePrompt,\n shortcutVisible: refineShortcutVisible,\n content: refineContent,\n activedContent: activedRefineContent,\n contentVisible: refineContentVisible,\n contentPage: refineContentPage,\n contentState: refineContentState,\n\n setVisible,\n setRefineGenerating,\n setRefinePrompt,\n setShortVisible: setRefineShortcutVisible,\n setRefineContent,\n setActivedRefineContent,\n genRefineContent: genContent,\n setContentPage: setRefineContentPage,\n setContentVisible: setRefineContentVisible,\n setContentState: setRefineContentState,\n\n showRefineGenerator: handleSelectionChange,\n\n abortSession,\n\n /** highlight range */\n scrollElm,\n highlightRange,\n unhighlightRange,\n revertRange,\n };\n\n const {\n generatorPosition,\n shortcutPosition,\n subShortcutPosition,\n setGeneratorPosition,\n setShortcutPosition,\n setSubShortcutPosition,\n calcModalPosition,\n } = useModalPos(injectContext);\n\n provide(refineGeneratorKey, {\n ...injectContext,\n generatorPosition,\n shortcutPosition,\n subShortcutPosition,\n setGeneratorPosition,\n setShortcutPosition,\n setSubShortcutPosition,\n calcModalPosition,\n });\n\n const render = () => (\n <>\n <RefineToolbar></RefineToolbar>\n <div\n ref={refineGeneratorRef}\n class=\"c-refine-generator-wrapper\"\n style={{ ...refineGeneratorPosStyle.value, display: visible.value ? 'block' : 'none' }}\n >\n <div class=\"c-refine-generator-wrapper__inner\">\n <div class={bem()} style={{ width: computedWidth }}>\n {/* content */}\n <RefineContent v-model={refineContent.value}></RefineContent>\n {/* input */}\n <RefineInput v-model={refinePrompt.value}></RefineInput>\n {/* shortcut */}\n </div>\n <RefineShortcut></RefineShortcut>\n </div>\n </div>\n </>\n );\n\n return {\n innerRender: render,\n innerSetVisible: setVisible,\n };\n },\n methods: {\n setVisible(visible: boolean) {\n this.innerSetVisible(visible);\n },\n },\n render() {\n return this.innerRender();\n },\n});\n\nexport default RefineGenerator;\n","<template>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n viewBox=\"0 0 1024 1024\"\n aria-hidden=\"true\"\n role=\"img\"\n class=\"iconify iconify--mdi\"\n width=\"18\"\n height=\"18\"\n preserveAspectRatio=\"xMidYMid meet\"\n v-bind=\"$attrs\"\n >\n <path\n d=\"M843.0592 474.9312l-448-307.2-0.1024 0.1024A51.712 51.712 0 0 0 359.168 153.6c-28.5184 0-51.712 22.9376-51.712 51.2 0 15.5136-0.6144 45.9264 0 45.312V819.2c0 28.2624 23.1936 51.2 51.712 51.2 13.9776 0 26.624-5.4784 35.84-14.336h0.0512l448-307.2a50.7904 50.7904 0 0 0 15.872-36.864v-0.1024-0.1024a50.8416 50.8416 0 0 0-15.872-36.864z\"\n fill=\"currentColor\"\n />\n </svg>\n</template>\n","<template>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n viewBox=\"0 0 1024 1024\"\n aria-hidden=\"true\"\n role=\"img\"\n class=\"iconify iconify--mdi\"\n width=\"18\"\n height=\"18\"\n preserveAspectRatio=\"xMidYMid meet\"\n v-bind=\"$attrs\"\n >\n <path\n d=\"M299.90284958 17.10664903a70.69905013 70.69905013 0 0 0-70.69905015 70.69905014v848.38860166a70.69905013 70.69905013 0 1 0 141.39810028 0V87.80569917a70.69905013 70.69905013 0 0 0-70.69905013-70.69905014z m424.19430084 0a70.69905013 70.69905013 0 0 0-70.69905013 70.69905014v848.38860166a70.69905013 70.69905013 0 1 0 141.39810028 0V87.80569917a70.69905013 70.69905013 0 0 0-70.69905015-70.69905014z\"\n fill=\"currentColor\"\n ></path>\n </svg>\n</template>\n","<template>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n viewBox=\"0 0 1024 1024\"\n aria-hidden=\"true\"\n role=\"img\"\n class=\"iconify iconify--mdi\"\n width=\"18\"\n height=\"18\"\n preserveAspectRatio=\"xMidYMid meet\"\n v-bind=\"$attrs\"\n >\n <path\n d=\"M512 56.888889a455.111111 455.111111 0 1 1 0 910.222222A455.111111 455.111111 0 0 1 512 56.888889z m0 401.521778L404.764444 351.118222a37.944889 37.944889 0 1 0-53.646222 53.646222L458.410667 512l-107.292445 107.235556a37.944889 37.944889 0 1 0 53.646222 53.646222L512 565.589333l107.235556 107.292445a37.944889 37.944889 0 1 0 53.646222-53.646222L565.589333 512l107.292445-107.235556a37.944889 37.944889 0 1 0-53.646222-53.646222L512 458.410667z\"\n fill=\"currentColor\"\n ></path>\n </svg>\n</template>\n","import { CSSProperties, PropType, computed, defineComponent, provide, ref } from 'vue';\nimport { JSX } from 'vue/jsx-runtime';\nimport { Button, Popover, Tooltip } from '@arco-design/web-vue';\nimport { isString } from '@linker-design/utils';\n\nimport { createComponentSpace } from '../../../utils';\nimport { AnchorMap, useEditor } from '../../hooks/use-editor';\nimport { ContentOptions, EditorInjectionKey, RefineContext } from './context';\nimport { IAnchor, ListenModeEnum, PluginFlag } from '../../../typings';\nimport EmptyAnchor from './empty-anchor.png';\nimport { PARAGRAPH_CLS } from '../../../foundation/editorManager/editor';\nimport ContextMenu from '../modals/contextMenu.vue';\nimport RefineGenerator from '../modals/Refine';\nimport IconPlay from '../icons/IconPlay.vue';\nimport IconPause from '../icons/IconPause.vue';\nimport IconClose from '../icons/IconClose.vue';\nimport { IconMore } from '@arco-design/web-vue/es/icon';\n\nconst [bem] = createComponentSpace('editor-container');\nconst [anchorBem] = createComponentSpace('anchor-item');\n\nexport default defineComponent({\n name: 'EditorContainer',\n props: {\n preTime: {\n type: String,\n default: '00:00:00',\n },\n textCount: {\n type: Number,\n default: 0,\n },\n highlight: {\n type: Boolean,\n default: undefined,\n },\n listenAnchorId: {\n type: String,\n default: '-1',\n },\n listenMode: {\n // single: 单个播放,multiple: 多个播放\n type: String as PropType<ListenModeEnum>,\n default: 'single',\n },\n placeholder: {\n type: String,\n default: '请输入或者上传文稿',\n },\n // simple 简易模式,只显示内容编辑区域\n simple: {\n type: Boolean,\n default: false,\n },\n maxLength: {\n type: Number,\n default: 10000,\n },\n showWordLimit: {\n type: Boolean,\n default: true,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n class: {\n type: [String, Array],\n default: () => [],\n },\n contentStyle: {\n type: Object as PropType<CSSProperties>,\n default: () => ({}),\n },\n /**\n * 是否开启文本调优\n */\n refinable: {\n type: Boolean,\n default: false,\n },\n /**\n * 文本调优上下文\n */\n refineContext: {\n type: Object as PropType<RefineContext>,\n },\n editorHeight: {\n type: [Number, String],\n default: 'calc(100% - 62px)',\n },\n // 是否显示预计时长\n showPreTime: {\n type: Boolean,\n default: false,\n },\n },\n emits: {\n 'change': (contentLength: number) => true,\n 'update:textCount': (value: number) => true,\n 'anchorListen': (value: IAnchor, text: string) => true,\n 'anchorListenStop': (value: IAnchor) => true,\n 'anchorRemove': (value: IAnchor) => true,\n 'clear': () => true,\n },\n setup: (props, { slots, emit }) => {\n const editorRef = ref<HTMLDivElement>();\n const editorMarkRef = ref<HTMLDivElement>();\n const {\n editorCore,\n editorAction,\n\n count,\n hasPausationTag,\n\n getContent,\n setContent,\n appendContent,\n getTextContent,\n insertContent,\n deleteContent,\n updateContent,\n isCaret,\n isRange,\n\n isSelectionInDifferentParas,\n isSelectionContainsTag,\n convertToContent,\n getAnchorTtsMark,\n getAnchorTtsEmotionAndRole,\n isAllMarkedByAnchor,\n addExtraAnchors,\n clearContent,\n insertContentAtCursor,\n\n renderHighlight,\n unrenderHighlight,\n } = useEditor(editorRef, props, emit);\n\n provide(EditorInjectionKey, {\n name: 'Editor',\n editorCore,\n editorAction,\n\n getContent,\n setContent,\n appendContent,\n getTextContent,\n insertContent,\n deleteContent,\n updateContent,\n isCaret,\n isRange,\n\n isSelectionContainsTag,\n getAnchorTtsMark,\n getAnchorTtsEmotionAndRole,\n isAllMarkedByAnchor,\n addExtraAnchors,\n clearContent,\n\n renderHighlight,\n unrenderHighlight,\n\n refineContext: props.refineContext,\n });\n\n // @ts-ignore\n const rangedAnchors = computed(() => editorCore.value?.plugin.anchor?.data ?? {});\n const rangedAnchorsCount = computed(() => Object.values(rangedAnchors.value).flat().length);\n const showPlaceholder = computed(() => count.value <= 0 && !hasPausationTag.value);\n\n const removeAnchor = (id: number, top: string, data: IAnchor) => {\n let removeTarget = Array.from(\n document.body.querySelectorAll(\n data.uid ? `span[data-uid=\"${data.uid}\"]` : `span[data-frag-id=\"anchor_${id}\"]`\n )!\n ) as HTMLSpanElement[];\n\n if (!data.uid) {\n removeTarget = removeTarget.filter((item) => !item.dataset.uid);\n }\n\n removeTarget.forEach((item) => editorAction.value?.plugin.anchor?.remove(item));\n emit('anchorRemove', data);\n };\n const renderAnchors = (anchors: AnchorMap) => {\n return Object.entries(anchors)\n .filter(([_, data]) => !!data.length)\n .map(([top, data], index) => {\n return (\n <div\n style={{\n position: 'absolute',\n top: `${top}px`,\n width: '100%',\n paddingLeft: '24px',\n transform: `translateY(-4px)`,\n }}\n class={[data.length > 1 && 'multi-anchor', 'anchor-wrapper']}\n >\n {data.length > 1\n ? data\n .slice(0, 6)\n .map(({ background, data: anchor, id }) =>\n renderAnchor(id, top, background, anchor, true)\n )\n : renderAnchor(data[0].id, top, data[0].background, data[0].data, false)}\n {data.length > 6 ? (\n <Popover\n trigger=\"click\"\n position=\"left\"\n popupContainer=\".c-editor-container__core-anchor\"\n contentClass=\"anchor-popover\"\n contentStyle={{ padding: '6px 12px' }}\n >\n {{\n default: () => (\n <Button\n shape=\"circle\"\n style={{ width: '28px', height: '28px', transform: 'translate(8px, 3px)' }}\n >\n <IconMore></IconMore>\n </Button>\n ),\n content: () => (\n <div class={['multi-anchor', `anchor-popover-wrapper_${index}`]}>\n {data\n .slice(6)\n .map(({ background, data: anchor, id }) =>\n renderAnchor(\n id,\n top,\n background,\n anchor,\n true,\n `.anchor-popover-wrapper_${index}`\n )\n )}\n </div>\n ),\n }}\n </Popover>\n ) : null}\n </div>\n );\n });\n };\n const renderAnchor = (\n id: number,\n top: string,\n bg: string,\n anchor: IAnchor,\n simple = false,\n popupContainer: string | undefined = undefined\n ) => {\n const operationBtns = () => {\n return props.listenMode === ListenModeEnum.multiple ||\n props.listenAnchorId !== `${anchor.id}_${anchor.uid}` ? (\n <span onClick={() => emit('anchorListen', anchor, getAnchorTtsMark(anchor))}>\n <IconPlay class={anchorBem('info-play')} />\n </span>\n ) : (\n <span onClick={() => emit('anchorListenStop', anchor)}>\n <IconPause class={anchorBem('info-play')} />\n </span>\n );\n };\n const anchorTooltip = (content: () => JSX.Element) => {\n return (\n <Tooltip>\n {{\n default: content,\n content: () => (\n <section class={anchorBem('tooltip')}>\n <p>主播: {anchor.name}</p>\n <p>情绪: {anchor.activeEmotion}</p>\n {anchor.activeRole && anchor.activeRole !== '无' ? (\n <p>角色: {anchor.activeRole || '--'}</p>\n ) : null}\n <p>语速: {anchor.speed}</p>\n <p>音量: {anchor.volume}</p>\n </section>\n ),\n }}\n </Tooltip>\n );\n };\n const anchorContent = () => {\n return (\n <section class={anchorBem()} style={{ backgroundColor: bg }}>\n {/* 作用域插槽 */}\n {slots.anchor?.({\n anchor,\n popupContainer,\n\n listen: onListen,\n listenStop: onListenStop,\n update: onUpdate,\n }) ?? <img src={anchor.avatar} class={anchorBem('avatar')} />}\n <section class={anchorBem('info')} style={{ display: simple ? 'none' : 'flex' }}>\n <span class={anchorBem('info-name')} title={anchor.name}>\n {anchor.name}\n </span>\n <label class={anchorBem('info-speed-volume')}>\n 语速: {anchor.speed}, 音量: {anchor.volume}\n </label>\n <div onClick={() => removeAnchor(id, top, anchor)}>\n <IconClose class={anchorBem('info-rem')} />\n </div>\n {operationBtns()}\n </section>\n {/* 单行多主播时,单独显示关闭按钮 + 播放按钮 */}\n {simple ? (\n <div class={anchorBem('rem')} onClick={() => removeAnchor(id, top, anchor)}>\n <IconClose class={anchorBem('info-rem')} />\n </div>\n ) : null}\n </section>\n );\n };\n\n const onListen = () => emit('anchorListen', anchor, getAnchorTtsMark(anchor));\n const onListenStop = () => emit('anchorListenStop', anchor);\n\n return anchorContent();\n };\n\n const onUpdate = (newAnchor: IAnchor) => {\n // 更新主播信息\n const { uid } = newAnchor;\n const { id } = newAnchor;\n const topSets = Object.keys(rangedAnchors.value);\n\n for (let i = 0; i < topSets.length; i++) {\n const top = topSets[i];\n const anchors = rangedAnchors.value[top];\n const targetIndex = anchors.findIndex((anchorData: any) => {\n if (anchorData.data.uid) {\n return anchorData.data.uid === uid;\n }\n\n return anchorData.id === id;\n });\n\n if (targetIndex > -1) {\n const anchorData = rangedAnchors.value[top][targetIndex];\n rangedAnchors.value[top].splice(targetIndex, 1, {\n ...anchorData,\n data: { ...newAnchor },\n });\n break;\n }\n }\n\n // 更新选区元素属性信息\n let updateTarget = Array.from(\n document.body.querySelectorAll(\n uid ? `span[data-uid=\"${uid}\"]` : `span[data-frag-id=\"anchor_${id}\"]`\n )!\n ) as HTMLSpanElement[];\n if (!uid) {\n updateTarget = updateTarget.filter((item) => !item.dataset.uid);\n }\n updateTarget.forEach((tag) =>\n Object.assign(tag.dataset, {\n provider: newAnchor.provider,\n person: newAnchor.person,\n volume: newAnchor.volumn || newAnchor.volume,\n speed: newAnchor.speed,\n emotion: newAnchor.activeEmotion,\n role: newAnchor.activeRole ?? '',\n name: newAnchor.name,\n })\n );\n };\n\n const renderToolbar = () => {};\n const renderFooter = () => {\n return (\n <div class={bem('status', { simple: props.simple, disabled: props.disabled })}>\n {slots['footer-left']?.() ??\n (!props.simple ? (\n <Button class={bem('status-clear')} onClick={clearContent}>\n 清空\n </Button>\n ) : null)}\n <div class={bem('status-info')}>\n {!props.simple ? (\n <>\n <label class={bem('status-info-label')}>\n <span>预计时长:</span>\n <span>{props.preTime || '00:00:00'}</span>\n </label>\n </>\n ) : props.showPreTime ? (\n <label class={bem('status-info-label')}>\n <span>预计时长:</span>\n <span>{props.preTime || '00:00:00'}</span>\n </label>\n ) : null}\n {props.showWordLimit ? (\n <label class={bem('status-info-length')}>\n <span>{count.value <= props.maxLength ? count.value : props.maxLength}</span>\n <span> / </span>\n <span>\n {props.maxLength}\n {props.simple ? '' : '字'}\n </span>\n </label>\n ) : null}\n </div>\n </div>\n );\n };\n\n const refineGenetorRef = ref<InstanceType<typeof RefineGenerator>>();\n\n const render = () => {\n return (\n <section class={bem('wrapper')}>\n <div\n class={bem('', {\n simple: props.simple,\n disabled: props.disabled,\n refinable: props.refinable,\n })}\n style={{\n height: isString(props.editorHeight) ? props.editorHeight : `${props.editorHeight}px`,\n }}\n >\n {/* toolbar */}\n {!props.simple && renderToolbar()}\n {/* core */}\n <div class={bem('core')}>\n <div class={bem('core-content')}>\n <div class={bem('core-content-editor')}>\n <div\n class={bem('core-content-editor-placeholder')}\n style={{ display: showPlaceholder.value ? 'block' : 'none' }}\n >\n {props.placeholder}\n </div>\n <div\n ref={editorRef}\n class={bem('core-content-editor-content')}\n contenteditable={!props.disabled}\n onDragover={(evt: DragEvent) => evt.preventDefault()}\n onDrop={(evt: DragEvent) => evt.preventDefault()}\n >\n <p class={PARAGRAPH_CLS}>\n <br />\n </p>\n </div>\n </div>\n </div>\n {!props.simple ? (\n <div ref={editorMarkRef} class={bem('core-anchor')}>\n {rangedAnchorsCount.value ? renderAnchors(rangedAnchors.value) : null}\n </div>\n ) : null}\n </div>\n {/* context menu */}\n {!props.simple && <ContextMenu></ContextMenu>}\n {/* refine generator */}\n {props.refinable && <RefineGenerator ref={refineGenetorRef}></RefineGenerator>}\n </div>\n\n {/* splitor */}\n {!props.simple && <div class={bem('splitor')}></div>}\n\n {/* anchor empty placeholder */}\n {!props.simple && !Object.values(rangedAnchors.value).flat().length ? (\n <div class={bem('anchor-placeholder')}>\n <img src={EmptyAnchor} />\n </div>\n ) : null}\n\n {/* status */}\n {renderFooter()}\n <span style=\"display: none\">\n {JSON.stringify(rangedAnchors.value)}\n {Object.values(rangedAnchors.value).flat().length}\n </span>\n </section>\n );\n };\n\n return {\n action: editorAction,\n\n innerRender: render,\n innerGetContent: getContent,\n innerSetContent: setContent,\n innerAppendContent: appendContent,\n innerGetTextContent: getTextContent,\n innerInsertContent: insertContent,\n innerDeleteContent: deleteContent,\n innerUpdateContent: updateContent,\n innerIsCaret: isCaret,\n innerIsRange: isRange,\n\n innerIsSelectionInDifferentParas: isSelectionInDifferentParas,\n innerIsSelectionContainsTag: isSelectionContainsTag,\n innerConvertToContent: convertToContent,\n innerGetAnchorTtsMark: getAnchorTtsMark,\n innerGetAnchorTtsEmotionAndRole: getAnchorTtsEmotionAndRole,\n innerIsAllMarkedByAnchor: isAllMarkedByAnchor,\n innerAddExtraAnchors: addExtraAnchors,\n innerUpdateAnchor: onUpdate,\n innerClearContent: clearContent,\n innerInsertContentAtCursor: insertContentAtCursor,\n\n innerRenderHightlight: renderHighlight,\n innerUnrenderHightlight: unrenderHighlight,\n };\n },\n methods: {\n getContent(options?: ContentOptions) {\n return this.innerGetContent(options);\n },\n getHtml(options: ContentOptions) {\n return this.getContent(options);\n },\n setContent(content: string) {\n return this.innerSetContent(content);\n },\n setHtml(content: string) {\n return this.setContent(content);\n },\n appendContent(content: string | string[]) {\n return this.innerAppendContent(content);\n },\n getTextContent() {\n return this.innerGetTextContent();\n },\n insertContent(content: string | Node) {\n return this.innerInsertContent(content);\n },\n deleteContent() {\n return this.innerDeleteContent();\n },\n updateContent(content: string | Node) {\n return this.innerUpdateContent(content);\n },\n isCaret() {\n return this.innerIsCaret();\n },\n isRange() {\n return this.innerIsRange();\n },\n isSelectionInDifferentParas() {\n return this.innerIsSelectionInDifferentParas();\n },\n isSelectionContainsTag(type: PluginFlag) {\n return this.innerIsSelectionContainsTag(type);\n },\n convertToContent(node: HTMLElement | Text) {\n return this.innerConvertToContent(node);\n },\n getAnchorTtsMark(anchor: IAnchor, startFromCursor = false) {\n return this.innerGetAnchorTtsMark(anchor, startFromCursor);\n },\n getAnchorTtsEmotionAndRole(anchor: IAnchor) {\n return this.innerGetAnchorTtsEmotionAndRole(anchor);\n },\n isAllMarkedByAnchor() {\n return this.innerIsAllMarkedByAnchor();\n },\n addExtraAnchors(data: IAnchor[]) {\n return this.innerAddExtraAnchors(data);\n },\n updateAnchor(anchor: IAnchor) {\n return this.innerUpdateAnchor(anchor);\n },\n clearContent() {\n return this.innerClearContent();\n },\n insertContentAtCursor(_content: string | string[]) {\n return this.innerInsertContentAtCursor(_content);\n },\n clear() {\n return this.setContent(`<p class=\"${PARAGRAPH_CLS}\"><br /></p>`);\n },\n renderHighlight(matchingContent: string) {\n return this.innerRenderHightlight(matchingContent);\n },\n unrenderHighlight() {\n return this.innerUnrenderHightlight();\n },\n },\n render() {\n return this.innerRender();\n },\n});\n","import { App } from 'vue';\n\nimport _EditorContainer from './editor';\nimport './editor.less';\n\nconst EditorContainer = Object.assign(_EditorContainer, {\n install: (app: App, options?: Record<string, any>) => {\n app.component('EditorContainer', _EditorContainer);\n },\n});\n\nexport type EditorContainerInstance = InstanceType<typeof _EditorContainer>;\n\nexport default EditorContainer;\n","import type { App } from 'vue';\n\nimport EditorContainer from './intersection/components/editor';\n\nexport * from './typings/index';\n\nconst TinyPeony = Object.assign(EditorContainer, {\n install: (app: App) => {\n app.component(EditorContainer.name!, EditorContainer);\n },\n});\n\nexport type TinyPeonyInstance = InstanceType<typeof EditorContainer>;\n\nexport default TinyPeony;\n"],"names":["getType","value","isNull","isNumber","isString","genMods","name","mods","ret","item","key","createBEM","el","createNamespace","root","space","createTagSpace","createComponentSpace","withRaf","callback","ticking","args","isHttps","valueType","val","isArray","isUndefined","isNullable","isHTMLElement","isText","SelectionType","PluginFlag","ListenModeEnum","IEditorCore","IContentManager","ICursorManager","IUndoManager","ICommandExecutor","IPlugin","CommandExecutor","_contentManager","_cursorManager","__publicField","hadnleCompositionEnd","editor","event","insertTextCount","_a","textCount","restTextCount","truncationCount","selection","range","endContainer","endOffset","compositionTextRange","handleBeforeInput","inputType","calcPasteTextLength","paragraphs","newParagraphs","wordLength","restWordLength","para","ContentManager","element","PARAGRAPH_EMPTY","totalCount","content","cb","contents","firstPara","firstContent","paraElm","PARAGRAPH_CLS","paras","getText","pElm","childNodes","i","node","fragment","tempContainer","endNode","newRange","container","index","children","prevP","CursorManager","_element","e","UndoManager","_editor","_undoChange","path","target","matchedIndex","startPara","findClosestPara","startParaIndex","startMatchedIndexes","endPara","endParaIndex","endMatchedIndexes","record","matchNode","matchedIndexes","nodes","matched","startContainer","byteToHex","unsafeStringify","arr","offset","getRandomValues","rnds8","rng","randomUUID","native","v4","options","buf","rnds","handleInsertEndPausationTag","elm","lastNode","handlePaste","innerRange","firstParaContent","lastParaContent","midParaContents","startOffset","startP","endP","originPara","findParent","anchorTag","rangeAfterCaret","isRangeFocusInAnchor","lastChild","nextSibling","newPara","newAnchorTag","lastPara","firstChild","delay","bem","EditorCore","editorElement","uuidv4","map","PluginClass","pluginInstance","prefix","mutation","tag","placeholderNode","childNode","highlightSpan","span","parent","firstNode","needRemoveSpanForDelete","needRemoveSpanForAnchor","needRemoveSpanForEmpty","needRemoveBRInSpanForDelete","spellingTextNode","plugin","currentP","prevParaChildNodes","newRange2","isCursorAtParagraphEnd","currP","nextP","cursorRange","_b","_c","_d","_e","currp","clearParagraphKeep","ensureCaretInParagraph","_","setAttributesAndData","attributes","dataAttributes","child","tempElement","_conditions","conditions","currentElement","checkElm","result","condition","matching","startElm","findAllParaInRange","paraTags","current","getOverlay","type","popper","spellingText","firstJudge","prevNode","nextNode","text","longestConsecutiveSubsequence","text1","text2","text1Len","text2Len","dp","prev","maxLen","endIndex","j","nextPrev","sel","p","clone","pList","inP","targetP","positionPopupUnderSpan","parentDomRect","spanDomRect","parentRect","targetRect","top","left","getAnchorTagsByUidAndId","anchor","allAnchorTags","tryOnScopeDispose","fn","getCurrentScope","onScopeDispose","isClient","toString","isObject","noop","createSingletonPromise","_promise","wrapper","_prev","toArray","useTimeoutFn","interval","immediate","isPending","ref","timer","clear","stop","start","toValue$1","readonly","useToggle","initialValue","truthyValue","falsyValue","valueIsRef","isRef","_value","toggle","truthy","defaultWindow","defaultNavigator","unrefElement","elRef","plain","toValue","useEventListener","events","listeners","cleanups","cleanup","register","listener","options2","stopWatch","watch","optionsClone","useMounted","isMounted","instance","getCurrentInstance","onMounted","useSupported","computed","usePermission","permissionDesc","controls","navigator","isSupported","permissionStatus","shallowRef","desc","state","update","query","toRaw","useClipboard","read","source","copiedDuring","legacy","isClipboardApiSupported","permissionRead","permissionWrite","copied","timeout","updateText","isAllowed","legacyRead","copy","legacyCopy","ta","status","UseMouseBuiltinExtractors","useMouse","touch","resetOnTouchEnds","window","scroll","eventFilter","_prevMouseEvent","_prevScrollX","_prevScrollY","x","y","sourceType","extractor","mouseHandler","touchHandler","scrollHandler","pos","reset","mouseHandlerWrapper","touchHandlerWrapper","scrollHandlerWrapper","listenerOptions","props","__props","emits","__emit","pausationOptions","RENDERED_TAG_COUNT","FLAG","CLOSE_CLS","svgHTMLTemplate","createPausationTag","createModal","onOK","handleOk","handleClose","vm","handleUpdate","config","offsetTop","offsetLeft","offsetHeight","offsetWidth","defualtConfig","createVNode","render","PausationTagPlugin","Message","evt","closeTag","pausationTag","Pausationor","model","handleCancel","oldText","onOk","onCancel","onTryPlay","defaultConfig","PronunciationTagPlugin","pronunciationTag","replaceElm","Pronunciationor","pronouncingText","AnchorBg","AnchorTagPlugin","_id","uid","id","anchorIndex","getNodeIndex","getTopLevelNodeInP","detectAnchorSelection","extractAnchorNodes","empty_1","empty_2","onlyOnePara","allChildNodes","nodesGroup","spanNode","splitNode","splitContainer","newStartContainer","newStartOffset","newEndContainer","newEndOffset","extractNodes","_type","highlightTag","originalFragment","startC","startO","endC","endO","createAnchorSelection","_fixingAnchorTag","needFixingAnchorTag","nodeStartIndex","nodeEndIndex","isIntersection","bg","anchorIds","data","background","convertToParaElm","createAnchorTag","surroundContents","startNode","_endOffset","isHighlightTag","tempDiv","middleParas","hasHighlightTag","rect","fixingAnchorTag","fixingId","fixingAnchorId","fixingAnchorTagIndex","fixingAnchorTop","fixingAnchorTags","currAnchor","newAnchor","needFixingAnchors","newAnchorOrders","total","anchorTags","anchorMap","allAnchors","anchorData","newDatas","top2AnchorData","datas","word","homophone","formattedHomophone","formattedData","HomophonesTagPlugin","homophoneRange","configItem","homophoneTag","modifyIndex","Homophoner","homophoneConfigs","allParas","calc","accuSearchIndex","restIndex","targetPara","defaultContentOptions","EditorInjectionKey","HIGHLIGHT_CLS","auditHighlightBem","AUDIT_HIGHLIGHT_CLS","queryAnchorTags","anchorId","tags","checkHighlighted","addHighlight","removeHighlight","useHighlight","oldAnchorId","createHighlightTag","calcContentIndexes","matchingContent","paraIndex","indexes","_matching","textNode","matchingLength","renderHighlight","highlightGroup","groupItem","highlightRange","tagContents","lastNodeIndex","configProviderInjectionKey","CLASS_PREFIX","GLOBAL_CONFIG_NAME","getPrefixCls","componentName","configProvider","inject","opt","obj","_export_sfc","sfc","_sfc_main","defineComponent","ev","emit","prefixCls","cls","innerStyle","styles","_hoisted_1","_hoisted_2","createElementVNode","_hoisted_3","_sfc_render","_ctx","_cache","$props","$setup","$data","$options","openBlock","createElementBlock","normalizeClass","normalizeStyle","_IconRight","IconRight","app","iconPrefix","_IconCheckCircleFill","IconCheckCircleFill","_IconCloseCircleFill","IconCloseCircleFill","_IconExclamationCircleFill","IconExclamationCircleFill","_IconInfoCircleFill","IconInfoCircleFill","_hoisted_4","_IconMore","IconMore","fQ","UI","lQ","dQ","RQ","GQ","Yg","r","C","E","kQ","LQ","NQ","_I","ZI","qg","OI","n","F","c","l","L","N","P","iA","X","q","$","z","BA","eA","zg","I","B","o","CA","AA","rA","sA","ag","tB","_g","hA","H","Z","V","uA","qA","J","S","Vg","Pg","BB","Xg","Og","Zg","QB","eB","yg","EB","Q","iB","oB","rB","FA","JA","wg","jA","WA","sB","VA","nB","aB","wB","yB","cB","T","gI","u","O","$g","AI","PA","cg","hB","uI","II","lB","dB","RB","GB","BI","oA","GA","fA","XA","kA","U","CI","OA","lA","s","a","D","nA","t","kB","wA","NB","hg","Fg","QI","MB","EI","iI","eI","uB","YA","SA","fg","UA","SB","UB","YB","HB","ZA","HA","KB","pB","_A","zA","lg","mB","xB","bB","vB","dg","qB","Lg","jB","Ig","WB","$A","VB","Ag","h","PB","XB","OB","ZB","dA","_B","rI","oI","LI","DA","gg","zB","R","f","G","k","K","b","v","w","d","SI","W","QA","$B","tI","AC","gC","Rg","Gg","sI","IC","BC","CC","kg","yA","QC","EC","iC","eC","nI","rC","oC","tC","sC","nC","aC","Ng","aI","Mg","DI","LA","Bg","DC","Ug","wI","wC","yC","cC","hC","FC","fC","lC","dC","yI","RC","GC","kC","hI","LC","NC","KA","cI","FI","fI","MC","uC","JC","SC","lI","UC","MI","YC","HC","ug","pA","KC","pC","mC","m","TC","dI","aA","Jg","Cg","xC","cA","bC","vC","RI","NI","M","qC","jC","WC","VC","PC","XC","Sg","mA","OC","ZC","_C","zC","$C","AQ","gQ","Qg","IQ","GI","kI","BQ","CQ","QQ","EQ","g","Eg","JI","gA","tA","HE","SQ","UQ","MODAL_METHOD_ENUM","MODAL_METHOD_ICON_ENUM","useModalWrapper","defaultTitleRenderContentFactory","method","IconComponent","color","title","defaultContentRenderContentFactory","_method","customModal","modalProps","appContext","modalClass","titleRenderContent","contentRenderContent","customModalClass","omit","resolve","Modal","footerAlign","String","default","hideHeaderBorder","Boolean","hideFooterBorder","renderIcon","setup","slots","attrs","titleAlign","closable","draggable","maskClosable","cModalID","Math","random","substring","visible","nextTick","mBodyContent","document","querySelector","scrollTop","titleIconSlot","titleIcon","renderTitleIcon","_createVNode","_Fragment","modalSlots","marginLeft","extra","_resolveComponent","_mergeProps","modal","CommonModal","modalWithContext","useState","formatter","reactive","toRefs","newValue","CLASS_RANGE_HIGHLIGHT","useRangeHighlight","editorCtx","originRangeStart","setOriginRangeStart","originRangeEnd","setOriginRangeEnd","cursor","isSamePara","createRangeHighlightTag","spanElm","isStartPara","unhighlightRange","useEditor","editorCore","editorAction","count","hasPausationTag","observer","unrenderHighlight","init","length","anchorContent","records","newRecords","deleteRecords","destroy","getContent","_options","getContentWithoutHighlight","setContent","appendContent","getTextContent","insertContent","deleteContent","updateContent","isCaret","isRange","isSelectionInDifferentParas","isSelectionContainsTag","allTags","convertToContent","getAnchorTtsMark","startFromCursor","partialTags","sliceIndex","getAnchorTtsEmotionAndRole","selector","isAllMarkedByAnchor","addExtraAnchors","clearContent","tmpDiv","insertContentAtCursor","_content","onBeforeUnmount","EmptyAnchor","EDITOR_CONTAINER_CLS","handlePausationTagInsert","pausationValue","showContextMenu","handlPaste","clipboardText","contextMenuRef","contextMenuVisible","contextMenuPositionStyle","allowPaste","showPausationor","handleContextMenu","editorContainerElm","handleClick","pausationorRef","handleMouseOver","pausationAreaELm","_openBlock","_createElementBlock","_createElementVNode","refineGeneratorKey","RefineContentState","RefineGenerateType","refineShortcutOptions","Optimism","Expand","InExpand","MoreShortcut","ShortcutPosEnum","GeneratorPosEnum","SubShortcutPosEnum","SEPARATOR","useCopy","showMessage","input","RefineContent","modelValue","Array","ctx","textCopyFun","contentVisible","onReplace","revertRange","activedContent","split","setVisible","onInsert","createParagraph","newContentPara","createElement","textContent","classList","add","parentNode","splitRange","createRange","setStart","setEndAfter","afterFragment","extractContents","insertParasFragment","createDocumentFragment","forEach","appendChild","insertLastP","insertBefore","getSelection","selectNodeContents","collapse","removeAllRanges","addRange","onDelete","contentPage","setRefineContent","setActivedRefineContent","setContentPage","newContent","filter","newContentPage","contentSectionRef","scrollTo","scrollHeight","behavior","display","contentState","未生成","icon","Replace","Insert","$event","onChange","onClick","setShortVisible","genRefineContent","generateType","刷新","Refresh","replaceAll","Copy","Delete","RefineInput","undefined","placeholderText","allowSend","prompt","send","重置","generating","contentable","Prefix","fontSize","suffix","disabled","生成结束","includes","abortSession","Send","Abort","SHORTCUT_ITEM_HEIGHT","SHORTCUT_BOX_PADDING","RefineShortcut","handleShortcutClick","option","shortcutType","handleShortcutHover","shortcutPosition","底部","containerHeight","Number","parseFloat","getComputedStyle","scrollElm","height","containerScrollTop","containerScrollHeight","generatorTop","refineGeneratorRef","generatorHeight","shortcutHeight","subShortcutHeight","subShortcutTransformHeight","subShortcutScrollHeight","setSubShortcutPosition","顶部对齐","底部对齐","setSubShortcutActivedIndex","setSubShortcutVisible","subShortcutVisible","subShortcutActivedIndex","renderShortcut","listenMouseMove","label","subShortcutPosition","padding","onMouseenter","onMouseleave","shortcutVisible","margin","RefineToolbar","refineToolbarRef","refineToolbarVisible","setRefineToolbarVisible","_visible","setRefineToolbarPos","zIndex","refineToolbarPos","mouseDownTarget","calcRefineToolbarPos","Promise","setTimeout","isRangeInEditor","position","getBoundingClientRect","minLeft","maxLeft","width","handleRefineToolbarHide","contains","handleRefineToolbarShow","handleRefineToolbarScroll","handleSelectionChange","addEventListener","onUnmounted","removeEventListener","onRefine","showRefineGenerator","calcModalPosition","onCopy","getRangeContent","_createTextVNode","useModalPos","generatorPosition","setGeneratorPosition","setShortcutPosition","targetHeight","targetScrollHeight","handleModalPositionByScroll","RefineGenerator","agentId","createSession","sendSessionMessage","_abortSession","refineContext","sessionId","setSessionId","abort","refineGeneratorPosStyle","setRefineGeneratorPosStyle","等待生成","正在生成","refineContentState","setRefineGenerating","setRefinePrompt","setRefineContentVisible","setRefineContentState","setRefineContentPage","setRefineShortcutVisible","calcRefineGeneratorPos","from","_editorElement","querySelectorAll","pop","handleRefineGeneratorShow","handleRefineGeneratorScroll","setScrollElm","body","computedWidth","refineGenerating","refinePrompt","refineShortcutVisible","refineContentVisible","refineContentPage","refineContent","activedRefineContent","injectContext","genEmptyContent","res","messageRequest","agent_id","message","join","conversation_id","conversionId","meta_data","ai_rewrite","onmessage","handleMessage","onclose","console","log","handleEnd","onerror","err","JSON","parse","replace","isManualPrompt","setContentVisible","setContentState","provide","innerRender","innerSetVisible","methods","anchorBem","preTime","highlight","listenAnchorId","listenMode","placeholder","simple","maxLength","showWordLimit","class","contentStyle","Object","refinable","editorHeight","showPreTime","contentLength","anchorListen","editorRef","editorMarkRef","rangedAnchors","rangedAnchorsCount","values","flat","showPlaceholder","removeAnchor","removeTarget","dataset","remove","renderAnchors","anchors","entries","paddingLeft","transform","slice","renderAnchor","Popover","Button","popupContainer","operationBtns","multiple","IconPlay","IconPause","backgroundColor","listen","onListen","listenStop","onListenStop","onUpdate","avatar","speed","volume","IconClose","topSets","keys","targetIndex","findIndex","splice","updateTarget","assign","provider","person","volumn","emotion","activeEmotion","role","activeRole","renderToolbar","renderFooter","refineGenetorRef","action","preventDefault","ContextMenu","stringify","innerGetContent","innerSetContent","innerAppendContent","innerGetTextContent","innerInsertContent","innerDeleteContent","innerUpdateContent","innerIsCaret","innerIsRange","innerIsSelectionInDifferentParas","innerIsSelectionContainsTag","innerConvertToContent","innerGetAnchorTtsMark","innerGetAnchorTtsEmotionAndRole","innerIsAllMarkedByAnchor","innerAddExtraAnchors","innerUpdateAnchor","innerClearContent","innerInsertContentAtCursor","innerRenderHightlight","innerUnrenderHightlight","getHtml","setHtml","updateAnchor","EditorContainer","_EditorContainer","TinyPeony"],"mappings":"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","x_google_ignoreList":[0,15,16,17,18,22,23,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50]}
|