{"version":3,"file":"__federation_expose_DRPage2PM.chunk.bundle","sources":["/Users/claudiobaiardi/Documents/GitHub/aldyl/DataOil-front/apps/data-oil-app/dailyReport/src/components/DRFooterActions.tsx","/Users/claudiobaiardi/Documents/GitHub/aldyl/DataOil-front/apps/data-oil-app/dailyReport/src/screens/DRPage2PM.tsx","/Users/claudiobaiardi/Documents/GitHub/aldyl/DataOil-front/apps/data-oil-app/dailyReport/src/store/dailyReportBase.store.ts","/Users/claudiobaiardi/Documents/GitHub/aldyl/DataOil-front/apps/data-oil-app/dailyReport/src/store/dailyReportPM.store.ts"],"sourcesContent":["import React from 'react';\nimport { View, StyleSheet, Platform } from 'react-native';\nimport { useNavigation, useRoute } from '@react-navigation/native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { StatusButton } from '@data-oil-front/ui-mobile';\n// import { useTheme } from '@data-oil-front/core-shared';\nimport {\n  ArrowRightIcon,\n  XMarkIcon,\n  ArrowLeftIcon,\n} from 'react-native-heroicons/outline';\n\ntype DRFooterActionsProps = {\n  onContinue: () => void;\n  continueDisabled?: boolean;\n  onCancel?: () => void;\n  onBack?: () => void;\n  homeRouteName?: string;\n  accentColor?: string;\n  continueLabel?: string;\n};\n\nexport default function DRFooterActions({\n  onContinue,\n  continueDisabled,\n  onCancel,\n  onBack,\n  homeRouteName = 'DailyReport',\n  // TODO: Create a const for default black color\n  accentColor = '#000000',\n  continueLabel = 'Continuar',\n}: DRFooterActionsProps) {\n  const navigation = useNavigation();\n  const route = useRoute();\n  const insets = useSafeAreaInsets();\n  const calcPaddingBottom =\n    Platform.OS === 'ios' ? Math.max(insets.bottom, 12) : 12;\n\n  const canGoBack =\n    // @ts-ignore navegación provista por host\n    typeof navigation?.canGoBack === 'function' && navigation.canGoBack();\n  const showBackButton = canGoBack && route?.name !== homeRouteName;\n\n  const handleCancel = () => {\n    if (onCancel) return onCancel();\n    // @ts-ignore navegación provista por host\n    navigation?.navigate?.('Home');\n  };\n\n  return (\n    <View style={[styles.footerBar, { paddingBottom: calcPaddingBottom }]}>\n      <StatusButton\n        title=\"Cancelar\"\n        onPress={handleCancel}\n        leftIcon={<XMarkIcon size={20} color={accentColor} />}\n        // Texto visible con color de marca para contraste\n        textStyle={{ color: accentColor }}\n        style={styles.flexOne}\n      />\n      {showBackButton ? (\n        <StatusButton\n          title=\"Atrás\"\n          onPress={() => {\n            if (onBack) return onBack();\n            // @ts-ignore navegación provista por host\n            navigation?.goBack?.();\n          }}\n          leftIcon={<ArrowLeftIcon size={20} color={accentColor} />}\n          backgroundColor=\"transparent\"\n          textStyle={{ color: accentColor }}\n          style={styles.flexOne}\n        />\n      ) : (\n        <View style={styles.flexOne} />\n      )}\n      <StatusButton\n        title={continueLabel}\n        onPress={onContinue}\n        backgroundColor={accentColor}\n        rightIcon={<ArrowRightIcon size={20} color=\"white\" />}\n        style={styles.flexOne}\n        disabled={continueDisabled}\n      />\n    </View>\n  );\n}\n\nconst styles = StyleSheet.create({\n  footerBar: {\n    position: 'absolute',\n    left: 0,\n    right: 0,\n    bottom: 0,\n    backgroundColor: '#fff',\n    borderTopWidth: 1,\n    borderTopColor: '#E5E7EB',\n    paddingHorizontal: 20,\n    // Reducido de 12 a 10 para un diseño más compacto\n    paddingTop: 10,\n    // Espaciado entre botones\n    gap: 12,\n    flexDirection: 'row',\n    shadowColor: '#000',\n    shadowOpacity: 0.08,\n    shadowRadius: 8,\n    shadowOffset: { width: 6, height: -3 },\n    elevation: 6,\n  },\n  cancelButtonText: {\n    // Color principal para el texto de cancelar (mejor visibilidad)\n    color: '#374151',\n  },\n  whiteText: {\n    // Color blanco para botones con fondo de color acento\n    color: 'white',\n  },\n  flexOne: { flex: 1 },\n});\n","import React, { useEffect, useMemo, useState } from 'react';\nimport { View, StyleSheet, ScrollView } from 'react-native';\nimport { useNavigation, useRoute } from '@react-navigation/native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\nimport {\n  SummaryTable,\n  Select,\n  MenuItem,\n  ConfirmationModal,\n  LoadingSpinner,\n  useToast,\n} from '@data-oil-front/ui-mobile';\nimport { Controller, useForm, useWatch } from 'react-hook-form';\nimport dayjs from 'dayjs';\nimport utc from 'dayjs/plugin/utc';\n\nimport DRFooterActions from '../components/DRFooterActions';\nimport { useDailyReportBaseStore } from '../store/dailyReportBase.store';\nimport { useDailyReportPMStore } from '../store/dailyReportPM.store';\nimport {\n  getAllFlowStations,\n  getMeasurementPointsFiltered,\n  getDailyReportMeasurementPointById,\n  getMeasurementPointByIdCached,\n  getFieldByIdCached,\n  getLocationByIdCached,\n  type OptionDDL,\n  type MeasurementPoint,\n  useTheme,\n} from '@data-oil-front/core-shared';\n\ndayjs.extend(utc);\n\ninterface DailyReportPMForm {\n  flowStation: string | null;\n  measurementPoint: string | null;\n}\n\ntype RouteParams = {\n  id?: string | number;\n  reportId?: string | number;\n};\n\nconst parseIdParam = (value: string | number | undefined): number | null => {\n  if (value === null || value === undefined) return null;\n  const parsed = Number(value);\n  return Number.isFinite(parsed) ? parsed : null;\n};\n\nexport default function DRPage2PM() {\n  const navigation = useNavigation();\n  const route = useRoute<any>();\n  const params: RouteParams = route?.params ?? {};\n  const reportId = parseIdParam(params.id ?? params.reportId);\n\n  const insets = useSafeAreaInsets();\n  const { primaryColor: themeColor } = useTheme();\n  const accentColor = themeColor ?? '#1B418C';\n  const { show } = useToast();\n\n  const { summary, setSummary, setFieldId } = useDailyReportBaseStore(state => state);\n  const { step2, meta, setStep2, setMeta, reset } = useDailyReportPMStore(state => state);\n\n  const {\n    control,\n    handleSubmit,\n    formState: { isValid, isSubmitting },\n    setValue,\n  } = useForm<DailyReportPMForm>({\n    defaultValues: {\n      flowStation: step2.flowStationId ?? null,\n      measurementPoint: step2.measurementPointId ?? null,\n    },\n    mode: 'onChange',\n  });\n\n  const selectedFlowStation = useWatch({ control, name: 'flowStation' });\n  const selectedMeasurementPoint = useWatch({ control, name: 'measurementPoint' });\n\n  const [flowStations, setFlowStations] = useState<OptionDDL[]>([]);\n  const [measurementPoints, setMeasurementPoints] = useState<MeasurementPoint[]>([]);\n  const [loadingFlowStations, setLoadingFlowStations] = useState(false);\n  const [loadingMeasurementPoints, setLoadingMeasurementPoints] = useState(false);\n  const [isModalOpen, setIsModalOpen] = useState(false);\n  const [initializedFromEdition, setInitializedFromEdition] = useState(false);\n\n  const safeSummary = useMemo(\n    () => ({\n      location: summary.location ?? '-',\n      activity: summary.activity ?? '-',\n      field: summary.field ?? '-',\n      facility: summary.facility ?? 'Punto de medición',\n    }),\n    [summary],\n  );\n\n  useEffect(() => {\n    let mounted = true;\n    const loadFlowStations = async () => {\n      setLoadingFlowStations(true);\n      try {\n        const rows = await getAllFlowStations();\n        if (!mounted) return;\n        setFlowStations(Array.isArray(rows) ? rows : []);\n      } catch (error) {\n        if (__DEV__) {\n          // eslint-disable-next-line no-console\n          console.error('No se pudieron cargar las estaciones de flujo', error);\n        }\n        if (mounted) {\n          setFlowStations([]);\n        }\n      } finally {\n        if (mounted) {\n          setLoadingFlowStations(false);\n        }\n      }\n    };\n    loadFlowStations();\n    return () => {\n      mounted = false;\n    };\n  }, []);\n\n  useEffect(() => {\n    if (!reportId) {\n      setMeta({ editionMode: false, recordId: null, editionNumber: null });\n    }\n  }, [reportId, setMeta]);\n\n  useEffect(() => {\n    let mounted = true;\n    const fetchMeasurementPoints = async () => {\n      if (!selectedFlowStation) {\n        setMeasurementPoints([]);\n        return;\n      }\n      setLoadingMeasurementPoints(true);\n      try {\n        const rows = await getMeasurementPointsFiltered([\n          ['flow_station_id', '=', Number(selectedFlowStation)],\n        ]);\n        if (mounted) {\n          setMeasurementPoints(Array.isArray(rows) ? rows : []);\n        }\n      } catch (error) {\n        if (__DEV__) {\n          // eslint-disable-next-line no-console\n          console.error('No se pudieron cargar los puntos de medición', error);\n        }\n        if (mounted) setMeasurementPoints([]);\n      } finally {\n        if (mounted) setLoadingMeasurementPoints(false);\n      }\n    };\n    fetchMeasurementPoints();\n    return () => {\n      mounted = false;\n    };\n  }, [selectedFlowStation]);\n\n  useEffect(() => {\n    if (!reportId || initializedFromEdition) return;\n\n    let cancelled = false;\n\n    const bootstrapEdition = async () => {\n      try {\n        const report = await getDailyReportMeasurementPointById(reportId);\n        if (!report || cancelled) {\n          show({\n            type: 'error',\n            message: 'No fue posible cargar el reporte seleccionado.',\n          });\n          return;\n        }\n\n        const measurementPointId = report.measurement_point_id ?? null;\n        let measurementPointDetail: MeasurementPoint | null = null;\n        if (measurementPointId) {\n          measurementPointDetail = await getMeasurementPointByIdCached(measurementPointId);\n        }\n\n        const flowStationId = measurementPointDetail?.flow_station_id\n          ? String(measurementPointDetail.flow_station_id)\n          : null;\n\n        if (flowStationId) {\n          setValue('flowStation', flowStationId, {\n            shouldValidate: true,\n            shouldDirty: false,\n          });\n        }\n\n        if (measurementPointId) {\n          setValue('measurementPoint', String(measurementPointId), {\n            shouldValidate: true,\n            shouldDirty: false,\n          });\n        }\n\n        const fieldId = measurementPointDetail?.field_id ?? null;\n        let fieldName: string | null = null;\n        let locationName: string | null = null;\n        if (fieldId) {\n          const field = await getFieldByIdCached(Number(fieldId));\n          fieldName = field?.name ?? null;\n          if (field?.id) {\n            setFieldId(String(field.id));\n          }\n          if (field?.location_id) {\n            const location = await getLocationByIdCached(Number(field.location_id));\n            locationName = location?.name ?? null;\n          }\n        }\n\n        const activityName = report.activity_id === 1 ? 'Producción' : 'Recuperación';\n        const nextSummary = {\n          location: locationName ?? summary.location ?? null,\n          activity: activityName,\n          field: fieldName ?? summary.field ?? null,\n          facility: 'Punto de medición',\n        } as const;\n\n        const summaryChanged =\n          nextSummary.location !== (summary.location ?? null) ||\n          nextSummary.activity !== (summary.activity ?? null) ||\n          nextSummary.field !== (summary.field ?? null) ||\n          nextSummary.facility !== (summary.facility ?? null);\n\n        if (summaryChanged) {\n          setSummary(nextSummary);\n        }\n\n        const createdAt = report.date_created ? dayjs(report.date_created) : null;\n\n        setStep2({\n          flowStationId: flowStationId ?? null,\n          measurementPointId: measurementPointId ? String(measurementPointId) : null,\n          measurementPointName: measurementPointDetail?.name ?? undefined,\n          date: createdAt?.isValid() ? createdAt.format('YYYY-MM-DD') : null,\n          time: createdAt?.isValid() ? createdAt.utc().format('HH:mm') : null,\n        });\n\n        setMeta({\n          editionMode: true,\n          recordId: String(report.id ?? reportId),\n          editionNumber: report.edition_number ?? null,\n        });\n\n        setInitializedFromEdition(true);\n      } catch (error) {\n        if (__DEV__) {\n          // eslint-disable-next-line no-console\n          console.error('No fue posible inicializar el modo edición', error);\n        }\n        show({\n          type: 'error',\n          message: 'Ocurrió un error al preparar el formulario en modo edición.',\n        });\n      }\n    };\n\n    bootstrapEdition();\n\n    return () => {\n      cancelled = true;\n    };\n  }, [reportId, initializedFromEdition, setMeta, setStep2, setSummary, setValue, setFieldId, show, summary.location, summary.field, summary.activity, summary.facility]);\n\n  useEffect(() => {\n    if (!meta.editionMode || initializedFromEdition) return;\n    setInitializedFromEdition(true);\n  }, [meta.editionMode, initializedFromEdition]);\n\n  useEffect(() => {\n    if (!selectedFlowStation) return;\n    const station = flowStations.find(item => String(item.id) === String(selectedFlowStation));\n    if (station) {\n      setStep2({ flowStationName: station.name });\n    }\n  }, [flowStations, selectedFlowStation, setStep2]);\n\n  useEffect(() => {\n    if (!selectedMeasurementPoint) return;\n    const point = measurementPoints.find(item => String(item.id) === String(selectedMeasurementPoint));\n    if (point) {\n      setStep2({ measurementPointName: point.name ?? undefined });\n    }\n  }, [measurementPoints, selectedMeasurementPoint, setStep2]);\n\n  const onSubmit = handleSubmit(values => {\n    const flowStationOption = flowStations.find(item => String(item.id) === String(values.flowStation));\n    const measurementPointOption = measurementPoints.find(item => String(item.id) === String(values.measurementPoint));\n\n    setStep2({\n      flowStationId: values.flowStation ?? null,\n      measurementPointId: values.measurementPoint ?? null,\n      flowStationName: flowStationOption?.name ?? undefined,\n      measurementPointName: measurementPointOption?.name ?? undefined,\n    });\n\n    const nextRoute = 'DRPage3PM';\n    // @ts-ignore navegación provista por host\n    navigation?.navigate?.(nextRoute as never);\n  });\n\n  return (\n    <View style={styles.screen}>\n      <ScrollView\n        style={styles.container}\n        contentContainerStyle={{ paddingBottom: insets.bottom + 120 }}\n      >\n        <View style={styles.form}>\n          <SummaryTable\n            items={[\n              { name: 'Localización', value: safeSummary.location },\n              { name: 'Actividad', value: safeSummary.activity },\n              { name: 'Campo', value: safeSummary.field },\n              { name: 'Instalación', value: safeSummary.facility },\n            ]}\n          />\n\n          <View style={styles.block} />\n\n          <Controller\n            control={control}\n            name=\"flowStation\"\n            rules={{ required: true }}\n            render={({ field: { value, onChange } }) => (\n              <Select\n                value={value}\n                onChange={onChange}\n                label=\"Estación de flujo\"\n                accentColor={accentColor}\n                required\n                disabled={loadingFlowStations}\n              >\n                {loadingFlowStations ? (\n                  <MenuItem value=\"loading\" disabled>\n                    Cargando...\n                  </MenuItem>\n                ) : null}\n                {flowStations.map(opt => (\n                  <MenuItem key={String(opt.id)} value={String(opt.id)}>\n                    {opt.name}\n                  </MenuItem>\n                ))}\n              </Select>\n            )}\n          />\n\n          <View style={styles.block} />\n\n          <Controller\n            control={control}\n            name=\"measurementPoint\"\n            rules={{ required: true }}\n            render={({ field: { value, onChange } }) => (\n              <Select\n                value={value}\n                onChange={onChange}\n                label=\"Punto de medición\"\n                accentColor={accentColor}\n                required\n                disabled={!selectedFlowStation || loadingMeasurementPoints}\n                placeholder={\n                  !selectedFlowStation\n                    ? 'Selecciona una estación de flujo primero'\n                    : loadingMeasurementPoints\n                    ? 'Cargando puntos de medición...'\n                    : measurementPoints.length === 0\n                    ? 'No hay puntos de medición disponibles'\n                    : 'Seleccione un punto de medición'\n                }\n              >\n                {measurementPoints.map(point => (\n                  <MenuItem key={String(point.id)} value={String(point.id)}>\n                    {point.name ?? `Punto ${point.id}`}\n                  </MenuItem>\n                ))}\n              </Select>\n            )}\n          />\n\n          {(loadingFlowStations || loadingMeasurementPoints) && (\n            <View style={styles.loadingInline}>\n              <LoadingSpinner size=\"small\" color={accentColor} />\n            </View>\n          )}\n        </View>\n      </ScrollView>\n      <DRFooterActions\n        onContinue={onSubmit}\n        continueDisabled={!isValid || isSubmitting}\n        onCancel={() => setIsModalOpen(true)}\n        accentColor={accentColor}\n      />\n      <ConfirmationModal\n        open={isModalOpen}\n        onClose={() => setIsModalOpen(false)}\n        onConfirm={() => {\n          reset();\n          // @ts-ignore navegación provista por host\n          navigation?.navigate?.('Home');\n        }}\n        title=\"¿Estás seguro de que deseas cancelar?\"\n        message=\"Se perderán todos los datos cargados en el reporte actual.\"\n      />\n    </View>\n  );\n}\n\nconst styles = StyleSheet.create({\n  screen: { flex: 1, backgroundColor: '#f9fafb' },\n  container: { flex: 1, paddingTop: 16 },\n  form: { paddingHorizontal: 20, paddingBottom: 24, gap: 0 },\n  block: { height: 16 },\n  loadingInline: {\n    marginTop: 24,\n    alignItems: 'center',\n    justifyContent: 'center',\n  },\n});\n\n\n","import { create } from 'zustand';\nimport type { ReportHistoryTable } from '@data-oil-front/core-shared';\n\ninterface DailyReportBaseStore {\n  fieldId: string | null;\n  summary: {\n    location: string | null;\n    activity: string | null;\n    field: string | null;\n    facility: string | null;\n  };\n  editing: DailyReportEditingState;\n}\n\ninterface DailyReportBaseStoreActions {\n  setFieldId: (fieldId: string | null) => void;\n  setSummary: (summary: DailyReportBaseStore['summary']) => void;\n  setEditing: (editing: Partial<DailyReportEditingState>) => void;\n  resetEditing: () => void;\n}\n\nexport interface DailyReportEditingState {\n  isEditing: boolean;\n  reportId: string | number | null;\n  table: ReportHistoryTable | null;\n  revision?: number | null;\n  payload?: Record<string, any> | null;\n}\n\nconst INITIAL_EDITING_STATE: DailyReportEditingState = {\n  isEditing: false,\n  reportId: null,\n  table: null,\n  revision: null,\n  payload: null,\n};\n\nconst INITIAL_STATE: DailyReportBaseStore = {\n  fieldId: null,\n  summary: {\n    location: null,\n    activity: null,\n    field: null,\n    facility: null,\n  },\n  editing: INITIAL_EDITING_STATE,\n};\n\nexport const useDailyReportBaseStore = create<\n  DailyReportBaseStore & DailyReportBaseStoreActions\n>(set => ({\n  ...INITIAL_STATE,\n  // ACTIONS\n  setFieldId: (fieldId: string | null) => set(state => ({ ...state, fieldId })),\n  setSummary: (summary: DailyReportBaseStore['summary']) =>\n    set(state => ({ ...state, summary })),\n  setEditing: editing =>\n    set(state => ({\n      ...state,\n      editing: {\n        ...state.editing,\n        ...editing,\n      },\n    })),\n  resetEditing: () =>\n    set(state => ({\n      ...state,\n      editing: INITIAL_EDITING_STATE,\n    })),\n}));\n","import { create } from 'zustand';\n\nexport interface DRPMStep2State {\n  flowStationId: string | null;\n  flowStationName?: string | null;\n  measurementPointId: string | null;\n  measurementPointName?: string | null;\n  date?: string | null;\n  time?: string | null;\n}\n\nexport interface DRPMMetaState {\n  editionMode: boolean;\n  recordId?: string | null;\n  editionNumber?: number | null;\n}\n\ninterface DRPMStoreState {\n  step2: Partial<DRPMStep2State>;\n  meta: DRPMMetaState;\n  setStep2: (values: Partial<DRPMStep2State>) => void;\n  setMeta: (values: Partial<DRPMMetaState>) => void;\n  reset: () => void;\n}\n\nconst createInitialStep2State = (): Partial<DRPMStep2State> => ({\n  flowStationId: null,\n  measurementPointId: null,\n});\n\nconst createInitialMetaState = (): DRPMMetaState => ({\n  editionMode: false,\n  recordId: null,\n  editionNumber: null,\n});\n\nexport const useDailyReportPMStore = create<DRPMStoreState>(set => ({\n  step2: createInitialStep2State(),\n  meta: createInitialMetaState(),\n  setStep2: values =>\n    set(state => ({\n      step2: {\n        ...state.step2,\n        ...values,\n      },\n    })),\n  setMeta: values =>\n    set(state => ({\n      meta: {\n        ...state.meta,\n        ...values,\n      },\n    })),\n  reset: () =>\n    set(() => ({\n      step2: createInitialStep2State(),\n      meta: createInitialMetaState(),\n    })),\n}));\n\n\n"],"names":["DRFooterActions","onContinue","continueDisabled","onCancel","onBack","homeRouteName","accentColor","continueLabel","navigation","useNavigation","route","useRoute","insets","useSafeAreaInsets","calcPaddingBottom","Platform","OS","Math","max","bottom","showBackButton","canGoBack","name","View","style","styles","footerBar","paddingBottom","StatusButton","title","onPress","handleCancel","navigate","leftIcon","XMarkIcon","size","color","textStyle","flexOne","goBack","ArrowLeftIcon","backgroundColor","rightIcon","ArrowRightIcon","disabled","StyleSheet","create","position","left","right","borderTopWidth","borderTopColor","paddingHorizontal","paddingTop","gap","flexDirection","shadowColor","shadowOpacity","shadowRadius","shadowOffset","width","height","elevation","cancelButtonText","whiteText","flex","DRPage2PM","dayjs","extend","utc","parseIdParam","value","parsed","Number","isFinite","params","step2","RouteParams","reportId","id","themeColor","primaryColor","useToast","show","useDailyReportBaseStore","state","summary","setSummary","setFieldId","meta","useDailyReportPMStore","setStep2","setMeta","reset","defaultValues","flowStation","flowStationId","measurementPoint","measurementPointId","mode","control","handleSubmit","useForm","formState","isValid","isSubmitting","setValue","selectedFlowStation","useWatch","selectedMeasurementPoint","flowStations","setFlowStations","useState","measurementPoints","setMeasurementPoints","loadingFlowStations","setLoadingFlowStations","loadingMeasurementPoints","setLoadingMeasurementPoints","isModalOpen","setIsModalOpen","initializedFromEdition","setInitializedFromEdition","safeSummary","useMemo","location","activity","field","facility","useEffect","mounted","rows","getAllFlowStations","Array","isArray","error","editionMode","recordId","editionNumber","getMeasurementPointsFiltered","cancelled","report","locationName","getDailyReportMeasurementPointById","type","message","measurement_point_id","measurementPointDetail","getMeasurementPointByIdCached","flow_station_id","String","shouldValidate","shouldDirty","fieldId","field_id","fieldName","getFieldByIdCached","location_id","getLocationByIdCached","activityName","activity_id","nextSummary","createdAt","date_created","measurementPointName","undefined","date","format","time","edition_number","station","find","item","flowStationName","point","onSubmit","values","flowStationOption","measurementPointOption","screen","ScrollView","container","contentContainerStyle","form","SummaryTable","items","block","Controller","rules","required","render","onChange","Select","label","MenuItem","map","opt","placeholder","length","loadingInline","LoadingSpinner","ConfirmationModal","open","onClose","onConfirm","marginTop","alignItems","justifyContent","INITIAL_EDITING_STATE","isEditing","table","revision","payload","INITIAL_STATE","editing","DailyReportBaseStore","set","setEditing","resetEditing","DRPMStoreState"],"mappings":"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"}