{"version":3,"file":"client.mjs","names":[],"sources":["../app/assets/vbptax-teaser.css?inline","../app/vbptax-teaser.client.ts"],"sourcesContent":[":host {\n    --vbptax-phone-nudge: -80px;\n    --vbptax-phone-offset-x: 60px;\n    --vbptax-phone-offset-y: -25px;\n    background: transparent;\n    box-sizing: border-box;\n    display: block;\n    height: 360px;\n    min-height: 360px;\n    min-width: 0;\n    width: 100%;\n}\n\n.vbptax-TeaserLink {\n    color: inherit;\n    display: block;\n    height: 100%;\n    overflow: visible;\n    text-decoration: none;\n}\n\n.vbptax-Widget {\n    box-sizing: border-box;\n    display: flex;\n    flex-direction: column;\n    font-family: Inter, Arial, sans-serif;\n    height: 100%;\n    isolation: isolate;\n    line-height: normal;\n    /* Kein Clipping: Freisteller darf über die Widget-Box hinauszeichnen (rechts), statt ihn nach links zu schieben. */\n    overflow: visible;\n    padding: 20px;\n    position: relative;\n    text-align: center;\n    z-index: 0;\n}\n\n.vbptax-Widget-title {\n    color: #fff;\n    font-size: 30px;\n    font-weight: 700;\n    margin: 30px 0 16px;\n    position: relative;\n    white-space: nowrap;\n    z-index: 2;\n}\n\n.vbptax-Widget-titleMobileSecondLine {\n    display: inline;\n}\n\n.vbptax-Widget-subtitle {\n    color: #fff;\n    font-size: 18px;\n    font-weight: 400;\n    margin: 0 0 8px;\n    position: relative;\n    z-index: 2;\n}\n\n.vbptax-Widget-subtitleDesktop {\n    display: inline;\n}\n\n.vbptax-Widget-subtitleMobile {\n    display: none;\n}\n\n.vbptax-Widget-content {\n    flex: 1;\n    min-height: 0;\n    overflow: visible;\n    position: relative;\n    z-index: 0;\n}\n\n.vbptax-Widget-phoneImage{\n    /* Wie früheres Phone: groß unten, von der Mitte aus mit --vbptax-phone-nudge feinjustierbar */\n    background-position: center bottom;\n    background-repeat: no-repeat;\n    background-size: auto 400px;\n    bottom: -60px;\n    height: 400px;\n    left: 50%;\n    pointer-events: none;\n    position: absolute;\n    transform: translateX(calc(var(--vbptax-phone-nudge) + var(--vbptax-phone-offset-x)))\n        translateY(var(--vbptax-phone-offset-y));\n    width: 750px;\n    z-index: 0;\n}\n\n.vbptax-Widget-sealImage {\n    background-size: contain;\n    background-repeat: no-repeat;\n    width: 75px;\n    display: none;\n    position: absolute;\n    bottom: 64px;\n    height: 76px;\n    left: 75%;\n}\n\n.vbptax-Widget-searchForm {\n    align-items: center;\n    background: #fff;\n    border: 3px solid #f2b318;\n    border-radius: 999px;\n    bottom: 20px;\n    box-sizing: border-box;\n    display: flex;\n    gap: 20px;\n    height: 64px;\n    justify-content: space-between;\n    left: 50%;\n    padding: 4px;\n    position: absolute;\n    transform: translateX(-50%);\n    z-index: 1;\n}\n\n.vbptax-Widget-searchFormLeft {\n    color: #181818;\n    flex: 1;\n    font-size: 16px;\n    margin-left: 24px;\n    position: relative;\n    text-align: center;\n    top: -1px;\n    white-space: nowrap;\n}\n\n.vbptax-Widget-searchFormRight {\n    align-items: center;\n    background: #0563c1;\n    border: 0;\n    border-radius: 999px;\n    box-sizing: border-box;\n    color: #fff;\n    cursor: pointer;\n    display: inline-flex;\n    font-size: 16px;\n    height: 100%;\n    justify-content: center;\n    padding: 0 50px;\n    white-space: nowrap;\n}\n\n.vbptax-Widget-deadlineCountdown {\n    background: #011673;\n    background: linear-gradient(174deg, rgba(1, 22, 115, 1) 0%, rgba(14, 77, 190, 1) 100%);\n    color: white;\n    display: flex;\n    flex-direction: column;\n    height: 100vh;\n    width: 100%;\n    z-index: 1;\n}\n\n.vbptax-Widget-deadlineCountdown-countdown {\n    display: flex;\n    flex: 0.2;\n    flex-direction: column;\n    margin: 0px auto;\n    position: relative;\n    width: 250px;\n    z-index: 1;\n}\n\n.vbptax-Widget-deadlineCountdown-countdownSegments {\n    flex-direction: row;\n    justify-content: space-between;\n    padding: 8px;\n    display: flex;\n}\n\n.vbptax-Widget-deadlineCountdown-countdownSegment {\n    text-align: center;\n    flex-direction: column;\n    justify-content: center;\n    width: 25%;\n    display: flex;\n    background: white;\n    border-radius: 6px;\n    padding: 6px;\n    margin: 2px;\n    color: #0450A0;\n\n    &:not(:first-child) {\n        border-left: 1px solid #2c61cc;\n    }\n}\n\n.vbptax-Widget-deadlineCountdown-countdownValue {\n    font-family: Inter, Arial, sans-serif;\n    font-size: 22px;\n    font-weight: bold;\n    margin-bottom: 2px;\n}\n\n.vbptax-Widget-deadlineCountdown-countdownLabel {\n    font-family: Inter, Arial, sans-serif;\n    font-size: 10px;\n    text-transform: uppercase;\n}\n\n@media (min-width: 960px) {\n    .vbptax-TeaserLink {\n        cursor: default;\n        pointer-events: none;\n    }\n\n    .vbptax-Widget-phoneImage {\n        /* Etwas breiter, wächst nach rechts (linker Rand bleibt bei left: 50% + transform) */\n        width: 800px;\n    }\n\n    .vbptax-Widget-searchForm {\n        bottom: 40px;\n    }\n\n    .vbptax-Widget-searchFormRight {\n        pointer-events: auto;\n    }\n}\n\n/* CTA bleibt sichtbar (≥960px), Phone etwas nach links */\n@media (max-width: 1110px) and (min-width: 960px) {\n    .vbptax-Widget-phoneImage {\n        transform: translateX(calc(var(--vbptax-phone-nudge) + var(--vbptax-phone-offset-x) - 45px))\n            translateY(var(--vbptax-phone-offset-y));\n    }\n}\n\n@media (max-width: 1020px) and (min-width: 960px) {\n    .vbptax-Widget-phoneImage {\n        background-size: auto 360px;\n        bottom: -54px;\n        height: 360px;\n        transform: translateX(calc(var(--vbptax-phone-nudge) + var(--vbptax-phone-offset-x) - 30px))\n            translateY(var(--vbptax-phone-offset-y));\n        width: 720px;\n    }\n}\n\n@media (max-width: 959px) {\n    .vbptax-Widget-phoneImage {\n        transform: translateX(calc(var(--vbptax-phone-nudge) - 90px + var(--vbptax-phone-offset-x)))\n            translateY(var(--vbptax-phone-offset-y));\n    }\n\n    .vbptax-TeaserLink {\n        cursor: pointer;\n    }\n\n    .vbptax-Widget-searchForm {\n        display: none;\n    }\n\n    .vbptax-Widget-subtitle {\n        max-width: 275px;\n        align-self: center;\n        line-height: 1.2;\n    }\n}\n\n@media (max-width: 880px) and (min-width: 769px) {\n    .vbptax-Widget-phoneImage {\n        background-size: auto 360px;\n        bottom: -54px;\n        height: 360px;\n        width: 675px;\n    }\n}\n\n@media (max-width: 768px) {\n    :host {\n        height: 230px;\n        min-height: 230px;\n    }\n\n    .vbptax-Widget {\n        margin-top: -9px;\n        padding: 0 32px 16px;\n        text-align: left;\n    }\n\n    .vbptax-Widget-title {\n        font-size: 20px;\n        margin: 35px 0 20px;\n    }\n\n    .vbptax-Widget-titleMobileSecondLine {\n        display: block;\n        margin-left: 0;\n    }\n\n    .vbptax-Widget-subtitle {\n        font-size: 18px;\n        align-self: inherit;\n        margin-bottom: 16px;\n    }\n\n    .vbptax-Widget-subtitleDesktop {\n        display: none;\n    }\n\n    .vbptax-Widget-subtitleMobile {\n        display: inline;\n    }\n\n    .vbptax-Widget-searchForm {\n        height: 52px;\n        width: min(440px, calc(100% - 12px));\n    }\n\n    .vbptax-Widget-phoneImage {\n        background-size: auto 250px;\n        bottom: -34px;\n        left: 0%;\n        margin-left: -16px;\n        transform: translate(calc(30px + var(--vbptax-phone-offset-x)), var(--vbptax-phone-offset-y));\n    }\n\n    .vbptax-Widget-searchFormLeft,\n    .vbptax-Widget-searchFormRight {\n        font-size: 22px;\n    }\n\n    .vbptax-Widget-searchFormRight {\n        min-width: 170px;\n        padding: 0 14px;\n    }\n\n    .vbptax-Widget-deadlineCountdown-countdown {\n        margin: inherit;\n    }\n\n    .vbptax-Widget-deadlineCountdown-countdownSegments {\n        padding: 0;\n    }\n}\n\n@media (max-width: 585px) {\n    .vbptax-Widget-phoneImage {\n        transform: translate(calc(-100px + var(--vbptax-phone-offset-x)), var(--vbptax-phone-offset-y));\n    }\n}\n\n@media (max-width: 460px) {\n    .vbptax-Widget-title {\n        margin: 20px 0 20px;\n    }\n\n    .vbptax-Widget-subtitleDesktop {\n        display: none;\n    }\n\n    .vbptax-Widget-sealImage {\n        display: block;\n    }\n\n    .vbptax-Widget-phoneImage {\n        display: none;\n    }\n\n    .vbptax-Widget-deadlineCountdown-countdown {\n        width: 200px;\n    }\n\n    .vbptax-Widget-deadlineCountdown-countdownValue {\n        font-size: 18px;\n    }\n}\n\n@media (min-width: 390px) and (max-width: 460px) {\n    .vbptax-Widget-sealImage {\n        width: 100px;\n        height: 100px;\n        left: 72%;\n        bottom: 56px;\n    }\n}\n\n@media (max-width: 390px) {\n    .vbptax-Widget-sealImage {\n        bottom: 108px;\n    }\n}\n\n@media (max-width: 360px) {\n    .vbptax-Widget-title {\n        margin: 30px 0 20px;\n    }\n}\n","/// <reference types=\"../.check24-home/types/client\" />\nimport {Language} from \"../.check24-home/types/check24\";\nimport {HomeClientComponentElement, HomeClientComponentProps, UserInfo} from \"../.check24-home/types/client\";\nimport WIDGET_STYLES from \"./assets/vbptax-teaser.css?inline\";\n\ninterface WidgetAttributes extends HomeClientComponentProps {\n    title: string;\n    subtitle: string;\n    subtitlemobile: string;\n    href: string;\n}\n\ninterface TeaserVariant {\n    title: string;\n    subtitleDesktop: string;\n    subtitleMobile: string;\n    titleFirstPart: string;\n    titleSecondPart: string;\n    searchformLeftText: string;\n}\n\nfunction phoneImageUrlNextToClient(name: string): string {\n    if (import.meta.env.DEV) {\n        return new URL(\"/\" + name, self.location?.href ?? \"http://localhost:3000/\").href;\n    }\n    const base = import.meta.url;\n    const slash = base.lastIndexOf(\"/\");\n    return `${base.slice(0, slash + 1)}` + name;\n}\n\nconst PHONE_IMAGE = phoneImageUrlNextToClient(\"visual-steuer-v2.png\");\nconst SEAL_IMAGE = phoneImageUrlNextToClient(\"seal-stiftung-warentest.webp\");\n\nconst MS_PER_DAY = 86_400_000;\nconst TEXT_VARIANTS: readonly [TeaserVariant, TeaserVariant] = [\n    {\n        title: \"Gratis Steuererklärung\",\n        subtitleDesktop: \"Hol Dir im Schnitt 1.240 € zurück – Abgabefrist: 31. Juli\",\n        subtitleMobile: \"Abgabefrist: 31. Juli\",\n        titleFirstPart: \"Gratis\",\n        titleSecondPart: \"Steuererklärung\",\n        searchformLeftText: \"Steuer kostenlos erledigen\",\n    },\n] as const;\n\nconst DEFAULT_TITLE = TEXT_VARIANTS[0].title;\nconst DEFAULT_SUBTITLE_DESKTOP = TEXT_VARIANTS[0].subtitleDesktop;\nconst DEFAULT_SUBTITLE_MOBILE = TEXT_VARIANTS[0].subtitleMobile;\nconst DEFAULT_HREF = \"https://steuer.check24.de/?ts=check24&tc=teaser\";\nconst OBSERVED_ATTRIBUTES = [\n    \"title\",\n    \"subtitle\",\n    \"subtitle-mobile\",\n    \"subtitlemobile\",\n    \"href\",\n    \"system-time\",\n    \"device-output\",\n    \"deviceoutput\",\n    \"language\",\n    \"user\",\n    \"platform\",\n] as const;\n\nfunction convertToPrintDate(secondsTotal: number) {\n    const days = Math.floor(secondsTotal / 86400);\n    const hours = Math.floor((secondsTotal % 86400) / 3600);\n    const minutes = Math.floor(((secondsTotal % 86400) % 3600) / 60);\n    const seconds = Math.floor(((secondsTotal % 86400) % 3600) % 60);\n\n    return {\n        days: (days < 10 ? \"0\" + days : days).toString(),\n        hours: (hours < 10 ? \"0\" + hours : hours).toString(),\n        minutes: (minutes < 10 ? \"0\" + minutes : minutes).toString(),\n        seconds: (seconds < 10 ? \"0\" + seconds : seconds).toString(),\n    };\n}\n\nfunction getUnixTime(date: undefined | Date) {\n    if (!date) {\n        date = new Date();\n    }\n\n    return Math.round(date.getTime() / 1000);\n}\n\nexport default class VbptaxWidgetClient extends HTMLElement implements HomeClientComponentElement {\n    constructor() {\n        super();\n        this.shadow = this.attachShadow({mode: \"closed\"});\n        const hostSizing = document.createElement(\"style\");\n        hostSizing.textContent = `\n            :host {\n                background: transparent;\n                box-sizing: border-box;\n                display: block;\n                height: 360px;\n                min-height: 360px;\n                min-width: 0;\n                width: 100%;\n            }\n            @media (max-width: 768px) {\n                :host {\n                    height: 230px;\n                    min-height: 230px;\n                }\n            }\n        `;\n        this.shadow.appendChild(hostSizing);\n    }\n\n    title: string = DEFAULT_TITLE;\n    subtitleDesktop: string = DEFAULT_SUBTITLE_DESKTOP;\n    subtitleMobile: string = DEFAULT_SUBTITLE_MOBILE;\n    href: string = DEFAULT_HREF;\n    titleFirstPart: string = TEXT_VARIANTS[0].titleFirstPart;\n    titleSecondPart: string = TEXT_VARIANTS[0].titleSecondPart;\n    searchformLeftText: string = TEXT_VARIANTS[0].searchformLeftText;\n\n    deviceOutput: \"desktop\" | \"mobile\" | \"tabletapp\" | \"app\" = \"desktop\";\n    language: Language = \"de-DE\";\n    user?: UserInfo;\n    platform: \"app\" | \"web\" = \"web\";\n\n    private shadow: ShadowRoot;\n    private lastRenderedMarkup = \"\";\n\n    static get observedAttributes(): string[] {\n        return [...OBSERVED_ATTRIBUTES];\n    }\n\n    attributeChangedCallback(_name: string, oldValue: string | null, newValue: string | null): void {\n        if (oldValue === newValue) return;\n        this.syncAttributes();\n        this.render();\n    }\n\n    connectedCallback(): void {\n        this.syncAttributes();\n        this.render();\n    }\n\n    private syncAttributes(): void {\n        const systemTime = Number(this.getAttribute(\"system-time\") || 0);\n        const dayIndex = Math.floor((systemTime * 1000) / MS_PER_DAY);\n        const variant = dayIndex % 2 === 0 ? TEXT_VARIANTS[0] : TEXT_VARIANTS[0];\n        this.applyVariant(variant);\n\n        this.title = this.getAttribute(\"title\") || this.title;\n        this.subtitleDesktop = this.getAttribute(\"subtitle\") || this.subtitleDesktop;\n        this.subtitleMobile = this.getAttribute(\"subtitle-mobile\") || this.getAttribute(\"subtitlemobile\") || this.subtitleMobile;\n        this.href = this.getAttribute(\"href\") || DEFAULT_HREF;\n\n        const host = this.readHostPropsFromAttributes();\n        this.deviceOutput = host.deviceOutput;\n        this.language = host.language;\n        this.user = host.user;\n        this.platform = host.platform;\n    }\n\n    /** Host attributes; uses C24Home when present (production), else parses like the local preview mock. */\n    private readHostPropsFromAttributes(): HomeClientComponentProps {\n        const fallback = (): HomeClientComponentProps => this.parseHostAttributesFallback();\n        try {\n            if (typeof C24Home !== \"undefined\" && typeof C24Home.validateAttributes === \"function\") {\n                const validated = C24Home.validateAttributes<WidgetAttributes>(this.attributes);\n                const fb = fallback();\n                return {\n                    deviceOutput: validated.deviceOutput ?? fb.deviceOutput,\n                    language: validated.language ?? fb.language,\n                    platform: validated.platform ?? fb.platform,\n                    user: validated.user ?? fb.user,\n                };\n            }\n        } catch {\n            /* Web Component Management preview may not inject C24Home */\n        }\n        return fallback();\n    }\n\n    private parseHostAttributesFallback(): HomeClientComponentProps {\n        const attrs = this.attributes;\n        const out: Partial<HomeClientComponentProps> & {user?: UserInfo} = {};\n\n        for (let i = 0; i < attrs.length; i++) {\n            const attr = attrs[i];\n            const camelName = attr.name.replace(/-([a-z])/g, (_, c: string) => c.toUpperCase());\n            const value = attr.value;\n\n            if (camelName === \"deviceOutput\" || camelName === \"deviceoutput\") {\n                const v = value || \"desktop\";\n                if (v === \"desktop\" || v === \"mobile\" || v === \"tabletapp\" || v === \"app\") {\n                    out.deviceOutput = v;\n                }\n            } else if (camelName === \"language\") {\n                out.language = (value || \"de-DE\") as Language;\n            } else if (camelName === \"platform\") {\n                const p = value || \"web\";\n                if (p === \"app\" || p === \"web\") {\n                    out.platform = p;\n                }\n            } else if (camelName === \"user\" && value) {\n                try {\n                    out.user = JSON.parse(value) as UserInfo;\n                } catch {\n                    out.user = undefined;\n                }\n            }\n        }\n\n        return {\n            deviceOutput: out.deviceOutput ?? \"desktop\",\n            language: (out.language ?? \"de-DE\") as Language,\n            platform: out.platform ?? \"web\",\n            user: out.user,\n        };\n    }\n\n    private applyVariant(variant: TeaserVariant): void {\n        this.title = variant.title;\n        this.subtitleDesktop = variant.subtitleDesktop;\n        this.subtitleMobile = variant.subtitleMobile;\n        this.titleFirstPart = variant.titleFirstPart;\n        this.titleSecondPart = variant.titleSecondPart;\n        this.searchformLeftText = variant.searchformLeftText;\n    }\n\n    private navigateToHref(): void {\n        window.location.href = this.href;\n    }\n\n    private buildMarkup(): string {\n        const titleFirstPart = this.titleFirstPart;\n        const titleSecondPart = this.titleSecondPart;\n        const subtitleDesktop = this.subtitleDesktop;\n        const subtitleMobile = this.subtitleMobile;\n        const searchformLeftText = this.searchformLeftText;\n        const href = this.href;\n        const ariaLabel = `${this.title} - ${this.subtitleDesktop}`;\n        const titleSecondPartMarkup = this.titleSecondPart ? `<span class=\"vbptax-Widget-titleMobileSecondLine\">${titleSecondPart}</span>` : \"\";\n\n        return `\n      <style>${WIDGET_STYLES}</style>\n      <a class=\"vbptax-TeaserLink\" href=\"${href}\" aria-label=\"${ariaLabel}\">\n        <div class=\"vbptax-Widget\">\n          <h2 class=\"vbptax-Widget-title\">\n            <span>${titleFirstPart}</span>\n            ${titleSecondPartMarkup}\n          </h2>\n          <p class=\"vbptax-Widget-subtitle\">\n            <span class=\"vbptax-Widget-subtitleDesktop\">${subtitleDesktop}</span>\n            <span class=\"vbptax-Widget-subtitleMobile\">${subtitleMobile}</span>\n          </p>\n          <div class=\"vbptax-Widget-deadlineCountdown-countdown\">\n                <div class=\"vbptax-Widget-deadlineCountdown-countdownSegments\">\n                    <div class=\"vbptax-Widget-deadlineCountdown-countdownSegment\">\n                        <span id=\"countdown-days\" class=\"vbptax-Widget-deadlineCountdown-countdownValue\">21</span>\n                        <span class=\"vbptax-Widget-deadlineCountdown-countdownLabel\">Tage</span>\n                    </div>\n                    <div class=\"vbptax-Widget-deadlineCountdown-countdownSegment\">\n                        <span id=\"countdown-hours\" class=\"vbptax-Widget-deadlineCountdown-countdownValue\">04</span>\n                        <span class=\"vbptax-Widget-deadlineCountdown-countdownLabel\">Std</span>\n                    </div>\n                    <div class=\"vbptax-Widget-deadlineCountdown-countdownSegment\">\n                        <span id=\"countdown-minutes\" class=\"vbptax-Widget-deadlineCountdown-countdownValue\">34</span>\n                        <span class=\"vbptax-Widget-deadlineCountdown-countdownLabel\">Min</span>\n                    </div>\n                    <div class=\"vbptax-Widget-deadlineCountdown-countdownSegment\">\n                        <span id=\"countdown-seconds\" class=\"vbptax-Widget-deadlineCountdown-countdownValue\">17</span>\n                        <span class=\"vbptax-Widget-deadlineCountdown-countdownLabel\">Sek</span>\n                    </div>\n                </div>\n            </div>\n          <div class=\"vbptax-Widget-content\">\n            <div class=\"vbptax-Widget-phoneImage\" style=\"background-image: url('${PHONE_IMAGE}');\" aria-hidden=\"true\"></div>\n            <div class=\"vbptax-Widget-sealImage\" style=\"background-image: url('${SEAL_IMAGE}');\" aria-hidden=\"true\"></div>\n            <div class=\"vbptax-Widget-searchForm\">\n              <span class=\"vbptax-Widget-searchFormLeft\">${searchformLeftText}</span>\n              <button class=\"vbptax-Widget-searchFormRight\" type=\"button\">Geld zurückholen</button>\n            </div>\n          </div>\n        </div>\n      </a>\n    `;\n    }\n\n    private render(): void {\n        if (!this.shadow) {\n            return;\n        }\n\n        const markup = this.buildMarkup();\n        if (markup === this.lastRenderedMarkup) {\n            return;\n        }\n\n        this.shadow.innerHTML = markup;\n        const searchFormRightButton = this.shadow.querySelector<HTMLButtonElement>(\".vbptax-Widget-searchFormRight\");\n        searchFormRightButton?.addEventListener(\"click\", () => this.navigateToHref());\n        this.lastRenderedMarkup = markup;\n\n        const endDateString = \"2026-08-01T00:00:00+02:00\";\n        const endTime = getUnixTime(new Date(endDateString));\n\n        const updateCountdown = () => {\n            const currentTime = getUnixTime(undefined);\n            const difference = endTime - currentTime;\n\n            const newTimeInfo = convertToPrintDate(difference);\n\n            // @ts-ignore\n            this.shadow.querySelector<HTMLElement>(\"#countdown-days\").textContent = newTimeInfo.days;\n            // @ts-ignore\n            this.shadow.querySelector<HTMLElement>(\"#countdown-hours\").textContent = newTimeInfo.hours;\n            // @ts-ignore\n            this.shadow.querySelector<HTMLElement>(\"#countdown-minutes\").textContent = newTimeInfo.minutes;\n            // @ts-ignore\n            this.shadow.querySelector<HTMLElement>(\"#countdown-seconds\").textContent = newTimeInfo.seconds;\n        };\n\n        updateCountdown();\n        setInterval(updateCountdown, 1000);\n    }\n}\n\nif (!customElements.get(\"vbptax-teaser\")) {\n    customElements.define(\"vbptax-teaser\", VbptaxWidgetClient);\n}\n"],"mappings":"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"}