{"version":3,"file":"indexBtAzumoR.js","sources":["../node_modules/unhead/dist/index.mjs"],"sourcesContent":["import { DomPlugin } from '@unhead/dom';\nimport { defineHeadPlugin, tagDedupeKey, hashTag, tagWeight, HasElementTags, NetworkEvents, hashCode, SortModifiers, processTemplateParams, resolveTitleTemplate, IsBrowser, normaliseEntryTags, composableNames, whitelistSafeInput, ScriptNetworkEvents, unpackMeta } from '@unhead/shared';\nexport { composableNames } from '@unhead/shared';\nimport { createHooks } from 'hookable';\n\nconst UsesMergeStrategy = /* @__PURE__ */ new Set([\"templateParams\", \"htmlAttrs\", \"bodyAttrs\"]);\nconst DedupePlugin = defineHeadPlugin({\n hooks: {\n \"tag:normalise\": ({ tag }) => {\n if (tag.props.hid) {\n tag.key = tag.props.hid;\n delete tag.props.hid;\n }\n if (tag.props.vmid) {\n tag.key = tag.props.vmid;\n delete tag.props.vmid;\n }\n if (tag.props.key) {\n tag.key = tag.props.key;\n delete tag.props.key;\n }\n const generatedKey = tagDedupeKey(tag);\n if (generatedKey && !generatedKey.startsWith(\"meta:og:\") && !generatedKey.startsWith(\"meta:twitter:\")) {\n delete tag.key;\n }\n const dedupe = generatedKey || (tag.key ? `${tag.tag}:${tag.key}` : false);\n if (dedupe)\n tag._d = dedupe;\n },\n \"tags:resolve\": (ctx) => {\n const deduping = /* @__PURE__ */ Object.create(null);\n for (const tag of ctx.tags) {\n const dedupeKey = (tag.key ? `${tag.tag}:${tag.key}` : tag._d) || hashTag(tag);\n const dupedTag = deduping[dedupeKey];\n if (dupedTag) {\n let strategy = tag?.tagDuplicateStrategy;\n if (!strategy && UsesMergeStrategy.has(tag.tag))\n strategy = \"merge\";\n if (strategy === \"merge\") {\n const oldProps = dupedTag.props;\n if (oldProps.style && tag.props.style) {\n if (oldProps.style[oldProps.style.length - 1] !== \";\") {\n oldProps.style += \";\";\n }\n tag.props.style = `${oldProps.style} ${tag.props.style}`;\n }\n if (oldProps.class && tag.props.class) {\n tag.props.class = `${oldProps.class} ${tag.props.class}`;\n } else if (oldProps.class) {\n tag.props.class = oldProps.class;\n }\n deduping[dedupeKey].props = {\n ...oldProps,\n ...tag.props\n };\n continue;\n } else if (tag._e === dupedTag._e) {\n dupedTag._duped = dupedTag._duped || [];\n tag._d = `${dupedTag._d}:${dupedTag._duped.length + 1}`;\n dupedTag._duped.push(tag);\n continue;\n } else if (tagWeight(tag) > tagWeight(dupedTag)) {\n continue;\n }\n }\n const hasProps = tag.innerHTML || tag.textContent || Object.keys(tag.props).length !== 0;\n if (!hasProps && HasElementTags.has(tag.tag)) {\n delete deduping[dedupeKey];\n continue;\n }\n deduping[dedupeKey] = tag;\n }\n const newTags = [];\n for (const key in deduping) {\n const tag = deduping[key];\n const dupes = tag._duped;\n newTags.push(tag);\n if (dupes) {\n delete tag._duped;\n newTags.push(...dupes);\n }\n }\n ctx.tags = newTags;\n ctx.tags = ctx.tags.filter((t) => !(t.tag === \"meta\" && (t.props.name || t.props.property) && !t.props.content));\n }\n }\n});\n\nconst ValidEventTags = /* @__PURE__ */ new Set([\"script\", \"link\", \"bodyAttrs\"]);\nconst EventHandlersPlugin = defineHeadPlugin((head) => ({\n hooks: {\n \"tags:resolve\": (ctx) => {\n for (const tag of ctx.tags) {\n if (!ValidEventTags.has(tag.tag)) {\n continue;\n }\n const props = tag.props;\n for (const key in props) {\n if (key[0] !== \"o\" || key[1] !== \"n\") {\n continue;\n }\n if (!Object.prototype.hasOwnProperty.call(props, key)) {\n continue;\n }\n const value = props[key];\n if (typeof value !== \"function\") {\n continue;\n }\n if (head.ssr && NetworkEvents.has(key)) {\n props[key] = `this.dataset.${key}fired = true`;\n } else {\n delete props[key];\n }\n tag._eventHandlers = tag._eventHandlers || {};\n tag._eventHandlers[key] = value;\n }\n if (head.ssr && tag._eventHandlers && (tag.props.src || tag.props.href)) {\n tag.key = tag.key || hashCode(tag.props.src || tag.props.href);\n }\n }\n },\n \"dom:renderTag\": ({ $el, tag }) => {\n const dataset = $el?.dataset;\n if (!dataset) {\n return;\n }\n for (const k in dataset) {\n if (!k.endsWith(\"fired\")) {\n continue;\n }\n const ek = k.slice(0, -5);\n if (!NetworkEvents.has(ek)) {\n continue;\n }\n tag._eventHandlers?.[ek]?.call($el, new Event(ek.substring(2)));\n }\n }\n }\n}));\n\nconst DupeableTags = /* @__PURE__ */ new Set([\"link\", \"style\", \"script\", \"noscript\"]);\nconst HashKeyedPlugin = defineHeadPlugin({\n hooks: {\n \"tag:normalise\": ({ tag }) => {\n if (tag.key && DupeableTags.has(tag.tag)) {\n tag.props[\"data-hid\"] = tag._h = hashCode(tag.key);\n }\n }\n }\n});\n\nconst PayloadPlugin = defineHeadPlugin({\n mode: \"server\",\n hooks: {\n \"tags:beforeResolve\": (ctx) => {\n const payload = {};\n let hasPayload = false;\n for (const tag of ctx.tags) {\n if (tag._m !== \"server\" || tag.tag !== \"titleTemplate\" && tag.tag !== \"templateParams\" && tag.tag !== \"title\") {\n continue;\n }\n payload[tag.tag] = tag.tag === \"title\" || tag.tag === \"titleTemplate\" ? tag.textContent : tag.props;\n hasPayload = true;\n }\n if (hasPayload) {\n ctx.tags.push({\n tag: \"script\",\n innerHTML: JSON.stringify(payload),\n props: { id: \"unhead:payload\", type: \"application/json\" }\n });\n }\n }\n }\n});\n\nconst SortPlugin = defineHeadPlugin({\n hooks: {\n \"tags:resolve\": (ctx) => {\n for (const tag of ctx.tags) {\n if (typeof tag.tagPriority !== \"string\") {\n continue;\n }\n for (const { prefix, offset } of SortModifiers) {\n if (!tag.tagPriority.startsWith(prefix)) {\n continue;\n }\n const key = tag.tagPriority.substring(prefix.length);\n const position = ctx.tags.find((tag2) => tag2._d === key)?._p;\n if (position !== void 0) {\n tag._p = position + offset;\n break;\n }\n }\n }\n ctx.tags.sort((a, b) => {\n const aWeight = tagWeight(a);\n const bWeight = tagWeight(b);\n if (aWeight < bWeight) {\n return -1;\n } else if (aWeight > bWeight) {\n return 1;\n }\n return a._p - b._p;\n });\n }\n }\n});\n\nconst SupportedAttrs = {\n meta: \"content\",\n link: \"href\",\n htmlAttrs: \"lang\"\n};\nconst contentAttrs = [\"innerHTML\", \"textContent\"];\nconst TemplateParamsPlugin = defineHeadPlugin((head) => ({\n hooks: {\n \"tags:resolve\": (ctx) => {\n const { tags } = ctx;\n let templateParams;\n for (let i = 0; i < tags.length; i += 1) {\n const tag = tags[i];\n if (tag.tag !== \"templateParams\") {\n continue;\n }\n templateParams = ctx.tags.splice(i, 1)[0].props;\n i -= 1;\n }\n const params = templateParams || {};\n const sep = params.separator || \"|\";\n delete params.separator;\n params.pageTitle = processTemplateParams(\n // find templateParams\n params.pageTitle || tags.find((tag) => tag.tag === \"title\")?.textContent || \"\",\n params,\n sep\n );\n for (const tag of tags) {\n if (tag.processTemplateParams === false) {\n continue;\n }\n const v = SupportedAttrs[tag.tag];\n if (v && typeof tag.props[v] === \"string\") {\n tag.props[v] = processTemplateParams(tag.props[v], params, sep);\n } else if (tag.processTemplateParams || tag.tag === \"titleTemplate\" || tag.tag === \"title\") {\n for (const p of contentAttrs) {\n if (typeof tag[p] === \"string\")\n tag[p] = processTemplateParams(tag[p], params, sep, tag.tag === \"script\" && tag.props.type.endsWith(\"json\"));\n }\n }\n }\n head._templateParams = params;\n head._separator = sep;\n },\n \"tags:afterResolve\": ({ tags }) => {\n let title;\n for (let i = 0; i < tags.length; i += 1) {\n const tag = tags[i];\n if (tag.tag === \"title\" && tag.processTemplateParams !== false) {\n title = tag;\n }\n }\n if (title?.textContent) {\n title.textContent = processTemplateParams(title.textContent, head._templateParams, head._separator);\n }\n }\n }\n}));\n\nconst TitleTemplatePlugin = defineHeadPlugin({\n hooks: {\n \"tags:resolve\": (ctx) => {\n const { tags } = ctx;\n let titleTag;\n let titleTemplateTag;\n for (let i = 0; i < tags.length; i += 1) {\n const tag = tags[i];\n if (tag.tag === \"title\") {\n titleTag = tag;\n } else if (tag.tag === \"titleTemplate\") {\n titleTemplateTag = tag;\n }\n }\n if (titleTemplateTag && titleTag) {\n const newTitle = resolveTitleTemplate(\n titleTemplateTag.textContent,\n titleTag.textContent\n );\n if (newTitle !== null) {\n titleTag.textContent = newTitle || titleTag.textContent;\n } else {\n ctx.tags.splice(ctx.tags.indexOf(titleTag), 1);\n }\n } else if (titleTemplateTag) {\n const newTitle = resolveTitleTemplate(\n titleTemplateTag.textContent\n );\n if (newTitle !== null) {\n titleTemplateTag.textContent = newTitle;\n titleTemplateTag.tag = \"title\";\n titleTemplateTag = void 0;\n }\n }\n if (titleTemplateTag) {\n ctx.tags.splice(ctx.tags.indexOf(titleTemplateTag), 1);\n }\n }\n }\n});\n\nconst XSSPlugin = defineHeadPlugin({\n hooks: {\n \"tags:afterResolve\": (ctx) => {\n for (const tag of ctx.tags) {\n if (typeof tag.innerHTML === \"string\") {\n if (tag.innerHTML && (tag.props.type === \"application/ld+json\" || tag.props.type === \"application/json\")) {\n tag.innerHTML = tag.innerHTML.replace(/</g, \"\\\\u003C\");\n } else {\n tag.innerHTML = tag.innerHTML.replace(new RegExp(`</${tag.tag}`, \"g\"), `<\\\\/${tag.tag}`);\n }\n }\n }\n }\n }\n});\n\nlet activeHead;\n// @__NO_SIDE_EFFECTS__\nfunction createHead(options = {}) {\n const head = createHeadCore(options);\n head.use(DomPlugin());\n return activeHead = head;\n}\n// @__NO_SIDE_EFFECTS__\nfunction createServerHead(options = {}) {\n return activeHead = createHeadCore(options);\n}\nfunction filterMode(mode, ssr) {\n return !mode || mode === \"server\" && ssr || mode === \"client\" && !ssr;\n}\nfunction createHeadCore(options = {}) {\n const hooks = createHooks();\n hooks.addHooks(options.hooks || {});\n options.document = options.document || (IsBrowser ? document : void 0);\n const ssr = !options.document;\n const updated = () => {\n head.dirty = true;\n hooks.callHook(\"entries:updated\", head);\n };\n let entryCount = 0;\n let entries = [];\n const plugins = [];\n const head = {\n plugins,\n dirty: false,\n resolvedOptions: options,\n hooks,\n headEntries() {\n return entries;\n },\n use(p) {\n const plugin = typeof p === \"function\" ? p(head) : p;\n if (!plugin.key || !plugins.some((p2) => p2.key === plugin.key)) {\n plugins.push(plugin);\n filterMode(plugin.mode, ssr) && hooks.addHooks(plugin.hooks || {});\n }\n },\n push(input, entryOptions) {\n delete entryOptions?.head;\n const entry = {\n _i: entryCount++,\n input,\n ...entryOptions\n };\n if (filterMode(entry.mode, ssr)) {\n entries.push(entry);\n updated();\n }\n return {\n dispose() {\n entries = entries.filter((e) => e._i !== entry._i);\n updated();\n },\n // a patch is the same as creating a new entry, just a nice DX\n patch(input2) {\n for (const e of entries) {\n if (e._i === entry._i) {\n e.input = entry.input = input2;\n }\n }\n updated();\n }\n };\n },\n async resolveTags() {\n const resolveCtx = { tags: [], entries: [...entries] };\n await hooks.callHook(\"entries:resolve\", resolveCtx);\n for (const entry of resolveCtx.entries) {\n const resolved = entry.resolvedInput || entry.input;\n entry.resolvedInput = await (entry.transform ? entry.transform(resolved) : resolved);\n if (entry.resolvedInput) {\n for (const tag of await normaliseEntryTags(entry)) {\n const tagCtx = { tag, entry, resolvedOptions: head.resolvedOptions };\n await hooks.callHook(\"tag:normalise\", tagCtx);\n resolveCtx.tags.push(tagCtx.tag);\n }\n }\n }\n await hooks.callHook(\"tags:beforeResolve\", resolveCtx);\n await hooks.callHook(\"tags:resolve\", resolveCtx);\n await hooks.callHook(\"tags:afterResolve\", resolveCtx);\n return resolveCtx.tags;\n },\n ssr\n };\n [\n DedupePlugin,\n PayloadPlugin,\n EventHandlersPlugin,\n HashKeyedPlugin,\n SortPlugin,\n TemplateParamsPlugin,\n TitleTemplatePlugin,\n XSSPlugin,\n ...options?.plugins || []\n ].forEach((p) => head.use(p));\n head.hooks.callHook(\"init\", head);\n return head;\n}\n\nconst unheadComposablesImports = [\n {\n from: \"unhead\",\n imports: composableNames\n }\n];\n\nfunction getActiveHead() {\n return activeHead;\n}\n\nfunction useHead(input, options = {}) {\n const head = options.head || getActiveHead();\n return head?.push(input, options);\n}\n\nfunction useHeadSafe(input, options) {\n return useHead(input, {\n ...options,\n transform: whitelistSafeInput\n });\n}\n\nconst ScriptProxyTarget = Symbol(\"ScriptProxyTarget\");\nfunction scriptProxy() {\n}\nscriptProxy[ScriptProxyTarget] = true;\nfunction resolveScriptKey(input) {\n return input.key || hashCode(input.src || (typeof input.innerHTML === \"string\" ? input.innerHTML : \"\"));\n}\nfunction useScript(_input, _options) {\n const input = typeof _input === \"string\" ? { src: _input } : _input;\n const options = _options || {};\n const head = options.head || getActiveHead();\n if (!head)\n throw new Error(\"Missing Unhead context.\");\n const id = resolveScriptKey(input);\n const prevScript = head._scripts?.[id];\n if (prevScript) {\n prevScript.setupTriggerHandler(options.trigger);\n return prevScript;\n }\n options.beforeInit?.();\n const syncStatus = (s) => {\n script.status = s;\n head.hooks.callHook(`script:updated`, hookCtx);\n };\n ScriptNetworkEvents.forEach((fn) => {\n const _fn = typeof input[fn] === \"function\" ? input[fn].bind(options.eventContext) : null;\n input[fn] = (e) => {\n syncStatus(fn === \"onload\" ? \"loaded\" : fn === \"onerror\" ? \"error\" : \"loading\");\n _fn?.(e);\n };\n });\n const _cbs = { loaded: [], error: [] };\n const _registerCb = (key, cb) => {\n if (_cbs[key]) {\n const i = _cbs[key].push(cb);\n return () => _cbs[key]?.splice(i - 1, 1);\n }\n cb(script.instance);\n return () => {\n };\n };\n const loadPromise = new Promise((resolve) => {\n if (head.ssr)\n return;\n const emit = (api) => requestAnimationFrame(() => resolve(api));\n const _ = head.hooks.hook(\"script:updated\", ({ script: script2 }) => {\n const status = script2.status;\n if (script2.id === id && (status === \"loaded\" || status === \"error\")) {\n if (status === \"loaded\") {\n if (typeof options.use === \"function\") {\n const api = options.use();\n if (api) {\n emit(api);\n }\n } else {\n emit({});\n }\n } else if (status === \"error\") {\n resolve(false);\n }\n _();\n }\n });\n });\n const script = Object.assign(loadPromise, {\n instance: !head.ssr && options?.use?.() || null,\n proxy: null,\n id,\n status: \"awaitingLoad\",\n remove() {\n script._triggerAbortController?.abort();\n script._triggerPromises = [];\n if (script.entry) {\n script.entry.dispose();\n script.entry = void 0;\n syncStatus(\"removed\");\n delete head._scripts?.[id];\n return true;\n }\n return false;\n },\n load(cb) {\n script._triggerAbortController?.abort();\n script._triggerPromises = [];\n if (!script.entry) {\n syncStatus(\"loading\");\n const defaults = {\n defer: true,\n fetchpriority: \"low\"\n };\n if (input.src && (input.src.startsWith(\"http\") || input.src.startsWith(\"//\"))) {\n defaults.crossorigin = \"anonymous\";\n defaults.referrerpolicy = \"no-referrer\";\n }\n script.entry = head.push({\n script: [{ ...defaults, ...input, key: `script.${id}` }]\n }, options);\n }\n if (cb)\n _registerCb(\"loaded\", cb);\n return loadPromise;\n },\n onLoaded(cb) {\n return _registerCb(\"loaded\", cb);\n },\n onError(cb) {\n return _registerCb(\"error\", cb);\n },\n setupTriggerHandler(trigger) {\n if (script.status !== \"awaitingLoad\") {\n return;\n }\n if ((typeof trigger === \"undefined\" || trigger === \"client\") && !head.ssr || trigger === \"server\") {\n script.load();\n } else if (trigger instanceof Promise) {\n if (head.ssr) {\n return;\n }\n if (!script._triggerAbortController) {\n script._triggerAbortController = new AbortController();\n script._triggerAbortPromise = new Promise((resolve) => {\n script._triggerAbortController.signal.addEventListener(\"abort\", () => {\n script._triggerAbortController = null;\n resolve();\n });\n });\n }\n script._triggerPromises = script._triggerPromises || [];\n const idx = script._triggerPromises.push(Promise.race([\n trigger.then((v) => typeof v === \"undefined\" || v ? script.load : void 0),\n script._triggerAbortPromise\n ]).catch(() => {\n }).then((res2) => {\n res2?.();\n }).finally(() => {\n script._triggerPromises?.splice(idx, 1);\n }));\n } else if (typeof trigger === \"function\") {\n trigger(script.load);\n }\n },\n _cbs\n });\n loadPromise.then((api) => {\n if (api !== false) {\n script.instance = api;\n _cbs.loaded?.forEach((cb) => cb(api));\n _cbs.loaded = null;\n } else {\n _cbs.error?.forEach((cb) => cb());\n _cbs.error = null;\n }\n });\n const hookCtx = { script };\n script.setupTriggerHandler(options.trigger);\n script.$script = script;\n const proxyChain = (instance, accessor, accessors) => {\n return new Proxy((!accessor ? instance : instance?.[accessor]) || scriptProxy, {\n get(_, k, r) {\n head.hooks.callHook(\"script:instance-fn\", { script, fn: k, exists: k in _ });\n if (!accessor) {\n const stub = options.stub?.({ script, fn: k });\n if (stub)\n return stub;\n }\n if (_ && k in _ && typeof _[k] !== \"undefined\") {\n return Reflect.get(_, k, r);\n }\n if (k === Symbol.iterator) {\n return [][Symbol.iterator];\n }\n return proxyChain(accessor ? instance?.[accessor] : instance, k, accessors || [k]);\n },\n async apply(_, _this, args) {\n if (head.ssr && _[ScriptProxyTarget])\n return;\n let instance2;\n const access = (fn2) => {\n instance2 = fn2 || instance2;\n for (let i = 0; i < (accessors || []).length; i++) {\n const k = (accessors || [])[i];\n fn2 = fn2?.[k];\n }\n return fn2;\n };\n let fn = access(script.instance);\n if (!fn) {\n fn = await new Promise((resolve) => {\n script.onLoaded((api) => {\n resolve(access(api));\n });\n });\n }\n return typeof fn === \"function\" ? Reflect.apply(fn, instance2, args) : fn;\n }\n });\n };\n script.proxy = proxyChain(script.instance);\n const res = new Proxy(script, {\n get(_, k) {\n const target = k in script || String(k)[0] === \"_\" ? script : script.proxy;\n if (k === \"then\" || k === \"catch\") {\n return script[k].bind(script);\n }\n return Reflect.get(target, k, target);\n }\n });\n head._scripts = Object.assign(head._scripts || {}, { [id]: res });\n return res;\n}\n\nfunction useSeoMeta(input, options) {\n const { title, titleTemplate, ...meta } = input;\n return useHead({\n title,\n titleTemplate,\n // we need to input the meta so the reactivity will be resolved\n // @ts-expect-error runtime type\n _flatMeta: meta\n }, {\n ...options,\n transform(t) {\n const meta2 = unpackMeta({ ...t._flatMeta });\n delete t._flatMeta;\n return {\n // @ts-expect-error runtime type\n ...t,\n meta: meta2\n };\n }\n });\n}\n\nfunction useServerHead(input, options = {}) {\n return useHead(input, { ...options, mode: \"server\" });\n}\n\nfunction useServerHeadSafe(input, options = {}) {\n return useHeadSafe(input, { ...options, mode: \"server\" });\n}\n\nfunction useServerSeoMeta(input, options) {\n return useSeoMeta(input, {\n ...options,\n mode: \"server\"\n });\n}\n\nconst importRe = /@import/;\n// @__NO_SIDE_EFFECTS__\nfunction CapoPlugin(options) {\n return defineHeadPlugin({\n hooks: {\n \"tags:beforeResolve\": ({ tags }) => {\n for (const tag of tags) {\n if (tag.tagPosition && tag.tagPosition !== \"head\")\n continue;\n tag.tagPriority = tag.tagPriority || tagWeight(tag);\n if (tag.tagPriority !== 100)\n continue;\n const isTruthy = (val) => val === \"\" || val === true;\n const isScript = tag.tag === \"script\";\n const isLink = tag.tag === \"link\";\n if (isScript && isTruthy(tag.props.async)) {\n tag.tagPriority = 30;\n } else if (tag.tag === \"style\" && tag.innerHTML && importRe.test(tag.innerHTML)) {\n tag.tagPriority = 40;\n } else if (isScript && tag.props.src && !isTruthy(tag.props.defer) && !isTruthy(tag.props.async) && tag.props.type !== \"module\" && !tag.props.type?.endsWith(\"json\")) {\n tag.tagPriority = 50;\n } else if (isLink && tag.props.rel === \"stylesheet\" || tag.tag === \"style\") {\n tag.tagPriority = 60;\n } else if (isLink && (tag.props.rel === \"preload\" || tag.props.rel === \"modulepreload\")) {\n tag.tagPriority = 70;\n } else if (isScript && isTruthy(tag.props.defer) && tag.props.src && !isTruthy(tag.props.async)) {\n tag.tagPriority = 80;\n } else if (isLink && (tag.props.rel === \"prefetch\" || tag.props.rel === \"dns-prefetch\" || tag.props.rel === \"prerender\")) {\n tag.tagPriority = 90;\n }\n }\n options?.track && tags.push({\n tag: \"htmlAttrs\",\n props: {\n \"data-capo\": \"\"\n }\n });\n }\n }\n });\n}\n\n// @__NO_SIDE_EFFECTS__\nfunction HashHydrationPlugin() {\n return defineHeadPlugin({});\n}\n\nexport { CapoPlugin, HashHydrationPlugin, createHead, createHeadCore, createServerHead, getActiveHead, resolveScriptKey, unheadComposablesImports, useHead, useHeadSafe, useScript, useSeoMeta, useServerHead, useServerHeadSafe, useServerSeoMeta };\n"],"names":["activeHead","getActiveHead","useHead","input","options","head"],"mappings":"AAqUA,IAAIA,EA+GJ,SAASC,GAAgB,CACvB,OAAOD,CACT,CAEA,SAASE,EAAQC,EAAOC,EAAU,GAAI,CACpC,MAAMC,EAAOD,EAAQ,MAAQH,EAAe,EAC5C,OAAOI,GAAA,YAAAA,EAAM,KAAKF,EAAOC,EAC3B","x_google_ignoreList":[0]}