{"version":3,"file":"login.obs.js","sources":["../../src/Security/Login/credentialLogin.partial.obs","../../src/Security/Login/externalLogin.partial.obs","../../src/Security/Login/loginMethodPicker.partial.obs","../../src/Security/Login/passwordlessLoginStartStep.partial.obs","../../src/Security/Login/passwordlessLoginVerifyStep.partial.obs","../../src/Security/Login/passwordlessLogin.partial.obs","../../src/Security/login.obs"],"sourcesContent":["<!-- Copyright by the Spark Development Network; Licensed under the Rock Community License -->\r\n<template>\r\n    <RockForm @submit=\"onCredentialLoginSubmitted\">\r\n        <div v-if=\"config.promptMessage\" v-html=\"config.promptMessage\"></div>\r\n\r\n        <TextBox\r\n            v-model=\"username\"\r\n            :disabled=\"disabled\"\r\n            :isRequiredIndicatorHidden=\"true\"\r\n            :label=\"usernameFieldLabel\"\r\n            rules=\"required\"\r\n            type=\"text\"\r\n            ></TextBox>\r\n        <TextBox\r\n            v-model=\"password\"\r\n            :disabled=\"disabled\"\r\n            :isRequiredIndicatorHidden=\"true\"\r\n            label=\"Password\"\r\n            rules=\"required\"\r\n            type=\"password\"></TextBox>\r\n        <InlineCheckBox\r\n            v-model=\"rememberMe\"\r\n            :disabled=\"disabled\"\r\n            label=\"Keep me logged in\"></InlineCheckBox>\r\n\r\n        <RockButton\r\n            autoDisable\r\n            :btnType=\"BtnType.Primary\"\r\n            :class=\"isMobileForced? 'w-100' : 'w-100 d-sm-none'\"\r\n            :disabled=\"disabled\"\r\n            type=\"submit\">Log In</RockButton>\r\n        <RockButton\r\n            v-if=\"!isMobileForced\"\r\n            autoDisable\r\n            :btnType=\"BtnType.Primary\"\r\n            class=\"d-none d-sm-inline-block\"\r\n            :disabled=\"disabled\"\r\n            type=\"submit\">Log In</RockButton>\r\n\r\n        <RockButton\r\n            v-if=\"!config.hideNewAccountOption\"\r\n            autoDisable\r\n            :btnType=\"BtnType.Action\"\r\n            :class=\"isMobileForced ? 'w-100 mt-2' : 'w-100 mt-2 d-sm-none'\"\r\n            :disabled=\"disabled\"\r\n            type=\"button\"\r\n            @click=\"onRegisterClicked\">{{ newAccountButtonText }}</RockButton>\r\n        <RockButton\r\n            v-if=\"!isMobileForced && !config.hideNewAccountOption\"\r\n            autoDisable\r\n            :btnType=\"BtnType.Action\"\r\n            class=\"ml-1 d-none d-sm-inline-block\"\r\n            :disabled=\"disabled\"\r\n            type=\"button\"\r\n            @click=\"onRegisterClicked\">{{ newAccountButtonText }}</RockButton>\r\n\r\n        <RockButton\r\n            autoDisable\r\n            :btnType=\"BtnType.Link\"\r\n            :class=\"isMobileForced ? 'w-100 mt-2' : 'w-100 mt-2 d-sm-none'\"\r\n            :disabled=\"disabled\"\r\n            type=\"button\"\r\n            @click=\"onForgotAccountClicked\">Forgot Account</RockButton>\r\n        <RockButton\r\n            v-if=\"!isMobileForced\"\r\n            autoDisable\r\n            :btnType=\"BtnType.Link\"\r\n            class=\"d-none d-sm-inline-block ml-1\"\r\n            :disabled=\"disabled\"\r\n            type=\"button\"\r\n            @click=\"onForgotAccountClicked\">Forgot Account</RockButton>\r\n    </RockForm>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\n    import { computed, PropType, ref } from \"vue\";\r\n    import InlineCheckBox from \"@Obsidian/Controls/inlineCheckBox\";\r\n    import RockButton from \"@Obsidian/Controls/rockButton\";\r\n    import RockForm from \"@Obsidian/Controls/rockForm\";\r\n    import TextBox from \"@Obsidian/Controls/textBox\";\r\n    import { BtnType } from \"@Obsidian/Enums/Controls/btnType\";\r\n    import { CredentialLoginRequestBag } from \"@Obsidian/ViewModels/Blocks/Security/Login/credentialLoginRequestBag\";\r\n    import { LoginInitializationBox } from \"@Obsidian/ViewModels/Blocks/Security/Login/loginInitializationBox\";\r\n\r\n    const props = defineProps({\r\n        config: {\r\n            type: Object as PropType<LoginInitializationBox>,\r\n            required: true\r\n        },\r\n        disabled: {\r\n            type: Boolean as PropType<boolean>,\r\n            required: false,\r\n            default: false\r\n        },\r\n        isMobileForced: {\r\n            type: Boolean as PropType<boolean>,\r\n            required: false,\r\n            default: false\r\n        }\r\n    });\r\n\r\n    const emit = defineEmits<{\r\n        (e: \"forgotAccount\"): void,\r\n        (e: \"login\", _value: CredentialLoginRequestBag): void,\r\n        (e: \"register\"): void\r\n    }>();\r\n\r\n    // #region Values\r\n\r\n    const username = ref<string>(\"\");\r\n    const password = ref<string>(\"\");\r\n    const rememberMe = ref<boolean>(false);\r\n\r\n    // #endregion\r\n\r\n    // #region Computed Values\r\n\r\n    const usernameFieldLabel = computed(() => props.config.usernameFieldLabel || \"Username\");\r\n    const newAccountButtonText = computed(() => props.config.newAccountButtonText || \"Register\");\r\n\r\n    // #endregion\r\n\r\n    // #region Event Handlers\r\n\r\n    /**\r\n     * Event handler for the credential login form being submitted.\r\n     */\r\n    function onCredentialLoginSubmitted(): void {\r\n        emit(\"login\", {\r\n            username: username.value,\r\n            password: password.value,\r\n            rememberMe: rememberMe.value\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Event handler for the Forgot Account button being clicked.\r\n     */\r\n    function onForgotAccountClicked(): void {\r\n        emit(\"forgotAccount\");\r\n    }\r\n\r\n    /**\r\n     * Event handler for the Register button being clicked.\r\n     */\r\n    function onRegisterClicked(): void {\r\n        emit(\"register\");\r\n    }\r\n\r\n    // #endregion\r\n</script>","<!-- Copyright by the Spark Development Network; Licensed under the Rock Community License -->\r\n<template>\r\n    <div>\r\n        <div v-if=\"hasExternalLogins\" v-html=\"caption\"></div>\r\n\r\n        <RockButton\r\n            v-for=\"login in externalLogins\"\r\n            :btnType=\"BtnType.Authentication\"\r\n            :class=\"login.cssClass || ''\"\r\n            :disabled=\"disabled\"\r\n            @click=\"onExternalLoginClick(login)\">\r\n            {{ login.text }}\r\n        </RockButton>\r\n    </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\n    import { computed, PropType } from \"vue\";\r\n    import RockButton from \"@Obsidian/Controls/rockButton\";\r\n    import { BtnType } from \"@Obsidian/Enums/Controls/btnType\";\r\n    import { ExternalAuthenticationButtonBag } from \"@Obsidian/ViewModels/Blocks/Security/Login/externalAuthenticationButtonBag\";\r\n\r\n    const props = defineProps({\r\n        modelValue: {\r\n            type: Array as PropType<ExternalAuthenticationButtonBag[]>,\r\n            required: true,\r\n            default: []\r\n        },\r\n        disabled: {\r\n            type: Boolean as PropType<boolean>,\r\n            required: false,\r\n            default: false\r\n        },\r\n        caption: {\r\n            type: String as PropType<string>,\r\n            required: false,\r\n            default: \"Log in with social account\"\r\n        }\r\n    });\r\n\r\n    const emit = defineEmits<{\r\n        (e: \"login\", value: ExternalAuthenticationButtonBag): void\r\n    }>();\r\n\r\n    // #endregion\r\n\r\n    //#region Values\r\n\r\n    //#endregion\r\n\r\n    // #region Computed Values\r\n\r\n    const externalLogins = computed<ExternalAuthenticationButtonBag[]>(() => {\r\n        return props.modelValue?.filter(l => !!l.authenticationType) ?? [];\r\n    });\r\n\r\n    const hasExternalLogins = computed<boolean>(() => !!externalLogins.value.length);\r\n\r\n    // #endregion\r\n\r\n    // #region Event Handlers\r\n\r\n    /**\r\n     * Handles the event when an external login button is clicked.\r\n     */\r\n    function onExternalLoginClick(externalLogin: ExternalAuthenticationButtonBag): void {\r\n        emit(\"login\", externalLogin);\r\n    }\r\n\r\n    // #endregion\r\n\r\n</script>","<!-- Copyright by the Spark Development Network; Licensed under the Rock Community License -->\r\n<template>\r\n\r\n    <RockButton\r\n        v-if=\"isCredentialLoginSupported && !loginMethodWrapper.isCredential\"\r\n        :btnType=\"BtnType.Default\"\r\n        class=\"w-100\"\r\n        :disabled=\"disabled\"\r\n        type=\"button\"\r\n        @click=\"onSignInWithAccountClicked()\">Sign in with Account</RockButton>\r\n\r\n    <RockButton\r\n        v-else-if=\"isPasswordlessLoginSupported && !loginMethodWrapper.isPasswordless\"\r\n        :btnType=\"BtnType.Default\"\r\n        class=\"w-100\"\r\n        :disabled=\"disabled\"\r\n        type=\"button\"\r\n        @click=\"onSignInWithEmailOrPhoneClicked()\">Sign in with Email or Phone</RockButton>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\n    import { computed, PropType } from \"vue\";\r\n    import RockButton from \"@Obsidian/Controls/rockButton\";\r\n    import { LoginMethod } from \"@Obsidian/Enums/Blocks/Security/Login/loginMethod\";\r\n    import { BtnType } from \"@Obsidian/Enums/Controls/btnType\";\r\n\r\n    const props = defineProps({\r\n        modelValue: {\r\n            type: Object as PropType<LoginMethod>,\r\n            required: true\r\n        },\r\n        isCredentialLoginSupported: {\r\n            type: Boolean as PropType<boolean>,\r\n            required: true\r\n        },\r\n        isPasswordlessLoginSupported: {\r\n            type: Boolean as PropType<boolean>,\r\n            required: true\r\n        },\r\n        disabled: {\r\n            type: Boolean as PropType<boolean>,\r\n            required: false,\r\n            default: false\r\n        }\r\n    });\r\n\r\n    const emit = defineEmits<{\r\n        (e: \"update:modelValue\", _value: LoginMethod): void\r\n    }>();\r\n\r\n    //#region Values\r\n\r\n    //#endregion\r\n\r\n    //#region Computed Values\r\n\r\n    const loginMethodWrapper = computed(() => ({\r\n        isCredential: internalLoginMethod.value === LoginMethod.InternalDatabase,\r\n        isPasswordless: internalLoginMethod.value === LoginMethod.Passwordless\r\n    }));\r\n\r\n    const internalLoginMethod = computed({\r\n        get() {\r\n            return props.modelValue;\r\n        },\r\n        set(newValue: LoginMethod) {\r\n            emit(\"update:modelValue\", newValue);\r\n        }\r\n    });\r\n\r\n    //#endregion\r\n\r\n    //#region Event Handlers\r\n\r\n    function onSignInWithAccountClicked(): void {\r\n        internalLoginMethod.value = LoginMethod.InternalDatabase;\r\n    }\r\n\r\n    function onSignInWithEmailOrPhoneClicked(): void {\r\n        internalLoginMethod.value = LoginMethod.Passwordless;\r\n    }\r\n\r\n    //#endregion\r\n\r\n</script>","<!-- Copyright by the Spark Development Network; Licensed under the Rock Community License -->\r\n<template>\r\n    <RockValidation :errors=\"validationErrors\" />\r\n\r\n    <RockForm @submit=\"onPasswordlessLoginStartSubmitted\" >\r\n        <TextBox\r\n            v-model=\"emailOrPhoneNumber\"\r\n            :disabled=\"disabled\"\r\n            :isRequiredIndicatorHidden=\"true\"\r\n            :label=\"label\"\r\n            :rules=\"['required']\"></TextBox>\r\n\r\n        <RockButton\r\n            :btnType=\"BtnType.Primary\"\r\n            :class=\"isMobileForced ? 'w-100' : 'w-100 d-sm-none'\"\r\n            :disabled=\"disabled\"\r\n            type=\"submit\">Continue</RockButton>\r\n        <RockButton\r\n            v-if=\"!isMobileForced\"\r\n            :btnType=\"BtnType.Primary\"\r\n            class=\"d-none d-sm-inline-block\"\r\n            :disabled=\"disabled\"\r\n            type=\"submit\">Continue</RockButton>\r\n    </RockForm>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\n    import { computed, PropType, ref } from \"vue\";\r\n    import RockValidation from \"@Obsidian/Controls/rockValidation\";\r\n    import RockButton from \"@Obsidian/Controls/rockButton\";\r\n    import RockForm from \"@Obsidian/Controls/rockForm\";\r\n    import TextBox from \"@Obsidian/Controls/textBox\";\r\n    import { BtnType } from \"@Obsidian/Enums/Controls/btnType\";\r\n    import { isEmail } from \"@Obsidian/Utility/email\";\r\n    import { FormError } from \"@Obsidian/Utility/form\";\r\n    import { formatPhoneNumber, getPhoneNumberConfiguration, stripPhoneNumber } from \"@Obsidian/Utility/phone\";\r\n    import { validateValue } from \"@Obsidian/ValidationRules\";\r\n    import { PasswordlessLoginStartRequestBag } from \"@Obsidian/ViewModels/Blocks/Security/Login/passwordlessLoginStartRequestBag\";\r\n    import { PhoneNumberBoxGetConfigurationResultsBag } from \"@Obsidian/ViewModels/Rest/Controls/phoneNumberBoxGetConfigurationResultsBag\";\r\n    import { PhoneNumberCountryCodeRulesConfigurationBag } from \"@Obsidian/ViewModels/Rest/Controls/phoneNumberCountryCodeRulesConfigurationBag\";\r\n\r\n    const props = defineProps({\r\n        modelValue: {\r\n            type: Object as PropType<PasswordlessLoginStartRequestBag>,\r\n            required: true\r\n        },\r\n        disabled: {\r\n            type: Boolean as PropType<boolean>,\r\n            required: false,\r\n            default: false\r\n        },\r\n        isMobileForced: {\r\n            type: Boolean as PropType<boolean>,\r\n            required: false,\r\n            default: false\r\n        }\r\n    });\r\n\r\n    const emit = defineEmits<{\r\n        (e: \"start\"): void,\r\n        (e: \"update:modelValue\", _value: PasswordlessLoginStartRequestBag): void\r\n    }>();\r\n\r\n    //#region Values\r\n\r\n    const label = \"Email or Phone\";\r\n    const validationErrors = ref<FormError[]>([]);\r\n    const phoneNumberConfig = ref<PhoneNumberBoxGetConfigurationResultsBag>();\r\n    const emailOrPhoneNumberRaw = ref<string>(\"\");\r\n\r\n    //#endregion\r\n\r\n    //#region Computed Values\r\n\r\n    const emailOrPhoneNumber = computed<string>({\r\n        get() {\r\n            return emailOrPhoneNumberRaw.value;\r\n        },\r\n        set(newValue: string) {\r\n            emailOrPhoneNumberRaw.value = newValue;\r\n            validateEmailOrPhoneNumber(newValue);\r\n        }\r\n    });\r\n\r\n    //#endregion\r\n\r\n    //#region Event Handlers\r\n\r\n    /**\r\n     * Handles the event where the passwordless login start form is submitted.\r\n     */\r\n    function onPasswordlessLoginStartSubmitted(): void {\r\n        validateForm();\r\n\r\n        if (validationErrors.value.length === 0) {\r\n            emit(\"start\");\r\n        }\r\n    }\r\n\r\n    //#endregion\r\n\r\n    //#region Functions\r\n\r\n    /** Get all rules for any country code */\r\n    function getConfiguredRules(): PhoneNumberCountryCodeRulesConfigurationBag[] {\r\n        const rules = phoneNumberConfig.value?.rules;\r\n        const configuredRules: PhoneNumberCountryCodeRulesConfigurationBag[] = [];\r\n        if (rules) {\r\n            for (const key in rules) {\r\n                const bag = rules[key];\r\n                configuredRules.push(...bag);\r\n            }\r\n        }\r\n        return configuredRules;\r\n    }\r\n\r\n    /**\r\n     * Loads the phone number configuration for validation.\r\n     */\r\n    async function loadPhoneNumberConfig(): Promise<void> {\r\n        phoneNumberConfig.value = await getPhoneNumberConfiguration();\r\n    }\r\n\r\n    /**\r\n     *\r\n     */\r\n    function validateForm(): void {\r\n        const errorMessages = validateValue(emailOrPhoneNumber.value, validateEmailOrPhoneNumber);\r\n\r\n        if (errorMessages && errorMessages.length) {\r\n            validationErrors.value = errorMessages.map(\r\n                errorMessage => ({\r\n                    name: label,\r\n                    text: errorMessage\r\n                })\r\n            );\r\n        }\r\n        else {\r\n            validationErrors.value = [];\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Validates the \"Email or Phone\" field and emits modelValue updates depending on validity.\r\n     *\r\n     * @param value the value to validate.\r\n     */\r\n    function validateEmailOrPhoneNumber(value: unknown): string | boolean {\r\n        if (!value) {\r\n            return true;\r\n        }\r\n\r\n        let errors = validateEmail(value);\r\n        if (errors === \"\") {\r\n            emit(\"update:modelValue\", {\r\n                ...props.modelValue,\r\n                email: value as string,\r\n                phoneNumber: null,\r\n                shouldSendEmailCode: true,\r\n                shouldSendEmailLink: true,\r\n                shouldSendSmsCode: false\r\n            });\r\n            return true;\r\n        }\r\n\r\n        const formattedNumber = formatPhoneNumber(stripPhoneNumber(value as string));\r\n        if (formattedNumber) {\r\n            errors = validatePhoneNumber(stripPhoneNumber(formattedNumber));\r\n            if (errors === \"\") {\r\n                emailOrPhoneNumberRaw.value = formattedNumber;\r\n                emit(\"update:modelValue\", {\r\n                    ...props.modelValue,\r\n                    email: null,\r\n                    phoneNumber: formattedNumber,\r\n                    shouldSendEmailCode: false,\r\n                    shouldSendEmailLink: false,\r\n                    shouldSendSmsCode: true\r\n                });\r\n                return true;\r\n            }\r\n        }\r\n\r\n        // Clear modelValue when invalid.\r\n        emit(\"update:modelValue\", {\r\n            ...props.modelValue,\r\n            email: null,\r\n            phoneNumber: null,\r\n            shouldSendEmailCode: false,\r\n            shouldSendEmailLink: false,\r\n            shouldSendSmsCode: false\r\n        });\r\n        return \"must be a valid email or phone number\";\r\n    }\r\n\r\n    /**\r\n     * Validates a value as an email address.\r\n     *\r\n     * @param value The value to validate.\r\n     */\r\n    function validateEmail(value: unknown): string {\r\n        if (!value) {\r\n            return \"\";\r\n        }\r\n\r\n        if (isEmail(value)) {\r\n            return \"\";\r\n        }\r\n\r\n        return \"Email must be a valid email address.\";\r\n    }\r\n\r\n    /**\r\n     * Validates a value as a phone number using the configuration retrieved from the server.\r\n     *\r\n     * @param value The value to validate.\r\n     */\r\n    function validatePhoneNumber(value: string): string {\r\n        const rules = getConfiguredRules();\r\n\r\n        if (!value) {\r\n            return \"\";\r\n        }\r\n\r\n        if (rules.length === 0) {\r\n            return \"\";\r\n        }\r\n\r\n        for (let rule of rules) {\r\n            const regex = new RegExp(rule.match ?? \"\");\r\n\r\n            if (regex.test(value)) {\r\n                return \"\";\r\n            }\r\n        }\r\n\r\n        return `Phone number '${value}' must be a valid phone number.`;\r\n    }\r\n\r\n    //#endregion\r\n\r\n    loadPhoneNumberConfig();\r\n</script>","<!-- Copyright by the Spark Development Network; Licensed under the Rock Community License -->\r\n<template>\r\n    <RockForm\r\n        v-model:submit=\"internalSubmitPasswordlessLoginVerification\"\r\n        @submit=\"onPasswordlessLoginVerifySubmitted\">\r\n\r\n        <div class=\"mb-2\">Please enter your confirmation code below.</div>\r\n\r\n        <CodeBox\r\n            v-model.capitalize=\"internalCode\"\r\n            :disabled=\"disabled\"\r\n            :maxLength=\"6\"\r\n            rules=\"required\"\r\n            validationTitle=\"Code\"></CodeBox>\r\n\r\n        <template v-if=\"modelValue.isPersonSelectionRequired\">\r\n            <p>The {{ internalCommunicationType }} you provided is matched to several different individuals. Please select the one that is you.</p>\r\n            <RadioButtonList\r\n                v-model=\"internalMatchingPersonValue\"\r\n                v-model:items=\"internalMatchingPeople\"></RadioButtonList>\r\n        </template>\r\n\r\n        <RockButton\r\n            :btnType=\"BtnType.Primary\"\r\n            :class=\"isMobileForced ? 'w-100' : 'w-100 d-sm-none'\"\r\n            :disabled=\"disabled\"\r\n            type=\"submit\">Complete Sign In</RockButton>\r\n        <RockButton\r\n            v-if=\"!isMobileForced\"\r\n            :btnType=\"BtnType.Primary\"\r\n            class=\"d-none d-sm-inline-block\"\r\n            :disabled=\"disabled\"\r\n            type=\"submit\">Complete Sign In</RockButton>\r\n\r\n        <RockButton\r\n            autoDisable\r\n            :btnType=\"BtnType.Action\"\r\n            :class=\"isMobileForced ? 'w-100 mt-2' : 'w-100 mt-2 d-sm-none'\"\r\n            :disabled=\"disabled\"\r\n            type=\"button\"\r\n            @click=\"onResendCodeClicked\">Resend code</RockButton>\r\n        <RockButton\r\n            v-if=\"!isMobileForced\"\r\n            autoDisable\r\n            :btnType=\"BtnType.Action\"\r\n            class=\"d-none d-sm-inline-block ml-1\"\r\n            :disabled=\"disabled\"\r\n            type=\"button\"\r\n            @click=\"onResendCodeClicked\">Resend code</RockButton>\r\n    </RockForm>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\n    import { computed, PropType } from \"vue\";\r\n    import { PasswordlessCommunicationType } from \"./passwordlessCommunicationType.partial\";\r\n    import CodeBox from \"../codeBox.obs\";\r\n    import RadioButtonList from \"@Obsidian/Controls/radioButtonList\";\r\n    import RockButton from \"@Obsidian/Controls/rockButton\";\r\n    import RockForm from \"@Obsidian/Controls/rockForm\";\r\n    import { BtnType } from \"@Obsidian/Enums/Controls/btnType\";\r\n    import { useVModelPassthrough } from \"@Obsidian/Utility/component\";\r\n    import { PasswordlessLoginVerifyOptionsBag } from \"@Obsidian/ViewModels/Blocks/Security/Login/passwordlessLoginVerifyOptionsBag\";\r\n    import { ListItemBag } from \"@Obsidian/ViewModels/Utility/listItemBag\";\r\n\r\n    const props = defineProps({\r\n        modelValue: {\r\n            type: Object as PropType<PasswordlessLoginVerifyOptionsBag>,\r\n            required: true\r\n        },\r\n        communicationType: {\r\n            type: String as PropType<PasswordlessCommunicationType>,\r\n            required: false,\r\n            default: \"data\"\r\n        },\r\n        disabled: {\r\n            type: Boolean as PropType<boolean>,\r\n            required: false,\r\n            default: false\r\n        },\r\n        isMobileForced: {\r\n            type: Boolean as PropType<boolean>,\r\n            required: false,\r\n            default: false\r\n        },\r\n        submitPasswordlessLoginVerification: {\r\n            type: Boolean as PropType<boolean>,\r\n            required: false,\r\n            default: false\r\n        }\r\n    });\r\n\r\n    const emit = defineEmits<{\r\n        (e: \"resendCode\"): void,\r\n        (e: \"update:submitPasswordlessLoginVerification\", _value: boolean): void\r\n        (e: \"update:modelValue\", _value: PasswordlessLoginVerifyOptionsBag),\r\n        (e: \"verify\"): void,\r\n    }>();\r\n\r\n    //#region Values\r\n\r\n    const internalSubmitPasswordlessLoginVerification = useVModelPassthrough(props, \"submitPasswordlessLoginVerification\", emit);\r\n\r\n    //#endregion\r\n\r\n    //#region Computed Values\r\n\r\n    const internalCode = computed({\r\n        get() {\r\n            return props.modelValue.code || \"\";\r\n        },\r\n        set(newValue: string) {\r\n            emit(\"update:modelValue\", {\r\n                ...props.modelValue,\r\n                code: newValue\r\n            });\r\n        }\r\n    });\r\n\r\n    const internalCommunicationType = computed(() => props.communicationType || \"data\");\r\n\r\n    const internalMatchingPeople = computed({\r\n        get() {\r\n            return props.modelValue.matchingPeople ?? [];\r\n        },\r\n        set(newValue: ListItemBag[]) {\r\n            emit(\"update:modelValue\", {\r\n                ...props.modelValue,\r\n                matchingPeople: newValue\r\n            });\r\n        }\r\n    });\r\n\r\n    const internalMatchingPersonValue = computed({\r\n        get() {\r\n            return props.modelValue.matchingPersonValue || \"\";\r\n        },\r\n        set(newValue: string) {\r\n            emit(\"update:modelValue\", {\r\n                ...props.modelValue,\r\n                matchingPersonValue: newValue\r\n            });\r\n        }\r\n    });\r\n\r\n    //#endregion\r\n\r\n    //#region Event Handlers\r\n\r\n    function onPasswordlessLoginVerifySubmitted(): void {\r\n        emit(\"verify\");\r\n    }\r\n\r\n    function onResendCodeClicked(): void {\r\n        internalCode.value = \"\";\r\n        internalMatchingPersonValue.value = \"\";\r\n        internalMatchingPeople.value = [];\r\n        emit(\"resendCode\");\r\n    }\r\n\r\n    //#endregion\r\n</script>","<!-- Copyright by the Spark Development Network; Licensed under the Rock Community License -->\r\n<template>\r\n    <PasswordlessLoginStartStep\r\n        v-if=\"passwordlessLoginStep.isStart\"\r\n        v-model=\"passwordlessLoginStartRequest\"\r\n        :disabled=\"disabled\"\r\n        :isMobileForced=\"isMobileForced\"\r\n        @start=\"onStartPasswordlessLogin\">\r\n    </PasswordlessLoginStartStep>\r\n\r\n    <PasswordlessLoginVerifyStep\r\n        v-else-if=\"passwordlessLoginStep.isVerify\"\r\n        v-model=\"passwordlessLoginVerifyOptions\"\r\n        v-model:submitPasswordlessLoginVerification=\"submitPasswordlessLoginVerification\"\r\n        :communicationType=\"communicationType\"\r\n        :disabled=\"disabled\"\r\n        :isMobileForced=\"isMobileForced\"\r\n        @resendCode=\"onResendCode\"\r\n        @verify=\"onVerifyPasswordlessLogin\">\r\n    </PasswordlessLoginVerifyStep>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\n    import { computed, onMounted, PropType, ref, watch } from \"vue\";\r\n    import { PasswordlessCommunicationType } from \"./passwordlessCommunicationType.partial\";\r\n    import PasswordlessLoginStartStep from \"./passwordlessLoginStartStep.partial.obs\";\r\n    import PasswordlessLoginVerifyStep from \"./passwordlessLoginVerifyStep.partial.obs\";\r\n    import { PasswordlessLoginStep } from \"@Obsidian/Enums/Blocks/Security/Login/passwordlessLoginStep\";\r\n    import { LoginInitializationBox } from \"@Obsidian/ViewModels/Blocks/Security/Login/loginInitializationBox\";\r\n    import { PasswordlessLoginOptionsBag } from \"@Obsidian/ViewModels/Blocks/Security/Login/passwordlessLoginOptionsBag\";\r\n    import { PasswordlessLoginStartRequestBag } from \"@Obsidian/ViewModels/Blocks/Security/Login/passwordlessLoginStartRequestBag\";\r\n    import { PasswordlessLoginVerifyOptionsBag } from \"@Obsidian/ViewModels/Blocks/Security/Login/passwordlessLoginVerifyOptionsBag\";\r\n    import { PasswordlessLoginVerifyRequestBag } from \"@Obsidian/ViewModels/Blocks/Security/Login/passwordlessLoginVerifyRequestBag\";\r\n\r\n    const props = defineProps({\r\n        modelValue: {\r\n            type: Object as PropType<PasswordlessLoginOptionsBag>,\r\n            required: true\r\n        },\r\n        config: {\r\n            type: Object as PropType<LoginInitializationBox>,\r\n            required: true\r\n        },\r\n        disabled: {\r\n            type: Boolean as PropType<boolean>,\r\n            required: false,\r\n            default: false\r\n        },\r\n        isMobileForced: {\r\n            type: Boolean as PropType<boolean>,\r\n            required: false,\r\n            default: false\r\n        }\r\n    });\r\n\r\n    const emit = defineEmits<{\r\n        (e: \"start\", value: PasswordlessLoginStartRequestBag): void,\r\n        (e: \"update:modelValue\", value: PasswordlessLoginOptionsBag): void,\r\n        (e: \"verify\", value: PasswordlessLoginVerifyRequestBag): void,\r\n    }>();\r\n\r\n    // #region Values\r\n\r\n    const passwordlessLoginStartRequest = ref<PasswordlessLoginStartRequestBag>({\r\n        shouldSendEmailCode: false,\r\n        shouldSendEmailLink: false,\r\n        shouldSendSmsCode: false,\r\n        email: null,\r\n        phoneNumber: null\r\n    });\r\n\r\n    const passwordlessLoginVerifyOptions = ref<PasswordlessLoginVerifyOptionsBag>({\r\n        code: props.modelValue?.code,\r\n        isPersonSelectionRequired: props.modelValue?.isPersonSelectionRequired,\r\n        matchingPeople: props.modelValue?.matchingPeople,\r\n        matchingPersonValue: null,\r\n        state: props.modelValue?.state\r\n    });\r\n\r\n    /**\r\n     * Enables programmatic submission of the Passwordless Login Verify form.\r\n     */\r\n    const submitPasswordlessLoginVerification = ref(false);\r\n\r\n    /**\r\n     * Initialize with Start step unless we need to automatically submit the verification code.\r\n     */\r\n    const passwordlessLoginStep = computed(() => ({\r\n        isStart: internalStep.value === PasswordlessLoginStep.Start,\r\n        isVerify: internalStep.value === PasswordlessLoginStep.Verify\r\n    }));\r\n\r\n    // #endregion\r\n\r\n    // #region Computed Values\r\n\r\n    const internalCode = computed<string>({\r\n        get() {\r\n            return props.modelValue.code ?? \"\";\r\n        },\r\n        set(newValue) {\r\n            emit(\"update:modelValue\", {\r\n                ...props.modelValue,\r\n                code: newValue\r\n            });\r\n        }\r\n    });\r\n\r\n    const internalState = computed<string>({\r\n        get() {\r\n            return props.modelValue.state ?? \"\";\r\n        },\r\n        set(newValue) {\r\n            emit(\"update:modelValue\", {\r\n                ...props.modelValue,\r\n                state: newValue\r\n            });\r\n        }\r\n    });\r\n\r\n    const internalStep = computed<PasswordlessLoginStep>({\r\n        get() {\r\n            return props.modelValue.step;\r\n        },\r\n        set(newValue: PasswordlessLoginStep) {\r\n            emit(\"update:modelValue\", {\r\n                ...props.modelValue,\r\n                step: newValue\r\n            });\r\n        }\r\n    });\r\n\r\n    const communicationType = computed<PasswordlessCommunicationType>(() => passwordlessLoginStartRequest.value.email ? \"email\" : passwordlessLoginStartRequest.value.phoneNumber ? \"phone number\" : \"data\");\r\n\r\n    // #endregion\r\n\r\n    // #region Event Handlers\r\n\r\n    /**\r\n     * Event handler for the \"Resend code\" button being clicked.\r\n     *\r\n     * @param passwordlessLoginStepValue\r\n     */\r\n    function onResendCode(): void {\r\n        internalCode.value = \"\";\r\n        passwordlessLoginVerifyOptions.value.code = \"\";\r\n        internalStep.value = PasswordlessLoginStep.Start;\r\n    }\r\n\r\n    /**\r\n     * Event handler for the Passwordless Login Start form being submitted.\r\n     */\r\n    function onStartPasswordlessLogin(): void {\r\n        // Make sure the code and state are cleared before starting a new passwordless authentication session.\r\n        internalCode.value = \"\";\r\n        passwordlessLoginVerifyOptions.value.code = \"\";\r\n        internalState.value = \"\";\r\n\r\n        emit(\"start\", passwordlessLoginStartRequest.value);\r\n    }\r\n\r\n    /**\r\n     * Event handler for the Passwordless Login Verify form being submitted.\r\n     * Handles the redirect to the return URL if authentication is successful.\r\n     */\r\n    async function onVerifyPasswordlessLogin(): Promise<void> {\r\n        emit(\"verify\", {\r\n            code: passwordlessLoginVerifyOptions.value.code,\r\n            matchingPersonValue: passwordlessLoginVerifyOptions.value.matchingPersonValue,\r\n            state: passwordlessLoginVerifyOptions.value.state,\r\n        });\r\n    }\r\n\r\n    // #endregion\r\n\r\n    // #region Watchers\r\n\r\n    // Update the child passwordless verify options when the parent passwordless options are updated.\r\n    watch(() => props.modelValue, (newPasswordlessLoginOptions, oldPasswordlessLoginOptions) => {\r\n        // Only update the fields that were changed so we don't overwrite everything on the child options.\r\n        if (newPasswordlessLoginOptions.code !== oldPasswordlessLoginOptions.code) {\r\n            passwordlessLoginVerifyOptions.value.code = newPasswordlessLoginOptions.code;\r\n        }\r\n\r\n        if (newPasswordlessLoginOptions.isPersonSelectionRequired !== oldPasswordlessLoginOptions.isPersonSelectionRequired) {\r\n            passwordlessLoginVerifyOptions.value.isPersonSelectionRequired = newPasswordlessLoginOptions.isPersonSelectionRequired;\r\n        }\r\n\r\n        if (newPasswordlessLoginOptions.matchingPeople !== oldPasswordlessLoginOptions.matchingPeople) {\r\n            passwordlessLoginVerifyOptions.value.matchingPeople = newPasswordlessLoginOptions.matchingPeople;\r\n        }\r\n\r\n        if (newPasswordlessLoginOptions.state !== oldPasswordlessLoginOptions.state) {\r\n            passwordlessLoginVerifyOptions.value.state = newPasswordlessLoginOptions.state;\r\n        }\r\n    });\r\n\r\n    // #endregion\r\n\r\n    // If the page was loaded as a result of clicking a passwordless login link,\r\n    // then automatically submit the form.\r\n    onMounted(() => {\r\n        if (props.modelValue.isAutomaticVerificationRequired) {\r\n            submitPasswordlessLoginVerification.value = true;\r\n        }\r\n    });\r\n</script>","<!-- Copyright by the Spark Development Network; Licensed under the Rock Community License -->\r\n<template>\r\n    <div v-if=\"isCompleted\">\r\n        <NotificationBox alertType=\"warning\" v-html=\"completedCaption\">\r\n        </NotificationBox>\r\n    </div>\r\n    <div v-else class=\"login-block\">\r\n        <fieldset>\r\n            <legend>Log In</legend>\r\n        </fieldset>\r\n\r\n        <template v-if=\"config.configurationErrors?.length\">\r\n            <NotificationBox\r\n                             v-for=\"configError in config.configurationErrors\"\r\n                             alertType=\"warning\"\r\n                             v-text=\"configError\" />\r\n        </template>\r\n\r\n        <div :class=\"isMobileForced ? 'row' : 'row d-sm-flex'\">\r\n            <div v-if=\"isAnyExternalAuthProviderVisible || areBothInternalAuthProvidersVisible\" :class=\"isMobileForced ? '' : 'col-sm-5'\">\r\n                <ExternalLogin\r\n                               v-if=\"isAnyExternalAuthProviderVisible\"\r\n                               :modelValue=\"config.externalAuthProviderButtons || []\"\r\n                               :caption=\"config.remoteAuthorizationPromptMessage ?? ''\"\r\n                               :disabled=\"isAuthenticating || isNavigating\"\r\n                               @login=\"onExternalLogin($event)\" />\r\n\r\n                <LoginMethodPicker\r\n                                   v-if=\"areBothInternalAuthProvidersVisible\"\r\n                                   v-model=\"internalLoginMethod\"\r\n                                   :disabled=\"isAuthenticating || isNavigating\"\r\n                                   :isCredentialLoginSupported=\"config.isInternalDatabaseLoginSupported\"\r\n                                   :isPasswordlessLoginSupported=\"config.isPasswordlessLoginSupported\" />\r\n\r\n            </div>\r\n\r\n            <Divider\r\n                     v-if=\"areSecondaryAndPrimaryAuthVisible\"\r\n                     :class=\"isMobileForced ? 'd-flex' : 'd-flex d-sm-none col-sm-1'\"\r\n                     content=\"or\" />\r\n\r\n            <Divider\r\n                     v-if=\"!isMobileForced && areSecondaryAndPrimaryAuthVisible\"\r\n                     class=\"d-none d-sm-flex col-sm-1\"\r\n                     content=\"or\"\r\n                     :isVertical=\"true\" />\r\n\r\n            <div :class=\"isMobileForced ? '' : areSecondaryAndPrimaryAuthVisible ? 'col-sm-6' : 'col-sm-12'\">\r\n                <CredentialLogin\r\n                                 v-if=\"config.isInternalDatabaseLoginSupported && loginMethodWrapper.isCredential\"\r\n                                 :config=\"config\"\r\n                                 :disabled=\"isAuthenticating || isNavigating\"\r\n                                 :isMobileForced=\"isMobileForced\"\r\n                                 @forgotAccount=\"onForgotAccount()\"\r\n                                 @login=\"onCredentialLogin($event)\"\r\n                                 @register=\"onRegister()\" />\r\n\r\n                <PasswordlessLogin\r\n                                   v-else-if=\"config.isPasswordlessLoginSupported && loginMethodWrapper.isPasswordless\"\r\n                                   v-model=\"passwordlessLoginOptions\"\r\n                                   :config=\"config\"\r\n                                   :disabled=\"isAuthenticating || isNavigating\"\r\n                                   :isMobileForced=\"isMobileForced\"\r\n                                   @start=\"onPasswordlessLoginStart($event)\"\r\n                                   @verify=\"onPasswordlessLoginVerify($event)\" />\r\n\r\n                <div v-if=\"errorMessage\" class=\"mt-3\">\r\n                    <NotificationBox alertType=\"warning\" v-html=\"errorMessage\">\r\n                    </NotificationBox>\r\n                </div>\r\n            </div>\r\n        </div>\r\n\r\n        <div v-if=\"config.contentText\" class=\"mt-3 row col-sm-12\" v-html=\"config.contentText\"></div>\r\n    </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\n    import { computed, onMounted, ref } from \"vue\";\r\n    import CredentialLogin from \"./Login/credentialLogin.partial.obs\";\r\n    import Divider from \"./divider.obs\";\r\n    import ExternalLogin from \"./Login/externalLogin.partial.obs\";\r\n    import LoginMethodPicker from \"./Login/loginMethodPicker.partial.obs\";\r\n    import PasswordlessLogin from \"./Login/passwordlessLogin.partial.obs\";\r\n    import NotificationBox from \"@Obsidian/Controls/notificationBox.obs\";\r\n    import { LoginMethod } from \"@Obsidian/Enums/Blocks/Security/Login/loginMethod\";\r\n    import { onConfigurationValuesChanged, useConfigurationValues, useInvokeBlockAction, useReloadBlock } from \"@Obsidian/Utility/block\";\r\n    import { removeCurrentUrlQueryParams } from \"@Obsidian/Utility/url\";\r\n    import { CredentialLoginRequestBag } from \"@Obsidian/ViewModels/Blocks/Security/Login/credentialLoginRequestBag\";\r\n    import { CredentialLoginResponseBag } from \"@Obsidian/ViewModels/Blocks/Security/Login/credentialLoginResponseBag\";\r\n    import { ExternalAuthenticationButtonBag } from \"@Obsidian/ViewModels/Blocks/Security/Login/externalAuthenticationButtonBag\";\r\n    import { LoginInitializationBox } from \"@Obsidian/ViewModels/Blocks/Security/Login/loginInitializationBox\";\r\n    import { PasswordlessLoginOptionsBag } from \"@Obsidian/ViewModels/Blocks/Security/Login/passwordlessLoginOptionsBag\";\r\n    import { PasswordlessLoginStartRequestBag } from \"@Obsidian/ViewModels/Blocks/Security/Login/passwordlessLoginStartRequestBag\";\r\n    import { PasswordlessLoginStartResponseBag } from \"@Obsidian/ViewModels/Blocks/Security/Login/passwordlessLoginStartResponseBag\";\r\n    import { PasswordlessLoginStep } from \"@Obsidian/Enums/Blocks/Security/Login/passwordlessLoginStep\";\r\n    import { PasswordlessLoginVerifyRequestBag } from \"@Obsidian/ViewModels/Blocks/Security/Login/passwordlessLoginVerifyRequestBag\";\r\n    import { PasswordlessLoginVerifyResponseBag } from \"@Obsidian/ViewModels/Blocks/Security/Login/passwordlessLoginVerifyResponseBag\";\r\n    import { RemoteLoginStartRequestBag } from \"@Obsidian/ViewModels/Blocks/Security/Login/remoteLoginStartRequestBag\";\r\n    import { RemoteLoginStartResponseBag } from \"@Obsidian/ViewModels/Blocks/Security/Login/remoteLoginStartResponseBag\";\r\n\r\n    const config = useConfigurationValues<LoginInitializationBox>();\r\n    const invokeBlockAction = useInvokeBlockAction();\r\n\r\n    // #region Values\r\n\r\n    const isMobileForced = !!document.getElementById(\"splash\");\r\n\r\n    const isAuthenticating = ref(config.shouldRedirect);\r\n    const completedCaption = ref<string | null>(null);\r\n    const errorMessage = ref<string | null>(config.errorMessage || null);\r\n    const isNavigating = ref(false);\r\n\r\n    const passwordlessLoginOptions = ref<PasswordlessLoginOptionsBag>({\r\n        code: config.passwordlessAutoVerifyOptions?.code,\r\n        state: config.passwordlessAutoVerifyOptions?.state,\r\n        isAutomaticVerificationRequired: !!config.passwordlessAutoVerifyOptions,\r\n        isPersonSelectionRequired: false,\r\n        matchingPeople: null,\r\n        step: config.passwordlessAutoVerifyOptions ? PasswordlessLoginStep.Verify : PasswordlessLoginStep.Start\r\n    });\r\n\r\n    const isCompleted = ref<boolean>(false);\r\n\r\n    // #endregion\r\n\r\n    // #region Computed Values\r\n\r\n    const areBothInternalAuthProvidersVisible = computed<boolean>(() =>\r\n        config.isInternalDatabaseLoginSupported && config.isPasswordlessLoginSupported\r\n    );\r\n\r\n    const isAnyExternalAuthProviderVisible = computed<boolean>(() =>\r\n        !!config.externalAuthProviderButtons?.length\r\n    );\r\n\r\n    const areSecondaryAndPrimaryAuthVisible = computed<boolean>(() => {\r\n        const isAnyInternalAuthProviderVisible = config.isInternalDatabaseLoginSupported || config.isPasswordlessLoginSupported;\r\n        return (isAnyExternalAuthProviderVisible.value && isAnyInternalAuthProviderVisible) || areBothInternalAuthProvidersVisible.value;\r\n    });\r\n\r\n    const loginMethod = ref(getInitialLoginMethod());\r\n    const internalLoginMethod = computed<LoginMethod>({\r\n        get() {\r\n            return passwordlessLoginOptions.value.isAutomaticVerificationRequired ? LoginMethod.Passwordless : loginMethod.value;\r\n        },\r\n        set(newValue) {\r\n            loginMethod.value = newValue;\r\n        }\r\n    });\r\n    const loginMethodWrapper = computed(() => ({\r\n        isCredential: internalLoginMethod.value === LoginMethod.InternalDatabase,\r\n        isPasswordless: internalLoginMethod.value === LoginMethod.Passwordless\r\n    }));\r\n\r\n    // #endregion\r\n\r\n    // #region Event Handlers\r\n\r\n    /**\r\n     * Event handler for the credential login form being submitted.\r\n     * Handles the redirect to the return URL if authentication is successful.\r\n     */\r\n    async function onCredentialLogin(bag: CredentialLoginRequestBag): Promise<void> {\r\n        isAuthenticating.value = true;\r\n\r\n        try {\r\n            const response = await invokeBlockAction<CredentialLoginResponseBag>(\"CredentialLogin\", { bag });\r\n\r\n            if (!response?.isSuccess || !response.data) {\r\n                showError(response?.errorMessage || \"Something went wrong. Please try again.\");\r\n                return;\r\n            }\r\n\r\n            if (response.data.isAuthenticated) {\r\n                await navigate(response.data.redirectUrl || \"/\");\r\n                return;\r\n            }\r\n\r\n            if (response.data.isConfirmationRequired) {\r\n                showCompleted(response.data.errorMessage || response.errorMessage);\r\n                return;\r\n            }\r\n\r\n            showError(response.data.errorMessage || \"Authentication failed. Please try again.\");\r\n        }\r\n        finally {\r\n            // Reset isAuthenticating in the event there is an error so the user can resubmit.\r\n            isAuthenticating.value = false;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Handles the event when an external login button is clicked.\r\n     */\r\n    async function onExternalLogin(externalLogin: ExternalAuthenticationButtonBag): Promise<void> {\r\n        isAuthenticating.value = true;\r\n        const bag: RemoteLoginStartRequestBag = {\r\n            authenticationType: externalLogin.authenticationType\r\n        };\r\n\r\n        try {\r\n            const response = await invokeBlockAction<RemoteLoginStartResponseBag>(\"RemoteLoginStart\", { bag });\r\n\r\n            if (response?.isSuccess && response?.data?.redirectUrl) {\r\n                await navigate(response.data.redirectUrl);\r\n                return;\r\n            }\r\n\r\n            showError(response?.errorMessage);\r\n            return;\r\n        }\r\n        finally {\r\n            isAuthenticating.value = false;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Event handler for the forgot account button being clicked.\r\n     */\r\n    async function onForgotAccount(): Promise<void> {\r\n        await navigate(config.helpPageUrl ?? \"/\");\r\n    }\r\n\r\n    /**\r\n     * Event handler for the Passwordless Login being started.\r\n     */\r\n    async function onPasswordlessLoginStart(bag: PasswordlessLoginStartRequestBag): Promise<void> {\r\n        isAuthenticating.value = true;\r\n\r\n        clearError();\r\n\r\n        try {\r\n            const response = await invokeBlockAction<PasswordlessLoginStartResponseBag>(\"PasswordlessLoginStart\", { bag });\r\n\r\n            if (!response?.isSuccess || !response.data) {\r\n                showError(response?.errorMessage || \"Something went wrong. Please try again.\");\r\n                return;\r\n            }\r\n\r\n            if (response.data.isSuccessful) {\r\n                passwordlessLoginOptions.value = {\r\n                    ...passwordlessLoginOptions.value,\r\n                    state: response.data.state || \"\",\r\n                    step: PasswordlessLoginStep.Verify\r\n                };\r\n                return;\r\n            }\r\n\r\n            passwordlessLoginOptions.value = {\r\n                ...passwordlessLoginOptions.value,\r\n                step: PasswordlessLoginStep.Start\r\n            };\r\n            showError(response?.data?.errorMessage || response?.errorMessage || \"An unknown error occurred. Please submit email or phone number again.\");\r\n            return;\r\n        }\r\n        finally {\r\n            isAuthenticating.value = false;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Event handler for the Passwordless Login being verified.\r\n     * Handles the redirect to the return URL if authentication is successful.\r\n     */\r\n    async function onPasswordlessLoginVerify(bag: PasswordlessLoginVerifyRequestBag): Promise<void> {\r\n        isAuthenticating.value = true;\r\n        clearError();\r\n\r\n        try {\r\n            var response = await invokeBlockAction<PasswordlessLoginVerifyResponseBag>(\"PasswordlessLoginVerify\", { bag });\r\n\r\n            if (!response || !response.isSuccess || !response.data) {\r\n                showError(\"Something went wrong. Please try again.\");\r\n                return;\r\n            }\r\n\r\n            if (response.data.isAuthenticated) {\r\n                await navigate(config.redirectUrl || \"/\");\r\n                return;\r\n            }\r\n\r\n            if (response.data.isRegistrationRequired) {\r\n                if (!response.data.registrationUrl) {\r\n                    showError(\"Redirecting to default registration page\");\r\n                }\r\n                await navigate(response.data.registrationUrl || \"/NewAccount\");\r\n                return;\r\n            }\r\n\r\n            if (response.data.isPersonSelectionRequired) {\r\n                passwordlessLoginOptions.value = {\r\n                    ...passwordlessLoginOptions.value,\r\n                    isPersonSelectionRequired: true,\r\n                    matchingPeople: response.data.matchingPeople || []\r\n                };\r\n                return;\r\n            }\r\n\r\n            showError(response.data.errorMessage ?? \"Authentication failed. Please try again.\");\r\n        }\r\n        finally {\r\n            // Reset isAuthenticating in the event there is an error so the user can resubmit.\r\n            isAuthenticating.value = false;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Event handler for the register button being clicked.\r\n     */\r\n    async function onRegister(): Promise<void> {\r\n        await navigate(config.newAccountPageUrl ?? \"/\");\r\n    }\r\n\r\n    // #endregion\r\n\r\n    //#region Functions\r\n\r\n    /**\r\n     * Clears the error message.\r\n     */\r\n    function clearError(): void {\r\n        errorMessage.value = null;\r\n    }\r\n\r\n    /**\r\n     * Gets the initial login method to display.\r\n     */\r\n    function getInitialLoginMethod(): LoginMethod {\r\n        const configuredDefaultLoginMethod = config.defaultLoginMethod;\r\n\r\n        switch (configuredDefaultLoginMethod) {\r\n            case LoginMethod.InternalDatabase: {\r\n                // If block setting default is internal database but only passwordless is supported,\r\n                // then initial login method should be passwordless.\r\n                if (!config.isInternalDatabaseLoginSupported && config.isPasswordlessLoginSupported) {\r\n                    return LoginMethod.Passwordless;\r\n                }\r\n                break;\r\n            }\r\n\r\n            case LoginMethod.Passwordless: {\r\n                // If block setting default is passwordless but only internal database is supported,\r\n                // then initial login method should be internal database.\r\n                if (!config.isPasswordlessLoginSupported && config.isInternalDatabaseLoginSupported) {\r\n                    return LoginMethod.InternalDatabase;\r\n                }\r\n                break;\r\n            }\r\n\r\n            default: {\r\n                break;\r\n            }\r\n        }\r\n\r\n        // Return the block setting value.\r\n        return configuredDefaultLoginMethod;\r\n    }\r\n\r\n    /**\r\n     * Handles the event when a component triggers navigation.\r\n     *\r\n     * @param url The URL to navigate to.\r\n     * @returns an unresolving promise so the page/form remains unusable until the redirect is complete.\r\n     */\r\n    async function navigate(url: string): Promise<void> {\r\n        isNavigating.value = true;\r\n        window.location.href = url;\r\n        return new Promise((_resolve, _reject) => {\r\n            // Return an unresolving promise so the page/form remains unusable until the redirect is complete.\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Displays a completed message to the user.\r\n     * If caption is provided, then a generic error is displayed.\r\n     *\r\n     * @param error The optional error message.\r\n     */\r\n    function showCompleted(caption?: string | null | undefined): void {\r\n        completedCaption.value = caption || \"An unknown error occurred\";\r\n        isCompleted.value = true;\r\n    }\r\n\r\n    /**\r\n     * Displays an error message.\r\n     * If no error message is provided, then a generic error is displayed.\r\n     *\r\n     * @param error The optional error message.\r\n     */\r\n    function showError(error?: string | null | undefined): void {\r\n        errorMessage.value = error || \"An unknown error occurred\";\r\n    }\r\n\r\n    //#endregion\r\n\r\n    onMounted(() => {\r\n        // Redirect since already authenticated.\r\n        if (config.shouldRedirect && config.redirectUrl) {\r\n            navigate(config.redirectUrl);\r\n        }\r\n    });\r\n\r\n    removeCurrentUrlQueryParams(\"State\", \"Code\", \"IsPasswordless\");\r\n\r\n    onConfigurationValuesChanged(useReloadBlock());\r\n</script>"],"names":["username","ref","password","rememberMe","usernameFieldLabel","computed","props","config","newAccountButtonText","onCredentialLoginSubmitted","emit","value","onForgotAccountClicked","onRegisterClicked","externalLogins","_props$modelValue$fil","_props$modelValue","modelValue","filter","l","authenticationType","hasExternalLogins","length","onExternalLoginClick","externalLogin","loginMethodWrapper","isCredential","internalLoginMethod","LoginMethod","InternalDatabase","isPasswordless","Passwordless","get","set","newValue","onSignInWithAccountClicked","onSignInWithEmailOrPhoneClicked","label","validationErrors","phoneNumberConfig","emailOrPhoneNumberRaw","emailOrPhoneNumber","validateEmailOrPhoneNumber","onPasswordlessLoginStartSubmitted","validateForm","getConfiguredRules","_phoneNumberConfig$va","rules","configuredRules","key","bag","push","loadPhoneNumberConfig","_loadPhoneNumberConfig","apply","arguments","_asyncToGenerator","getPhoneNumberConfiguration","errorMessages","validateValue","map","errorMessage","name","text","errors","validateEmail","_objectSpread","email","phoneNumber","shouldSendEmailCode","shouldSendEmailLink","shouldSendSmsCode","formattedNumber","formatPhoneNumber","stripPhoneNumber","validatePhoneNumber","isEmail","_iterator","_createForOfIteratorHelper","_step","s","n","done","_rule$match","rule","regex","RegExp","match","test","err","e","f","concat","internalSubmitPasswordlessLoginVerification","useVModelPassthrough","internalCode","code","internalCommunicationType","communicationType","internalMatchingPeople","_props$modelValue$mat","matchingPeople","internalMatchingPersonValue","matchingPersonValue","onPasswordlessLoginVerifySubmitted","onResendCodeClicked","passwordlessLoginStartRequest","passwordlessLoginVerifyOptions","isPersonSelectionRequired","_props$modelValue2","_props$modelValue3","state","_props$modelValue4","submitPasswordlessLoginVerification","passwordlessLoginStep","isStart","internalStep","PasswordlessLoginStep","Start","isVerify","Verify","_props$modelValue$cod","internalState","_props$modelValue$sta","step","onResendCode","onStartPasswordlessLogin","onVerifyPasswordlessLogin","_onVerifyPasswordlessLogin","watch","newPasswordlessLoginOptions","oldPasswordlessLoginOptions","onMounted","isAutomaticVerificationRequired","useConfigurationValues","invokeBlockAction","useInvokeBlockAction","isMobileForced","document","getElementById","isAuthenticating","shouldRedirect","completedCaption","isNavigating","passwordlessLoginOptions","_config$passwordlessA","passwordlessAutoVerifyOptions","_config$passwordlessA2","isCompleted","areBothInternalAuthProvidersVisible","isInternalDatabaseLoginSupported","isPasswordlessLoginSupported","isAnyExternalAuthProviderVisible","_config$externalAuthP","externalAuthProviderButtons","areSecondaryAndPrimaryAuthVisible","isAnyInternalAuthProviderVisible","loginMethod","getInitialLoginMethod","onCredentialLogin","_x","_onCredentialLogin","response","isSuccess","data","showError","isAuthenticated","navigate","redirectUrl","isConfirmationRequired","showCompleted","onExternalLogin","_x2","_onExternalLogin","_response$data","onForgotAccount","_onForgotAccount","_config$helpPageUrl","helpPageUrl","onPasswordlessLoginStart","_x3","_onPasswordlessLoginStart","clearError","_response$data2","isSuccessful","onPasswordlessLoginVerify","_x4","_onPasswordlessLoginVerify","_response$data$errorM","isRegistrationRequired","registrationUrl","onRegister","_onRegister","_config$newAccountPag","newAccountPageUrl","configuredDefaultLoginMethod","defaultLoginMethod","_x5","_navigate","url","window","location","href","Promise","_resolve","_reject","caption","error","removeCurrentUrlQueryParams","onConfigurationValuesChanged","useReloadBlock"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA6GI,IAAA,IAAMA,QAAQ,GAAGC,GAAG,CAAS,EAAE,CAAC,CAAA;MAChC,IAAA,IAAMC,QAAQ,GAAGD,GAAG,CAAS,EAAE,CAAC,CAAA;MAChC,IAAA,IAAME,UAAU,GAAGF,GAAG,CAAU,KAAK,CAAC,CAAA;MAMtC,IAAA,IAAMG,kBAAkB,GAAGC,QAAQ,CAAC,MAAMC,KAAK,CAACC,MAAM,CAACH,kBAAkB,IAAI,UAAU,CAAC,CAAA;MACxF,IAAA,IAAMI,oBAAoB,GAAGH,QAAQ,CAAC,MAAMC,KAAK,CAACC,MAAM,CAACC,oBAAoB,IAAI,UAAU,CAAC,CAAA;UAS5F,SAASC,0BAA0BA,GAAS;YACxCC,IAAI,CAAC,OAAO,EAAE;cACVV,QAAQ,EAAEA,QAAQ,CAACW,KAAK;cACxBT,QAAQ,EAAEA,QAAQ,CAACS,KAAK;cACxBR,UAAU,EAAEA,UAAU,CAACQ,KAAAA;MAC3B,OAAC,CAAC,CAAA;MACN,KAAA;UAKA,SAASC,sBAAsBA,GAAS;YACpCF,IAAI,CAAC,eAAe,CAAC,CAAA;MACzB,KAAA;UAKA,SAASG,iBAAiBA,GAAS;YAC/BH,IAAI,CAAC,UAAU,CAAC,CAAA;MACpB,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MC/FA,IAAA,IAAMI,cAAc,GAAGT,QAAQ,CAAoC,MAAM;YAAA,IAAAU,qBAAA,EAAAC,iBAAA,CAAA;YACrE,OAAAD,CAAAA,qBAAA,GAAAC,CAAAA,iBAAA,GAAOV,KAAK,CAACW,UAAU,MAAAD,IAAAA,IAAAA,iBAAA,KAAhBA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,iBAAA,CAAkBE,MAAM,CAACC,CAAC,IAAI,CAAC,CAACA,CAAC,CAACC,kBAAkB,CAAC,MAAA,IAAA,IAAAL,qBAAA,KAAA,KAAA,CAAA,GAAAA,qBAAA,GAAI,EAAE,CAAA;MACtE,KAAC,CAAC,CAAA;MAEF,IAAA,IAAMM,iBAAiB,GAAGhB,QAAQ,CAAU,MAAM,CAAC,CAACS,cAAc,CAACH,KAAK,CAACW,MAAM,CAAC,CAAA;UAShF,SAASC,oBAAoBA,CAACC,aAA8C,EAAQ;MAChFd,MAAAA,IAAI,CAAC,OAAO,EAAEc,aAAa,CAAC,CAAA;MAChC,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MCXA,IAAA,IAAMC,kBAAkB,GAAGpB,QAAQ,CAAC,OAAO;MACvCqB,MAAAA,YAAY,EAAEC,mBAAmB,CAAChB,KAAK,KAAKiB,WAAW,CAACC,gBAAgB;MACxEC,MAAAA,cAAc,EAAEH,mBAAmB,CAAChB,KAAK,KAAKiB,WAAW,CAACG,YAAAA;MAC9D,KAAC,CAAC,CAAC,CAAA;UAEH,IAAMJ,mBAAmB,GAAGtB,QAAQ,CAAC;MACjC2B,MAAAA,GAAGA,GAAG;cACF,OAAO1B,KAAK,CAACW,UAAU,CAAA;aAC1B;YACDgB,GAAGA,CAACC,QAAqB,EAAE;MACvBxB,QAAAA,IAAI,CAAC,mBAAmB,EAAEwB,QAAQ,CAAC,CAAA;MACvC,OAAA;MACJ,KAAC,CAAC,CAAA;UAMF,SAASC,0BAA0BA,GAAS;MACxCR,MAAAA,mBAAmB,CAAChB,KAAK,GAAGiB,WAAW,CAACC,gBAAgB,CAAA;MAC5D,KAAA;UAEA,SAASO,+BAA+BA,GAAS;MAC7CT,MAAAA,mBAAmB,CAAChB,KAAK,GAAGiB,WAAW,CAACG,YAAY,CAAA;MACxD,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UCfA,IAAMM,KAAK,GAAG,gBAAgB,CAAA;MAC9B,IAAA,IAAMC,gBAAgB,GAAGrC,GAAG,CAAc,EAAE,CAAC,CAAA;UAC7C,IAAMsC,iBAAiB,GAAGtC,GAAG,EAA4C,CAAA;MACzE,IAAA,IAAMuC,qBAAqB,GAAGvC,GAAG,CAAS,EAAE,CAAC,CAAA;UAM7C,IAAMwC,kBAAkB,GAAGpC,QAAQ,CAAS;MACxC2B,MAAAA,GAAGA,GAAG;cACF,OAAOQ,qBAAqB,CAAC7B,KAAK,CAAA;aACrC;YACDsB,GAAGA,CAACC,QAAgB,EAAE;cAClBM,qBAAqB,CAAC7B,KAAK,GAAGuB,QAAQ,CAAA;cACtCQ,0BAA0B,CAACR,QAAQ,CAAC,CAAA;MACxC,OAAA;MACJ,KAAC,CAAC,CAAA;UASF,SAASS,iCAAiCA,GAAS;MAC/CC,MAAAA,YAAY,EAAE,CAAA;MAEd,MAAA,IAAIN,gBAAgB,CAAC3B,KAAK,CAACW,MAAM,KAAK,CAAC,EAAE;cACrCZ,IAAI,CAAC,OAAO,CAAC,CAAA;MACjB,OAAA;MACJ,KAAA;UAOA,SAASmC,kBAAkBA,GAAkD;MAAA,MAAA,IAAAC,qBAAA,CAAA;MACzE,MAAA,IAAMC,KAAK,GAAA,CAAAD,qBAAA,GAAGP,iBAAiB,CAAC5B,KAAK,MAAA,IAAA,IAAAmC,qBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAvBA,qBAAA,CAAyBC,KAAK,CAAA;YAC5C,IAAMC,eAA8D,GAAG,EAAE,CAAA;MACzE,MAAA,IAAID,KAAK,EAAE;MACP,QAAA,KAAK,IAAME,GAAG,IAAIF,KAAK,EAAE;MACrB,UAAA,IAAMG,GAAG,GAAGH,KAAK,CAACE,GAAG,CAAC,CAAA;MACtBD,UAAAA,eAAe,CAACG,IAAI,CAAC,GAAGD,GAAG,CAAC,CAAA;MAChC,SAAA;MACJ,OAAA;MACA,MAAA,OAAOF,eAAe,CAAA;MAC1B,KAAA;MAAC,IAAA,SAKcI,qBAAqBA,GAAA;MAAA,MAAA,OAAAC,sBAAA,CAAAC,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;MAAA,KAAA;MAAA,IAAA,SAAAF,sBAAA,GAAA;YAAAA,sBAAA,GAAAG,iBAAA,CAApC,aAAsD;MAClDjB,QAAAA,iBAAiB,CAAC5B,KAAK,GAAS8C,MAAAA,2BAA2B,EAAE,CAAA;aAChE,CAAA,CAAA;MAAA,MAAA,OAAAJ,sBAAA,CAAAC,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;MAAA,KAAA;UAKD,SAASX,YAAYA,GAAS;YAC1B,IAAMc,aAAa,GAAGC,aAAa,CAAClB,kBAAkB,CAAC9B,KAAK,EAAE+B,0BAA0B,CAAC,CAAA;MAEzF,MAAA,IAAIgB,aAAa,IAAIA,aAAa,CAACpC,MAAM,EAAE;cACvCgB,gBAAgB,CAAC3B,KAAK,GAAG+C,aAAa,CAACE,GAAG,CACtCC,YAAY,KAAK;MACbC,UAAAA,IAAI,EAAEzB,KAAK;MACX0B,UAAAA,IAAI,EAAEF,YAAAA;MACV,SAAC,CAAC,CACL,CAAA;MACL,OAAC,MACI;cACDvB,gBAAgB,CAAC3B,KAAK,GAAG,EAAE,CAAA;MAC/B,OAAA;MACJ,KAAA;UAOA,SAAS+B,0BAA0BA,CAAC/B,KAAc,EAAoB;YAClE,IAAI,CAACA,KAAK,EAAE;MACR,QAAA,OAAO,IAAI,CAAA;MACf,OAAA;MAEA,MAAA,IAAIqD,MAAM,GAAGC,aAAa,CAACtD,KAAK,CAAC,CAAA;YACjC,IAAIqD,MAAM,KAAK,EAAE,EAAE;cACftD,IAAI,CAAC,mBAAmB,EAAAwD,cAAA,CAAAA,cAAA,CAAA,EAAA,EACjB5D,KAAK,CAACW,UAAU,CAAA,EAAA,EAAA,EAAA;MACnBkD,UAAAA,KAAK,EAAExD,KAAe;MACtByD,UAAAA,WAAW,EAAE,IAAI;MACjBC,UAAAA,mBAAmB,EAAE,IAAI;MACzBC,UAAAA,mBAAmB,EAAE,IAAI;MACzBC,UAAAA,iBAAiB,EAAE,KAAA;eACrB,CAAA,CAAA,CAAA;MACF,QAAA,OAAO,IAAI,CAAA;MACf,OAAA;YAEA,IAAMC,eAAe,GAAGC,iBAAiB,CAACC,gBAAgB,CAAC/D,KAAK,CAAW,CAAC,CAAA;MAC5E,MAAA,IAAI6D,eAAe,EAAE;MACjBR,QAAAA,MAAM,GAAGW,mBAAmB,CAACD,gBAAgB,CAACF,eAAe,CAAC,CAAC,CAAA;cAC/D,IAAIR,MAAM,KAAK,EAAE,EAAE;gBACfxB,qBAAqB,CAAC7B,KAAK,GAAG6D,eAAe,CAAA;gBAC7C9D,IAAI,CAAC,mBAAmB,EAAAwD,cAAA,CAAAA,cAAA,CAAA,EAAA,EACjB5D,KAAK,CAACW,UAAU,CAAA,EAAA,EAAA,EAAA;MACnBkD,YAAAA,KAAK,EAAE,IAAI;MACXC,YAAAA,WAAW,EAAEI,eAAe;MAC5BH,YAAAA,mBAAmB,EAAE,KAAK;MAC1BC,YAAAA,mBAAmB,EAAE,KAAK;MAC1BC,YAAAA,iBAAiB,EAAE,IAAA;iBACrB,CAAA,CAAA,CAAA;MACF,UAAA,OAAO,IAAI,CAAA;MACf,SAAA;MACJ,OAAA;YAGA7D,IAAI,CAAC,mBAAmB,EAAAwD,cAAA,CAAAA,cAAA,CAAA,EAAA,EACjB5D,KAAK,CAACW,UAAU,CAAA,EAAA,EAAA,EAAA;MACnBkD,QAAAA,KAAK,EAAE,IAAI;MACXC,QAAAA,WAAW,EAAE,IAAI;MACjBC,QAAAA,mBAAmB,EAAE,KAAK;MAC1BC,QAAAA,mBAAmB,EAAE,KAAK;MAC1BC,QAAAA,iBAAiB,EAAE,KAAA;aACrB,CAAA,CAAA,CAAA;MACF,MAAA,OAAO,uCAAuC,CAAA;MAClD,KAAA;UAOA,SAASN,aAAaA,CAACtD,KAAc,EAAU;YAC3C,IAAI,CAACA,KAAK,EAAE;MACR,QAAA,OAAO,EAAE,CAAA;MACb,OAAA;MAEA,MAAA,IAAIiE,OAAO,CAACjE,KAAK,CAAC,EAAE;MAChB,QAAA,OAAO,EAAE,CAAA;MACb,OAAA;MAEA,MAAA,OAAO,sCAAsC,CAAA;MACjD,KAAA;UAOA,SAASgE,mBAAmBA,CAAChE,KAAa,EAAU;YAChD,IAAMoC,KAAK,GAAGF,kBAAkB,EAAE,CAAA;YAElC,IAAI,CAAClC,KAAK,EAAE;MACR,QAAA,OAAO,EAAE,CAAA;MACb,OAAA;MAEA,MAAA,IAAIoC,KAAK,CAACzB,MAAM,KAAK,CAAC,EAAE;MACpB,QAAA,OAAO,EAAE,CAAA;MACb,OAAA;MAAC,MAAA,IAAAuD,SAAA,GAAAC,0BAAA,CAEgB/B,KAAK,CAAA;cAAAgC,KAAA,CAAA;MAAA,MAAA,IAAA;cAAtB,KAAAF,SAAA,CAAAG,CAAA,EAAAD,EAAAA,CAAAA,CAAAA,KAAA,GAAAF,SAAA,CAAAI,CAAA,EAAAC,EAAAA,IAAA,GAAwB;MAAA,UAAA,IAAAC,WAAA,CAAA;MAAA,UAAA,IAAfC,IAAI,GAAAL,KAAA,CAAApE,KAAA,CAAA;MACT,UAAA,IAAM0E,KAAK,GAAG,IAAIC,MAAM,CAAA,CAAAH,WAAA,GAACC,IAAI,CAACG,KAAK,cAAAJ,WAAA,KAAA,KAAA,CAAA,GAAAA,WAAA,GAAI,EAAE,CAAC,CAAA;MAE1C,UAAA,IAAIE,KAAK,CAACG,IAAI,CAAC7E,KAAK,CAAC,EAAE;MACnB,YAAA,OAAO,EAAE,CAAA;MACb,WAAA;MACJ,SAAA;MAAC,OAAA,CAAA,OAAA8E,GAAA,EAAA;cAAAZ,SAAA,CAAAa,CAAA,CAAAD,GAAA,CAAA,CAAA;MAAA,OAAA,SAAA;MAAAZ,QAAAA,SAAA,CAAAc,CAAA,EAAA,CAAA;MAAA,OAAA;YAED,OAAAC,gBAAAA,CAAAA,MAAA,CAAwBjF,KAAK,EAAA,iCAAA,CAAA,CAAA;MACjC,KAAA;MAIAyC,IAAAA,qBAAqB,EAAE,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UC5IvB,IAAMyC,2CAA2C,GAAGC,oBAAoB,CAACxF,KAAK,EAAE,qCAAqC,EAAEI,IAAI,CAAC,CAAA;UAM5H,IAAMqF,YAAY,GAAG1F,QAAQ,CAAC;MAC1B2B,MAAAA,GAAGA,GAAG;MACF,QAAA,OAAO1B,KAAK,CAACW,UAAU,CAAC+E,IAAI,IAAI,EAAE,CAAA;aACrC;YACD/D,GAAGA,CAACC,QAAgB,EAAE;cAClBxB,IAAI,CAAC,mBAAmB,EAAAwD,cAAA,CAAAA,cAAA,CAAA,EAAA,EACjB5D,KAAK,CAACW,UAAU,CAAA,EAAA,EAAA,EAAA;MACnB+E,UAAAA,IAAI,EAAE9D,QAAAA;eACR,CAAA,CAAA,CAAA;MACN,OAAA;MACJ,KAAC,CAAC,CAAA;UAEF,IAAM+D,yBAAyB,GAAG5F,QAAQ,CAAC,MAAMC,KAAK,CAAC4F,iBAAiB,IAAI,MAAM,CAAC,CAAA;UAEnF,IAAMC,sBAAsB,GAAG9F,QAAQ,CAAC;MACpC2B,MAAAA,GAAGA,GAAG;MAAA,QAAA,IAAAoE,qBAAA,CAAA;MACF,QAAA,OAAA,CAAAA,qBAAA,GAAO9F,KAAK,CAACW,UAAU,CAACoF,cAAc,MAAA,IAAA,IAAAD,qBAAA,KAAA,KAAA,CAAA,GAAAA,qBAAA,GAAI,EAAE,CAAA;aAC/C;YACDnE,GAAGA,CAACC,QAAuB,EAAE;cACzBxB,IAAI,CAAC,mBAAmB,EAAAwD,cAAA,CAAAA,cAAA,CAAA,EAAA,EACjB5D,KAAK,CAACW,UAAU,CAAA,EAAA,EAAA,EAAA;MACnBoF,UAAAA,cAAc,EAAEnE,QAAAA;eAClB,CAAA,CAAA,CAAA;MACN,OAAA;MACJ,KAAC,CAAC,CAAA;UAEF,IAAMoE,2BAA2B,GAAGjG,QAAQ,CAAC;MACzC2B,MAAAA,GAAGA,GAAG;MACF,QAAA,OAAO1B,KAAK,CAACW,UAAU,CAACsF,mBAAmB,IAAI,EAAE,CAAA;aACpD;YACDtE,GAAGA,CAACC,QAAgB,EAAE;cAClBxB,IAAI,CAAC,mBAAmB,EAAAwD,cAAA,CAAAA,cAAA,CAAA,EAAA,EACjB5D,KAAK,CAACW,UAAU,CAAA,EAAA,EAAA,EAAA;MACnBsF,UAAAA,mBAAmB,EAAErE,QAAAA;eACvB,CAAA,CAAA,CAAA;MACN,OAAA;MACJ,KAAC,CAAC,CAAA;UAMF,SAASsE,kCAAkCA,GAAS;YAChD9F,IAAI,CAAC,QAAQ,CAAC,CAAA;MAClB,KAAA;UAEA,SAAS+F,mBAAmBA,GAAS;YACjCV,YAAY,CAACpF,KAAK,GAAG,EAAE,CAAA;YACvB2F,2BAA2B,CAAC3F,KAAK,GAAG,EAAE,CAAA;YACtCwF,sBAAsB,CAACxF,KAAK,GAAG,EAAE,CAAA;YACjCD,IAAI,CAAC,YAAY,CAAC,CAAA;MACtB,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UC9FA,IAAMgG,6BAA6B,GAAGzG,GAAG,CAAmC;MACxEoE,MAAAA,mBAAmB,EAAE,KAAK;MAC1BC,MAAAA,mBAAmB,EAAE,KAAK;MAC1BC,MAAAA,iBAAiB,EAAE,KAAK;MACxBJ,MAAAA,KAAK,EAAE,IAAI;MACXC,MAAAA,WAAW,EAAE,IAAA;MACjB,KAAC,CAAC,CAAA;UAEF,IAAMuC,8BAA8B,GAAG1G,GAAG,CAAoC;YAC1E+F,IAAI,EAAA,CAAAhF,iBAAA,GAAEV,KAAK,CAACW,UAAU,MAAA,IAAA,IAAAD,iBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAhBA,iBAAA,CAAkBgF,IAAI;YAC5BY,yBAAyB,EAAA,CAAAC,kBAAA,GAAEvG,KAAK,CAACW,UAAU,MAAA,IAAA,IAAA4F,kBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAhBA,kBAAA,CAAkBD,yBAAyB;YACtEP,cAAc,EAAA,CAAAS,kBAAA,GAAExG,KAAK,CAACW,UAAU,MAAA,IAAA,IAAA6F,kBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAhBA,kBAAA,CAAkBT,cAAc;MAChDE,MAAAA,mBAAmB,EAAE,IAAI;YACzBQ,KAAK,EAAA,CAAAC,kBAAA,GAAE1G,KAAK,CAACW,UAAU,MAAA+F,IAAAA,IAAAA,kBAAA,KAAhBA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,kBAAA,CAAkBD,KAAAA;MAC7B,KAAC,CAAC,CAAA;MAKF,IAAA,IAAME,mCAAmC,GAAGhH,GAAG,CAAC,KAAK,CAAC,CAAA;MAKtD,IAAA,IAAMiH,qBAAqB,GAAG7G,QAAQ,CAAC,OAAO;MAC1C8G,MAAAA,OAAO,EAAEC,YAAY,CAACzG,KAAK,KAAK0G,qBAAqB,CAACC,KAAK;MAC3DC,MAAAA,QAAQ,EAAEH,YAAY,CAACzG,KAAK,KAAK0G,qBAAqB,CAACG,MAAAA;MAC3D,KAAC,CAAC,CAAC,CAAA;UAMH,IAAMzB,YAAY,GAAG1F,QAAQ,CAAS;MAClC2B,MAAAA,GAAGA,GAAG;MAAA,QAAA,IAAAyF,qBAAA,CAAA;MACF,QAAA,OAAA,CAAAA,qBAAA,GAAOnH,KAAK,CAACW,UAAU,CAAC+E,IAAI,MAAA,IAAA,IAAAyB,qBAAA,KAAA,KAAA,CAAA,GAAAA,qBAAA,GAAI,EAAE,CAAA;aACrC;YACDxF,GAAGA,CAACC,QAAQ,EAAE;cACVxB,IAAI,CAAC,mBAAmB,EAAAwD,cAAA,CAAAA,cAAA,CAAA,EAAA,EACjB5D,KAAK,CAACW,UAAU,CAAA,EAAA,EAAA,EAAA;MACnB+E,UAAAA,IAAI,EAAE9D,QAAAA;eACR,CAAA,CAAA,CAAA;MACN,OAAA;MACJ,KAAC,CAAC,CAAA;UAEF,IAAMwF,aAAa,GAAGrH,QAAQ,CAAS;MACnC2B,MAAAA,GAAGA,GAAG;MAAA,QAAA,IAAA2F,qBAAA,CAAA;MACF,QAAA,OAAA,CAAAA,qBAAA,GAAOrH,KAAK,CAACW,UAAU,CAAC8F,KAAK,MAAA,IAAA,IAAAY,qBAAA,KAAA,KAAA,CAAA,GAAAA,qBAAA,GAAI,EAAE,CAAA;aACtC;YACD1F,GAAGA,CAACC,QAAQ,EAAE;cACVxB,IAAI,CAAC,mBAAmB,EAAAwD,cAAA,CAAAA,cAAA,CAAA,EAAA,EACjB5D,KAAK,CAACW,UAAU,CAAA,EAAA,EAAA,EAAA;MACnB8F,UAAAA,KAAK,EAAE7E,QAAAA;eACT,CAAA,CAAA,CAAA;MACN,OAAA;MACJ,KAAC,CAAC,CAAA;UAEF,IAAMkF,YAAY,GAAG/G,QAAQ,CAAwB;MACjD2B,MAAAA,GAAGA,GAAG;MACF,QAAA,OAAO1B,KAAK,CAACW,UAAU,CAAC2G,IAAI,CAAA;aAC/B;YACD3F,GAAGA,CAACC,QAA+B,EAAE;cACjCxB,IAAI,CAAC,mBAAmB,EAAAwD,cAAA,CAAAA,cAAA,CAAA,EAAA,EACjB5D,KAAK,CAACW,UAAU,CAAA,EAAA,EAAA,EAAA;MACnB2G,UAAAA,IAAI,EAAE1F,QAAAA;eACR,CAAA,CAAA,CAAA;MACN,OAAA;MACJ,KAAC,CAAC,CAAA;UAEF,IAAMgE,iBAAiB,GAAG7F,QAAQ,CAAgC,MAAMqG,6BAA6B,CAAC/F,KAAK,CAACwD,KAAK,GAAG,OAAO,GAAGuC,6BAA6B,CAAC/F,KAAK,CAACyD,WAAW,GAAG,cAAc,GAAG,MAAM,CAAC,CAAA;UAWxM,SAASyD,YAAYA,GAAS;YAC1B9B,YAAY,CAACpF,KAAK,GAAG,EAAE,CAAA;MACvBgG,MAAAA,8BAA8B,CAAChG,KAAK,CAACqF,IAAI,GAAG,EAAE,CAAA;MAC9CoB,MAAAA,YAAY,CAACzG,KAAK,GAAG0G,qBAAqB,CAACC,KAAK,CAAA;MACpD,KAAA;UAKA,SAASQ,wBAAwBA,GAAS;YAEtC/B,YAAY,CAACpF,KAAK,GAAG,EAAE,CAAA;MACvBgG,MAAAA,8BAA8B,CAAChG,KAAK,CAACqF,IAAI,GAAG,EAAE,CAAA;YAC9C0B,aAAa,CAAC/G,KAAK,GAAG,EAAE,CAAA;MAExBD,MAAAA,IAAI,CAAC,OAAO,EAAEgG,6BAA6B,CAAC/F,KAAK,CAAC,CAAA;MACtD,KAAA;MAAC,IAAA,SAMcoH,yBAAyBA,GAAA;MAAA,MAAA,OAAAC,0BAAA,CAAA1E,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;MAAA,KAAA;MAAA,IAAA,SAAAyE,0BAAA,GAAA;YAAAA,0BAAA,GAAAxE,iBAAA,CAAxC,aAA0D;cACtD9C,IAAI,CAAC,QAAQ,EAAE;MACXsF,UAAAA,IAAI,EAAEW,8BAA8B,CAAChG,KAAK,CAACqF,IAAI;MAC/CO,UAAAA,mBAAmB,EAAEI,8BAA8B,CAAChG,KAAK,CAAC4F,mBAAmB;MAC7EQ,UAAAA,KAAK,EAAEJ,8BAA8B,CAAChG,KAAK,CAACoG,KAAAA;MAChD,SAAC,CAAC,CAAA;aACL,CAAA,CAAA;MAAA,MAAA,OAAAiB,0BAAA,CAAA1E,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;MAAA,KAAA;UAOD0E,KAAK,CAAC,MAAM3H,KAAK,CAACW,UAAU,EAAE,CAACiH,2BAA2B,EAAEC,2BAA2B,KAAK;MAExF,MAAA,IAAID,2BAA2B,CAAClC,IAAI,KAAKmC,2BAA2B,CAACnC,IAAI,EAAE;MACvEW,QAAAA,8BAA8B,CAAChG,KAAK,CAACqF,IAAI,GAAGkC,2BAA2B,CAAClC,IAAI,CAAA;MAChF,OAAA;MAEA,MAAA,IAAIkC,2BAA2B,CAACtB,yBAAyB,KAAKuB,2BAA2B,CAACvB,yBAAyB,EAAE;MACjHD,QAAAA,8BAA8B,CAAChG,KAAK,CAACiG,yBAAyB,GAAGsB,2BAA2B,CAACtB,yBAAyB,CAAA;MAC1H,OAAA;MAEA,MAAA,IAAIsB,2BAA2B,CAAC7B,cAAc,KAAK8B,2BAA2B,CAAC9B,cAAc,EAAE;MAC3FM,QAAAA,8BAA8B,CAAChG,KAAK,CAAC0F,cAAc,GAAG6B,2BAA2B,CAAC7B,cAAc,CAAA;MACpG,OAAA;MAEA,MAAA,IAAI6B,2BAA2B,CAACnB,KAAK,KAAKoB,2BAA2B,CAACpB,KAAK,EAAE;MACzEJ,QAAAA,8BAA8B,CAAChG,KAAK,CAACoG,KAAK,GAAGmB,2BAA2B,CAACnB,KAAK,CAAA;MAClF,OAAA;MACJ,KAAC,CAAC,CAAA;MAMFqB,IAAAA,SAAS,CAAC,MAAM;MACZ,MAAA,IAAI9H,KAAK,CAACW,UAAU,CAACoH,+BAA+B,EAAE;cAClDpB,mCAAmC,CAACtG,KAAK,GAAG,IAAI,CAAA;MACpD,OAAA;MACJ,KAAC,CAAC,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UCxGF,IAAMJ,MAAM,GAAG+H,sBAAsB,EAA0B,CAAA;UAC/D,IAAMC,iBAAiB,GAAGC,oBAAoB,EAAE,CAAA;UAIhD,IAAMC,cAAc,GAAG,CAAC,CAACC,QAAQ,CAACC,cAAc,CAAC,QAAQ,CAAC,CAAA;MAE1D,IAAA,IAAMC,gBAAgB,GAAG3I,GAAG,CAACM,MAAM,CAACsI,cAAc,CAAC,CAAA;MACnD,IAAA,IAAMC,gBAAgB,GAAG7I,GAAG,CAAgB,IAAI,CAAC,CAAA;UACjD,IAAM4D,YAAY,GAAG5D,GAAG,CAAgBM,MAAM,CAACsD,YAAY,IAAI,IAAI,CAAC,CAAA;MACpE,IAAA,IAAMkF,YAAY,GAAG9I,GAAG,CAAC,KAAK,CAAC,CAAA;UAE/B,IAAM+I,wBAAwB,GAAG/I,GAAG,CAA8B;YAC9D+F,IAAI,EAAA,CAAAiD,qBAAA,GAAE1I,MAAM,CAAC2I,6BAA6B,MAAA,IAAA,IAAAD,qBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAApCA,qBAAA,CAAsCjD,IAAI;YAChDe,KAAK,EAAA,CAAAoC,sBAAA,GAAE5I,MAAM,CAAC2I,6BAA6B,MAAA,IAAA,IAAAC,sBAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAApCA,sBAAA,CAAsCpC,KAAK;MAClDsB,MAAAA,+BAA+B,EAAE,CAAC,CAAC9H,MAAM,CAAC2I,6BAA6B;MACvEtC,MAAAA,yBAAyB,EAAE,KAAK;MAChCP,MAAAA,cAAc,EAAE,IAAI;YACpBuB,IAAI,EAAErH,MAAM,CAAC2I,6BAA6B,GAAG7B,qBAAqB,CAACG,MAAM,GAAGH,qBAAqB,CAACC,KAAAA;MACtG,KAAC,CAAC,CAAA;MAEF,IAAA,IAAM8B,WAAW,GAAGnJ,GAAG,CAAU,KAAK,CAAC,CAAA;MAMvC,IAAA,IAAMoJ,mCAAmC,GAAGhJ,QAAQ,CAAU,MAC1DE,MAAM,CAAC+I,gCAAgC,IAAI/I,MAAM,CAACgJ,4BAA4B,CACjF,CAAA;UAED,IAAMC,gCAAgC,GAAGnJ,QAAQ,CAAU,MAAA;MAAA,MAAA,IAAAoJ,qBAAA,CAAA;MAAA,MAAA,OACvD,CAAC,EAAA,CAAAA,qBAAA,GAAClJ,MAAM,CAACmJ,2BAA2B,MAAA,IAAA,IAAAD,qBAAA,KAAA,KAAA,CAAA,IAAlCA,qBAAA,CAAoCnI,MAAM,CAAA,CAAA;WAC/C,CAAA,CAAA;MAED,IAAA,IAAMqI,iCAAiC,GAAGtJ,QAAQ,CAAU,MAAM;YAC9D,IAAMuJ,gCAAgC,GAAGrJ,MAAM,CAAC+I,gCAAgC,IAAI/I,MAAM,CAACgJ,4BAA4B,CAAA;YACvH,OAAQC,gCAAgC,CAAC7I,KAAK,IAAIiJ,gCAAgC,IAAKP,mCAAmC,CAAC1I,KAAK,CAAA;MACpI,KAAC,CAAC,CAAA;MAEF,IAAA,IAAMkJ,WAAW,GAAG5J,GAAG,CAAC6J,qBAAqB,EAAE,CAAC,CAAA;UAChD,IAAMnI,mBAAmB,GAAGtB,QAAQ,CAAc;MAC9C2B,MAAAA,GAAGA,GAAG;MACF,QAAA,OAAOgH,wBAAwB,CAACrI,KAAK,CAAC0H,+BAA+B,GAAGzG,WAAW,CAACG,YAAY,GAAG8H,WAAW,CAAClJ,KAAK,CAAA;aACvH;YACDsB,GAAGA,CAACC,QAAQ,EAAE;cACV2H,WAAW,CAAClJ,KAAK,GAAGuB,QAAQ,CAAA;MAChC,OAAA;MACJ,KAAC,CAAC,CAAA;MACF,IAAA,IAAMT,kBAAkB,GAAGpB,QAAQ,CAAC,OAAO;MACvCqB,MAAAA,YAAY,EAAEC,mBAAmB,CAAChB,KAAK,KAAKiB,WAAW,CAACC,gBAAgB;MACxEC,MAAAA,cAAc,EAAEH,mBAAmB,CAAChB,KAAK,KAAKiB,WAAW,CAACG,YAAAA;MAC9D,KAAC,CAAC,CAAC,CAAA;UAAC,SAUWgI,iBAAiBA,CAAAC,EAAA,EAAA;MAAA,MAAA,OAAAC,kBAAA,CAAA3G,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;MAAA,KAAA;MAAA,IAAA,SAAA0G,kBAAA,GAAA;MAAAA,MAAAA,kBAAA,GAAAzG,iBAAA,CAAhC,WAAiCN,GAA8B,EAAiB;cAC5E0F,gBAAgB,CAACjI,KAAK,GAAG,IAAI,CAAA;cAE7B,IAAI;MACA,UAAA,IAAMuJ,QAAQ,GAAA,MAAS3B,iBAAiB,CAA6B,iBAAiB,EAAE;MAAErF,YAAAA,GAAAA;MAAI,WAAC,CAAC,CAAA;MAEhG,UAAA,IAAI,EAACgH,QAAQ,KAARA,IAAAA,IAAAA,QAAQ,KAARA,KAAAA,CAAAA,IAAAA,QAAQ,CAAEC,SAAS,CAAI,IAAA,CAACD,QAAQ,CAACE,IAAI,EAAE;kBACxCC,SAAS,CAAC,CAAAH,QAAQ,KAARA,IAAAA,IAAAA,QAAQ,KAARA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,QAAQ,CAAErG,YAAY,KAAI,yCAAyC,CAAC,CAAA;MAC9E,YAAA,OAAA;MACJ,WAAA;MAEA,UAAA,IAAIqG,QAAQ,CAACE,IAAI,CAACE,eAAe,EAAE;kBAC/B,MAAMC,QAAQ,CAACL,QAAQ,CAACE,IAAI,CAACI,WAAW,IAAI,GAAG,CAAC,CAAA;MAChD,YAAA,OAAA;MACJ,WAAA;MAEA,UAAA,IAAIN,QAAQ,CAACE,IAAI,CAACK,sBAAsB,EAAE;kBACtCC,aAAa,CAACR,QAAQ,CAACE,IAAI,CAACvG,YAAY,IAAIqG,QAAQ,CAACrG,YAAY,CAAC,CAAA;MAClE,YAAA,OAAA;MACJ,WAAA;gBAEAwG,SAAS,CAACH,QAAQ,CAACE,IAAI,CAACvG,YAAY,IAAI,0CAA0C,CAAC,CAAA;MACvF,SAAC,SACO;gBAEJ+E,gBAAgB,CAACjI,KAAK,GAAG,KAAK,CAAA;MAClC,SAAA;aACH,CAAA,CAAA;MAAA,MAAA,OAAAsJ,kBAAA,CAAA3G,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;MAAA,KAAA;UAAA,SAKcoH,eAAeA,CAAAC,GAAA,EAAA;MAAA,MAAA,OAAAC,gBAAA,CAAAvH,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;MAAA,KAAA;MAAA,IAAA,SAAAsH,gBAAA,GAAA;MAAAA,MAAAA,gBAAA,GAAArH,iBAAA,CAA9B,WAA+BhC,aAA8C,EAAiB;cAC1FoH,gBAAgB,CAACjI,KAAK,GAAG,IAAI,CAAA;MAC7B,QAAA,IAAMuC,GAA+B,GAAG;gBACpC9B,kBAAkB,EAAEI,aAAa,CAACJ,kBAAAA;eACrC,CAAA;cAED,IAAI;MAAA,UAAA,IAAA0J,cAAA,CAAA;MACA,UAAA,IAAMZ,QAAQ,GAAA,MAAS3B,iBAAiB,CAA8B,kBAAkB,EAAE;MAAErF,YAAAA,GAAAA;MAAI,WAAC,CAAC,CAAA;gBAElG,IAAIgH,QAAQ,aAARA,QAAQ,KAAA,KAAA,CAAA,IAARA,QAAQ,CAAEC,SAAS,IAAID,QAAQ,KAARA,IAAAA,IAAAA,QAAQ,gBAAAY,cAAA,GAARZ,QAAQ,CAAEE,IAAI,MAAA,IAAA,IAAAU,cAAA,KAAdA,KAAAA,CAAAA,IAAAA,cAAA,CAAgBN,WAAW,EAAE;MACpD,YAAA,MAAMD,QAAQ,CAACL,QAAQ,CAACE,IAAI,CAACI,WAAW,CAAC,CAAA;MACzC,YAAA,OAAA;MACJ,WAAA;gBAEAH,SAAS,CAACH,QAAQ,KAARA,IAAAA,IAAAA,QAAQ,uBAARA,QAAQ,CAAErG,YAAY,CAAC,CAAA;MACjC,UAAA,OAAA;MACJ,SAAC,SACO;gBACJ+E,gBAAgB,CAACjI,KAAK,GAAG,KAAK,CAAA;MAClC,SAAA;aACH,CAAA,CAAA;MAAA,MAAA,OAAAkK,gBAAA,CAAAvH,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;MAAA,KAAA;MAAA,IAAA,SAKcwH,eAAeA,GAAA;MAAA,MAAA,OAAAC,gBAAA,CAAA1H,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;MAAA,KAAA;MAAA,IAAA,SAAAyH,gBAAA,GAAA;YAAAA,gBAAA,GAAAxH,iBAAA,CAA9B,aAAgD;MAAA,QAAA,IAAAyH,mBAAA,CAAA;MAC5C,QAAA,MAAMV,QAAQ,CAAA,CAAAU,mBAAA,GAAC1K,MAAM,CAAC2K,WAAW,MAAA,IAAA,IAAAD,mBAAA,KAAA,KAAA,CAAA,GAAAA,mBAAA,GAAI,GAAG,CAAC,CAAA;aAC5C,CAAA,CAAA;MAAA,MAAA,OAAAD,gBAAA,CAAA1H,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;MAAA,KAAA;UAAA,SAKc4H,wBAAwBA,CAAAC,GAAA,EAAA;MAAA,MAAA,OAAAC,yBAAA,CAAA/H,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;MAAA,KAAA;MAAA,IAAA,SAAA8H,yBAAA,GAAA;MAAAA,MAAAA,yBAAA,GAAA7H,iBAAA,CAAvC,WAAwCN,GAAqC,EAAiB;cAC1F0F,gBAAgB,CAACjI,KAAK,GAAG,IAAI,CAAA;MAE7B2K,QAAAA,UAAU,EAAE,CAAA;cAEZ,IAAI;MAAA,UAAA,IAAAC,eAAA,CAAA;MACA,UAAA,IAAMrB,QAAQ,GAAA,MAAS3B,iBAAiB,CAAoC,wBAAwB,EAAE;MAAErF,YAAAA,GAAAA;MAAI,WAAC,CAAC,CAAA;MAE9G,UAAA,IAAI,EAACgH,QAAQ,KAARA,IAAAA,IAAAA,QAAQ,KAARA,KAAAA,CAAAA,IAAAA,QAAQ,CAAEC,SAAS,CAAI,IAAA,CAACD,QAAQ,CAACE,IAAI,EAAE;kBACxCC,SAAS,CAAC,CAAAH,QAAQ,KAARA,IAAAA,IAAAA,QAAQ,KAARA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,QAAQ,CAAErG,YAAY,KAAI,yCAAyC,CAAC,CAAA;MAC9E,YAAA,OAAA;MACJ,WAAA;MAEA,UAAA,IAAIqG,QAAQ,CAACE,IAAI,CAACoB,YAAY,EAAE;kBAC5BxC,wBAAwB,CAACrI,KAAK,GAAAuD,cAAA,CAAAA,cAAA,CAAA,EAAA,EACvB8E,wBAAwB,CAACrI,KAAK,CAAA,EAAA,EAAA,EAAA;MACjCoG,cAAAA,KAAK,EAAEmD,QAAQ,CAACE,IAAI,CAACrD,KAAK,IAAI,EAAE;oBAChCa,IAAI,EAAEP,qBAAqB,CAACG,MAAAA;mBAC/B,CAAA,CAAA;MACD,YAAA,OAAA;MACJ,WAAA;gBAEAwB,wBAAwB,CAACrI,KAAK,GAAAuD,cAAA,CAAAA,cAAA,CAAA,EAAA,EACvB8E,wBAAwB,CAACrI,KAAK,CAAA,EAAA,EAAA,EAAA;kBACjCiH,IAAI,EAAEP,qBAAqB,CAACC,KAAAA;iBAC/B,CAAA,CAAA;gBACD+C,SAAS,CAAC,CAAAH,QAAQ,KAARA,IAAAA,IAAAA,QAAQ,KAAAqB,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,CAAAA,eAAA,GAARrB,QAAQ,CAAEE,IAAI,MAAAmB,IAAAA,IAAAA,eAAA,KAAdA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,eAAA,CAAgB1H,YAAY,MAAIqG,QAAQ,KAARA,IAAAA,IAAAA,QAAQ,KAARA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,QAAQ,CAAErG,YAAY,CAAI,IAAA,uEAAuE,CAAC,CAAA;MAC5I,UAAA,OAAA;MACJ,SAAC,SACO;gBACJ+E,gBAAgB,CAACjI,KAAK,GAAG,KAAK,CAAA;MAClC,SAAA;aACH,CAAA,CAAA;MAAA,MAAA,OAAA0K,yBAAA,CAAA/H,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;MAAA,KAAA;UAAA,SAMckI,yBAAyBA,CAAAC,GAAA,EAAA;MAAA,MAAA,OAAAC,0BAAA,CAAArI,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;MAAA,KAAA;MAAA,IAAA,SAAAoI,0BAAA,GAAA;MAAAA,MAAAA,0BAAA,GAAAnI,iBAAA,CAAxC,WAAyCN,GAAsC,EAAiB;cAC5F0F,gBAAgB,CAACjI,KAAK,GAAG,IAAI,CAAA;MAC7B2K,QAAAA,UAAU,EAAE,CAAA;cAEZ,IAAI;MAAA,UAAA,IAAAM,qBAAA,CAAA;MACA,UAAA,IAAI1B,QAAQ,GAAA,MAAS3B,iBAAiB,CAAqC,yBAAyB,EAAE;MAAErF,YAAAA,GAAAA;MAAI,WAAC,CAAC,CAAA;MAE9G,UAAA,IAAI,CAACgH,QAAQ,IAAI,CAACA,QAAQ,CAACC,SAAS,IAAI,CAACD,QAAQ,CAACE,IAAI,EAAE;kBACpDC,SAAS,CAAC,yCAAyC,CAAC,CAAA;MACpD,YAAA,OAAA;MACJ,WAAA;MAEA,UAAA,IAAIH,QAAQ,CAACE,IAAI,CAACE,eAAe,EAAE;MAC/B,YAAA,MAAMC,QAAQ,CAAChK,MAAM,CAACiK,WAAW,IAAI,GAAG,CAAC,CAAA;MACzC,YAAA,OAAA;MACJ,WAAA;MAEA,UAAA,IAAIN,QAAQ,CAACE,IAAI,CAACyB,sBAAsB,EAAE;MACtC,YAAA,IAAI,CAAC3B,QAAQ,CAACE,IAAI,CAAC0B,eAAe,EAAE;oBAChCzB,SAAS,CAAC,0CAA0C,CAAC,CAAA;MACzD,aAAA;kBACA,MAAME,QAAQ,CAACL,QAAQ,CAACE,IAAI,CAAC0B,eAAe,IAAI,aAAa,CAAC,CAAA;MAC9D,YAAA,OAAA;MACJ,WAAA;MAEA,UAAA,IAAI5B,QAAQ,CAACE,IAAI,CAACxD,yBAAyB,EAAE;kBACzCoC,wBAAwB,CAACrI,KAAK,GAAAuD,cAAA,CAAAA,cAAA,CAAA,EAAA,EACvB8E,wBAAwB,CAACrI,KAAK,CAAA,EAAA,EAAA,EAAA;MACjCiG,cAAAA,yBAAyB,EAAE,IAAI;MAC/BP,cAAAA,cAAc,EAAE6D,QAAQ,CAACE,IAAI,CAAC/D,cAAc,IAAI,EAAA;mBACnD,CAAA,CAAA;MACD,YAAA,OAAA;MACJ,WAAA;MAEAgE,UAAAA,SAAS,CAAAuB,CAAAA,qBAAA,GAAC1B,QAAQ,CAACE,IAAI,CAACvG,YAAY,MAAA,IAAA,IAAA+H,qBAAA,KAAA,KAAA,CAAA,GAAAA,qBAAA,GAAI,0CAA0C,CAAC,CAAA;MACvF,SAAC,SACO;gBAEJhD,gBAAgB,CAACjI,KAAK,GAAG,KAAK,CAAA;MAClC,SAAA;aACH,CAAA,CAAA;MAAA,MAAA,OAAAgL,0BAAA,CAAArI,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;MAAA,KAAA;MAAA,IAAA,SAKcwI,UAAUA,GAAA;MAAA,MAAA,OAAAC,WAAA,CAAA1I,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;MAAA,KAAA;MAAA,IAAA,SAAAyI,WAAA,GAAA;YAAAA,WAAA,GAAAxI,iBAAA,CAAzB,aAA2C;MAAA,QAAA,IAAAyI,qBAAA,CAAA;MACvC,QAAA,MAAM1B,QAAQ,CAAA,CAAA0B,qBAAA,GAAC1L,MAAM,CAAC2L,iBAAiB,MAAA,IAAA,IAAAD,qBAAA,KAAA,KAAA,CAAA,GAAAA,qBAAA,GAAI,GAAG,CAAC,CAAA;aAClD,CAAA,CAAA;MAAA,MAAA,OAAAD,WAAA,CAAA1I,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;MAAA,KAAA;UASD,SAAS+H,UAAUA,GAAS;YACxBzH,YAAY,CAAClD,KAAK,GAAG,IAAI,CAAA;MAC7B,KAAA;UAKA,SAASmJ,qBAAqBA,GAAgB;MAC1C,MAAA,IAAMqC,4BAA4B,GAAG5L,MAAM,CAAC6L,kBAAkB,CAAA;MAE9D,MAAA,QAAQD,4BAA4B;cAChC,KAAKvK,WAAW,CAACC,gBAAgB;MAAE,UAAA;kBAG/B,IAAI,CAACtB,MAAM,CAAC+I,gCAAgC,IAAI/I,MAAM,CAACgJ,4BAA4B,EAAE;oBACjF,OAAO3H,WAAW,CAACG,YAAY,CAAA;MACnC,aAAA;MACA,YAAA,MAAA;MACJ,WAAA;cAEA,KAAKH,WAAW,CAACG,YAAY;MAAE,UAAA;kBAG3B,IAAI,CAACxB,MAAM,CAACgJ,4BAA4B,IAAIhJ,MAAM,CAAC+I,gCAAgC,EAAE;oBACjF,OAAO1H,WAAW,CAACC,gBAAgB,CAAA;MACvC,aAAA;MACA,YAAA,MAAA;MACJ,WAAA;MAIC,OAAA;MAIL,MAAA,OAAOsK,4BAA4B,CAAA;MACvC,KAAA;UAAC,SAQc5B,QAAQA,CAAA8B,GAAA,EAAA;MAAA,MAAA,OAAAC,SAAA,CAAAhJ,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;MAAA,KAAA;MAAA,IAAA,SAAA+I,SAAA,GAAA;MAAAA,MAAAA,SAAA,GAAA9I,iBAAA,CAAvB,WAAwB+I,GAAW,EAAiB;cAChDxD,YAAY,CAACpI,KAAK,GAAG,IAAI,CAAA;MACzB6L,QAAAA,MAAM,CAACC,QAAQ,CAACC,IAAI,GAAGH,GAAG,CAAA;cAC1B,OAAO,IAAII,OAAO,CAAC,CAACC,QAAQ,EAAEC,OAAO,KAAK,EAEzC,CAAC,CAAA;aACL,CAAA,CAAA;MAAA,MAAA,OAAAP,SAAA,CAAAhJ,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;MAAA,KAAA;UAQD,SAASmH,aAAaA,CAACoC,OAAmC,EAAQ;MAC9DhE,MAAAA,gBAAgB,CAACnI,KAAK,GAAGmM,OAAO,IAAI,2BAA2B,CAAA;YAC/D1D,WAAW,CAACzI,KAAK,GAAG,IAAI,CAAA;MAC5B,KAAA;UAQA,SAAS0J,SAASA,CAAC0C,KAAiC,EAAQ;MACxDlJ,MAAAA,YAAY,CAAClD,KAAK,GAAGoM,KAAK,IAAI,2BAA2B,CAAA;MAC7D,KAAA;MAIA3E,IAAAA,SAAS,CAAC,MAAM;MAEZ,MAAA,IAAI7H,MAAM,CAACsI,cAAc,IAAItI,MAAM,CAACiK,WAAW,EAAE;MAC7CD,QAAAA,QAAQ,CAAChK,MAAM,CAACiK,WAAW,CAAC,CAAA;MAChC,OAAA;MACJ,KAAC,CAAC,CAAA;MAEFwC,IAAAA,2BAA2B,CAAC,OAAO,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAA;UAE9DC,4BAA4B,CAACC,cAAc,EAAE,CAAC,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}