{"version":3,"file":"EmissionList-Cz4mojCS.mjs","names":[],"sources":["../src/components/display/emission/EmissionList.vue","../src/components/display/emission/EmissionList.vue"],"sourcesContent":["<template>\n  <ListPaginate\n    id=\"emissionListPaginate\"\n    v-model:first=\"dfirst\"\n    v-model:rows-per-page=\"dsize\"\n    v-model:is-mobile=\"isMobile\"\n    :text-count=\"\n      showCount && emissions.length > 1\n        ? t('Number emissions', { nb: displayCount }) + sortText\n        : undefined\n    \"\n    :total-count=\"totalCount\"\n    :loading=\"loading\"\n    :loading-text=\"loading ? t('Loading emissions ...') : undefined\"\n    :player-responsive=\"true\"\n  >\n    <template #list>\n      <div v-if=\"!state.emissionsPage.itemPlayer\" class=\"octopus-element-list two-items-list\">\n        <ClassicLazy\n          v-for=\"e in displayArray\"\n          :key=\"e.emissionId\"\n          :min-height=\"250\"\n          class=\"d-flex flex-column flex-grow-1\"\n        >\n          <EmissionItem v-if=\"0 !== e.emissionId\" :emission=\"e\" />\n          <template #preview>\n            <router-link\n              :to=\"{\n                name: 'emission',\n                params: { emissionId: e.emissionId },\n              }\"\n              :title=\"t('Series name page', { name: e.name })\"\n            >\n              {{ e.name }}\n            </router-link>\n          </template>\n        </ClassicLazy>\n      </div>\n      <div\n        v-else\n        v-show=\"(displayRubriquage && rubriques) || !displayRubriquage\"\n        class=\"d-flex flex-wrap justify-content-around\"\n      >\n        <template v-for=\"e in displayArray\" :key=\"e.emissionId\">\n          <EmissionPlayerItem\n            v-if=\"0 !== e.emissionId\"\n            :emission=\"e\"\n            class=\"m-3 flex-shrink-0\"\n            :class=\"mainRubriquage(e)\"\n            :nb-podcasts=\"nbPodcasts\"\n            :rubrique-name=\"rubriquesId(e)\"\n          />\n        </template>\n      </div>\n    </template>\n  </ListPaginate>\n</template>\n\n<script setup lang=\"ts\">\nimport ListPaginate from \"../list/ListPaginate.vue\";\nimport classicApi from \"../../../api/classicApi\";\nimport ClassicLazy from \"../../misc/ClassicLazy.vue\";\nimport {useErrorHandler} from \"../../composable/useErrorHandler\";\nimport { state } from \"../../../stores/ParamSdkStore\";\nimport { Emission, emptyEmissionData } from \"../../../stores/class/general/emission\";\nimport { Rubrique } from \"../../../stores/class/rubrique/rubrique\";\nimport { defineAsyncComponent, ref, Ref, computed, watch, onMounted } from \"vue\";\nimport { FetchParam } from \"../../../stores/class/general/fetchParam\";\nimport { AxiosError } from \"axios\";\nimport { Rubriquage } from \"../../../stores/class/rubrique/rubriquage\";\nimport { useFilterStore } from \"../../../stores/FilterStore\";\nimport { ListClassicReturn } from \"../../../stores/class/general/listReturn\";\nimport { useI18n } from \"vue-i18n\";\nimport { EmissionGroup } from \"../../../api/groupsApi\";\nconst EmissionItem = defineAsyncComponent(() => import(\"./EmissionItem.vue\"));\nconst EmissionPlayerItem = defineAsyncComponent(\n  () => import(\"./EmissionPlayerItem.vue\"),\n);\n\n//Props \nconst props = defineProps({\n  first: { default: 0, type: Number },\n  size: { default: 30, type: Number },\n  query: { default: undefined, type: String },\n  iabId: { default: undefined, type: Number },\n  organisationId: { default: undefined, type: String },\n  monetisable: { default: \"UNDEFINED\", type: String },\n  before: { default: undefined, type: String },\n  after: { default: undefined, type: String },\n  sort: { default: \"DATE\", type: String },\n  showCount: { default: false, type: Boolean },\n  includeHidden: { default: false, type: Boolean },\n  rubriqueId: { default: () => [], type: Array as () => Array<number> },\n  rubriquageId: { default: () => [], type: Array as () => Array<number> },\n  noRubriquageId: { default: () => [], type: Array as () => Array<number> },\n  nbPodcasts: { default: undefined, type: Number },\n  /** The beneficiaries to filter on */\n  beneficiaries: { default: null, type: Array as () => Array<string> },\n  /** The emission groups to filter on */\n  emissionGroups: { default: null, type: Array as () => Array<EmissionGroup> }\n})\n\n//Data \nconst loading = ref(true);\nconst dfirst = ref(props.first);\nconst dsize = ref(props.size);\nconst totalCount = ref(0);\nconst displayCount = ref(0);\nconst isMobile = ref(false);\nconst emissions: Ref<Array<Emission>> = ref([]);\nconst rubriques: Ref<Array<Rubrique> | undefined> = ref(undefined);\n  \n//Composables\nconst { t } = useI18n();\nconst {handle403} = useErrorHandler();\nconst filterStore = useFilterStore();\n\n//Computed\nconst displayArray = computed(() => {\n  if (isMobile.value) {\n    return emissions.value;\n  }\n  return emissions.value.slice(\n    dfirst.value,\n    Math.min(dfirst.value + dsize.value, totalCount.value),\n  );\n});\nconst displayRubriquage = computed(() => state.emissionsPage.rubriquage);\nconst changePaginate = computed(() => `${props.first}|${props.size}`);\n/** Computed property to track for configuration changes */\nconst changed = computed(() => {\n  return `${props.organisationId}|${props.query}|${props.monetisable}|${props.includeHidden}|\\\n  ${props.iabId}|${props.rubriqueId}|${props.rubriquageId}|${props.before}|\\\n  ${props.after}|${props.sort}|${props.noRubriquageId}|${props.beneficiaries}|\\\n  ${props.emissionGroups}`;\n});\nconst sortText = computed(() => {\n  let textSort = \"\";\n  switch (props.sort) {\n    case \"SCORE\":\n      textSort = \" \" + t(\"sort by score\");\n      break;\n    case \"LAST_PODCAST_DESC\":\n      textSort = \" \" + t(\"sort by date\");\n      break;\n    case \"NAME\":\n      textSort = \" \" + t(\"sort by alphabetical\");\n      break;\n    default:\n      textSort = \" \" + t(\"sort by date\");\n      break;\n  }\n    return textSort.replace(\"triés\", \"triées\");\n});\nconst organisation = computed(() => props.organisationId ? props.organisationId : filterStore.filterOrgaId);\n\n\n//Watch\nwatch(changePaginate, () => {\n  dfirst.value = props.first;\n  dsize.value = props.size;\n});\nwatch(changed, () =>fetchContent(true));\nwatch(dsize, () =>fetchContent(true));\nwatch(dfirst, () =>{\n  if (\n    !emissions.value[dfirst.value] ||\n    0 === emissions.value[dfirst.value].emissionId\n  ) {\n    fetchContent(false);\n  }\n});\n\n\nonMounted(()=>{\n  fetchContent(false);\n  if (displayRubriquage.value) {\n    fetchRubriques();\n  }\n})\n\n//Methods\nasync function fetchContent(reset: boolean): Promise<void> {\n  loading.value = true;\n  const param: FetchParam = {\n    first: reset? 0: dfirst.value,\n    size: dsize.value,\n    query: props.query,\n    groupId: props.emissionGroups?.map(g => g.groupId),\n    organisationId: organisation.value,\n    monetisable: props.monetisable,\n    iabId: props.iabId,\n    before: props.before,\n    after: props.after,\n    sort: props.sort,\n    noRubriquageId: props.noRubriquageId.length\n      ? props.noRubriquageId\n      : undefined,\n    rubriqueId: props.rubriqueId.length ? props.rubriqueId : undefined,\n    rubriquageId: props.rubriquageId.length ? props.rubriquageId : undefined,\n    includeHidden: props.includeHidden,\n    beneficiary: props.beneficiaries ?? undefined\n  };\n\n  // When fetching hidden episodes, also fetch hidden emissions\n  if (props.includeHidden === true) {\n    param.visible = 'ALL';\n  } else {\n    param.visible = 'VISIBLE';\n  }\n\n  // TODO use emissionGroups\n\n  try {\n    const data = await classicApi.fetchData<ListClassicReturn<Emission>>({\n      api: 0,\n      path: \"emission/search\",\n      parameters: param,\n      specialTreatement: true,\n    });\n    afterFetching(reset, data);\n  } catch (error) {\n    handle403(error as AxiosError);\n  }\n}\nfunction afterFetching(\n  reset: boolean,\n  data: { count: number; result: Array<Emission>; sort: string },\n): void {\n  if (reset) {\n    dfirst.value = 0;\n    emissions.value.length = 0;\n  }\n  if (dfirst.value > emissions.value.length) {\n    for (\n      let i = emissions.value.length - 1, len = dfirst.value + dsize.value;\n      i < len;\n      i++\n    ) {\n      emissions.value.push(emptyEmissionData());\n    }\n  }\n  displayCount.value = data.count;\n  const responseEmissions = data.result.filter((e: Emission | null) => {\n    if (null === e) {\n      displayCount.value--;\n    }\n    return null !== e;\n  });\n  emissions.value = emissions.value\n    .slice(0, dfirst.value)\n    .concat(responseEmissions)\n    .concat(\n      emissions.value.slice(dfirst.value + dsize.value, emissions.value.length),\n    );\n  totalCount.value = data.count;\n  loading.value = false;\n}\nasync function fetchRubriques(): Promise<void> {\n  const data = await classicApi.fetchData<Rubriquage>({\n    api: 0,\n    path: \"rubriquage/\" + displayRubriquage.value,\n  });\n  rubriques.value = data.rubriques;\n}\nfunction mainRubriquage(emission: Emission): string {\n  return emission.rubriqueIds?.[0] === state.emissionsPage.mainRubrique\n    ? \"partenaireRubrique\"\n    : \"\";\n}\nfunction rubriquesId(emission: Emission): string | undefined {\n  if (\n    !displayRubriquage.value ||\n    !emission.rubriqueIds ||\n    0 === emission.rubriqueIds.length ||\n    !rubriques.value ||\n    !rubriques.value.length\n  )\n    return undefined;\n  const rubrique = rubriques.value.find(\n    (element: Rubrique) => element.rubriqueId === emission.rubriqueIds[0],\n  );\n  if (!rubrique) {\n    return undefined;\n  }\n  return rubrique.name;\n}\n</script>\n","<template>\n  <ListPaginate\n    id=\"emissionListPaginate\"\n    v-model:first=\"dfirst\"\n    v-model:rows-per-page=\"dsize\"\n    v-model:is-mobile=\"isMobile\"\n    :text-count=\"\n      showCount && emissions.length > 1\n        ? t('Number emissions', { nb: displayCount }) + sortText\n        : undefined\n    \"\n    :total-count=\"totalCount\"\n    :loading=\"loading\"\n    :loading-text=\"loading ? t('Loading emissions ...') : undefined\"\n    :player-responsive=\"true\"\n  >\n    <template #list>\n      <div v-if=\"!state.emissionsPage.itemPlayer\" class=\"octopus-element-list two-items-list\">\n        <ClassicLazy\n          v-for=\"e in displayArray\"\n          :key=\"e.emissionId\"\n          :min-height=\"250\"\n          class=\"d-flex flex-column flex-grow-1\"\n        >\n          <EmissionItem v-if=\"0 !== e.emissionId\" :emission=\"e\" />\n          <template #preview>\n            <router-link\n              :to=\"{\n                name: 'emission',\n                params: { emissionId: e.emissionId },\n              }\"\n              :title=\"t('Series name page', { name: e.name })\"\n            >\n              {{ e.name }}\n            </router-link>\n          </template>\n        </ClassicLazy>\n      </div>\n      <div\n        v-else\n        v-show=\"(displayRubriquage && rubriques) || !displayRubriquage\"\n        class=\"d-flex flex-wrap justify-content-around\"\n      >\n        <template v-for=\"e in displayArray\" :key=\"e.emissionId\">\n          <EmissionPlayerItem\n            v-if=\"0 !== e.emissionId\"\n            :emission=\"e\"\n            class=\"m-3 flex-shrink-0\"\n            :class=\"mainRubriquage(e)\"\n            :nb-podcasts=\"nbPodcasts\"\n            :rubrique-name=\"rubriquesId(e)\"\n          />\n        </template>\n      </div>\n    </template>\n  </ListPaginate>\n</template>\n\n<script setup lang=\"ts\">\nimport ListPaginate from \"../list/ListPaginate.vue\";\nimport classicApi from \"../../../api/classicApi\";\nimport ClassicLazy from \"../../misc/ClassicLazy.vue\";\nimport {useErrorHandler} from \"../../composable/useErrorHandler\";\nimport { state } from \"../../../stores/ParamSdkStore\";\nimport { Emission, emptyEmissionData } from \"../../../stores/class/general/emission\";\nimport { Rubrique } from \"../../../stores/class/rubrique/rubrique\";\nimport { defineAsyncComponent, ref, Ref, computed, watch, onMounted } from \"vue\";\nimport { FetchParam } from \"../../../stores/class/general/fetchParam\";\nimport { AxiosError } from \"axios\";\nimport { Rubriquage } from \"../../../stores/class/rubrique/rubriquage\";\nimport { useFilterStore } from \"../../../stores/FilterStore\";\nimport { ListClassicReturn } from \"../../../stores/class/general/listReturn\";\nimport { useI18n } from \"vue-i18n\";\nimport { EmissionGroup } from \"../../../api/groupsApi\";\nconst EmissionItem = defineAsyncComponent(() => import(\"./EmissionItem.vue\"));\nconst EmissionPlayerItem = defineAsyncComponent(\n  () => import(\"./EmissionPlayerItem.vue\"),\n);\n\n//Props \nconst props = defineProps({\n  first: { default: 0, type: Number },\n  size: { default: 30, type: Number },\n  query: { default: undefined, type: String },\n  iabId: { default: undefined, type: Number },\n  organisationId: { default: undefined, type: String },\n  monetisable: { default: \"UNDEFINED\", type: String },\n  before: { default: undefined, type: String },\n  after: { default: undefined, type: String },\n  sort: { default: \"DATE\", type: String },\n  showCount: { default: false, type: Boolean },\n  includeHidden: { default: false, type: Boolean },\n  rubriqueId: { default: () => [], type: Array as () => Array<number> },\n  rubriquageId: { default: () => [], type: Array as () => Array<number> },\n  noRubriquageId: { default: () => [], type: Array as () => Array<number> },\n  nbPodcasts: { default: undefined, type: Number },\n  /** The beneficiaries to filter on */\n  beneficiaries: { default: null, type: Array as () => Array<string> },\n  /** The emission groups to filter on */\n  emissionGroups: { default: null, type: Array as () => Array<EmissionGroup> }\n})\n\n//Data \nconst loading = ref(true);\nconst dfirst = ref(props.first);\nconst dsize = ref(props.size);\nconst totalCount = ref(0);\nconst displayCount = ref(0);\nconst isMobile = ref(false);\nconst emissions: Ref<Array<Emission>> = ref([]);\nconst rubriques: Ref<Array<Rubrique> | undefined> = ref(undefined);\n  \n//Composables\nconst { t } = useI18n();\nconst {handle403} = useErrorHandler();\nconst filterStore = useFilterStore();\n\n//Computed\nconst displayArray = computed(() => {\n  if (isMobile.value) {\n    return emissions.value;\n  }\n  return emissions.value.slice(\n    dfirst.value,\n    Math.min(dfirst.value + dsize.value, totalCount.value),\n  );\n});\nconst displayRubriquage = computed(() => state.emissionsPage.rubriquage);\nconst changePaginate = computed(() => `${props.first}|${props.size}`);\n/** Computed property to track for configuration changes */\nconst changed = computed(() => {\n  return `${props.organisationId}|${props.query}|${props.monetisable}|${props.includeHidden}|\\\n  ${props.iabId}|${props.rubriqueId}|${props.rubriquageId}|${props.before}|\\\n  ${props.after}|${props.sort}|${props.noRubriquageId}|${props.beneficiaries}|\\\n  ${props.emissionGroups}`;\n});\nconst sortText = computed(() => {\n  let textSort = \"\";\n  switch (props.sort) {\n    case \"SCORE\":\n      textSort = \" \" + t(\"sort by score\");\n      break;\n    case \"LAST_PODCAST_DESC\":\n      textSort = \" \" + t(\"sort by date\");\n      break;\n    case \"NAME\":\n      textSort = \" \" + t(\"sort by alphabetical\");\n      break;\n    default:\n      textSort = \" \" + t(\"sort by date\");\n      break;\n  }\n    return textSort.replace(\"triés\", \"triées\");\n});\nconst organisation = computed(() => props.organisationId ? props.organisationId : filterStore.filterOrgaId);\n\n\n//Watch\nwatch(changePaginate, () => {\n  dfirst.value = props.first;\n  dsize.value = props.size;\n});\nwatch(changed, () =>fetchContent(true));\nwatch(dsize, () =>fetchContent(true));\nwatch(dfirst, () =>{\n  if (\n    !emissions.value[dfirst.value] ||\n    0 === emissions.value[dfirst.value].emissionId\n  ) {\n    fetchContent(false);\n  }\n});\n\n\nonMounted(()=>{\n  fetchContent(false);\n  if (displayRubriquage.value) {\n    fetchRubriques();\n  }\n})\n\n//Methods\nasync function fetchContent(reset: boolean): Promise<void> {\n  loading.value = true;\n  const param: FetchParam = {\n    first: reset? 0: dfirst.value,\n    size: dsize.value,\n    query: props.query,\n    groupId: props.emissionGroups?.map(g => g.groupId),\n    organisationId: organisation.value,\n    monetisable: props.monetisable,\n    iabId: props.iabId,\n    before: props.before,\n    after: props.after,\n    sort: props.sort,\n    noRubriquageId: props.noRubriquageId.length\n      ? props.noRubriquageId\n      : undefined,\n    rubriqueId: props.rubriqueId.length ? props.rubriqueId : undefined,\n    rubriquageId: props.rubriquageId.length ? props.rubriquageId : undefined,\n    includeHidden: props.includeHidden,\n    beneficiary: props.beneficiaries ?? undefined\n  };\n\n  // When fetching hidden episodes, also fetch hidden emissions\n  if (props.includeHidden === true) {\n    param.visible = 'ALL';\n  } else {\n    param.visible = 'VISIBLE';\n  }\n\n  // TODO use emissionGroups\n\n  try {\n    const data = await classicApi.fetchData<ListClassicReturn<Emission>>({\n      api: 0,\n      path: \"emission/search\",\n      parameters: param,\n      specialTreatement: true,\n    });\n    afterFetching(reset, data);\n  } catch (error) {\n    handle403(error as AxiosError);\n  }\n}\nfunction afterFetching(\n  reset: boolean,\n  data: { count: number; result: Array<Emission>; sort: string },\n): void {\n  if (reset) {\n    dfirst.value = 0;\n    emissions.value.length = 0;\n  }\n  if (dfirst.value > emissions.value.length) {\n    for (\n      let i = emissions.value.length - 1, len = dfirst.value + dsize.value;\n      i < len;\n      i++\n    ) {\n      emissions.value.push(emptyEmissionData());\n    }\n  }\n  displayCount.value = data.count;\n  const responseEmissions = data.result.filter((e: Emission | null) => {\n    if (null === e) {\n      displayCount.value--;\n    }\n    return null !== e;\n  });\n  emissions.value = emissions.value\n    .slice(0, dfirst.value)\n    .concat(responseEmissions)\n    .concat(\n      emissions.value.slice(dfirst.value + dsize.value, emissions.value.length),\n    );\n  totalCount.value = data.count;\n  loading.value = false;\n}\nasync function fetchRubriques(): Promise<void> {\n  const data = await classicApi.fetchData<Rubriquage>({\n    api: 0,\n    path: \"rubriquage/\" + displayRubriquage.value,\n  });\n  rubriques.value = data.rubriques;\n}\nfunction mainRubriquage(emission: Emission): string {\n  return emission.rubriqueIds?.[0] === state.emissionsPage.mainRubrique\n    ? \"partenaireRubrique\"\n    : \"\";\n}\nfunction rubriquesId(emission: Emission): string | undefined {\n  if (\n    !displayRubriquage.value ||\n    !emission.rubriqueIds ||\n    0 === emission.rubriqueIds.length ||\n    !rubriques.value ||\n    !rubriques.value.length\n  )\n    return undefined;\n  const rubrique = rubriques.value.find(\n    (element: Rubrique) => element.rubriqueId === emission.rubriqueIds[0],\n  );\n  if (!rubrique) {\n    return undefined;\n  }\n  return rubrique.name;\n}\n</script>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0EA,MAAM,eAAe,2BAA2B,OAAO,8BAAqB;EAC5E,MAAM,qBAAqB,2BACnB,OAAO,qCAAA,MAAA,MAAA,EAAA,CAAA,CACf;EAGA,MAAM,QAAQ;EAuBd,MAAM,UAAU,IAAI,IAAI;EACxB,MAAM,SAAS,IAAI,MAAM,KAAK;EAC9B,MAAM,QAAQ,IAAI,MAAM,IAAI;EAC5B,MAAM,aAAa,IAAI,CAAC;EACxB,MAAM,eAAe,IAAI,CAAC;EAC1B,MAAM,WAAW,IAAI,KAAK;EAC1B,MAAM,YAAkC,IAAI,CAAC,CAAC;EAC9C,MAAM,YAA8C,IAAI,KAAA,CAAS;EAGjE,MAAM,EAAE,MAAM,QAAQ;EACtB,MAAM,EAAC,cAAa,gBAAgB;EACpC,MAAM,cAAc,eAAe;EAGnC,MAAM,eAAe,eAAe;GAClC,IAAI,SAAS,OACX,OAAO,UAAU;GAEnB,OAAO,UAAU,MAAM,MACrB,OAAO,OACP,KAAK,IAAI,OAAO,QAAQ,MAAM,OAAO,WAAW,KAAK,CACvD;EACF,CAAC;EACD,MAAM,oBAAoB,eAAe,MAAM,cAAc,UAAU;EACvE,MAAM,iBAAiB,eAAe,GAAG,MAAM,MAAM,GAAG,MAAM,MAAM;;EAEpE,MAAM,UAAU,eAAe;GAC7B,OAAO,GAAG,MAAM,eAAe,GAAG,MAAM,MAAM,GAAG,MAAM,YAAY,GAAG,MAAM,cAAc;IACxF,MAAM,MAAM,GAAG,MAAM,WAAW,GAAG,MAAM,aAAa,GAAG,MAAM,OAAO;IACtE,MAAM,MAAM,GAAG,MAAM,KAAK,GAAG,MAAM,eAAe,GAAG,MAAM,cAAc;IACzE,MAAM;EACV,CAAC;EACD,MAAM,WAAW,eAAe;GAC9B,IAAI,WAAW;GACf,QAAQ,MAAM,MAAd;IACE,KAAK;KACH,WAAW,MAAM,EAAE,eAAe;KAClC;IACF,KAAK;KACH,WAAW,MAAM,EAAE,cAAc;KACjC;IACF,KAAK;KACH,WAAW,MAAM,EAAE,sBAAsB;KACzC;IACF;KACE,WAAW,MAAM,EAAE,cAAc;KACjC;GACJ;GACE,OAAO,SAAS,QAAQ,SAAS,QAAQ;EAC7C,CAAC;EACD,MAAM,eAAe,eAAe,MAAM,iBAAiB,MAAM,iBAAiB,YAAY,YAAY;EAI1G,MAAM,sBAAsB;GAC1B,OAAO,QAAQ,MAAM;GACrB,MAAM,QAAQ,MAAM;EACtB,CAAC;EACD,MAAM,eAAc,aAAa,IAAI,CAAC;EACtC,MAAM,aAAY,aAAa,IAAI,CAAC;EACpC,MAAM,cAAa;GACjB,IACE,CAAC,UAAU,MAAM,OAAO,UACxB,MAAM,UAAU,MAAM,OAAO,OAAO,YAEpC,aAAa,KAAK;EAEtB,CAAC;EAGD,gBAAc;GACZ,aAAa,KAAK;GAClB,IAAI,kBAAkB,OACpB,eAAe;EAEnB,CAAC;EAGD,eAAe,aAAa,OAA+B;GACzD,QAAQ,QAAQ;GAChB,MAAM,QAAoB;IACxB,OAAO,QAAO,IAAG,OAAO;IACxB,MAAM,MAAM;IACZ,OAAO,MAAM;IACb,SAAS,MAAM,gBAAgB,KAAI,MAAK,EAAE,OAAO;IACjD,gBAAgB,aAAa;IAC7B,aAAa,MAAM;IACnB,OAAO,MAAM;IACb,QAAQ,MAAM;IACd,OAAO,MAAM;IACb,MAAM,MAAM;IACZ,gBAAgB,MAAM,eAAe,SACjC,MAAM,iBACN,KAAA;IACJ,YAAY,MAAM,WAAW,SAAS,MAAM,aAAa,KAAA;IACzD,cAAc,MAAM,aAAa,SAAS,MAAM,eAAe,KAAA;IAC/D,eAAe,MAAM;IACrB,aAAa,MAAM,iBAAiB,KAAA;GACtC;GAGA,IAAI,MAAM,kBAAkB,MAC1B,MAAM,UAAU;QAEhB,MAAM,UAAU;GAKlB,IAAI;IAOF,cAAc,OAAO,MANF,mBAAW,UAAuC;KACnE,KAAK;KACL,MAAM;KACN,YAAY;KACZ,mBAAmB;IACrB,CAAC,CACwB;GAC3B,SAAS,OAAO;IACd,UAAU,KAAmB;GAC/B;EACF;EACA,SAAS,cACP,OACA,MACM;GACN,IAAI,OAAO;IACT,OAAO,QAAQ;IACf,UAAU,MAAM,SAAS;GAC3B;GACA,IAAI,OAAO,QAAQ,UAAU,MAAM,QACjC,KACE,IAAI,IAAI,UAAU,MAAM,SAAS,GAAG,MAAM,OAAO,QAAQ,MAAM,OAC/D,IAAI,KACJ,KAEA,UAAU,MAAM,KAAK,kBAAkB,CAAC;GAG5C,aAAa,QAAQ,KAAK;GAC1B,MAAM,oBAAoB,KAAK,OAAO,QAAQ,MAAuB;IACnE,IAAI,SAAS,GACX,aAAa;IAEf,OAAO,SAAS;GAClB,CAAC;GACD,UAAU,QAAQ,UAAU,MACzB,MAAM,GAAG,OAAO,KAAK,EACrB,OAAO,iBAAiB,EACxB,OACC,UAAU,MAAM,MAAM,OAAO,QAAQ,MAAM,OAAO,UAAU,MAAM,MAAM,CAC1E;GACF,WAAW,QAAQ,KAAK;GACxB,QAAQ,QAAQ;EAClB;EACA,eAAe,iBAAgC;GAK7C,UAAU,SAAQ,MAJC,mBAAW,UAAsB;IAClD,KAAK;IACL,MAAM,gBAAgB,kBAAkB;GAC1C,CAAC,GACsB;EACzB;EACA,SAAS,eAAe,UAA4B;GAClD,OAAO,SAAS,cAAc,OAAO,MAAM,cAAc,eACrD,uBACA;EACN;EACA,SAAS,YAAY,UAAwC;GAC3D,IACE,CAAC,kBAAkB,SACnB,CAAC,SAAS,eACV,MAAM,SAAS,YAAY,UAC3B,CAAC,UAAU,SACX,CAAC,UAAU,MAAM,QAEjB,OAAO,KAAA;GACT,MAAM,WAAW,UAAU,MAAM,MAC9B,YAAsB,QAAQ,eAAe,SAAS,YAAY,EACrE;GACA,IAAI,CAAC,UACH;GAEF,OAAO,SAAS;EAClB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CC7QkD,OAAM;;;;CAwBhD,OAAM;;;;qBAxCZ,YAsDe,OAAA,iBAAA;EArDb,IAAG;EACK,OAAO,OAAA;0DAAA,OAAA,SAAM;EACb,iBAAe,OAAA;gEAAA,OAAA,QAAK;EACpB,aAAW,OAAA;6DAAA,OAAA,WAAQ;EAC1B,cAAmB,OAAA,aAAa,OAAA,UAAU,SAAM,IAAe,OAAA,EAAC,oBAAA,EAAA,IAA2B,OAAA,aAAY,CAAA,IAAM,OAAA,WAAmB,KAAA;EAKhI,eAAa,OAAA;EACb,SAAS,OAAA;EACT,gBAAc,OAAA,UAAU,OAAA,EAAC,uBAAA,IAA4B,KAAA;EACrD,qBAAmB;;EAET,MAAI,cAqBP,CAAA,CApBM,OAAA,MAAM,cAAc,cAAA,UAAA,GAAhC,mBAoBM,OApBN,YAoBM,EAAA,UAAA,IAAA,GAnBJ,mBAkBc,UAAA,MAAA,WAjBA,OAAA,eAAL,MAAC;uBADV,YAkBc,OAAA,gBAAA;IAhBX,KAAK,EAAE;IACP,cAAY;IACb,OAAM;;IAGK,SAAO,cASF,CARd,YAQc,wBAAA;KAPX,IAAE;;4BAA4E,EAAE,WAAU;;KAI1F,OAAO,OAAA,EAAC,oBAAA,EAAA,MAA6B,EAAE,KAAI,CAAA;;4BAEhC,CAAA,gBAAA,gBAAT,EAAE,IAAI,GAAA,CAAA,CAAA,CAAA;;;2BAT2C,CAAA,MAA9B,EAAE,cAAA,UAAA,GAA5B,YAAwD,OAAA,iBAAA;;KAAf,UAAU;;;;8CAcvD,mBAeM,OAfN,YAeM,EAAA,UAAA,IAAA,GAVJ,mBASW,UAAA,MAAA,WATW,OAAA,eAAL,MAAC;2DAAwB,EAAE,WAAA,GAAA,CAAA,MAE5B,EAAE,cAAA,UAAA,GADhB,YAOE,OAAA,uBAAA;;IALC,UAAU;IACX,OAAK,eAAA,CAAC,qBACE,OAAA,eAAe,CAAC,CAAA,CAAA;IACvB,eAAa,OAAA;IACb,iBAAe,OAAA,YAAY,CAAC;;;;;;;8BAVxB,OAAA,qBAAqB,OAAA,aAAS,CAAM,OAAA,iBAAiB,CAAA,CAAA,CAAA,CAAA"}