{"version":3,"file":"CrudForm.mjs","names":["makeStyles","Typography","PropTypes","React","useMemo","useState","useCallback","useEffect","Form","FormButtons","SubmitButton","useCrudActions","toLowerFirstChar","useDefaultFormValues","getPathObject","getPrimaryKeyValues","CardinalityTypeEnums","EntityAttributeEnums","UdpEnums","UdpCrudFormFields","usePromotedMethodEntity","executeQueryWithParameters","differenceWith","useHandleAxiosSnackbar","useTranslation","getSanitizedName","TagEnums","useStyles","theme","actions","marginTop","spacing","marginBottom","display","flexDirection","title","flexGrow","subject","marginLeft","switchRoot","input","height","padding","formTextInput","fontSize","labelRoot","CrudForm","props","$","_c","entityAttributes","udpFieldInfos","foreignKeyData","crudTableEditionData","closeSideSheet","onCreate","onUpdate","isNewEntry","entityData","entityName","formApiRef","hideSubmitButton","t0","undefined","renderInputByFieldType","t","t1","map","_temp","fkData","setFkData","data","promotedEntity","udpTagAssocPromotedEntity","defaultFormValues","crudTableFormData","t2","Symbol","for","existingTagAssociation","setExistingTagAssociation","classes","handleErrorSnackbar","t3","primaryKeyValues","t4","pathParameters","unityBaseGetFullMethod","Object","keys","length","apiMethodId","requestBody","response","catch","_temp2","status","console","error","getEntityFull","t5","bb0","t6","mtmPropertyList","Set","forEach","attr","extendedProperties","childEntity","childEntityAssoc","Cardinality","Many_To_Many","Keys","value","i","name","split","add","toLowerCase","manyToManyPropertyList","getJoiningObj","_temp3","schemaAttribute_0","fieldInfo","render","isIdentity","schemaAttribute","identifier","dataType","every","schemaAttribute_1","index","ceAttributes_0","filter","_temp4","ceAttributes","renderAttribute","t7","values","sanitizedName","Udp_Lookup","attributeName","Domain_Name","domainName","modelNameSpaceStructure","namespaceStructure","model","sanitizedName_0","Is_Product_Lookup","TagTypeSanitizedName","User_Defined","Udp_Shortcut_Content","Is_Product_ShortcutContent","transformDataForUdpMaintenance","tagAssociationComparator","_temp5","t8","unityBaseCreateMethod","unityBaseDeleteMethod","values_0","businessObjectKey","tagAssociationToDelete","udpTags","tagAssociationToCreate","deleteTagAssociationApiMethod","createTagAssociationApiMethod","deletedPromises","tagAssocToDelete","data_0","id","push","Promise","all","_temp7","then","responses","warn","createdPromises","tagAssoc","data_1","tagId","entityBusinessKey","_temp9","responses_0","response_0","matchingTagAssociation","find","ta","handleTagAssociation","t9","values_1","newTableData","isNewRow","ea_0","joiningObject","ea","fieldInfo_0","fi","ea_1","fkd_0","key","fkd","fieldName","fkData_0","d","businessObjectKey_0","createdResponse","handleSubmit","t10","schemaAttribute_2","sanitizedName_1","shouldAttributeRenderField","t11","t12","getFullData","fullEntityData","filteredTags","_temp0","t13","t14","_temp1","t15","schemaAttribute_3","index_0","fieldInfo_1","fi_0","isPrimaryKey","disabled","friendlyName","t16","t17","t18","defaultValue","t19","propTypes","array","func","object","bool","res","ceAttr","a","fieldId","test","IsJoiningObject","ta1","ta2","_temp6","e","p","_temp8","e_0","p_0","tagAssoc_0","udpTagAssociationUdpTag","fkd_1"],"sources":["../../../src/UI/forms/CrudForm.jsx"],"sourcesContent":["import { makeStyles, Typography } from '@material-ui/core';\nimport PropTypes from 'prop-types';\nimport React, { useMemo, useState, useCallback, useEffect } from 'react';\nimport { Form, FormButtons, SubmitButton } from '../../utilities/form';\nimport { useCrudActions } from '../../hooks/crudActions';\nimport { toLowerFirstChar } from '../../utilities/input/StringUtilities';\nimport useDefaultFormValues from '../../utilities/crud/useDefaultFormValues';\nimport {\n  getPathObject,\n  getPrimaryKeyValues\n} from '../../utilities/maintenanceEngine/CrudBrowserUtilities';\nimport {\n  CardinalityTypeEnums,\n  EntityAttributeEnums,\n  UdpEnums\n} from '../../enums/unitySystemEnums';\nimport { UdpCrudFormFields } from './UdpCrudFormFields';\nimport { usePromotedMethodEntity } from '../../hooks/usePromotedMethodEntity';\nimport { executeQueryWithParameters } from '../../udp/utilities/methodUtils';\nimport { differenceWith } from 'lodash-es';\nimport { useHandleAxiosSnackbar } from '../../utilities/apiHelpers';\nimport { useTranslation } from 'react-i18next';\nimport { getSanitizedName } from '../../utilities/entities/entityUtilities';\nimport { TagEnums } from '../../enums/tagEnums';\n\nconst useStyles = makeStyles((theme) => ({\n  actions: {\n    marginTop: theme.spacing(2),\n    marginBottom: theme.spacing(2),\n    display: 'flex',\n    flexDirection: 'row'\n  },\n  title: {\n    flexGrow: 1\n  },\n  subject: {\n    marginLeft: theme.spacing(1),\n    display: 'flex',\n    flexDirection: 'row',\n    flexGrow: 1\n  },\n  switchRoot: {\n    marginLeft: theme.spacing(1)\n  },\n  input: {\n    height: 34,\n    padding: 0\n  },\n  formTextInput: {\n    fontSize: 13\n  },\n  labelRoot: {\n    fontSize: 13\n  }\n}));\n\nexport const CrudForm = (props) => {\n  const {\n    entityAttributes,\n    udpFieldInfos,\n    foreignKeyData,\n    crudTableEditionData,\n    closeSideSheet,\n    onCreate,\n    onUpdate,\n    isNewEntry,\n    entityData,\n    entityName,\n    formApiRef,\n    hideSubmitButton = false\n  } = props;\n  const { renderInputByFieldType } = useCrudActions();\n  const { t } = useTranslation();\n\n  const [fkData, setFkData] = useState(\n    foreignKeyData?.map((fkd) => ({ ...fkd }))\n  );\n  const { data: promotedEntity } = usePromotedMethodEntity(entityName);\n  const { data: udpTagAssocPromotedEntity } = usePromotedMethodEntity(\n    'UdpTagAssociation',\n    true\n  );\n  const { defaultFormValues } = useDefaultFormValues(entityAttributes);\n  const [crudTableFormData, setCrudTableFormData] = useState(\n    crudTableEditionData || defaultFormValues\n  );\n  const [existingTagAssociation, setExistingTagAssociation] = useState([]);\n  const classes = useStyles();\n\n  const { handleErrorSnackbar } = useHandleAxiosSnackbar();\n\n  const primaryKeyValues = useMemo(\n    () => getPrimaryKeyValues(entityAttributes, crudTableEditionData),\n    [entityAttributes, crudTableEditionData]\n  );\n\n  const getEntityFull = useCallback(async () => {\n    const pathParameters =\n      promotedEntity?.unityBaseGetFullMethod?.pathParameters;\n    if (\n      !primaryKeyValues ||\n      !Object.keys(primaryKeyValues).length ||\n      !promotedEntity?.unityBaseGetFullMethod?.apiMethodId ||\n      !pathParameters\n    ) {\n      return null;\n    }\n\n    const data = {\n      ...getPathObject(pathParameters, primaryKeyValues),\n      requestBody: {}\n    };\n\n    const response = await executeQueryWithParameters(\n      { data },\n      promotedEntity.unityBaseGetFullMethod.apiMethodId\n    ).catch((res) => {\n      console.error(res);\n    });\n\n    if (response?.status === 200) {\n      return response.data;\n    } else {\n      console.error(\n        `Could not retrieve full data for ${promotedEntity?.entityName}`\n      );\n    }\n    return null;\n  }, [promotedEntity, primaryKeyValues]);\n\n  // we'll need this to determine which property names are used as keys for many-to-many\n  const manyToManyPropertyList = useMemo(() => {\n    if (!entityAttributes?.length) return [];\n    const mtmPropertyList = new Set();\n    entityAttributes.forEach((attr) => {\n      if (attr?.extendedProperties?.childEntity) {\n        // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n        Object.keys(attr.extendedProperties.childEntityAssoc || {}).length &&\n          attr.extendedProperties.childEntityAssoc.Cardinality ===\n          CardinalityTypeEnums.Many_To_Many &&\n          attr.extendedProperties.childEntityAssoc.Keys.forEach((value, i) => {\n            const name = value.split(',')[0];\n            if (name) {\n              // check name string: if 1 word, lowercase. if 2 words, lower first char\n              mtmPropertyList.add(name.toLowerCase());\n            }\n          });\n      }\n    });\n    return mtmPropertyList;\n  }, [entityAttributes]);\n\n  const getJoiningObj = (schemaAttribute, ceAttributes) => {\n    return ceAttributes.find(\n      (ceAttr) =>\n        Object.keys(ceAttr?.extendedProperties?.childEntityAssoc || {})\n          .length &&\n        ceAttr.extendedProperties.childEntityAssoc.Keys.find((a) => {\n          const fieldId = a.split(',')[0];\n          return (\n            (/^[A-Z]*$/.test(fieldId)\n              ? fieldId.toLowerCase()\n              : toLowerFirstChar(fieldId)) ===\n            toLowerFirstChar(schemaAttribute.name)\n          );\n        })\n    );\n  };\n\n  const renderAttribute = useCallback(\n    (schemaAttribute, fieldInfo) => {\n      let render = !fieldInfo?.isIdentity;\n\n      if (\n        schemaAttribute?.extendedProperties?.identifier &&\n        fieldInfo?.dataType === 'Guid'\n      ) {\n        render = false;\n      }\n      entityAttributes.every((schemaAttribute, index) => {\n        const ceAttributes = entityAttributes.filter(\n          (ea) =>\n            ea.extendedProperties.childEntity &&\n            ea.extendedProperties.childEntityAssoc.Cardinality ===\n            CardinalityTypeEnums.Many_To_Many &&\n            ea.extendedProperties.childEntityAssoc.IsJoiningObject\n        );\n\n        if (getJoiningObj(schemaAttribute, ceAttributes)) {\n          render = true;\n          return false;\n        }\n        return true;\n      });\n\n      return render;\n    },\n    [entityAttributes]\n  );\n\n  // function that helps transform form data for entites like UdpLookup, UdpTagType, UdpShortcutContent\n  const transformDataForUdpMaintenance = useCallback(\n    (values) => {\n      const sanitizedName = getSanitizedName(entityName?.toLowerCase());\n      // Current entity to modify is a UdpLookup\n      if (sanitizedName === UdpEnums.Udp_Lookup.toLowerCase()) {\n        const attributeName = toLowerFirstChar(\n          EntityAttributeEnums.Domain_Name\n        );\n        let domainName = values[attributeName];\n        const modelNameSpaceStructure = domainName?.namespaceStructure?.model;\n        const sanitizedName = domainName?.sanitizedName;\n        values[\n          toLowerFirstChar(EntityAttributeEnums.Is_Product_Lookup)\n        ] = false;\n        if (modelNameSpaceStructure) {\n          values[\n            attributeName\n          ] = `${modelNameSpaceStructure}.Models.${sanitizedName}`;\n        } else {\n          values[attributeName] = '';\n        }\n      } else if (\n        sanitizedName === TagEnums.TagTypeSanitizedName.toLowerCase()\n      ) {\n        values[toLowerFirstChar(EntityAttributeEnums.User_Defined)] = true;\n      } else if (\n        sanitizedName === UdpEnums.Udp_Shortcut_Content.toLowerCase()\n      ) {\n        values[\n          toLowerFirstChar(EntityAttributeEnums.Is_Product_ShortcutContent)\n        ] = false;\n      }\n    },\n    [entityName]\n  );\n\n  const tagAssociationComparator = (ta1, ta2) => {\n    return ta1?.id === ta2?.id;\n  };\n\n  // Callback to handle associating tags to business objects\n  const handleTagAssociation = useCallback(\n    async (values, businessObjectKey) => {\n      // Get the tagAssociation objects to delete\n      const tagAssociationToDelete = differenceWith(\n        existingTagAssociation,\n        values?.udpTags,\n        tagAssociationComparator\n      );\n\n      // Get the tagAssociation objects to create\n      const tagAssociationToCreate = differenceWith(\n        values?.udpTags,\n        existingTagAssociation,\n        tagAssociationComparator\n      );\n\n      const deleteTagAssociationApiMethod =\n        udpTagAssocPromotedEntity?.unityBaseDeleteMethod;\n      const createTagAssociationApiMethod =\n        udpTagAssocPromotedEntity?.unityBaseCreateMethod;\n\n      if (businessObjectKey) {\n        if (deleteTagAssociationApiMethod) {\n          const deletedPromises = [];\n          tagAssociationToDelete.forEach((tagAssocToDelete) => {\n            const data = {};\n            data['{tagId}'] = tagAssocToDelete.id;\n            data['{entityBusinessKey}'] = businessObjectKey;\n            deletedPromises.push(\n              executeQueryWithParameters(\n                { data },\n                deleteTagAssociationApiMethod.apiMethodId\n              )\n            );\n          });\n\n          await Promise.all(deletedPromises.map((p) => p.catch((e) => e))).then(\n            (responses) => {\n              if (responses.length !== deletedPromises.length) {\n                console.warn(`Not all Tag Association deleted`);\n              }\n            }\n          );\n        } else {\n          handleErrorSnackbar(\n            null,\n            'Delete Tag Association Method Not Promoted'\n          );\n        }\n\n        if (createTagAssociationApiMethod) {\n          const createdPromises = [];\n          tagAssociationToCreate.forEach((tagAssoc) => {\n            const data = {\n              requestBody: {\n                tagId: tagAssoc.id,\n                entityBusinessKey: businessObjectKey\n              }\n            };\n            createdPromises.push(\n              executeQueryWithParameters(\n                { data },\n                createTagAssociationApiMethod.apiMethodId\n              )\n            );\n          });\n          await Promise.all(createdPromises.map((p) => p.catch((e) => e))).then(\n            (responses) => {\n              responses.forEach((response) => {\n                if (response.status === 200) {\n                  const entityBusinessKey = response.data.entityBusinessKey;\n                  const matchingTagAssociation = tagAssociationToCreate.find(\n                    (ta) => ta.value === entityBusinessKey\n                  );\n                  if (!matchingTagAssociation) {\n                    console.warn(\n                      `Tag Association not created for all file to entities`\n                    );\n                  }\n                }\n              });\n            }\n          );\n          setExistingTagAssociation(values?.udpTags);\n        } else {\n          handleErrorSnackbar(\n            null,\n            'Create Tag Association Method Not Promoted'\n          );\n        }\n      }\n    },\n    [\n      handleErrorSnackbar,\n      existingTagAssociation,\n      setExistingTagAssociation,\n      udpTagAssocPromotedEntity\n    ]\n  );\n\n  const handleSubmit = useCallback(\n    async (values) => {\n      let newTableData = {\n        ...crudTableFormData,\n        ...values\n      };\n\n      transformDataForUdpMaintenance(newTableData);\n\n      const isNewRow = !crudTableEditionData;\n\n      if (!isNewEntry) {\n        // remove identifiers from object\n        entityAttributes\n          .filter((ea) => {\n            const joiningObject = getJoiningObj(ea, entityAttributes);\n            const fieldInfo = udpFieldInfos?.find(\n              (fi) => fi?.name.toLowerCase() === ea?.name?.toLowerCase()\n            );\n            return (\n              ea?.extendedProperties?.identifier &&\n              fieldInfo?.isIdentity &&\n              fieldInfo?.dataType !== 'Guid' &&\n              (!joiningObject || joiningObject.extendedProperties?.childEntity)\n            );\n          })\n          .forEach((ea) => {\n            delete newTableData[ea.name];\n          });\n      }\n\n      // transform values by fkData before creating/updating\n      foreignKeyData?.forEach((fkd) => {\n        Object.keys(newTableData)?.forEach((key) => {\n          if (key === fkd?.fieldName) {\n            const fkData = fkd?.data?.find(\n              (d) => d.id === newTableData[key]?.id\n            )?.id;\n            if (fkData !== null) {\n              newTableData[key] = fkData;\n            }\n          }\n        });\n      });\n\n      let businessObjectKey = '';\n      if (isNewRow) {\n        if (onCreate) {\n          const createdResponse = await onCreate(newTableData);\n          if (createdResponse?.status === 200) {\n            businessObjectKey = createdResponse?.data?.businessObjectKey;\n          }\n        }\n      } else {\n        if (onUpdate) {\n          await onUpdate(newTableData, primaryKeyValues);\n          businessObjectKey = newTableData?.businessObjectKey;\n        }\n      }\n      if (businessObjectKey && values?.udpTags) {\n        handleTagAssociation(values, businessObjectKey);\n      }\n      if(closeSideSheet){\n        closeSideSheet();\n      }\n    },\n    [\n      crudTableFormData,\n      transformDataForUdpMaintenance,\n      crudTableEditionData,\n      isNewEntry,\n      foreignKeyData,\n      closeSideSheet,\n      entityAttributes,\n      onCreate,\n      onUpdate,\n      primaryKeyValues,\n      handleTagAssociation,\n      udpFieldInfos\n    ]\n  );\n\n  const shouldAttributeRenderField = useCallback(\n    (schemaAttribute) => {\n      const sanitizedName = getSanitizedName(entityName?.toLowerCase());\n      if (\n        sanitizedName === TagEnums.TagTypeSanitizedName.toLowerCase() &&\n        schemaAttribute?.name ===\n        toLowerFirstChar(EntityAttributeEnums.User_Defined)\n      ) {\n        return false;\n      } else if (\n        sanitizedName === UdpEnums.Udp_Shortcut_Content.toLowerCase() &&\n        schemaAttribute?.name ===\n        toLowerFirstChar(EntityAttributeEnums.Is_Product_ShortcutContent)\n      ) {\n        return false;\n      } else if (\n        sanitizedName === UdpEnums.Udp_Lookup.toLowerCase() &&\n        schemaAttribute?.name ===\n        toLowerFirstChar(EntityAttributeEnums.Is_Product_Lookup)\n      ) {\n        return false;\n      }\n\n      return true;\n    },\n    [entityName]\n  );\n\n  useEffect(() => {\n    const getFullData = async () => {\n      const fullEntityData = await getEntityFull();\n      if (fullEntityData) {\n        const filteredTags = fullEntityData.udpTags?.map(\n          (tagAssoc) => tagAssoc.udpTagAssociationUdpTag\n        );\n        setExistingTagAssociation(filteredTags || []);\n      }\n    };\n    if (promotedEntity && !isNewEntry) {\n      getFullData();\n    }\n  }, [promotedEntity, getEntityFull, isNewEntry]);\n\n  useEffect(() => {\n    if (foreignKeyData) {\n      setFkData(foreignKeyData?.map((fkd) => ({ ...fkd })));\n    }\n  }, [foreignKeyData]);\n\n  return (\n    <Form onSubmit={handleSubmit}  ref={formApiRef}>\n      <div>\n        {entityAttributes?.map((schemaAttribute, index) => {\n          const fieldInfo = udpFieldInfos?.find(\n            (fi) =>\n              fi?.name.toLowerCase() === schemaAttribute?.name?.toLowerCase()\n          );\n          // If the field is an identity and is Updating form, we will make the field readOnly\n          if (fieldInfo?.isPrimaryKey && !isNewEntry) {\n            schemaAttribute.disabled = true;\n          }\n          if (fieldInfo?.isPrimaryKey && isNewEntry && !fieldInfo?.isIdentity) {\n            schemaAttribute.disabled = false;\n          }\n          if (!shouldAttributeRenderField(schemaAttribute)) {\n            return null;\n          }\n          return (\n            renderAttribute(schemaAttribute, fieldInfo) && (\n              <React.Fragment key={`${schemaAttribute.name}-${index}`}>\n                <Typography variant='subtitle2' style={{ marginTop: 8 }}>\n                  {schemaAttribute.friendlyName}\n                </Typography>\n                {renderInputByFieldType(\n                  schemaAttribute,\n                  index,\n                  entityAttributes,\n                  fieldInfo,\n                  fkData,\n                  setFkData,\n                  crudTableFormData,\n                  classes,\n                  isNewEntry,\n                  entityData,\n                  manyToManyPropertyList\n                )}\n              </React.Fragment>\n            )\n          );\n        })}\n        <UdpCrudFormFields\n          entityName={entityName}\n          formData={crudTableFormData}\n          existingTagAssociation={existingTagAssociation}\n        />\n      </div>\n\n      {!hideSubmitButton && (\n        <FormButtons>\n          <SubmitButton\n            id='udpRecord-CrudForm-Submit'\n            udprecordid='udpRecord-CrudForm-Submit'\n            variant='contained'\n            color='secondary'\n            disablePristine={false}\n            disabled={false}\n            style={{ marginTop: 15 }}\n          >\n            {t('common.save', { defaultValue: 'Save' })}\n          </SubmitButton>\n        </FormButtons>\n      )}\n    </Form>\n  );\n};\n\nCrudForm.propTypes = {\n  /**\n   * Entity attributes for selected entity within catalog\n   */\n  entityAttributes: PropTypes.array,\n  /**\n   * Foreign key data for selected entity within catalog\n   */\n  foreignKeyData: PropTypes.array,\n  /**\n   * Entity data\n   */\n  crudTableEditionData: PropTypes.array,\n  /**\n   * onClick event for closing sidesheet\n   */\n  closeSideSheet: PropTypes.func,\n  /**\n   * onClick event for creating\n   */\n  onCreate: PropTypes.func,\n  /**\n   * onClick event for updating\n   */\n  onUpdate: PropTypes.func,\n  /**\n   * Ref attached to the underlying form, exposing the final-form API\n   * (handleSubmit, submitting, pristine) so a submit button rendered outside\n   * the form — e.g. in a drawer footer slot — can submit it\n   */\n  formApiRef: PropTypes.object,\n  /**\n   * Hides the built-in Save button. Set this when the consumer renders its own\n   * submit control outside the form and drives it via formApiRef\n   */\n  hideSubmitButton: PropTypes.bool\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAyBA,MAAM2B,YAAY3B,YAAY4B,WAAW;CACvCC,SAAS;EACPC,WAAWF,MAAMG,QAAQ,EAAE;EAC3BC,cAAcJ,MAAMG,QAAQ,EAAE;EAC9BE,SAAS;EACTC,eAAe;EAChB;CACDC,OAAO,EACLC,UAAU,GACX;CACDC,SAAS;EACPC,YAAYV,MAAMG,QAAQ,EAAE;EAC5BE,SAAS;EACTC,eAAe;EACfE,UAAU;EACX;CACDG,YAAY,EACVD,YAAYV,MAAMG,QAAQ,EAAC,EAC5B;CACDS,OAAO;EACLC,QAAQ;EACRC,SAAS;EACV;CACDC,eAAe,EACbC,UAAU,IACX;CACDC,WAAW,EACTD,UAAU,IACZ;CACD,EAAE;AAEH,MAAaE,YAAWC,UAAA;CAAA,MAAAC,IAAAC,EAAA,GAAA;CACtB,MAAA,EAAAC,kBAAAC,eAAAC,gBAAAC,sBAAAC,gBAAAC,UAAAC,UAAAC,YAAAC,YAAAC,YAAAC,YAAAC,kBAAAC,OAaIf;CADF,MAAAc,mBAAAC,OAAAC,KAAAA,IAAA,QAAAD;CAEF,MAAA,EAAAE,2BAAmCrD,gBAAgB;CACnD,MAAA,EAAAsD,MAAczC,gBAAgB;CAAC,IAAA0C;AAAA,KAAAlB,EAAA,OAAAI,gBAAA;AAG7Bc,OAAAd,gBAAce,IAAMC,MAAsB;AAAApB,IAAA,KAAAI;AAAAJ,IAAA,KAAAkB;OAAAA,MAAAlB,EAAA;CAD5C,MAAA,CAAAqB,QAAAC,aAA4BjE,SAC1B6D,GACD;CACD,MAAA,EAAAK,MAAAC,mBAAiCpD,wBAAwBuC,WAAW;CACpE,MAAA,EAAAY,MAAAE,8BAA4CrD,wBAC1C,qBACA,KACD;CACD,MAAA,EAAAsD,sBAA8B7D,qBAAqBqC,iBAAiB;CACpE,MAAA,CAAAyB,qBAAkDtE,SAChDgD,wBAAAqB,kBACD;CAAC,IAAAE;AAAA,KAAA5B,EAAA,OAAA6B,OAAAC,IAAA,4BAAA,EAAA;AACmEF,OAAA,EAAE;AAAA5B,IAAA,KAAA4B;OAAAA,MAAA5B,EAAA;CAAvE,MAAA,CAAA+B,wBAAAC,6BAA4D3E,SAASuE,GAAG;CACxE,MAAAK,UAAgBtD,WAAW;CAE3B,MAAA,EAAAuD,wBAAgC3D,wBAAwB;CAAC,IAAA4D;AAAA,KAAAnC,EAAA,OAAAK,wBAAAL,EAAA,OAAAE,kBAAA;AAGjDiC,OAAApE,oBAAoBmC,kBAAkBG,qBAAqB;AAAAL,IAAA,KAAAK;AAAAL,IAAA,KAAAE;AAAAF,IAAA,KAAAmC;OAAAA,MAAAnC,EAAA;CADnE,MAAAoC,mBACQD;CAEN,IAAAE;AAAA,KAAArC,EAAA,OAAAoC,oBAAApC,EAAA,OAAAwB,gBAAA;AAEgCa,OAAA,YAAA;GAChC,MAAAC,iBACEd,gBAAce,wBAAwCD;AACxD,OACE,CAACF,oBAAD,CACCI,OAAMC,KAAML,iBAAiB,CAAAM,UAD9B,CAEClB,gBAAce,wBAAqCI,eAFpD,CAGCL,eAAc,QAER;GAQT,MAAAO,WAAiB,MAAMxE,2BACrB,EAAAkD,MANW;IAAA,GACRzD,cAAcwE,gBAAgBF,iBAAiB;IAAAQ,aACrC,EAAC;IACf,EAGS,EACRpB,eAAce,uBAAuBI,YACtC,CAAAG,MAAOC,OAEN;AAEF,OAAIF,UAAQG,WAAa,IAAG,QACnBH,SAAQtB;OAEf0B,SAAOC,MACL,oCAAoC1B,gBAAcb,aACnD;AACF,UACM;;AACRX,IAAA,KAAAoC;AAAApC,IAAA,KAAAwB;AAAAxB,IAAA,KAAAqC;OAAAA,MAAArC,EAAA;CAhCD,MAAAmD,gBAAsBd;CAgCiB,IAAAe;AAAAC,MAAA;AAIrC,MAAI,CAACnD,kBAAgBwC,QAAQ;GAAA,IAAAY;AAAA,OAAAtD,EAAA,OAAA6B,OAAAC,IAAA,4BAAA,EAAA;AAASwB,SAAA,EAAE;AAAAtD,MAAA,KAAAsD;SAAAA,MAAAtD,EAAA;AAAToD,QAAOE;AAAP,SAAAD;;EAAU,IAAAE;AAAA,MAAAvD,EAAA,QAAAE,kBAAA;AACzCqD,qCAAwB,IAAIC,KAAK;AACjCtD,oBAAgBuD,SAASC,SAAA;AACvB,QAAIA,MAAIC,oBAAiCC,YAEvCpB,QAAMC,KAAMiB,KAAIC,mBAAmBE,oBAAvB,EAA8C,CAAC,CAAAnB,UACzDgB,KAAIC,mBAAmBE,iBAAiBC,gBACxC9F,qBAAoB+F,gBACpBL,KAAIC,mBAAmBE,iBAAiBG,KAAKP,SAASQ,OAAAC,MAAA;KACpD,MAAAC,OAAaF,MAAKG,MAAO,IAAI,CAAA;AAC7B,SAAID,KAEFZ,iBAAec,IAAKF,KAAIG,aAAc,CAAC;MAEzC;KAEN;AAAAtE,KAAA,MAAAE;AAAAF,KAAA,MAAAuD;QAAAA,mBAAAvD,EAAA;AACFoD,OAAOG;;CAlBT,MAAAgB,yBAA+BnB;CAqB/B,MAAAoB,gBAAsBC;CAepB,IAAAnB;AAAA,KAAAtD,EAAA,QAAAE,kBAAA;AAGAoD,QAAAoB,mBAAAC,cAAA;GACE,IAAAC,SAAa,CAACD,WAASE;AAEvB,OACEC,mBAAenB,oBAAgCoB,cAC/CJ,WAASK,aAAe,OAExBJ,UAASA;AAEX1E,oBAAgB+E,OAAOC,mBAAAC,UAAA;AASrB,QAAIX,cAAcM,mBARG5E,iBAAgBmF,OACnCC,OAKD,CAE+C,EAAA;AAC9CV,cAASA;AAAH,YACC;;AACR,WACM;KACP;AAAA,UAEKA;;AACR5E,IAAA,MAAAE;AAAAF,IAAA,MAAAsD;OAAAA,MAAAtD,EAAA;CA3BH,MAAAwF,kBAAwBlC;CA6BtB,IAAAmC;AAAA,KAAAzF,EAAA,QAAAW,YAAA;AAIA8E,QAAAC,WAAA;GACE,MAAAC,gBAAsBlH,iBAAiBkC,YAAU2D,aAAe,CAAC;AAEjE,OAAIqB,kBAAkBzH,SAAQ0H,WAAWtB,aAAc,EAAA;IACrD,MAAAuB,gBAAsBjI,iBACpBK,qBAAoB6H,YACrB;IACD,MAAAC,aAAiBL,OAAOG;IACxB,MAAAG,0BAAgCD,YAAUE,oBAA2BC;IACrE,MAAAC,kBAAsBJ,YAAUJ;AAChCD,WACE9H,iBAAiBK,qBAAoBmI,kBAAmB,IACtD;AACJ,QAAIJ,wBACFN,QACEG,iBACE,GAAGG,wBAAuB,UAAWL;QAEzCD,QAAOG,iBAAiB;cAG1BF,kBAAkBjH,SAAQ2H,qBAAqB/B,aAAc,CAE7DoB,QAAO9H,iBAAiBK,qBAAoBqI,aAAc,IAAI;YAE9DX,kBAAkBzH,SAAQqI,qBAAqBjC,aAAc,CAE7DoB,QACE9H,iBAAiBK,qBAAoBuI,2BAA4B,IAC/D;;AAEPxG,IAAA,MAAAW;AAAAX,IAAA,MAAAyF;OAAAA,MAAAzF,EAAA;CAhCH,MAAAyG,iCAAuChB;CAoCvC,MAAAiB,2BAAiCC;CAE/B,IAAAC;AAAA,KAAA5G,EAAA,QAAA+B,0BAAA/B,EAAA,QAAAkC,uBAAAlC,EAAA,QAAAyB,2BAAAoF,yBAAA7G,EAAA,QAAAyB,2BAAAqF,uBAAA;AAIAF,OAAA,OAAAG,UAAAC,sBAAA;GAEE,MAAAC,yBAA+B3I,eAC7ByD,wBACA2D,UAAMwB,SACNR,yBACD;GAGD,MAAAS,yBAA+B7I,eAC7BoH,UAAMwB,SACNnF,wBACA2E,yBACD;GAED,MAAAU,gCACE3F,2BAAyBqF;GAC3B,MAAAO,gCACE5F,2BAAyBoF;AAE3B,OAAIG,mBAAiB;AACnB,QAAII,+BAA6B;KAC/B,MAAAE,kBAAwB,EAAE;AAC1BL,4BAAsBxD,SAAS8D,qBAAA;MAC7B,MAAAC,SAAa,EAAE;AACfjG,aAAK,aAAagG,iBAAgBE;AAClClG,aAAK,yBAAyByF;AAC9BM,sBAAeI,KACbrJ,2BACE,EAAAkD,MAAEA,QAAM,EACR6F,8BAA6BzE,YAEjC,CAAC;OACD;AAEF,WAAMgF,QAAOC,IAAKN,gBAAenG,IAAK0G,OAAyB,CAAC,CAAAC,MAC9DC,cAAA;AACE,UAAIA,UAASrF,WAAY4E,gBAAe5E,OACtCO,SAAO+E,KAAM,kCAAkC;OAGpD;UAED9F,qBACE,MACA,6CACD;AAGH,QAAImF,+BAA6B;KAC/B,MAAAY,kBAAwB,EAAE;AAC1Bd,4BAAsB1D,SAASyE,aAAA;MAC7B,MAAAC,SAAa,EAAAvF,aACE;OAAAwF,OACJF,SAAQT;OAAGY,mBACCrB;OACrB,EACD;AACDiB,sBAAeP,KACbrJ,2BACE,EAAAkD,MAAEA,QAAM,EACR8F,8BAA6B1E,YAEjC,CAAC;OACD;AACF,WAAMgF,QAAOC,IAAKK,gBAAe9G,IAAKmH,OAAyB,CAAC,CAAAR,MAC9DS,gBAAA;AACER,kBAAStE,SAAS+E,eAAA;AAChB,WAAI3F,WAAQG,WAAY,KAAG;QACzB,MAAAqF,oBAA0BxF,WAAQtB,KAAK8G;AAIvC,YAAI,CAH2BlB,uBAAsBuB,MACnDC,OAAQA,GAAE1E,UAAWoE,kBACtB,CAECpF,SAAO+E,KACL,uDACD;;QAGL;OAEL;AACDhG,+BAA0B0D,UAAMwB,QAAU;UAE1ChF,qBACE,MACA,6CACD;;;AAGNlC,IAAA,MAAA+B;AAAA/B,IAAA,MAAAkC;AAAAlC,IAAA,MAAAyB,2BAAAoF;AAAA7G,IAAA,MAAAyB,2BAAAqF;AAAA9G,IAAA,MAAA4G;OAAAA,MAAA5G,EAAA;CA3FH,MAAA4I,uBAA6BhC;CAkG3B,IAAAiC;AAAA,KAAA7I,EAAA,QAAAM,kBAAAN,EAAA,QAAAK,wBAAAL,EAAA,QAAA2B,qBAAA3B,EAAA,QAAAE,oBAAAF,EAAA,QAAAI,kBAAAJ,EAAA,QAAA4I,wBAAA5I,EAAA,QAAAS,cAAAT,EAAA,QAAAO,YAAAP,EAAA,QAAAQ,YAAAR,EAAA,QAAAoC,oBAAApC,EAAA,QAAAyG,kCAAAzG,EAAA,QAAAG,eAAA;AAGA0I,OAAA,OAAAC,aAAA;GACE,MAAAC,eAAmB;IAAA,GACdpH;IAAiB,GACjB+D;IACJ;AAEDe,kCAA+BsC,aAAa;GAE5C,MAAAC,WAAiB,CAAC3I;AAElB,OAAI,CAACI,WAEHP,kBAAgBmF,QACN4D,SAAA;IACN,MAAAC,gBAAsB1E,cAAc2E,MAAIjJ,iBAAiB;IACzD,MAAAkJ,cAAkBjJ,eAAauI,MAC7BW,OAAQA,IAAElF,KAAkBG,aAAE,KAAK6E,MAAEhF,MAAmBG,aAC1D,CAAC;AAAC,WAEA6E,MAAExF,oBAAgCoB,cAClCJ,aAASE,cACTF,aAASK,aAAe,WACvB,CAACkE,iBAAiBA,cAAavF,oBAAgCC;KAElE,CAAAH,SACO6F,SAAA;AACP,WAAOP,aAAaI,KAAEhF;KACtB;AAIN/D,mBAAcqD,SAAU8F,UAAA;AACtB/G,WAAMC,KAAMsG,aAAsB,EAAAtF,SAAC+F,QAAA;AACjC,SAAIA,QAAQC,OAAGC,WAAW;MACxB,MAAAC,WAAeF,OAAGlI,MAAYmH,MAC5BkB,MAAOA,EAACnC,OAAQsB,aAAaS,MAAQ/B,GAClC,EAAAA;AACL,UAAIpG,aAAW,KACb0H,cAAaS,OAAOnI;;MAGxB;KACF;GAEF,IAAAwI,sBAAwB;AACxB,OAAIb;QACEzI,UAAQ;KACV,MAAAuJ,kBAAwB,MAAMvJ,SAASwI,aAAa;AACpD,SAAIe,iBAAe9G,WAAa,IAC9BgE,uBAAoB8C,iBAAevI,MAAyByF;;cAI5DxG,UAAQ;AACV,UAAMA,SAASuI,cAAc3G,iBAAiB;AAC9C4E,0BAAoB+B,cAAY/B;;AAGpC,OAAI6C,uBAAqBnE,UAAMwB,QAC7B0B,sBAAqBlD,UAAQsB,oBAAkB;AAEjD,OAAG1G,eACDA,iBAAgB;;AAEnBN,IAAA,MAAAM;AAAAN,IAAA,MAAAK;AAAAL,IAAA,MAAA2B;AAAA3B,IAAA,MAAAE;AAAAF,IAAA,MAAAI;AAAAJ,IAAA,MAAA4I;AAAA5I,IAAA,MAAAS;AAAAT,IAAA,MAAAO;AAAAP,IAAA,MAAAQ;AAAAR,IAAA,MAAAoC;AAAApC,IAAA,MAAAyG;AAAAzG,IAAA,MAAAG;AAAAH,IAAA,MAAA6I;OAAAA,MAAA7I,EAAA;CAjEH,MAAA+J,eAAqBlB;CAgFnB,IAAAmB;AAAA,KAAAhK,EAAA,QAAAW,YAAA;AAGAqJ,SAAAC,sBAAA;GACE,MAAAC,kBAAsBzL,iBAAiBkC,YAAU2D,aAAe,CAAC;AACjE,OACEqB,oBAAkBjH,SAAQ2H,qBAAqB/B,aAEI,IADnDQ,mBAAeX,SACfvG,iBAAiBK,qBAAoBqI,aAAc,CAAA,QAE5C;YAEPX,oBAAkBzH,SAAQqI,qBAAqBjC,aAEkB,IADjEQ,mBAAeX,SACfvG,iBAAiBK,qBAAoBuI,2BAA4B,CAAA,QAE1D;YAEPb,oBAAkBzH,SAAQ0H,WAAWtB,aAEmB,IADxDQ,mBAAeX,SACfvG,iBAAiBK,qBAAoBmI,kBAAmB,CAAA,QAEjD;AACR,UAEM;;AACRpG,IAAA,MAAAW;AAAAX,IAAA,MAAAgK;OAAAA,OAAAhK,EAAA;CAxBH,MAAAmK,6BAAmCH;CA0BjC,IAAAI;CAAA,IAAAC;AAAA,KAAArK,EAAA,QAAAmD,iBAAAnD,EAAA,QAAAS,cAAAT,EAAA,QAAAwB,gBAAA;AAEQ4I,cAAA;GACR,MAAAE,cAAoB,YAAA;IAClB,MAAAC,iBAAuB,MAAMpH,eAAe;AAC5C,QAAIoH,gBAAc;KAChB,MAAAC,eAAqBD,eAAcrD,SAAa/F,IAC9CsJ,OACD;AACDzI,+BAA0BwI,gBAAA,EAAkB,CAAC;;;AAGjD,OAAIhJ,kBAAA,CAAmBf,WACrB6J,cAAa;;AAEdD,QAAA;GAAC7I;GAAgB2B;GAAe1C;GAAW;AAAAT,IAAA,MAAAmD;AAAAnD,IAAA,MAAAS;AAAAT,IAAA,MAAAwB;AAAAxB,IAAA,MAAAoK;AAAApK,IAAA,MAAAqK;QAAA;AAAAD,QAAApK,EAAA;AAAAqK,QAAArK,EAAA;;AAb9CzC,WAAU6M,KAaPC,IAA4C;CAAA,IAAAK;CAAA,IAAAC;AAAA,KAAA3K,EAAA,QAAAI,gBAAA;AAErCsK,cAAA;AACR,OAAItK,eACFkB,WAAUlB,gBAAce,IAAMyJ,OAAsB,CAAC;;AAEtDD,QAAA,CAACvK,eAAe;AAAAJ,IAAA,MAAAI;AAAAJ,IAAA,MAAA0K;AAAA1K,IAAA,MAAA2K;QAAA;AAAAD,QAAA1K,EAAA;AAAA2K,QAAA3K,EAAA;;AAJnBzC,WAAUmN,KAIPC,IAAiB;CAAA,IAAAE;AAAA,KAAA7K,EAAA,QAAAiC,WAAAjC,EAAA,QAAA2B,qBAAA3B,EAAA,QAAAE,oBAAAF,EAAA,QAAAU,cAAAV,EAAA,QAAAqB,UAAArB,EAAA,QAAAS,cAAAT,EAAA,QAAAuE,0BAAAvE,EAAA,QAAAwF,mBAAAxF,EAAA,QAAAgB,0BAAAhB,EAAA,QAAAmK,8BAAAnK,EAAA,QAAAG,eAAA;AAKb0K,QAAA3K,kBAAgBiB,KAAM2J,mBAAAC,YAAA;GACrB,MAAAC,cAAkB7K,eAAauI,MAC7BuC,SACE5B,MAAElF,KAAkBG,aAAE,KAAKQ,mBAAeX,MAAmBG,aACjE,CAAC;AAED,OAAIK,aAASuG,gBAAT,CAA4BzK,WAC9BqE,mBAAeqG,WAAY;AAE7B,OAAIxG,aAASuG,gBAATzK,cAAA,CAA0CkE,aAASE,WACrDC,mBAAeqG,WAAY;AAE7B,OAAI,CAAChB,2BAA2BrF,kBAAgB,CAAA,QACvC;AACR,UAECU,gBAAgBV,mBAAiBH,YAmBhC,IAlBC,sBAAA,cAAA,MAAA,UAAA,EAAqB,KAAA,GAAGG,kBAAeX,KAAK,GAAIgB,WAkBjD,EAjBG,sBAAA,cAAC,YAAD;IAAoB,SAAA;IAAmB,OAAA,EAAArG,WAAa,GAAE;IAGrD,EAFEgG,kBAAesG,aAEjB,EAAApK,uBACC8D,mBACAK,SACAjF,kBACAyE,aACAtD,QACAC,WACAK,mBACAM,SACAxB,YACAC,YACA6D,uBACF,CAEH;IAEH;AAAAvE,IAAA,MAAAiC;AAAAjC,IAAA,MAAA2B;AAAA3B,IAAA,MAAAE;AAAAF,IAAA,MAAAU;AAAAV,IAAA,MAAAqB;AAAArB,IAAA,MAAAS;AAAAT,IAAA,MAAAuE;AAAAvE,IAAA,MAAAwF;AAAAxF,IAAA,MAAAgB;AAAAhB,IAAA,MAAAmK;AAAAnK,IAAA,MAAAG;AAAAH,IAAA,MAAA6K;OAAAA,OAAA7K,EAAA;CAAA,IAAAqL;AAAA,KAAArL,EAAA,QAAA2B,qBAAA3B,EAAA,QAAAW,cAAAX,EAAA,QAAA+B,wBAAA;AACFsJ,QAAA,sBAAA,cAAC,mBAAD;GACc1K;GACFgB,UAAAA;GACcI;GACxB,CAAA;AAAA/B,IAAA,MAAA2B;AAAA3B,IAAA,MAAAW;AAAAX,IAAA,MAAA+B;AAAA/B,IAAA,MAAAqL;OAAAA,OAAArL,EAAA;CAAA,IAAAsL;AAAA,KAAAtL,EAAA,QAAA6K,OAAA7K,EAAA,QAAAqL,KAAA;AA3CJC,QAAA,sBAAA,cAAA,OAAA,MACGT,KAsCDQ,IAKI;AAAArL,IAAA,MAAA6K;AAAA7K,IAAA,MAAAqL;AAAArL,IAAA,MAAAsL;OAAAA,OAAAtL,EAAA;CAAA,IAAAuL;AAAA,KAAAvL,EAAA,QAAAa,oBAAAb,EAAA,QAAAiB,GAAA;AAELsK,QAAA,CAAC1K,oBACA,sBAAA,cAAC,aAAA,MACC,sBAAA,cAAC,cAAD;GACK,IAAA;GACS,aAAA;GACJ,SAAA;GACF,OAAA;GACW,iBAAA;GACP,UAAA;GACH,OAAA,EAAA/B,WAAa,IAAG;GAI3B,EAFKmC,EAAE,eAAe,EAAAuK,cAAgB,QAAQ,CAAA,CAE9C,CACD;AAAAxL,IAAA,MAAAa;AAAAb,IAAA,MAAAiB;AAAAjB,IAAA,MAAAuL;OAAAA,OAAAvL,EAAA;CAAA,IAAAyL;AAAA,KAAAzL,EAAA,QAAAY,cAAAZ,EAAA,QAAA+J,gBAAA/J,EAAA,QAAAsL,OAAAtL,EAAA,QAAAuL,KAAA;AA7DHE,QAAA,sBAAA,cAAC,MAAD;GAAgB1B,UAAAA;GAAoBnJ,KAAAA;GA8D7B,EA7DL0K,KA8CCC,IAeI;AAAAvL,IAAA,MAAAY;AAAAZ,IAAA,MAAA+J;AAAA/J,IAAA,MAAAsL;AAAAtL,IAAA,MAAAuL;AAAAvL,IAAA,MAAAyL;OAAAA,OAAAzL,EAAA;AAAA,QA9DPyL;;AAkEJ3L,SAAS4L,YAAY;CAInBxL,kBAAkBhD,UAAUyO;CAI5BvL,gBAAgBlD,UAAUyO;CAI1BtL,sBAAsBnD,UAAUyO;CAIhCrL,gBAAgBpD,UAAU0O;CAI1BrL,UAAUrD,UAAU0O;CAIpBpL,UAAUtD,UAAU0O;CAMpBhL,YAAY1D,UAAU2O;CAKtBhL,kBAAkB3D,UAAU4O;CAC7B;AAxgBuB,SAAA1K,MAAAqI,KAAA;AAAA,QAmBU,EAAA,GAAKA,KAAK;;AAnBpB,SAAA1G,OAAAgJ,KAAA;AA6DlB9I,SAAOC,MAAO6I,IAAI;;AA7DA,SAAAtH,OAAAK,iBAAAS,cAAA;AAAA,QAiGbA,aAAYmD,MACjBsD,WACExJ,OAAMC,KAAMuJ,QAAMrI,oBAAsCE,oBAA5C,EAAkD,CAAC,CAAAnB,UAE/DsJ,OAAMrI,mBAAmBE,iBAAiBG,KAAK0E,MAAMuD,MAAA;EACnD,MAAAC,UAAgBD,EAAC7H,MAAO,IAAI,CAAA;AAAI,UAE7B,WAAU+H,KAAMD,QAEY,GADzBA,QAAO5H,aACkB,GAAzB1G,iBAAiBsO,QAAQ,MAC7BtO,iBAAiBkH,gBAAeX,KAAM;GAG9C,CAAC;;AA9GmB,SAAAmB,OAAA6D,IAAA;AAAA,QA8HZA,GAAExF,mBAAmBC,eACrBuF,GAAExF,mBAAmBE,iBAAiBC,gBACtC9F,qBAAoB+F,gBACpBoF,GAAExF,mBAAmBE,iBAAiBuI;;AAjI1B,SAAAzF,OAAA0F,KAAAC,KAAA;AAAA,QAsLbD,KAAG5E,OAAS6E,KAAG7E;;AAtLF,SAAA8E,OAAAC,GAAA;AAAA,QA8N8CA;;AA9N9C,SAAA3E,OAAA4E,GAAA;AAAA,QA8N+BA,EAAC3J,MAAOyJ,OAAS;;AA9NhD,SAAAG,OAAAC,KAAA;AAAA,QA4P8CH;;AA5P9C,SAAAlE,OAAAsE,KAAA;AAAA,QA4P+BH,IAAC3J,MAAO4J,OAAS;;AA5PhD,SAAAjC,OAAAoC,YAAA;AAAA,QAiZA3E,WAAQ4E;;AAjZR,SAAAlC,OAAAmC,OAAA;AAAA,QA6ZsB,EAAA,GAAKtD,OAAK"}